| #!/bin/bash -e | |
| # | |
| # Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. | |
| # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| # | |
| # This code is free software; you can redistribute it and/or modify it | |
| # under the terms of the GNU General Public License version 2 only, as | |
| # published by the Free Software Foundation. Oracle designates this | |
| # particular file as subject to the "Classpath" exception as provided | |
| # by Oracle in the LICENSE file that accompanied this code. | |
| # | |
| # This code is distributed in the hope that it will be useful, but WITHOUT | |
| # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| # version 2 for more details (a copy is included in the LICENSE file that | |
| # accompanied this code). | |
| # | |
| # You should have received a copy of the GNU General Public License version | |
| # 2 along with this work; if not, write to the Free Software Foundation, | |
| # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| # | |
| # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| # or visit www.oracle.com if you need additional information or have any | |
| # questions. | |
| # | |
| # Create a bundle in OpenJDK build folder, containing what's needed to run | |
| # the 'autoconf' program by the OpenJDK build. To override TARGET_PLATFORM | |
| # just set the variable before running this script. | |
| # This script fetches sources from network so make sure your proxy is setup appropriately. | |
| # colored print to highlight some of the logs | |
| function print_log() | |
| { | |
| Color_Cyan='\033[1;36m' # Cyan | |
| Color_Off='\033[0m' # Reset color | |
| printf "${Color_Cyan}> $1${Color_Off}\n" | |
| } | |
| # Autoconf depends on m4, so download and build that first. | |
| AUTOCONF_VERSION=2.69 | |
| M4_VERSION=1.4.18 | |
| PACKAGE_VERSION=1.0.1 | |
| case `uname -s` in | |
| Darwin) | |
| os=macosx | |
| ;; | |
| Linux) | |
| os=linux | |
| ;; | |
| CYGWIN*) | |
| os=cygwin | |
| ;; | |
| esac | |
| case `uname -m` in | |
| arm64|aarch64) | |
| arch=aarch64 | |
| ;; | |
| amd64|x86_64|x64) | |
| arch=x64 | |
| ;; | |
| esac | |
| TARGET_PLATFORM=${TARGET_PLATFORM:="${os}_${arch}"} | |
| MODULE_NAME=autoconf-$TARGET_PLATFORM-$AUTOCONF_VERSION+$PACKAGE_VERSION | |
| BUNDLE_NAME=$MODULE_NAME.tar.gz | |
| SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)" | |
| BASEDIR="$(cd "$SCRIPT_DIR/../.." > /dev/null && pwd)" | |
| OUTPUT_ROOT="$BASEDIR/build/autoconf" | |
| IMAGE_DIR=$OUTPUT_ROOT/$MODULE_NAME | |
| mkdir -p $IMAGE_DIR/usr | |
| cd $OUTPUT_ROOT | |
| # Download and build m4 | |
| if test "x$TARGET_PLATFORM" = xcygwin_x64; then | |
| # On cygwin 64-bit, just copy the cygwin .exe file | |
| mkdir -p $IMAGE_DIR/usr/bin | |
| cp /usr/bin/m4 $IMAGE_DIR/usr/bin | |
| elif test "x$TARGET_PLATFORM" = xcygwin_x86; then | |
| # On cygwin 32-bit, just copy the cygwin .exe file | |
| mkdir -p $IMAGE_DIR/usr/bin | |
| cp /usr/bin/m4 $IMAGE_DIR/usr/bin | |
| elif test "x$TARGET_PLATFORM" = xlinux_x64; then | |
| M4_VERSION=1.4.13-5 | |
| wget https://yum.oracle.com/repo/OracleLinux/OL6/latest/x86_64/getPackage/m4-$M4_VERSION.el6.x86_64.rpm | |
| cd $IMAGE_DIR | |
| rpm2cpio $OUTPUT_ROOT/m4-$M4_VERSION.el6.x86_64.rpm | cpio -d -i | |
| elif test "x$TARGET_PLATFORM" = xlinux_x86; then | |
| M4_VERSION=1.4.13-5 | |
| wget http://yum.oracle.com/repo/OracleLinux/OL6/latest/i386/getPackage/m4-$M4_VERSION.el6.i686.rpm | |
| cd $IMAGE_DIR | |
| rpm2cpio $OUTPUT_ROOT/m4-$M4_VERSION.el6.i686.rpm | cpio -d -i | |
| else | |
| print_log "m4: download" | |
| wget https://ftp.gnu.org/gnu/m4/m4-$M4_VERSION.tar.gz | |
| tar -xzf m4-$M4_VERSION.tar.gz | |
| cd m4-$M4_VERSION | |
| print_log "m4: configure" | |
| ./configure --prefix=$IMAGE_DIR/usr CFLAGS="-w -Wno-everything" | |
| print_log "m4: make" | |
| make | |
| print_log "m4: make install" | |
| make install | |
| cd .. | |
| fi | |
| # Download and build autoconf | |
| print_log "autoconf: download" | |
| wget https://ftp.gnu.org/gnu/autoconf/autoconf-$AUTOCONF_VERSION.tar.gz | |
| tar -xzf autoconf-$AUTOCONF_VERSION.tar.gz | |
| cd autoconf-$AUTOCONF_VERSION | |
| print_log "autoconf: configure" | |
| ./configure --prefix=$IMAGE_DIR/usr M4=$IMAGE_DIR/usr/bin/m4 | |
| print_log "autoconf: make" | |
| make | |
| print_log "autoconf: make install" | |
| make install | |
| cd .. | |
| # The resulting scripts from installation folder use absolute paths to reference other files within installation folder | |
| print_log "replace absolue paths from installation files with a relative ." | |
| perl -pi -e "s!$IMAGE_DIR/!./!" $IMAGE_DIR/usr/bin/auto* $IMAGE_DIR/usr/share/autoconf/autom4te.cfg | |
| print_log "creating $IMAGE_DIR/autoconf wrapper script" | |
| cat > $IMAGE_DIR/autoconf << EOF | |
| #!/bin/bash | |
| # Get an absolute path to this script | |
| this_script_dir=\`dirname \$0\` | |
| this_script_dir=\`cd \$this_script_dir > /dev/null && pwd\` | |
| export M4="\$this_script_dir/usr/bin/m4" | |
| export AUTOM4TE="\$this_script_dir/usr/bin/autom4te" | |
| export AUTOCONF="\$this_script_dir/usr/bin/autoconf" | |
| export AUTOHEADER="\$this_script_dir/usr/bin/autoheader" | |
| export AC_MACRODIR="\$this_script_dir/usr/share/autoconf" | |
| export autom4te_perllibdir="\$this_script_dir/usr/share/autoconf" | |
| PREPEND_INCLUDE="--prepend-include \$this_script_dir/usr/share/autoconf" | |
| exec \$this_script_dir/usr/bin/autoconf \$PREPEND_INCLUDE "\$@" | |
| EOF | |
| chmod +x $IMAGE_DIR/autoconf | |
| print_log "archiving $IMAGE_DIR directory as $OUTPUT_ROOT/$BUNDLE_NAME" | |
| cd $IMAGE_DIR | |
| tar -cvzf $OUTPUT_ROOT/$BUNDLE_NAME * |