Blame src/CMakeLists.txt

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
##