diff --git a/README-CMAKE b/README-CMAKE index fe3996a4..9aa58b34 100644 --- a/README-CMAKE +++ b/README-CMAKE @@ -14,12 +14,12 @@ NOTE: * The existing automake (./configure), and msvc2005 build files will continue 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. - + Exiv2 will not build on MinGW (neither 32bit nor 64bit) This is discussed in TODO-CMAKE - + Robin Mills robin@clanmills.com 2016-09-23 @@ -123,7 +123,7 @@ 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 +1) The version of DevStudio 2) 32bit or 64 bit builds 3) Building static or shared libraries @@ -131,7 +131,7 @@ We have two contributed CMake Build Environments: 1 contrib/cmake/msvc Please read contrib/cmake/msvc/ReadMe.txt - + 2 contrib/build/msvc The scripts require: @@ -144,164 +144,16 @@ We have two contributed CMake Build Environments: - adapt the paths in setenv.cmd - open the VS command line shell - 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. - + 4 Building and installing for MinGW Users ========================================= - 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 + CMake/MinGW has a number of serious issues. This will be reported to Kitware. + + It is possible to use CMake/MinGW if you put in some effort. This is documented in TODO-CMAKE. + # That's all Folks ## diff --git a/TODO-CMAKE b/TODO-CMAKE index 02262aab..28d0e458 100644 --- a/TODO-CMAKE +++ b/TODO-CMAKE @@ -11,10 +11,173 @@ Current Status ToDo: * CMake/MinGW builds executables that do not work properly for v0.26 Known issues: - sample apps crash in XML_ParserCreate() - in c:\MinGW\msys\1.0\bin\msys-expat-1.dll - + sample apps crash in XML_ParserCreate() + 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@clanmills.com -2016-09-30 +2016-10-02