toxcore/cmake/ModulePackage.cmake
iphydf 15cb426166
Make toxcore code C++ compatible.
It is still C code, so still compatible with C compilers as well. This
change lets us see more clearly where implicit conversions occur by
making them explicit.
2016-09-24 21:53:50 +01:00

64 lines
1.8 KiB
CMake

option(ENABLE_SHARED "Build shared (dynamic) libraries for all modules" ON)
option(ENABLE_STATIC "Build static libraries for all modules" ON)
option(COMPILE_AS_CXX "Compile all C code as C++ code" OFF)
find_package(PkgConfig REQUIRED)
function(add_c_executable exec)
if(COMPILE_AS_CXX)
set_source_files_properties(${ARGN} PROPERTIES LANGUAGE CXX)
endif()
add_executable(${exec} ${ARGN})
endfunction()
function(pkg_use_module mod)
pkg_search_module(${mod} ${ARGN})
if(${mod}_FOUND)
link_directories(${${mod}_LIBRARY_DIRS})
include_directories(${${mod}_INCLUDE_DIRS})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${${mod}_CFLAGS_OTHER}")
endif()
endfunction()
function(add_module lib)
if(COMPILE_AS_CXX)
set_source_files_properties(${ARGN} PROPERTIES LANGUAGE CXX)
endif()
if(ENABLE_SHARED)
add_library(${lib}_shared SHARED ${ARGN})
set_target_properties(${lib}_shared PROPERTIES OUTPUT_NAME ${lib})
install(TARGETS ${lib}_shared DESTINATION "lib")
endif()
if(ENABLE_STATIC)
add_library(${lib}_static STATIC ${ARGN})
set_target_properties(${lib}_static PROPERTIES OUTPUT_NAME ${lib})
install(TARGETS ${lib}_static DESTINATION "lib")
endif()
endfunction()
function(target_link_modules target)
if(TARGET ${target}_shared)
set(_targets ${_targets} ${target}_shared)
endif()
if(TARGET ${target}_static)
set(_targets ${_targets} ${target}_static)
endif()
if(NOT _targets)
set(_targets ${_targets} ${target})
endif()
foreach(target ${_targets})
foreach(dep ${ARGN})
if(TARGET ${dep}_shared)
target_link_libraries(${target} ${dep}_shared)
elseif(TARGET ${dep}_static)
target_link_libraries(${target} ${dep}_static)
else()
target_link_libraries(${target} ${dep})
endif()
endforeach()
endforeach()
endfunction()