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.
exiv2/src/CMakeLists.txt

275 lines
8.3 KiB
CMake

# Note that this is a hack for testing the internals of the library. If EXIV2_BUILD_UNIT_TESTS==OFF
# Then we only export the symbols that are explicitly exported
if( EXIV2_BUILD_UNIT_TESTS )
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) # Requires CMake 3.3.3
endif()
include(CMakePackageConfigHelpers)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_library( exiv2lib_int OBJECT
canonmn_int.cpp canonmn_int.hpp
casiomn_int.cpp casiomn_int.hpp
cr2header_int.cpp cr2header_int.hpp
crwimage_int.cpp crwimage_int.hpp
fujimn_int.cpp fujimn_int.hpp
helper_functions.cpp helper_functions.hpp
image_int.cpp image_int.hpp
jp2image_int.cpp jp2image_int.hpp
makernote_int.cpp makernote_int.hpp
minoltamn_int.cpp minoltamn_int.hpp
nikonmn_int.cpp nikonmn_int.hpp
olympusmn_int.cpp olympusmn_int.hpp
orfimage_int.cpp orfimage_int.hpp
panasonicmn_int.cpp panasonicmn_int.hpp
pentaxmn_int.cpp pentaxmn_int.hpp
rw2image_int.cpp rw2image_int.hpp
safe_op.hpp
samsungmn_int.cpp samsungmn_int.hpp
sigmamn_int.cpp sigmamn_int.hpp
sonymn_int.cpp sonymn_int.hpp
tags_int.cpp tags_int.hpp
tiffcomposite_int.cpp tiffcomposite_int.hpp
tiffimage_int.cpp tiffimage_int.hpp
tiffvisitor_int.cpp tiffvisitor_int.hpp
tifffwd_int.hpp
utils.hpp utils.cpp
)
set(PUBLIC_HEADERS
../include/exiv2/basicio.hpp
../include/exiv2/bmffimage.hpp
../include/exiv2/bmpimage.hpp
../include/exiv2/config.h
../include/exiv2/convert.hpp
../include/exiv2/cr2image.hpp
../include/exiv2/crwimage.hpp
../include/exiv2/datasets.hpp
../include/exiv2/easyaccess.hpp
../include/exiv2/epsimage.hpp
../include/exiv2/error.hpp
../include/exiv2/exif.hpp
../include/exiv2/exiv2.hpp
../include/exiv2/futils.hpp
../include/exiv2/gifimage.hpp
../include/exiv2/http.hpp
../include/exiv2/image.hpp
../include/exiv2/image_types.hpp
../include/exiv2/ini.hpp
../include/exiv2/iptc.hpp
../include/exiv2/jp2image.hpp
../include/exiv2/jpgimage.hpp
../include/exiv2/matroskavideo.hpp
../include/exiv2/metadatum.hpp
../include/exiv2/mrwimage.hpp
../include/exiv2/orfimage.hpp
../include/exiv2/pgfimage.hpp
../include/exiv2/photoshop.hpp
../include/exiv2/preview.hpp
../include/exiv2/properties.hpp
../include/exiv2/psdimage.hpp
../include/exiv2/rafimage.hpp
../include/exiv2/riffvideo.hpp
../include/exiv2/rw2image.hpp
../include/exiv2/slice.hpp
../include/exiv2/tags.hpp
../include/exiv2/tgaimage.hpp
../include/exiv2/tiffimage.hpp
../include/exiv2/types.hpp
../include/exiv2/value.hpp
../include/exiv2/version.hpp
../include/exiv2/webpimage.hpp
../include/exiv2/xmp_exiv2.hpp
../include/exiv2/xmpsidecar.hpp
../include/exiv2/quicktimevideo.hpp
)
add_library( exiv2lib
basicio.cpp
bmffimage.cpp
bmpimage.cpp
convert.cpp
cr2image.cpp
crwimage.cpp
datasets.cpp
easyaccess.cpp
epsimage.cpp
error.cpp
exif.cpp
futils.cpp
fff.h
gifimage.cpp
http.cpp
image.cpp
ini.cpp
iptc.cpp
jp2image.cpp
jpgimage.cpp
matroskavideo.cpp
metadatum.cpp
mrwimage.cpp
orfimage.cpp
pgfimage.cpp
photoshop.cpp
preview.cpp
properties.cpp
psdimage.cpp
rafimage.cpp
riffvideo.cpp
rw2image.cpp
tags.cpp
tgaimage.cpp
tiffimage.cpp
types.cpp
value.cpp
version.cpp
webpimage.cpp
xmp.cpp
xmpsidecar.cpp
quicktimevideo.cpp
${PUBLIC_HEADERS}
$<TARGET_OBJECTS:exiv2lib_int>
)
generate_export_header(exiv2lib
EXPORT_MACRO_NAME EXIV2API
EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/exiv2lib_export.h
STATIC_DEFINE exiv2lib_STATIC
)
# Conditional addition of sources to library targets
# ---------------------------------------------------------
if( EXIV2_ENABLE_PNG )
set(PUBLIC_HEADERS ${PUBLIC_HEADERS} ../include/exiv2/pngimage.hpp)
target_sources(exiv2lib_int PRIVATE pngchunk_int.cpp pngchunk_int.hpp)
target_sources(exiv2lib PRIVATE pngimage.cpp ../include/exiv2/pngimage.hpp)
endif()
# Other library target properties
# ---------------------------------------------------------
if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
# Do not check format overflows on this file, to skip a false positive warning
set_source_files_properties(value.cpp PROPERTIES COMPILE_FLAGS -Wno-format-overflow)
endif()
set_target_properties( exiv2lib PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MINOR}
OUTPUT_NAME exiv2
PDB_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMPILE_FLAGS ${EXTRA_COMPILE_FLAGS}
)
if (MSVC)
set_target_properties(exiv2lib PROPERTIES LINK_FLAGS "/ignore:4099")
endif()
set_target_properties( exiv2lib_int PROPERTIES
POSITION_INDEPENDENT_CODE ON
COMPILE_DEFINITIONS exiv2lib_EXPORTS
)
# NOTE: Cannot use target_link_libraries on OBJECT libraries with old versions of CMake
target_include_directories(exiv2lib_int PRIVATE ${ZLIB_INCLUDE_DIR})
target_include_directories(exiv2lib SYSTEM PRIVATE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/xmpsdk/include>
)
if (EXIV2_ENABLE_XMP OR EXIV2_ENABLE_EXTERNAL_XMP)
target_include_directories(exiv2lib PRIVATE ${EXPAT_INCLUDE_DIR})
target_link_libraries(exiv2lib PRIVATE EXPAT::EXPAT)
endif()
if (EXIV2_ENABLE_XMP)
target_link_libraries(exiv2lib PRIVATE exiv2-xmp)
elseif(EXIV2_ENABLE_EXTERNAL_XMP)
target_link_libraries(exiv2lib PUBLIC ${XMPSDK_LIBRARY})
target_include_directories(exiv2lib PUBLIC ${XMPSDK_INCLUDE_DIR})
target_compile_definitions(exiv2lib PUBLIC EXV_ADOBE_XMPSDK=2016)
endif()
# Use include/exiv2 to build library code
target_include_directories(exiv2lib PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/exiv2>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_include_directories(exiv2lib_int PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/exiv2>
)
if (EXIV2_ENABLE_WEBREADY)
if( EXIV2_ENABLE_CURL )
target_include_directories(exiv2lib SYSTEM PRIVATE ${CURL_INCLUDE_DIR} )
target_link_libraries(exiv2lib PRIVATE ${CURL_LIBRARIES})
endif()
endif()
if (WIN32)
target_compile_definitions(exiv2lib PRIVATE PSAPI_VERSION=1) # to be compatible with <= WinVista (#905)
# Since windows.h is included in some headers, we need to propagate this definition
target_compile_definitions(exiv2lib PUBLIC WIN32_LEAN_AND_MEAN)
endif()
if (NOT MSVC)
if ( CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" )
target_link_libraries( exiv2lib PRIVATE -lprocstat)
endif()
if (MINGW)
target_link_libraries( exiv2lib PRIVATE psapi ws2_32 shell32 )
endif()
else()
target_link_libraries( exiv2lib PRIVATE psapi ws2_32 shell32 )
endif()
if( EXIV2_ENABLE_PNG )
target_link_libraries( exiv2lib PRIVATE ZLIB::ZLIB)
endif()
if( EXIV2_ENABLE_BMFF AND BROTLI_FOUND )
target_link_libraries( exiv2lib PRIVATE ${Brotli_LIBRARIES})
target_include_directories(exiv2lib PRIVATE ${Brotli_INCLUDE_DIRS})
endif()
if( EXIV2_ENABLE_NLS )
target_link_libraries(exiv2lib PRIVATE ${Intl_LIBRARIES})
target_include_directories(exiv2lib PRIVATE ${Intl_INCLUDE_DIRS})
target_include_directories(exiv2lib_int PRIVATE ${Intl_INCLUDE_DIRS})
# Definition needed for translations
join_paths(EXV_LOCALEDIR ".." "${CMAKE_INSTALL_LOCALEDIR}")
target_compile_definitions(exiv2lib PUBLIC EXV_LOCALEDIR="${EXV_LOCALEDIR}")
endif()
if( ICONV_FOUND )
target_link_libraries( exiv2lib PRIVATE Iconv::Iconv )
endif()
write_basic_package_version_file(exiv2ConfigVersion.cmake COMPATIBILITY ExactVersion)
install(TARGETS exiv2lib EXPORT exiv2Config
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(FILES
${PUBLIC_HEADERS}
${CMAKE_BINARY_DIR}/exv_conf.h
${CMAKE_BINARY_DIR}/exiv2lib_export.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/exiv2)
install(EXPORT exiv2Config DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/exiv2")
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/exiv2ConfigVersion.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/exiv2")