CMakeLists.txt 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. ################################################################################
  2. # HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. ################################################################################
  16. PROJECT(lib2
  17. VERSION ${HPCC_MAJOR}.${HPCC_MINOR}.${HPCC_POINT}.${HPCC_SEQUENCE}
  18. )
  19. if (APPLE)
  20. if ("${BOOST_REGEX_LIBRARIES}" STREQUAL "Boost::regex")
  21. set(DYLIBS "${Boost_REGEX_LIBRARY_RELEASE}")
  22. else()
  23. set(DYLIBS "${BOOST_REGEX_LIBRARIES}")
  24. endif()
  25. list(APPEND DYLIBS ${ICU_LIBRARIES})
  26. list(APPEND DYLIBS ${XALAN_LIBRARIES})
  27. list(APPEND DYLIBS ${XERCES_LIBRARIES})
  28. list(APPEND DYLIBS ${BINUTILS_LIBRARIES})
  29. list(APPEND DYLIBS ${OPENSSL_LIBRARIES})
  30. list(APPEND DYLIBS ${ZLIB_LIBRARIES})
  31. list(APPEND DYLIBS ${LIBXML2_LIBRARIES})
  32. list(APPEND DYLIBS ${CBLAS_LIBRARIES})
  33. list(APPEND DYLIBS ${CBLAS_DEPS_LIBS})
  34. elseif (WIN32)
  35. #TODO: Should find these dlls not assume them.
  36. if (NOT USE_NATIVE_LIBRARIES)
  37. set (BOOST_REGEX_BIN "${BOOST_REGEX_LIBRARY_DIR}/${boost_regex_lib}")
  38. endif (NOT USE_NATIVE_LIBRARIES)
  39. if (USE_NATIVE_LIBRARIES)
  40. if ("${BOOST_REGEX_LIBRARIES}" STREQUAL "Boost::regex")
  41. set(DYLIBS "${Boost_REGEX_LIBRARY_RELEASE}")
  42. else()
  43. set(DYLIBS "${BOOST_REGEX_LIBRARIES}")
  44. endif()
  45. list(APPEND DYLIBS ${ICU_LIBRARIES})
  46. list(APPEND DYLIBS ${XALAN_LIBRARIES})
  47. list(APPEND DYLIBS ${XERCES_LIBRARIES})
  48. list(APPEND DYLIBS ${BINUTILS_LIBRARIES})
  49. list(APPEND DYLIBS ${OPENSSL_LIBRARIES})
  50. list(APPEND DYLIBS ${ZLIB_LIBRARIES})
  51. list(APPEND DYLIBS ${LIBXML2_LIBRARIES})
  52. list(APPEND DYLIBS ${CBLAS_LIBRARIES})
  53. list(APPEND DYLIBS ${CBLAS_DEPS_LIBS})
  54. else ()
  55. if (${ARCH64BIT} EQUAL 1)
  56. find_file (ICU_DT_BIN NAMES "icudt57.dll" "icudt67.dll" PATHS "${EXTERNALS_DIRECTORY}/icu/bin64" NO_DEFAULT_PATH)
  57. find_file (ICU_IN_BIN NAMES "icuin57.dll" "icuin67.dll" PATHS "${EXTERNALS_DIRECTORY}/icu/bin64" NO_DEFAULT_PATH)
  58. find_file (ICU_UC_BIN NAMES "icuuc57.dll" "icuuc67.dll" PATHS "${EXTERNALS_DIRECTORY}/icu/bin64" NO_DEFAULT_PATH)
  59. set (LIB_CRYPTO_DLL "libcrypto-1_1-x64.dll")
  60. find_file (OPENSSL_LIB_BIN "${LIB_CRYPTO_DLL}" "${EXTERNALS_DIRECTORY}/openssl/1.1/win64/lib" NO_DEFAULT_PATH)
  61. set (LIB_SSL_DLL "libssl-1_1-x64.dll")
  62. find_file (OPENSSL_SSL_BIN "${LIB_SSL_DLL}" "${EXTERNALS_DIRECTORY}/openssl/1.1/win64/lib" NO_DEFAULT_PATH)
  63. find_file (XALAN_C_BIN "Xalan-C_1_11.dll" "${EXTERNALS_DIRECTORY}/xalan/xalan-c/win64/bin" NO_DEFAULT_PATH)
  64. find_file (XALAN_MESSAGES_BIN "XalanMessages_1_11.dll" "${EXTERNALS_DIRECTORY}/xalan/xalan-c/win64/bin" NO_DEFAULT_PATH)
  65. find_file (XERCES_C_BIN "xerces-c_3_1.dll" "${EXTERNALS_DIRECTORY}/xalan/xerces-c/win64/bin" NO_DEFAULT_PATH)
  66. find_file (ZLIB_BIN "zlib.dll" "${EXTERNALS_DIRECTORY}/zlib/1.2.8/lib/Win64" NO_DEFAULT_PATH)
  67. else()
  68. find_file (ICU_DT_BIN NAMES "icudt57.dll" "icudt67.dll" PATHS "${EXTERNALS_DIRECTORY}/icu/bin" NO_DEFAULT_PATH)
  69. find_file (ICU_IN_BIN NAMES "icuin57.dll" "icuin67.dll" PATHS "${EXTERNALS_DIRECTORY}/icu/bin" NO_DEFAULT_PATH)
  70. find_file (ICU_UC_BIN NAMES "icuuc57.dll" "icuuc67.dll" PATHS "${EXTERNALS_DIRECTORY}/icu/bin" NO_DEFAULT_PATH)
  71. set (LIB_CRYPTO_DLL "libcrypto-1_1.dll")
  72. find_file (OPENSSL_LIB_BIN "${LIB_CRYPTO_DLL}" "${EXTERNALS_DIRECTORY}/openssl/1.1/win32/lib" NO_DEFAULT_PATH)
  73. set (LIB_SSL_DLL "libssl-1_1.dll")
  74. find_file (OPENSSL_SSL_BIN "${LIB_SSL_DLL}" "${EXTERNALS_DIRECTORY}/openssl/1.1/win32/lib" NO_DEFAULT_PATH)
  75. find_file (XALAN_C_BIN "Xalan-C_1_11.dll" "${EXTERNALS_DIRECTORY}/xalan/xalan-c/win32/bin" NO_DEFAULT_PATH)
  76. find_file (XALAN_MESSAGES_BIN "XalanMessages_1_11.dll" "${EXTERNALS_DIRECTORY}/xalan/xalan-c/win32/bin" NO_DEFAULT_PATH)
  77. find_file (XERCES_C_BIN "xerces-c_3_1.dll" "${EXTERNALS_DIRECTORY}/xalan/xerces-c/win32/bin" NO_DEFAULT_PATH)
  78. find_file (ZLIB_BIN "zlib.dll" "${EXTERNALS_DIRECTORY}/zlib/1.2.8/lib/Win32" NO_DEFAULT_PATH)
  79. endif()
  80. set(DYLIBS "")
  81. if (NOT USE_NATIVE_LIBRARIES AND USE_BOOST_REGEX)
  82. list(APPEND DYLIBS ${BOOST_REGEX_BIN})
  83. endif (NOT USE_NATIVE_LIBRARIES AND USE_BOOST_REGEX)
  84. list(APPEND DYLIBS ${ICU_DT_BIN} ${ICU_IN_BIN} ${ICU_UC_BIN})
  85. list(APPEND DYLIBS ${OPENSSL_LIB_BIN} ${OPENSSL_SSL_BIN})
  86. list(APPEND DYLIBS ${XALAN_C_BIN} ${XALAN_MESSAGES_BIN})
  87. list(APPEND DYLIBS ${XERCES_C_BIN})
  88. list(APPEND DYLIBS ${ZLIB_BIN})
  89. endif()
  90. endif()
  91. if (WIN32)
  92. if (NOT USE_NATIVE_LIBRARIES)
  93. set (LIB_CRYPTO_BIN "${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}/${LIB_CRYPTO_DLL}")
  94. set (LIB_SSL_BIN "${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}/${LIB_SSL_DLL}")
  95. ADD_CUSTOM_COMMAND(
  96. COMMAND ${CMAKE_COMMAND} -E copy ${OPENSSL_LIB_BIN} ${LIB_CRYPTO_BIN}
  97. COMMAND ${CMAKE_COMMAND} -E copy ${OPENSSL_SSL_BIN} ${LIB_SSL_BIN}
  98. OUTPUT ${LIB_CRYPTO_BIN} ${LIB_SSL_BIN}
  99. )
  100. ADD_CUSTOM_TARGET(copy_libssl ALL DEPENDS ${LIB_CRYPTO_BIN} ${LIB_SSL_BIN})
  101. else()
  102. ADD_CUSTOM_TARGET(copy_libssl ALL )
  103. endif()
  104. endif ()
  105. if (APPLE)
  106. set (update_dynamic_shared_lib_path "execute_process (COMMAND bash \"-c\" \"otool -L \\\"\${file}\\\" | egrep \\\"(\\\\s|/)\${dylib_name_only}(.[0-9]{1,})*.dylib\\\" | sed \\\"s/^[[:space:]]//g\\\" | cut -d' ' -f1\"
  107. OUTPUT_VARIABLE otoolOut
  108. ERROR_VARIABLE otoolErr
  109. OUTPUT_STRIP_TRAILING_WHITESPACE
  110. )
  111. if (\"\${otoolOut}\" STREQUAL \"\")
  112. continue()
  113. endif()
  114. if (NOT \"\${otoolErr}\" STREQUAL \"\")
  115. message(FATAL_ERROR \"Failed to check dependent lib \${dylib_name_only} for \${file}\")
  116. endif()
  117. set(original_dylib_path \${otoolOut})
  118. file(GLOB lib2_dylib \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/lib2/\${dylib_name_only}*.dylib\")
  119. if (\"\${lib2_dylib}\" STREQUAL \"\")
  120. message(FATAL_ERROR \"Cannot find \${dylib_name_only}*.dylib under \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/lib2\")
  121. endif()
  122. get_filename_component(dylib_name_ext \"\${lib2_dylib}\" NAME)
  123. execute_process(
  124. COMMAND install_name_tool -change \"\${original_dylib_path}\" \"@loader_path/../lib2/\${dylib_name_ext}\" \"\${file}\"
  125. OUTPUT_VARIABLE out
  126. ERROR_VARIABLE err
  127. )
  128. ")
  129. endif()
  130. foreach(dylib ${DYLIBS})
  131. get_filename_component(dylib_path ${dylib} REALPATH)
  132. if (WIN32)
  133. install(PROGRAMS "${dylib_path}" DESTINATION ${EXEC_DIR})
  134. elseif (APPLE)
  135. install(PROGRAMS "${dylib_path}" DESTINATION lib2)
  136. get_filename_component(dylib_name_ext ${dylib_path} NAME)
  137. get_filename_component(dylib_name_only ${dylib_name_ext} NAME_WE)
  138. install(CODE "
  139. set(dylib_name_only \"${dylib_name_only}\")
  140. file(GLOB files \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${EXEC_DIR}/*\" \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${LIB_DIR}/*.dylib\" \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/plugins/*.dylib\")
  141. foreach(file \${files})
  142. ${update_dynamic_shared_lib_path}
  143. endforeach ()
  144. ")
  145. endif()
  146. endforeach(dylib)
  147. # Update dynamic shared library path for libraries under lib2/
  148. if (APPLE)
  149. foreach(dylib ${DYLIBS})
  150. get_filename_component(dylib_path ${dylib} REALPATH)
  151. get_filename_component(dylib_name_ext ${dylib_path} NAME)
  152. get_filename_component(dylib_name_only ${dylib_name_ext} NAME_WE)
  153. install(CODE "
  154. set(dylib_name_only \"${dylib_name_only}\")
  155. file(GLOB files \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/lib2/*.dylib\")
  156. foreach(file \${files})
  157. get_filename_component(file_name_ext \${file} NAME)
  158. get_filename_component(file_name_only \${file_name_ext} NAME_WE)
  159. if (\"\${file_name_only}\" STREQUAL \"\${dylib_name_only}\" )
  160. continue()
  161. endif()
  162. ${update_dynamic_shared_lib_path}
  163. endforeach ()
  164. ")
  165. endforeach(dylib)
  166. endif()