#! /bin/sh
#
# Set the $TRIPLE environment variable to your system's triple before
# running this script.  If you set $CXX, that will be used to compile
# the library.  Otherwise we'll use clang++.

set -e

if [ `basename $(pwd)` != "lib" ]
then
    echo "current directory must be lib"
    exit 1
fi

if [ -z "$CXX" ]
then
    CXX=clang++
fi

if [ -z "$CC" ]
then
    CC=clang
fi

if [ -z $MACOSX_DEPLOYMENT_TARGET ]
then
    if [ -z $IPHONEOS_DEPLOYMENT_TARGET ]
    then
        MACOSX_DEPLOYMENT_TARGET=10.7
    fi
fi

if [ -z $RC_ProjectSourceVersion ]
then
  RC_ProjectSourceVersion=1
fi

EXTRA_FLAGS="-std=c++0x -fstrict-aliasing -Wall -Wextra -Wshadow -Wconversion \
             -Wnewline-eof -Wpadded -Wmissing-prototypes -Wstrict-aliasing=2 \
             -Wstrict-overflow=4 "

case $TRIPLE in
  *-apple-*)
    if [ -z $RC_XBS ]
    then
      RC_CFLAGS="-arch i386 -arch x86_64"
    fi
    SOEXT=dylib
    if [ "$MACOSX_DEPLOYMENT_TARGET" == "10.6" ]
    then
        EXTRA_FLAGS="-std=c++0x -U__STRICT_ANSI__"
        LDSHARED_FLAGS="-o libc++.1.dylib \
            -dynamiclib -nodefaultlibs -current_version 1 \
            -compatibility_version 1 \
            -install_name /usr/lib/libc++.1.dylib \
            -Wl,-reexport_library,/usr/lib/libc++abi.dylib \
            -Wl,-unexported_symbols_list,libc++unexp.exp  \
            /usr/lib/libSystem.B.dylib"
    else
        if [ -n "$SDKROOT" ]
        then
            EXTRA_FLAGS+="-isysroot ${SDKROOT}"
            if echo "${RC_ARCHS}" | grep -q "armv7"  
            then
                RE_EXPORT_LINE="${SDKROOT}/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++sjlj-abi.exp"
            else
                RE_EXPORT_LINE="-Wl,-reexport_library,${SDKROOT}/usr/lib/libc++abi.dylib"
            fi
            CXX=`xcrun -sdk "${SDKROOT}"  -find clang++`
            CC=`xcrun -sdk "${SDKROOT}"  -find clang`
        else
            # Check if we have _LIBCPPABI_VERSION, to determine the reexport list to use.
            if (echo "#include <cxxabi.h>" | $CXX -E -dM -x c++ - | \
                grep _LIBCPPABI_VERSION > /dev/null)
            then
                RE_EXPORT_LINE="/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++abi2.exp"
            else
                RE_EXPORT_LINE="/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,libc++abi.exp"
            fi
        fi
        LDSHARED_FLAGS="-o libc++.1.dylib \
            -dynamiclib -nodefaultlibs  \
            -current_version ${RC_ProjectSourceVersion} \
            -compatibility_version 1 \
            -install_name /usr/lib/libc++.1.dylib \
            -lSystem  \
            -Wl,-unexported_symbols_list,libc++unexp.exp  \
            ${RE_EXPORT_LINE}  \
            -Wl,-force_symbols_not_weak_list,notweak.exp \
            -Wl,-force_symbols_weak_list,weak.exp"
    fi
    ;;
  *-*-mingw*)
    # FIXME: removing libgcc and libsupc++ dependencies means porting libcxxrt and LLVM/compiler-rt
    SOEXT=dll
    LDSHARED_FLAGS="-o libc++.dll \
        -shared -nodefaultlibs -Wl,--export-all-symbols -Wl,--allow-multiple-definition -Wl,--out-implib,libc++.dll.a \
        -lsupc++ -lpthread -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcr100 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt"
    ;;
  *)
    RC_CFLAGS="-fPIC"
    SOEXT=so
    LDSHARED_FLAGS="-o libc++.so.1.0 \
        -shared -nodefaultlibs -Wl,-soname,libc++.so.1 \
        -lpthread -lrt -lc -lstdc++"
    ;;
esac

if [ -z $RC_XBS ]
then
    rm -f libc++.1.$SOEXT*
fi

set -x

for FILE in ../src/*.cpp; do
    $CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -nostdinc++ -I../include $FILE
done
case $TRIPLE in
  *-*-mingw*)
  for FILE in ../src/support/win32/*.cpp; do
    $CXX -c -g -Os $RC_CFLAGS $EXTRA_FLAGS -nostdinc++ -I../include $FILE
  done
  ;;
esac
$CC *.o $RC_CFLAGS $LDSHARED_FLAGS $EXTRA_FLAGS

#libtool -static -o libc++.a *.o

# Create the link for the final library name, so that we can use this directory
# as a link target for the tests.
case $TRIPLE in
    *-apple-*)
        rm -f libc++.dylib
        ln -s libc++.1.dylib libc++.dylib
        ;;
    *-*-mingw*)
        ;;
    *)
        rm -f libc++.so
        ln -s libc++.so.1 libc++.so
        ;;
esac

if [ -z $RC_XBS ]
then
    rm *.o
fi
