# HG changeset patch # User andrew # Date 1343912403 -3600 # Node ID 356f4e5f57fe791a3defa48b28eca7dfe91a8ecc # Parent 38ccffcbab0c9169911c961d59338c4292da681d# Parent 633f2378c904c92bb922a6e19e9f62fe8eac14af Merge jdk8-b44 diff -r 38ccffcbab0c -r 356f4e5f57fe .hgtags --- a/.hgtags Tue May 29 00:27:12 2012 +0100 +++ b/.hgtags Thu Aug 02 14:00:03 2012 +0100 @@ -165,3 +165,7 @@ d939bd0ab13c16647ffa38cc4b64fb31b7d44e10 jdk8-b38 8927dd68aee3fa54a1a698e2980e1b2f6c7c12c1 jdk8-b39 a2b2d435f1d275fa8010774c653197c64e326d3a jdk8-b40 +1a8c7c530f8a9b7f5bdb9b0693b2f5435ca5205e jdk8-b41 +1ce5dc16416611c58b7480ca67a2eee5153498a6 jdk8-b42 +661c9aae602bbd9766d12590800c90f1edd1d8dd jdk8-b43 +e4f81a817447c3a4f6868f083c81c2fb1b15d44c jdk8-b44 diff -r 38ccffcbab0c -r 356f4e5f57fe README-builds.html --- a/README-builds.html Tue May 29 00:27:12 2012 +0100 +++ b/README-builds.html Thu Aug 02 14:00:03 2012 +0100 @@ -108,6 +108,7 @@
  • Testing the Build
  • Environment/Make Variables
  • Troubleshooting
  • +
  • The New Build
  • @@ -2120,6 +2121,16 @@ + +
    +

    The New Build

    +
    + The + Build Infrastructure project is working on a new + build. For information on how to try it out, please see the + + Build Infra User Guide +

    diff -r 38ccffcbab0c -r 356f4e5f57fe common/autoconf/autogen.sh --- a/common/autoconf/autogen.sh Tue May 29 00:27:12 2012 +0100 +++ b/common/autoconf/autogen.sh Thu Aug 02 14:00:03 2012 +0100 @@ -22,5 +22,5 @@ # questions. # -autoconf configure.ac > configure +autoconf -W all configure.ac > configure rm -rf config.status config.log autom4te.cache diff -r 38ccffcbab0c -r 356f4e5f57fe common/autoconf/builddeps.m4 --- a/common/autoconf/builddeps.m4 Tue May 29 00:27:12 2012 +0100 +++ b/common/autoconf/builddeps.m4 Thu Aug 02 14:00:03 2012 +0100 @@ -34,7 +34,7 @@ . $builddepsfile AC_MSG_RESULT([loaded!]) else - AC_ERROR([The given builddeps conf file $with_builddeps_conf could not be loaded!]) + AC_MSG_ERROR([The given builddeps conf file $with_builddeps_conf could not be loaded!]) fi else AC_MSG_CHECKING([for builddeps.conf files in sources...]) @@ -47,7 +47,7 @@ . $builddepsfile AC_MSG_RESULT([found at least one!]) else - AC_ERROR([Could not find any builddeps.conf at all!]) + AC_MSG_ERROR([Could not find any builddeps.conf at all!]) fi fi # Create build and host names that use _ instead of "-" and ".". @@ -117,7 +117,7 @@ ) | ftp -in $FTPSERVER fi if test "x$VALID_TOOL" != xyes; then - AC_ERROR([I do not know how to use the tool: $BDEPS_FTP]) + AC_MSG_ERROR([I do not know how to use the tool: $BDEPS_FTP]) fi ]) @@ -159,7 +159,7 @@ thecflags=${builddep_$2_CFLAGS} thelibs=${builddep_$2_LIBS} if test "x$depdir" = x; then - AC_ERROR([Could not download build dependency $2]) + AC_MSG_ERROR([Could not download build dependency $2]) fi $1=$depdir if test "x$theroot" != x; then @@ -198,17 +198,17 @@ mkdir -p $installdir fi if test ! -d $installdir; then - AC_ERROR([Could not create directory $installdir]) + AC_MSG_ERROR([Could not create directory $installdir]) fi tmpfile=`mktemp $installdir/$1.XXXXXXXXX` touch $tmpfile if test ! -f $tmpfile; then - AC_ERROR([Could not create files in directory $installdir]) + AC_MSG_ERROR([Could not create files in directory $installdir]) fi BDEPS_FTPGET([$3/$2] , [$tmpfile]) mv $tmpfile $installdir/$filename if test ! -s $installdir/$filename; then - AC_ERROR([Could not download $3/$2]) + AC_MSG_ERROR([Could not download $3/$2]) fi case "$extension" in zip) echo "Unzipping $installdir/$filename..." @@ -220,7 +220,7 @@ tgz) echo "Untaring $installdir/$filename..." (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) ;; - *) AC_ERROR([Cannot handle build depency archive with extension $extension]) + *) AC_MSG_ERROR([Cannot handle build depency archive with extension $extension]) ;; esac fi @@ -228,4 +228,3 @@ $5=$installdir fi ]) - diff -r 38ccffcbab0c -r 356f4e5f57fe common/autoconf/configure --- a/common/autoconf/configure Tue May 29 00:27:12 2012 +0100 +++ b/common/autoconf/configure Thu Aug 02 14:00:03 2012 +0100 @@ -595,7 +595,12 @@ ac_subst_vars='LTLIBOBJS LIBOBJS +CACERTS_FILE TEST_IN_BUILD +SALIB_NAME +OS_VERSION_MICRO +OS_VERSION_MINOR +OS_VERSION_MAJOR LIBCXX LDFLAGS_JDKEXE_SUFFIX LDFLAGS_JDKLIB_SUFFIX @@ -625,15 +630,20 @@ LANGTOOLS_MAKE_ARGS LANGTOOLS_DIST LANGTOOLS_OUTPUTDIR +CXX_FLAG_DEPS +C_FLAG_DEPS CXX_O_FLAG_NONE CXX_O_FLAG_NORM CXX_O_FLAG_HI +CXX_O_FLAG_HIGHEST C_O_FLAG_NONE C_O_FLAG_NORM C_O_FLAG_HI +C_O_FLAG_HIGHEST DISABLE_NIMBUS GENERATE_DOCS ENABLE_DOCS +LIBDL LIBM USE_EXTERNAL_LIBZ USE_EXTERNAL_LIBGIF @@ -665,6 +675,7 @@ BOOT_JDK_JVMARGS OVERRIDE_SRC_ROOT ADD_SRC_ROOT +NATIVE2ASCII RMIC JAR JAVAH @@ -678,7 +689,11 @@ JAVA_CHECK JAVAC_CHECK ENDIAN +POST_MCS_CMD +POST_STRIP_CMD SET_SHARED_LIBRARY_ORIGIN +CXX_FLAG_REORDER +C_FLAG_REORDER SET_SHARED_LIBRARY_MAPFILE SET_SHARED_LIBRARY_NAME SHARED_LIBRARY_FLAGS @@ -749,6 +764,7 @@ CORBA_TOPDIR LANGTOOLS_TOPDIR OUTPUT_ROOT +CONF_NAME SPEC MSVCR100DLL CHECK_FOR_VCINSTALLDIR @@ -797,6 +813,8 @@ CONCURRENT_BUILD_JOBS NUM_CORES DATE_WHEN_CONFIGURED +REQUIRED_OS_VERSION +REQUIRED_OS_NAME LEGACY_BUILD_CPU3 LEGACY_BUILD_CPU2 LEGACY_BUILD_CPU1 @@ -829,6 +847,7 @@ build_vendor build_cpu build +HG FILE EXPR READELF @@ -918,7 +937,7 @@ with_data_model with_num_cores with_memory_size -enable_openjdk +enable_openjdk_only enable_jigsaw with_jdk_variant enable_headful @@ -967,6 +986,7 @@ enable_nimbus enable_static_link_stdc__ enable_hotspot_test_in_build +with_cacerts_file ' ac_precious_vars='build_alias host_alias @@ -1610,7 +1630,7 @@ --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-openjdk build OpenJDK regardless of the presence of closed + --enable-openjdk-only build OpenJDK regardless of the presence of closed repositories [disabled] --enable-jigsaw build Jigsaw images (not yet available) [disabled] --disable-headful build headful support (graphical UI support) @@ -1718,6 +1738,7 @@ headers under PATH/include) --with-pulse-include specify directory for the pulseaudio include files --with-pulse-lib specify directory for the pulseaudio library + --with-cacerts-file specify alternative cacerts file Some influential environment variables: PKG_CONFIG path to pkg-config utility @@ -3036,7 +3057,6 @@ - # # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -3095,6 +3115,8 @@ # Fixes paths on windows hosts to be mixed mode short. + + # # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -3149,12 +3171,7 @@ # questions. # -function help_on_build_dependency { - # Print a helpful message on how to acquire the necessary build dependency. - # $1 is the help tag: freetyp2, cups, pulse, alsa etc - MISSING_DEPENDENCY=$1 - PKGHANDLER_COMMAND= - +function prepare_help_system { for ac_prog in apt-get yum port pkgutil pkgadd do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -3197,11 +3214,18 @@ test -n "$PKGHANDLER" && break done +} + +function help_on_build_dependency { + # Print a helpful message on how to acquire the necessary build dependency. + # $1 is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=$1 + PKGHANDLER_COMMAND= case $PKGHANDLER in apt-get) apt_help $MISSING_DEPENDENCY ;; - yum) + yum) yum_help $MISSING_DEPENDENCY ;; port) port_help $MISSING_DEPENDENCY ;; @@ -3214,7 +3238,7 @@ esac if test "x$PKGHANDLER_COMMAND" != x; then - HELP_MSG="Try running '$PKGHANDLER_COMMAND'." + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." fi } @@ -5384,6 +5408,47 @@ # Test that variable FILE is not empty. if test "" = "$FILE"; then as_fn_error $? "Could not find file !" "$LINENO" 5 ; fi +# Extract the first word of "hg", so it can be a program name with args. +set dummy hg; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HG in + [\\/]* | ?:[\\/]*) + ac_cv_path_HG="$HG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HG=$ac_cv_path_HG +if test -n "$HG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 +$as_echo "$HG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Figure out the build and host system. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || @@ -5491,7 +5556,7 @@ # The same values are setup for BUILD_... # # And the legacy variables, for controlling the old makefiles. - # LEGACY_HOST_CPU1=i586,amd64,sparc,sparcv9,arm,arm64... + # LEGACY_HOST_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris) # LEGACY_HOST_OS_API=solaris,windows @@ -5918,6 +5983,33 @@ LEGACY_BUILD_CPU3="" fi + # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_HOST_CPU1) ... + if test "x$HOST_OS" = xmacosx && test "x$HOST_CPU" = xx64; then + LEGACY_HOST_CPU1="x86_64" + fi + + + if test "x$HOST_OS" = "xsolaris"; then + REQUIRED_OS_NAME=SunOS + REQUIRED_OS_VERSION=5.10 + fi + if test "x$HOST_OS" = "xlinux"; then + REQUIRED_OS_NAME=Linux + REQUIRED_OS_VERSION=2.6 + fi + if test "x$HOST_OS" = "xwindows"; then + REQUIRED_OS_NAME=Windows + REQUIRED_OS_VERSION=5.1 + fi + if test "x$HOST_OS" = "xmacosx"; then + REQUIRED_OS_NAME=Darwin + REQUIRED_OS_VERSION=11.2 + fi + + + + + # Now the following vars are defined. # HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows # HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince @@ -6143,15 +6235,15 @@ # # OpenJDK or closed # -# Check whether --enable-openjdk was given. -if test "${enable_openjdk+set}" = set; then : - enableval=$enable_openjdk; -fi - - -if test "x$enable_openjdk" = "xyes"; then +# Check whether --enable-openjdk-only was given. +if test "${enable_openjdk_only+set}" = set; then : + enableval=$enable_openjdk_only; +fi + + +if test "x$enable_openjdk_only" = "xyes"; then OPENJDK=true -elif test "x$enable_openjdk" = "xno"; then +elif test "x$enable_openjdk_only" = "xno"; then OPENJDK=false elif test -d "$SRC_ROOT/jdk/src/closed"; then OPENJDK=false @@ -6458,7 +6550,8 @@ if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then # We are running configure from the src root. # Create a default ./build/host-variant-debuglevel output root. - OUTPUT_ROOT="$SRC_ROOT/build/${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + CONF_NAME="${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" mkdir -p "$OUTPUT_ROOT" if test ! -d "$OUTPUT_ROOT"; then as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5 @@ -6466,6 +6559,9 @@ else # We are running configure from outside of the src dir. # Then use the current directory as output dir! + # If configuration is situated in normal build directory, just use the build + # directory name as configuration name, otherwise use the complete path. + CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` OUTPUT_ROOT="$CURDIR" fi @@ -6531,7 +6627,7 @@ esac # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat cd $OUTPUT_ROOT - $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" + bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" cd $CURDIR if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can extract the needed env variables" >&5 @@ -6618,6 +6714,8 @@ SPEC=$OUTPUT_ROOT/spec.gmk +CONF_NAME=$CONF_NAME + OUTPUT_ROOT=$OUTPUT_ROOT @@ -7362,6 +7460,8 @@ ORG_CXXFLAGS="$CXXFLAGS" ORG_OBJCFLAGS="$OBJCFLAGS" +prepare_help_system + # gcc is almost always present, but on Windows we # prefer cl.exe and on Solaris we prefer CC. # Thus test for them in this order. @@ -8769,9 +8869,10 @@ LD="$car" fi -LDEXE="$LD" -LDCXX="$LD" -LDEXECXX="$LD" +LD="$CC" +LDEXE="$CC" +LDCXX="$CXX" +LDEXECXX="$CXX" # LDEXE is the linker to use, when creating executables. # Linking C++ libraries. @@ -8926,7 +9027,7 @@ # For now, assume that we are always compiling using cl.exe. CC_OUT_OPTION=-Fo - EXE_OUT_OPTION=-Fe + EXE_OUT_OPTION=-out: LD_OUT_OPTION=-out: AR_OUT_OPTION=-out: # On Windows, reject /usr/bin/link, which is a cygwin @@ -9008,10 +9109,9 @@ WINLD="$tmp" LD="$WINLD" - # However creating executables can only be done with cl.exe. - LDEXE="$CC" + LDEXE="$WINLD" LDCXX="$WINLD" - LDEXECXX="$CC" + LDEXECXX="$WINLD" # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 @@ -9163,7 +9263,7 @@ RC="$tmp" - RC_FLAGS="/l 0x409 /r" + RC_FLAGS="-nologo /l 0x409 /r" if test "x$VARIANT" = xOPT; then : RC_FLAGS="$RC_FLAGS -d NDEBUG" @@ -9303,14 +9403,13 @@ COMPILER_TYPE=CL - CFLAGS="$CFLAGS -nologo" - LDFLAGS="$LDFLAGS -nologo -dll -opt:ref -incremental:no " + CCXXFLAGS="$CCXXFLAGS -nologo" + LDFLAGS="$LDFLAGS -nologo -opt:ref -incremental:no" if test "x$LEGACY_HOST_CPU1" = xi586; then LDFLAGS="$LDFLAGS -safeseh" fi - if test "x$DEBUG_LEVEL" != xrelease; then - LDFLAGS="$LDFLAGS -debug" - fi + # TODO: make -debug optional "--disable-full-debug-symbols" + LDFLAGS="$LDFLAGS -debug" fi @@ -9764,7 +9863,7 @@ -if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = macosx; then +if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = xmacosx; then # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. # While waiting for a better solution, the current workaround is to use -mstackrealign. CFLAGS="$CFLAGS -mstackrealign" @@ -10499,6 +10598,16 @@ # (The JVM can use 32 or 64 bit Java pointers but that decision # is made at runtime.) # +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +OLD_CXXFLAGS="$CXXFLAGS" +if test "x$HOST_OS" = xsolaris && test "x$with_data_model" != x; then + CXXFLAGS="-m{$with_data_model} $CXXFLAGS" +fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } @@ -10662,6 +10771,14 @@ _ACEOF +CXXFLAGS="$OLD_CXXFLAGS" +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test "x$ac_cv_sizeof_int_p" = x0; then # The test failed, lets pick the assumed value. ARCH_DATA_MODEL=$HOST_CPU_BITS @@ -10741,12 +10858,16 @@ OBJ_SUFFIX='.o' EXE_SUFFIX='' SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' - SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$(JDK_TOPDIR)/$1' + SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1' LD="$CC" LDEXE="$CC" LDCXX="$CXX" LDEXECXX="$CXX" + # TODO: for embedded set --strip-unneeded + POST_STRIP_CMD="$STRIP -g" # Linking is different on MacOSX if test "x$BUILD_OS" = xmacosx; then @@ -10759,6 +10880,7 @@ SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' SET_SHARED_LIBRARY_MAPFILE='' SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' + POST_STRIP_CMD="$STRIP -S" fi else if test "x$BUILD_OS" = xsolaris; then @@ -10774,9 +10896,13 @@ OBJ_SUFFIX='.o' EXE_SUFFIX='' SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='-M $(JDK_TOPDIR)/$1' + SET_SHARED_LIBRARY_MAPFILE='-M $1' + C_FLAG_REORDER='-xF' + CXX_FLAG_REORDER='-xF' SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1' CFLAGS_JDKLIB_EXTRA='-xstrconst -D__solaris__' + POST_STRIP_CMD="$STRIP -x" + POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" fi if test "x$BUILD_OS" = xwindows; then # If it is not gcc, then assume it is the MS Visual Studio compiler @@ -10808,6 +10934,10 @@ + + + + # The (cross) compiler is now configured, we can now test capabilities # of the host platform. @@ -11072,30 +11202,30 @@ # Source the builddeps file again, to make sure it uses the latest variables! . $builddepsfile # Look for a host and build machine specific resource! - eval resource=\${builddep_bootjdk_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} + eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} if test "x$resource" = x; then # Ok, lets instead look for a host specific resource - eval resource=\${builddep_bootjdk_HOST_${rewritten_host_var}} + eval resource=\${builddep_boot-jdk_HOST_${rewritten_host_var}} fi if test "x$resource" = x; then # Ok, lets instead look for a build specific resource - eval resource=\${builddep_bootjdk_BUILD_${rewritten_build_var}} + eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}} fi if test "x$resource" = x; then # Ok, lets instead look for a generic resource - # (The bootjdk comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_bootjdk} + # (The boot-jdk comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_boot-jdk} fi if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for bootjdk" >&5 -$as_echo "$as_me: Using builddeps $resource for bootjdk" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for boot-jdk" >&5 +$as_echo "$as_me: Using builddeps $resource for boot-jdk" >&6;} # If the resource in the builddeps.conf file is an existing directory, # for example /java/linux/cups if test -d ${resource}; then depdir=${resource} else -# bootjdk is for example mymodule +# boot-jdk is for example mymodule # $resource is for example libs/general/libmymod_1_2_3.zip # $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps # $with_builddeps_dir is for example /localhome/builddeps @@ -11108,15 +11238,15 @@ extension=${filename#*.} installdir=$with_builddeps_dir/$filebase if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency bootjdk from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency bootjdk from $with_builddeps_server/$resource and installing into $installdir" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&6;} if test ! -d $installdir; then mkdir -p $installdir fi if test ! -d $installdir; then as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 fi - tmpfile=`mktemp $installdir/bootjdk.XXXXXXXXX` + tmpfile=`mktemp $installdir/boot-jdk.XXXXXXXXX` touch $tmpfile if test ! -f $tmpfile; then as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 @@ -11187,11 +11317,11 @@ # was updated to point at the current build dependency install directory. . $builddepsfile # Now extract variables from the builddeps.conf files. - theroot=${builddep_bootjdk_ROOT} - thecflags=${builddep_bootjdk_CFLAGS} - thelibs=${builddep_bootjdk_LIBS} + theroot=${builddep_boot-jdk_ROOT} + thecflags=${builddep_boot-jdk_CFLAGS} + thelibs=${builddep_boot-jdk_LIBS} if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency bootjdk" "$LINENO" 5 + as_fn_error $? "Could not download build dependency boot-jdk" "$LINENO" 5 fi BOOT_JDK=$depdir if test "x$theroot" != x; then @@ -11220,15 +11350,15 @@ fi # Aha, the user has set a JAVA_HOME # let us use that as the Boot JDK. - BOOT_JDK=$JAVA_HOME + BOOT_JDK="$JAVA_HOME" BOOT_JDK_FOUND=yes # To be on the safe side, lets check that it is a JDK. - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java + if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then + JAVAC="$BOOT_JDK/bin/javac" + JAVA="$BOOT_JDK/bin/java" BOOT_JDK_FOUND=yes else - as_fn_error $? "Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK." "$LINENO" 5 + as_fn_error $? "Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=$JAVA_HOME" "$LINENO" 5 fi fi fi @@ -11634,7 +11764,7 @@ FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` if test "x$FOUND_VERSION_78" = x; then help_on_build_dependency openjdk - as_fn_error $? "Your bootjdk must be version 7 or 8. $HELP_MSG" "$LINENO" 5 + as_fn_error $? "Your boot-jdk must be version 7 or 8. $HELP_MSG" "$LINENO" 5 fi # When compiling code to be executed by the Boot JDK, force jdk7 compatibility. @@ -11653,7 +11783,7 @@ -# Use the javac tool from the Boot JDK. +# Use the javah tool from the Boot JDK. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 $as_echo_n "checking for javah in Boot JDK... " >&6; } JAVAH=$BOOT_JDK/bin/javah @@ -11686,6 +11816,17 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } +# Use the native2ascii tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 +$as_echo_n "checking for native2ascii in Boot JDK... " >&6; } +NATIVE2ASCII=$BOOT_JDK/bin/native2ascii +if test ! -x $NATIVE2ASCII; then + as_fn_error $? "Could not find a working native2ascii" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + ############################################################################### # # Pickup additional source for a component from outside of the source root @@ -13135,9 +13276,6 @@ as_fn_error $? "Could not find X11 libraries. $HELP_MSG" "$LINENO" 5 fi - - - # Some of the old makefiles require a setting of OPENWIN_HOME # Since the X11R6 directory has disappeared on later Linuxes, # we need to probe for it. @@ -13154,6 +13292,18 @@ fi + +# +# Weird Sol10 something check...TODO change to try compile +# +if test "x${HOST_OS}" = xsolaris; then + if test "`uname -r`" = "5.10"; then + if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then + X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" + fi + fi +fi + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -13192,6 +13342,9 @@ as_fn_error $? "Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG" "$LINENO" 5 fi + + + ############################################################################### # # The common unix printing system cups is used to print from java. @@ -13216,7 +13369,7 @@ if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x$with_cups" != x || test "x$with_cups-include" != x || test "x$with_cups-lib" != x; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cups not used, so --with-cups is ignored" >&5 $as_echo "$as_me: WARNING: cups not used, so --with-cups is ignored" >&2;} fi @@ -13225,21 +13378,21 @@ else CUPS_FOUND=no - if test "x$with_cups" = xno || test "x$with_cups-include" = xno || test "x$with_cups-lib" = xno; then + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then as_fn_error $? "It is not possible to disable the use of cups. Remove the --without-cups option." "$LINENO" 5 fi - if test "x$with_cups" != x; then - CUPS_LIBS="-L$with_cups/lib -lcups" - CUPS_CFLAGS="-I$with_cups/include" + if test "x${with_cups}" != x; then + CUPS_LIBS="-L${with_cups}/lib -lcups" + CUPS_CFLAGS="-I${with_cups}/include" CUPS_FOUND=yes fi - if test "x$with_cups-include" != x; then - CUPS_CFLAGS="-I$with_cups-include" + if test "x${with_cups_include}" != x; then + CUPS_CFLAGS="-I${with_cups_include}" CUPS_FOUND=yes fi - if test "x$with_cups-lib" != x; then - CUPS_LIBS="-L$with_cups-lib -lcups" + if test "x${with_cups_lib}" != x; then + CUPS_LIBS="-L${with_cups_lib} -lcups" CUPS_FOUND=yes fi if test "x$CUPS_FOUND" = xno; then @@ -13796,7 +13949,7 @@ if test "x$ALSA_NOT_NEEDED" = xyes; then - if test "x$with_alsa" != x || test "x$with_alsa-include" != x || test "x$with_alsa-lib" != x; then + if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: alsa not used, so --with-alsa is ignored" >&5 $as_echo "$as_me: WARNING: alsa not used, so --with-alsa is ignored" >&2;} fi @@ -13805,21 +13958,21 @@ else ALSA_FOUND=no - if test "x$with_alsa" = xno || test "x$with_alsa-include" = xno || test "x$with_alsa-lib" = xno; then + if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then as_fn_error $? "It is not possible to disable the use of alsa. Remove the --without-alsa option." "$LINENO" 5 fi - if test "x$with_alsa" != x; then - ALSA_LIBS="-L$with_alsa/lib -lalsa" - ALSA_CFLAGS="-I$with_alsa/include" + if test "x${with_alsa}" != x; then + ALSA_LIBS="-L${with_alsa}/lib -lalsa" + ALSA_CFLAGS="-I${with_alsa}/include" ALSA_FOUND=yes fi - if test "x$with_alsa-include" != x; then - ALSA_CFLAGS="-I$with_alsa/include" + if test "x${with_alsa_include}" != x; then + ALSA_CFLAGS="-I${with_alsa_include}" ALSA_FOUND=yes fi - if test "x$with_alsa-lib" != x; then - ALSA_LIBS="-L$with_alsa/lib -lalsa" + if test "x${with_alsa_lib}" != x; then + ALSA_LIBS="-L${with_alsa_lib} -lalsa" ALSA_FOUND=yes fi if test "x$ALSA_FOUND" = xno; then @@ -14090,17 +14243,17 @@ fi -if test "x$with_pulse" != x; then - PULSE_LIBS="-L$with_pulse/lib -lfreetype" - PULSE_CFLAGS="-I$with_pulse/include" +if test "x${with_pulse}" != x; then + PULSE_LIBS="-L${with_pulse}/lib -lfreetype" + PULSE_CFLAGS="-I${with_pulse}/include" PULSE_FOUND=yes fi -if test "x$with_pulse-include" != x; then - PULSE_CFLAGS="-I$with_pulse/include" +if test "x${with_pulse_include}" != x; then + PULSE_CFLAGS="-I${with_pulse_include}" PULSE_FOUND=yes fi -if test "x$with_pulse-lib" != x; then - PULSE_LIBS="-L$with_pulse/lib -lfreetype" +if test "x${with_pulse_lib}" != x; then + PULSE_LIBS="-L${with_pulse_lib} -lpulse" PULSE_FOUND=yes fi if test "x$PULSE_FOUND" = xno; then @@ -14537,9 +14690,9 @@ # Check the maths library # -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5 -$as_echo_n "checking for main in -lm... " >&6; } -if test "${ac_cv_lib_m_main+set}" = set; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 +$as_echo_n "checking for cos in -lm... " >&6; } +if test "${ac_cv_lib_m_cos+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -14547,27 +14700,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cos (); int main () { -return main (); +return cos (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_m_main=yes -else - ac_cv_lib_m_main=no + ac_cv_lib_m_cos=yes +else + ac_cv_lib_m_cos=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_main" >&5 -$as_echo "$ac_cv_lib_m_main" >&6; } -if test "x$ac_cv_lib_m_main" = x""yes; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 +$as_echo "$ac_cv_lib_m_cos" >&6; } +if test "x$ac_cv_lib_m_cos" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF @@ -14585,6 +14744,61 @@ ############################################################################### # +# Check for libdl.so + +save_LIBS="$LIBS" +LIBS="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + +LIBDL="$LIBS" + +LIBS="$save_LIBS" + +############################################################################### +# # Should we run the painfully slow javadoc tool? # { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build documentation" >&5 @@ -14632,6 +14846,9 @@ # Setup the opt flags for different compilers # and different operating systems. # +C_FLAG_DEPS="-MMD -MF" +CXX_FLAG_DEPS="-MMD -MF" + case $COMPILER_TYPE in CC ) D_FLAG="-g" @@ -14641,9 +14858,9 @@ macosx ) # On MacOSX we optimize for size, something # we should do for all platforms? - C_O_FLAG_HI="-O3" + C_O_FLAG_HI="-Os" C_O_FLAG_NORM="-Os" - C_O_FLAG_NONE="-O0" + C_O_FLAG_NONE="" ;; *) C_O_FLAG_HI="-O3" @@ -14656,19 +14873,61 @@ CXX_O_FLAG_NONE="$C_O_FLAG_NONE" ;; ossc ) + # + # Forte has different names for this with their C++ compiler... + # + CXX_FLAG_DEPS="-xMMD -xMF" + +# Extra options used with HIGHEST +# +# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be +# done with care, there are some assumptions below that need to +# be understood about the use of pointers, and IEEE behavior. +# +# Use non-standard floating point mode (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fns" +# Do some simplification of floating point arithmetic (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fsimple" +# Use single precision floating point with 'float' +CC_HIGHEST="$CC_HIGHEST -fsingle" +# Assume memory references via basic pointer types do not alias +# (Source with excessing pointer casting and data access with mixed +# pointer types are not recommended) +CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" +# Use intrinsic or inline versions for math/std functions +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" +# Loop data dependency optimizations (need -xO3 or higher) +CC_HIGHEST="$CC_HIGHEST -xdepend" +# Pointer parameters to functions do not overlap +# (Similar to -xalias_level=basic usage, but less obvious sometimes. +# If you pass in multiple pointers to the same data, do not use this) +CC_HIGHEST="$CC_HIGHEST -xrestrict" +# Inline some library routines +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xlibmil" +# Use optimized math routines +# (If you expect perfect errno behavior, do not use this) +# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now +#CC_HIGHEST="$CC_HIGHEST -xlibmopt" + case $LEGACY_HOST_CPU1 in i586) + C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" C_O_FLAG_HI="-xO4 -Wu,-O4~yz" C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" CXX_O_FLAG_NONE="" ;; sparc) + C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" CXX_O_FLAG_NONE="" @@ -14687,6 +14946,18 @@ ;; esac +if test -z "$C_O_FLAG_HIGHEST"; then + C_O_FLAG_HIGHEST="$C_O_FLAG_HI" +fi + +if test -z "$CXX_O_FLAG_HIGHEST"; then + CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" +fi + + + + + @@ -14810,16 +15081,17 @@ # case $COMPILER_NAME in gcc ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses -pipe -fno-omit-frame-pointer \ + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ + -pipe -fno-omit-frame-pointer \ -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" CFLAGS_JDK="$CFLAGS_JDK -fno-strict-aliasing" ;; ossc ) - CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa REQUIRED -v -mt -norunpath -xnolib" - CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt REQUIRED -features=no%except -DCC_NOEX" + CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" + CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" ;; cl ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ -DWIN32 -DIAL" @@ -14898,14 +15170,14 @@ # # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. if test "x$COMPILER_TYPE" = xCL; then - LDFLAGS_JDKLIB="$LDFLAGS -libpath:${JDK_OUTPUTDIR}/lib jvm.lib java.lib" + LDFLAGS_JDKLIB="$LDFLAGS -dll -libpath:${JDK_OUTPUTDIR}/lib -libpath:${JDK_OUTPUTDIR}/objs" LDFLAGS_JDKLIB_SUFFIX="" - if test "x$HOST_CPU_BITS" = "x64"; then - LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj64/jli.lib" + if test "$HOST_CPU_BITS" == "64"; then + LDFLAGS_STACK_SIZE=1048576 else - LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj/jli.lib" - fi - LDFLAGS_JDKEXE_SUFFIX="" + LDFLAGS_STACK_SIZE=327680 + fi + LDFLAGS_JDKEXE="$LDFLAGS /STACK:$LDFLAGS_STACK_SIZE" else # If this is a --hash-style=gnu system, use --hash-style=both, why? HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` @@ -14920,7 +15192,9 @@ fi fi - LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ + LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS \ + -L${JDK_OUTPUTDIR}/objs \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" @@ -14930,8 +15204,10 @@ # Only the jli library is explicitly linked when the launchers are built. # The libjvm is then dynamically loaded/linked by the launcher. - LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" - LDFLAGS_JDKEXE_SUFFIX="-ljli" + if test "x$HOST_OS" != "xmacosx"; then + LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" + LDFLAGS_JDKEXE_SUFFIX="-ljli" + fi fi @@ -15081,9 +15357,24 @@ # Could someone enlighten this configure script with a comment about libCrun? # The LEGACY_HOST_CPU3 is the setting for ISA_DIR. # -if test "x$HOST_OS" = xsolaris; then - LIBCXX="$LIBCXX /usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1" -fi +if test "x$HOST_OS" = xsolaris && test "x$LIBCXX" = x; then + LIBCXX="/usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1" +fi + +# TODO better (platform agnostic) test +if test "x$HOST_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then + LIBCXX="-lstdc++" +fi + + + +############################################################################### + +OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" +OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" +OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" +OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" + @@ -15092,6 +15383,13 @@ # Misc # +# The name of the Service Agent jar. +SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" +if test "x$HOST_OS" = "xwindows"; then + SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" +fi + + # Control wether Hotspot runs Queens test after build. # Check whether --enable-hotspot-test-in-build was given. if test "${enable_hotspot_test_in_build+set}" = set; then : @@ -15109,19 +15407,48 @@ ############################################################################### # -# A helpful message at the end of the configure run. -# -if test "x$CCACHE_FOUND" = x && test "x$GCC" = xyes; then - help_on_build_dependency ccache - - printf "\nTip of the day:\nYou should really install ccache version 3.1.4 or newer.\n" - printf "It gives a tremendous speedup for C++ recompilations with precompiled headers!\n" -fi - -if test "x$CCACHE_FOUND" != x && test "x$HAS_GOOD_CCACHE" = x; then - printf "You have a ccache installed, but it is a version prior to 3.1.4. Try upgrading.\n" -fi - +# Choose cacerts source file +# + +# Check whether --with-cacerts-file was given. +if test "${with_cacerts_file+set}" = set; then : + withval=$with_cacerts_file; +fi + +if test "x$with_cacerts_file" != x; then + CACERTS_FILE=$with_cacerts_file +else + if test "x$OPENJDK" = "xtrue"; then + CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts + else + CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal + fi +fi + + +# Check if build directory is on local disk. +# return 0 if it is on local disk, non-0 if on remote disk or failure +function is_directory_on_local_disk { + # df -l lists only local disks; if the given directory is not found then + # a non-zero exit code is given + $DF -l $1 > /dev/null 2>&1 +} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if build directory is on local disk" >&5 +$as_echo_n "checking if build directory is on local disk... " >&6; } +if is_directory_on_local_disk $OUTPUT_ROOT; then + OUTPUT_DIR_IS_LOCAL="yes" +else + OUTPUT_DIR_IS_LOCAL="no" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OUTPUT_DIR_IS_LOCAL" >&5 +$as_echo "$OUTPUT_DIR_IS_LOCAL" >&6; } + +# We're messing a bit with internal autoconf variables to put the config.status in the +# output directory instead of the current directory. +CONFIG_STATUS=$OUTPUT_ROOT/config.status + +# Now create the actual output files, after this, the main work of configure is done cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -16393,3 +16720,62 @@ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi + +# Finally output some useful information to the user + +if test "x$CCACHE_FOUND" != x; then + if test "x$HAS_GOOD_CCACHE" = x; then + CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" + CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." + else + CCACHE_STATUS="installed and in use" + fi +else + if test "x$GCC" = xyes; then + CCACHE_STATUS="not installed (consider installing)" + CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." + else + CCACHE_STATUS="not available for your system" + fi +fi + +printf "\n" +printf "====================================================\n" +printf "A new configuration has been successfully created in\n" +printf "$OUTPUT_ROOT\n" +if test "x$CONFIGURE_COMMAND_LINE" != x; then + printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" +else + printf "using default settings.\n" +fi + +printf "\n" +printf "Configuration summary:\n" +printf "* Debug level: $DEBUG_LEVEL\n" +printf "* JDK variant: $JDK_VARIANT\n" +printf "* JVM variants: $with_jvm_variants\n" +printf "* Host info: OS: $HOST_OS, CPU architecture: $HOST_CPU_ARCH, address length: $HOST_CPU_BITS\n" +printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Build performance summary:\n" +printf "* Cores to use: $NUM_CORES\n" +printf "* Memory limit: $MEMORY_SIZE MB\n" +printf "* ccache status: $CCACHE_STATUS\n" + +if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then + printf "\n" + printf "WARNING: Your build output directory is not on a local disk.\n" + printf "This will severely degrade build performance!\n" + printf "It is recommended that you create an output directory on a local disk,\n" + printf "and run the configure script again from that directory.\n" +fi + +if test "x$CCACHE_HELP_MSG" != x; then + printf "\n" + printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" + printf "$CCACHE_HELP_MSG\n" + + help_on_build_dependency ccache + printf "$HELP_MSG\n" +fi diff -r 38ccffcbab0c -r 356f4e5f57fe common/autoconf/configure.ac --- a/common/autoconf/configure.ac Tue May 29 00:27:12 2012 +0100 +++ b/common/autoconf/configure.ac Thu Aug 02 14:00:03 2012 +0100 @@ -93,7 +93,7 @@ CHECK_NONEMPTY(MAKE) MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[[12346789]]'` if test "x$MAKE_VERSION" = x; then - AC_ERROR([You must use GNU make 3.81 or newer! Please put it in the path.]) + AC_MSG_ERROR([You must use GNU make 3.81 or newer! Please put it in the path.]) fi AC_PATH_PROG(MKDIR, mkdir) CHECK_NONEMPTY(MKDIR) @@ -147,6 +147,8 @@ CHECK_NONEMPTY(EXPR) AC_PATH_PROG(FILE, file) CHECK_NONEMPTY(FILE) +AC_PATH_PROG(HG, hg) + # Figure out the build and host system. AC_CANONICAL_BUILD AC_CANONICAL_HOST @@ -157,7 +159,7 @@ if test "x$with_data_model" != x && \ test "x$with_data_model" != x32 && \ test "x$with_data_model" != x64 ; then - AC_ERROR([The data model can only be 32 or 64!]) + AC_MSG_ERROR([The data model can only be 32 or 64!]) fi # Translate the standard cpu-vendor-kernel-os quadruplets into # the new HOST_.... and BUILD_... and the legacy names used by @@ -221,7 +223,7 @@ PATH_SEP=":" if test "x$BUILD_OS" = "xwindows"; then if test "x$CYGPATH" = x; then - AC_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) + AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) fi PATH_SEP=";" fi @@ -239,12 +241,12 @@ # # OpenJDK or closed # -AC_ARG_ENABLE([openjdk], [AS_HELP_STRING([--enable-openjdk], +AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only], [build OpenJDK regardless of the presence of closed repositories @<:@disabled@:>@])],,) -if test "x$enable_openjdk" = "xyes"; then +if test "x$enable_openjdk_only" = "xyes"; then OPENJDK=true -elif test "x$enable_openjdk" = "xno"; then +elif test "x$enable_openjdk_only" = "xno"; then OPENJDK=false elif test -d "$SRC_ROOT/jdk/src/closed"; then OPENJDK=false @@ -298,7 +300,7 @@ MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" JDK_VARIANT="embedded" else - AC_ERROR([The available JDK variants are: normal, embedded]) + AC_MSG_ERROR([The available JDK variants are: normal, embedded]) fi AC_SUBST(JAVASE_EMBEDDED) @@ -370,7 +372,7 @@ TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` if test "x$TEST_VARIANTS" != "x,"; then - AC_ERROR([The available JVM variants are: server, client, kernel, zero, zeroshark]) + AC_MSG_ERROR([The available JVM variants are: server, client, kernel, zero, zeroshark]) fi AC_MSG_RESULT([$with_jvm_variants]) @@ -382,12 +384,12 @@ if test "x$JVM_VARIANT_CLIENT" = xtrue; then if test "x$HOST_CPU_BITS" = x64; then - AC_ERROR([You cannot build a client JVM for a 64-bit machine.]) + AC_MSG_ERROR([You cannot build a client JVM for a 64-bit machine.]) fi fi if test "x$JVM_VARIANT_KERNEL" = xtrue; then if test "x$HOST_CPU_BITS" = x64; then - AC_ERROR([You cannot build a kernel JVM for a 64-bit machine.]) + AC_MSG_ERROR([You cannot build a kernel JVM for a 64-bit machine.]) fi fi @@ -426,7 +428,7 @@ [ DEBUG_LEVEL="${withval}" if test "x$ENABLE_DEBUG" = xyes; then - AC_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.]) + AC_MSG_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.]) fi ]) AC_MSG_RESULT([$DEBUG_LEVEL]) @@ -434,7 +436,7 @@ if test "x$DEBUG_LEVEL" != xrelease && \ test "x$DEBUG_LEVEL" != xfastdebug && \ test "x$DEBUG_LEVEL" != xslowdebug; then - AC_ERROR([Allowed debug levels are: release, fastdebug and slowdebug]) + AC_MSG_ERROR([Allowed debug levels are: release, fastdebug and slowdebug]) fi case $DEBUG_LEVEL in @@ -520,14 +522,18 @@ if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then # We are running configure from the src root. # Create a default ./build/host-variant-debuglevel output root. - OUTPUT_ROOT="$SRC_ROOT/build/${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + CONF_NAME="${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" mkdir -p "$OUTPUT_ROOT" if test ! -d "$OUTPUT_ROOT"; then - AC_ERROR([Could not create build directory $OUTPUT_ROOT]) + AC_MSG_ERROR([Could not create build directory $OUTPUT_ROOT]) fi else # We are running configure from outside of the src dir. # Then use the current directory as output dir! + # If configuration is situated in normal build directory, just use the build + # directory name as configuration name, otherwise use the complete path. + CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` OUTPUT_ROOT="$CURDIR" fi @@ -565,7 +571,7 @@ if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then AC_MSG_CHECKING([if we can find the VS installation]) AC_MSG_RESULT([no]) - AC_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + AC_MSG_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) fi case "$LEGACY_HOST_CPU1" in i?86) @@ -577,12 +583,12 @@ esac # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat cd $OUTPUT_ROOT - $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" + bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" cd $CURDIR if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then AC_MSG_CHECKING([if we can extract the needed env variables]) AC_MSG_RESULT([no]) - AC_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + AC_MSG_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) fi # Now set all paths and other env variables. This will allow the rest of # the configure script to find and run the compiler in the proper way. @@ -592,7 +598,7 @@ AC_MSG_RESULT([$VCINSTALLDIR]) else AC_MSG_RESULT([no]) - AC_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + AC_MSG_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) fi CHECK_FOR_VCINSTALLDIR=no SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" @@ -614,7 +620,7 @@ fi if test "x$MSVCR100DLL" = x; then AC_MSG_RESULT([no]) - AC_ERROR([Could not find msvcr100.dll !]) + AC_MSG_ERROR([Could not find msvcr100.dll !]) fi AC_MSG_RESULT([$MSVCR100DLL]) SPACESAFE(MSVCR100DLL,[the path to msvcr100.dll]) @@ -636,6 +642,7 @@ AC_CONFIG_FILES([$OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in]) AC_SUBST(SPEC, $OUTPUT_ROOT/spec.gmk) +AC_SUBST(CONF_NAME, $CONF_NAME) AC_SUBST(OUTPUT_ROOT, $OUTPUT_ROOT) # Where are the sources. Any of these can be overridden @@ -783,13 +790,15 @@ ORG_CXXFLAGS="$CXXFLAGS" ORG_OBJCFLAGS="$OBJCFLAGS" +prepare_help_system + # gcc is almost always present, but on Windows we # prefer cl.exe and on Solaris we prefer CC. # Thus test for them in this order. AC_PROG_CC([cl cc gcc]) if test "x$CC" = x; then help_on_build_dependency devkit - AC_ERROR([Could not find a compiler. $HELP_MSG]) + AC_MSG_ERROR([Could not find a compiler. $HELP_MSG]) fi if test "x$CC" = xcc && test "x$BUILD_OS" = xmacosx; then # Do not use cc on MacOSX use gcc instead. @@ -807,7 +816,7 @@ if test "x$CXX" = x || test "x$CC" = x; then help_on_build_dependency devkit - AC_ERROR([Could not find the needed compilers! $HELP_MSG ]) + AC_MSG_ERROR([Could not find the needed compilers! $HELP_MSG ]) fi if test "x$BUILD_OS" != xwindows; then @@ -832,9 +841,10 @@ AC_CHECK_TOOL(LD, ld) WHICHCMD(LD) -LDEXE="$LD" -LDCXX="$LD" -LDEXECXX="$LD" +LD="$CC" +LDEXE="$CC" +LDCXX="$CXX" +LDEXECXX="$CXX" # LDEXE is the linker to use, when creating executables. AC_SUBST(LDEXE) # Linking C++ libraries. @@ -856,7 +866,7 @@ AS_IF([test "x$BUILD_OS" = xwindows], [ # For now, assume that we are always compiling using cl.exe. CC_OUT_OPTION=-Fo - EXE_OUT_OPTION=-Fe + EXE_OUT_OPTION=-out: LD_OUT_OPTION=-out: AR_OUT_OPTION=-out: # On Windows, reject /usr/bin/link, which is a cygwin @@ -866,10 +876,9 @@ # the full path to the link.exe program. WHICHCMD_SPACESAFE([WINLD]) LD="$WINLD" - # However creating executables can only be done with cl.exe. - LDEXE="$CC" + LDEXE="$WINLD" LDCXX="$WINLD" - LDEXECXX="$CC" + LDEXECXX="$WINLD" AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) WHICHCMD_SPACESAFE([MT]) @@ -877,7 +886,7 @@ AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) WHICHCMD_SPACESAFE([RC]) - RC_FLAGS="/l 0x409 /r" + RC_FLAGS="-nologo /l 0x409 /r" AS_IF([test "x$VARIANT" = xOPT], [ RC_FLAGS="$RC_FLAGS -d NDEBUG" ]) @@ -903,14 +912,13 @@ WHICHCMD_SPACESAFE([DUMPBIN]) COMPILER_TYPE=CL - CFLAGS="$CFLAGS -nologo" - LDFLAGS="$LDFLAGS -nologo -dll -opt:ref -incremental:no " + CCXXFLAGS="$CCXXFLAGS -nologo" + LDFLAGS="$LDFLAGS -nologo -opt:ref -incremental:no" if test "x$LEGACY_HOST_CPU1" = xi586; then LDFLAGS="$LDFLAGS -safeseh" fi - if test "x$DEBUG_LEVEL" != xrelease; then - LDFLAGS="$LDFLAGS -debug" - fi + # TODO: make -debug optional "--disable-full-debug-symbols" + LDFLAGS="$LDFLAGS -debug" ]) AC_SUBST(RC_FLAGS) AC_SUBST(COMPILER_TYPE) @@ -933,7 +941,7 @@ AC_SUBST(AS) AC_SUBST(ASFLAGS) -if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = macosx; then +if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = xmacosx; then # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. # While waiting for a better solution, the current workaround is to use -mstackrealign. CFLAGS="$CFLAGS -mstackrealign" @@ -944,7 +952,7 @@ ], [ AC_MSG_RESULT([no]) - AC_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.]) + AC_MSG_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.]) ]) fi @@ -979,7 +987,7 @@ if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then AC_MSG_RESULT([no]) cat $OUTPUT_ROOT/uncygdrive1.log - AC_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe]) + AC_MSG_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe]) fi AC_MSG_RESULT([$UNCYGDRIVE]) AC_MSG_CHECKING([if uncygdrive.exe works]) @@ -989,7 +997,7 @@ if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then AC_MSG_RESULT([no]) cat $OUTPUT_ROOT/uncygdrive2.log - AC_ERROR([Uncygdrive did not work!]) + AC_MSG_ERROR([Uncygdrive did not work!]) fi AC_MSG_RESULT([yes]) rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj @@ -1014,7 +1022,15 @@ # (The JVM can use 32 or 64 bit Java pointers but that decision # is made at runtime.) # +AC_LANG_PUSH(C++) +OLD_CXXFLAGS="$CXXFLAGS" +if test "x$HOST_OS" = xsolaris && test "x$with_data_model" != x; then + CXXFLAGS="-m{$with_data_model} $CXXFLAGS" +fi AC_CHECK_SIZEOF([int *], [1111]) +CXXFLAGS="$OLD_CXXFLAGS" +AC_LANG_POP(C++) + if test "x$ac_cv_sizeof_int_p" = x0; then # The test failed, lets pick the assumed value. ARCH_DATA_MODEL=$HOST_CPU_BITS @@ -1032,7 +1048,7 @@ AC_SUBST(ARCH_DATA_MODEL) if test "x$ARCH_DATA_MODEL" != "x$HOST_CPU_BITS"; then - AC_ERROR([The tested number of bits in the host ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the host ($HOST_CPU_BITS)]) + AC_MSG_ERROR([The tested number of bits in the host ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the host ($HOST_CPU_BITS)]) fi ############################################################################### @@ -1084,12 +1100,16 @@ OBJ_SUFFIX='.o' EXE_SUFFIX='' SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' - SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$(JDK_TOPDIR)/$1' + SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1' LD="$CC" LDEXE="$CC" LDCXX="$CXX" LDEXECXX="$CXX" + # TODO: for embedded set --strip-unneeded + POST_STRIP_CMD="$STRIP -g" # Linking is different on MacOSX if test "x$BUILD_OS" = xmacosx; then @@ -1102,6 +1122,7 @@ SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' SET_SHARED_LIBRARY_MAPFILE='' SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' + POST_STRIP_CMD="$STRIP -S" fi else if test "x$BUILD_OS" = xsolaris; then @@ -1117,9 +1138,13 @@ OBJ_SUFFIX='.o' EXE_SUFFIX='' SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='-M $(JDK_TOPDIR)/$1' + SET_SHARED_LIBRARY_MAPFILE='-M $1' + C_FLAG_REORDER='-xF' + CXX_FLAG_REORDER='-xF' SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1' CFLAGS_JDKLIB_EXTRA='-xstrconst -D__solaris__' + POST_STRIP_CMD="$STRIP -x" + POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" fi if test "x$BUILD_OS" = xwindows; then # If it is not gcc, then assume it is the MS Visual Studio compiler @@ -1149,7 +1174,11 @@ AC_SUBST(SHARED_LIBRARY_FLAGS) AC_SUBST(SET_SHARED_LIBRARY_NAME) AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) +AC_SUBST(C_FLAG_REORDER) +AC_SUBST(CXX_FLAG_REORDER) AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) +AC_SUBST(POST_STRIP_CMD) +AC_SUBST(POST_MCS_CMD) # The (cross) compiler is now configured, we can now test capabilities # of the host platform. @@ -1161,13 +1190,13 @@ AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal"]) if test "x$ENDIAN" = xuniversal; then - AC_ERROR([It seems like someone needs to decide how we are to deal with universal binaries on the MacOSX?]) + AC_MSG_ERROR([It seems like someone needs to decide how we are to deal with universal binaries on the MacOSX?]) fi if test "x$ENDIAN" = xunknown; then ENDIAN="$HOST_CPU_ENDIAN" fi if test "x$ENDIAN" != "x$HOST_CPU_ENDIAN"; then - AC_WARN([The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)]) + AC_MSG_WARN([The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)]) ENDIAN="$HOST_CPU_ENDIAN" fi AC_SUBST(ENDIAN) @@ -1185,25 +1214,25 @@ BOOT_JDK_FOUND=yes fi if test "x$BOOT_JDK_FOUND" = xno; then - BDEPS_CHECK_MODULE(BOOT_JDK, bootjdk, xxx, [BOOT_JDK_FOUND=yes], [BOOT_JDK_FOUND=no]) + BDEPS_CHECK_MODULE(BOOT_JDK, boot-jdk, xxx, [BOOT_JDK_FOUND=yes], [BOOT_JDK_FOUND=no]) fi if test "x$BOOT_JDK_FOUND" = xno; then if test "x$JAVA_HOME" != x; then if test ! -d "$JAVA_HOME"; then - AC_ERROR([Your JAVA_HOME points to a non-existing directory!]) + AC_MSG_ERROR([Your JAVA_HOME points to a non-existing directory!]) fi # Aha, the user has set a JAVA_HOME # let us use that as the Boot JDK. - BOOT_JDK=$JAVA_HOME + BOOT_JDK="$JAVA_HOME" BOOT_JDK_FOUND=yes # To be on the safe side, lets check that it is a JDK. - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java + if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then + JAVAC="$BOOT_JDK/bin/javac" + JAVA="$BOOT_JDK/bin/java" BOOT_JDK_FOUND=yes else - AC_ERROR([Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK.]) + AC_MSG_ERROR([Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=[$]JAVA_HOME]) fi fi fi @@ -1260,11 +1289,11 @@ fi if test "x$BOOT_JDK_FOUND" = xno; then help_on_build_dependency openjdk - AC_ERROR([Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG]) + AC_MSG_ERROR([Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG]) fi else help_on_build_dependency openjdk - AC_ERROR([Could not find a JDK. $HELP_MSG]) + AC_MSG_ERROR([Could not find a JDK. $HELP_MSG]) fi fi @@ -1281,7 +1310,7 @@ # On MacOSX it is called classes.jar BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar if test ! -f $BOOT_RTJAR; then - AC_ERROR([Cannot find the rt.jar or its equivalent!]) + AC_MSG_ERROR([Cannot find the rt.jar or its equivalent!]) fi # Remove the .. BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" @@ -1303,7 +1332,7 @@ AC_MSG_CHECKING([for java in Boot JDK]) JAVA=$BOOT_JDK/bin/java if test ! -x $JAVA; then - AC_ERROR([Could not find a working java]) + AC_MSG_ERROR([Could not find a working java]) fi BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` AC_MSG_RESULT([yes $BOOT_JDK_VERSION]) @@ -1313,7 +1342,7 @@ [FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`] if test "x$FOUND_VERSION_78" = x; then help_on_build_dependency openjdk - AC_ERROR([Your bootjdk must be version 7 or 8. $HELP_MSG]) + AC_MSG_ERROR([Your boot-jdk must be version 7 or 8. $HELP_MSG]) fi # When compiling code to be executed by the Boot JDK, force jdk7 compatibility. @@ -1324,17 +1353,17 @@ AC_MSG_CHECKING([for javac in Boot JDK]) JAVAC=$BOOT_JDK/bin/javac if test ! -x $JAVAC; then - AC_ERROR([Could not find a working javac]) + AC_MSG_ERROR([Could not find a working javac]) fi AC_MSG_RESULT(yes) AC_SUBST(JAVAC) AC_SUBST(JAVAC_FLAGS) -# Use the javac tool from the Boot JDK. +# Use the javah tool from the Boot JDK. AC_MSG_CHECKING([for javah in Boot JDK]) JAVAH=$BOOT_JDK/bin/javah if test ! -x $JAVAH; then - AC_ERROR([Could not find a working javah]) + AC_MSG_ERROR([Could not find a working javah]) fi AC_MSG_RESULT(yes) AC_SUBST(JAVAH) @@ -1343,7 +1372,7 @@ AC_MSG_CHECKING([for jar in Boot JDK]) JAR=$BOOT_JDK/bin/jar if test ! -x $JAR; then - AC_ERROR([Could not find a working jar]) + AC_MSG_ERROR([Could not find a working jar]) fi AC_SUBST(JAR) AC_MSG_RESULT(yes) @@ -1352,11 +1381,20 @@ AC_MSG_CHECKING([for rmic in Boot JDK]) RMIC=$BOOT_JDK/bin/rmic if test ! -x $RMIC; then - AC_ERROR([Could not find a working rmic]) + AC_MSG_ERROR([Could not find a working rmic]) fi AC_SUBST(RMIC) AC_MSG_RESULT(yes) +# Use the native2ascii tool from the Boot JDK. +AC_MSG_CHECKING([for native2ascii in Boot JDK]) +NATIVE2ASCII=$BOOT_JDK/bin/native2ascii +if test ! -x $NATIVE2ASCII; then + AC_MSG_ERROR([Could not find a working native2ascii]) +fi +AC_MSG_RESULT(yes) +AC_SUBST(NATIVE2ASCII) + ############################################################################### # # Pickup additional source for a component from outside of the source root @@ -1382,7 +1420,7 @@ if test "x$with_add_source_root" != x; then if ! test -d $with_add_source_root; then - AC_ERROR([Trying to use a non-existant add-source-root $with_add_source_root]) + AC_MSG_ERROR([Trying to use a non-existant add-source-root $with_add_source_root]) fi CURDIR="$PWD" cd "$with_add_source_root" @@ -1392,34 +1430,34 @@ # If it does, then it is usually an error, prevent this. if test -f $with_add_source_root/langtools/makefiles/Makefile || \ test -f $with_add_source_root/langtools/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources.]) + AC_MSG_ERROR([Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources.]) fi if test -f $with_add_source_root/corba/makefiles/Makefile || \ test -f $with_add_source_root/corba/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full corba repo! An add source root should only contain additional sources.]) + AC_MSG_ERROR([Your add source root seems to contain a full corba repo! An add source root should only contain additional sources.]) fi if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ test -f $with_add_source_root/jaxp/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources.]) + AC_MSG_ERROR([Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources.]) fi if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ test -f $with_add_source_root/jaxws/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources.]) + AC_MSG_ERROR([Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources.]) fi if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ test -f $with_add_source_root/hotspot/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources.]) + AC_MSG_ERROR([Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources.]) fi if test -f $with_add_source_root/jdk/makefiles/Makefile || \ test -f $with_add_source_root/jdk/make/Makefile; then - AC_ERROR([Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources.]) + AC_MSG_ERROR([Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources.]) fi fi AC_SUBST(ADD_SRC_ROOT) if test "x$with_override_source_root" != x; then if ! test -d $with_override_source_root; then - AC_ERROR([Trying to use a non-existant override-source-root $with_override_source_root]) + AC_MSG_ERROR([Trying to use a non-existant override-source-root $with_override_source_root]) fi CURDIR="$PWD" cd "$with_override_source_root" @@ -1427,27 +1465,27 @@ cd "$CURDIR" if test -f $with_override_source_root/langtools/makefiles/Makefile || \ test -f $with_override_source_root/langtools/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override.]) + AC_MSG_ERROR([Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override.]) fi if test -f $with_override_source_root/corba/makefiles/Makefile || \ test -f $with_override_source_root/corba/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full corba repo! An override source root should only contain sources that override.]) + AC_MSG_ERROR([Your override source root seems to contain a full corba repo! An override source root should only contain sources that override.]) fi if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ test -f $with_override_source_root/jaxp/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override.]) + AC_MSG_ERROR([Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override.]) fi if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ test -f $with_override_source_root/jaxws/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override.]) + AC_MSG_ERROR([Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override.]) fi if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ test -f $with_override_source_root/hotspot/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override.]) + AC_MSG_ERROR([Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override.]) fi if test -f $with_override_source_root/jdk/makefiles/Makefile || \ test -f $with_override_source_root/jdk/make/Makefile; then - AC_ERROR([Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override.]) + AC_MSG_ERROR([Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override.]) fi fi AC_SUBST(OVERRIDE_SRC_ROOT) @@ -1495,7 +1533,7 @@ LANGTOOLS_TOPDIR="`pwd`" cd "$CURDIR" if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override langtools with a full langtools repo!]) + AC_MSG_ERROR([You have to override langtools with a full langtools repo!]) fi AC_MSG_CHECKING([if langtools should be overridden]) AC_MSG_RESULT([yes with $LANGTOOLS_TOPDIR]) @@ -1506,7 +1544,7 @@ CORBA_TOPDIR="`pwd`" cd "$CURDIR" if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override corba with a full corba repo!]) + AC_MSG_ERROR([You have to override corba with a full corba repo!]) fi AC_MSG_CHECKING([if corba should be overridden]) AC_MSG_RESULT([yes with $CORBA_TOPDIR]) @@ -1517,7 +1555,7 @@ JAXP_TOPDIR="`pwd`" cd "$CURDIR" if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override jaxp with a full jaxp repo!]) + AC_MSG_ERROR([You have to override jaxp with a full jaxp repo!]) fi AC_MSG_CHECKING([if jaxp should be overridden]) AC_MSG_RESULT([yes with $JAXP_TOPDIR]) @@ -1528,7 +1566,7 @@ JAXWS_TOPDIR="`pwd`" cd "$CURDIR" if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override jaxws with a full jaxws repo!]) + AC_MSG_ERROR([You have to override jaxws with a full jaxws repo!]) fi AC_MSG_CHECKING([if jaxws should be overridden]) AC_MSG_RESULT([yes with $JAXWS_TOPDIR]) @@ -1540,7 +1578,7 @@ cd "$CURDIR" if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override hotspot with a full hotspot repo!]) + AC_MSG_ERROR([You have to override hotspot with a full hotspot repo!]) fi AC_MSG_CHECKING([if hotspot should be overridden]) AC_MSG_RESULT([yes with $HOTSPOT_TOPDIR]) @@ -1551,7 +1589,7 @@ JDK_TOPDIR="`pwd`" cd "$CURDIR" if ! test -f $JDK_TOPDIR/makefiles/Makefile; then - AC_ERROR([You have to override JDK with a full JDK repo!]) + AC_MSG_ERROR([You have to override JDK with a full JDK repo!]) fi AC_MSG_CHECKING([if JDK should be overridden]) AC_MSG_RESULT([yes with $JDK_TOPDIR]) @@ -1605,7 +1643,7 @@ SERVER_JAVA="$with_server_java" FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` if test "x$FOUND_VERSION" = x; then - AC_ERROR([Could not execute server java: $SERVER_JAVA]) + AC_MSG_ERROR([Could not execute server java: $SERVER_JAVA]) fi else SERVER_JAVA="" @@ -1806,12 +1844,9 @@ if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then help_on_build_dependency x11 - AC_ERROR([Could not find X11 libraries. $HELP_MSG]) + AC_MSG_ERROR([Could not find X11 libraries. $HELP_MSG]) fi -AC_SUBST(X_CFLAGS) -AC_SUBST(X_LIBS) - # Some of the old makefiles require a setting of OPENWIN_HOME # Since the X11R6 directory has disappeared on later Linuxes, # we need to probe for it. @@ -1828,6 +1863,18 @@ fi AC_SUBST(OPENWIN_HOME) + +# +# Weird Sol10 something check...TODO change to try compile +# +if test "x${HOST_OS}" = xsolaris; then + if test "`uname -r`" = "5.10"; then + if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then + X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" + fi + fi +fi + AC_LANG_PUSH(C) OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $X_CFLAGS" @@ -1839,9 +1886,12 @@ if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then help_on_build_dependency x11 - AC_ERROR([Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG]) + AC_MSG_ERROR([Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG]) fi +AC_SUBST(X_CFLAGS) +AC_SUBST(X_LIBS) + ############################################################################### # # The common unix printing system cups is used to print from java. @@ -1855,7 +1905,7 @@ [specify directory for the cups library])]) if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x$with_cups" != x || test "x$with_cups-include" != x || test "x$with_cups-lib" != x; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then AC_MSG_WARN([cups not used, so --with-cups is ignored]) fi CUPS_CFLAGS= @@ -1863,21 +1913,21 @@ else CUPS_FOUND=no - if test "x$with_cups" = xno || test "x$with_cups-include" = xno || test "x$with_cups-lib" = xno; then - AC_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.]) + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then + AC_MSG_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.]) fi - if test "x$with_cups" != x; then - CUPS_LIBS="-L$with_cups/lib -lcups" - CUPS_CFLAGS="-I$with_cups/include" + if test "x${with_cups}" != x; then + CUPS_LIBS="-L${with_cups}/lib -lcups" + CUPS_CFLAGS="-I${with_cups}/include" CUPS_FOUND=yes fi - if test "x$with_cups-include" != x; then - CUPS_CFLAGS="-I$with_cups-include" + if test "x${with_cups_include}" != x; then + CUPS_CFLAGS="-I${with_cups_include}" CUPS_FOUND=yes fi - if test "x$with_cups-lib" != x; then - CUPS_LIBS="-L$with_cups-lib -lcups" + if test "x${with_cups_lib}" != x; then + CUPS_LIBS="-L${with_cups_lib} -lcups" CUPS_FOUND=yes fi if test "x$CUPS_FOUND" = xno; then @@ -1910,7 +1960,7 @@ fi if test "x$CUPS_FOUND" = xno; then help_on_build_dependency cups - AC_ERROR([Could not find cups! $HELP_MSG ]) + AC_MSG_ERROR([Could not find cups! $HELP_MSG ]) fi fi @@ -1953,16 +2003,16 @@ if test "x$FREETYPE2_FOUND" = xyes; then # Verify that the directories exist if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then - AC_ERROR([Could not find the expected directories $with_freetype/lib and $with_freetype/include]) + AC_MSG_ERROR([Could not find the expected directories $with_freetype/lib and $with_freetype/include]) fi # List the contents of the lib. FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` if test "x$FREETYPELIB" = x; then - AC_ERROR([Could not find libfreetype.se nor freetype.dll in $with_freetype/lib]) + AC_MSG_ERROR([Could not find libfreetype.se nor freetype.dll in $with_freetype/lib]) fi # Check one h-file if ! test -s "$with_freetype/include/ft2build.h"; then - AC_ERROR([Could not find $with_freetype/include/ft2build.h]) + AC_MSG_ERROR([Could not find $with_freetype/include/ft2build.h]) fi fi fi @@ -2010,7 +2060,7 @@ fi if test "x$FREETYPE2_FOUND" = xno; then help_on_build_dependency freetype2 - AC_ERROR([Could not find freetype2! $HELP_MSG ]) + AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ]) fi fi @@ -2032,7 +2082,7 @@ [specify directory for the alsa library])]) if test "x$ALSA_NOT_NEEDED" = xyes; then - if test "x$with_alsa" != x || test "x$with_alsa-include" != x || test "x$with_alsa-lib" != x; then + if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then AC_MSG_WARN([alsa not used, so --with-alsa is ignored]) fi ALSA_CFLAGS= @@ -2040,21 +2090,21 @@ else ALSA_FOUND=no - if test "x$with_alsa" = xno || test "x$with_alsa-include" = xno || test "x$with_alsa-lib" = xno; then - AC_ERROR([It is not possible to disable the use of alsa. Remove the --without-alsa option.]) + if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then + AC_MSG_ERROR([It is not possible to disable the use of alsa. Remove the --without-alsa option.]) fi - if test "x$with_alsa" != x; then - ALSA_LIBS="-L$with_alsa/lib -lalsa" - ALSA_CFLAGS="-I$with_alsa/include" + if test "x${with_alsa}" != x; then + ALSA_LIBS="-L${with_alsa}/lib -lalsa" + ALSA_CFLAGS="-I${with_alsa}/include" ALSA_FOUND=yes fi - if test "x$with_alsa-include" != x; then - ALSA_CFLAGS="-I$with_alsa/include" + if test "x${with_alsa_include}" != x; then + ALSA_CFLAGS="-I${with_alsa_include}" ALSA_FOUND=yes fi - if test "x$with_alsa-lib" != x; then - ALSA_LIBS="-L$with_alsa/lib -lalsa" + if test "x${with_alsa_lib}" != x; then + ALSA_LIBS="-L${with_alsa_lib} -lalsa" ALSA_FOUND=yes fi if test "x$ALSA_FOUND" = xno; then @@ -2073,7 +2123,7 @@ fi if test "x$ALSA_FOUND" = xno; then help_on_build_dependency alsa - AC_ERROR([Could not find alsa! $HELP_MSG ]) + AC_MSG_ERROR([Could not find alsa! $HELP_MSG ]) fi fi @@ -2093,17 +2143,17 @@ AC_ARG_WITH(pulse-lib, [AS_HELP_STRING([--with-pulse-lib], [specify directory for the pulseaudio library])]) -if test "x$with_pulse" != x; then - PULSE_LIBS="-L$with_pulse/lib -lfreetype" - PULSE_CFLAGS="-I$with_pulse/include" +if test "x${with_pulse}" != x; then + PULSE_LIBS="-L${with_pulse}/lib -lfreetype" + PULSE_CFLAGS="-I${with_pulse}/include" PULSE_FOUND=yes fi -if test "x$with_pulse-include" != x; then - PULSE_CFLAGS="-I$with_pulse/include" +if test "x${with_pulse_include}" != x; then + PULSE_CFLAGS="-I${with_pulse_include}" PULSE_FOUND=yes fi -if test "x$with_pulse-lib" != x; then - PULSE_LIBS="-L$with_pulse/lib -lfreetype" +if test "x${with_pulse_lib}" != x; then + PULSE_LIBS="-L${with_pulse_lib} -lpulse" PULSE_FOUND=yes fi if test "x$PULSE_FOUND" = xno; then @@ -2123,7 +2173,7 @@ if test "x$PULSE_FOUND" = xno && test "x$PULSE_NOT_NEEDED" != xyes; then help_on_build_dependency pulse - AC_ERROR([Could not find pulse audio libraries. $HELP_MSG ]) + AC_MSG_ERROR([Could not find pulse audio libraries. $HELP_MSG ]) fi AC_SUBST(PULSE_CFLAGS) @@ -2170,9 +2220,9 @@ # Check if altzone exists in time.h # -AC_TRY_LINK([#include ], [return (int)altzone;], - has_altzone=yes, - has_altzone=no) +AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [return (int)altzone;])], + [has_altzone=yes], + [has_altzone=no]) if test "x$has_altzone" = xyes; then AC_DEFINE([HAVE_ALTZONE], 1, [Define if you have the external 'altzone' variable in time.h]) fi @@ -2182,7 +2232,7 @@ # Check the maths library # -AC_CHECK_LIB(m, main, [], +AC_CHECK_LIB(m, cos, [], [ AC_MSG_NOTICE([Maths library was not found]) ]) @@ -2190,6 +2240,17 @@ ############################################################################### # +# Check for libdl.so + +save_LIBS="$LIBS" +LIBS="" +AC_CHECK_LIB(dl,dlopen) +LIBDL="$LIBS" +AC_SUBST(LIBDL) +LIBS="$save_LIBS" + +############################################################################### +# # Should we run the painfully slow javadoc tool? # AC_MSG_CHECKING([whether to build documentation]) @@ -2225,6 +2286,9 @@ # Setup the opt flags for different compilers # and different operating systems. # +C_FLAG_DEPS="-MMD -MF" +CXX_FLAG_DEPS="-MMD -MF" + case $COMPILER_TYPE in CC ) D_FLAG="-g" @@ -2234,9 +2298,9 @@ macosx ) # On MacOSX we optimize for size, something # we should do for all platforms? - C_O_FLAG_HI="-O3" + C_O_FLAG_HI="-Os" C_O_FLAG_NORM="-Os" - C_O_FLAG_NONE="-O0" + C_O_FLAG_NONE="" ;; *) C_O_FLAG_HI="-O3" @@ -2249,19 +2313,61 @@ CXX_O_FLAG_NONE="$C_O_FLAG_NONE" ;; ossc ) + # + # Forte has different names for this with their C++ compiler... + # + CXX_FLAG_DEPS="-xMMD -xMF" + +# Extra options used with HIGHEST +# +# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be +# done with care, there are some assumptions below that need to +# be understood about the use of pointers, and IEEE behavior. +# +# Use non-standard floating point mode (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fns" +# Do some simplification of floating point arithmetic (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fsimple" +# Use single precision floating point with 'float' +CC_HIGHEST="$CC_HIGHEST -fsingle" +# Assume memory references via basic pointer types do not alias +# (Source with excessing pointer casting and data access with mixed +# pointer types are not recommended) +CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" +# Use intrinsic or inline versions for math/std functions +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" +# Loop data dependency optimizations (need -xO3 or higher) +CC_HIGHEST="$CC_HIGHEST -xdepend" +# Pointer parameters to functions do not overlap +# (Similar to -xalias_level=basic usage, but less obvious sometimes. +# If you pass in multiple pointers to the same data, do not use this) +CC_HIGHEST="$CC_HIGHEST -xrestrict" +# Inline some library routines +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xlibmil" +# Use optimized math routines +# (If you expect perfect errno behavior, do not use this) +# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now +#CC_HIGHEST="$CC_HIGHEST -xlibmopt" + case $LEGACY_HOST_CPU1 in i586) + C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" C_O_FLAG_HI="-xO4 -Wu,-O4~yz" C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" CXX_O_FLAG_NONE="" ;; sparc) + C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" CXX_O_FLAG_NONE="" @@ -2280,12 +2386,24 @@ ;; esac +if test -z "$C_O_FLAG_HIGHEST"; then + C_O_FLAG_HIGHEST="$C_O_FLAG_HI" +fi + +if test -z "$CXX_O_FLAG_HIGHEST"; then + CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" +fi + +AC_SUBST(C_O_FLAG_HIGHEST) AC_SUBST(C_O_FLAG_HI) AC_SUBST(C_O_FLAG_NORM) AC_SUBST(C_O_FLAG_NONE) +AC_SUBST(CXX_O_FLAG_HIGHEST) AC_SUBST(CXX_O_FLAG_HI) AC_SUBST(CXX_O_FLAG_NORM) AC_SUBST(CXX_O_FLAG_NONE) +AC_SUBST(C_FLAG_DEPS) +AC_SUBST(CXX_FLAG_DEPS) ############################################################################### # @@ -2403,16 +2521,17 @@ # case $COMPILER_NAME in gcc ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses -pipe -fno-omit-frame-pointer \ + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ + -pipe -fno-omit-frame-pointer \ -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" CFLAGS_JDK="$CFLAGS_JDK -fno-strict-aliasing" ;; ossc ) - CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa REQUIRED -v -mt -norunpath -xnolib" - CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt REQUIRED -features=no%except -DCC_NOEX" + CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" + CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" ;; cl ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ -DWIN32 -DIAL" @@ -2491,14 +2610,14 @@ # # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. if test "x$COMPILER_TYPE" = xCL; then - LDFLAGS_JDKLIB="$LDFLAGS -libpath:${JDK_OUTPUTDIR}/lib jvm.lib java.lib" + LDFLAGS_JDKLIB="$LDFLAGS -dll -libpath:${JDK_OUTPUTDIR}/lib -libpath:${JDK_OUTPUTDIR}/objs" LDFLAGS_JDKLIB_SUFFIX="" - if test "x$HOST_CPU_BITS" = "x64"; then - LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj64/jli.lib" + if test "$HOST_CPU_BITS" == "64"; then + LDFLAGS_STACK_SIZE=1048576 else - LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj/jli.lib" + LDFLAGS_STACK_SIZE=327680 fi - LDFLAGS_JDKEXE_SUFFIX="" + LDFLAGS_JDKEXE="$LDFLAGS /STACK:$LDFLAGS_STACK_SIZE" else # If this is a --hash-style=gnu system, use --hash-style=both, why? HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` @@ -2513,9 +2632,11 @@ fi fi - LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ + LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS \ + -L${JDK_OUTPUTDIR}/objs \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" if test "x$COMPILER_NAME" = xossc; then LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" @@ -2523,8 +2644,10 @@ # Only the jli library is explicitly linked when the launchers are built. # The libjvm is then dynamically loaded/linked by the launcher. - LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" - LDFLAGS_JDKEXE_SUFFIX="-ljli" + if test "x$HOST_OS" != "xmacosx"; then + LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" + LDFLAGS_JDKEXE_SUFFIX="-ljli" + fi fi @@ -2557,9 +2680,9 @@ AC_LANG_PUSH(C++) OLD_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -lstdc++" - AC_TRY_LINK([], [return 0;], - has_dynamic_libstdcxx=yes, - has_dynamic_libstdcxx=no) + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], + [has_dynamic_libstdcxx=yes], + [has_dynamic_libstdcxx=no]) CXXFLAGS="$OLD_CXXFLAGS" AC_LANG_POP(C++) AC_MSG_RESULT([$has_dynamic_libstdcxx]) @@ -2572,16 +2695,16 @@ OLD_CXX="$CXX" LIBS="$STATIC_STDCXX_FLAGS" CXX="$CC" - AC_TRY_LINK([], [return 0;], - has_static_libstdcxx=yes, - has_static_libstdcxx=no) + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], + [has_static_libstdcxx=yes], + [has_static_libstdcxx=no]) LIBS="$OLD_LIBS" CXX="$OLD_CXX" AC_LANG_POP(C++) AC_MSG_RESULT([$has_static_libstdcxx]) if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then - AC_ERROR([I cannot link to stdc++! Neither dynamically nor statically.]) + AC_MSG_ERROR([I cannot link to stdc++! Neither dynamically nor statically.]) fi if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then @@ -2611,17 +2734,39 @@ # Could someone enlighten this configure script with a comment about libCrun? # The LEGACY_HOST_CPU3 is the setting for ISA_DIR. # -if test "x$HOST_OS" = xsolaris; then - LIBCXX="$LIBCXX /usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1" +if test "x$HOST_OS" = xsolaris && test "x$LIBCXX" = x; then + LIBCXX="/usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1" +fi + +# TODO better (platform agnostic) test +if test "x$HOST_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then + LIBCXX="-lstdc++" fi AC_SUBST(LIBCXX) ############################################################################### + +OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" +OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" +OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" +OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" +AC_SUBST(OS_VERSION_MAJOR) +AC_SUBST(OS_VERSION_MINOR) +AC_SUBST(OS_VERSION_MICRO) + +############################################################################### # # Misc # +# The name of the Service Agent jar. +SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" +if test "x$HOST_OS" = "xwindows"; then + SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" +fi +AC_SUBST(SALIB_NAME) + # Control wether Hotspot runs Queens test after build. AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build], [enable running of Queens test after Hotspot build (not yet available) @<:@disabled@:>@])],, @@ -2635,17 +2780,99 @@ ############################################################################### # -# A helpful message at the end of the configure run. +# Choose cacerts source file # -if test "x$CCACHE_FOUND" = x && test "x$GCC" = xyes; then - help_on_build_dependency ccache - - printf "\nTip of the day:\nYou should really install ccache version 3.1.4 or newer.\n" - printf "It gives a tremendous speedup for C++ recompilations with precompiled headers!\n" -fi +AC_ARG_WITH(cacerts-file, [AS_HELP_STRING([--with-cacerts-file], + [specify alternative cacerts file])]) +if test "x$with_cacerts_file" != x; then + CACERTS_FILE=$with_cacerts_file +else + if test "x$OPENJDK" = "xtrue"; then + CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts + else + CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal + fi +fi +AC_SUBST(CACERTS_FILE) + +# Check if build directory is on local disk. +# return 0 if it is on local disk, non-0 if on remote disk or failure +function is_directory_on_local_disk { + # df -l lists only local disks; if the given directory is not found then + # a non-zero exit code is given + $DF -l $1 > /dev/null 2>&1 +} -if test "x$CCACHE_FOUND" != x && test "x$HAS_GOOD_CCACHE" = x; then - printf "You have a ccache installed, but it is a version prior to 3.1.4. Try upgrading.\n" +AC_MSG_CHECKING([if build directory is on local disk]) +if is_directory_on_local_disk $OUTPUT_ROOT; then + OUTPUT_DIR_IS_LOCAL="yes" +else + OUTPUT_DIR_IS_LOCAL="no" +fi +AC_MSG_RESULT($OUTPUT_DIR_IS_LOCAL) + +# We're messing a bit with internal autoconf variables to put the config.status in the +# output directory instead of the current directory. +CONFIG_STATUS=$OUTPUT_ROOT/config.status + +# Now create the actual output files, after this, the main work of configure is done +AC_OUTPUT + +# Finally output some useful information to the user + +if test "x$CCACHE_FOUND" != x; then + if test "x$HAS_GOOD_CCACHE" = x; then + CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" + CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." + else + CCACHE_STATUS="installed and in use" + fi +else + if test "x$GCC" = xyes; then + CCACHE_STATUS="not installed (consider installing)" + CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." + else + CCACHE_STATUS="not available for your system" + fi fi -AC_OUTPUT +printf "\n" +printf "====================================================\n" +printf "A new configuration has been successfully created in\n" +printf "$OUTPUT_ROOT\n" +if test "x$CONFIGURE_COMMAND_LINE" != x; then + printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" +else + printf "using default settings.\n" +fi + +printf "\n" +printf "Configuration summary:\n" +printf "* Debug level: $DEBUG_LEVEL\n" +printf "* JDK variant: $JDK_VARIANT\n" +printf "* JVM variants: $with_jvm_variants\n" +printf "* Host info: OS: $HOST_OS, CPU architecture: $HOST_CPU_ARCH, address length: $HOST_CPU_BITS\n" +printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Build performance summary:\n" +printf "* Cores to use: $NUM_CORES\n" +printf "* Memory limit: $MEMORY_SIZE MB\n" +printf "* ccache status: $CCACHE_STATUS\n" + +if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then + printf "\n" + printf "WARNING: Your build output directory is not on a local disk.\n" + printf "This will severely degrade build performance!\n" + printf "It is recommended that you create an output directory on a local disk,\n" + printf "and run the configure script again from that directory.\n" +fi + +if test "x$CCACHE_HELP_MSG" != x; then + printf "\n" + printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" + printf "$CCACHE_HELP_MSG\n" + + help_on_build_dependency ccache + printf "$HELP_MSG\n" +fi diff -r 38ccffcbab0c -r 356f4e5f57fe common/autoconf/help.m4 --- a/common/autoconf/help.m4 Tue May 29 00:27:12 2012 +0100 +++ b/common/autoconf/help.m4 Thu Aug 02 14:00:03 2012 +0100 @@ -23,18 +23,20 @@ # questions. # +function prepare_help_system { + AC_CHECK_PROGS(PKGHANDLER, apt-get yum port pkgutil pkgadd) +} + function help_on_build_dependency { # Print a helpful message on how to acquire the necessary build dependency. # $1 is the help tag: freetyp2, cups, pulse, alsa etc MISSING_DEPENDENCY=$1 PKGHANDLER_COMMAND= - AC_CHECK_PROGS(PKGHANDLER, apt-get yum port pkgutil pkgadd) - case $PKGHANDLER in apt-get) apt_help $MISSING_DEPENDENCY ;; - yum) + yum) yum_help $MISSING_DEPENDENCY ;; port) port_help $MISSING_DEPENDENCY ;; @@ -47,7 +49,7 @@ esac if test "x$PKGHANDLER_COMMAND" != x; then - HELP_MSG="Try running '$PKGHANDLER_COMMAND'." + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." fi } diff -r 38ccffcbab0c -r 356f4e5f57fe common/autoconf/platform.m4 --- a/common/autoconf/platform.m4 Tue May 29 00:27:12 2012 +0100 +++ b/common/autoconf/platform.m4 Thu Aug 02 14:00:03 2012 +0100 @@ -48,7 +48,7 @@ AC_DEFUN([CHECK_NONEMPTY], [ # Test that variable $1 is not empty. - if test "" = "[$]$1"; then AC_ERROR(Could not find translit($1,A-Z,a-z) !); fi + if test "" = "[$]$1"; then AC_MSG_ERROR(Could not find translit($1,A-Z,a-z) !); fi ]) AC_DEFUN([ADD_JVM_ARG_IF_OK], @@ -97,7 +97,7 @@ $1=`$CYGPATH -s -m -a "[$]$1"` $1=`$CYGPATH -u "[$]$1"` else - AC_ERROR([You cannot have spaces in $2! "[$]$1"]) + AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"]) fi fi ]) @@ -215,7 +215,7 @@ AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers]) PUSHED_FLAGS="$CXXFLAGS" CXXFLAGS="-fpch-preprocess $CXXFLAGS" - AC_TRY_COMPILE([], [], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no]) CXXFLAGS="$PUSHED_FLAGS" if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then AC_MSG_RESULT([yes]) @@ -257,7 +257,7 @@ # The same values are setup for BUILD_... # # And the legacy variables, for controlling the old makefiles. - # LEGACY_HOST_CPU1=i586,amd64,sparc,sparcv9,arm,arm64... + # LEGACY_HOST_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris) # LEGACY_HOST_OS_API=solaris,windows @@ -276,7 +276,14 @@ if test "x$HOST_OS" != xsolaris; then LEGACY_HOST_CPU3="" LEGACY_BUILD_CPU3="" - fi + fi + + # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_HOST_CPU1) ... + if test "x$HOST_OS" = xmacosx && test "x$HOST_CPU" = xx64; then + LEGACY_HOST_CPU1="x86_64" + fi + + SET_RELEASE_FILE_OS_VALUES() ]) AC_DEFUN([EXTRACT_VARS_FROM_OS_TO], @@ -427,7 +434,7 @@ VAR_LEGACY_CPU=s390x ;; *) - AC_ERROR([unsupported cpu $1]) + AC_MSG_ERROR([unsupported cpu $1]) ;; esac @@ -515,3 +522,26 @@ $1="$tmp" fi ]) + +AC_DEFUN([SET_RELEASE_FILE_OS_VALUES], +[ + if test "x$HOST_OS" = "xsolaris"; then + REQUIRED_OS_NAME=SunOS + REQUIRED_OS_VERSION=5.10 + fi + if test "x$HOST_OS" = "xlinux"; then + REQUIRED_OS_NAME=Linux + REQUIRED_OS_VERSION=2.6 + fi + if test "x$HOST_OS" = "xwindows"; then + REQUIRED_OS_NAME=Windows + REQUIRED_OS_VERSION=5.1 + fi + if test "x$HOST_OS" = "xmacosx"; then + REQUIRED_OS_NAME=Darwin + REQUIRED_OS_VERSION=11.2 + fi + + AC_SUBST(REQUIRED_OS_NAME) + AC_SUBST(REQUIRED_OS_VERSION) +]) diff -r 38ccffcbab0c -r 356f4e5f57fe common/autoconf/spec.gmk.in --- a/common/autoconf/spec.gmk.in Tue May 29 00:27:12 2012 +0100 +++ b/common/autoconf/spec.gmk.in Thu Aug 02 14:00:03 2012 +0100 @@ -64,6 +64,9 @@ # A self-referential reference to this file. SPEC:=@SPEC@ +# The "human readable" name of this configuration +CONF_NAME:=@CONF_NAME@ + # The built jdk will run in this host system. HOST:=@HOST@ HOST_OS:=@HOST_OS@ @@ -87,6 +90,10 @@ BUILD_CPU_BITS:=@BUILD_CPU_BITS@ BUILD_CPU_ENDIAN:=@BUILD_CPU_ENDIAN@ +# Legacy OS values for use in release file. +REQUIRED_OS_NAME:=@REQUIRED_OS_NAME@ +REQUIRED_OS_VERSION:=@REQUIRED_OS_VERSION@ + # Old name for HOST_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc) PLATFORM:=@HOST_OS@ # Old name for HOST_CPU, uses i586 and amd64, instead of ia32 and x64. @@ -105,6 +112,7 @@ @SET_OPENJDK@ JIGSAW:=@JIGSAW@ LIBM:=-lm +LIBDL:=@LIBDL@ # colon or semicolon PATH_SEP:=@PATH_SEP@ @@ -287,8 +295,8 @@ PACKAGE_PATH=@PACKAGE_PATH@ -CACERTS_FILE:=$(SRC_ROOT)/jdk/src/share/lib/security/cacerts -#CACERTS_INT=$(CLOSED_SHARE_SRC)/lib/security/cacerts.internal +# Source file for cacerts +CACERTS_FILE=@CACERTS_FILE@ #MOZILLA_HEADERS_PATH:= @@ -308,13 +316,18 @@ AR_OUT_OPTION:=@AR_OUT_OPTION@ # Flags used for overriding the default opt setting for a C/C++ source file. +C_O_FLAG_HIGHEST:=@C_O_FLAG_HIGHEST@ C_O_FLAG_HI:=@C_O_FLAG_HI@ C_O_FLAG_NORM:=@C_O_FLAG_NORM@ C_O_FLAG_NONE:=@C_O_FLAG_NONE@ +CXX_O_FLAG_HIGHEST:=@CXX_O_FLAG_HIGHEST@ CXX_O_FLAG_HI:=@CXX_O_FLAG_HI@ CXX_O_FLAG_NORM:=@CXX_O_FLAG_NORM@ CXX_O_FLAG_NONE:=@CXX_O_FLAG_NONE@ +C_FLAG_DEPS:=@C_FLAG_DEPS@ +CXX_FLAG_DEPS:=@CXX_FLAG_DEPS@ + # Tools that potentially need to be cross compilation aware. CC:=@UNCYGDRIVE@ @CCACHE@ @CC@ @@ -386,6 +399,11 @@ # (Note absence of := assignment, because we do not want to evaluate the macro body here) SET_SHARED_LIBRARY_MAPFILE=@SET_SHARED_LIBRARY_MAPFILE@ +# Options for C/CXX compiler to be used if linking is performed +# using reorder file +C_FLAG_REORDER:=@C_FLAG_REORDER@ +CXX_FLAG_REORDER:=@CXX_FLAG_REORDER@ + # Options to linker to specify the library name. # (Note absence of := assignment, because we do not want to evaluate the macro body here) SET_SHARED_LIBRARY_NAME=@SET_SHARED_LIBRARY_NAME@ @@ -406,6 +424,9 @@ EXE_SUFFIX:=@EXE_SUFFIX@ OBJ_SUFFIX:=@OBJ_SUFFIX@ +POST_STRIP_CMD:=@POST_STRIP_CMD@ +POST_MCS_CMD:=@POST_MCS_CMD@ + JAVA_FLAGS:=@BOOT_JDK_JVMARGS@ JAVA=@UNCYGDRIVE@ @JAVA@ $(JAVA_FLAGS) @@ -419,6 +440,8 @@ RMIC:=@UNCYGDRIVE@ @RMIC@ +NATIVE2ASCII:=@UNCYGDRIVE@ @NATIVE2ASCII@ + BOOT_JAR_CMD:=@UNCYGDRIVE@ @JAR@ BOOT_JAR_JFLAGS:= @@ -483,6 +506,7 @@ READELF:=@READELF@ EXPR:=@EXPR@ FILE:=@FILE@ +HG:=@HG@ UNCYGDRIVE:=@UNCYGDRIVE@ @@ -584,5 +608,13 @@ # Misc # +# Name of Service Agent library +SALIB_NAME=@SALIB_NAME@ + # Control wether Hotspot runs Queens test after building TEST_IN_BUILD=@TEST_IN_BUILD@ + +OS_VERSION_MAJOR:=@OS_VERSION_MAJOR@ +OS_VERSION_MINOR:=@OS_VERSION_MINOR@ +OS_VERSION_MICRO:=@OS_VERSION_MICRO@ + diff -r 38ccffcbab0c -r 356f4e5f57fe common/bin/compareimage.sh --- a/common/bin/compareimage.sh Tue May 29 00:27:12 2012 +0100 +++ b/common/bin/compareimage.sh Thu Aug 02 14:00:03 2012 +0100 @@ -45,7 +45,7 @@ # if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then - echo "./common/bin/compareimages.sh old_jdk_image new_jdk_image" + echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image" echo "" echo "Compare the directory structure." echo "Compare the filenames in the directories." @@ -55,11 +55,11 @@ echo "Compare the native executables" echo "Compare the remaining files" echo "" - echo "./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other]" + echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other]" echo "" echo "Compare only the selected subset of the images." echo "" - echo "./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar" + echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar" echo "" echo "Compare only the CodePointIM.jar file" echo "Can be used to compare zips, libraries and executables." @@ -114,10 +114,10 @@ CMP_OTHER=true fi -DIFFJARZIP=`dirname $0`/diffjarzip.sh -DIFFLIB=`dirname $0`/difflib.sh -DIFFEXEC=`dirname $0`/diffexec.sh -export COMPARE_ROOT=/tmp/cimages +DIFFJARZIP="/bin/bash `dirname $0`/diffjarzip.sh" +DIFFLIB="/bin/bash `dirname $0`/difflib.sh" +DIFFEXEC="/bin/bash `dirname $0`/diffexec.sh" +export COMPARE_ROOT=/tmp/cimages.$USER mkdir -p $COMPARE_ROOT # Load the correct exception list. @@ -167,16 +167,64 @@ ONLY_OLD=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '<') if [ "$ONLY_OLD" ]; then echo Only in $OLD - echo $ONLY_OLD | sed 's|< ./|\t|g' | sed 's/ /\n/g' + echo "$ONLY_OLD" | sed 's|< ./| |g' fi # Differences in directories found. ONLY_NEW=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '>') if [ "$ONLY_NEW" ]; then echo Only in $NEW - echo $ONLY_NEW | sed 's|> ./|\t|g' | sed 's/ /\n/g' + echo "$ONLY_NEW" | sed 's|> ./| |g' fi fi +if [ "`uname`" == "SunOS" ]; then + PERM="gstat -c%a" +elif [ $OSTYPE == "cygwin" ]; then + PERM= +elif [ "`uname`" == "Darwin" ]; then + PERM="stat -f%p" +elif [ "`uname`" == "Linux" ]; then + PERM="stat -c%A" +else + PERM="stat -c%a" +fi + +if [ "${PERM}" ] +then + echo -n Permissions... + found="" + for f in `cd $OLD && find . -type f` + do + if [ ! -f ${OLD}/$f ]; then continue; fi + if [ ! -f ${NEW}/$f ]; then continue; fi + OP=`${PERM} ${OLD}/$f` + NP=`${PERM} ${NEW}/$f` + if [ "$OP" != "$NP" ] + then + if [ -z "$found" ]; then echo ; found="yes"; fi + printf "\told: ${OP} new: ${NP}\t$f\n" + fi + done + if [ -z "$found" ]; then echo ; found="yes"; fi +fi + +GENERAL_FILES=$(cd $OLD && find . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \ + ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ + ! -name "ct.sym" \ + | grep -v "./bin/" | sort | $FILTER) +echo General files... +for f in $GENERAL_FILES +do + if [ -e $NEW/$f ]; then + DIFF_OUT=$(diff $OLD/$f $NEW/$f 2>&1) + if [ -n "$DIFF_OUT" ]; then + echo $f + echo "$DIFF_OUT" + fi + fi +done + + if [ "x$CMP_ZIPS" == "xtrue" ]; then ZIPS=$(cd $OLD && find . -type f -name "*.zip" | sort | $FILTER) @@ -194,7 +242,7 @@ fi if [ "x$CMP_JARS" == "xtrue" ]; then - JARS=$(cd $OLD && find . -type f -name "*.jar" | sort | $FILTER) + JARS=$(cd $OLD && find . -type f -name "*.jar" -o -name "ct.sym" | sort | $FILTER) if [ -n "$JARS" ]; then echo Jar files... diff -r 38ccffcbab0c -r 356f4e5f57fe common/bin/diffexec.sh --- a/common/bin/diffexec.sh Tue May 29 00:27:12 2012 +0100 +++ b/common/bin/diffexec.sh Thu Aug 02 14:00:03 2012 +0100 @@ -50,14 +50,21 @@ if [ "`uname`" == "SunOS" ]; then NM=gnm - STAT=gstat + STAT="gstat -c%s" + LDD=ldd elif [ $OSTYPE == "cygwin" ]; then NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" NM_ARGS=/exports - STAT=stat + STAT="stat -c%s" + LDD= +elif [ "`uname`" == "Darwin" ]; then + NM=nm + STAT="stat -f%z" + LDD="otool -L" else NM=nm - STAT=stat + STAT="stat -c%s" + LDD=ldd fi # Should the differences be viewed? @@ -72,8 +79,8 @@ OLD=$(cd $(dirname $1) && pwd)/$(basename $1) NEW=$(cd $(dirname $2) && pwd)/$(basename $2) -OLD_SIZE=$($STAT -c%s "$OLD") -NEW_SIZE=$($STAT -c%s "$NEW") +OLD_SIZE=$($STAT "$OLD") +NEW_SIZE=$($STAT "$NEW") if [ $# -gt 3 ] then @@ -119,15 +126,41 @@ DIFFS=$(LANG=C diff $OLD_SYMBOLS $NEW_SYMBOLS) +if [ "${LDD}" ] +then + NAME=`basename $OLD` + TMP=$COMPARE_ROOT/ldd/ldd.${NAME} + rm -rf "${TMP}" + mkdir -p "${TMP}" + + (cd "${TMP}" && cp $OLD . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.old | uniq > dep.uniq.old) + (cd "${TMP}" && cp $NEW . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.new | uniq > dep.uniq.new) + (cd "${TMP}" && rm -f ${NAME}) + + DIFFS_DEP=$(LANG=C diff "${TMP}/dep.old" "${TMP}/dep.new") + DIFFS_UNIQ_DEP=$(LANG=C diff "${TMP}/dep.uniq.old" "${TMP}/dep.uniq.new") + + DEP_MSG= + if [ -z "${DIFFS_UNIQ_DEP}" -a -z "${DIFFS_DEP}" ]; then + DEP_MSG="Identical dependencies" + elif [ -z "${DIFFS_UNIQ_DEP}" ]; then + DEP_MSG="Redundant duplicate dependencies added" + RES=1 + else + DEP_MSG="DIFFERENT dependencies" + RES=1 + fi +fi + RESULT=0 if [ -n "$DIFFS" ]; then if [ $OLD_SIZE -ne $NEW_SIZE ] then - echo Differences, content AND size : $OLD_NAME + echo Differences, content AND size : $DEP_MSG : $OLD_NAME RESULT=4 else - echo Differences, content BUT SAME size: $OLD_NAME + echo Differences, content BUT SAME size: $DEP_MSG : $OLD_NAME RESULT=3 fi if [ "x$VIEW" == "xview" ]; then @@ -136,10 +169,10 @@ else if [ $OLD_SIZE -ne $NEW_SIZE ] then - echo Identical symbols BUT NEW size : $OLD_NAME + echo Identical symbols BUT NEW size : $DEP_MSG : $OLD_NAME RESULT=2 else - echo Identical symbols AND size, BUT not bytewise identical: $OLD_NAME + echo Identical symbols AND size, BUT not bytewise identical: $DEP_MSG : $OLD_NAME RESULT=1 fi fi diff -r 38ccffcbab0c -r 356f4e5f57fe common/bin/diffjarzip.sh --- a/common/bin/diffjarzip.sh Tue May 29 00:27:12 2012 +0100 +++ b/common/bin/diffjarzip.sh Thu Aug 02 14:00:03 2012 +0100 @@ -84,8 +84,8 @@ exit 2 fi -if [ "$OLD_SUFFIX" != "zip" ] && [ "$OLD_SUFFIX" != "jar" ]; then - echo The files have to be zip or jar! They are $OLD_SUFFIX +if [ "$OLD_SUFFIX" != "zip" ] && [ "$OLD_SUFFIX" != "jar" ] && [ "$OLD_SUFFIX" != "sym" ]; then + echo The files have to be zip, jar or sym! They are $OLD_SUFFIX exit 2 fi @@ -128,7 +128,7 @@ | sed "s|Only in $NEW_TEMPDIR| |"g | sed 's|: |/|g' fi -DIFFTEXT=`dirname $0`/difftext.sh +DIFFTEXT="/bin/bash `dirname $0`/difftext.sh" LANG=C $DIFF -rq $DIFF_FLAGS $OLD_TEMPDIR $NEW_TEMPDIR | grep differ | cut -f 2,4 -d ' ' | \ awk "{ print \"$DIFFTEXT \"\$1\" \"\$2 }" > $COMPARE_ROOT/diffing diff -r 38ccffcbab0c -r 356f4e5f57fe common/bin/difflib.sh --- a/common/bin/difflib.sh Tue May 29 00:27:12 2012 +0100 +++ b/common/bin/difflib.sh Thu Aug 02 14:00:03 2012 +0100 @@ -54,14 +54,21 @@ if [ "`uname`" == "SunOS" ]; then NM=gnm - STAT=gstat + STAT="gstat -c%s" + LDD=ldd elif [ $OSTYPE == "cygwin" ]; then NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" NM_ARGS=/exports - STAT=stat + STAT="stat -c%s" + LDD= +elif [ "`uname`" == "Darwin" ]; then + NM=nm + STAT="stat -f%z" + LDD="otool -L" else NM=nm - STAT=stat + STAT="stat -c%s" + LDD=ldd fi # Should the differences be viewed? @@ -76,8 +83,8 @@ OLD=$(cd $(dirname $1) && pwd)/$(basename $1) NEW=$(cd $(dirname $2) && pwd)/$(basename $2) -OLD_SIZE=$($STAT -c%s "$OLD") -NEW_SIZE=$($STAT -c%s "$NEW") +OLD_SIZE=$($STAT "$OLD") +NEW_SIZE=$($STAT "$NEW") if [ $# -gt 3 ] then @@ -139,13 +146,39 @@ RESULT=0 +if [ "${LDD}" ] +then + NAME=`basename $OLD` + TMP=$COMPARE_ROOT/ldd/ldd.${NAME} + rm -rf "${TMP}" + mkdir -p "${TMP}" + + (cd "${TMP}" && cp $OLD . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.old | uniq > dep.uniq.old) + (cd "${TMP}" && cp $NEW . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.new | uniq > dep.uniq.new) + (cd "${TMP}" && rm -f ${NAME}) + + DIFFS_DEP=$(LANG=C diff "${TMP}/dep.old" "${TMP}/dep.new") + DIFFS_UNIQ_DEP=$(LANG=C diff "${TMP}/dep.uniq.old" "${TMP}/dep.uniq.new") + + DEP_MSG= + if [ -z "${DIFFS_UNIQ_DEP}" -a -z "${DIFFS_DEP}" ]; then + DEP_MSG="Identical dependencies" + elif [ -z "${DIFFS_UNIQ_DEP}" ]; then + DEP_MSG="Redundant duplicate dependencies added" + RES=1 + else + DEP_MSG="DIFFERENT dependencies" + RES=1 + fi +fi + if [ -n "$DIFFS" ]; then if [ $OLD_SIZE -ne $NEW_SIZE ] then - echo Differences, content AND size : $OLD_NAME + echo Differences, content AND size : $DEP_MSG : $OLD_NAME RESULT=4 else - echo Differences, content BUT SAME size: $OLD_NAME + echo Differences, content BUT SAME size: $DEP_MSG : $OLD_NAME RESULT=3 fi if [ "x$VIEW" == "xview" ]; then @@ -154,10 +187,10 @@ else if [ $OLD_SIZE -ne $NEW_SIZE ] then - echo Identical symbols BUT NEW size : $OLD_NAME + echo Identical symbols BUT NEW size : $DEP_MSG : $OLD_NAME RESULT=2 else - echo Identical symbols AND size, BUT not bytewise identical: $OLD_NAME + echo Identical symbols AND size, BUT not bytewise identical: $DEP_MSG : $OLD_NAME RESULT=1 fi fi diff -r 38ccffcbab0c -r 356f4e5f57fe common/bin/logger.sh --- a/common/bin/logger.sh Tue May 29 00:27:12 2012 +0100 +++ b/common/bin/logger.sh Thu Aug 02 14:00:03 2012 +0100 @@ -37,10 +37,9 @@ # Create a temporary directory to store the result code from # the wrapped command. -RCDIR=`mktemp -d tmp.XXXXXX` || exit $? -trap "rm -rf '$RCDIR'" EXIT +RCDIR=`mktemp -dt jdk-build-logger.tmp.XXXXXX` || exit $? +trap "rm -rf \"$RCDIR\"" EXIT LOGFILE=$1 shift -(exec 3>&1 ; ("$@" 2>&1 1>&3; echo $? > $RCDIR/rc) | tee -a $LOGFILE 1>&2 ; exec 3>&-) | tee -a $LOGFILE -exit `cat $RCDIR/rc` - +(exec 3>&1 ; ("$@" 2>&1 1>&3; echo $? > "$RCDIR/rc") | tee -a $LOGFILE 1>&2 ; exec 3>&-) | tee -a $LOGFILE +exit `cat "$RCDIR/rc"` diff -r 38ccffcbab0c -r 356f4e5f57fe common/makefiles/JavaCompilation.gmk --- a/common/makefiles/JavaCompilation.gmk Tue May 29 00:27:12 2012 +0100 +++ b/common/makefiles/JavaCompilation.gmk Thu Aug 02 14:00:03 2012 +0100 @@ -126,8 +126,7 @@ # JAR:=Jar file to create # MANIFEST:=Optional manifest file template. # JARMAIN:=Optional main class to add to manifest - # SETUP:=The Java(h) compiler setup, needed to run javah. - # HEADERS:=Directory to put headers in + # JARINDEX := # SKIP_METAINF:=Set to prevent contents of an META-INF directory to be automatically # added to the archive. # EXTRA_MANIFEST_ATTR:=Extra attribute to add to manifest. @@ -143,9 +142,8 @@ $(if $(12),$1_$(strip $(12))) $(if $(13),$1_$(strip $(13))) $(if $(14),$1_$(strip $(14))) + $(if $(15),$1_$(strip $(15))) - $1_JVM := $$($$($1_SETUP)_JVM) - $1_JAVAH := $$($$($1_SETUP)_JAVAH) $1_JARMAIN:=$(strip $$($1_JARMAIN)) $1_JARNAME:=$$(notdir $$($1_JAR)) $1_MANIFEST_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_manifest @@ -155,19 +153,46 @@ $1_NATIVEAPI_NOTIFICATIONS_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_native_notifications $1_NATIVEAPI_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_native $1_BIN:=$$(dir $$($1_JAR)) + ifeq (,$$($1_SUFFIXES)) # No suffix was set, default to classes. $1_SUFFIXES:=.class endif # Convert suffixes to a find expression $1_FIND_PATTERNS:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_SUFFIXES)) + # On windows, a lot of includes/excludes risk making the command line too long, so + # writing the grep patterns to files. ifneq (,$$($1_INCLUDES)) - $1_GREP_INCLUDES:=| $(GREP) $$(foreach src,$$($1_SRCS),$$(addprefix -e$(SPACE)$$(src)/,$$($1_INCLUDES))) + $1_GREP_INCLUDE_PATTERNS:=$$(foreach src,$$($1_SRCS),\ + $$(addprefix $$(src)/,$$($1_INCLUDES))) + $$(eval $$(call ListPathsSafelyNow,$1_GREP_INCLUDE_PATTERNS,\n, \ + >> $$($1_BIN)/_the.$$($1_JARNAME)_include)) + $1_GREP_INCLUDES:=| $(GREP) -f $$($1_BIN)/_the.$$($1_JARNAME)_include endif ifneq (,$$($1_EXCLUDES)$$($1_EXCLUDE_FILES)) - $1_GREP_EXCLUDES:=| $(GREP) -v $$(foreach src,$$($1_SRCS),$$(addprefix -e$(SPACE)$$(src)/,$$($1_EXCLUDES) $$($1_EXCLUDE_FILES))) + $1_GREP_EXCLUDE_PATTERNS:=$$(foreach src,$$($1_SRCS),$$(addprefix $$(src)/,\ + $$($1_EXCLUDES) $$($1_EXCLUDE_FILES))) + $$(eval $$(call ListPathsSafelyNow,$1_GREP_EXCLUDE_PATTERNS,\n, \ + >> $$($1_BIN)/_the.$$($1_JARNAME)_exclude)) + $1_GREP_EXCLUDES:=| $(GREP) -v -f $$($1_BIN)/_the.$$($1_JARNAME)_exclude endif + ifneq (,$$($1_JARINDEX)) + $1_JARINDEX = (cd $$(dir $$@) && $(JAR) -i $$(notdir $$@)) + else + $1_JARINDEX = true + endif + # When this macro is run in the same makefile as the java compilation, dependencies are transfered + # in make variables. When the macro is run in a different makefile than the java compilation, the + # dependencies need to be found in the filesystem. + $1_ALL_SRCS:=$$(foreach src,$$($1_SRCS),$$(shell ($(FIND) $$(src) -type f \ + -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ + $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)))) + ifeq (,$$($1_SKIP_METAINF)) + $1_ALL_SRCS+=$$(foreach src,$$($1_SRCS),$$(shell $(FIND) $$(src)/META-INF -type f 2> /dev/null)) + endif + + # Utility macros, to make the shell script receipt somewhat easier to dechipher. # The capture contents macro finds all files (matching the patterns, typically @@ -187,15 +212,6 @@ (cd $$(src) && \ $(FIND) . -name _the.package.api.notify -exec dirname \{\} \; >> $$($1_PUBAPI_NOTIFICATIONS_FILE) ; \ true) &&) - # The capture nativeapi macro scans for native api change notificiations. If such notifications are - # found, then we will run javah on the changed classes. It also collects all classes with native methods - # to be used to find out which classes no longer has native methods, to trigger deletion of those .h files. - $1_CAPTURE_NATIVEAPI=$$(foreach src,$$($1_SRCS),\ - (cd $$(src) && \ - $(FIND) . -name _the.package.native.notify | $(SED) 's/package.native.notify/package.native/' | \ - $(XARGS) $(CAT) | $(GREP) '^TYPE ' | $(SED) 's/.*TYPE //' >> $$($1_NATIVEAPI_NOTIFICATIONS_FILE) ; \ - $(FIND) . -name _the.package.native -exec $(CAT) \{\} \; | $(SED) -n 's/^TYPE //p' >> $$($1_NATIVEAPI_FILE) ; \ - true) &&) # The update contents macro updates the jar file with the previously capture contents. $1_UPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\ (cd $$(src) && \ @@ -205,13 +221,18 @@ fi) &&) # The s-variants of the above macros are used when the jar is created from scratch. $1_SCAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS),\ - (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)) | $(SED) 's|$$(src)/||g' > $$(src)/_the.$$($1_JARNAME)_contents) && ) + (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ + $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)) | $(SED) 's|$$(src)/||g' > \ + $$(src)/_the.$$($1_JARNAME)_contents) && ) + ifeq (,$$($1_SKIP_METAINF)) $1_SCAPTURE_METAINF=$$(foreach src,$$($1_SRCS),\ - ($(FIND) $$(src)/META-INF -type f 2> /dev/null | $(SED) 's|$$(src)/||g' >> $$(src)/_the.$$($1_JARNAME)_contents) && ) + ($(FIND) $$(src)/META-INF -type f 2> /dev/null | $(SED) 's|$$(src)/||g' >> \ + $$(src)/_the.$$($1_JARNAME)_contents) && ) endif $1_SUPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\ (cd $$(src) && $(JAR) uf $$@ @$$(src)/_the.$$($1_JARNAME)_contents) &&) + # The TOUCH macro is used to make sure all timestamps are identical for package files and the pubapi files. # If we do not do this, we get random recompilations, the next time we run make, since the order of package building is random, # ie independent of package --dependes on-> public api of another package. This is of course @@ -223,7 +244,7 @@ # Use a slightly shorter name for logging, but with enough path to identify this jar. $1_NAME:=$$(subst $$(OUTPUT_ROOT)/,,$$($1_JAR)) # Here is the rule that creates/updates the jar file. - $$($1_JAR) : $2 + $$($1_JAR) : $2 $$($1_ALL_SRC) $(MKDIR) -p $$($1_BIN) if [ -n "$$($1_MANIFEST)" ]; then \ $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ @@ -231,9 +252,11 @@ else \ $(RM) $$($1_MANIFEST_FILE) && $(TOUCH) $$($1_MANIFEST_FILE); \ fi - $(ECHO) "Main-Class: $$(strip $$($1_JARMAIN))" >> $$($1_MANIFEST_FILE) + if [ -n "$$(strip $$($1_JARMAIN))" ]; then \ + $(ECHO) "Main-Class: $$(strip $$($1_JARMAIN))" >> $$($1_MANIFEST_FILE); \ + fi if [ -n "$$($1_EXTRA_MANIFEST_ATTR)" ]; then \ - $(ECHO) "$$($1_EXTRA_MANIFEST_ATTR)" >> $$($1_MANIFEST_FILE); \ + $(PRINTF) "$$($1_EXTRA_MANIFEST_ATTR)\n" >> $$($1_MANIFEST_FILE); \ fi +if [ -s $$@ ]; then \ $(RM) -r $$($1_PUBAPI_NOTIFICATIONS_FILE) && \ @@ -255,20 +278,8 @@ $(ZIP) -q -d $$@ `$(CAT) $$($1_DELETESS_FILE)` ; \ fi && \ $$($1_UPDATE_CONTENTS) true && \ + $$($1_JARINDEX) && \ $$($1_TOUCH_API_FILES) true && \ - $(RM) -r $$($1_NATIVEAPI_NOTIFICATIONS_FILE) $$($1_NATIVEAPI_FILE) && \ - $$($1_CAPTURE_NATIVEAPI) true && \ - if [ "x$$($1_JAVAH)" != "x" ] && [ -s $$($1_NATIVEAPI_NOTIFICATIONS_FILE) ]; then \ - $(ECHO) Native api change detected in: && $(CAT) $$($1_NATIVEAPI_NOTIFICATIONS_FILE) && \ - $$($1_JVM) $$($1_JAVAH) "-Xbootclasspath/p:$$($1_JAR)" -d $$($1_HEADERS) @$$($1_NATIVEAPI_NOTIFICATIONS_FILE) ; \ - fi && \ - $(TOUCH) $$($1_NATIVEAPI_FILE)_prev ; \ - ($(GREP) -xvf $$($1_NATIVEAPI_FILE) $$($1_NATIVEAPI_FILE)_prev > $$($1_NATIVEAPI_FILE)_deleted; true) && \ - $(CP) $$($1_NATIVEAPI_FILE) $$($1_NATIVEAPI_FILE)_prev && \ - if [ -s $$($1_NATIVEAPI_FILE)_deleted ]; then \ - $(ECHO) Native methods dropped from classes: && $(CAT) $$($1_NATIVEAPI_FILE)_deleted && \ - $(RM) `$(CAT) $$($1_NATIVEAPI_FILE)_deleted | $(SED) -e 's|\.|_|g' -e 's|.*|$$($1_HEADERS)/&.h $$($1_HEADERS)/&_*|'` ; \ - fi && \ $$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.api.notify $(FIND_DELETE); true) &&) true ; \ fi ; \ else \ @@ -276,15 +287,9 @@ $$($1_SCAPTURE_CONTENTS) \ $$($1_SCAPTURE_METAINF) \ $$($1_SUPDATE_CONTENTS) \ + $$($1_JARINDEX) && \ $$($1_TOUCH_API_FILES) true && \ $(RM) -r $$($1_NATIVEAPI_NOTIFICATIONS_FILE) $$($1_NATIVEAPI_FILE) && \ - $$($1_CAPTURE_NATIVEAPI) true && \ - if [ "x$$($1_JAVAH)" != "x" ] && [ -s $$($1_NATIVEAPI_FILE) ]; then \ - $(ECHO) Generating native api headers for `$(CAT) $$($1_NATIVEAPI_FILE) | $(WC) -l` classes && \ - $(RM) $$($1_HEADERS)/*.h && \ - $$($1_JVM) $$($1_JAVAH) "-Xbootclasspath/p:$$($1_JAR)" -d $$($1_HEADERS) @$$($1_NATIVEAPI_FILE) && \ - $(CP) $$($1_NATIVEAPI_FILE) $$($1_NATIVEAPI_FILE)_prev ; \ - fi && \ $$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name "*.notify" $(FIND_DELETE); true) &&) true ; \ fi; @@ -297,7 +302,7 @@ define SetupZipArchive # param 1 is for example ZIP_MYSOURCE # param 2,3,4,5,6,7,8,9 are named args. - # SRC,ZIP,INCLUDES,EXCLUDES,EXCLUDE_FILES + # SRC,ZIP,INCLUDES,EXCLUDES,EXCLUDE_FILES,SUFFIXES,EXTRA_DEPS $(if $2,$1_$(strip $2)) $(if $3,$1_$(strip $3)) $(if $4,$1_$(strip $4)) @@ -308,11 +313,17 @@ $(if $9,$1_$(strip $9)) # Find all files in the source tree. - $1_ALL_SRCS := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f -a ! -name "_the.*")) + $1_SUFFIX_FILTER := $$(patsubst %,-o -name $(DQUOTE)*%$(DQUOTE),$$($1_SUFFIXES)) + $1_ALL_SRCS := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f -a ! -name "_the.*" \( -name FALSE_DUMMY $$($1_SUFFIX_FILTER) \) )) ifneq ($$($1_INCLUDES),) $1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES)))) - $1_ZIP_INCLUDES := $$(addprefix -i$(SPACE)$(DQUOTE),$$(addsuffix /*$(DQUOTE),$$($1_INCLUDES))) + ifneq ($$($1_SUFFIXES),) + $1_ZIP_INCLUDES := $$(foreach s,$$($1_SUFFIXES),\ + $$(addprefix -i$(SPACE)$(DQUOTE),$$(addsuffix /*$$s$(DQUOTE),$$($1_INCLUDES)))) + else + $1_ZIP_INCLUDES := $$(addprefix -i$(SPACE)$(DQUOTE),$$(addsuffix /*$(DQUOTE),$$($1_INCLUDES))) + endif $1_ALL_SRCS := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_SRCS)) endif ifneq ($$($1_EXCLUDES),) @@ -329,7 +340,7 @@ # Explicitly excluded files can be given with absolute path. The patsubst solution # isn't perfect but the likelyhood of an absolute path to match something in a src # dir is very small. - $$($1_ZIP) : $$($1_ALL_SRCS) + $$($1_ZIP) : $$($1_ALL_SRCS) $$($1_EXTRA_DEPS) $(MKDIR) -p $$(@D) $(ECHO) Updating $$($1_NAME) $$(foreach i,$$($1_SRC),(cd $$i && $(ZIP) -qru $$@ . $$($1_ZIP_INCLUDES) $$($1_ZIP_EXCLUDES) -x \*_the.\* $$(addprefix -x$(SPACE),$$(patsubst $$i/%,%,$$($1_EXCLUDE_FILES)))) ;) true @@ -472,7 +483,7 @@ | $(SED) -e '/^#/d' -e '/^$$$$/d' \ -e :a -e '/\\$$$$/N; s/\\\n//; ta' \ -e 's/^[ \t]*//;s/[ \t]*$$$$//' \ - -e 's/\\=/=/' | LANG=C sort > $$@ + -e 's/\\=/=/' | LANG=C $(SORT) > $$@ $(CHMOD) -f ug+w $$@ # And do not forget this target @@ -623,6 +634,7 @@ # JAVAC_SOURCE_PATH_UGLY_OVERRIDE:=Don't use this. This forces an explicit -sourcepath to javac. # Its only here until we cleanup some nasty source code pasta in the jdk. # HEADERS:=path to directory where all generated c-headers are written. + # DEPENDS:=Extra dependecy $(if $2,$1_$(strip $2)) $(if $3,$1_$(strip $3)) $(if $4,$1_$(strip $4)) @@ -650,9 +662,6 @@ $1_JAVAC := $$($$($1_SETUP)_JAVAC) $1_JAVAH := $$($$($1_SETUP)_JAVAH) $1_FLAGS := $$($$($1_SETUP)_FLAGS) $(JAVAC_FLAGS) $$($1_ADD_JAVAC_FLAGS) -ifeq (,$$($1_HEADERS)) - $1_HEADERS := $$($1_BIN) -endif # Handle addons and overrides. $1_SRC:=$$(call ADD_SRCS,$$($1_SRC)) @@ -776,24 +785,21 @@ $$(eval $$(call replace_space_with_pathsep,$1_SRCROOTSC,$$($1_SRC))) endif + ifneq (,$$($1_HEADERS)) + $1_HEADERS_ARG := -h $$($1_HEADERS) + endif + # Create a sed expression to remove the source roots and to replace / with . # and remove .java at the end. $1_REWRITE_INTO_CLASSES:=$$(foreach i,$$($1_SRC),-e 's|$$i/||g') -e 's|/|.|g' -e 's|.java$$$$||g' # Here is the batch rules that depends on all the sources. - $$($1_BIN)/_the.batch: $$($1_SRCS) + $$($1_BIN)/_the.batch: $$($1_SRCS) $$($1_DEPENDS) $(MKDIR) -p $$(@D) $(RM) $$($1_BIN)/_the.batch $$($1_BIN)/_the.batch.tmp $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.batch.tmp) $(ECHO) Compiling `$(WC) $$($1_BIN)/_the.batch.tmp | $(TR) -s ' ' | $(CUT) -f 2 -d ' '` files in batch $1 - ($$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) -implicit:none -sourcepath "$$($1_SRCROOTSC)" -d $$($1_BIN) @$$($1_BIN)/_the.batch.tmp && \ - $$(if $$($1_JAVAH),\ - $(CAT) $$($1_BIN)/_the.batch.tmp | $(XARGS) $(GREP) -E "[[:space:]]native[[:space:]]|@GenerateNativeHeader" |\ - $(GREP) -v '*' | $(GREP) -v '//' | $(CUT) -f 1 -d ':' | $(SORT) -u |\ - $(SED) $$($1_REWRITE_INTO_CLASSES) > $$($1_BIN)/_the.batch.natives && \ - if test -s $$($1_BIN)/_the.batch.natives; then \ - $$($1_JVM) $$($1_JAVAH) "-Xbootclasspath/p:$$($1_BIN)" -d $$($1_HEADERS) @$$($1_BIN)/_the.batch.natives ; \ - fi &&) \ + ($$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) -implicit:none -sourcepath "$$($1_SRCROOTSC)" -d $$($1_BIN) $$($1_HEADERS_ARG) @$$($1_BIN)/_the.batch.tmp && \ $(MV) $$($1_BIN)/_the.batch.tmp $$($1_BIN)/_the.batch) else # Ok, we have a modern javac server running! @@ -868,6 +874,7 @@ JARMAIN:=$$($1_JARMAIN),\ MANIFEST:=$$($1_MANIFEST),\ EXTRA_MANIFEST_ATTR:=$$($1_EXTRA_MANIFEST_ATTR),\ + JARINDEX:=$$($1_JARINDEX),\ HEADERS:=$$($1_HEADERS),\ SETUP:=$$($1_SETUP))) endif diff -r 38ccffcbab0c -r 356f4e5f57fe common/makefiles/MakeBase.gmk --- a/common/makefiles/MakeBase.gmk Tue May 29 00:27:12 2012 +0100 +++ b/common/makefiles/MakeBase.gmk Thu Aug 02 14:00:03 2012 +0100 @@ -91,6 +91,15 @@ > $(BUILDTIMESDIR)/build_time_diff_$1 endef +# Check if the current target is the final target, as specified by +# the user on the command line. If so, call PrintEndMessage. +define CheckIfFinished +$(if $(filter $@,$(MAKECMDGOALS)),$(call PrintEndMessage)) +# If no taget is given, "all" is default. Check for that, too. +# At most one of the tests can be true. +$(if $(MAKECMDGOALS),,$(if $(filter $@,all),$(call PrintEndMessage))) +endef + # Indicate that we are done. # Record ending time and print out the total time it took to build. define MakeFinish @@ -101,6 +110,7 @@ "########################################################################" \ $(if $(REPORT_BUILD_TIMES),"Build time `$(CAT) $(BUILDTIMESDIR)/build_time_diff_$1` for target(s) $2","") \ "########################################################################" +$(call CheckIfFinished) endef # Find all build_time_* files and print their contents in a list sorted @@ -126,6 +136,18 @@ $(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,TOTAL) && $(call ReportBuildTimes,$1),) endef +# Hook to be called as the very first thing when running a normal build +define AtRootMakeStart + $(call PrintStartMessage) + $(call StartTimer) +endef + +# Hook to be called as the very last thing for targets that are "top level" targets +define AtRootMakeEnd + $(call StopTimer) + $(call CheckIfFinished) +endef + # If the variable that you want to send to stdout for piping into a file or otherwise, # is potentially long, for example the a list of file paths, eg a list of all package directories. # Then you need to use ListPathsSafely, which optimistically splits the output into several shell @@ -324,4 +346,51 @@ endef +# The source tips can come from the Mercurial repository, or in the files +# $(HGTIP_FILENAME) which contains the tip but is also positioned in the same +# directory as the original $(HGDIR) directory. +# These should not be := assignments, only used from the root Makefile. +HG_VERSION = $(shell $(HG) version 2> /dev/null) +HG_DIRECTORY=.hg +HGTIP_FILENAME=.hgtip +HG_SEARCH = ./REPO ./*/REPO ./*/*/REPO ./*/*/*/REPO +REPO_LIST = $(patsubst ./%,%,$(patsubst %/,%,$(sort $(dir \ + $(shell $(CD) $(SRC_ROOT) ; ( $(LS) -d $(HG_SEARCH:%/REPO=%/$(HG_DIRECTORY)) ; \ + $(LS) $(HG_SEARCH:%/REPO=%/$(HGTIP_FILENAME)) ) \ + 2> /dev/null))))) + +# Emit the repo:tip pairs to $@ +define GetSourceTips +$(CD) $(SRC_ROOT) ; \ +for i in $(REPO_LIST) IGNORE ; do \ + if [ "$${i}" = "IGNORE" ] ; then \ + continue; \ + elif [ -d $${i}/$(HG_DIRECTORY) -a "$(HG_VERSION)" != "" ] ; then \ + $(PRINTF) " %s:%s" \ + "$${i}" `$(HG) tip --repository $${i} --template '{node|short}\n'` ; \ + elif [ -f $${i}/$(HGTIP_FILENAME) ] ; then \ + $(PRINTF) " %s:%s" \ + "$${i}" `$(CAT) $${i}/$(HGTIP_FILENAME)` ; \ + fi; \ +done >> $@ +$(PRINTF) "\n" >> $@ +endef + +# Create the HGTIP_FILENAME file. Called from jdk/make/closed/bundles.gmk +define CreateHgTip +$(HG) tip --repository $1 --template '{node|short}\n' > $1/$(HGTIP_FILENAME);\ +$(ECHO) $1/$(HGTIP_FILENAME) +endef + +define SetupLogging + ifneq ($(findstring $(LOG),debug trace),) + # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make + OLD_SHELL:=$$(SHELL) + SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x + endif +endef + +# Make sure logging is setup for everyone that includes MakeBase.gmk. +$(eval $(call SetupLogging)) + endif # _MAKEBASE_GMK diff -r 38ccffcbab0c -r 356f4e5f57fe common/makefiles/Makefile --- a/common/makefiles/Makefile Tue May 29 00:27:12 2012 +0100 +++ b/common/makefiles/Makefile Thu Aug 02 14:00:03 2012 +0100 @@ -23,49 +23,144 @@ # questions. # -# Default to sane output from make. -# Override with empty string to get insane amount of output. -# Override with -d to get even more insane amount of debugging output. -# Override with "-d -p" to get it all. -VERBOSE=-s +# This must be the first rule +default: all + +# Find out which variables were passed explicitely on the make command line. These +# will be passed on to sub-makes, overriding spec.gmk settings. +MAKE_ARGS=$(foreach var,$(subst =command,,$(filter %=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var)))))),$(var)=$($(var))) + +define fatal-error + # If the user specificed a "global" target (e.g. 'help'), do not exit but continue running + $$(if $$(findstring help,$$(MAKECMDGOALS)),,$$(error Cannot continue)) +endef + +ifeq ($(origin VERBOSE),undefined) + # Setup logging according to LOG (but only if VERBOSE is not given) + ifeq ($(LOG),) + # Set LOG to "warn" as default if not set (and no VERBOSE given) + LOG=warn + endif + ifeq ($(LOG),warn) + VERBOSE=-s + else ifeq ($(LOG),info) + VERBOSE= + else ifeq ($(LOG),debug) + VERBOSE= + else ifeq ($(LOG),trace) + VERBOSE=-d -p + else + $(info Error: LOG must be one of: warn, info, debug or trace.) + $(eval $(call fatal-error)) + endif +else + ifneq ($(LOG),) + # We have both a VERBOSE and a LOG argument. This is OK only if this is a repeated call by ourselves, + # but complain if this is the top-level make call. + ifeq ($(MAKELEVEL),0) + $(info Cannot use LOG=$(LOG) and VERBOSE=$(VERBOSE) at the same time. Choose one.) + $(eval $(call fatal-error)) + endif + endif +endif + +# TODO: Fix duplication in MakeBase.gmk +define SetupLogging + ifneq ($(findstring $(LOG),debug trace),) + # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make + OLD_SHELL:=$$(SHELL) + SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x + endif +endef + +$(eval $(call SetupLogging)) # Find all environment or command line variables that begin with ALT. list_alt_overrides_with_origins = $(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var))))) list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins))) -ifneq ($(list_alt_overrides),) - $(info You have set the following ALT_ variables:) - $(foreach var,$(list_alt_overrides), $(info $(var)=$($(var)))) - $(error Using ALT_ variables is deprecated! Please clean your environment!) + +ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),) + makefile_path=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) +else + makefile_path=$(lastword $(MAKEFILE_LIST)) endif +root_dir=$(patsubst %/common/makefiles/Makefile,%,$(makefile_path)) +output_dir=$(root_dir)/build + +ifneq ($(origin SPEC),undefined) + # We have been given a SPEC, check that it works out properly + ifeq ($(wildcard $(SPEC)),) + $(info Cannot locate spec.gmk, given by SPEC=$(SPEC)) + $(eval $(call fatal-error)) + endif + ifneq ($(origin CONF),undefined) + # We also have a CONF argument. This is OK only if this is a repeated call by ourselves, + # but complain if this is the top-level make call. + ifeq ($(MAKELEVEL),0) + $(info Cannot use CONF=$(CONF) and SPEC=$(SPEC) at the same time. Choose one.) + $(eval $(call fatal-error)) + endif + endif + # ... OK, we're satisfied, we'll use this SPEC later on +else + # Find all spec.gmk files in the build output directory + all_spec_files=$(wildcard $(output_dir)/*/spec.gmk) + ifeq ($(all_spec_files),) + $(info No configurations found for $(root_dir)! Please run configure to create a configuration.) + $(eval $(call fatal-error)) + endif + # Extract the configuration names from the path + all_confs=$(patsubst %/spec.gmk,%,$(patsubst $(output_dir)/%,%,$(all_spec_files))) -# The spec.gmk file contains the variables extracted by the configure script. -# It is usually set with SPEC=....spec.gmk on the make command line. -# However if you simply type make from the openjdk source root, it will go looking -# for a spec file, if only one is found, use it. If more than one is found, -# complain. If none is found, request the user to run configure! -SPEC ?= $(wildcard $(CURDIR)/../../build/*/spec.gmk) + ifneq ($(origin CONF),undefined) + # User have given a CONF= argument. + ifeq ($(CONF),) + # If given CONF=, match all configurations + matching_confs=$(strip $(all_confs)) + else + # Otherwise select those that contain the given CONF string + matching_confs=$(strip $(foreach var,$(all_confs),$(if $(findstring $(CONF),$(var)),$(var)))) + endif + ifeq ($(matching_confs),) + $(info No configurations found matching CONF=$(CONF)) + $(info Available configurations:) + $(foreach var,$(all_confs),$(info * $(var))) + $(eval $(call fatal-error)) + else + ifeq ($(words $(matching_confs)),1) + $(info Building '$(matching_confs)' (matching CONF=$(CONF))) + else + $(info Building the following configurations (matching CONF=$(CONF)):) + $(foreach var,$(matching_confs),$(info * $(var))) + endif + endif -ifeq ($(words $(SPEC)),0) - $(error You must run configure!) + # Create a SPEC definition. This will contain the path to one or more spec.gmk files. + SPEC=$(addsuffix /spec.gmk,$(addprefix $(output_dir)/,$(matching_confs))) + else + # No CONF or SPEC given, check the available configurations + ifneq ($(words $(all_spec_files)),1) + $(info No CONF or SPEC given, but more than one spec.gmk found in $(output_dir).) + $(info Available configurations:) + $(foreach var,$(all_confs),$(info * $(var))) + $(info Please retry building with CONF= or SPEC=) + $(eval $(call fatal-error)) + endif + + # We found exactly one configuration, use it + SPEC=$(strip $(all_spec_files)) + endif endif ifneq ($(words $(SPEC)),1) - ifeq ($(MAKECMDGOALS),all-conf) - SPECS:=$(shell echo $(SPEC) | sed -e 's|$(CURDIR)/build/||g' -e 's|/spec.gmk|\\n|g' -e 's| ||g') - allconf: - @echo Building configurations: - @printf "$(SPECS)" - @$(foreach s,$(SPEC),($(MAKE) SPEC=$s $(VERBOSE) VERBOSE=$(VERBOSE) images) &&) true - @echo Done building configurations: - @printf "$(SPECS)" - .PHONY: all-conf - else - $(error Since you have more than one output dir configured under build, \ - you have to either run make from the output dir of your choice \ - or specify run "make SPEC=build/.../spec.gmk" or run all the build configurations \ - using "make all-conf") - endif +# We have multiple configurations to build, call make repeatedly +all jdk hotspot jaxws jaxp corba langtools install images packages clean dist-clean: + @$(foreach spec,$(SPEC),($(MAKE) -f $(makefile_path) SPEC=$(spec) $(VERBOSE) VERBOSE=$(VERBOSE) $@ $(MAKE_ARGS)) &&) true + +.PHONY: all jdk hotspot jaxws jaxp corba langtools install images packages clean dist-clean + else +# This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file. # Now load the spec -include $(SPEC) @@ -88,51 +183,101 @@ # Clean out any notifications from the previous build. $(shell find $(OUTPUT_ROOT) -name "_the.*.notify" $(FIND_DELETE)) -all: jdk - @$(call StopTimer) - @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) +# If make was called explicitely with -j, don't add a -j ourself to sub-makes, since +# this will be inherited automatically by make. Otherwise use our default for sub-makes. +# The -j in MAKEFLAGS is only visible when executing a recipe, hence this macro. +define GetMakeJobFlag + $(if $(findstring -j,$(MAKEFLAGS)),,-j$(NUM_CORES)) +endef + +define CheckEnvironment + $(if $(list_alt_overrides), + @$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n" + @$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n" + @$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n" + ) +endef -langtools: start-timer +define PrintStartMessage + $(if $(VERBOSE),,@$(ECHO) Running make as $(MAKE) $(MFLAGS) $(MAKE_ARGS)) + $(call CheckEnvironment) + @$(ECHO) "Building OpenJDK for target $(if $(MAKECMDGOALS),'$(MAKECMDGOALS)','all') in configuration '$(CONF_NAME)'" +endef + +define PrintEndMessage + @$(ECHO) "Finished building OpenJDK for target '$@'" + $(call CheckEnvironment) +endef + +all: jdk + @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) + @$(call AtRootMakeEnd) + +langtools: start-make @$(call MakeStart,langtools,all) - @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(LANGTOOLS_MAKE_ARGS)) + @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(LANGTOOLS_MAKE_ARGS) $(MAKE_ARGS)) @$(call MakeFinish,langtools,all) corba: langtools @$(call MakeStart,corba,all) - @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(CORBA_MAKE_ARGS)) + @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS)) @$(call MakeFinish,corba,all) jaxp: langtools @$(call MakeStart,jaxp,all) - @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(CORBA_MAKE_ARGS)) + @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS)) @$(call MakeFinish,jaxp,all) jaxws: langtools jaxp @$(call MakeStart,jaxws,all) - @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(CORBA_MAKE_ARGS)) + @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS)) @$(call MakeFinish,jaxws,all) hotspot: langtools @$(call MakeStart,hotspot,all) - @($(CD) $(HOTSPOT_TOPDIR)/make && $(BUILD_LOG_WRAPPER) $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS)) + @($(CD) $(HOTSPOT_TOPDIR)/make && $(BUILD_LOG_WRAPPER) $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS) $(MAKE_ARGS)) @$(call MakeFinish,hotspot,all) jdk: langtools corba jaxp jaxws hotspot @$(call MakeStart,jdk,all) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(JDK_MAKE_ARGS)) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS)) @$(call MakeFinish,jdk,all) -images install packages: start-timer jdk langtools corba jaxp jaxws hotspot +images install packages: source-tips start-make jdk langtools corba jaxp jaxws hotspot @$(call MakeStart,jdk-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(JDK_MAKE_ARGS) $@) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS) $@) @$(call MakeFinish,jdk-images,$@) - @$(call StopTimer) + @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) + @$(call AtRootMakeEnd) + +old-images: source-tips start-make jdk langtools corba jaxp jaxws hotspot + @$(call MakeStart,jdk-old-images,$@) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS) $@) + @$(call MakeFinish,old-jdk-images,$@) @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) + @$(call AtRootMakeEnd) -start-timer: - @$(call StartTimer) +start-make: + @$(call AtRootMakeStart) + +.PHONY: jdk hotspot jaxws jaxp corba langtools install images packages start-make -.PHONY: jdk hotspot jaxws jaxp corba langtools install images packages start-timer +test: start-make + @$(call MakeStart,test,$(if $(TEST),$(TEST),all)) + @($(CD) $(SRC_ROOT)/test && $(BUILD_LOG_WRAPPER) $(MAKE) MAKEFLAGS= -j1 PRODUCT_HOME=$(OUTPUT_ROOT)/jdk JPRT_JAVA_HOME=$(OUTPUT_ROOT)/jdk ALT_OUTPUTDIR=$(OUTPUT_ROOT) $(TEST)) || true + @$(call MakeFinish,test,$(if $(TEST),$(TEST),all)) + @$(call AtRootMakeEnd) +.PHONY: test + + +# Stores the tips for each repository. This file is be used when constructing the jdk image and can be +# used to track the exact sources used to build that image. +source-tips: $(OUTPUT_ROOT)/source_tips +$(OUTPUT_ROOT)/source_tips: FRC + @$(MKDIR) -p $(@D) + @$(RM) $@ + @$(call GetSourceTips) + # Remove everything, except the output from configure. clean: @@ -152,25 +297,35 @@ @$(ECHO) "Cleaned jdk build artifacts (but not langtools,corba,jaxp,jaxws,hotspot nor the build configuration)" .PHONY: clean +endif + +# Here are "global" targets, i.e. targets that can be executed without specifying a single configuration. +# If you addd more global targets, please update the fatal-error macro. + help: - $(info ) - $(info Typical make commands:) - $(info make) - $(info make VERBOSE= # print all commands) - $(info make VERBOSE="-d -p" # debug make as well) - $(info make all-conf # build images for all configurations) - $(info make clean # remove build artifacts) - $(info make dist-clean # you have to rerun configure) -# $(info make test # run tests) - $(info make images # create the jdk and jre images) - $(info make install # install the jdk image) -# $(info make modules # EXPERIMENTAL: Migrate JDK into a modularized form!) - $(info make packages # create zips and other packages) - -# $(info make eclipse_workspace # Create an Eclipse workspace) -# $(info make netbeans_workspace # Create a NetBeans workspace) -# $(info make vs_workspace # Create a Visual Studio workspace) - + $(info ) + $(info OpenJDK Makefile help) + $(info =====================) + $(info ) + $(info Common make targets) + $(info . make [all] # Compile all code but do not create images) + $(info . make images # Create complete j2sdk and j2re images) + $(info . make install # Install the generated images locally) + $(info . make clean # Remove all files generated by make, but not those generated by configure) + $(info . make dist-clean # Remove all files generated by both make and configure) + $(info . make help # Give some help on using make) + $(info . make test # Run tests, default is all tests (see TEST below)) + $(info ) + $(info Useful make variables) + $(info . make CONF= # Build all configurations (note, assignment is empty)) + $(info . make CONF= # Build the configuration(s) with a name matching the given substring) + $(info ) + $(info . make LOG= # Change loglevel from warn (default) to the given loglevel) + $(info . # Available loglevels are: warn, info, debug and trace) + $(info . # To see executed command lines, use LOG=info) + $(info ) + $(info . make test TEST= # Only run the given test or tests, e.g.) + $(info . # make test TEST="jdk_lang jdk_net") + $(info ) .PHONY: help - -endif +FRC: # Force target diff -r 38ccffcbab0c -r 356f4e5f57fe common/makefiles/NativeCompilation.gmk --- a/common/makefiles/NativeCompilation.gmk Tue May 29 00:27:12 2012 +0100 +++ b/common/makefiles/NativeCompilation.gmk Thu Aug 02 14:00:03 2012 +0100 @@ -28,7 +28,7 @@ # desired whenever sort is used below! ifeq (,$(_MAKEBASE_GMK)) - $(error You must include MakeBase.gmk prior to including JavaCompilation.gmk) + $(error You must include MakeBase.gmk prior to including NativeCompilation.gmk) endif ifeq ($(COMPILER_TYPE),CC) @@ -54,15 +54,22 @@ ifneq (,$$(filter %.c,$2)) # Compile as a C file - $1_$2_FLAGS=$4 + $1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) $1_$2_COMP=$5 + $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) + else ifneq (,$$(filter %.m,$2)) + # Compile as a objective-c file + $1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) + $1_$2_COMP=$5 + $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) else # Compile as a C++ file - $1_$2_FLAGS=$6 + $1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) $1_$2_COMP=$7 + $1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS) endif # Generate the .o (.obj) file name and place it in the bin dir. - $1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(notdir $2))) + $1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(notdir $2)))) # Only continue if this object file hasn't been processed already. This lets the first found # source file override any other with the same name. ifeq (,$$(findstring $$($1_$2_OBJ),$$($1_OBJS_SO_FAR))) @@ -80,7 +87,7 @@ $$($1_$2_OBJ) : $2 ifeq ($(COMPILER_TYPE),CC) $$(call COMPILING_MSG,$$(notdir $2)) - $$($1_$2_COMP) $$($1_$2_FLAGS) -MMD -MF $$($1_$2_DEP) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 + $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 endif ifeq ($(COMPILER_TYPE),CL) $$(call COMPILING_MSG,$$(notdir $2)) @@ -109,6 +116,8 @@ # EXCLUDE_FILES with these names # VERSIONINFO_RESOURCE Input file for RC. Setting this implies that RC will be run # RC_FLAGS flags for RC. + # MAPFILE mapfile + # REORDER reorder file $(if $2,$1_$(strip $2)) $(if $3,$1_$(strip $3)) $(if $4,$1_$(strip $4)) @@ -154,7 +163,7 @@ ifneq ($$($1_EXCLUDE_FILES),) $1_EXCLUDE_FILES:=$$(addprefix %,$$($1_EXCLUDE_FILES)) endif - $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.c %.cpp,$$($1_ALL_SRCS))) + $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.c %.cpp %.m,$$($1_ALL_SRCS))) ifneq (,$$(strip $$($1_INCLUDE_FILES))) $1_SRCS := $$(filter $$($1_INCLUDE_FILES),$$($1_SRCS)) endif @@ -178,7 +187,7 @@ # Calculate the expected output from compiling the sources (sort to remove duplicates. Also provides # a reproducable order on the input files to the linker). - $1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_BIN)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS)))))) + $1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_BIN)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS))))))) $1 := $$($1_EXPECTED_OBJS) # Are there too many object files on disk? Perhaps because some source file was removed? $1_SUPERFLOUS_OBJS:=$$(sort $$(filter-out $$($1_EXPECTED_OBJS),$$($1_BINS))) @@ -218,6 +227,11 @@ $1_EXTRA_CXXFLAGS:=$$($1_EXTRA_CFLAGS) endif + ifneq (,$$($1_REORDER)) + $1_EXTRA_CFLAGS += $$(C_FLAG_REORDER) + $1_EXTRA_CXXFLAGS += $$(CXX_FLAG_REORDER) + endif + # Now create a list of the packages that are about to compile. Used when sending source # in a batch to the compiler. $$(shell $(RM) $$($1_BIN)/_the.list_of_sources) @@ -233,29 +247,53 @@ ifeq ($(HOST_OS_API), winapi) ifneq (,$$($1_VERSIONINFO_RESOURCE)) ifneq (,$$($1_LIB)) - ifeq (dynamic,$$(patsubst %$(SHARED_LIBRARY_SUFFIX),dynamic,$$($1_LIB))) - $1_RES:=$$(patsubst %$(SHARED_LIBRARY_SUFFIX),%.res,$$($1_LIB)) - else - $1_RES:=$$(patsubst %$(STATIC_LIBRARY_SUFFIX),%.res,$$($1_LIB)) - endif + $1_BASENAME:=$$(basename $$(notdir $$($1_LIB))) endif ifneq (,$$($1_EXE)) - $1_RES:=$$(patsubst %$(EXE_SUFFIX),%.res,$$($1_EXE)) + $1_BASENAME:=$$(basename $$(notdir $$($1_EXE))) endif + $1_RES:=$$($1_BIN)/$$($1_BASENAME).res $$($1_RES): $$($1_VERSIONINFO_RESOURCE) $(RC) $$($1_RC_FLAGS) $(CC_OUT_OPTION)$$@ $$($1_VERSIONINFO_RESOURCE) endif + ifneq (,$$($1_MANIFEST)) + $1_PROGRAM:=$$(basename $$(notdir $$($1_EXE))) + $1_GEN_MANIFEST:=$$($1_BIN)/$$($1_PROGRAM).manifest + IMVERSIONVALUE:=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VERSION).$(COOKED_BUILD_NUMBER) + $$($1_GEN_MANIFEST): $$($1_MANIFEST) + $(SED) 's%IMVERSION%$$(IMVERSIONVALUE)%g;s%PROGRAM%$$($1_PROGRAM)%g' $$< > $$@ + endif + endif + + # mapfile doesnt seem to be implemented on macosx (yet??) + ifneq ($(HOST_OS),macosx) + ifneq ($(HOST_OS),windows) + $1_REAL_MAPFILE := $$($1_MAPFILE) + ifneq (,$$($1_REORDER)) + $1_REAL_MAPFILE := $$($1_BIN)/mapfile + + $$($1_REAL_MAPFILE) : $$($1_MAPFILE) $$($1_REORDER) + $$(MKDIR) -p $$(@D) + $$(CP) $$($1_MAPFILE) $$@.tmp + $$(SED) -e 's=OUTPUTDIR=$$($1_BIN)=' $$($1_REORDER) >> $$@.tmp + $$(MV) $$@.tmp $$@ + endif + endif endif # Pickup extra HOST_OS_API dependent variables (posix or winapi) and # (linux,solaris,windows,bsd) for LDFLAGS and LDFLAGS_SUFFIX $1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(HOST_OS_API)) $$($1_LDFLAGS_$(PLATFORM)) $1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(HOST_OS_API)) $$($1_LDFLAGS_SUFFIX_$(PLATFORM)) + ifneq (,$$($1_REAL_MAPFILE)) + $1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE)) + endif + ifneq (,$$($1_LIB)) ifeq (dynamic,$$(patsubst %$(SHARED_LIBRARY_SUFFIX),dynamic,$$($1_LIB))) # Generating a dynamic library. $1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$(notdir $$($1_LIB))) - $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES) + $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE) $$(call LINKING_MSG,$$(notdir $$($1_LIB))) $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$($1_LIB) \ $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) @@ -269,9 +307,13 @@ endif ifneq (,$$($1_EXE)) # A executable binary has been specified, setup the target for it. - $$($1_EXE) : $$($1_EXPECTED_OBJS) $$($1_RES) + $$($1_EXE) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_GEN_MANIFEST) $$(call LINKING_EXE_MSG,$$(notdir $$($1_EXE))) $$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_EXE) \ - $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) + $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \ + $$($1_EXTRA_LDFLAGS_SUFFIX) + ifneq (,$$($1_GEN_MANIFEST)) + $(MT) -nologo /manifest $$($1_GEN_MANIFEST) /outputresource:$$@;#1 + endif endif endef diff -r 38ccffcbab0c -r 356f4e5f57fe make/jprt.properties --- a/make/jprt.properties Tue May 29 00:27:12 2012 +0100 +++ b/make/jprt.properties Thu Aug 02 14:00:03 2012 +0100 @@ -91,6 +91,7 @@ ${jprt.my.test.target.set:TESTNAME=jdk_text}, \ ${jprt.my.test.target.set:TESTNAME=jdk_tools1}, \ ${jprt.my.test.target.set:TESTNAME=jdk_tools2}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_jfr}, \ ${jprt.my.test.target.set:TESTNAME=jdk_misc} # All vm test targets (testset=all) diff -r 38ccffcbab0c -r 356f4e5f57fe make/scripts/hgforest.sh --- a/make/scripts/hgforest.sh Tue May 29 00:27:12 2012 +0100 +++ b/make/scripts/hgforest.sh Thu Aug 02 14:00:03 2012 +0100 @@ -112,6 +112,9 @@ sleep 5 fi done +# Wait for all hg commands to complete +wait + if [ "${repos_extra}" != "" ] ; then for i in ${repos_extra} ; do echo "Starting on ${i}" @@ -127,11 +130,10 @@ sleep 5 fi done + # Wait for all hg commands to complete + wait fi -# Wait for all hg commands to complete -wait - # Cleanup rm -f -r ${tmp} diff -r 38ccffcbab0c -r 356f4e5f57fe make/scripts/lic_check.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/make/scripts/lic_check.sh Thu Aug 02 14:00:03 2012 +0100 @@ -0,0 +1,224 @@ +#! /bin/sh -f +# +# Copyright (c) 2012, 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. +# +# 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. +# + +# +# This script checks a copyright notice. +# +# The script should be located in the main jdk repository under make/scripts. +# It works with the templates in the make/templates directory of the jdk source. +# +# Usage: "lic_check.sh [-gpl] or [-gplcp] or [-bsd] file(s)" + +script_directory=`dirname $0` +script_name=`basename $0` +first_option=$1 + +# parse the first argument + +case "$1" in + "-gpl") + header="gpl-header" + ;; + "-gplcp") + header="gpl-cp-header" + ;; + "-bsd") + header="bsd-header" + ;; + *) + echo "Usage: $0 [-gpl] or [-gplcp] or [-bsd] file(s)" 1>&2 + exit 1 + ;; +esac +shift + +#initialize error status +error_status=0 + +# determine and set the absolute path for the script directory +D=`dirname "${script_directory}"` +B=`basename "${script_directory}"` +script_dir="`cd \"${D}\" 2>/dev/null && pwd || echo \"${D}\"`/${B}" + +# set up a variable for the templates directory +template_dir=${script_dir}/../templates + +# Check existence of the template directory. +if [ ! -d ${template_dir} ] ; then + echo "ERROR: The templates directory "${template_dir}" doesn't exist." 1>&2 + exit 1 +fi + +# set the temporary file location +tmpfile=/tmp/source_file.$$ +rm -f ${tmpfile} + +# check number of lines in the template file +lines=`cat ${template_dir}/${header} | wc -l` + +# the template file has one empty line at the end, we need to ignore it +lines=`expr ${lines} - 1` + +# A loop through the all script parameters: +# +# 1. Given a set of source files and a license template header, read a file name of each source file. +# 2. Check if a given file exists. When a directory is encountered, dive in and process all sources in those directories. +# 3. Read each line of the given file and check it for a copyright string. +# 4. If a copyright string found, check the correctness of the years format in the string and replace years with %YEARS%. +# 5. Continue reading the file until the number of lines is equal to the length of the license template header ($lines) and remove a comment prefix for each line. +# 6. Store the result (the license header from a given file) into a temporary file. +# 7. If a temporary file is not empty, compare it with a template file to verify if the license text is the same as in a template. +# 8. Produce a error in case a temporary file is empty, it means we didn't find a copyright string, or it's not correct +# +while [ "$#" -gt "0" ] ; do + touch ${tmpfile} + + # In case of the directory as a parameter check recursively every file inside. + if [ -d $1 ] ; then + curdir=`pwd` + cd $1 + echo "*** Entering directory: "`pwd` + echo "***" + files=`ls .` + sh ${script_dir}/${script_name} ${first_option} ${files} + status=$? + if [ ${error_status} -ne 1 ] ; then + error_status=${status} + fi + cd ${curdir} + shift + continue + else + echo "### Checking copyright notice in the file: "$1 + echo "###" + fi + + # Check the existence of the source file. + if [ ! -f $1 ] ; then + echo "ERROR: The source file "$1" doesn't exist." 1>&2 + error_status=1 + shift + continue + fi + + # read the source file and determine where the header starts, then get license header without prefix + counter=0 + while read line ; do + # remove windows "line feed" character from the line (if any) + line=`echo "${line}" | tr -d '\r'` + # check if the given line contains copyright + check_copyright=`echo "${line}" | grep "Copyright (c) "` + if [ "${check_copyright}" != "" ] ; then + # determine the comment prefix + prefix=`echo "${line}" | cut -d "C" -f 1` + # remove prefix (we use "_" as a sed delimiter, since the prefix could be like //) + copyright_without_prefix=`echo "${line}" | sed s_"^${prefix}"__g` + # copyright years + year1=`echo "${copyright_without_prefix}" | cut -d " " -f 3` + year2=`echo "${copyright_without_prefix}" | cut -d " " -f 4` + # Processing the first year in the copyright string + length=`expr "${year1}" : '.*'` + if [ ${length} -ne 5 ] ; then + break + fi + check_year1=`echo ${year1} | egrep "19[0-9][0-9],|2[0-9][0-9][0-9],"` + if [ "${check_year1}" = "" ] ; then + break + fi + # Processing the second year in the copyright string + if [ "${year2}" != "Oracle" ] ; then + length=`expr "${year2}" : '.*'` + if [ ${length} -ne 5 ] ; then + break + else + check_year2=`echo ${year2} | egrep "19[0-9][0-9],|2[0-9][0-9][0-9],"` + if [ "${check_year2}" = "" ] ; then + break + fi + fi + fi + + # copyright string without copyright years + no_years=`echo "${copyright_without_prefix}" | sed 's/[0-9,]*//g'` + # copyright string before years + before_years=`echo "${no_years}" | cut -d "O" -f 1` + # copyright string after years + after_years=`echo "${no_years}" | cut -d ")" -f 2` + # form a new copyright string with %YEARS% + new_copyright=`echo ${before_years}"%YEARS%"${after_years}` + # save the new copyright string to a file + echo "${new_copyright}" > ${tmpfile} + # start counting the lines + counter=1 + # move to the next line + continue + fi + if [ ${counter} -ne 0 ] ; then + # this should be a license header line, hence increment counter + counter=`expr ${counter} + 1` + # record a string without a prefix to a file + newline=`echo "${line}" | sed s_"^${prefix}"__` + + # we need to take care of the empty lines in the header, i.e. check the prefix without spaces + trimmed_prefix=`echo "${prefix}" | tr -d " "` + trimmed_line=`echo "${line}" | tr -d " "` + if [ "${trimmed_line}" = "${trimmed_prefix}" ] ; then + echo "" >> ${tmpfile} + else + echo "${newline}" >> ${tmpfile} + fi + fi + # stop reading lines when a license header ends and add an empty line to the end + if [ ${counter} -eq ${lines} ] ; then + echo "" >> ${tmpfile} + break + fi + done < $1 + + # compare the license header with a template file + if [ -s ${tmpfile} ] ; then + diff -c ${tmpfile} ${template_dir}/${header} 1>&2 + if [ "$?" = "0" ] ; then + echo "SUCCESS: The license header for "`pwd`"/"$1" has been verified." + echo "###" + else + echo "ERROR: License header is not correct in "`pwd`"/"$1 1>&2 + echo "See diffs above. " 1>&2 + echo "###" 1>&2 + echo "" 1>&2 + error_status=1 + fi + else + # If we don't have a temporary file, there is a problem with a copyright string (or no copyright string) + echo "ERROR: Copyright string is not correct or missing in "`pwd`"/"$1 1>&2 + echo "###" 1>&2 + echo "" 1>&2 + error_status=1 + fi + rm -f ${tmpfile} + shift +done +if [ ${error_status} -ne 0 ] ; then + exit 1 +fi diff -r 38ccffcbab0c -r 356f4e5f57fe test/Makefile --- a/test/Makefile Tue May 29 00:27:12 2012 +0100 +++ b/test/Makefile Thu Aug 02 14:00:03 2012 +0100 @@ -74,7 +74,8 @@ jdk_rmi \ jdk_sound \ jdk_swing \ - jdk_tools1 jdk_tools2 + jdk_tools1 jdk_tools2 \ + jdk_jfr # All jdk tests JDK_ALL_TEST_LIST = $(JDK_DEFAULT_TEST_LIST) $(JDK_NONDEFAULT_TEST_LIST)