From 789acd4281172d7dde4e65cd9caf001c816a03f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anthony=20L=C3=A9onard?= <anthony.leonard@savoirfairelinux.com> Date: Mon, 12 Sep 2016 15:06:35 -0400 Subject: [PATCH] make-ring: now able to build Ring for Windows The script is modified so we can compile Ring for Windows by using '--distribution=mingw[32|64]'. At the moment, it can only be used on Fedora (>=23). Modifications: * script/win_compile.sh do the actual job * make-ring.py call this script when needed Change-Id: I964b2bb9fb174bebd8e6b8746f3721066c278251 Reviewed-by: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com> --- make-ring.py | 42 ++++++++++++++++++++-- scripts/win_compile.sh | 79 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 2 deletions(-) create mode 100755 scripts/win_compile.sh diff --git a/make-ring.py b/make-ring.py index af57cc20..45781b89 100755 --- a/make-ring.py +++ b/make-ring.py @@ -74,6 +74,20 @@ OPENSUSE_DEPENDENCIES = [ 'gettext-tools', 'libnotify-devel', 'libappindicator3-devel', ] +MINGW64_FEDORA_DEPENDENCIES = [ + 'mingw64-binutils', 'mingw64-gcc', 'mingw64-headers', 'mingw64-crt', 'mingw64-gcc-c++', + 'mingw64-pkg-config', 'yasm', 'gettext-devel', 'cmake', 'patch', 'libtool', 'automake', + 'make', 'xz', 'bzip2', 'which', 'mingw64-qt5-qtbase', 'mingw64-qt5-qttools', + 'mingw64-qt5-qtsvg', 'mingw64-qt5-qtwinextras' +] + +MINGW32_FEDORA_DEPENDENCIES = [ + 'mingw32-binutils', 'mingw32-gcc', 'mingw32-headers', 'mingw32-crt', 'mingw32-gcc-c++', + 'mingw32-pkg-config', 'yasm', 'gettext-devel', 'cmake', 'patch', 'libtool', 'automake', + 'make', 'xz', 'bzip2', 'which', 'mingw32-qt5-qtbase', 'mingw32-qt5-qttools', + 'mingw32-qt5-qtsvg', 'mingw32-qt5-qtwinextras' +] + FEDORA_DEPENDENCIES = [ 'autoconf', 'automake', 'cmake', 'speexdsp-devel', 'pulseaudio-libs-devel', 'libsamplerate-devel', 'libtool', 'dbus-devel', 'expat-devel', 'pcre-devel', @@ -161,7 +175,16 @@ def run_dependencies(args): RPM_INSTALL_SCRIPT, {"packages": ' '.join(FEDORA_DEPENDENCIES)} ) - + elif args.distribution == "mingw32": + execute_script( + RPM_INSTALL_SCRIPT, + {"packages": ' '.join(MINGW32_FEDORA_DEPENDENCIES)} + ) + elif args.distribution == "mingw64": + execute_script( + RPM_INSTALL_SCRIPT, + {"packages": ' '.join(MINGW64_FEDORA_DEPENDENCIES)} + ) elif args.distribution == "Arch Linux": execute_script( PACMAN_INSTALL_SCRIPT, @@ -220,6 +243,16 @@ def run_install(args): elif args.distribution == "Android": os.chdir("./client-android") execute_script(["./compile.sh"]) + elif args.distribution == 'mingw32': + os.environ['CMAKE_PREFIX_PATH'] = '/usr/i686-w64-mingw32/sys-root/mingw/lib/cmake' + os.environ['QTDIR'] = '/usr/i686-w64-mingw32/sys-root/mingw/lib/qt5/' + os.environ['PATH'] = '/usr/i686-w64-mingw32/bin/qt5/:' + os.environ['PATH'] + execute_script(["./scripts/win_compile.sh"]) + elif args.distribution == 'mingw64': + os.environ['CMAKE_PREFIX_PATH'] = '/usr/x86_64-w64-mingw32/sys-root/mingw/lib/cmake' + os.environ['QTDIR'] = '/usr/x86_64-w64-mingw32/sys-root/mingw/lib/qt5/' + os.environ['PATH'] = '/usr/x86_64-w64-mingw32/bin/qt5/:' + os.environ['PATH'] + execute_script(["./scripts/win_compile.sh --arch=64"]) else: if args.distribution == "openSUSE": os.environ['JSONCPP_LIBS'] = "-ljsoncpp" #fix jsoncpp pkg-config bug, remove when jsoncpp package bumped @@ -319,7 +352,7 @@ def validate_args(parsed_args): """Validate the args values, exit if error is found""" # Check arg values - supported_distros = ['Android', 'Ubuntu', 'Debian', 'OSX', 'Fedora', 'Arch Linux', 'openSUSE', 'Automatic'] + supported_distros = ['Android', 'Ubuntu', 'Debian', 'OSX', 'Fedora', 'Arch Linux', 'openSUSE', 'Automatic', 'mingw32', 'mingw64'] if parsed_args.distribution not in supported_distros: print('Distribution not supported.\nChoose one of: %s' \ @@ -361,6 +394,11 @@ def parse_args(): if parsed_args.distribution == 'Automatic': parsed_args.distribution = choose_distribution() + if parsed_args.distribution in ['mingw32', 'mingw64']: + if choose_distribution() != "Fedora": + print('Windows version must be built on a Fedora distribution (>=23)') + sys.exit(1) + validate_args(parsed_args) return parsed_args diff --git a/scripts/win_compile.sh b/scripts/win_compile.sh new file mode 100755 index 00000000..b037014a --- /dev/null +++ b/scripts/win_compile.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +rootdir=$(pwd) +HOST=i686-w64-mingw32 +ARCH=32 +CMAKE_TOOLCHAIN_FILE=$rootdir/lrc/cmake/winBuild.cmake + +while test -n "$1" +do + case "$1" in + --clean) + ;; + --arch=*) + ARCH="${1#--arch=}" + ;; + esac + shift +done + +if [ "$ARCH" = "64" ] +then +HOST=x86_64-w64-mingw32 +CMAKE_TOOLCHAIN_FILE=$rootdir/lrc/cmake/winBuild64.cmake +fi + +INSTALL_PREFIX=$rootdir/daemon/_win${ARCH} + + +cd daemon/contrib +mkdir -p native${ARCH} +cd native${ARCH} +../bootstrap --host=${HOST} +make fetch || exit 1 +make -j4 || exit 1 +cd ../.. +./autogen.sh || exit 1 +mkdir -p "build${ARCH}" +cd build${ARCH} +$rootdir/daemon/configure --host=${HOST} --without-dbus --prefix=$INSTALL_PREFIX +rsync -a $rootdir/daemon/src/buildinfo.cpp ./src/buildinfo.cpp +make -j4 install || exit 1 +cd $rootdir + +cd lrc +mkdir -p build${ARCH} +cd build${ARCH} +export CMAKE_PREFIX_PATH=/usr/${HOST}/sys-root/mingw/lib/cmake +cmake -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX -DRING_BUILD_DIR=$INSTALL_PREFIX -DENABLE_LIBWRAP=true .. +make -j4 install || exit 1 +cd $rootdir + +cd client-windows +git submodule update --init +if [ ! -f "../daemon/_win32/bin/WinSparkle.dll" ] +then +cd winsparkle +git submodule init && git submodule update +mkdir -p build${ARCH} && cd build${ARCH} +cmake -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX ../cmake +make -j4 || exit 1 +make install +cd ../../ +fi +if [ ! -f "../daemon/_win32/bin/libqrencode.dll" ] +then +cd libqrencode +./autogen.sh || exit 1 +mkdir -p build${ARCH} && cd build${ARCH} +../configure --host=${HOST} --prefix=$INSTALL_PREFIX +make -j4 || exit 1 +make install +cd ../.. +fi +mkdir -p build +cd build +${HOST}-qmake-qt5 ../RingWinClient.pro -r -spec win32-g++ RING=$INSTALL_PREFIX +make -j4 || exit 1 +make install +make clean -- GitLab