From 5693ac34a8d3ae0046673fdf39ee046b8b0aa9c6 Mon Sep 17 00:00:00 2001 From: Robin Mills Date: Fri, 30 Sep 2016 19:33:23 +0000 Subject: [PATCH] #1236. Updated CMake/MinGW build instructions. That's all I intend to do on CMake/MinGW for v0.26 --- README-CMAKE | 175 ++++++++++++++++++++++++++++++++++++++------------- TODO-CMAKE | 9 +-- 2 files changed, 138 insertions(+), 46 deletions(-) diff --git a/README-CMAKE b/README-CMAKE index c2697f34..fe3996a4 100644 --- a/README-CMAKE +++ b/README-CMAKE @@ -152,43 +152,134 @@ We have two contributed CMake Build Environments: 1 Running a MinGW bash shell - To be written (it's already in the web notes) + 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 - 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. + Gotchas: + 1) Do not use a Windows binary install version of CMake + This generates commands which assume you are in the DOS shell. - I will make those notes pretty before we ship v0.26. - - # Reasons why I can't get cmake to work: - # - # 1) Even although gcc is on the path, we must tell cmake not to use /c/MinGW/bin/gcc) - # 2) 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" - # $exiv2 - # 3) 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; - # 4) 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! - - 2 Building with CMake + 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 @@ -202,15 +293,15 @@ We have two contributed CMake Build Environments: $ 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 + -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 ## diff --git a/TODO-CMAKE b/TODO-CMAKE index dbf509b8..02262aab 100644 --- a/TODO-CMAKE +++ b/TODO-CMAKE @@ -9,10 +9,11 @@ Current Status -ToDo: * CMake/MinGW is not completely working for v0.26 - Known issues: Test suite is crashing here and there. - - +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 + Robin Mills robin@clanmills.com 2016-09-30