|
Packit |
01d647 |
# CMakeLists.txt for exiv2 library and command-line program
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
# Note that this is a hack for testing the internals of the library. If EXIV2_BUILD_UNIT_TESTS==OFF
|
|
Packit |
01d647 |
# Then we only export the symbols that are explicitly exported
|
|
Packit |
01d647 |
if( EXIV2_BUILD_UNIT_TESTS )
|
|
Packit |
01d647 |
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) # Requires CMake 3.3.3
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
include(CMakePackageConfigHelpers)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
add_library( exiv2lib_int OBJECT
|
|
Packit |
01d647 |
canonmn_int.cpp canonmn_int.hpp
|
|
Packit |
01d647 |
casiomn_int.cpp casiomn_int.hpp
|
|
Packit |
01d647 |
cr2header_int.cpp cr2header_int.hpp
|
|
Packit |
01d647 |
crwimage_int.cpp crwimage_int.hpp
|
|
Packit |
01d647 |
fujimn_int.cpp fujimn_int.hpp
|
|
Packit |
01d647 |
helper_functions.cpp helper_functions.hpp
|
|
Packit |
01d647 |
image_int.cpp image_int.hpp
|
|
Packit |
01d647 |
makernote_int.cpp makernote_int.hpp
|
|
Packit |
01d647 |
minoltamn_int.cpp minoltamn_int.hpp
|
|
Packit |
01d647 |
nikonmn_int.cpp nikonmn_int.hpp
|
|
Packit |
01d647 |
olympusmn_int.cpp olympusmn_int.hpp
|
|
Packit |
01d647 |
orfimage_int.cpp orfimage_int.hpp
|
|
Packit |
01d647 |
panasonicmn_int.cpp panasonicmn_int.hpp
|
|
Packit |
01d647 |
pentaxmn_int.cpp pentaxmn_int.hpp
|
|
Packit |
01d647 |
rw2image_int.cpp rw2image_int.hpp
|
|
Packit |
01d647 |
safe_op.hpp
|
|
Packit |
01d647 |
samsungmn_int.cpp samsungmn_int.hpp
|
|
Packit |
01d647 |
sigmamn_int.cpp sigmamn_int.hpp
|
|
Packit |
01d647 |
sonymn_int.cpp sonymn_int.hpp
|
|
Packit |
01d647 |
tags_int.cpp tags_int.hpp
|
|
Packit |
01d647 |
tiffcomposite_int.cpp tiffcomposite_int.hpp
|
|
Packit |
01d647 |
tiffimage_int.cpp tiffimage_int.hpp
|
|
Packit |
01d647 |
tiffvisitor_int.cpp tiffvisitor_int.hpp
|
|
Packit |
01d647 |
tifffwd_int.hpp
|
|
Packit |
01d647 |
timegm.h
|
|
Packit |
01d647 |
unused.h
|
|
Packit |
01d647 |
)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
add_library( exiv2lib
|
|
Packit |
01d647 |
../include/exiv2/config.h
|
|
Packit |
01d647 |
../include/exiv2/exiv2.hpp
|
|
Packit |
01d647 |
../include/exiv2/rwlock.hpp
|
|
Packit |
01d647 |
../include/exiv2/slice.hpp
|
|
Packit |
01d647 |
basicio.cpp ../include/exiv2/basicio.hpp
|
|
Packit |
01d647 |
bigtiffimage.cpp
|
|
Packit |
01d647 |
bmpimage.cpp ../include/exiv2/bmpimage.hpp
|
|
Packit |
01d647 |
convert.cpp ../include/exiv2/convert.hpp
|
|
Packit |
01d647 |
cr2image.cpp ../include/exiv2/cr2image.hpp
|
|
Packit |
01d647 |
crwimage.cpp ../include/exiv2/crwimage.hpp
|
|
Packit |
01d647 |
datasets.cpp ../include/exiv2/datasets.hpp
|
|
Packit |
01d647 |
easyaccess.cpp ../include/exiv2/easyaccess.hpp
|
|
Packit |
01d647 |
epsimage.cpp ../include/exiv2/epsimage.hpp
|
|
Packit |
01d647 |
error.cpp ../include/exiv2/error.hpp
|
|
Packit |
01d647 |
exif.cpp ../include/exiv2/exif.hpp
|
|
Packit |
01d647 |
futils.cpp ../include/exiv2/futils.hpp
|
|
Packit |
01d647 |
gifimage.cpp ../include/exiv2/gifimage.hpp
|
|
Packit |
01d647 |
http.cpp ../include/exiv2/http.hpp
|
|
Packit |
01d647 |
image.cpp ../include/exiv2/image.hpp
|
|
Packit |
01d647 |
ini.cpp ../include/exiv2/ini.hpp
|
|
Packit |
01d647 |
iptc.cpp ../include/exiv2/iptc.hpp
|
|
Packit |
01d647 |
jp2image.cpp ../include/exiv2/jp2image.hpp
|
|
Packit |
01d647 |
jpgimage.cpp ../include/exiv2/jpgimage.hpp
|
|
Packit |
01d647 |
metadatum.cpp ../include/exiv2/metadatum.hpp
|
|
Packit |
01d647 |
mrwimage.cpp ../include/exiv2/mrwimage.hpp
|
|
Packit |
01d647 |
orfimage.cpp ../include/exiv2/orfimage.hpp
|
|
Packit |
01d647 |
pgfimage.cpp ../include/exiv2/pgfimage.hpp
|
|
Packit |
01d647 |
preview.cpp ../include/exiv2/preview.hpp
|
|
Packit |
01d647 |
properties.cpp ../include/exiv2/properties.hpp
|
|
Packit |
01d647 |
psdimage.cpp ../include/exiv2/psdimage.hpp
|
|
Packit |
01d647 |
rafimage.cpp ../include/exiv2/rafimage.hpp
|
|
Packit |
01d647 |
rw2image.cpp ../include/exiv2/rw2image.hpp
|
|
Packit |
01d647 |
tags.cpp ../include/exiv2/tags.hpp
|
|
Packit |
01d647 |
tgaimage.cpp ../include/exiv2/tgaimage.hpp
|
|
Packit |
01d647 |
tiffimage.cpp ../include/exiv2/tiffimage.hpp
|
|
Packit |
01d647 |
types.cpp ../include/exiv2/types.hpp
|
|
Packit |
01d647 |
value.cpp ../include/exiv2/value.hpp
|
|
Packit |
01d647 |
version.cpp ../include/exiv2/version.hpp
|
|
Packit |
01d647 |
webpimage.cpp ../include/exiv2/webpimage.hpp
|
|
Packit |
01d647 |
xmp.cpp ../include/exiv2/xmp_exiv2.hpp
|
|
Packit |
01d647 |
xmpsidecar.cpp ../include/exiv2/xmpsidecar.hpp
|
|
Packit |
01d647 |
$<TARGET_OBJECTS:exiv2lib_int>
|
|
Packit |
01d647 |
)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
generate_export_header(exiv2lib
|
|
Packit |
01d647 |
EXPORT_MACRO_NAME EXIV2API
|
|
Packit |
01d647 |
EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/exiv2lib_export.h
|
|
Packit |
01d647 |
STATIC_DEFINE exiv2lib_STATIC
|
|
Packit |
01d647 |
)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
# Conditional addition of sources to library targets
|
|
Packit |
01d647 |
# ---------------------------------------------------------
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if( EXIV2_ENABLE_WEBREADY )
|
|
Packit |
01d647 |
if( EXIV2_ENABLE_CURL)
|
|
Packit |
01d647 |
target_sources(exiv2lib PRIVATE easyaccess.cpp ../include/exiv2/easyaccess.hpp)
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if( EXIV2_ENABLE_SSH )
|
|
Packit |
01d647 |
target_sources(exiv2lib PRIVATE ssh.cpp ../include/exiv2/ssh.hpp)
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if( EXIV2_ENABLE_PNG )
|
|
Packit |
01d647 |
target_sources(exiv2lib_int PRIVATE pngchunk_int.cpp)
|
|
Packit |
01d647 |
target_sources(exiv2lib PRIVATE pngimage.cpp ../include/exiv2/pngimage.hpp)
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if( EXIV2_ENABLE_VIDEO )
|
|
Packit |
01d647 |
target_sources(exiv2lib PRIVATE
|
|
Packit |
01d647 |
asfvideo.cpp ../include/exiv2/asfvideo.hpp
|
|
Packit |
01d647 |
matroskavideo.cpp ../include/exiv2/matroskavideo.hpp
|
|
Packit |
01d647 |
quicktimevideo.cpp ../include/exiv2/quicktimevideo.hpp
|
|
Packit |
01d647 |
riffvideo.cpp ../include/exiv2/riffvideo.hpp
|
|
Packit |
01d647 |
utilsvideo.cpp ../include/exiv2/utilsvideo.hpp
|
|
Packit |
01d647 |
)
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
# Other library target properties
|
|
Packit |
01d647 |
# ---------------------------------------------------------
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
|
|
Packit |
01d647 |
# Do not check format overflows on this file, to skip a false positive warning
|
|
Packit |
01d647 |
set_source_files_properties(value.cpp PROPERTIES COMPILE_FLAGS -Wno-format-overflow)
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
set_target_properties( exiv2lib PROPERTIES
|
|
Packit |
01d647 |
VERSION ${PROJECT_VERSION}
|
|
Packit |
01d647 |
SOVERSION ${PROJECT_VERSION_MINOR}
|
|
Packit |
01d647 |
OUTPUT_NAME exiv2
|
|
Packit |
01d647 |
PDB_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
Packit |
01d647 |
COMPILE_FLAGS ${EXTRA_COMPILE_FLAGS}
|
|
Packit |
01d647 |
)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if (MSVC)
|
|
Packit |
01d647 |
set_target_properties(exiv2lib PROPERTIES LINK_FLAGS "/ignore:4099")
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
set_target_properties( exiv2lib_int PROPERTIES
|
|
Packit |
01d647 |
POSITION_INDEPENDENT_CODE ON
|
|
Packit |
01d647 |
COMPILE_DEFINITIONS exiv2lib_EXPORTS
|
|
Packit |
01d647 |
)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
target_include_directories(exiv2lib_int PRIVATE ${ZLIB_INCLUDE_DIR})
|
|
Packit |
01d647 |
target_include_directories(exiv2lib PRIVATE ${ZLIB_INCLUDE_DIR})
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if (EXIV2_ENABLE_XMP)
|
|
Packit |
01d647 |
target_link_libraries(exiv2lib PRIVATE exiv2-xmp)
|
|
Packit |
01d647 |
elseif(EXIV2_ENABLE_EXTERNAL_XMP)
|
|
Packit |
01d647 |
target_link_libraries(exiv2lib PUBLIC ${XMPSDK_LIBRARY})
|
|
Packit |
01d647 |
target_include_directories(exiv2lib PUBLIC ${XMPSDK_INCLUDE_DIR})
|
|
Packit |
01d647 |
target_compile_definitions(exiv2lib PUBLIC EXV_ADOBE_XMPSDK=2016)
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
# Use include/exiv2 to build libary code
|
|
Packit |
01d647 |
target_include_directories(exiv2lib PUBLIC
|
|
Packit |
01d647 |
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/exiv2>
|
|
Packit |
01d647 |
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
|
Packit |
01d647 |
$<INSTALL_INTERFACE:include>
|
|
Packit |
01d647 |
)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
target_include_directories(exiv2lib_int PUBLIC
|
|
Packit |
01d647 |
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/exiv2>
|
|
Packit |
01d647 |
)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if (EXIV2_ENABLE_WEBREADY)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if( EXIV2_ENABLE_SSH )
|
|
Packit Service |
fb147c |
target_link_libraries(exiv2lib PUBLIC ssh)
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if( EXIV2_ENABLE_CURL )
|
|
Packit |
01d647 |
target_include_directories(exiv2lib SYSTEM PRIVATE ${CURL_INCLUDE_DIR} )
|
|
Packit |
01d647 |
target_link_libraries(exiv2lib PRIVATE ${CURL_LIBRARIES})
|
|
Packit |
01d647 |
if (USING_CONAN)
|
|
Packit |
01d647 |
target_compile_definitions(exiv2lib PRIVATE ${CONAN_COMPILE_DEFINITIONS_LIBCURL})
|
|
Packit |
01d647 |
target_link_libraries(exiv2lib PRIVATE ${CONAN_EXE_LINKER_FLAGS_LIBCURL})
|
|
Packit Service |
fb147c |
if ( MSVC )
|
|
Packit Service |
fb147c |
target_link_libraries(exiv2lib PRIVATE Crypt32)
|
|
Packit Service |
fb147c |
elseif (NOT APPLE)
|
|
Packit |
01d647 |
target_link_libraries(exiv2lib PRIVATE CONAN_PKG::OpenSSL)
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if (WIN32)
|
|
Packit |
01d647 |
target_compile_definitions(exiv2lib PRIVATE PSAPI_VERSION=1) # to be compatible with <= WinVista (#905)
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if (NOT MSVC)
|
|
Packit |
01d647 |
if ( CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" )
|
|
Packit |
01d647 |
target_link_libraries( exiv2lib PRIVATE -lprocstat)
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if (CYGWIN OR MINGW OR MSYS)
|
|
Packit Service |
fb147c |
target_link_libraries( exiv2lib PRIVATE psapi ws2_32 shell32 )
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
target_link_libraries( exiv2lib PRIVATE Threads::Threads)
|
|
Packit |
01d647 |
else()
|
|
Packit Service |
fb147c |
target_link_libraries( exiv2lib PRIVATE psapi ws2_32 shell32 )
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if( EXIV2_ENABLE_PNG )
|
|
Packit |
01d647 |
target_link_libraries( exiv2lib PRIVATE ${ZLIB_LIBRARIES} )
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if( EXIV2_ENABLE_NLS )
|
|
Packit |
01d647 |
target_link_libraries(exiv2lib PRIVATE ${Intl_LIBRARIES})
|
|
Packit |
01d647 |
target_include_directories(exiv2lib PRIVATE ${Intl_INCLUDE_DIRS})
|
|
Packit |
01d647 |
target_include_directories(exiv2lib_int PRIVATE ${Intl_INCLUDE_DIRS})
|
|
Packit |
01d647 |
# Definition needed for translations
|
|
Packit |
01d647 |
target_compile_definitions(exiv2lib PUBLIC EXV_LOCALEDIR="/../${CMAKE_INSTALL_LOCALEDIR}")
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if( ICONV_FOUND )
|
|
Packit |
01d647 |
target_link_libraries( exiv2lib PRIVATE Iconv::Iconv )
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
write_basic_package_version_file(exiv2ConfigVersion.cmake COMPATIBILITY ExactVersion)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
install(TARGETS exiv2lib EXPORT exiv2Config
|
|
Packit |
01d647 |
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
Packit |
01d647 |
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
Packit |
01d647 |
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
Packit |
01d647 |
)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
install(FILES
|
|
Packit |
01d647 |
${CMAKE_BINARY_DIR}/exv_conf.h
|
|
Packit |
01d647 |
${CMAKE_BINARY_DIR}/exiv2lib_export.h
|
|
Packit |
01d647 |
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/exiv2)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
install(EXPORT exiv2Config DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/exiv2")
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/exiv2ConfigVersion.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/exiv2")
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
# ******************************************************************************
|
|
Packit |
01d647 |
# exiv2 application
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if(EXIV2_BUILD_EXIV2_COMMAND)
|
|
Packit |
01d647 |
add_executable( exiv2
|
|
Packit |
01d647 |
exiv2.cpp
|
|
Packit |
01d647 |
exiv2app.hpp
|
|
Packit |
01d647 |
actions.cpp actions.hpp
|
|
Packit |
01d647 |
getopt.cpp getopt.hpp
|
|
Packit |
01d647 |
utils.cpp utils.hpp
|
|
Packit |
01d647 |
)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
set_target_properties( exiv2 PROPERTIES
|
|
Packit |
01d647 |
COMPILE_FLAGS ${EXTRA_COMPILE_FLAGS}
|
|
Packit |
01d647 |
XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Debug] "YES"
|
|
Packit |
01d647 |
)
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
target_link_libraries( exiv2 PRIVATE exiv2lib )
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if( EXIV2_ENABLE_NLS )
|
|
Packit |
01d647 |
target_link_libraries(exiv2 PRIVATE ${Intl_LIBRARIES})
|
|
Packit |
01d647 |
target_include_directories(exiv2 PRIVATE ${Intl_INCLUDE_DIRS})
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
if (USING_CONAN AND WIN32 AND EXISTS ${PROJECT_BINARY_DIR}/conanDlls)
|
|
Packit |
01d647 |
# In case of using conan recipes with their 'shared' option turned on, we will have dlls of
|
|
Packit |
01d647 |
# the 3rd party dependencies in the conanDlls folder.
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
# Copy 3rd party DLLs the bin folder. [build step]
|
|
Packit |
01d647 |
add_custom_command(TARGET exiv2 POST_BUILD
|
|
Packit |
01d647 |
COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_BINARY_DIR}/conanDlls ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
# Copy 3rd party DLLs the bin folder. [install step]
|
|
Packit |
01d647 |
install(DIRECTORY ${PROJECT_BINARY_DIR}/conanDlls/ DESTINATION bin)
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
install(TARGETS exiv2 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
Packit |
01d647 |
endif()
|
|
Packit |
01d647 |
|
|
Packit |
01d647 |
# That's all Folks!
|
|
Packit |
01d647 |
##
|