diff --git a/src/IhtaAddLibrary.cmake b/src/IhtaAddLibrary.cmake index 51a48aaa5e44e129689ce2039c28ba60b946bde2..46197f70cacd0dbd0631c0b92e2a44ebec0c441a 100644 --- a/src/IhtaAddLibrary.cmake +++ b/src/IhtaAddLibrary.cmake @@ -23,25 +23,44 @@ include_guard () #]=======================================================================] macro (ihta_add_library) - set (options) - set (oneValueArgs NAMESPACE NAME LIBRARY_TYPE INCLUDE_DIR INSTALL_INCLUDE_DIR IDE_FOLDER) - set (multiValueArgs SOURCES) + set (options TEST_INPLACE TEST_INTERNALS) + set ( + oneValueArgs + NAMESPACE + NAME + LIBRARY_TYPE + INCLUDE_DIR + INSTALL_INCLUDE_DIR + IDE_FOLDER + OBJECT_LIB_POSTFIX + OUT_VAR + ) + set (multiValueArgs SOURCES TEST_SOURCES) cmake_parse_arguments (IHTA_ADD_LIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if (DEFINED IHTA_ADD_LIB_LIBRARY_TYPE) - set (IHTA_ADD_LIB_TYPES "STATIC" "SHARED" "INTERFACE" "OBJECT") + set (IHTA_ADD_LIB_TYPES "STATIC" "SHARED") if (NOT (${IHTA_ADD_LIB_LIBRARY_TYPE} IN_LIST IHTA_ADD_LIB_TYPES)) message ( FATAL_ERROR "ihta_add_library only supports the following LIBRARY_TYPE's: STATIC, SHARED, INTERFACE or OBJECT" ) endif () + else () + set (IHTA_ADD_LIB_TYPES STATIC) + if (BUILD_SHARED_LIBS) + set (IHTA_ADD_LIB_TYPES SHARED) + endif () endif () if (NOT DEFINED IHTA_ADD_LIB_INCLUDE_DIR) set (IHTA_ADD_LIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) endif () + if (NOT DEFINED IHTA_ADD_LIB_OBJECT_LIB_POSTFIX) + set (IHTA_ADD_LIB_OBJECT_LIB_POSTFIX _object) + endif () + if (DEFINED IHTA_ADD_LIB_NAMESPACE AND NOT DEFINED IHTA_ADD_LIB_IDE_FOLDER) set (IHTA_ADD_LIB_IDE_FOLDER ${IHTA_ADD_LIB_NAMESPACE}) elseif (NOT DEFINED IHTA_ADD_LIB_NAMESPACE AND DEFINED IHTA_ADD_LIB_IDE_FOLDER) @@ -50,25 +69,36 @@ macro (ihta_add_library) message (FATAL_ERROR "ihta_add_library requires to set either a NAMESPACE or an IDE_FOLDER") endif () - add_library (${IHTA_ADD_LIB_NAME} ${IHTA_ADD_LIB_LIBRARY_TYPE} "") - add_library (${IHTA_ADD_LIB_NAMESPACE}::${IHTA_ADD_LIB_NAME} ALIAS ${IHTA_ADD_LIB_NAME}) + if (IHTA_ADD_LIB_TEST_INPLACE OR IHTA_ADD_LIB_TEST_INTERNALS) + # todo + else () + set (IHTA_ADD_LIB_TARGET ${IHTA_ADD_LIB_NAME}) - target_sources (${IHTA_ADD_LIB_NAME} PRIVATE ${IHTA_ADD_LIB_SOURCES}) + add_library (${IHTA_ADD_LIB_NAME} ${IHTA_ADD_LIB_LIBRARY_TYPE} "") + add_library (${IHTA_ADD_LIB_NAMESPACE}::${IHTA_ADD_LIB_NAME} ALIAS ${IHTA_ADD_LIB_NAME}) + + target_sources (${IHTA_ADD_LIB_NAME} PRIVATE ${IHTA_ADD_LIB_SOURCES}) + endif () # Include Directory target_include_directories ( - ${IHTA_ADD_LIB_NAME} PUBLIC $<BUILD_INTERFACE:${IHTA_ADD_LIB_INCLUDE_DIR}> - $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${IHTA_ADD_LIB_INSTALL_INCLUDE_DIR}> + ${IHTA_ADD_LIB_TARGET} + PUBLIC $<BUILD_INTERFACE:${IHTA_ADD_LIB_INCLUDE_DIR}> + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${IHTA_ADD_LIB_INSTALL_INCLUDE_DIR}> ) # Required compiler features - target_compile_features (${IHTA_ADD_LIB_NAME} PUBLIC cxx_std_17) + target_compile_features (${IHTA_ADD_LIB_TARGET} PUBLIC cxx_std_17) # If build out of parent project, add parent folder library to parent project folder if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set_property (TARGET ${IHTA_ADD_LIB_NAME} PROPERTY FOLDER ${IHTA_ADD_LIB_IDE_FOLDER}) + set_property (TARGET ${IHTA_ADD_LIB_TARGET} PROPERTY FOLDER ${IHTA_ADD_LIB_IDE_FOLDER}) endif () # Organize sources in folders - GroupSourcesByFolder (${IHTA_ADD_LIB_NAME}) + GroupSourcesByFolder (${IHTA_ADD_LIB_TARGET}) + + if (IHTA_ADD_LIB_OUT_VAR) + set (${IHTA_ADD_LIB_OUT_VAR} ${IHTA_ADD_LIB_TARGET}) + endif () endmacro ()