6 # under the terms of the GNU General Public License version 2 only, as
7 # published by the Free Software Foundation. Oracle designates this
8 # particular file as subject to the "Classpath" exception as provided
9 # by Oracle in the LICENSE file that accompanied this code.
10 #
11 # This code is distributed in the hope that it will be useful, but WITHOUT
12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 # version 2 for more details (a copy is included in the LICENSE file that
15 # accompanied this code).
16 #
17 # You should have received a copy of the GNU General Public License version
18 # 2 along with this work; if not, write to the Free Software Foundation,
19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 #
21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 # or visit www.oracle.com if you need additional information or have any
23 # questions.
24 #
25
26 # Create a function/macro that takes a series of named arguments. The call is
27 # similar to AC_DEFUN, but the setup of the function looks like this:
28 # BASIC_DEFUN_NAMED([MYFUNC], [FOO *BAR], [$@], [
29 # ... do something
30 # AC_MSG_NOTICE([Value of BAR is ARG_BAR])
31 # ])
32 # A star (*) in front of a named argument means that it is required and it's
33 # presence will be verified. To pass e.g. the first value as a normal indexed
34 # argument, use [m4_shift($@)] as the third argument instead of [$@]. These
35 # arguments are referenced in the function by their name prefixed by ARG_, e.g.
36 # "ARG_FOO".
37 #
38 # The generated function can be called like this:
39 # MYFUNC(FOO: [foo-val],
40 # BAR: [
41 # $ECHO hello world
42 # ])
43 # Note that the argument value must start on the same line as the argument name.
44 #
45 # Argument 1: Name of the function to define
74 AC_MSG_ERROR([Internal error: Required named arguments are missing for [$1]. Missing arguments: 'm4_set_contents(required_named_args, [ ])'])
75 ])
76 m4_foreach([arg], m4_indir([m4_dquote]m4_set_listc([legal_named_args])), [
77 m4_pushdef([ARG_][]arg, [])
78 m4_set_add(defined_args, arg)
79 ])
80 m4_set_delete(legal_named_args)
81 m4_set_delete(required_named_args)
82
83 # Execute function body
84 $4
85
86 m4_foreach([arg], m4_indir([m4_dquote]m4_set_listc([defined_args])), [
87 m4_popdef([ARG_][]arg)
88 ])
89
90 m4_set_delete(defined_args)
91 ])
92 ])
93
94 # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3)
95 # If so, then append $1 to $2 \
96 # Also set JVM_ARG_OK to true/false depending on outcome.
97 AC_DEFUN([ADD_JVM_ARG_IF_OK],
98 [
99 $ECHO "Check if jvm arg is ok: $1" >&AS_MESSAGE_LOG_FD
100 $ECHO "Command: $3 $1 -version" >&AS_MESSAGE_LOG_FD
101 OUTPUT=`$3 $1 -version 2>&1`
102 FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn`
103 FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""`
104 if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
105 $2="[$]$2 $1"
106 JVM_ARG_OK=true
107 else
108 $ECHO "Arg failed:" >&AS_MESSAGE_LOG_FD
109 $ECHO "$OUTPUT" >&AS_MESSAGE_LOG_FD
110 JVM_ARG_OK=false
111 fi
112 ])
113
118 if test "x[$]$1" = x; then
119 $1="$2"
120 else
121 $1="[$]$1:$2"
122 fi
123 fi
124 ])
125
126 # Prepends a string to a path variable, only adding the : when needed.
127 AC_DEFUN([BASIC_PREPEND_TO_PATH],
128 [
129 if test "x$2" != x; then
130 if test "x[$]$1" = x; then
131 $1="$2"
132 else
133 $1="$2:[$]$1"
134 fi
135 fi
136 ])
137
138 # This will make sure the given variable points to a full and proper
139 # path. This means:
140 # 1) There will be no spaces in the path. On unix platforms,
141 # spaces in the path will result in an error. On Windows,
142 # the path will be rewritten using short-style to be space-free.
143 # 2) The path will be absolute, and it will be in unix-style (on
144 # cygwin).
145 # $1: The name of the variable to fix
146 AC_DEFUN([BASIC_FIXUP_PATH],
147 [
148 # Only process if variable expands to non-empty
149
150 if test "x[$]$1" != x; then
151 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
152 BASIC_FIXUP_PATH_CYGWIN($1)
153 elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
154 BASIC_FIXUP_PATH_MSYS($1)
155 else
156 # We're on a unix platform. Hooray! :)
157 path="[$]$1"
161 AC_MSG_ERROR([Spaces are not allowed in this path.])
162 fi
163
164 # Use eval to expand a potential ~
165 eval path="$path"
166 if test ! -f "$path" && test ! -d "$path"; then
167 AC_MSG_ERROR([The path of $1, which resolves as "$path", is not found.])
168 fi
169
170 if test -d "$path"; then
171 $1="`cd "$path"; $THEPWDCMD -L`"
172 else
173 dir="`$DIRNAME "$path"`"
174 base="`$BASENAME "$path"`"
175 $1="`cd "$dir"; $THEPWDCMD -L`/$base"
176 fi
177 fi
178 fi
179 ])
180
181 # This will make sure the given variable points to a executable
182 # with a full and proper path. This means:
183 # 1) There will be no spaces in the path. On unix platforms,
184 # spaces in the path will result in an error. On Windows,
185 # the path will be rewritten using short-style to be space-free.
186 # 2) The path will be absolute, and it will be in unix-style (on
187 # cygwin).
188 # Any arguments given to the executable is preserved.
189 # If the input variable does not have a directory specification, then
190 # it need to be in the PATH.
191 # $1: The name of the variable to fix
192 AC_DEFUN([BASIC_FIXUP_EXECUTABLE],
193 [
194 # Only process if variable expands to non-empty
195
196 if test "x[$]$1" != x; then
197 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
198 BASIC_FIXUP_EXECUTABLE_CYGWIN($1)
199 elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
200 BASIC_FIXUP_EXECUTABLE_MSYS($1)
232 AC_MSG_NOTICE([This might be caused by spaces in the path, which is not allowed.])
233 fi
234 AC_MSG_ERROR([Cannot locate the the path of $1])
235 fi
236 fi
237
238 # Now join together the path and the arguments once again
239 if test "x$arguments" != xEOL; then
240 new_complete="$new_path ${arguments% *}"
241 else
242 new_complete="$new_path"
243 fi
244
245 if test "x$complete" != "x$new_complete"; then
246 $1="$new_complete"
247 AC_MSG_NOTICE([Rewriting $1 to "$new_complete"])
248 fi
249 fi
250 ])
251
252 AC_DEFUN([BASIC_REMOVE_SYMBOLIC_LINKS],
253 [
254 if test "x$OPENJDK_BUILD_OS" != xwindows; then
255 # Follow a chain of symbolic links. Use readlink
256 # where it exists, else fall back to horribly
257 # complicated shell code.
258 if test "x$READLINK_TESTED" != yes; then
259 # On MacOSX there is a readlink tool with a different
260 # purpose than the GNU readlink tool. Check the found readlink.
261 READLINK_ISGNU=`$READLINK --version 2>&1 | $GREP GNU`
262 # If READLINK_ISGNU is empty, then it's a non-GNU readlink. Don't use it.
263 READLINK_TESTED=yes
264 fi
265
266 if test "x$READLINK" != x && test "x$READLINK_ISGNU" != x; then
267 $1=`$READLINK -f [$]$1`
268 else
269 # Save the current directory for restoring afterwards
270 STARTDIR=$PWD
271 COUNTER=0
278 # Resolve file symlinks
279 while test $COUNTER -lt 20; do
280 ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'`
281 if test "x$ISLINK" == x; then
282 # This is not a symbolic link! We are done!
283 break
284 fi
285 # Again resolve directory symlinks since the target of the just found
286 # link could be in a different directory
287 cd `$DIRNAME $ISLINK`
288 sym_link_dir=`$THEPWDCMD -P`
289 sym_link_file=`$BASENAME $ISLINK`
290 let COUNTER=COUNTER+1
291 done
292 cd $STARTDIR
293 $1=$sym_link_dir/$sym_link_file
294 fi
295 fi
296 ])
297
298 # Register a --with argument but mark it as deprecated
299 # $1: The name of the with argument to deprecate, not including --with-
300 AC_DEFUN([BASIC_DEPRECATED_ARG_WITH],
301 [
302 AC_ARG_WITH($1, [AS_HELP_STRING([--with-$1],
303 [Deprecated. Option is kept for backwards compatibility and is ignored])],
304 [AC_MSG_WARN([Option --with-$1 is deprecated and will be ignored.])])
305 ])
306
307 # Register a --enable argument but mark it as deprecated
308 # $1: The name of the with argument to deprecate, not including --enable-
309 # $2: The name of the argument to deprecate, in shell variable style (i.e. with _ instead of -)
310 # $3: Messages to user.
311 AC_DEFUN([BASIC_DEPRECATED_ARG_ENABLE],
312 [
313 AC_ARG_ENABLE($1, [AS_HELP_STRING([--enable-$1],
314 [Deprecated. Option is kept for backwards compatibility and is ignored])])
315 if test "x$enable_$2" != x; then
316 AC_MSG_WARN([Option --enable-$1 is deprecated and will be ignored.])
317
318 if test "x$3" != x; then
319 AC_MSG_WARN([$3])
320 fi
321
322 fi
323 ])
324
325 AC_DEFUN_ONCE([BASIC_INIT],
326 [
327 # Save the original command line. This is passed to us by the wrapper configure script.
328 AC_SUBST(CONFIGURE_COMMAND_LINE)
329 # Save the path variable before it gets changed
330 ORIGINAL_PATH="$PATH"
331 AC_SUBST(ORIGINAL_PATH)
332 DATE_WHEN_CONFIGURED=`LANG=C date`
333 AC_SUBST(DATE_WHEN_CONFIGURED)
334 AC_MSG_NOTICE([Configuration created at $DATE_WHEN_CONFIGURED.])
335 ])
336
337 # Test that variable $1 denoting a program is not empty. If empty, exit with an error.
338 # $1: variable to check
339 AC_DEFUN([BASIC_CHECK_NONEMPTY],
340 [
341 if test "x[$]$1" = x; then
342 AC_MSG_ERROR([Could not find required tool for $1])
343 fi
344 ])
345
346 # Check that there are no unprocessed overridden variables left.
347 # If so, they are an incorrect argument and we will exit with an error.
348 AC_DEFUN([BASIC_CHECK_LEFTOVER_OVERRIDDEN],
349 [
350 if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then
351 # Replace the separating ! with spaces before presenting for end user.
352 unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ }
353 AC_MSG_WARN([The following variables might be unknown to configure: $unknown_variables])
354 fi
355 ])
356
357 # Setup a tool for the given variable. If correctly specified by the user,
358 # use that value, otherwise search for the tool using the supplied code snippet.
359 # $1: variable to set
360 # $2: code snippet to call to look for the tool
361 # $3: code snippet to call if variable was used to find tool
362 AC_DEFUN([BASIC_SETUP_TOOL],
363 [
364 # Publish this variable in the help.
365 AC_ARG_VAR($1, [Override default value for $1])
366
367 if [[ -z "${$1+x}" ]]; then
368 # The variable is not set by user, try to locate tool using the code snippet
369 $2
370 else
371 # The variable is set, but is it from the command line or the environment?
372
373 # Try to remove the string !$1! from our list.
374 try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!$1!/}
375 if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then
376 # If it failed, the variable was not from the command line. Ignore it,
403 AC_PATH_PROG($1, $tool_basename)
404 if test "x[$]$1" = x; then
405 AC_MSG_ERROR([User supplied tool $tool_basename could not be found])
406 fi
407 else
408 # Otherwise we believe it is a complete path. Use it as it is.
409 AC_MSG_NOTICE([Will use user supplied tool $1=$tool_specified])
410 AC_MSG_CHECKING([for $1])
411 if test ! -x "$tool_specified"; then
412 AC_MSG_RESULT([not found])
413 AC_MSG_ERROR([User supplied tool $1=$tool_specified does not exist or is not executable])
414 fi
415 AC_MSG_RESULT([$tool_specified])
416 fi
417 fi
418 fi
419 $3
420 fi
421 ])
422
423 # Call BASIC_SETUP_TOOL with AC_PATH_PROGS to locate the tool
424 # $1: variable to set
425 # $2: executable name (or list of names) to look for
426 # $3: [path]
427 AC_DEFUN([BASIC_PATH_PROGS],
428 [
429 BASIC_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2, , $3)])
430 ])
431
432 # Call BASIC_SETUP_TOOL with AC_CHECK_TOOLS to locate the tool
433 # $1: variable to set
434 # $2: executable name (or list of names) to look for
435 AC_DEFUN([BASIC_CHECK_TOOLS],
436 [
437 BASIC_SETUP_TOOL($1, [AC_CHECK_TOOLS($1, $2)])
438 ])
439
440 # Like BASIC_PATH_PROGS but fails if no tool was found.
441 # $1: variable to set
442 # $2: executable name (or list of names) to look for
443 # $3: [path]
444 AC_DEFUN([BASIC_REQUIRE_PROGS],
445 [
446 BASIC_PATH_PROGS($1, $2, , $3)
447 BASIC_CHECK_NONEMPTY($1)
448 ])
449
450 # Like BASIC_SETUP_TOOL but fails if no tool was found.
451 # $1: variable to set
452 # $2: autoconf macro to call to look for the special tool
453 AC_DEFUN([BASIC_REQUIRE_SPECIAL],
454 [
455 BASIC_SETUP_TOOL($1, [$2])
456 BASIC_CHECK_NONEMPTY($1)
457 ])
458
459 # Setup the most fundamental tools that relies on not much else to set up,
460 # but is used by much of the early bootstrap code.
461 AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS],
462 [
463 # Start with tools that do not need have cross compilation support
464 # and can be expected to be found in the default PATH. These tools are
465 # used by configure.
466
467 # First are all the simple required tools.
468 BASIC_REQUIRE_PROGS(BASENAME, basename)
469 BASIC_REQUIRE_PROGS(BASH, bash)
470 BASIC_REQUIRE_PROGS(CAT, cat)
471 BASIC_REQUIRE_PROGS(CHMOD, chmod)
472 BASIC_REQUIRE_PROGS(CMP, cmp)
473 BASIC_REQUIRE_PROGS(COMM, comm)
474 BASIC_REQUIRE_PROGS(CP, cp)
475 BASIC_REQUIRE_PROGS(CUT, cut)
476 BASIC_REQUIRE_PROGS(DATE, date)
477 BASIC_REQUIRE_PROGS(DIFF, [gdiff diff])
478 BASIC_REQUIRE_PROGS(DIRNAME, dirname)
511 BASIC_REQUIRE_SPECIAL(GREP, [AC_PROG_GREP])
512 BASIC_REQUIRE_SPECIAL(EGREP, [AC_PROG_EGREP])
513 BASIC_REQUIRE_SPECIAL(FGREP, [AC_PROG_FGREP])
514 BASIC_REQUIRE_SPECIAL(SED, [AC_PROG_SED])
515
516 # Always force rm.
517 RM="$RM -f"
518
519 # pwd behaves differently on various platforms and some don't support the -L flag.
520 # Always use the bash builtin pwd to get uniform behavior.
521 THEPWDCMD=pwd
522
523 # These are not required on all platforms
524 BASIC_PATH_PROGS(CYGPATH, cygpath)
525 BASIC_PATH_PROGS(DF, df)
526 BASIC_PATH_PROGS(CPIO, [cpio bsdcpio])
527 BASIC_PATH_PROGS(NICE, nice)
528 BASIC_PATH_PROGS(PANDOC, pandoc)
529 ])
530
531 # Setup basic configuration paths, and platform-specific stuff related to PATHs.
532 AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
533 [
534 # Save the current directory this script was started from
535 CURDIR="$PWD"
536
537 # We might need to rewrite ORIGINAL_PATH, if it includes "#", to quote them
538 # for make. We couldn't do this when we retrieved ORIGINAL_PATH, since SED
539 # was not available at that time.
540 REWRITTEN_PATH=`$ECHO "$ORIGINAL_PATH" | $SED -e 's/#/\\\\#/g'`
541 if test "x$REWRITTEN_PATH" != "x$ORIGINAL_PATH"; then
542 ORIGINAL_PATH="$REWRITTEN_PATH"
543 AC_MSG_NOTICE([Rewriting ORIGINAL_PATH to $REWRITTEN_PATH])
544 fi
545
546 if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
547 PATH_SEP=";"
548 BASIC_CHECK_PATHS_WINDOWS
549 else
550 PATH_SEP=":"
552 AC_SUBST(PATH_SEP)
553
554 # We get the top-level directory from the supporting wrappers.
555 AC_MSG_CHECKING([for top-level directory])
556 AC_MSG_RESULT([$TOPDIR])
557 AC_SUBST(TOPDIR)
558
559 # We can only call BASIC_FIXUP_PATH after BASIC_CHECK_PATHS_WINDOWS.
560 BASIC_FIXUP_PATH(CURDIR)
561 BASIC_FIXUP_PATH(TOPDIR)
562
563 # Locate the directory of this script.
564 AUTOCONF_DIR=$TOPDIR/make/autoconf
565
566 # Setup username (for use in adhoc version strings etc)
567 # Outer [ ] to quote m4.
568 [ USERNAME=`$ECHO "$USER" | $TR -d -c '[a-z][A-Z][0-9]'` ]
569 AC_SUBST(USERNAME)
570 ])
571
572 # Evaluates platform specific overrides for devkit variables.
573 # $1: Name of variable
574 AC_DEFUN([BASIC_EVAL_DEVKIT_VARIABLE],
575 [
576 if test "x[$]$1" = x; then
577 eval $1="\${$1_${OPENJDK_TARGET_CPU}}"
578 fi
579 ])
580
581 AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
582 [
583 AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit],
584 [use this devkit for compilers, tools and resources])])
585
586 if test "x$with_devkit" = xyes; then
587 AC_MSG_ERROR([--with-devkit must have a value])
588 elif test "x$with_devkit" != x && test "x$with_devkit" != xno; then
589 BASIC_FIXUP_PATH([with_devkit])
590 DEVKIT_ROOT="$with_devkit"
591 # Check for a meta data info file in the root of the devkit
592 if test -f "$DEVKIT_ROOT/devkit.info"; then
593 . $DEVKIT_ROOT/devkit.info
594 # This potentially sets the following:
595 # A descriptive name of the devkit
596 BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_NAME])
597 # Corresponds to --with-extra-path
598 BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_EXTRA_PATH])
599 # Corresponds to --with-toolchain-path
600 BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_TOOLCHAIN_PATH])
739 AC_MSG_ERROR([Invalid SDK or SYSROOT path, dependent framework headers not found])
740 fi
741 fi
742
743 # set SDKROOT too, Xcode tools will pick it up
744 SDKROOT="$SYSROOT"
745 AC_SUBST(SDKROOT)
746 fi
747
748 # Prepend the extra path to the global path
749 BASIC_PREPEND_TO_PATH([PATH],$EXTRA_PATH)
750
751 AC_MSG_CHECKING([for sysroot])
752 AC_MSG_RESULT([$SYSROOT])
753 AC_MSG_CHECKING([for toolchain path])
754 AC_MSG_RESULT([$TOOLCHAIN_PATH])
755 AC_MSG_CHECKING([for extra path])
756 AC_MSG_RESULT([$EXTRA_PATH])
757 ])
758
759 AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
760 [
761
762 AC_ARG_WITH(conf-name, [AS_HELP_STRING([--with-conf-name],
763 [use this as the name of the configuration @<:@generated from important configuration options@:>@])],
764 [ CONF_NAME=${with_conf_name} ])
765
766 # Test from where we are running configure, in or outside of src root.
767 AC_MSG_CHECKING([where to store configuration])
768 if test "x$CURDIR" = "x$TOPDIR" || test "x$CURDIR" = "x$CUSTOM_ROOT" \
769 || test "x$CURDIR" = "x$TOPDIR/make/autoconf" \
770 || test "x$CURDIR" = "x$TOPDIR/make" ; then
771 # We are running configure from the src root.
772 # Create a default ./build/target-variant-debuglevel output root.
773 if test "x${CONF_NAME}" = x; then
774 AC_MSG_RESULT([in default location])
775 CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${JVM_VARIANTS_WITH_AND}-${DEBUG_LEVEL}"
776 else
777 AC_MSG_RESULT([in build directory with custom name])
778 fi
838 AC_SUBST(CONF_NAME)
839 AC_SUBST(OUTPUTDIR)
840 AC_SUBST(CONFIGURESUPPORT_OUTPUTDIR)
841
842 # The spec.gmk file contains all variables for the make system.
843 AC_CONFIG_FILES([$OUTPUTDIR/spec.gmk:$AUTOCONF_DIR/spec.gmk.in])
844 # The bootcycle-spec.gmk file contains support for boot cycle builds.
845 AC_CONFIG_FILES([$OUTPUTDIR/bootcycle-spec.gmk:$AUTOCONF_DIR/bootcycle-spec.gmk.in])
846 # The buildjdk-spec.gmk file contains support for building a buildjdk when cross compiling.
847 AC_CONFIG_FILES([$OUTPUTDIR/buildjdk-spec.gmk:$AUTOCONF_DIR/buildjdk-spec.gmk.in])
848 # The compare.sh is used to compare the build output to other builds.
849 AC_CONFIG_FILES([$OUTPUTDIR/compare.sh:$AUTOCONF_DIR/compare.sh.in])
850 # The generated Makefile knows where the spec.gmk is and where the source is.
851 # You can run make from the OUTPUTDIR, or from the top-level Makefile
852 # which will look for generated configurations
853 AC_CONFIG_FILES([$OUTPUTDIR/Makefile:$AUTOCONF_DIR/Makefile.in])
854 ])
855
856 #%%% Simple tools %%%
857
858 # Check if we have found a usable version of make
859 # $1: the path to a potential make binary (or empty)
860 # $2: the description on how we found this
861 AC_DEFUN([BASIC_CHECK_MAKE_VERSION],
862 [
863 MAKE_CANDIDATE="$1"
864 DESCRIPTION="$2"
865
866 # On Cygwin, we require a newer version of make than on other platforms
867 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
868 MAKE_VERSION_EXPR="-e 4\."
869 MAKE_REQUIRED_VERSION="4.0"
870 else
871 MAKE_VERSION_EXPR="-e 3\.8[[12]] -e 4\."
872 MAKE_REQUIRED_VERSION="3.81"
873 fi
874
875 if test "x$MAKE_CANDIDATE" != x; then
876 AC_MSG_NOTICE([Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION])
877 MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1`
891 else
892 AC_MSG_ERROR([Unknown Windows environment])
893 fi
894 MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'`
895 IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV`
896 else
897 # Not relevant for non-Windows
898 IS_MAKE_CORRECT_ENV=true
899 fi
900 if test "x$IS_MAKE_CORRECT_ENV" = x; then
901 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.])
902 else
903 FOUND_MAKE=$MAKE_CANDIDATE
904 BASIC_FIXUP_EXECUTABLE(FOUND_MAKE)
905 fi
906 fi
907 fi
908 fi
909 ])
910
911 AC_DEFUN([BASIC_CHECK_MAKE_OUTPUT_SYNC],
912 [
913 # Check if make supports the output sync option and if so, setup using it.
914 AC_MSG_CHECKING([if make --output-sync is supported])
915 if $MAKE --version -O > /dev/null 2>&1; then
916 OUTPUT_SYNC_SUPPORTED=true
917 AC_MSG_RESULT([yes])
918 AC_MSG_CHECKING([for output-sync value])
919 AC_ARG_WITH([output-sync], [AS_HELP_STRING([--with-output-sync],
920 [set make output sync type if supported by make. @<:@recurse@:>@])],
921 [OUTPUT_SYNC=$with_output_sync])
922 if test "x$OUTPUT_SYNC" = "x"; then
923 OUTPUT_SYNC=none
924 fi
925 AC_MSG_RESULT([$OUTPUT_SYNC])
926 if ! $MAKE --version -O$OUTPUT_SYNC > /dev/null 2>&1; then
927 AC_MSG_ERROR([Make did not the support the value $OUTPUT_SYNC as output sync type.])
928 fi
929 else
930 OUTPUT_SYNC_SUPPORTED=false
931 AC_MSG_RESULT([no])
932 fi
933 AC_SUBST(OUTPUT_SYNC_SUPPORTED)
934 AC_SUBST(OUTPUT_SYNC)
935 ])
936
937 # Goes looking for a usable version of GNU make.
938 AC_DEFUN([BASIC_CHECK_GNU_MAKE],
939 [
940 BASIC_SETUP_TOOL([MAKE],
941 [
942 # Try our hardest to locate a correct version of GNU make
943 AC_PATH_PROGS(CHECK_GMAKE, gmake)
944 BASIC_CHECK_MAKE_VERSION("$CHECK_GMAKE", [gmake in PATH])
945
946 if test "x$FOUND_MAKE" = x; then
947 AC_PATH_PROGS(CHECK_MAKE, make)
948 BASIC_CHECK_MAKE_VERSION("$CHECK_MAKE", [make in PATH])
949 fi
950
951 if test "x$FOUND_MAKE" = x; then
952 if test "x$TOOLCHAIN_PATH" != x; then
953 # We have a toolchain path, check that as well before giving up.
954 OLD_PATH=$PATH
955 PATH=$TOOLCHAIN_PATH:$PATH
956 AC_PATH_PROGS(CHECK_TOOLSDIR_GMAKE, gmake)
964 fi
965
966 if test "x$FOUND_MAKE" = x; then
967 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.])
968 fi
969 ],[
970 # If MAKE was set by user, verify the version
971 BASIC_CHECK_MAKE_VERSION("$MAKE", [user supplied MAKE=$MAKE])
972 if test "x$FOUND_MAKE" = x; then
973 AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not GNU make $MAKE_REQUIRED_VERSION or newer.])
974 fi
975 ])
976
977 MAKE=$FOUND_MAKE
978 AC_SUBST(MAKE)
979 AC_MSG_NOTICE([Using GNU make at $FOUND_MAKE (version: $MAKE_VERSION_STRING)])
980
981 BASIC_CHECK_MAKE_OUTPUT_SYNC
982 ])
983
984 AC_DEFUN([BASIC_CHECK_FIND_DELETE],
985 [
986 # Test if find supports -delete
987 AC_MSG_CHECKING([if find supports -delete])
988 FIND_DELETE="-delete"
989
990 DELETEDIR=`$MKTEMP -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?)
991
992 echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete
993
994 TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1`
995 if test -f $DELETEDIR/TestIfFindSupportsDelete; then
996 # No, it does not.
997 $RM $DELETEDIR/TestIfFindSupportsDelete
998 if test "x$OPENJDK_TARGET_OS" = "xaix"; then
999 # AIX 'find' is buggy if called with '-exec {} \+' and an empty file list
1000 FIND_DELETE="-print | $XARGS $RM"
1001 else
1002 FIND_DELETE="-exec $RM \{\} \+"
1003 fi
1004 AC_MSG_RESULT([no])
1005 else
1006 AC_MSG_RESULT([yes])
1007 fi
1008 $RMDIR $DELETEDIR
1009 AC_SUBST(FIND_DELETE)
1010 ])
1011
1012 AC_DEFUN([BASIC_CHECK_TAR],
1013 [
1014 # Test which kind of tar was found
1015 if test "x$($TAR --version | $GREP "GNU tar")" != "x"; then
1016 TAR_TYPE="gnu"
1017 elif test "x$($TAR --version | $GREP "bsdtar")" != "x"; then
1018 TAR_TYPE="bsd"
1019 elif test "x$($TAR -v | $GREP "bsdtar")" != "x"; then
1020 TAR_TYPE="bsd"
1021 elif test "x$OPENJDK_BUILD_OS" = "xsolaris"; then
1022 TAR_TYPE="solaris"
1023 fi
1024 AC_MSG_CHECKING([what type of tar was found])
1025 AC_MSG_RESULT([$TAR_TYPE])
1026
1027 TAR_CREATE_FILE_PARAM=""
1028
1029 if test "x$TAR_TYPE" = "xgnu"; then
1030 TAR_INCLUDE_PARAM="T"
1031 TAR_SUPPORTS_TRANSFORM="true"
1032 if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
1033 # When using gnu tar for Solaris targets, need to use compatibility mode
1034 TAR_CREATE_EXTRA_PARAM="--format=ustar"
1035 fi
1036 else
1037 TAR_INCLUDE_PARAM="I"
1038 TAR_SUPPORTS_TRANSFORM="false"
1039 fi
1040 AC_SUBST(TAR_TYPE)
1041 AC_SUBST(TAR_CREATE_EXTRA_PARAM)
1042 AC_SUBST(TAR_INCLUDE_PARAM)
1043 AC_SUBST(TAR_SUPPORTS_TRANSFORM)
1044 ])
1045
1046 AC_DEFUN([BASIC_CHECK_GREP],
1047 [
1048 # Test that grep supports -Fx with a list of pattern which includes null pattern.
1049 # This is a problem for the grep resident on AIX.
1050 AC_MSG_CHECKING([that grep ($GREP) -Fx handles empty lines in the pattern list correctly])
1051 # Multiple subsequent spaces..
1052 STACK_SPACES='aaa bbb ccc'
1053 # ..converted to subsequent newlines, causes STACK_LIST to be a list with some empty
1054 # patterns in it.
1055 STACK_LIST=${STACK_SPACES// /$'\n'}
1056 NEEDLE_SPACES='ccc bbb aaa'
1057 NEEDLE_LIST=${NEEDLE_SPACES// /$'\n'}
1058 RESULT="$($GREP -Fvx "$STACK_LIST" <<< "$NEEDLE_LIST")"
1059 if test "x$RESULT" == "x"; then
1060 AC_MSG_RESULT([yes])
1061 else
1062 if test "x$OPENJDK_TARGET_OS" = "xaix"; then
1063 ADDINFO="Please make sure you use GNU grep, usually found at /opt/freeware/bin."
1064 fi
1065 AC_MSG_ERROR([grep does not handle -Fx correctly. ${ADDINFO}])
1066 fi
1067 ])
1068
1069 AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
1070 [
1071 BASIC_CHECK_GNU_MAKE
1072
1073 BASIC_CHECK_FIND_DELETE
1074 BASIC_CHECK_TAR
1075 BASIC_CHECK_GREP
1076
1077 # These tools might not be installed by default,
1078 # need hint on how to install them.
1079 BASIC_REQUIRE_PROGS(UNZIP, unzip)
1080 # Since zip uses "ZIP" as a environment variable for passing options, we need
1081 # to name our variable differently, hence ZIPEXE.
1082 BASIC_REQUIRE_PROGS(ZIPEXE, zip)
1083
1084 # Non-required basic tools
1085
1086 BASIC_PATH_PROGS(LDD, ldd)
1087 if test "x$LDD" = "x"; then
1088 # List shared lib dependencies is used for
1115 BASIC_PATH_PROGS(CODESIGN, codesign)
1116 if test "x$CODESIGN" != "x"; then
1117 # Verify that the openjdk_codesign certificate is present
1118 AC_MSG_CHECKING([if openjdk_codesign certificate is present])
1119 $RM codesign-testfile
1120 $TOUCH codesign-testfile
1121 $CODESIGN -s openjdk_codesign codesign-testfile 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD || CODESIGN=
1122 $RM codesign-testfile
1123 if test "x$CODESIGN" = x; then
1124 AC_MSG_RESULT([no])
1125 else
1126 AC_MSG_RESULT([yes])
1127 fi
1128 fi
1129 BASIC_REQUIRE_PROGS(SETFILE, SetFile)
1130 elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
1131 BASIC_REQUIRE_PROGS(ELFEDIT, elfedit)
1132 fi
1133 ])
1134
1135 # Check if build directory is on local disk. If not possible to determine,
1136 # we prefer to claim it's local.
1137 # Argument 1: directory to test
1138 # Argument 2: what to do if it is on local disk
1139 # Argument 3: what to do otherwise (remote disk or failure)
1140 AC_DEFUN([BASIC_CHECK_DIR_ON_LOCAL_DISK],
1141 [
1142 # df -l lists only local disks; if the given directory is not found then
1143 # a non-zero exit code is given
1144 if test "x$DF" = x; then
1145 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
1146 # msys does not have df; use Windows "net use" instead.
1147 IS_NETWORK_DISK=`net use | grep \`pwd -W | cut -d ":" -f 1 | tr a-z A-Z\`:`
1148 if test "x$IS_NETWORK_DISK" = x; then
1149 $2
1150 else
1151 $3
1152 fi
1153 else
1154 # No df here, say it's local
1155 $2
1156 fi
1157 else
1158 # JDK-8189619
1159 # df on AIX does not understand -l. On modern AIXes it understands "-T local" which
1160 # is the same. On older AIXes we just continue to live with a "not local build" warning.
1161 if test "x$OPENJDK_TARGET_OS" = xaix; then
1162 DF_LOCAL_ONLY_OPTION='-T local'
1163 else
1164 DF_LOCAL_ONLY_OPTION='-l'
1165 fi
1166 if $DF $DF_LOCAL_ONLY_OPTION $1 > /dev/null 2>&1; then
1167 $2
1168 else
1169 $3
1170 fi
1171 fi
1172 ])
1173
1174 # Check that source files have basic read permissions set. This might
1175 # not be the case in cygwin in certain conditions.
1176 AC_DEFUN_ONCE([BASIC_CHECK_SRC_PERMS],
1177 [
1178 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
1179 file_to_test="$TOPDIR/LICENSE"
1180 if test `$STAT -c '%a' "$file_to_test"` -lt 400; then
1181 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.])
1182 fi
1183 fi
1184 ])
1185
1186 AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES],
1187 [
1188 AC_MSG_CHECKING([if build directory is on local disk])
1189 BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUTDIR,
1190 [OUTPUT_DIR_IS_LOCAL="yes"],
1191 [OUTPUT_DIR_IS_LOCAL="no"])
1192 AC_MSG_RESULT($OUTPUT_DIR_IS_LOCAL)
1193
1194 BASIC_CHECK_SRC_PERMS
1195
1196 # Check if the user has any old-style ALT_ variables set.
1197 FOUND_ALT_VARIABLES=`env | grep ^ALT_`
1198
1199 # Before generating output files, test if they exist. If they do, this is a reconfigure.
1200 # Since we can't properly handle the dependencies for this, warn the user about the situation
1201 if test -e $OUTPUTDIR/spec.gmk; then
1202 IS_RECONFIGURE=yes
1203 else
1204 IS_RECONFIGURE=no
1205 fi
1206 ])
1207
1208 # Check for support for specific options in bash
1209 AC_DEFUN_ONCE([BASIC_CHECK_BASH_OPTIONS],
1210 [
1211 # Check bash version
1212 # Extra [ ] to stop m4 mangling
1213 [ BASH_VER=`$BASH --version | $SED -n -e 's/^.*bash.*ersion *\([0-9.]*\).*$/\1/ p'` ]
1214 AC_MSG_CHECKING([bash version])
1215 AC_MSG_RESULT([$BASH_VER])
1216
1217 BASH_MAJOR=`$ECHO $BASH_VER | $CUT -d . -f 1`
1218 BASH_MINOR=`$ECHO $BASH_VER | $CUT -d . -f 2`
1219 if test $BASH_MAJOR -lt 3 || (test $BASH_MAJOR -eq 3 && test $BASH_MINOR -lt 2); then
1220 AC_MSG_ERROR([bash version 3.2 or better is required])
1221 fi
1222
1223 # Test if bash supports pipefail.
1224 AC_MSG_CHECKING([if bash supports pipefail])
1225 if ${BASH} -c 'set -o pipefail'; then
1226 BASH_ARGS="$BASH_ARGS -o pipefail"
1227 AC_MSG_RESULT([yes])
1243 ################################################################################
1244 #
1245 # Default make target
1246 #
1247 AC_DEFUN_ONCE([BASIC_SETUP_DEFAULT_MAKE_TARGET],
1248 [
1249 AC_ARG_WITH(default-make-target, [AS_HELP_STRING([--with-default-make-target],
1250 [set the default make target @<:@exploded-image@:>@])])
1251 if test "x$with_default_make_target" = "x" \
1252 || test "x$with_default_make_target" = "xyes"; then
1253 DEFAULT_MAKE_TARGET="exploded-image"
1254 elif test "x$with_default_make_target" = "xno"; then
1255 AC_MSG_ERROR([--without-default-make-target is not a valid option])
1256 else
1257 DEFAULT_MAKE_TARGET="$with_default_make_target"
1258 fi
1259
1260 AC_SUBST(DEFAULT_MAKE_TARGET)
1261 ])
1262
1263 # Setup the default value for LOG=
1264 #
1265 AC_DEFUN_ONCE([BASIC_SETUP_DEFAULT_LOG],
1266 [
1267 AC_ARG_WITH(log, [AS_HELP_STRING([--with-log],
1268 [[default vaue for make LOG argument [warn]]])])
1269 AC_MSG_CHECKING([for default LOG value])
1270 if test "x$with_log" = x; then
1271 DEFAULT_LOG=""
1272 else
1273 # Syntax for valid LOG options is a bit too complex for it to be worth
1274 # implementing a test for correctness in configure. Just accept it.
1275 DEFAULT_LOG=$with_log
1276 fi
1277 AC_MSG_RESULT([$DEFAULT_LOG])
1278 AC_SUBST(DEFAULT_LOG)
1279 ])
1280
1281 # Code to run after AC_OUTPUT
1282 AC_DEFUN_ONCE([BASIC_POST_CONFIG_OUTPUT],
1283 [
1284 # Try to move config.log (generated by autoconf) to the configure-support directory.
1285 if test -e ./config.log; then
1286 $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
1287 fi
1288
1289 # Rotate our log file (configure.log)
1290 if test -e "$OUTPUTDIR/configure.log.old"; then
1291 $RM -f "$OUTPUTDIR/configure.log.old"
1292 fi
1293 if test -e "$OUTPUTDIR/configure.log"; then
1294 $MV -f "$OUTPUTDIR/configure.log" "$OUTPUTDIR/configure.log.old" 2> /dev/null
1295 fi
1296
1297 # Move configure.log from current directory to the build output root
1298 if test -e ./configure.log; then
1299 $MV -f ./configure.log "$OUTPUTDIR/configure.log" 2> /dev/null
1300 fi
|
6 # under the terms of the GNU General Public License version 2 only, as
7 # published by the Free Software Foundation. Oracle designates this
8 # particular file as subject to the "Classpath" exception as provided
9 # by Oracle in the LICENSE file that accompanied this code.
10 #
11 # This code is distributed in the hope that it will be useful, but WITHOUT
12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 # version 2 for more details (a copy is included in the LICENSE file that
15 # accompanied this code).
16 #
17 # You should have received a copy of the GNU General Public License version
18 # 2 along with this work; if not, write to the Free Software Foundation,
19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 #
21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 # or visit www.oracle.com if you need additional information or have any
23 # questions.
24 #
25
26 ###############################################################################
27 # Create a function/macro that takes a series of named arguments. The call is
28 # similar to AC_DEFUN, but the setup of the function looks like this:
29 # BASIC_DEFUN_NAMED([MYFUNC], [FOO *BAR], [$@], [
30 # ... do something
31 # AC_MSG_NOTICE([Value of BAR is ARG_BAR])
32 # ])
33 # A star (*) in front of a named argument means that it is required and it's
34 # presence will be verified. To pass e.g. the first value as a normal indexed
35 # argument, use [m4_shift($@)] as the third argument instead of [$@]. These
36 # arguments are referenced in the function by their name prefixed by ARG_, e.g.
37 # "ARG_FOO".
38 #
39 # The generated function can be called like this:
40 # MYFUNC(FOO: [foo-val],
41 # BAR: [
42 # $ECHO hello world
43 # ])
44 # Note that the argument value must start on the same line as the argument name.
45 #
46 # Argument 1: Name of the function to define
75 AC_MSG_ERROR([Internal error: Required named arguments are missing for [$1]. Missing arguments: 'm4_set_contents(required_named_args, [ ])'])
76 ])
77 m4_foreach([arg], m4_indir([m4_dquote]m4_set_listc([legal_named_args])), [
78 m4_pushdef([ARG_][]arg, [])
79 m4_set_add(defined_args, arg)
80 ])
81 m4_set_delete(legal_named_args)
82 m4_set_delete(required_named_args)
83
84 # Execute function body
85 $4
86
87 m4_foreach([arg], m4_indir([m4_dquote]m4_set_listc([defined_args])), [
88 m4_popdef([ARG_][]arg)
89 ])
90
91 m4_set_delete(defined_args)
92 ])
93 ])
94
95 ###############################################################################
96 # Check if a list of space-separated words are selected only from a list of
97 # space-separated legal words. Typical use is to see if a user-specified
98 # set of words is selected from a set of legal words.
99 #
100 # Sets the specified variable to list of non-matching (offending) words, or to
101 # the empty string if all words are matching the legal set.
102 #
103 # $1: result variable name
104 # $2: list of values to check
105 # $3: list of legal values
106 AC_DEFUN([BASIC_GET_NON_MATCHING_VALUES],
107 [
108 # grep filter function inspired by a comment to http://stackoverflow.com/a/1617326
109 # Notice that the original variant fails on SLES 10 and 11
110 values_to_check=`$ECHO $2 | $TR ' ' '\n'`
111 legal_values=`$ECHO $3 | $TR ' ' '\n'`
112 result=`$GREP -Fvx "$legal_values" <<< "$values_to_check" | $GREP -v '^$'`
113 $1=${result//$'\n'/ }
114 ])
115
116 ###############################################################################
117 # Sort a space-separated list, and remove duplicates.
118 #
119 # Sets the specified variable to the resulting list.
120 #
121 # $1: result variable name
122 # $2: list of values to sort
123 AC_DEFUN([BASIC_SORT_LIST],
124 [
125 values_to_sort=`$ECHO $2 | $TR ' ' '\n'`
126 result=`$SORT -u <<< "$values_to_sort" | $GREP -v '^$'`
127 $1=${result//$'\n'/ }
128 ])
129
130 ###############################################################################
131 # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3)
132 # If so, then append $1 to $2 \
133 # Also set JVM_ARG_OK to true/false depending on outcome.
134 AC_DEFUN([ADD_JVM_ARG_IF_OK],
135 [
136 $ECHO "Check if jvm arg is ok: $1" >&AS_MESSAGE_LOG_FD
137 $ECHO "Command: $3 $1 -version" >&AS_MESSAGE_LOG_FD
138 OUTPUT=`$3 $1 -version 2>&1`
139 FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn`
140 FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""`
141 if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
142 $2="[$]$2 $1"
143 JVM_ARG_OK=true
144 else
145 $ECHO "Arg failed:" >&AS_MESSAGE_LOG_FD
146 $ECHO "$OUTPUT" >&AS_MESSAGE_LOG_FD
147 JVM_ARG_OK=false
148 fi
149 ])
150
155 if test "x[$]$1" = x; then
156 $1="$2"
157 else
158 $1="[$]$1:$2"
159 fi
160 fi
161 ])
162
163 # Prepends a string to a path variable, only adding the : when needed.
164 AC_DEFUN([BASIC_PREPEND_TO_PATH],
165 [
166 if test "x$2" != x; then
167 if test "x[$]$1" = x; then
168 $1="$2"
169 else
170 $1="$2:[$]$1"
171 fi
172 fi
173 ])
174
175 ###############################################################################
176 # This will make sure the given variable points to a full and proper
177 # path. This means:
178 # 1) There will be no spaces in the path. On unix platforms,
179 # spaces in the path will result in an error. On Windows,
180 # the path will be rewritten using short-style to be space-free.
181 # 2) The path will be absolute, and it will be in unix-style (on
182 # cygwin).
183 # $1: The name of the variable to fix
184 AC_DEFUN([BASIC_FIXUP_PATH],
185 [
186 # Only process if variable expands to non-empty
187
188 if test "x[$]$1" != x; then
189 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
190 BASIC_FIXUP_PATH_CYGWIN($1)
191 elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
192 BASIC_FIXUP_PATH_MSYS($1)
193 else
194 # We're on a unix platform. Hooray! :)
195 path="[$]$1"
199 AC_MSG_ERROR([Spaces are not allowed in this path.])
200 fi
201
202 # Use eval to expand a potential ~
203 eval path="$path"
204 if test ! -f "$path" && test ! -d "$path"; then
205 AC_MSG_ERROR([The path of $1, which resolves as "$path", is not found.])
206 fi
207
208 if test -d "$path"; then
209 $1="`cd "$path"; $THEPWDCMD -L`"
210 else
211 dir="`$DIRNAME "$path"`"
212 base="`$BASENAME "$path"`"
213 $1="`cd "$dir"; $THEPWDCMD -L`/$base"
214 fi
215 fi
216 fi
217 ])
218
219 ###############################################################################
220 # This will make sure the given variable points to a executable
221 # with a full and proper path. This means:
222 # 1) There will be no spaces in the path. On unix platforms,
223 # spaces in the path will result in an error. On Windows,
224 # the path will be rewritten using short-style to be space-free.
225 # 2) The path will be absolute, and it will be in unix-style (on
226 # cygwin).
227 # Any arguments given to the executable is preserved.
228 # If the input variable does not have a directory specification, then
229 # it need to be in the PATH.
230 # $1: The name of the variable to fix
231 AC_DEFUN([BASIC_FIXUP_EXECUTABLE],
232 [
233 # Only process if variable expands to non-empty
234
235 if test "x[$]$1" != x; then
236 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
237 BASIC_FIXUP_EXECUTABLE_CYGWIN($1)
238 elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
239 BASIC_FIXUP_EXECUTABLE_MSYS($1)
271 AC_MSG_NOTICE([This might be caused by spaces in the path, which is not allowed.])
272 fi
273 AC_MSG_ERROR([Cannot locate the the path of $1])
274 fi
275 fi
276
277 # Now join together the path and the arguments once again
278 if test "x$arguments" != xEOL; then
279 new_complete="$new_path ${arguments% *}"
280 else
281 new_complete="$new_path"
282 fi
283
284 if test "x$complete" != "x$new_complete"; then
285 $1="$new_complete"
286 AC_MSG_NOTICE([Rewriting $1 to "$new_complete"])
287 fi
288 fi
289 ])
290
291 ###############################################################################
292 AC_DEFUN([BASIC_REMOVE_SYMBOLIC_LINKS],
293 [
294 if test "x$OPENJDK_BUILD_OS" != xwindows; then
295 # Follow a chain of symbolic links. Use readlink
296 # where it exists, else fall back to horribly
297 # complicated shell code.
298 if test "x$READLINK_TESTED" != yes; then
299 # On MacOSX there is a readlink tool with a different
300 # purpose than the GNU readlink tool. Check the found readlink.
301 READLINK_ISGNU=`$READLINK --version 2>&1 | $GREP GNU`
302 # If READLINK_ISGNU is empty, then it's a non-GNU readlink. Don't use it.
303 READLINK_TESTED=yes
304 fi
305
306 if test "x$READLINK" != x && test "x$READLINK_ISGNU" != x; then
307 $1=`$READLINK -f [$]$1`
308 else
309 # Save the current directory for restoring afterwards
310 STARTDIR=$PWD
311 COUNTER=0
318 # Resolve file symlinks
319 while test $COUNTER -lt 20; do
320 ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'`
321 if test "x$ISLINK" == x; then
322 # This is not a symbolic link! We are done!
323 break
324 fi
325 # Again resolve directory symlinks since the target of the just found
326 # link could be in a different directory
327 cd `$DIRNAME $ISLINK`
328 sym_link_dir=`$THEPWDCMD -P`
329 sym_link_file=`$BASENAME $ISLINK`
330 let COUNTER=COUNTER+1
331 done
332 cd $STARTDIR
333 $1=$sym_link_dir/$sym_link_file
334 fi
335 fi
336 ])
337
338 ###############################################################################
339 # Register a --with argument but mark it as deprecated
340 # $1: The name of the with argument to deprecate, not including --with-
341 AC_DEFUN([BASIC_DEPRECATED_ARG_WITH],
342 [
343 AC_ARG_WITH($1, [AS_HELP_STRING([--with-$1],
344 [Deprecated. Option is kept for backwards compatibility and is ignored])],
345 [AC_MSG_WARN([Option --with-$1 is deprecated and will be ignored.])])
346 ])
347
348 ###############################################################################
349 # Register a --enable argument but mark it as deprecated
350 # $1: The name of the with argument to deprecate, not including --enable-
351 # $2: The name of the argument to deprecate, in shell variable style (i.e. with _ instead of -)
352 # $3: Messages to user.
353 AC_DEFUN([BASIC_DEPRECATED_ARG_ENABLE],
354 [
355 AC_ARG_ENABLE($1, [AS_HELP_STRING([--enable-$1],
356 [Deprecated. Option is kept for backwards compatibility and is ignored])])
357 if test "x$enable_$2" != x; then
358 AC_MSG_WARN([Option --enable-$1 is deprecated and will be ignored.])
359
360 if test "x$3" != x; then
361 AC_MSG_WARN([$3])
362 fi
363
364 fi
365 ])
366
367 ###############################################################################
368 AC_DEFUN_ONCE([BASIC_INIT],
369 [
370 # Save the original command line. This is passed to us by the wrapper configure script.
371 AC_SUBST(CONFIGURE_COMMAND_LINE)
372 # Save the path variable before it gets changed
373 ORIGINAL_PATH="$PATH"
374 AC_SUBST(ORIGINAL_PATH)
375 DATE_WHEN_CONFIGURED=`LANG=C date`
376 AC_SUBST(DATE_WHEN_CONFIGURED)
377 AC_MSG_NOTICE([Configuration created at $DATE_WHEN_CONFIGURED.])
378 ])
379
380 ###############################################################################
381 # Test that variable $1 denoting a program is not empty. If empty, exit with an error.
382 # $1: variable to check
383 AC_DEFUN([BASIC_CHECK_NONEMPTY],
384 [
385 if test "x[$]$1" = x; then
386 AC_MSG_ERROR([Could not find required tool for $1])
387 fi
388 ])
389
390 ###############################################################################
391 # Check that there are no unprocessed overridden variables left.
392 # If so, they are an incorrect argument and we will exit with an error.
393 AC_DEFUN([BASIC_CHECK_LEFTOVER_OVERRIDDEN],
394 [
395 if test "x$CONFIGURE_OVERRIDDEN_VARIABLES" != x; then
396 # Replace the separating ! with spaces before presenting for end user.
397 unknown_variables=${CONFIGURE_OVERRIDDEN_VARIABLES//!/ }
398 AC_MSG_WARN([The following variables might be unknown to configure: $unknown_variables])
399 fi
400 ])
401
402 ###############################################################################
403 # Setup a tool for the given variable. If correctly specified by the user,
404 # use that value, otherwise search for the tool using the supplied code snippet.
405 # $1: variable to set
406 # $2: code snippet to call to look for the tool
407 # $3: code snippet to call if variable was used to find tool
408 AC_DEFUN([BASIC_SETUP_TOOL],
409 [
410 # Publish this variable in the help.
411 AC_ARG_VAR($1, [Override default value for $1])
412
413 if [[ -z "${$1+x}" ]]; then
414 # The variable is not set by user, try to locate tool using the code snippet
415 $2
416 else
417 # The variable is set, but is it from the command line or the environment?
418
419 # Try to remove the string !$1! from our list.
420 try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!$1!/}
421 if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then
422 # If it failed, the variable was not from the command line. Ignore it,
449 AC_PATH_PROG($1, $tool_basename)
450 if test "x[$]$1" = x; then
451 AC_MSG_ERROR([User supplied tool $tool_basename could not be found])
452 fi
453 else
454 # Otherwise we believe it is a complete path. Use it as it is.
455 AC_MSG_NOTICE([Will use user supplied tool $1=$tool_specified])
456 AC_MSG_CHECKING([for $1])
457 if test ! -x "$tool_specified"; then
458 AC_MSG_RESULT([not found])
459 AC_MSG_ERROR([User supplied tool $1=$tool_specified does not exist or is not executable])
460 fi
461 AC_MSG_RESULT([$tool_specified])
462 fi
463 fi
464 fi
465 $3
466 fi
467 ])
468
469 ###############################################################################
470 # Call BASIC_SETUP_TOOL with AC_PATH_PROGS to locate the tool
471 # $1: variable to set
472 # $2: executable name (or list of names) to look for
473 # $3: [path]
474 AC_DEFUN([BASIC_PATH_PROGS],
475 [
476 BASIC_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2, , $3)])
477 ])
478
479 ###############################################################################
480 # Call BASIC_SETUP_TOOL with AC_CHECK_TOOLS to locate the tool
481 # $1: variable to set
482 # $2: executable name (or list of names) to look for
483 AC_DEFUN([BASIC_CHECK_TOOLS],
484 [
485 BASIC_SETUP_TOOL($1, [AC_CHECK_TOOLS($1, $2)])
486 ])
487
488 ###############################################################################
489 # Like BASIC_PATH_PROGS but fails if no tool was found.
490 # $1: variable to set
491 # $2: executable name (or list of names) to look for
492 # $3: [path]
493 AC_DEFUN([BASIC_REQUIRE_PROGS],
494 [
495 BASIC_PATH_PROGS($1, $2, , $3)
496 BASIC_CHECK_NONEMPTY($1)
497 ])
498
499 ###############################################################################
500 # Like BASIC_SETUP_TOOL but fails if no tool was found.
501 # $1: variable to set
502 # $2: autoconf macro to call to look for the special tool
503 AC_DEFUN([BASIC_REQUIRE_SPECIAL],
504 [
505 BASIC_SETUP_TOOL($1, [$2])
506 BASIC_CHECK_NONEMPTY($1)
507 ])
508
509 ###############################################################################
510 # Setup the most fundamental tools that relies on not much else to set up,
511 # but is used by much of the early bootstrap code.
512 AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS],
513 [
514 # Start with tools that do not need have cross compilation support
515 # and can be expected to be found in the default PATH. These tools are
516 # used by configure.
517
518 # First are all the simple required tools.
519 BASIC_REQUIRE_PROGS(BASENAME, basename)
520 BASIC_REQUIRE_PROGS(BASH, bash)
521 BASIC_REQUIRE_PROGS(CAT, cat)
522 BASIC_REQUIRE_PROGS(CHMOD, chmod)
523 BASIC_REQUIRE_PROGS(CMP, cmp)
524 BASIC_REQUIRE_PROGS(COMM, comm)
525 BASIC_REQUIRE_PROGS(CP, cp)
526 BASIC_REQUIRE_PROGS(CUT, cut)
527 BASIC_REQUIRE_PROGS(DATE, date)
528 BASIC_REQUIRE_PROGS(DIFF, [gdiff diff])
529 BASIC_REQUIRE_PROGS(DIRNAME, dirname)
562 BASIC_REQUIRE_SPECIAL(GREP, [AC_PROG_GREP])
563 BASIC_REQUIRE_SPECIAL(EGREP, [AC_PROG_EGREP])
564 BASIC_REQUIRE_SPECIAL(FGREP, [AC_PROG_FGREP])
565 BASIC_REQUIRE_SPECIAL(SED, [AC_PROG_SED])
566
567 # Always force rm.
568 RM="$RM -f"
569
570 # pwd behaves differently on various platforms and some don't support the -L flag.
571 # Always use the bash builtin pwd to get uniform behavior.
572 THEPWDCMD=pwd
573
574 # These are not required on all platforms
575 BASIC_PATH_PROGS(CYGPATH, cygpath)
576 BASIC_PATH_PROGS(DF, df)
577 BASIC_PATH_PROGS(CPIO, [cpio bsdcpio])
578 BASIC_PATH_PROGS(NICE, nice)
579 BASIC_PATH_PROGS(PANDOC, pandoc)
580 ])
581
582 ###############################################################################
583 # Setup basic configuration paths, and platform-specific stuff related to PATHs.
584 AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
585 [
586 # Save the current directory this script was started from
587 CURDIR="$PWD"
588
589 # We might need to rewrite ORIGINAL_PATH, if it includes "#", to quote them
590 # for make. We couldn't do this when we retrieved ORIGINAL_PATH, since SED
591 # was not available at that time.
592 REWRITTEN_PATH=`$ECHO "$ORIGINAL_PATH" | $SED -e 's/#/\\\\#/g'`
593 if test "x$REWRITTEN_PATH" != "x$ORIGINAL_PATH"; then
594 ORIGINAL_PATH="$REWRITTEN_PATH"
595 AC_MSG_NOTICE([Rewriting ORIGINAL_PATH to $REWRITTEN_PATH])
596 fi
597
598 if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
599 PATH_SEP=";"
600 BASIC_CHECK_PATHS_WINDOWS
601 else
602 PATH_SEP=":"
604 AC_SUBST(PATH_SEP)
605
606 # We get the top-level directory from the supporting wrappers.
607 AC_MSG_CHECKING([for top-level directory])
608 AC_MSG_RESULT([$TOPDIR])
609 AC_SUBST(TOPDIR)
610
611 # We can only call BASIC_FIXUP_PATH after BASIC_CHECK_PATHS_WINDOWS.
612 BASIC_FIXUP_PATH(CURDIR)
613 BASIC_FIXUP_PATH(TOPDIR)
614
615 # Locate the directory of this script.
616 AUTOCONF_DIR=$TOPDIR/make/autoconf
617
618 # Setup username (for use in adhoc version strings etc)
619 # Outer [ ] to quote m4.
620 [ USERNAME=`$ECHO "$USER" | $TR -d -c '[a-z][A-Z][0-9]'` ]
621 AC_SUBST(USERNAME)
622 ])
623
624 ###############################################################################
625 # Evaluates platform specific overrides for devkit variables.
626 # $1: Name of variable
627 AC_DEFUN([BASIC_EVAL_DEVKIT_VARIABLE],
628 [
629 if test "x[$]$1" = x; then
630 eval $1="\${$1_${OPENJDK_TARGET_CPU}}"
631 fi
632 ])
633
634 ###############################################################################
635 AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
636 [
637 AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit],
638 [use this devkit for compilers, tools and resources])])
639
640 if test "x$with_devkit" = xyes; then
641 AC_MSG_ERROR([--with-devkit must have a value])
642 elif test "x$with_devkit" != x && test "x$with_devkit" != xno; then
643 BASIC_FIXUP_PATH([with_devkit])
644 DEVKIT_ROOT="$with_devkit"
645 # Check for a meta data info file in the root of the devkit
646 if test -f "$DEVKIT_ROOT/devkit.info"; then
647 . $DEVKIT_ROOT/devkit.info
648 # This potentially sets the following:
649 # A descriptive name of the devkit
650 BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_NAME])
651 # Corresponds to --with-extra-path
652 BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_EXTRA_PATH])
653 # Corresponds to --with-toolchain-path
654 BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_TOOLCHAIN_PATH])
793 AC_MSG_ERROR([Invalid SDK or SYSROOT path, dependent framework headers not found])
794 fi
795 fi
796
797 # set SDKROOT too, Xcode tools will pick it up
798 SDKROOT="$SYSROOT"
799 AC_SUBST(SDKROOT)
800 fi
801
802 # Prepend the extra path to the global path
803 BASIC_PREPEND_TO_PATH([PATH],$EXTRA_PATH)
804
805 AC_MSG_CHECKING([for sysroot])
806 AC_MSG_RESULT([$SYSROOT])
807 AC_MSG_CHECKING([for toolchain path])
808 AC_MSG_RESULT([$TOOLCHAIN_PATH])
809 AC_MSG_CHECKING([for extra path])
810 AC_MSG_RESULT([$EXTRA_PATH])
811 ])
812
813 ###############################################################################
814 AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
815 [
816
817 AC_ARG_WITH(conf-name, [AS_HELP_STRING([--with-conf-name],
818 [use this as the name of the configuration @<:@generated from important configuration options@:>@])],
819 [ CONF_NAME=${with_conf_name} ])
820
821 # Test from where we are running configure, in or outside of src root.
822 AC_MSG_CHECKING([where to store configuration])
823 if test "x$CURDIR" = "x$TOPDIR" || test "x$CURDIR" = "x$CUSTOM_ROOT" \
824 || test "x$CURDIR" = "x$TOPDIR/make/autoconf" \
825 || test "x$CURDIR" = "x$TOPDIR/make" ; then
826 # We are running configure from the src root.
827 # Create a default ./build/target-variant-debuglevel output root.
828 if test "x${CONF_NAME}" = x; then
829 AC_MSG_RESULT([in default location])
830 CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${JVM_VARIANTS_WITH_AND}-${DEBUG_LEVEL}"
831 else
832 AC_MSG_RESULT([in build directory with custom name])
833 fi
893 AC_SUBST(CONF_NAME)
894 AC_SUBST(OUTPUTDIR)
895 AC_SUBST(CONFIGURESUPPORT_OUTPUTDIR)
896
897 # The spec.gmk file contains all variables for the make system.
898 AC_CONFIG_FILES([$OUTPUTDIR/spec.gmk:$AUTOCONF_DIR/spec.gmk.in])
899 # The bootcycle-spec.gmk file contains support for boot cycle builds.
900 AC_CONFIG_FILES([$OUTPUTDIR/bootcycle-spec.gmk:$AUTOCONF_DIR/bootcycle-spec.gmk.in])
901 # The buildjdk-spec.gmk file contains support for building a buildjdk when cross compiling.
902 AC_CONFIG_FILES([$OUTPUTDIR/buildjdk-spec.gmk:$AUTOCONF_DIR/buildjdk-spec.gmk.in])
903 # The compare.sh is used to compare the build output to other builds.
904 AC_CONFIG_FILES([$OUTPUTDIR/compare.sh:$AUTOCONF_DIR/compare.sh.in])
905 # The generated Makefile knows where the spec.gmk is and where the source is.
906 # You can run make from the OUTPUTDIR, or from the top-level Makefile
907 # which will look for generated configurations
908 AC_CONFIG_FILES([$OUTPUTDIR/Makefile:$AUTOCONF_DIR/Makefile.in])
909 ])
910
911 #%%% Simple tools %%%
912
913 ###############################################################################
914 # Check if we have found a usable version of make
915 # $1: the path to a potential make binary (or empty)
916 # $2: the description on how we found this
917 AC_DEFUN([BASIC_CHECK_MAKE_VERSION],
918 [
919 MAKE_CANDIDATE="$1"
920 DESCRIPTION="$2"
921
922 # On Cygwin, we require a newer version of make than on other platforms
923 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
924 MAKE_VERSION_EXPR="-e 4\."
925 MAKE_REQUIRED_VERSION="4.0"
926 else
927 MAKE_VERSION_EXPR="-e 3\.8[[12]] -e 4\."
928 MAKE_REQUIRED_VERSION="3.81"
929 fi
930
931 if test "x$MAKE_CANDIDATE" != x; then
932 AC_MSG_NOTICE([Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION])
933 MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1`
947 else
948 AC_MSG_ERROR([Unknown Windows environment])
949 fi
950 MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'`
951 IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV`
952 else
953 # Not relevant for non-Windows
954 IS_MAKE_CORRECT_ENV=true
955 fi
956 if test "x$IS_MAKE_CORRECT_ENV" = x; then
957 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.])
958 else
959 FOUND_MAKE=$MAKE_CANDIDATE
960 BASIC_FIXUP_EXECUTABLE(FOUND_MAKE)
961 fi
962 fi
963 fi
964 fi
965 ])
966
967 ###############################################################################
968 AC_DEFUN([BASIC_CHECK_MAKE_OUTPUT_SYNC],
969 [
970 # Check if make supports the output sync option and if so, setup using it.
971 AC_MSG_CHECKING([if make --output-sync is supported])
972 if $MAKE --version -O > /dev/null 2>&1; then
973 OUTPUT_SYNC_SUPPORTED=true
974 AC_MSG_RESULT([yes])
975 AC_MSG_CHECKING([for output-sync value])
976 AC_ARG_WITH([output-sync], [AS_HELP_STRING([--with-output-sync],
977 [set make output sync type if supported by make. @<:@recurse@:>@])],
978 [OUTPUT_SYNC=$with_output_sync])
979 if test "x$OUTPUT_SYNC" = "x"; then
980 OUTPUT_SYNC=none
981 fi
982 AC_MSG_RESULT([$OUTPUT_SYNC])
983 if ! $MAKE --version -O$OUTPUT_SYNC > /dev/null 2>&1; then
984 AC_MSG_ERROR([Make did not the support the value $OUTPUT_SYNC as output sync type.])
985 fi
986 else
987 OUTPUT_SYNC_SUPPORTED=false
988 AC_MSG_RESULT([no])
989 fi
990 AC_SUBST(OUTPUT_SYNC_SUPPORTED)
991 AC_SUBST(OUTPUT_SYNC)
992 ])
993
994 ###############################################################################
995 # Goes looking for a usable version of GNU make.
996 AC_DEFUN([BASIC_CHECK_GNU_MAKE],
997 [
998 BASIC_SETUP_TOOL([MAKE],
999 [
1000 # Try our hardest to locate a correct version of GNU make
1001 AC_PATH_PROGS(CHECK_GMAKE, gmake)
1002 BASIC_CHECK_MAKE_VERSION("$CHECK_GMAKE", [gmake in PATH])
1003
1004 if test "x$FOUND_MAKE" = x; then
1005 AC_PATH_PROGS(CHECK_MAKE, make)
1006 BASIC_CHECK_MAKE_VERSION("$CHECK_MAKE", [make in PATH])
1007 fi
1008
1009 if test "x$FOUND_MAKE" = x; then
1010 if test "x$TOOLCHAIN_PATH" != x; then
1011 # We have a toolchain path, check that as well before giving up.
1012 OLD_PATH=$PATH
1013 PATH=$TOOLCHAIN_PATH:$PATH
1014 AC_PATH_PROGS(CHECK_TOOLSDIR_GMAKE, gmake)
1022 fi
1023
1024 if test "x$FOUND_MAKE" = x; then
1025 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.])
1026 fi
1027 ],[
1028 # If MAKE was set by user, verify the version
1029 BASIC_CHECK_MAKE_VERSION("$MAKE", [user supplied MAKE=$MAKE])
1030 if test "x$FOUND_MAKE" = x; then
1031 AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not GNU make $MAKE_REQUIRED_VERSION or newer.])
1032 fi
1033 ])
1034
1035 MAKE=$FOUND_MAKE
1036 AC_SUBST(MAKE)
1037 AC_MSG_NOTICE([Using GNU make at $FOUND_MAKE (version: $MAKE_VERSION_STRING)])
1038
1039 BASIC_CHECK_MAKE_OUTPUT_SYNC
1040 ])
1041
1042 ###############################################################################
1043 AC_DEFUN([BASIC_CHECK_FIND_DELETE],
1044 [
1045 # Test if find supports -delete
1046 AC_MSG_CHECKING([if find supports -delete])
1047 FIND_DELETE="-delete"
1048
1049 DELETEDIR=`$MKTEMP -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?)
1050
1051 echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete
1052
1053 TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1`
1054 if test -f $DELETEDIR/TestIfFindSupportsDelete; then
1055 # No, it does not.
1056 $RM $DELETEDIR/TestIfFindSupportsDelete
1057 if test "x$OPENJDK_TARGET_OS" = "xaix"; then
1058 # AIX 'find' is buggy if called with '-exec {} \+' and an empty file list
1059 FIND_DELETE="-print | $XARGS $RM"
1060 else
1061 FIND_DELETE="-exec $RM \{\} \+"
1062 fi
1063 AC_MSG_RESULT([no])
1064 else
1065 AC_MSG_RESULT([yes])
1066 fi
1067 $RMDIR $DELETEDIR
1068 AC_SUBST(FIND_DELETE)
1069 ])
1070
1071 ###############################################################################
1072 AC_DEFUN([BASIC_CHECK_TAR],
1073 [
1074 # Test which kind of tar was found
1075 if test "x$($TAR --version | $GREP "GNU tar")" != "x"; then
1076 TAR_TYPE="gnu"
1077 elif test "x$($TAR --version | $GREP "bsdtar")" != "x"; then
1078 TAR_TYPE="bsd"
1079 elif test "x$($TAR -v | $GREP "bsdtar")" != "x"; then
1080 TAR_TYPE="bsd"
1081 elif test "x$OPENJDK_BUILD_OS" = "xsolaris"; then
1082 TAR_TYPE="solaris"
1083 fi
1084 AC_MSG_CHECKING([what type of tar was found])
1085 AC_MSG_RESULT([$TAR_TYPE])
1086
1087 TAR_CREATE_FILE_PARAM=""
1088
1089 if test "x$TAR_TYPE" = "xgnu"; then
1090 TAR_INCLUDE_PARAM="T"
1091 TAR_SUPPORTS_TRANSFORM="true"
1092 if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
1093 # When using gnu tar for Solaris targets, need to use compatibility mode
1094 TAR_CREATE_EXTRA_PARAM="--format=ustar"
1095 fi
1096 else
1097 TAR_INCLUDE_PARAM="I"
1098 TAR_SUPPORTS_TRANSFORM="false"
1099 fi
1100 AC_SUBST(TAR_TYPE)
1101 AC_SUBST(TAR_CREATE_EXTRA_PARAM)
1102 AC_SUBST(TAR_INCLUDE_PARAM)
1103 AC_SUBST(TAR_SUPPORTS_TRANSFORM)
1104 ])
1105
1106 ###############################################################################
1107 AC_DEFUN([BASIC_CHECK_GREP],
1108 [
1109 # Test that grep supports -Fx with a list of pattern which includes null pattern.
1110 # This is a problem for the grep resident on AIX.
1111 AC_MSG_CHECKING([that grep ($GREP) -Fx handles empty lines in the pattern list correctly])
1112 # Multiple subsequent spaces..
1113 STACK_SPACES='aaa bbb ccc'
1114 # ..converted to subsequent newlines, causes STACK_LIST to be a list with some empty
1115 # patterns in it.
1116 STACK_LIST=${STACK_SPACES// /$'\n'}
1117 NEEDLE_SPACES='ccc bbb aaa'
1118 NEEDLE_LIST=${NEEDLE_SPACES// /$'\n'}
1119 RESULT="$($GREP -Fvx "$STACK_LIST" <<< "$NEEDLE_LIST")"
1120 if test "x$RESULT" == "x"; then
1121 AC_MSG_RESULT([yes])
1122 else
1123 if test "x$OPENJDK_TARGET_OS" = "xaix"; then
1124 ADDINFO="Please make sure you use GNU grep, usually found at /opt/freeware/bin."
1125 fi
1126 AC_MSG_ERROR([grep does not handle -Fx correctly. ${ADDINFO}])
1127 fi
1128 ])
1129
1130 ###############################################################################
1131 AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
1132 [
1133 BASIC_CHECK_GNU_MAKE
1134
1135 BASIC_CHECK_FIND_DELETE
1136 BASIC_CHECK_TAR
1137 BASIC_CHECK_GREP
1138
1139 # These tools might not be installed by default,
1140 # need hint on how to install them.
1141 BASIC_REQUIRE_PROGS(UNZIP, unzip)
1142 # Since zip uses "ZIP" as a environment variable for passing options, we need
1143 # to name our variable differently, hence ZIPEXE.
1144 BASIC_REQUIRE_PROGS(ZIPEXE, zip)
1145
1146 # Non-required basic tools
1147
1148 BASIC_PATH_PROGS(LDD, ldd)
1149 if test "x$LDD" = "x"; then
1150 # List shared lib dependencies is used for
1177 BASIC_PATH_PROGS(CODESIGN, codesign)
1178 if test "x$CODESIGN" != "x"; then
1179 # Verify that the openjdk_codesign certificate is present
1180 AC_MSG_CHECKING([if openjdk_codesign certificate is present])
1181 $RM codesign-testfile
1182 $TOUCH codesign-testfile
1183 $CODESIGN -s openjdk_codesign codesign-testfile 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD || CODESIGN=
1184 $RM codesign-testfile
1185 if test "x$CODESIGN" = x; then
1186 AC_MSG_RESULT([no])
1187 else
1188 AC_MSG_RESULT([yes])
1189 fi
1190 fi
1191 BASIC_REQUIRE_PROGS(SETFILE, SetFile)
1192 elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
1193 BASIC_REQUIRE_PROGS(ELFEDIT, elfedit)
1194 fi
1195 ])
1196
1197 ###############################################################################
1198 # Check if build directory is on local disk. If not possible to determine,
1199 # we prefer to claim it's local.
1200 # Argument 1: directory to test
1201 # Argument 2: what to do if it is on local disk
1202 # Argument 3: what to do otherwise (remote disk or failure)
1203 AC_DEFUN([BASIC_CHECK_DIR_ON_LOCAL_DISK],
1204 [
1205 # df -l lists only local disks; if the given directory is not found then
1206 # a non-zero exit code is given
1207 if test "x$DF" = x; then
1208 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
1209 # msys does not have df; use Windows "net use" instead.
1210 IS_NETWORK_DISK=`net use | grep \`pwd -W | cut -d ":" -f 1 | tr a-z A-Z\`:`
1211 if test "x$IS_NETWORK_DISK" = x; then
1212 $2
1213 else
1214 $3
1215 fi
1216 else
1217 # No df here, say it's local
1218 $2
1219 fi
1220 else
1221 # JDK-8189619
1222 # df on AIX does not understand -l. On modern AIXes it understands "-T local" which
1223 # is the same. On older AIXes we just continue to live with a "not local build" warning.
1224 if test "x$OPENJDK_TARGET_OS" = xaix; then
1225 DF_LOCAL_ONLY_OPTION='-T local'
1226 else
1227 DF_LOCAL_ONLY_OPTION='-l'
1228 fi
1229 if $DF $DF_LOCAL_ONLY_OPTION $1 > /dev/null 2>&1; then
1230 $2
1231 else
1232 $3
1233 fi
1234 fi
1235 ])
1236
1237 ###############################################################################
1238 # Check that source files have basic read permissions set. This might
1239 # not be the case in cygwin in certain conditions.
1240 AC_DEFUN_ONCE([BASIC_CHECK_SRC_PERMS],
1241 [
1242 if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
1243 file_to_test="$TOPDIR/LICENSE"
1244 if test `$STAT -c '%a' "$file_to_test"` -lt 400; then
1245 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.])
1246 fi
1247 fi
1248 ])
1249
1250 ###############################################################################
1251 AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES],
1252 [
1253 AC_MSG_CHECKING([if build directory is on local disk])
1254 BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUTDIR,
1255 [OUTPUT_DIR_IS_LOCAL="yes"],
1256 [OUTPUT_DIR_IS_LOCAL="no"])
1257 AC_MSG_RESULT($OUTPUT_DIR_IS_LOCAL)
1258
1259 BASIC_CHECK_SRC_PERMS
1260
1261 # Check if the user has any old-style ALT_ variables set.
1262 FOUND_ALT_VARIABLES=`env | grep ^ALT_`
1263
1264 # Before generating output files, test if they exist. If they do, this is a reconfigure.
1265 # Since we can't properly handle the dependencies for this, warn the user about the situation
1266 if test -e $OUTPUTDIR/spec.gmk; then
1267 IS_RECONFIGURE=yes
1268 else
1269 IS_RECONFIGURE=no
1270 fi
1271 ])
1272
1273 ###############################################################################
1274 # Check for support for specific options in bash
1275 AC_DEFUN_ONCE([BASIC_CHECK_BASH_OPTIONS],
1276 [
1277 # Check bash version
1278 # Extra [ ] to stop m4 mangling
1279 [ BASH_VER=`$BASH --version | $SED -n -e 's/^.*bash.*ersion *\([0-9.]*\).*$/\1/ p'` ]
1280 AC_MSG_CHECKING([bash version])
1281 AC_MSG_RESULT([$BASH_VER])
1282
1283 BASH_MAJOR=`$ECHO $BASH_VER | $CUT -d . -f 1`
1284 BASH_MINOR=`$ECHO $BASH_VER | $CUT -d . -f 2`
1285 if test $BASH_MAJOR -lt 3 || (test $BASH_MAJOR -eq 3 && test $BASH_MINOR -lt 2); then
1286 AC_MSG_ERROR([bash version 3.2 or better is required])
1287 fi
1288
1289 # Test if bash supports pipefail.
1290 AC_MSG_CHECKING([if bash supports pipefail])
1291 if ${BASH} -c 'set -o pipefail'; then
1292 BASH_ARGS="$BASH_ARGS -o pipefail"
1293 AC_MSG_RESULT([yes])
1309 ################################################################################
1310 #
1311 # Default make target
1312 #
1313 AC_DEFUN_ONCE([BASIC_SETUP_DEFAULT_MAKE_TARGET],
1314 [
1315 AC_ARG_WITH(default-make-target, [AS_HELP_STRING([--with-default-make-target],
1316 [set the default make target @<:@exploded-image@:>@])])
1317 if test "x$with_default_make_target" = "x" \
1318 || test "x$with_default_make_target" = "xyes"; then
1319 DEFAULT_MAKE_TARGET="exploded-image"
1320 elif test "x$with_default_make_target" = "xno"; then
1321 AC_MSG_ERROR([--without-default-make-target is not a valid option])
1322 else
1323 DEFAULT_MAKE_TARGET="$with_default_make_target"
1324 fi
1325
1326 AC_SUBST(DEFAULT_MAKE_TARGET)
1327 ])
1328
1329 ###############################################################################
1330 # Setup the default value for LOG=
1331 #
1332 AC_DEFUN_ONCE([BASIC_SETUP_DEFAULT_LOG],
1333 [
1334 AC_ARG_WITH(log, [AS_HELP_STRING([--with-log],
1335 [[default vaue for make LOG argument [warn]]])])
1336 AC_MSG_CHECKING([for default LOG value])
1337 if test "x$with_log" = x; then
1338 DEFAULT_LOG=""
1339 else
1340 # Syntax for valid LOG options is a bit too complex for it to be worth
1341 # implementing a test for correctness in configure. Just accept it.
1342 DEFAULT_LOG=$with_log
1343 fi
1344 AC_MSG_RESULT([$DEFAULT_LOG])
1345 AC_SUBST(DEFAULT_LOG)
1346 ])
1347
1348 ###############################################################################
1349 # Code to run after AC_OUTPUT
1350 AC_DEFUN_ONCE([BASIC_POST_CONFIG_OUTPUT],
1351 [
1352 # Try to move config.log (generated by autoconf) to the configure-support directory.
1353 if test -e ./config.log; then
1354 $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
1355 fi
1356
1357 # Rotate our log file (configure.log)
1358 if test -e "$OUTPUTDIR/configure.log.old"; then
1359 $RM -f "$OUTPUTDIR/configure.log.old"
1360 fi
1361 if test -e "$OUTPUTDIR/configure.log"; then
1362 $MV -f "$OUTPUTDIR/configure.log" "$OUTPUTDIR/configure.log.old" 2> /dev/null
1363 fi
1364
1365 # Move configure.log from current directory to the build output root
1366 if test -e ./configure.log; then
1367 $MV -f ./configure.log "$OUTPUTDIR/configure.log" 2> /dev/null
1368 fi
|