CMakeLists.txt 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. cmake_minimum_required(VERSION 3.6)
  2. set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "build type")
  3. project(srpc
  4. VERSION 0.9.2
  5. LANGUAGES C CXX)
  6. set(INC_DIR ${PROJECT_SOURCE_DIR}/_include CACHE PATH "srpc inc")
  7. set(LIB_DIR ${PROJECT_SOURCE_DIR}/_lib CACHE PATH "srpc lib")
  8. set(BIN_DIR ${PROJECT_SOURCE_DIR}/_bin CACHE PATH "srpc bin")
  9. include(GNUInstallDirs)
  10. set(CMAKE_CONFIG_INSTALL_FILE ${PROJECT_BINARY_DIR}/config.toinstall.cmake)
  11. set(CMAKE_CONFIG_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
  12. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIB_DIR})
  13. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_DIR})
  14. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR})
  15. add_custom_target(
  16. LINK_HEADERS ALL
  17. COMMENT "link headers..."
  18. )
  19. INCLUDE(CMakeLists_Headers.txt)
  20. macro(makeLink src dest target)
  21. add_custom_command(
  22. TARGET ${target} PRE_BUILD
  23. COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dest}
  24. DEPENDS ${dest}
  25. )
  26. endmacro()
  27. add_custom_command(
  28. TARGET LINK_HEADERS PRE_BUILD
  29. COMMAND ${CMAKE_COMMAND} -E make_directory ${INC_DIR}/${PROJECT_NAME}
  30. )
  31. foreach(header_file ${INCLUDE_HEADERS})
  32. string(REPLACE "/" ";" arr ${header_file})
  33. list(GET arr -1 file_name)
  34. makeLink(${PROJECT_SOURCE_DIR}/${header_file} ${INC_DIR}/${PROJECT_NAME}/${file_name} LINK_HEADERS)
  35. endforeach()
  36. add_subdirectory(src)
  37. ####CONFIG
  38. include(CMakePackageConfigHelpers)
  39. set(CONFIG_INC_DIR ${INC_DIR})
  40. set(CONFIG_LIB_DIR ${LIB_DIR})
  41. if(NOT VCPKG_TOOLCHAIN)
  42. set(CONFIG_BIN_DIR ${BIN_DIR})
  43. else()
  44. set(CONFIG_BIN_DIR ${CMAKE_INSTALL_PREFIX}/tools/srpc)
  45. endif()
  46. configure_package_config_file(
  47. ${PROJECT_NAME}-config.cmake.in
  48. ${PROJECT_SOURCE_DIR}/${PROJECT_NAME}-config.cmake
  49. INSTALL_DESTINATION ${CMAKE_CONFIG_INSTALL_DIR}
  50. PATH_VARS CONFIG_INC_DIR CONFIG_LIB_DIR CONFIG_BIN_DIR
  51. )
  52. set(CONFIG_INC_DIR ${CMAKE_INSTALL_INCLUDEDIR})
  53. set(CONFIG_LIB_DIR ${CMAKE_INSTALL_LIBDIR})
  54. set(CONFIG_BIN_DIR ${CMAKE_INSTALL_BINDIR})
  55. configure_package_config_file(
  56. ${PROJECT_NAME}-config.cmake.in
  57. ${CMAKE_CONFIG_INSTALL_FILE}
  58. INSTALL_DESTINATION ${CMAKE_CONFIG_INSTALL_DIR}
  59. PATH_VARS CONFIG_INC_DIR CONFIG_LIB_DIR CONFIG_BIN_DIR
  60. )
  61. install(
  62. FILES ${CMAKE_CONFIG_INSTALL_FILE}
  63. DESTINATION ${CMAKE_CONFIG_INSTALL_DIR}
  64. COMPONENT devel
  65. RENAME ${PROJECT_NAME}-config.cmake
  66. )
  67. #### PACK
  68. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Sogou RPC")
  69. set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
  70. # set(CPACK_RPM_PRE_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/pre_script.sh)
  71. # set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/post_script.sh)
  72. execute_process(
  73. COMMAND git log -n1 --format=%ad --date=short
  74. RESULT_VARIABLE GIT_LOG_RET
  75. OUTPUT_VARIABLE GIT_YMD
  76. OUTPUT_STRIP_TRAILING_WHITESPACE
  77. )
  78. if (NOT GIT_LOG_RET EQUAL 0)
  79. set(GIT_YMD 0)
  80. endif()
  81. string(REPLACE "-" "" RELEASE_LABEL ${GIT_YMD})
  82. set(CPACK_RPM_PACKAGE_RELEASE ${RELEASE_LABEL})
  83. set(CPACK_RPM_COMPONENT_INSTALL ON)
  84. set(CPACK_COMPONENTS_ALL devel)
  85. set(CPACK_RPM_FILE_NAME RPM-DEFAULT)
  86. set(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
  87. set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr/lib64/cmake)
  88. set(PB_PACKAGE_REQUIRED "protobuf-devel")
  89. set(CPACK_RPM_DEVEL_PACKAGE_REQUIRES "workflow-devel >= 0.9.6, ${PB_PACKAGE_REQUIRED}")
  90. install(
  91. FILES ${INCLUDE_HEADERS}
  92. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
  93. COMPONENT devel
  94. )
  95. install(
  96. FILES README.md
  97. DESTINATION "${CMAKE_INSTALL_DOCDIR}-${PROJECT_VERSION}"
  98. COMPONENT devel
  99. )
  100. set(CPACK_RPM_SPEC_MORE_DEFINE "%define __spec_install_post /bin/true") # disable strip
  101. set(CPACK_GENERATOR "RPM")
  102. include(CPack)