#! /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
  MACOSX_DEPLOYMENT_TARGET=10.6
fi

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

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
		EXTRA_FLAGS="-std=c++0x "
		RE_EXPORT_FILE="libc++abi.exp"
		if [ -n "$SDKROOT" ]
		then
			EXTRA_FLAGS+="-isysroot ${SDKROOT}"
			RE_EXPORT_FILE="libc++sjlj-abi.exp"
			CXX=`xcrun -sdk "${SDKROOT}"  -find clang++`
			CC=`xcrun -sdk "${SDKROOT}"  -find clang`
		fi
	    LDSHARED_FLAGS="-o libc++.1.dylib \
			-dynamiclib -nodefaultlibs  \
			-current_version ${RC_ProjectSourceVersion} -compatibility_version 1 \
			-install_name /usr/lib/libc++.1.dylib \
			${SDKROOT}/usr/lib/libc++abi.dylib \
			-lSystem  \
			-Wl,-unexported_symbols_list,libc++unexp.exp  \
                        -Wl,-reexported_symbols_list,${RE_EXPORT_FILE}  \
			-Wl,-force_symbols_not_weak_list,notweak.exp "
	fi
    ;;
  *)
    RC_CFLAGS="-fPIC"
    SOEXT=so
    LDSHARED_FLAGS="-o libc++.so.1.0 \
        -shared -nodefaultlibs -Wl,-soname,libc++.so.1 \
        -lpthread -lrt -lc"
    ;;
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


$CC *.o $RC_CFLAGS $LDSHARED_FLAGS $EXTRA_FLAGS

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

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