aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfuzzard <fuzzard@kodi.tv>2022-05-29 11:19:25 +1000
committerfuzzard <fuzzard@kodi.tv>2022-06-02 10:06:39 +1000
commitfa40d37a6540f77e38c997239a8f662fa1e1d7b3 (patch)
tree491fb2755ba1ae4c64b716d32d700da6204c7036
parent3f30c258adc295c685b5da13bae27f444d24d39d (diff)
[cmake] FindFmt module enable_internal to check existing lib
enables the ENABLE_INTERNAL_FMT path to test for existing lib/package and if it meets the version supplied by FMT-VERSION, we dont need to rebuild.
-rw-r--r--cmake/modules/FindFmt.cmake149
1 files changed, 83 insertions, 66 deletions
diff --git a/cmake/modules/FindFmt.cmake b/cmake/modules/FindFmt.cmake
index fa5f1c585c..a6e811eb5a 100644
--- a/cmake/modules/FindFmt.cmake
+++ b/cmake/modules/FindFmt.cmake
@@ -12,91 +12,108 @@
#
# fmt::fmt - The Fmt library
-if(ENABLE_INTERNAL_FMT)
- include(cmake/scripts/common/ModuleHelpers.cmake)
+# If target exists, no need to rerun find
+# Allows a module that may be a dependency for multiple libraries to just be executed
+# once to populate all required variables/targets
+if(NOT TARGET fmt::fmt)
+ if(ENABLE_INTERNAL_FMT)
- set(MODULE_LC fmt)
+ include(cmake/scripts/common/ModuleHelpers.cmake)
- SETUP_BUILD_VARS()
+ set(MODULE_LC fmt)
- if(APPLE)
- set(EXTRA_ARGS "-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}")
- endif()
+ SETUP_BUILD_VARS()
- set(FMT_VERSION ${${MODULE}_VER})
+ # Check for existing FMT. If version >= FMT-VERSION file version, dont build
+ find_package(FMT CONFIG QUIET)
- if(WIN32 OR WINDOWS_STORE)
- # find the path to the patch executable
- find_package(Patch MODULE REQUIRED)
+ if(FMT_VERSION VERSION_LESS ${${MODULE}_VER})
- set(patch ${CMAKE_SOURCE_DIR}/tools/depends/target/${MODULE_LC}/001-windows-pdb-symbol-gen.patch)
- PATCH_LF_CHECK(${patch})
+ if(APPLE)
+ set(EXTRA_ARGS "-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}")
+ endif()
- set(PATCH_COMMAND ${PATCH_EXECUTABLE} -p1 -i ${patch})
- endif()
+ set(FMT_VERSION ${${MODULE}_VER})
- set(CMAKE_ARGS -DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS}
- -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
- -DFMT_DOC=OFF
- -DFMT_TEST=OFF
- -DFMT_INSTALL=ON
- "${EXTRA_ARGS}")
+ if(WIN32 OR WINDOWS_STORE)
+ # find the path to the patch executable
+ find_package(Patch MODULE REQUIRED)
- # fmt debug uses postfix d for all platforms
- set(FMT_DEBUG_POSTFIX d)
+ set(patch ${CMAKE_SOURCE_DIR}/tools/depends/target/${MODULE_LC}/001-windows-pdb-symbol-gen.patch)
+ PATCH_LF_CHECK(${patch})
- BUILD_DEP_TARGET()
-else()
- find_package(FMT 6.1.2 CONFIG REQUIRED QUIET)
+ set(PATCH_COMMAND ${PATCH_EXECUTABLE} -p1 -i ${patch})
+ endif()
- if(PKG_CONFIG_FOUND)
- pkg_check_modules(PC_FMT libfmt QUIET)
- if(PC_FMT_VERSION AND NOT FMT_VERSION)
- set(FMT_VERSION ${PC_FMT_VERSION})
- endif()
- endif()
+ set(CMAKE_ARGS -DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS}
+ -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
+ -DFMT_DOC=OFF
+ -DFMT_TEST=OFF
+ -DFMT_INSTALL=ON
+ "${EXTRA_ARGS}")
- find_path(FMT_INCLUDE_DIR NAMES fmt/format.h
- PATHS ${PC_FMT_INCLUDEDIR})
+ # fmt debug uses postfix d for all platforms
+ set(FMT_DEBUG_POSTFIX d)
- find_library(FMT_LIBRARY_RELEASE NAMES fmt
- PATHS ${PC_FMT_LIBDIR})
- find_library(FMT_LIBRARY_DEBUG NAMES fmtd
- PATHS ${PC_FMT_LIBDIR})
-
-endif()
+ BUILD_DEP_TARGET()
+ else()
+ # Populate paths for find_package_handle_standard_args
+ find_path(FMT_INCLUDE_DIR NAMES fmt/format.h)
+ find_library(FMT_LIBRARY_RELEASE NAMES fmt)
+ find_library(FMT_LIBRARY_DEBUG NAMES fmtd)
+ endif()
+ else()
+ find_package(FMT 6.1.2 CONFIG REQUIRED QUIET)
+
+ if(PKG_CONFIG_FOUND)
+ pkg_check_modules(PC_FMT libfmt QUIET)
+ if(PC_FMT_VERSION AND NOT FMT_VERSION)
+ set(FMT_VERSION ${PC_FMT_VERSION})
+ endif()
+ endif()
-include(SelectLibraryConfigurations)
-select_library_configurations(FMT)
+ find_path(FMT_INCLUDE_DIR NAMES fmt/format.h
+ PATHS ${PC_FMT_INCLUDEDIR})
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(Fmt
- REQUIRED_VARS FMT_LIBRARY FMT_INCLUDE_DIR
- VERSION_VAR FMT_VERSION)
+ find_library(FMT_LIBRARY_RELEASE NAMES fmt
+ PATHS ${PC_FMT_LIBDIR})
+ find_library(FMT_LIBRARY_DEBUG NAMES fmtd
+ PATHS ${PC_FMT_LIBDIR})
-if(FMT_FOUND)
- set(FMT_LIBRARIES ${FMT_LIBRARY})
- set(FMT_INCLUDE_DIRS ${FMT_INCLUDE_DIR})
+ endif()
- if(NOT TARGET fmt::fmt)
- add_library(fmt::fmt UNKNOWN IMPORTED)
- if(FMT_LIBRARY_RELEASE)
+ include(SelectLibraryConfigurations)
+ select_library_configurations(FMT)
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(Fmt
+ REQUIRED_VARS FMT_LIBRARY FMT_INCLUDE_DIR
+ VERSION_VAR FMT_VERSION)
+
+ if(FMT_FOUND)
+ set(FMT_LIBRARIES ${FMT_LIBRARY})
+ set(FMT_INCLUDE_DIRS ${FMT_INCLUDE_DIR})
+
+ if(NOT TARGET fmt::fmt)
+ add_library(fmt::fmt UNKNOWN IMPORTED)
+ if(FMT_LIBRARY_RELEASE)
+ set_target_properties(fmt::fmt PROPERTIES
+ IMPORTED_CONFIGURATIONS RELEASE
+ IMPORTED_LOCATION "${FMT_LIBRARY_RELEASE}")
+ endif()
+ if(FMT_LIBRARY_DEBUG)
+ set_target_properties(fmt::fmt PROPERTIES
+ IMPORTED_CONFIGURATIONS DEBUG
+ IMPORTED_LOCATION "${FMT_LIBRARY_DEBUG}")
+ endif()
set_target_properties(fmt::fmt PROPERTIES
- IMPORTED_CONFIGURATIONS RELEASE
- IMPORTED_LOCATION "${FMT_LIBRARY_RELEASE}")
+ INTERFACE_INCLUDE_DIRECTORIES "${FMT_INCLUDE_DIR}")
endif()
- if(FMT_LIBRARY_DEBUG)
- set_target_properties(fmt::fmt PROPERTIES
- IMPORTED_CONFIGURATIONS DEBUG
- IMPORTED_LOCATION "${FMT_LIBRARY_DEBUG}")
+ if(TARGET fmt)
+ add_dependencies(fmt::fmt fmt)
endif()
- set_target_properties(fmt::fmt PROPERTIES
- INTERFACE_INCLUDE_DIRECTORIES "${FMT_INCLUDE_DIR}")
+ set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP fmt::fmt)
endif()
- if(TARGET fmt)
- add_dependencies(fmt::fmt fmt)
- endif()
- set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP fmt::fmt)
-endif()
-mark_as_advanced(FMT_INCLUDE_DIR FMT_LIBRARY)
+ mark_as_advanced(FMT_INCLUDE_DIR FMT_LIBRARY)
+endif()