Reputation: 1455
I am trying to build a linux application that uses the ICU. While the ICU library is generally available on most linux distros, I have recently learned it is generally not binary compatible between versions. I think the easiest path forward will be to deploy the ICU with my application so all dependencies are satisfied upon installation.
My question is how can I do this with CMake? I tried the following:
find_library(ICUIL18N_LIB icui18n )
find_library(ICUUC_LIB icuuc)
find_library(ICUDATA_LIB icudata)
#link pthread and ICU against the library
target_link_libraries(MyApp pthread rt ${ICUIL18N_LIB} ${ICUUC_LIB})
install(FILES ${ICUIL18N_LIB} ${ICUUC_LIB} ${ICUDATA_LIB}
DESTINATION lib)
This appears to work, however when I examine my generated package I end up with my application expecting these libraries:
libicui18n.so.50 => /lib/libicui18n.so.50 (0xf74ee000)
libicuuc.so.50 => /lib/libicuuc.so.50 (0xf737b000)
But the files included in my packages are just symlinks with names that don't even match:
/lib/libicui18n.so -> libicui18n.so.50.1.2
/lib/libicuuc.so -> libicuuc.so.50.1.2
/lib/libicudata.so -> libicudata.so.50.1.2
Is there a way for me to get the actual fully-linked paths from my target via cmake so I can install the right files?
Is there a different mechanism I should use for this? I did see the 'BundleUtilities' plugin, but instructions are not clear and I'm not sure it is applicable to this situation.
Upvotes: 0
Views: 1898
Reputation: 1455
I ended up directly 'finding' the ICU symlinks and actual library files, then installing them. Not very elegant, but worked for my purposes. Unfortunately this will require a modification anytime I change ICU versions.
set(ICU_MAJOR_VER "57")
set(ICU_FULL_VERSION "${ICU_MAJOR_VER}.1")
find_library(ICUIL18N_LIB libicui18n.so.${ICU_FULL_VERSION} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
find_library(ICUUC_LIB libicuuc.so.${ICU_FULL_VERSION} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
find_library(ICUDATA_LIB libicudata.so.${ICU_FULL_VERSION} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
find_library(ICUIL18N_MAJOR_LIB libicui18n.so.${ICU_MAJOR_VER} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
find_library(ICUUC_MAJOR_LIB libicuuc.so.${ICU_MAJOR_VER} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
find_library(ICUDATA_MAJOR_LIB libicudata.so.${ICU_MAJOR_VER} PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/ NO_DEFAULT_PATH)
install(FILES ${ICUIL18N_LIB} ${ICUUC_LIB} ${ICUDATA_LIB}
${ICUIL18N_MAJOR_LIB} ${ICUUC_MAJOR_LIB} ${ICUDATA_MAJOR_LIB}
DESTINATION lib)
Upvotes: 1