101 lines
3.2 KiB
CMake
101 lines
3.2 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
|
|
project(iZo VERSION 0.1.0 LANGUAGES CXX)
|
|
|
|
add_library(izo STATIC)
|
|
add_library(iZo::izo ALIAS izo)
|
|
|
|
target_sources(izo
|
|
PRIVATE
|
|
src/command_line.cpp
|
|
src/dialogs.cpp
|
|
src/directory_watcher.cpp
|
|
src/process.cpp
|
|
src/time.cpp
|
|
$<$<PLATFORM_ID:Windows>:src/interaction_windows.cpp>
|
|
$<$<PLATFORM_ID:Windows>:src/platform_windows.cpp>
|
|
$<$<PLATFORM_ID:Linux>:src/interaction_linux.cpp>
|
|
$<$<PLATFORM_ID:Linux>:src/platform_linux.cpp>
|
|
$<$<PLATFORM_ID:Windows>:src/dialogs_windows.cpp>
|
|
$<$<PLATFORM_ID:Linux>:src/dialogs_linux.cpp>
|
|
)
|
|
|
|
target_include_directories(izo
|
|
PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
$<INSTALL_INTERFACE:include>
|
|
)
|
|
target_compile_features(izo PUBLIC cxx_std_17)
|
|
set_target_properties(izo PROPERTIES
|
|
CXX_EXTENSIONS OFF
|
|
OUTPUT_NAME izo
|
|
)
|
|
|
|
if(WIN32)
|
|
target_compile_definitions(izo PRIVATE UNICODE _UNICODE WIN32_LEAN_AND_MEAN NOMINMAX)
|
|
target_link_libraries(izo PRIVATE advapi32 comdlg32 ole32 shell32 uuid user32)
|
|
elseif(UNIX AND NOT APPLE)
|
|
# No link-time desktop dependency. The Linux backend discovers zenity or
|
|
# kdialog at runtime so applications do not inherit GTK or Qt dependencies.
|
|
target_link_libraries(izo PRIVATE dl)
|
|
else()
|
|
message(FATAL_ERROR "iZo currently supports Windows and Linux")
|
|
endif()
|
|
|
|
include(GNUInstallDirs)
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
install(TARGETS izo EXPORT iZoTargets
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
)
|
|
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
install(EXPORT iZoTargets
|
|
FILE iZoTargets.cmake
|
|
NAMESPACE iZo::
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/iZo
|
|
)
|
|
|
|
write_basic_package_version_file(
|
|
"${CMAKE_CURRENT_BINARY_DIR}/iZoConfigVersion.cmake"
|
|
VERSION ${PROJECT_VERSION}
|
|
COMPATIBILITY SameMajorVersion
|
|
)
|
|
configure_package_config_file(
|
|
cmake/iZoConfig.cmake.in
|
|
"${CMAKE_CURRENT_BINARY_DIR}/iZoConfig.cmake"
|
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/iZo
|
|
)
|
|
install(FILES
|
|
"${CMAKE_CURRENT_BINARY_DIR}/iZoConfig.cmake"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/iZoConfigVersion.cmake"
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/iZo
|
|
)
|
|
|
|
option(IZO_BUILD_EXAMPLE "Build the iZo example program" OFF)
|
|
if(IZO_BUILD_EXAMPLE)
|
|
add_executable(izo_example examples/dialogs.cpp)
|
|
target_link_libraries(izo_example PRIVATE iZo::izo)
|
|
endif()
|
|
|
|
option(IZO_BUILD_TESTS "Build the iZo tests" OFF)
|
|
if(IZO_BUILD_TESTS)
|
|
if(NOT UNIX OR APPLE)
|
|
message(FATAL_ERROR "iZo unit tests currently require Linux")
|
|
endif()
|
|
enable_testing()
|
|
function(izo_add_test name)
|
|
add_executable(izo_test_${name} tests/${name}.cpp)
|
|
target_link_libraries(izo_test_${name} PRIVATE iZo::izo)
|
|
add_test(NAME ${name} COMMAND izo_test_${name})
|
|
set_tests_properties(${name} PROPERTIES TIMEOUT 10)
|
|
endfunction()
|
|
izo_add_test(environment_paths)
|
|
izo_add_test(command_line)
|
|
izo_add_test(system_time_debug)
|
|
izo_add_test(dynamic_library)
|
|
izo_add_test(process)
|
|
izo_add_test(directory_watcher)
|
|
izo_add_test(headless_interaction)
|
|
endif()
|