CMakeLists.txt 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. # WinPR: Windows Portable Runtime
  2. # winpr cmake build script
  3. #
  4. # Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
  5. # Copyright 2016 Thincast Technologies GmbH
  6. #
  7. # Licensed under the Apache License, Version 2.0 (the "License");
  8. # you may not use this file except in compliance with the License.
  9. # You may obtain a copy of the License at
  10. #
  11. # http://www.apache.org/licenses/LICENSE-2.0
  12. #
  13. # Unless required by applicable law or agreed to in writing, software
  14. # distributed under the License is distributed on an "AS IS" BASIS,
  15. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. # See the License for the specific language governing permissions and
  17. # limitations under the License.
  18. # Soname versioning - use winpr version
  19. set(WINPR_TOOLS_VERSION_MAJOR "${WINPR_VERSION_MAJOR}")
  20. set(WINPR_TOOLS_VERSION_MINOR "${WINPR_VERSION_MINOR}")
  21. set(WINPR_TOOLS_VERSION_REVISION "${WINPR_VERSION_REVISION}")
  22. set(WINPR_TOOLS_API_VERSION "${WINPR_TOOLS_VERSION_MAJOR}")
  23. set(WINPR_TOOLS_VERSION "${WINPR_TOOLS_VERSION_MAJOR}.${WINPR_TOOLS_VERSION_MINOR}.${WINPR_TOOLS_VERSION_REVISION}")
  24. set(WINPR_TOOLS_VERSION_FULL "${WINPR_TOOLS_VERSION}")
  25. set(WINPR_TOOLS_API_VERSION "${WINPR_TOOLS_VERSION_MAJOR}")
  26. set(WINPR_TOOLS_DIR ${CMAKE_CURRENT_SOURCE_DIR})
  27. set(WINPR_TOOLS_SRCS "")
  28. set(WINPR_TOOLS_LIBS "")
  29. set(WINPR_TOOLS_INCLUDES "")
  30. set(WINPR_TOOLS_DEFINITIONS "")
  31. macro (winpr_tools_module_add)
  32. file (RELATIVE_PATH _relPath "${WINPR_TOOLS_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
  33. foreach (_src ${ARGN})
  34. if (_relPath)
  35. list (APPEND WINPR_TOOLS_SRCS "${_relPath}/${_src}")
  36. else()
  37. list (APPEND WINPR_TOOLS_SRCS "${_src}")
  38. endif()
  39. endforeach()
  40. if (_relPath)
  41. set (WINPR_TOOLS_SRCS ${WINPR_TOOLS_SRCS} PARENT_SCOPE)
  42. endif()
  43. endmacro()
  44. macro (winpr_tools_include_directory_add)
  45. file (RELATIVE_PATH _relPath "${WINPR_TOOLS_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
  46. foreach (_inc ${ARGN})
  47. if (IS_ABSOLUTE ${_inc})
  48. list (APPEND WINPR_TOOLS_INCLUDES "${_inc}")
  49. else()
  50. if (_relPath)
  51. list (APPEND WINPR_TOOLS_INCLUDES "${_relPath}/${_inc}")
  52. else()
  53. list (APPEND WINPR_TOOLS_INCLUDES "${_inc}")
  54. endif()
  55. endif()
  56. endforeach()
  57. if (_relPath)
  58. set (WINPR_TOOLS_INCLUDES ${WINPR_TOOLS_INCLUDES} PARENT_SCOPE)
  59. endif()
  60. endmacro()
  61. macro (winpr_tools_library_add)
  62. foreach (_lib ${ARGN})
  63. list (APPEND WINPR_TOOLS_LIBS "${_lib}")
  64. endforeach()
  65. set (WINPR_TOOLS_LIBS ${WINPR_TOOLS_LIBS} PARENT_SCOPE)
  66. endmacro()
  67. macro (winpr_tools_definition_add)
  68. foreach (_define ${ARGN})
  69. list (APPEND WINPR_TOOLS_DEFINITONS "${_define}")
  70. endforeach()
  71. set (WINPR_TOOLS_DEFINITONS ${WINPR_TOOLS_DEFINITONS} PARENT_SCOPE)
  72. endmacro()
  73. add_subdirectory(makecert)
  74. set(MODULE_NAME winpr-tools)
  75. list(REMOVE_DUPLICATES WINPR_TOOLS_DEFINITIONS)
  76. list(REMOVE_DUPLICATES WINPR_TOOLS_LIBS)
  77. list(REMOVE_DUPLICATES WINPR_TOOLS_INCLUDES)
  78. include_directories(${WINPR_TOOLS_INCLUDES})
  79. # On windows create dll version information.
  80. # Vendor, product and year are already set in top level CMakeLists.txt
  81. if (WIN32)
  82. set (RC_VERSION_MAJOR ${WINPR_VERSION_MAJOR})
  83. set (RC_VERSION_MINOR ${WINPR_VERSION_MINOR})
  84. set (RC_VERSION_BUILD ${WINPR_VERSION_REVISION})
  85. set (RC_VERSION_FILE "${CMAKE_SHARED_LIBRARY_PREFIX}${MODULE_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" )
  86. configure_file(
  87. ${CMAKE_SOURCE_DIR}/addin/cmake/WindowsDLLVersion.rc.in
  88. ${CMAKE_CURRENT_BINARY_DIR}/version.rc
  89. @ONLY)
  90. set (WINPR_TOOLS_SRCS ${WINPR_TOOLS_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
  91. endif()
  92. add_library(${MODULE_NAME} ${WINPR_TOOLS_SRCS})
  93. set_target_properties(${MODULE_NAME} PROPERTIES LINKER_LANGUAGE C)
  94. set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME ${MODULE_NAME}${WINPR_TOOLS_API_VERSION})
  95. if (WITH_LIBRARY_VERSIONING)
  96. set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_TOOLS_VERSION} SOVERSION ${WINPR_TOOLS_API_VERSION})
  97. endif()
  98. add_definitions(${WINPR_DEFINITIONS})
  99. target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${WINPR_TOOLS_LIBS})
  100. install(TARGETS ${MODULE_NAME}
  101. RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
  102. ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
  103. LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
  104. COMPONENT libraries)
  105. if (WITH_PDB_SAVE AND MSVC AND BUILD_SHARED_LIBS)
  106. get_target_property(OUTPUT_FILENAME ${MODULE_NAME} OUTPUT_NAME)
  107. install(FILES ${RVC_PDB_BINARY_DIR}/${OUTPUT_FILENAME}.pdb DESTINATION ${RVC_PDBSAVE_PATH} COMPONENT symbols)
  108. endif()
  109. set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "WinPR/Tools")
  110. # Add all command line utilities
  111. add_subdirectory(makecert-cli)
  112. add_subdirectory(hash-cli)
  113. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/winpr-tools.pc.in ${CMAKE_CURRENT_BINARY_DIR}/winpr-tools${WINPR_TOOLS_VERSION_MAJOR}.pc @ONLY)
  114. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/winpr-tools${WINPR_TOOLS_VERSION_MAJOR}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)