PengZheng commented on code in PR #620:
URL: https://github.com/apache/celix/pull/620#discussion_r1304161309
##########
cmake/Modules/FindRapidJSON.cmake:
##########
@@ -28,8 +28,8 @@ find_package_handle_standard_args(RapidJSON DEFAULT_MSG
mark_as_advanced(RapidJSON_INCLUDE_DIR)
-if(RapidJSON_FOUND AND NOT TARGET RapidJSON::RapidJSON)
- add_library(RapidJSON::RapidJSON INTERFACE IMPORTED)
- set_target_properties(RapidJSON::RapidJSON PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
+if(RapidJSON_FOUND AND NOT TARGET rapidjson)
+ add_library(rapidjson INTERFACE IMPORTED)
+ set_target_properties(rapidjson PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
"${RapidJSON_INCLUDE_DIRS}")
Review Comment:
> The reason is that downstream Apache Celix containers need to link against
rapidjson to ensure a functional C++ Remote Services. This requirement also
applies to ZerMQ and czmq, but then for PubSub ZMQ usage.
Fortunately, all these targets (zmq/czmq/libzip/rapidjson) need not to be
specified explicitly by our downstream users, since they are all linked
privately by their users, for exmaple `RsaConfiguredDiscovery`. For a container
containing `RsaConfiguredDiscovery`, e.g. `RemoteCalculatorConsumer`, there is
no need to refer to rapidjson/RapidJSON::RapidJSON directly. All needed
information is encoded in `DT_NEEDED` tag, the dynamic loader will find them
automatically provided the needed library is in the canonical search path.
I have removed many such unnecessary extra linkages in tests in the past two
years. They were needed because we have no BUILD_RPATH in the past. When they
are installed, even without BUILD_RPATH, our user will encounter no issue,
since Conan setup LD_LIBRARY_PATH to containing all dependencies (direct and
indirect).
> I believe this issue could be addressed with an additional alias:
add_library(RapidJSON::RapidJSON ALIAS rapidjson)
Our user may have encounter the same issue we had before, and resort to
explicit linking as we did before.
So I will add these alias in find modules to avoid breaking these usage.
There is indeed a interesting corner case: Conan does not describe CMake
private linkage well enough, we have the following workaround in Celix:
```
# the following is workaround
https://github.com/conan-io/conan/issues/7192
if self.settings.os == "Linux":
cmake.definitions["CMAKE_EXE_LINKER_FLAGS"] =
"-Wl,--unresolved-symbols=ignore-in-shared-libs"
elif self.settings.os == "Macos":
cmake.definitions["CMAKE_EXE_LINKER_FLAGS"] = "-Wl,-undefined
-Wl,dynamic_lookup"
```
Note that the above is to avoid build time linker error, there is nothing
wrong at run time (all information is encoded in DT_NEEDED correctly).
For more on this, see https://github.com/conan-io/conan/issues/13302
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]