@@@@@@@@@@@@@b ;mm /##Gilles###\ j@@@#Robin", Brad /@@@Thomas@@@@Q @@@# \ ## @@@b |@@@b @@@# .;;;;, ,;;;, ,;;;; ,;;;p .;;; 7@@ ]Alan @@@# j@@@@, ]@@#/ '@@@# j@@@# ]@@^ ;@@@" @@@Andreas@C "@@@p @@@" @@@b j@@@p @@b @@@#/ @@@#^7"7%#\ ^@@@@@#~ Benb 1@@@ {@# s@@@# @@@# Niels @@@b @@@Q ]@# ;@@@#/ @@@# ,@@##@@m @@@b @@@p @@C #@@#C @@@# ,/ s@@# @@@@ @@@b Volker @Tuan@ ]@@@Abhinav@@\ /@@@\ \@@@Q @@@Q %@@@# /@@@@Mahesh@@# /@@@@@@@@@@@@@@\ /@@@@@\ C++ Metadata Library /@Sridhar@@@v0.26\ 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 This is because MinGW links the wrong DLLs. Team Exiv2 will no longer provide support for MinGW 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) @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" set "PATH=c:\Qt\Qt5.6.0\5.6\mingw49_32\bin;c:\Qt\Qt5.6.0\Tools\mingw492_32\bin;\usr\local\bin;\usr\bin:c:\MinGW\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:/usr/local/bin:/usr/bin:/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. The file ~/.bashrc for MinGW64 is in c:\MinGW64\msys\1.0\home\\.bashrc 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 Exiv2 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 Gotcha ------ Even have done all of this, some of the sample applications are not correctly linked. Samples affected are path-test, geotag, metacopy, exiv2json (possibly others). The exiv2dll (libexiv2-14.dll) is linked to /bin/msys-expat.dll and foo.exe is linked to /usr/local/bin/libexpat-1.dll I have been able to get this fixed. I'll deal with it in v0.27. two copies of the expat dlls. /usr/local/bin/libexpat-1.dll and /bin/msys-expat.dll Robin Mills robin@clanmills.com 2017-06-06