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([CHECK_FIND_DELETE],
  27 [
  28     # Test if find supports -delete
  29     AC_MSG_CHECKING([if find supports -delete])
  30     FIND_DELETE="-delete"
  31 
  32     DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?)
  33 
  34     echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete
  35 
  36     TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1`
  37     if test -f $DELETEDIR/TestIfFindSupportsDelete; then
  38         # No, it does not.
  39         rm $DELETEDIR/TestIfFindSupportsDelete
  40         FIND_DELETE="-exec rm \{\} \+"
  41         AC_MSG_RESULT([no])    
  42     else
  43         AC_MSG_RESULT([yes])    
  44     fi
  45     rmdir $DELETEDIR
  46 ])
  47 
  48 AC_DEFUN([CHECK_NONEMPTY],
  49 [
  50     # Test that variable $1 is not empty.
  51     if test "" = "[$]$1"; then AC_MSG_ERROR(Could not find translit($1,A-Z,a-z) !); fi
  52 ])
  53 
  54 AC_DEFUN([ADD_JVM_ARG_IF_OK],
  55 [
  56     # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3)
  57     # If so, then append $1 to $2
  58     FOUND_WARN=`$3 $1 -version 2>&1 | grep -i warn`
  59     FOUND_VERSION=`$3 $1 -version 2>&1 | grep " version \""`
  60     if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
  61         $2="[$]$2 $1"
  62     fi
  63 ])
  64 
  65 AC_DEFUN([WHICHCMD],
  66 [
  67     # Translate "gcc -E" into "`which gcc` -E" ie
  68     # extract the full path to the binary and at the
  69     # same time maintain any arguments passed to it.
  70     # The command MUST exist in the path, or else!
  71     tmp="[$]$1"
  72     car="${tmp%% *}"
  73     tmp="[$]$1 EOL"
  74     cdr="${tmp#* }"
  75     # On windows we want paths without spaces.
  76     if test "x$BUILD_OS" = "xwindows"; then
  77         WHICHCMD_SPACESAFE(car)
  78     else
  79         # "which" is not portable, but is used here
  80         # because we know that the command exists!
  81         car=`which $car`
  82     fi
  83     if test "x$cdr" != xEOL; then
  84         $1="$car ${cdr% *}"
  85     else
  86         $1="$car"
  87     fi
  88 ])
  89 
  90 AC_DEFUN([SPACESAFE],
  91 [
  92     # Fail with message $2 if var $1 contains a path with no spaces in it.
  93     # Unless on Windows, where we can rewrite the path.
  94     HAS_SPACE=`echo "[$]$1" | grep " "`
  95     if test "x$HAS_SPACE" != x; then
  96         if test "x$BUILD_OS" = "xwindows"; then
  97             $1=`$CYGPATH -s -m -a "[$]$1"`
  98             $1=`$CYGPATH -u "[$]$1"`            
  99         else
 100             AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"])
 101         fi
 102     fi
 103 ])
 104 
 105 AC_DEFUN([WHICHCMD_SPACESAFE],
 106 [
 107     # Translate long cygdrive or C:\sdfsf path
 108     # into a short mixed mode path that has no
 109     # spaces in it.
 110     tmp="[$]$1"
 111     if test "x$BUILD_OS" = "xwindows"; then
 112         tmp=`$CYGPATH -u "[$]$1"`
 113         tmp=`which "$tmp"`
 114         # If file exists with .exe appended, that's the real filename
 115         # and cygpath needs that to convert to short style path.
 116         if test -f "${tmp}.exe"; then
 117            tmp="${tmp}.exe"
 118         elif test -f "${tmp}.cmd"; then
 119            tmp="${tmp}.cmd"
 120         fi
 121         # Convert to C:/ mixed style path without spaces.
 122          tmp=`$CYGPATH -s -m "$tmp"`
 123     fi
 124     $1="$tmp"
 125 ])
 126 
 127 AC_DEFUN([REMOVE_SYMBOLIC_LINKS],
 128 [
 129     if test "x$BUILD_OS" != xwindows; then
 130         # Follow a chain of symbolic links. Use readlink
 131         # where it exists, else fall back to horribly
 132         # complicated shell code.
 133         AC_PATH_PROG(READLINK, readlink)
 134         if test "x$READLINK_TESTED" != yes; then
 135             # On MacOSX there is a readlink tool with a different
 136             # purpose than the GNU readlink tool. Check the found readlink.
 137             ISGNU=`$READLINK --help 2>&1 | grep GNU`
 138             if test "x$ISGNU" = x; then
 139                  # A readlink that we do not know how to use.
 140                  # Are there other non-GNU readlinks out there?
 141                  READLINK_TESTED=yes
 142                  READLINK=
 143             fi
 144         fi
 145 
 146         if test "x$READLINK" != x; then
 147             $1=`$READLINK -f [$]$1`
 148         else
 149             STARTDIR=$PWD
 150             COUNTER=0
 151             DIR=`dirname [$]$1`
 152             FIL=`basename [$]$1`
 153             while test $COUNTER -lt 20; do
 154                 ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'`
 155                 if test "x$ISLINK" == x; then
 156                     # This is not a symbolic link! We are done!
 157                     break
 158                 fi
 159                 # The link might be relative! We have to use cd to travel safely.
 160                 cd $DIR
 161                 cd `dirname $ISLINK`
 162                 DIR=`pwd`
 163                 FIL=`basename $ISLINK`
 164                 let COUNTER=COUNTER+1
 165             done
 166             cd $STARTDIR
 167             $1=$DIR/$FIL
 168         fi
 169     fi
 170 ])
 171 
 172 AC_DEFUN([TESTFOR_PROG_CCACHE],
 173 [
 174     AC_ARG_ENABLE([ccache],
 175               [AS_HELP_STRING([--disable-ccache],
 176                               [use ccache to speed up recompilations @<:@enabled@:>@])],
 177               [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes])
 178     if test "x$ENABLE_CCACHE" = xyes; then
 179         AC_PATH_PROG(CCACHE, ccache)
 180     else
 181         AC_MSG_CHECKING([for ccache])
 182         AC_MSG_RESULT([explicitly disabled])    
 183         CCACHE=
 184     fi    
 185     AC_SUBST(CCACHE)
 186 
 187     AC_ARG_WITH([ccache-dir],
 188               [AS_HELP_STRING([--with-ccache-dir],
 189                               [where to store ccache files @<:@~/.ccache@:>@])])
 190 
 191     if test "x$with_ccache_dir" != x; then
 192         # When using a non home ccache directory, assume the use is to share ccache files
 193         # with other users. Thus change the umask.
 194         SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002"
 195     fi
 196     CCACHE_FOUND=""
 197     if test "x$CCACHE" != x; then
 198         SETUP_CCACHE_USAGE
 199     fi    
 200 ])
 201 
 202 AC_DEFUN([SETUP_CCACHE_USAGE],
 203 [
 204     if test "x$CCACHE" != x; then
 205         CCACHE_FOUND="true"
 206         # Only use ccache if it is 3.1.4 or later, which supports
 207         # precompiled headers.
 208         AC_MSG_CHECKING([if ccache supports precompiled headers])
 209         HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null`
 210         if test "x$HAS_GOOD_CCACHE" = x; then
 211             AC_MSG_RESULT([no, disabling ccache])
 212             CCACHE=
 213         else
 214             AC_MSG_RESULT([yes])
 215             AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers])
 216             PUSHED_FLAGS="$CXXFLAGS"
 217             CXXFLAGS="-fpch-preprocess $CXXFLAGS"
 218             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no])
 219             CXXFLAGS="$PUSHED_FLAGS"
 220             if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then
 221                 AC_MSG_RESULT([yes])
 222             else
 223                 AC_MSG_RESULT([no, disabling ccaching of precompiled headers])
 224                 CCACHE=
 225             fi
 226         fi
 227     fi
 228 
 229     if test "x$CCACHE" != x; then
 230         CCACHE_SLOPPINESS=time_macros
 231         CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE"
 232         CCACHE_FLAGS=-fpch-preprocess
 233 
 234         if test "x$SET_CCACHE_DIR" != x; then
 235             mkdir -p $CCACHE_DIR > /dev/null 2>&1
 236             chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1
 237         fi
 238     fi
 239 ])
 240 
 241 AC_DEFUN([EXTRACT_HOST_AND_BUILD_AND_LEGACY_VARS],
 242 [
 243     # Expects $host_os $host_cpu $build_os and $build_cpu
 244     # and $with_data_model to have been setup!
 245     #
 246     # Translate the standard triplet(quadruplet) definition
 247     # of the host/build system into
 248     # HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows
 249     # HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince
 250     # HOST_OS_API=posix,winapi
 251     # 
 252     # HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64
 253     # HOST_CPU_ARCH=x86,sparc,pcc,arm
 254     # HOST_CPU_BITS=32,64
 255     # HOST_CPU_ENDIAN=big,little
 256     #
 257     # The same values are setup for BUILD_...
 258     # 
 259     # And the legacy variables, for controlling the old makefiles.
 260     # LEGACY_HOST_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64...
 261     # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64...
 262     # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris)
 263     # LEGACY_HOST_OS_API=solaris,windows
 264     #
 265     # We also copy the autoconf trip/quadruplet
 266     # verbatim to HOST and BUILD
 267     AC_SUBST(HOST, ${host})
 268     AC_SUBST(BUILD, ${build})
 269     
 270     EXTRACT_VARS_FROM_OS_TO(HOST,$host_os)
 271     EXTRACT_VARS_FROM_CPU_TO(HOST,$host_cpu)
 272 
 273     EXTRACT_VARS_FROM_OS_TO(BUILD,$build_os)
 274     EXTRACT_VARS_FROM_CPU_TO(BUILD,$build_cpu)
 275 
 276     if test "x$HOST_OS" != xsolaris; then
 277         LEGACY_HOST_CPU3=""
 278         LEGACY_BUILD_CPU3=""
 279     fi
 280 
 281     # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_HOST_CPU1) ...
 282     if test "x$HOST_OS" = xmacosx && test "x$HOST_CPU" = xx64; then
 283         LEGACY_HOST_CPU1="x86_64"
 284     fi
 285 
 286     SET_RELEASE_FILE_OS_VALUES()
 287 ])
 288 
 289 AC_DEFUN([EXTRACT_VARS_FROM_OS_TO],
 290 [
 291     EXTRACT_VARS_FROM_OS($2)
 292     $1_OS="$VAR_OS"
 293     $1_OS_FAMILY="$VAR_OS_FAMILY"
 294     $1_OS_API="$VAR_OS_API"
 295 
 296     AC_SUBST($1_OS)
 297     AC_SUBST($1_OS_FAMILY)
 298     AC_SUBST($1_OS_API)
 299 
 300     if test "x$$1_OS_API" = xposix; then
 301         LEGACY_$1_OS_API="solaris"
 302     fi
 303     if test "x$$1_OS_API" = xwinapi; then
 304         LEGACY_$1_OS_API="windows"
 305     fi
 306     AC_SUBST(LEGACY_$1_OS_API)    
 307 ])
 308 
 309 AC_DEFUN([EXTRACT_VARS_FROM_CPU_TO],
 310 [
 311     EXTRACT_VARS_FROM_CPU($2)
 312     $1_CPU="$VAR_CPU"
 313     $1_CPU_ARCH="$VAR_CPU_ARCH"
 314     $1_CPU_BITS="$VAR_CPU_BITS"
 315     $1_CPU_ENDIAN="$VAR_CPU_ENDIAN"
 316 
 317     AC_SUBST($1_CPU)
 318     AC_SUBST($1_CPU_ARCH)
 319     AC_SUBST($1_CPU_BITS)
 320     AC_SUBST($1_CPU_ENDIAN)
 321     
 322     # Also store the legacy naming of the cpu.
 323     # Ie i586 and amd64 instead of ia32 and x64
 324     LEGACY_$1_CPU1="$VAR_LEGACY_CPU"
 325     AC_SUBST(LEGACY_$1_CPU1)
 326 
 327     # And the second legacy naming of the cpu.
 328     # Ie i386 and amd64 instead of ia32 and x64.
 329     LEGACY_$1_CPU2="$LEGACY_$1_CPU1"
 330     if test "x$LEGACY_$1_CPU1" = xi586; then 
 331         LEGACY_$1_CPU2=i386
 332     fi
 333     AC_SUBST(LEGACY_$1_CPU2)
 334 
 335     # And the third legacy naming of the cpu.
 336     # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris.
 337     LEGACY_$1_CPU3=""
 338     if test "x$$1_CPU" = xx64; then 
 339         LEGACY_$1_CPU3=amd64
 340     fi
 341     if test "x$$1_CPU" = xsparcv9; then 
 342         LEGACY_$1_CPU3=sparvc9
 343     fi
 344     AC_SUBST(LEGACY_$1_CPU3)
 345 ])
 346 
 347 AC_DEFUN([EXTRACT_VARS_FROM_CPU],
 348 [
 349   # First argument is the cpu name from the trip/quad
 350   case "$1" in
 351     x86_64)
 352       VAR_CPU=x64
 353       VAR_CPU_ARCH=x86
 354       VAR_CPU_BITS=64
 355       VAR_CPU_ENDIAN=little
 356       VAR_LEGACY_CPU=amd64
 357       ;;
 358     i?86)
 359       VAR_CPU=ia32
 360       VAR_CPU_ARCH=x86
 361       VAR_CPU_BITS=32
 362       VAR_CPU_ENDIAN=little
 363       VAR_LEGACY_CPU=i586
 364       ;;
 365     alpha*)
 366       VAR_CPU=alpha
 367       VAR_CPU_ARCH=alpha
 368       VAR_CPU_BITS=64
 369       VAR_CPU_ENDIAN=big
 370       VAR_LEGACY_CPU=alpha
 371       ;;
 372     arm*)
 373       VAR_CPU=arm
 374       VAR_CPU_ARCH=arm
 375       VAR_CPU_BITS=3264
 376       VAR_CPU_ENDIAN=big
 377       VAR_LEGACY_CPU=arm
 378       ;;
 379     mips)
 380       VAR_CPU=mips
 381       VAR_CPU_ARCH=mips
 382       VAR_CPU_BITS=woot
 383       VAR_CPU_ENDIAN=woot
 384       VAR_LEGACY_CPU=mips
 385        ;;
 386     mipsel)
 387       VAR_CPU=mipsel
 388       VAR_CPU_ARCH=mips
 389       VAR_CPU_BITS=woot
 390       VAR_CPU_ENDIAN=woot
 391       VAR_LEGACY_CPU=mipsel
 392        ;;
 393     powerpc)
 394       VAR_CPU=ppc
 395       VAR_CPU_ARCH=ppc
 396       VAR_CPU_BITS=32
 397       VAR_CPU_ENDIAN=big
 398       VAR_LEGACY_CPU=ppc
 399        ;;
 400     powerpc64)
 401       VAR_CPU=ppc64
 402       VAR_CPU_ARCH=ppc
 403       VAR_CPU_BITS=64
 404       VAR_CPU_ENDIAN=32
 405       VAR_LEGACY_CPU=ppc64
 406        ;;
 407     sparc)
 408       VAR_CPU=sparc
 409       VAR_CPU_ARCH=sparc
 410       VAR_CPU_BITS=32
 411       VAR_CPU_ENDIAN=big
 412       VAR_LEGACY_CPU=sparc
 413        ;;
 414     sparc64)
 415       VAR_CPU=sparcv9
 416       VAR_CPU_ARCH=sparc
 417       VAR_CPU_BITS=64
 418       VAR_CPU_ENDIAN=big
 419       VAR_LEGACY_CPU=sparc_sparcv9
 420        ;;
 421     s390)
 422       VAR_CPU=s390
 423       VAR_CPU_ARCH=s390
 424       VAR_CPU_BITS=32
 425       VAR_CPU_ENDIAN=woot
 426       VAR_LEGACY_CPU=s390
 427       VAR_LEGACY_CPU=s390
 428        ;;
 429     s390x)
 430       VAR_CPU=s390x
 431       VAR_CPU_ARCH=s390
 432       VAR_CPU_BITS=64
 433       VAR_CPU_ENDIAN=woot
 434       VAR_LEGACY_CPU=s390x
 435        ;;
 436     *)
 437       AC_MSG_ERROR([unsupported cpu $1])
 438       ;;
 439   esac
 440 
 441   # Workaround cygwin not knowing about 64 bit.
 442   if test "x$VAR_OS" = "xwindows"; then
 443       if test "x$PROCESSOR_IDENTIFIER" != "x"; then
 444           PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '`
 445           case "$PROC_ARCH" in
 446             intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64)
 447               VAR_CPU=x64
 448               VAR_CPU_BITS=64
 449               VAR_LEGACY_CPU=amd64
 450               ;;
 451           esac
 452       fi
 453   fi
 454 
 455   if test "x$VAR_CPU_ARCH" = "xx86"; then
 456       if test "x$with_data_model" = "x64"; then
 457           VAR_CPU=x64
 458           VAR_CPU_BITS=64
 459           VAR_LEGACY_CPU=amd64
 460       fi
 461       if test "x$with_data_model" = "x32"; then
 462           VAR_CPU=ia32
 463           VAR_CPU_BITS=32
 464           VAR_LEGACY_CPU=i586
 465       fi
 466   fi 
 467 ])
 468 
 469 AC_DEFUN([EXTRACT_VARS_FROM_OS],
 470 [
 471   case "$1" in
 472     *linux*)
 473       VAR_OS=linux
 474       VAR_OS_API=posix
 475       VAR_OS_FAMILY=gnu
 476       ;;
 477     *solaris*)
 478       VAR_OS=solaris
 479       VAR_OS_API=posix
 480       VAR_OS_FAMILY=sysv
 481       ;;
 482     *darwin*)
 483       VAR_OS=macosx
 484       VAR_OS_API=posix
 485       VAR_OS_FAMILY=bsd
 486       ;;
 487     *bsd*)
 488       VAR_OS=bsd
 489       VAR_OS_API=posix
 490       VAR_OS_FAMILY=bsd
 491       ;;
 492     *cygwin*|*windows*)
 493       VAR_OS=windows
 494       VAR_OS_API=winapi
 495       VAR_OS_FAMILY=windows
 496       ;;
 497     *)
 498       AC_MSG_ERROR([unsupported host operating system $1])
 499       ;;
 500   esac
 501 ])
 502 
 503 AC_DEFUN([CHECK_COMPILER_VERSION],
 504 [
 505     # Test the compilers that their versions are new enough.
 506 #    AC_MSG_CHECKING([version of GCC])
 507     gcc_ver=`${CC} -dumpversion`
 508     gcc_major_ver=`echo ${gcc_ver}|cut -d'.' -f1`
 509     gcc_minor_ver=`echo ${gcc_ver}|cut -d'.' -f2`
 510 #    AM_CONDITIONAL(GCC_OLD, test ! ${gcc_major_ver} -ge 4 -a ${gcc_minor_ver} -ge 3)
 511 #    AC_MSG_RESULT([${gcc_ver} (major version ${gcc_major_ver}, minor version ${gcc_minor_ver})])
 512 ]) 
 513 
 514 # Fixes paths on windows hosts to be mixed mode short.
 515 AC_DEFUN([WIN_FIX_PATH],
 516 [
 517     if test "x$BUILD_OS" = "xwindows"; then
 518         AC_PATH_PROG(CYGPATH, cygpath)
 519         tmp="[$]$1"
 520         # Convert to C:/ mixed style path without spaces.
 521         tmp=`$CYGPATH -s -m "$tmp"`
 522         $1="$tmp"
 523     fi
 524 ])
 525 
 526 AC_DEFUN([SET_RELEASE_FILE_OS_VALUES],
 527 [
 528     if test "x$HOST_OS" = "xsolaris"; then
 529        REQUIRED_OS_NAME=SunOS
 530        REQUIRED_OS_VERSION=5.10
 531     fi
 532     if test "x$HOST_OS" = "xlinux"; then
 533        REQUIRED_OS_NAME=Linux
 534        REQUIRED_OS_VERSION=2.6
 535     fi
 536     if test "x$HOST_OS" = "xwindows"; then
 537         REQUIRED_OS_NAME=Windows
 538         REQUIRED_OS_VERSION=5.1
 539     fi
 540     if test "x$HOST_OS" = "xmacosx"; then
 541         REQUIRED_OS_NAME=Darwin
 542         REQUIRED_OS_VERSION=11.2
 543     fi
 544 
 545     AC_SUBST(REQUIRED_OS_NAME)
 546     AC_SUBST(REQUIRED_OS_VERSION)
 547 ])