------------------------------------------------------------------------------- NOTE: * CMake scripts are "work in progress". Use them only if you're prepared to fix them. See TODO-CMAKE for known pending tasks. * The existing automake (./configure), msvc2003 and msvc2005 build files will continue to be supported by exiv2 until at least v0.26. We will flag them as "deprecated" for at least one release cycle (about 12 months). Our plan is to only support CMake when our scripts are feature-complete, stable and documented. All help is appreciated. If you know and understand CMake (especially with Visual Studio) please consider contributing your time and skill to help Exiv2 and CMake work well together. Robin Mills robin@clanmills.com 2015-02-23 ------------------------------------------------------------------------------- Exiv2 uses cmake, a cross-platform build system, to control the compilation process using platform/compiler independent configuration files. TABLE OF CONTENTS ----------------- 1 CMake resources 2 Building and Installing for Unix type systems 3 Building and Installing for Visual Studio Users 4 Building and Installing for other users (Xcode, Eclipse, Qt) 1 CMake resources ================= You have to install cmake on your target system. Home: http://www.cmake.org/ Help: http://www.cmake.org/cmake/help/help.html Doc: http://www.cmake.org/cmake/help/documentation.html Wiki: http://www.cmake.org/Wiki/CMake FAQ: http://www.cmake.org/Wiki/CMake_FAQ 2 Building and Installing on Linux ================================== This process also covers MacOS-X Terminal, Cygwin and MinGW users. a) From the command line Run the following commands from the top directory (containing this file) to configure, build and install the library and utility: $ mkdir build $ cd build $ cmake .. $ make $ make install To modify the configuration $ ccmake .. Usual CMake options : -DCMAKE_INSTALL_PREFIX : decide where the program will be install on your computer. -DCMAKE_BUILD_TYPE : decide which type of build you want. You can chose between: "debugfull". : for hacking. Include all debug information. "debug". "profile". "relwithdebinfo" : default. use gcc -O2 -g options. "release" : generate stripped and optimized bin files. For packaging. Specific Exiv2 options : -DEXIV2_ENABLE_SHARED : Build exiv2 as a shared library (dll). [default=on ] -DEXIV2_ENABLE_XMP : Build with XMP metadata support. [default=on ] -DEXIV2_ENABLE_LIBXMP : Build a static convenience Library for XMP. [default=on ] -DEXIV2_ENABLE_PNG : Build with png support (requires libz). [default=on ] -DEXIV2_ENABLE_NLS : Build native language support (requires gettext). [default=on ] -DEXIV2_ENABLE_PRINTUCS2 : Build with Printucs2. [default=on ] -DEXIV2_ENABLE_LENSDATA : Build including lens data. [default=on ] -DEXIV2_ENABLE_COMMERCIAL : Build with the EXV_COMMERCIAL_VERSION symbol set. [default=off] -DEXIV2_ENABLE_BUILD_SAMPLES : Build the unit tests. [default=off] -DEXIV2_ENABLE_BUILD_PO : Build translations files. [default=off] -DEXIV2_ENABLE_CURL : USE Libcurl for HttpIo [default=off] -DEXIV2_ENABLE_SSH : USE Libssh for SshIo [default=off] Default install locations Use -DCMAKE_INSTALL_PREFIX like this : "cmake . -DCMAKE_INSTALL_PREFIX=/usr" is equivalent to "./configure --prefix=/usr" with automake/configure. To uninstall Exiv2, run: $ make uninstall b) Using the cmake GUI ccmake 3 Building and installing for DevStudio Users ============================================= exiv2 provides three build environment for users of Visual Studio: msvc2003: 32 bit build environment for MSVC 2003 msvc2005: 32 bit AND 64 bit build environment for MSVC 2005 and later (2008/10/12/13) cmake: This environment CMake doesn't build code. It generates build environments. CMake is a language for describing builds and the CMake interpreter generates the build environment for your system. CMake generates MSVC .sln and .vcproj files for your target environment. The files generated by CMake provide 4 configs: Debug|Release|RelWithDebInfo|MinSizeRel The current architecture of CMake requires you to decide before running cmake: 1) The version of DevStudio 2) 32bit or 64 bit builds 3) Building static or shared libraries Code FileSystem Layout ---------------------- I set up my environment as follows: Directory of C:\gnu.cmake 2012-05-31 09:49 exiv2 | Vanilla 2012-05-31 09:45 expat-2.1.0 | source 2012-05-30 16:22 zlib-1.2.7 | trees The command to run cmake is of the form: cmake CMakeLists.txt -G "Visual Studio 9 2008 Win64" There are many options for the cmake command, and many generators. I've added a little batch file cm.bat for my convenience. c:\> cm 2008 64 == cmake CMakeLists.txt -G "Visual Studio 9 2008 Win64" Building from source -------------------- There are 3 steps (build zlib/expat, build exiv2, test). You can skip step 1 if you have prebuilt libraries (see note below) 1) Building the support libraries expat and zlib with cmake cd expat-2.1.0 If you wish to use a static library (shared is default) a) set expat-2.1.0/CMakeLists.txt static option(BUILD_shared "build a shared expat library" ON) <------- Set OFF b) You'll need the following patch (around line 23) See "Note about expat-2.1.0/CMakeLists.txt" --- extract from CMakeLists.txt --- option(XML_NS "Define to make XML Namespaces functionality available" ON) # rmills patch begin include(../exiv2/CMake_msvc.txt) msvc_runtime_configure(${BUILD_shared}) # rmills patch end if(XML_DTD) --- extract end --- cmake CMakeLists.txt -G "Visual Studio 9 2008 Win64" .... rattle roll .... Open expat.sln and build all. Similar process for zlib-1.2.7 You will not need to edit CMakeLists.txt (zlib builds shared and dynamic libraries) cmake CMakeLists.txt -G "Visual Studio 9 2008 Win64" .... rattle roll .... Open zlib.sln and build all. 2) Building exiv2 CMake recommend building "out of source" which means building in a clean directory BELOW the source tree: eg cd exiv2 Edit CMakeLists.txt to specify shared or static library (and other options) You may need to change the path to expat and zlib to match your setup mkdir build cd build cmake -G "Visual Studio 9 2008 Win64" .. ... rattle roll ... Open build/exiv2.sln and build all. 3) Location of built files (exiv2.exe, exiv2.dll etc) exiv2\build\bin\{ x64 | Win32 }\{ Dynamic|Static }\{Config}\exiv2.exe etc.... Config: Debug | MinSizeRel | Release | RelWithDebInfo The test suite is a bash script and requires Cygwin. cd /c/gnu/exiv2/test ./testMSVC.sh ${PWD}/../build/bin/x64/Dynamic/Release or ./testMSVC.sh ${PWD}/../build/bin/x64/Dynamic/ | tee foo.txt ./verifyMSVC foo.txt Note about expat-2.1.0/CMakeLists.txt ------------------------------------- expat-2.1.0/CMakeLists.txt can build static or dynamic libraries. However expat's CMakeLists.txt links with MSVCRTx.dll for both static and dynamic. I've taken a decision to either link "All static" or "All dynamic" with no mixing. This patch enforces my design and avoids linker headaches. Note about using prebuilt zlib, expat and iconv ----------------------------------------------- I expect you to setup the source build tree and build expat and zlib. However you may wish to use prebuilt versions of zlib, iconv and expat. Specify the location of the prebuilt libraries on the cmake command line: For example: cmake -G "NMake Makefiles" .. -DEXPAT_LIBRARY=%KDE4_INSTALL_DIR%/lib/libexpat.lib Daniel has provided a patch (SVN:2893) which enables you to specify a ZLIB search path: Example: cmake.exe -G "Visual Studio 11 Win64" -DZLIB_ROOT=..\zlib-1.2.7-dev;..\zlib-1.2.7-dev\Release ... If ZLIB is not located on the path provided, the normal default (..\zlib-1.2.7) will be used. ToDo: More information about parameters -DEXPAT_LIBRARTY -DZLIB_LIBRARY etc. 4 Building and Installing for other users (Xcode, Eclipse, Qt) ============================================================== To be written # That's all Folks ##