X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=cmake%2FQuasselMacros.cmake;h=3af589afbe35880002be5371ef2f6c5ee720e082;hp=19649da8b46f5581f25fb49d617ff04319427964;hb=8111304ae2fa60ac1d20520cfdd3e5b4930bce8b;hpb=d4b64322860b0dfcc9e1340a3b3a0b0df3e2eb81 diff --git a/cmake/QuasselMacros.cmake b/cmake/QuasselMacros.cmake index 19649da8..3af589af 100644 --- a/cmake/QuasselMacros.cmake +++ b/cmake/QuasselMacros.cmake @@ -7,14 +7,13 @@ ################################################################################################### include(CMakeParseArguments) +include(GenerateExportHeader) include(QuasselCompileFeatures) ################################################################################################### # Adds a library target for a Quassel module. # -# quassel_add_module(Module -# [STATIC] -# ) +# quassel_add_module(Module [STATIC] [EXPORT]) # # The function expects the (CamelCased) module name as a parameter, and derives various # strings from it. For example, quassel_add_module(Client) produces @@ -25,13 +24,16 @@ include(QuasselCompileFeatures) # platforms other than Windows, a shared library is created. For shared libraries, also # an install rule is added. # +# To generate an export header for the library, specify EXPORT. The header will be named +# ${module}-export.h (where ${module} is the lower-case name of the module). +# # The function exports the TARGET variable which can be used in the current scope # for setting source files, properties, link dependencies and so on. # To refer to the target outside of the current scope, e.g. for linking, use # the alias name. # function(quassel_add_module _module) - set(options STATIC) + set(options EXPORT STATIC) set(oneValueArgs ) set(multiValueArgs ) cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) @@ -43,9 +45,7 @@ function(quassel_add_module _module) string(REPLACE "::" "_" target ${target}) string(REPLACE "_" "-" output_name ${target}) - # On Windows, building shared libraries requires export headers. - # Let's bother with that later. - if (ARG_STATIC OR WIN32) + if (ARG_STATIC) set(buildmode STATIC) else() set(buildmode SHARED) @@ -67,7 +67,23 @@ function(quassel_add_module _module) ) if (buildmode STREQUAL "SHARED") - install(TARGETS ${target} DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(TARGETS ${target} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) + endif() + + if (ARG_EXPORT) + string(TOLOWER ${_module} lower_module) + string(TOUPPER ${_module} upper_module) + string(REPLACE "::" "-" header_base ${lower_module}) + string(REPLACE "::" "_" macro_base ${upper_module}) + generate_export_header(${target} + BASE_NAME ${macro_base} + EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/export/${header_base}-export.h + ) + target_include_directories(${target} PUBLIC ${CMAKE_BINARY_DIR}/export) endif() # Export the target name for further use