#!/usr/local/bin/bash

set -e

## bash 3 does not work for this code
#if [ -z "$IN_DASH" ]; then
#    if command -v dash >/dev/null; then
#        export IN_DASH=1
#        exec dash "$0" "$@"
#    else
#        echo >&2 "please install dash from homebrew or macports to run this script"
#        exit 1
#    fi
#fi

target_bits=64
target_cpu=x86_64

case "$1" in
    -64)
        shift
        ;;
    -32)
        target_bits=32
        target_cpu=i386
        shift
        ;;
esac

export BUILD_ROOT="$HOME/vbam-build-mac-${target_bits}bit"

BUILD_ENV=$(cat <<EOF
export MACOSX_DEPLOYMENT_TARGET=10.7
export COMMAND_MODE=unix2003
export CC=clang
export CXX=clang++
export CPPFLAGS="-DICONV_CONST="
export CFLAGS="-m${target_bits} -framework Carbon -framework Foundation -framework CoreServices -stdlib=libc++ -Wno-unused-command-line-argument -DICONV_CONST= -Wl,-no_compact_unwind"
export CXXFLAGS="-m${target_bits} -stdlib=libc++ -framework Carbon -framework Foundation -framework CoreServices -Wno-unused-command-line-argument -DICONV_CONST= -Wl,-no_compact_unwind"
export OBJCXXFLAGS="-m${target_bits} -stdlib=libc++ -framework Carbon -framework Foundation -framework CoreServices -Wno-unused-command-line-argument -DICONV_CONST= -Wl,-no_compact_unwind"
export LDFLAGS="-m${target_bits} -framework Carbon -framework Foundation -framework CoreServices -stdlib=libc++ -Wno-unused-command-line-argument -Wl,-no_compact_unwind"

export UUID_CFLAGS="-I\$BUILD_ROOT/root/stow/libuuid/include"
export UUID_LIBS="-L\$BUILD_ROOT/root/stow/libuuid/lib -luuid"
EOF
)

export BUILD_ENV
export TAR=tar

if [ "$target_cpu" = i386 ]; then
    export REQUIRED_CONFIGURE_ARGS='--host=i386-apple-darwin --build=x86_64-apple-darwin'
fi

. "$(dirname "$0")/../builder/core.sh"

table_line_remove DISTS flex
table_line_remove DISTS libsecret

# issues with perl modules linked to our libs and brew perl
table_line_remove DISTS shared-mime-info

table_line_replace DIST_PREFIX libuuid /usr/stow/libuuid

if [ "$target_cpu" = i386 ]; then
    table_line_replace DIST_CONFIGURE_OVERRIDES openssl './Configure darwin-i386-cc no-shared --prefix=/usr --openssldir=/etc/ssl'
else
    table_line_replace DIST_CONFIGURE_OVERRIDES openssl './Configure darwin64-x86_64-cc no-shared --prefix=/usr --openssldir=/etc/ssl'
fi

# -Wl,-no_compact_unwind must be passed in LDFLAGS to openssl
table_line_append DIST_MAKE_ARGS openssl "LDFLAGS=\"\$LDFLAGS\""

# m4 crashes on 10.13
table_line_append DIST_PATCHES m4 '-p0 https://raw.githubusercontent.com/macports/macports-ports/edf0ee1e2cf/devel/m4/files/secure_snprintf.patch'

# these are only applicable for cross-compiling to 32 bits
if [ "$target_cpu" = i386 ]; then
    # some dists will not cross compile without a CONFIG_SITE
    table_line_append DIST_ARGS glib '--host= --build='
    table_line_append DIST_ARGS pkgconfig '--host= --build='
    table_line_append DIST_ARGS docbook2x '--host= --build='

    # python does not support cross-compiling to 32bits
    table_line_append DIST_ARGS python2 '--host= --build='
    table_line_append DIST_ARGS python3 '--host= --build='

    table_line_append DIST_ARGS sfml '-DCMAKE_OSX_ARCHITECTURES=i386'

    table_line_append DIST_PRE_BUILD sfml " \
        sed -i.bak '/FATAL_ERROR \"Only 64-bit architecture is supported/d' CMakeLists.txt; \
    "

    table_line_append DIST_ARGS libicu '--host= --build='
fi

table_line_replace DIST_CONFIGURE_TYPES libmodplug autoreconf
table_line_append  DIST_PRE_BUILD       libmodplug " \
    sed -i.bak '/-mmacosx-version-min=/d' configure.ac; \
    sed -i.bak 's/-lstdc++/-lc++/g' libmodplug.pc.in; \
"

table_line_append DIST_PRE_BUILD libzmq "sed -i.bak 's/-lstdc++/-lc++/g' src/libzmq.pc.in"
table_line_append DIST_PRE_BUILD ffmpeg "sed -i.bak 's/-lstdc++/-lc++/g' configure"

table_line_append DIST_ARGS wxwidgets  "--with-macosx-version-min=\$MACOSX_DEPLOYMENT_TARGET LDFLAGS=\"\$LDFLAGS -stdlib=libc++\""
table_line_append DIST_ARGS ffmpeg     "--disable-videotoolbox --extra-ldflags='-framework CoreText'"
table_line_append DIST_ARGS libmodplug "CC=clang++ CXX=clang++"

builder "$@"
