#! /bin/bash

source "buildutils.sh"

# PACKAGE ####################################################################

PACKAGE=Python
DEPENDENCIES="Zlib OpenSSL"

# SETUP ######################################################################

set -e
cd `dirname "$0"`
PREFIX=`pwd`

if [ -e ".${PACKAGE}-BUILT" ]; then
    exit 0
fi

# DEPENDENCIES ###############################################################

build_deps $DEPENDENCIES

# FETCH SOURCE ###############################################################

mkdir -p build
cd build

PACKAGE_URL_REF="${PACKAGE}_URL"
PACKAGE_URL="${!PACKAGE_URL_REF}"
PACKAGE_DIR_REF="${PACKAGE}_DIR"
PACKAGE_DIR="${!PACKAGE_DIR_REF}"
PACKAGE_EXTRACT_REF="${PACKAGE}_EXTRACT"
PACKAGE_EXTRACT="${!PACKAGE_EXTRACT_REF}"
PACKAGE_FILENAME=`basename ${PACKAGE_URL}`

if [ ! -e "${PACKAGE_FILENAME}" ]; then
    echo "Fetching ${PACKAGE_URL} ..."
    curl -L -O "${PACKAGE_URL}"
fi

echo "Extracting ${PACKAGE_FILENAME} ..."
${PACKAGE_EXTRACT} "${PACKAGE_FILENAME}"

echo "Building ${PACKAGE} ..."
cd ${PACKAGE_DIR}

# BUILD STEPS ###############################################################

CONFIGURE_FLAGS=""

if [ x"${ARCH}" = x"Darwin" ]; then
    export MACOSX_DEPLOYMENT_TARGET=$CMAKE_OSX_DEPLOYMENT_TARGET
    export MACOSX_SYSROOT=$CMAKE_OSX_SYSROOT
    MACOSX_ARCHFLAGS=""
    for archflag in $CMAKE_OSX_ARCHITECTURES; do
        MACOSX_ARCHFLAGS+="-arch $archflag "
    done;
    export MACOSX_ARCHFLAGS
    export CFLAGS="-isysroot $MACOSX_SYSROOT $MACOSX_ARCHFLAGS -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET $CFLAGS"
    export CXXFLAGS="-isysroot $MACOSX_SYSROOT $MACOSX_ARCHFLAGS -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET $CXXFLAGS"
    export LDFLAGS="$MACOSX_ARCHFLAGS -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET $LDFLAGS"
    CONFIGURE_FLAGS=" \
        --disable-shared "

    # Fix a problem with posixmodule incorrectly using NEXT_FRAMEWORK to decide
    # what to do about the extern/static environ variable
#     patch -p1 <<'EOF'
# $ diff -Nauw Python-3.1.3/Modules/posixmodule.c.original Python-3.1.3/Modules/posixmodule.c
# --- Python-3.1.3/Modules/posixmodule.c.original 2009-08-17 16:43:45.000000000 +0100
# +++ Python-3.1.3/Modules/posixmodule.c  2009-08-17 16:45:40.000000000 +0100
# @@ -361,7 +361,7 @@
#  #endif
#
#  /* Return a dictionary corresponding to the POSIX environment table */
# -#ifdef WITH_NEXT_FRAMEWORK
# +#ifdef __APPLE__
#  /* On Darwin/MacOSX a shared library or framework has no access to
#  ** environ directly, we must obtain it with _NSGetEnviron().
#  */
# @@ -383,7 +383,7 @@
#      d = PyDict_New();
#      if (d == NULL)
#          return NULL;
# -#ifdef WITH_NEXT_FRAMEWORK
# +#ifdef __APPLE__
#      if (environ == NULL)
#          environ = *_NSGetEnviron();
#  #endif
# EOF

    # Obey sysroot when finding module dependencies
#     patch -p1 <<'EOF'
# --- Python-3.1.3/setup.py.original  2010-04-09 13:58:20.000000000 +0100
# +++ Python-3.1.3/setup.py   2010-04-09 14:01:37.000000000 +0100
# @@ -445,6 +445,11 @@
#                  if item.startswith('-I'):
#                      inc_dirs.append(item[2:])
#
# +            # Put version specific sysroot first in path
# +            sysroot= os.getenv('MACOSX_SYSROOT', None)
# +            if sysroot:
# +                inc_dirs=[sysroot + '/usr/include'] + inc_dirs
# +
#              for item in ldflags.split():
#                  if item.startswith('-L'):
#                      lib_dirs.append(item[2:])
#
# EOF
else
    CONFIGURE_FLAGS=" \
        --enable-static \
        --disable-shared "
fi

LDFLAGS="$LDFLAGS -lm" \
    ./configure \
    --prefix="${PREFIX}" \
    $CONFIGURE_FLAGS

make install

##############################################################################

cd "${PREFIX}"
touch ".${PACKAGE}-BUILT"

##############################################################################
