aboutsummaryrefslogtreecommitdiffstats
path: root/packaging/windows/mxe-based-build.sh
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2015-09-21 21:38:26 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-09-21 21:39:41 -0700
commit5982092858b2f5bd084a83e269f5185c1920a9bf (patch)
tree744e0f826a46be1573eaea92d52032439b1a3df8 /packaging/windows/mxe-based-build.sh
parent692ef8f1419bea819ad1ea2728ba88b9a0605fe9 (diff)
downloadsubsurface-5982092858b2f5bd084a83e269f5185c1920a9bf.tar.gz
Update MXE cross build script
Instructions how to use it are in the script. As of today this doesn't create working binaries - this worked perfectly fine back when MXE was still based on Qt5.4 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'packaging/windows/mxe-based-build.sh')
-rwxr-xr-xpackaging/windows/mxe-based-build.sh353
1 files changed, 249 insertions, 104 deletions
diff --git a/packaging/windows/mxe-based-build.sh b/packaging/windows/mxe-based-build.sh
index 9e6542f69..e7e5b9aa0 100755
--- a/packaging/windows/mxe-based-build.sh
+++ b/packaging/windows/mxe-based-build.sh
@@ -2,30 +2,52 @@
# build Subsurface for Win32
#
-# this file assumes that you have installed mxe on your system
+# this file assumes that you have installed MXE on your system
# and installed a number of dependencies as well
-# it also makes some assumption about the filesystem layout based
+#
+# cd ~/src/win
+# git clone https://github.com/mxe/mxe
+# cd mxe
+# make libxml2 libxslt libusb1 qt5
+#
+# after qtbase has finished building you need to edit
+# ~/src/win/mxe/usr/i686-w64-mingw32.shared/qt5/mkspecs/qconfig.pri
+# and add the following line at the top:
+# MINGW_IN_SHELL = 1
+# (of course without the leading '#')
+# then you can enable the QtWebKit build by editing
+# ~/src/win/mxe/src/qtwebkit.mk and changing the "disabled" define to read
+#
+# define $(PKG)_BUILD_SHARED
+# # looks for build tools with .exe suffix and tries to use win_flex
+# $(SED) -i 's,\.exe,,' '$(1)/Tools/qmake/mkspecs/features/functions.prf'
+# ...
+#
+# and remove the empty definition of $(PKG)_BUILD_SHARED below
+#
+# Do all this in a separate terminal while the build is still running :-)
+# After quite a while (depending on your machine anywhere from 15-20
+# minutes to several hours) you should have a working MXE install in
+# ~/src/win/mxe
+#
+# Now this script will come in:
+#
+# This makes some assumption about the filesystem layout based
# on the way things are setup on my system so I can build Ubuntu PPA,
# OBS and Windows out of the same sources.
# Something like this:
#
-# ~/src/win/mxe <- current MXE git with Qt5, automake
-# /win/libxml2 <- libxml from git
-# /win/libxslt <- libxslt from git
-# /win/libzip-0.11.2 <- libzip sources from their latest distribution tar ball
-# /subsurface <- current subsurface git
-# /subsurface/libdivecomputer <- appropriate libdc branch
-# /subsurface/marble-source <- appropriate marble branch
-# /subsurface/libgit2 <- appropriate libgit2 branch
+# ~/src/win/mxe <- current MXE git with Qt5, automake (see above)
+# /win/libzip <- libzip sources from their latest distribution tar ball
+# /win/grantlee <- Grantlee 5.0.0 sources from git
+# /win/libssh2 <- from git - v1.6 seems to work
+# /win/libcurl <- from git - 7.42.1 seems to work
+# /win/subsurface <- current subsurface git
+# /win/libdivecomputer <- appropriate libdc/Subsurface-branch branch
+# /win/marble-source <- appropriate marble/Subsurface-branch branch
+# /win/libgit2 <- libgit2 0.23.1 or similar
#
# ~/src/win/win32 <- build directory
-# /libxml2
-# /libxslt
-# /libzip
-# /libgit2
-# /marble
-# /subsurface
-# /install-root <- target for our temporary installs
#
# then start this script from ~/src/win/win32
#
@@ -33,118 +55,241 @@
# bash ../../subsurface/packaging/windows/mxe-based-build.sh installer
#
# this should create the latest daily installer
+#
+# in order not to keep recompiling everything this script only compiles
+# the other components if their directories are missing or if a "magic
+# file" has been touched.
+#
+# so if you update one of the other libs do
+#
+# cd ~/src/win/win32
+# touch build.<component>
+# bash ../../subsurface/packaging/windows/mxe-based-build.sh installer
+#
+# and that component gets rebuilt as well. E.g.
+# touch build.libdivecomputer
+# to rebuild libdivecomputer before you build Subsurface
+#
+# please send patches / additions to this file!
+#
-if [[ ! -d libgit2 || ! -d marble || ! -d subsurface ]] ; then
- echo "Please start this from the right directory"
- exit 1
-fi
+exec 1> >(tee ./winbuild.log) 2>&1
+# for debugging
+#trap "set +x; sleep 1; set -x" DEBUG
+
+# this is run on a rather powerful machine - if you want less
+# build parallelism, please change this variable
+JOBS="-j12"
BASEDIR=$(cd "`dirname $0`/.."; pwd)
-INSTALL_ROOT=$(pwd)/install-root
+BUILDDIR=$(cd "`dirname $0`"; pwd)
-echo "Building in $BASEDIR ..."
+if [[ ! -d $BASEDIR/mxe ]] ; then
+ echo "Please start this from the right directory "
+ echo "usually a winbuild directory parallel to the mxe directory"
+ exit 1
+fi
+
+echo "Building in $BUILDDIR ..."
export PATH=$BASEDIR/mxe/usr/bin:$PATH:$BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/bin/
-####################
-if false; then
-####################
-# libxml2
+# grantlee
+
+cd $BUILDDIR
+if [[ ! -d grantlee || -f build.grantlee ]] ; then
+ rm -f build.grantlee
+ mkdir -p grantlee
+ cd grantlee
+ cmake -DCMAKE_TOOLCHAIN_FILE=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DBUILD_TESTS=OFF \
+ $BASEDIR/grantlee
-cd libxml2 || exit 1
-../../libxml2/configure --host=i686-w64-mingw32.shared \
- --without-python \
- --prefix=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/
-make -j12
-make install
-cd ..
+ make $JOBS
+ make install
+fi
-# libxslt
-cd libxslt || exit 1
-../../libxslt/autogen.sh --host=i686-w64-mingw32.shared \
- --without-python \
- --prefix=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/
-make -j12
-make install
-cd ..
+# libssh2:
+
+cd $BUILDDIR
+if [[ ! -d libssh2 || -f build.libssh2 ]] ; then
+ rm -f build.libssh2
+ mkdir -p libssh2
+ cd libssh2
+
+ cmake -DCMAKE_TOOLCHAIN_FILE=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake \
+ -DBUILD_EXAMPLES=OFF \
+ -DBUILD_TESTING=OFF \
+ -DBUILD_SHARED_LIBS=ON \
+ $BASEDIR/libssh2
+ make $JOBS
+ make install
+ # don't install your dlls in bin, please
+ cp $BASEDIR/mxe/usr/i686-w64-mingw32.shared/bin/libssh2.dll $BASEDIR/mxe/usr/i686-w64-mingw32.shared/lib
+fi
+
+
+# libcurl
+
+cd $BUILDDIR
+if [[ ! -d libcurl || -f build.libcurl ]] ; then
+ rm -f build.libcurl
+ mkdir -p libcurl
+ cd libcurl
+ ../../libcurl/configure --host=i686-w64-mingw32.shared \
+ --prefix=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/ \
+ --disable-ftp \
+ --disable-ldap \
+ --disable-ldaps \
+ --disable-rtsp \
+ --enable-proxy \
+ --enable-dict \
+ --disable-telnet \
+ --disable-tftp \
+ --disable-pop3 \
+ --disable-imap \
+ --disable-smb \
+ --disable-smtp \
+ --disable-gopher \
+ --disable-manual \
+ --with-libssh2=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/
+
+ # now remove building the executable
+ sed -i 's/SUBDIRS = lib src include/SUBDIRS = lib include/' Makefile
+
+ make $JOBS
+ make install
+fi
+
# libzip
-cd libzip || exit 1
-../../libzip-0.11.2/configure --host=i686-w64-mingw32.shared \
- --enable-static \
- --prefix=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/
-make -j12
-make install
-cd ..
+cd $BUILDDIR
+if [[ ! -d libzip || -f build.libzip ]] ; then
+ rm -f build.libzip
+ mkdir -p libzip
+ cd libzip
+# cmake -DCMAKE_TOOLCHAIN_FILE=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake \
+# -DCMAKE_BUILD_TYPE=Release \
+# $BASEDIR/libzip
+ $BASEDIR/libzip/configure --host=i686-w64-mingw32.shared --prefix=$BASEDIR/mxe/usr/i686-w64-mingw32.shared
+ make $JOBS
+ make install
+fi
+
# libgit2:
-cd libgit2 || exit 1
-cmake -DCMAKE_TOOLCHAIN_FILE=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake \
- -DCMAKE_INSTALL_PREFIX=$INSTALL_ROOT \
- -DBUILD_CLAR=OFF \
- $BASEDIR/../subsurface/libgit2
-make -j12
-make install
-cd ..
-
-# libdivecomputer (can't figure out how to do out-of tree builds?)
-
-cd libdivecomputer || exit 1
-git pull
-autoreconf --install
-./configure --host=i686-w64-mingw32.shared --enable-static --disable-shared --prefix=$INSTALL_ROOT
-make -j12
-make install
-cd ..
+cd $BUILDDIR
+if [[ ! -d libgit2 || -f build.libgit2 ]] ; then
+ rm -f build.libgit2
+ mkdir -p libgit2
+ cd libgit2
+ cmake -DCMAKE_TOOLCHAIN_FILE=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake \
+ -DBUILD_CLAR=OFF -DTHREADSAFE=ON \
+ -DDLLTOOL=$BASEDIR/mxe/usr/bin/i686-w64-mingw32.shared-dlltool \
+ $BASEDIR/libgit2
+ make $JOBS
+ make install
+fi
+
+# libdivecomputer
+#
+# this one is special because we want to make sure it's in sync
+# with the Linux builds, but we don't want the autoconf files cluttering
+# the original source directory... so the $BASEDIR/libdivecomputer is
+# a local clone of the "real" libdivecomputer directory
-# marble:
+cd $BUILDDIR
+if [[ ! -d libdivecomputer || -f build.libdivecomputer ]] ; then
+ rm build.libdivecomputer
+ cd $BASEDIR/libdivecomputer
+ git pull
+ cd $BUILDDIR
+ mkdir -p libdivecomputer
+ cd libdivecomputer
-cd marble
-cmake -DCMAKE_TOOLCHAIN_FILE=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake \
- -DCMAKE_PREFIX_PATH=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5 \
- -DCMAKE_INSTALL_PREFIX=$INSTALL_ROOT \
- -DQTONLY=ON -DQT5BUILD=ON \
- -DBUILD_MARBLE_APPS=OFF -DBUILD_MARBLE_EXAMPLES=OFF \
- -DBUILD_MARBLE_TESTS=OFF -DBUILD_MARBLE_TOOLS=OFF \
- -DBUILD_TESTING=OFF -DWITH_DESIGNER_PLUGIN=OFF \
- -DBUILD_WITH_DBUS=OFF $BASEDIR/../subsurface/marble-source
-make -j12
-make install
+ $BASEDIR/libdivecomputer/configure --host=i686-w64-mingw32.shared \
+ --enable-static --disable-shared \
+ --prefix=$BASEDIR/mxe/usr/i686-w64-mingw32.shared
+ make $JOBS
+ make install
+else
+ echo ""
+ echo ""
+ echo "WARNING!!!!"
+ echo ""
+ echo "libdivecoputer not rebuilt!!"
+ echo ""
+ echo ""
+fi
+# marble:
-###############
+cd $BUILDDIR
+if [[ ! -d marble || -f build.marble ]] ; then
+ rm build.marble
+ mkdir -p marble
+ cd marble
+ cmake -DCMAKE_TOOLCHAIN_FILE=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake \
+ -DCMAKE_PREFIX_PATH=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5 \
+ -DQTONLY=ON -DQT5BUILD=ON \
+ -DBUILD_MARBLE_APPS=OFF -DBUILD_MARBLE_EXAMPLES=OFF \
+ -DBUILD_MARBLE_TESTS=OFF -DBUILD_MARBLE_TOOLS=OFF \
+ -DBUILD_TESTING=OFF -DWITH_DESIGNER_PLUGIN=OFF \
+ -DBUILD_WITH_DBUS=OFF \
+ $BASEDIR/marble-source
+ make $JOBS
+ make install
+ # what the heck is marble doing?
+ mv $BASEDIR/mxe/usr/i686-w64-mingw32.shared/libssrfmarblewidget.dll $BASEDIR/mxe/usr/i686-w64-mingw32.shared/lib
fi
+
###############
+# finally, Subsurface
+
+cd $BUILDDIR
+mkdir -p subsurface/staging/plugins
+cd subsurface/staging/plugins
+cp -a $BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/iconengines .
+cp -a $BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/imageformats .
+cp -a $BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/platforms .
+cp -a $BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/printsupport .
+
+cd $BUILDDIR/subsurface
-# subsurface:
+if [[ "$1" == "qmake" ]] ; then
+ shift
+ export objdump=$BASEDIR/mxe/usr/bin/i686-w64-mingw32.shared-objdump
-cd subsurface || exit 1
+ i686-w64-mingw32.shared-qmake-qt5 \
+ LIBMARBLEDEVEL=../marble \
+ LIBGIT2DEVEL=../libgit2 CONFIG+=libgit21-api \
+ CROSS_PATH=$BASEDIR/mxe/usr/i686-w64-mingw32.shared \
+ QMAKE_LRELEASE=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/bin/lrelease \
+ SPECIAL_MARBLE_PREFIX=1 \
+ MAKENSIS=i686-w64-mingw32.shared-makensis \
+ $BASEDIR/../subsurface/subsurface.pro
-if [ ! -d staging ] ; then
- mkdir -p staging/plugins
- cd staging/plugins
- cp -a $BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/iconengines .
- cp -a $BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/imageformats .
- cp -a $BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/platforms .
- cp -a $BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/printsupport .
- cd ../..
+# LIBDCDEVEL=../libdivecomputer \
+
+else
+ cmake -DCMAKE_TOOLCHAIN_FILE=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake \
+ -DCMAKE_PREFIX_PATH=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5 \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DQT_TRANSLATION_DIR=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/translations \
+ -DMAKENSIS=i686-w64-mingw32.shared-makensis \
+ -DUSE_LIBGIT23_API=1 \
+ -DLIBDIVECOMPUTER_INCLUDE_DIR=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/include \
+ -DLIBDIVECOMPUTER_LIBRARIES=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/lib/libdivecomputer.a \
+ -DMARBLE_INCLUDE_DIR=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/include \
+ -DMARBLE_LIBRARIES=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/lib/libssrfmarblewidget.dll \
+ $BASEDIR/subsurface
+ #sed -i 's@-lssh2@/home/hohndel/src/win/win32/libgit2/libssh2.dll@g' CMakeFiles/subsurface.dir/link.txt
fi
-cmake -DCMAKE_TOOLCHAIN_FILE=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake \
- -DCMAKE_PREFIX_PATH=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5 \
- -DCMAKE_BUILD_TYPE=Release \
- -DLIBGIT2_INCLUDE_DIR=$(INSTALL_ROOT)/include \
- -DLIBGIT2_LIBRARIES=$(INSTALL_ROOT)/lib/libgit2.a \
- -DLIBDIVECOMPUTER_INCLUDE_DIR=$(INSTALL_ROOT)/include \
- -DLIBDIVECOMPUTER_LIBRARIES=$(INSTALL_ROOT)/lib/libdivecomputer.a \
- -DMARBLE_INCLUDE_DIR=$(INSTALL_ROOT)/include \
- -DMARBLE_LIBRARIES=$(INSTALL_ROOT)/lib/libssrfmarblewidget.dll \
- -DQT_TRANSLATION_DIR=$BASEDIR/mxe/usr/i686-w64-mingw32.shared/qt5/translations \
- -DMAKENSIS=i686-w64-mingw32.shared-makensis \
- $BASEDIR/../subsurface
-
-make -j12 VERBOSE=1 $@
+
+make $JOBS $@