#1236 Updated CMake Documentation.

v0.27.3
Robin Mills 9 years ago
parent 4bb0575d45
commit 755d13b6ff

@ -14,12 +14,12 @@ NOTE:
* The existing automake (./configure), and msvc2005 build files will continue * The existing automake (./configure), and msvc2005 build files will continue
to be supported by exiv2 for at least v0.27 (and probably longer) to be supported by exiv2 for at least v0.27 (and probably longer)
The msvc-2003 build files are deprecated and will not be supported after v0.26. The msvc-2003 build files are deprecated and will not be supported after v0.26.
Exiv2 will not build on MinGW (neither 32bit nor 64bit) Exiv2 will not build on MinGW (neither 32bit nor 64bit)
This is discussed in TODO-CMAKE This is discussed in TODO-CMAKE
Robin Mills Robin Mills
robin@clanmills.com robin@clanmills.com
2016-09-23 2016-09-23
@ -123,7 +123,7 @@ the build environment for your system.
CMake generates MSVC .sln and .vcproj files for your target environment. CMake generates MSVC .sln and .vcproj files for your target environment.
The files generated by CMake provide 4 configs: Debug|Release|RelWithDebInfo|MinSizeRel The files generated by CMake provide 4 configs: Debug|Release|RelWithDebInfo|MinSizeRel
The current architecture of CMake requires you to decide before running cmake: The current architecture of CMake requires you to decide before running cmake:
1) The version of DevStudio 1) The version of DevStudio
2) 32bit or 64 bit builds 2) 32bit or 64 bit builds
3) Building static or shared libraries 3) Building static or shared libraries
@ -131,7 +131,7 @@ We have two contributed CMake Build Environments:
1 contrib/cmake/msvc 1 contrib/cmake/msvc
Please read contrib/cmake/msvc/ReadMe.txt Please read contrib/cmake/msvc/ReadMe.txt
2 contrib/build/msvc 2 contrib/build/msvc
The scripts require: The scripts require:
@ -144,164 +144,16 @@ We have two contributed CMake Build Environments:
- adapt the paths in setenv.cmd - adapt the paths in setenv.cmd
- open the VS command line shell - open the VS command line shell
- execute build.cmd (if there are any errors, the script should tell you) - execute build.cmd (if there are any errors, the script should tell you)
Exiv2 should be packaged in the dist directory with all the .lib, include and binary files you need. Exiv2 should be packaged in the dist directory with all the .lib, include and binary files you need.
4 Building and installing for MinGW Users 4 Building and installing for MinGW Users
========================================= =========================================
1 Running a MinGW bash shell CMake/MinGW has a number of serious issues. This will be reported to Kitware.
I installed MinGW using the installer on the web site. It is possible to use CMake/MinGW if you put in some effort. This is documented in TODO-CMAKE.
I installed two copies c:\MinGW and c:\MinGW64
- both copies run a 32 bit bash shell
I installed the TDM-GCC-64 compiler for use from MinGW64
I installed the Qt 5.6.0 Environement for use from MinGW
I start mingw from DOS with this batch-file (mingw32.bat)
C:\>type c:\Users\rmills\com\mingw32.bat
@echo off
rem ------------------
: mingw32.bat
: invoke MinGW bash
:
setlocal
set "PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig"
set "INCLUDE_PATH=/usr/local/inc"
set "LIBRARY_PATH=/usr/local/lib"
set "BINARY_PATH=/usr/local/bin"
rem set "PATH=c:\MinGW\bin;c:\MinGW\msys\1.0\bin;c:\MinGW\msys\1.0\local\bin;c:\Users\rmills\com;."
set "PATH=c:\Qt\Qt5.6.0\5.6\mingw49_32\bin;c:\Qt\Qt5.6.0\Tools\mingw492_32\bin;c:\MinGW\bin;\usr\bin:\usr\local\bin;c:\cygwin64\bin;c:\Users\rmills\com;."
set "PS1=\! -32- ${PWD}> "
c:\MinGW\msys\1.0\bin\bash.exe %*%
: That's all Folks
rem ------------------
In ~/.bashrc
502 -32- /home/rmills> cat .bashrc
#!/bin/bash
export "PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig"
export "INCLUDE_PATH=/usr/local/inc"
export "LIBRARY_PATH=/usr/local/lib"
export "BINARY_PATH=/usr/local/bin"
# PATH=c:/Qt/Qt5.6.0/5.6/mingw49_32/bin;c:/Qt/Qt5.6.0/Tools/mingw492_32/bin;c:/MinGW/bin;/usr/bin:/usr/local/bin;c:/cygwin64/bin;c:/Users/rmills/com;.
PS1='\! -32- ${PWD}> '
# echo hello world from .bashrc
alias dir='ls -alt'
alias del='rm -rf'
alias finder='find . -depth -iname'
alias path='(IFS=:;for i in $PATH; do echo $i; done)'
##
# finder helpers
export L="-exec ls -dalt {} ;"
export X="-exec rm -rf {} ;"
export C="-exec ce {} ;"
export I="-exec lipo -info {} ;"
export O="-exec otool -L {} ;"
export Z="-exec open {} ;"
export P="-exec p4 edit {} ;"
export R="-exec p4 revert {} ;"
export G="-exec grep"
export __=";"
export ___="{} ;"
# That's all Folks!
##503 -32- /home/rmills>
MinGW64 has very similar code. Putting the TDM compiler on the path is the major difference
C:\Users\rmills\com>diff mingw32.bat mingw64.bat
3c3
< : mingw32.bat
---
> : mingw64.bat
11,14c11,25
< rem set "PATH=c:\MinGW\bin;c:\MinGW\msys\1.0\bin;c:\MinGW\msys\1.0\local\bin;c:\Users\rmills\com;."
< set "PATH=c:\Qt\Qt5.6.0\5.6\mingw49_32\bin;c:\Qt\Qt5.6.0\Tools\mingw492_32\bin;c:\MinGW\bin;\usr\bin:\usr\local\bin;c:\cygwin64\bin;c:\Users\rmills\com;."
< set "PS1=\! -32- ${PWD}> "
< c:\MinGW\msys\1.0\bin\bash.exe %*%
---
> : TDM 4.9.2
> set "PATH=c:\TDM-GCC-64\bin;c:\MinGW64\bin;c:\MinGW64\msys\1.0\bin;C:\MinGW64\msys\1.0\local\bin;c:\cygwin64\bin;c:\Users\rmills\com;."
>
> : 4.9.2 compiler
> : set "PATH=c:\mingw-w64\mingw64\bin;c:\mingw-w64\mingw64\opt\bin;;c:\MinGW64\bin;c:\MinGW64\msys\1.0\bin;C:\MinGW64\msys\1.0\local\bin;c:\cygwin64\bin;c:\Users\rmills\com;."
>
> : TDM 5.1 compiler
> : set "PATH=c:\TDM-GCC-51-64\bin;c:\TDM-GCC-51-64\x86_64-w64-mingw32\bin;c:\MinGW64\bin;c:\MinGW64\msys\1.0\bin;C:\MinGW64\msys\1.0\local\bin;c:\cygwin64\bin;c:\Users\rmills\com;."
>
> set "PS1=\! -64- ${PWD}> "
> : 32 bit MinGW/bash
> c:\MinGW64\msys\1.0\bin\bash.exe %*%
>
> : 64 bit Cygwin shell
> : c:\cygwin64\bin\bash.exe
2 Building and installing CMake
$ ./bookstrap --prefix=/usr/local
$ make
$ make install
Gotchas:
1) Do not use a Windows binary install version of CMake
This generates commands which assume you are in the DOS shell.
Build and Use CMake in a "Unix" Way from a MinGW/bash shell.
2) Even although gcc is on the path, we must tell cmake not to use /c/MinGW/bin/gcc)
3) It's using the wrong headers. Needs /c/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$dist -DEXIV2_ENABLE_NLS=OFF \
-DCMAKE_C_COMPILER=$(which gcc) -DCMAKE_CXX_COMPILER=$(which g++) \
"-DCMAKE_CXX_FLAGS=-I/c/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include"
..
4) even so, it errors instantly on:
In file included from c:/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include/stddef.h:7:0,
from c:/Qt/Qt5.6.0/Tools/mingw492_32/lib/gcc/i686-w64-mingw32/4.9.2/include/stddef.h:1,
from C:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/xmpsdk/include/XMP_Const.h:14,
from C:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/xmpsdk/src/XMPCore_Impl.hpp:13,
from C:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/xmpsdk/src/ExpatAdapter.cpp:10:
c:/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include/crtdefs.h:26:9: error: 'size_t' does not name a type
typedef size_t rsize_t;
5) Building cmake itself required setting CC CXX CXXFLAGS and LDFLAGS
AND editing a system file in Qt with an erroneous #pragma error NTDDI_VERSION and _WIN32_WINNT
In file included from c:/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include/windows.h:10:0,
from c:/Users/rmills/gnu/cmake/cmake-3.6.2/Utilities/cmlibarchive/libarchive/archive_windows.h:74,
from c:/Users/rmills/gnu/cmake/cmake-3.6.2/Utilities/cmlibarchive/libarchive/archive_platform.h:60,
from c:/Users/rmills/gnu/cmake/cmake-3.6.2/Utilities/cmlibarchive/libarchive/xxhash.c:35:
c:/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include/sdkddkver.h:186:2: error: #error NTDDI_VERSION and _WIN32_WINNT mismatch!
My work-around was to comment off the #error statement!
3 Building with CMake
$ cd ~/gnu/exiv2/trunk
$ rm -rf build ; mkdir build ; cd build
$ cmake .. -G "Unix Makefiles" -DCMAKE_C_COMPILER=$(which gcc) -DCMAKE_CXX_COMPILER=$(which g++) -DEXIV2_ENABLE_NLS=OFF
.... cmake will rattle and roll ....
CMake generates the wrong include response files.
I put the correct include code in contrib/cmake/mingw/includes.rsp
Propagate the correct includes to the generated files.
$ find . -name "includes_*.rsp" -exec cp ../contrib/cmake/mingw/includes.rsp {} \;
$ make
On my system, these the include response file have the code:
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/src
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/include
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/include/exiv2
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/build
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/xmpsdk/include
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/xmpsdk/src
-IC:/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include
-IC:/Qt/Qt5.6.0/Tools/mingw492_32/lib/gcc/i686-w64-mingw32/4.9.2/include
-IC:/MinGW/msys/1.0/local/include
# That's all Folks # That's all Folks
## ##

@ -11,10 +11,173 @@ Current Status
ToDo: * CMake/MinGW builds executables that do not work properly for v0.26 ToDo: * CMake/MinGW builds executables that do not work properly for v0.26
Known issues: Known issues:
sample apps crash in XML_ParserCreate() sample apps crash in XML_ParserCreate()
in c:\MinGW\msys\1.0\bin\msys-expat-1.dll in c:\MinGW\msys\1.0\bin\msys-expat-1.dll
This is because MinGW links the wrong DLLs.
Team Exiv2 will not provide support for CMake/MinGW
The known issues with CMake/MinGW will be reported to Kitware.
We hope CMake/MinGW will be in a working state for Exiv2 v0.27
Here are notes concerning CMake/MinGW
1 Running a MinGW bash shell
I installed MinGW using the installer on the web site.
I installed two copies c:\MinGW and c:\MinGW64
- both copies run a 32 bit bash shell
I installed the TDM-GCC-64 compiler for use from MinGW64
I installed the Qt 5.6.0 Environement for use from MinGW
I start mingw from DOS with this batch-file (mingw32.bat)
C:\>type c:\Users\rmills\com\mingw32.bat
@echo off
rem ------------------
: mingw32.bat
: invoke MinGW bash
:
setlocal
set "PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig"
set "INCLUDE_PATH=/usr/local/inc"
set "LIBRARY_PATH=/usr/local/lib"
set "BINARY_PATH=/usr/local/bin"
rem set "PATH=c:\MinGW\bin;c:\MinGW\msys\1.0\bin;c:\MinGW\msys\1.0\local\bin;c:\Users\rmills\com;."
set "PATH=c:\Qt\Qt5.6.0\5.6\mingw49_32\bin;c:\Qt\Qt5.6.0\Tools\mingw492_32\bin;c:\MinGW\bin;\usr\bin:\usr\local\bin;c:\cygwin64\bin;c:\Users\rmills\com;."
set "PS1=\! -32- ${PWD}> "
c:\MinGW\msys\1.0\bin\bash.exe %*%
: That's all Folks
rem ------------------
In ~/.bashrc
502 -32- /home/rmills> cat .bashrc
#!/bin/bash
export "PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig"
export "INCLUDE_PATH=/usr/local/inc"
export "LIBRARY_PATH=/usr/local/lib"
export "BINARY_PATH=/usr/local/bin"
# PATH=c:/Qt/Qt5.6.0/5.6/mingw49_32/bin;c:/Qt/Qt5.6.0/Tools/mingw492_32/bin;c:/MinGW/bin;/usr/bin:/usr/local/bin;c:/cygwin64/bin;c:/Users/rmills/com;.
PS1='\! -32- ${PWD}> '
# echo hello world from .bashrc
alias dir='ls -alt'
alias del='rm -rf'
alias finder='find . -depth -iname'
alias path='(IFS=:;for i in $PATH; do echo $i; done)'
##
# finder helpers
export L="-exec ls -dalt {} ;"
export X="-exec rm -rf {} ;"
export C="-exec ce {} ;"
export I="-exec lipo -info {} ;"
export O="-exec otool -L {} ;"
export Z="-exec open {} ;"
export P="-exec p4 edit {} ;"
export R="-exec p4 revert {} ;"
export G="-exec grep"
export __=";"
export ___="{} ;"
# That's all Folks!
##503 -32- /home/rmills>
MinGW64 has very similar code. Putting the TDM compiler on the path is the major difference
C:\Users\rmills\com>diff mingw32.bat mingw64.bat
3c3
< : mingw32.bat
---
> : mingw64.bat
11,14c11,25
< rem set "PATH=c:\MinGW\bin;c:\MinGW\msys\1.0\bin;c:\MinGW\msys\1.0\local\bin;c:\Users\rmills\com;."
< set "PATH=c:\Qt\Qt5.6.0\5.6\mingw49_32\bin;c:\Qt\Qt5.6.0\Tools\mingw492_32\bin;c:\MinGW\bin;\usr\bin:\usr\local\bin;c:\cygwin64\bin;c:\Users\rmills\com;."
< set "PS1=\! -32- ${PWD}> "
< c:\MinGW\msys\1.0\bin\bash.exe %*%
---
> : TDM 4.9.2
> set "PATH=c:\TDM-GCC-64\bin;c:\MinGW64\bin;c:\MinGW64\msys\1.0\bin;C:\MinGW64\msys\1.0\local\bin;c:\cygwin64\bin;c:\Users\rmills\com;."
>
> : 4.9.2 compiler
> : set "PATH=c:\mingw-w64\mingw64\bin;c:\mingw-w64\mingw64\opt\bin;;c:\MinGW64\bin;c:\MinGW64\msys\1.0\bin;C:\MinGW64\msys\1.0\local\bin;c:\cygwin64\bin;c:\Users\rmills\com;."
>
> : TDM 5.1 compiler
> : set "PATH=c:\TDM-GCC-51-64\bin;c:\TDM-GCC-51-64\x86_64-w64-mingw32\bin;c:\MinGW64\bin;c:\MinGW64\msys\1.0\bin;C:\MinGW64\msys\1.0\local\bin;c:\cygwin64\bin;c:\Users\rmills\com;."
>
> set "PS1=\! -64- ${PWD}> "
> : 32 bit MinGW/bash
> c:\MinGW64\msys\1.0\bin\bash.exe %*%
>
> : 64 bit Cygwin shell
> : c:\cygwin64\bin\bash.exe
2 Building and installing CMake
$ ./bookstrap --prefix=/usr/local
$ make
$ make install
Gotchas:
1) Do not use a Windows binary install version of CMake
This generates commands which assume you are in the DOS shell.
Build and Use CMake in a "Unix" Way from a MinGW/bash shell.
2) Even although gcc is on the path, we must tell cmake not to use /c/MinGW/bin/gcc)
3) It's using the wrong headers. Needs /c/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$dist -DEXIV2_ENABLE_NLS=OFF \
-DCMAKE_C_COMPILER=$(which gcc) -DCMAKE_CXX_COMPILER=$(which g++) \
"-DCMAKE_CXX_FLAGS=-I/c/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include"
..
4) even so, it errors instantly on:
In file included from c:/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include/stddef.h:7:0,
from c:/Qt/Qt5.6.0/Tools/mingw492_32/lib/gcc/i686-w64-mingw32/4.9.2/include/stddef.h:1,
from C:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/xmpsdk/include/XMP_Const.h:14,
from C:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/xmpsdk/src/XMPCore_Impl.hpp:13,
from C:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/xmpsdk/src/ExpatAdapter.cpp:10:
c:/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include/crtdefs.h:26:9: error: 'size_t' does not name a type
typedef size_t rsize_t;
5) Building cmake itself required setting CC CXX CXXFLAGS and LDFLAGS
AND editing a system file in Qt with an erroneous #pragma error NTDDI_VERSION and _WIN32_WINNT
In file included from c:/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include/windows.h:10:0,
from c:/Users/rmills/gnu/cmake/cmake-3.6.2/Utilities/cmlibarchive/libarchive/archive_windows.h:74,
from c:/Users/rmills/gnu/cmake/cmake-3.6.2/Utilities/cmlibarchive/libarchive/archive_platform.h:60,
from c:/Users/rmills/gnu/cmake/cmake-3.6.2/Utilities/cmlibarchive/libarchive/xxhash.c:35:
c:/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include/sdkddkver.h:186:2: error: #error NTDDI_VERSION and _WIN32_WINNT mismatch!
My work-around was to comment off the #error statement!
3 Building with CMake
$ cd ~/gnu/exiv2/trunk
$ rm -rf build ; mkdir build ; cd build
$ cmake .. -G "Unix Makefiles" -DCMAKE_C_COMPILER=$(which gcc) -DCMAKE_CXX_COMPILER=$(which g++) -DEXIV2_ENABLE_NLS=OFF
.... cmake will rattle and roll ....
CMake generates the wrong include response files.
I put the correct include code in contrib/cmake/mingw/includes.rsp
Propagate the correct includes to the generated files.
$ find . -name "includes_*.rsp" -exec cp ../contrib/cmake/mingw/includes.rsp {} \;
$ make
On my system, these the include response file have the code:
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/src
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/include
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/include/exiv2
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/build
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/xmpsdk/include
-IC:/MinGW/msys/1.0/home/rmills/gnu/exiv2/trunk/xmpsdk/src
-IC:/Qt/Qt5.6.0/Tools/mingw492_32/i686-w64-mingw32/include
-IC:/Qt/Qt5.6.0/Tools/mingw492_32/lib/gcc/i686-w64-mingw32/4.9.2/include
-IC:/MinGW/msys/1.0/local/include
Robin Mills Robin Mills
robin@clanmills.com robin@clanmills.com
2016-09-30 2016-10-02

Loading…
Cancel
Save