diff options
author | rillig <rillig@pkgsrc.org> | 2020-05-21 13:42:10 +0000 |
---|---|---|
committer | rillig <rillig@pkgsrc.org> | 2020-05-21 13:42:10 +0000 |
commit | 40e0a199cd77330a5d7edc0ef61d38b50887d0e2 (patch) | |
tree | f46a8390e10ad3f1b0cb56eec9d5e90a9b4588c8 | |
parent | 92418464350826d33bffeb80a53ba30fbd83b4b7 (diff) | |
download | pkgsrc-40e0a199cd77330a5d7edc0ef61d38b50887d0e2.tar.gz |
mk/configure: completely rewrite check for unknown configure options
The previous implementation could not reliably detect outdated configure
options. This was apparent in devel/gettext-tools, where the option
--with-included-libcroco had become unknown between May 2019 and May
2020, but the check was not run.
The behavior is the same in the pkgsrc default configuration. Only if
GNU_CONFIGURE_STRICT=yes, the new check is activated and will make
packages fail that previously succeeded to build. Since that variable is
not widely known, there won't be much sudden breakage, if any.
-rw-r--r-- | mk/configure/gnu-configure-unknown.awk | 83 | ||||
-rw-r--r-- | mk/configure/gnu-configure.mk | 54 | ||||
-rw-r--r-- | regress/gnu-configure-strict/spec | 47 | ||||
-rw-r--r-- | regress/gnu-configure-strict/t-gettext-tools.test | 35 | ||||
-rw-r--r-- | regress/gnu-configure-strict/t-simple-unrecognized.test | 12 | ||||
-rw-r--r-- | regress/gnu-configure-strict/t-subdirs-ok.test | 20 | ||||
-rw-r--r-- | regress/gnu-configure-strict/t-subdirs-only-in-main.test | 20 | ||||
-rw-r--r-- | regress/gnu-configure-strict/t-subdirs-unrecognized.test | 21 | ||||
-rw-r--r-- | regress/gnu-configure-strict/t-verbose.test | 41 | ||||
-rw-r--r-- | regress/infra-unittests/gnu-configure-strict.sh | 399 |
10 files changed, 441 insertions, 291 deletions
diff --git a/mk/configure/gnu-configure-unknown.awk b/mk/configure/gnu-configure-unknown.awk deleted file mode 100644 index 28fa3bbec76..00000000000 --- a/mk/configure/gnu-configure-unknown.awk +++ /dev/null @@ -1,83 +0,0 @@ -#! awk -# $NetBSD: gnu-configure-unknown.awk,v 1.1 2019/05/04 15:16:50 rillig Exp $ -# -# Inspects all GNU configure scripts from a package, including nested -# ones, to see whether command line options that are reported as -# unrecognized by one of them are also unrecognized by the others. -# -# See GNU_CONFIGURE_STRICT. - -BEGIN { - # The set of all options from all configure scripts, - # kept in insertion order to guarantee reproducible output. - delete opts; opts_len = 0; delete opts_seen; - - # The list of subdirectories from which a configure script - # has been executed. - delete subdirs; subdirs_len = 0; - - # There's always at least one configure script. - # This script may execute others. - subdir = "."; - subdirs[subdirs_len++] = subdir; -} - -/^=== configuring in / { - subdir = $4; - subdirs[subdirs_len++] = subdir; -} - -/^configure: WARNING: unrecognized options: / { - for (i = 5; i <= NF; i++) { - opt = $i; - sub(",", "", opt); - if (!opts_seen[opt]++) { - opts[opts_len++] = opt; - } - unknown[subdir, opt] = 1; - } -} - -function count_unknown(opt, n, i) { - n = 0; - for (i in subdirs) { - if (unknown[subdirs[i], opt]) { - n++; - } - } - return n; -} - -function summary(opt, n) { - n = count_unknown(opt); - if (n == subdirs_len) { - print("option " opt " is unknown", - "in all " subdirs_len " configure scripts"); - return 1; - } - - if ("PKG_VERBOSE" in ENVIRON) { - print("good: option " opt " is known", - "in " (subdirs_len - n), - "of " subdirs_len " configure scripts"); - return 1; - } - - return 0; -} - -function finish(_, i, msgs) { - msgs = 0; - for (i = 0; i < opts_len; i++) { - msgs += summary(opts[i]); - } - - if (msgs == 0) { - print("good: all " opts_len " options are used somewhere"); - print("please set GNU_CONFIGURE_STRICT=no in the package"); - } -} - -END { - finish() -} diff --git a/mk/configure/gnu-configure.mk b/mk/configure/gnu-configure.mk index 37510038433..fd6e2438f95 100644 --- a/mk/configure/gnu-configure.mk +++ b/mk/configure/gnu-configure.mk @@ -1,4 +1,4 @@ -# $NetBSD: gnu-configure.mk,v 1.22 2019/10/06 09:44:41 rillig Exp $ +# $NetBSD: gnu-configure.mk,v 1.23 2020/05/21 13:42:10 rillig Exp $ # # Package-settable variables: # @@ -211,20 +211,50 @@ CONFIGURE_ARGS+= --enable-option-checking=fatal CONFIGURE_ARGS+= --enable-option-checking=yes .endif -# Inspects the configure scripts of a package to see whether there are -# multiple configure scripts, and one of them reports an option as -# unrecognized while some other still needs it. -# -# This target is expected to be called manually, after a package failed -# to configure because of the GNU_CONFIGURE_STRICT check. +_SHOW_UNKNOWN_CONFIGURE_OPTIONS_CMD= \ + cd ${WRKSRC}; \ + configures=$$( \ + ${FIND} ${CONFIGURE_DIRS} -name configure \ + | ${SED} -e 's,^${WRKSRC}/,,' \ + | LC_ALL=C ${SORT} -u \ + | ${TR} '\n' ' ' \ + | ${SED} 's, $$,,'); \ + exitcode=0; \ + for opt in "" \ + ${CONFIGURE_ARGS:M--enable-*} \ + ${CONFIGURE_ARGS:M--disable-*} \ + ${CONFIGURE_ARGS:M--with-*} \ + ${CONFIGURE_ARGS:M--without-*}; do \ + [ "$$opt" ] || continue; \ + optvar=$${opt%%=*}; \ + optvar=$${optvar\#--}; \ + optvar=$$(${ECHO} "$$optvar" \ + | ${SED} -e 's/[-+.]/_/g' \ + -e 's,^disable_,enable_,' \ + -e 's,^without_,with_,'); \ + [ "$$optvar" = 'enable_option_checking' ] && continue; \ + ${GREP} "^$$optvar$$" $$configures 1>/dev/null || { \ + ${ERROR_MSG} "[gnu-configure.mk] option $$opt not found in $$configures"; \ + exitcode=1; \ + }; \ + done + +# Inspects the configure scripts of a package to see whether each option +# of the form --enable-* or --disable-* or --with-* or --without-* is +# known to at least one of the configure scripts. If that is not the +# case, the option is outdated in most cases, or it has a typo. # # See also: GNU_CONFIGURE_STRICT configure-help # # Keywords: GNU_CONFIGURE_STRICT configure-help show-unknown-configure-options: .PHONY ${RUN} ${MAKE} patch - ${RUN} ${RM} -f ${_COOKIE.configure} - @${STEP_MSG} "Running configure scripts silently" - ${RUN} ${MAKE} configure GNU_CONFIGURE_STRICT=warn 2>&1 \ - | ${AWK} -f ${PKGSRCDIR}/mk/configure/gnu-configure-unknown.awk - ${RUN} ${RM} -f ${_COOKIE.configure} + ${RUN} ${_SHOW_UNKNOWN_CONFIGURE_OPTIONS_CMD} + +.if ${GNU_CONFIGURE_STRICT:tl} == yes +USE_TOOLS+= find grep sed sort tr + +pre-configure-checks-hook: _check-unknown-configure-options +_check-unknown-configure-options: .PHONY + ${RUN} ${_SHOW_UNKNOWN_CONFIGURE_OPTIONS_CMD}; exit $$exitcode +.endif diff --git a/regress/gnu-configure-strict/spec b/regress/gnu-configure-strict/spec deleted file mode 100644 index 43aae978b5a..00000000000 --- a/regress/gnu-configure-strict/spec +++ /dev/null @@ -1,47 +0,0 @@ -# $NetBSD: spec,v 1.1 2019/05/04 15:16:51 rillig Exp $ -# -# Checks that analyzing unknown CONFIGURE_ARGS produces the expected results, -# for both packages containing only a single configure scripts and those -# containing multiple configure scripts. - -set -eu - -tmpdir=${TMPDIR:-/tmp}/pkgsrc-gnu-configure -rm -rf "$tmpdir" -mkdir -p "$tmpdir" - -require_file() { - if diff -u "$3" "$1" > /dev/null; then - : - else - regress_fail "Expected files to be equal." - diff -u "$3" "$1" || true - fi -} - -do_test_case() { - testname=${1%.test} - - awk '/^# end/ { relevant = 0 } relevant { print } /^# begin/ { relevant = 1 }' \ - < "$1" > "$tmpdir/$testname.expected" - - awk -f $PKGSRCDIR/mk/configure/gnu-configure-unknown.awk \ - "$1" > "$tmpdir/$testname.actual" - - require_file "$tmpdir/$testname.actual" --equals "$tmpdir/$testname.expected" -} - -do_test() { - do_test_case "t-simple-unrecognized.test" - do_test_case "t-gettext-tools.test" - do_test_case "t-subdirs-ok.test" - do_test_case "t-subdirs-unrecognized.test" - do_test_case "t-subdirs-only-in-main.test" - export PKG_VERBOSE=yes - do_test_case "t-verbose.test" - unset PKG_VERBOSE -} - -check_result() { - exit_status 0 -} diff --git a/regress/gnu-configure-strict/t-gettext-tools.test b/regress/gnu-configure-strict/t-gettext-tools.test deleted file mode 100644 index d1fadba62f4..00000000000 --- a/regress/gnu-configure-strict/t-gettext-tools.test +++ /dev/null @@ -1,35 +0,0 @@ -# $NetBSD: t-gettext-tools.test,v 1.1 2019/05/04 15:16:51 rillig Exp $ - -This is the output of running "bmake configure GNU_CONFIGURE_STRICT=warn" -in devel/gettext-tools. That package has several subdirectories, and some -of them even run multiple configure scripts. - -===> Configuring for gettext-tools-0.19.8.1nb1 -... -=== configuring in gettext-runtime -... -configure: WARNING: unrecognized options: --with-included-libcroco, --without-git, --with-xz, --without-emacs, --disable-openmp -... -=== configuring in libasprintf -... -configure: WARNING: unrecognized options: --disable-csharp, --disable-java, --with-included-libcroco, --without-git, --with-xz, --without-included-gettext, --without-emacs, --disable-openmp -... -configure: WARNING: unrecognized options: --disable-csharp, --disable-java, --with-included-libcroco, --without-git, --with-xz, --without-included-gettext, --without-emacs, --disable-openmp -configure: WARNING: unrecognized options: --with-included-libcroco, --without-git, --with-xz, --without-emacs, --disable-openmp -... -=== configuring in gettext-tools -... -=== configuring in examples -... -configure: WARNING: unrecognized options: --disable-csharp, --disable-java, --with-included-libcroco, --without-git, --with-xz, --without-included-gettext, --without-emacs, --disable-openmp -... -configure: WARNING: unrecognized options: --disable-csharp, --disable-java, --with-included-libcroco, --without-git, --with-xz, --without-included-gettext, --without-emacs, --disable-openmp - -Each of the subdirectories flags several options as unrecognized, but in -summary, each of the given options is used in at least one subdirectory, -which in this case is gettext-tools. - -# begin expected output -good: all 8 options are used somewhere -please set GNU_CONFIGURE_STRICT=no in the package -# end expected output diff --git a/regress/gnu-configure-strict/t-simple-unrecognized.test b/regress/gnu-configure-strict/t-simple-unrecognized.test deleted file mode 100644 index 6d903eef4a5..00000000000 --- a/regress/gnu-configure-strict/t-simple-unrecognized.test +++ /dev/null @@ -1,12 +0,0 @@ -# $NetBSD: t-simple-unrecognized.test,v 1.1 2019/05/04 15:16:51 rillig Exp $ - -In most configure scripts there are no calls to other configure scripts. -In that case the only "subdir" is the main configure script itself. - -===> Configuring for screen-4.6.2nb1 -... -configure: WARNING: unrecognized options: --enable-feature - -# begin -option --enable-feature is unknown in all 1 configure scripts -# end diff --git a/regress/gnu-configure-strict/t-subdirs-ok.test b/regress/gnu-configure-strict/t-subdirs-ok.test deleted file mode 100644 index ba94b7ad0d3..00000000000 --- a/regress/gnu-configure-strict/t-subdirs-ok.test +++ /dev/null @@ -1,20 +0,0 @@ -# $NetBSD: t-subdirs-ok.test,v 1.1 2019/05/04 15:16:51 rillig Exp $ - -===> Configuring for package-1.0 -... -=== configuring in subdir1 -... -configure: WARNING: unrecognized options: --only-subdir2 -... -=== configuring in subdir2 -... -configure: WARNING: unrecognized options: --only-subdir1 -... - -No output expected since each of the unrecognized options is used in the -other subdirectory. - -# begin expected output -good: all 2 options are used somewhere -please set GNU_CONFIGURE_STRICT=no in the package -# end expected output diff --git a/regress/gnu-configure-strict/t-subdirs-only-in-main.test b/regress/gnu-configure-strict/t-subdirs-only-in-main.test deleted file mode 100644 index 7e5fddfb1ad..00000000000 --- a/regress/gnu-configure-strict/t-subdirs-only-in-main.test +++ /dev/null @@ -1,20 +0,0 @@ -# $NetBSD: t-subdirs-only-in-main.test,v 1.1 2019/05/04 15:16:51 rillig Exp $ - -===> Configuring for package-1.0 -... -=== configuring in subdir1 -... -configure: WARNING: unrecognized options: --enable-feature -... -=== configuring in subdir2 -... -configure: WARNING: unrecognized options: --enable-feature -... - -The option is unrecognized in all subdirectories. Yet the main configure -script didn't complain. Therefore it cannot be removed. - -# begin expected output -good: all 1 options are used somewhere -please set GNU_CONFIGURE_STRICT=no in the package -# end expected output diff --git a/regress/gnu-configure-strict/t-subdirs-unrecognized.test b/regress/gnu-configure-strict/t-subdirs-unrecognized.test deleted file mode 100644 index 753fb7191c0..00000000000 --- a/regress/gnu-configure-strict/t-subdirs-unrecognized.test +++ /dev/null @@ -1,21 +0,0 @@ -# $NetBSD: t-subdirs-unrecognized.test,v 1.1 2019/05/04 15:16:51 rillig Exp $ - -===> Configuring for package-1.0 -... -configure: WARNING: unrecognized options: --enable-feature -... -=== configuring in subdir1 -... -configure: WARNING: unrecognized options: --enable-feature -... -=== configuring in subdir2 -... -configure: WARNING: unrecognized options: --enable-feature -... - -Since the option is unrecognized in both the main directory and in all -subdirectories, it can be removed without side effect. - -# begin expected output -option --enable-feature is unknown in all 3 configure scripts -# end expected output diff --git a/regress/gnu-configure-strict/t-verbose.test b/regress/gnu-configure-strict/t-verbose.test deleted file mode 100644 index 55a02124d97..00000000000 --- a/regress/gnu-configure-strict/t-verbose.test +++ /dev/null @@ -1,41 +0,0 @@ -# $NetBSD: t-verbose.test,v 1.1 2019/05/04 15:16:51 rillig Exp $ - -This is the output of running "bmake configure GNU_CONFIGURE_STRICT=warn" -in devel/gettext-tools. That package has several subdirectories, and some -of them even run multiple configure scripts. - -===> Configuring for gettext-tools-0.19.8.1nb1 -... -=== configuring in gettext-runtime -... -configure: WARNING: unrecognized options: --with-included-libcroco, --without-git, --with-xz, --without-emacs, --disable-openmp -... -=== configuring in libasprintf -... -configure: WARNING: unrecognized options: --disable-csharp, --disable-java, --with-included-libcroco, --without-git, --with-xz, --without-included-gettext, --without-emacs, --disable-openmp -... -configure: WARNING: unrecognized options: --disable-csharp, --disable-java, --with-included-libcroco, --without-git, --with-xz, --without-included-gettext, --without-emacs, --disable-openmp -configure: WARNING: unrecognized options: --with-included-libcroco, --without-git, --with-xz, --without-emacs, --disable-openmp -... -=== configuring in gettext-tools -... -=== configuring in examples -... -configure: WARNING: unrecognized options: --disable-csharp, --disable-java, --with-included-libcroco, --without-git, --with-xz, --without-included-gettext, --without-emacs, --disable-openmp -... -configure: WARNING: unrecognized options: --disable-csharp, --disable-java, --with-included-libcroco, --without-git, --with-xz, --without-included-gettext, --without-emacs, --disable-openmp - -Each of the subdirectories flags several options as unrecognized, but in -summary, each of the given options is used in at least one subdirectory, -which in this case is gettext-tools. - -# begin expected output -good: option --with-included-libcroco is known in 2 of 5 configure scripts -good: option --without-git is known in 2 of 5 configure scripts -good: option --with-xz is known in 2 of 5 configure scripts -good: option --without-emacs is known in 2 of 5 configure scripts -good: option --disable-openmp is known in 2 of 5 configure scripts -good: option --disable-csharp is known in 3 of 5 configure scripts -good: option --disable-java is known in 3 of 5 configure scripts -good: option --without-included-gettext is known in 3 of 5 configure scripts -# end expected output diff --git a/regress/infra-unittests/gnu-configure-strict.sh b/regress/infra-unittests/gnu-configure-strict.sh new file mode 100644 index 00000000000..746856a162a --- /dev/null +++ b/regress/infra-unittests/gnu-configure-strict.sh @@ -0,0 +1,399 @@ +#! /bin/sh +# $NetBSD: gnu-configure-strict.sh,v 1.1 2020/05/21 13:42:10 rillig Exp $ +# +# Tests for GNU_CONFIGURE_STRICT handling in mk/configure/gnu-configure.mk. +# + +set -eu + +. './test.subr' + +test_case_set_up() { + create_file 'setup.mk' <<-EOF + ECHO= echo + FIND= find + GREP= grep + SED= sed + SORT= sort + TR= tr + + RUN= @set -eu; # be extra strict + ERROR_MSG= echo 'error:' + + GNU_CONFIGURE_PREFIX= unused-GNU_CONFIGURE_PREFIX + PREFIX= unused-PREFIX + OPSYS= NetBSD + WRKDIR= $PWD + WRKSRC= $PWD + EOF +} + + +if test_case_begin 'single configure'; then + + create_file 'testcase.mk' <<-EOF + GNU_CONFIGURE_STRICT= yes + CONFIGURE_DIRS= . + CONFIGURE_ARGS= --enable-known + CONFIGURE_ARGS+= --disable-known + CONFIGURE_ARGS+= --with-known + CONFIGURE_ARGS+= --without-known + + .include "setup.mk" + .include "mk/configure/gnu-configure.mk" + EOF + create_file 'configure' <<-EOF + enable_known + with_known + EOF + + run_bmake 'testcase.mk' '_check-unknown-configure-options' \ + 1> "$tmpdir/output" 2>&1 \ + && exitcode=0 || exitcode=$? + + assert_that "$tmpdir/output" --file-is-empty + + test_case_end +fi + + +if test_case_begin 'neither --enable nor --with given'; then + + # Make sure that there is no shell syntax error in the for loop. + # + # This test also covers the case where the configure script has + # some options that are not mentioned in CONFIGURE_ARGS. + + create_file 'testcase.mk' <<-EOF + GNU_CONFIGURE_STRICT= yes + CONFIGURE_DIRS= . + + .include "setup.mk" + .include "mk/configure/gnu-configure.mk" + EOF + create_file 'configure' <<-EOF + enable_known + with_known + EOF + + run_bmake 'testcase.mk' '_check-unknown-configure-options' \ + 1> "$tmpdir/output" 2>&1 \ + && exitcode=0 || exitcode=$? + + assert_that "$tmpdir/output" --file-is-empty + + test_case_end +fi + + +if test_case_begin 'some unknown options'; then + + create_file 'testcase.mk' <<-EOF + GNU_CONFIGURE_STRICT= yes + CONFIGURE_DIRS= . + + CONFIGURE_ARGS= --enable-unknown-1 + CONFIGURE_ARGS+= --disable-unknown-2 + CONFIGURE_ARGS+= --with-unknown-3 + CONFIGURE_ARGS+= --without-unknown-4 + + .include "setup.mk" + .include "mk/configure/gnu-configure.mk" + EOF + create_file 'configure' <<-EOF + enable_known + with_known + EOF + + run_bmake 'testcase.mk' '_check-unknown-configure-options' \ + 1> "$tmpdir/output" 2>&1 \ + && exitcode=0 || exitcode=$? + + assert_that "$exitcode" --equals '1' + assert_that "$tmpdir/output" --file-is-lines \ + 'error: [gnu-configure.mk] option --enable-unknown-1 not found in ./configure' \ + 'error: [gnu-configure.mk] option --disable-unknown-2 not found in ./configure' \ + 'error: [gnu-configure.mk] option --with-unknown-3 not found in ./configure' \ + 'error: [gnu-configure.mk] option --without-unknown-4 not found in ./configure' \ + '*** Error code 1' \ + '' \ + 'Stop.' \ + "$make: stopped in $PWD" + + test_case_end +fi + + +if test_case_begin 'unknown options in multiple configures'; then + + create_file 'testcase.mk' <<-EOF + GNU_CONFIGURE_STRICT= yes + CONFIGURE_DIRS= . + + CONFIGURE_ARGS= --enable-main + CONFIGURE_ARGS+= --with-main + CONFIGURE_ARGS+= --enable-sub1 + CONFIGURE_ARGS+= --with-sub1 + CONFIGURE_ARGS+= --enable-sub2 + CONFIGURE_ARGS+= --with-sub2 + + .include "setup.mk" + .include "mk/configure/gnu-configure.mk" + EOF + create_file 'configure' <<-EOF + enable_main + with_main + EOF + create_file 'subdir1/configure' <<-EOF + enable_sub1 + EOF + create_file 'subdir2/configure' <<-EOF + with_sub2 + EOF + + run_bmake 'testcase.mk' '_check-unknown-configure-options' \ + 1> "$tmpdir/output" 2>&1 \ + && exitcode=0 || exitcode=$? + + assert_that "$exitcode" --equals '1' + assert_that "$tmpdir/output" --file-is-lines \ + 'error: [gnu-configure.mk] option --enable-sub2 not found in ./configure ./subdir1/configure ./subdir2/configure' \ + 'error: [gnu-configure.mk] option --with-sub1 not found in ./configure ./subdir1/configure ./subdir2/configure' \ + '*** Error code 1' \ + '' \ + 'Stop.' \ + "$make: stopped in $PWD" + + test_case_end +fi + + +if test_case_begin 'realistic example from gettext-tools-0.20.2 as of 2020-05-21'; then + + # Each of the subdirectories flags several options as unrecognized, + # but in summary, each of the given options is used in at least one + # subdirectory, which in this case is gettext-tools. + + create_file './configure' <<-EOF + enable_option_checking + enable_silent_rules + enable_dependency_tracking + enable_java + enable_csharp + enable_largefile + enable_threads + enable_shared + enable_static + with_pic + enable_fast_install + with_aix_soname + with_gnu_ld + with_sysroot + enable_libtool_lock + enable_nls + enable_rpath + with_libiconv_prefix + enable_c__ + with_included_gettext + with_libintl_prefix + enable_cross_guesses + enable_relocatable + enable_libasprintf + enable_curses + with_libncurses_prefix + with_libtermcap_prefix + with_libxcurses_prefix + with_libcurses_prefix + enable_namespacing + with_libtextstyle_prefix + enable_openmp + enable_acl + with_included_libunistring + with_libunistring_prefix + with_included_libxml + with_libxml2_prefix + with_included_regex + with_emacs + with_lispdir + with_git + with_cvs + with_bzip2 + with_xz + EOF + create_file './gettext-runtime/configure' <<-EOF + enable_option_checking + enable_silent_rules + enable_dependency_tracking + enable_java + enable_csharp + enable_largefile + enable_threads + enable_shared + enable_static + with_pic + enable_fast_install + with_aix_soname + with_gnu_ld + with_sysroot + enable_libtool_lock + enable_nls + enable_rpath + with_libiconv_prefix + enable_c__ + with_included_gettext + with_libintl_prefix + enable_cross_guesses + enable_relocatable + enable_libasprintf + EOF + create_file './gettext-runtime/libasprintf/configure' <<-EOF + enable_option_checking + enable_silent_rules + enable_dependency_tracking + enable_shared + enable_static + with_pic + enable_fast_install + with_aix_soname + with_gnu_ld + with_sysroot + enable_libtool_lock + enable_cross_guesses + EOF + create_file './gettext-tools/configure' <<-EOF + enable_option_checking + enable_silent_rules + enable_dependency_tracking + enable_java + enable_csharp + enable_largefile + enable_threads + enable_shared + enable_static + with_pic + enable_fast_install + with_aix_soname + with_gnu_ld + with_sysroot + enable_libtool_lock + enable_nls + enable_rpath + with_libiconv_prefix + enable_c__ + with_included_gettext + with_libintl_prefix + with_installed_libtextstyle + with_libtextstyle_prefix + with_installed_csharp_dll + enable_openmp + enable_cross_guesses + enable_acl + with_included_libunistring + with_libunistring_prefix + with_included_libxml + with_libxml2_prefix + enable_relocatable + with_included_regex + with_emacs + with_lispdir + with_git + with_cvs + with_bzip2 + with_xz + EOF + create_file './gettext-tools/examples/configure' <<-EOF + enable_option_checking + enable_silent_rules + enable_nls + EOF + create_file './libtextstyle/configure' <<-EOF + enable_option_checking + enable_silent_rules + enable_dependency_tracking + enable_largefile + enable_shared + enable_static + with_pic + enable_fast_install + with_aix_soname + with_gnu_ld + with_sysroot + enable_libtool_lock + enable_cross_guesses + enable_rpath + with_libiconv_prefix + enable_curses + with_libncurses_prefix + with_libtermcap_prefix + with_libxcurses_prefix + with_libcurses_prefix + enable_namespacing + EOF + + create_file 'testcase.mk' <<-EOF + GNU_CONFIGURE_STRICT= yes + CONFIGURE_DIRS= . + CONFIGURE_ARGS+= --disable-csharp + CONFIGURE_ARGS+= --disable-java + CONFIGURE_ARGS+= --with-included-libcroco + CONFIGURE_ARGS+= --without-git + CONFIGURE_ARGS+= --with-xz + CONFIGURE_ARGS+= --without-included-gettext + CONFIGURE_ARGS+= --without-emacs + CONFIGURE_ARGS+= --disable-openmp + CONFIGURE_ARGS+= --prefix=/home/pbulk/pkg + CONFIGURE_ARGS+= --build=x86_64--netbsd + CONFIGURE_ARGS+= --host=x86_64--netbsd + CONFIGURE_ARGS+= --infodir=/home/pbulk/pkg/info + CONFIGURE_ARGS+= --mandir=/home/pbulk/pkg/man + + .include "setup.mk" + #RUN=set -eux; + .include "mk/configure/gnu-configure.mk" + EOF + + run_bmake 'testcase.mk' '_check-unknown-configure-options' \ + 1> "$tmpdir/output" 2>&1 \ + && exitcode=0 || exitcode=$? + + # There is one option that is unknown in all configure scripts. + # + # This was already reported by the implementation before May + # 2020. That check was expensive to run though, therefore it + # had to be run manually. + # + # In May 2019, when GNU_CONFIGURE_STRICT=no was added to the + # package, the check reported: "good: all 8 options are used + # somewhere". With the update to 0.20.2, the option had been + # removed but the check was never run again. This made the + # check pretty useless since detecting outdated definitions was + # its primary purpose. + # + # In May 2020, if the old check had been run, it reported: + # "option --with-included-libcroco is unknown in all 6 configure + # scripts". + # + # The May 2020 implementation of this check does not require + # packages with multiple configure scripts to set this variable, + # which immediately flags these outdated definitions instead of + # hiding them just because it had worked some day in the past. + # Furthermore, it is very cheap to run since it statically + # analyzes the configure scripts instead of running them. + # + # This approach also has its drawbacks though. It does not + # detect cases in which only some of the configure scripts are + # actually used for a build but the unknown option is defined in + # one of the unused configure scripts. This case happens less + # often than a regular package update, therefore it is + # acceptable. + + assert_that "$exitcode" --equals '1' + assert_that "$tmpdir/output" --file-is-lines \ + 'error: [gnu-configure.mk] option --with-included-libcroco not found in ./configure ./gettext-runtime/configure ./gettext-runtime/libasprintf/configure ./gettext-tools/configure ./gettext-tools/examples/configure ./libtextstyle/configure' \ + '*** Error code 1' \ + '' \ + 'Stop.' \ + "$make: stopped in $PWD" + + test_case_end +fi |