SparkInstallMacrosConfig.cmake 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. # spark_install_target
  2. # 基于传入的路径/目标进行安装
  3. # 可接受的值为: 安装路径 目标A
  4. # 可接受的值为: 安装路径 目标A 目标B 目标C...
  5. macro(spark_install_target INSTALL_TARGET_DIR INSTALL_TARGETS)
  6. install(TARGETS
  7. ${INSTALL_TARGETS} ${ARGN}
  8. DESTINATION ${INSTALL_TARGET_DIR})
  9. endmacro(spark_install_target INSTALL_TARGET_DIR INSTALL_TARGETS)
  10. # spark_install_file
  11. # 基于传入的路径/文件进行安装
  12. # 可接受的值为: 安装路径 文件A
  13. # 可接受的值为: 安装路径 文件A 文件B 文件C...
  14. macro(spark_install_file INSTALL_FILE_DIR INSTALL_FILE)
  15. install(FILES
  16. ${INSTALL_FILE} ${ARGN}
  17. DESTINATION ${INSTALL_FILE_DIR})
  18. endmacro(spark_install_file INSTALL_FILE_DIR INSTALL_FILE)
  19. # spark_install_program
  20. # 基于传入的路径/文件进行安装,并自动为其添加可执行权限
  21. # 可接受的值为: 安装路径 文件A
  22. # 可接受的值为: 安装路径 文件A 文件B 文件C...
  23. macro(spark_install_program INSTALL_PROGRAM_DIR INSTALL_PROGRAM)
  24. install(PROGRAMS
  25. ${INSTALL_PROGRAM} ${ARGN}
  26. DESTINATION ${INSTALL_PROGRAM_DIR})
  27. endmacro(spark_install_program INSTALL_PROGRAM_DIR INSTALL_PROGRAM)
  28. # spark_install_directory
  29. # 基于传入的路径/目录进行安装
  30. # 可接受的值为: 安装路径 路径A
  31. # 可接受的值为: 安装路径 路径A/* 为安装路径A下所有内容
  32. macro(spark_install_directory INSTALL_DIRECTORY_DIR INSTALL_DIRECOTRY)
  33. # INSTALL_DIRECOTRY 可能包含 * ?
  34. # 1. 找到 '*', 截取,列出目录下所有文件,安装
  35. # 2. 是文件的直接使用 spark_install_file 安装
  36. # 2. 是目录的直接使用 spark_install_directory 安装
  37. # message(FATAL_ERROR "${INSTALL_DIRECTORY_DIR}")
  38. # string(FIND <string> <substring> <output_variable> [REVERSE])
  39. string(FIND "${INSTALL_DIRECOTRY}" "*" INSTALL_DIRECTORY_FIND_INDEX)
  40. # message(FATAL_ERROR "${INSTALL_DIRECTORY_FIND_INDEX}: ${INSTALL_DIRECTORY_DIR}")
  41. # file(GLOB <variable>
  42. # [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
  43. # [<globbing-expressions>...])
  44. if (NOT INSTALL_DIRECTORY_FIND_INDEX EQUAL -1)
  45. # string(SUBSTRING <string> <begin> <length> <output_variable>)
  46. string(SUBSTRING "${INSTALL_DIRECOTRY}" 0 ${INSTALL_DIRECTORY_FIND_INDEX} INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING)
  47. # message(FATAL_ERROR "directory: ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING}")
  48. # file(GLOB <variable>
  49. # [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
  50. # [<globbing-expressions>...])
  51. file(GLOB INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING}/*)
  52. list(LENGTH INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST_LENGTH)
  53. foreach(item IN LISTS INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST)
  54. # message("-> ${item}")
  55. if(IS_DIRECTORY ${item})
  56. message("-> ${item} IS_DIRECTORY")
  57. # spark_install_directory(${INSTALL_DIRECTORY_DIR} ${item})
  58. install(DIRECTORY
  59. ${item}
  60. DESTINATION ${INSTALL_DIRECTORY_DIR}
  61. USE_SOURCE_PERMISSIONS)
  62. else()
  63. message("-> ${item} NOT IS_DIRECTORY")
  64. spark_install_program(${INSTALL_DIRECTORY_DIR} ${item})
  65. # spark_install_file(${INSTALL_DIRECTORY_DIR} ${item})
  66. endif(IS_DIRECTORY ${item})
  67. endforeach(item IN LISTS INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST)
  68. # message(FATAL_ERROR " directory: ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST}")
  69. # message(FATAL_ERROR " directory: ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST_LENGTH}")
  70. else()
  71. # ISSUES: You Must check here
  72. # message(FATAL_ERROR "install: ${INSTALL_DIRECTORY_DIR}")
  73. install(DIRECTORY
  74. ${INSTALL_DIRECOTRY} ${ARGN}
  75. DESTINATION ${INSTALL_DIRECTORY_DIR})
  76. endif(NOT INSTALL_DIRECTORY_FIND_INDEX EQUAL -1)
  77. endmacro(spark_install_directory INSTALL_DIRECTORY_DIR INSTALL_DIRECOTRY)
  78. macro(spark_install_changelog CHANGE_LOG_FILE)
  79. set(SOURCE_CHANGE_LOG_FILE ${CHANGE_LOG_FILE})
  80. if (EXISTS ${SOURCE_CHANGE_LOG_FILE})
  81. execute_process(COMMAND test -f ${SOURCE_CHANGE_LOG_FILE}
  82. RESULT_VARIABLE changelog_test
  83. )
  84. execute_process(COMMAND which gzip
  85. RESULT_VARIABLE gzip_test
  86. )
  87. if (NOT changelog_test EQUAL 0)
  88. message(FATAL_ERROR "NOTE: 不是常规文件: ${SOURCE_CHANGE_LOG_FILE}")
  89. endif(NOT changelog_test EQUAL 0)
  90. if (NOT gzip_test EQUAL 0)
  91. message(FATAL_ERROR "NOTE: 未安装 gzip, 无法压缩 changelog")
  92. endif(NOT gzip_test EQUAL 0)
  93. # 压缩与安装日志文件
  94. add_custom_command(
  95. OUTPUT "${CMAKE_BINARY_DIR}/changelog.gz"
  96. COMMAND gzip -cn9 "${SOURCE_CHANGE_LOG_FILE}" > "${CMAKE_BINARY_DIR}/changelog.gz"
  97. WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
  98. COMMENT "Compressing changelog"
  99. )
  100. add_custom_target(changelog ALL DEPENDS "${CMAKE_BINARY_DIR}/changelog.gz")
  101. # include(GNUInstallDirs)
  102. set(SPARK_INSTALL_CHANGE_LOG_DIR "/usr/share/doc/${PROJECT_NAME}/")
  103. install(FILES
  104. ${CMAKE_BINARY_DIR}/changelog.gz
  105. debian/copyright
  106. DESTINATION ${SPARK_INSTALL_CHANGE_LOG_DIR}
  107. )
  108. else()
  109. message(FATAL_ERROR "未找到: ${SOURCE_CHANGE_LOG_FILE}")
  110. endif(EXISTS ${SOURCE_CHANGE_LOG_FILE})
  111. endmacro(spark_install_changelog CHANGE_LOG_FILE)