diff --git a/CMakeLists.txt b/CMakeLists.txt index 3083b3e0..020a429a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,39 +99,38 @@ if( EXIV2_BUILD_FUZZ_TESTS ) add_subdirectory ( fuzz ) endif() -if( EXIV2_BUILD_SAMPLES ) - add_subdirectory( samples ) - get_directory_property(SAMPLES DIRECTORY samples DEFINITION APPLICATIONS) - - if (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(EXIV2_BUILD_EXIV2_COMMAND) + add_subdirectory ( app ) + + if( EXIV2_BUILD_SAMPLES ) + add_subdirectory( samples ) + get_directory_property(SAMPLES DIRECTORY samples DEFINITION APPLICATIONS) + + if (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 (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) + 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() -if (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 - ) - 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() if( EXIV2_ENABLE_NLS ) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt new file mode 100644 index 00000000..7b679bf2 --- /dev/null +++ b/app/CMakeLists.txt @@ -0,0 +1,57 @@ +add_executable( exiv2 + exiv2.cpp + exiv2app.hpp + actions.cpp actions.hpp + getopt.cpp getopt.hpp + $ +) + +target_include_directories(exiv2 PRIVATE ${CMAKE_SOURCE_DIR}/src) # To find utils.hpp + +set_target_properties( exiv2 PROPERTIES + COMPILE_FLAGS ${EXTRA_COMPILE_FLAGS} + XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Debug] "YES" +) +if (MSVC) + set_target_properties(exiv2 PROPERTIES LINK_FLAGS "/ignore:4099") # Ignore missing PDBs +endif() + +target_link_libraries( exiv2 PRIVATE exiv2lib ) + +if( EXIV2_ENABLE_NLS ) + target_link_libraries(exiv2 PRIVATE ${Intl_LIBRARIES}) + target_include_directories(exiv2 PRIVATE ${Intl_INCLUDE_DIRS}) +endif() + +target_link_libraries(exiv2 PRIVATE std::filesystem) + +if(MSVC OR MINGW) + # Trick to get properly UTF-8 encoded argv + # More info at: https://github.com/huangqinjin/wmain + add_library(wmain STATIC wmain.c) + target_link_libraries(exiv2 PRIVATE wmain) +endif() + +if (MSVC) + target_link_options(wmain INTERFACE /WHOLEARCHIVE:$) + target_link_options(exiv2 PRIVATE "/ENTRY:wWinMainCRTStartup") +endif() + +if (MINGW) + target_compile_options(exiv2 PRIVATE -municode) + target_link_options(exiv2 PRIVATE -municode) +endif() + +if (USING_CONAN AND WIN32 AND EXISTS ${PROJECT_BINARY_DIR}/conanDlls) + # In case of using conan recipes with their 'shared' option turned on, we will have dlls of + # the 3rd party dependencies in the conanDlls folder. + + # Copy 3rd party DLLs the bin folder. [build step] + add_custom_command(TARGET exiv2 POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_BINARY_DIR}/conanDlls ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) + + # Copy 3rd party DLLs the bin folder. [install step] + install(DIRECTORY ${PROJECT_BINARY_DIR}/conanDlls/ DESTINATION bin) +endif() + +install(TARGETS exiv2 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/src/actions.cpp b/app/actions.cpp similarity index 100% rename from src/actions.cpp rename to app/actions.cpp diff --git a/src/actions.hpp b/app/actions.hpp similarity index 100% rename from src/actions.hpp rename to app/actions.hpp diff --git a/src/exiv2.cpp b/app/exiv2.cpp similarity index 100% rename from src/exiv2.cpp rename to app/exiv2.cpp diff --git a/src/exiv2app.hpp b/app/exiv2app.hpp similarity index 100% rename from src/exiv2app.hpp rename to app/exiv2app.hpp diff --git a/src/getopt.cpp b/app/getopt.cpp similarity index 100% rename from src/getopt.cpp rename to app/getopt.cpp diff --git a/src/getopt.hpp b/app/getopt.hpp similarity index 100% rename from src/getopt.hpp rename to app/getopt.hpp diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index a6e1e524..c8442d52 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -52,18 +52,27 @@ if (MSVC) link_directories(${CMAKE_INSTALL_PREFIX}/lib) endif() -add_executable( getopt-test getopt-test.cpp ../src/utils.cpp ../src/getopt.cpp) +add_executable( getopt-test getopt-test.cpp ../app/getopt.cpp ../src/utils.cpp) list(APPEND APPLICATIONS getopt-test) -target_include_directories(getopt-test PRIVATE ${CMAKE_SOURCE_DIR}/src) # To find utils.hpp +target_include_directories(getopt-test PRIVATE + ${CMAKE_SOURCE_DIR}/app + ${CMAKE_SOURCE_DIR}/src +) # To find utils.hpp & getopt.hpp -add_executable( metacopy metacopy.cpp ../src/utils.cpp ../src/getopt.cpp) +add_executable( metacopy metacopy.cpp ../app/getopt.cpp ../src/utils.cpp) list(APPEND APPLICATIONS metacopy) -target_include_directories(metacopy PRIVATE ${CMAKE_SOURCE_DIR}/src) # To find utils.hpp +target_include_directories(metacopy PRIVATE + ${CMAKE_SOURCE_DIR}/app + ${CMAKE_SOURCE_DIR}/src +) # To find utils.hpp & getopt.hpp -add_executable( path-test path-test.cpp ../src/utils.cpp ../src/getopt.cpp) +add_executable( path-test path-test.cpp ../app/getopt.cpp ../src/utils.cpp) list(APPEND APPLICATIONS path-test) set_target_properties( path-test PROPERTIES OUTPUT_NAME path-test ) -target_include_directories(path-test PRIVATE ${CMAKE_SOURCE_DIR}/src) # To find utils.hpp +target_include_directories(path-test PRIVATE + ${CMAKE_SOURCE_DIR}/app + ${CMAKE_SOURCE_DIR}/src +) # To find utils.hpp & getopt.hpp add_executable( exiv2json exiv2json.cpp Jzon.cpp Jzon.h) list(APPEND APPLICATIONS exiv2json) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d418f600..b6f75c84 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,3 @@ -# CMakeLists.txt for exiv2 library and command-line program - # 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 ) @@ -261,66 +259,3 @@ install(EXPORT exiv2Config DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/exiv2") install(FILES ${CMAKE_CURRENT_BINARY_DIR}/exiv2ConfigVersion.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/exiv2") -# ****************************************************************************** -# exiv2 application - -if(EXIV2_BUILD_EXIV2_COMMAND) - add_executable( exiv2 - exiv2.cpp - exiv2app.hpp - actions.cpp actions.hpp - getopt.cpp getopt.hpp - utils.cpp utils.hpp - ) - - set_target_properties( exiv2 PROPERTIES - COMPILE_FLAGS ${EXTRA_COMPILE_FLAGS} - XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Debug] "YES" - ) - if (MSVC) - set_target_properties(exiv2 PROPERTIES LINK_FLAGS "/ignore:4099") # Ignore missing PDBs - endif() - - target_link_libraries( exiv2 PRIVATE exiv2lib ) - - if( EXIV2_ENABLE_NLS ) - target_link_libraries(exiv2 PRIVATE ${Intl_LIBRARIES}) - target_include_directories(exiv2 PRIVATE ${Intl_INCLUDE_DIRS}) - endif() - - target_link_libraries(exiv2 PRIVATE std::filesystem) - - if(MSVC OR MINGW) - # Trick to get properly UTF-8 encoded argv - # More info at: https://github.com/huangqinjin/wmain - add_library(wmain STATIC wmain.c) - target_link_libraries(exiv2 PRIVATE wmain) - endif() - - if (MSVC) - target_link_options(wmain INTERFACE /WHOLEARCHIVE:$) - target_link_options(exiv2 PRIVATE "/ENTRY:wWinMainCRTStartup") - endif() - - if (MINGW) - target_compile_options(exiv2 PRIVATE -municode) - target_link_options(exiv2 PRIVATE -municode) - endif() - - if (USING_CONAN AND WIN32 AND EXISTS ${PROJECT_BINARY_DIR}/conanDlls) - # In case of using conan recipes with their 'shared' option turned on, we will have dlls of - # the 3rd party dependencies in the conanDlls folder. - - # Copy 3rd party DLLs the bin folder. [build step] - add_custom_command(TARGET exiv2 POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_BINARY_DIR}/conanDlls ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - - # Copy 3rd party DLLs the bin folder. [install step] - install(DIRECTORY ${PROJECT_BINARY_DIR}/conanDlls/ DESTINATION bin) - endif() - - install(TARGETS exiv2 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -endif() - -# That's all Folks! -##