Many changes to CMakeLists.txt and cmakeBuild.cmd to support unicode, static linking, passing shared library build flags.

v0.27.3
Robin Mills 8 years ago
parent 68effb1772
commit 60d436c969

@ -1,10 +1,4 @@
# CMake build system for exiv2 library and executables # CMakeLists.txt for exiv2 library
# Copyright 2015- Daniel Kaneider <danielkaneider@users.sf.net>
# Copyright 2010-2012 Gilles Caulier <caulier dot gilles at gmail dot com>
# Copyright 2008 Patrick Spendrin <ps_ml at gmx dot de>
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
cmake_minimum_required( VERSION 3.1.0 ) cmake_minimum_required( VERSION 3.1.0 )
project( exiv2 ) project( exiv2 )
@ -30,7 +24,6 @@ set( GENERIC_LIB_VERSION "26.0.0" )
set( GENERIC_LIB_SOVERSION "26" ) set( GENERIC_LIB_SOVERSION "26" )
# options and their default values # options and their default values
option( EXIV2_ENABLE_SHARED "Build exiv2 as a shared library (dll)" ON )
option( EXIV2_ENABLE_XMP "Build with XMP metadata support" ON ) option( EXIV2_ENABLE_XMP "Build with XMP metadata support" ON )
option( EXIV2_ENABLE_LIBXMP "Build a static convenience Library for XMP" ON ) option( EXIV2_ENABLE_LIBXMP "Build a static convenience Library for XMP" ON )
option( EXIV2_ENABLE_PNG "Build with png support (requires libz)" ON ) option( EXIV2_ENABLE_PNG "Build with png support (requires libz)" ON )
@ -38,8 +31,6 @@ option( EXIV2_ENABLE_NLS "Build native language support (requires gett
option( EXIV2_ENABLE_PRINTUCS2 "Build with Printucs2" ON ) option( EXIV2_ENABLE_PRINTUCS2 "Build with Printucs2" ON )
option( EXIV2_ENABLE_LENSDATA "Build including lens data" ON ) option( EXIV2_ENABLE_LENSDATA "Build including lens data" ON )
option( EXIV2_ENABLE_COMMERCIAL "Build with the EXV_COMMERCIAL_VERSION symbol set" OFF ) option( EXIV2_ENABLE_COMMERCIAL "Build with the EXV_COMMERCIAL_VERSION symbol set" OFF )
option( EXIV2_ENABLE_BUILD_SAMPLES "Build the unit tests" ON )
option( EXIV2_ENABLE_BUILD_PO "Build translations files" OFF )
option( EXIV2_ENABLE_VIDEO "Build video support into library" OFF ) option( EXIV2_ENABLE_VIDEO "Build video support into library" OFF )
option( EXIV2_ENABLE_WEBREADY "Build webready support into library" OFF ) option( EXIV2_ENABLE_WEBREADY "Build webready support into library" OFF )
option( EXIV2_ENABLE_DYNAMIC_RUNTIME "Use dynamic runtime (used for static libs)" OFF ) option( EXIV2_ENABLE_DYNAMIC_RUNTIME "Use dynamic runtime (used for static libs)" OFF )
@ -51,7 +42,9 @@ else()
option( EXIV2_ENABLE_CURL "USE Libcurl for HttpIo" ON ) option( EXIV2_ENABLE_CURL "USE Libcurl for HttpIo" ON )
option( EXIV2_ENABLE_SSH "USE Libssh for SshIo" ON ) option( EXIV2_ENABLE_SSH "USE Libssh for SshIo" ON )
endif() endif()
option( EXIV2_ENABLE_TOOLS "Build exiv2 executable" ON ) option( EXIV2_BUILD_SAMPLES "Build sample applications" ON )
option( EXIV2_BUILD_PO "Build translations files" OFF )
option( EXIV2_BUILD_EXIV2_COMMAND "Build exiv2 command-line executable" ON )
include(config/findDependencies.cmake) include(config/findDependencies.cmake)
include(config/compilerFlags.cmake) include(config/compilerFlags.cmake)
@ -62,7 +55,12 @@ if( EXIV2_ENABLE_COMMERCIAL )
endif() endif()
if( MSVC ) if( MSVC )
set(CMAKE_DEBUG_POSTFIX "d") if ( EXIV2_ENABLE_WIN_UNICODE )
set(CMAKE_DEBUG_POSTFIX "du")
set(CMAKE_RELEASE_POSTFIX "u")
else()
set(CMAKE_DEBUG_POSTFIX "d")
endif()
endif() endif()
if( EXIV2_ENABLE_XMP ) if( EXIV2_ENABLE_XMP )
@ -106,3 +104,6 @@ if( MINGW OR UNIX OR APPLE)
endif() endif()
include( config/printSummary.cmake ) include( config/printSummary.cmake )
# That's all Folks!
##

@ -23,7 +23,7 @@ if(MSVC)
CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_RELWITHDEBINFO
) )
if ( ${EXIV2_ENABLE_SHARED} OR ${EXIV2_ENABLE_DYNAMIC_RUNTIME}) if ( ${BUILD_SHARED_LIBS} OR ${EXIV2_ENABLE_DYNAMIC_RUNTIME} )
message(STATUS "MSVC -> forcing use of dynamically-linked runtime." ) message(STATUS "MSVC -> forcing use of dynamically-linked runtime." )
foreach(variable ${variables}) foreach(variable ${variables})
if(${variable} MATCHES "/MT") if(${variable} MATCHES "/MT")
@ -51,7 +51,7 @@ if(MSVC)
endforeach() endforeach()
# don't link msvcrt for .exe which use shared libraries (use default libcmt) # don't link msvcrt for .exe which use shared libraries (use default libcmt)
if ( NOT ${EXIV2_ENABLE_SHARED} AND NOT ${EXIV2_ENABLE_DYNAMIC_RUNTIME}) if ( NOT ${BUILD_SHARED_LIBS} AND NOT ${EXIV2_ENABLE_DYNAMIC_RUNTIME})
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/NODEFAULTLIB:MSVCRTD") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/NODEFAULTLIB:MSVCRTD")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/NODEFAULTLIB:MSVCRT") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/NODEFAULTLIB:MSVCRT")
set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/NODEFAULTLIB:MSVCRT") set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/NODEFAULTLIB:MSVCRT")

@ -18,19 +18,16 @@ message( STATUS "Compiler info: ${CMAKE_CXX_COMPILER_ID} (${CMAKE_CXX_COMPILER})
message( STATUS "------------------------------------------------------------------" ) message( STATUS "------------------------------------------------------------------" )
message( STATUS "${PACKAGE_STRING} configure results <${PACKAGE_URL}>" ) message( STATUS "${PACKAGE_STRING} configure results <${PACKAGE_URL}>" )
OptionOutput( "Building shared library: " BUILD_SHARED_LIBS )
OptionOutput( "Building PNG support: " EXIV2_ENABLE_PNG AND ZLIB_FOUND ) OptionOutput( "Building PNG support: " EXIV2_ENABLE_PNG AND ZLIB_FOUND )
OptionOutput( "Building shared library: " EXIV2_ENABLE_SHARED )
OptionOutput( "XMP metadata support: " EXIV2_ENABLE_XMP ) OptionOutput( "XMP metadata support: " EXIV2_ENABLE_XMP )
OptionOutput( "Building static libxmp: " EXIV2_ENABLE_LIBXMP ) OptionOutput( "Building static libxmp: " EXIV2_ENABLE_LIBXMP )
OptionOutput( "Native language support: " EXIV2_ENABLE_NLS ) OptionOutput( "Native language support: " EXIV2_ENABLE_NLS )
OptionOutput( "Conversion of Windows XP tags: " EXIV2_ENABLE_PRINTUCS2 ) OptionOutput( "Conversion of Windows XP tags: " EXIV2_ENABLE_PRINTUCS2 )
OptionOutput( "Nikon lens database: " EXIV2_ENABLE_LENSDATA ) OptionOutput( "Nikon lens database: " EXIV2_ENABLE_LENSDATA )
OptionOutput( "Commercial build: " EXIV2_ENABLE_COMMERCIAL ) OptionOutput( "Commercial build: " EXIV2_ENABLE_COMMERCIAL )
OptionOutput( "Build the unit tests: " EXIV2_ENABLE_BUILD_SAMPLES )
OptionOutput( "Building translations files: " EXIV2_ENABLE_BUILD_PO )
OptionOutput( "Building video support: " EXIV2_ENABLE_VIDEO ) OptionOutput( "Building video support: " EXIV2_ENABLE_VIDEO )
OptionOutput( "Building webready support: " EXIV2_ENABLE_WEBREADY ) OptionOutput( "Building webready support: " EXIV2_ENABLE_WEBREADY )
if ( EXIV2_ENABLE_WEBREADY ) if ( EXIV2_ENABLE_WEBREADY )
OptionOutput( "USE Libcurl for HttpIo: " EXIV2_ENABLE_CURL ) OptionOutput( "USE Libcurl for HttpIo: " EXIV2_ENABLE_CURL )
OptionOutput( "USE Libssh for SshIo: " EXIV2_ENABLE_SSH ) OptionOutput( "USE Libssh for SshIo: " EXIV2_ENABLE_SSH )
@ -40,5 +37,9 @@ if (WIN32)
OptionOutput( "Dynamic runtime override: " EXIV2_ENABLE_DYNAMIC_RUNTIME) OptionOutput( "Dynamic runtime override: " EXIV2_ENABLE_DYNAMIC_RUNTIME)
OptionOutput( "Unicode paths (wstring): " EXIV2_ENABLE_WIN_UNICODE ) OptionOutput( "Unicode paths (wstring): " EXIV2_ENABLE_WIN_UNICODE )
endif() endif()
OptionOutput( "Building exiv2 command: " EXIV2_BUILD_EXIV2_COMMAND )
OptionOutput( "Building samples: " EXIV2_BUILD_SAMPLES )
OptionOutput( "Building PO files: " EXIV2_BUILD_PO )
message( STATUS "------------------------------------------------------------------" ) message( STATUS "------------------------------------------------------------------" )

@ -1,4 +1,4 @@
@@@Marco@@@@@b ;mm /##Gilles###\ @@@Luis@@@@@b ;mm /##Gilles###\
j@@@#Robin", Brad /@@@Thomas@@@@Q j@@@#Robin", Brad /@@@Thomas@@@@Q
@@@# \ ## @@@b |@@@b @@@# \ ## @@@b |@@@b
@@@# .;;;;, ,;;;, ,;;;; ,;;;p .;;; 7@@ ]Alan @@@# .;;;;, ,;;;, ,;;;; ,;;;p .;;; 7@@ ]Alan
@ -9,7 +9,7 @@
@@@# ,@@##@@m @@@b @@@p @@C #@@#C @@@# ,@@##@@m @@@b @@@p @@C #@@#C
@@@# ,/ s@@# @@@@ @@@b Volker @Tuan@ @@@# ,/ s@@# @@@@ @@@b Volker @Tuan@
]@@@Abhinav@@\ /@@@\ \@@@Q @@@Q %@@@# /@@@@Mahesh@@# ]@@@Abhinav@@\ /@@@\ \@@@Q @@@Q %@@@# /@@@@Mahesh@@#
/@@Raphael@@@@@\ /@@@@@\ C++ Metadata Library /@Sridhar@@@v0.26\ /@@Raphael@@@@@\ /@@@@@\ C++ Metadata Library /@Sridhar@@@v0.26.1\
exiv2/contrib/cmake/msvc/ReadMe.txt exiv2/contrib/cmake/msvc/ReadMe.txt
----------------------------------- -----------------------------------
@ -39,7 +39,7 @@ How to use this
cd <exiv2dir>\contrib\cmake\cmake cd <exiv2dir>\contrib\cmake\cmake
cmd.exe cmd.exe
vcvars 2015 64 vcvars 2015 64
cmakeBuild --help # display syntax and options cmakeBuild --help # display syntax and options
cmakeBuild --rebuild cmakeBuild --rebuild
.... ....
exit exit
@ -65,7 +65,42 @@ How to use this
When you are building happily, you may prefer: When you are building happily, you may prefer:
cmakeBuild --silent cmakeBuild --silent
3 What gets built? 3 Options
C:\Users\rmills\gnu\github\clanmills\exiv2\contrib\cmake\msvc>cmakeBuild --help
Options: --help | --webready | --rebuild | --video | --static | --unicode | --nls
--silent | --verbose | --pause | --dryrun | --test | --trace
--exiv2 C:\Users\rmills\gnu\github\clanmills\exiv2 | --work work | --config Release | --generator generator
--zlib zlib-1.2.8 | --expat expat-2.1.0 | --curl curl-7.45.0 | --libssh libssh-0.7.2
--bash c:\cygwin64\bin\bash.exe
Option switches.
--help Print help message and quit
--webready Build and Link the webready feature
--rebuild Delete "relics" from a previous build such as CMakeBuild.txt
--video Build and link video support
--static Build and link static libraries and programs
--nosamples Do not build sample applications
--unicode Build UNICODE path support
--nls Build with Natural Language Support
--silent Run script with minimal "chatter"
--verbose Run script with maximum "chatter"
--trace Show commands begin executed by the script
--dryrun Don't build anything. Report and quit
--test Execute the test suite after the build
Option/values (See section 9 below)
--zlib zlib-1.2.8
--expath expat-2.1.0
--curl curl-7.44.0
--libssh libssh-0.7.2
Other build key/value pairs:
--config Release | Debug
--generator The script default is almost always correct and is passed as -G "Generator" to CMake
--work The "work" directory in which the build will be performed (see 4 below)
--bash Path to bash.exe to be used when --test is specified.
4 What gets built?
The build is performed in work The build is performed in work
The output is generated in dist The output is generated in dist
dist\..mumble..\bin contains *.exe and *.dll files dist\..mumble..\bin contains *.exe and *.dll files
@ -79,7 +114,7 @@ How to use this
dll = shared library dll/static dll = shared library dll/static
Release = configuration Release/Debug/RelWithDebInfo/MinSizeRel Release = configuration Release/Debug/RelWithDebInfo/MinSizeRel
4 Building manually with CMake 5 Building manually with CMake
The cmake option -G Generator should be chosen for the version of Visual Studio installed. The cmake option -G Generator should be chosen for the version of Visual Studio installed.
cmake --help for more information cmake --help for more information
@ -124,7 +159,7 @@ How to use this
cmake --build . --config Release cmake --build . --config Release
cmake --build . --config Release --target install cmake --build . --config Release --target install
5 About webready support libraries (openssl, libssh and curl) 6 About webready support libraries (openssl, libssh and curl)
a) openssl a) openssl
You cannot build openssl with CMake. However we have prebuilt binaries which You cannot build openssl with CMake. However we have prebuilt binaries which
@ -165,37 +200,37 @@ How to use this
The fixes are included in svn://dev.exiv2.org/svn/team/libraries/libssh-0.7.2.tar.gz The fixes are included in svn://dev.exiv2.org/svn/team/libraries/libssh-0.7.2.tar.gz
A 'vanilla' version of libssh will may require those fixes to be applied. A 'vanilla' version of libssh will may require those fixes to be applied.
6 Build options 7 Build options
You can inspect CMake options by running grep OPTION on CMakeLists.txt in <exiv2dir> You can inspect CMake options by running grep options on CMakeLists.txt in <exiv2dir>
C:\cygwin64\home\rmills\gnu\exiv2\build>cd ..\trunk C:\cygwin64\home\rmills\gnu\exiv2\build>cd ..\trunk
C:\cygwin64\home\rmills\gnu\exiv2\trunk>grep OPTION CMakeLists.txt C:\cygwin64\home\rmills\gnu\github\exiv2\exiv2>grep option CMakeLists.txt
OPTION( EXIV2_ENABLE_SHARED "Build exiv2 as a shared library (dll)" ON ) # options and their default values
OPTION( EXIV2_ENABLE_XMP "Build with XMP metadata support" ON ) option( EXIV2_ENABLE_XMP "Build with XMP metadata support" ON )
OPTION( EXIV2_ENABLE_LIBXMP "Build a static convenience Library for XMP" ON ) option( EXIV2_ENABLE_LIBXMP "Build a static convenience Library for XMP" ON )
OPTION( EXIV2_ENABLE_VIDEO "Build with video support" OFF ) option( EXIV2_ENABLE_PNG "Build with png support (requires libz)" ON )
OPTION( EXIV2_ENABLE_PNG "Build with png support (requires libz)" ON ) option( EXIV2_ENABLE_NLS "Build native language support (requires gettext)" ON )
OPTION( EXIV2_ENABLE_NLS "Build native language support (requires gettext)" ON ) option( EXIV2_ENABLE_PRINTUCS2 "Build with Printucs2" ON )
OPTION( EXIV2_ENABLE_PRINTUCS2 "Build with Printucs2" ON ) option( EXIV2_ENABLE_LENSDATA "Build including lens data" ON )
OPTION( EXIV2_ENABLE_LENSDATA "Build including lens data" ON ) option( EXIV2_ENABLE_COMMERCIAL "Build with the EXV_COMMERCIAL_VERSION symbol set" OFF )
OPTION( EXIV2_ENABLE_COMMERCIAL "Build with the EXV_COMMERCIAL_VERSION symbol set" OFF ) option( EXIV2_ENABLE_VIDEO "Build video support into library" OFF )
OPTION( EXIV2_ENABLE_BUILD_SAMPLES "Build the unit tests" ON ) option( EXIV2_ENABLE_WEBREADY "Build webready support into library" OFF )
OPTION( EXIV2_ENABLE_BUILD_PO "Build translations files" OFF ) option( EXIV2_ENABLE_DYNAMIC_RUNTIME "Use dynamic runtime (used for static libs)" OFF )
OPTION( EXIV2_ENABLE_VIDEO "Build video support into library" OFF ) option( EXIV2_ENABLE_WIN_UNICODE "Use Unicode paths (wstring) on Windows" OFF )
OPTION( EXIV2_ENABLE_WEBREADY "Build webready support into library" OFF ) option( EXIV2_ENABLE_CURL "USE Libcurl for HttpIo" OFF )
OPTION( EXIV2_ENABLE_WIN_UNICODE "Use Unicode paths (wstring) on Windows" OFF ) option( EXIV2_ENABLE_SSH "USE Libssh for SshIo" OFF )
OPTION( EXIV2_ENABLE_CURL "USE Libcurl for HttpIo" OFF ) option( EXIV2_ENABLE_SSH "USE Libssh for SshIo" ON )
OPTION( EXIV2_ENABLE_SSH "USE Libssh for SshIo" OFF ) option( EXIV2_BUILD_SAMPLES "Build sample applications" ON )
option( EXIV2_BUILD_PO "Build translations files" OFF )
C:\cygwin64\home\rmills\gnu\exiv2\trunk> option( EXIV2_BUILD_EXIV2_COMMAND "Build exiv2 command-line executable" ON )
7 Running the test suite 8 Running the test suite
http://dev.exiv2.org/projects/exiv2/wiki/How_do_I_run_the_test_suite_for_Exiv2 http://dev.exiv2.org/projects/exiv2/wiki/How_do_I_run_the_test_suite_for_Exiv2
You can run the test-suite directly from cmakeBuild.cmd with the argument --test You can run the test-suite directly from cmakeBuild.cmd with the argument --test
You need cygwin's bash.exe to run the test suite. You need cygwin's bash.exe to run the test suite.
8 Building with different versions of the support libraries 9 Building with different versions of the support libraries
You can change the standard libraries. For example, to build with curl-7.39.0 You can change the standard libraries. For example, to build with curl-7.39.0
1) set _CURL_=curl-7.39.0 1) set _CURL_=curl-7.39.0
2) add curl-7.39.0.tar.gz in your build directory 2) add curl-7.39.0.tar.gz in your build directory
@ -204,14 +239,15 @@ How to use this
1) set _OPENSSL_=openssl-1.0.1j 1) set _OPENSSL_=openssl-1.0.1j
2) add openssl-1.0.1j-vs2015.zip into your build directory 2) add openssl-1.0.1j-vs2015.zip into your build directory
9 Rebuilding with VS 2005/8/10/12/13/15 32/64 9 Rebuilding with VS 2005/8/10/12/13/15/17 32/64
The script cmakeBuildAll.cmd is provided for convenience: The script cmakeBuildAll.cmd is provided for convenience:
cmakeBuildAll.cmd --test > rebuildAll.txt cmakeBuildAll.cmd --test > rebuildAll.txt
To view progress, open another shell: tail -f rebuildAll.txt To view progress, open another shell: tail -f rebuildAll.txt
cmakeBuildAll.cmd takes about a hour if you don't specify --webready cmakeBuildAll.cmd takes about a hour if you don't specify --webready
12 build+test cycles of about 5 minutes each. 14 build+test cycles of about 5 minutes each. Just over 1 hour.
With webready, 12 build+test cycles of 12 minutes = 2.5 hours With webready, 14 build+test cycles of 12 minutes = 3 hours
Robin Mills Robin Mills
robin@clanmills.com robin@clanmills.com
Updated: 2017-09-05

@ -17,16 +17,18 @@ if /I "%1" == "--zlib" set "_ZLIB_=%2"& shift
if /I "%1" == "--help" call:Help && goto end if /I "%1" == "--help" call:Help && goto end
if /I "%1" == "--dryrun" set "_DRYRUN_=1" if /I "%1" == "--dryrun" set "_DRYRUN_=1"
if /I "%1" == "--nosamples" set "_NOSAMPLES_=1" if /I "%1" == "--samples" set "_SAMPLES_=1"
if /I "%1" == "--pause" set "_PAUSE_=1" if /I "%1" == "--pause" set "_PAUSE_=1"
if /I "%1" == "--rebuild" set "_REBUILD_=1" if /I "%1" == "--rebuild" set "_REBUILD_=1"
if /I "%1" == "--silent" set "_SILENT_=1" if /I "%1" == "--silent" set "_SILENT_=1"
if /I "%1" == "--static" set "_MODE_=static" if /I "%1" == "--static" set "_MODE_=static"
if /I "%1" == "--test" set "_TEST_=1" if /I "%1" == "--test" (set "_TEST_=1" & set _SAMPLES_=1)
if /I "%1" == "--trace" set ("_VERBOSE_=1 && echo on)" if /I "%1" == "--trace" set ("_VERBOSE_=1 && echo on)"
if /I "%1" == "--verbose" set "_VERBOSE_=1" if /I "%1" == "--verbose" set "_VERBOSE_=1"
if /I "%1" == "--video" set "_VIDEO_=1" if /I "%1" == "--video" set "_VIDEO_=1"
if /I "%1" == "--webready" set "_WEBREADY_=1" if /I "%1" == "--webready" set "_WEBREADY_=1"
if /I "%1" == "--unicode" set "_UNICODE_=ON"
if /I "%1" == "--nls" set "_NLS_=ON"
shift shift
if not (%1) EQU () goto GETOPTS if not (%1) EQU () goto GETOPTS
@ -34,8 +36,8 @@ goto main
:help :help
call cmakeDefaults >NUL 2>NUL call cmakeDefaults >NUL 2>NUL
echo Options: --help ^| --webready ^| --rebuild ^| --video ^| --static echo Options: --help ^| --webready ^| --rebuild ^| --video ^| --static ^| --unicode ^| --nls
echo. --silent ^| --verbose ^| --pause ^| --dryrun ^| --test ^| --trace echo. --silent ^| --verbose ^| --pause ^| --dryrun ^| --test ^| --samples ^| --trace
echo. --exiv2 %_EXIV2_% ^| --work %_WORK_% ^| --config %_CONFIG_% ^| --generator generator echo. --exiv2 %_EXIV2_% ^| --work %_WORK_% ^| --config %_CONFIG_% ^| --generator generator
echo. --zlib %_ZLIB_% ^| --expat %_EXPAT_% ^| --curl %_CURL_% ^| --libssh %_LIBSSH_% echo. --zlib %_ZLIB_% ^| --expat %_EXPAT_% ^| --curl %_CURL_% ^| --libssh %_LIBSSH_%
echo. --bash %_BASH_% echo. --bash %_BASH_%
@ -56,7 +58,9 @@ echo.incpath = %_INCPATH_%
echo.libpath = %_LIBPATH_% echo.libpath = %_LIBPATH_%
echo.libssh = %_LIBSSH_% echo.libssh = %_LIBSSH_%
echo.mode = %_MODE_% echo.mode = %_MODE_%
echo.nls = %_NLS_%
echo.openssl = %_OPENSSL_% echo.openssl = %_OPENSSL_%
echo.unicode = %_UNICODE_%
echo.work = %_WORK_% echo.work = %_WORK_%
echo.test = %_TEST_% echo.test = %_TEST_%
echo.video = %_VIDEO_% echo.video = %_VIDEO_%
@ -91,6 +95,7 @@ IF NOT EXIST "%VSINSTALLDIR%" (
GOTO error_end GOTO error_end
) )
if /I "%VSINSTALLDIR%" == "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\" set "_VS_=2017" && set "_VC_=15"
if /I "%VSINSTALLDIR%" == "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\" set "_VS_=2015" && set "_VC_=14" if /I "%VSINSTALLDIR%" == "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\" set "_VS_=2015" && set "_VC_=14"
if /I "%VSINSTALLDIR%" == "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\" set "_VS_=2013" && set "_VC_=12" if /I "%VSINSTALLDIR%" == "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\" set "_VS_=2013" && set "_VC_=12"
if /I "%VSINSTALLDIR%" == "%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\" set "_VS_=2012" && set "_VC_=11" if /I "%VSINSTALLDIR%" == "%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\" set "_VS_=2012" && set "_VC_=11"
@ -287,12 +292,12 @@ pushd "%EXIV_B%"
set ENABLE_SHARED=OFF set ENABLE_SHARED=OFF
set ENABLE_DYNAMIC=OFF set ENABLE_DYNAMIC=OFF
) )
set BUILD_SAMPLES=ON set BUILD_SAMPLES=OFF
if DEFINED _NOSAMPLES_ set BUILD_SAMPLES=OFF if DEFINED _SAMPLES_ set BUILD_SAMPLES=ON
call:run cmake -G "%_GENERATOR_%" -DCMAKE_BUILD_TYPE=%_CONFIG_% %_LINK_% -DCMAKE_INSTALL_PREFIX=%_INSTALL_% -DCMAKE_LIBRARY_PATH=%_LIBPATH_% -DCMAKE_INCLUDE_PATH=%_INCPATH_% ^ call:run cmake -G "%_GENERATOR_%" -DCMAKE_BUILD_TYPE=%_CONFIG_% %_LINK_% -DCMAKE_INSTALL_PREFIX=%_INSTALL_% -DCMAKE_LIBRARY_PATH=%_LIBPATH_% -DCMAKE_INCLUDE_PATH=%_INCPATH_% ^
-DEXIV2_ENABLE_NLS=OFF -DEXIV2_ENABLE_BUILD_SAMPLES=%BUILD_SAMPLES% ^ -DEXIV2_ENABLE_NLS=%_NLS_% -DEXIV2_ENABLE_BUILD_SAMPLES=%BUILD_SAMPLES% ^
-DEXIV2_ENABLE_WIN_UNICODE=OFF -DEXIV2_ENABLE_SHARED=%ENABLE_SHARED% ^ -DEXIV2_ENABLE_WIN_UNICODE=%_UNICODE_% -DBUILD_SHARED_LIBS=%ENABLE_SHARED% ^
-DEXIV2_ENABLE_DYNAMIC_RUNTIME=%ENABLE_DYNAMIC% ^ -DEXIV2_ENABLE_DYNAMIC_RUNTIME=%ENABLE_DYNAMIC% ^
%ENABLE_WEBREADY% %ENABLE_CURL% %ENABLE_LIBSSH% %ENABLE_VIDEO% ^ %ENABLE_WEBREADY% %ENABLE_CURL% %ENABLE_LIBSSH% %ENABLE_VIDEO% ^
"%_EXIV2_%" "%_EXIV2_%"
@ -327,12 +332,12 @@ if defined _TEST_ (
rem ----------------------------------------- rem -----------------------------------------
rem Exit rem Exit
rem end syntax: goto end rem end syntax: GOTO end
:end :end
endlocal endlocal
exit /b 0 exit /b 0
rem end with an error syntax: call:error_end rem end with an error syntax: GOTO error_end
:error_end :error_end
endlocal endlocal
exit /b 1 exit /b 1
@ -389,7 +394,20 @@ pushd "%LOB_B%"
echo "*** warning: build errors in %LOB% ***" echo "*** warning: build errors in %LOB% ***"
) )
call:run cmake --build . --config %_CONFIG_% --target install rem --static expat fails to install on VS 2010+
set buildLibInstallExpatStatic=0
if /I "%_TARGET_%" == "--target expat" if /I "%_MODE_%" == "static" set buildLibInstallExpatStatic=1
if /I "%buildLibInstallExpatStatic%" == "1" (
rem msvc\expat-2.1.0\lib\expat*.h => msvc\dist\2005\x64\static\Release\include
call:run copy/y "%_BUILDDIR_%\%LOB%\lib\expat*.h" "%_ONCPATH_%"
rem msvc\work\expat-2.1.0\release\*.lib => msvc\dist\2005\x64\static\Release\lib
call:run copy/y "%_WORK_%\%LOB%\%_CONFIG_%\*.lib" "%_INSTALL_%\lib"
) else (
call:run cmake --build . --config %_CONFIG_% --target install
)
IF errorlevel 1 ( IF errorlevel 1 (
echo "*** warning: install errors in %LOB% ***" echo "*** warning: install errors in %LOB% ***"
) )

@ -13,7 +13,9 @@ if NOT DEFINED _ZLIB_ SET _ZLIB_=zlib-1.2.8
if NOT DEFINED _EXPAT_ SET _EXPAT_=expat-2.1.0 if NOT DEFINED _EXPAT_ SET _EXPAT_=expat-2.1.0
if NOT DEFINED _BASH_ SET _BASH_=c:\cygwin64\bin\bash.exe if NOT DEFINED _BASH_ SET _BASH_=c:\cygwin64\bin\bash.exe
if NOT DEFINED _MODE_ SET _MODE_=dll if NOT DEFINED _MODE_ SET _MODE_=dll
if NOT DEFINED COPYCMD SET COPYCMD=/Y if NOT DEFINED _UNICODE_ SET _UNICODE_=OFF
if NOT DEFINED _NLS_ SET _NLS_=OFF
if NOT DEFINED COPYCMD SET COPYCMD=/Y
rem ---------- check that EXIV2 exists rem ---------- check that EXIV2 exists
echo checking that %_EXIV2_% exists echo checking that %_EXIV2_% exists

@ -1,29 +1,25 @@
# CMake build system for exiv2 library and executables # CMakeLists.txt for i18n files
# Copyright 2008 by Patrick Spendrin <ps_ml@gmx.de>
# Copyright 2010-2012 by Gilles Caulier <caulier dot gilles at gmail dot com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
# automatically include all po files in the directory # include all po files in the directory
FILE(GLOB PO_FILES *.po) file(GLOB PO_FILES *.po)
update_translations(exiv2 ${PO_FILES})
UPDATE_TRANSLATIONS(exiv2 ${PO_FILES}) add_translations(exiv2 ${PO_FILES})
ADD_TRANSLATIONS(exiv2 ${PO_FILES})
##
# execute xgettext on every file
add_custom_target( pot-update add_custom_target( pot-update
COMMAND xgettext -d ${PACKAGE_NAME} COMMAND xgettext -d ${PACKAGE_NAME}
-s -s -D ${CMAKE_CURRENT_SOURCE_DIR}/..
-D ${CMAKE_CURRENT_SOURCE_DIR}/.. -o ${PACKAGE_NAME}.pot
-o ${PACKAGE_NAME}.pot -p ${CMAKE_CURRENT_SOURCE_DIR}/
-p ${CMAKE_CURRENT_SOURCE_DIR}/ --from-code=UTF-8 --files-from=POTFILES.in
--from-code=UTF-8 -j
--files-from=POTFILES.in --keyword=_
-j --package-name=${PACKAGE_NAME}
--keyword=_ --package-version=${PACKAGE_VERSION}
--package-name=${PACKAGE_NAME} --copyright-holder=${PACKAGE_COPYRIGHT}
--package-version=${PACKAGE_VERSION} --msgid-bugs-address=${PACKAGE_BUGREPORT}
--copyright-holder=${PACKAGE_COPYRIGHT} )
--msgid-bugs-address=${PACKAGE_BUGREPORT}
) # That's all Folks!
##

@ -1,41 +1,41 @@
# CMake build system for exiv2 library and executables # CMakeLists.txt for exiv2 library sample applications
# Copyright 2010-2012 Gilles Caulier <caulier dot gilles at gmail dot com>
# Copyright 2008 Patrick Spendrin <ps_ml@gmx.de>
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
set( SAMPLES addmoddel.cpp
convert-test.cpp
easyaccess-test.cpp
exifcomment.cpp
exifdata-test.cpp
exifdata.cpp
exifprint.cpp
exifvalue.cpp
ini-test.cpp
iotest.cpp
iptceasy.cpp
iptcprint.cpp
iptctest.cpp
key-test.cpp
largeiptc-test.cpp
mmap-test.cpp
prevtest.cpp
stringto-test.cpp
taglist.cpp
tiff-test.cpp
werror-test.cpp
write-test.cpp
write2-test.cpp
xmpparse.cpp
xmpparser-test.cpp
xmpprint.cpp
xmpsample.cpp
)
set( SAMPLES
addmoddel.cpp
convert-test.cpp
easyaccess-test.cpp
exifcomment.cpp
exifdata-test.cpp
exifdata.cpp
exifprint.cpp
exifvalue.cpp
ini-test.cpp
iotest.cpp
iptceasy.cpp
iptcprint.cpp
iptctest.cpp
key-test.cpp
largeiptc-test.cpp
mmap-test.cpp
prevtest.cpp
stringto-test.cpp
taglist.cpp
tiff-test.cpp
werror-test.cpp
write-test.cpp
write2-test.cpp
xmpparse.cpp
xmpparser-test.cpp
xmpprint.cpp
xmpsample.cpp
)
##
# build samples AND add them to the APPLICATIONS list
foreach(entry ${SAMPLES}) foreach(entry ${SAMPLES})
string( REPLACE ".cpp" "" target ${entry}) string( REPLACE ".cpp" "" target ${entry})
add_executable( ${target} ${target}.cpp ) add_executable( ${target} ${target}.cpp )
list(APPEND APPLICATIONS ${target})
add_test( ${target}_test ${target} ) add_test( ${target}_test ${target} )
target_link_libraries( ${target} PRIVATE exiv2lib) target_link_libraries( ${target} PRIVATE exiv2lib)
install( TARGETS ${target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install( TARGETS ${target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
@ -44,20 +44,23 @@ endforeach()
################################### ###################################
add_executable( metacopy metacopy.cpp ../src/utils.cpp) add_executable( metacopy metacopy.cpp ../src/utils.cpp)
list(APPEND APPLICATIONS metacopy)
target_link_libraries( metacopy PRIVATE exiv2lib) target_link_libraries( metacopy PRIVATE exiv2lib)
target_include_directories(metacopy PRIVATE ${CMAKE_SOURCE_DIR}/src) # To find utils.hpp target_include_directories(metacopy PRIVATE ${CMAKE_SOURCE_DIR}/src) # To find utils.hpp
add_executable ( pathtest path-test.cpp ../src/utils.cpp) add_executable( pathtest path-test.cpp ../src/utils.cpp)
set_target_properties( pathtest PROPERTIES OUTPUT_NAME path-test ) list(APPEND APPLICATIONS pathtest)
target_link_libraries( pathtest PRIVATE exiv2lib) set_target_properties( pathtest PROPERTIES OUTPUT_NAME path-test )
target_link_libraries( pathtest PRIVATE exiv2lib)
target_include_directories(pathtest PRIVATE ${CMAKE_SOURCE_DIR}/src) # To find utils.hpp target_include_directories(pathtest PRIVATE ${CMAKE_SOURCE_DIR}/src) # To find utils.hpp
if(NOT EXV_HAVE_TIMEGM ) if(NOT EXV_HAVE_TIMEGM )
target_sources(pathtest PRIVATE ../src/localtime.c) target_sources(pathtest PRIVATE ../src/localtime.c)
endif() endif()
add_executable( exiv2json exiv2json.cpp Jzon.cpp) add_executable( exiv2json exiv2json.cpp Jzon.cpp)
target_link_libraries( exiv2json PRIVATE exiv2lib) list(APPEND APPLICATIONS exiv2json)
target_link_libraries( exiv2json PRIVATE exiv2lib)
install( TARGETS metacopy pathtest exiv2json RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install( TARGETS metacopy pathtest exiv2json RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
@ -66,9 +69,10 @@ if (MSVC)
target_sources(metacopy PRIVATE ../src/getopt_win32.c) target_sources(metacopy PRIVATE ../src/getopt_win32.c)
endif() endif()
if( EXIV2_ENABLE_XMP ) if( EXPAT_FOUND )
add_executable( geotag geotag.cpp) add_executable( geotag geotag.cpp)
target_link_libraries( geotag PRIVATE exiv2lib ${ZLIB_LIBRARIES}) list(APPEND APPLICATIONS geotag)
target_link_libraries( geotag PRIVATE exiv2lib ${EXPAT_LIBRARIES})
install( TARGETS geotag RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install( TARGETS geotag RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif() endif()
@ -76,17 +80,26 @@ endif()
# connection test application # connection test application
add_executable(conntest conntest.cpp) add_executable(conntest conntest.cpp)
target_link_libraries(conntest PRIVATE exiv2lib) target_link_libraries(conntest PRIVATE exiv2lib)
list(APPEND APPLICATIONS conntest)
# ******************************************************************************
# exifprint application
# ADD_EXECUTABLE( exifprint exifprint.cpp )
# target_link_libraries( exifprint exiv2lib )
# ****************************************************************************** # ******************************************************************************
# remotetest application # remotetest application
add_executable(remotetest remotetest.cpp) add_executable(remotetest remotetest.cpp)
target_link_libraries(remotetest exiv2lib) target_link_libraries(remotetest exiv2lib)
list(APPEND APPLICATIONS remotetest)
# ******************************************************************************
# set compiler -DEXV_HAVE_DLL when linking exiv2 dll
foreach(application ${APPLICATIONS})
if ( BUILD_SHARED_LIBS )
target_compile_definitions(${application} PRIVATE EXV_HAVE_DLL )
endif()
endforeach()
# ****************************************************************************** # ******************************************************************************
# Man page # Man page
install( FILES exiv2samples.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 ) install( FILES exiv2samples.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 )
# That's all Folks!
##

@ -1,145 +1,19 @@
# CMake build system for exiv2 library and executables # CMakeLists.txt for exiv2 library and command-line program
# Copyright 2015- Daniel Kaneider <danielkaneider@users.sf.net>
# Copyright 2010-2012 Gilles Caulier <caulier dot gilles at gmail dot com> # list of public C++ include files
# Copyright 2008 Patrick Spendrin <ps_ml@gmx.de> file(GLOB LIBEXIV2_HDR ../include/exiv2/*.hpp)
list(APPEND LIBEXIV2_HDR ${CMAKE_BINARY_DIR}/exv_conf.h)
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file. # list of internal include files only required to build the library
file(GLOB LIBEXIV2_PRIVATE_HDR *_int.hpp)
# Private headers which are only needed for the library itself
set( LIBEXIV2_PRIVATE_HDR canonmn_int.hpp # list of library C++ source files
casiomn_int.hpp file(GLOB LIBEXIV2_SRC *.cpp)
cr2image_int.hpp # remove files which are not part of the library
crwimage_int.hpp file(GLOB LIBEXIV2_SRC_NOT actions.cpp exiv2.cpp *test.cpp crwparse.cpp mrwthumb.cpp xmpdump.cpp)
fujimn_int.hpp foreach(entry ${LIBEXIV2_SRC_NOT})
makernote_int.hpp list(REMOVE_ITEM LIBEXIV2_SRC ${entry})
minoltamn_int.hpp endforeach()
nikonmn_int.hpp
olympusmn_int.hpp
orfimage_int.hpp
panasonicmn_int.hpp
pentaxmn_int.hpp
pngchunk_int.hpp
rcsid_int.hpp
rw2image_int.hpp
samsungmn_int.hpp
sigmamn_int.hpp
sonymn_int.hpp
tags_int.hpp
tiffcomposite_int.hpp
tifffwd_int.hpp
tiffimage_int.hpp
tiffvisitor_int.hpp
)
# Add standalone C++ header files to this list
set( LIBEXIV2_HDR ../include/exiv2/asfvideo.hpp
../include/exiv2/basicio.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/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/preview.hpp
../include/exiv2/properties.hpp
../include/exiv2/psdimage.hpp
../include/exiv2/quicktimevideo.hpp
../include/exiv2/rafimage.hpp
../include/exiv2/riffvideo.hpp
../include/exiv2/rwlock.hpp
../include/exiv2/rw2image.hpp
../include/exiv2/tags.hpp
../include/exiv2/tgaimage.hpp
../include/exiv2/tiffimage.hpp
../include/exiv2/types.hpp
../include/exiv2/utilsvideo.hpp
../include/exiv2/value.hpp
../include/exiv2/version.hpp
../include/exiv2/webpimage.hpp
../include/exiv2/xmp_exiv2.hpp
../include/exiv2/xmpsidecar.hpp
../include/exiv2/utilsvideo.hpp
${CMAKE_BINARY_DIR}/exv_conf.h
)
# Add library C++ source files to this list
set( LIBEXIV2_SRC asfvideo.cpp
basicio.cpp
bmpimage.cpp
canonmn.cpp
casiomn.cpp
convert.cpp
cr2image.cpp
crwedit.cpp
crwimage.cpp
datasets.cpp
easyaccess.cpp
epsimage.cpp
error.cpp
exif.cpp
futils.cpp
fujimn.cpp
gifimage.cpp
http.cpp
image.cpp
ini.cpp
iptc.cpp
jp2image.cpp
jpgimage.cpp
makernote.cpp
matroskavideo.cpp
metadatum.cpp
minoltamn.cpp
mrwimage.cpp
nikonmn.cpp
olympusmn.cpp
orfimage.cpp
panasonicmn.cpp
pentaxmn.cpp
pgfimage.cpp
preview.cpp
properties.cpp
psdimage.cpp
quicktimevideo.cpp
rafimage.cpp
riffvideo.cpp
rw2image.cpp
samsungmn.cpp
sigmamn.cpp
sonymn.cpp
tags.cpp
tgaimage.cpp
tiffcomposite.cpp
tiffimage.cpp
tiffvisitor.cpp
types.cpp
utilsvideo.cpp
value.cpp
version.cpp
webpimage.cpp
xmp.cpp
xmpsidecar.cpp
utilsvideo.cpp
)
if( EXIV2_ENABLE_WEBREADY ) if( EXIV2_ENABLE_WEBREADY )
if( EXIV2_ENABLE_CURL) if( EXIV2_ENABLE_CURL)
@ -166,20 +40,24 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR})
# exiv2lib library # exiv2lib library
if( EXIV2_ENABLE_XMP AND NOT EXIV2_ENABLE_LIBXMP ) if( EXIV2_ENABLE_XMP AND NOT EXIV2_ENABLE_LIBXMP )
add_library( exiv2lib ${STATIC_FLAG} ${LIBEXIV2_SRC} ${LIBEXIV2_HDR} ${LIBEXIV2_PRIVATE_HDR} $<TARGET_OBJECTS:xmp_object>) add_library( exiv2lib ${LIBEXIV2_SRC} ${LIBEXIV2_HDR} ${LIBEXIV2_PRIVATE_HDR} $<TARGET_OBJECTS:xmp_object>)
target_link_libraries(exiv2lib PUBLIC ${EXPAT_LIBRARIES})
else() else()
add_library( exiv2lib ${STATIC_FLAG} ${LIBEXIV2_SRC} ${LIBEXIV2_HDR} ${LIBEXIV2_PRIVATE_HDR}) add_library( exiv2lib ${LIBEXIV2_SRC} ${LIBEXIV2_HDR} ${LIBEXIV2_PRIVATE_HDR})
endif()
if ( BUILD_SHARED_LIBS )
target_link_libraries(exiv2lib PUBLIC ${EXPAT_LIBRARIES})
endif() endif()
set_target_properties( exiv2lib PROPERTIES set_target_properties( exiv2lib PROPERTIES
VERSION ${GENERIC_LIB_VERSION} VERSION ${GENERIC_LIB_VERSION}
SOVERSION ${GENERIC_LIB_SOVERSION} SOVERSION ${GENERIC_LIB_SOVERSION}
DEFINE_SYMBOL EXV_BUILDING_LIB
OUTPUT_NAME exiv2 OUTPUT_NAME exiv2
) )
target_compile_definitions(exiv2lib PRIVATE EXV_LOCALEDIR="${CMAKE_INSTALL_LOCALEDIR}" ) target_compile_definitions(exiv2lib PRIVATE EXV_LOCALEDIR="${CMAKE_INSTALL_LOCALEDIR}" EXV_BUILDING_LIB )
if ( BUILD_SHARED_LIBS )
target_compile_definitions(exiv2lib PRIVATE EXV_HAVE_DLL )
endif()
if ( UNIX AND CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" ) if ( UNIX AND CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" )
set (FREEBSD 1) set (FREEBSD 1)
@ -206,11 +84,10 @@ endif()
if ( MSVC ) if ( MSVC )
target_compile_definitions(exiv2lib PRIVATE PSAPI_VERSION=1) # to be compatible with <= WinVista (#905) target_compile_definitions(exiv2lib PRIVATE PSAPI_VERSION=1) # to be compatible with <= WinVista (#905)
if ( EXIV2_ENABLE_STATIC ) if( EXIV2_ENABLE_PNG )
target_link_libraries( exiv2lib zlibstatic ${ZLIB_LIBRARIES} )
else()
target_link_libraries( exiv2lib PRIVATE ${ZLIB_LIBRARIES} ) target_link_libraries( exiv2lib PRIVATE ${ZLIB_LIBRARIES} )
endif() endif()
source_group("Header Files" FILES ${LIBEXIV2_HDR} ) source_group("Header Files" FILES ${LIBEXIV2_HDR} )
source_group("Header Files" FILES ${LIBCURL_HDR} ) source_group("Header Files" FILES ${LIBCURL_HDR} )
source_group("Header Files" FILES ${SSH_HDR} ) source_group("Header Files" FILES ${SSH_HDR} )
@ -218,7 +95,7 @@ if ( MSVC )
else() else()
# TODO: Check if this is really needed. # TODO: Check if this is really needed.
if ( UNIX AND NOT FREEBSD ) if ( UNIX AND NOT FREEBSD )
target_link_libraries( exiv2lib PRIVATE dl) target_link_libraries( exiv2lib PRIVATE dl) # -ldl = dynamic loader used by src/version.cpp
endif() endif()
target_link_libraries( exiv2lib PRIVATE Threads::Threads) target_link_libraries( exiv2lib PRIVATE Threads::Threads)
target_link_libraries( exiv2lib PUBLIC ${CURL_LIBRARIES} ${SSH_LIBRARIES}) target_link_libraries( exiv2lib PUBLIC ${CURL_LIBRARIES} ${SSH_LIBRARIES})
@ -256,18 +133,22 @@ install(FILES ${LIBEXIV2_HDR}
# ****************************************************************************** # ******************************************************************************
# exiv2 application # exiv2 application
set( EXIV2_SRC exiv2.cpp set( EXIV2_SRC
exiv2app.hpp exiv2.cpp
actions.cpp exiv2app.hpp
actions.hpp actions.cpp
utils.cpp actions.hpp
utils.hpp utils.cpp
utils.hpp
) )
if(EXIV2_ENABLE_TOOLS) if(EXIV2_BUILD_EXIV2_COMMAND)
add_executable( exiv2 ${EXIV2_SRC} ) add_executable( exiv2 ${EXIV2_SRC} )
target_compile_definitions(exiv2 PRIVATE EXV_LOCALEDIR="${CMAKE_INSTALL_LOCALEDIR}" ) target_compile_definitions(exiv2 PRIVATE EXV_LOCALEDIR="${CMAKE_INSTALL_LOCALEDIR}" )
target_link_libraries( exiv2 PRIVATE exiv2lib ) target_link_libraries( exiv2 PRIVATE exiv2lib )
if ( BUILD_SHARED_LIBS )
target_compile_definitions(exiv2 PRIVATE EXV_HAVE_DLL )
endif()
install(TARGETS exiv2 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(TARGETS exiv2 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif() endif()
@ -288,3 +169,6 @@ endif()
# ****************************************************************************** # ******************************************************************************
# Man page # Man page
install( FILES exiv2.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 ) install( FILES exiv2.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 )
# That's all Folks!
##

@ -1,36 +1,7 @@
# CMake build system for exiv2 library and executables # CMakeLists.txt exiv2/xmpsdk
# Copyright 2010-2012 Gilles Caulier <caulier dot gilles at gmail dot com>
# Copyright 2008 Patrick Spendrin <ps_ml at gmx dot de>
# Redistribution and use is allowed according to the terms of the BSD license. # list files to be use to build XMPsdk
# For details see the accompanying COPYING-CMAKE-SCRIPTS file. file(GLOB XMPSRC src/*.cpp include/*.h include/*.hpp)
set(XMPSRC src/ExpatAdapter.cpp
src/MD5.cpp
src/ParseRDF.cpp
src/UnicodeConversions.cpp
src/WXMPIterator.cpp
src/WXMPMeta.cpp
src/WXMPUtils.cpp
src/XML_Node.cpp
src/XMPCore_Impl.cpp
src/XMPIterator.cpp
src/XMPMeta-GetSet.cpp
src/XMPMeta-Parse.cpp
src/XMPMeta-Serialize.cpp
src/XMPMeta.cpp
src/XMPUtils-FileInfo.cpp
src/XMPUtils.cpp
include/MD5.h
include/TXMPIterator.hpp
include/TXMPMeta.hpp
include/TXMPUtils.hpp
include/XMP_Const.h
include/XMP_Environment.h
include/XMP.incl_cpp
include/XMPSDK.hpp
include/XMP_Version.h
)
foreach(_currentfile ${XMPSRC}) foreach(_currentfile ${XMPSRC})
if(UNIX AND NOT CYGWIN) if(UNIX AND NOT CYGWIN)
@ -38,7 +9,7 @@ foreach(_currentfile ${XMPSRC})
endif() endif()
endforeach() endforeach()
# We generate a CMake OBJECT LIBRARY (a bunch of object files) # CMake OBJECT LIBRARY (collection of object files)
add_library( xmp_object OBJECT ${XMPSRC} ) add_library( xmp_object OBJECT ${XMPSRC} )
target_include_directories(xmp_object PRIVATE ${EXPAT_INCLUDE_DIR}) target_include_directories(xmp_object PRIVATE ${EXPAT_INCLUDE_DIR})
@ -67,3 +38,6 @@ if( EXIV2_ENABLE_LIBXMP )
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
) )
endif() endif()
# That's all Folks!
##

Loading…
Cancel
Save