diff options
Diffstat (limited to 'otp_build')
-rwxr-xr-x | otp_build | 704 |
1 files changed, 428 insertions, 276 deletions
@@ -1,4 +1,22 @@ #! /bin/sh +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 2002-2010. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +# # Expected autoconf version EXPECTED_AUTOCONF_VERSION=2.59 @@ -8,26 +26,35 @@ clearmake=false # Global configuration variables # -# NOTE: lazy_configure depends on '.' allways being last directory +# NOTE: lazy_configure depends on '.' always being last directory if [ -z "$ONLY_ERTS" ]; then - AUTOCONF_SUBDIRS="lib lib/*" + AUTOCONF_SUBDIRS="lib lib/* lib/test_server/src" fi AUTOCONF_SUBDIRS="$AUTOCONF_SUBDIRS erts ." +# `bootstrap_apps' should include application that are built, or +# partly built in one of the bootstrap phases. Applications that +# only get some static includes copied into the bootstrap directory +# should not be included. +bootstrap_apps="erts lib/asn1 lib/compiler lib/hipe lib/ic lib/kernel lib/parsetools lib/sasl lib/snmp lib/stdlib lib/syntax_tools" + +# We will quote a bit more than needed, but the important thing is that +# all that needs quoting will be quoted... +DONT_QUOTE="A-Za-z0-9/=_+-" + # Utility functions usage () { - echo "Available options:" + echo "Available options (-a switch select all applications):" echo " setup [-a] [<configure parameters>] - does autoconf, configure and boot." echo " all [-a] <dir> - does autoconf, configure, boot, release" echo " autoconf - (re)build the configure scripts" echo " configure [<configure parameters>] - does the actual configuration" - echo " smp [-a] - build a small Erlang system, smp flavor" - echo " hybrid [-a] - build a small Erlang system, hybrid flavor" - echo " nofrag [-a] - build a small Erlang system, nofrag flavor" - echo " boot [-a] - bootstraps and build system (after configure)" + echo " boot [-a] - bootstraps and builds the system (after configure)" echo " release <target_dir> - creates a small release to <target_dir>" echo " release [-a] <target_dir> - creates full release to <target_dir>" + echo " smp [-a] - build an Erlang system, smp flavor only" + echo " hybrid [-a] - build an Erlang system, hybrid flavor only" echo " tests <dir> - Build testsuites to <dir>" echo "" echo "These are for cleaning up an open source distribution" @@ -47,75 +74,67 @@ usage () echo "Before trying to build for vxworks, consider the following option" echo " env_vxworks <cpu> - echo environment settings for vxworks, use with eval" echo "" - echo "Before trying to cross compile, set environment via the following option" - echo "Please note that the path to the configuration file should be absolute." - echo " env_cross <absolute path to cross conf file> - echo environment settings for cross compilation, use with eval" - echo "" - echo "The following options concern the primary bootstrap." - echo "{prepare,update,commit,cancel}_primary is for actually updating" - echo "the checked in derivates of the main code base, they are not for" - echo "managing a downloaded spource-tree." - echo " prepare_primary - prepares for building primary bootstrap (only in Clearcase)" - echo " update_primary - creates the primary bootstrap, the one shipped" - echo " commit_primary - commits a primary bootstrap (only in Clearcase)" - echo " cancel_primary - uncheckout a primary bootstrap (only in Clearcase)" - echo "" - echo "The following options concern preloaded code." - echo "They are, like the primary bootstrap, mainly the concern of the" - echo "main developers." - echo " prepare_preloaded - prepares for building preloaded code (only in Clearcase)" - echo " update_preloaded - creates the preloaded beam code, the one shipped" - echo " commit_preloaded - commits the preloaded code (only in Clearcase)" - echo " cancel_preloaded - uncheckout preloaded code (only in Clearcase)" + case $version_controller in + none) + ;; + clearcase) + echo "" + echo "Handle the primary bootstrap in Clearcase:" + echo " prepare_primary - prepare for building a primary bootstrap" + echo " update_primary - create the primary bootstrap" + echo " commit_primary - commit a primary bootstrap" + echo " cancel_primary - uncheckout a primary bootstrap" + ;; + git) + echo "" + echo "update_primary - build and commit a new primary bootstrap" + ;; + esac + + case $version_controller in + none) + ;; + clearcase) + echo "" + echo "Handle the preloaded modules in Clearcase:" + echo " prepare_preloaded - prepares for building preloaded code" + echo " update_preloaded - creates the preloaded code" + echo " commit_preloaded - commits the preloaded code" + echo " cancel_preloaded - uncheckout preloaded code" + ;; + git) + echo "" + echo "update_preloaded - build and commit the preloaded modules" + ;; + esac } -xcomp_fail () +hide_vars () { - echo "The mandatory cross compilation variable" $1 "is not set in" $2 ",aborting" >&2 - exit 1 + script= + for var in "$@"; do + if [ "X$var" != "X" ]; then + script="$script test \"X\$$var\" = \"X\" || hidden_$var=\$$var; unset $var;" + fi + done + if [ "X$script" != "X" ]; then + eval "$script" + fi + unset script } -check_xcomp_file () +restore_vars () { - if test "x$erl_xcomp_os" = "x"; then - xcomp_fail erl_xcomp_os $1 - fi - if test "x$erl_xcomp_hw" = "x"; then - xcomp_fail erl_xcomp_hw $1 - fi - if test "x$erl_xcomp_man" = "x"; then - xcomp_fail erl_xcomp_man $1 - fi - if test "x$erl_xcomp_target_xtra" = "x"; then - xcomp_fail erl_xcomp_target_extra $1 - fi - if test "x$erl_xcomp_void_p" = "x"; then - xcomp_fail erl_xcomp_void_p $1 - fi - if test "x$erl_xcomp_short" = "x"; then - xcomp_fail erl_xcomp_short $1 - fi - if test "x$erl_xcomp_int" = "x"; then - xcomp_fail erl_xcomp_int $1 - fi - if test "x$erl_xcomp_long" = "x"; then - xcomp_fail erl_xcomp_long $1 - fi - if test "x$erl_xcomp_long_long" = "x"; then - xcomp_fail erl_xcomp_long_long $1 - fi - if test "x$erl_xcomp_sizeof_size_t" = "x"; then - xcomp_fail erl_xcomp_sizeof_size_t $1 - fi - if test "x$erl_xcomp_sizeof_off_t" = "x"; then - xcomp_fail erl_xcomp_sizeof_off_t $1 - fi - if test "x$erl_xcomp_os" = "xlinux"; then - if test "x$erl_xcomp_linux_kernel" = "x"; then - xcomp_fail erl_xcomp_linux_kernel $1 + script= + for var in "$@"; do + if [ "X$var" != "X" ]; then + script="$script unset $var; test \"X\$hidden_$var\" = \"X\" || { $var=\$hidden_$var; export $var; } ; unset hidden_$var;" fi + done + if [ "X$script" != "X" ]; then + eval "$script" fi - return 0 + unset script } @@ -126,6 +145,7 @@ check_erltop () if [ -f ./otp_build -a -f ./erts/autoconf/config.guess ]; then ERLTOP_FORCED=true ERL_TOP=`/bin/pwd` + export ERL_TOP else echo "The environment variable ERL_TOP must be set." >&2 exit 1 @@ -140,28 +160,53 @@ target_contains () return $? } +determine_version_controller () +{ + version_controller=none + # The current directory is now $ERL_TOP. Check for + # either this directory being controlled by git or + # for the "otp_build" file being a Clearcase controlled + # object. + if { git rev-parse --git-dir; } 2>/dev/null >/dev/null; then + version_controller=git + else + if test -d "otp_build@@/"; then + version_controller=clearcase + fi + fi +} # Execution of the different options # Special static config flags for certain platforms are set here set_config_flags () { + # * Extra flags to pass to configure are placed in `CONFIG_FLAGS'. + # * The command line is no longer added to `CONFIG_FLAGS' by + # `set_config_flags'. It is instead passed directly to + # `run_configure', or added to `CONFIG_FLAGS' at some other + # place. + # * `CONFIG_FLAGS' may contain flags when `set_config_flags' is + # called. These flags should survive the call to `set_config_flags' + # (in the cross compilation case the whole command line as well as + # the cross configuration have been moved here). + if target_contains linux; then XX=`echo $* | grep -v able-hipe` if [ "$*" = "$XX" ]; then - CONFIG_FLAGS="--disable-hipe" + CONFIG_FLAGS="$CONFIG_FLAGS --disable-hipe" fi fi if target_contains "univel-sysv4"; then - CONFIG_FLAGS="--x-libraries=/usr/lib/X11" + CONFIG_FLAGS="$CONFIG_FLAGS --x-libraries=/usr/lib/X11" fi if target_contains free_source; then CONFIG_FLAGS="$CONFIG_FLAGS --host=$TARGET" fi if target_contains win32; then - CONFIG_FLAGS="--build=$BUILDSYS build_alias=win32 --host=win32 --target=win32" + CONFIG_FLAGS="--build=$BUILDSYS build_alias=win32 --host=win32 --target=win32 $CONFIG_FLAGS" else # Link SSL static for all binary distributions if not overridden XX=`echo $* | grep -v dynamic-ssl-lib` @@ -175,12 +220,61 @@ set_config_flags () CONFIG_FLAGS="$CONFIG_FLAGS --cache-file=$OVERRIDE_CONFIG_CACHE" fi - CONFIG_FLAGS="$CONFIG_FLAGS $*" + env_to_config_flags $erl_build_tool_vars + export CONFIG_FLAGS; } - + +create_lib_configure_in() +{ + cd $ERL_TOP + + # Multiple versions of autoconf generates code that + # don't work on all platforms (e.g. SunOS 5.8) if + # sub directories are soft links. Internally at Ericsson + # some OTP application directories are soft links. + # An added "/." solves this problem. + + sdirs= + for lib_app in $bootstrap_apps; do + case $lib_app in + lib/*) + if [ -f "$lib_app/configure.in" ]; then + app=`echo "$lib_app" | sed "s|lib/\(.*\)|\1|"` + sdirs="${sdirs}test ! -f $app/configure || AC_CONFIG_SUBDIRS($app/.)\n" + fi;; + *) + ;; + esac + done + + sed_bootstrap="s%@BOOTSTRAP_CONFIGURE_APPS@%$sdirs%g" + + sdirs= + for lib_app in lib/*; do + is_bapp=false + for bapp in $bootstrap_apps; do + test $bapp != $lib_app || { is_bapp=true; break; } + done + if [ $is_bapp = false ] && [ -f "$lib_app/configure.in" ]; then + app=`echo "$lib_app" | sed "s|lib/\(.*\)|\1|"` + sdirs="${sdirs} test ! -f $app/configure || AC_CONFIG_SUBDIRS($app/.)\n" + fi + done + + sed_non_bootstrap="s%@NON_BOOTSTRAP_CONFIGURE_APPS@%$sdirs%g" + + rm -f lib/configure.in + sed "$sed_bootstrap;$sed_non_bootstrap" > lib/configure.in < lib/configure.in.src || { + echo "Failed to create lib/configure.in" + exit 1 + } +} + do_autoconf () { + create_lib_configure_in + if target_contains win32; then # Select the correct autoconf on cygwin save_want_autoconf_ver=$WANT_AUTOCONF_VER @@ -205,17 +299,8 @@ do_autoconf () ;; esac - if [ -d erts/autom4te.cache ]; then - echo "Cleaning erts/autom4te.cache" - rm -f erts/autom4te.cache/* - fi - - save_ot="$OVERRIDE_TARGET" - save_t="$TARGET" if [ ! -z "$OVERRIDE_CONFIGURE" ]; then echo "Autoconf disabled on target $TARGET, but is performed on host" >&2 - OVERRIDE_TARGET= - export OVERRIDE_TARGET # We still use erts configure for erl_interface and VxWorks case "$TARGET" in *vxworks*) @@ -225,23 +310,30 @@ do_autoconf () -e 's,lib/megaco,,'` ;; esac - TARGET=`$ERL_TOP/erts/autoconf/config.guess` fi + hide_vars OVERRIDE_TARGET TARGET + TARGET=$BUILDSYS + export TARGET + for d in $AUTOCONF_SUBDIRS; do - if [ -f $d/configure.in ]; then - echo "=== running autoconf in $d" - ( cd $d && autoconf ) || exit 1 - fi - if [ x$d = x"erts" ]; then - echo "=== running autoheader in $d" - ( cd $d && autoheader configure.in > config.h.in ) \ - || exit 1 - fi + file="$d/configure.in" + [ -f "$file" ] || continue + echo "" + [ ! -d "$d/autom4te.cache" ] || { + echo "=== cleaning $d/autom4te.cache" + rm -f "$d"/autom4te.cache/* + } + echo "=== running autoconf in $d" + ( cd "$d" && autoconf ) || exit 1 + chdr=`cat "$file" | sed -n "s|.*\(AC_CONFIG_HEADER\).*|\1|p"` + [ "$chdr" = "AC_CONFIG_HEADER" ] || continue + echo "=== running autoheader in $d" + ( cd "$d" && autoheader ) || exit 1 done - OVERRIDE_TARGET="$save_ot" - export OVERRIDE_TARGET - TARGET="$save_t" + + restore_vars OVERRIDE_TARGET TARGET + if target_contains win32; then WANT_AUTOCONF_VER=$save_want_autoconf_ver export WANT_AUTOCONF_VER @@ -258,22 +350,176 @@ mk_targetdir () fi } +run_configure () +{ + cdir="$ERL_TOP" + [ -z "$ONLY_ERTS" ] || { + cdir="$ERL_TOP/erts" + CONFIG_FLAGS="$CONFIG_FLAGS --no-recursion" + } + + echo "$cdir/configure $CONFIG_FLAGS" ${1+"$@"} + (cd "$cdir" && $config_eval ./configure $CONFIG_FLAGS ${1+"$@"}) || exit 1 +} + +env_to_config_flags () +{ + for env_var in "$@"; do + script="echo $env_var=\$$env_var; unset $env_var >/dev/null 2>&1" + env_arg=`eval $script` + case $env_arg in + "$env_var=") + ;; + *[!$DONT_QUOTE]*) + config_eval=eval + new_arg=`echo "X$env_arg" | sed "s|^X||;s|\([^$DONT_QUOTE]\)|\\\\\\\\\1|g"` + CONFIG_FLAGS="$CONFIG_FLAGS $new_arg";; + *) + CONFIG_FLAGS="$CONFIG_FLAGS $env_arg";; + esac + eval unset $env_var + done +} + +try_cross_configure () +{ + cross_configure=no + host_value= + build_value= + + # Get `erl_xcomp_vars' + . "$ERL_TOP/xcomp/erl-xcomp-vars.sh" || exit 1 + + for arg in ${1+"$@"}; do + case "$arg" in + --host=*) + host_value=`echo $x | sed "s|^--host=\(.*\)|\1|"`;; + --build=*) + build_value=`echo $x | sed "s|^--build=\(.*\)|\1|"`;; + --xcomp-conf=*) + cross_configure=yes;; + *) + ;; + esac + done + + test $cross_configure = yes || { + + test "X$host_value" = "X" || { + + test "X$build_value" != "X" || build_value="$BUILDSYS" + + build_sys=`$ERL_TOP/erts/autoconf/config.sub "$build_value"` || exit 1 + host_sys=`$ERL_TOP/erts/autoconf/config.sub "$host_value"` || exit 1 + + + test "$host_sys" = "$build_sys" || cross_configure=yes + } + } + + test $cross_configure = yes || return 1 + + # cross configure... + CONFIG_FLAGS= + + env_to_config_flags $erl_build_tool_vars $erl_xcomp_vars + + for arg in ${1+"$@"}; do + case "$arg" in + --host=*) + host_value=`echo $x | sed "s|^--host=\(.*\)|\1|"`;; + --build=*) + build_value=`echo $x | sed "s|^--build=\(.*\)|\1|"`;; + --xcomp-conf=*) + xcomp_conf=`echo "X$arg" | sed "s|^X--xcomp-conf=\(.*\)\$|\1|g"` + test "X$xcomp_conf" != "X" || { + echo "$0: Missing xcomp-conf file name" + exit 1 + } + test -f "$xcomp_conf" || { + echo "$0: Missing xcomp-conf file: $xcomp_conf" + exit 1 + } + . "$xcomp_conf" + test $? -eq 0 || { + echo "$0: Failed to read xcomp-conf file: $conf" + exit 1 + } + test "X$erl_xcomp_build" = "X" || build_value="$erl_xcomp_build" + test "X$erl_xcomp_host" = "X" || host_value="$erl_xcomp_host" + unset erl_xcomp_build + unset erl_xcomp_host + CONFIG_FLAGS="$CONFIG_FLAGS $erl_xcomp_configure_flags" + unset erl_xcomp_configure_flags + env_to_config_flags $erl_build_tool_vars $erl_xcomp_vars;; + *[!$DONT_QUOTE]*) + config_eval=eval + new_arg=`echo "X$arg" | sed "s|^X||;s|\([^$DONT_QUOTE]\)|\\\\\\\\\1|g"` + CONFIG_FLAGS="$CONFIG_FLAGS $new_arg";; + *) + CONFIG_FLAGS="$CONFIG_FLAGS $arg";; + esac + done + + CONFIG_FLAGS="--host=$host_value $CONFIG_FLAGS" + test "X$build_value" != "Xguess" || build_value="$BUILDSYS" + test "X$build_value" = "X" || CONFIG_FLAGS="--build=$build_value $CONFIG_FLAGS" + + # Configure build system for boot strap + cat <<EOF + +* +* Configuring the bootstrap build system... +* + +EOF + + # hide build tools environment which is for the cross configure + set_config_flags $CONFIG_FLAGS + hide_vars CONFIG_FLAGS + + set_config_flags + run_configure --enable-bootstrap-only + + # restore the hidden build tools environment for the cross configure + restore_vars CONFIG_FLAGS + + COMPFIX="" + cat <<EOF + +* +* Configuring the cross host system ($host_value)... +* + +EOF + # We don't pass the command line here since we already have moved it + # into CONFIG_FLAGS + run_configure + + return 0 +} + do_configure () { setup_make mk_targetdir - save_ot="$OVERRIDE_TARGET" - save_t="$TARGET" + + # Get `erl_build_tool_vars' + . "$ERL_TOP/erl-build-tool-vars.sh" || exit 1 + if [ ! -z "$OVERRIDE_CONFIGURE" ]; then case $TARGET in vxworks_*) ( cd erts/autoconf && \ $ERL_TOP/erts/autoconf/configure.vxworks $TARGET ) - echo "Configuring for build host too..." >&2 - OVERRIDE_TARGET= - export OVERRIDE_TARGET - TARGET=`$ERL_TOP/erts/autoconf/config.guess` - mk_targetdir;; + echo "Configuring for build system too..." >&2 + hide_vars OVERRIDE_TARGET TARGET + TARGET=$BUILDSYS + export TARGET + mk_targetdir + set_config_flags "$@" + run_configure "$@" + restore_vars OVERRIDE_TARGET TARGET;; *) echo "Unexpected target when ordinary configure is" \ "overridden" >&2 @@ -282,106 +528,13 @@ do_configure () exit 1;; esac else - if [ "x$OVERRIDE_TARGET" != "x" -a "x$OVERRIDE_TARGET" != "xwin32" ]; then - save_CONFIG_FLAGS="$CONFIG_FLAGS" - if [ "x$erl_xcomp_configure_flags" != "x" ]; then - set_config_flags $erl_xcomp_configure_flags - else - set_config_flags $CONFIG_FLAGS "$@" - fi - COMPFIX="" - save_CC="$CC" - save_LD="$LD" - save_CFLAGS="$CFLAGS" - save_LDFLAGS="$LDFLAGS" - save_RANLIB="$RANLIB" - save_AR="$AR" - save_DED_LD="$DED_LD" - save_DED_LDFLAGS="$DED_LDFLAGS" - save_DED_LD_FLAG_RUNTIME_LIBRARY_PATH="$DED_LD_FLAG_RUNTIME_LIBRARY_PATH" - save_CPP="$CPP" - if [ "x$erl_xcomp_cc" != "x" ]; then - CC="$erl_xcomp_cc" - fi - if [ "x$erl_xcomp_cpp" != "x" ]; then - CPP="$erl_xcomp_cpp" - fi - if [ "x$erl_xcomp_ld" != "x" ]; then - LD="$erl_xcomp_ld" - fi - if [ "x$erl_xcomp_cflags" != "x" ]; then - CFLAGS="$erl_xcomp_cflags" - fi - if [ "x$erl_xcomp_ldflags" != "x" ]; then - LDFLAGS="$erl_xcomp_ldflags" - fi - if [ "x$erl_xcomp_ranlib" != "x" ]; then - RANLIB="$erl_xcomp_ranlib" - fi - if [ "x$erl_xcomp_ar" != "x" ]; then - AR="$erl_xcomp_ar" - fi - if [ "x$erl_xcomp_ded_ld" != "x" ]; then - DED_LD="$erl_xcomp_ded_ld" - fi - if [ "x$erl_xcomp_ded_ld_runtime_library_path" != "x" ]; then - DED_LD_FLAG_RUNTIME_LIBRARY_PATH="$erl_xcomp_ded_ld_runtime_library_path" - fi - if [ "x$erl_xcomp_ded_ldflags" != "x" ]; then - DED_LDFLAGS="$erl_xcomp_ded_ldflags" - fi - export CC LD CFLAGS LDFLAGS RANLIB AR DED_LD DED_LDFLAGS DED_LD_FLAG_RUNTIME_LIBRARY_PATH CPP - - # - # The environment for compilers, cflags et al are sometimes hard - # to pass along in recursive configure, why each cross configure - # is run separately instead. This variable (crossdirs) need to - # be updated whenever a new application needs a configure - # of it's own, at least until I get the recirsive configure - # to work for the complicated environment needed by i.e. vxworks - # compilers. It's a kludge, but a working one... - # - - crossdirs="erts lib/common_test lib/erl_interface lib/gs lib/megaco lib/odbc lib/snmp lib/wx" - - if [ -z "$ONLY_ERTS" ]; then - for x in $crossdirs; do - if [ -f "$x/configure" ]; then - (cd $x;./configure --host=$erl_xcomp_hw --with-xcompconf=$ERL_XCOMP_CONF $CONFIG_FLAGS) || exit 1 - fi - done - else - (cd $ERL_TOP/erts;./configure --host=$erl_xcomp_hw --with-xcompconf=$ERL_XCOMP_CONF $CONFIG_FLAGS) || exit 1 - fi - CC="$save_CC" - LD="$save_LD" - CFLAGS="$save_CFLAGS" - LDFLAGS="$save_LDFLAGS" - RANLIB="$save_RANLIB" - AR="$save_AR" - DED_LD="$save_DED_LD" - DED_LDFLAGS="$save_DED_LDFLAGS" - DED_LD_FLAG_RUNTIME_LIBRARY_PATH="$save_DED_LD_FLAG_RUNTIME_LIBRARY_PATH" - CPP="$save_CPP" - export CC LD CFLAGS LDFLAGS RANLIB AR DED_LD DED_LDFLAGS DED_LD_FLAG_RUNTIME_LIBRARY_PATH CPP - echo "Configuring for build host too..." >&2 - OVERRIDE_TARGET= - export OVERRIDE_TARGET - TARGET=`$ERL_TOP/erts/autoconf/config.guess` - mk_targetdir - CONFIG_FLAGS="$save_CONFIG_FLAGS" + try_cross_configure "$@" + if [ $cross_configure = no ]; then + CONFIG_FLAGS= + set_config_flags "$@" + run_configure "$@" fi fi - set_config_flags $CONFIG_FLAGS "$@" - if [ -z "$ONLY_ERTS" ]; then - ./configure $CONFIG_FLAGS || exit 1 - else - echo "erts/configure $CONFIG_FLAGS" - (cd $ERL_TOP/erts; ./configure $CONFIG_FLAGS) || exit 1 - fi - OVERRIDE_TARGET="$save_ot" - export OVERRIDE_TARGET - TARGET="$save_t" } do_lazy_configure () @@ -391,7 +544,10 @@ do_lazy_configure () echo "Not supported for cross compilation" >&2 exit 1 fi - set_config_flags $CONFIG_FLAGS "$@" + CONFIG_FLAGS= + set_config_flags "$@" + CONFIGURE_FLAGS="$@" + [ "$CONFIG_FLAGS" = "" ] || CONFIGURE_FLAGS="$CONFIG_FLAGS $CONFIGURE_FLAGS" for c_dir in $AUTOCONF_SUBDIRS; do if test -f $ERL_TOP/$c_dir/configure.in; then dir=$ERL_TOP/$c_dir @@ -406,7 +562,7 @@ do_lazy_configure () $MAKE -f $ERL_TOP/make/lazy_configure.mk \ MAKE="$MAKE" TARGET=$TARGET \ ERL_TOP=$ERL_TOP \ - CONFIGURE_FLAGS="$CONFIG_FLAGS" \ + CONFIGURE_FLAGS="$CONFIGURE_FLAGS" \ CONFIGURE_DIR=$dir \ EXTRA_CONFIGURE_DEPENDENCIES=$xc_dep \ EXTRA_CONFIG_STATUS_DEPENDENCIES=$xcs_dep \ @@ -549,25 +705,6 @@ echo_env_vxworks () echo_envinfo } -echo_env_cross () -{ - if [ -z "$1" ]; then - echo "env_cross requires path to cross compilation configuration" >&2 - exit 1 - fi - - if [ ! -f $1 ]; then - echo "No such file: $1" >&2 - exit 1 - fi - . $1 - check_xcomp_file $1 - echo_env_erltop - echo_setenv ERL_XCOMP_CONF $1 ';' - echo_setenv OVERRIDE_TARGET $erl_xcomp_target - echo_envinfo -} - echo_env_win32 () { #echo_envinfo @@ -739,27 +876,27 @@ do_noboot_lib_and_erts () { setup_make EMULATORS=emulator + if [ X`$MAKE is_cross_configured` = Xyes ]; then + TARGET=`$MAKE target_configured` + fi if [ "x$MAKE" != "x$clearmake" ]; then $MAKE MAKE="$MAKE" TARGET=$TARGET OTP_SMALL_BUILD=$OTP_SMALL_BUILD depend || exit 1; fi $MAKE MAKE="$MAKE" TARGET=$TARGET OTP_SMALL_BUILD=$OTP_SMALL_BUILD TYPE=$TYPE FLAVOR=$FLAVOR noboot || exit 1 } -do_primary_cross () +do_primary () { - save_t="$TARGET" - save_ot="$OVERRIDE_TARGET" - OVERRIDE_TARGET= - export OVERRIDE_TARGET - TARGET=`$ERL_TOP/erts/autoconf/config.guess` - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET primary_bootstrap || exit 1; - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET all_bootstraps || exit 1 - OVERRIDE_TARGET="$save_ot" - export OVERRIDE_TARGET - TARGET="$save_t" + setup_make + if [ "x$OVERRIDE_TARGET" != "x" -a "x$OVERRIDE_TARGET" != "xwin32" ]; then + echo "OVERRIDE_TARGET set" >&2 + exit 1 + else + $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET primary_bootstrap || exit 1; + fi } -do_primary () +do_primary_git () { setup_make if [ "x$OVERRIDE_TARGET" != "x" -a "x$OVERRIDE_TARGET" != "xwin32" ]; then @@ -767,8 +904,15 @@ do_primary () else $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET primary_bootstrap || exit 1; fi + git add -A bootstrap/lib/kernel \ + bootstrap/lib/stdlib \ + bootstrap/lib/compiler \ + bootstrap/lib/orber/include \ + bootstrap/bin + git commit -m 'Update primary bootstrap' } + do_prepare () { CT=`lookup_prog_in_path cleartool` @@ -863,7 +1007,7 @@ do_prepare_prel () (cd $ERL_TOP/erts/preloaded/src && $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET prepare) || exit 1 echo '*****************************************************' echo "Prepared for new preloaded code build - " - echo "Directory ERL_TOP/erts/prelaoded/ebin completely" + echo "Directory ERL_TOP/erts/preloaded/ebin completely" echo "checked out." echo '*****************************************************' } @@ -871,10 +1015,6 @@ do_prepare_prel () do_update_prel () { CT=`lookup_prog_in_path cleartool` - if [ X"$CLEARCASE_ROOT" = X"" -o X"$CT" = X"" ]; then - echo "To prepare for update of preloaded code, you have to run in a Clearcase view" >&2 - return - fi if [ X"$ERL_TOP" = X"" ]; then echo "ERL_TOP is not set." >&2 @@ -890,6 +1030,16 @@ do_update_prel () echo '*****************************************************' } +do_update_prel_git () +{ + setup_make + (cd $ERL_TOP/erts/preloaded/src && $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET clean) + $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET preloaded || exit 1 + (cd $ERL_TOP/erts/preloaded/src && $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET copy) + git add -A $ERL_TOP/erts/preloaded/ebin/*.beam + git commit -m 'Update preloaded modules' +} + do_commit_prel () { CT=`lookup_prog_in_path cleartool` @@ -931,58 +1081,54 @@ do_cancel_prel () echo '*****************************************************' } - - -do_boot_cross () -{ - SAVE_TARGET=$TARGET - SAVE_OVERRIDE_TARGET=$OVERRIDE_TARGET - OVERRIDE_TARGET= - TARGET=`$ERL_TOP/erts/autoconf/config.guess` - - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET all_bootstraps || exit 1; - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET local_setup || exit 1; - TARGET=$SAVE_TARGET - OVERRIDE_TARGET=$SAVE_OVERRIDE_TARGET - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET libs || exit 1; - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET depend || exit 1; - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET emulator || exit 1; -} - -do_boot_emu_cross () -{ - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET emulator || exit 1; -} do_boot () { setup_make - if [ "x$OVERRIDE_TARGET" != "x" -a "x$OVERRIDE_TARGET" != "xwin32" ]; then - do_boot_cross - else - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET all || exit 1 + + # Bootstrap if we are cross compiling + if [ X`$MAKE is_cross_configured` = Xyes ]; then + TARGET=$BUILDSYS + $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT CROSS_COMPILING=no TARGET=$TARGET bootstrap || exit 1 + TARGET=`$MAKE target_configured` + elif [ "x$OVERRIDE_TARGET" != "x" -a "x$OVERRIDE_TARGET" != "xwin32" ]; then + hide_vars OVERRIDE_TARGET TARGET + TARGET=$BUILDSYS + $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET bootstrap || exit 1 + + restore_vars OVERRIDE_TARGET TARGET fi + + # Build it (including bootstrap if not cross compiling) + $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET all || exit 1 } do_boot_emu () { setup_make - if [ "x$OVERRIDE_TARGET" != "x" -a "x$OVERRIDE_TARGET" != "xwin32" ]; then - do_boot_emu_cross - else - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET emulator || exit 1 + if [ X`$MAKE is_cross_configured` = Xyes ]; then + TARGET=`$MAKE target_configured` fi + $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET emulator || exit 1 } do_release () { setup_make - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET RELEASE_ROOT=$1 release || exit 1 + if [ X`$MAKE is_cross_configured` = Xyes ]; then + TARGET=`$MAKE target_configured` + fi + $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET \ + RELEASE_ROOT=$1 OTP_STRICT_INSTALL=$OTP_STRICT_INSTALL \ + release || exit 1 } do_tests () { setup_make + if [ X`$MAKE is_cross_configured` = Xyes ]; then + TARGET=`$MAKE target_configured` + fi if [ X"$1" = X"" ]; then $MAKE MAKE="$MAKE" TARGET=$TARGET release_tests || exit 1 else @@ -1099,6 +1245,8 @@ check_erltop cd $ERL_TOP +determine_version_controller + # Unset ERL_FLAGS and ERL_<Release>_FLAGS to prevent, for instance, # a value of "-hybrid" to run the hybrid emulator during bootstrap. sys_vsn=`awk '/SYSTEM_VSN = / {print $3}' < erts/vsn.mk` @@ -1158,10 +1306,6 @@ else fi export OTP_SMALL_BUILD -if [ "x$ERL_XCOMP_CONF" != "x" ]; then - . $ERL_XCOMP_CONF -fi - TYPE= case "$1" in all) @@ -1203,7 +1347,7 @@ case "$1" in do_lazy_configure_target_clean;; opt) do_boot;; - plain|smp|hybrid|nofrag) + plain|smp|hybrid) if [ $minus_a_flag = false ]; then TYPE=opt fi; @@ -1215,7 +1359,11 @@ case "$1" in prepare_primary) do_prepare;; update_primary) - do_primary;; + case $version_controller in + git) do_primary_git ;; + clearcase) do_primary ;; + none) do_primary ;; + esac ;; commit_primary) do_commit;; cancel_primary) @@ -1223,7 +1371,11 @@ case "$1" in prepare_preloaded) do_prepare_prel;; update_preloaded) - do_update_prel;; + case $version_controller in + git) do_update_prel_git ;; + clearcase) do_update_prel ;; + none) do_update_prel ;; + esac ;; commit_preloaded) do_commit_prel;; cancel_preloaded) |