-------------------------------------------------------------------------------
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    <DIR>          exiv2          | Vanilla
2012-05-31  09:45    <DIR>          expat-2.1.0    | source
2012-05-30  16:22    <DIR>          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
##
