You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
7.1 KiB
CMake
198 lines
7.1 KiB
CMake
# Minimum version imposed by Ubuntu:20.04
|
|
cmake_minimum_required(VERSION 3.16.3)
|
|
|
|
# use TWEAK to categorize the build:
|
|
#
|
|
# * 1.00.0 = GM (tagged and released)
|
|
# * 1.00.0.9 = 1.00.0 Development
|
|
# * 1.00.0.00 = GM Preview
|
|
# * 1.00.0.2 = RC2 (tagged and released)
|
|
# * 1.00.0.20 = RC2 Preview
|
|
# * 1.00.0.29 = RC2 Development
|
|
#
|
|
project(
|
|
exiv2
|
|
VERSION 1.00.0.9
|
|
DESCRIPTION "Exif/IPTC/Xmp C++ metadata library and tools plus ICC Profiles, Previews and more."
|
|
LANGUAGES C CXX
|
|
)
|
|
|
|
# Shared Object versioning (SemVer-like: must bump major on API breakage)
|
|
if(PROJECT_VERSION_MAJOR EQUAL 0)
|
|
# support legacy scheme (e.g. 0.27.x -> 27)
|
|
set(EXIV2LIB_SOVERSION ${PROJECT_VERSION_MINOR})
|
|
else()
|
|
# restart from 30
|
|
math(EXPR EXIV2LIB_SOVERSION "30 + (${PROJECT_VERSION_MAJOR} - 1)")
|
|
endif()
|
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
endif()
|
|
|
|
include(cmake/mainSetup.cmake)
|
|
|
|
# options and their default values
|
|
option(BUILD_SHARED_LIBS "Build exiv2lib as a shared library" ON)
|
|
option(EXIV2_ENABLE_XMP "Build with XMP metadata support" ON)
|
|
option(EXIV2_ENABLE_EXTERNAL_XMP "Use external version of XMP" OFF)
|
|
option(EXIV2_ENABLE_PNG "Build with PNG support (requires zlib)" ON)
|
|
option(EXIV2_ENABLE_NLS "Build native language support (requires gettext)" OFF)
|
|
option(EXIV2_ENABLE_LENSDATA "Build including Nikon lens data" ON)
|
|
option(EXIV2_ENABLE_DYNAMIC_RUNTIME "Use dynamic runtime (used for static libs)" ON)
|
|
option(EXIV2_ENABLE_WEBREADY "Build webready support into library" OFF)
|
|
option(EXIV2_ENABLE_CURL "Use libcurl for HttpIo (WEBREADY)" OFF)
|
|
option(EXIV2_ENABLE_BMFF "Build with BMFF support" ON)
|
|
option(EXIV2_ENABLE_BROTLI "Use Brotli for JPEG XL compressed boxes (BMFF)" ON)
|
|
option(EXIV2_ENABLE_VIDEO "Build with video support" ON)
|
|
option(EXIV2_ENABLE_INIH "Use inih library" ON)
|
|
option(EXIV2_ENABLE_FILESYSTEM_ACCESS "Build with filesystem access" ON)
|
|
|
|
option(EXIV2_BUILD_SAMPLES "Build sample applications" OFF)
|
|
option(EXIV2_BUILD_EXIV2_COMMAND "Build exiv2 command-line executable" ON)
|
|
option(EXIV2_BUILD_UNIT_TESTS "Build unit tests" OFF)
|
|
option(EXIV2_BUILD_FUZZ_TESTS "Build fuzz tests (libFuzzer)" OFF)
|
|
option(EXIV2_BUILD_DOC "Add 'doc' target to generate documentation" OFF)
|
|
|
|
# Only intended to be used by Exiv2 developers/contributors
|
|
option(EXIV2_TEAM_EXTRA_WARNINGS "Add more sanity checks using compiler flags" OFF)
|
|
option(EXIV2_TEAM_WARNINGS_AS_ERRORS "Treat warnings as errors" OFF)
|
|
option(EXIV2_TEAM_USE_SANITIZERS "Enable ASAN and UBSAN when available" OFF)
|
|
|
|
# The EXIV2_TEAM_OSS_FUZZ option is used by the OSS-Fuzz build script:
|
|
#
|
|
# * https://github.com/google/oss-fuzz/tree/master/projects/exiv2/build.sh
|
|
#
|
|
option(EXIV2_TEAM_OSS_FUZZ "Build config for OSS-Fuzz" OFF)
|
|
|
|
option(EXIV2_TEAM_PACKAGING "Additional stuff for generating packages" OFF)
|
|
set(EXTRA_COMPILE_FLAGS " ")
|
|
|
|
mark_as_advanced(EXIV2_TEAM_EXTRA_WARNINGS EXIV2_TEAM_WARNINGS_AS_ERRORS EXIV2_ENABLE_EXTERNAL_XMP EXTRA_COMPILE_FLAGS EXIV2_TEAM_USE_SANITIZERS)
|
|
|
|
option(BUILD_WITH_STACK_PROTECTOR "Build with stack protector" ON)
|
|
option(BUILD_WITH_CCACHE "Use ccache to speed up compilations" OFF)
|
|
option(BUILD_WITH_COVERAGE "Add compiler flags to generate coverage stats" OFF)
|
|
include(cmake/gcovr.cmake REQUIRED)
|
|
|
|
set(PACKAGE_URL "https://exiv2.org")
|
|
|
|
if(EXIV2_ENABLE_EXTERNAL_XMP)
|
|
set(EXIV2_ENABLE_XMP OFF)
|
|
endif()
|
|
|
|
include(cmake/findDependencies.cmake REQUIRED)
|
|
include(cmake/compilerFlags.cmake REQUIRED)
|
|
include(cmake/generateConfigFile.cmake REQUIRED)
|
|
|
|
if(EXIV2_BUILD_DOC)
|
|
include(cmake/generateDoc.cmake REQUIRED)
|
|
generate_documentation("${PROJECT_SOURCE_DIR}/cmake/Doxyfile.in")
|
|
endif()
|
|
|
|
include_directories(${CMAKE_BINARY_DIR}) # Make the exv_conf.h file visible for the full project
|
|
|
|
if(EXIV2_ENABLE_XMP)
|
|
add_subdirectory(xmpsdk)
|
|
endif()
|
|
|
|
include(cmake/compilerFlagsExiv2.cmake REQUIRED)
|
|
|
|
add_subdirectory(src)
|
|
|
|
if(BUILD_TESTING AND EXIV2_BUILD_UNIT_TESTS)
|
|
set(EXIV2_ENABLE_FILESYSTEM_ACCESS ON)
|
|
add_subdirectory(unitTests)
|
|
endif()
|
|
|
|
if(EXIV2_BUILD_FUZZ_TESTS)
|
|
set(EXIV2_ENABLE_FILESYSTEM_ACCESS ON)
|
|
add_subdirectory(fuzz)
|
|
endif()
|
|
|
|
if(EXIV2_BUILD_EXIV2_COMMAND)
|
|
add_subdirectory(app)
|
|
set(EXIV2_ENABLE_FILESYSTEM_ACCESS ON)
|
|
|
|
if(EXIV2_BUILD_SAMPLES)
|
|
add_subdirectory(samples)
|
|
set(EXIV2_ENABLE_FILESYSTEM_ACCESS ON)
|
|
get_directory_property(SAMPLES DIRECTORY samples DEFINITION APPLICATIONS)
|
|
|
|
if(BUILD_TESTING AND Python3_Interpreter_FOUND)
|
|
add_test(
|
|
NAME bashTests
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests
|
|
COMMAND cmake -E env EXIV2_BINDIR=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${Python3_EXECUTABLE} runner.py --verbose bash_tests
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(BUILD_TESTING AND Python3_Interpreter_FOUND)
|
|
add_test(
|
|
NAME bugfixTests
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests
|
|
COMMAND cmake -E env EXIV2_BINDIR=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${Python3_EXECUTABLE} runner.py --verbose bugfixes
|
|
)
|
|
add_test(
|
|
NAME lensTests
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests
|
|
COMMAND cmake -E env EXIV2_BINDIR=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${Python3_EXECUTABLE} runner.py --verbose lens_tests
|
|
)
|
|
# Repeat lens test with a DE locale that uses "," as float delimiter
|
|
# to check that all float conversions are done independently of locale
|
|
# See GitHub issue #2746
|
|
add_test(
|
|
NAME lensTestsLocaleDE
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests
|
|
COMMAND cmake -E env LC_ALL=de_DE.UTF-8 EXIV2_BINDIR=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${Python3_EXECUTABLE} runner.py --verbose lens_tests
|
|
)
|
|
add_test(
|
|
NAME tiffTests
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests
|
|
COMMAND cmake -E env EXIV2_BINDIR=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${Python3_EXECUTABLE} runner.py --verbose tiff_test
|
|
)
|
|
add_test(
|
|
NAME versionTests
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests
|
|
COMMAND cmake -E env EXIV2_BINDIR=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${Python3_EXECUTABLE} runner.py --verbose bash_tests/version_test.py
|
|
)
|
|
add_test(
|
|
NAME regressionTests
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests
|
|
COMMAND cmake -E env EXIV2_BINDIR=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${Python3_EXECUTABLE} runner.py --verbose regression_tests
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(EXIV2_ENABLE_NLS)
|
|
add_subdirectory(po)
|
|
endif()
|
|
|
|
if(EXIV2_TEAM_PACKAGING)
|
|
include(cmake/packaging.cmake)
|
|
endif()
|
|
|
|
# Handle both relative and absolute paths (e.g. NixOS) for a relocatable package
|
|
if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
|
|
set(EXIV2_LIBDIR "${CMAKE_INSTALL_LIBDIR}")
|
|
else()
|
|
join_paths(EXIV2_LIBDIR "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
|
|
endif()
|
|
if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}")
|
|
set(EXIV2_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}")
|
|
else()
|
|
join_paths(EXIV2_INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
|
|
endif()
|
|
configure_file(cmake/exiv2.pc.in exiv2.pc @ONLY)
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/exiv2.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
|
|
# ******************************************************************************
|
|
# Man page
|
|
install(FILES ${PROJECT_SOURCE_DIR}/man/man1/exiv2.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
|
|
|
|
include(cmake/printSummary.cmake)
|
|
|
|
# That's all Folks!
|
|
#
|