common/autoconf/builddeps.m4

changeset 425
e1830598f0b7
child 445
efd26e051e50
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/common/autoconf/builddeps.m4	Tue Apr 10 08:18:28 2012 -0700
     1.3 @@ -0,0 +1,231 @@
     1.4 +#
     1.5 +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
     1.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.7 +#
     1.8 +# This code is free software; you can redistribute it and/or modify it
     1.9 +# under the terms of the GNU General Public License version 2 only, as
    1.10 +# published by the Free Software Foundation.  Oracle designates this
    1.11 +# particular file as subject to the "Classpath" exception as provided
    1.12 +# by Oracle in the LICENSE file that accompanied this code.
    1.13 +#
    1.14 +# This code is distributed in the hope that it will be useful, but WITHOUT
    1.15 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    1.16 +# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    1.17 +# version 2 for more details (a copy is included in the LICENSE file that
    1.18 +# accompanied this code).
    1.19 +#
    1.20 +# You should have received a copy of the GNU General Public License version
    1.21 +# 2 along with this work; if not, write to the Free Software Foundation,
    1.22 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    1.23 +#
    1.24 +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    1.25 +# or visit www.oracle.com if you need additional information or have any
    1.26 +# questions.
    1.27 +#
    1.28 +
    1.29 +AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS],
    1.30 +[
    1.31 +    define(LIST_OF_BUILD_DEPENDENCIES,)
    1.32 +    if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
    1.33 +        if test "x$with_builddeps_conf" != x; then
    1.34 +            AC_MSG_CHECKING([for supplied builddeps configuration file])
    1.35 +            builddepsfile=$with_builddeps_conf        
    1.36 +            if test -s $builddepsfile; then
    1.37 +                . $builddepsfile
    1.38 +                AC_MSG_RESULT([loaded!])
    1.39 +            else
    1.40 +               AC_ERROR([The given builddeps conf file $with_builddeps_conf could not be loaded!])
    1.41 +           fi
    1.42 +        else
    1.43 +            AC_MSG_CHECKING([for builddeps.conf files in sources...])
    1.44 +            builddepsfile=`mktemp`
    1.45 +            touch $builddepsfile
    1.46 +            # Put all found confs into a single file.
    1.47 +            find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile
    1.48 +            # Source the file to acquire the variables
    1.49 +            if test -s $builddepsfile; then
    1.50 +                . $builddepsfile
    1.51 +                AC_MSG_RESULT([found at least one!])
    1.52 +            else
    1.53 +               AC_ERROR([Could not find any builddeps.conf at all!])
    1.54 +           fi
    1.55 +        fi
    1.56 +        # Create build and host names that use _ instead of "-" and ".".
    1.57 +        # This is necessary to use them in variable names.
    1.58 +        build_var=`echo ${build} | tr '-' '_' | tr '.' '_'`
    1.59 +        host_var=`echo ${host} | tr '-' '_' | tr '.' '_'`
    1.60 +        # Extract rewrite information for build and host
    1.61 +        eval rewritten_build=\${REWRITE_${build_var}}
    1.62 +        if test "x$rewritten_build" = x; then
    1.63 +            rewritten_build=${build}
    1.64 +            echo Build stays the same $rewritten_build
    1.65 +        else
    1.66 +            echo Rewriting build for builddeps into $rewritten_build
    1.67 +        fi
    1.68 +        eval rewritten_host=\${REWRITE_${host_var}}
    1.69 +        if test "x$rewritten_host" = x; then
    1.70 +            rewritten_host=${host}
    1.71 +            echo Host stays the same $rewritten_host
    1.72 +        else
    1.73 +            echo Rewriting host for builddeps into $rewritten_host
    1.74 +        fi
    1.75 +        rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'`
    1.76 +        rewritten_host_var=`echo ${rewritten_host} | tr '-' '_' | tr '.' '_'`        
    1.77 +    fi
    1.78 +    AC_CHECK_PROGS(BDEPS_UNZIP, [7z unzip])
    1.79 +    if test "x$BDEPS_UNZIP" = x7z; then
    1.80 +        BDEPS_UNZIP="7z x"
    1.81 +    fi
    1.82 +
    1.83 +    AC_CHECK_PROGS(BDEPS_FTP, [wget lftp ftp]) 
    1.84 +])
    1.85 +
    1.86 +AC_DEFUN([BDEPS_FTPGET],
    1.87 +[
    1.88 +    # $1 is the ftp://abuilddeps.server.com/libs/cups.zip
    1.89 +    # $2 is the local file name for the downloaded file.
    1.90 +    VALID_TOOL=no
    1.91 +    if test "x$BDEPS_FTP" = xwget; then
    1.92 +       VALID_TOOL=yes
    1.93 +       wget -O $2 $1
    1.94 +    fi
    1.95 +    if test "x$BDEPS_FTP" = xlftp; then
    1.96 +       VALID_TOOL=yes
    1.97 +       lftp -c "get $1 -o $2"
    1.98 +    fi
    1.99 +    if test "x$BDEPS_FTP" = xftp; then
   1.100 +        VALID_TOOL=yes
   1.101 +        FTPSERVER=`echo $1 | cut -f 3 -d '/'`
   1.102 +        FTPPATH=`echo $1 | cut -f 4- -d '/'`
   1.103 +        FTPUSERPWD=${FTPSERVER%%@*}
   1.104 +        if test "x$FTPSERVER" != "x$FTPUSERPWD"; then
   1.105 +            FTPUSER=${userpwd%%:*}
   1.106 +            FTPPWD=${userpwd#*@}
   1.107 +            FTPSERVER=${FTPSERVER#*@}
   1.108 +        else
   1.109 +            FTPUSER=ftp
   1.110 +            FTPPWD=ftp
   1.111 +        fi
   1.112 +        # the "pass" command does not work on some
   1.113 +        # ftp clients (read ftp.exe) but if it works,
   1.114 +        # passive mode is better!
   1.115 +        (\
   1.116 +            echo "user $FTPUSER $FTPPWD"        ;\
   1.117 +            echo "pass"                         ;\
   1.118 +            echo "bin"                          ;\
   1.119 +            echo "get $FTPPATH $2"              ;\
   1.120 +        ) | ftp -in $FTPSERVER
   1.121 +    fi
   1.122 +    if test "x$VALID_TOOL" != xyes; then
   1.123 +       AC_ERROR([I do not know how to use the tool: $BDEPS_FTP])
   1.124 +    fi
   1.125 +])
   1.126 +
   1.127 +AC_DEFUN([BDEPS_CHECK_MODULE],
   1.128 +[
   1.129 +    define([LIST_OF_BUILD_DEPENDENCIES],LIST_OF_BUILD_DEPENDENCIES[$2=$3'\n'])
   1.130 +    if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
   1.131 +        # Source the builddeps file again, to make sure it uses the latest variables!
   1.132 +        . $builddepsfile
   1.133 +        # Look for a host and build machine specific resource!
   1.134 +        eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}}
   1.135 +        if test "x$resource" = x; then
   1.136 +            # Ok, lets instead look for a host specific resource
   1.137 +            eval resource=\${builddep_$2_HOST_${rewritten_host_var}}
   1.138 +        fi
   1.139 +        if test "x$resource" = x; then
   1.140 +            # Ok, lets instead look for a build specific resource
   1.141 +            eval resource=\${builddep_$2_BUILD_${rewritten_build_var}}
   1.142 +        fi
   1.143 +        if test "x$resource" = x; then
   1.144 +            # Ok, lets instead look for a generic resource
   1.145 +            # (The $2 comes from M4 and not the shell, thus no need for eval here.)
   1.146 +            resource=${builddep_$2}
   1.147 +        fi
   1.148 +        if test "x$resource" != x; then
   1.149 +            AC_MSG_NOTICE([Using builddeps $resource for $2])
   1.150 +	    # If the resource in the builddeps.conf file is an existing directory,
   1.151 +	    # for example /java/linux/cups
   1.152 +	    if test -d ${resource}; then
   1.153 +	       depdir=${resource}
   1.154 +	    else
   1.155 +		BDEPS_FETCH($2, $resource, $with_builddeps_server, $with_builddeps_dir, depdir)
   1.156 +	    fi
   1.157 +            # Source the builddeps file again, because in the previous command, the depdir
   1.158 +            # was updated to point at the current build dependency install directory.
   1.159 +            . $builddepsfile
   1.160 +            # Now extract variables from the builddeps.conf files.
   1.161 +            theroot=${builddep_$2_ROOT}
   1.162 +            thecflags=${builddep_$2_CFLAGS}
   1.163 +            thelibs=${builddep_$2_LIBS}
   1.164 +            if test "x$depdir" = x; then
   1.165 +                AC_ERROR([Could not download build dependency $2])
   1.166 +            fi
   1.167 +            $1=$depdir
   1.168 +            if test "x$theroot" != x; then
   1.169 +               $1="$theroot"
   1.170 +            fi
   1.171 +            if test "x$thecflags" != x; then
   1.172 +               $1_CFLAGS="$thecflags"
   1.173 +            fi
   1.174 +            if test "x$thelibs" != x; then
   1.175 +               $1_LIBS="$thelibs"
   1.176 +            fi
   1.177 +            m4_default([$4], [:])
   1.178 +            m4_ifvaln([$5], [else $5])
   1.179 +        fi
   1.180 +        m4_ifvaln([$5], [else $5])
   1.181 +    fi
   1.182 +])
   1.183 +
   1.184 +AC_DEFUN([BDEPS_FETCH],
   1.185 +[
   1.186 +# $1 is for example mymodule
   1.187 +# $2 is for example libs/general/libmymod_1_2_3.zip
   1.188 +# $3 is for example ftp://mybuilddeps.myserver.com/builddeps
   1.189 +# $4 is for example /localhome/builddeps
   1.190 +# $5 is the name of the variable into which we store the depdir, eg MYMOD
   1.191 +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and
   1.192 +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3
   1.193 +    filename=`basename $2`
   1.194 +    filebase=`echo $filename | sed 's/\.[[^\.]]*$//'`
   1.195 +    filebase=${filename%%.*}
   1.196 +    extension=${filename#*.}
   1.197 +    installdir=$4/$filebase
   1.198 +    if test ! -f $installdir/$filename.unpacked; then
   1.199 +        AC_MSG_NOTICE([Downloading build dependency $1 from $3/$2 and installing into $installdir])
   1.200 +        if test ! -d $installdir; then
   1.201 +            mkdir -p $installdir
   1.202 +        fi
   1.203 +        if test ! -d $installdir; then
   1.204 +            AC_ERROR([Could not create directory $installdir])
   1.205 +        fi
   1.206 +        tmpfile=`mktemp $installdir/$1.XXXXXXXXX`
   1.207 +        touch $tmpfile    
   1.208 +        if test ! -f $tmpfile; then
   1.209 +            AC_ERROR([Could not create files in directory $installdir])
   1.210 +        fi
   1.211 +        BDEPS_FTPGET([$3/$2] , [$tmpfile])
   1.212 +        mv $tmpfile $installdir/$filename
   1.213 +        if test ! -s $installdir/$filename; then 
   1.214 +            AC_ERROR([Could not download $3/$2])
   1.215 +        fi
   1.216 +        case "$extension" in
   1.217 +            zip)  echo "Unzipping $installdir/$filename..."
   1.218 +               (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked)
   1.219 +            ;;
   1.220 +            tar.gz) echo "Untaring $installdir/$filename..."
   1.221 +               (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
   1.222 +            ;;
   1.223 +            tgz) echo "Untaring $installdir/$filename..."
   1.224 +               (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
   1.225 +            ;;
   1.226 +            *) AC_ERROR([Cannot handle build depency archive with extension $extension])
   1.227 +            ;;
   1.228 +        esac
   1.229 +    fi
   1.230 +    if test -f $installdir/$filename.unpacked; then
   1.231 +        $5=$installdir
   1.232 +    fi
   1.233 +])
   1.234 +

mercurial