1e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly#!/bin/sh
2e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly#
3e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Copyright (C) 2012 The Android Open Source Project
4e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Copyright (C) 2012 Ray Donnelly <mingw.android at gmail.com>
5e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly#
6e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Licensed under the Apache License, Version 2.0 (the "License");
7e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# you may not use this file except in compliance with the License.
8e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# You may obtain a copy of the License at
9e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly#
10e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly#      http://www.apache.org/licenses/LICENSE-2.0
11e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly#
12e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Unless required by applicable law or agreed to in writing, software
13e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# distributed under the License is distributed on an "AS IS" BASIS,
14e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# See the License for the specific language governing permissions and
16e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# limitations under the License.
17e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly#
18e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Rebuild the host Python binaries from sources.
19c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly# Also copies any gnu libstdc++ pretty-printers
20c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly# found in $TOOLCHAIN_SRC_DIR/gcc/gcc-*
21c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly# and Joachim Reichel's stlport pretty printers
22c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly# found in sources/host-tools/gdb-pretty-printers/stlport
23e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly#
24e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
25e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# include common function and variable definitions
26e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyNDK_BUILDTOOLS_PATH="$(dirname $0)"
27e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly. "$NDK_BUILDTOOLS_PATH/prebuilt-common.sh"
28e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly. "$NDK_BUILDTOOLS_PATH/common-build-host-funcs.sh"
29e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
30e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyPROGRAM_PARAMETERS=""
31e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyPROGRAM_DESCRIPTION="\
32e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyThis program is used to rebuild one or more Python client programs from
33e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellysources. To use it, you will need a working set of toolchain sources, like
34e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellythose downloaded with download-toolchain-sources.sh, then pass the
35e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellycorresponding directory with the --toolchain-src-dir=<path> option.
36e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
37e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyBy default, the script rebuilds Python for you host system [$HOST_TAG],
38e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellybut you can use --systems=<tag1>,<tag2>,.. to ask binaries that can run on
39e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyseveral distinct systems. Each <tag> value in the list can be one of the
40e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyfollowing:
41e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
42e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly   linux-x86
43e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly   linux-x86_64
44e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly   windows
45e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly   windows-x86  (equivalent to 'windows')
46e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly   windows-x86_64
47e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly   darwin-x86
48e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly   darwin-x86_64
49e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
50c39351a729f274b844387658eddc63085d6913ffRay DonnellyFor example, here's how to rebuild Python 2.7.5 on Linux
51e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyfor six different systems:
52e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
5359fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly  $PROGNAME --build-dir=/path/to/toolchain/src \n \
54c39351a729f274b844387658eddc63085d6913ffRay Donnelly    --python-version=2.7.5 \n \
55e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    --systems=linux-x86,linux-x86_64,windows,windows-x86_64,darwin-x86,darwin-x86_64"
56e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
574ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray DonnellyTOOLCHAIN_SRC_DIR=
584ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnellyregister_var_option "--toolchain-src-dir=<path>" TOOLCHAIN_SRC_DIR "Select toolchain source directory"
594ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnelly
6055f7fe1583cac5ec726a4101c046eec4b231164dAndrew HsiehPYTHON_VERSION=$DEFAULT_PYTHON_VERSION
61e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyregister_var_option "--python-version=<version>" PYTHON_VERSION "Select Python version."
62e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
63e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyNDK_DIR=$ANDROID_NDK_ROOT
64e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyregister_var_option "--ndk-dir=<path>" NDK_DIR "Select NDK install directory."
65e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
66e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyPACKAGE_DIR=
67e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyregister_var_option "--package-dir=<path>" PACKAGE_DIR "Package prebuilt tarballs into directory."
68e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
69e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyBUILD_DIR=
70e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyregister_var_option "--build-dir=<path>" BUILD_DIR "Build Python into directory"
71e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
72e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellybh_register_options
73c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chihregister_try64_option
74c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chihregister_canadian_option
75e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyregister_jobs_option
76e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
77e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyextract_parameters "$@"
78e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
79e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyif [ -n "$PARAMETERS" ]; then
80e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    panic "This script doesn't take parameters, only options. See --help"
81e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyfi
82e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
834ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnellyif [ -z "$TOOLCHAIN_SRC_DIR" ]; then
844ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnelly    panic "Please use --toolchain-src-dir=<path> to select toolchain source directory."
854ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnellyfi
86b4789c38c2898b92e7e55274ded1e7f953d5cbf7TDYacheck_toolchain_src_dir "$TOOLCHAIN_SRC_DIR"
87b4789c38c2898b92e7e55274ded1e7f953d5cbf7TDYaTOOLCHAIN_SRC_DIR=`cd $TOOLCHAIN_SRC_DIR; pwd`
884ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnelly
89e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyBH_HOST_SYSTEMS=$(commas_to_spaces $BH_HOST_SYSTEMS)
90c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-ChihAUTO_BUILD="no"
91c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih
92c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chihif [ "$MINGW" = "yes" ]; then
9359fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    BH_HOST_SYSTEMS="windows"
9459fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    log "Auto-config: --systems=windows"
95c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chihfi
96c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih
97c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chihif [ "$DARWIN" = "yes" ]; then
98c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih    BH_HOST_SYSTEMS="darwin-x86"
99c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih    log "Auto-config: --systems=darwin-x86"
100c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chihfi
101c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih
102c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chihdetermine_systems ()
103c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih{
104c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih    local IN_SYSTEMS="$1"
105c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih    local OUT_SYSTEMS
106c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih
107c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih    for SYSTEM in $IN_SYSTEMS; do
108c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih        if [ "$TRY64" = "yes" ]; then
109c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih            case $SYSTEM in
110c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih                darwin-x86|linux-x86|windows-x86)
111c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih                    SYSTEM=${SYSTEM%%x86}x86_64
112c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih                    ;;
113c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih                windows)
114c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih                    SYSTEM=windows-x86_64
115c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih                    ;;
116c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih            esac
11759fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly        else
11859fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly            # 'windows-x86' causes substitution
11959fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly            # failure at the packing stage.
12059fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly            case $SYSTEM in
12159fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly                windows-x86)
12259fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly                    SYSTEM=windows
12359fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly                    ;;
12459fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly            esac
125c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih        fi
126c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih        OUT_SYSTEMS="$OUT_SYSTEMS $SYSTEM"
127c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih    done
128c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih    echo $OUT_SYSTEMS
129c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih}
130c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih
131c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-ChihBH_HOST_SYSTEMS=$(determine_systems "$BH_HOST_SYSTEMS")
132c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih
133c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih# Build python for build machine automatically
134c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chihif [ "$(bh_list_contains $BH_BUILD_TAG $BH_HOST_SYSTEMS)" = "no" ]; then
135c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih    BH_HOST_SYSTEMS="$BH_BUILD_TAG $BH_HOST_SYSTEMS"
136c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih    AUTO_BUILD="yes"
137c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chihfi
138e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
139e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Python needs to execute itself during its build process, so must build the build
140e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Python first. It should also be an error if not asked to build for build machine.
141e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyBH_HOST_SYSTEMS=$(bh_sort_systems_build_first "$BH_HOST_SYSTEMS")
142e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
143e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellydownload_package ()
144e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly{
145e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    # Assume the packages are already downloaded under $ARCHIVE_DIR
146e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    local PKG_URL=$1
147e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    local PKG_NAME=$(basename $PKG_URL)
148e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
149e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    case $PKG_NAME in
150e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        *.tar.bz2)
151e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            PKG_BASENAME=${PKG_NAME%%.tar.bz2}
152e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            ;;
153e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        *.tar.gz)
154e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            PKG_BASENAME=${PKG_NAME%%.tar.gz}
155e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            ;;
156e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        *)
157e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            panic "Unknown archive type: $PKG_NAME"
158e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    esac
159e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
160e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    if [ ! -f "$ARCHIVE_DIR/$PKG_NAME" ]; then
161e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        log "Downloading $PKG_URL..."
162e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        (cd $ARCHIVE_DIR && run curl -L -o "$PKG_NAME" "$PKG_URL")
163e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        fail_panic "Can't download '$PKG_URL'"
164e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    fi
165e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
166e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    if [ ! -d "$SRC_DIR/$PKG_BASENAME" ]; then
167e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        log "Uncompressing $PKG_URL into $SRC_DIR"
168e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        case $PKG_NAME in
169e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            *.tar.bz2)
170e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly                run tar xjf $ARCHIVE_DIR/$PKG_NAME -C $SRC_DIR
171e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly                ;;
172e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            *.tar.gz)
173e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly                run tar xzf $ARCHIVE_DIR/$PKG_NAME -C $SRC_DIR
174e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly                ;;
175e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            *)
176e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly                panic "Unknown archive type: $PKG_NAME"
177e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly                ;;
178e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        esac
179e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        fail_panic "Can't uncompress $ARCHIVE_DIR/$PKG_NAME"
180e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    fi
181e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly}
182e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
183e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyif [ -z "$BUILD_DIR" ] ; then
184e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    BUILD_DIR=/tmp/ndk-$USER/buildhost
185e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyfi
186e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
187e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellybh_setup_build_dir $BUILD_DIR
188e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
189e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyif [ "$BH_BUILD_MODE" = "debug" ] ; then
190e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly   PYDEBUG="-with-pydebug"
191e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyfi
192e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
193e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Sanity check that we have the right compilers for all hosts
194e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyfor SYSTEM in $BH_HOST_SYSTEMS; do
195e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    bh_setup_build_for_host $SYSTEM
196e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellydone
197e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
198e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyTEMP_DIR=$BUILD_DIR/tmp
199e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Download and unpack source packages from official sites
200e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyARCHIVE_DIR=$TEMP_DIR/archive
201e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellySTAMP_DIR=$TEMP_DIR/timestamps
202e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyBUILD_DIR=$TEMP_DIR/build-$HOST_TAG
203e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
204e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellymkdir -p $BUILD_DIR
205e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
206e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyPROGDIR=`dirname $0`
207e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyPROGDIR=$(cd $PROGDIR && pwd)
208e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
2094ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnelly# Sanity check for all Python versions.
210e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyfor VERSION in $(commas_to_spaces $PYTHON_VERSION); do
2114ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnelly    PYTHON_SRCDIR=$TOOLCHAIN_SRC_DIR/python/Python-$VERSION
212e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    if [ ! -d "$PYTHON_SRCDIR" ]; then
213e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        panic "Missing source directory: $PYTHON_SRCDIR"
214e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    fi
215e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellydone
216e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
217e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyarch_to_qemu_arch ()
218e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly{
219e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    case $1 in
220e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        x86)
221e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo i386
222e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            ;;
223e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        *)
224e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo $1
225e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            ;;
226e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    esac
227e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly}
228e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
229e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# $1: host system tag
230e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# $2: python version
231e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellybuild_host_python ()
232e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly{
2334ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnelly    local SRCDIR=$TOOLCHAIN_SRC_DIR/python/Python-$2
234e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    local BUILDDIR=$BH_BUILD_DIR/build-python-$1-$2
235e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    local INSTALLDIR=$(python_build_install_dir $1 $2)
236e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    local ARGS TEXT
237e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
238e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    if [ ! -f "$SRCDIR/configure" ]; then
239e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        panic "Missing configure script in $SRCDIR"
240e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    fi
241e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
242c39351a729f274b844387658eddc63085d6913ffRay Donnelly    # Currently, 2.7.5 and 3.3.0 builds generate $SRCDIR/Lib/_sysconfigdata.py, unless it
2431f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    # already exists (in which case it ends up wrong anyway!)... this should really be in
24459fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    # the build directory instead.
24559fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    if [ ! -f "$SRCDIR/Lib/_sysconfigdata.py" ]; then
24659fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly        log "Removing old $SRCDIR/Lib/_sysconfigdata.py"
24759fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly        rm -f $SRCDIR/Lib/_sysconfigdata.py
24859fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    fi
24959fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly
250e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    ARGS=" --prefix=$INSTALLDIR"
251e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
25259fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    ARGS=$ARGS" --build=$BH_BUILD_CONFIG"
253e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    ARGS=$ARGS" --host=$BH_HOST_CONFIG"
254b551a38bc664f07a59be17f1a473396a0db0dd02Andrew Hsieh    ARGS=$ARGS" --with-build-sysroot"
255e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    ARGS=$ARGS" $PYDEBUG"
256e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    ARGS=$ARGS" --disable-ipv6"
257e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
258e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    mkdir -p "$BUILDDIR" && rm -rf "$BUILDDIR"/*
259e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    cd "$BUILDDIR" &&
260e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    bh_setup_host_env
261e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
262e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    CFG_SITE=
263e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    # Need to add -L$HOST_STATIC_LIBDIR to LDSHARED if need
264e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    # any static host libs.
265e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    export LDSHARED="$CC -shared "
266e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    if [ ! $BH_HOST_TAG = $BH_BUILD_TAG ]; then
267e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
268e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        # Cross compiling.
269e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        CFG_SITE=$BUILDDIR/config.site
270e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
271e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        # Ideally would remove all of these configury hacks by
272e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        # patching the issues.
273e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
274e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        if [ $1 = darwin-x86 -o $1 = darwin-x86_64 ]; then
275e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_file__dev_ptmx=no"              > $CFG_SITE
276e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_file__dev_ptc=no"              >> $CFG_SITE
277e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_have_long_long_format=yes"     >> $CFG_SITE
278e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            if [ $1 = darwin-x86 ] ; then
279e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly                echo "ac_osx_32bit=yes"                >> $CFG_SITE
280e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            elif [ $1 = darwin-x86_64 ] ; then
281e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly                echo "ac_osx_32bit=no"                 >> $CFG_SITE
282e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            fi
283e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_have_sendfile=no"              >> $CFG_SITE
284e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            # I could change AC_MSG_CHECKING(LDSHARED) in configure.ac
285e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            # to check $host instead of $ac_sys_system/$ac_sys_release
286e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            # but it handles loads of platforms
287e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            # and I can only test on three, so instead...
288e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            export LDSHARED="$CC -bundle -undefined dynamic_lookup"
289e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        elif [ $1 = windows-x86 -o $1 = windows-x86_64 ]; then
290e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_file__dev_ptmx=no"              > $CFG_SITE
291e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_file__dev_ptc=no"              >> $CFG_SITE
292e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            CFLAGS=$CFLAGS" -D__USE_MINGW_ANSI_STDIO=1"
293e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            CXXFLAGS=$CXXFLAGS" -D__USE_MINGW_ANSI_STDIO=1"
294e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        elif [ $1 = linux-x86 -o $1 = linux-x86_64 ]; then
295e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_file__dev_ptmx=yes"             > $CFG_SITE
296e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_file__dev_ptc=no"              >> $CFG_SITE
297e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_have_long_long_format=yes"     >> $CFG_SITE
298e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_pthread_system_supported=yes"  >> $CFG_SITE
299e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_working_tzset=yes"             >> $CFG_SITE
300e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            echo "ac_cv_little_endian_double=yes"      >> $CFG_SITE
301e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        fi
302e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
303b551a38bc664f07a59be17f1a473396a0db0dd02Andrew Hsieh        if [ "$BH_HOST_OS" = "$BH_BUILD_OS" ]; then
304e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            # Only cross compiling from arch perspective.
305e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            # qemu causes failures as cross-compilation is not detected
306e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            # if a test executable can be run successfully, so we test
307e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            # for qemu-${BH_HOST_ARCH} and qemu-${BH_HOST_ARCH}-static
308e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            # and panic if either are found.
309e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            QEMU_HOST_ARCH=$(arch_to_qemu_arch $BH_HOST_ARCH)
310e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            if [ ! -z "$(which qemu-$QEMU_HOST_ARCH 2>/dev/null)" -o \
311e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly                 ! -z "$(which qemu-$QEMU_HOST_ARCH-static 2>/dev/null)" ] ; then
3126d1c6602773e633148dc07413748227970682d25Chih-Hung Hsieh               dump "Installed qemu(s) ($(which qemu-$QEMU_HOST_ARCH 2>/dev/null) $(which qemu-$QEMU_HOST_ARCH-static 2>/dev/null))" \
313e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly                      "will prevent this build from working."
314e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly            fi
315e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        fi
316433f2c4e0348d448f4e31efa93537f1784bf47b4Andrew Hsieh    else
317433f2c4e0348d448f4e31efa93537f1784bf47b4Andrew Hsieh        if [ $1 = darwin-x86 -o $1 = darwin-x86_64 ]; then
318433f2c4e0348d448f4e31efa93537f1784bf47b4Andrew Hsieh            export LDSHARED="$CC -bundle -undefined dynamic_lookup"
319433f2c4e0348d448f4e31efa93537f1784bf47b4Andrew Hsieh        fi
320e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    fi
321e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
32259fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    TEXT="$(bh_host_text) python-$BH_HOST_CONFIG-$2:"
323e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
324e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    touch $SRCDIR/Include/graminit.h
325e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    touch $SRCDIR/Python/graminit.c
326e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    echo "" > $SRCDIR/Parser/pgen.stamp
32759fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    touch $SRCDIR/Parser/Python.asdl
32859fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    touch $SRCDIR/Parser/asdl.py
32959fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    touch $SRCDIR/Parser/asdl_c.py
33059fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    touch $SRCDIR/Include/Python-ast.h
33159fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    touch $SRCDIR/Python/Python-ast.c
332e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
3331f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    # By default, the Python build will force the following compiler flags
3341f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    # after our own CFLAGS:
3351f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    #   -g -fwrap -O3 -Wall -Wstrict-prototypes
3361f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    #
3371f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    # The '-g' is unfortunate because it makes the generated binaries
3381f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    # much larger than necessary, and stripping them after the fact is
3391f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    # a bit delicate when cross-compiling. To avoid this, define a
3401f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    # custom OPT variable here (see Python-2.7.5/configure.ac) when
3411f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    # generating non stripped builds.
3421f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    if [ "$BH_BUILD_MODE" = "release" ]; then
3431f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner      OPT="-fwrapv -O3 -Wall -Wstrict-prototypes"
3441f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner      export OPT
3451f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner    fi
3461f2541a7a94b939eef41a9a7d6f046d8fbc65780David 'Digit' Turner
347e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    dump "$TEXT Building"
348e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    export CONFIG_SITE=$CFG_SITE &&
349e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    run2 "$SRCDIR"/configure $ARGS &&
35059fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    #
35159fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    # Note 1:
35259fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    # sharedmods is a phony target, but it's a dependency of both "make all" and also
35359fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    # "make install", this causes it to fail on Windows as it tries to rename pydoc3
35459fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    # to pydoc3.3 twice, and the second time aroud the file exists. So instead, we
35559fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    # just do make install.
35659fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    #
35759fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    # Note 2:
35859fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    # Can't run make install with -j as from the Makefile:
35959fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    # install:	 altinstall bininstall maninstall
36059fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    #  meaning altinstall and bininstall are kicked off at the same time
36159fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    #  but actually, bininstall depends on altinstall being run first
36259fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    #  due to libainstall: doing
36359fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    #  $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(VERSION)-config
36459fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    #  and bininstall: doing
36559fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    #  (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-config python2-config)
36659fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    #  Though the real fix is to make bininstall depend on libainstall.
367e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    run2 make -j$NUM_JOBS &&
36859fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    run2 make install
369c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly
370c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly    # Pretty printers.
371c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly    PYPPDIR="$INSTALLDIR/share/pretty-printers/"
372c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly
373c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly    # .. for gnu stdlibc++
374c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly    GCC_DIRS=$(find $TOOLCHAIN_SRC_DIR/gcc/ -maxdepth 1 -name "gcc-*" -type d)
375c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly    for GCC_DIR in $GCC_DIRS; do
376c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly        (
377c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly        if [ -d "$GCC_DIR/libstdc++-v3/python" ]; then
378c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly            cd "$GCC_DIR/libstdc++-v3/python"
379c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly            [ -d "$PYPPDIR/libstdcxx/$(basename $GCC_DIR)" ] || mkdir -p "$PYPPDIR/libstdcxx/$(basename $GCC_DIR)"
380c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly            run2 find . -path "*.py" -exec cp {} "$PYPPDIR/libstdcxx/$(basename $GCC_DIR)/" \;
381c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly        fi
382c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly        )
383c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly    done
384c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly
385c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly    # .. for STLPort
386c91880dd347579316d1e271edfa8aede57c87214Ray Donnelly    run2 cp -rf $NDK_DIR/sources/host-tools/gdb-pretty-printers/stlport/gppfs-0.2 $PYPPDIR/stlport
387e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly}
388e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
389e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyneed_build_host_python ()
390e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly{
391e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    bh_stamps_do host-python-$1-$2 build_host_python $1 $2
392e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly}
393e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
394e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Install host Python binaries and support files to the NDK install dir.
395e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# $1: host tag
396e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# $2: python version
397e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyinstall_host_python ()
398e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly{
399e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    local SRCDIR="$(python_build_install_dir $1 $2)"
400e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    local DSTDIR="$NDK_DIR/$(python_ndk_install_dir $1 $2)"
401e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
402e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    need_build_host_python $1 $2
403e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
404c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih    if [ $AUTO_BUILD != "yes" -o $1 != $BH_BUILD_TAG ]; then
405c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih        dump "$(bh_host_text) python-$BH_HOST_ARCH-$2: Installing"
406c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih        run copy_directory "$SRCDIR/bin"     "$DSTDIR/bin"
407c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih        run copy_directory "$SRCDIR/lib"     "$DSTDIR/lib"
408c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih        run copy_directory "$SRCDIR/share"   "$DSTDIR/share"
409c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih        run copy_directory "$SRCDIR/include" "$DSTDIR/include"
410d4a49bf41476e5f618d2cb683703c2d33565951eAndrew Hsieh        # remove unneeded files
411d4a49bf41476e5f618d2cb683703c2d33565951eAndrew Hsieh        run rm -rf "$DSTDIR/share/man"
412f0bef33d63eceb503d6a30ca151a8fcc7f1f2d4dAndrew Hsieh        run rm -rf "$DSTDIR/share/pretty-printers/libstdcxx/gcc-4.9.*"
413f0bef33d63eceb503d6a30ca151a8fcc7f1f2d4dAndrew Hsieh        run rm -rf "$DSTDIR/share/pretty-printers/libstdcxx/gcc-4.9-*"
414f0bef33d63eceb503d6a30ca151a8fcc7f1f2d4dAndrew Hsieh        run rm -rf "$DSTDIR/share/pretty-printers/libstdcxx/gcc-[lm]*"
415c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih    fi
416e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly}
417e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
418e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyneed_install_host_python ()
419e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly{
420e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    local SRCDIR="$(python_build_install_dir $1 $2)"
421e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
422e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    bh_stamps_do install-host-python-$1-$2 install_host_python $1 $2
423e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
424e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    # make sharedmods (setup.py) needs to use the build machine's Python
425e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    # for the other hosts to build correctly.
426e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    if [ $BH_BUILD_TAG = $BH_HOST_TAG ]; then
427e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        export PATH=$SRCDIR/bin:$PATH
428e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    fi
429e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly}
430e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
431e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Package host Python binaries into a tarball
432e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# $1: host tag
433e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# $2: python version
434e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellypackage_host_python ()
435e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly{
4364ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnelly    local BLDDIR="$(python_build_install_dir $1 $2)"
437e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    local SRCDIR="$(python_ndk_install_dir $1 $2)"
43859fd2bfb50dab0b19fddb397cd2d4122b17eb8d0Ray Donnelly    # This is similar to BLDDIR=${BLDDIR%%$SRCDIR} (and requires we use windows and not windows-x86)
4394ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnelly    BLDDIR=$(echo "$BLDDIR" | sed "s/$(echo "$SRCDIR" | sed -e 's/\\/\\\\/g' -e 's/\//\\\//g' -e 's/&/\\\&/g')//g")
440877fc9f59b0fb37fadeecfe8cc7327641b750870Ray Donnelly    local PACKAGENAME=ndk-python-$(install_dir_from_host_tag $1).tar.bz2
441e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    local PACKAGE="$PACKAGE_DIR/$PACKAGENAME"
442e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
443e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    need_install_host_python $1 $2
444e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
445e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    dump "$(bh_host_text) $PACKAGENAME: Packaging"
4464ec84cccdda14ab4ebcafbc6f3200a2cd2868586Ray Donnelly    run pack_archive "$PACKAGE" "$BLDDIR" "$SRCDIR"
447e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly}
448e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
449877fc9f59b0fb37fadeecfe8cc7327641b750870Ray Donnellyneed_package_host_python ()
450877fc9f59b0fb37fadeecfe8cc7327641b750870Ray Donnelly{
451877fc9f59b0fb37fadeecfe8cc7327641b750870Ray Donnelly    bh_stamps_do package-host-python-$1-$2 package_host_python $1 $2
452877fc9f59b0fb37fadeecfe8cc7327641b750870Ray Donnelly}
453877fc9f59b0fb37fadeecfe8cc7327641b750870Ray Donnelly
454e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyPYTHON_VERSION=$(commas_to_spaces $PYTHON_VERSION)
455e534e36be95815bdfa09756fa040acb2321a09c2Ray DonnellyARCHS=$(commas_to_spaces $ARCHS)
456e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
457e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly# Let's build this
458e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyfor SYSTEM in $BH_HOST_SYSTEMS; do
459e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    bh_setup_build_for_host $SYSTEM
460e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    for VERSION in $PYTHON_VERSION; do
461e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        need_install_host_python $SYSTEM $VERSION
462e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    done
463e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellydone
464e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly
465e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyif [ "$PACKAGE_DIR" ]; then
466e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    for SYSTEM in $BH_HOST_SYSTEMS; do
467e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly        bh_setup_build_for_host $SYSTEM
468c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih        if [ $AUTO_BUILD != "yes" -o $SYSTEM != $BH_BUILD_TAG ]; then
469c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih            for VERSION in $PYTHON_VERSION; do
470877fc9f59b0fb37fadeecfe8cc7327641b750870Ray Donnelly                need_package_host_python $SYSTEM $VERSION
471c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih            done
472c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih        fi
473e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnelly    done
474e534e36be95815bdfa09756fa040acb2321a09c2Ray Donnellyfi
475