Skip to content
Snippets Groups Projects
build.sh 3.83 KiB
Newer Older
  • Learn to ignore specific revisions
  • Kali Kaneko's avatar
    Kali Kaneko committed
    #!/bin/bash
    set -e
    
    
    # DEBUG --------------
    # set -x
    # --------------------
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
    XBUILD=${XBUILD-no}
    
    LRELEASE=${LRELEASE-lrelease}
    
    kali's avatar
    kali committed
    VENDOR_PATH=${VENDOR_PATH-providers/riseup}
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    APPNAME=${APPNAME-BitmaskVPN}
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    OSX_TARGET=10.11
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    WIN64="win64"
    GO=`which go`
    
    PROJECT=bitmask.pro
    TARGET_GOLIB=lib/libgoshim.a
    SOURCE_GOLIB=gui/backend.go
    
    
    MAKE=${MAKE:=make}
    
    QTBUILD=build/qt
    RELEASE=$QTBUILD/release
    
    DEBUGP=$QTBUILD/debug
    
    
    PLATFORM=$(uname -s)
    
    kali's avatar
    kali committed
    LDFLAGS=""
    
    BUILD_GOLIB="yes"
    
    
    if [ "$TARGET" == "" ]
    then
        TARGET=riseup-vpn
    fi
    
    # XXX for some reason, MAKEFLAGS is set to "w"
    # by debhelper
    if [ "$MAKEFLAGS" == "w" ]
    then
        MAKEFLAGS=
    fi
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    if [ "$XBUILD" == "$WIN64" ]
    then
        # TODO allow to override vars
    
        QMAKE="`pwd`/../../mxe/usr/x86_64-w64-mingw32.static/qt5/bin/qmake"
        PATH="`pwd`/../../mxe/usr/bin"/:$PATH
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        CC=x86_64-w64-mingw32.static-gcc
    else
    
        if [ "$QMAKE" == "" ]
        then
            QMAKE=`which qmake`
        fi
    
    PLATFORM=`uname -s`
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
    function init {
        mkdir -p lib
    }
    
    function buildGoLib {
        echo "[+] Using go in" $GO "[`go version`]"
    
        $GO generate -mod=vendor ./pkg/config/version/genver/gen.go || echo "[!] Error on go generate"
    
    
        if [ "$PLATFORM" == "Darwin" ]
        then
            GOOS=darwin
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            CC=clang
            CGO_CFLAGS="-g -O2 -mmacosx-version-min=$OSX_TARGET"
            CGO_LDFLAGS="-g -O2 -mmacosx-version-min=$OSX_TARGET"
    
    kali's avatar
    kali committed
        fi
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        if [ "$XBUILD" == "no" ]
        then
            echo "[+] Building Go library with standard Go compiler"
    
            CGO_ENABLED=1 GOOS=$GOOS CC=$CC CGO_CFLAGS=$CGO_CFLAGS CGO_LDFLAGS=$CGO_LDFLAGS go build -mod=vendor -buildmode=c-archive -ldflags="-extar=$AR -extld=$LD -extldflags=$LDFLAGS" -o $TARGET_GOLIB $SOURCE_GOLIB
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        fi
        if [ "$XBUILD" == "$WIN64" ]
        then
            echo "[+] Building Go library with mxe"
    
            echo "[+] Using cc:" $CC
    
            CC=$CC CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -buildmode=c-archive -ldflags="-extar=$AR -extld=$LD -extldflags=$LDFLAGS" -o $TARGET_GOLIB $SOURCE_GOLIB
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        fi
    }
    
    function buildQmake {
        echo "[+] Now building Qml app with Qt qmake"
    
        echo "[+] Using qmake in:" $QMAKE
    
        mkdir -p $QTBUILD
    
        $QMAKE -early QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX -o "$QTBUILD/Makefile" CONFIG+=release VENDOR_PATH=${VENDOR_PATH} $PROJECT
    
        #CONFIG=+force_debug_info CONFIG+=debug CONFIG+=debug_and_release
    
    }
    
    function renameOutput {
        # i would expect that passing QMAKE_TARGET would produce the right output, but nope.
        if [ "$PLATFORM" == "Linux" ]
        then
    
            if [ "$DEBUG" == "1" ]
            then
              echo "[+] Selecting DEBUG build"
              mv $DEBUGP/bitmask $RELEASE/$TARGET
            else
              echo "[+] Selecting RELEASE build"
              mv $RELEASE/bitmask $RELEASE/$TARGET
              strip $RELEASE/$TARGET
            fi
            echo "[+] Binary is in" $RELEASE/$TARGET
    
        elif  [ "$PLATFORM" == "Darwin" ]
    
            rm -rf $RELEASE/$TARGET.app
            mv $RELEASE/bitmask.app/ $RELEASE/$TARGET.app/
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    	mv $RELEASE/$TARGET.app/Contents/MacOS/bitmask $RELEASE/$TARGET.app/Contents/MacOS/$APPNAME
    	# bsd sed
    	sed -i '' "s/>bitmask/>${APPNAME}/" $RELEASE/$TARGET.app/Contents/Info.plist
    
            echo "[+] App is in" $RELEASE/$TARGET
    
        else # for MINGWIN or CYGWIN
    
            mv $RELEASE/bitmask.exe $RELEASE/$TARGET.exe
    
    kali's avatar
    kali committed
        fi
    
    function buildDefault {
        echo "[+] Building BitmaskVPN"
    
        $LRELEASE bitmask.pro
    
        if [ "$BUILD_GOLIB" == "yes" ]
        then
            buildGoLib
        fi
        buildQmake
    
        $MAKE -C $QTBUILD clean
        $MAKE -C $QTBUILD $MAKEFLAGS all
    
    
        renameOutput
        echo "[+] Done."
    }
    
    kali's avatar
    kali committed
    echo "[build.sh] VENDOR_PATH =" ${VENDOR_PATH}
    
    for i in "$@"
    do
    case $i in
        --skip-golib)
        BUILD_GOLIB="no"
        shift # past argument=value
        ;;
        --just-golib)
        BUILD_GOLIB="just"
        shift # past argument=value
        ;;
        *)
              # unknown option
        ;;
    esac
    done
    
    if [ "$BUILD_GOLIB" == "just" ]
    then
        buildGoLib
    else
        buildDefault
    fi