2024-06-04 07:29:41 +02:00
|
|
|
cmake_minimum_required(VERSION 3.5)
|
2021-11-22 23:55:09 +01:00
|
|
|
project(cmake-user LANGUAGES C)
|
|
|
|
|
|
|
|
message(STATUS "CMAKE_COMMAND: ${CMAKE_COMMAND}")
|
|
|
|
set(CHECK_CMAKE_VERSION "NOTFOUND" CACHE STRING "Version of CMake expected to be found")
|
|
|
|
if(NOT CHECK_CMAKE_VERSION)
|
|
|
|
message(WARNING "CMake version check: skipped (actual: ${CMAKE_VERSION})")
|
|
|
|
elseif(NOT CHECK_CMAKE_VERSION VERSION_EQUAL CMAKE_VERSION)
|
|
|
|
message(SEND_ERROR "CMake version check: failed (actual: ${CMAKE_VERSION} expected: ${CHECK_CMAKE_VERSION})")
|
|
|
|
else()
|
|
|
|
message(STATUS "CMake version check: success (actual: ${CMAKE_VERSION})")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# add_library overload
|
|
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/lib.c" "int lib_unused() { return 1; }")
|
|
|
|
add_library(lib "${CMAKE_CURRENT_BINARY_DIR}/lib.c")
|
|
|
|
|
|
|
|
# add_executable overload
|
|
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/exe.c" "int main() { return 0; }")
|
|
|
|
add_executable(exe "${CMAKE_CURRENT_BINARY_DIR}/exe.c")
|
|
|
|
|
|
|
|
# install overload
|
|
|
|
set(X_VCPKG_APPLOCAL_DEPS_INSTALL 1)
|
|
|
|
install(TARGETS exe lib
|
|
|
|
RUNTIME DESTINATION bin
|
|
|
|
ARCHIVE DESTINATION lib
|
|
|
|
LIBRARY DESTINATION lib
|
|
|
|
)
|
|
|
|
|
|
|
|
# find_package overload and wrapper
|
|
|
|
set(FIND_PACKAGES "" CACHE STRING "List of packages to be found and used")
|
2022-07-07 23:27:38 +02:00
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
|
2021-11-22 23:55:09 +01:00
|
|
|
foreach(package ${FIND_PACKAGES})
|
|
|
|
string(TOUPPER "${package}" package_upper)
|
|
|
|
set(CMAKE_FIND_DEBUG_MODE ON)
|
|
|
|
find_package("${package}" QUIET)
|
|
|
|
set(CMAKE_FIND_DEBUG_MODE OFF)
|
|
|
|
if(NOT ${package}_FOUND AND NOT ${package_upper}_FOUND)
|
|
|
|
message(SEND_ERROR "find_package(${package}) check: failed")
|
2022-04-01 22:30:43 +02:00
|
|
|
continue()
|
|
|
|
endif()
|
2022-05-18 01:53:40 +02:00
|
|
|
# REQUIRED changes the behaviour find_package_handle_standard_args.
|
|
|
|
find_package("${package}" REQUIRED)
|
2022-04-01 22:30:43 +02:00
|
|
|
message(STATUS "find_package(${package}) check: success")
|
|
|
|
|
|
|
|
set(libraries_var "")
|
|
|
|
if(DEFINED ${package}_LIBRARIES)
|
|
|
|
set(libraries_var "${package}_LIBRARIES")
|
2022-04-11 17:33:06 +02:00
|
|
|
elseif(DEFINED ${package_upper}_LIBRARIES)
|
|
|
|
set(libraries_var "${package_upper}_LIBRARIES")
|
2022-04-01 22:30:43 +02:00
|
|
|
elseif(DEFINED ${package}_LIBRARY)
|
|
|
|
set(libraries_var "${package}_LIBRARY")
|
2022-04-11 17:33:06 +02:00
|
|
|
elseif(DEFINED ${package_upper}_LIBRARY)
|
|
|
|
set(libraries_var "${package_upper}_LIBRARY")
|
2021-11-22 23:55:09 +01:00
|
|
|
else()
|
2022-04-01 22:30:43 +02:00
|
|
|
message(STATUS "${package}_LIBRARY/IES: undefined")
|
|
|
|
continue()
|
|
|
|
endif()
|
|
|
|
set(libraries "${${libraries_var}}")
|
|
|
|
message(STATUS "${libraries_var}: ${libraries}")
|
|
|
|
|
|
|
|
if(package STREQUAL "Intl" AND NOT Intl_LIBRARY)
|
|
|
|
continue() # using libintl.h from C runtime library
|
|
|
|
endif()
|
|
|
|
target_link_libraries(exe PRIVATE ${libraries})
|
|
|
|
|
2022-06-14 01:25:35 +02:00
|
|
|
set(last_keyword "")
|
2022-04-01 22:30:43 +02:00
|
|
|
foreach(item IN LISTS libraries)
|
2022-06-14 01:25:35 +02:00
|
|
|
if(item STREQUAL "optimized" OR item STREQUAL "debug")
|
|
|
|
set(last_keyword "${item}")
|
2022-04-01 22:30:43 +02:00
|
|
|
continue()
|
|
|
|
endif()
|
|
|
|
string(FIND "${item}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/" starts_with_release)
|
|
|
|
string(FIND "${item}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib/" starts_with_debug)
|
2022-06-14 01:25:35 +02:00
|
|
|
if(starts_with_release EQUAL "0")
|
|
|
|
if(last_keyword STREQUAL "optimized")
|
|
|
|
# okay
|
|
|
|
elseif(last_keyword STREQUAL "debug")
|
|
|
|
message(SEND_ERROR "Release lib for 'debug' keyword: ${item}")
|
|
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
message(SEND_ERROR "Release lib for 'Debug' build: ${item}")
|
|
|
|
endif()
|
|
|
|
elseif(starts_with_debug EQUAL "0")
|
|
|
|
if(last_keyword STREQUAL "debug")
|
|
|
|
# okay
|
|
|
|
elseif(last_keyword STREQUAL "optimized")
|
|
|
|
message(SEND_ERROR "Debug lib for 'optimized' keyword: ${item}")
|
|
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
|
|
message(SEND_ERROR "Debug lib for 'Release' build: ${item}")
|
|
|
|
endif()
|
2022-04-01 22:30:43 +02:00
|
|
|
endif()
|
2022-06-14 01:25:35 +02:00
|
|
|
set(last_keyword "")
|
|
|
|
continue()
|
2022-04-01 22:30:43 +02:00
|
|
|
endforeach()
|
2021-11-22 23:55:09 +01:00
|
|
|
endforeach()
|