diff --git a/.hgtags b/.hgtags
index 0a357037091..2f2cb6c3aff 100644
--- a/.hgtags
+++ b/.hgtags
@@ -619,3 +619,6 @@ c7d4f2849dbfb755fc5860b362a4044ea0c9e082 jdk-15+8
4a87bb7ebfd7f6a25ec59a5982fe3607242777f8 jdk-14+35
62b5bfef8d618e08e6f3a56cf1fb0e67e89e9cc2 jdk-15+9
bc54620a3848c26cff9766e5e2a6e5ddab98ed18 jdk-14+36
+1bee69801aeea1a34261c93f35bc9de072a98704 jdk-15+10
+b2dd4028a6de4e40dda8b76109e4b5c6b294f980 jdk-15+11
+2ec0ff3042630ddbd3587e340fe0dd40391cb6c4 jdk-15+12
diff --git a/bin/idea.sh b/bin/idea.sh
index 9ede324c7a5..eedd138fdde 100644
--- a/bin/idea.sh
+++ b/bin/idea.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2020, 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
@@ -113,6 +113,14 @@ if [ "x$SPEC" = "x" ] ; then
echo "FATAL: SPEC is empty" >&2; exit 1
fi
+if [ -d "$TOPLEVEL_DIR/.hg" ] ; then
+ VCS_TYPE="hg4idea"
+fi
+
+if [ -d "$TOPLEVEL_DIR/.git" ] ; then
+ VCS_TYPE="Git"
+fi
+
### Replace template variables
NUM_REPLACEMENTS=0
@@ -137,6 +145,7 @@ add_replacement() {
}
add_replacement "###MODULE_NAMES###" "$MODULE_NAMES"
+add_replacement "###VCS_TYPE###" "$VCS_TYPE"
SPEC_DIR=`dirname $SPEC`
if [ "x$CYGPATH" = "x" ]; then
add_replacement "###BUILD_DIR###" "$SPEC_DIR"
diff --git a/doc/building.html b/doc/building.html
index 2f59ca8775b..d34d94c2954 100644
--- a/doc/building.html
+++ b/doc/building.html
@@ -473,7 +473,7 @@ CC: Sun C++ 5.13 SunOS_i386 151846-10 2015/10/30
--with-version-string=<string> - Specify the version string this build will be identified with.
--with-version-<part>=<value> - A group of options, where <part> can be any of pre, opt, build, major, minor, security or patch. Use these options to modify just the corresponding part of the version string from the default, or the value provided by --with-version-string.
--with-jvm-variants=<variant>[,<variant>...] - Build the specified variant (or variants) of Hotspot. Valid variants are: server, client, minimal, core, zero, custom. Note that not all variants are possible to combine in a single build.
-
--with-jvm-features=<feature>[,<feature>...] - Use the specified JVM features when building Hotspot. The list of features will be enabled on top of the default list. For the custom JVM variant, this default list is empty. A complete list of available JVM features can be found using bash configure --help.
+
--enable-jvm-feature-<feature> or --disable-jvm-feature-<feature> - Include (or exclude) <feature> as a JVM feature in Hotspot. You can also specify a list of features to be enabled, separated by space or comma, as --with-jvm-features=<feature>[,<feature>...]. If you prefix <feature> with a -, it will be disabled. These options will modify the default list of features for the JVM variant(s) you are building. For the custom JVM variant, the default list is empty. A complete list of valid JVM features can be found using bash configure --help.
--with-target-bits=<bits> - Create a target binary suitable for running on a <bits> platform. Use this to create 32-bit output on a 64-bit build platform, instead of doing a full cross-compile. (This is known as a reduced build.)
On Linux, BSD and AIX, it is possible to override where Java by default searches for runtime/JNI libraries. This can be useful in situations where there is a special shared directory for system JNI libraries. This setting can in turn be overriden at runtime by setting the java.library.path property.
diff --git a/doc/building.md b/doc/building.md
index ca1634737be..a3c4ee66831 100644
--- a/doc/building.md
+++ b/doc/building.md
@@ -684,11 +684,14 @@ features, use `bash configure --help=short` instead.)
(or variants) of Hotspot. Valid variants are: `server`, `client`,
`minimal`, `core`, `zero`, `custom`. Note that not all
variants are possible to combine in a single build.
- * `--with-jvm-features=[,...]` - Use the specified JVM
- features when building Hotspot. The list of features will be enabled on top
- of the default list. For the `custom` JVM variant, this default list is
- empty. A complete list of available JVM features can be found using `bash
- configure --help`.
+ * `--enable-jvm-feature-` or `--disable-jvm-feature-` -
+ Include (or exclude) `` as a JVM feature in Hotspot. You can also
+ specify a list of features to be enabled, separated by space or comma, as
+ `--with-jvm-features=[,...]`. If you prefix ``
+ with a `-`, it will be disabled. These options will modify the default list
+ of features for the JVM variant(s) you are building. For the `custom` JVM
+ variant, the default list is empty. A complete list of valid JVM features
+ can be found using `bash configure --help`.
* `--with-target-bits=` - Create a target binary suitable for running
on a `` platform. Use this to create 32-bit output on a 64-bit build
platform, instead of doing a full cross-compile. (This is known as a
diff --git a/make/Bundles.gmk b/make/Bundles.gmk
index 170f46a9a6c..c411bfe212b 100644
--- a/make/Bundles.gmk
+++ b/make/Bundles.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2016, 2020, 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
@@ -125,6 +125,13 @@ define SetupBundleFileBody
&& $(TAR) cf - -$(TAR_INCLUDE_PARAM) $$($1_$$d_LIST_FILE) \
$(TAR_IGNORE_EXIT_VALUE) ) \
| ( $(CD) $(SUPPORT_OUTPUTDIR)/bundles/$1/$$($1_SUBDIR) && $(TAR) xf - )$$(NEWLINE) )
+ # Rename stripped pdb files
+ ifeq ($(call isTargetOs, windows)+$(SHIP_DEBUG_SYMBOLS), true+public)
+ for f in `$(FIND) $(SUPPORT_OUTPUTDIR)/bundles/$1/$$($1_SUBDIR) -name "*.stripped.pdb"`; do \
+ $(ECHO) Renaming $$$${f} to $$$${f%stripped.pdb}pdb $(LOG_INFO); \
+ $(MV) $$$${f} $$$${f%stripped.pdb}pdb; \
+ done
+ endif
# Unzip any zipped debuginfo files
ifeq ($$($1_UNZIP_DEBUGINFO), true)
for f in `$(FIND) $(SUPPORT_OUTPUTDIR)/bundles/$1/$$($1_SUBDIR) -name "*.diz"`; do \
@@ -183,7 +190,7 @@ endif
ifneq ($(filter product-bundles% legacy-bundles, $(MAKECMDGOALS)), )
- SYMBOLS_EXCLUDE_PATTERN := %.debuginfo %.diz %.pdb %.map
+ SYMBOLS_EXCLUDE_PATTERN := %.debuginfo %.diz %.map
# There may be files with spaces in the names, so use ShellFindFiles
# explicitly.
@@ -209,6 +216,21 @@ ifneq ($(filter product-bundles% legacy-bundles, $(MAKECMDGOALS)), )
endif
endif
+ # Create special filter rules when dealing with debug symbols on windows
+ ifeq ($(call isTargetOs, windows), true)
+ ifeq ($(SHIP_DEBUG_SYMBOLS), )
+ JDK_SYMBOLS_EXCLUDE_PATTERN := %.pdb
+ else
+ ifeq ($(SHIP_DEBUG_SYMBOLS), public)
+ JDK_SYMBOLS_EXCLUDE_PATTERN := \
+ $(filter-out \
+ %.stripped.pdb, \
+ $(filter %.pdb, $(ALL_JDK_FILES)) \
+ )
+ endif
+ endif
+ endif
+
JDK_BUNDLE_FILES := \
$(filter-out \
$(JDK_SYMBOLS_EXCLUDE_PATTERN) \
@@ -218,13 +240,14 @@ ifneq ($(filter product-bundles% legacy-bundles, $(MAKECMDGOALS)), )
, \
$(ALL_JDK_FILES) \
)
+
JDK_SYMBOLS_BUNDLE_FILES := \
$(filter \
$(JDK_SYMBOLS_EXCLUDE_PATTERN) \
$(SYMBOLS_EXCLUDE_PATTERN) \
, \
$(filter-out \
- $(JDK_IMAGE_HOMEDIR)/demo/% \
+ $(JDK_IMAGE_HOMEDIR)/demo/% %.stripped.pdb \
, \
$(ALL_JDK_SYMBOLS_FILES) \
) \
@@ -245,29 +268,116 @@ ifneq ($(filter product-bundles% legacy-bundles, $(MAKECMDGOALS)), )
endif
endif
+ # Create special filter rules when dealing with debug symbols on windows
+ ifeq ($(call isTargetOs, windows), true)
+ ifeq ($(SHIP_DEBUG_SYMBOLS), )
+ JRE_SYMBOLS_EXCLUDE_PATTERN := %.pdb
+ else
+ ifeq ($(SHIP_DEBUG_SYMBOLS), public)
+ JRE_SYMBOLS_EXCLUDE_PATTERN := \
+ $(filter-out \
+ %.stripped.pdb, \
+ $(filter %.pdb, $(ALL_JRE_FILES)) \
+ )
+ endif
+ endif
+ endif
+
JRE_BUNDLE_FILES := $(filter-out \
$(JRE_SYMBOLS_EXCLUDE_PATTERN) \
$(SYMBOLS_EXCLUDE_PATTERN), \
$(ALL_JRE_FILES))
- $(eval $(call SetupBundleFile, BUILD_JDK_BUNDLE, \
- BUNDLE_NAME := $(JDK_BUNDLE_NAME), \
- FILES := $(JDK_BUNDLE_FILES), \
- SPECIAL_INCLUDES := $(JDK_SPECIAL_INCLUDES), \
- BASE_DIRS := $(JDK_IMAGE_DIR), \
- SUBDIR := $(JDK_BUNDLE_SUBDIR), \
- ))
+ # On Macosx release builds, when there is a code signing certificate available,
+ # the final bundle layout can be signed.
+ SIGN_BUNDLE := false
+ ifeq ($(call isTargetOs, macosx)+$(DEBUG_LEVEL), true+release)
+ ifneq ($(CODESIGN), )
+ SIGN_BUNDLE := true
+ endif
+ endif
- PRODUCT_TARGETS += $(BUILD_JDK_BUNDLE)
+ ifeq ($(SIGN_BUNDLE), true)
+ # Macosx release build and code signing available.
- $(eval $(call SetupBundleFile, BUILD_JRE_BUNDLE, \
- BUNDLE_NAME := $(JRE_BUNDLE_NAME), \
- FILES := $(JRE_BUNDLE_FILES), \
- BASE_DIRS := $(JRE_IMAGE_DIR), \
- SUBDIR := $(JRE_BUNDLE_SUBDIR), \
- ))
+ ################################################################################
+ # JDK bundle
+ $(eval $(call SetupCopyFiles, CREATE_JDK_BUNDLE_DIR_SIGNED, \
+ SRC := $(JDK_IMAGE_DIR), \
+ FILES := $(JDK_BUNDLE_FILES), \
+ DEST := $(JDK_MACOSX_BUNDLE_DIR_SIGNED), \
+ ))
- LEGACY_TARGETS += $(BUILD_JRE_BUNDLE)
+ JDK_SIGNED_CODE_RESOURCES := \
+ $(JDK_MACOSX_BUNDLE_DIR_SIGNED)/$(JDK_MACOSX_CONTENTS_SUBDIR)/_CodeSignature/CodeResources
+
+ $(JDK_SIGNED_CODE_RESOURCES): $(CREATE_JDK_BUNDLE_DIR_SIGNED)
+ $(call LogWarn, Signing $(JDK_BUNDLE_NAME))
+ $(CODESIGN) -s "$(MACOSX_CODESIGN_IDENTITY)" \
+ --timestamp --options runtime --deep --force \
+ $(JDK_MACOSX_BUNDLE_DIR_SIGNED)/$(JDK_MACOSX_BUNDLE_TOP_DIR) $(LOG_DEBUG)
+ $(TOUCH) $@
+
+ $(eval $(call SetupBundleFile, BUILD_JDK_BUNDLE, \
+ BUNDLE_NAME := $(JDK_BUNDLE_NAME), \
+ FILES := \
+ $(CREATE_JDK_BUNDLE_DIR_SIGNED) \
+ $(JDK_SIGNED_CODE_RESOURCES), \
+ BASE_DIRS := $(JDK_MACOSX_BUNDLE_DIR_SIGNED), \
+ SUBDIR := $(JDK_BUNDLE_SUBDIR), \
+ ))
+
+ PRODUCT_TARGETS += $(BUILD_JDK_BUNDLE)
+
+ ################################################################################
+ # JRE bundle
+ $(eval $(call SetupCopyFiles, CREATE_JRE_BUNDLE_DIR_SIGNED, \
+ SRC := $(JRE_IMAGE_DIR), \
+ FILES := $(JRE_BUNDLE_FILES), \
+ DEST := $(JRE_MACOSX_BUNDLE_DIR_SIGNED), \
+ ))
+
+ JRE_SIGNED_CODE_RESOURCES := \
+ $(JRE_MACOSX_BUNDLE_DIR_SIGNED)/$(JRE_MACOSX_CONTENTS_SUBDIR)/_CodeSignature/CodeResources
+
+ $(JRE_SIGNED_CODE_RESOURCES): $(CREATE_JRE_BUNDLE_DIR_SIGNED)
+ $(call LogWarn, Signing $(JRE_BUNDLE_NAME))
+ $(CODESIGN) -s "$(MACOSX_CODESIGN_IDENTITY)" \
+ --timestamp --options runtime --deep --force \
+ $(JRE_MACOSX_BUNDLE_DIR_SIGNED)/$(JRE_MACOSX_BUNDLE_TOP_DIR) $(LOG_DEBUG)
+ $(TOUCH) $@
+
+ $(eval $(call SetupBundleFile, BUILD_JRE_BUNDLE, \
+ BUNDLE_NAME := $(JRE_BUNDLE_NAME), \
+ FILES := \
+ $(CREATE_JRE_BUNDLE_DIR_SIGNED) \
+ $(JRE_SIGNED_CODE_RESOURCES), \
+ BASE_DIRS := $(JRE_MACOSX_BUNDLE_DIR_SIGNED), \
+ SUBDIR := $(JRE_BUNDLE_SUBDIR), \
+ ))
+
+ LEGACY_TARGETS += $(BUILD_JRE_BUNDLE)
+ else
+ # Not a Macosx release build or code signing not available.
+ $(eval $(call SetupBundleFile, BUILD_JDK_BUNDLE, \
+ BUNDLE_NAME := $(JDK_BUNDLE_NAME), \
+ FILES := $(JDK_BUNDLE_FILES), \
+ SPECIAL_INCLUDES := $(JDK_SPECIAL_INCLUDES), \
+ BASE_DIRS := $(JDK_IMAGE_DIR), \
+ SUBDIR := $(JDK_BUNDLE_SUBDIR), \
+ ))
+
+ PRODUCT_TARGETS += $(BUILD_JDK_BUNDLE)
+
+ $(eval $(call SetupBundleFile, BUILD_JRE_BUNDLE, \
+ BUNDLE_NAME := $(JRE_BUNDLE_NAME), \
+ FILES := $(JRE_BUNDLE_FILES), \
+ BASE_DIRS := $(JRE_IMAGE_DIR), \
+ SUBDIR := $(JRE_BUNDLE_SUBDIR), \
+ ))
+
+ LEGACY_TARGETS += $(BUILD_JRE_BUNDLE)
+ endif
ifeq ($(COPY_DEBUG_SYMBOLS), true)
$(eval $(call SetupBundleFile, BUILD_JDK_SYMBOLS_BUNDLE, \
diff --git a/make/CompileToolsJdk.gmk b/make/CompileToolsJdk.gmk
index bbb84648fd8..abde9a2a87a 100644
--- a/make/CompileToolsJdk.gmk
+++ b/make/CompileToolsJdk.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2020, 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
@@ -40,7 +40,6 @@ $(eval $(call IncludeCustomExtension, CompileTools.gmk))
# Use += to be able to add to this from a custom extension
BUILD_TOOLS_SRC_DIRS += \
$(TOPDIR)/make/jdk/src/classes \
- $(BUILDTOOLS_OUTPUTDIR)/interim_cldrconverter_classes \
$(BUILDTOOLS_OUTPUTDIR)/interim_tzdb_classes \
#
diff --git a/make/CreateJmods.gmk b/make/CreateJmods.gmk
index 8c43f5e6410..59eb16ad471 100644
--- a/make/CreateJmods.gmk
+++ b/make/CreateJmods.gmk
@@ -1,4 +1,5 @@
-# Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
+#
+# Copyright (c) 2014, 2020, 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
@@ -58,12 +59,58 @@ $(call FillFindCache, \
)
ifneq ($(LIBS_DIR), )
- JMOD_FLAGS += --libs $(LIBS_DIR)
DEPS += $(call FindFiles, $(LIBS_DIR))
+ ifeq ($(call isTargetOs, windows)+$(SHIP_DEBUG_SYMBOLS), true+public)
+ # For public debug symbols on Windows, we have to use stripped pdbs and rename them
+ rename_stripped = $(patsubst %.stripped.pdb,%.pdb,$1)
+ LIBS_DIR_FILTERED := $(subst modules_libs,modules_libs_filtered, $(LIBS_DIR))
+ FILES_LIBS := $(filter-out %.pdb, $(call FindFiles, $(LIBS_DIR))) \
+ $(filter %.stripped.pdb, $(call FindFiles, $(LIBS_DIR)))
+ $(eval $(call SetupCopyFiles, COPY_FILTERED_LIBS, \
+ SRC := $(LIBS_DIR), \
+ DEST := $(LIBS_DIR_FILTERED), \
+ FILES := $(FILES_LIBS), \
+ NAME_MACRO := rename_stripped, \
+ ))
+ DEPS += $(COPY_FILTERED_LIBS)
+ JMOD_FLAGS += --libs $(LIBS_DIR_FILTERED)
+ else
+ JMOD_FLAGS += --libs $(LIBS_DIR)
+ endif
endif
ifneq ($(CMDS_DIR), )
- JMOD_FLAGS += --cmds $(CMDS_DIR)
DEPS += $(call FindFiles, $(CMDS_DIR))
+ ifeq ($(call isTargetOs, windows)+$(SHIP_DEBUG_SYMBOLS), true+public)
+ # For public debug symbols on Windows, we have to use stripped pdbs, rename them
+ # and filter out a few launcher pdbs where there's a lib that goes by the same name
+ rename_stripped = $(patsubst %.stripped.pdb,%.pdb,$1)
+ CMDS_DIR_FILTERED := $(subst modules_cmds,modules_cmds_filtered, $(CMDS_DIR))
+ FILES_CMDS := $(filter-out %.pdb, $(call FindFiles, $(CMDS_DIR))) \
+ $(filter-out %jimage.stripped.pdb %jpackage.stripped.pdb %java.stripped.pdb, \
+ $(filter %.stripped.pdb, $(call FindFiles, $(CMDS_DIR))))
+ $(eval $(call SetupCopyFiles, COPY_FILTERED_CMDS, \
+ SRC := $(CMDS_DIR), \
+ DEST := $(CMDS_DIR_FILTERED), \
+ FILES := $(FILES_CMDS), \
+ NAME_MACRO := rename_stripped, \
+ ))
+ DEPS += $(COPY_FILTERED_CMDS)
+ JMOD_FLAGS += --cmds $(CMDS_DIR_FILTERED)
+ else ifeq ($(call isTargetOs, windows)+$(SHIP_DEBUG_SYMBOLS), true+full)
+ # For full debug symbols on Windows, we have to filter out a few launcher pdbs
+ # where there's a lib that goes by the same name
+ CMDS_DIR_FILTERED := $(subst modules_cmds,modules_cmds_filtered, $(CMDS_DIR))
+ $(eval $(call SetupCopyFiles, COPY_FILTERED_CMDS, \
+ SRC := $(CMDS_DIR), \
+ DEST := $(CMDS_DIR_FILTERED), \
+ FILES := $(filter-out %jimage.pdb %jpackage.pdb %java.pdb, \
+ $(call FindFiles, $(CMDS_DIR))), \
+ ))
+ DEPS += $(COPY_FILTERED_CMDS)
+ JMOD_FLAGS += --cmds $(CMDS_DIR_FILTERED)
+ else
+ JMOD_FLAGS += --cmds $(CMDS_DIR)
+ endif
endif
ifneq ($(CONF_DIR), )
JMOD_FLAGS += --config $(CONF_DIR)
@@ -159,7 +206,15 @@ ifeq ($(INTERIM_JMOD), true)
INTERIM_MSG := interim$(SPACE)
endif
-JMOD_FLAGS += --exclude '**{_the.*,_*.marker,*.diz,*.debuginfo,*.dSYM/**,*.dSYM,*.pdb,*.map}'
+ifeq ($(call isTargetOs, windows), true)
+ ifeq ($(SHIP_DEBUG_SYMBOLS), )
+ JMOD_FLAGS += --exclude '**{_the.*,_*.marker,*.diz,*.pdb,*.map}'
+ else
+ JMOD_FLAGS += --exclude '**{_the.*,_*.marker,*.diz,*.map}'
+ endif
+else
+ JMOD_FLAGS += --exclude '**{_the.*,_*.marker,*.diz,*.debuginfo,*.dSYM/**,*.dSYM}'
+endif
# Create jmods in the support dir and then move them into place to keep the
# module path in $(IMAGES_OUTPUTDIR)/jmods valid at all times.
diff --git a/make/GenerateLinkOptData.gmk b/make/GenerateLinkOptData.gmk
index 87ad6c35754..8e2e0c11711 100644
--- a/make/GenerateLinkOptData.gmk
+++ b/make/GenerateLinkOptData.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2016, 2020, 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
@@ -104,6 +104,17 @@ $(eval $(call SetupCopyFiles, COPY_CLASSLIST, \
TARGETS += $(COPY_CLASSLIST)
+# In case of shipping public debug symbols on windows, there is another temporary
+# location from where jmods are compiled - need to deploy classlist there, too.
+ifeq ($(call isTargetOs, windows)+$(SHIP_DEBUG_SYMBOLS), true+public)
+ $(eval $(call SetupCopyFiles, COPY_CLASSLIST_TO_FILTERED, \
+ FILES := $(CLASSLIST_FILE), \
+ DEST := $(SUPPORT_OUTPUTDIR)/modules_libs_filtered/java.base, \
+ ))
+
+ TARGETS += $(COPY_CLASSLIST_TO_FILTERED)
+endif
+
# Copy the default_jli_trace.txt file into jdk.jlink
$(eval $(call SetupCopyFiles, COPY_JLI_TRACE, \
FILES := $(JLI_TRACE_FILE), \
diff --git a/make/Help.gmk b/make/Global.gmk
similarity index 95%
rename from make/Help.gmk
rename to make/Global.gmk
index 7f6c9a4f4a6..b6eedb0bb82 100644
--- a/make/Help.gmk
+++ b/make/Global.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2020, 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
@@ -117,13 +117,14 @@ print-configurations:
# We need a dummy rule otherwise make will complain
@true
-# This is not really a "help" target, but it is a global target, and those are
-# all contained in this file.
-run-test-prebuilt:
+test-prebuilt:
@( cd $(topdir) && \
$(MAKE) --no-print-directory -r -R -I make/common/ -f make/RunTestsPrebuilt.gmk \
- run-test-prebuilt CUSTOM_MAKE_DIR=$(CUSTOM_MAKE_DIR) TEST="$(TEST)" )
+ test-prebuilt CUSTOM_MAKE_DIR=$(CUSTOM_MAKE_DIR) TEST="$(TEST)" )
-ALL_GLOBAL_TARGETS := help print-configurations run-test-prebuilt
+# Alias for backwards compatibility
+run-test-prebuilt: test-prebuilt
+
+ALL_GLOBAL_TARGETS := help print-configurations test-prebuilt run-test-prebuilt
.PHONY: $(ALL_GLOBAL_TARGETS)
diff --git a/make/Images.gmk b/make/Images.gmk
index 100e35fcca9..1e038eb4aa4 100644
--- a/make/Images.gmk
+++ b/make/Images.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2020, 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
@@ -208,6 +208,7 @@ ifeq ($(call isTargetOs, windows), true)
else
LIBS_TARGET_SUBDIR := lib
endif
+CMDS_TARGET_SUBDIR := bin
# Param 1 - dir to find debuginfo files in
FindDebuginfoFiles = \
@@ -224,12 +225,15 @@ else
# dirs.
ifeq ($(call isTargetOs, macosx), true)
$(call FillFindCache, \
- $(SUPPORT_OUTPUTDIR)/modules_cmds $(SUPPORT_OUTPUTDIR)/modules_libs)
+ $(SUPPORT_OUTPUTDIR)/modules_libs $(SUPPORT_OUTPUTDIR)/modules_cmds)
FindDebuginfoFiles = \
$(if $(wildcard $1), $(call containing, .dSYM/, $(call FindFiles, $1)))
endif
endif
+FILTERED_PDBS := %jimage.stripped.pdb %jpackage.stripped.pdb %java.stripped.pdb \
+ %jimage.pdb %jpackage.pdb %java.pdb %jimage.map %jpackage.map %java.map
+
# Param 1 - either JDK or JRE
SetupCopyDebuginfo = \
$(foreach m, $(ALL_$1_MODULES), \
@@ -240,6 +244,13 @@ SetupCopyDebuginfo = \
$(SUPPORT_OUTPUTDIR)/modules_libs/$m), \
)) \
$(eval $1_TARGETS += $$(COPY_$1_LIBS_DEBUGINFO_$m)) \
+ $(eval $(call SetupCopyFiles, COPY_$1_CMDS_DEBUGINFO_$m, \
+ SRC := $(SUPPORT_OUTPUTDIR)/modules_cmds/$m, \
+ DEST := $($1_IMAGE_DIR)/$(CMDS_TARGET_SUBDIR), \
+ FILES := $(filter-out $(FILTERED_PDBS), $(call FindDebuginfoFiles, \
+ $(SUPPORT_OUTPUTDIR)/modules_cmds/$m)), \
+ )) \
+ $(eval $1_TARGETS += $$(COPY_$1_CMDS_DEBUGINFO_$m)) \
)
# No space before argument to avoid having to put $(strip ) everywhere in
diff --git a/make/Init.gmk b/make/Init.gmk
index d801499298b..a8ca9e0b8b0 100644
--- a/make/Init.gmk
+++ b/make/Init.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2020, 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
@@ -47,7 +47,7 @@ ifeq ($(HAS_SPEC),)
# Here are "global" targets, i.e. targets that can be executed without having
# a configuration. This will define ALL_GLOBAL_TARGETS.
- include $(topdir)/make/Help.gmk
+ include $(topdir)/make/Global.gmk
# Targets provided by Init.gmk.
ALL_INIT_TARGETS := print-modules print-targets print-configuration \
diff --git a/make/Main.gmk b/make/Main.gmk
index 4e26a4e840d..055910ed80a 100644
--- a/make/Main.gmk
+++ b/make/Main.gmk
@@ -75,9 +75,6 @@ interim-langtools:
interim-rmic:
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileInterimRmic.gmk)
-interim-cldrconverter:
- +($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CopyInterimCLDRConverter.gmk)
-
interim-tzdb:
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CopyInterimTZDB.gmk)
@@ -92,7 +89,7 @@ buildtools-hotspot:
+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileToolsHotspot.gmk)
ALL_TARGETS += buildtools-langtools interim-langtools \
- interim-rmic interim-cldrconverter interim-tzdb buildtools-jdk buildtools-modules \
+ interim-rmic interim-tzdb buildtools-jdk buildtools-modules \
buildtools-hotspot
################################################################################
@@ -677,7 +674,7 @@ else
interim-langtools: $(INTERIM_LANGTOOLS_GENSRC_TARGETS)
- buildtools-jdk: interim-langtools interim-cldrconverter interim-tzdb
+ buildtools-jdk: interim-langtools interim-tzdb
buildtools-hotspot: interim-langtools
diff --git a/make/RunTests.gmk b/make/RunTests.gmk
index 8c718b57707..121cdc09fa0 100644
--- a/make/RunTests.gmk
+++ b/make/RunTests.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2016, 2020, 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
@@ -1049,7 +1049,7 @@ define SetupRunSpecialTestBody
else ifeq ($$($1_TEST_NAME), make)
$1_TEST_COMMAND_LINE := \
($(CD) $(TOPDIR)/test/make && $(MAKE) $(MAKE_ARGS) -f \
- TestMake.gmk $$($1_TEST_ARGS))
+ TestMake.gmk $$($1_TEST_ARGS) TEST_SUPPORT_DIR="$$($1_TEST_SUPPORT_DIR)")
else
$$(error Invalid special test specification: $$($1_TEST_NAME))
endif
diff --git a/make/RunTestsPrebuilt.gmk b/make/RunTestsPrebuilt.gmk
index 58d1fca168a..213131fbf63 100644
--- a/make/RunTestsPrebuilt.gmk
+++ b/make/RunTestsPrebuilt.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2017, 2020, 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
@@ -336,7 +336,7 @@ SPEC := $(NEW_SPEC)
default: all
-run-test-prebuilt:
+test-prebuilt:
# Need to make sure the failure logs output dir exists since
# ExecuteWithLog is called in RunTests.gmk. The PrepareFailureLogs macro
# is unfortunately not available at this point.
@@ -351,6 +351,6 @@ run-test-prebuilt:
@cd $(TOPDIR) && $(MAKE) $(MAKE_ARGS) -f make/RunTests.gmk run-test \
TEST="$(TEST)"
-all: run-test-prebuilt
+all: test-prebuilt
-.PHONY: default all
+.PHONY: default all test-prebuilt
diff --git a/make/autoconf/basic.m4 b/make/autoconf/basic.m4
new file mode 100644
index 00000000000..9536d99551f
--- /dev/null
+++ b/make/autoconf/basic.m4
@@ -0,0 +1,544 @@
+#
+# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+m4_include([basic_tools.m4])
+m4_include([basic_windows.m4])
+
+###############################################################################
+AC_DEFUN_ONCE([BASIC_INIT],
+[
+ # Save the original command line. This is passed to us by the wrapper configure script.
+ AC_SUBST(CONFIGURE_COMMAND_LINE)
+ # AUTOCONF might be set in the environment by the user. Preserve for "make reconfigure".
+ AC_SUBST(AUTOCONF)
+ # Save the path variable before it gets changed
+ ORIGINAL_PATH="$PATH"
+ AC_SUBST(ORIGINAL_PATH)
+ DATE_WHEN_CONFIGURED=`date`
+ AC_SUBST(DATE_WHEN_CONFIGURED)
+ AC_MSG_NOTICE([Configuration created at $DATE_WHEN_CONFIGURED.])
+])
+
+###############################################################################
+# Check that there are no unprocessed overridden variables left.
+# If so, they are an incorrect argument and we will exit with an error.
+AC_DEFUN([BASIC_CHECK_LEFTOVER_OVERRIDDEN],
+[
+ if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then
+ # Replace the separating ! with spaces before presenting for end user.
+ unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ }
+ AC_MSG_WARN([The following variables might be unknown to configure: $unknown_variables])
+ fi
+])
+
+###############################################################################
+# Setup basic configuration paths, and platform-specific stuff related to PATHs.
+AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
+[
+ # Save the current directory this script was started from
+ CONFIGURE_START_DIR="$PWD"
+
+ # We might need to rewrite ORIGINAL_PATH, if it includes "#", to quote them
+ # for make. We couldn't do this when we retrieved ORIGINAL_PATH, since SED
+ # was not available at that time.
+ REWRITTEN_PATH=`$ECHO "$ORIGINAL_PATH" | $SED -e 's/#/\\\\#/g'`
+ if test "x$REWRITTEN_PATH" != "x$ORIGINAL_PATH"; then
+ ORIGINAL_PATH="$REWRITTEN_PATH"
+ AC_MSG_NOTICE([Rewriting ORIGINAL_PATH to $REWRITTEN_PATH])
+ fi
+
+ if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
+ PATH_SEP=";"
+ EXE_SUFFIX=".exe"
+ BASIC_CHECK_PATHS_WINDOWS
+ else
+ PATH_SEP=":"
+ EXE_SUFFIX=""
+ fi
+ AC_SUBST(PATH_SEP)
+ AC_SUBST(EXE_SUFFIX)
+
+ # We get the top-level directory from the supporting wrappers.
+ AC_MSG_CHECKING([for top-level directory])
+ AC_MSG_RESULT([$TOPDIR])
+ AC_SUBST(TOPDIR)
+ AC_SUBST(CONFIGURE_START_DIR)
+
+ # We can only call UTIL_FIXUP_PATH after BASIC_CHECK_PATHS_WINDOWS.
+ UTIL_FIXUP_PATH(CONFIGURE_START_DIR)
+ UTIL_FIXUP_PATH(TOPDIR)
+
+ # Locate the directory of this script.
+ AUTOCONF_DIR=$TOPDIR/make/autoconf
+
+ # Setup username (for use in adhoc version strings etc)
+ # Outer [ ] to quote m4.
+ [ USERNAME=`$ECHO "$USER" | $TR -d -c '[a-z][A-Z][0-9]'` ]
+ AC_SUBST(USERNAME)
+])
+
+###############################################################################
+# Evaluates platform specific overrides for devkit variables.
+# $1: Name of variable
+AC_DEFUN([BASIC_EVAL_DEVKIT_VARIABLE],
+[
+ if test "x[$]$1" = x; then
+ eval $1="\${$1_${OPENJDK_TARGET_CPU}}"
+ fi
+])
+
+###############################################################################
+AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
+[
+ AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit],
+ [use this devkit for compilers, tools and resources])])
+
+ if test "x$with_devkit" = xyes; then
+ AC_MSG_ERROR([--with-devkit must have a value])
+ elif test "x$with_devkit" != x && test "x$with_devkit" != xno; then
+ UTIL_FIXUP_PATH([with_devkit])
+ DEVKIT_ROOT="$with_devkit"
+ # Check for a meta data info file in the root of the devkit
+ if test -f "$DEVKIT_ROOT/devkit.info"; then
+ . $DEVKIT_ROOT/devkit.info
+ # This potentially sets the following:
+ # A descriptive name of the devkit
+ BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_NAME])
+ # Corresponds to --with-extra-path
+ BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_EXTRA_PATH])
+ # Corresponds to --with-toolchain-path
+ BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_TOOLCHAIN_PATH])
+ # Corresponds to --with-sysroot
+ BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_SYSROOT])
+
+ # Identifies the Visual Studio version in the devkit
+ BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_VERSION])
+ # The Visual Studio include environment variable
+ BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_INCLUDE])
+ # The Visual Studio lib environment variable
+ BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_LIB])
+ # Corresponds to --with-msvcr-dll
+ BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCR_DLL])
+ # Corresponds to --with-msvcp-dll
+ BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCP_DLL])
+ # Corresponds to --with-ucrt-dll-dir
+ BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_UCRT_DLL_DIR])
+ fi
+
+ AC_MSG_CHECKING([for devkit])
+ if test "x$DEVKIT_NAME" != x; then
+ AC_MSG_RESULT([$DEVKIT_NAME in $DEVKIT_ROOT])
+ else
+ AC_MSG_RESULT([$DEVKIT_ROOT])
+ fi
+
+ UTIL_PREPEND_TO_PATH([EXTRA_PATH],$DEVKIT_EXTRA_PATH)
+
+ # Fallback default of just /bin if DEVKIT_PATH is not defined
+ if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
+ DEVKIT_TOOLCHAIN_PATH="$DEVKIT_ROOT/bin"
+ fi
+ UTIL_PREPEND_TO_PATH([TOOLCHAIN_PATH],$DEVKIT_TOOLCHAIN_PATH)
+
+ # If DEVKIT_SYSROOT is set, use that, otherwise try a couple of known
+ # places for backwards compatiblity.
+ if test "x$DEVKIT_SYSROOT" != x; then
+ SYSROOT="$DEVKIT_SYSROOT"
+ elif test -d "$DEVKIT_ROOT/$host_alias/libc"; then
+ SYSROOT="$DEVKIT_ROOT/$host_alias/libc"
+ elif test -d "$DEVKIT_ROOT/$host/sys-root"; then
+ SYSROOT="$DEVKIT_ROOT/$host/sys-root"
+ fi
+
+ if test "x$DEVKIT_ROOT" != x; then
+ DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib"
+ if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
+ DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib64"
+ fi
+ AC_SUBST(DEVKIT_LIB_DIR)
+ fi
+ fi
+
+ # You can force the sysroot if the sysroot encoded into the compiler tools
+ # is not correct.
+ AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root],
+ [alias for --with-sysroot for backwards compatability])],
+ [SYSROOT=$with_sys_root]
+ )
+
+ AC_ARG_WITH(sysroot, [AS_HELP_STRING([--with-sysroot],
+ [use this directory as sysroot])],
+ [SYSROOT=$with_sysroot]
+ )
+
+ AC_ARG_WITH([tools-dir], [AS_HELP_STRING([--with-tools-dir],
+ [alias for --with-toolchain-path for backwards compatibility])],
+ [UTIL_PREPEND_TO_PATH([TOOLCHAIN_PATH],$with_tools_dir)]
+ )
+
+ AC_ARG_WITH([toolchain-path], [AS_HELP_STRING([--with-toolchain-path],
+ [prepend these directories when searching for toolchain binaries (compilers etc)])],
+ [UTIL_PREPEND_TO_PATH([TOOLCHAIN_PATH],$with_toolchain_path)]
+ )
+
+ AC_ARG_WITH([extra-path], [AS_HELP_STRING([--with-extra-path],
+ [prepend these directories to the default path])],
+ [UTIL_PREPEND_TO_PATH([EXTRA_PATH],$with_extra_path)]
+ )
+
+ if test "x$OPENJDK_BUILD_OS" = "xmacosx"; then
+ # If a devkit has been supplied, find xcodebuild in the toolchain_path.
+ # If not, detect if Xcode is installed by running xcodebuild -version
+ # if no Xcode installed, xcodebuild exits with 1
+ # if Xcode is installed, even if xcode-select is misconfigured, then it exits with 0
+ if test "x$DEVKIT_ROOT" != x || /usr/bin/xcodebuild -version >/dev/null 2>&1; then
+ # We need to use xcodebuild in the toolchain dir provided by the user, this will
+ # fall back on the stub binary in /usr/bin/xcodebuild
+ AC_PATH_PROG([XCODEBUILD], [xcodebuild], [/usr/bin/xcodebuild], [$TOOLCHAIN_PATH])
+ else
+ # this should result in SYSROOT being empty, unless --with-sysroot is provided
+ # when only the command line tools are installed there are no SDKs, so headers
+ # are copied into the system frameworks
+ XCODEBUILD=
+ AC_SUBST(XCODEBUILD)
+ fi
+
+ AC_MSG_CHECKING([for sdk name])
+ AC_ARG_WITH([sdk-name], [AS_HELP_STRING([--with-sdk-name],
+ [use the platform SDK of the given name. @<:@macosx@:>@])],
+ [SDKNAME=$with_sdk_name]
+ )
+ AC_MSG_RESULT([$SDKNAME])
+
+ # if toolchain path is specified then don't rely on system headers, they may not compile
+ HAVE_SYSTEM_FRAMEWORK_HEADERS=0
+ test -z "$TOOLCHAIN_PATH" && \
+ HAVE_SYSTEM_FRAMEWORK_HEADERS=`test ! -f /System/Library/Frameworks/Foundation.framework/Headers/Foundation.h; echo $?`
+
+ if test -z "$SYSROOT"; then
+ if test -n "$XCODEBUILD"; then
+ # if we don't have system headers, use default SDK name (last resort)
+ if test -z "$SDKNAME" -a $HAVE_SYSTEM_FRAMEWORK_HEADERS -eq 0; then
+ SDKNAME=${SDKNAME:-macosx}
+ fi
+
+ if test -n "$SDKNAME"; then
+ # Call xcodebuild to determine SYSROOT
+ SYSROOT=`"$XCODEBUILD" -sdk $SDKNAME -version | $GREP '^Path: ' | $SED 's/Path: //'`
+ fi
+ else
+ if test $HAVE_SYSTEM_FRAMEWORK_HEADERS -eq 0; then
+ AC_MSG_ERROR([No xcodebuild tool and no system framework headers found, use --with-sysroot or --with-sdk-name to provide a path to a valid SDK])
+ fi
+ fi
+ else
+ # warn user if --with-sdk-name was also set
+ if test -n "$with_sdk_name"; then
+ AC_MSG_WARN([Both SYSROOT and --with-sdk-name are set, only SYSROOT will be used])
+ fi
+ fi
+
+ if test $HAVE_SYSTEM_FRAMEWORK_HEADERS -eq 0 -a -z "$SYSROOT"; then
+ # If no system framework headers, then SYSROOT must be set, or we won't build
+ AC_MSG_ERROR([Unable to determine SYSROOT and no headers found in /System/Library/Frameworks. Check Xcode configuration, --with-sysroot or --with-sdk-name arguments.])
+ fi
+
+ # Perform a basic sanity test
+ if test ! -f "$SYSROOT/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h"; then
+ if test -z "$SYSROOT"; then
+ AC_MSG_ERROR([Unable to find required framework headers, provide a path to an SDK via --with-sysroot or --with-sdk-name and be sure Xcode is installed properly])
+ else
+ AC_MSG_ERROR([Invalid SDK or SYSROOT path, dependent framework headers not found])
+ fi
+ fi
+
+ # set SDKROOT too, Xcode tools will pick it up
+ SDKROOT="$SYSROOT"
+ AC_SUBST(SDKROOT)
+ fi
+
+ # Prepend the extra path to the global path
+ UTIL_PREPEND_TO_PATH([PATH],$EXTRA_PATH)
+
+ AC_MSG_CHECKING([for sysroot])
+ AC_MSG_RESULT([$SYSROOT])
+ AC_MSG_CHECKING([for toolchain path])
+ AC_MSG_RESULT([$TOOLCHAIN_PATH])
+ AC_MSG_CHECKING([for extra path])
+ AC_MSG_RESULT([$EXTRA_PATH])
+])
+
+###############################################################################
+AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
+[
+
+ AC_ARG_WITH(conf-name, [AS_HELP_STRING([--with-conf-name],
+ [use this as the name of the configuration @<:@generated from important configuration options@:>@])],
+ [ CONF_NAME=${with_conf_name} ])
+
+ # Test from where we are running configure, in or outside of src root.
+ AC_MSG_CHECKING([where to store configuration])
+ if test "x$CONFIGURE_START_DIR" = "x$TOPDIR" \
+ || test "x$CONFIGURE_START_DIR" = "x$CUSTOM_ROOT" \
+ || test "x$CONFIGURE_START_DIR" = "x$TOPDIR/make/autoconf" \
+ || test "x$CONFIGURE_START_DIR" = "x$TOPDIR/make" ; then
+ # We are running configure from the src root.
+ # Create a default ./build/target-variant-debuglevel output root.
+ if test "x${CONF_NAME}" = x; then
+ AC_MSG_RESULT([in default location])
+ CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JVM_VARIANTS_WITH_AND}-${DEBUG_LEVEL}"
+ else
+ AC_MSG_RESULT([in build directory with custom name])
+ fi
+
+ if test "x$CUSTOM_ROOT" != x; then
+ WORKSPACE_ROOT="${CUSTOM_ROOT}"
+ else
+ WORKSPACE_ROOT="${TOPDIR}"
+ fi
+ OUTPUTDIR="${WORKSPACE_ROOT}/build/${CONF_NAME}"
+ $MKDIR -p "$OUTPUTDIR"
+ if test ! -d "$OUTPUTDIR"; then
+ AC_MSG_ERROR([Could not create build directory $OUTPUTDIR])
+ 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.
+ if test "x${CONF_NAME}" = x; then
+ CONF_NAME=`$ECHO $CONFIGURE_START_DIR | $SED -e "s!^${TOPDIR}/build/!!"`
+ fi
+ OUTPUTDIR="$CONFIGURE_START_DIR"
+ AC_MSG_RESULT([in current directory])
+
+ # WARNING: This might be a bad thing to do. You need to be sure you want to
+ # have a configuration in this directory. Do some sanity checks!
+
+ if test ! -e "$OUTPUTDIR/spec.gmk"; then
+ # If we have a spec.gmk, we have run here before and we are OK. Otherwise, check for
+ # other files
+ files_present=`$LS $OUTPUTDIR`
+ # Configure has already touched config.log and confdefs.h in the current dir when this check
+ # is performed.
+ filtered_files=`$ECHO "$files_present" \
+ | $SED -e 's/config.log//g' \
+ -e 's/configure.log//g' \
+ -e 's/confdefs.h//g' \
+ -e 's/configure-support//g' \
+ -e 's/ //g' \
+ | $TR -d '\n'`
+ if test "x$filtered_files" != x; then
+ AC_MSG_NOTICE([Current directory is $CONFIGURE_START_DIR.])
+ AC_MSG_NOTICE([Since this is not the source root, configure will output the configuration here])
+ AC_MSG_NOTICE([(as opposed to creating a configuration in /build/).])
+ AC_MSG_NOTICE([However, this directory is not empty. This is not allowed, since it could])
+ AC_MSG_NOTICE([seriously mess up just about everything.])
+ AC_MSG_NOTICE([Try 'cd $TOPDIR' and restart configure])
+ AC_MSG_NOTICE([(or create a new empty directory and cd to it).])
+ AC_MSG_ERROR([Will not continue creating configuration in $CONFIGURE_START_DIR])
+ fi
+ fi
+ fi
+ AC_MSG_CHECKING([what configuration name to use])
+ AC_MSG_RESULT([$CONF_NAME])
+
+ UTIL_FIXUP_PATH(OUTPUTDIR)
+
+ CONFIGURESUPPORT_OUTPUTDIR="$OUTPUTDIR/configure-support"
+ $MKDIR -p "$CONFIGURESUPPORT_OUTPUTDIR"
+
+ SPEC="$OUTPUTDIR/spec.gmk"
+ AC_SUBST(SPEC)
+ AC_SUBST(CONF_NAME)
+ AC_SUBST(OUTPUTDIR)
+ AC_SUBST(WORKSPACE_ROOT)
+ AC_SUBST(CONFIGURESUPPORT_OUTPUTDIR)
+
+ # The spec.gmk file contains all variables for the make system.
+ AC_CONFIG_FILES([$OUTPUTDIR/spec.gmk:$AUTOCONF_DIR/spec.gmk.in])
+ # The bootcycle-spec.gmk file contains support for boot cycle builds.
+ AC_CONFIG_FILES([$OUTPUTDIR/bootcycle-spec.gmk:$AUTOCONF_DIR/bootcycle-spec.gmk.in])
+ # The buildjdk-spec.gmk file contains support for building a buildjdk when cross compiling.
+ AC_CONFIG_FILES([$OUTPUTDIR/buildjdk-spec.gmk:$AUTOCONF_DIR/buildjdk-spec.gmk.in])
+ # The compare.sh is used to compare the build output to other builds.
+ AC_CONFIG_FILES([$OUTPUTDIR/compare.sh:$AUTOCONF_DIR/compare.sh.in])
+ # The generated Makefile knows where the spec.gmk is and where the source is.
+ # You can run make from the OUTPUTDIR, or from the top-level Makefile
+ # which will look for generated configurations
+ AC_CONFIG_FILES([$OUTPUTDIR/Makefile:$AUTOCONF_DIR/Makefile.in])
+])
+
+###############################################################################
+# Check if build directory is on local disk. If not possible to determine,
+# we prefer to claim it's local.
+# Argument 1: directory to test
+# Argument 2: what to do if it is on local disk
+# Argument 3: what to do otherwise (remote disk or failure)
+AC_DEFUN([BASIC_CHECK_DIR_ON_LOCAL_DISK],
+[
+ # df -l lists only local disks; if the given directory is not found then
+ # a non-zero exit code is given
+ if test "x$DF" = x; then
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+ # msys does not have df; use Windows "net use" instead.
+ IS_NETWORK_DISK=`net use | grep \`pwd -W | cut -d ":" -f 1 | tr a-z A-Z\`:`
+ if test "x$IS_NETWORK_DISK" = x; then
+ $2
+ else
+ $3
+ fi
+ else
+ # No df here, say it's local
+ $2
+ fi
+ else
+ # JDK-8189619
+ # df on AIX does not understand -l. On modern AIXes it understands "-T local" which
+ # is the same. On older AIXes we just continue to live with a "not local build" warning.
+ if test "x$OPENJDK_TARGET_OS" = xaix; then
+ DF_LOCAL_ONLY_OPTION='-T local'
+ else
+ DF_LOCAL_ONLY_OPTION='-l'
+ fi
+ if $DF $DF_LOCAL_ONLY_OPTION $1 > /dev/null 2>&1; then
+ $2
+ else
+ # In WSL, local Windows drives are considered remote by df, but we are
+ # required to build into a directory accessible from windows, so consider
+ # them local here.
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
+ if $DF $1 | $GREP -q "^[[A-Z]]:"; then
+ $2
+ else
+ $3
+ fi
+ else
+ $3
+ fi
+ fi
+ fi
+])
+
+###############################################################################
+# Check that source files have basic read permissions set. This might
+# not be the case in cygwin in certain conditions.
+AC_DEFUN_ONCE([BASIC_CHECK_SRC_PERMS],
+[
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+ file_to_test="$TOPDIR/LICENSE"
+ if test `$STAT -c '%a' "$file_to_test"` -lt 400; then
+ AC_MSG_ERROR([Bad file permissions on src files. This is usually caused by cloning the repositories with a non cygwin hg in a directory not created in cygwin.])
+ fi
+ fi
+])
+
+###############################################################################
+AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES],
+[
+ AC_MSG_CHECKING([if build directory is on local disk])
+ BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUTDIR,
+ [OUTPUT_DIR_IS_LOCAL="yes"],
+ [OUTPUT_DIR_IS_LOCAL="no"])
+ AC_MSG_RESULT($OUTPUT_DIR_IS_LOCAL)
+
+ BASIC_CHECK_SRC_PERMS
+
+ # Check if the user has any old-style ALT_ variables set.
+ FOUND_ALT_VARIABLES=`env | grep ^ALT_`
+
+ # Before generating output files, test if they exist. If they do, this is a reconfigure.
+ # Since we can't properly handle the dependencies for this, warn the user about the situation
+ if test -e $OUTPUTDIR/spec.gmk; then
+ IS_RECONFIGURE=yes
+ else
+ IS_RECONFIGURE=no
+ fi
+])
+
+################################################################################
+#
+# Default make target
+#
+AC_DEFUN_ONCE([BASIC_SETUP_DEFAULT_MAKE_TARGET],
+[
+ AC_ARG_WITH(default-make-target, [AS_HELP_STRING([--with-default-make-target],
+ [set the default make target @<:@exploded-image@:>@])])
+ if test "x$with_default_make_target" = "x" \
+ || test "x$with_default_make_target" = "xyes"; then
+ DEFAULT_MAKE_TARGET="exploded-image"
+ elif test "x$with_default_make_target" = "xno"; then
+ AC_MSG_ERROR([--without-default-make-target is not a valid option])
+ else
+ DEFAULT_MAKE_TARGET="$with_default_make_target"
+ fi
+
+ AC_SUBST(DEFAULT_MAKE_TARGET)
+])
+
+###############################################################################
+# Setup the default value for LOG=
+#
+AC_DEFUN_ONCE([BASIC_SETUP_DEFAULT_LOG],
+[
+ AC_ARG_WITH(log, [AS_HELP_STRING([--with-log],
+ [[default vaue for make LOG argument [warn]]])])
+ AC_MSG_CHECKING([for default LOG value])
+ if test "x$with_log" = x; then
+ DEFAULT_LOG=""
+ else
+ # Syntax for valid LOG options is a bit too complex for it to be worth
+ # implementing a test for correctness in configure. Just accept it.
+ DEFAULT_LOG=$with_log
+ fi
+ AC_MSG_RESULT([$DEFAULT_LOG])
+ AC_SUBST(DEFAULT_LOG)
+])
+
+###############################################################################
+# Code to run after AC_OUTPUT
+AC_DEFUN_ONCE([BASIC_POST_CONFIG_OUTPUT],
+[
+ # Try to move config.log (generated by autoconf) to the configure-support directory.
+ if test -e ./config.log; then
+ $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
+ fi
+
+ # Rotate our log file (configure.log)
+ if test -e "$OUTPUTDIR/configure.log.old"; then
+ $RM -f "$OUTPUTDIR/configure.log.old"
+ fi
+ if test -e "$OUTPUTDIR/configure.log"; then
+ $MV -f "$OUTPUTDIR/configure.log" "$OUTPUTDIR/configure.log.old" 2> /dev/null
+ fi
+
+ # Move configure.log from current directory to the build output root
+ if test -e ./configure.log; then
+ $MV -f ./configure.log "$OUTPUTDIR/configure.log" 2> /dev/null
+ fi
+
+ # Make the compare script executable
+ $CHMOD +x $OUTPUTDIR/compare.sh
+])
diff --git a/make/autoconf/basic_tools.m4 b/make/autoconf/basic_tools.m4
new file mode 100644
index 00000000000..95577d9422b
--- /dev/null
+++ b/make/autoconf/basic_tools.m4
@@ -0,0 +1,475 @@
+#
+# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+###############################################################################
+# Setup the most fundamental tools that relies on not much else to set up,
+# but is used by much of the early bootstrap code.
+AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS],
+[
+ # Start with tools that do not need have cross compilation support
+ # and can be expected to be found in the default PATH. These tools are
+ # used by configure.
+
+ # First are all the simple required tools.
+ UTIL_REQUIRE_PROGS(BASENAME, basename)
+ UTIL_REQUIRE_PROGS(BASH, bash)
+ UTIL_REQUIRE_PROGS(CAT, cat)
+ UTIL_REQUIRE_PROGS(CHMOD, chmod)
+ UTIL_REQUIRE_PROGS(CMP, cmp)
+ UTIL_REQUIRE_PROGS(COMM, comm)
+ UTIL_REQUIRE_PROGS(CP, cp)
+ UTIL_REQUIRE_PROGS(CUT, cut)
+ UTIL_REQUIRE_PROGS(DATE, date)
+ UTIL_REQUIRE_PROGS(DIFF, [gdiff diff])
+ UTIL_REQUIRE_PROGS(DIRNAME, dirname)
+ UTIL_REQUIRE_PROGS(ECHO, echo)
+ UTIL_REQUIRE_PROGS(EXPR, expr)
+ UTIL_REQUIRE_PROGS(FILE, file)
+ UTIL_REQUIRE_PROGS(FIND, find)
+ UTIL_REQUIRE_PROGS(HEAD, head)
+ UTIL_REQUIRE_PROGS(GUNZIP, gunzip)
+ UTIL_REQUIRE_PROGS(GZIP, pigz gzip)
+ UTIL_REQUIRE_PROGS(LN, ln)
+ UTIL_REQUIRE_PROGS(LS, ls)
+ # gmkdir is known to be safe for concurrent invocations with -p flag.
+ UTIL_REQUIRE_PROGS(MKDIR, [gmkdir mkdir])
+ UTIL_REQUIRE_PROGS(MKTEMP, mktemp)
+ UTIL_REQUIRE_PROGS(MV, mv)
+ UTIL_REQUIRE_PROGS(NAWK, [nawk gawk awk])
+ UTIL_REQUIRE_PROGS(PRINTF, printf)
+ UTIL_REQUIRE_PROGS(READLINK, [greadlink readlink])
+ UTIL_REQUIRE_PROGS(RM, rm)
+ UTIL_REQUIRE_PROGS(RMDIR, rmdir)
+ UTIL_REQUIRE_PROGS(SH, sh)
+ UTIL_REQUIRE_PROGS(SORT, sort)
+ UTIL_REQUIRE_PROGS(TAIL, tail)
+ UTIL_REQUIRE_PROGS(TAR, gtar tar)
+ UTIL_REQUIRE_PROGS(TEE, tee)
+ UTIL_REQUIRE_PROGS(TOUCH, touch)
+ UTIL_REQUIRE_PROGS(TR, tr)
+ UTIL_REQUIRE_PROGS(UNAME, uname)
+ UTIL_REQUIRE_PROGS(UNIQ, uniq)
+ UTIL_REQUIRE_PROGS(WC, wc)
+ UTIL_REQUIRE_PROGS(WHICH, which)
+ UTIL_REQUIRE_PROGS(XARGS, xargs)
+
+ # Then required tools that require some special treatment.
+ UTIL_REQUIRE_SPECIAL(AWK, [AC_PROG_AWK])
+ UTIL_REQUIRE_SPECIAL(GREP, [AC_PROG_GREP])
+ UTIL_REQUIRE_SPECIAL(EGREP, [AC_PROG_EGREP])
+ UTIL_REQUIRE_SPECIAL(FGREP, [AC_PROG_FGREP])
+ UTIL_REQUIRE_SPECIAL(SED, [AC_PROG_SED])
+
+ # Always force rm.
+ RM="$RM -f"
+
+ # pwd behaves differently on various platforms and some don't support the -L flag.
+ # Always use the bash builtin pwd to get uniform behavior.
+ THEPWDCMD=pwd
+
+ # These are not required on all platforms
+ UTIL_PATH_PROGS(CYGPATH, cygpath)
+ UTIL_PATH_PROGS(WSLPATH, wslpath)
+ UTIL_PATH_PROGS(DF, df)
+ UTIL_PATH_PROGS(CPIO, [cpio bsdcpio])
+ UTIL_PATH_PROGS(NICE, nice)
+
+ UTIL_PATH_PROGS(LSB_RELEASE, lsb_release)
+ UTIL_PATH_PROGS(CMD, [cmd.exe /mnt/c/Windows/System32/cmd.exe])
+])
+
+###############################################################################
+# Check if we have found a usable version of make
+# $1: the path to a potential make binary (or empty)
+# $2: the description on how we found this
+AC_DEFUN([BASIC_CHECK_MAKE_VERSION],
+[
+ MAKE_CANDIDATE="$1"
+ DESCRIPTION="$2"
+
+ # On Cygwin, we require a newer version of make than on other platforms
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+ MAKE_VERSION_EXPR="-e 4\."
+ MAKE_REQUIRED_VERSION="4.0"
+ else
+ MAKE_VERSION_EXPR="-e 3\.8[[12]] -e 4\."
+ MAKE_REQUIRED_VERSION="3.81"
+ fi
+
+ if test "x$MAKE_CANDIDATE" != x; then
+ AC_MSG_NOTICE([Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION])
+ MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1`
+ IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'`
+ if test "x$IS_GNU_MAKE" = x; then
+ AC_MSG_NOTICE([Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring.])
+ else
+ IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP $MAKE_VERSION_EXPR`
+ if test "x$IS_MODERN_MAKE" = x; then
+ AC_MSG_NOTICE([Found GNU make at $MAKE_CANDIDATE, however this is not version $MAKE_REQUIRED_VERSION or later. (it is: $MAKE_VERSION_STRING). Ignoring.])
+ else
+ if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+ MAKE_EXPECTED_ENV='cygwin'
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+ MAKE_EXPECTED_ENV='msys'
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
+ MAKE_EXPECTED_ENV='x86_64-.*-linux-gnu'
+ else
+ AC_MSG_ERROR([Unknown Windows environment])
+ fi
+ MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'`
+ IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV`
+ else
+ # Not relevant for non-Windows
+ IS_MAKE_CORRECT_ENV=true
+ fi
+ if test "x$IS_MAKE_CORRECT_ENV" = x; then
+ AC_MSG_NOTICE([Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring.])
+ else
+ FOUND_MAKE=$MAKE_CANDIDATE
+ UTIL_FIXUP_EXECUTABLE(FOUND_MAKE)
+ fi
+ fi
+ fi
+ fi
+])
+
+###############################################################################
+AC_DEFUN([BASIC_CHECK_MAKE_OUTPUT_SYNC],
+[
+ # Check if make supports the output sync option and if so, setup using it.
+ AC_MSG_CHECKING([if make --output-sync is supported])
+ if $MAKE --version -O > /dev/null 2>&1; then
+ OUTPUT_SYNC_SUPPORTED=true
+ AC_MSG_RESULT([yes])
+ AC_MSG_CHECKING([for output-sync value])
+ AC_ARG_WITH([output-sync], [AS_HELP_STRING([--with-output-sync],
+ [set make output sync type if supported by make. @<:@recurse@:>@])],
+ [OUTPUT_SYNC=$with_output_sync])
+ if test "x$OUTPUT_SYNC" = "x"; then
+ OUTPUT_SYNC=none
+ fi
+ AC_MSG_RESULT([$OUTPUT_SYNC])
+ if ! $MAKE --version -O$OUTPUT_SYNC > /dev/null 2>&1; then
+ AC_MSG_ERROR([Make did not the support the value $OUTPUT_SYNC as output sync type.])
+ fi
+ else
+ OUTPUT_SYNC_SUPPORTED=false
+ AC_MSG_RESULT([no])
+ fi
+ AC_SUBST(OUTPUT_SYNC_SUPPORTED)
+ AC_SUBST(OUTPUT_SYNC)
+])
+
+###############################################################################
+# Goes looking for a usable version of GNU make.
+AC_DEFUN([BASIC_CHECK_GNU_MAKE],
+[
+ UTIL_SETUP_TOOL([MAKE],
+ [
+ # Try our hardest to locate a correct version of GNU make
+ AC_PATH_PROGS(CHECK_GMAKE, gmake)
+ BASIC_CHECK_MAKE_VERSION("$CHECK_GMAKE", [gmake in PATH])
+
+ if test "x$FOUND_MAKE" = x; then
+ AC_PATH_PROGS(CHECK_MAKE, make)
+ BASIC_CHECK_MAKE_VERSION("$CHECK_MAKE", [make in PATH])
+ fi
+
+ if test "x$FOUND_MAKE" = x; then
+ if test "x$TOOLCHAIN_PATH" != x; then
+ # We have a toolchain path, check that as well before giving up.
+ OLD_PATH=$PATH
+ PATH=$TOOLCHAIN_PATH:$PATH
+ AC_PATH_PROGS(CHECK_TOOLSDIR_GMAKE, gmake)
+ BASIC_CHECK_MAKE_VERSION("$CHECK_TOOLSDIR_GMAKE", [gmake in tools-dir])
+ if test "x$FOUND_MAKE" = x; then
+ AC_PATH_PROGS(CHECK_TOOLSDIR_MAKE, make)
+ BASIC_CHECK_MAKE_VERSION("$CHECK_TOOLSDIR_MAKE", [make in tools-dir])
+ fi
+ PATH=$OLD_PATH
+ fi
+ fi
+
+ if test "x$FOUND_MAKE" = x; then
+ AC_MSG_ERROR([Cannot find GNU make $MAKE_REQUIRED_VERSION or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure.])
+ fi
+ ],[
+ # If MAKE was set by user, verify the version
+ BASIC_CHECK_MAKE_VERSION("$MAKE", [user supplied MAKE=$MAKE])
+ if test "x$FOUND_MAKE" = x; then
+ AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not GNU make $MAKE_REQUIRED_VERSION or newer.])
+ fi
+ ])
+
+ MAKE=$FOUND_MAKE
+ AC_SUBST(MAKE)
+ AC_MSG_NOTICE([Using GNU make at $FOUND_MAKE (version: $MAKE_VERSION_STRING)])
+
+ BASIC_CHECK_MAKE_OUTPUT_SYNC
+])
+
+###############################################################################
+AC_DEFUN([BASIC_CHECK_FIND_DELETE],
+[
+ # Test if find supports -delete
+ AC_MSG_CHECKING([if find supports -delete])
+ FIND_DELETE="-delete"
+
+ DELETEDIR=`$MKTEMP -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?)
+
+ echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete
+
+ TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1`
+ if test -f $DELETEDIR/TestIfFindSupportsDelete; then
+ # No, it does not.
+ $RM $DELETEDIR/TestIfFindSupportsDelete
+ if test "x$OPENJDK_TARGET_OS" = "xaix"; then
+ # AIX 'find' is buggy if called with '-exec {} \+' and an empty file list
+ FIND_DELETE="-print | $XARGS $RM"
+ else
+ FIND_DELETE="-exec $RM \{\} \+"
+ fi
+ AC_MSG_RESULT([no])
+ else
+ AC_MSG_RESULT([yes])
+ fi
+ $RMDIR $DELETEDIR
+ AC_SUBST(FIND_DELETE)
+])
+
+###############################################################################
+AC_DEFUN([BASIC_CHECK_TAR],
+[
+ # Test which kind of tar was found
+ if test "x$($TAR --version | $GREP "GNU tar")" != "x"; then
+ TAR_TYPE="gnu"
+ elif test "x$($TAR --version | $GREP "bsdtar")" != "x"; then
+ TAR_TYPE="bsd"
+ elif test "x$($TAR -v | $GREP "bsdtar")" != "x"; then
+ TAR_TYPE="bsd"
+ elif test "x$OPENJDK_BUILD_OS" = "xsolaris"; then
+ TAR_TYPE="solaris"
+ elif test "x$OPENJDK_BUILD_OS" = "xaix"; then
+ TAR_TYPE="aix"
+ fi
+ AC_MSG_CHECKING([what type of tar was found])
+ AC_MSG_RESULT([$TAR_TYPE])
+
+ TAR_CREATE_FILE_PARAM=""
+
+ if test "x$TAR_TYPE" = "xgnu"; then
+ TAR_INCLUDE_PARAM="T"
+ TAR_SUPPORTS_TRANSFORM="true"
+ if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
+ # When using gnu tar for Solaris targets, need to use compatibility mode
+ TAR_CREATE_EXTRA_PARAM="--format=ustar"
+ fi
+ elif test "x$TAR_TYPE" = "aix"; then
+ # -L InputList of aix tar: name of file listing the files and directories
+ # that need to be archived or extracted
+ TAR_INCLUDE_PARAM="L"
+ TAR_SUPPORTS_TRANSFORM="false"
+ else
+ TAR_INCLUDE_PARAM="I"
+ TAR_SUPPORTS_TRANSFORM="false"
+ fi
+ AC_SUBST(TAR_TYPE)
+ AC_SUBST(TAR_CREATE_EXTRA_PARAM)
+ AC_SUBST(TAR_INCLUDE_PARAM)
+ AC_SUBST(TAR_SUPPORTS_TRANSFORM)
+])
+
+###############################################################################
+AC_DEFUN([BASIC_CHECK_GREP],
+[
+ # Test that grep supports -Fx with a list of pattern which includes null pattern.
+ # This is a problem for the grep resident on AIX.
+ AC_MSG_CHECKING([that grep ($GREP) -Fx handles empty lines in the pattern list correctly])
+ # Multiple subsequent spaces..
+ STACK_SPACES='aaa bbb ccc'
+ # ..converted to subsequent newlines, causes STACK_LIST to be a list with some empty
+ # patterns in it.
+ STACK_LIST=${STACK_SPACES// /$'\n'}
+ NEEDLE_SPACES='ccc bbb aaa'
+ NEEDLE_LIST=${NEEDLE_SPACES// /$'\n'}
+ RESULT="$($GREP -Fvx "$STACK_LIST" <<< "$NEEDLE_LIST")"
+ if test "x$RESULT" == "x"; then
+ AC_MSG_RESULT([yes])
+ else
+ if test "x$OPENJDK_TARGET_OS" = "xaix"; then
+ ADDINFO="Please make sure you use GNU grep, usually found at /opt/freeware/bin."
+ fi
+ AC_MSG_ERROR([grep does not handle -Fx correctly. ${ADDINFO}])
+ fi
+])
+
+###############################################################################
+AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
+[
+ BASIC_CHECK_GNU_MAKE
+
+ BASIC_CHECK_FIND_DELETE
+ BASIC_CHECK_TAR
+ BASIC_CHECK_GREP
+ BASIC_SETUP_PANDOC
+
+ # These tools might not be installed by default,
+ # need hint on how to install them.
+ UTIL_REQUIRE_PROGS(UNZIP, unzip)
+ # Since zip uses "ZIP" as a environment variable for passing options, we need
+ # to name our variable differently, hence ZIPEXE.
+ UTIL_REQUIRE_PROGS(ZIPEXE, zip)
+
+ # Non-required basic tools
+
+ UTIL_PATH_PROGS(LDD, ldd)
+ if test "x$LDD" = "x"; then
+ # List shared lib dependencies is used for
+ # debug output and checking for forbidden dependencies.
+ # We can build without it.
+ LDD="true"
+ fi
+ UTIL_PATH_PROGS(READELF, [greadelf readelf])
+ UTIL_PATH_PROGS(DOT, dot)
+ UTIL_PATH_PROGS(HG, hg)
+ UTIL_PATH_PROGS(GIT, git)
+ UTIL_PATH_PROGS(STAT, stat)
+ UTIL_PATH_PROGS(TIME, time)
+ UTIL_PATH_PROGS(FLOCK, flock)
+ # Dtrace is usually found in /usr/sbin on Solaris, but that directory may not
+ # be in the user path.
+ UTIL_PATH_PROGS(DTRACE, dtrace, $PATH:/usr/sbin)
+ UTIL_PATH_PROGS(PATCH, [gpatch patch])
+ # Check if it's GNU time
+ IS_GNU_TIME=`$TIME --version 2>&1 | $GREP 'GNU time'`
+ if test "x$IS_GNU_TIME" != x; then
+ IS_GNU_TIME=yes
+ else
+ IS_GNU_TIME=no
+ fi
+ AC_SUBST(IS_GNU_TIME)
+
+ if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
+ UTIL_REQUIRE_PROGS(DSYMUTIL, dsymutil)
+ UTIL_REQUIRE_PROGS(MIG, mig)
+ UTIL_REQUIRE_PROGS(XATTR, xattr)
+ UTIL_PATH_PROGS(CODESIGN, codesign)
+
+ if test "x$CODESIGN" != "x"; then
+ # Check for user provided code signing identity.
+ # If no identity was provided, fall back to "openjdk_codesign".
+ AC_ARG_WITH([macosx-codesign-identity], [AS_HELP_STRING([--with-macosx-codesign-identity],
+ [specify the code signing identity])],
+ [MACOSX_CODESIGN_IDENTITY=$with_macosx_codesign_identity],
+ [MACOSX_CODESIGN_IDENTITY=openjdk_codesign]
+ )
+
+ AC_SUBST(MACOSX_CODESIGN_IDENTITY)
+
+ # Verify that the codesign certificate is present
+ AC_MSG_CHECKING([if codesign certificate is present])
+ $RM codesign-testfile
+ $TOUCH codesign-testfile
+ $CODESIGN -s "$MACOSX_CODESIGN_IDENTITY" codesign-testfile 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD || CODESIGN=
+ $RM codesign-testfile
+ if test "x$CODESIGN" = x; then
+ AC_MSG_RESULT([no])
+ else
+ AC_MSG_RESULT([yes])
+ fi
+ fi
+ UTIL_REQUIRE_PROGS(SETFILE, SetFile)
+ elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
+ UTIL_REQUIRE_PROGS(ELFEDIT, elfedit)
+ fi
+ if ! test "x$OPENJDK_TARGET_OS" = "xwindows"; then
+ UTIL_REQUIRE_BUILTIN_PROGS(ULIMIT, ulimit)
+ fi
+])
+
+###############################################################################
+# Check for support for specific options in bash
+AC_DEFUN_ONCE([BASIC_CHECK_BASH_OPTIONS],
+[
+ # Check bash version
+ # Extra [ ] to stop m4 mangling
+ [ BASH_VER=`$BASH --version | $SED -n -e 's/^.*bash.*ersion *\([0-9.]*\).*$/\1/ p'` ]
+ AC_MSG_CHECKING([bash version])
+ AC_MSG_RESULT([$BASH_VER])
+
+ BASH_MAJOR=`$ECHO $BASH_VER | $CUT -d . -f 1`
+ BASH_MINOR=`$ECHO $BASH_VER | $CUT -d . -f 2`
+ if test $BASH_MAJOR -lt 3 || (test $BASH_MAJOR -eq 3 && test $BASH_MINOR -lt 2); then
+ AC_MSG_ERROR([bash version 3.2 or better is required])
+ fi
+
+ # Test if bash supports pipefail.
+ AC_MSG_CHECKING([if bash supports pipefail])
+ if ${BASH} -c 'set -o pipefail'; then
+ BASH_ARGS="$BASH_ARGS -o pipefail"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+
+ AC_MSG_CHECKING([if bash supports errexit (-e)])
+ if ${BASH} -e -c 'true'; then
+ BASH_ARGS="$BASH_ARGS -e"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+
+ AC_SUBST(BASH_ARGS)
+])
+
+################################################################################
+#
+# Setup Pandoc
+#
+AC_DEFUN_ONCE([BASIC_SETUP_PANDOC],
+[
+ UTIL_PATH_PROGS(PANDOC, pandoc)
+
+ PANDOC_MARKDOWN_FLAG="markdown"
+ if test -n "$PANDOC"; then
+ AC_MSG_CHECKING(if the pandoc smart extension needs to be disabled for markdown)
+ if $PANDOC --list-extensions | $GREP -q '\+smart'; then
+ AC_MSG_RESULT([yes])
+ PANDOC_MARKDOWN_FLAG="markdown-smart"
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
+
+ if test -n "$PANDOC"; then
+ ENABLE_PANDOC="true"
+ else
+ ENABLE_PANDOC="false"
+ fi
+ AC_SUBST(ENABLE_PANDOC)
+ AC_SUBST(PANDOC_MARKDOWN_FLAG)
+])
diff --git a/make/autoconf/basic_windows.m4 b/make/autoconf/basic_windows.m4
new file mode 100644
index 00000000000..11fb231d825
--- /dev/null
+++ b/make/autoconf/basic_windows.m4
@@ -0,0 +1,183 @@
+#
+# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# Setup basic configuration paths, and platform-specific stuff related to PATHs.
+AC_DEFUN([BASIC_CHECK_PATHS_WINDOWS],
+[
+ SRC_ROOT_LENGTH=`$THEPWDCMD -L|$WC -m`
+ if test $SRC_ROOT_LENGTH -gt 100; then
+ AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported])
+ fi
+
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+ AC_MSG_CHECKING([cygwin release])
+ CYGWIN_VERSION=`$UNAME -r`
+ AC_MSG_RESULT([$CYGWIN_VERSION])
+ WINDOWS_ENV_VENDOR='cygwin'
+ WINDOWS_ENV_VERSION="$CYGWIN_VERSION"
+
+ CYGWIN_VERSION_OLD=`$ECHO $CYGWIN_VERSION | $GREP -e '^1\.[0-6]'`
+ if test "x$CYGWIN_VERSION_OLD" != x; then
+ AC_MSG_NOTICE([Your cygwin is too old. You are running $CYGWIN_VERSION, but at least cygwin 1.7 is required. Please upgrade.])
+ AC_MSG_ERROR([Cannot continue])
+ fi
+ if test "x$CYGPATH" = x; then
+ AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path])
+ fi
+ AC_MSG_CHECKING([cygwin root directory as unix-style path])
+ # The cmd output ends with Windows line endings (CR/LF)
+ cygwin_winpath_root=`cd / ; cmd /c cd | $TR -d '\r\n'`
+ # Force cygpath to report the proper root by including a trailing space, and then stripping it off again.
+ CYGWIN_ROOT_PATH=`$CYGPATH -u "$cygwin_winpath_root " | $CUT -f 1 -d " "`
+ AC_MSG_RESULT([$CYGWIN_ROOT_PATH])
+ WINDOWS_ENV_ROOT_PATH="$CYGWIN_ROOT_PATH"
+ test_cygdrive_prefix=`$ECHO $CYGWIN_ROOT_PATH | $GREP ^/cygdrive/`
+ if test "x$test_cygdrive_prefix" = x; then
+ AC_MSG_ERROR([Your cygdrive prefix is not /cygdrive. This is currently not supported. Change with mount -c.])
+ fi
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+ AC_MSG_CHECKING([msys release])
+ MSYS_VERSION=`$UNAME -r`
+ AC_MSG_RESULT([$MSYS_VERSION])
+
+ WINDOWS_ENV_VENDOR='msys'
+ WINDOWS_ENV_VERSION="$MSYS_VERSION"
+
+ AC_MSG_CHECKING([msys root directory as unix-style path])
+ # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away
+ MSYS_ROOT_PATH=`cd / ; cmd /c cd | $GREP ".*"`
+ UTIL_REWRITE_AS_UNIX_PATH(MSYS_ROOT_PATH)
+ AC_MSG_RESULT([$MSYS_ROOT_PATH])
+ WINDOWS_ENV_ROOT_PATH="$MSYS_ROOT_PATH"
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
+ AC_MSG_CHECKING([Windows version])
+ # m4 replaces [ and ] so we use @<:@ and @:>@ instead
+ WINDOWS_VERSION=`$CMD /c ver.exe | $EGREP -o '(@<:@0-9@:>@+\.)+@<:@0-9@:>@+'`
+ AC_MSG_RESULT([$WINDOWS_VERSION])
+
+ AC_MSG_CHECKING([WSL kernel version])
+ WSL_KERNEL_VERSION=`$UNAME -v`
+ AC_MSG_RESULT([$WSL_KERNEL_VERSION])
+
+ AC_MSG_CHECKING([WSL kernel release])
+ WSL_KERNEL_RELEASE=`$UNAME -r`
+ AC_MSG_RESULT([$WSL_KERNEL_RELEASE])
+
+ AC_MSG_CHECKING([WSL distribution])
+ WSL_DISTRIBUTION=`$LSB_RELEASE -d | sed 's/Description:\t//'`
+ AC_MSG_RESULT([$WSL_DISTRIBUTION])
+
+ WINDOWS_ENV_VENDOR='WSL'
+ WINDOWS_ENV_VERSION="$WSL_DISTRIBUTION $WSL_KERNEL_VERSION $WSL_KERNEL_RELEASE (on Windows build $WINDOWS_VERSION)"
+ else
+ AC_MSG_ERROR([Unknown Windows environment. Neither cygwin, msys, nor wsl was detected.])
+ fi
+
+ # Test if windows or unix (cygwin/msys) find is first in path.
+ AC_MSG_CHECKING([what kind of 'find' is first on the PATH])
+ FIND_BINARY_OUTPUT=`find --version 2>&1`
+ if test "x`echo $FIND_BINARY_OUTPUT | $GREP GNU`" != x; then
+ AC_MSG_RESULT([unix style])
+ elif test "x`echo $FIND_BINARY_OUTPUT | $GREP FIND`" != x; then
+ AC_MSG_RESULT([Windows])
+ AC_MSG_NOTICE([Your path contains Windows tools (C:\Windows\system32) before your unix (cygwin or msys) tools.])
+ AC_MSG_NOTICE([This will not work. Please correct and make sure /usr/bin (or similar) is first in path.])
+ AC_MSG_ERROR([Cannot continue])
+ else
+ AC_MSG_RESULT([unknown])
+ AC_MSG_WARN([It seems that your find utility is non-standard.])
+ fi
+])
+
+AC_DEFUN_ONCE([BASIC_COMPILE_FIXPATH],
+[
+ # When using cygwin or msys, we need a wrapper binary that renames
+ # /cygdrive/c/ arguments into c:/ arguments and peeks into
+ # @files and rewrites these too! This wrapper binary is
+ # called fixpath.
+ FIXPATH=
+ if test "x$OPENJDK_BUILD_OS" = xwindows; then
+ AC_MSG_CHECKING([if fixpath can be created])
+ FIXPATH_SRC="$TOPDIR/make/src/native/fixpath.c"
+ FIXPATH_BIN="$CONFIGURESUPPORT_OUTPUTDIR/bin/fixpath.exe"
+ FIXPATH_DIR="$CONFIGURESUPPORT_OUTPUTDIR/fixpath"
+ if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then
+ # Important to keep the .exe suffix on Cygwin for Hotspot makefiles
+ FIXPATH="$FIXPATH_BIN -c"
+ elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.msys; then
+ # Take all collected prefixes and turn them into a -m/c/foo@/c/bar@... command line
+ # @ was chosen as separator to minimize risk of other tools messing around with it
+ all_unique_prefixes=`echo "${all_fixpath_prefixes@<:@@@:>@}" \
+ | tr ' ' '\n' | $GREP '^/./' | $SORT | $UNIQ`
+ fixpath_argument_list=`echo $all_unique_prefixes | tr ' ' '@'`
+ FIXPATH="$FIXPATH_BIN -m$fixpath_argument_list"
+ elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.wsl; then
+ FIXPATH="$FIXPATH_BIN -w"
+ fi
+ FIXPATH_SRC_W="$FIXPATH_SRC"
+ FIXPATH_BIN_W="$FIXPATH_BIN"
+ UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([FIXPATH_SRC_W])
+ UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([FIXPATH_BIN_W])
+ $RM -rf $FIXPATH_BIN $FIXPATH_DIR
+ $MKDIR -p $FIXPATH_DIR $CONFIGURESUPPORT_OUTPUTDIR/bin
+ cd $FIXPATH_DIR
+ $CC $FIXPATH_SRC_W -Fe$FIXPATH_BIN_W > $FIXPATH_DIR/fixpath1.log 2>&1
+ cd $CONFIGURE_START_DIR
+
+ if test ! -x $FIXPATH_BIN; then
+ AC_MSG_RESULT([no])
+ cat $FIXPATH_DIR/fixpath1.log
+ AC_MSG_ERROR([Could not create $FIXPATH_BIN])
+ fi
+ AC_MSG_RESULT([yes])
+
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
+ OLD_WSLENV="$WSLENV"
+ WSLENV=`$ECHO $WSLENV | $SED 's/PATH\/l://'`
+ UTIL_APPEND_TO_PATH(WSLENV, "FIXPATH_PATH")
+ export WSLENV
+ export FIXPATH_PATH=$VS_PATH_WINDOWS
+ AC_MSG_NOTICE([FIXPATH_PATH is $FIXPATH_PATH])
+ AC_MSG_NOTICE([Rewriting WSLENV from $OLD_WSLENV to $WSLENV])
+ fi
+
+ AC_MSG_CHECKING([if fixpath.exe works])
+ cd $FIXPATH_DIR
+ $FIXPATH $CC $FIXPATH_SRC -Fe$FIXPATH_DIR/fixpath2.exe \
+ > $FIXPATH_DIR/fixpath2.log 2>&1
+ cd $CONFIGURE_START_DIR
+ if test ! -x $FIXPATH_DIR/fixpath2.exe; then
+ AC_MSG_RESULT([no])
+ cat $FIXPATH_DIR/fixpath2.log
+ AC_MSG_ERROR([fixpath did not work!])
+ fi
+ AC_MSG_RESULT([yes])
+
+ FIXPATH_DETACH_FLAG="--detach"
+ fi
+
+ AC_SUBST(FIXPATH)
+ AC_SUBST(FIXPATH_DETACH_FLAG)
+])
diff --git a/make/autoconf/basics.m4 b/make/autoconf/basics.m4
deleted file mode 100644
index e1f1c080495..00000000000
--- a/make/autoconf/basics.m4
+++ /dev/null
@@ -1,1537 +0,0 @@
-#
-# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-###############################################################################
-# Create a function/macro that takes a series of named arguments. The call is
-# similar to AC_DEFUN, but the setup of the function looks like this:
-# BASIC_DEFUN_NAMED([MYFUNC], [FOO *BAR], [$@], [
-# ... do something
-# AC_MSG_NOTICE([Value of BAR is ARG_BAR])
-# ])
-# A star (*) in front of a named argument means that it is required and it's
-# presence will be verified. To pass e.g. the first value as a normal indexed
-# argument, use [m4_shift($@)] as the third argument instead of [$@]. These
-# arguments are referenced in the function by their name prefixed by ARG_, e.g.
-# "ARG_FOO".
-#
-# The generated function can be called like this:
-# MYFUNC(FOO: [foo-val],
-# BAR: [
-# $ECHO hello world
-# ])
-# Note that the argument value must start on the same line as the argument name.
-#
-# Argument 1: Name of the function to define
-# Argument 2: List of legal named arguments, with a * prefix for required arguments
-# Argument 3: Argument array to treat as named, typically $@
-# Argument 4: The main function body
-AC_DEFUN([BASIC_DEFUN_NAMED],
-[
- AC_DEFUN($1, [
- m4_foreach(arg, m4_split($2), [
- m4_if(m4_bregexp(arg, [^\*]), -1,
- [
- m4_set_add(legal_named_args, arg)
- ],
- [
- m4_set_add(legal_named_args, m4_substr(arg, 1))
- m4_set_add(required_named_args, m4_substr(arg, 1))
- ]
- )
- ])
-
- m4_foreach([arg], [$3], [
- m4_define(arg_name, m4_substr(arg, 0, m4_bregexp(arg, [: ])))
- m4_set_contains(legal_named_args, arg_name, [],[AC_MSG_ERROR([Internal error: arg_name is not a valid named argument to [$1]. Valid arguments are 'm4_set_contents(legal_named_args, [ ])'.])])
- m4_set_remove(required_named_args, arg_name)
- m4_set_remove(legal_named_args, arg_name)
- m4_pushdef([ARG_][]arg_name, m4_substr(arg, m4_incr(m4_incr(m4_bregexp(arg, [: ])))))
- m4_set_add(defined_args, arg_name)
- m4_undefine([arg_name])
- ])
- m4_set_empty(required_named_args, [], [
- AC_MSG_ERROR([Internal error: Required named arguments are missing for [$1]. Missing arguments: 'm4_set_contents(required_named_args, [ ])'])
- ])
- m4_foreach([arg], m4_indir([m4_dquote]m4_set_listc([legal_named_args])), [
- m4_pushdef([ARG_][]arg, [])
- m4_set_add(defined_args, arg)
- ])
- m4_set_delete(legal_named_args)
- m4_set_delete(required_named_args)
-
- # Execute function body
- $4
-
- m4_foreach([arg], m4_indir([m4_dquote]m4_set_listc([defined_args])), [
- m4_popdef([ARG_][]arg)
- ])
-
- m4_set_delete(defined_args)
- ])
-])
-
-###############################################################################
-# Check if a list of space-separated words are selected only from a list of
-# space-separated legal words. Typical use is to see if a user-specified
-# set of words is selected from a set of legal words.
-#
-# Sets the specified variable to list of non-matching (offending) words, or to
-# the empty string if all words are matching the legal set.
-#
-# $1: result variable name
-# $2: list of values to check
-# $3: list of legal values
-AC_DEFUN([BASIC_GET_NON_MATCHING_VALUES],
-[
- # grep filter function inspired by a comment to http://stackoverflow.com/a/1617326
- # Notice that the original variant fails on SLES 10 and 11
- # Some grep versions (at least bsd) behaves strangely on the base case with
- # no legal_values, so make it explicit.
- values_to_check=`$ECHO $2 | $TR ' ' '\n'`
- legal_values=`$ECHO $3 | $TR ' ' '\n'`
- if test -z "$legal_values"; then
- $1="$2"
- else
- result=`$GREP -Fvx "$legal_values" <<< "$values_to_check" | $GREP -v '^$'`
- $1=${result//$'\n'/ }
- fi
-])
-
-###############################################################################
-# Check if a list of space-separated words contains any word(s) from a list of
-# space-separated illegal words. Typical use is to see if a user-specified
-# set of words contains any from a set of illegal words.
-#
-# Sets the specified variable to list of matching illegal words, or to
-# the empty string if no words are matching the illegal set.
-#
-# $1: result variable name
-# $2: list of values to check
-# $3: list of illegal values
-AC_DEFUN([BASIC_GET_MATCHING_VALUES],
-[
- # grep filter function inspired by a comment to http://stackoverflow.com/a/1617326
- # Notice that the original variant fails on SLES 10 and 11
- # Some grep versions (at least bsd) behaves strangely on the base case with
- # no legal_values, so make it explicit.
- values_to_check=`$ECHO $2 | $TR ' ' '\n'`
- illegal_values=`$ECHO $3 | $TR ' ' '\n'`
- if test -z "$illegal_values"; then
- $1=""
- else
- result=`$GREP -Fx "$illegal_values" <<< "$values_to_check" | $GREP -v '^$'`
- $1=${result//$'\n'/ }
- fi
-])
-
-###############################################################################
-# Sort a space-separated list, and remove duplicates.
-#
-# Sets the specified variable to the resulting list.
-#
-# $1: result variable name
-# $2: list of values to sort
-AC_DEFUN([BASIC_SORT_LIST],
-[
- values_to_sort=`$ECHO $2 | $TR ' ' '\n'`
- result=`$SORT -u <<< "$values_to_sort" | $GREP -v '^$'`
- $1=${result//$'\n'/ }
-])
-
-###############################################################################
-# Test if $1 is a valid argument to $3 (often is $JAVA passed as $3)
-# If so, then append $1 to $2 \
-# Also set JVM_ARG_OK to true/false depending on outcome.
-AC_DEFUN([ADD_JVM_ARG_IF_OK],
-[
- $ECHO "Check if jvm arg is ok: $1" >&AS_MESSAGE_LOG_FD
- $ECHO "Command: $3 $1 -version" >&AS_MESSAGE_LOG_FD
- OUTPUT=`$3 $1 $USER_BOOT_JDK_OPTIONS -version 2>&1`
- FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn`
- FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""`
- if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
- $2="[$]$2 $1"
- JVM_ARG_OK=true
- else
- $ECHO "Arg failed:" >&AS_MESSAGE_LOG_FD
- $ECHO "$OUTPUT" >&AS_MESSAGE_LOG_FD
- JVM_ARG_OK=false
- fi
-])
-
-# Appends a string to a path variable, only adding the : when needed.
-AC_DEFUN([BASIC_APPEND_TO_PATH],
-[
- if test "x$2" != x; then
- if test "x[$]$1" = x; then
- $1="$2"
- else
- $1="[$]$1:$2"
- fi
- fi
-])
-
-# Prepends a string to a path variable, only adding the : when needed.
-AC_DEFUN([BASIC_PREPEND_TO_PATH],
-[
- if test "x$2" != x; then
- if test "x[$]$1" = x; then
- $1="$2"
- else
- $1="$2:[$]$1"
- fi
- fi
-])
-
-################################################################################
-# This will make a path absolute. Assumes it's already a unix path. Also
-# resolves ~ to homedir.
-AC_DEFUN([BASIC_ABSOLUTE_PATH],
-[
- if test "x[$]$1" != x; then
- new_path="[$]$1"
-
- # Use eval to expand a potential ~. This technique does not work if there
- # are spaces in the path (which is valid at this point on Windows), so only
- # try to apply it if there is an actual ~ first in the path.
- if [ [[ "$new_path" = "~"* ]] ]; then
- eval new_path="$new_path"
- if test ! -f "$new_path" && test ! -d "$new_path"; then
- AC_MSG_ERROR([The new_path of $1, which resolves as "$new_path", is not found.])
- fi
- fi
-
- if test -d "$new_path"; then
- $1="`cd "$new_path"; $THEPWDCMD -L`"
- else
- dir="`$DIRNAME "$new_path"`"
- base="`$BASENAME "$new_path"`"
- $1="`cd "$dir"; $THEPWDCMD -L`/$base"
- fi
- fi
-])
-
-###############################################################################
-# This will make sure the given variable points to a full and proper
-# path. This means:
-# 1) There will be no spaces in the path. On unix platforms,
-# spaces in the path will result in an error. On Windows,
-# the path will be rewritten using short-style to be space-free.
-# 2) The path will be absolute, and it will be in unix-style (on
-# cygwin).
-# $1: The name of the variable to fix
-AC_DEFUN([BASIC_FIXUP_PATH],
-[
- # Only process if variable expands to non-empty
- if test "x[$]$1" != x; then
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- BASIC_FIXUP_PATH_CYGWIN($1)
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- BASIC_FIXUP_PATH_MSYS($1)
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- BASIC_FIXUP_PATH_WSL($1)
- else
- # We're on a unix platform. Hooray! :)
- path="[$]$1"
- has_space=`$ECHO "$path" | $GREP " "`
- if test "x$has_space" != x; then
- AC_MSG_NOTICE([The path of $1, which resolves as "$path", is invalid.])
- AC_MSG_ERROR([Spaces are not allowed in this path.])
- fi
-
- BASIC_ABSOLUTE_PATH(path)
- $1="$path"
- fi
- fi
-])
-
-###############################################################################
-# This will make sure the given variable points to a executable
-# with a full and proper path. This means:
-# 1) There will be no spaces in the path. On unix platforms,
-# spaces in the path will result in an error. On Windows,
-# the path will be rewritten using short-style to be space-free.
-# 2) The path will be absolute, and it will be in unix-style (on
-# cygwin).
-# Any arguments given to the executable is preserved.
-# If the input variable does not have a directory specification, then
-# it need to be in the PATH.
-# $1: The name of the variable to fix
-AC_DEFUN([BASIC_FIXUP_EXECUTABLE],
-[
- # Only process if variable expands to non-empty
-
- if test "x[$]$1" != x; then
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- BASIC_FIXUP_EXECUTABLE_CYGWIN($1)
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- BASIC_FIXUP_EXECUTABLE_MSYS($1)
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- BASIC_FIXUP_EXECUTABLE_WSL($1)
- else
- # We're on a unix platform. Hooray! :)
- # First separate the path from the arguments. This will split at the first
- # space.
- complete="[$]$1"
- path="${complete%% *}"
- tmp="$complete EOL"
- arguments="${tmp#* }"
-
- # Cannot rely on the command "which" here since it doesn't always work.
- is_absolute_path=`$ECHO "$path" | $GREP ^/`
- if test -z "$is_absolute_path"; then
- # Path to executable is not absolute. Find it.
- IFS_save="$IFS"
- IFS=:
- for p in $PATH; do
- if test -f "$p/$path" && test -x "$p/$path"; then
- new_path="$p/$path"
- break
- fi
- done
- IFS="$IFS_save"
- else
- # This is an absolute path, we can use it without further modifications.
- new_path="$path"
- fi
-
- if test "x$new_path" = x; then
- AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.])
- has_space=`$ECHO "$complete" | $GREP " "`
- if test "x$has_space" != x; then
- AC_MSG_NOTICE([This might be caused by spaces in the path, which is not allowed.])
- fi
- AC_MSG_ERROR([Cannot locate the the path of $1])
- fi
- fi
-
- # Now join together the path and the arguments once again
- if test "x$arguments" != xEOL; then
- new_complete="$new_path ${arguments% *}"
- else
- new_complete="$new_path"
- fi
-
- if test "x$complete" != "x$new_complete"; then
- $1="$new_complete"
- AC_MSG_NOTICE([Rewriting $1 to "$new_complete"])
- fi
- fi
-])
-
-###############################################################################
-AC_DEFUN([BASIC_REMOVE_SYMBOLIC_LINKS],
-[
- if test "x$OPENJDK_BUILD_OS" != xwindows; then
- # Follow a chain of symbolic links. Use readlink
- # where it exists, else fall back to horribly
- # complicated shell code.
- if test "x$READLINK_TESTED" != yes; then
- # On MacOSX there is a readlink tool with a different
- # purpose than the GNU readlink tool. Check the found readlink.
- READLINK_ISGNU=`$READLINK --version 2>&1 | $GREP GNU`
- # If READLINK_ISGNU is empty, then it's a non-GNU readlink. Don't use it.
- READLINK_TESTED=yes
- fi
-
- if test "x$READLINK" != x && test "x$READLINK_ISGNU" != x; then
- $1=`$READLINK -f [$]$1`
- else
- # Save the current directory for restoring afterwards
- STARTDIR=$PWD
- COUNTER=0
- sym_link_dir=`$DIRNAME [$]$1`
- sym_link_file=`$BASENAME [$]$1`
- cd $sym_link_dir
- # Use -P flag to resolve symlinks in directories.
- cd `$THEPWDCMD -P`
- sym_link_dir=`$THEPWDCMD -P`
- # Resolve file symlinks
- while test $COUNTER -lt 20; do
- ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'`
- if test "x$ISLINK" == x; then
- # This is not a symbolic link! We are done!
- break
- fi
- # Again resolve directory symlinks since the target of the just found
- # link could be in a different directory
- cd `$DIRNAME $ISLINK`
- sym_link_dir=`$THEPWDCMD -P`
- sym_link_file=`$BASENAME $ISLINK`
- let COUNTER=COUNTER+1
- done
- cd $STARTDIR
- $1=$sym_link_dir/$sym_link_file
- fi
- fi
-])
-
-###############################################################################
-# Register a --with argument but mark it as deprecated
-# $1: The name of the with argument to deprecate, not including --with-
-AC_DEFUN([BASIC_DEPRECATED_ARG_WITH],
-[
- AC_ARG_WITH($1, [AS_HELP_STRING([--with-$1],
- [Deprecated. Option is kept for backwards compatibility and is ignored])],
- [AC_MSG_WARN([Option --with-$1 is deprecated and will be ignored.])])
-])
-
-###############################################################################
-# Register a --enable argument but mark it as deprecated
-# $1: The name of the with argument to deprecate, not including --enable-
-# $2: The name of the argument to deprecate, in shell variable style (i.e. with _ instead of -)
-# $3: Messages to user.
-AC_DEFUN([BASIC_DEPRECATED_ARG_ENABLE],
-[
- AC_ARG_ENABLE($1, [AS_HELP_STRING([--enable-$1],
- [Deprecated. Option is kept for backwards compatibility and is ignored])])
- if test "x$enable_$2" != x; then
- AC_MSG_WARN([Option --enable-$1 is deprecated and will be ignored.])
-
- if test "x$3" != x; then
- AC_MSG_WARN([$3])
- fi
-
- fi
-])
-
-###############################################################################
-AC_DEFUN_ONCE([BASIC_INIT],
-[
- # Save the original command line. This is passed to us by the wrapper configure script.
- AC_SUBST(CONFIGURE_COMMAND_LINE)
- # AUTOCONF might be set in the environment by the user. Preserve for "make reconfigure".
- AC_SUBST(AUTOCONF)
- # Save the path variable before it gets changed
- ORIGINAL_PATH="$PATH"
- AC_SUBST(ORIGINAL_PATH)
- DATE_WHEN_CONFIGURED=`date`
- AC_SUBST(DATE_WHEN_CONFIGURED)
- AC_MSG_NOTICE([Configuration created at $DATE_WHEN_CONFIGURED.])
-])
-
-###############################################################################
-# Test that variable $1 denoting a program is not empty. If empty, exit with an error.
-# $1: variable to check
-AC_DEFUN([BASIC_CHECK_NONEMPTY],
-[
- if test "x[$]$1" = x; then
- AC_MSG_ERROR([Could not find required tool for $1])
- fi
-])
-
-###############################################################################
-# Check that there are no unprocessed overridden variables left.
-# If so, they are an incorrect argument and we will exit with an error.
-AC_DEFUN([BASIC_CHECK_LEFTOVER_OVERRIDDEN],
-[
- if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then
- # Replace the separating ! with spaces before presenting for end user.
- unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ }
- AC_MSG_WARN([The following variables might be unknown to configure: $unknown_variables])
- fi
-])
-
-###############################################################################
-# Setup a tool for the given variable. If correctly specified by the user,
-# use that value, otherwise search for the tool using the supplied code snippet.
-# $1: variable to set
-# $2: code snippet to call to look for the tool
-# $3: code snippet to call if variable was used to find tool
-AC_DEFUN([BASIC_SETUP_TOOL],
-[
- # Publish this variable in the help.
- AC_ARG_VAR($1, [Override default value for $1])
-
- if [[ -z "${$1+x}" ]]; then
- # The variable is not set by user, try to locate tool using the code snippet
- $2
- else
- # The variable is set, but is it from the command line or the environment?
-
- # Try to remove the string !$1! from our list.
- try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!$1!/}
- if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then
- # If it failed, the variable was not from the command line. Ignore it,
- # but warn the user (except for BASH, which is always set by the calling BASH).
- if test "x$1" != xBASH; then
- AC_MSG_WARN([Ignoring value of $1 from the environment. Use command line variables instead.])
- fi
- # Try to locate tool using the code snippet
- $2
- else
- # If it succeeded, then it was overridden by the user. We will use it
- # for the tool.
-
- # First remove it from the list of overridden variables, so we can test
- # for unknown variables in the end.
- CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var"
-
- tool_override=[$]$1
- AC_MSG_NOTICE([User supplied override $1="$tool_override"])
-
- # Check if we try to supply an empty value
- if test "x$tool_override" = x; then
- AC_MSG_CHECKING([for $1])
- AC_MSG_RESULT([disabled])
- else
- # Split up override in command part and argument part
- tool_and_args=($tool_override)
- [ tool_command=${tool_and_args[0]} ]
- [ unset 'tool_and_args[0]' ]
- [ tool_args=${tool_and_args[@]} ]
-
- # Check if the provided tool contains a complete path.
- tool_basename="${tool_command##*/}"
- if test "x$tool_basename" = "x$tool_command"; then
- # A command without a complete path is provided, search $PATH.
- AC_MSG_NOTICE([Will search for user supplied tool "$tool_basename"])
- AC_PATH_PROG($1, $tool_basename)
- if test "x[$]$1" = x; then
- AC_MSG_ERROR([User supplied tool $1="$tool_basename" could not be found])
- fi
- else
- # Otherwise we believe it is a complete path. Use it as it is.
- AC_MSG_NOTICE([Will use user supplied tool "$tool_command"])
- AC_MSG_CHECKING([for $tool_command])
- if test ! -x "$tool_command"; then
- AC_MSG_RESULT([not found])
- AC_MSG_ERROR([User supplied tool $1="$tool_command" does not exist or is not executable])
- fi
- $1="$tool_command"
- AC_MSG_RESULT([found])
- fi
- if test "x$tool_args" != x; then
- # If we got arguments, re-append them to the command after the fixup.
- $1="[$]$1 $tool_args"
- fi
- fi
- fi
- $3
- fi
-])
-
-###############################################################################
-# Call BASIC_SETUP_TOOL with AC_PATH_PROGS to locate the tool
-# $1: variable to set
-# $2: executable name (or list of names) to look for
-# $3: [path]
-AC_DEFUN([BASIC_PATH_PROGS],
-[
- BASIC_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2, , $3)])
-])
-
-###############################################################################
-# Call BASIC_SETUP_TOOL with AC_CHECK_TOOLS to locate the tool
-# $1: variable to set
-# $2: executable name (or list of names) to look for
-AC_DEFUN([BASIC_CHECK_TOOLS],
-[
- BASIC_SETUP_TOOL($1, [AC_CHECK_TOOLS($1, $2)])
-])
-
-###############################################################################
-# Like BASIC_PATH_PROGS but fails if no tool was found.
-# $1: variable to set
-# $2: executable name (or list of names) to look for
-# $3: [path]
-AC_DEFUN([BASIC_REQUIRE_PROGS],
-[
- BASIC_PATH_PROGS($1, $2, , $3)
- BASIC_CHECK_NONEMPTY($1)
-])
-
-###############################################################################
-# Like BASIC_SETUP_TOOL but fails if no tool was found.
-# $1: variable to set
-# $2: autoconf macro to call to look for the special tool
-AC_DEFUN([BASIC_REQUIRE_SPECIAL],
-[
- BASIC_SETUP_TOOL($1, [$2])
- BASIC_CHECK_NONEMPTY($1)
-])
-
-###############################################################################
-# Like BASIC_REQUIRE_PROGS but also allows for bash built-ins
-# $1: variable to set
-# $2: executable name (or list of names) to look for
-# $3: [path]
-AC_DEFUN([BASIC_REQUIRE_BUILTIN_PROGS],
-[
- BASIC_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2, , $3)])
- if test "x[$]$1" = x; then
- AC_MSG_NOTICE([Required tool $2 not found in PATH, checking built-in])
- if help $2 > /dev/null 2>&1; then
- AC_MSG_NOTICE([Found $2 as shell built-in. Using it])
- $1="$2"
- else
- AC_MSG_ERROR([Required tool $2 also not found as built-in.])
- fi
- fi
- BASIC_CHECK_NONEMPTY($1)
-])
-
-###############################################################################
-# Setup the most fundamental tools that relies on not much else to set up,
-# but is used by much of the early bootstrap code.
-AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS],
-[
- # Start with tools that do not need have cross compilation support
- # and can be expected to be found in the default PATH. These tools are
- # used by configure.
-
- # First are all the simple required tools.
- BASIC_REQUIRE_PROGS(BASENAME, basename)
- BASIC_REQUIRE_PROGS(BASH, bash)
- BASIC_REQUIRE_PROGS(CAT, cat)
- BASIC_REQUIRE_PROGS(CHMOD, chmod)
- BASIC_REQUIRE_PROGS(CMP, cmp)
- BASIC_REQUIRE_PROGS(COMM, comm)
- BASIC_REQUIRE_PROGS(CP, cp)
- BASIC_REQUIRE_PROGS(CUT, cut)
- BASIC_REQUIRE_PROGS(DATE, date)
- BASIC_REQUIRE_PROGS(DIFF, [gdiff diff])
- BASIC_REQUIRE_PROGS(DIRNAME, dirname)
- BASIC_REQUIRE_PROGS(ECHO, echo)
- BASIC_REQUIRE_PROGS(EXPR, expr)
- BASIC_REQUIRE_PROGS(FILE, file)
- BASIC_REQUIRE_PROGS(FIND, find)
- BASIC_REQUIRE_PROGS(HEAD, head)
- BASIC_REQUIRE_PROGS(GUNZIP, gunzip)
- BASIC_REQUIRE_PROGS(GZIP, pigz gzip)
- BASIC_REQUIRE_PROGS(LN, ln)
- BASIC_REQUIRE_PROGS(LS, ls)
- # gmkdir is known to be safe for concurrent invocations with -p flag.
- BASIC_REQUIRE_PROGS(MKDIR, [gmkdir mkdir])
- BASIC_REQUIRE_PROGS(MKTEMP, mktemp)
- BASIC_REQUIRE_PROGS(MV, mv)
- BASIC_REQUIRE_PROGS(NAWK, [nawk gawk awk])
- BASIC_REQUIRE_PROGS(PRINTF, printf)
- BASIC_REQUIRE_PROGS(READLINK, [greadlink readlink])
- BASIC_REQUIRE_PROGS(RM, rm)
- BASIC_REQUIRE_PROGS(RMDIR, rmdir)
- BASIC_REQUIRE_PROGS(SH, sh)
- BASIC_REQUIRE_PROGS(SORT, sort)
- BASIC_REQUIRE_PROGS(TAIL, tail)
- BASIC_REQUIRE_PROGS(TAR, gtar tar)
- BASIC_REQUIRE_PROGS(TEE, tee)
- BASIC_REQUIRE_PROGS(TOUCH, touch)
- BASIC_REQUIRE_PROGS(TR, tr)
- BASIC_REQUIRE_PROGS(UNAME, uname)
- BASIC_REQUIRE_PROGS(UNIQ, uniq)
- BASIC_REQUIRE_PROGS(WC, wc)
- BASIC_REQUIRE_PROGS(WHICH, which)
- BASIC_REQUIRE_PROGS(XARGS, xargs)
-
- # Then required tools that require some special treatment.
- BASIC_REQUIRE_SPECIAL(AWK, [AC_PROG_AWK])
- BASIC_REQUIRE_SPECIAL(GREP, [AC_PROG_GREP])
- BASIC_REQUIRE_SPECIAL(EGREP, [AC_PROG_EGREP])
- BASIC_REQUIRE_SPECIAL(FGREP, [AC_PROG_FGREP])
- BASIC_REQUIRE_SPECIAL(SED, [AC_PROG_SED])
-
- # Always force rm.
- RM="$RM -f"
-
- # pwd behaves differently on various platforms and some don't support the -L flag.
- # Always use the bash builtin pwd to get uniform behavior.
- THEPWDCMD=pwd
-
- # These are not required on all platforms
- BASIC_PATH_PROGS(CYGPATH, cygpath)
- BASIC_PATH_PROGS(WSLPATH, wslpath)
- BASIC_PATH_PROGS(DF, df)
- BASIC_PATH_PROGS(CPIO, [cpio bsdcpio])
- BASIC_PATH_PROGS(NICE, nice)
-
- BASIC_PATH_PROGS(LSB_RELEASE, lsb_release)
- BASIC_PATH_PROGS(CMD, [cmd.exe /mnt/c/Windows/System32/cmd.exe])
-])
-
-###############################################################################
-# Setup basic configuration paths, and platform-specific stuff related to PATHs.
-AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
-[
- # Save the current directory this script was started from
- CONFIGURE_START_DIR="$PWD"
-
- # We might need to rewrite ORIGINAL_PATH, if it includes "#", to quote them
- # for make. We couldn't do this when we retrieved ORIGINAL_PATH, since SED
- # was not available at that time.
- REWRITTEN_PATH=`$ECHO "$ORIGINAL_PATH" | $SED -e 's/#/\\\\#/g'`
- if test "x$REWRITTEN_PATH" != "x$ORIGINAL_PATH"; then
- ORIGINAL_PATH="$REWRITTEN_PATH"
- AC_MSG_NOTICE([Rewriting ORIGINAL_PATH to $REWRITTEN_PATH])
- fi
-
- if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
- PATH_SEP=";"
- EXE_SUFFIX=".exe"
- BASIC_CHECK_PATHS_WINDOWS
- else
- PATH_SEP=":"
- EXE_SUFFIX=""
- fi
- AC_SUBST(PATH_SEP)
- AC_SUBST(EXE_SUFFIX)
-
- # We get the top-level directory from the supporting wrappers.
- AC_MSG_CHECKING([for top-level directory])
- AC_MSG_RESULT([$TOPDIR])
- AC_SUBST(TOPDIR)
- AC_SUBST(CONFIGURE_START_DIR)
-
- # We can only call BASIC_FIXUP_PATH after BASIC_CHECK_PATHS_WINDOWS.
- BASIC_FIXUP_PATH(CONFIGURE_START_DIR)
- BASIC_FIXUP_PATH(TOPDIR)
-
- # Locate the directory of this script.
- AUTOCONF_DIR=$TOPDIR/make/autoconf
-
- # Setup username (for use in adhoc version strings etc)
- # Outer [ ] to quote m4.
- [ USERNAME=`$ECHO "$USER" | $TR -d -c '[a-z][A-Z][0-9]'` ]
- AC_SUBST(USERNAME)
-])
-
-###############################################################################
-# Evaluates platform specific overrides for devkit variables.
-# $1: Name of variable
-AC_DEFUN([BASIC_EVAL_DEVKIT_VARIABLE],
-[
- if test "x[$]$1" = x; then
- eval $1="\${$1_${OPENJDK_TARGET_CPU}}"
- fi
-])
-
-###############################################################################
-AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
-[
- AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit],
- [use this devkit for compilers, tools and resources])])
-
- if test "x$with_devkit" = xyes; then
- AC_MSG_ERROR([--with-devkit must have a value])
- elif test "x$with_devkit" != x && test "x$with_devkit" != xno; then
- BASIC_FIXUP_PATH([with_devkit])
- DEVKIT_ROOT="$with_devkit"
- # Check for a meta data info file in the root of the devkit
- if test -f "$DEVKIT_ROOT/devkit.info"; then
- . $DEVKIT_ROOT/devkit.info
- # This potentially sets the following:
- # A descriptive name of the devkit
- BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_NAME])
- # Corresponds to --with-extra-path
- BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_EXTRA_PATH])
- # Corresponds to --with-toolchain-path
- BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_TOOLCHAIN_PATH])
- # Corresponds to --with-sysroot
- BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_SYSROOT])
-
- # Identifies the Visual Studio version in the devkit
- BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_VERSION])
- # The Visual Studio include environment variable
- BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_INCLUDE])
- # The Visual Studio lib environment variable
- BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_VS_LIB])
- # Corresponds to --with-msvcr-dll
- BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCR_DLL])
- # Corresponds to --with-msvcp-dll
- BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCP_DLL])
- # Corresponds to --with-ucrt-dll-dir
- BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_UCRT_DLL_DIR])
- fi
-
- AC_MSG_CHECKING([for devkit])
- if test "x$DEVKIT_NAME" != x; then
- AC_MSG_RESULT([$DEVKIT_NAME in $DEVKIT_ROOT])
- else
- AC_MSG_RESULT([$DEVKIT_ROOT])
- fi
-
- BASIC_PREPEND_TO_PATH([EXTRA_PATH],$DEVKIT_EXTRA_PATH)
-
- # Fallback default of just /bin if DEVKIT_PATH is not defined
- if test "x$DEVKIT_TOOLCHAIN_PATH" = x; then
- DEVKIT_TOOLCHAIN_PATH="$DEVKIT_ROOT/bin"
- fi
- BASIC_PREPEND_TO_PATH([TOOLCHAIN_PATH],$DEVKIT_TOOLCHAIN_PATH)
-
- # If DEVKIT_SYSROOT is set, use that, otherwise try a couple of known
- # places for backwards compatiblity.
- if test "x$DEVKIT_SYSROOT" != x; then
- SYSROOT="$DEVKIT_SYSROOT"
- elif test -d "$DEVKIT_ROOT/$host_alias/libc"; then
- SYSROOT="$DEVKIT_ROOT/$host_alias/libc"
- elif test -d "$DEVKIT_ROOT/$host/sys-root"; then
- SYSROOT="$DEVKIT_ROOT/$host/sys-root"
- fi
-
- if test "x$DEVKIT_ROOT" != x; then
- DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib"
- if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
- DEVKIT_LIB_DIR="$DEVKIT_ROOT/lib64"
- fi
- AC_SUBST(DEVKIT_LIB_DIR)
- fi
- fi
-
- # You can force the sysroot if the sysroot encoded into the compiler tools
- # is not correct.
- AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root],
- [alias for --with-sysroot for backwards compatability])],
- [SYSROOT=$with_sys_root]
- )
-
- AC_ARG_WITH(sysroot, [AS_HELP_STRING([--with-sysroot],
- [use this directory as sysroot])],
- [SYSROOT=$with_sysroot]
- )
-
- AC_ARG_WITH([tools-dir], [AS_HELP_STRING([--with-tools-dir],
- [alias for --with-toolchain-path for backwards compatibility])],
- [BASIC_PREPEND_TO_PATH([TOOLCHAIN_PATH],$with_tools_dir)]
- )
-
- AC_ARG_WITH([toolchain-path], [AS_HELP_STRING([--with-toolchain-path],
- [prepend these directories when searching for toolchain binaries (compilers etc)])],
- [BASIC_PREPEND_TO_PATH([TOOLCHAIN_PATH],$with_toolchain_path)]
- )
-
- AC_ARG_WITH([extra-path], [AS_HELP_STRING([--with-extra-path],
- [prepend these directories to the default path])],
- [BASIC_PREPEND_TO_PATH([EXTRA_PATH],$with_extra_path)]
- )
-
- if test "x$OPENJDK_BUILD_OS" = "xmacosx"; then
- # If a devkit has been supplied, find xcodebuild in the toolchain_path.
- # If not, detect if Xcode is installed by running xcodebuild -version
- # if no Xcode installed, xcodebuild exits with 1
- # if Xcode is installed, even if xcode-select is misconfigured, then it exits with 0
- if test "x$DEVKIT_ROOT" != x || /usr/bin/xcodebuild -version >/dev/null 2>&1; then
- # We need to use xcodebuild in the toolchain dir provided by the user, this will
- # fall back on the stub binary in /usr/bin/xcodebuild
- AC_PATH_PROG([XCODEBUILD], [xcodebuild], [/usr/bin/xcodebuild], [$TOOLCHAIN_PATH])
- else
- # this should result in SYSROOT being empty, unless --with-sysroot is provided
- # when only the command line tools are installed there are no SDKs, so headers
- # are copied into the system frameworks
- XCODEBUILD=
- AC_SUBST(XCODEBUILD)
- fi
-
- AC_MSG_CHECKING([for sdk name])
- AC_ARG_WITH([sdk-name], [AS_HELP_STRING([--with-sdk-name],
- [use the platform SDK of the given name. @<:@macosx@:>@])],
- [SDKNAME=$with_sdk_name]
- )
- AC_MSG_RESULT([$SDKNAME])
-
- # if toolchain path is specified then don't rely on system headers, they may not compile
- HAVE_SYSTEM_FRAMEWORK_HEADERS=0
- test -z "$TOOLCHAIN_PATH" && \
- HAVE_SYSTEM_FRAMEWORK_HEADERS=`test ! -f /System/Library/Frameworks/Foundation.framework/Headers/Foundation.h; echo $?`
-
- if test -z "$SYSROOT"; then
- if test -n "$XCODEBUILD"; then
- # if we don't have system headers, use default SDK name (last resort)
- if test -z "$SDKNAME" -a $HAVE_SYSTEM_FRAMEWORK_HEADERS -eq 0; then
- SDKNAME=${SDKNAME:-macosx}
- fi
-
- if test -n "$SDKNAME"; then
- # Call xcodebuild to determine SYSROOT
- SYSROOT=`"$XCODEBUILD" -sdk $SDKNAME -version | $GREP '^Path: ' | $SED 's/Path: //'`
- fi
- else
- if test $HAVE_SYSTEM_FRAMEWORK_HEADERS -eq 0; then
- AC_MSG_ERROR([No xcodebuild tool and no system framework headers found, use --with-sysroot or --with-sdk-name to provide a path to a valid SDK])
- fi
- fi
- else
- # warn user if --with-sdk-name was also set
- if test -n "$with_sdk_name"; then
- AC_MSG_WARN([Both SYSROOT and --with-sdk-name are set, only SYSROOT will be used])
- fi
- fi
-
- if test $HAVE_SYSTEM_FRAMEWORK_HEADERS -eq 0 -a -z "$SYSROOT"; then
- # If no system framework headers, then SYSROOT must be set, or we won't build
- AC_MSG_ERROR([Unable to determine SYSROOT and no headers found in /System/Library/Frameworks. Check Xcode configuration, --with-sysroot or --with-sdk-name arguments.])
- fi
-
- # Perform a basic sanity test
- if test ! -f "$SYSROOT/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h"; then
- if test -z "$SYSROOT"; then
- AC_MSG_ERROR([Unable to find required framework headers, provide a path to an SDK via --with-sysroot or --with-sdk-name and be sure Xcode is installed properly])
- else
- AC_MSG_ERROR([Invalid SDK or SYSROOT path, dependent framework headers not found])
- fi
- fi
-
- # set SDKROOT too, Xcode tools will pick it up
- SDKROOT="$SYSROOT"
- AC_SUBST(SDKROOT)
- fi
-
- # Prepend the extra path to the global path
- BASIC_PREPEND_TO_PATH([PATH],$EXTRA_PATH)
-
- AC_MSG_CHECKING([for sysroot])
- AC_MSG_RESULT([$SYSROOT])
- AC_MSG_CHECKING([for toolchain path])
- AC_MSG_RESULT([$TOOLCHAIN_PATH])
- AC_MSG_CHECKING([for extra path])
- AC_MSG_RESULT([$EXTRA_PATH])
-])
-
-###############################################################################
-AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
-[
-
- AC_ARG_WITH(conf-name, [AS_HELP_STRING([--with-conf-name],
- [use this as the name of the configuration @<:@generated from important configuration options@:>@])],
- [ CONF_NAME=${with_conf_name} ])
-
- # Test from where we are running configure, in or outside of src root.
- AC_MSG_CHECKING([where to store configuration])
- if test "x$CONFIGURE_START_DIR" = "x$TOPDIR" \
- || test "x$CONFIGURE_START_DIR" = "x$CUSTOM_ROOT" \
- || test "x$CONFIGURE_START_DIR" = "x$TOPDIR/make/autoconf" \
- || test "x$CONFIGURE_START_DIR" = "x$TOPDIR/make" ; then
- # We are running configure from the src root.
- # Create a default ./build/target-variant-debuglevel output root.
- if test "x${CONF_NAME}" = x; then
- AC_MSG_RESULT([in default location])
- CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JVM_VARIANTS_WITH_AND}-${DEBUG_LEVEL}"
- else
- AC_MSG_RESULT([in build directory with custom name])
- fi
-
- if test "x$CUSTOM_ROOT" != x; then
- WORKSPACE_ROOT="${CUSTOM_ROOT}"
- else
- WORKSPACE_ROOT="${TOPDIR}"
- fi
- OUTPUTDIR="${WORKSPACE_ROOT}/build/${CONF_NAME}"
- $MKDIR -p "$OUTPUTDIR"
- if test ! -d "$OUTPUTDIR"; then
- AC_MSG_ERROR([Could not create build directory $OUTPUTDIR])
- 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.
- if test "x${CONF_NAME}" = x; then
- CONF_NAME=`$ECHO $CONFIGURE_START_DIR | $SED -e "s!^${TOPDIR}/build/!!"`
- fi
- OUTPUTDIR="$CONFIGURE_START_DIR"
- AC_MSG_RESULT([in current directory])
-
- # WARNING: This might be a bad thing to do. You need to be sure you want to
- # have a configuration in this directory. Do some sanity checks!
-
- if test ! -e "$OUTPUTDIR/spec.gmk"; then
- # If we have a spec.gmk, we have run here before and we are OK. Otherwise, check for
- # other files
- files_present=`$LS $OUTPUTDIR`
- # Configure has already touched config.log and confdefs.h in the current dir when this check
- # is performed.
- filtered_files=`$ECHO "$files_present" \
- | $SED -e 's/config.log//g' \
- -e 's/configure.log//g' \
- -e 's/confdefs.h//g' \
- -e 's/configure-support//g' \
- -e 's/ //g' \
- | $TR -d '\n'`
- if test "x$filtered_files" != x; then
- AC_MSG_NOTICE([Current directory is $CONFIGURE_START_DIR.])
- AC_MSG_NOTICE([Since this is not the source root, configure will output the configuration here])
- AC_MSG_NOTICE([(as opposed to creating a configuration in /build/).])
- AC_MSG_NOTICE([However, this directory is not empty. This is not allowed, since it could])
- AC_MSG_NOTICE([seriously mess up just about everything.])
- AC_MSG_NOTICE([Try 'cd $TOPDIR' and restart configure])
- AC_MSG_NOTICE([(or create a new empty directory and cd to it).])
- AC_MSG_ERROR([Will not continue creating configuration in $CONFIGURE_START_DIR])
- fi
- fi
- fi
- AC_MSG_CHECKING([what configuration name to use])
- AC_MSG_RESULT([$CONF_NAME])
-
- BASIC_FIXUP_PATH(OUTPUTDIR)
-
- CONFIGURESUPPORT_OUTPUTDIR="$OUTPUTDIR/configure-support"
- $MKDIR -p "$CONFIGURESUPPORT_OUTPUTDIR"
-
- SPEC="$OUTPUTDIR/spec.gmk"
- AC_SUBST(SPEC)
- AC_SUBST(CONF_NAME)
- AC_SUBST(OUTPUTDIR)
- AC_SUBST(WORKSPACE_ROOT)
- AC_SUBST(CONFIGURESUPPORT_OUTPUTDIR)
-
- # The spec.gmk file contains all variables for the make system.
- AC_CONFIG_FILES([$OUTPUTDIR/spec.gmk:$AUTOCONF_DIR/spec.gmk.in])
- # The bootcycle-spec.gmk file contains support for boot cycle builds.
- AC_CONFIG_FILES([$OUTPUTDIR/bootcycle-spec.gmk:$AUTOCONF_DIR/bootcycle-spec.gmk.in])
- # The buildjdk-spec.gmk file contains support for building a buildjdk when cross compiling.
- AC_CONFIG_FILES([$OUTPUTDIR/buildjdk-spec.gmk:$AUTOCONF_DIR/buildjdk-spec.gmk.in])
- # The compare.sh is used to compare the build output to other builds.
- AC_CONFIG_FILES([$OUTPUTDIR/compare.sh:$AUTOCONF_DIR/compare.sh.in])
- # The generated Makefile knows where the spec.gmk is and where the source is.
- # You can run make from the OUTPUTDIR, or from the top-level Makefile
- # which will look for generated configurations
- AC_CONFIG_FILES([$OUTPUTDIR/Makefile:$AUTOCONF_DIR/Makefile.in])
-])
-
-#%%% Simple tools %%%
-
-###############################################################################
-# Check if we have found a usable version of make
-# $1: the path to a potential make binary (or empty)
-# $2: the description on how we found this
-AC_DEFUN([BASIC_CHECK_MAKE_VERSION],
-[
- MAKE_CANDIDATE="$1"
- DESCRIPTION="$2"
-
- # On Cygwin, we require a newer version of make than on other platforms
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- MAKE_VERSION_EXPR="-e 4\."
- MAKE_REQUIRED_VERSION="4.0"
- else
- MAKE_VERSION_EXPR="-e 3\.8[[12]] -e 4\."
- MAKE_REQUIRED_VERSION="3.81"
- fi
-
- if test "x$MAKE_CANDIDATE" != x; then
- AC_MSG_NOTICE([Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION])
- MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1`
- IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'`
- if test "x$IS_GNU_MAKE" = x; then
- AC_MSG_NOTICE([Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring.])
- else
- IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP $MAKE_VERSION_EXPR`
- if test "x$IS_MODERN_MAKE" = x; then
- AC_MSG_NOTICE([Found GNU make at $MAKE_CANDIDATE, however this is not version $MAKE_REQUIRED_VERSION or later. (it is: $MAKE_VERSION_STRING). Ignoring.])
- else
- if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- MAKE_EXPECTED_ENV='cygwin'
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- MAKE_EXPECTED_ENV='msys'
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- MAKE_EXPECTED_ENV='x86_64-.*-linux-gnu'
- else
- AC_MSG_ERROR([Unknown Windows environment])
- fi
- MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'`
- IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV`
- else
- # Not relevant for non-Windows
- IS_MAKE_CORRECT_ENV=true
- fi
- if test "x$IS_MAKE_CORRECT_ENV" = x; then
- AC_MSG_NOTICE([Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring.])
- else
- FOUND_MAKE=$MAKE_CANDIDATE
- BASIC_FIXUP_EXECUTABLE(FOUND_MAKE)
- fi
- fi
- fi
- fi
-])
-
-###############################################################################
-AC_DEFUN([BASIC_CHECK_MAKE_OUTPUT_SYNC],
-[
- # Check if make supports the output sync option and if so, setup using it.
- AC_MSG_CHECKING([if make --output-sync is supported])
- if $MAKE --version -O > /dev/null 2>&1; then
- OUTPUT_SYNC_SUPPORTED=true
- AC_MSG_RESULT([yes])
- AC_MSG_CHECKING([for output-sync value])
- AC_ARG_WITH([output-sync], [AS_HELP_STRING([--with-output-sync],
- [set make output sync type if supported by make. @<:@recurse@:>@])],
- [OUTPUT_SYNC=$with_output_sync])
- if test "x$OUTPUT_SYNC" = "x"; then
- OUTPUT_SYNC=none
- fi
- AC_MSG_RESULT([$OUTPUT_SYNC])
- if ! $MAKE --version -O$OUTPUT_SYNC > /dev/null 2>&1; then
- AC_MSG_ERROR([Make did not the support the value $OUTPUT_SYNC as output sync type.])
- fi
- else
- OUTPUT_SYNC_SUPPORTED=false
- AC_MSG_RESULT([no])
- fi
- AC_SUBST(OUTPUT_SYNC_SUPPORTED)
- AC_SUBST(OUTPUT_SYNC)
-])
-
-###############################################################################
-# Goes looking for a usable version of GNU make.
-AC_DEFUN([BASIC_CHECK_GNU_MAKE],
-[
- BASIC_SETUP_TOOL([MAKE],
- [
- # Try our hardest to locate a correct version of GNU make
- AC_PATH_PROGS(CHECK_GMAKE, gmake)
- BASIC_CHECK_MAKE_VERSION("$CHECK_GMAKE", [gmake in PATH])
-
- if test "x$FOUND_MAKE" = x; then
- AC_PATH_PROGS(CHECK_MAKE, make)
- BASIC_CHECK_MAKE_VERSION("$CHECK_MAKE", [make in PATH])
- fi
-
- if test "x$FOUND_MAKE" = x; then
- if test "x$TOOLCHAIN_PATH" != x; then
- # We have a toolchain path, check that as well before giving up.
- OLD_PATH=$PATH
- PATH=$TOOLCHAIN_PATH:$PATH
- AC_PATH_PROGS(CHECK_TOOLSDIR_GMAKE, gmake)
- BASIC_CHECK_MAKE_VERSION("$CHECK_TOOLSDIR_GMAKE", [gmake in tools-dir])
- if test "x$FOUND_MAKE" = x; then
- AC_PATH_PROGS(CHECK_TOOLSDIR_MAKE, make)
- BASIC_CHECK_MAKE_VERSION("$CHECK_TOOLSDIR_MAKE", [make in tools-dir])
- fi
- PATH=$OLD_PATH
- fi
- fi
-
- if test "x$FOUND_MAKE" = x; then
- AC_MSG_ERROR([Cannot find GNU make $MAKE_REQUIRED_VERSION or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure.])
- fi
- ],[
- # If MAKE was set by user, verify the version
- BASIC_CHECK_MAKE_VERSION("$MAKE", [user supplied MAKE=$MAKE])
- if test "x$FOUND_MAKE" = x; then
- AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not GNU make $MAKE_REQUIRED_VERSION or newer.])
- fi
- ])
-
- MAKE=$FOUND_MAKE
- AC_SUBST(MAKE)
- AC_MSG_NOTICE([Using GNU make at $FOUND_MAKE (version: $MAKE_VERSION_STRING)])
-
- BASIC_CHECK_MAKE_OUTPUT_SYNC
-])
-
-###############################################################################
-AC_DEFUN([BASIC_CHECK_FIND_DELETE],
-[
- # Test if find supports -delete
- AC_MSG_CHECKING([if find supports -delete])
- FIND_DELETE="-delete"
-
- DELETEDIR=`$MKTEMP -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?)
-
- echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete
-
- TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1`
- if test -f $DELETEDIR/TestIfFindSupportsDelete; then
- # No, it does not.
- $RM $DELETEDIR/TestIfFindSupportsDelete
- if test "x$OPENJDK_TARGET_OS" = "xaix"; then
- # AIX 'find' is buggy if called with '-exec {} \+' and an empty file list
- FIND_DELETE="-print | $XARGS $RM"
- else
- FIND_DELETE="-exec $RM \{\} \+"
- fi
- AC_MSG_RESULT([no])
- else
- AC_MSG_RESULT([yes])
- fi
- $RMDIR $DELETEDIR
- AC_SUBST(FIND_DELETE)
-])
-
-###############################################################################
-AC_DEFUN([BASIC_CHECK_TAR],
-[
- # Test which kind of tar was found
- if test "x$($TAR --version | $GREP "GNU tar")" != "x"; then
- TAR_TYPE="gnu"
- elif test "x$($TAR --version | $GREP "bsdtar")" != "x"; then
- TAR_TYPE="bsd"
- elif test "x$($TAR -v | $GREP "bsdtar")" != "x"; then
- TAR_TYPE="bsd"
- elif test "x$OPENJDK_BUILD_OS" = "xsolaris"; then
- TAR_TYPE="solaris"
- elif test "x$OPENJDK_BUILD_OS" = "xaix"; then
- TAR_TYPE="aix"
- fi
- AC_MSG_CHECKING([what type of tar was found])
- AC_MSG_RESULT([$TAR_TYPE])
-
- TAR_CREATE_FILE_PARAM=""
-
- if test "x$TAR_TYPE" = "xgnu"; then
- TAR_INCLUDE_PARAM="T"
- TAR_SUPPORTS_TRANSFORM="true"
- if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
- # When using gnu tar for Solaris targets, need to use compatibility mode
- TAR_CREATE_EXTRA_PARAM="--format=ustar"
- fi
- elif test "x$TAR_TYPE" = "aix"; then
- # -L InputList of aix tar: name of file listing the files and directories
- # that need to be archived or extracted
- TAR_INCLUDE_PARAM="L"
- TAR_SUPPORTS_TRANSFORM="false"
- else
- TAR_INCLUDE_PARAM="I"
- TAR_SUPPORTS_TRANSFORM="false"
- fi
- AC_SUBST(TAR_TYPE)
- AC_SUBST(TAR_CREATE_EXTRA_PARAM)
- AC_SUBST(TAR_INCLUDE_PARAM)
- AC_SUBST(TAR_SUPPORTS_TRANSFORM)
-])
-
-###############################################################################
-AC_DEFUN([BASIC_CHECK_GREP],
-[
- # Test that grep supports -Fx with a list of pattern which includes null pattern.
- # This is a problem for the grep resident on AIX.
- AC_MSG_CHECKING([that grep ($GREP) -Fx handles empty lines in the pattern list correctly])
- # Multiple subsequent spaces..
- STACK_SPACES='aaa bbb ccc'
- # ..converted to subsequent newlines, causes STACK_LIST to be a list with some empty
- # patterns in it.
- STACK_LIST=${STACK_SPACES// /$'\n'}
- NEEDLE_SPACES='ccc bbb aaa'
- NEEDLE_LIST=${NEEDLE_SPACES// /$'\n'}
- RESULT="$($GREP -Fvx "$STACK_LIST" <<< "$NEEDLE_LIST")"
- if test "x$RESULT" == "x"; then
- AC_MSG_RESULT([yes])
- else
- if test "x$OPENJDK_TARGET_OS" = "xaix"; then
- ADDINFO="Please make sure you use GNU grep, usually found at /opt/freeware/bin."
- fi
- AC_MSG_ERROR([grep does not handle -Fx correctly. ${ADDINFO}])
- fi
-])
-
-###############################################################################
-AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
-[
- BASIC_CHECK_GNU_MAKE
-
- BASIC_CHECK_FIND_DELETE
- BASIC_CHECK_TAR
- BASIC_CHECK_GREP
- BASIC_SETUP_PANDOC
-
- # These tools might not be installed by default,
- # need hint on how to install them.
- BASIC_REQUIRE_PROGS(UNZIP, unzip)
- # Since zip uses "ZIP" as a environment variable for passing options, we need
- # to name our variable differently, hence ZIPEXE.
- BASIC_REQUIRE_PROGS(ZIPEXE, zip)
-
- # Non-required basic tools
-
- BASIC_PATH_PROGS(LDD, ldd)
- if test "x$LDD" = "x"; then
- # List shared lib dependencies is used for
- # debug output and checking for forbidden dependencies.
- # We can build without it.
- LDD="true"
- fi
- BASIC_PATH_PROGS(READELF, [greadelf readelf])
- BASIC_PATH_PROGS(DOT, dot)
- BASIC_PATH_PROGS(HG, hg)
- BASIC_PATH_PROGS(GIT, git)
- BASIC_PATH_PROGS(STAT, stat)
- BASIC_PATH_PROGS(TIME, time)
- BASIC_PATH_PROGS(FLOCK, flock)
- # Dtrace is usually found in /usr/sbin on Solaris, but that directory may not
- # be in the user path.
- BASIC_PATH_PROGS(DTRACE, dtrace, $PATH:/usr/sbin)
- BASIC_PATH_PROGS(PATCH, [gpatch patch])
- # Check if it's GNU time
- IS_GNU_TIME=`$TIME --version 2>&1 | $GREP 'GNU time'`
- if test "x$IS_GNU_TIME" != x; then
- IS_GNU_TIME=yes
- else
- IS_GNU_TIME=no
- fi
- AC_SUBST(IS_GNU_TIME)
-
- if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
- BASIC_REQUIRE_PROGS(DSYMUTIL, dsymutil)
- BASIC_REQUIRE_PROGS(MIG, mig)
- BASIC_REQUIRE_PROGS(XATTR, xattr)
- BASIC_PATH_PROGS(CODESIGN, codesign)
-
- if test "x$CODESIGN" != "x"; then
- # Check for user provided code signing identity.
- # If no identity was provided, fall back to "openjdk_codesign".
- AC_ARG_WITH([macosx-codesign-identity], [AS_HELP_STRING([--with-macosx-codesign-identity],
- [specify the code signing identity])],
- [MACOSX_CODESIGN_IDENTITY=$with_macosx_codesign_identity],
- [MACOSX_CODESIGN_IDENTITY=openjdk_codesign]
- )
-
- AC_SUBST(MACOSX_CODESIGN_IDENTITY)
-
- # Verify that the codesign certificate is present
- AC_MSG_CHECKING([if codesign certificate is present])
- $RM codesign-testfile
- $TOUCH codesign-testfile
- $CODESIGN -s "$MACOSX_CODESIGN_IDENTITY" codesign-testfile 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD || CODESIGN=
- $RM codesign-testfile
- if test "x$CODESIGN" = x; then
- AC_MSG_RESULT([no])
- else
- AC_MSG_RESULT([yes])
- fi
- fi
- BASIC_REQUIRE_PROGS(SETFILE, SetFile)
- elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
- BASIC_REQUIRE_PROGS(ELFEDIT, elfedit)
- fi
- if ! test "x$OPENJDK_TARGET_OS" = "xwindows"; then
- BASIC_REQUIRE_BUILTIN_PROGS(ULIMIT, ulimit)
- fi
-])
-
-###############################################################################
-# Check if build directory is on local disk. If not possible to determine,
-# we prefer to claim it's local.
-# Argument 1: directory to test
-# Argument 2: what to do if it is on local disk
-# Argument 3: what to do otherwise (remote disk or failure)
-AC_DEFUN([BASIC_CHECK_DIR_ON_LOCAL_DISK],
-[
- # df -l lists only local disks; if the given directory is not found then
- # a non-zero exit code is given
- if test "x$DF" = x; then
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- # msys does not have df; use Windows "net use" instead.
- IS_NETWORK_DISK=`net use | grep \`pwd -W | cut -d ":" -f 1 | tr a-z A-Z\`:`
- if test "x$IS_NETWORK_DISK" = x; then
- $2
- else
- $3
- fi
- else
- # No df here, say it's local
- $2
- fi
- else
- # JDK-8189619
- # df on AIX does not understand -l. On modern AIXes it understands "-T local" which
- # is the same. On older AIXes we just continue to live with a "not local build" warning.
- if test "x$OPENJDK_TARGET_OS" = xaix; then
- DF_LOCAL_ONLY_OPTION='-T local'
- else
- DF_LOCAL_ONLY_OPTION='-l'
- fi
- if $DF $DF_LOCAL_ONLY_OPTION $1 > /dev/null 2>&1; then
- $2
- else
- # In WSL, local Windows drives are considered remote by df, but we are
- # required to build into a directory accessible from windows, so consider
- # them local here.
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- if $DF $1 | $GREP -q "^[[A-Z]]:"; then
- $2
- else
- $3
- fi
- else
- $3
- fi
- fi
- fi
-])
-
-###############################################################################
-# Check that source files have basic read permissions set. This might
-# not be the case in cygwin in certain conditions.
-AC_DEFUN_ONCE([BASIC_CHECK_SRC_PERMS],
-[
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- file_to_test="$TOPDIR/LICENSE"
- if test `$STAT -c '%a' "$file_to_test"` -lt 400; then
- AC_MSG_ERROR([Bad file permissions on src files. This is usually caused by cloning the repositories with a non cygwin hg in a directory not created in cygwin.])
- fi
- fi
-])
-
-###############################################################################
-AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES],
-[
- AC_MSG_CHECKING([if build directory is on local disk])
- BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUTDIR,
- [OUTPUT_DIR_IS_LOCAL="yes"],
- [OUTPUT_DIR_IS_LOCAL="no"])
- AC_MSG_RESULT($OUTPUT_DIR_IS_LOCAL)
-
- BASIC_CHECK_SRC_PERMS
-
- # Check if the user has any old-style ALT_ variables set.
- FOUND_ALT_VARIABLES=`env | grep ^ALT_`
-
- # Before generating output files, test if they exist. If they do, this is a reconfigure.
- # Since we can't properly handle the dependencies for this, warn the user about the situation
- if test -e $OUTPUTDIR/spec.gmk; then
- IS_RECONFIGURE=yes
- else
- IS_RECONFIGURE=no
- fi
-])
-
-###############################################################################
-# Check for support for specific options in bash
-AC_DEFUN_ONCE([BASIC_CHECK_BASH_OPTIONS],
-[
- # Check bash version
- # Extra [ ] to stop m4 mangling
- [ BASH_VER=`$BASH --version | $SED -n -e 's/^.*bash.*ersion *\([0-9.]*\).*$/\1/ p'` ]
- AC_MSG_CHECKING([bash version])
- AC_MSG_RESULT([$BASH_VER])
-
- BASH_MAJOR=`$ECHO $BASH_VER | $CUT -d . -f 1`
- BASH_MINOR=`$ECHO $BASH_VER | $CUT -d . -f 2`
- if test $BASH_MAJOR -lt 3 || (test $BASH_MAJOR -eq 3 && test $BASH_MINOR -lt 2); then
- AC_MSG_ERROR([bash version 3.2 or better is required])
- fi
-
- # Test if bash supports pipefail.
- AC_MSG_CHECKING([if bash supports pipefail])
- if ${BASH} -c 'set -o pipefail'; then
- BASH_ARGS="$BASH_ARGS -o pipefail"
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
-
- AC_MSG_CHECKING([if bash supports errexit (-e)])
- if ${BASH} -e -c 'true'; then
- BASH_ARGS="$BASH_ARGS -e"
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
-
- AC_SUBST(BASH_ARGS)
-])
-
-################################################################################
-#
-# Setup Pandoc
-#
-AC_DEFUN_ONCE([BASIC_SETUP_PANDOC],
-[
- BASIC_PATH_PROGS(PANDOC, pandoc)
-
- PANDOC_MARKDOWN_FLAG="markdown"
- if test -n "$PANDOC"; then
- AC_MSG_CHECKING(if the pandoc smart extension needs to be disabled for markdown)
- if $PANDOC --list-extensions | $GREP -q '\+smart'; then
- AC_MSG_RESULT([yes])
- PANDOC_MARKDOWN_FLAG="markdown-smart"
- else
- AC_MSG_RESULT([no])
- fi
- fi
-
- if test -n "$PANDOC"; then
- ENABLE_PANDOC="true"
- else
- ENABLE_PANDOC="false"
- fi
- AC_SUBST(ENABLE_PANDOC)
- AC_SUBST(PANDOC_MARKDOWN_FLAG)
-])
-
-################################################################################
-#
-# Default make target
-#
-AC_DEFUN_ONCE([BASIC_SETUP_DEFAULT_MAKE_TARGET],
-[
- AC_ARG_WITH(default-make-target, [AS_HELP_STRING([--with-default-make-target],
- [set the default make target @<:@exploded-image@:>@])])
- if test "x$with_default_make_target" = "x" \
- || test "x$with_default_make_target" = "xyes"; then
- DEFAULT_MAKE_TARGET="exploded-image"
- elif test "x$with_default_make_target" = "xno"; then
- AC_MSG_ERROR([--without-default-make-target is not a valid option])
- else
- DEFAULT_MAKE_TARGET="$with_default_make_target"
- fi
-
- AC_SUBST(DEFAULT_MAKE_TARGET)
-])
-
-###############################################################################
-# Setup the default value for LOG=
-#
-AC_DEFUN_ONCE([BASIC_SETUP_DEFAULT_LOG],
-[
- AC_ARG_WITH(log, [AS_HELP_STRING([--with-log],
- [[default vaue for make LOG argument [warn]]])])
- AC_MSG_CHECKING([for default LOG value])
- if test "x$with_log" = x; then
- DEFAULT_LOG=""
- else
- # Syntax for valid LOG options is a bit too complex for it to be worth
- # implementing a test for correctness in configure. Just accept it.
- DEFAULT_LOG=$with_log
- fi
- AC_MSG_RESULT([$DEFAULT_LOG])
- AC_SUBST(DEFAULT_LOG)
-])
-
-###############################################################################
-# Code to run after AC_OUTPUT
-AC_DEFUN_ONCE([BASIC_POST_CONFIG_OUTPUT],
-[
- # Try to move config.log (generated by autoconf) to the configure-support directory.
- if test -e ./config.log; then
- $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
- fi
-
- # Rotate our log file (configure.log)
- if test -e "$OUTPUTDIR/configure.log.old"; then
- $RM -f "$OUTPUTDIR/configure.log.old"
- fi
- if test -e "$OUTPUTDIR/configure.log"; then
- $MV -f "$OUTPUTDIR/configure.log" "$OUTPUTDIR/configure.log.old" 2> /dev/null
- fi
-
- # Move configure.log from current directory to the build output root
- if test -e ./configure.log; then
- $MV -f ./configure.log "$OUTPUTDIR/configure.log" 2> /dev/null
- fi
-
- # Make the compare script executable
- $CHMOD +x $OUTPUTDIR/compare.sh
-])
diff --git a/make/autoconf/boot-jdk.m4 b/make/autoconf/boot-jdk.m4
index 8aa2547f429..841f0e9bbe7 100644
--- a/make/autoconf/boot-jdk.m4
+++ b/make/autoconf/boot-jdk.m4
@@ -97,7 +97,7 @@ AC_DEFUN([BOOTJDK_DO_CHECK],
else
# We're done! :-)
BOOT_JDK_FOUND=yes
- BASIC_FIXUP_PATH(BOOT_JDK)
+ UTIL_FIXUP_PATH(BOOT_JDK)
AC_MSG_CHECKING([for Boot JDK])
AC_MSG_RESULT([$BOOT_JDK])
AC_MSG_CHECKING([Boot JDK version])
@@ -150,7 +150,7 @@ AC_DEFUN([BOOTJDK_CHECK_JAVA_HOME],
[
if test "x$JAVA_HOME" != x; then
JAVA_HOME_PROCESSED="$JAVA_HOME"
- BASIC_FIXUP_PATH(JAVA_HOME_PROCESSED)
+ UTIL_FIXUP_PATH(JAVA_HOME_PROCESSED)
if test ! -d "$JAVA_HOME_PROCESSED"; then
AC_MSG_NOTICE([Your JAVA_HOME points to a non-existing directory!])
else
@@ -177,7 +177,7 @@ AC_DEFUN([BOOTJDK_CHECK_JAVA_IN_PATH_IS_SYMLINK],
# Lets find the JDK/JRE directory by following symbolic links.
# Linux/GNU systems often have links from /usr/bin/java to
# /etc/alternatives/java to the real JDK binary.
- BASIC_REMOVE_SYMBOLIC_LINKS(BINARY)
+ UTIL_REMOVE_SYMBOLIC_LINKS(BINARY)
BOOT_JDK=`dirname "$BINARY"`
BOOT_JDK=`cd "$BOOT_JDK/.."; pwd`
if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then
@@ -241,7 +241,7 @@ AC_DEFUN([BOOTJDK_FIND_BEST_JDK_IN_WINDOWS_VIRTUAL_DIRECTORY],
[
if test "x[$]$1" != x; then
VIRTUAL_DIR="[$]$1/Java"
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VIRTUAL_DIR)
+ UTIL_REWRITE_AS_UNIX_PATH(VIRTUAL_DIR)
BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY($VIRTUAL_DIR)
fi
])
@@ -269,7 +269,7 @@ AC_DEFUN([BOOTJDK_CHECK_WELL_KNOWN_LOCATIONS],
AC_DEFUN([BOOTJDK_CHECK_TOOL_IN_BOOTJDK],
[
# Use user overridden value if available, otherwise locate tool in the Boot JDK.
- BASIC_SETUP_TOOL($1,
+ UTIL_SETUP_TOOL($1,
[
AC_MSG_CHECKING([for $2 in Boot JDK])
$1=$BOOT_JDK/bin/$2
@@ -362,7 +362,7 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
# Try to enable CDS
AC_MSG_CHECKING([for local Boot JDK Class Data Sharing (CDS)])
BOOT_JDK_CDS_ARCHIVE=$CONFIGURESUPPORT_OUTPUTDIR/classes.jsa
- ADD_JVM_ARG_IF_OK([-XX:+UnlockDiagnosticVMOptions -XX:-VerifySharedSpaces -XX:SharedArchiveFile=$BOOT_JDK_CDS_ARCHIVE],boot_jdk_cds_args,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([-XX:+UnlockDiagnosticVMOptions -XX:-VerifySharedSpaces -XX:SharedArchiveFile=$BOOT_JDK_CDS_ARCHIVE],boot_jdk_cds_args,[$JAVA])
if test "x$boot_jdk_cds_args" != x; then
# Try creating a CDS archive
@@ -391,18 +391,18 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS],
AC_MSG_CHECKING([flags for boot jdk java command] )
# Force en-US environment
- ADD_JVM_ARG_IF_OK([-Duser.language=en -Duser.country=US],boot_jdk_jvmargs,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([-Duser.language=en -Duser.country=US],boot_jdk_jvmargs,[$JAVA])
if test "x$BOOTJDK_USE_LOCAL_CDS" = xtrue; then
# Use our own CDS archive
- ADD_JVM_ARG_IF_OK([$boot_jdk_cds_args -Xshare:auto],boot_jdk_jvmargs,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([$boot_jdk_cds_args -Xshare:auto],boot_jdk_jvmargs,[$JAVA])
else
# Otherwise optimistically use the system-wide one, if one is present
- ADD_JVM_ARG_IF_OK([-Xshare:auto],boot_jdk_jvmargs,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([-Xshare:auto],boot_jdk_jvmargs,[$JAVA])
fi
# Finally append user provided options to allow them to override.
- ADD_JVM_ARG_IF_OK([$USER_BOOT_JDK_OPTIONS],boot_jdk_jvmargs,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([$USER_BOOT_JDK_OPTIONS],boot_jdk_jvmargs,[$JAVA])
AC_MSG_RESULT([$boot_jdk_jvmargs])
@@ -413,7 +413,7 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS],
AC_MSG_CHECKING([flags for boot jdk java command for big workloads])
# Starting amount of heap memory.
- ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs_big,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs_big,[$JAVA])
BOOTCYCLE_JVM_ARGS_BIG=-Xms64M
# Maximum amount of heap memory and stack size.
@@ -441,8 +441,8 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS],
STACK_SIZE=$STACK_SIZE_64
JVM_MAX_HEAP=$JVM_HEAP_LIMIT_64
fi
- ADD_JVM_ARG_IF_OK([-Xmx${JVM_MAX_HEAP}M],boot_jdk_jvmargs_big,[$JAVA])
- ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs_big,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([-Xmx${JVM_MAX_HEAP}M],boot_jdk_jvmargs_big,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs_big,[$JAVA])
AC_MSG_RESULT([$boot_jdk_jvmargs_big])
@@ -469,10 +469,10 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS],
AC_MSG_CHECKING([flags for boot jdk java command for small workloads])
# Use serial gc for small short lived tools if possible
- ADD_JVM_ARG_IF_OK([-XX:+UseSerialGC],boot_jdk_jvmargs_small,[$JAVA])
- ADD_JVM_ARG_IF_OK([-Xms32M],boot_jdk_jvmargs_small,[$JAVA])
- ADD_JVM_ARG_IF_OK([-Xmx512M],boot_jdk_jvmargs_small,[$JAVA])
- ADD_JVM_ARG_IF_OK([-XX:TieredStopAtLevel=1],boot_jdk_jvmargs_small,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([-XX:+UseSerialGC],boot_jdk_jvmargs_small,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([-Xms32M],boot_jdk_jvmargs_small,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([-Xmx512M],boot_jdk_jvmargs_small,[$JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([-XX:TieredStopAtLevel=1],boot_jdk_jvmargs_small,[$JAVA])
AC_MSG_RESULT([$boot_jdk_jvmargs_small])
@@ -531,7 +531,7 @@ AC_DEFUN([BOOTJDK_CHECK_BUILD_JDK],
else
# We're done!
BUILD_JDK_FOUND=yes
- BASIC_FIXUP_PATH(BUILD_JDK)
+ UTIL_FIXUP_PATH(BUILD_JDK)
AC_MSG_CHECKING([for Build JDK])
AC_MSG_RESULT([$BUILD_JDK])
AC_MSG_CHECKING([Build JDK version])
diff --git a/make/autoconf/build-performance.m4 b/make/autoconf/build-performance.m4
index dbda3abe597..9ec19c2643c 100644
--- a/make/autoconf/build-performance.m4
+++ b/make/autoconf/build-performance.m4
@@ -180,7 +180,7 @@ AC_DEFUN([BPERF_SETUP_CCACHE],
if test "x$TOOLCHAIN_PATH" != x; then
PATH=$TOOLCHAIN_PATH:$PATH
fi
- BASIC_REQUIRE_PROGS(CCACHE, ccache)
+ UTIL_REQUIRE_PROGS(CCACHE, ccache)
PATH="$OLD_PATH"
CCACHE_VERSION=[`$CCACHE --version | head -n1 | $SED 's/[A-Za-z ]*//'`]
CCACHE_STATUS="Active ($CCACHE_VERSION)"
@@ -288,12 +288,12 @@ AC_DEFUN([BPERF_SETUP_ICECC],
[enable distribted compilation of native code using icecc/icecream @<:@disabled@:>@])])
if test "x${enable_icecc}" = "xyes"; then
- BASIC_REQUIRE_PROGS(ICECC_CMD, icecc)
+ UTIL_REQUIRE_PROGS(ICECC_CMD, icecc)
old_path="$PATH"
# Look for icecc-create-env in some known places
PATH="$PATH:/usr/lib/icecc:/usr/lib64/icecc"
- BASIC_REQUIRE_PROGS(ICECC_CREATE_ENV, icecc-create-env)
+ UTIL_REQUIRE_PROGS(ICECC_CREATE_ENV, icecc-create-env)
# Use icecc-create-env to create a minimal compilation environment that can
# be sent to the other hosts in the icecream cluster.
icecc_create_env_log="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/icecc_create_env.log"
@@ -308,7 +308,7 @@ AC_DEFUN([BPERF_SETUP_ICECC],
elif test "x$TOOLCHAIN_TYPE" = "xclang"; then
# For clang, the icecc compilerwrapper is needed. It usually resides next
# to icecc-create-env.
- BASIC_REQUIRE_PROGS(ICECC_WRAPPER, compilerwrapper)
+ UTIL_REQUIRE_PROGS(ICECC_WRAPPER, compilerwrapper)
BPERF_RUN_ICECC_CREATE_ENV([--clang ${CC} ${ICECC_WRAPPER}], ${icecc_create_env_log})
else
AC_MSG_ERROR([Can only create icecc compiler packages for toolchain types gcc and clang])
@@ -442,7 +442,7 @@ AC_DEFUN_ONCE([BPERF_SETUP_SMART_JAVAC],
if test "$MX_VALUE" -lt "512"; then
MX_VALUE=512
fi
- ADD_JVM_ARG_IF_OK([-Xms${MS_VALUE}M -Xmx${MX_VALUE}M],SJAVAC_SERVER_JAVA_FLAGS,[$SJAVAC_SERVER_JAVA])
+ UTIL_ADD_JVM_ARG_IF_OK([-Xms${MS_VALUE}M -Xmx${MX_VALUE}M],SJAVAC_SERVER_JAVA_FLAGS,[$SJAVAC_SERVER_JAVA])
AC_SUBST(SJAVAC_SERVER_JAVA_FLAGS)
AC_ARG_ENABLE([sjavac], [AS_HELP_STRING([--enable-sjavac],
diff --git a/make/autoconf/buildjdk-spec.gmk.in b/make/autoconf/buildjdk-spec.gmk.in
index 4cd3165247b..07d2b0b1503 100644
--- a/make/autoconf/buildjdk-spec.gmk.in
+++ b/make/autoconf/buildjdk-spec.gmk.in
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2015, 2020, 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
@@ -96,6 +96,7 @@ BUILD_GTEST := false
JVM_VARIANTS := server
JVM_VARIANT_MAIN := server
+JVM_FEATURES_server := cds compiler1 compiler2 g1gc serialgc
# Some users still set EXTRA_*FLAGS on the make command line. Must
# make sure to override that when building buildjdk.
diff --git a/make/autoconf/configure.ac b/make/autoconf/configure.ac
index 7ba3ae011cf..decf29accd3 100644
--- a/make/autoconf/configure.ac
+++ b/make/autoconf/configure.ac
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2020, 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
@@ -36,10 +36,20 @@ AC_INIT(OpenJDK, openjdk, build-dev@openjdk.java.net,,http://openjdk.java.net)
AC_CONFIG_AUX_DIR([$TOPDIR/make/autoconf/build-aux])
m4_include([build-aux/pkg.m4])
+AC_DEFUN_ONCE([CUSTOM_EARLY_HOOK])
+AC_DEFUN_ONCE([CUSTOM_LATE_HOOK])
+AC_DEFUN_ONCE([CUSTOM_CONFIG_OUTPUT_GENERATED_HOOK])
+AC_DEFUN_ONCE([CUSTOM_SUMMARY_AND_WARNINGS_HOOK])
+
+# This line needs to be here, verbatim, after the dummy hook definitions but
+# before all includes. It is replaced with custom functionality when building
+# custom sources.
+#CUSTOM_AUTOCONF_INCLUDE
+
# Include these first...
-m4_include([basics.m4])
-m4_include([basics_windows.m4])
+m4_include([util.m4])
# ... then the rest
+m4_include([basic.m4])
m4_include([boot-jdk.m4])
m4_include([build-performance.m4])
m4_include([flags.m4])
@@ -47,21 +57,11 @@ m4_include([help.m4])
m4_include([hotspot.m4])
m4_include([jdk-options.m4])
m4_include([jdk-version.m4])
+m4_include([jvm-features.m4])
m4_include([libraries.m4])
m4_include([platform.m4])
m4_include([source-dirs.m4])
m4_include([toolchain.m4])
-m4_include([toolchain_windows.m4])
-
-AC_DEFUN_ONCE([CUSTOM_EARLY_HOOK])
-AC_DEFUN_ONCE([CUSTOM_LATE_HOOK])
-AC_DEFUN_ONCE([CUSTOM_CONFIG_OUTPUT_GENERATED_HOOK])
-AC_DEFUN_ONCE([CUSTOM_SUMMARY_AND_WARNINGS_HOOK])
-
-# This line needs to be here, verbatim, after all includes and the dummy hook
-# definitions. It is replaced with custom functionality when building
-# custom sources.
-#CUSTOM_AUTOCONF_INCLUDE
###############################################################################
#
@@ -203,12 +203,6 @@ JDKOPT_SETUP_CODE_COVERAGE
# AddressSanitizer
JDKOPT_SETUP_ADDRESS_SANITIZER
-# Need toolchain to setup dtrace
-HOTSPOT_SETUP_DTRACE
-HOTSPOT_ENABLE_DISABLE_AOT
-HOTSPOT_ENABLE_DISABLE_CDS
-HOTSPOT_ENABLE_DISABLE_GTEST
-
###############################################################################
#
# Check dependencies for external and internal libraries.
@@ -221,9 +215,17 @@ BASIC_COMPILE_FIXPATH
LIB_DETERMINE_DEPENDENCIES
LIB_SETUP_LIBRARIES
-# Hotspot setup depends on lib checks.
+###############################################################################
+#
+# Setup hotspot and JVM features (needs toolchain).
+#
+###############################################################################
-HOTSPOT_SETUP_JVM_FEATURES
+JVM_FEATURES_PARSE_OPTIONS
+JVM_FEATURES_SETUP
+
+HOTSPOT_ENABLE_DISABLE_GTEST
+HOTSPOT_SETUP_MISC
###############################################################################
#
@@ -277,9 +279,6 @@ BASIC_TEST_USABILITY_ISSUES
# At the end, call the custom hook. (Dummy macro if no custom sources available)
CUSTOM_LATE_HOOK
-# This needs to be done after CUSTOM_LATE_HOOK since we can setup custom features.
-HOTSPOT_FINALIZE_JVM_FEATURES
-
# Did user specify any unknown variables?
BASIC_CHECK_LEFTOVER_OVERRIDDEN
diff --git a/make/autoconf/flags.m4 b/make/autoconf/flags.m4
index 131ce7a6338..582cd65d0df 100644
--- a/make/autoconf/flags.m4
+++ b/make/autoconf/flags.m4
@@ -430,7 +430,7 @@ AC_DEFUN([FLAGS_SETUP_FLAGS],
# IF_FALSE: [RUN-IF-FALSE])
# ------------------------------------------------------------
# Check that the C compiler supports an argument
-BASIC_DEFUN_NAMED([FLAGS_C_COMPILER_CHECK_ARGUMENTS],
+UTIL_DEFUN_NAMED([FLAGS_C_COMPILER_CHECK_ARGUMENTS],
[*ARGUMENT IF_TRUE IF_FALSE PREFIX], [$@],
[
AC_MSG_CHECKING([if ARG_PREFIX[CC] supports "ARG_ARGUMENT"])
@@ -461,7 +461,7 @@ BASIC_DEFUN_NAMED([FLAGS_C_COMPILER_CHECK_ARGUMENTS],
# IF_FALSE: [RUN-IF-FALSE])
# ------------------------------------------------------------
# Check that the C++ compiler supports an argument
-BASIC_DEFUN_NAMED([FLAGS_CXX_COMPILER_CHECK_ARGUMENTS],
+UTIL_DEFUN_NAMED([FLAGS_CXX_COMPILER_CHECK_ARGUMENTS],
[*ARGUMENT IF_TRUE IF_FALSE PREFIX], [$@],
[
AC_MSG_CHECKING([if ARG_PREFIX[CXX] supports "ARG_ARGUMENT"])
@@ -492,7 +492,7 @@ BASIC_DEFUN_NAMED([FLAGS_CXX_COMPILER_CHECK_ARGUMENTS],
# IF_FALSE: [RUN-IF-FALSE])
# ------------------------------------------------------------
# Check that the C and C++ compilers support an argument
-BASIC_DEFUN_NAMED([FLAGS_COMPILER_CHECK_ARGUMENTS],
+UTIL_DEFUN_NAMED([FLAGS_COMPILER_CHECK_ARGUMENTS],
[*ARGUMENT IF_TRUE IF_FALSE PREFIX], [$@],
[
FLAGS_C_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARG_ARGUMENT],
@@ -524,7 +524,7 @@ BASIC_DEFUN_NAMED([FLAGS_COMPILER_CHECK_ARGUMENTS],
# IF_FALSE: [RUN-IF-FALSE])
# ------------------------------------------------------------
# Check that the linker support an argument
-BASIC_DEFUN_NAMED([FLAGS_LINKER_CHECK_ARGUMENTS],
+UTIL_DEFUN_NAMED([FLAGS_LINKER_CHECK_ARGUMENTS],
[*ARGUMENT IF_TRUE IF_FALSE], [$@],
[
AC_MSG_CHECKING([if linker supports "ARG_ARGUMENT"])
diff --git a/make/autoconf/help.m4 b/make/autoconf/help.m4
index 36b00c0b492..7507cd4c93e 100644
--- a/make/autoconf/help.m4
+++ b/make/autoconf/help.m4
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2020, 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
@@ -180,21 +180,25 @@ AC_DEFUN_ONCE([HELP_PRINT_ADDITIONAL_HELP_AND_EXIT],
if test "x$CONFIGURE_PRINT_ADDITIONAL_HELP" != x; then
# Print available toolchains
- $PRINTF "The following toolchains are available as arguments to --with-toolchain-type.\n"
- $PRINTF "Which are valid to use depends on the build platform.\n"
+ $PRINTF "The following toolchains are valid as arguments to --with-toolchain-type.\n"
+ $PRINTF "Which are available to use depends on the build platform.\n"
for toolchain in $VALID_TOOLCHAINS_all; do
# Use indirect variable referencing
toolchain_var_name=TOOLCHAIN_DESCRIPTION_$toolchain
TOOLCHAIN_DESCRIPTION=${!toolchain_var_name}
- $PRINTF " %-10s %s\n" $toolchain "$TOOLCHAIN_DESCRIPTION"
+ $PRINTF " %-22s %s\n" $toolchain "$TOOLCHAIN_DESCRIPTION"
done
$PRINTF "\n"
- # Print available jvm features
- $PRINTF "The following JVM features are available as arguments to --with-jvm-features.\n"
- $PRINTF "Which are valid to use depends on the target platform.\n "
- $PRINTF "%s " $VALID_JVM_FEATURES
- $PRINTF "\n"
+ # Print available JVM features
+ $PRINTF "The following JVM features are valid as arguments to --with-jvm-features.\n"
+ $PRINTF "Which are available to use depends on the environment and JVM variant.\n"
+ m4_foreach(FEATURE, m4_split(jvm_features_valid), [
+ # Create an m4 variable containing the description for FEATURE.
+ m4_define(FEATURE_DESCRIPTION, [jvm_feature_desc_]m4_translit(FEATURE, -, _))
+ $PRINTF " %-22s %s\n" FEATURE "FEATURE_DESCRIPTION"
+ m4_undefine([FEATURE_DESCRIPTION])
+ ])
# And now exit directly
exit 0
diff --git a/make/autoconf/hotspot.m4 b/make/autoconf/hotspot.m4
index d9005341058..91507bc0261 100644
--- a/make/autoconf/hotspot.m4
+++ b/make/autoconf/hotspot.m4
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2020, 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
@@ -23,14 +23,6 @@
# questions.
#
-# All valid JVM features, regardless of platform
-VALID_JVM_FEATURES="compiler1 compiler2 zero minimal dtrace jvmti jvmci \
- graal vm-structs jni-check services management epsilongc g1gc parallelgc serialgc shenandoahgc zgc nmt cds \
- static-build link-time-opt aot jfr"
-
-# Deprecated JVM features (these are ignored, but with a warning)
-DEPRECATED_JVM_FEATURES="trace cmsgc"
-
# All valid JVM variants
VALID_JVM_VARIANTS="server client minimal core zero custom"
@@ -46,32 +38,6 @@ VALID_JVM_VARIANTS="server client minimal core zero custom"
AC_DEFUN([HOTSPOT_CHECK_JVM_VARIANT],
[ [ [[ " $JVM_VARIANTS " =~ " $1 " ]] ] ])
-###############################################################################
-# Check if the specified JVM feature is enabled. To be used in shell if
-# constructs, like this:
-# if HOTSPOT_CHECK_JVM_FEATURE(jvmti); then
-#
-# Only valid to use after HOTSPOT_SETUP_JVM_FEATURES has setup features.
-
-# Definition kept in one line to allow inlining in if statements.
-# Additional [] needed to keep m4 from mangling shell constructs.
-AC_DEFUN([HOTSPOT_CHECK_JVM_FEATURE],
-[ [ [[ " $JVM_FEATURES " =~ " $1 " ]] ] ])
-
-###############################################################################
-# Check if the specified JVM feature is explicitly disabled. To be used in
-# shell if constructs, like this:
-# if HOTSPOT_IS_JVM_FEATURE_DISABLED(jvmci); then
-#
-# This function is internal to hotspot.m4, and is only used when constructing
-# the valid set of enabled JVM features. Users outside of hotspot.m4 should just
-# use HOTSPOT_CHECK_JVM_FEATURE to check if a feature is enabled or not.
-
-# Definition kept in one line to allow inlining in if statements.
-# Additional [] needed to keep m4 from mangling shell constructs.
-AC_DEFUN([HOTSPOT_IS_JVM_FEATURE_DISABLED],
-[ [ [[ " $DISABLED_JVM_FEATURES " =~ " $1 " ]] ] ])
-
###############################################################################
# Check which variants of the JVM that we want to build. Available variants are:
# server: normal interpreter, and a tiered C1/C2 compiler
@@ -84,7 +50,8 @@ AC_DEFUN([HOTSPOT_IS_JVM_FEATURE_DISABLED],
AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_VARIANTS],
[
AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants],
- [JVM variants (separated by commas) to build (server,client,minimal,core,zero,custom) @<:@server@:>@])])
+ [JVM variants to build, separated by commas (server client minimal core
+ zero custom) @<:@server@:>@])])
if test "x$with_jvm_variants" = x; then
with_jvm_variants="server"
@@ -108,7 +75,8 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_VARIANTS],
AC_MSG_RESULT([$JVM_VARIANTS])
# Check that the selected variants are valid
- BASIC_GET_NON_MATCHING_VALUES(INVALID_VARIANTS, $JVM_VARIANTS, $VALID_JVM_VARIANTS)
+ UTIL_GET_NON_MATCHING_VALUES(INVALID_VARIANTS, $JVM_VARIANTS, \
+ $VALID_JVM_VARIANTS)
if test "x$INVALID_VARIANTS" != x; then
AC_MSG_NOTICE([Unknown variant(s) specified: "$INVALID_VARIANTS"])
AC_MSG_NOTICE([The available JVM variants are: "$VALID_JVM_VARIANTS"])
@@ -117,9 +85,11 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_VARIANTS],
# All "special" variants share the same output directory ("server")
VALID_MULTIPLE_JVM_VARIANTS="server client minimal"
- BASIC_GET_NON_MATCHING_VALUES(INVALID_MULTIPLE_VARIANTS, $JVM_VARIANTS, $VALID_MULTIPLE_JVM_VARIANTS)
- if test "x$INVALID_MULTIPLE_VARIANTS" != x && test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = xtrue; then
- AC_MSG_ERROR([You cannot build multiple variants with anything else than $VALID_MULTIPLE_JVM_VARIANTS.])
+ UTIL_GET_NON_MATCHING_VALUES(INVALID_MULTIPLE_VARIANTS, $JVM_VARIANTS, \
+ $VALID_MULTIPLE_JVM_VARIANTS)
+ if test "x$INVALID_MULTIPLE_VARIANTS" != x && \
+ test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = xtrue; then
+ AC_MSG_ERROR([You can only build multiple variants using these variants: '$VALID_MULTIPLE_JVM_VARIANTS'])
fi
# The "main" variant is the one used by other libs to link against during the
@@ -139,473 +109,9 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_VARIANTS],
AC_SUBST(JVM_VARIANTS)
AC_SUBST(VALID_JVM_VARIANTS)
AC_SUBST(JVM_VARIANT_MAIN)
-
- if HOTSPOT_CHECK_JVM_VARIANT(zero); then
- # zero behaves as a platform and rewrites these values. This is really weird. :(
- # We are guaranteed that we do not build any other variants when building zero.
- HOTSPOT_TARGET_CPU=zero
- HOTSPOT_TARGET_CPU_ARCH=zero
- fi
])
###############################################################################
-# Check if dtrace should be enabled and has all prerequisites present.
-#
-AC_DEFUN_ONCE([HOTSPOT_SETUP_DTRACE],
-[
- # Test for dtrace dependencies
- AC_ARG_ENABLE([dtrace], [AS_HELP_STRING([--enable-dtrace@<:@=yes/no/auto@:>@],
- [enable dtrace. Default is auto, where dtrace is enabled if all dependencies
- are present.])])
-
- DTRACE_DEP_MISSING=false
-
- AC_MSG_CHECKING([for dtrace tool])
- if test "x$DTRACE" != "x" && test -x "$DTRACE"; then
- AC_MSG_RESULT([$DTRACE])
- else
- AC_MSG_RESULT([not found, cannot build dtrace])
- DTRACE_DEP_MISSING=true
- fi
-
- AC_CHECK_HEADERS([sys/sdt.h], [DTRACE_HEADERS_OK=yes],[DTRACE_HEADERS_OK=no])
- if test "x$DTRACE_HEADERS_OK" != "xyes"; then
- DTRACE_DEP_MISSING=true
- fi
-
- AC_MSG_CHECKING([if dtrace should be built])
- if test "x$enable_dtrace" = "xyes"; then
- if test "x$DTRACE_DEP_MISSING" = "xtrue"; then
- AC_MSG_RESULT([no, missing dependencies])
- HELP_MSG_MISSING_DEPENDENCY([dtrace])
- AC_MSG_ERROR([Cannot enable dtrace with missing dependencies. See above. $HELP_MSG])
- else
- INCLUDE_DTRACE=true
- AC_MSG_RESULT([yes, forced])
- fi
- elif test "x$enable_dtrace" = "xno"; then
- INCLUDE_DTRACE=false
- AC_MSG_RESULT([no, forced])
- elif test "x$enable_dtrace" = "xauto" || test "x$enable_dtrace" = "x"; then
- if test "x$DTRACE_DEP_MISSING" = "xtrue"; then
- INCLUDE_DTRACE=false
- AC_MSG_RESULT([no, missing dependencies])
- else
- INCLUDE_DTRACE=true
- AC_MSG_RESULT([yes, dependencies present])
- fi
- else
- AC_MSG_ERROR([Invalid value for --enable-dtrace: $enable_dtrace])
- fi
-])
-
-################################################################################
-# Check if AOT should be enabled
-#
-AC_DEFUN_ONCE([HOTSPOT_ENABLE_DISABLE_AOT],
-[
- AC_ARG_ENABLE([aot], [AS_HELP_STRING([--enable-aot@<:@=yes/no/auto@:>@],
- [enable ahead of time compilation feature. Default is auto, where aot is enabled if all dependencies are present.])])
-
- if test "x$enable_aot" = "x" || test "x$enable_aot" = "xauto"; then
- ENABLE_AOT="true"
- elif test "x$enable_aot" = "xyes"; then
- ENABLE_AOT="true"
- elif test "x$enable_aot" = "xno"; then
- ENABLE_AOT="false"
- else
- AC_MSG_ERROR([Invalid value for --enable-aot: $enable_aot])
- fi
-
- if test "x$ENABLE_AOT" = "xtrue"; then
- # Only enable AOT on X64 platforms.
- if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
- if test -e "${TOPDIR}/src/jdk.aot"; then
- if test -e "${TOPDIR}/src/jdk.internal.vm.compiler"; then
- ENABLE_AOT="true"
- else
- ENABLE_AOT="false"
- if test "x$enable_aot" = "xyes"; then
- AC_MSG_ERROR([Cannot build AOT without src/jdk.internal.vm.compiler sources. Remove --enable-aot.])
- fi
- fi
- else
- ENABLE_AOT="false"
- if test "x$enable_aot" = "xyes"; then
- AC_MSG_ERROR([Cannot build AOT without src/jdk.aot sources. Remove --enable-aot.])
- fi
- fi
- else
- ENABLE_AOT="false"
- if test "x$enable_aot" = "xyes"; then
- AC_MSG_ERROR([AOT is currently only supported on x86_64 and aarch64. Remove --enable-aot.])
- fi
- fi
- fi
-
- AC_SUBST(ENABLE_AOT)
-])
-
-################################################################################
-# Allow to disable CDS
-#
-AC_DEFUN_ONCE([HOTSPOT_ENABLE_DISABLE_CDS],
-[
- AC_ARG_ENABLE([cds], [AS_HELP_STRING([--enable-cds@<:@=yes/no/auto@:>@],
- [enable class data sharing feature in non-minimal VM. Default is auto, where cds is enabled if supported on the platform.])])
-
- if test "x$enable_cds" = "x" || test "x$enable_cds" = "xauto"; then
- ENABLE_CDS="true"
- elif test "x$enable_cds" = "xyes"; then
- ENABLE_CDS="true"
- elif test "x$enable_cds" = "xno"; then
- ENABLE_CDS="false"
- else
- AC_MSG_ERROR([Invalid value for --enable-cds: $enable_cds])
- fi
-
- AC_SUBST(ENABLE_CDS)
-])
-
-###############################################################################
-# Set up all JVM features for each JVM variant.
-#
-AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
-[
- # Prettify the VALID_JVM_FEATURES string
- BASIC_SORT_LIST(VALID_JVM_FEATURES, $VALID_JVM_FEATURES)
-
- # The user can in some cases supply additional jvm features. For the custom
- # variant, this defines the entire variant.
- AC_ARG_WITH([jvm-features], [AS_HELP_STRING([--with-jvm-features],
- [JVM features to enable (foo) or disable (-foo), separated by comma. Use '--help' to show possible values @<:@none@:>@])])
- if test "x$with_jvm_features" != x; then
- AC_MSG_CHECKING([user specified JVM feature list])
- USER_JVM_FEATURE_LIST=`$ECHO $with_jvm_features | $SED -e 's/,/ /g'`
- AC_MSG_RESULT([$user_jvm_feature_list])
- # These features will be added to all variant defaults
- JVM_FEATURES=`$ECHO $USER_JVM_FEATURE_LIST | $AWK '{ for (i=1; i<=NF; i++) if (!match($i, /^-.*/)) printf("%s ", $i) }'`
- # These features will be removed from all variant defaults
- DISABLED_JVM_FEATURES=`$ECHO $USER_JVM_FEATURE_LIST | $AWK '{ for (i=1; i<=NF; i++) if (match($i, /^-.*/)) printf("%s ", substr($i, 2))}'`
-
- # Verify that the user has provided valid features
- BASIC_GET_NON_MATCHING_VALUES(INVALID_FEATURES, $JVM_FEATURES $DISABLED_JVM_FEATURES, $VALID_JVM_FEATURES $DEPRECATED_JVM_FEATURES)
- if test "x$INVALID_FEATURES" != x; then
- AC_MSG_NOTICE([Unknown JVM features specified: "$INVALID_FEATURES"])
- AC_MSG_NOTICE([The available JVM features are: "$VALID_JVM_FEATURES"])
- AC_MSG_ERROR([Cannot continue])
- fi
-
- # Check if the user has provided deprecated features
- BASIC_GET_MATCHING_VALUES(DEPRECATED_FEATURES, $JVM_FEATURES $DISABLED_JVM_FEATURES, $DEPRECATED_JVM_FEATURES)
- if test "x$DEPRECATED_FEATURES" != x; then
- AC_MSG_WARN([Deprecated JVM features specified (will be ignored): "$DEPRECATED_FEATURES"])
- # Filter out deprecated features
- BASIC_GET_NON_MATCHING_VALUES(JVM_FEATURES, $JVM_FEATURES, $DEPRECATED_FEATURES)
- BASIC_GET_NON_MATCHING_VALUES(DISABLED_JVM_FEATURES, $DISABLED_JVM_FEATURES, $DEPRECATED_FEATURES)
- fi
-
- fi
-
- # Override hotspot cpu definitions for ARM platforms
- if test "x$OPENJDK_TARGET_CPU" = xarm; then
- HOTSPOT_TARGET_CPU=arm_32
- HOTSPOT_TARGET_CPU_DEFINE="ARM32"
- fi
-
- # Verify that dependencies are met for explicitly set features.
- if HOTSPOT_CHECK_JVM_FEATURE(jvmti) && ! HOTSPOT_CHECK_JVM_FEATURE(services); then
- AC_MSG_ERROR([Specified JVM feature 'jvmti' requires feature 'services'])
- fi
-
- if HOTSPOT_CHECK_JVM_FEATURE(management) && ! HOTSPOT_CHECK_JVM_FEATURE(nmt); then
- AC_MSG_ERROR([Specified JVM feature 'management' requires feature 'nmt'])
- fi
-
- if HOTSPOT_CHECK_JVM_FEATURE(jvmci) && ! (HOTSPOT_CHECK_JVM_FEATURE(compiler1) || HOTSPOT_CHECK_JVM_FEATURE(compiler2)); then
- AC_MSG_ERROR([Specified JVM feature 'jvmci' requires feature 'compiler2' or 'compiler1'])
- fi
-
- # Enable JFR by default, except for Zero, linux-sparcv9 and on minimal.
- if ! HOTSPOT_CHECK_JVM_VARIANT(zero); then
- if test "x$OPENJDK_TARGET_OS" != xaix; then
- if test "x$OPENJDK_TARGET_OS" != xlinux || test "x$OPENJDK_TARGET_CPU" != xsparcv9; then
- NON_MINIMAL_FEATURES="$NON_MINIMAL_FEATURES jfr"
- fi
- fi
- fi
-
- # Only enable Shenandoah on supported arches
- AC_MSG_CHECKING([if shenandoah can be built])
- if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86" || test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
- AC_MSG_RESULT([yes])
- else
- DISABLED_JVM_FEATURES="$DISABLED_JVM_FEATURES shenandoahgc"
- AC_MSG_RESULT([no, platform not supported])
- fi
-
- # Only enable ZGC on supported platforms
- if (test "x$OPENJDK_TARGET_OS" = "xwindows" && test "x$OPENJDK_TARGET_CPU" = "xx86_64"); then
- AC_MSG_CHECKING([if zgc can be built on windows])
- AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([[#include ]],
- [[struct MEM_EXTENDED_PARAMETER x;]])
- ],
- [
- AC_MSG_RESULT([yes])
- CAN_BUILD_ZGC_ON_WINDOWS="yes"
- ],
- [
- AC_MSG_RESULT([no, missing required APIs])
- CAN_BUILD_ZGC_ON_WINDOWS="no"
- ]
- )
- fi
-
- AC_MSG_CHECKING([if zgc can be built])
- if (test "x$OPENJDK_TARGET_OS" = "xlinux" && test "x$OPENJDK_TARGET_CPU" = "xx86_64") || \
- (test "x$OPENJDK_TARGET_OS" = "xlinux" && test "x$OPENJDK_TARGET_CPU" = "xaarch64") || \
- (test "x$CAN_BUILD_ZGC_ON_WINDOWS" = "xyes") || \
- (test "x$OPENJDK_TARGET_OS" = "xmacosx" && test "x$OPENJDK_TARGET_CPU" = "xx86_64"); then
- AC_MSG_RESULT([yes])
- else
- DISABLED_JVM_FEATURES="$DISABLED_JVM_FEATURES zgc"
- AC_MSG_RESULT([no, platform not supported])
- fi
-
- # Disable unsupported GCs for Zero
- if HOTSPOT_CHECK_JVM_VARIANT(zero); then
- DISABLED_JVM_FEATURES="$DISABLED_JVM_FEATURES epsilongc g1gc zgc shenandoahgc"
- fi
-
- # Turn on additional features based on other parts of configure
- if test "x$INCLUDE_DTRACE" = "xtrue"; then
- JVM_FEATURES="$JVM_FEATURES dtrace"
- else
- if HOTSPOT_CHECK_JVM_FEATURE(dtrace); then
- AC_MSG_ERROR([To enable dtrace, you must use --enable-dtrace])
- fi
- fi
-
- if test "x$STATIC_BUILD" = "xtrue"; then
- JVM_FEATURES="$JVM_FEATURES static-build"
- else
- if HOTSPOT_CHECK_JVM_FEATURE(static-build); then
- AC_MSG_ERROR([To enable static-build, you must use --enable-static-build])
- fi
- fi
-
- if ! HOTSPOT_CHECK_JVM_VARIANT(zero); then
- if HOTSPOT_CHECK_JVM_FEATURE(zero); then
- AC_MSG_ERROR([To enable zero, you must use --with-jvm-variants=zero])
- fi
- fi
-
- AC_MSG_CHECKING([if jvmci module jdk.internal.vm.ci should be built])
- # Check if jvmci is diabled
- if HOTSPOT_IS_JVM_FEATURE_DISABLED(jvmci); then
- AC_MSG_RESULT([no, forced])
- JVM_FEATURES_jvmci=""
- INCLUDE_JVMCI="false"
- else
- # Only enable jvmci on x86_64 and aarch64
- if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
- test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
- AC_MSG_RESULT([yes])
- JVM_FEATURES_jvmci="jvmci"
- INCLUDE_JVMCI="true"
- else
- AC_MSG_RESULT([no])
- JVM_FEATURES_jvmci=""
- INCLUDE_JVMCI="false"
- if HOTSPOT_CHECK_JVM_FEATURE(jvmci); then
- AC_MSG_ERROR([JVMCI is currently not supported on this platform.])
- fi
- fi
- fi
-
- AC_SUBST(INCLUDE_JVMCI)
-
- AC_MSG_CHECKING([if graal module jdk.internal.vm.compiler should be built])
- # Check if graal is diabled
- if HOTSPOT_IS_JVM_FEATURE_DISABLED(graal); then
- AC_MSG_RESULT([no, forced])
- JVM_FEATURES_graal=""
- INCLUDE_GRAAL="false"
- else
- if HOTSPOT_CHECK_JVM_FEATURE(graal); then
- AC_MSG_RESULT([yes, forced])
- if test "x$JVM_FEATURES_jvmci" != "xjvmci" ; then
- AC_MSG_ERROR([Specified JVM feature 'graal' requires feature 'jvmci'])
- fi
- JVM_FEATURES_graal="graal"
- INCLUDE_GRAAL="true"
- else
- # By default enable graal build on x64 or where AOT is available.
- # graal build requires jvmci.
- if test "x$JVM_FEATURES_jvmci" = "xjvmci" && \
- (test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
- test "x$ENABLE_AOT" = "xtrue") ; then
- AC_MSG_RESULT([yes])
- JVM_FEATURES_graal="graal"
- INCLUDE_GRAAL="true"
- else
- AC_MSG_RESULT([no])
- JVM_FEATURES_graal=""
- INCLUDE_GRAAL="false"
- fi
- fi
- fi
-
- AC_SUBST(INCLUDE_GRAAL)
-
- # Disable aot with '--with-jvm-features=-aot'
- if HOTSPOT_IS_JVM_FEATURE_DISABLED(aot); then
- ENABLE_AOT="false"
- fi
-
- AC_MSG_CHECKING([if aot should be enabled])
- if test "x$ENABLE_AOT" = "xtrue"; then
- if test "x$JVM_FEATURES_graal" != "xgraal"; then
- if test "x$enable_aot" = "xyes" || HOTSPOT_CHECK_JVM_FEATURE(aot); then
- AC_MSG_RESULT([yes, forced])
- AC_MSG_ERROR([Specified JVM feature 'aot' requires feature 'graal'])
- else
- AC_MSG_RESULT([no])
- fi
- JVM_FEATURES_aot=""
- ENABLE_AOT="false"
- else
- if test "x$enable_aot" = "xyes" || HOTSPOT_CHECK_JVM_FEATURE(aot); then
- AC_MSG_RESULT([yes, forced])
- else
- AC_MSG_RESULT([yes])
- fi
- JVM_FEATURES_aot="aot"
- fi
- else
- if test "x$enable_aot" = "xno" || HOTSPOT_IS_JVM_FEATURE_DISABLED(aot); then
- AC_MSG_RESULT([no, forced])
- else
- AC_MSG_RESULT([no])
- fi
- JVM_FEATURES_aot=""
- if HOTSPOT_CHECK_JVM_FEATURE(aot); then
- AC_MSG_ERROR([To enable aot, you must use --enable-aot])
- fi
- fi
-
- AC_SUBST(ENABLE_AOT)
-
- if test "x$OPENJDK_TARGET_CPU" = xarm ; then
- # Default to use link time optimizations on minimal on arm
- JVM_FEATURES_link_time_opt="link-time-opt"
- else
- JVM_FEATURES_link_time_opt=""
- fi
-
- # All variants but minimal (and custom) get these features
- NON_MINIMAL_FEATURES="$NON_MINIMAL_FEATURES g1gc parallelgc serialgc epsilongc shenandoahgc jni-check jvmti management nmt services vm-structs zgc"
-
- # Disable CDS on AIX.
- if test "x$OPENJDK_TARGET_OS" = "xaix"; then
- ENABLE_CDS="false"
- if test "x$enable_cds" = "xyes"; then
- AC_MSG_ERROR([CDS is currently not supported on AIX. Remove --enable-cds.])
- fi
- fi
-
- # Disable CDS if user requested it with --with-jvm-features=-cds.
- if HOTSPOT_IS_JVM_FEATURE_DISABLED(cds); then
- ENABLE_CDS="false"
- if test "x$enable_cds" = "xyes"; then
- AC_MSG_ERROR([CDS was disabled by --with-jvm-features=-cds. Remove --enable-cds.])
- fi
- fi
-
- if ! HOTSPOT_CHECK_JVM_VARIANT(server) && ! HOTSPOT_CHECK_JVM_VARIANT(client); then
- # ..except when the user explicitely requested it with --enable-jvm-features
- if ! HOTSPOT_CHECK_JVM_FEATURE(cds); then
- ENABLE_CDS="false"
- if test "x$enable_cds" = "xyes"; then
- AC_MSG_ERROR([CDS not implemented for variants zero, minimal, core. Remove --enable-cds.])
- fi
- fi
- fi
-
- AC_MSG_CHECKING([if cds should be enabled])
- if test "x$ENABLE_CDS" = "xtrue"; then
- if test "x$enable_cds" = "xyes"; then
- AC_MSG_RESULT([yes, forced])
- else
- AC_MSG_RESULT([yes])
- fi
- NON_MINIMAL_FEATURES="$NON_MINIMAL_FEATURES cds"
- else
- if test "x$enable_cds" = "xno"; then
- AC_MSG_RESULT([no, forced])
- else
- AC_MSG_RESULT([no])
- fi
- fi
-
- # Enable features depending on variant.
- JVM_FEATURES_server="compiler1 compiler2 $NON_MINIMAL_FEATURES $JVM_FEATURES $JVM_FEATURES_jvmci $JVM_FEATURES_aot $JVM_FEATURES_graal"
- JVM_FEATURES_client="compiler1 $NON_MINIMAL_FEATURES $JVM_FEATURES"
- JVM_FEATURES_core="$NON_MINIMAL_FEATURES $JVM_FEATURES"
- JVM_FEATURES_minimal="compiler1 minimal serialgc $JVM_FEATURES $JVM_FEATURES_link_time_opt"
- JVM_FEATURES_zero="zero $NON_MINIMAL_FEATURES $JVM_FEATURES"
- JVM_FEATURES_custom="$JVM_FEATURES"
-
- AC_SUBST(JVM_FEATURES_server)
- AC_SUBST(JVM_FEATURES_client)
- AC_SUBST(JVM_FEATURES_core)
- AC_SUBST(JVM_FEATURES_minimal)
- AC_SUBST(JVM_FEATURES_zero)
- AC_SUBST(JVM_FEATURES_custom)
-
- # Used for verification of Makefiles by check-jvm-feature
- AC_SUBST(VALID_JVM_FEATURES)
-
- # --with-cpu-port is no longer supported
- BASIC_DEPRECATED_ARG_WITH(with-cpu-port)
-])
-
-###############################################################################
-# Finalize JVM features once all setup is complete, including custom setup.
-#
-AC_DEFUN_ONCE([HOTSPOT_FINALIZE_JVM_FEATURES],
-[
- for variant in $JVM_VARIANTS; do
- AC_MSG_CHECKING([JVM features for JVM variant '$variant'])
- features_var_name=JVM_FEATURES_$variant
- JVM_FEATURES_FOR_VARIANT=${!features_var_name}
-
- # Filter out user-requested disabled features
- BASIC_GET_NON_MATCHING_VALUES(JVM_FEATURES_FOR_VARIANT, $JVM_FEATURES_FOR_VARIANT, $DISABLED_JVM_FEATURES)
-
- # Keep feature lists sorted and free of duplicates
- BASIC_SORT_LIST(JVM_FEATURES_FOR_VARIANT, $JVM_FEATURES_FOR_VARIANT)
-
- # Update real feature set variable
- eval $features_var_name='"'$JVM_FEATURES_FOR_VARIANT'"'
- AC_MSG_RESULT(["$JVM_FEATURES_FOR_VARIANT"])
-
- # Verify that we have at least one gc selected
- GC_FEATURES=`$ECHO $JVM_FEATURES_FOR_VARIANT | $GREP gc`
- if test "x$GC_FEATURES" = x; then
- AC_MSG_WARN([Invalid JVM features: No gc selected for variant $variant.])
- fi
-
- # Validate features (for configure script errors, not user errors)
- BASIC_GET_NON_MATCHING_VALUES(INVALID_FEATURES, $JVM_FEATURES_FOR_VARIANT, $VALID_JVM_FEATURES)
- if test "x$INVALID_FEATURES" != x; then
- AC_MSG_ERROR([Internal configure script error. Invalid JVM feature(s): $INVALID_FEATURES])
- fi
- done
-])
-
-################################################################################
# Check if gtest should be built
#
AC_DEFUN_ONCE([HOTSPOT_ENABLE_DISABLE_GTEST],
@@ -613,25 +119,37 @@ AC_DEFUN_ONCE([HOTSPOT_ENABLE_DISABLE_GTEST],
AC_ARG_ENABLE([hotspot-gtest], [AS_HELP_STRING([--disable-hotspot-gtest],
[Disables building of the Hotspot unit tests @<:@enabled@:>@])])
+ GTEST_AVAILABLE=true
+
+ AC_MSG_CHECKING([if Hotspot gtest test source is present])
if test -e "${TOPDIR}/test/hotspot/gtest"; then
- GTEST_DIR_EXISTS="true"
+ AC_MSG_RESULT([yes])
else
- GTEST_DIR_EXISTS="false"
+ AC_MSG_RESULT([no, cannot run gtest])
+ GTEST_AVAILABLE=false
+ fi
+
+ # On solaris, we also must have the libstlport.so.1 library, setup in
+ # LIB_SETUP_LIBRARIES.
+ if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
+ if test "x$STLPORT_LIB" = "x"; then
+ GTEST_AVAILABLE=false
+ fi
fi
AC_MSG_CHECKING([if Hotspot gtest unit tests should be built])
if test "x$enable_hotspot_gtest" = "xyes"; then
- if test "x$GTEST_DIR_EXISTS" = "xtrue"; then
+ if test "x$GTEST_AVAILABLE" = "xtrue"; then
AC_MSG_RESULT([yes, forced])
BUILD_GTEST="true"
else
- AC_MSG_ERROR([Cannot build gtest without the test source])
+ AC_MSG_ERROR([Cannot build gtest with missing dependencies])
fi
elif test "x$enable_hotspot_gtest" = "xno"; then
AC_MSG_RESULT([no, forced])
BUILD_GTEST="false"
elif test "x$enable_hotspot_gtest" = "x"; then
- if test "x$GTEST_DIR_EXISTS" = "xtrue"; then
+ if test "x$GTEST_AVAILABLE" = "xtrue"; then
AC_MSG_RESULT([yes])
BUILD_GTEST="true"
else
@@ -644,3 +162,25 @@ AC_DEFUN_ONCE([HOTSPOT_ENABLE_DISABLE_GTEST],
AC_SUBST(BUILD_GTEST)
])
+
+###############################################################################
+# Misc hotspot setup that does not fit elsewhere.
+#
+AC_DEFUN_ONCE([HOTSPOT_SETUP_MISC],
+[
+ if HOTSPOT_CHECK_JVM_VARIANT(zero); then
+ # zero behaves as a platform and rewrites these values. This is a bit weird.
+ # But when building zero, we never build any other variants so it works.
+ HOTSPOT_TARGET_CPU=zero
+ HOTSPOT_TARGET_CPU_ARCH=zero
+ fi
+
+ # Override hotspot cpu definitions for ARM platforms
+ if test "x$OPENJDK_TARGET_CPU" = xarm; then
+ HOTSPOT_TARGET_CPU=arm_32
+ HOTSPOT_TARGET_CPU_DEFINE="ARM32"
+ fi
+
+ # --with-cpu-port is no longer supported
+ UTIL_DEPRECATED_ARG_WITH(with-cpu-port)
+])
diff --git a/make/autoconf/jdk-options.m4 b/make/autoconf/jdk-options.m4
index 2fed5c64c67..58980154ea9 100644
--- a/make/autoconf/jdk-options.m4
+++ b/make/autoconf/jdk-options.m4
@@ -34,7 +34,7 @@
AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VARIANT],
[
# Deprecated in JDK 12
- BASIC_DEPRECATED_ARG_WITH([jdk-variant])
+ UTIL_DEPRECATED_ARG_WITH([jdk-variant])
])
###############################################################################
@@ -314,7 +314,7 @@ AC_DEFUN_ONCE([JDKOPT_DETECT_INTREE_EC],
AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS],
[
#
- # NATIVE_DEBUG_SYMBOLS
+ # Native debug symbols.
# This must be done after the toolchain is setup, since we're looking at objcopy.
#
AC_MSG_CHECKING([what type of native debug symbols to use])
@@ -326,11 +326,9 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS],
if test "x$withval" = xexternal || test "x$withval" = xzipped; then
AC_MSG_ERROR([AIX only supports the parameters 'none' and 'internal' for --with-native-debug-symbols])
fi
- else
- if test "x$OPENJDK_TARGET_OS" = xwindows; then
- if test "x$withval" = xinternal; then
- AC_MSG_ERROR([Windows does not support the parameter 'internal' for --with-native-debug-symbols])
- fi
+ elif test "x$OPENJDK_TARGET_OS" = xwindows; then
+ if test "x$withval" = xinternal; then
+ AC_MSG_ERROR([Windows does not support the parameter 'internal' for --with-native-debug-symbols])
fi
fi
],
@@ -346,18 +344,17 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS],
fi
fi
])
- NATIVE_DEBUG_SYMBOLS=$with_native_debug_symbols
- AC_MSG_RESULT([$NATIVE_DEBUG_SYMBOLS])
+ AC_MSG_RESULT([$with_native_debug_symbols])
- if test "x$NATIVE_DEBUG_SYMBOLS" = xnone; then
+ if test "x$with_native_debug_symbols" = xnone; then
COMPILE_WITH_DEBUG_SYMBOLS=false
COPY_DEBUG_SYMBOLS=false
ZIP_EXTERNAL_DEBUG_SYMBOLS=false
- elif test "x$NATIVE_DEBUG_SYMBOLS" = xinternal; then
+ elif test "x$with_native_debug_symbols" = xinternal; then
COMPILE_WITH_DEBUG_SYMBOLS=true
COPY_DEBUG_SYMBOLS=false
ZIP_EXTERNAL_DEBUG_SYMBOLS=false
- elif test "x$NATIVE_DEBUG_SYMBOLS" = xexternal; then
+ elif test "x$with_native_debug_symbols" = xexternal; then
if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
if test "x$OBJCOPY" = x; then
@@ -370,7 +367,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS],
COMPILE_WITH_DEBUG_SYMBOLS=true
COPY_DEBUG_SYMBOLS=true
ZIP_EXTERNAL_DEBUG_SYMBOLS=false
- elif test "x$NATIVE_DEBUG_SYMBOLS" = xzipped; then
+ elif test "x$with_native_debug_symbols" = xzipped; then
if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
if test "x$OBJCOPY" = x; then
@@ -390,6 +387,33 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS],
AC_SUBST(COMPILE_WITH_DEBUG_SYMBOLS)
AC_SUBST(COPY_DEBUG_SYMBOLS)
AC_SUBST(ZIP_EXTERNAL_DEBUG_SYMBOLS)
+
+ # Should we add external native debug symbols to the shipped bundles?
+ AC_MSG_CHECKING([if we should add external native debug symbols to the shipped bundles])
+ AC_ARG_WITH([external-symbols-in-bundles],
+ [AS_HELP_STRING([--with-external-symbols-in-bundles],
+ [which type of external native debug symbol information shall be shipped in product bundles (none, public, full)
+ (e.g. ship full/stripped pdbs on Windows) @<:@none@:>@])])
+
+ if test "x$with_external_symbols_in_bundles" = x || test "x$with_external_symbols_in_bundles" = xnone ; then
+ AC_MSG_RESULT([no])
+ elif test "x$with_external_symbols_in_bundles" = xfull || test "x$with_external_symbols_in_bundles" = xpublic ; then
+ if test "x$OPENJDK_TARGET_OS" != xwindows ; then
+ AC_MSG_ERROR([--with-external-symbols-in-bundles currently only works on windows!])
+ elif test "x$COPY_DEBUG_SYMBOLS" != xtrue ; then
+ AC_MSG_ERROR([--with-external-symbols-in-bundles only works when --with-native-debug-symbols=external is used!])
+ elif test "x$with_external_symbols_in_bundles" = xfull ; then
+ AC_MSG_RESULT([full])
+ SHIP_DEBUG_SYMBOLS=full
+ else
+ AC_MSG_RESULT([public])
+ SHIP_DEBUG_SYMBOLS=public
+ fi
+ else
+ AC_MSG_ERROR([$with_external_symbols_in_bundles is an unknown value for --with-external-symbols-in-bundles])
+ fi
+
+ AC_SUBST(SHIP_DEBUG_SYMBOLS)
])
################################################################################
@@ -449,14 +473,14 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_CODE_COVERAGE],
AC_MSG_ERROR([Invalid JCov bundle: "$JCOV_HOME/lib/jcov.jar" does not exist])
fi
JCOV_ENABLED="true"
- BASIC_FIXUP_PATH(JCOV_HOME)
+ UTIL_FIXUP_PATH(JCOV_HOME)
if test "x$with_jcov_input_jdk" != "x" ; then
JCOV_INPUT_JDK="$with_jcov_input_jdk"
if test ! -f "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX"; then
AC_MSG_RESULT([fail])
AC_MSG_ERROR([Invalid JDK bundle: "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX" does not exist])
fi
- BASIC_FIXUP_PATH(JCOV_INPUT_JDK)
+ UTIL_FIXUP_PATH(JCOV_INPUT_JDK)
fi
if test "x$with_jcov_filters" != "x" ; then
JCOV_FILTERS="$with_jcov_filters"
@@ -616,33 +640,24 @@ AC_DEFUN_ONCE([JDKOPT_ENABLE_DISABLE_GENERATE_CLASSLIST],
Default is to generate it when either the server or client JVMs are built and
enable-cds is true.])])
- # Check if it's likely that it's possible to generate the classlist. Depending
- # on exact jvm configuration it could be possible anyway.
- if test "x$ENABLE_CDS" = "xtrue" && (HOTSPOT_CHECK_JVM_VARIANT(server) || HOTSPOT_CHECK_JVM_VARIANT(client) || HOTSPOT_CHECK_JVM_FEATURE(cds)); then
- ENABLE_GENERATE_CLASSLIST_POSSIBLE="true"
- else
- ENABLE_GENERATE_CLASSLIST_POSSIBLE="false"
- fi
+ # In jvm-features.m4 ENABLE_CDS is set to true iff all JVM variants has cds
+ # enabled.
AC_MSG_CHECKING([if the CDS classlist generation should be enabled])
if test "x$enable_generate_classlist" = "xyes"; then
AC_MSG_RESULT([yes, forced])
ENABLE_GENERATE_CLASSLIST="true"
- if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xfalse"; then
- if test "x$ENABLE_CDS" = "xfalse"; then
- # In GenerateLinkOptData.gmk, DumpLoadedClassList is used to generate the
- # classlist file. It never will work in this case since the VM will report
- # an error for DumpLoadedClassList when CDS is disabled.
- AC_MSG_ERROR([Generation of classlist is not possible with enable-cds=false])
- else
- AC_MSG_WARN([Generation of classlist might not be possible with JVM Variants $JVM_VARIANTS and enable-cds=$ENABLE_CDS])
- fi
+ if test "x$ENABLE_CDS" = "xfalse"; then
+ # In GenerateLinkOptData.gmk, DumpLoadedClassList is used to generate the
+ # classlist file. It never will work in this case since the VM will report
+ # an error for DumpLoadedClassList when CDS is disabled.
+ AC_MSG_ERROR([Generation of classlist is not possible without JVM feature 'cds'])
fi
elif test "x$enable_generate_classlist" = "xno"; then
AC_MSG_RESULT([no, forced])
ENABLE_GENERATE_CLASSLIST="false"
elif test "x$enable_generate_classlist" = "x"; then
- if test "x$ENABLE_GENERATE_CLASSLIST_POSSIBLE" = "xtrue"; then
+ if test "x$ENABLE_CDS" = "xtrue"; then
AC_MSG_RESULT([yes])
ENABLE_GENERATE_CLASSLIST="true"
else
diff --git a/make/autoconf/jvm-features.m4 b/make/autoconf/jvm-features.m4
new file mode 100644
index 00000000000..9a76bd6a5f3
--- /dev/null
+++ b/make/autoconf/jvm-features.m4
@@ -0,0 +1,669 @@
+#
+# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+###############################################################################
+# Terminology used in this file:
+#
+# Valid features == All possible features that the JVM knows about.
+# Deprecated features == Previously known features (not considered valid).
+# Available features == Features that are possible to use in this configuration.
+# Default features == Features that are on by default in this configuration.
+# Enabled features == Features requested by the user to be present.
+# Disabled features == Features excluded from being used by the user.
+# Active features == The exact set of features to be used for a JVM variant.
+#
+# All valid features are considered available, unless listed as unavailable.
+# All available features will be turned on as default, unless listed in a filter.
+###############################################################################
+
+# We need these as m4 defines to be able to loop over them using m4 later on.
+
+# All valid JVM features, regardless of platform
+m4_define(jvm_features_valid, m4_normalize( \
+ ifdef([custom_jvm_features_valid], custom_jvm_features_valid) \
+ \
+ aot cds compiler1 compiler2 dtrace epsilongc g1gc graal jfr jni-check \
+ jvmci jvmti link-time-opt management minimal nmt opt-size parallelgc \
+ serialgc services shenandoahgc static-build vm-structs zero zgc \
+))
+
+# Deprecated JVM features (these are ignored, but with a warning)
+m4_define(jvm_features_deprecated, m4_normalize(
+ cmsgc trace \
+))
+
+# Feature descriptions
+m4_define(jvm_feature_desc_aot, [enable ahead of time compilation (AOT)])
+m4_define(jvm_feature_desc_cds, [enable class data sharing (CDS)])
+m4_define(jvm_feature_desc_compiler1, [enable hotspot compiler C1])
+m4_define(jvm_feature_desc_compiler2, [enable hotspot compiler C2])
+m4_define(jvm_feature_desc_dtrace, [enable dtrace support])
+m4_define(jvm_feature_desc_epsilongc, [include the epsilon (no-op) garbage collector])
+m4_define(jvm_feature_desc_g1gc, [include the G1 garbage collector])
+m4_define(jvm_feature_desc_graal, [enable Graal (jdk.internal.vm.compiler)])
+m4_define(jvm_feature_desc_jfr, [enable JDK Flight Recorder (JFR)])
+m4_define(jvm_feature_desc_jni_check, [enable -Xcheck:jni support])
+m4_define(jvm_feature_desc_jvmci, [enable JVM Compiler Interface (JVMCI)])
+m4_define(jvm_feature_desc_jvmti, [enable Java Virtual Machine Tool Interface (JVM TI)])
+m4_define(jvm_feature_desc_link_time_opt, [enable link time optimization])
+m4_define(jvm_feature_desc_management, [enable java.lang.management API support])
+m4_define(jvm_feature_desc_minimal, [support building variant 'minimal'])
+m4_define(jvm_feature_desc_nmt, [include native memory tracking (NMT)])
+m4_define(jvm_feature_desc_opt_size, [optimize the JVM library for size])
+m4_define(jvm_feature_desc_parallelgc, [include the parallel garbage collector])
+m4_define(jvm_feature_desc_serialgc, [include the serial garbage collector])
+m4_define(jvm_feature_desc_services, [enable diagnostic services and client attaching])
+m4_define(jvm_feature_desc_shenandoahgc, [include the Shenandoah garbage collector])
+m4_define(jvm_feature_desc_static_build, [build static library instead of dynamic])
+m4_define(jvm_feature_desc_vm_structs, [export JVM structures to the Serviceablility Agent])
+m4_define(jvm_feature_desc_zero, [support building variant 'zero'])
+m4_define(jvm_feature_desc_zgc, [include the Z garbage collector])
+
+###############################################################################
+# Parse command line options for JVM feature selection. After this function
+# has run $JVM_FEATURES_ENABLED, $JVM_FEATURES_DISABLED and $JVM_FEATURES_VALID
+# can be used.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_PARSE_OPTIONS],
+[
+ # Setup shell variables from the m4 lists
+ UTIL_SORT_LIST(JVM_FEATURES_VALID, "jvm_features_valid")
+ UTIL_SORT_LIST(JVM_FEATURES_DEPRECATED, "jvm_features_deprecated")
+
+ # For historical reasons, some jvm features have their own, shorter names.
+ # Keep those as aliases for the --enable-jvm-feature-* style arguments.
+ UTIL_ALIASED_ARG_ENABLE(aot, --enable-jvm-feature-aot)
+ UTIL_ALIASED_ARG_ENABLE(cds, --enable-jvm-feature-cds)
+ UTIL_ALIASED_ARG_ENABLE(dtrace, --enable-jvm-feature-dtrace)
+
+ # First check for features using the
+ # --with-jvm-features="<[-]feature>[,<[-]feature> ...]" syntax.
+ AC_ARG_WITH([jvm-features], [AS_HELP_STRING([--with-jvm-features],
+ [JVM features to enable (foo) or disable (-foo), separated by comma. Use
+ '--help' to show possible values @<:@none@:>@])])
+ if test "x$with_jvm_features" != x; then
+ # Replace "," with " ".
+ user_jvm_feature_list=${with_jvm_features//,/ }
+ JVM_FEATURES_ENABLED=`$ECHO $user_jvm_feature_list | \
+ $AWK '{ for (i=1; i<=NF; i++) if (!match($i, /^-.*/)) printf("%s ", $i) }'`
+ JVM_FEATURES_DISABLED=`$ECHO $user_jvm_feature_list | \
+ $AWK '{ for (i=1; i<=NF; i++) if (match($i, /^-.*/)) printf("%s ", substr($i, 2))}'`
+
+ # Verify that the user has provided only valid (or deprecated) features
+ UTIL_GET_NON_MATCHING_VALUES(invalid_features, $JVM_FEATURES_ENABLED \
+ $JVM_FEATURES_DISABLED, $JVM_FEATURES_VALID $JVM_FEATURES_DEPRECATED)
+ if test "x$invalid_features" != x; then
+ AC_MSG_NOTICE([Unknown JVM features specified: '$invalid_features'])
+ AC_MSG_NOTICE([The available JVM features are: '$JVM_FEATURES_VALID'])
+ AC_MSG_ERROR([Cannot continue])
+ fi
+
+ # Check if the user has provided deprecated features
+ UTIL_GET_MATCHING_VALUES(deprecated_features, $JVM_FEATURES_ENABLED \
+ $JVM_FEATURES_DISABLED, $JVM_FEATURES_DEPRECATED)
+ if test "x$deprecated_features" != x; then
+ AC_MSG_WARN([Deprecated JVM features specified (will be ignored): '$deprecated_features'])
+ # Filter out deprecated features
+ UTIL_GET_NON_MATCHING_VALUES(JVM_FEATURES_ENABLED, \
+ $JVM_FEATURES_ENABLED, $deprecated_features)
+ UTIL_GET_NON_MATCHING_VALUES(JVM_FEATURES_DISABLED, \
+ $JVM_FEATURES_DISABLED, $deprecated_features)
+ fi
+ fi
+
+ # Then check for features using the "--enable-jvm-feature-" syntax.
+ # Using m4, loop over all features with the variable FEATURE.
+ m4_foreach(FEATURE, m4_split(jvm_features_valid), [
+ # Create an m4 variable containing a shell variable name (like
+ # "enable_jvm_feature_static_build"), and the description.
+ m4_define(FEATURE_SHELL, [enable_jvm_feature_]m4_translit(FEATURE, -, _))
+ m4_define(FEATURE_DESCRIPTION, [jvm_feature_desc_]m4_translit(FEATURE, -, _))
+
+ AC_ARG_ENABLE(jvm-feature-FEATURE, AS_HELP_STRING(
+ [--enable-jvm-feature-FEATURE], [enable jvm feature 'FEATURE' (FEATURE_DESCRIPTION)]))
+
+ if test "x$FEATURE_SHELL" = xyes; then
+ JVM_FEATURES_ENABLED="$JVM_FEATURES_ENABLED FEATURE"
+ elif test "x$FEATURE_SHELL" = xno; then
+ JVM_FEATURES_DISABLED="$JVM_FEATURES_DISABLED FEATURE"
+ elif test "x$FEATURE_SHELL" != x; then
+ AC_MSG_ERROR([Invalid value for --enable-jvm-feature-FEATURE: '$FEATURE_SHELL'])
+ fi
+
+ m4_undefine([FEATURE_SHELL])
+ m4_undefine([FEATURE_DESCRIPTION])
+ ])
+
+ # Likewise, check for deprecated arguments.
+ m4_foreach(FEATURE, m4_split(jvm_features_deprecated), [
+ AC_ARG_ENABLE(jvm-feature-FEATURE, AS_HELP_STRING(
+ [--enable-jvm-feature-FEATURE],
+ [Deprecated. Option is kept for backwards compatibility and is ignored]))
+
+ m4_define(FEATURE_SHELL, [enable_jvm_feature_]m4_translit(FEATURE, -, _))
+
+ if test "x$FEATURE_SHELL" != x; then
+ AC_MSG_WARN([Deprecated JVM feature, will be ignored: --enable-jvm-feature-FEATURE])
+ fi
+
+ m4_undefine([FEATURE_SHELL])
+ ])
+
+ # Warn if the user has both enabled and disabled a feature
+ # If this happens, disable will override enable.
+ UTIL_GET_MATCHING_VALUES(enabled_and_disabled, $JVM_FEATURES_ENABLED, \
+ $JVM_FEATURES_DISABLED)
+ if test "x$enabled_and_disabled" != x; then
+ AC_MSG_WARN([Disabling of these features will override enabling: '$enabled_and_disabled'])
+ fi
+
+ # Clean up lists and announce results to user
+ UTIL_SORT_LIST(JVM_FEATURES_ENABLED, $JVM_FEATURES_ENABLED)
+ AC_MSG_CHECKING([for JVM features enabled by the user])
+ if test "x$JVM_FEATURES_ENABLED" != x; then
+ AC_MSG_RESULT(['$JVM_FEATURES_ENABLED'])
+ else
+ AC_MSG_RESULT([none])
+ fi
+
+ UTIL_SORT_LIST(JVM_FEATURES_DISABLED, $JVM_FEATURES_DISABLED)
+ AC_MSG_CHECKING([for JVM features disabled by the user])
+ if test "x$JVM_FEATURES_DISABLED" != x; then
+ AC_MSG_RESULT(['$JVM_FEATURES_DISABLED'])
+ else
+ AC_MSG_RESULT([none])
+ fi
+
+ # Makefiles use VALID_JVM_FEATURES in check-jvm-feature to verify correctness.
+ VALID_JVM_FEATURES="$JVM_FEATURES_VALID"
+ AC_SUBST(VALID_JVM_FEATURES)
+])
+
+###############################################################################
+# Helper function for the JVM_FEATURES_CHECK_* suite.
+# The code in the code block should assign 'false' to the variable AVAILABLE
+# if the feature is not available, and this function will handle everything
+# else that is needed.
+#
+# arg 1: The name of the feature to test
+# arg 2: The code block to execute
+#
+AC_DEFUN([JVM_FEATURES_CHECK_AVAILABILITY],
+[
+ # Assume that feature is available
+ AVAILABLE=true
+
+ # Execute feature test block
+ $2
+
+ AC_MSG_CHECKING([if JVM feature '$1' is available])
+ if test "x$AVAILABLE" = "xtrue"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ JVM_FEATURES_PLATFORM_UNAVAILABLE="$JVM_FEATURES_PLATFORM_UNAVAILABLE $1"
+ fi
+])
+
+###############################################################################
+# Check if the feature 'aot' is available on this platform.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_CHECK_AOT],
+[
+ JVM_FEATURES_CHECK_AVAILABILITY(aot, [
+ AC_MSG_CHECKING([if platform is supported by AOT])
+ # AOT is only available where JVMCI is available since it requires JVMCI.
+ if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
+ test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
+ AVAILABLE=false
+ fi
+
+ AC_MSG_CHECKING([if AOT source code is present])
+ if test -e "${TOPDIR}/src/jdk.internal.vm.compiler" && \
+ test -e "${TOPDIR}/src/jdk.aot"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no, missing src/jdk.internal.vm.compiler or src/jdk.aot])
+ AVAILABLE=false
+ fi
+ ])
+])
+
+###############################################################################
+# Check if the feature 'cds' is available on this platform.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_CHECK_CDS],
+[
+ JVM_FEATURES_CHECK_AVAILABILITY(cds, [
+ AC_MSG_CHECKING([if platform is supported by CDS])
+ if test "x$OPENJDK_TARGET_OS" != xaix; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no, $OPENJDK_TARGET_OS])
+ AVAILABLE=false
+ fi
+ ])
+])
+
+###############################################################################
+# Check if the feature 'dtrace' is available on this platform.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_CHECK_DTRACE],
+[
+ JVM_FEATURES_CHECK_AVAILABILITY(dtrace, [
+ AC_MSG_CHECKING([for dtrace tool])
+ if test "x$DTRACE" != "x" && test -x "$DTRACE"; then
+ AC_MSG_RESULT([$DTRACE])
+ else
+ AC_MSG_RESULT([no])
+ AVAILABLE=false
+ fi
+
+ AC_CHECK_HEADERS([sys/sdt.h], [dtrace_headers_ok=true])
+ if test "x$dtrace_headers_ok" != "xtrue"; then
+ HELP_MSG_MISSING_DEPENDENCY([dtrace])
+ AC_MSG_NOTICE([Cannot enable dtrace with missing dependencies. See above.])
+ AVAILABLE=false
+ fi
+ ])
+])
+
+###############################################################################
+# Check if the feature 'graal' is available on this platform.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_CHECK_GRAAL],
+[
+ JVM_FEATURES_CHECK_AVAILABILITY(graal, [
+ AC_MSG_CHECKING([if platform is supported by Graal])
+ # Graal is only available where JVMCI is available since it requires JVMCI.
+ if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
+ test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
+ AVAILABLE=false
+ fi
+ ])
+])
+
+###############################################################################
+# Check if the feature 'jfr' is available on this platform.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_CHECK_JFR],
+[
+ JVM_FEATURES_CHECK_AVAILABILITY(jfr, [
+ AC_MSG_CHECKING([if platform is supported by JFR])
+ if test "x$OPENJDK_TARGET_OS" = xaix || \
+ test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-sparcv9"; then
+ AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
+ AVAILABLE=false
+ else
+ AC_MSG_RESULT([yes])
+ fi
+ ])
+])
+
+###############################################################################
+# Check if the feature 'jvmci' is available on this platform.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_CHECK_JVMCI],
+[
+ JVM_FEATURES_CHECK_AVAILABILITY(jvmci, [
+ AC_MSG_CHECKING([if platform is supported by JVMCI])
+ if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
+ test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
+ AVAILABLE=false
+ fi
+ ])
+])
+
+###############################################################################
+# Check if the feature 'shenandoahgc' is available on this platform.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_CHECK_SHENANDOAHGC],
+[
+ JVM_FEATURES_CHECK_AVAILABILITY(shenandoahgc, [
+ AC_MSG_CHECKING([if platform is supported by Shenandoah])
+ if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86" || \
+ test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
+ AVAILABLE=false
+ fi
+ ])
+])
+
+###############################################################################
+# Check if the feature 'static-build' is available on this platform.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_CHECK_STATIC_BUILD],
+[
+ JVM_FEATURES_CHECK_AVAILABILITY(static-build, [
+ AC_MSG_CHECKING([if static-build is enabled in configure])
+ if test "x$STATIC_BUILD" = "xtrue"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no, use --enable-static-build to enable static build.])
+ AVAILABLE=false
+ fi
+ ])
+])
+
+###############################################################################
+# Check if the feature 'zgc' is available on this platform.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_CHECK_ZGC],
+[
+ JVM_FEATURES_CHECK_AVAILABILITY(zgc, [
+ AC_MSG_CHECKING([if platform is supported by ZGC])
+ if test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
+ if test "x$OPENJDK_TARGET_OS" = "xlinux" || \
+ test "x$OPENJDK_TARGET_OS" = "xwindows" || \
+ test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
+ AVAILABLE=false
+ fi
+ elif test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-aarch64"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no, $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
+ AVAILABLE=false
+ fi
+
+ if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
+ AC_MSG_CHECKING([if Windows APIs required for ZGC is present])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include ]],
+ [[struct MEM_EXTENDED_PARAMETER x;]])
+ ],
+ [
+ AC_MSG_RESULT([yes])
+ ],
+ [
+ AC_MSG_RESULT([no, missing required APIs])
+ AVAILABLE=false
+ ]
+ )
+ fi
+ ])
+])
+
+###############################################################################
+# Setup JVM_FEATURES_PLATFORM_UNAVAILABLE and JVM_FEATURES_PLATFORM_FILTER
+# to contain those features that are unavailable, or should be off by default,
+# for this platform, regardless of JVM variant.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_PREPARE_PLATFORM],
+[
+ # The checks below should add unavailable features to
+ # JVM_FEATURES_PLATFORM_UNAVAILABLE.
+
+ JVM_FEATURES_CHECK_AOT
+ JVM_FEATURES_CHECK_CDS
+ JVM_FEATURES_CHECK_DTRACE
+ JVM_FEATURES_CHECK_GRAAL
+ JVM_FEATURES_CHECK_JFR
+ JVM_FEATURES_CHECK_JVMCI
+ JVM_FEATURES_CHECK_SHENANDOAHGC
+ JVM_FEATURES_CHECK_STATIC_BUILD
+ JVM_FEATURES_CHECK_ZGC
+
+ # Filter out features by default for all variants on certain platforms.
+ # Make sure to just add to JVM_FEATURES_PLATFORM_FILTER, since it could
+ # have a value already from custom extensions.
+ if test "x$OPENJDK_TARGET_OS" = xaix; then
+ JVM_FEATURES_PLATFORM_FILTER="$JVM_FEATURES_PLATFORM_FILTER jfr"
+ fi
+
+ if test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-sparcv9"; then
+ JVM_FEATURES_PLATFORM_FILTER="$JVM_FEATURES_PLATFORM_FILTER jfr"
+ fi
+])
+
+###############################################################################
+# Setup JVM_FEATURES_VARIANT_UNAVAILABLE and JVM_FEATURES_VARIANT_FILTER
+# to contain those features that are unavailable, or should be off by default,
+# for this particular JVM variant.
+#
+# arg 1: JVM variant
+#
+AC_DEFUN([JVM_FEATURES_PREPARE_VARIANT],
+[
+ variant=$1
+
+ # Check which features are unavailable for this JVM variant.
+ # This means that is not possible to build these features for this variant.
+ if test "x$variant" = "xminimal"; then
+ JVM_FEATURES_VARIANT_UNAVAILABLE="cds zero"
+ elif test "x$variant" = "xcore"; then
+ JVM_FEATURES_VARIANT_UNAVAILABLE="cds minimal zero"
+ elif test "x$variant" = "xzero"; then
+ JVM_FEATURES_VARIANT_UNAVAILABLE="aot cds compiler1 compiler2 \
+ epsilongc g1gc graal jvmci minimal shenandoahgc zgc"
+ else
+ JVM_FEATURES_VARIANT_UNAVAILABLE="minimal zero"
+ fi
+
+ # Check which features should be off by default for this JVM variant.
+ if test "x$variant" = "xclient"; then
+ JVM_FEATURES_VARIANT_FILTER="aot compiler2 graal jvmci link-time-opt opt-size"
+ elif test "x$variant" = "xminimal"; then
+ JVM_FEATURES_VARIANT_FILTER="aot cds compiler2 dtrace epsilongc g1gc \
+ graal jfr jni-check jvmci jvmti management nmt parallelgc services \
+ shenandoahgc vm-structs zgc"
+ if test "x$OPENJDK_TARGET_CPU" = xarm ; then
+ JVM_FEATURES_VARIANT_FILTER="$JVM_FEATURES_VARIANT_FILTER opt-size"
+ else
+ # Only arm-32 should have link-time-opt enabled as default.
+ JVM_FEATURES_VARIANT_FILTER="$JVM_FEATURES_VARIANT_FILTER \
+ link-time-opt"
+ fi
+ elif test "x$variant" = "xcore"; then
+ JVM_FEATURES_VARIANT_FILTER="aot compiler1 compiler2 graal jvmci \
+ link-time-opt opt-size"
+ elif test "x$variant" = "xzero"; then
+ JVM_FEATURES_VARIANT_FILTER="jfr link-time-opt opt-size"
+ else
+ JVM_FEATURES_VARIANT_FILTER="link-time-opt opt-size"
+ fi
+])
+
+###############################################################################
+# Calculate the actual set of active JVM features for this JVM variant. Store
+# the result in JVM_FEATURES_ACTIVE.
+#
+# arg 1: JVM variant
+#
+AC_DEFUN([JVM_FEATURES_CALCULATE_ACTIVE],
+[
+ variant=$1
+
+ # The default is set to all valid features except those unavailable or listed
+ # in a filter.
+ if test "x$variant" != xcustom; then
+ UTIL_GET_NON_MATCHING_VALUES(default_for_variant, $JVM_FEATURES_VALID, \
+ $JVM_FEATURES_PLATFORM_UNAVAILABLE $JVM_FEATURES_VARIANT_UNAVAILABLE \
+ $JVM_FEATURES_PLATFORM_FILTER $JVM_FEATURES_VARIANT_FILTER)
+ else
+ # Except for the 'custom' variant, where the default is to start with an
+ # empty set.
+ default_for_variant=""
+ fi
+
+ # Verify that explicitly enabled features are available
+ UTIL_GET_MATCHING_VALUES(enabled_but_unavailable, $JVM_FEATURES_ENABLED, \
+ $JVM_FEATURES_PLATFORM_UNAVAILABLE $JVM_FEATURES_VARIANT_UNAVAILABLE)
+ if test "x$enabled_but_unavailable" != x; then
+ AC_MSG_NOTICE([ERROR: Unavailable JVM features explicitly enabled for '$variant': '$enabled_but_unavailable'])
+ AC_MSG_ERROR([Cannot continue])
+ fi
+
+ # Notify the user if their command line options has no real effect
+ UTIL_GET_MATCHING_VALUES(enabled_but_default, $JVM_FEATURES_ENABLED, \
+ $default_for_variant)
+ if test "x$enabled_but_default" != x; then
+ AC_MSG_NOTICE([Default JVM features explicitly enabled for '$variant': '$enabled_but_default'])
+ fi
+ UTIL_GET_MATCHING_VALUES(disabled_but_unavailable, $JVM_FEATURES_DISABLED, \
+ $JVM_FEATURES_PLATFORM_UNAVAILABLE $JVM_FEATURES_VARIANT_UNAVAILABLE)
+ if test "x$disabled_but_unavailable" != x; then
+ AC_MSG_NOTICE([Unavailable JVM features explicitly disabled for '$variant': '$disabled_but_unavailable'])
+ fi
+
+ # JVM_FEATURES_ACTIVE is the set of all default features and all explicitly
+ # enabled features, with the explicitly disabled features filtered out.
+ UTIL_GET_NON_MATCHING_VALUES(JVM_FEATURES_ACTIVE, $default_for_variant \
+ $JVM_FEATURES_ENABLED, $JVM_FEATURES_DISABLED)
+])
+
+###############################################################################
+# Helper function for JVM_FEATURES_VERIFY. Check if the specified JVM
+# feature is active. To be used in shell if constructs, like this:
+# 'if JVM_FEATURES_IS_ACTIVE(jvmti); then'
+#
+# Definition kept in one line to allow inlining in if statements.
+# Additional [] needed to keep m4 from mangling shell constructs.
+AC_DEFUN([JVM_FEATURES_IS_ACTIVE],
+[ [ [[ " $JVM_FEATURES_ACTIVE " =~ ' '$1' ' ]] ] ])
+
+###############################################################################
+# Verify that the resulting set of features is consistent and legal.
+#
+# arg 1: JVM variant
+#
+AC_DEFUN([JVM_FEATURES_VERIFY],
+[
+ variant=$1
+
+ # Verify that dependencies are met for inter-feature relations.
+ if JVM_FEATURES_IS_ACTIVE(aot) && ! JVM_FEATURES_IS_ACTIVE(graal); then
+ AC_MSG_ERROR([Specified JVM feature 'aot' requires feature 'graal' for variant '$variant'])
+ fi
+
+ if JVM_FEATURES_IS_ACTIVE(graal) && ! JVM_FEATURES_IS_ACTIVE(jvmci); then
+ AC_MSG_ERROR([Specified JVM feature 'graal' requires feature 'jvmci' for variant '$variant'])
+ fi
+
+ if JVM_FEATURES_IS_ACTIVE(jvmci) && ! (JVM_FEATURES_IS_ACTIVE(compiler1) || \
+ JVM_FEATURES_IS_ACTIVE(compiler2)); then
+ AC_MSG_ERROR([Specified JVM feature 'jvmci' requires feature 'compiler2' or 'compiler1' for variant '$variant'])
+ fi
+
+ if JVM_FEATURES_IS_ACTIVE(jvmti) && ! JVM_FEATURES_IS_ACTIVE(services); then
+ AC_MSG_ERROR([Specified JVM feature 'jvmti' requires feature 'services' for variant '$variant'])
+ fi
+
+ if JVM_FEATURES_IS_ACTIVE(management) && ! JVM_FEATURES_IS_ACTIVE(nmt); then
+ AC_MSG_ERROR([Specified JVM feature 'management' requires feature 'nmt' for variant '$variant'])
+ fi
+
+ # For backwards compatibility, disable a feature "globally" if one variant
+ # is missing the feature.
+ if ! JVM_FEATURES_IS_ACTIVE(aot); then
+ ENABLE_AOT="false"
+ fi
+ if ! JVM_FEATURES_IS_ACTIVE(cds); then
+ ENABLE_CDS="false"
+ fi
+ if ! JVM_FEATURES_IS_ACTIVE(graal); then
+ INCLUDE_GRAAL="false"
+ fi
+ if ! JVM_FEATURES_IS_ACTIVE(jvmci); then
+ INCLUDE_JVMCI="false"
+ fi
+
+ # Verify that we have at least one gc selected (i.e., feature named "*gc").
+ if ! JVM_FEATURES_IS_ACTIVE(.*gc); then
+ AC_MSG_NOTICE([At least one gc needed for variant '$variant'.])
+ AC_MSG_NOTICE([Specified features: '$JVM_FEATURES_ACTIVE'])
+ AC_MSG_ERROR([Cannot continue])
+ fi
+])
+
+###############################################################################
+# Set up all JVM features for each enabled JVM variant. Requires that
+# JVM_FEATURES_PARSE_OPTIONS has been called.
+#
+AC_DEFUN_ONCE([JVM_FEATURES_SETUP],
+[
+ # Set up variant-independent factors
+ JVM_FEATURES_PREPARE_PLATFORM
+
+ # For backwards compatibility, tentatively enable these features "globally",
+ # and disable them in JVM_FEATURES_VERIFY if a variant is found that are
+ # missing any of them.
+ ENABLE_AOT="true"
+ ENABLE_CDS="true"
+ INCLUDE_GRAAL="true"
+ INCLUDE_JVMCI="true"
+
+ for variant in $JVM_VARIANTS; do
+ # Figure out if any features are unavailable, or should be filtered out
+ # by default, for this variant.
+ # Store the result in JVM_FEATURES_VARIANT_UNAVAILABLE and
+ # JVM_FEATURES_VARIANT_FILTER.
+ JVM_FEATURES_PREPARE_VARIANT($variant)
+
+ # Calculate the resulting set of enabled features for this variant.
+ # The result is stored in JVM_FEATURES_ACTIVE.
+ JVM_FEATURES_CALCULATE_ACTIVE($variant)
+
+ # Verify consistency for JVM_FEATURES_ACTIVE.
+ JVM_FEATURES_VERIFY($variant)
+
+ # Keep feature list sorted and free of duplicates
+ UTIL_SORT_LIST(JVM_FEATURES_ACTIVE, $JVM_FEATURES_ACTIVE)
+ AC_MSG_CHECKING([JVM features to use for variant '$variant'])
+ AC_MSG_RESULT(['$JVM_FEATURES_ACTIVE'])
+
+ # Save this as e.g. JVM_FEATURES_server, using indirect variable
+ # referencing.
+ features_var_name=JVM_FEATURES_$variant
+ eval $features_var_name=\"$JVM_FEATURES_ACTIVE\"
+ done
+
+ # Unfortunately AC_SUBST does not work with non-literally named variables,
+ # so list all variants here.
+ AC_SUBST(JVM_FEATURES_server)
+ AC_SUBST(JVM_FEATURES_client)
+ AC_SUBST(JVM_FEATURES_minimal)
+ AC_SUBST(JVM_FEATURES_core)
+ AC_SUBST(JVM_FEATURES_zero)
+ AC_SUBST(JVM_FEATURES_custom)
+
+ AC_SUBST(ENABLE_AOT)
+ AC_SUBST(INCLUDE_GRAAL)
+ AC_SUBST(INCLUDE_JVMCI)
+
+])
diff --git a/make/autoconf/lib-tests.m4 b/make/autoconf/lib-tests.m4
index 043d94a7a84..b1437024332 100644
--- a/make/autoconf/lib-tests.m4
+++ b/make/autoconf/lib-tests.m4
@@ -51,7 +51,7 @@ AC_DEFUN_ONCE([LIB_TESTS_SETUP_GRAALUNIT],
fi
fi
- BASIC_FIXUP_PATH([GRAALUNIT_LIB])
+ UTIL_FIXUP_PATH([GRAALUNIT_LIB])
AC_SUBST(GRAALUNIT_LIB)
])
@@ -77,7 +77,7 @@ AC_DEFUN_ONCE([LIB_TESTS_SETUP_JMH],
AC_MSG_RESULT([no, error])
AC_MSG_ERROR([$JMH_HOME does not exist or is not a directory])
fi
- BASIC_FIXUP_PATH([JMH_HOME])
+ UTIL_FIXUP_PATH([JMH_HOME])
jar_names="jmh-core jmh-generator-annprocess jopt-simple commons-math3"
for jar in $jar_names; do
diff --git a/make/autoconf/libraries.m4 b/make/autoconf/libraries.m4
index 5f16f08b208..8618077d1bb 100644
--- a/make/autoconf/libraries.m4
+++ b/make/autoconf/libraries.m4
@@ -196,7 +196,7 @@ AC_DEFUN_ONCE([LIB_SETUP_MISC_LIBS],
################################################################################
AC_DEFUN_ONCE([LIB_SETUP_SOLARIS_STLPORT],
[
- if test "$OPENJDK_TARGET_OS" = "solaris" && test "x$BUILD_GTEST" = "xtrue"; then
+ if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
# Find the root of the Solaris Studio installation from the compiler path
SOLARIS_STUDIO_DIR="$(dirname $CC)/.."
STLPORT_LIB="$SOLARIS_STUDIO_DIR/lib/stlport4$OPENJDK_TARGET_CPU_ISADIR/libstlport.so.1"
@@ -207,10 +207,9 @@ AC_DEFUN_ONCE([LIB_SETUP_SOLARIS_STLPORT],
fi
if test -f "$STLPORT_LIB"; then
AC_MSG_RESULT([yes, $STLPORT_LIB])
- BASIC_FIXUP_PATH([STLPORT_LIB])
+ UTIL_FIXUP_PATH([STLPORT_LIB])
else
- AC_MSG_RESULT([no, not found at $STLPORT_LIB])
- AC_MSG_ERROR([Failed to find libstlport.so.1, cannot build Hotspot gtests])
+ AC_MSG_RESULT([no, not found at $STLPORT_LIB, cannot build Hotspot gtests])
fi
AC_SUBST(STLPORT_LIB)
fi
diff --git a/make/autoconf/source-dirs.m4 b/make/autoconf/source-dirs.m4
index 617ef0c4b4f..8ac7c542cab 100644
--- a/make/autoconf/source-dirs.m4
+++ b/make/autoconf/source-dirs.m4
@@ -46,7 +46,7 @@ AC_DEFUN_ONCE([SRCDIRS_SETUP_IMPORT_MODULES],
&& test "x$with_import_modules" != "xno"; then
if test -d "$with_import_modules"; then
IMPORT_MODULES_TOPDIR="$with_import_modules"
- BASIC_FIXUP_PATH([IMPORT_MODULES_TOPDIR])
+ UTIL_FIXUP_PATH([IMPORT_MODULES_TOPDIR])
elif test -e "$with_import_modules"; then
IMPORT_MODULES_TOPDIR="$CONFIGURESUPPORT_OUTPUTDIR/import-modules"
$RM -rf "$IMPORT_MODULES_TOPDIR"
diff --git a/make/autoconf/spec.gmk.in b/make/autoconf/spec.gmk.in
index 14f14ed76c9..241725e40bd 100644
--- a/make/autoconf/spec.gmk.in
+++ b/make/autoconf/spec.gmk.in
@@ -303,6 +303,9 @@ ENABLE_HEADLESS_ONLY := @ENABLE_HEADLESS_ONLY@
ENABLE_LINKTIME_GC := @ENABLE_LINKTIME_GC@
+# Ship debug symbols (e.g. pdbs on Windows)
+SHIP_DEBUG_SYMBOLS := @SHIP_DEBUG_SYMBOLS@
+
ENABLE_FULL_DOCS := @ENABLE_FULL_DOCS@
# JDK_OUTPUTDIR specifies where a working jvm is built.
@@ -911,10 +914,16 @@ GRAAL_BUILDER_IMAGE_DIR := $(IMAGES_OUTPUTDIR)/$(GRAAL_BUILDER_IMAGE_SUBDIR)
# Macosx bundles directory definitions
JDK_MACOSX_BUNDLE_SUBDIR=jdk-bundle
JRE_MACOSX_BUNDLE_SUBDIR=jre-bundle
+JDK_MACOSX_BUNDLE_SUBDIR_SIGNED=jdk-bundle-signed
+JRE_MACOSX_BUNDLE_SUBDIR_SIGNED=jre-bundle-signed
JDK_MACOSX_BUNDLE_DIR=$(IMAGES_OUTPUTDIR)/$(JDK_MACOSX_BUNDLE_SUBDIR)
JRE_MACOSX_BUNDLE_DIR=$(IMAGES_OUTPUTDIR)/$(JRE_MACOSX_BUNDLE_SUBDIR)
-JDK_MACOSX_CONTENTS_SUBDIR=jdk-$(VERSION_NUMBER).jdk/Contents
-JRE_MACOSX_CONTENTS_SUBDIR=jre-$(VERSION_NUMBER).jre/Contents
+JDK_MACOSX_BUNDLE_DIR_SIGNED=$(IMAGES_OUTPUTDIR)/$(JDK_MACOSX_BUNDLE_SUBDIR_SIGNED)
+JRE_MACOSX_BUNDLE_DIR_SIGNED=$(IMAGES_OUTPUTDIR)/$(JRE_MACOSX_BUNDLE_SUBDIR_SIGNED)
+JDK_MACOSX_BUNDLE_TOP_DIR=jdk-$(VERSION_NUMBER).jdk
+JRE_MACOSX_BUNDLE_TOP_DIR=jre-$(VERSION_NUMBER).jre
+JDK_MACOSX_CONTENTS_SUBDIR=$(JDK_MACOSX_BUNDLE_TOP_DIR)/Contents
+JRE_MACOSX_CONTENTS_SUBDIR=$(JRE_MACOSX_BUNDLE_TOP_DIR)/Contents
JDK_MACOSX_CONTENTS_DIR=$(JDK_MACOSX_BUNDLE_DIR)/$(JDK_MACOSX_CONTENTS_SUBDIR)
JRE_MACOSX_CONTENTS_DIR=$(JRE_MACOSX_BUNDLE_DIR)/$(JRE_MACOSX_CONTENTS_SUBDIR)
diff --git a/make/autoconf/toolchain.m4 b/make/autoconf/toolchain.m4
index 01bef676deb..698f4cd75f4 100644
--- a/make/autoconf/toolchain.m4
+++ b/make/autoconf/toolchain.m4
@@ -32,6 +32,7 @@
# compilers and related tools that are used.
########################################################################
+m4_include([toolchain_windows.m4])
# All valid toolchains, regardless of platform (used by help.m4)
VALID_TOOLCHAINS_all="gcc clang solstudio xlc microsoft"
@@ -92,7 +93,7 @@ AC_DEFUN([TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS],
# IF_AT_LEAST: block to run if the compiler is at least this version (>=)
# IF_OLDER_THAN: block to run if the compiler is older than this version (<)
# PREFIX: Optional variable prefix for compiler to compare version for (OPENJDK_BUILD_)
-BASIC_DEFUN_NAMED([TOOLCHAIN_CHECK_COMPILER_VERSION],
+UTIL_DEFUN_NAMED([TOOLCHAIN_CHECK_COMPILER_VERSION],
[*VERSION PREFIX IF_AT_LEAST IF_OLDER_THAN], [$@],
[
# Need to assign to a variable since m4 is blocked from modifying parts in [].
@@ -143,7 +144,7 @@ AC_DEFUN([TOOLCHAIN_PREPARE_FOR_LD_VERSION_COMPARISONS],
# IF_AT_LEAST: block to run if the compiler is at least this version (>=)
# IF_OLDER_THAN: block to run if the compiler is older than this version (<)
# PREFIX: Optional variable prefix for compiler to compare version for (OPENJDK_BUILD_)
-BASIC_DEFUN_NAMED([TOOLCHAIN_CHECK_LINKER_VERSION],
+UTIL_DEFUN_NAMED([TOOLCHAIN_CHECK_LINKER_VERSION],
[*VERSION PREFIX IF_AT_LEAST IF_OLDER_THAN], [$@],
[
# Need to assign to a variable since m4 is blocked from modifying parts in [].
@@ -349,8 +350,8 @@ AC_DEFUN_ONCE([TOOLCHAIN_PRE_DETECTION],
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
# Append VS_PATH. In WSL, VS_PATH will not contain the WSL env path needed
# for using basic Unix tools, so need to keep the original PATH.
- BASIC_APPEND_TO_PATH(PATH, $VS_PATH)
- BASIC_APPEND_TO_PATH(WSLENV, "PATH/l:LIB:INCLUDE")
+ UTIL_APPEND_TO_PATH(PATH, $VS_PATH)
+ UTIL_APPEND_TO_PATH(WSLENV, "PATH/l:LIB:INCLUDE")
export WSLENV
else
# Reset path to VS_PATH. It will include everything that was on PATH at the time we
@@ -580,12 +581,12 @@ AC_DEFUN([TOOLCHAIN_FIND_COMPILER],
fi
# Now we have a compiler binary in $1. Make sure it's okay.
- BASIC_FIXUP_EXECUTABLE($1)
+ UTIL_FIXUP_EXECUTABLE($1)
TEST_COMPILER="[$]$1"
AC_MSG_CHECKING([resolved symbolic links for $1])
SYMLINK_ORIGINAL="$TEST_COMPILER"
- BASIC_REMOVE_SYMBOLIC_LINKS(SYMLINK_ORIGINAL)
+ UTIL_REMOVE_SYMBOLIC_LINKS(SYMLINK_ORIGINAL)
if test "x$TEST_COMPILER" = "x$SYMLINK_ORIGINAL"; then
AC_MSG_RESULT([no symlink])
else
@@ -716,9 +717,9 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_CORE],
# Setup the preprocessor (CPP and CXXCPP)
#
AC_PROG_CPP
- BASIC_FIXUP_EXECUTABLE(CPP)
+ UTIL_FIXUP_EXECUTABLE(CPP)
AC_PROG_CXXCPP
- BASIC_FIXUP_EXECUTABLE(CXXCPP)
+ UTIL_FIXUP_EXECUTABLE(CXXCPP)
#
# Setup the linker (LD)
@@ -728,7 +729,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_CORE],
# Make sure we reject /usr/bin/link (as determined in CYGWIN_LINK), which is
# a cygwin program for something completely different.
AC_CHECK_PROG([LD], [link$EXE_SUFFIX],[link$EXE_SUFFIX],,, [$CYGWIN_LINK])
- BASIC_FIXUP_EXECUTABLE(LD)
+ UTIL_FIXUP_EXECUTABLE(LD)
# Verify that we indeed succeeded with this trick.
AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio linker])
"$LD" --version > /dev/null
@@ -746,8 +747,8 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_CORE],
LD="$CC"
LDCXX="$CXX"
# jaotc expects 'ld' as the linker rather than the compiler.
- BASIC_CHECK_TOOLS([LD_JAOTC], ld)
- BASIC_FIXUP_EXECUTABLE(LD_JAOTC)
+ UTIL_CHECK_TOOLS([LD_JAOTC], ld)
+ UTIL_FIXUP_EXECUTABLE(LD_JAOTC)
fi
AC_SUBST(LD)
AC_SUBST(LD_JAOTC)
@@ -769,8 +770,8 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_CORE],
# Setup the assembler (AS)
#
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
- BASIC_PATH_PROGS(AS, as)
- BASIC_FIXUP_EXECUTABLE(AS)
+ UTIL_PATH_PROGS(AS, as)
+ UTIL_FIXUP_EXECUTABLE(AS)
if test "x$AS" = x; then
AC_MSG_ERROR([Solaris assembler (as) is required. Please install via "pkg install pkg:/developer/assembler".])
fi
@@ -787,11 +788,11 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_CORE],
# The corresponding ar tool is lib.exe (used to create static libraries)
AC_CHECK_PROG([AR], [lib$EXE_SUFFIX],[lib$EXE_SUFFIX],,,)
elif test "x$TOOLCHAIN_TYPE" = xgcc; then
- BASIC_CHECK_TOOLS(AR, ar gcc-ar)
+ UTIL_CHECK_TOOLS(AR, ar gcc-ar)
else
- BASIC_CHECK_TOOLS(AR, ar)
+ UTIL_CHECK_TOOLS(AR, ar)
fi
- BASIC_FIXUP_EXECUTABLE(AR)
+ UTIL_FIXUP_EXECUTABLE(AR)
])
# Setup additional tools that is considered a part of the toolchain, but not the
@@ -800,22 +801,22 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_CORE],
AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_EXTRA],
[
if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
- BASIC_PATH_PROGS(LIPO, lipo)
- BASIC_FIXUP_EXECUTABLE(LIPO)
- BASIC_REQUIRE_PROGS(OTOOL, otool)
- BASIC_FIXUP_EXECUTABLE(OTOOL)
- BASIC_REQUIRE_PROGS(INSTALL_NAME_TOOL, install_name_tool)
- BASIC_FIXUP_EXECUTABLE(INSTALL_NAME_TOOL)
+ UTIL_PATH_PROGS(LIPO, lipo)
+ UTIL_FIXUP_EXECUTABLE(LIPO)
+ UTIL_REQUIRE_PROGS(OTOOL, otool)
+ UTIL_FIXUP_EXECUTABLE(OTOOL)
+ UTIL_REQUIRE_PROGS(INSTALL_NAME_TOOL, install_name_tool)
+ UTIL_FIXUP_EXECUTABLE(INSTALL_NAME_TOOL)
fi
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
AC_CHECK_PROG([MT], [mt$EXE_SUFFIX], [mt$EXE_SUFFIX],,, [/usr/bin/mt])
- BASIC_FIXUP_EXECUTABLE(MT)
+ UTIL_FIXUP_EXECUTABLE(MT)
# Setup the resource compiler (RC)
AC_CHECK_PROG([RC], [rc$EXE_SUFFIX], [rc$EXE_SUFFIX],,, [/usr/bin/rc])
- BASIC_FIXUP_EXECUTABLE(RC)
+ UTIL_FIXUP_EXECUTABLE(RC)
AC_CHECK_PROG([DUMPBIN], [dumpbin$EXE_SUFFIX], [dumpbin$EXE_SUFFIX],,,)
- BASIC_FIXUP_EXECUTABLE(DUMPBIN)
+ UTIL_FIXUP_EXECUTABLE(DUMPBIN)
# We need to check for 'msbuild.exe' because at the place where we expect to
# find 'msbuild.exe' there's also a directory called 'msbuild' and configure
# won't find the 'msbuild.exe' executable in that case (and the
@@ -827,22 +828,22 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_EXTRA],
fi
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
- BASIC_PATH_PROGS(STRIP, strip)
- BASIC_FIXUP_EXECUTABLE(STRIP)
- BASIC_PATH_PROGS(NM, nm)
- BASIC_FIXUP_EXECUTABLE(NM)
- BASIC_PATH_PROGS(GNM, gnm)
- BASIC_FIXUP_EXECUTABLE(GNM)
+ UTIL_PATH_PROGS(STRIP, strip)
+ UTIL_FIXUP_EXECUTABLE(STRIP)
+ UTIL_PATH_PROGS(NM, nm)
+ UTIL_FIXUP_EXECUTABLE(NM)
+ UTIL_PATH_PROGS(GNM, gnm)
+ UTIL_FIXUP_EXECUTABLE(GNM)
elif test "x$OPENJDK_TARGET_OS" != xwindows; then
# FIXME: we should unify this with the solaris case above.
- BASIC_CHECK_TOOLS(STRIP, strip)
- BASIC_FIXUP_EXECUTABLE(STRIP)
+ UTIL_CHECK_TOOLS(STRIP, strip)
+ UTIL_FIXUP_EXECUTABLE(STRIP)
if test "x$TOOLCHAIN_TYPE" = xgcc; then
- BASIC_CHECK_TOOLS(NM, nm gcc-nm)
+ UTIL_CHECK_TOOLS(NM, nm gcc-nm)
else
- BASIC_CHECK_TOOLS(NM, nm)
+ UTIL_CHECK_TOOLS(NM, nm)
fi
- BASIC_FIXUP_EXECUTABLE(NM)
+ UTIL_FIXUP_EXECUTABLE(NM)
GNM="$NM"
AC_SUBST(GNM)
fi
@@ -850,10 +851,10 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_EXTRA],
# objcopy is used for moving debug symbols to separate files when
# full debug symbols are enabled.
if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then
- BASIC_CHECK_TOOLS(OBJCOPY, [gobjcopy objcopy])
+ UTIL_CHECK_TOOLS(OBJCOPY, [gobjcopy objcopy])
# Only call fixup if objcopy was found.
if test -n "$OBJCOPY"; then
- BASIC_FIXUP_EXECUTABLE(OBJCOPY)
+ UTIL_FIXUP_EXECUTABLE(OBJCOPY)
if test "x$OPENJDK_BUILD_OS" = xsolaris; then
# objcopy prior to 2.21.1 on solaris is broken and is not usable.
# Rewrite objcopy version output to VALID_VERSION or BAD_VERSION.
@@ -894,18 +895,18 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_EXTRA],
fi
fi
- BASIC_CHECK_TOOLS(OBJDUMP, [gobjdump objdump])
+ UTIL_CHECK_TOOLS(OBJDUMP, [gobjdump objdump])
if test "x$OBJDUMP" != x; then
- # Only used for compare.sh; we can live without it. BASIC_FIXUP_EXECUTABLE
+ # Only used for compare.sh; we can live without it. UTIL_FIXUP_EXECUTABLE
# bails if argument is missing.
- BASIC_FIXUP_EXECUTABLE(OBJDUMP)
+ UTIL_FIXUP_EXECUTABLE(OBJDUMP)
fi
case $TOOLCHAIN_TYPE in
gcc|clang|solstudio)
- BASIC_CHECK_TOOLS(CXXFILT, [c++filt])
- BASIC_CHECK_NONEMPTY(CXXFILT)
- BASIC_FIXUP_EXECUTABLE(CXXFILT)
+ UTIL_CHECK_TOOLS(CXXFILT, [c++filt])
+ UTIL_CHECK_NONEMPTY(CXXFILT)
+ UTIL_FIXUP_EXECUTABLE(CXXFILT)
;;
esac
])
@@ -933,7 +934,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_BUILD_COMPILERS],
if test ! -d "$with_build_devkit"; then
AC_MSG_ERROR([--with-build-devkit points to non existing dir: $with_build_devkit])
else
- BASIC_FIXUP_PATH([with_build_devkit])
+ UTIL_FIXUP_PATH([with_build_devkit])
BUILD_DEVKIT_ROOT="$with_build_devkit"
# Check for a meta data info file in the root of the devkit
if test -f "$BUILD_DEVKIT_ROOT/devkit.info"; then
@@ -977,18 +978,18 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_BUILD_COMPILERS],
# FIXME: we should list the discovered compilers as an exclude pattern!
# If we do that, we can do this detection before POST_DETECTION, and still
# find the build compilers in the tools dir, if needed.
- BASIC_REQUIRE_PROGS(BUILD_CC, [cl cc gcc])
- BASIC_FIXUP_EXECUTABLE(BUILD_CC)
- BASIC_REQUIRE_PROGS(BUILD_CXX, [cl CC g++])
- BASIC_FIXUP_EXECUTABLE(BUILD_CXX)
- BASIC_PATH_PROGS(BUILD_NM, nm gcc-nm)
- BASIC_FIXUP_EXECUTABLE(BUILD_NM)
- BASIC_PATH_PROGS(BUILD_AR, ar gcc-ar)
- BASIC_FIXUP_EXECUTABLE(BUILD_AR)
- BASIC_PATH_PROGS(BUILD_OBJCOPY, objcopy)
- BASIC_FIXUP_EXECUTABLE(BUILD_OBJCOPY)
- BASIC_PATH_PROGS(BUILD_STRIP, strip)
- BASIC_FIXUP_EXECUTABLE(BUILD_STRIP)
+ UTIL_REQUIRE_PROGS(BUILD_CC, [cl cc gcc])
+ UTIL_FIXUP_EXECUTABLE(BUILD_CC)
+ UTIL_REQUIRE_PROGS(BUILD_CXX, [cl CC g++])
+ UTIL_FIXUP_EXECUTABLE(BUILD_CXX)
+ UTIL_PATH_PROGS(BUILD_NM, nm gcc-nm)
+ UTIL_FIXUP_EXECUTABLE(BUILD_NM)
+ UTIL_PATH_PROGS(BUILD_AR, ar gcc-ar)
+ UTIL_FIXUP_EXECUTABLE(BUILD_AR)
+ UTIL_PATH_PROGS(BUILD_OBJCOPY, objcopy)
+ UTIL_FIXUP_EXECUTABLE(BUILD_OBJCOPY)
+ UTIL_PATH_PROGS(BUILD_STRIP, strip)
+ UTIL_FIXUP_EXECUTABLE(BUILD_STRIP)
# Assume the C compiler is the assembler
BUILD_AS="$BUILD_CC -c"
# Just like for the target compiler, use the compiler as linker
@@ -1082,7 +1083,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG],
elif test "x$with_jtreg" != xyes && test "x$with_jtreg" != x; then
# An explicit path is specified, use it.
JT_HOME="$with_jtreg"
- BASIC_FIXUP_PATH([JT_HOME])
+ UTIL_FIXUP_PATH([JT_HOME])
if test ! -d "$JT_HOME"; then
AC_MSG_ERROR([jtreg home directory from --with-jtreg=$with_jtreg does not exist])
fi
@@ -1122,7 +1123,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG],
if test "x$JT_HOME" = x; then
# JT_HOME is not set in environment, or was deemed invalid.
# Try to find jtreg on path
- BASIC_PATH_PROGS(JTREGEXE, jtreg)
+ UTIL_PATH_PROGS(JTREGEXE, jtreg)
if test "x$JTREGEXE" != x; then
# That's good, now try to derive JT_HOME
JT_HOME=`(cd $($DIRNAME $JTREGEXE)/.. && pwd)`
@@ -1148,8 +1149,8 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG],
fi
fi
- BASIC_FIXUP_EXECUTABLE(JTREGEXE)
- BASIC_FIXUP_PATH(JT_HOME)
+ UTIL_FIXUP_EXECUTABLE(JTREGEXE)
+ UTIL_FIXUP_PATH(JT_HOME)
AC_SUBST(JT_HOME)
AC_SUBST(JTREGEXE)
])
diff --git a/make/autoconf/toolchain_windows.m4 b/make/autoconf/toolchain_windows.m4
index 90482ab78f8..462d14a0f69 100644
--- a/make/autoconf/toolchain_windows.m4
+++ b/make/autoconf/toolchain_windows.m4
@@ -112,7 +112,7 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT],
VS_BASE="$2"
METHOD="$3"
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VS_BASE)
+ UTIL_REWRITE_AS_UNIX_PATH(VS_BASE)
# In VS 2017 and VS 2019, the default installation is in a subdir named after the edition.
# Find the first one present and use that.
if test "x$VS_EDITIONS" != x; then
@@ -160,7 +160,7 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT],
VS_VERSION="$1"
WIN_SDK_BASE="$2"
METHOD="$3"
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(WIN_SDK_BASE)
+ UTIL_REWRITE_AS_UNIX_PATH(WIN_SDK_BASE)
if test -d "$WIN_SDK_BASE"; then
# There have been cases of partial or broken SDK installations. A missing
# lib dir is not going to work.
@@ -313,7 +313,7 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO],
VS_PATH_WINDOWS=""
for i in $TOOLCHAIN_PATH; do
path=$i
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([path])
+ UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([path])
VS_PATH_WINDOWS="$VS_PATH_WINDOWS;$path"
done
IFS="$OLDIFS"
@@ -331,14 +331,14 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO],
IFS=";"
for i in $DEVKIT_VS_INCLUDE; do
ipath=$i
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([ipath])
+ UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([ipath])
VS_INCLUDE="$VS_INCLUDE;$ipath"
done
# Convert DEVKIT_VS_LIB into VS_LIB so that it can still be exported
# as LIB for compiler invocations without SYSROOT_LDFLAGS
for i in $DEVKIT_VS_LIB; do
libpath=$i
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([libpath])
+ UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([libpath])
VS_LIB="$VS_LIB;$libpath"
done
IFS="$OLDIFS"
@@ -408,7 +408,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
if test "x$DEVKIT_VS_VERSION" = x; then
if test "x$VS_ENV_CMD" != x; then
# We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file.
- BASIC_FIXUP_EXECUTABLE(VS_ENV_CMD)
+ UTIL_FIXUP_EXECUTABLE(VS_ENV_CMD)
# Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat
AC_MSG_NOTICE([Trying to extract Visual Studio environment variables])
@@ -420,13 +420,13 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
# Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment).
# Instead create a shell script which will set the relevant variables when run.
WINPATH_VS_ENV_CMD="$VS_ENV_CMD"
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_VS_ENV_CMD])
+ UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_VS_ENV_CMD])
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
WINPATH_BASH="bash"
else
WINPATH_BASH="$BASH"
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_BASH])
+ UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_BASH])
fi
# Generate a DOS batch file which runs $VS_ENV_CMD, and then creates a shell
@@ -521,10 +521,10 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
IFS="$OLDIFS"
# Check that directory exists before calling fixup_path
testpath=$path
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH([testpath])
+ UTIL_REWRITE_AS_UNIX_PATH([testpath])
if test -d "$testpath"; then
- BASIC_FIXUP_PATH([path])
- BASIC_APPEND_TO_PATH(VS_PATH, $path)
+ UTIL_FIXUP_PATH([path])
+ UTIL_APPEND_TO_PATH(VS_PATH, $path)
fi
IFS=";"
fi
@@ -576,9 +576,9 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
IFS="$OLDIFS"
# Check that directory exists before calling fixup_path
testpath=$ipath
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH([testpath])
+ UTIL_REWRITE_AS_UNIX_PATH([testpath])
if test -d "$testpath"; then
- BASIC_FIXUP_PATH([ipath])
+ UTIL_FIXUP_PATH([ipath])
SYSROOT_CFLAGS="$SYSROOT_CFLAGS -I$ipath"
fi
IFS=";"
@@ -592,9 +592,9 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
IFS="$OLDIFS"
# Check that directory exists before calling fixup_path
testpath=$libpath
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH([testpath])
+ UTIL_REWRITE_AS_UNIX_PATH([testpath])
if test -d "$testpath"; then
- BASIC_FIXUP_PATH([libpath])
+ UTIL_FIXUP_PATH([libpath])
SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS -libpath:$libpath"
fi
IFS=";"
@@ -665,7 +665,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
if test "x$MSVC_DLL" = x; then
if test "x$VCINSTALLDIR" != x; then
CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
- BASIC_FIXUP_PATH(CYGWIN_VC_INSTALL_DIR)
+ UTIL_FIXUP_PATH(CYGWIN_VC_INSTALL_DIR)
if test "$VS_VERSION" -lt 2017; then
# Probe: Using well-known location from Visual Studio 12.0 and older
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
@@ -675,7 +675,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
fi
else
CYGWIN_VC_TOOLS_REDIST_DIR="$VCToolsRedistDir"
- BASIC_FIXUP_PATH(CYGWIN_VC_TOOLS_REDIST_DIR)
+ UTIL_FIXUP_PATH(CYGWIN_VC_TOOLS_REDIST_DIR)
# Probe: Using well-known location from VS 2017 and VS 2019
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_TOOLS_REDIST_DIR/x64/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
@@ -702,7 +702,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
if test "x$MSVC_DLL" = x; then
# Probe: Look in the Windows system32 directory
CYGWIN_SYSTEMROOT="$SYSTEMROOT"
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_SYSTEMROOT)
+ UTIL_REWRITE_AS_UNIX_PATH(CYGWIN_SYSTEMROOT)
POSSIBLE_MSVC_DLL="$CYGWIN_SYSTEMROOT/system32/$DLL_NAME"
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$POSSIBLE_MSVC_DLL],
[well-known location in SYSTEMROOT])
@@ -712,7 +712,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
# Probe: If Visual Studio Express is installed, there is usually one with the debugger
if test "x$VS100COMNTOOLS" != x; then
CYGWIN_VS_TOOLS_DIR="$VS100COMNTOOLS/.."
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_VS_TOOLS_DIR)
+ UTIL_REWRITE_AS_UNIX_PATH(CYGWIN_VS_TOOLS_DIR)
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
POSSIBLE_MSVC_DLL=`$FIND "$CYGWIN_VS_TOOLS_DIR" -name $DLL_NAME \
| $GREP -i /x64/ | $HEAD --lines 1`
@@ -814,14 +814,14 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
else
AC_MSG_RESULT([$with_ucrt_dll_dir])
UCRT_DLL_DIR="$with_ucrt_dll_dir"
- BASIC_FIXUP_PATH([UCRT_DLL_DIR])
+ UTIL_FIXUP_PATH([UCRT_DLL_DIR])
fi
elif test "x$DEVKIT_UCRT_DLL_DIR" != "x"; then
UCRT_DLL_DIR="$DEVKIT_UCRT_DLL_DIR"
AC_MSG_RESULT($UCRT_DLL_DIR)
else
CYGWIN_WINDOWSSDKDIR="${WINDOWSSDKDIR}"
- BASIC_FIXUP_PATH([CYGWIN_WINDOWSSDKDIR])
+ UTIL_FIXUP_PATH([CYGWIN_WINDOWSSDKDIR])
dll_subdir=$OPENJDK_TARGET_CPU
if test "x$dll_subdir" = "xx86_64"; then
dll_subdir="x64"
diff --git a/make/autoconf/util.m4 b/make/autoconf/util.m4
new file mode 100644
index 00000000000..7a1acb1a95c
--- /dev/null
+++ b/make/autoconf/util.m4
@@ -0,0 +1,399 @@
+#
+# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+m4_include([util_paths.m4])
+m4_include([util_windows.m4])
+
+###############################################################################
+# Create a function/macro that takes a series of named arguments. The call is
+# similar to AC_DEFUN, but the setup of the function looks like this:
+# UTIL_DEFUN_NAMED([MYFUNC], [FOO *BAR], [$@], [
+# ... do something
+# AC_MSG_NOTICE([Value of BAR is ARG_BAR])
+# ])
+# A star (*) in front of a named argument means that it is required and it's
+# presence will be verified. To pass e.g. the first value as a normal indexed
+# argument, use [m4_shift($@)] as the third argument instead of [$@]. These
+# arguments are referenced in the function by their name prefixed by ARG_, e.g.
+# "ARG_FOO".
+#
+# The generated function can be called like this:
+# MYFUNC(FOO: [foo-val],
+# BAR: [
+# $ECHO hello world
+# ])
+# Note that the argument value must start on the same line as the argument name.
+#
+# Argument 1: Name of the function to define
+# Argument 2: List of legal named arguments, with a * prefix for required arguments
+# Argument 3: Argument array to treat as named, typically $@
+# Argument 4: The main function body
+AC_DEFUN([UTIL_DEFUN_NAMED],
+[
+ AC_DEFUN($1, [
+ m4_foreach(arg, m4_split($2), [
+ m4_if(m4_bregexp(arg, [^\*]), -1,
+ [
+ m4_set_add(legal_named_args, arg)
+ ],
+ [
+ m4_set_add(legal_named_args, m4_substr(arg, 1))
+ m4_set_add(required_named_args, m4_substr(arg, 1))
+ ]
+ )
+ ])
+
+ m4_foreach([arg], [$3], [
+ m4_define(arg_name, m4_substr(arg, 0, m4_bregexp(arg, [: ])))
+ m4_set_contains(legal_named_args, arg_name, [],[AC_MSG_ERROR([Internal error: arg_name is not a valid named argument to [$1]. Valid arguments are 'm4_set_contents(legal_named_args, [ ])'.])])
+ m4_set_remove(required_named_args, arg_name)
+ m4_set_remove(legal_named_args, arg_name)
+ m4_pushdef([ARG_][]arg_name, m4_substr(arg, m4_incr(m4_incr(m4_bregexp(arg, [: ])))))
+ m4_set_add(defined_args, arg_name)
+ m4_undefine([arg_name])
+ ])
+ m4_set_empty(required_named_args, [], [
+ AC_MSG_ERROR([Internal error: Required named arguments are missing for [$1]. Missing arguments: 'm4_set_contents(required_named_args, [ ])'])
+ ])
+ m4_foreach([arg], m4_indir([m4_dquote]m4_set_listc([legal_named_args])), [
+ m4_pushdef([ARG_][]arg, [])
+ m4_set_add(defined_args, arg)
+ ])
+ m4_set_delete(legal_named_args)
+ m4_set_delete(required_named_args)
+
+ # Execute function body
+ $4
+
+ m4_foreach([arg], m4_indir([m4_dquote]m4_set_listc([defined_args])), [
+ m4_popdef([ARG_][]arg)
+ ])
+
+ m4_set_delete(defined_args)
+ ])
+])
+
+###############################################################################
+# Assert that a programmatic condition holds. If not, exit with an error message.
+# Check that two strings are equal.
+#
+# $1: The actual string found
+# $2: The expected string
+# $3: An message to print in case of failure [optional]
+#
+AC_DEFUN([UTIL_ASSERT_STRING_EQUALS],
+[
+ ASSERTION_MSG="m4_normalize([$3])"
+ if test "x[$1]" != "x[$2]"; then
+ $ECHO Assertion failed: Actual value '[$1]' \("[$1]"\) did not match \
+ expected value '[$2]' \("[$2]"\)
+ if test "x$ASSERTION_MSG" != x; then
+ $ECHO Assertion message: "$ASSERTION_MSG"
+ fi
+ exit 1
+ fi
+])
+
+###############################################################################
+# Check if a list of space-separated words are selected only from a list of
+# space-separated legal words. Typical use is to see if a user-specified
+# set of words is selected from a set of legal words.
+#
+# Sets the specified variable to list of non-matching (offending) words, or to
+# the empty string if all words are matching the legal set.
+#
+# $1: result variable name
+# $2: list of values to check
+# $3: list of legal values
+AC_DEFUN([UTIL_GET_NON_MATCHING_VALUES],
+[
+ # grep filter function inspired by a comment to http://stackoverflow.com/a/1617326
+ # Notice that the original variant fails on SLES 10 and 11
+ # Some grep versions (at least bsd) behaves strangely on the base case with
+ # no legal_values, so make it explicit.
+ values_to_check=`$ECHO $2 | $TR ' ' '\n'`
+ legal_values=`$ECHO $3 | $TR ' ' '\n'`
+ if test -z "$legal_values"; then
+ $1="$2"
+ else
+ result=`$GREP -Fvx "$legal_values" <<< "$values_to_check" | $GREP -v '^$'`
+ $1=${result//$'\n'/ }
+ fi
+])
+
+###############################################################################
+# Check if a list of space-separated words contains any word(s) from a list of
+# space-separated illegal words. Typical use is to see if a user-specified
+# set of words contains any from a set of illegal words.
+#
+# Sets the specified variable to list of matching illegal words, or to
+# the empty string if no words are matching the illegal set.
+#
+# $1: result variable name
+# $2: list of values to check
+# $3: list of illegal values
+AC_DEFUN([UTIL_GET_MATCHING_VALUES],
+[
+ # grep filter function inspired by a comment to http://stackoverflow.com/a/1617326
+ # Notice that the original variant fails on SLES 10 and 11
+ # Some grep versions (at least bsd) behaves strangely on the base case with
+ # no legal_values, so make it explicit.
+ values_to_check=`$ECHO $2 | $TR ' ' '\n'`
+ illegal_values=`$ECHO $3 | $TR ' ' '\n'`
+ if test -z "$illegal_values"; then
+ $1=""
+ else
+ result=`$GREP -Fx "$illegal_values" <<< "$values_to_check" | $GREP -v '^$'`
+ $1=${result//$'\n'/ }
+ fi
+])
+
+###############################################################################
+# Sort a space-separated list, and remove duplicates.
+#
+# Sets the specified variable to the resulting list.
+#
+# $1: result variable name
+# $2: list of values to sort
+AC_DEFUN([UTIL_SORT_LIST],
+[
+ values_to_sort=`$ECHO $2 | $TR ' ' '\n'`
+ result=`$SORT -u <<< "$values_to_sort" | $GREP -v '^$'`
+ $1=${result//$'\n'/ }
+])
+
+###############################################################################
+# Test if $1 is a valid argument to $3 (often is $JAVA passed as $3)
+# If so, then append $1 to $2 \
+# Also set JVM_ARG_OK to true/false depending on outcome.
+AC_DEFUN([UTIL_ADD_JVM_ARG_IF_OK],
+[
+ $ECHO "Check if jvm arg is ok: $1" >&AS_MESSAGE_LOG_FD
+ $ECHO "Command: $3 $1 -version" >&AS_MESSAGE_LOG_FD
+ OUTPUT=`$3 $1 $USER_BOOT_JDK_OPTIONS -version 2>&1`
+ FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn`
+ FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ $2="[$]$2 $1"
+ JVM_ARG_OK=true
+ else
+ $ECHO "Arg failed:" >&AS_MESSAGE_LOG_FD
+ $ECHO "$OUTPUT" >&AS_MESSAGE_LOG_FD
+ JVM_ARG_OK=false
+ fi
+])
+
+###############################################################################
+# Register a --with argument but mark it as deprecated
+# $1: The name of the with argument to deprecate, not including --with-
+AC_DEFUN([UTIL_DEPRECATED_ARG_WITH],
+[
+ AC_ARG_WITH($1, [AS_HELP_STRING([--with-$1],
+ [Deprecated. Option is kept for backwards compatibility and is ignored])],
+ [AC_MSG_WARN([Option --with-$1 is deprecated and will be ignored.])])
+])
+
+###############################################################################
+# Register a --enable argument but mark it as deprecated
+# $1: The name of the with argument to deprecate, not including --enable-
+# $2: The name of the argument to deprecate, in shell variable style (i.e. with _ instead of -)
+# $3: Messages to user.
+AC_DEFUN([UTIL_DEPRECATED_ARG_ENABLE],
+[
+ AC_ARG_ENABLE($1, [AS_HELP_STRING([--enable-$1],
+ [Deprecated. Option is kept for backwards compatibility and is ignored])])
+ if test "x$enable_$2" != x; then
+ AC_MSG_WARN([Option --enable-$1 is deprecated and will be ignored.])
+
+ if test "x$3" != x; then
+ AC_MSG_WARN([$3])
+ fi
+
+ fi
+])
+
+###############################################################################
+# Register an --enable-* argument as an alias for another argument.
+# $1: The name of the enable argument for the new alias, not including --enable-
+# $2: The full name of the argument of which to make this an alias, including
+# --enable- or --with-.
+AC_DEFUN([UTIL_ALIASED_ARG_ENABLE],
+[
+ AC_ARG_ENABLE($1, [AS_HELP_STRING([--enable-$1], [alias for $2])], [
+ # Use m4 to strip initial -- from target ($2), convert - to _, prefix enable_
+ # to new alias name, and create a shell variable assignment,
+ # e.g.: enable_old_style="$enable_new_alias"
+ m4_translit(m4_bpatsubst($2, --), -, _)="$[enable_]m4_translit($1, -, _)"
+ ])
+])
+
+###############################################################################
+# Test that variable $1 denoting a program is not empty. If empty, exit with an error.
+# $1: variable to check
+AC_DEFUN([UTIL_CHECK_NONEMPTY],
+[
+ if test "x[$]$1" = x; then
+ AC_MSG_ERROR([Could not find required tool for $1])
+ fi
+])
+
+###############################################################################
+# Setup a tool for the given variable. If correctly specified by the user,
+# use that value, otherwise search for the tool using the supplied code snippet.
+# $1: variable to set
+# $2: code snippet to call to look for the tool
+# $3: code snippet to call if variable was used to find tool
+AC_DEFUN([UTIL_SETUP_TOOL],
+[
+ # Publish this variable in the help.
+ AC_ARG_VAR($1, [Override default value for $1])
+
+ if [[ -z "${$1+x}" ]]; then
+ # The variable is not set by user, try to locate tool using the code snippet
+ $2
+ else
+ # The variable is set, but is it from the command line or the environment?
+
+ # Try to remove the string !$1! from our list.
+ try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!$1!/}
+ if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then
+ # If it failed, the variable was not from the command line. Ignore it,
+ # but warn the user (except for BASH, which is always set by the calling BASH).
+ if test "x$1" != xBASH; then
+ AC_MSG_WARN([Ignoring value of $1 from the environment. Use command line variables instead.])
+ fi
+ # Try to locate tool using the code snippet
+ $2
+ else
+ # If it succeeded, then it was overridden by the user. We will use it
+ # for the tool.
+
+ # First remove it from the list of overridden variables, so we can test
+ # for unknown variables in the end.
+ CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var"
+
+ tool_override=[$]$1
+ AC_MSG_NOTICE([User supplied override $1="$tool_override"])
+
+ # Check if we try to supply an empty value
+ if test "x$tool_override" = x; then
+ AC_MSG_CHECKING([for $1])
+ AC_MSG_RESULT([disabled])
+ else
+ # Split up override in command part and argument part
+ tool_and_args=($tool_override)
+ [ tool_command=${tool_and_args[0]} ]
+ [ unset 'tool_and_args[0]' ]
+ [ tool_args=${tool_and_args[@]} ]
+
+ # Check if the provided tool contains a complete path.
+ tool_basename="${tool_command##*/}"
+ if test "x$tool_basename" = "x$tool_command"; then
+ # A command without a complete path is provided, search $PATH.
+ AC_MSG_NOTICE([Will search for user supplied tool "$tool_basename"])
+ AC_PATH_PROG($1, $tool_basename)
+ if test "x[$]$1" = x; then
+ AC_MSG_ERROR([User supplied tool $1="$tool_basename" could not be found])
+ fi
+ else
+ # Otherwise we believe it is a complete path. Use it as it is.
+ AC_MSG_NOTICE([Will use user supplied tool "$tool_command"])
+ AC_MSG_CHECKING([for $tool_command])
+ if test ! -x "$tool_command"; then
+ AC_MSG_RESULT([not found])
+ AC_MSG_ERROR([User supplied tool $1="$tool_command" does not exist or is not executable])
+ fi
+ $1="$tool_command"
+ AC_MSG_RESULT([found])
+ fi
+ if test "x$tool_args" != x; then
+ # If we got arguments, re-append them to the command after the fixup.
+ $1="[$]$1 $tool_args"
+ fi
+ fi
+ fi
+ $3
+ fi
+])
+
+###############################################################################
+# Call UTIL_SETUP_TOOL with AC_PATH_PROGS to locate the tool
+# $1: variable to set
+# $2: executable name (or list of names) to look for
+# $3: [path]
+AC_DEFUN([UTIL_PATH_PROGS],
+[
+ UTIL_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2, , $3)])
+])
+
+###############################################################################
+# Call UTIL_SETUP_TOOL with AC_CHECK_TOOLS to locate the tool
+# $1: variable to set
+# $2: executable name (or list of names) to look for
+AC_DEFUN([UTIL_CHECK_TOOLS],
+[
+ UTIL_SETUP_TOOL($1, [AC_CHECK_TOOLS($1, $2)])
+])
+
+###############################################################################
+# Like UTIL_PATH_PROGS but fails if no tool was found.
+# $1: variable to set
+# $2: executable name (or list of names) to look for
+# $3: [path]
+AC_DEFUN([UTIL_REQUIRE_PROGS],
+[
+ UTIL_PATH_PROGS($1, $2, , $3)
+ UTIL_CHECK_NONEMPTY($1)
+])
+
+###############################################################################
+# Like UTIL_SETUP_TOOL but fails if no tool was found.
+# $1: variable to set
+# $2: autoconf macro to call to look for the special tool
+AC_DEFUN([UTIL_REQUIRE_SPECIAL],
+[
+ UTIL_SETUP_TOOL($1, [$2])
+ UTIL_CHECK_NONEMPTY($1)
+])
+
+###############################################################################
+# Like UTIL_REQUIRE_PROGS but also allows for bash built-ins
+# $1: variable to set
+# $2: executable name (or list of names) to look for
+# $3: [path]
+AC_DEFUN([UTIL_REQUIRE_BUILTIN_PROGS],
+[
+ UTIL_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2, , $3)])
+ if test "x[$]$1" = x; then
+ AC_MSG_NOTICE([Required tool $2 not found in PATH, checking built-in])
+ if help $2 > /dev/null 2>&1; then
+ AC_MSG_NOTICE([Found $2 as shell built-in. Using it])
+ $1="$2"
+ else
+ AC_MSG_ERROR([Required tool $2 also not found as built-in.])
+ fi
+ fi
+ UTIL_CHECK_NONEMPTY($1)
+])
diff --git a/make/autoconf/util_paths.m4 b/make/autoconf/util_paths.m4
new file mode 100644
index 00000000000..9a3d3e2bb04
--- /dev/null
+++ b/make/autoconf/util_paths.m4
@@ -0,0 +1,232 @@
+#
+# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# Appends a string to a path variable, only adding the : when needed.
+AC_DEFUN([UTIL_APPEND_TO_PATH],
+[
+ if test "x$2" != x; then
+ if test "x[$]$1" = x; then
+ $1="$2"
+ else
+ $1="[$]$1:$2"
+ fi
+ fi
+])
+
+# Prepends a string to a path variable, only adding the : when needed.
+AC_DEFUN([UTIL_PREPEND_TO_PATH],
+[
+ if test "x$2" != x; then
+ if test "x[$]$1" = x; then
+ $1="$2"
+ else
+ $1="$2:[$]$1"
+ fi
+ fi
+])
+
+################################################################################
+# This will make a path absolute. Assumes it's already a unix path. Also
+# resolves ~ to homedir.
+AC_DEFUN([UTIL_ABSOLUTE_PATH],
+[
+ if test "x[$]$1" != x; then
+ new_path="[$]$1"
+
+ # Use eval to expand a potential ~. This technique does not work if there
+ # are spaces in the path (which is valid at this point on Windows), so only
+ # try to apply it if there is an actual ~ first in the path.
+ if [ [[ "$new_path" = "~"* ]] ]; then
+ eval new_path="$new_path"
+ if test ! -f "$new_path" && test ! -d "$new_path"; then
+ AC_MSG_ERROR([The new_path of $1, which resolves as "$new_path", is not found.])
+ fi
+ fi
+
+ if test -d "$new_path"; then
+ $1="`cd "$new_path"; $THEPWDCMD -L`"
+ else
+ dir="`$DIRNAME "$new_path"`"
+ base="`$BASENAME "$new_path"`"
+ $1="`cd "$dir"; $THEPWDCMD -L`/$base"
+ fi
+ fi
+])
+
+###############################################################################
+# This will make sure the given variable points to a full and proper
+# path. This means:
+# 1) There will be no spaces in the path. On unix platforms,
+# spaces in the path will result in an error. On Windows,
+# the path will be rewritten using short-style to be space-free.
+# 2) The path will be absolute, and it will be in unix-style (on
+# cygwin).
+# $1: The name of the variable to fix
+AC_DEFUN([UTIL_FIXUP_PATH],
+[
+ # Only process if variable expands to non-empty
+ if test "x[$]$1" != x; then
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+ UTIL_FIXUP_PATH_CYGWIN($1)
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+ UTIL_FIXUP_PATH_MSYS($1)
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
+ UTIL_FIXUP_PATH_WSL($1)
+ else
+ # We're on a unix platform. Hooray! :)
+ path="[$]$1"
+ has_space=`$ECHO "$path" | $GREP " "`
+ if test "x$has_space" != x; then
+ AC_MSG_NOTICE([The path of $1, which resolves as "$path", is invalid.])
+ AC_MSG_ERROR([Spaces are not allowed in this path.])
+ fi
+
+ UTIL_ABSOLUTE_PATH(path)
+ $1="$path"
+ fi
+ fi
+])
+
+###############################################################################
+# This will make sure the given variable points to a executable
+# with a full and proper path. This means:
+# 1) There will be no spaces in the path. On unix platforms,
+# spaces in the path will result in an error. On Windows,
+# the path will be rewritten using short-style to be space-free.
+# 2) The path will be absolute, and it will be in unix-style (on
+# cygwin).
+# Any arguments given to the executable is preserved.
+# If the input variable does not have a directory specification, then
+# it need to be in the PATH.
+# $1: The name of the variable to fix
+AC_DEFUN([UTIL_FIXUP_EXECUTABLE],
+[
+ # Only process if variable expands to non-empty
+
+ if test "x[$]$1" != x; then
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
+ UTIL_FIXUP_EXECUTABLE_CYGWIN($1)
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+ UTIL_FIXUP_EXECUTABLE_MSYS($1)
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
+ UTIL_FIXUP_EXECUTABLE_WSL($1)
+ else
+ # We're on a unix platform. Hooray! :)
+ # First separate the path from the arguments. This will split at the first
+ # space.
+ complete="[$]$1"
+ path="${complete%% *}"
+ tmp="$complete EOL"
+ arguments="${tmp#* }"
+
+ # Cannot rely on the command "which" here since it doesn't always work.
+ is_absolute_path=`$ECHO "$path" | $GREP ^/`
+ if test -z "$is_absolute_path"; then
+ # Path to executable is not absolute. Find it.
+ IFS_save="$IFS"
+ IFS=:
+ for p in $PATH; do
+ if test -f "$p/$path" && test -x "$p/$path"; then
+ new_path="$p/$path"
+ break
+ fi
+ done
+ IFS="$IFS_save"
+ else
+ # This is an absolute path, we can use it without further modifications.
+ new_path="$path"
+ fi
+
+ if test "x$new_path" = x; then
+ AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.])
+ has_space=`$ECHO "$complete" | $GREP " "`
+ if test "x$has_space" != x; then
+ AC_MSG_NOTICE([This might be caused by spaces in the path, which is not allowed.])
+ fi
+ AC_MSG_ERROR([Cannot locate the the path of $1])
+ fi
+ fi
+
+ # Now join together the path and the arguments once again
+ if test "x$arguments" != xEOL; then
+ new_complete="$new_path ${arguments% *}"
+ else
+ new_complete="$new_path"
+ fi
+
+ if test "x$complete" != "x$new_complete"; then
+ $1="$new_complete"
+ AC_MSG_NOTICE([Rewriting $1 to "$new_complete"])
+ fi
+ fi
+])
+
+###############################################################################
+AC_DEFUN([UTIL_REMOVE_SYMBOLIC_LINKS],
+[
+ if test "x$OPENJDK_BUILD_OS" != xwindows; then
+ # Follow a chain of symbolic links. Use readlink
+ # where it exists, else fall back to horribly
+ # complicated shell code.
+ if test "x$READLINK_TESTED" != yes; then
+ # On MacOSX there is a readlink tool with a different
+ # purpose than the GNU readlink tool. Check the found readlink.
+ READLINK_ISGNU=`$READLINK --version 2>&1 | $GREP GNU`
+ # If READLINK_ISGNU is empty, then it's a non-GNU readlink. Don't use it.
+ READLINK_TESTED=yes
+ fi
+
+ if test "x$READLINK" != x && test "x$READLINK_ISGNU" != x; then
+ $1=`$READLINK -f [$]$1`
+ else
+ # Save the current directory for restoring afterwards
+ STARTDIR=$PWD
+ COUNTER=0
+ sym_link_dir=`$DIRNAME [$]$1`
+ sym_link_file=`$BASENAME [$]$1`
+ cd $sym_link_dir
+ # Use -P flag to resolve symlinks in directories.
+ cd `$THEPWDCMD -P`
+ sym_link_dir=`$THEPWDCMD -P`
+ # Resolve file symlinks
+ while test $COUNTER -lt 20; do
+ ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'`
+ if test "x$ISLINK" == x; then
+ # This is not a symbolic link! We are done!
+ break
+ fi
+ # Again resolve directory symlinks since the target of the just found
+ # link could be in a different directory
+ cd `$DIRNAME $ISLINK`
+ sym_link_dir=`$THEPWDCMD -P`
+ sym_link_file=`$BASENAME $ISLINK`
+ let COUNTER=COUNTER+1
+ done
+ cd $STARTDIR
+ $1=$sym_link_dir/$sym_link_file
+ fi
+ fi
+])
+
diff --git a/make/autoconf/basics_windows.m4 b/make/autoconf/util_windows.m4
similarity index 65%
rename from make/autoconf/basics_windows.m4
rename to make/autoconf/util_windows.m4
index 1c2536c72ce..625f360f2f9 100644
--- a/make/autoconf/basics_windows.m4
+++ b/make/autoconf/util_windows.m4
@@ -23,7 +23,7 @@
# questions.
#
-AC_DEFUN([BASIC_WINDOWS_REWRITE_AS_UNIX_PATH],
+AC_DEFUN([UTIL_REWRITE_AS_UNIX_PATH],
[
windows_path="[$]$1"
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
@@ -42,7 +42,7 @@ AC_DEFUN([BASIC_WINDOWS_REWRITE_AS_UNIX_PATH],
fi
])
-AC_DEFUN([BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH],
+AC_DEFUN([UTIL_REWRITE_AS_WINDOWS_MIXED_PATH],
[
unix_path="[$]$1"
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
@@ -60,7 +60,7 @@ AC_DEFUN([BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH],
# Helper function which possibly converts a path using DOS-style short mode.
# If so, the updated path is stored in $new_path.
# $1: The path to check
-AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN],
+AC_DEFUN([UTIL_MAKE_WINDOWS_SPACE_SAFE_CYGWIN],
[
input_path="$1"
# Check if we need to convert this using DOS-style short mode. If the path
@@ -96,7 +96,7 @@ AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN],
# Helper function which possibly converts a path using DOS-style short mode.
# If so, the updated path is stored in $new_path.
# $1: The path to check
-AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS],
+AC_DEFUN([UTIL_MAKE_WINDOWS_SPACE_SAFE_MSYS],
[
input_path="$1"
# Check if we need to convert this using DOS-style short mode. If the path
@@ -113,7 +113,7 @@ AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS],
# Helper function which possibly converts a path using DOS-style short mode.
# If so, the updated path is stored in $new_path.
# $1: The path to check
-AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_WSL],
+AC_DEFUN([UTIL_MAKE_WINDOWS_SPACE_SAFE_WSL],
[
input_path="$1"
# Check if we need to convert this using DOS-style short mode. If the path
@@ -124,31 +124,31 @@ AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_WSL],
if test "x$has_forbidden_chars" != x; then
# Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
TOPDIR_windows="$TOPDIR"
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([TOPDIR_windows])
+ UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([TOPDIR_windows])
# First convert to Windows path to make input valid for cmd
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([input_path])
+ UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([input_path])
new_path=`$CMD /c $TOPDIR_windows/make/scripts/windowsShortName.bat "$input_path" \
| $SED -e 's|\r||g' \
| $TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
# Rewrite back to unix style
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH([new_path])
+ UTIL_REWRITE_AS_UNIX_PATH([new_path])
fi
])
-# FIXME: The BASIC_FIXUP_*_CYGWIN/MSYS is most likely too convoluted
+# FIXME: The UTIL_FIXUP_*_CYGWIN/MSYS is most likely too convoluted
# and could probably be heavily simplified. However, all changes in this
# area tend to need lot of testing in different scenarios, and in lack of
# proper unit testing, cleaning this up has not been deemed worth the effort
# at the moment.
-AC_DEFUN([BASIC_FIXUP_PATH_CYGWIN],
+AC_DEFUN([UTIL_FIXUP_PATH_CYGWIN],
[
# Input might be given as Windows format, start by converting to
# unix format.
path="[$]$1"
new_path=`$CYGPATH -u "$path"`
- BASIC_ABSOLUTE_PATH(new_path)
+ UTIL_ABSOLUTE_PATH(new_path)
# Cygwin tries to hide some aspects of the Windows file system, such that binaries are
# named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
@@ -165,7 +165,7 @@ AC_DEFUN([BASIC_FIXUP_PATH_CYGWIN],
# Call helper function which possibly converts this using DOS-style short mode.
# If so, the updated path is stored in $new_path.
- BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$new_path])
+ UTIL_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$new_path])
if test "x$path" != "x$new_path"; then
$1="$new_path"
@@ -173,7 +173,7 @@ AC_DEFUN([BASIC_FIXUP_PATH_CYGWIN],
fi
])
-AC_DEFUN([BASIC_FIXUP_PATH_MSYS],
+AC_DEFUN([UTIL_FIXUP_PATH_MSYS],
[
path="[$]$1"
has_colon=`$ECHO $path | $GREP ^.:`
@@ -183,10 +183,10 @@ AC_DEFUN([BASIC_FIXUP_PATH_MSYS],
new_path=`cmd //c echo $path`
fi
- BASIC_ABSOLUTE_PATH(new_path)
+ UTIL_ABSOLUTE_PATH(new_path)
- BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path])
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path)
+ UTIL_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path])
+ UTIL_REWRITE_AS_UNIX_PATH(new_path)
if test "x$path" != "x$new_path"; then
$1="$new_path"
AC_MSG_NOTICE([Rewriting $1 to "$new_path"])
@@ -196,18 +196,18 @@ AC_DEFUN([BASIC_FIXUP_PATH_MSYS],
all_fixpath_prefixes=("${all_fixpath_prefixes@<:@@@:>@}" "${new_path:0:10}")
])
-AC_DEFUN([BASIC_FIXUP_PATH_WSL],
+AC_DEFUN([UTIL_FIXUP_PATH_WSL],
[
# Input might be given as Windows format, start by converting to
# unix format.
new_path="[$]$1"
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH([new_path])
+ UTIL_REWRITE_AS_UNIX_PATH([new_path])
- BASIC_ABSOLUTE_PATH(new_path)
+ UTIL_ABSOLUTE_PATH(new_path)
# Call helper function which possibly converts this using DOS-style short mode.
# If so, the updated path is stored in $new_path.
- BASIC_MAKE_WINDOWS_SPACE_SAFE_WSL([$new_path])
+ UTIL_MAKE_WINDOWS_SPACE_SAFE_WSL([$new_path])
if test "x$path" != "x$new_path"; then
$1="$new_path"
@@ -215,7 +215,7 @@ AC_DEFUN([BASIC_FIXUP_PATH_WSL],
fi
])
-AC_DEFUN([BASIC_FIXUP_EXECUTABLE_CYGWIN],
+AC_DEFUN([UTIL_FIXUP_EXECUTABLE_CYGWIN],
[
# First separate the path from the arguments. This will split at the first
# space.
@@ -291,12 +291,12 @@ AC_DEFUN([BASIC_FIXUP_EXECUTABLE_CYGWIN],
# Call helper function which possibly converts this using DOS-style short mode.
# If so, the updated path is stored in $new_path.
new_path="$input_to_shortpath"
- BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$input_to_shortpath])
+ UTIL_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$input_to_shortpath])
# remove trailing .exe if any
new_path="${new_path/%.exe/}"
])
-AC_DEFUN([BASIC_FIXUP_EXECUTABLE_MSYS],
+AC_DEFUN([UTIL_FIXUP_EXECUTABLE_MSYS],
[
# First separate the path from the arguments. This will split at the first
# space.
@@ -308,7 +308,7 @@ AC_DEFUN([BASIC_FIXUP_EXECUTABLE_MSYS],
# Input might be given as Windows format, start by converting to
# unix format.
new_path="$path"
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path)
+ UTIL_REWRITE_AS_UNIX_PATH(new_path)
# Now try to locate executable using which
new_path=`$WHICH "$new_path" 2> /dev/null`
@@ -321,7 +321,7 @@ AC_DEFUN([BASIC_FIXUP_EXECUTABLE_MSYS],
path="$complete"
arguments="EOL"
new_path="$path"
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path)
+ UTIL_REWRITE_AS_UNIX_PATH(new_path)
new_path=`$WHICH "$new_path" 2> /dev/null`
# bat and cmd files are not always considered executable in MSYS causing which
@@ -330,7 +330,7 @@ AC_DEFUN([BASIC_FIXUP_EXECUTABLE_MSYS],
&& test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
&& test "x`$LS \"$path\" 2>/dev/null`" != x; then
new_path="$path"
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path)
+ UTIL_REWRITE_AS_UNIX_PATH(new_path)
fi
if test "x$new_path" = x; then
@@ -352,9 +352,9 @@ AC_DEFUN([BASIC_FIXUP_EXECUTABLE_MSYS],
else
# Not in mixed or Windows style, start by that.
new_path=`cmd //c echo $new_path`
- BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path])
+ UTIL_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path])
# Output is in $new_path
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path)
+ UTIL_REWRITE_AS_UNIX_PATH(new_path)
# remove trailing .exe if any
new_path="${new_path/%.exe/}"
@@ -363,7 +363,7 @@ AC_DEFUN([BASIC_FIXUP_EXECUTABLE_MSYS],
fi
])
-AC_DEFUN([BASIC_FIXUP_EXECUTABLE_WSL],
+AC_DEFUN([UTIL_FIXUP_EXECUTABLE_WSL],
[
# First separate the path from the arguments. This will split at the first
# space.
@@ -375,7 +375,7 @@ AC_DEFUN([BASIC_FIXUP_EXECUTABLE_WSL],
# Input might be given as Windows format, start by converting to
# unix format.
new_path="$path"
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH([new_path])
+ UTIL_REWRITE_AS_UNIX_PATH([new_path])
# Now try to locate executable using which
new_path_bak="$new_path"
@@ -394,7 +394,7 @@ AC_DEFUN([BASIC_FIXUP_EXECUTABLE_WSL],
path="$complete"
arguments="EOL"
new_path="$path"
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH([new_path])
+ UTIL_REWRITE_AS_UNIX_PATH([new_path])
new_path_bak="$new_path"
new_path=`$WHICH "$new_path" 2> /dev/null`
# bat and cmd files are not considered executable in WSL
@@ -433,164 +433,6 @@ AC_DEFUN([BASIC_FIXUP_EXECUTABLE_WSL],
# Call helper function which possibly converts this using DOS-style short mode.
# If so, the updated path is stored in $new_path.
new_path="$input_to_shortpath"
- BASIC_MAKE_WINDOWS_SPACE_SAFE_WSL([$input_to_shortpath])
+ UTIL_MAKE_WINDOWS_SPACE_SAFE_WSL([$input_to_shortpath])
])
-# Setup basic configuration paths, and platform-specific stuff related to PATHs.
-AC_DEFUN([BASIC_CHECK_PATHS_WINDOWS],
-[
- SRC_ROOT_LENGTH=`$THEPWDCMD -L|$WC -m`
- if test $SRC_ROOT_LENGTH -gt 100; then
- AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported])
- fi
-
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- AC_MSG_CHECKING([cygwin release])
- CYGWIN_VERSION=`$UNAME -r`
- AC_MSG_RESULT([$CYGWIN_VERSION])
- WINDOWS_ENV_VENDOR='cygwin'
- WINDOWS_ENV_VERSION="$CYGWIN_VERSION"
-
- CYGWIN_VERSION_OLD=`$ECHO $CYGWIN_VERSION | $GREP -e '^1\.[0-6]'`
- if test "x$CYGWIN_VERSION_OLD" != x; then
- AC_MSG_NOTICE([Your cygwin is too old. You are running $CYGWIN_VERSION, but at least cygwin 1.7 is required. Please upgrade.])
- AC_MSG_ERROR([Cannot continue])
- fi
- if test "x$CYGPATH" = x; then
- AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path])
- fi
- AC_MSG_CHECKING([cygwin root directory as unix-style path])
- # The cmd output ends with Windows line endings (CR/LF)
- cygwin_winpath_root=`cd / ; cmd /c cd | $TR -d '\r\n'`
- # Force cygpath to report the proper root by including a trailing space, and then stripping it off again.
- CYGWIN_ROOT_PATH=`$CYGPATH -u "$cygwin_winpath_root " | $CUT -f 1 -d " "`
- AC_MSG_RESULT([$CYGWIN_ROOT_PATH])
- WINDOWS_ENV_ROOT_PATH="$CYGWIN_ROOT_PATH"
- test_cygdrive_prefix=`$ECHO $CYGWIN_ROOT_PATH | $GREP ^/cygdrive/`
- if test "x$test_cygdrive_prefix" = x; then
- AC_MSG_ERROR([Your cygdrive prefix is not /cygdrive. This is currently not supported. Change with mount -c.])
- fi
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- AC_MSG_CHECKING([msys release])
- MSYS_VERSION=`$UNAME -r`
- AC_MSG_RESULT([$MSYS_VERSION])
-
- WINDOWS_ENV_VENDOR='msys'
- WINDOWS_ENV_VERSION="$MSYS_VERSION"
-
- AC_MSG_CHECKING([msys root directory as unix-style path])
- # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away
- MSYS_ROOT_PATH=`cd / ; cmd /c cd | $GREP ".*"`
- BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(MSYS_ROOT_PATH)
- AC_MSG_RESULT([$MSYS_ROOT_PATH])
- WINDOWS_ENV_ROOT_PATH="$MSYS_ROOT_PATH"
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- AC_MSG_CHECKING([Windows version])
- # m4 replaces [ and ] so we use @<:@ and @:>@ instead
- WINDOWS_VERSION=`$CMD /c ver.exe | $EGREP -o '(@<:@0-9@:>@+\.)+@<:@0-9@:>@+'`
- AC_MSG_RESULT([$WINDOWS_VERSION])
-
- AC_MSG_CHECKING([WSL kernel version])
- WSL_KERNEL_VERSION=`$UNAME -v`
- AC_MSG_RESULT([$WSL_KERNEL_VERSION])
-
- AC_MSG_CHECKING([WSL kernel release])
- WSL_KERNEL_RELEASE=`$UNAME -r`
- AC_MSG_RESULT([$WSL_KERNEL_RELEASE])
-
- AC_MSG_CHECKING([WSL distribution])
- WSL_DISTRIBUTION=`$LSB_RELEASE -d | sed 's/Description:\t//'`
- AC_MSG_RESULT([$WSL_DISTRIBUTION])
-
- WINDOWS_ENV_VENDOR='WSL'
- WINDOWS_ENV_VERSION="$WSL_DISTRIBUTION $WSL_KERNEL_VERSION $WSL_KERNEL_RELEASE (on Windows build $WINDOWS_VERSION)"
- else
- AC_MSG_ERROR([Unknown Windows environment. Neither cygwin, msys, nor wsl was detected.])
- fi
-
- # Test if windows or unix (cygwin/msys) find is first in path.
- AC_MSG_CHECKING([what kind of 'find' is first on the PATH])
- FIND_BINARY_OUTPUT=`find --version 2>&1`
- if test "x`echo $FIND_BINARY_OUTPUT | $GREP GNU`" != x; then
- AC_MSG_RESULT([unix style])
- elif test "x`echo $FIND_BINARY_OUTPUT | $GREP FIND`" != x; then
- AC_MSG_RESULT([Windows])
- AC_MSG_NOTICE([Your path contains Windows tools (C:\Windows\system32) before your unix (cygwin or msys) tools.])
- AC_MSG_NOTICE([This will not work. Please correct and make sure /usr/bin (or similar) is first in path.])
- AC_MSG_ERROR([Cannot continue])
- else
- AC_MSG_RESULT([unknown])
- AC_MSG_WARN([It seems that your find utility is non-standard.])
- fi
-])
-
-AC_DEFUN_ONCE([BASIC_COMPILE_FIXPATH],
-[
- # When using cygwin or msys, we need a wrapper binary that renames
- # /cygdrive/c/ arguments into c:/ arguments and peeks into
- # @files and rewrites these too! This wrapper binary is
- # called fixpath.
- FIXPATH=
- if test "x$OPENJDK_BUILD_OS" = xwindows; then
- AC_MSG_CHECKING([if fixpath can be created])
- FIXPATH_SRC="$TOPDIR/make/src/native/fixpath.c"
- FIXPATH_BIN="$CONFIGURESUPPORT_OUTPUTDIR/bin/fixpath.exe"
- FIXPATH_DIR="$CONFIGURESUPPORT_OUTPUTDIR/fixpath"
- if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then
- # Important to keep the .exe suffix on Cygwin for Hotspot makefiles
- FIXPATH="$FIXPATH_BIN -c"
- elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.msys; then
- # Take all collected prefixes and turn them into a -m/c/foo@/c/bar@... command line
- # @ was chosen as separator to minimize risk of other tools messing around with it
- all_unique_prefixes=`echo "${all_fixpath_prefixes@<:@@@:>@}" \
- | tr ' ' '\n' | $GREP '^/./' | $SORT | $UNIQ`
- fixpath_argument_list=`echo $all_unique_prefixes | tr ' ' '@'`
- FIXPATH="$FIXPATH_BIN -m$fixpath_argument_list"
- elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.wsl; then
- FIXPATH="$FIXPATH_BIN -w"
- fi
- FIXPATH_SRC_W="$FIXPATH_SRC"
- FIXPATH_BIN_W="$FIXPATH_BIN"
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([FIXPATH_SRC_W])
- BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([FIXPATH_BIN_W])
- $RM -rf $FIXPATH_BIN $FIXPATH_DIR
- $MKDIR -p $FIXPATH_DIR $CONFIGURESUPPORT_OUTPUTDIR/bin
- cd $FIXPATH_DIR
- $CC $FIXPATH_SRC_W -Fe$FIXPATH_BIN_W > $FIXPATH_DIR/fixpath1.log 2>&1
- cd $CONFIGURE_START_DIR
-
- if test ! -x $FIXPATH_BIN; then
- AC_MSG_RESULT([no])
- cat $FIXPATH_DIR/fixpath1.log
- AC_MSG_ERROR([Could not create $FIXPATH_BIN])
- fi
- AC_MSG_RESULT([yes])
-
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- OLD_WSLENV="$WSLENV"
- WSLENV=`$ECHO $WSLENV | $SED 's/PATH\/l://'`
- BASIC_APPEND_TO_PATH(WSLENV, "FIXPATH_PATH")
- export WSLENV
- export FIXPATH_PATH=$VS_PATH_WINDOWS
- AC_MSG_NOTICE([FIXPATH_PATH is $FIXPATH_PATH])
- AC_MSG_NOTICE([Rewriting WSLENV from $OLD_WSLENV to $WSLENV])
- fi
-
- AC_MSG_CHECKING([if fixpath.exe works])
- cd $FIXPATH_DIR
- $FIXPATH $CC $FIXPATH_SRC -Fe$FIXPATH_DIR/fixpath2.exe \
- > $FIXPATH_DIR/fixpath2.log 2>&1
- cd $CONFIGURE_START_DIR
- if test ! -x $FIXPATH_DIR/fixpath2.exe; then
- AC_MSG_RESULT([no])
- cat $FIXPATH_DIR/fixpath2.log
- AC_MSG_ERROR([fixpath did not work!])
- fi
- AC_MSG_RESULT([yes])
-
- FIXPATH_DETACH_FLAG="--detach"
- fi
-
- AC_SUBST(FIXPATH)
- AC_SUBST(FIXPATH_DETACH_FLAG)
-])
diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk
index c3a7b0b1bd4..9b08709e697 100644
--- a/make/common/NativeCompilation.gmk
+++ b/make/common/NativeCompilation.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2020, 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
@@ -917,6 +917,9 @@ define SetupNativeCompilationBody
ifeq ($(call isTargetOs, windows), true)
$1_EXTRA_LDFLAGS += -debug "-pdb:$$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).pdb" \
"-map:$$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).map"
+ ifeq ($(SHIP_DEBUG_SYMBOLS), public)
+ $1_EXTRA_LDFLAGS += "-pdbstripped:$$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).stripped.pdb"
+ endif
$1_DEBUGINFO_FILES := $$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).pdb \
$$($1_SYMBOLS_DIR)/$$($1_NOSUFFIX).map
diff --git a/make/conf/jib-profiles.js b/make/conf/jib-profiles.js
index 1bd85efcf78..67955c1dbc2 100644
--- a/make/conf/jib-profiles.js
+++ b/make/conf/jib-profiles.js
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, 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
@@ -251,7 +251,7 @@ var getJibProfilesCommon = function (input, data) {
configure_args: concat(["--enable-jtreg-failure-handler"],
"--with-exclude-translations=de,es,fr,it,ko,pt_BR,sv,ca,tr,cs,sk,ja_JP_A,ja_JP_HA,ja_JP_HI,ja_JP_I,zh_TW,zh_HK",
"--disable-manpages",
- "--with-jvm-features=-shenandoahgc",
+ "--disable-jvm-feature-shenandoahgc",
versionArgs(input, common))
};
// Extra settings for debug profiles
@@ -866,7 +866,7 @@ var getJibProfilesProfiles = function (input, common, data) {
testImageProfile = testedProfile;
}
var testedProfileTest = testImageProfile + ".test"
- var testOnlyMake = [ "run-test-prebuilt", "LOG_CMDLINES=true", "JTREG_VERBOSE=fail,error,time" ];
+ var testOnlyMake = [ "test-prebuilt", "LOG_CMDLINES=true", "JTREG_VERBOSE=fail,error,time" ];
if (testedProfile.endsWith("-gcov")) {
testOnlyMake = concat(testOnlyMake, "GCOV_ENABLED=true")
}
@@ -974,7 +974,7 @@ var getJibProfilesDependencies = function (input, common) {
solaris_x64: "SS12u4-Solaris11u1+1.0",
solaris_sparcv9: "SS12u6-Solaris11u3+1.0",
windows_x64: "VS2017-15.9.16+1.0",
- linux_aarch64: "gcc8.2.0-Fedora27+1.0",
+ linux_aarch64: "gcc8.3.0-OL7.6+1.0",
linux_arm: "gcc8.2.0-Fedora27+1.0",
linux_ppc64le: "gcc8.2.0-Fedora27+1.0",
linux_s390x: "gcc8.2.0-Fedora27+1.0"
@@ -1004,9 +1004,17 @@ var getJibProfilesDependencies = function (input, common) {
? input.get("gnumake", "install_path") + "/cygwin/bin"
: input.get("gnumake", "install_path") + "/bin");
- var dependencies = {
-
- boot_jdk: {
+ if (input.build_cpu == 'aarch64') {
+ boot_jdk = {
+ organization: common.organization,
+ ext: "tar.gz",
+ module: "jdk-linux_aarch64",
+ revision: "13+1.0",
+ configure_args: "--with-boot-jdk=" + common.boot_jdk_home,
+ environment_path: common.boot_jdk_home + "/bin"
+ }
+ } else {
+ boot_jdk = {
server: "jpg",
product: "jdk",
version: common.boot_jdk_version,
@@ -1015,7 +1023,11 @@ var getJibProfilesDependencies = function (input, common) {
+ boot_jdk_platform + "_bin" + boot_jdk_ext,
configure_args: "--with-boot-jdk=" + common.boot_jdk_home,
environment_path: common.boot_jdk_home + "/bin"
- },
+ }
+ }
+
+ var dependencies = {
+ boot_jdk: boot_jdk,
devkit: {
organization: common.organization,
@@ -1041,11 +1053,12 @@ var getJibProfilesDependencies = function (input, common) {
},
jtreg: {
- server: "javare",
- revision: "4.2",
- build_number: "b16",
+ server: "jpg",
+ product: "jtreg",
+ version: "5.0",
+ build_number: "b01",
checksum_file: "MD5_VALUES",
- file: "jtreg_bin-4.2.zip",
+ file: "bundles/jtreg_bin-5.0.zip",
environment_name: "JT_HOME",
environment_path: input.get("jtreg", "install_path") + "/jtreg/bin"
},
diff --git a/make/data/charsetmapping/IBM943.c2b b/make/data/charsetmapping/IBM943.c2b
new file mode 100644
index 00000000000..f5424fd9842
--- /dev/null
+++ b/make/data/charsetmapping/IBM943.c2b
@@ -0,0 +1,49 @@
+#
+# source: 34B003AF.RPMAP130
+# c->b only entries
+#
+815C 2015
+8160 FF5E
+8161 2225
+817C FF0D
+88A0 555E
+898B 7130
+89A8 9DD7
+8A9A 5699
+8BA0 4FE0
+8BEB 8EC0
+8C71 7E6B
+8C74 8346
+8CB2 9E7C
+8D8D 9EB4
+8DF2 6805
+8EC6 5C62
+8F4A 7E61
+8FD3 8523
+8FDD 91AC
+90E4 87EC
+917E 6414
+9189 7626
+91CB 9A52
+925C 7C1E
+92CD 6451
+9355 5861
+935E 985A
+9398 79B1
+93C0 7006
+9458 56CA
+948D 525D
+94AC 6F51
+94AE 91B1
+966A 9830
+96CB 9EB5
+9789 840A
+9858 881F
+9BA0 5C5B
+9DB7 6522
+9E94 688E
+E379 7E48
+E445 8141
+E8F6 9839
+FA55 FFE4
+FA59 F86F
diff --git a/make/devkit/Tools.gmk b/make/devkit/Tools.gmk
index 435ad9145df..590e7df117c 100644
--- a/make/devkit/Tools.gmk
+++ b/make/devkit/Tools.gmk
@@ -51,9 +51,17 @@ endif
$(info ARCH=$(ARCH))
+KERNEL_HEADERS_RPM := kernel-headers
+
ifeq ($(BASE_OS), OL)
- BASE_URL := http://yum.oracle.com/repo/OracleLinux/OL6/4/base/$(ARCH)/
- LINUX_VERSION := OL6.4
+ ifeq ($(ARCH), aarch64)
+ BASE_URL := http://yum.oracle.com/repo/OracleLinux/OL7/6/base/$(ARCH)/
+ LINUX_VERSION := OL7.6
+ KERNEL_HEADERS_RPM := kernel-uek-headers
+ else
+ BASE_URL := http://yum.oracle.com/repo/OracleLinux/OL6/4/base/$(ARCH)/
+ LINUX_VERSION := OL6.4
+ endif
else ifeq ($(BASE_OS), Fedora)
DEFAULT_OS_VERSION := 27
ifeq ($(BASE_OS_VERSION), )
@@ -118,7 +126,7 @@ GDB := http://ftp.gnu.org/gnu/gdb/${gdb_ver}.tar.xz
# RPMs used by all BASE_OS
RPM_LIST := \
- kernel-headers \
+ $(KERNEL_HEADERS_RPM) \
glibc glibc-headers glibc-devel \
cups-libs cups-devel \
libX11 libX11-devel \
diff --git a/make/hotspot/lib/JvmFeatures.gmk b/make/hotspot/lib/JvmFeatures.gmk
index 9f784eae784..2fbc959f46d 100644
--- a/make/hotspot/lib/JvmFeatures.gmk
+++ b/make/hotspot/lib/JvmFeatures.gmk
@@ -186,95 +186,95 @@ ifeq ($(call check-jvm-feature, link-time-opt), true)
JVM_LDFLAGS_FEATURES += -O3 -flto -fuse-linker-plugin -fno-strict-aliasing
endif
-ifeq ($(call check-jvm-feature, minimal), true)
- ifeq ($(call check-jvm-feature, link-time-opt), false)
- JVM_OPTIMIZATION := SIZE
- OPT_SPEED_SRC := \
- allocation.cpp \
- assembler.cpp \
- barrierSet.cpp \
- basicLock.cpp \
- biasedLocking.cpp \
- bytecode.cpp \
- bytecodeInterpreter.cpp \
- c1_Compilation.cpp \
- c1_Compiler.cpp \
- c1_GraphBuilder.cpp \
- c1_LinearScan.cpp \
- c1_LIR.cpp \
- ciEnv.cpp \
- ciObjectFactory.cpp \
- codeBlob.cpp \
- constantPool.cpp \
- constMethod.cpp \
- classLoader.cpp \
- classLoaderData.cpp \
- classFileParser.cpp \
- classFileStream.cpp \
- cpCache.cpp \
- defNewGeneration.cpp \
- frame_arm.cpp \
- frame_aarch64.cpp \
- frame_ppc.cpp \
- frame_s390.cpp \
- frame_x86.cpp \
- genCollectedHeap.cpp \
- generation.cpp \
- genMarkSweep.cpp \
- growableArray.cpp \
- handles.cpp \
- hashtable.cpp \
- heap.cpp \
- icache.cpp \
- icache_arm.cpp \
- icache_aarch64.cpp \
- icache_ppc.cpp \
- icache_s390.cpp \
- icache_x86.cpp \
- instanceKlass.cpp \
- invocationCounter.cpp \
- iterator.cpp \
- javaCalls.cpp \
- javaClasses.cpp \
- jniFastGetField_arm.cpp \
- jvm.cpp \
- linkResolver.cpp \
- klass.cpp \
- klassVtable.cpp \
- markSweep.cpp \
- memRegion.cpp \
- memoryPool.cpp \
- method.cpp \
- methodHandles.cpp \
- methodHandles_arm.cpp \
- methodLiveness.cpp \
- metaspace.cpp \
- mutex.cpp \
- mutexLocker.cpp \
- nativeLookup.cpp \
- objArrayKlass.cpp \
- os_linux.cpp \
- os_linux_arm.cpp \
- resourceArea.cpp \
- rewriter.cpp \
- sharedRuntime.cpp \
- signature.cpp \
- space.cpp \
- stackMapTable.cpp \
- symbolTable.cpp \
- systemDictionary.cpp \
- symbol.cpp \
- synchronizer.cpp \
- timer.cpp \
- typeArrayKlass.cpp \
- unsafe.cpp \
- utf8.cpp \
- vmSymbols.cpp \
- #
+ifeq ($(call check-jvm-feature, opt-size), true)
+ JVM_OPTIMIZATION := SIZE
+ OPT_SPEED_SRC := \
+ allocation.cpp \
+ assembler.cpp \
+ barrierSet.cpp \
+ basicLock.cpp \
+ biasedLocking.cpp \
+ bytecode.cpp \
+ bytecodeInterpreter.cpp \
+ c1_Compilation.cpp \
+ c1_Compiler.cpp \
+ c1_GraphBuilder.cpp \
+ c1_LinearScan.cpp \
+ c1_LIR.cpp \
+ ciEnv.cpp \
+ ciObjectFactory.cpp \
+ codeBlob.cpp \
+ constantPool.cpp \
+ constMethod.cpp \
+ classLoader.cpp \
+ classLoaderData.cpp \
+ classFileParser.cpp \
+ classFileStream.cpp \
+ cpCache.cpp \
+ defNewGeneration.cpp \
+ frame_arm.cpp \
+ frame_aarch64.cpp \
+ frame_ppc.cpp \
+ frame_s390.cpp \
+ frame_x86.cpp \
+ genCollectedHeap.cpp \
+ generation.cpp \
+ genMarkSweep.cpp \
+ growableArray.cpp \
+ handles.cpp \
+ hashtable.cpp \
+ heap.cpp \
+ icache.cpp \
+ icache_arm.cpp \
+ icache_aarch64.cpp \
+ icache_ppc.cpp \
+ icache_s390.cpp \
+ icache_x86.cpp \
+ instanceKlass.cpp \
+ invocationCounter.cpp \
+ iterator.cpp \
+ javaCalls.cpp \
+ javaClasses.cpp \
+ jniFastGetField_arm.cpp \
+ jvm.cpp \
+ linkResolver.cpp \
+ klass.cpp \
+ klassVtable.cpp \
+ markSweep.cpp \
+ memRegion.cpp \
+ memoryPool.cpp \
+ method.cpp \
+ methodHandles.cpp \
+ methodHandles_arm.cpp \
+ methodLiveness.cpp \
+ metaspace.cpp \
+ mutex.cpp \
+ mutexLocker.cpp \
+ nativeLookup.cpp \
+ objArrayKlass.cpp \
+ os_linux.cpp \
+ os_linux_arm.cpp \
+ resourceArea.cpp \
+ rewriter.cpp \
+ sharedRuntime.cpp \
+ signature.cpp \
+ space.cpp \
+ stackMapTable.cpp \
+ symbolTable.cpp \
+ systemDictionary.cpp \
+ symbol.cpp \
+ synchronizer.cpp \
+ timer.cpp \
+ typeArrayKlass.cpp \
+ unsafe.cpp \
+ utf8.cpp \
+ vmSymbols.cpp \
+ #
- $(foreach s, $(OPT_SPEED_SRC), \
- $(eval BUILD_LIBJVM_$s_OPTIMIZATION := HIGHEST_JVM))
+ $(foreach s, $(OPT_SPEED_SRC), \
+ $(eval BUILD_LIBJVM_$s_OPTIMIZATION := HIGHEST_JVM))
+ ifneq ($(filter $(TOOLCHAIN_TYPE), gcc clang), )
BUILD_LIBJVM_systemDictionary.cpp_CXXFLAGS := -fno-optimize-sibling-calls
endif
endif
diff --git a/make/hotspot/src/native/dtrace/generateJvmOffsets.cpp b/make/hotspot/src/native/dtrace/generateJvmOffsets.cpp
index b863411aa95..c0ace26b684 100644
--- a/make/hotspot/src/native/dtrace/generateJvmOffsets.cpp
+++ b/make/hotspot/src/native/dtrace/generateJvmOffsets.cpp
@@ -213,7 +213,7 @@ int generateJvmOffsets(GEN_variant gen_variant) {
GEN_VALUE(AccessFlags_NATIVE, JVM_ACC_NATIVE);
GEN_VALUE(ConstMethod_has_linenumber_table, ConstMethod::_has_linenumber_table);
GEN_OFFS(AccessFlags, _flags);
- GEN_OFFS(Symbol, _length_and_refcount);
+ GEN_OFFS(Symbol, _length);
GEN_OFFS(Symbol, _body);
printf("\n");
diff --git a/make/idea/template/vcs.xml b/make/idea/template/vcs.xml
index 21997970079..ee4faed424a 100644
--- a/make/idea/template/vcs.xml
+++ b/make/idea/template/vcs.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/make/jdk/src/classes/build/tools/cldrconverter/Bundle.java b/make/jdk/src/classes/build/tools/cldrconverter/Bundle.java
index f84adcbc02e..d140fbb30b9 100644
--- a/make/jdk/src/classes/build/tools/cldrconverter/Bundle.java
+++ b/make/jdk/src/classes/build/tools/cldrconverter/Bundle.java
@@ -294,7 +294,6 @@ class Bundle {
}
// First, weed out any empty timezone or metazone names from myMap.
- // Fill in any missing abbreviations if locale is "en".
for (Iterator it = myMap.keySet().iterator(); it.hasNext();) {
String key = it.next();
if (key.startsWith(CLDRConverter.TIMEZONE_ID_PREFIX)
@@ -307,10 +306,6 @@ class Bundle {
it.remove();
continue;
}
-
- if (id.equals("en")) {
- fillInJREs(key, nameMap);
- }
}
}
for (Iterator it = myMap.keySet().iterator(); it.hasNext();) {
@@ -636,42 +631,6 @@ class Bundle {
return null;
}
- static List