diff --git a/CMakeLists.txt b/CMakeLists.txt index d3db0c28..4ff84f2f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,8 @@ set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) project(isle CXX C) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") + # By configuring CMake with -DDOWNLOAD_DEPENDENCIES=ON/OFF, # users can choose between downloading dependencies or using system libraries option(DOWNLOAD_DEPENDENCIES "Download dependencies" TRUE) @@ -38,7 +40,7 @@ else() # to add search paths. find_package(SDL3 CONFIG REQUIRED) - # TODO add iniparser? + find_package(iniparser REQUIRED COMPONENTS static) endif() include(CheckCXXSourceCompiles) diff --git a/cmake/Findiniparser.cmake b/cmake/Findiniparser.cmake new file mode 100644 index 00000000..3b4e188c --- /dev/null +++ b/cmake/Findiniparser.cmake @@ -0,0 +1,73 @@ +if(WIN32) + set(__iniparser_shared_names "libiniparser.dll.a" "libiniparser.lib") + set(__iniparser_static_names "libiniparser.a" "iniparser.lib") +else() + if(APPLE) + set(__iniparser_shared_names "libiniparser.dylib") + else() + set(__iniparser_shared_names "libiniparser.so") + endif() + set(__iniparser_static_names "libiniparser.a") +endif() + +find_path(iniparser_INCLUDE_PATH + NAMES "iniparser.h" +) + +set(__iniparser_required_vars iniparser_INCLUDE_PATH) + +set(__iniparser_shared_required FALSE) +set(__iniparser_static_required FALSE) + +foreach(__comp ${iniparser_FIND_COMPONENTS}) + if(__comp STREQUAL "shared") + set(__iniparser_shared_required TRUE) + find_library(iniparser_shared_LIBRARY + NAMES ${__iniparser_shared_names} + ) + set(iniparser_shared_FOUND "${iniparser_shared_LIBRARY}") + if(iniparser_FIND_REQUIRED_shared) + list(APPEND __iniparser_required_vars iniparser_shared_LIBRARY) + endif() + endif() + if(__comp STREQUAL "static") + set(__iniparser_static_required TRUE) + find_library(iniparser_static_LIBRARY + NAMES ${__iniparser_static_names} + ) + set(iniparser_static_FOUND "${iniparser_static_LIBRARY}") + if(iniparser_FIND_REQUIRED_static) + list(APPEND __iniparser_required_vars iniparser_static_LIBRARY) + endif() + endif() +endforeach() + +if(NOT __iniparser_shared_required AND NOT __iniparser_static_required) + list(APPEND __iniparser_required_vars iniparser_shared_LIBRARY) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(iniparser + FOUND_VAR iniparser_FOUND + REQUIRED_VARS ${__iniparser_required_vars} + HANDLE_COMPONENTS +) + +if(iniparser_FOUND) + if(NOT TARGET iniparser-shared AND iniparser_shared_LIBRARY) + if(WIN32) + # We don't know the name and location of the dll, so use an imported target + add_library(iniparser-shared UNKNOWN IMPORTED) + set_property(TARGET iniparser-shared PROPERTY IMPORTED_IMPLIB "${iniparser_shared_LIBRARY}") + else() + add_library(iniparser-shared SHARED IMPORTED) + set_property(TARGET iniparser-shared PROPERTY IMPORTED_LOCATION "${iniparser_shared_LIBRARY}") + endif() + set_property(TARGET iniparser-shared PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${iniparser_INCLUDE_PATH}") + endif() + if(NOT TARGET iniparser-static AND iniparser_static_LIBRARY) + add_library(iniparser-static STATIC IMPORTED) + set_property(TARGET iniparser-static PROPERTY IMPORTED_LOCATION "${iniparser_static_LIBRARY}") + set_property(TARGET iniparser-static PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${iniparser_INCLUDE_PATH}") + endif() +endif() \ No newline at end of file