diff --git a/README.md b/README.md index 44d8afacbb57bd1cebf71b737a17d6937e1d5344..b440c034b252724ffbf4471568becf942fa7fd37 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ include(FetchContent) FetchContent_Declare( LoadStaticSharedTargets GIT_REPOSITORY "https://github.com/lepus2589/LoadStaticSharedTargets.git" - GIT_TAG v1.1 + GIT_TAG v1.2 ) FetchContent_MakeAvailable(LoadStaticSharedTargets) FetchContent_GetProperties( diff --git a/src/cmake/LoadStaticSharedTargets.cmake b/src/cmake/LoadStaticSharedTargets.cmake index 8f1226304d11e14039e49f2d899cc4493fed722c..a2aad9e0e1b38374f9c3c19b1ac6f0a62f656ccc 100644 --- a/src/cmake/LoadStaticSharedTargets.cmake +++ b/src/cmake/LoadStaticSharedTargets.cmake @@ -50,26 +50,26 @@ load_static_shared_targets( ]] macro(load_static_shared_targets) - set(${CMAKE_FIND_PACKAGE_NAME}_known_comps static shared) - set(${CMAKE_FIND_PACKAGE_NAME}_comp_static NO) - set(${CMAKE_FIND_PACKAGE_NAME}_comp_shared NO) + set(${CMAKE_FIND_PACKAGE_NAME}_KNOWN_COMPS static shared) + set(${CMAKE_FIND_PACKAGE_NAME}_COMP_static NO) + set(${CMAKE_FIND_PACKAGE_NAME}_COMP_shared NO) # Iterate the list of requested components given to `find_package()` - foreach (${CMAKE_FIND_PACKAGE_NAME}_comp IN LISTS ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS) + foreach (${CMAKE_FIND_PACKAGE_NAME}_COMP IN LISTS ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS) # If it's a valid component, turn on the respective switch. - if (${CMAKE_FIND_PACKAGE_NAME}_comp IN_LIST ${CMAKE_FIND_PACKAGE_NAME}_known_comps) - set(${CMAKE_FIND_PACKAGE_NAME}_comp_${${CMAKE_FIND_PACKAGE_NAME}_comp} YES) + if (${CMAKE_FIND_PACKAGE_NAME}_COMP IN_LIST ${CMAKE_FIND_PACKAGE_NAME}_KNOWN_COMPS) + set(${CMAKE_FIND_PACKAGE_NAME}_COMP_${${CMAKE_FIND_PACKAGE_NAME}_COMP} YES) # Else do error handling. else () set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE - "${CMAKE_FIND_PACKAGE_NAME} does not recognize component `${${CMAKE_FIND_PACKAGE_NAME}_comp}`.") + "${CMAKE_FIND_PACKAGE_NAME} does not recognize component `${${CMAKE_FIND_PACKAGE_NAME}_COMP}`.") set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) return() endif () endforeach () # Components static and shared are mutually exclusive. - if (${CMAKE_FIND_PACKAGE_NAME}_comp_static AND ${CMAKE_FIND_PACKAGE_NAME}_comp_shared) + if (${CMAKE_FIND_PACKAGE_NAME}_COMP_static AND ${CMAKE_FIND_PACKAGE_NAME}_COMP_shared) set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "${CMAKE_FIND_PACKAGE_NAME} `static` and `shared` components are mutually exclusive.") set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) @@ -77,91 +77,54 @@ macro(load_static_shared_targets) endif () # Parse static and shared targets from argument list. - _static_shared_parse_args(${ARGN}) + set(${CMAKE_FIND_PACKAGE_NAME}_ARGUMENT_KEYWORDS STATIC_TARGETS SHARED_TARGETS) + cmake_parse_arguments(${CMAKE_FIND_PACKAGE_NAME} "" "" "${${CMAKE_FIND_PACKAGE_NAME}_ARGUMENT_KEYWORDS}" ${ARGN}) + # We now have ${CMAKE_FIND_PACKAGE_NAME}_STATIC_TARGETS and + # ${CMAKE_FIND_PACKAGE_NAME}_SHARED_TARGETS variables created for us. # Static component requested - if (${CMAKE_FIND_PACKAGE_NAME}_comp_static) - _static_shared_load_targets(static) + if (${CMAKE_FIND_PACKAGE_NAME}_COMP_static) + _static_shared_load_targets(STATIC) # Shared component requested - elseif (${CMAKE_FIND_PACKAGE_NAME}_comp_shared) - _static_shared_load_targets(shared) + elseif (${CMAKE_FIND_PACKAGE_NAME}_COMP_shared) + _static_shared_load_targets(SHARED) # ${CMAKE_FIND_PACKAGE_NAME}_SHARED_LIBS cache variable set to ON elseif (DEFINED ${CMAKE_FIND_PACKAGE_NAME}_SHARED_LIBS AND ${CMAKE_FIND_PACKAGE_NAME}_SHARED_LIBS) - _static_shared_load_targets(shared) + _static_shared_load_targets(SHARED) # ${CMAKE_FIND_PACKAGE_NAME}_SHARED_LIBS cache variable set to OFF elseif (DEFINED ${CMAKE_FIND_PACKAGE_NAME}_SHARED_LIBS AND NOT ${CMAKE_FIND_PACKAGE_NAME}_SHARED_LIBS) - _static_shared_load_targets(static) + _static_shared_load_targets(STATIC) # BUILD_SHARED_LIBS variable set to ON elseif (BUILD_SHARED_LIBS) # If shared target is installed, include it. - if (EXISTS "${${CMAKE_FIND_PACKAGE_NAME}_shared_targets}") - _static_shared_load_targets(shared) + if (EXISTS "${${CMAKE_FIND_PACKAGE_NAME}_SHARED_TARGETS}") + _static_shared_load_targets(SHARED) # Otherwise at least load the static target else () - _static_shared_load_targets(static) + _static_shared_load_targets(STATIC) endif () # BUILD_SHARED_LIBS variable set to OFF else () # If static target is installed, include it. - if (EXISTS "${${CMAKE_FIND_PACKAGE_NAME}_static_targets}") - _static_shared_load_targets(static) + if (EXISTS "${${CMAKE_FIND_PACKAGE_NAME}_STATIC_TARGETS}") + _static_shared_load_targets(STATIC) # Otherwise at least load the shared target else () - _static_shared_load_targets(shared) + _static_shared_load_targets(SHARED) endif () endif () endmacro() # Macro to check, if the requested file with the exported targets is installed. # Do error handling if not, include it otherwise. -macro(_static_shared_load_targets type) - foreach (${CMAKE_FIND_PACKAGE_NAME}_target ${${CMAKE_FIND_PACKAGE_NAME}_${type}_targets}) - if (NOT EXISTS "${${CMAKE_FIND_PACKAGE_NAME}_target}") +macro(_static_shared_load_targets TYPE) + foreach (${CMAKE_FIND_PACKAGE_NAME}_TARGET ${${CMAKE_FIND_PACKAGE_NAME}_${TYPE}_TARGETS}) + if (NOT EXISTS "${${CMAKE_FIND_PACKAGE_NAME}_TARGET}") set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE - "${CMAKE_FIND_PACKAGE_NAME} `${type}` libraries were requested but not found.") + "${CMAKE_FIND_PACKAGE_NAME} `${TYPE}` libraries were requested but not found.") set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) return() endif () - include("${${CMAKE_FIND_PACKAGE_NAME}_target}") + include("${${CMAKE_FIND_PACKAGE_NAME}_TARGET}") endforeach () endmacro() - -# Parse the list of static targets and the list of shared targets from the macro -# arguments. -macro(_static_shared_parse_args) - set(_STATIC_SHARED_EXTRA_MACRO_ARGS ${ARGN}) - list(FIND _STATIC_SHARED_EXTRA_MACRO_ARGS STATIC_TARGETS _STATIC_SHARED_STATIC_OPTION_INDEX) - list(FIND _STATIC_SHARED_EXTRA_MACRO_ARGS SHARED_TARGETS _STATIC_SHARED_SHARED_OPTION_INDEX) - - if (NOT _STATIC_SHARED_STATIC_OPTION_INDEX EQUAL -1 AND NOT _STATIC_SHARED_SHARED_OPTION_INDEX EQUAL -1) - math(EXPR _STATIC_SHARED_STATIC_START_INDEX "${_STATIC_SHARED_STATIC_OPTION_INDEX} + 1") - math(EXPR _STATIC_SHARED_SHARED_START_INDEX "${_STATIC_SHARED_SHARED_OPTION_INDEX} + 1") - - if (_STATIC_SHARED_STATIC_OPTION_INDEX LESS _STATIC_SHARED_SHARED_OPTION_INDEX) - math(EXPR _STATIC_SHARED_STATIC_LENGTH "${_STATIC_SHARED_SHARED_OPTION_INDEX} - ${_STATIC_SHARED_STATIC_START_INDEX}") - set(_STATIC_SHARED_SHARED_LENGTH -1) - else () - set(_STATIC_SHARED_STATIC_LENGTH -1) - math(EXPR _STATIC_SHARED_SHARED_LENGTH "${_STATIC_SHARED_STATIC_OPTION_INDEX} - ${_STATIC_SHARED_SHARED_START_INDEX}") - endif () - - list( - SUBLIST - _STATIC_SHARED_EXTRA_MACRO_ARGS - ${_STATIC_SHARED_SHARED_START_INDEX} - ${_STATIC_SHARED_SHARED_LENGTH} - ${CMAKE_FIND_PACKAGE_NAME}_shared_targets - ) - - list( - SUBLIST - _STATIC_SHARED_EXTRA_MACRO_ARGS - ${_STATIC_SHARED_STATIC_START_INDEX} - ${_STATIC_SHARED_STATIC_LENGTH} - ${CMAKE_FIND_PACKAGE_NAME}_static_targets - ) - # Else do error handling. - else () - message(FATAL_ERROR "load_static_shared_targets() has been called with invalid arguments!") - endif () -endmacro()