1 #
   2 # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
   3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4 #
   5 # This code is free software; you can redistribute it and/or modify it
   6 # under the terms of the GNU General Public License version 2 only, as
   7 # published by the Free Software Foundation.  Oracle designates this
   8 # particular file as subject to the "Classpath" exception as provided
   9 # by Oracle in the LICENSE file that accompanied this code.
  10 #
  11 # This code is distributed in the hope that it will be useful, but WITHOUT
  12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14 # version 2 for more details (a copy is included in the LICENSE file that
  15 # accompanied this code).
  16 #
  17 # You should have received a copy of the GNU General Public License version
  18 # 2 along with this work; if not, write to the Free Software Foundation,
  19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20 #
  21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22 # or visit www.oracle.com if you need additional information or have any
  23 # questions.
  24 #
  25 
  26 AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS],
  27 [
  28     define(LIST_OF_BUILD_DEPENDENCIES,)
  29     if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
  30         if test "x$with_builddeps_conf" != x; then
  31             AC_MSG_CHECKING([for supplied builddeps configuration file])
  32             builddepsfile=$with_builddeps_conf        
  33             if test -s $builddepsfile; then
  34                 . $builddepsfile
  35                 AC_MSG_RESULT([loaded!])
  36             else
  37                AC_ERROR([The given builddeps conf file $with_builddeps_conf could not be loaded!])
  38            fi
  39         else
  40             AC_MSG_CHECKING([for builddeps.conf files in sources...])
  41             builddepsfile=`mktemp`
  42             touch $builddepsfile
  43             # Put all found confs into a single file.
  44             find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile
  45             # Source the file to acquire the variables
  46             if test -s $builddepsfile; then
  47                 . $builddepsfile
  48                 AC_MSG_RESULT([found at least one!])
  49             else
  50                AC_ERROR([Could not find any builddeps.conf at all!])
  51            fi
  52         fi
  53         # Create build and host names that use _ instead of "-" and ".".
  54         # This is necessary to use them in variable names.
  55         build_var=`echo ${build} | tr '-' '_' | tr '.' '_'`
  56         host_var=`echo ${host} | tr '-' '_' | tr '.' '_'`
  57         # Extract rewrite information for build and host
  58         eval rewritten_build=\${REWRITE_${build_var}}
  59         if test "x$rewritten_build" = x; then
  60             rewritten_build=${build}
  61             echo Build stays the same $rewritten_build
  62         else
  63             echo Rewriting build for builddeps into $rewritten_build
  64         fi
  65         eval rewritten_host=\${REWRITE_${host_var}}
  66         if test "x$rewritten_host" = x; then
  67             rewritten_host=${host}
  68             echo Host stays the same $rewritten_host
  69         else
  70             echo Rewriting host for builddeps into $rewritten_host
  71         fi
  72         rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'`
  73         rewritten_host_var=`echo ${rewritten_host} | tr '-' '_' | tr '.' '_'`        
  74     fi
  75     AC_CHECK_PROGS(BDEPS_UNZIP, [7z unzip])
  76     if test "x$BDEPS_UNZIP" = x7z; then
  77         BDEPS_UNZIP="7z x"
  78     fi
  79 
  80     AC_CHECK_PROGS(BDEPS_FTP, [wget lftp ftp]) 
  81 ])
  82 
  83 AC_DEFUN([BDEPS_FTPGET],
  84 [
  85     # $1 is the ftp://abuilddeps.server.com/libs/cups.zip
  86     # $2 is the local file name for the downloaded file.
  87     VALID_TOOL=no
  88     if test "x$BDEPS_FTP" = xwget; then
  89        VALID_TOOL=yes
  90        wget -O $2 $1
  91     fi
  92     if test "x$BDEPS_FTP" = xlftp; then
  93        VALID_TOOL=yes
  94        lftp -c "get $1 -o $2"
  95     fi
  96     if test "x$BDEPS_FTP" = xftp; then
  97         VALID_TOOL=yes
  98         FTPSERVER=`echo $1 | cut -f 3 -d '/'`
  99         FTPPATH=`echo $1 | cut -f 4- -d '/'`
 100         FTPUSERPWD=${FTPSERVER%%@*}
 101         if test "x$FTPSERVER" != "x$FTPUSERPWD"; then
 102             FTPUSER=${userpwd%%:*}
 103             FTPPWD=${userpwd#*@}
 104             FTPSERVER=${FTPSERVER#*@}
 105         else
 106             FTPUSER=ftp
 107             FTPPWD=ftp
 108         fi
 109         # the "pass" command does not work on some
 110         # ftp clients (read ftp.exe) but if it works,
 111         # passive mode is better!
 112         (\
 113             echo "user $FTPUSER $FTPPWD"        ;\
 114             echo "pass"                         ;\
 115             echo "bin"                          ;\
 116             echo "get $FTPPATH $2"              ;\
 117         ) | ftp -in $FTPSERVER
 118     fi
 119     if test "x$VALID_TOOL" != xyes; then
 120        AC_ERROR([I do not know how to use the tool: $BDEPS_FTP])
 121     fi
 122 ])
 123 
 124 AC_DEFUN([BDEPS_CHECK_MODULE],
 125 [
 126     define([LIST_OF_BUILD_DEPENDENCIES],LIST_OF_BUILD_DEPENDENCIES[$2=$3'\n'])
 127     if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
 128         # Source the builddeps file again, to make sure it uses the latest variables!
 129         . $builddepsfile
 130         # Look for a host and build machine specific resource!
 131         eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}}
 132         if test "x$resource" = x; then
 133             # Ok, lets instead look for a host specific resource
 134             eval resource=\${builddep_$2_HOST_${rewritten_host_var}}
 135         fi
 136         if test "x$resource" = x; then
 137             # Ok, lets instead look for a build specific resource
 138             eval resource=\${builddep_$2_BUILD_${rewritten_build_var}}
 139         fi
 140         if test "x$resource" = x; then
 141             # Ok, lets instead look for a generic resource
 142             # (The $2 comes from M4 and not the shell, thus no need for eval here.)
 143             resource=${builddep_$2}
 144         fi
 145         if test "x$resource" != x; then
 146             AC_MSG_NOTICE([Using builddeps $resource for $2])
 147             # If the resource in the builddeps.conf file is an existing directory,
 148             # for example /java/linux/cups
 149             if test -d ${resource}; then
 150                depdir=${resource}
 151             else
 152                 BDEPS_FETCH($2, $resource, $with_builddeps_server, $with_builddeps_dir, depdir)
 153             fi
 154             # Source the builddeps file again, because in the previous command, the depdir
 155             # was updated to point at the current build dependency install directory.
 156             . $builddepsfile
 157             # Now extract variables from the builddeps.conf files.
 158             theroot=${builddep_$2_ROOT}
 159             thecflags=${builddep_$2_CFLAGS}
 160             thelibs=${builddep_$2_LIBS}
 161             if test "x$depdir" = x; then
 162                 AC_ERROR([Could not download build dependency $2])
 163             fi
 164             $1=$depdir
 165             if test "x$theroot" != x; then
 166                $1="$theroot"
 167             fi
 168             if test "x$thecflags" != x; then
 169                $1_CFLAGS="$thecflags"
 170             fi
 171             if test "x$thelibs" != x; then
 172                $1_LIBS="$thelibs"
 173             fi
 174             m4_default([$4], [:])
 175             m4_ifvaln([$5], [else $5])
 176         fi
 177         m4_ifvaln([$5], [else $5])
 178     fi
 179 ])
 180 
 181 AC_DEFUN([BDEPS_FETCH],
 182 [
 183 # $1 is for example mymodule
 184 # $2 is for example libs/general/libmymod_1_2_3.zip
 185 # $3 is for example ftp://mybuilddeps.myserver.com/builddeps
 186 # $4 is for example /localhome/builddeps
 187 # $5 is the name of the variable into which we store the depdir, eg MYMOD
 188 # Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and
 189 # unzip into the directory: /localhome/builddeps/libmymod_1_2_3
 190     filename=`basename $2`
 191     filebase=`echo $filename | sed 's/\.[[^\.]]*$//'`
 192     filebase=${filename%%.*}
 193     extension=${filename#*.}
 194     installdir=$4/$filebase
 195     if test ! -f $installdir/$filename.unpacked; then
 196         AC_MSG_NOTICE([Downloading build dependency $1 from $3/$2 and installing into $installdir])
 197         if test ! -d $installdir; then
 198             mkdir -p $installdir
 199         fi
 200         if test ! -d $installdir; then
 201             AC_ERROR([Could not create directory $installdir])
 202         fi
 203         tmpfile=`mktemp $installdir/$1.XXXXXXXXX`
 204         touch $tmpfile    
 205         if test ! -f $tmpfile; then
 206             AC_ERROR([Could not create files in directory $installdir])
 207         fi
 208         BDEPS_FTPGET([$3/$2] , [$tmpfile])
 209         mv $tmpfile $installdir/$filename
 210         if test ! -s $installdir/$filename; then 
 211             AC_ERROR([Could not download $3/$2])
 212         fi
 213         case "$extension" in
 214             zip)  echo "Unzipping $installdir/$filename..."
 215                (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked)
 216             ;;
 217             tar.gz) echo "Untaring $installdir/$filename..."
 218                (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
 219             ;;
 220             tgz) echo "Untaring $installdir/$filename..."
 221                (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
 222             ;;
 223             *) AC_ERROR([Cannot handle build depency archive with extension $extension])
 224             ;;
 225         esac
 226     fi
 227     if test -f $installdir/$filename.unpacked; then
 228         $5=$installdir
 229     fi
 230 ])
 231