41 fi |
41 fi |
42 # Force autoconf to use bash. This also means we must disable autoconf re-exec. |
42 # Force autoconf to use bash. This also means we must disable autoconf re-exec. |
43 export CONFIG_SHELL=$BASH |
43 export CONFIG_SHELL=$BASH |
44 export _as_can_reexec=no |
44 export _as_can_reexec=no |
45 |
45 |
46 conf_script_dir="$TOPDIR/make/autoconf" |
|
47 |
|
48 if test "x$CUSTOM_CONFIG_DIR" != x; then |
46 if test "x$CUSTOM_CONFIG_DIR" != x; then |
49 if test ! -e $CUSTOM_CONFIG_DIR/generated-configure.sh; then |
47 custom_hook=$CUSTOM_CONFIG_DIR/custom-hook.m4 |
|
48 if test ! -e $custom_hook; then |
50 echo "CUSTOM_CONFIG_DIR not pointing to a proper custom config dir." |
49 echo "CUSTOM_CONFIG_DIR not pointing to a proper custom config dir." |
51 echo "Error: Cannot continue" 1>&2 |
50 echo "Error: Cannot continue" 1>&2 |
52 exit 1 |
51 exit 1 |
53 fi |
52 fi |
54 fi |
53 build_support_dir="$CUSTOM_ROOT/.build" |
55 |
54 else |
56 ### |
55 build_support_dir="$TOPDIR/.build" |
57 ### Test that the generated configure is up-to-date |
56 fi |
58 ### |
57 |
59 |
58 conf_script_dir="$TOPDIR/make/autoconf" |
60 run_autogen_or_fail() { |
59 generated_script="$build_support_dir/generated-configure.sh" |
61 if test "x`which autoconf 2> /dev/null | grep -v '^no autoconf in'`" = x; then |
60 |
62 echo "Cannot locate autoconf, unable to correct situation." |
61 ### |
63 echo "Please install autoconf and run 'bash autogen.sh' to update the generated files." |
62 ### Use autoconf to create a runnable configure script, if needed |
64 echo "Error: Cannot continue" 1>&2 |
63 ### |
|
64 |
|
65 autoconf_missing_help() { |
|
66 APT_GET="`which apt-get 2> /dev/null | grep -v '^no apt-get in'`" |
|
67 YUM="`which yum 2> /dev/null | grep -v '^no yum in'`" |
|
68 BREW="`which brew 2> /dev/null | grep -v '^no brew in'`" |
|
69 CYGWIN="`which cygpath 2> /dev/null | grep -v '^no cygpath in'`" |
|
70 |
|
71 if test "x$APT_GET" != x; then |
|
72 PKGHANDLER_COMMAND="sudo apt-get install autoconf" |
|
73 elif test "x$YUM" != x; then |
|
74 PKGHANDLER_COMMAND="sudo yum install autoconf" |
|
75 elif test "x$BREW" != x; then |
|
76 PKGHANDLER_COMMAND="brew install autoconf" |
|
77 elif test "x$CYGWIN" != x; then |
|
78 PKGHANDLER_COMMAND="( cd <location of cygwin setup.exe> && cmd /c setup -q -P autoconf )" |
|
79 fi |
|
80 |
|
81 if test "x$PKGHANDLER_COMMAND" != x; then |
|
82 echo "You might be able to fix this by running '$PKGHANDLER_COMMAND'." |
|
83 fi |
|
84 } |
|
85 |
|
86 generate_configure_script() { |
|
87 if test "x$AUTOCONF" != x; then |
|
88 if test ! -x "$AUTOCONF"; then |
|
89 echo |
|
90 echo "The specified AUTOCONF variable does not point to a valid autoconf executable:" |
|
91 echo "AUTOCONF=$AUTOCONF" |
|
92 echo "Error: Cannot continue" 1>&2 |
|
93 exit 1 |
|
94 fi |
|
95 else |
|
96 AUTOCONF="`which autoconf 2> /dev/null | grep -v '^no autoconf in'`" |
|
97 if test "x$AUTOCONF" = x; then |
|
98 echo |
|
99 echo "Autoconf is not found on the PATH, and AUTOCONF is not set." |
|
100 echo "You need autoconf to be able to generate a runnable configure script." |
|
101 autoconf_missing_help |
|
102 echo "Error: Cannot find autoconf" 1>&2 |
|
103 exit 1 |
|
104 fi |
|
105 fi |
|
106 |
|
107 autoconf_version=`$AUTOCONF --version | head -1` |
|
108 echo "Using autoconf at ${AUTOCONF} [$autoconf_version]" |
|
109 |
|
110 if test "x$CUSTOM_CONFIG_DIR" != x; then |
|
111 # Generate configure script with custom hooks compiled in. |
|
112 custom_patcher='sed -e "s|#CUSTOM_AUTOCONF_INCLUDE|m4_include([$custom_hook])|"' |
|
113 else |
|
114 custom_patcher='cat' |
|
115 fi |
|
116 |
|
117 mkdir -p `dirname $generated_script` |
|
118 # Call autoconf but replace the "magic" variable in configure.ac if requested. |
|
119 cat $conf_script_dir/configure.ac | eval $custom_patcher | \ |
|
120 ${AUTOCONF} -W all -I$conf_script_dir - > $generated_script |
|
121 rm -rf autom4te.cache |
|
122 |
|
123 # Sanity check |
|
124 if test ! -s $generated_script; then |
|
125 echo "Error: Failed to generate runnable configure script" 1>&2 |
|
126 rm -f $generated_script |
65 exit 1 |
127 exit 1 |
66 else |
|
67 echo "Running autogen.sh to correct the situation" |
|
68 bash $conf_script_dir/autogen.sh |
|
69 fi |
128 fi |
70 } |
129 } |
71 |
130 |
72 check_autoconf_timestamps() { |
131 test_generated_up_to_date() { |
73 for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 ; do |
|
74 if test $file -nt $conf_script_dir/generated-configure.sh; then |
|
75 echo "Warning: The configure source files is newer than the generated files." |
|
76 run_autogen_or_fail |
|
77 fi |
|
78 done |
|
79 |
|
80 if test "x$CUSTOM_CONFIG_DIR" != x; then |
|
81 # If custom source configure is available, make sure it is up-to-date as well. |
|
82 for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 $CUSTOM_CONFIG_DIR/*.m4; do |
|
83 if test $file -nt $CUSTOM_CONFIG_DIR/generated-configure.sh; then |
|
84 echo "Warning: The configure source files is newer than the custom generated files." |
|
85 run_autogen_or_fail |
|
86 fi |
|
87 done |
|
88 fi |
|
89 } |
|
90 |
|
91 check_hg_updates() { |
|
92 if test "x`which hg 2> /dev/null | grep -v '^no hg in'`" != x; then |
132 if test "x`which hg 2> /dev/null | grep -v '^no hg in'`" != x; then |
93 conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard . 2> /dev/null` |
133 conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard . 2> /dev/null` |
94 if test "x$conf_updated_autoconf_files" != x; then |
134 conf_source_files="$conf_script_dir/configure.ac $conf_script_dir/*.m4" |
95 echo "Configure source code has been updated, checking time stamps" |
135 if test "x$CUSTOM_CONFIG_DIR" != x; then |
96 check_autoconf_timestamps |
|
97 elif test "x$CUSTOM_CONFIG_DIR" != x; then |
|
98 # If custom source configure is available, make sure it is up-to-date as well. |
|
99 conf_custom_updated_autoconf_files=`cd $CUSTOM_CONFIG_DIR && hg status -mard . 2> /dev/null` |
136 conf_custom_updated_autoconf_files=`cd $CUSTOM_CONFIG_DIR && hg status -mard . 2> /dev/null` |
100 if test "x$conf_custom_updated_autoconf_files" != x; then |
137 conf_custom_source_files="$CUSTOM_CONFIG_DIR/*.m4" |
101 echo "Configure custom source code has been updated, checking time stamps" |
138 else |
102 check_autoconf_timestamps |
139 conf_custom_updated_autoconf_files="" |
103 fi |
140 conf_custom_source_files="" |
104 fi |
141 fi |
105 fi |
142 |
|
143 if test "x${conf_updated_autoconf_files}${conf_custom_updated_autoconf_files}" != x; then |
|
144 for file in $conf_source_files $conf_custom_source_files ; do |
|
145 if test $file -nt $generated_script; then |
|
146 return 0 |
|
147 fi |
|
148 done |
|
149 fi |
|
150 fi |
|
151 return 1 |
106 } |
152 } |
107 |
153 |
108 # Check for local changes |
154 run_autoconf=false |
109 check_hg_updates |
155 if test "x$1" = xautogen; then |
110 |
156 # User called us as "configure autogen", so force regeneration |
111 if test "x$CUSTOM_CONFIG_DIR" != x; then |
157 run_autoconf=true |
112 # Test if open configure is newer than custom configure, if so, custom needs to |
158 shift |
113 # be regenerated. This test is required to ensure consistency with custom source. |
159 fi |
114 conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_script_dir/generated-configure.sh | cut -d"=" -f 2` |
160 |
115 conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED= $CUSTOM_CONFIG_DIR/generated-configure.sh | cut -d"=" -f 2` |
161 if test ! -s $generated_script; then |
116 if test $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then |
162 # Generated script is missing, so we need to create it |
117 echo "Warning: The generated configure file contains changes not present in the custom generated file." |
163 echo "Runnable configure script is not present" |
118 run_autogen_or_fail |
164 run_autoconf=true |
119 fi |
165 else |
|
166 # File is present, but is it up to date? |
|
167 if test_generated_up_to_date; then |
|
168 echo "Runnable configure script is not up to date" |
|
169 run_autoconf=true |
|
170 fi |
|
171 fi |
|
172 |
|
173 if test "x$run_autoconf" = xtrue; then |
|
174 echo "Generating runnable configure script" |
|
175 generate_configure_script |
120 fi |
176 fi |
121 |
177 |
122 # Autoconf calls the configure script recursively sometimes. |
178 # Autoconf calls the configure script recursively sometimes. |
123 # Don't start logging twice in that case |
179 # Don't start logging twice in that case |
124 if test "x$conf_debug_configure" = xtrue; then |
180 if test "x$conf_debug_configure" = xtrue; then |
238 conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}") |
294 conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}") |
239 |
295 |
240 ### |
296 ### |
241 ### Call the configure script |
297 ### Call the configure script |
242 ### |
298 ### |
243 if test "x$CUSTOM_CONFIG_DIR" != x; then |
|
244 # Custom source configure available; run that instead |
|
245 echo "Running custom generated-configure.sh" |
|
246 conf_script_to_run=$CUSTOM_CONFIG_DIR/generated-configure.sh |
|
247 else |
|
248 echo "Running generated-configure.sh" |
|
249 conf_script_to_run=$conf_script_dir/generated-configure.sh |
|
250 fi |
|
251 |
|
252 if test "x$conf_debug_configure" != x; then |
299 if test "x$conf_debug_configure" != x; then |
253 # Turn on shell debug output if requested (initial or recursive) |
300 # Turn on shell debug output if requested (initial or recursive) |
254 set -x |
301 set -x |
255 fi |
302 fi |
256 |
303 |
257 # Now transfer control to the script generated by autoconf. This is where the |
304 # Now transfer control to the script generated by autoconf. This is where the |
258 # main work is done. |
305 # main work is done. |
259 RCDIR=`mktemp -dt jdk-build-configure.tmp.XXXXXX` || exit $? |
306 RCDIR=`mktemp -dt jdk-build-configure.tmp.XXXXXX` || exit $? |
260 trap "rm -rf \"$RCDIR\"" EXIT |
307 trap "rm -rf \"$RCDIR\"" EXIT |
261 conf_logfile=./configure.log |
308 conf_logfile=./configure.log |
262 (exec 3>&1 ; ((. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) \ |
309 (exec 3>&1 ; ((. $generated_script "${conf_processed_arguments[@]}" 2>&1 1>&3 ) \ |
263 ; echo $? > "$RCDIR/rc" ) \ |
310 ; echo $? > "$RCDIR/rc" ) \ |
264 | tee -a $conf_logfile 1>&2 ; exec 3>&-) | tee -a $conf_logfile |
311 | tee -a $conf_logfile 1>&2 ; exec 3>&-) | tee -a $conf_logfile |
265 |
312 |
266 conf_result_code=`cat "$RCDIR/rc"` |
313 conf_result_code=`cat "$RCDIR/rc"` |
267 ### |
314 ### |