123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- # WinPR: Windows Portable Runtime
- # winpr cmake build script
- #
- # Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- include(CheckFunctionExists)
- set(WINPR_DIR ${CMAKE_CURRENT_SOURCE_DIR})
- set(WINPR_SRCS "")
- set(WINPR_LIBS_PRIVATE "")
- set(WINPR_LIBS_PUBLIC "")
- set(WINPR_INCLUDES "")
- set(WINPR_DEFINITIONS "")
- macro (winpr_module_add)
- file (RELATIVE_PATH _relPath "${WINPR_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
- foreach (_src ${ARGN})
- if (_relPath)
- list (APPEND WINPR_SRCS "${_relPath}/${_src}")
- else()
- list (APPEND WINPR_SRCS "${_src}")
- endif()
- endforeach()
- if (_relPath)
- set (WINPR_SRCS ${WINPR_SRCS} PARENT_SCOPE)
- endif()
- endmacro()
- macro (winpr_include_directory_add)
- file (RELATIVE_PATH _relPath "${WINPR_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
- foreach (_inc ${ARGN})
- if (IS_ABSOLUTE ${_inc})
- list (APPEND WINPR_INCLUDES "${_inc}")
- else()
- if (_relPath)
- list (APPEND WINPR_INCLUDES "${_relPath}/${_inc}")
- else()
- list (APPEND WINPR_INCLUDES "${_inc}")
- endif()
- endif()
- endforeach()
- if (_relPath)
- set (WINPR_INCLUDES ${WINPR_INCLUDES} PARENT_SCOPE)
- endif()
- endmacro()
- macro (winpr_library_add_private)
- foreach (_lib ${ARGN})
- list (APPEND WINPR_LIBS_PRIVATE "${_lib}")
- endforeach()
- set (WINPR_LIBS_PRIVATE ${WINPR_LIBS_PRIVATE} PARENT_SCOPE)
- endmacro()
- macro (winpr_library_add_public)
- foreach (_lib ${ARGN})
- list (APPEND WINPR_LIBS_PUBLIC "${_lib}")
- endforeach()
- set (WINPR_LIBS_PUBLIC ${WINPR_LIBS_PUBLIC} PARENT_SCOPE)
- endmacro()
- macro (winpr_definition_add)
- foreach (_define ${ARGN})
- list (APPEND WINPR_DEFINITIONS "${_define}")
- endforeach()
- set (WINPR_DEFINITIONS ${WINPR_DEFINITIONS} PARENT_SCOPE)
- endmacro()
- set(CMAKE_REQUIRED_LIBRARIES rt)
- check_function_exists(timer_create TIMER_CREATE)
- check_function_exists(timer_delete TIMER_DELETE)
- check_function_exists(timer_settime TIMER_SETTIME)
- check_function_exists(timer_gettime TIMER_GETTIME)
- if (TIMER_CREATE AND TIMER_DELETE AND TIMER_SETTIME AND TIMER_GETTIME)
- add_definitions(-DWITH_POSIX_TIMER)
- winpr_library_add_private(rt)
- endif()
- if (ANDROID)
- winpr_library_add_private(log)
- endif()
- # Level "1" API as defined for MinCore.lib
- set(WINPR_CORE synch locale library file comm pipe interlocked security
- environment crypto registry credentials path io memory input shell
- heap utils error timezone sysinfo pool handle thread)
- foreach(DIR ${WINPR_CORE})
- add_subdirectory(${DIR})
- source_group("${DIR}" REGULAR_EXPRESSION "${DIR}/.*\\.[ch]")
- endforeach()
- set(WINPR_LEVEL2 winsock sspi winhttp asn1 sspicli crt bcrypt rpc credui
- wtsapi dsparse wnd smartcard nt clipboard)
- foreach(DIR ${WINPR_LEVEL2})
- add_subdirectory(${DIR})
- source_group("${DIR}" REGULAR_EXPRESSION "${DIR}/.*\\.[ch]")
- endforeach()
- set(MODULE_NAME winpr)
- list(REMOVE_DUPLICATES WINPR_DEFINITIONS)
- list(REMOVE_DUPLICATES WINPR_LIBS_PRIVATE)
- list(REMOVE_DUPLICATES WINPR_LIBS_PUBLIC)
- list(REMOVE_DUPLICATES WINPR_INCLUDES)
- include_directories(${WINPR_INCLUDES})
- # On windows create dll version information.
- # Vendor, product and year are already set in top level CMakeLists.txt
- if (WIN32)
- set (RC_VERSION_MAJOR ${WINPR_VERSION_MAJOR})
- set (RC_VERSION_MINOR ${WINPR_VERSION_MINOR})
- set (RC_VERSION_BUILD ${WINPR_VERSION_REVISION})
- set (RC_VERSION_FILE "${CMAKE_SHARED_LIBRARY_PREFIX}${MODULE_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}" )
- configure_file(
- ${CMAKE_SOURCE_DIR}/addin/cmake/WindowsDLLVersion.rc.in
- ${CMAKE_CURRENT_BINARY_DIR}/version.rc
- @ONLY)
- set (WINPR_SRCS ${WINPR_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
- winpr_library_add_public("shlwapi")
- endif()
- add_library(${MODULE_NAME} ${WINPR_SRCS})
- set_target_properties(${MODULE_NAME} PROPERTIES LINKER_LANGUAGE C)
- set_target_properties(${MODULE_NAME} PROPERTIES OUTPUT_NAME ${MODULE_NAME}${WINPR_API_VERSION})
- if (WITH_LIBRARY_VERSIONING)
- set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${WINPR_VERSION} SOVERSION ${WINPR_API_VERSION})
- endif()
- add_definitions(${WINPR_DEFINITIONS})
- message(STATUS "private key: ${PRIVATE_KEYWORD}")
- target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${WINPR_LIBS_PRIVATE} ${PUBLIC_KEYWORD} ${WINPR_LIBS_PUBLIC})
- if(MSVC)
- install(TARGETS ${MODULE_NAME}
- RUNTIME DESTINATION "${RVC_RUNTIME_PATH}" COMPONENT libraries
- ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT develops EXCLUDE_FROM_ALL
- LIBRARY DESTINATION "${RVC_LIBRARY_PATH}" COMPONENT libraries
- )
- else()
- install(TARGETS ${MODULE_NAME}
- RUNTIME DESTINATION "${RVC_RUNTIME_PATH}"
- ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
- LIBRARY DESTINATION "${RVC_RUNTIME_PATH}"
- COMPONENT libraries)
- endif(MSVC)
- if (WITH_PDB_SAVE AND MSVC AND BUILD_SHARED_LIBS)
- get_target_property(OUTPUT_FILENAME ${MODULE_NAME} OUTPUT_NAME)
- install(FILES ${RVC_PDB_BINARY_DIR}/${OUTPUT_FILENAME}.pdb DESTINATION ${RVC_PDBSAVE_PATH} COMPONENT symbols)
- endif()
- set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "WinPR/libwinpr")
|