11dbf836d6
Seen in cross/arm-none-eabi-gdb.
511 lines
13 KiB
Bash
511 lines
13 KiB
Bash
#! /bin/sh
|
|
# $NetBSD: gnu-configure-strict.sh,v 1.5 2020/05/23 12:11:33 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
|
|
|
|
CONFIGURE_SCRIPT?= ./configure
|
|
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"
|
|
.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
|
|
|
|
|
|
if test_case_begin 'configure script without enable_http variable'; then
|
|
|
|
# textproc/opensp as of 2020-05-22 has a configure script
|
|
# generated by Autoconf 2.59. That configure script recognizes
|
|
# --enable-http but does not have a corresponding variable
|
|
# definition in a line of their own.
|
|
#
|
|
# The word --enable-http appears twice in that file. Once in the
|
|
# --help text, and once in a shell comment saying "Check whether
|
|
# --enable-http or --disable-http was given". The shell comment
|
|
# is too unreliable, and the help text only contains either enable
|
|
# or disable, but not both. Therefore the simplest solution is to
|
|
# scan for the common pattern ${enable_http+set}.
|
|
|
|
# In lang/mono4, the option name "libgc" creatively differs from
|
|
# the name "gc" that is mentioned in the help text:
|
|
#
|
|
# AC_ARG_WITH(libgc,
|
|
# [ --with-gc=...],
|
|
# [libgc=$with_gc],
|
|
# [libgc=$libgc_default]
|
|
# )
|
|
#
|
|
# This way, even though --with-gc is documented in the help,
|
|
# specifying it triggers the "unrecognized options: --with-gc"
|
|
# warning 3 times, once for each configure script.
|
|
|
|
create_file 'configure' <<-EOF
|
|
if test "\${enable_http+set}" = set; then
|
|
:
|
|
fi
|
|
if test "\${enable_nls+set}" = set; then
|
|
:
|
|
fi
|
|
EOF
|
|
create_file 'testcase.mk' <<-EOF
|
|
GNU_CONFIGURE_STRICT= yes
|
|
CONFIGURE_DIRS= .
|
|
CONFIGURE_ARGS+= --enable-http
|
|
CONFIGURE_ARGS+= --enable-nls
|
|
|
|
.include "setup.mk"
|
|
.include "mk/configure/gnu-configure.mk"
|
|
EOF
|
|
|
|
|
|
run_bmake 'testcase.mk' '_check-unknown-configure-options' \
|
|
1> "$tmpdir/output" 2>&1 \
|
|
&& exitcode=0 || exitcode=$?
|
|
|
|
assert_that "$exitcode" --equals '0'
|
|
assert_that "$tmpdir/output" --file-is-empty
|
|
|
|
test_case_end
|
|
fi
|
|
|
|
|
|
if test_case_begin 'custom CONFIGURE_SCRIPT in relative directory'; then
|
|
|
|
create_file 'pkgname-1.0/configure.gnu' <<-EOF
|
|
if test "\${enable_option+set}" = set; then :; fi
|
|
EOF
|
|
mkdir 'build'
|
|
create_file 'testcase.mk' <<-EOF
|
|
GNU_CONFIGURE_STRICT= yes
|
|
CONFIGURE_DIRS= build
|
|
CONFIGURE_SCRIPT= ../pkgname-1.0/configure.gnu
|
|
CONFIGURE_ARGS= --enable-option
|
|
|
|
.include "setup.mk"
|
|
.include "mk/configure/gnu-configure.mk"
|
|
EOF
|
|
|
|
run_bmake 'testcase.mk' '_check-unknown-configure-options' \
|
|
1> "$tmpdir/output" 2>&1 \
|
|
&& exitcode=0 || exitcode=$?
|
|
|
|
assert_that "$exitcode" --equals '0'
|
|
assert_that "$tmpdir/output" --file-is-empty
|
|
|
|
test_case_end
|
|
fi
|
|
|
|
|
|
if test_case_begin 'custom CONFIGURE_SCRIPT in absolute directory'; then
|
|
|
|
create_file 'pkgname-1.0/configure.gnu' <<-EOF
|
|
if test "\${enable_option+set}" = set; then :; fi
|
|
EOF
|
|
mkdir 'build'
|
|
create_file 'testcase.mk' <<-EOF
|
|
GNU_CONFIGURE_STRICT= yes
|
|
CONFIGURE_DIRS= build
|
|
CONFIGURE_SCRIPT= \${WRKDIR}/pkgname-1.0/configure.gnu
|
|
CONFIGURE_ARGS= --enable-option
|
|
|
|
.include "setup.mk"
|
|
.include "mk/configure/gnu-configure.mk"
|
|
EOF
|
|
|
|
run_bmake 'testcase.mk' '_check-unknown-configure-options' \
|
|
1> "$tmpdir/output" 2>&1 \
|
|
&& exitcode=0 || exitcode=$?
|
|
|
|
assert_that "$exitcode" --equals '0'
|
|
assert_that "$tmpdir/output" --file-is-empty
|
|
|
|
test_case_end
|
|
fi
|