Blame winpr/libwinpr/CMakeLists.txt

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