summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrillig <rillig@pkgsrc.org>2020-05-21 13:42:10 +0000
committerrillig <rillig@pkgsrc.org>2020-05-21 13:42:10 +0000
commit40e0a199cd77330a5d7edc0ef61d38b50887d0e2 (patch)
treef46a8390e10ad3f1b0cb56eec9d5e90a9b4588c8
parent92418464350826d33bffeb80a53ba30fbd83b4b7 (diff)
downloadpkgsrc-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.awk83
-rw-r--r--mk/configure/gnu-configure.mk54
-rw-r--r--regress/gnu-configure-strict/spec47
-rw-r--r--regress/gnu-configure-strict/t-gettext-tools.test35
-rw-r--r--regress/gnu-configure-strict/t-simple-unrecognized.test12
-rw-r--r--regress/gnu-configure-strict/t-subdirs-ok.test20
-rw-r--r--regress/gnu-configure-strict/t-subdirs-only-in-main.test20
-rw-r--r--regress/gnu-configure-strict/t-subdirs-unrecognized.test21
-rw-r--r--regress/gnu-configure-strict/t-verbose.test41
-rw-r--r--regress/infra-unittests/gnu-configure-strict.sh399
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