13aa99676SStefan Eßer#! /bin/sh 23aa99676SStefan Eßer# 33aa99676SStefan Eßer# SPDX-License-Identifier: BSD-2-Clause 43aa99676SStefan Eßer# 510328f8bSStefan Eßer# Copyright (c) 2018-2021 Gavin D. Howard and contributors. 63aa99676SStefan Eßer# 73aa99676SStefan Eßer# Redistribution and use in source and binary forms, with or without 83aa99676SStefan Eßer# modification, are permitted provided that the following conditions are met: 93aa99676SStefan Eßer# 103aa99676SStefan Eßer# * Redistributions of source code must retain the above copyright notice, this 113aa99676SStefan Eßer# list of conditions and the following disclaimer. 123aa99676SStefan Eßer# 133aa99676SStefan Eßer# * Redistributions in binary form must reproduce the above copyright notice, 143aa99676SStefan Eßer# this list of conditions and the following disclaimer in the documentation 153aa99676SStefan Eßer# and/or other materials provided with the distribution. 163aa99676SStefan Eßer# 173aa99676SStefan Eßer# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 183aa99676SStefan Eßer# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 193aa99676SStefan Eßer# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 203aa99676SStefan Eßer# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 213aa99676SStefan Eßer# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 223aa99676SStefan Eßer# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 233aa99676SStefan Eßer# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 243aa99676SStefan Eßer# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 253aa99676SStefan Eßer# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 263aa99676SStefan Eßer# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 273aa99676SStefan Eßer# POSSIBILITY OF SUCH DAMAGE. 283aa99676SStefan Eßer# 293aa99676SStefan Eßer 303aa99676SStefan Eßerscript="$0" 313aa99676SStefan Eßerscriptdir=$(dirname "$script") 323aa99676SStefan Eßerscript=$(basename "$script") 333aa99676SStefan Eßer 3410041e99SStefan Eßerbuilddir=$(pwd) 353aa99676SStefan Eßer 3610041e99SStefan Eßer. "$scriptdir/scripts/functions.sh" 3710328f8bSStefan Eßer 3844d4804dSStefan Eßer# Simply prints the help message and quits based on the argument. 39*00698711SStefan Eßer# @param msg The help message to print. 403aa99676SStefan Eßerusage() { 413aa99676SStefan Eßer 423aa99676SStefan Eßer if [ $# -gt 0 ]; then 433aa99676SStefan Eßer 443aa99676SStefan Eßer _usage_val=1 453aa99676SStefan Eßer 463aa99676SStefan Eßer printf "%s\n\n" "$1" 473aa99676SStefan Eßer 483aa99676SStefan Eßer else 493aa99676SStefan Eßer _usage_val=0 503aa99676SStefan Eßer fi 513aa99676SStefan Eßer 5250696a6eSStefan Eßer printf 'usage:\n' 5350696a6eSStefan Eßer printf ' %s -h\n' "$script" 543aa99676SStefan Eßer printf ' %s --help\n' "$script" 5510041e99SStefan Eßer printf ' %s [-a|-bD|-dB|-c] [-CEfgGHlmMNtTvz] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\\\n' "$script" 5610041e99SStefan Eßer printf ' [-s SETTING] [-S SETTING]\n' 573aa99676SStefan Eßer printf ' %s \\\n' "$script" 5850696a6eSStefan Eßer printf ' [--library|--bc-only --disable-dc|--dc-only --disable-bc|--coverage] \\\n' 5950696a6eSStefan Eßer printf ' [--force --debug --disable-extra-math --disable-generated-tests] \\\n' 6044d4804dSStefan Eßer printf ' [--disable-history --disable-man-pages --disable-nls --disable-strip] \\\n' 6144d4804dSStefan Eßer printf ' [--install-all-locales] [--opt=OPT_LEVEL] \\\n' 6244d4804dSStefan Eßer printf ' [--karatsuba-len=KARATSUBA_LEN] \\\n' 6310041e99SStefan Eßer printf ' [--set-default-on=SETTING] [--set-default-off=SETTING] \\\n' 643aa99676SStefan Eßer printf ' [--prefix=PREFIX] [--bindir=BINDIR] [--datarootdir=DATAROOTDIR] \\\n' 653aa99676SStefan Eßer printf ' [--datadir=DATADIR] [--mandir=MANDIR] [--man1dir=MAN1DIR] \\\n' 663aa99676SStefan Eßer printf '\n' 6750696a6eSStefan Eßer printf ' -a, --library\n' 6844d4804dSStefan Eßer printf ' Build the libbcl instead of the programs. This is meant to be used with\n' 6950696a6eSStefan Eßer printf ' Other software like programming languages that want to make use of the\n' 7050696a6eSStefan Eßer printf ' parsing and math capabilities. This option will install headers using\n' 7150696a6eSStefan Eßer printf ' `make install`.\n' 723aa99676SStefan Eßer printf ' -b, --bc-only\n' 7350696a6eSStefan Eßer printf ' Build bc only. It is an error if "-d", "--dc-only", "-B", or\n' 7450696a6eSStefan Eßer printf ' "--disable-bc" are specified too.\n' 753aa99676SStefan Eßer printf ' -B, --disable-bc\n' 763aa99676SStefan Eßer printf ' Disable bc. It is an error if "-b", "--bc-only", "-D", or "--disable-dc"\n' 773aa99676SStefan Eßer printf ' are specified too.\n' 783aa99676SStefan Eßer printf ' -c, --coverage\n' 7944d4804dSStefan Eßer printf ' Generate test coverage code. Requires gcov and gcovr.\n' 803aa99676SStefan Eßer printf ' It is an error if either "-b" ("-D") or "-d" ("-B") is specified.\n' 813aa99676SStefan Eßer printf ' Requires a compiler that use gcc-compatible coverage options\n' 8210328f8bSStefan Eßer printf ' -C, --disable-clean\n' 8310328f8bSStefan Eßer printf ' Disable the clean that configure.sh does before configure.\n' 843aa99676SStefan Eßer printf ' -d, --dc-only\n' 8550696a6eSStefan Eßer printf ' Build dc only. It is an error if "-b", "--bc-only", "-D", or\n' 8650696a6eSStefan Eßer printf ' "--disable-dc" are specified too.\n' 873aa99676SStefan Eßer printf ' -D, --disable-dc\n' 8850696a6eSStefan Eßer printf ' Disable dc. It is an error if "-d", "--dc-only", "-B", or "--disable-bc"\n' 893aa99676SStefan Eßer printf ' are specified too.\n' 903aa99676SStefan Eßer printf ' -E, --disable-extra-math\n' 913aa99676SStefan Eßer printf ' Disable extra math. This includes: "$" operator (truncate to integer),\n' 923aa99676SStefan Eßer printf ' "@" operator (set number of decimal places), and r(x, p) (rounding\n' 933aa99676SStefan Eßer printf ' function). Additionally, this option disables the extra printing\n' 943aa99676SStefan Eßer printf ' functions in the math library.\n' 953aa99676SStefan Eßer printf ' -f, --force\n' 963aa99676SStefan Eßer printf ' Force use of all enabled options, even if they do not work. This\n' 973aa99676SStefan Eßer printf ' option is to allow the maintainer a way to test that certain options\n' 98*00698711SStefan Eßer printf ' are not failing invisibly. (Development only.)\n' 993aa99676SStefan Eßer printf ' -g, --debug\n' 1003aa99676SStefan Eßer printf ' Build in debug mode. Adds the "-g" flag, and if there are no\n' 1013aa99676SStefan Eßer printf ' other CFLAGS, and "-O" was not given, this also adds the "-O0"\n' 1023aa99676SStefan Eßer printf ' flag. If this flag is *not* given, "-DNDEBUG" is added to CPPFLAGS\n' 1033aa99676SStefan Eßer printf ' and a strip flag is added to the link stage.\n' 1043aa99676SStefan Eßer printf ' -G, --disable-generated-tests\n' 1053aa99676SStefan Eßer printf ' Disable generating tests. This is for platforms that do not have a\n' 1063aa99676SStefan Eßer printf ' GNU bc-compatible bc to generate tests.\n' 1073aa99676SStefan Eßer printf ' -h, --help\n' 1083aa99676SStefan Eßer printf ' Print this help message and exit.\n' 1093aa99676SStefan Eßer printf ' -H, --disable-history\n' 1103aa99676SStefan Eßer printf ' Disable history.\n' 1113aa99676SStefan Eßer printf ' -k KARATSUBA_LEN, --karatsuba-len KARATSUBA_LEN\n' 1123aa99676SStefan Eßer printf ' Set the karatsuba length to KARATSUBA_LEN (default is 64).\n' 1133aa99676SStefan Eßer printf ' It is an error if KARATSUBA_LEN is not a number or is less than 16.\n' 114cf7becd2SStefan Eßer printf ' -l, --install-all-locales\n' 115cf7becd2SStefan Eßer printf ' Installs all locales, regardless of how many are on the system. This\n' 116cf7becd2SStefan Eßer printf ' option is useful for package maintainers who want to make sure that\n' 117cf7becd2SStefan Eßer printf ' a package contains all of the locales that end users might need.\n' 11810328f8bSStefan Eßer printf ' -m, --enable-memcheck\n' 11910328f8bSStefan Eßer printf ' Enable memcheck mode, to ensure no memory leaks. For development only.\n' 1203aa99676SStefan Eßer printf ' -M, --disable-man-pages\n' 1213aa99676SStefan Eßer printf ' Disable installing manpages.\n' 1223aa99676SStefan Eßer printf ' -N, --disable-nls\n' 1233aa99676SStefan Eßer printf ' Disable POSIX locale (NLS) support.\n' 1243aa99676SStefan Eßer printf ' -O OPT_LEVEL, --opt OPT_LEVEL\n' 1253aa99676SStefan Eßer printf ' Set the optimization level. This can also be included in the CFLAGS,\n' 1263aa99676SStefan Eßer printf ' but it is provided, so maintainers can build optimized debug builds.\n' 1273aa99676SStefan Eßer printf ' This is passed through to the compiler, so it must be supported.\n' 12844d4804dSStefan Eßer printf ' -s SETTING, --set-default-on SETTING\n' 12944d4804dSStefan Eßer printf ' Set the default named by SETTING to on. See below for possible values\n' 13044d4804dSStefan Eßer printf ' for SETTING. For multiple instances of the -s or -S for the the same\n' 13144d4804dSStefan Eßer printf ' setting, the last one is used.\n' 13244d4804dSStefan Eßer printf ' -S SETTING, --set-default-off SETTING\n' 13344d4804dSStefan Eßer printf ' Set the default named by SETTING to off. See below for possible values\n' 13444d4804dSStefan Eßer printf ' for SETTING. For multiple instances of the -s or -S for the the same\n' 13544d4804dSStefan Eßer printf ' setting, the last one is used.\n' 13610328f8bSStefan Eßer printf ' -t, --enable-test-timing\n' 13710328f8bSStefan Eßer printf ' Enable the timing of tests. This is for development only.\n' 1383aa99676SStefan Eßer printf ' -T, --disable-strip\n' 1393aa99676SStefan Eßer printf ' Disable stripping symbols from the compiled binary or binaries.\n' 1403aa99676SStefan Eßer printf ' Stripping symbols only happens when debug mode is off.\n' 14110328f8bSStefan Eßer printf ' -v, --enable-valgrind\n' 14210328f8bSStefan Eßer printf ' Enable a build appropriate for valgrind. For development only.\n' 14310328f8bSStefan Eßer printf ' -z, --enable-fuzz-mode\n' 14410328f8bSStefan Eßer printf ' Enable fuzzing mode. THIS IS FOR DEVELOPMENT ONLY.\n' 1453aa99676SStefan Eßer printf ' --prefix PREFIX\n' 1463aa99676SStefan Eßer printf ' The prefix to install to. Overrides "$PREFIX" if it exists.\n' 1473aa99676SStefan Eßer printf ' If PREFIX is "/usr", install path will be "/usr/bin".\n' 1483aa99676SStefan Eßer printf ' Default is "/usr/local".\n' 1493aa99676SStefan Eßer printf ' --bindir BINDIR\n' 15050696a6eSStefan Eßer printf ' The directory to install binaries in. Overrides "$BINDIR" if it exists.\n' 1513aa99676SStefan Eßer printf ' Default is "$PREFIX/bin".\n' 15250696a6eSStefan Eßer printf ' --includedir INCLUDEDIR\n' 15350696a6eSStefan Eßer printf ' The directory to install headers in. Overrides "$INCLUDEDIR" if it\n' 15450696a6eSStefan Eßer printf ' exists. Default is "$PREFIX/include".\n' 15550696a6eSStefan Eßer printf ' --libdir LIBDIR\n' 15650696a6eSStefan Eßer printf ' The directory to install libraries in. Overrides "$LIBDIR" if it exists.\n' 15750696a6eSStefan Eßer printf ' Default is "$PREFIX/lib".\n' 1583aa99676SStefan Eßer printf ' --datarootdir DATAROOTDIR\n' 1593aa99676SStefan Eßer printf ' The root location for data files. Overrides "$DATAROOTDIR" if it exists.\n' 1603aa99676SStefan Eßer printf ' Default is "$PREFIX/share".\n' 1613aa99676SStefan Eßer printf ' --datadir DATADIR\n' 1623aa99676SStefan Eßer printf ' The location for data files. Overrides "$DATADIR" if it exists.\n' 1633aa99676SStefan Eßer printf ' Default is "$DATAROOTDIR".\n' 1643aa99676SStefan Eßer printf ' --mandir MANDIR\n' 1653aa99676SStefan Eßer printf ' The location to install manpages to. Overrides "$MANDIR" if it exists.\n' 1663aa99676SStefan Eßer printf ' Default is "$DATADIR/man".\n' 1673aa99676SStefan Eßer printf ' --man1dir MAN1DIR\n' 1683aa99676SStefan Eßer printf ' The location to install Section 1 manpages to. Overrides "$MAN1DIR" if\n' 1693aa99676SStefan Eßer printf ' it exists. Default is "$MANDIR/man1".\n' 17050696a6eSStefan Eßer printf ' --man3dir MAN3DIR\n' 17150696a6eSStefan Eßer printf ' The location to install Section 3 manpages to. Overrides "$MAN3DIR" if\n' 17250696a6eSStefan Eßer printf ' it exists. Default is "$MANDIR/man3".\n' 1733aa99676SStefan Eßer printf '\n' 1743aa99676SStefan Eßer printf 'In addition, the following environment variables are used:\n' 1753aa99676SStefan Eßer printf '\n' 1763aa99676SStefan Eßer printf ' CC C compiler. Must be compatible with POSIX c99. If there is a\n' 1773aa99676SStefan Eßer printf ' space in the basename of the compiler, the items after the\n' 1783aa99676SStefan Eßer printf ' first space are assumed to be compiler flags, and in that case,\n' 1793aa99676SStefan Eßer printf ' the flags are automatically moved into CFLAGS. Default is\n' 1803aa99676SStefan Eßer printf ' "c99".\n' 1813aa99676SStefan Eßer printf ' HOSTCC Host C compiler. Must be compatible with POSIX c99. If there is\n' 1823aa99676SStefan Eßer printf ' a space in the basename of the compiler, the items after the\n' 1833aa99676SStefan Eßer printf ' first space are assumed to be compiler flags, and in the case,\n' 1843aa99676SStefan Eßer printf ' the flags are automatically moved into HOSTCFLAGS. Default is\n' 1853aa99676SStefan Eßer printf ' "$CC".\n' 1863aa99676SStefan Eßer printf ' HOST_CC Same as HOSTCC. If HOSTCC also exists, it is used.\n' 1873aa99676SStefan Eßer printf ' CFLAGS C compiler flags.\n' 1883aa99676SStefan Eßer printf ' HOSTCFLAGS CFLAGS for HOSTCC. Default is "$CFLAGS".\n' 1893aa99676SStefan Eßer printf ' HOST_CFLAGS Same as HOST_CFLAGS. If HOST_CFLAGS also exists, it is used.\n' 1903aa99676SStefan Eßer printf ' CPPFLAGS C preprocessor flags. Default is "".\n' 1913aa99676SStefan Eßer printf ' LDFLAGS Linker flags. Default is "".\n' 1923aa99676SStefan Eßer printf ' PREFIX The prefix to install to. Default is "/usr/local".\n' 1933aa99676SStefan Eßer printf ' If PREFIX is "/usr", install path will be "/usr/bin".\n' 19450696a6eSStefan Eßer printf ' BINDIR The directory to install binaries in. Default is "$PREFIX/bin".\n' 19550696a6eSStefan Eßer printf ' INCLUDEDIR The directory to install header files in. Default is\n' 19650696a6eSStefan Eßer printf ' "$PREFIX/include".\n' 19750696a6eSStefan Eßer printf ' LIBDIR The directory to install libraries in. Default is\n' 19850696a6eSStefan Eßer printf ' "$PREFIX/lib".\n' 1993aa99676SStefan Eßer printf ' DATAROOTDIR The root location for data files. Default is "$PREFIX/share".\n' 2003aa99676SStefan Eßer printf ' DATADIR The location for data files. Default is "$DATAROOTDIR".\n' 2013aa99676SStefan Eßer printf ' MANDIR The location to install manpages to. Default is "$DATADIR/man".\n' 2023aa99676SStefan Eßer printf ' MAN1DIR The location to install Section 1 manpages to. Default is\n' 2033aa99676SStefan Eßer printf ' "$MANDIR/man1".\n' 20450696a6eSStefan Eßer printf ' MAN3DIR The location to install Section 3 manpages to. Default is\n' 20550696a6eSStefan Eßer printf ' "$MANDIR/man3".\n' 2063aa99676SStefan Eßer printf ' NLSPATH The location to install locale catalogs to. Must be an absolute\n' 2073aa99676SStefan Eßer printf ' path (or contain one). This is treated the same as the POSIX\n' 2083aa99676SStefan Eßer printf ' definition of $NLSPATH (see POSIX environment variables for\n' 2093aa99676SStefan Eßer printf ' more information). Default is "/usr/share/locale/%%L/%%N".\n' 21010041e99SStefan Eßer printf ' PC_PATH The location to install pkg-config files to. Must be an\n' 21110041e99SStefan Eßer printf ' path or contain one. Default is the first path given by the\n' 21210041e99SStefan Eßer printf ' output of `pkg-config --variable=pc_path pkg-config`.\n' 2133aa99676SStefan Eßer printf ' EXECSUFFIX The suffix to append to the executable names, used to not\n' 2143aa99676SStefan Eßer printf ' interfere with other installed bc executables. Default is "".\n' 2153aa99676SStefan Eßer printf ' EXECPREFIX The prefix to append to the executable names, used to not\n' 2163aa99676SStefan Eßer printf ' interfere with other installed bc executables. Default is "".\n' 2173aa99676SStefan Eßer printf ' DESTDIR For package creation. Default is "". If it is empty when\n' 2183aa99676SStefan Eßer printf ' `%s` is run, it can also be passed to `make install`\n' "$script" 2193aa99676SStefan Eßer printf ' later as an environment variable. If both are specified,\n' 2203aa99676SStefan Eßer printf ' the one given to `%s` takes precedence.\n' "$script" 2213aa99676SStefan Eßer printf ' LONG_BIT The number of bits in a C `long` type. This is mostly for the\n' 2223aa99676SStefan Eßer printf ' embedded space since this `bc` uses `long`s internally for\n' 2233aa99676SStefan Eßer printf ' overflow checking. In C99, a `long` is required to be 32 bits.\n' 2243aa99676SStefan Eßer printf ' For most normal desktop systems, setting this is unnecessary,\n' 2253aa99676SStefan Eßer printf ' except that 32-bit platforms with 64-bit longs may want to set\n' 2263aa99676SStefan Eßer printf ' it to `32`. Default is the default of `LONG_BIT` for the target\n' 2273aa99676SStefan Eßer printf ' platform. Minimum allowed is `32`. It is a build time error if\n' 2283aa99676SStefan Eßer printf ' the specified value of `LONG_BIT` is greater than the default\n' 2293aa99676SStefan Eßer printf ' value of `LONG_BIT` for the target platform.\n' 2303aa99676SStefan Eßer printf ' GEN_HOST Whether to use `gen/strgen.c`, instead of `gen/strgen.sh`, to\n' 2313aa99676SStefan Eßer printf ' produce the C files that contain the help texts as well as the\n' 2323aa99676SStefan Eßer printf ' math libraries. By default, `gen/strgen.c` is used, compiled by\n' 2333aa99676SStefan Eßer printf ' "$HOSTCC" and run on the host machine. Using `gen/strgen.sh`\n' 2343aa99676SStefan Eßer printf ' removes the need to compile and run an executable on the host\n' 2353aa99676SStefan Eßer printf ' machine since `gen/strgen.sh` is a POSIX shell script. However,\n' 2363aa99676SStefan Eßer printf ' `gen/lib2.bc` is perilously close to 4095 characters, the max\n' 2373aa99676SStefan Eßer printf ' supported length of a string literal in C99 (and it could be\n' 2383aa99676SStefan Eßer printf ' added to in the future), and `gen/strgen.sh` generates a string\n' 2393aa99676SStefan Eßer printf ' literal instead of an array, as `gen/strgen.c` does. For most\n' 2403aa99676SStefan Eßer printf ' production-ready compilers, this limit probably is not\n' 2413aa99676SStefan Eßer printf ' enforced, but it could be. Both options are still available for\n' 2423aa99676SStefan Eßer printf ' this reason. If you are sure your compiler does not have the\n' 2433aa99676SStefan Eßer printf ' limit and do not want to compile and run a binary on the host\n' 2443aa99676SStefan Eßer printf ' machine, set this variable to "0". Any other value, or a\n' 2453aa99676SStefan Eßer printf ' non-existent value, will cause the build system to compile and\n' 2463aa99676SStefan Eßer printf ' run `gen/strgen.c`. Default is "".\n' 2473aa99676SStefan Eßer printf ' GEN_EMU Emulator to run string generator code under (leave empty if not\n' 2483aa99676SStefan Eßer printf ' necessary). This is not necessary when using `gen/strgen.sh`.\n' 2493aa99676SStefan Eßer printf ' Default is "".\n' 2503aa99676SStefan Eßer printf '\n' 2513aa99676SStefan Eßer printf 'WARNING: even though `configure.sh` supports both option types, short and\n' 2523aa99676SStefan Eßer printf 'long, it does not support handling both at the same time. Use only one type.\n' 25344d4804dSStefan Eßer printf '\n' 25444d4804dSStefan Eßer printf 'Settings\n' 25544d4804dSStefan Eßer printf '========\n' 25644d4804dSStefan Eßer printf '\n' 25744d4804dSStefan Eßer printf 'bc and dc have some settings that, while they cannot be removed by build time\n' 25844d4804dSStefan Eßer printf 'options, can have their defaults changed at build time by packagers. Users are\n' 25944d4804dSStefan Eßer printf 'also able to change each setting with environment variables.\n' 26044d4804dSStefan Eßer printf '\n' 26144d4804dSStefan Eßer printf 'The following is a table of settings, along with their default values and the\n' 26244d4804dSStefan Eßer printf 'environment variables users can use to change them. (For the defaults, non-zero\n' 26344d4804dSStefan Eßer printf 'means on, and zero means off.)\n' 26444d4804dSStefan Eßer printf '\n' 26544d4804dSStefan Eßer printf '| Setting | Description | Default | Env Variable |\n' 26644d4804dSStefan Eßer printf '| =============== | ==================== | ============ | ==================== |\n' 26744d4804dSStefan Eßer printf '| bc.banner | Whether to display | 0 | BC_BANNER |\n' 26844d4804dSStefan Eßer printf '| | the bc version | | |\n' 26944d4804dSStefan Eßer printf '| | banner when in | | |\n' 27044d4804dSStefan Eßer printf '| | interactive mode. | | |\n' 27144d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 27244d4804dSStefan Eßer printf '| bc.sigint_reset | Whether SIGINT will | 1 | BC_SIGINT_RESET |\n' 27344d4804dSStefan Eßer printf '| | reset bc, instead of | | |\n' 27444d4804dSStefan Eßer printf '| | exiting, when in | | |\n' 27544d4804dSStefan Eßer printf '| | interactive mode. | | |\n' 27644d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 27744d4804dSStefan Eßer printf '| dc.sigint_reset | Whether SIGINT will | 1 | DC_SIGINT_RESET |\n' 27844d4804dSStefan Eßer printf '| | reset dc, instead of | | |\n' 27944d4804dSStefan Eßer printf '| | exiting, when in | | |\n' 28044d4804dSStefan Eßer printf '| | interactive mode. | | |\n' 28144d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 28244d4804dSStefan Eßer printf '| bc.tty_mode | Whether TTY mode for | 1 | BC_TTY_MODE |\n' 28344d4804dSStefan Eßer printf '| | bc should be on when | | |\n' 28444d4804dSStefan Eßer printf '| | available. | | |\n' 28544d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 28644d4804dSStefan Eßer printf '| dc.tty_mode | Whether TTY mode for | 0 | BC_TTY_MODE |\n' 28744d4804dSStefan Eßer printf '| | dc should be on when | | |\n' 28844d4804dSStefan Eßer printf '| | available. | | |\n' 28944d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 29044d4804dSStefan Eßer printf '| bc.prompt | Whether the prompt | $BC_TTY_MODE | BC_PROMPT |\n' 29144d4804dSStefan Eßer printf '| | for bc should be on | | |\n' 29244d4804dSStefan Eßer printf '| | in tty mode. | | |\n' 29344d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 29444d4804dSStefan Eßer printf '| dc.prompt | Whether the prompt | $DC_TTY_MODE | DC_PROMPT |\n' 29544d4804dSStefan Eßer printf '| | for dc should be on | | |\n' 29644d4804dSStefan Eßer printf '| | in tty mode. | | |\n' 29744d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 29810041e99SStefan Eßer printf '| bc.expr_exit | Whether to exit bc | 1 | BC_EXPR_EXIT |\n' 29910041e99SStefan Eßer printf '| | if an expression or | | |\n' 30010041e99SStefan Eßer printf '| | expression file is | | |\n' 30110041e99SStefan Eßer printf '| | given with the -e or | | |\n' 30210041e99SStefan Eßer printf '| | -f options. | | |\n' 30310041e99SStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 30410041e99SStefan Eßer printf '| dc.expr_exit | Whether to exit dc | 1 | DC_EXPR_EXIT |\n' 30510041e99SStefan Eßer printf '| | if an expression or | | |\n' 30610041e99SStefan Eßer printf '| | expression file is | | |\n' 30710041e99SStefan Eßer printf '| | given with the -e or | | |\n' 30810041e99SStefan Eßer printf '| | -f options. | | |\n' 30910041e99SStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 31044d4804dSStefan Eßer printf '\n' 31144d4804dSStefan Eßer printf 'These settings are not meant to be changed on a whim. They are meant to ensure\n' 31244d4804dSStefan Eßer printf 'that this bc and dc will conform to the expectations of the user on each\n' 31344d4804dSStefan Eßer printf 'platform.\n' 3143aa99676SStefan Eßer 3153aa99676SStefan Eßer exit "$_usage_val" 3163aa99676SStefan Eßer} 3173aa99676SStefan Eßer 31844d4804dSStefan Eßer# Replaces a file extension in a filename. This is used mostly to turn filenames 31944d4804dSStefan Eßer# like `src/num.c` into `src/num.o`. In other words, it helps to link targets to 32044d4804dSStefan Eßer# the files they depend on. 32144d4804dSStefan Eßer# 32244d4804dSStefan Eßer# @param file The filename. 32344d4804dSStefan Eßer# @param ext1 The extension to replace. 32444d4804dSStefan Eßer# @param ext2 The new extension. 3253aa99676SStefan Eßerreplace_ext() { 3263aa99676SStefan Eßer 3273aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 3283aa99676SStefan Eßer err_exit "Invalid number of args to $0" 3293aa99676SStefan Eßer fi 3303aa99676SStefan Eßer 3313aa99676SStefan Eßer _replace_ext_file="$1" 3323aa99676SStefan Eßer _replace_ext_ext1="$2" 3333aa99676SStefan Eßer _replace_ext_ext2="$3" 3343aa99676SStefan Eßer 3359a995fe1SStefan Eßer _replace_ext_result="${_replace_ext_file%.$_replace_ext_ext1}.$_replace_ext_ext2" 3363aa99676SStefan Eßer 3373aa99676SStefan Eßer printf '%s\n' "$_replace_ext_result" 3383aa99676SStefan Eßer} 3393aa99676SStefan Eßer 34044d4804dSStefan Eßer# Replaces a file extension in every filename given in a list. The list is just 34144d4804dSStefan Eßer# a space-separated list of words, so filenames are expected to *not* have 34244d4804dSStefan Eßer# spaces in them. See the documentation for `replace_ext()`. 34344d4804dSStefan Eßer# 34444d4804dSStefan Eßer# @param files The list of space-separated filenames to replace extensions for. 34544d4804dSStefan Eßer# @param ext1 The extension to replace. 34644d4804dSStefan Eßer# @param ext2 The new extension. 3473aa99676SStefan Eßerreplace_exts() { 3483aa99676SStefan Eßer 3493aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 3503aa99676SStefan Eßer err_exit "Invalid number of args to $0" 3513aa99676SStefan Eßer fi 3523aa99676SStefan Eßer 3533aa99676SStefan Eßer _replace_exts_files="$1" 3543aa99676SStefan Eßer _replace_exts_ext1="$2" 3553aa99676SStefan Eßer _replace_exts_ext2="$3" 3563aa99676SStefan Eßer 3573aa99676SStefan Eßer for _replace_exts_file in $_replace_exts_files; do 3583aa99676SStefan Eßer _replace_exts_new_name=$(replace_ext "$_replace_exts_file" "$_replace_exts_ext1" "$_replace_exts_ext2") 3593aa99676SStefan Eßer _replace_exts_result="$_replace_exts_result $_replace_exts_new_name" 3603aa99676SStefan Eßer done 3613aa99676SStefan Eßer 3623aa99676SStefan Eßer printf '%s\n' "$_replace_exts_result" 3633aa99676SStefan Eßer} 3643aa99676SStefan Eßer 36544d4804dSStefan Eßer# Finds a placeholder in @a str and replaces it. This is the workhorse of 36644d4804dSStefan Eßer# configure.sh. It's what replaces placeholders in Makefile.in with the data 36744d4804dSStefan Eßer# needed for the chosen build. Below, you will see a lot of calls to this 36844d4804dSStefan Eßer# function. 36944d4804dSStefan Eßer# 37044d4804dSStefan Eßer# Note that needle can never contain an exclamation point. For more information, 37144d4804dSStefan Eßer# see substring_replace() in scripts/functions.sh. 37244d4804dSStefan Eßer# 37344d4804dSStefan Eßer# @param str The string to find and replace placeholders in. 37444d4804dSStefan Eßer# @param needle The placeholder name. 37544d4804dSStefan Eßer# @param replacement The string to use to replace the placeholder. 3763aa99676SStefan Eßerreplace() { 3773aa99676SStefan Eßer 3783aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 3793aa99676SStefan Eßer err_exit "Invalid number of args to $0" 3803aa99676SStefan Eßer fi 3813aa99676SStefan Eßer 3823aa99676SStefan Eßer _replace_str="$1" 3833aa99676SStefan Eßer _replace_needle="$2" 3843aa99676SStefan Eßer _replace_replacement="$3" 3853aa99676SStefan Eßer 3863aa99676SStefan Eßer substring_replace "$_replace_str" "%%$_replace_needle%%" "$_replace_replacement" 3873aa99676SStefan Eßer} 3883aa99676SStefan Eßer 38944d4804dSStefan Eßer# This function finds all the source files that need to be built. If there is 39044d4804dSStefan Eßer# only one argument and it is empty, then all source files are built. Otherwise, 39144d4804dSStefan Eßer# the arguments are all assumed to be source files that should *not* be built. 39210328f8bSStefan Eßerfind_src_files() { 39310328f8bSStefan Eßer 39410041e99SStefan Eßer _find_src_files_args="" 39510041e99SStefan Eßer 39610328f8bSStefan Eßer if [ "$#" -ge 1 ] && [ "$1" != "" ]; then 39710328f8bSStefan Eßer 39810328f8bSStefan Eßer while [ "$#" -ge 1 ]; do 39910328f8bSStefan Eßer _find_src_files_a="${1## }" 40010328f8bSStefan Eßer shift 40110041e99SStefan Eßer _find_src_files_args=$(printf '%s\n%s/src/%s\n' "$_find_src_files_args" "$scriptdir" "${_find_src_files_a}") 40210328f8bSStefan Eßer done 40310328f8bSStefan Eßer 40410328f8bSStefan Eßer fi 40510328f8bSStefan Eßer 40610041e99SStefan Eßer _find_src_files_files=$(find "$scriptdir/src/" -depth -name "*.c" -print) 40710041e99SStefan Eßer 40810041e99SStefan Eßer _find_src_files_result="" 40910041e99SStefan Eßer 41010041e99SStefan Eßer for _find_src_files_f in $_find_src_files_files; do 41110041e99SStefan Eßer 41210041e99SStefan Eßer # If this is true, the file is part of args, and therefore, unneeded. 41310041e99SStefan Eßer if [ "${_find_src_files_args##*$_find_src_files_f}" != "${_find_src_files_args}" ]; then 41410041e99SStefan Eßer continue 41510041e99SStefan Eßer fi 41610041e99SStefan Eßer 41710041e99SStefan Eßer _find_src_files_result=$(printf '%s\n%s\n' "$_find_src_files_result" "$_find_src_files_f") 41810041e99SStefan Eßer 41910041e99SStefan Eßer done 42010041e99SStefan Eßer 42110041e99SStefan Eßer printf '%s\n' "$_find_src_files_result" 42210328f8bSStefan Eßer} 42310328f8bSStefan Eßer 42444d4804dSStefan Eßer# This function generates a list of files to go into the Makefile. It generates 42544d4804dSStefan Eßer# the list of object files, as well as the list of test coverage files. 42644d4804dSStefan Eßer# 42744d4804dSStefan Eßer# @param contents The contents of the Makefile template to put the list of 42844d4804dSStefan Eßer# files into. 42950696a6eSStefan Eßergen_file_list() { 4303aa99676SStefan Eßer 43150696a6eSStefan Eßer if [ "$#" -lt 1 ]; then 4323aa99676SStefan Eßer err_exit "Invalid number of args to $0" 4333aa99676SStefan Eßer fi 4343aa99676SStefan Eßer 43550696a6eSStefan Eßer _gen_file_list_contents="$1" 4363aa99676SStefan Eßer shift 4373aa99676SStefan Eßer 43850696a6eSStefan Eßer if [ "$#" -ge 1 ]; then 43910328f8bSStefan Eßer _gen_file_list_unneeded="$@" 4403aa99676SStefan Eßer else 44110328f8bSStefan Eßer _gen_file_list_unneeded="" 4423aa99676SStefan Eßer fi 4433aa99676SStefan Eßer 44450696a6eSStefan Eßer _gen_file_list_needle_src="SRC" 44550696a6eSStefan Eßer _gen_file_list_needle_obj="OBJ" 44650696a6eSStefan Eßer _gen_file_list_needle_gcda="GCDA" 44750696a6eSStefan Eßer _gen_file_list_needle_gcno="GCNO" 44850696a6eSStefan Eßer 44910328f8bSStefan Eßer _gen_file_list_replacement=$(find_src_files $_gen_file_list_unneeded | tr '\n' ' ') 45050696a6eSStefan Eßer _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ 45150696a6eSStefan Eßer "$_gen_file_list_needle_src" "$_gen_file_list_replacement") 45250696a6eSStefan Eßer 45310041e99SStefan Eßer _gen_file_list_cbases="" 45410041e99SStefan Eßer 45510041e99SStefan Eßer for _gen_file_list_f in $_gen_file_list_replacement; do 45610041e99SStefan Eßer _gen_file_list_b=$(basename "$_gen_file_list_f") 45710041e99SStefan Eßer _gen_file_list_cbases="$_gen_file_list_cbases src/$_gen_file_list_b" 45810041e99SStefan Eßer done 45910041e99SStefan Eßer 46010041e99SStefan Eßer _gen_file_list_replacement=$(replace_exts "$_gen_file_list_cbases" "c" "o") 46150696a6eSStefan Eßer _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ 46250696a6eSStefan Eßer "$_gen_file_list_needle_obj" "$_gen_file_list_replacement") 46350696a6eSStefan Eßer 46450696a6eSStefan Eßer _gen_file_list_replacement=$(replace_exts "$_gen_file_list_replacement" "o" "gcda") 46550696a6eSStefan Eßer _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ 46650696a6eSStefan Eßer "$_gen_file_list_needle_gcda" "$_gen_file_list_replacement") 46750696a6eSStefan Eßer 46850696a6eSStefan Eßer _gen_file_list_replacement=$(replace_exts "$_gen_file_list_replacement" "gcda" "gcno") 46950696a6eSStefan Eßer _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ 47050696a6eSStefan Eßer "$_gen_file_list_needle_gcno" "$_gen_file_list_replacement") 47150696a6eSStefan Eßer 47250696a6eSStefan Eßer printf '%s\n' "$_gen_file_list_contents" 4733aa99676SStefan Eßer} 4743aa99676SStefan Eßer 47544d4804dSStefan Eßer# Generates the proper test targets for each test to have its own target. This 47644d4804dSStefan Eßer# allows `make test` to run in parallel. 47744d4804dSStefan Eßer# 47844d4804dSStefan Eßer# @param name Which calculator to generate tests for. 47944d4804dSStefan Eßer# @param extra_math An integer that, if non-zero, activates extra math tests. 48044d4804dSStefan Eßer# @param time_tests An integer that, if non-zero, tells the test suite to time 48144d4804dSStefan Eßer# the execution of each test. 482d43fa8efSStefan Eßergen_std_tests() { 48310328f8bSStefan Eßer 484d43fa8efSStefan Eßer _gen_std_tests_name="$1" 48510328f8bSStefan Eßer shift 48610328f8bSStefan Eßer 487d43fa8efSStefan Eßer _gen_std_tests_extra_math="$1" 48810328f8bSStefan Eßer shift 48910328f8bSStefan Eßer 490d43fa8efSStefan Eßer _gen_std_tests_time_tests="$1" 49110328f8bSStefan Eßer shift 49210328f8bSStefan Eßer 493d43fa8efSStefan Eßer _gen_std_tests_extra_required=$(cat "$scriptdir/tests/extra_required.txt") 49410328f8bSStefan Eßer 495d43fa8efSStefan Eßer for _gen_std_tests_t in $(cat "$scriptdir/tests/$_gen_std_tests_name/all.txt"); do 49610328f8bSStefan Eßer 497d43fa8efSStefan Eßer if [ "$_gen_std_tests_extra_math" -eq 0 ]; then 49810328f8bSStefan Eßer 499d43fa8efSStefan Eßer if [ -z "${_gen_std_tests_extra_required##*$_gen_std_tests_t*}" ]; then 50010328f8bSStefan Eßer printf 'test_%s_%s:\n\t@printf "Skipping %s %s\\n"\n\n' \ 501d43fa8efSStefan Eßer "$_gen_std_tests_name" "$_gen_std_tests_t" "$_gen_std_tests_name" \ 50210041e99SStefan Eßer "$_gen_std_tests_t" >> "Makefile" 50310328f8bSStefan Eßer continue 50410328f8bSStefan Eßer fi 50510328f8bSStefan Eßer 50610328f8bSStefan Eßer fi 50710328f8bSStefan Eßer 50810041e99SStefan Eßer printf 'test_%s_%s:\n\t@export BC_TEST_OUTPUT_DIR="%s/tests"; sh \$(TESTSDIR)/test.sh %s %s %s %s %s\n\n' \ 50910041e99SStefan Eßer "$_gen_std_tests_name" "$_gen_std_tests_t" "$builddir" "$_gen_std_tests_name" \ 510d43fa8efSStefan Eßer "$_gen_std_tests_t" "$generate_tests" "$time_tests" \ 51110041e99SStefan Eßer "$*" >> "Makefile" 51210328f8bSStefan Eßer 51310328f8bSStefan Eßer done 51410328f8bSStefan Eßer} 51510328f8bSStefan Eßer 51644d4804dSStefan Eßer# Generates a list of test targets that will be used as prerequisites for other 51744d4804dSStefan Eßer# targets. 51844d4804dSStefan Eßer# 51944d4804dSStefan Eßer# @param name The name of the calculator to generate test targets for. 520d43fa8efSStefan Eßergen_std_test_targets() { 52110328f8bSStefan Eßer 522d43fa8efSStefan Eßer _gen_std_test_targets_name="$1" 52310328f8bSStefan Eßer shift 52410328f8bSStefan Eßer 525d43fa8efSStefan Eßer _gen_std_test_targets_tests=$(cat "$scriptdir/tests/${_gen_std_test_targets_name}/all.txt") 52610328f8bSStefan Eßer 527d43fa8efSStefan Eßer for _gen_std_test_targets_t in $_gen_std_test_targets_tests; do 528d43fa8efSStefan Eßer printf ' test_%s_%s' "$_gen_std_test_targets_name" "$_gen_std_test_targets_t" 529d43fa8efSStefan Eßer done 530d43fa8efSStefan Eßer 531d43fa8efSStefan Eßer printf '\n' 532d43fa8efSStefan Eßer} 533d43fa8efSStefan Eßer 534d43fa8efSStefan Eßer# Generates the proper test targets for each error test to have its own target. 535d43fa8efSStefan Eßer# This allows `make test_bc_errors` and `make test_dc_errors` to run in 536d43fa8efSStefan Eßer# parallel. 537d43fa8efSStefan Eßer# 538d43fa8efSStefan Eßer# @param name Which calculator to generate tests for. 539d43fa8efSStefan Eßergen_err_tests() { 540d43fa8efSStefan Eßer 541d43fa8efSStefan Eßer _gen_err_tests_name="$1" 542d43fa8efSStefan Eßer shift 543d43fa8efSStefan Eßer 544d43fa8efSStefan Eßer _gen_err_tests_fs=$(ls "$scriptdir/tests/$_gen_err_tests_name/errors/") 545d43fa8efSStefan Eßer 546d43fa8efSStefan Eßer for _gen_err_tests_t in $_gen_err_tests_fs; do 547d43fa8efSStefan Eßer 54810041e99SStefan Eßer printf 'test_%s_error_%s:\n\t@export BC_TEST_OUTPUT_DIR="%s/tests"; sh \$(TESTSDIR)/error.sh %s %s %s\n\n' \ 54910041e99SStefan Eßer "$_gen_err_tests_name" "$_gen_err_tests_t" "$builddir" "$_gen_err_tests_name" \ 55010041e99SStefan Eßer "$_gen_err_tests_t" "$*" >> "Makefile" 551d43fa8efSStefan Eßer 552d43fa8efSStefan Eßer done 553d43fa8efSStefan Eßer 554d43fa8efSStefan Eßer} 555d43fa8efSStefan Eßer 556d43fa8efSStefan Eßer# Generates a list of error test targets that will be used as prerequisites for 557d43fa8efSStefan Eßer# other targets. 558d43fa8efSStefan Eßer# 559d43fa8efSStefan Eßer# @param name The name of the calculator to generate test targets for. 560d43fa8efSStefan Eßergen_err_test_targets() { 561d43fa8efSStefan Eßer 562d43fa8efSStefan Eßer _gen_err_test_targets_name="$1" 563d43fa8efSStefan Eßer shift 564d43fa8efSStefan Eßer 565d43fa8efSStefan Eßer _gen_err_test_targets_tests=$(ls "$scriptdir/tests/$_gen_err_test_targets_name/errors/") 566d43fa8efSStefan Eßer 567d43fa8efSStefan Eßer for _gen_err_test_targets_t in $_gen_err_test_targets_tests; do 568d43fa8efSStefan Eßer printf ' test_%s_error_%s' "$_gen_err_test_targets_name" "$_gen_err_test_targets_t" 56910328f8bSStefan Eßer done 57010328f8bSStefan Eßer 57110328f8bSStefan Eßer printf '\n' 57210328f8bSStefan Eßer} 57310328f8bSStefan Eßer 57444d4804dSStefan Eßer# Generates the proper script test targets for each script test to have its own 57544d4804dSStefan Eßer# target. This allows `make test` to run in parallel. 57644d4804dSStefan Eßer# 57744d4804dSStefan Eßer# @param name Which calculator to generate tests for. 57844d4804dSStefan Eßer# @param extra_math An integer that, if non-zero, activates extra math tests. 57944d4804dSStefan Eßer# @param generate An integer that, if non-zero, activates generated tests. 58044d4804dSStefan Eßer# @param time_tests An integer that, if non-zero, tells the test suite to time 58144d4804dSStefan Eßer# the execution of each test. 58210328f8bSStefan Eßergen_script_tests() { 58310328f8bSStefan Eßer 58410328f8bSStefan Eßer _gen_script_tests_name="$1" 58510328f8bSStefan Eßer shift 58610328f8bSStefan Eßer 58710328f8bSStefan Eßer _gen_script_tests_extra_math="$1" 58810328f8bSStefan Eßer shift 58910328f8bSStefan Eßer 59010328f8bSStefan Eßer _gen_script_tests_generate="$1" 59110328f8bSStefan Eßer shift 59210328f8bSStefan Eßer 59310328f8bSStefan Eßer _gen_script_tests_time="$1" 59410328f8bSStefan Eßer shift 59510328f8bSStefan Eßer 59610328f8bSStefan Eßer _gen_script_tests_tests=$(cat "$scriptdir/tests/$_gen_script_tests_name/scripts/all.txt") 59710328f8bSStefan Eßer 59810328f8bSStefan Eßer for _gen_script_tests_f in $_gen_script_tests_tests; do 59910328f8bSStefan Eßer 60010328f8bSStefan Eßer _gen_script_tests_b=$(basename "$_gen_script_tests_f" ".${_gen_script_tests_name}") 60110328f8bSStefan Eßer 60210041e99SStefan Eßer printf 'test_%s_script_%s:\n\t@export BC_TEST_OUTPUT_DIR="%s/tests"; sh \$(TESTSDIR)/script.sh %s %s %s 1 %s %s %s\n\n' \ 60310041e99SStefan Eßer "$_gen_script_tests_name" "$_gen_script_tests_b" "$builddir" "$_gen_script_tests_name" \ 60410328f8bSStefan Eßer "$_gen_script_tests_f" "$_gen_script_tests_extra_math" "$_gen_script_tests_generate" \ 60510041e99SStefan Eßer "$_gen_script_tests_time" "$*" >> "Makefile" 60610328f8bSStefan Eßer done 60710328f8bSStefan Eßer} 60810328f8bSStefan Eßer 60944d4804dSStefan Eßerset_default() { 61044d4804dSStefan Eßer 61144d4804dSStefan Eßer _set_default_on="$1" 61244d4804dSStefan Eßer shift 61344d4804dSStefan Eßer 61444d4804dSStefan Eßer _set_default_name="$1" 61544d4804dSStefan Eßer shift 61644d4804dSStefan Eßer 61744d4804dSStefan Eßer # The reason that the variables that are being set do not have the same 61844d4804dSStefan Eßer # non-collision avoidance that the other variables do is that we *do* want 61944d4804dSStefan Eßer # the settings of these variables to leak out of the function. They adjust 62044d4804dSStefan Eßer # the settings outside of the function. 62144d4804dSStefan Eßer case "$_set_default_name" in 62244d4804dSStefan Eßer 62344d4804dSStefan Eßer bc.banner) bc_default_banner="$_set_default_on" ;; 62444d4804dSStefan Eßer bc.sigint_reset) bc_default_sigint_reset="$_set_default_on" ;; 62544d4804dSStefan Eßer dc.sigint_reset) dc_default_sigint_reset="$_set_default_on" ;; 62644d4804dSStefan Eßer bc.tty_mode) bc_default_tty_mode="$_set_default_on" ;; 62744d4804dSStefan Eßer dc.tty_mode) dc_default_tty_mode="$_set_default_on" ;; 62844d4804dSStefan Eßer bc.prompt) bc_default_prompt="$_set_default_on" ;; 62944d4804dSStefan Eßer dc.prompt) dc_default_prompt="$_set_default_on" ;; 63010041e99SStefan Eßer bc.expr_exit) bc_default_expr_exit="$_set_default_on";; 63110041e99SStefan Eßer dc.expr_exit) dc_default_expr_exit="$_set_default_on";; 63244d4804dSStefan Eßer ?) usage "Invalid setting: $_set_default_name" ;; 63344d4804dSStefan Eßer 63444d4804dSStefan Eßer esac 63544d4804dSStefan Eßer} 63644d4804dSStefan Eßer 63744d4804dSStefan Eßer# Generates a list of script test targets that will be used as prerequisites for 63844d4804dSStefan Eßer# other targets. 63944d4804dSStefan Eßer# 64044d4804dSStefan Eßer# @param name The name of the calculator to generate script test targets for. 64110328f8bSStefan Eßergen_script_test_targets() { 64210328f8bSStefan Eßer 64310328f8bSStefan Eßer _gen_script_test_targets_name="$1" 64410328f8bSStefan Eßer shift 64510328f8bSStefan Eßer 64610328f8bSStefan Eßer _gen_script_test_targets_tests=$(cat "$scriptdir/tests/$_gen_script_test_targets_name/scripts/all.txt") 64710328f8bSStefan Eßer 64810328f8bSStefan Eßer for _gen_script_test_targets_f in $_gen_script_test_targets_tests; do 64910328f8bSStefan Eßer _gen_script_test_targets_b=$(basename "$_gen_script_test_targets_f" \ 65010328f8bSStefan Eßer ".$_gen_script_test_targets_name") 65110328f8bSStefan Eßer printf ' test_%s_script_%s' "$_gen_script_test_targets_name" \ 65210328f8bSStefan Eßer "$_gen_script_test_targets_b" 65310328f8bSStefan Eßer done 65410328f8bSStefan Eßer 65510328f8bSStefan Eßer printf '\n' 65610328f8bSStefan Eßer} 65710328f8bSStefan Eßer 65844d4804dSStefan Eßer# This is a list of defaults, but it is also the list of possible options for 65944d4804dSStefan Eßer# users to change. 66044d4804dSStefan Eßer# 66144d4804dSStefan Eßer# The development options are: force (force options even if they fail), valgrind 66244d4804dSStefan Eßer# (build in a way suitable for valgrind testing), memcheck (same as valgrind), 66344d4804dSStefan Eßer# and fuzzing (build in a way suitable for fuzzing). 6643aa99676SStefan Eßerbc_only=0 6653aa99676SStefan Eßerdc_only=0 6663aa99676SStefan Eßercoverage=0 6673aa99676SStefan Eßerkaratsuba_len=32 6683aa99676SStefan Eßerdebug=0 6693aa99676SStefan Eßerhist=1 6703aa99676SStefan Eßerextra_math=1 6713aa99676SStefan Eßeroptimization="" 6723aa99676SStefan Eßergenerate_tests=1 6733aa99676SStefan Eßerinstall_manpages=1 6743aa99676SStefan Eßernls=1 6753aa99676SStefan Eßerforce=0 6763aa99676SStefan Eßerstrip_bin=1 677cf7becd2SStefan Eßerall_locales=0 67850696a6eSStefan Eßerlibrary=0 67910328f8bSStefan Eßerfuzz=0 68010328f8bSStefan Eßertime_tests=0 68110328f8bSStefan Eßervg=0 68210328f8bSStefan Eßermemcheck=0 68310328f8bSStefan Eßerclean=1 6843aa99676SStefan Eßer 68544d4804dSStefan Eßer# The empty strings are because they depend on TTY mode. If they are directly 68644d4804dSStefan Eßer# set, though, they will be integers. We test for empty strings later. 68744d4804dSStefan Eßerbc_default_banner=0 68844d4804dSStefan Eßerbc_default_sigint_reset=1 68944d4804dSStefan Eßerdc_default_sigint_reset=1 69044d4804dSStefan Eßerbc_default_tty_mode=1 69144d4804dSStefan Eßerdc_default_tty_mode=0 69244d4804dSStefan Eßerbc_default_prompt="" 69344d4804dSStefan Eßerdc_default_prompt="" 69410041e99SStefan Eßerbc_default_expr_exit=1 69510041e99SStefan Eßerdc_default_expr_exit=1 69644d4804dSStefan Eßer 69744d4804dSStefan Eßer# getopts is a POSIX utility, but it cannot handle long options. Thus, the 69844d4804dSStefan Eßer# handling of long options is done by hand, and that's the reason that short and 69944d4804dSStefan Eßer# long options cannot be mixed. 70044d4804dSStefan Eßerwhile getopts "abBcdDEfgGhHk:lMmNO:S:s:tTvz-" opt; do 7013aa99676SStefan Eßer 7023aa99676SStefan Eßer case "$opt" in 70350696a6eSStefan Eßer a) library=1 ;; 7043aa99676SStefan Eßer b) bc_only=1 ;; 7053aa99676SStefan Eßer B) dc_only=1 ;; 7063aa99676SStefan Eßer c) coverage=1 ;; 70710328f8bSStefan Eßer C) clean=0 ;; 7083aa99676SStefan Eßer d) dc_only=1 ;; 7093aa99676SStefan Eßer D) bc_only=1 ;; 7103aa99676SStefan Eßer E) extra_math=0 ;; 7113aa99676SStefan Eßer f) force=1 ;; 7123aa99676SStefan Eßer g) debug=1 ;; 7133aa99676SStefan Eßer G) generate_tests=0 ;; 7143aa99676SStefan Eßer h) usage ;; 7153aa99676SStefan Eßer H) hist=0 ;; 7163aa99676SStefan Eßer k) karatsuba_len="$OPTARG" ;; 717cf7becd2SStefan Eßer l) all_locales=1 ;; 71810328f8bSStefan Eßer m) memcheck=1 ;; 7193aa99676SStefan Eßer M) install_manpages=0 ;; 7203aa99676SStefan Eßer N) nls=0 ;; 7213aa99676SStefan Eßer O) optimization="$OPTARG" ;; 72244d4804dSStefan Eßer S) set_default 0 "$OPTARG" ;; 72344d4804dSStefan Eßer s) set_default 1 "$OPTARG" ;; 72410328f8bSStefan Eßer t) time_tests=1 ;; 7253aa99676SStefan Eßer T) strip_bin=0 ;; 72610328f8bSStefan Eßer v) vg=1 ;; 72710328f8bSStefan Eßer z) fuzz=1 ;; 7283aa99676SStefan Eßer -) 7293aa99676SStefan Eßer arg="$1" 7303aa99676SStefan Eßer arg="${arg#--}" 7313aa99676SStefan Eßer LONG_OPTARG="${arg#*=}" 7323aa99676SStefan Eßer case $arg in 7333aa99676SStefan Eßer help) usage ;; 73450696a6eSStefan Eßer library) library=1 ;; 7353aa99676SStefan Eßer bc-only) bc_only=1 ;; 7363aa99676SStefan Eßer dc-only) dc_only=1 ;; 7373aa99676SStefan Eßer coverage) coverage=1 ;; 7383aa99676SStefan Eßer debug) debug=1 ;; 7393aa99676SStefan Eßer force) force=1 ;; 7403aa99676SStefan Eßer prefix=?*) PREFIX="$LONG_OPTARG" ;; 7413aa99676SStefan Eßer prefix) 7423aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 7433aa99676SStefan Eßer usage "No argument given for '--$arg' option" 7443aa99676SStefan Eßer fi 7453aa99676SStefan Eßer PREFIX="$2" 7463aa99676SStefan Eßer shift ;; 7473aa99676SStefan Eßer bindir=?*) BINDIR="$LONG_OPTARG" ;; 7483aa99676SStefan Eßer bindir) 7493aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 7503aa99676SStefan Eßer usage "No argument given for '--$arg' option" 7513aa99676SStefan Eßer fi 7523aa99676SStefan Eßer BINDIR="$2" 7533aa99676SStefan Eßer shift ;; 75450696a6eSStefan Eßer includedir=?*) INCLUDEDIR="$LONG_OPTARG" ;; 75550696a6eSStefan Eßer includedir) 75650696a6eSStefan Eßer if [ "$#" -lt 2 ]; then 75750696a6eSStefan Eßer usage "No argument given for '--$arg' option" 75850696a6eSStefan Eßer fi 75950696a6eSStefan Eßer INCLUDEDIR="$2" 76050696a6eSStefan Eßer shift ;; 76150696a6eSStefan Eßer libdir=?*) LIBDIR="$LONG_OPTARG" ;; 76250696a6eSStefan Eßer libdir) 76350696a6eSStefan Eßer if [ "$#" -lt 2 ]; then 76450696a6eSStefan Eßer usage "No argument given for '--$arg' option" 76550696a6eSStefan Eßer fi 76650696a6eSStefan Eßer LIBDIR="$2" 76750696a6eSStefan Eßer shift ;; 7683aa99676SStefan Eßer datarootdir=?*) DATAROOTDIR="$LONG_OPTARG" ;; 7693aa99676SStefan Eßer datarootdir) 7703aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 7713aa99676SStefan Eßer usage "No argument given for '--$arg' option" 7723aa99676SStefan Eßer fi 7733aa99676SStefan Eßer DATAROOTDIR="$2" 7743aa99676SStefan Eßer shift ;; 7753aa99676SStefan Eßer datadir=?*) DATADIR="$LONG_OPTARG" ;; 7763aa99676SStefan Eßer datadir) 7773aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 7783aa99676SStefan Eßer usage "No argument given for '--$arg' option" 7793aa99676SStefan Eßer fi 7803aa99676SStefan Eßer DATADIR="$2" 7813aa99676SStefan Eßer shift ;; 7823aa99676SStefan Eßer mandir=?*) MANDIR="$LONG_OPTARG" ;; 7833aa99676SStefan Eßer mandir) 7843aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 7853aa99676SStefan Eßer usage "No argument given for '--$arg' option" 7863aa99676SStefan Eßer fi 7873aa99676SStefan Eßer MANDIR="$2" 7883aa99676SStefan Eßer shift ;; 7893aa99676SStefan Eßer man1dir=?*) MAN1DIR="$LONG_OPTARG" ;; 7903aa99676SStefan Eßer man1dir) 7913aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 7923aa99676SStefan Eßer usage "No argument given for '--$arg' option" 7933aa99676SStefan Eßer fi 7943aa99676SStefan Eßer MAN1DIR="$2" 7953aa99676SStefan Eßer shift ;; 79650696a6eSStefan Eßer man3dir=?*) MAN3DIR="$LONG_OPTARG" ;; 79750696a6eSStefan Eßer man3dir) 79850696a6eSStefan Eßer if [ "$#" -lt 2 ]; then 79950696a6eSStefan Eßer usage "No argument given for '--$arg' option" 80050696a6eSStefan Eßer fi 80150696a6eSStefan Eßer MAN3DIR="$2" 80250696a6eSStefan Eßer shift ;; 8033aa99676SStefan Eßer localedir=?*) LOCALEDIR="$LONG_OPTARG" ;; 8043aa99676SStefan Eßer localedir) 8053aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 8063aa99676SStefan Eßer usage "No argument given for '--$arg' option" 8073aa99676SStefan Eßer fi 8083aa99676SStefan Eßer LOCALEDIR="$2" 8093aa99676SStefan Eßer shift ;; 8103aa99676SStefan Eßer karatsuba-len=?*) karatsuba_len="$LONG_OPTARG" ;; 8113aa99676SStefan Eßer karatsuba-len) 8123aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 8133aa99676SStefan Eßer usage "No argument given for '--$arg' option" 8143aa99676SStefan Eßer fi 8153aa99676SStefan Eßer karatsuba_len="$1" 8163aa99676SStefan Eßer shift ;; 8173aa99676SStefan Eßer opt=?*) optimization="$LONG_OPTARG" ;; 8183aa99676SStefan Eßer opt) 8193aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 8203aa99676SStefan Eßer usage "No argument given for '--$arg' option" 8213aa99676SStefan Eßer fi 8223aa99676SStefan Eßer optimization="$1" 8233aa99676SStefan Eßer shift ;; 82444d4804dSStefan Eßer set-default-on=?*) set_default 1 "$LONG_OPTARG" ;; 82544d4804dSStefan Eßer set-default-on) 82644d4804dSStefan Eßer if [ "$#" -lt 2 ]; then 82744d4804dSStefan Eßer usage "No argument given for '--$arg' option" 82844d4804dSStefan Eßer fi 82944d4804dSStefan Eßer set_default 1 "$1" 83044d4804dSStefan Eßer shift ;; 83144d4804dSStefan Eßer set-default-off=?*) set_default 0 "$LONG_OPTARG" ;; 83244d4804dSStefan Eßer set-default-off) 83344d4804dSStefan Eßer if [ "$#" -lt 2 ]; then 83444d4804dSStefan Eßer usage "No argument given for '--$arg' option" 83544d4804dSStefan Eßer fi 83644d4804dSStefan Eßer set_default 0 "$1" 83744d4804dSStefan Eßer shift ;; 8383aa99676SStefan Eßer disable-bc) dc_only=1 ;; 8393aa99676SStefan Eßer disable-dc) bc_only=1 ;; 84010328f8bSStefan Eßer disable-clean) clean=0 ;; 8413aa99676SStefan Eßer disable-extra-math) extra_math=0 ;; 8423aa99676SStefan Eßer disable-generated-tests) generate_tests=0 ;; 8433aa99676SStefan Eßer disable-history) hist=0 ;; 8443aa99676SStefan Eßer disable-man-pages) install_manpages=0 ;; 8453aa99676SStefan Eßer disable-nls) nls=0 ;; 8463aa99676SStefan Eßer disable-strip) strip_bin=0 ;; 84710328f8bSStefan Eßer enable-test-timing) time_tests=1 ;; 84810328f8bSStefan Eßer enable-valgrind) vg=1 ;; 84910328f8bSStefan Eßer enable-fuzz-mode) fuzz=1 ;; 85010328f8bSStefan Eßer enable-memcheck) memcheck=1 ;; 851cf7becd2SStefan Eßer install-all-locales) all_locales=1 ;; 8523aa99676SStefan Eßer help* | bc-only* | dc-only* | coverage* | debug*) 8533aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 85410328f8bSStefan Eßer disable-bc* | disable-dc* | disable-clean*) 85510328f8bSStefan Eßer usage "No arg allowed for --$arg option" ;; 85610328f8bSStefan Eßer disable-extra-math*) 8573aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 8583aa99676SStefan Eßer disable-generated-tests* | disable-history*) 8593aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 8603aa99676SStefan Eßer disable-man-pages* | disable-nls* | disable-strip*) 8613aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 86210328f8bSStefan Eßer enable-fuzz-mode* | enable-test-timing* | enable-valgrind*) 86310328f8bSStefan Eßer usage "No arg allowed for --$arg option" ;; 86410328f8bSStefan Eßer enable-memcheck* | install-all-locales*) 865cf7becd2SStefan Eßer usage "No arg allowed for --$arg option" ;; 8663aa99676SStefan Eßer '') break ;; # "--" terminates argument processing 8673aa99676SStefan Eßer * ) usage "Invalid option $LONG_OPTARG" ;; 8683aa99676SStefan Eßer esac 8693aa99676SStefan Eßer shift 8703aa99676SStefan Eßer OPTIND=1 ;; 87144d4804dSStefan Eßer ?) usage "Invalid option: $opt" ;; 8723aa99676SStefan Eßer esac 8733aa99676SStefan Eßer 8743aa99676SStefan Eßerdone 8753aa99676SStefan Eßer 87644d4804dSStefan Eßer# Sometimes, developers don't want configure.sh to do a config clean. But 87744d4804dSStefan Eßer# sometimes they do. 87810328f8bSStefan Eßerif [ "$clean" -ne 0 ]; then 87910328f8bSStefan Eßer if [ -f ./Makefile ]; then 88010328f8bSStefan Eßer make clean_config > /dev/null 88110328f8bSStefan Eßer fi 88210328f8bSStefan Eßerfi 88310328f8bSStefan Eßer 88444d4804dSStefan Eßer# It is an error to say that bc only should be built and likewise for dc. 8853aa99676SStefan Eßerif [ "$bc_only" -eq 1 ] && [ "$dc_only" -eq 1 ]; then 8863aa99676SStefan Eßer usage "Can only specify one of -b(-D) or -d(-B)" 8873aa99676SStefan Eßerfi 8883aa99676SStefan Eßer 88944d4804dSStefan Eßer# The library is mutually exclusive to the calculators, so it's an error to 89044d4804dSStefan Eßer# give an option for either of them. 89150696a6eSStefan Eßerif [ "$library" -ne 0 ]; then 89250696a6eSStefan Eßer if [ "$bc_only" -eq 1 ] || [ "$dc_only" -eq 1 ]; then 89350696a6eSStefan Eßer usage "Must not specify -b(-D) or -d(-B) when building the library" 89450696a6eSStefan Eßer fi 89550696a6eSStefan Eßerfi 89650696a6eSStefan Eßer 89744d4804dSStefan Eßer# KARATSUBA_LEN must be an integer and must be 16 or greater. 8983aa99676SStefan Eßercase $karatsuba_len in 8993aa99676SStefan Eßer (*[!0-9]*|'') usage "KARATSUBA_LEN is not a number" ;; 9003aa99676SStefan Eßer (*) ;; 9013aa99676SStefan Eßeresac 9023aa99676SStefan Eßer 9033aa99676SStefan Eßerif [ "$karatsuba_len" -lt 16 ]; then 9043aa99676SStefan Eßer usage "KARATSUBA_LEN is less than 16" 9053aa99676SStefan Eßerfi 9063aa99676SStefan Eßer 9073aa99676SStefan Eßerset -e 9083aa99676SStefan Eßer 9093aa99676SStefan Eßerif [ -z "${LONG_BIT+set}" ]; then 9103aa99676SStefan Eßer LONG_BIT_DEFINE="" 9113aa99676SStefan Eßerelif [ "$LONG_BIT" -lt 32 ]; then 9123aa99676SStefan Eßer usage "LONG_BIT is less than 32" 9133aa99676SStefan Eßerelse 9143aa99676SStefan Eßer LONG_BIT_DEFINE="-DBC_LONG_BIT=\$(BC_LONG_BIT)" 9153aa99676SStefan Eßerfi 9163aa99676SStefan Eßer 9173aa99676SStefan Eßerif [ -z "$CC" ]; then 9183aa99676SStefan Eßer CC="c99" 9193aa99676SStefan Eßerelse 92044d4804dSStefan Eßer 92144d4804dSStefan Eßer # I had users complain that, if they gave CFLAGS as part of CC, which 92244d4804dSStefan Eßer # autotools allows in its braindead way, the build would fail with an error. 92344d4804dSStefan Eßer # I don't like adjusting for autotools, but oh well. These lines puts the 92444d4804dSStefan Eßer # stuff after the first space into CFLAGS. 9253aa99676SStefan Eßer ccbase=$(basename "$CC") 9263aa99676SStefan Eßer suffix=" *" 9273aa99676SStefan Eßer prefix="* " 9283aa99676SStefan Eßer 9293aa99676SStefan Eßer if [ "${ccbase%%$suffix}" != "$ccbase" ]; then 9303aa99676SStefan Eßer ccflags="${ccbase#$prefix}" 9313aa99676SStefan Eßer cc="${ccbase%%$suffix}" 9323aa99676SStefan Eßer ccdir=$(dirname "$CC") 9333aa99676SStefan Eßer if [ "$ccdir" = "." ] && [ "${CC#.}" = "$CC" ]; then 9343aa99676SStefan Eßer ccdir="" 9353aa99676SStefan Eßer else 9363aa99676SStefan Eßer ccdir="$ccdir/" 9373aa99676SStefan Eßer fi 9383aa99676SStefan Eßer CC="${ccdir}${cc}" 9393aa99676SStefan Eßer CFLAGS="$CFLAGS $ccflags" 9403aa99676SStefan Eßer fi 9413aa99676SStefan Eßerfi 9423aa99676SStefan Eßer 9433aa99676SStefan Eßerif [ -z "$HOSTCC" ] && [ -z "$HOST_CC" ]; then 9443aa99676SStefan Eßer HOSTCC="$CC" 9453aa99676SStefan Eßerelif [ -z "$HOSTCC" ]; then 9463aa99676SStefan Eßer HOSTCC="$HOST_CC" 9473aa99676SStefan Eßerfi 9483aa99676SStefan Eßer 9493aa99676SStefan Eßerif [ "$HOSTCC" != "$CC" ]; then 95044d4804dSStefan Eßer 95144d4804dSStefan Eßer # Like above, this splits HOSTCC and HOSTCFLAGS. 9523aa99676SStefan Eßer ccbase=$(basename "$HOSTCC") 9533aa99676SStefan Eßer suffix=" *" 9543aa99676SStefan Eßer prefix="* " 9553aa99676SStefan Eßer 9563aa99676SStefan Eßer if [ "${ccbase%%$suffix}" != "$ccbase" ]; then 9573aa99676SStefan Eßer ccflags="${ccbase#$prefix}" 9583aa99676SStefan Eßer cc="${ccbase%%$suffix}" 9593aa99676SStefan Eßer ccdir=$(dirname "$HOSTCC") 9603aa99676SStefan Eßer if [ "$ccdir" = "." ] && [ "${HOSTCC#.}" = "$HOSTCC" ]; then 9613aa99676SStefan Eßer ccdir="" 9623aa99676SStefan Eßer else 9633aa99676SStefan Eßer ccdir="$ccdir/" 9643aa99676SStefan Eßer fi 9653aa99676SStefan Eßer HOSTCC="${ccdir}${cc}" 9663aa99676SStefan Eßer HOSTCFLAGS="$HOSTCFLAGS $ccflags" 9673aa99676SStefan Eßer fi 9683aa99676SStefan Eßerfi 9693aa99676SStefan Eßer 9703aa99676SStefan Eßerif [ -z "${HOSTCFLAGS+set}" ] && [ -z "${HOST_CFLAGS+set}" ]; then 9713aa99676SStefan Eßer HOSTCFLAGS="$CFLAGS" 9723aa99676SStefan Eßerelif [ -z "${HOSTCFLAGS+set}" ]; then 9733aa99676SStefan Eßer HOSTCFLAGS="$HOST_CFLAGS" 9743aa99676SStefan Eßerfi 9753aa99676SStefan Eßer 97644d4804dSStefan Eßer# Store these for the cross compilation detection later. 97744d4804dSStefan EßerOLDCFLAGS="$CFLAGS" 97844d4804dSStefan EßerOLDHOSTCFLAGS="$HOSTCFLAGS" 97944d4804dSStefan Eßer 9803aa99676SStefan Eßerlink="@printf 'No link necessary\\\\n'" 9813aa99676SStefan Eßermain_exec="BC" 9823aa99676SStefan Eßerexecutable="BC_EXEC" 9833aa99676SStefan Eßer 984d43fa8efSStefan Eßertests="test_bc timeconst test_dc" 98550696a6eSStefan Eßer 98610041e99SStefan Eßerbc_test="@export BC_TEST_OUTPUT_DIR=\"$builddir/tests\"; \$(TESTSDIR)/all.sh bc $extra_math 1 $generate_tests $time_tests \$(BC_EXEC)" 98710041e99SStefan Eßerbc_test_np="@export BC_TEST_OUTPUT_DIR=\"$builddir/tests\"; \$(TESTSDIR)/all.sh -n bc $extra_math 1 $generate_tests $time_tests \$(BC_EXEC)" 98810041e99SStefan Eßerdc_test="@export BC_TEST_OUTPUT_DIR=\"$builddir/tests\"; \$(TESTSDIR)/all.sh dc $extra_math 1 $generate_tests $time_tests \$(DC_EXEC)" 98910041e99SStefan Eßerdc_test_np="@export BC_TEST_OUTPUT_DIR=\"$builddir/tests\"; \$(TESTSDIR)/all.sh -n dc $extra_math 1 $generate_tests $time_tests \$(DC_EXEC)" 9903aa99676SStefan Eßer 99110041e99SStefan Eßertimeconst="@export BC_TEST_OUTPUT_DIR=\"$builddir/tests\"; \$(TESTSDIR)/bc/timeconst.sh \$(TESTSDIR)/bc/scripts/timeconst.bc \$(BC_EXEC)" 9923aa99676SStefan Eßer 9933aa99676SStefan Eßer# In order to have cleanup at exit, we need to be in 9943aa99676SStefan Eßer# debug mode, so don't run valgrind without that. 99510328f8bSStefan Eßerif [ "$vg" -ne 0 ]; then 99610328f8bSStefan Eßer debug=1 99710328f8bSStefan Eßer bc_test_exec='valgrind $(VALGRIND_ARGS) $(BC_EXEC)' 99810328f8bSStefan Eßer dc_test_exec='valgrind $(VALGRIND_ARGS) $(DC_EXEC)' 9993aa99676SStefan Eßerelse 100010328f8bSStefan Eßer bc_test_exec='$(BC_EXEC)' 100110328f8bSStefan Eßer dc_test_exec='$(DC_EXEC)' 10023aa99676SStefan Eßerfi 10033aa99676SStefan Eßer 100444d4804dSStefan Eßertest_bc_history_prereqs="test_bc_history_all" 100544d4804dSStefan Eßertest_dc_history_prereqs="test_dc_history_all" 100644d4804dSStefan Eßer 10073aa99676SStefan Eßerkaratsuba="@printf 'karatsuba cannot be run because one of bc or dc is not built\\\\n'" 10083aa99676SStefan Eßerkaratsuba_test="@printf 'karatsuba cannot be run because one of bc or dc is not built\\\\n'" 10093aa99676SStefan Eßer 10103aa99676SStefan Eßerbc_lib="\$(GEN_DIR)/lib.o" 10113aa99676SStefan Eßerbc_help="\$(GEN_DIR)/bc_help.o" 10123aa99676SStefan Eßerdc_help="\$(GEN_DIR)/dc_help.o" 10133aa99676SStefan Eßer 101410328f8bSStefan Eßerdefault_target_prereqs="\$(BIN) \$(OBJS)" 101510328f8bSStefan Eßerdefault_target_cmd="\$(CC) \$(CFLAGS) \$(OBJS) \$(LDFLAGS) -o \$(EXEC)" 101610328f8bSStefan Eßerdefault_target="\$(DC_EXEC)" 101710328f8bSStefan Eßer 101810328f8bSStefan Eßersecond_target_prereqs="" 101910328f8bSStefan Eßersecond_target_cmd="$default_target_cmd" 102010328f8bSStefan Eßersecond_target="\$(BC_EXEC)" 102110328f8bSStefan Eßer 102244d4804dSStefan Eßer# This if/else if chain is for setting the defaults that change based on whether 102344d4804dSStefan Eßer# the library is being built, bc only, dc only, or both calculators. 102410328f8bSStefan Eßerif [ "$library" -ne 0 ]; then 102510328f8bSStefan Eßer 102610328f8bSStefan Eßer extra_math=1 102710328f8bSStefan Eßer nls=0 102810328f8bSStefan Eßer hist=0 102910328f8bSStefan Eßer bc=1 103010328f8bSStefan Eßer dc=1 103110328f8bSStefan Eßer 103210328f8bSStefan Eßer default_target_prereqs="\$(BIN) \$(OBJ)" 103310328f8bSStefan Eßer default_target_cmd="ar -r -cu \$(LIBBC) \$(OBJ)" 103410328f8bSStefan Eßer default_target="\$(LIBBC)" 103510328f8bSStefan Eßer tests="test_library" 103644d4804dSStefan Eßer test_bc_history_prereqs=" test_bc_history_skip" 103744d4804dSStefan Eßer test_dc_history_prereqs=" test_dc_history_skip" 103810328f8bSStefan Eßer 103910041e99SStefan Eßer install_prereqs=" install_library" 104010041e99SStefan Eßer uninstall_prereqs=" uninstall_library" 104110041e99SStefan Eßer install_man_prereqs=" install_bcl_manpage" 104210041e99SStefan Eßer uninstall_man_prereqs=" uninstall_bcl_manpage" 104310041e99SStefan Eßer 104410328f8bSStefan Eßerelif [ "$bc_only" -eq 1 ]; then 10453aa99676SStefan Eßer 10463aa99676SStefan Eßer bc=1 10473aa99676SStefan Eßer dc=0 10483aa99676SStefan Eßer 10493aa99676SStefan Eßer dc_help="" 10503aa99676SStefan Eßer 10513aa99676SStefan Eßer executables="bc" 10523aa99676SStefan Eßer 10533aa99676SStefan Eßer dc_test="@printf 'No dc tests to run\\\\n'" 1054d43fa8efSStefan Eßer dc_test_np="@printf 'No dc tests to run\\\\n'" 105544d4804dSStefan Eßer test_dc_history_prereqs=" test_dc_history_skip" 10563aa99676SStefan Eßer 105750696a6eSStefan Eßer install_prereqs=" install_execs" 105850696a6eSStefan Eßer install_man_prereqs=" install_bc_manpage" 10593aa99676SStefan Eßer uninstall_prereqs=" uninstall_bc" 10603aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_bc_manpage" 10613aa99676SStefan Eßer 106210328f8bSStefan Eßer default_target="\$(BC_EXEC)" 106310328f8bSStefan Eßer second_target="\$(DC_EXEC)" 1064d43fa8efSStefan Eßer tests="test_bc timeconst" 106510328f8bSStefan Eßer 10663aa99676SStefan Eßerelif [ "$dc_only" -eq 1 ]; then 10673aa99676SStefan Eßer 10683aa99676SStefan Eßer bc=0 10693aa99676SStefan Eßer dc=1 10703aa99676SStefan Eßer 10713aa99676SStefan Eßer bc_lib="" 10723aa99676SStefan Eßer bc_help="" 10733aa99676SStefan Eßer 10743aa99676SStefan Eßer executables="dc" 10753aa99676SStefan Eßer 10763aa99676SStefan Eßer main_exec="DC" 10773aa99676SStefan Eßer executable="DC_EXEC" 10783aa99676SStefan Eßer 10793aa99676SStefan Eßer bc_test="@printf 'No bc tests to run\\\\n'" 1080d43fa8efSStefan Eßer bc_test_np="@printf 'No bc tests to run\\\\n'" 108144d4804dSStefan Eßer test_bc_history_prereqs=" test_bc_history_skip" 10823aa99676SStefan Eßer 10833aa99676SStefan Eßer timeconst="@printf 'timeconst cannot be run because bc is not built\\\\n'" 10843aa99676SStefan Eßer 108550696a6eSStefan Eßer install_prereqs=" install_execs" 108650696a6eSStefan Eßer install_man_prereqs=" install_dc_manpage" 10873aa99676SStefan Eßer uninstall_prereqs=" uninstall_dc" 10883aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_dc_manpage" 10893aa99676SStefan Eßer 1090d43fa8efSStefan Eßer tests="test_dc" 109110328f8bSStefan Eßer 10923aa99676SStefan Eßerelse 10933aa99676SStefan Eßer 10943aa99676SStefan Eßer bc=1 10953aa99676SStefan Eßer dc=1 10963aa99676SStefan Eßer 10973aa99676SStefan Eßer executables="bc and dc" 10983aa99676SStefan Eßer 10993aa99676SStefan Eßer karatsuba="@\$(KARATSUBA) 30 0 \$(BC_EXEC)" 11003aa99676SStefan Eßer karatsuba_test="@\$(KARATSUBA) 1 100 \$(BC_EXEC)" 11013aa99676SStefan Eßer 110250696a6eSStefan Eßer if [ "$library" -eq 0 ]; then 110350696a6eSStefan Eßer install_prereqs=" install_execs" 110450696a6eSStefan Eßer install_man_prereqs=" install_bc_manpage install_dc_manpage" 11053aa99676SStefan Eßer uninstall_prereqs=" uninstall_bc uninstall_dc" 11063aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_bc_manpage uninstall_dc_manpage" 110750696a6eSStefan Eßer else 110850696a6eSStefan Eßer install_prereqs=" install_library install_bcl_header" 110950696a6eSStefan Eßer install_man_prereqs=" install_bcl_manpage" 111050696a6eSStefan Eßer uninstall_prereqs=" uninstall_library uninstall_bcl_header" 111150696a6eSStefan Eßer uninstall_man_prereqs=" uninstall_bcl_manpage" 111250696a6eSStefan Eßer tests="test_library" 111350696a6eSStefan Eßer fi 11143aa99676SStefan Eßer 111510328f8bSStefan Eßer second_target_prereqs="$default_target_prereqs" 111610328f8bSStefan Eßer default_target_prereqs="$second_target" 111710328f8bSStefan Eßer default_target_cmd="\$(LINK) \$(BIN) \$(EXEC_PREFIX)\$(DC)" 111810328f8bSStefan Eßer 111910328f8bSStefan Eßerfi 112010328f8bSStefan Eßer 112144d4804dSStefan Eßer# We need specific stuff for fuzzing. 112210328f8bSStefan Eßerif [ "$fuzz" -ne 0 ]; then 112310328f8bSStefan Eßer debug=1 112410328f8bSStefan Eßer hist=0 112510328f8bSStefan Eßer nls=0 112610328f8bSStefan Eßer optimization="3" 11273aa99676SStefan Eßerfi 11283aa99676SStefan Eßer 112944d4804dSStefan Eßer# This sets some necessary things for debug mode. 11303aa99676SStefan Eßerif [ "$debug" -eq 1 ]; then 11313aa99676SStefan Eßer 11323aa99676SStefan Eßer if [ -z "$CFLAGS" ] && [ -z "$optimization" ]; then 11333aa99676SStefan Eßer CFLAGS="-O0" 11343aa99676SStefan Eßer fi 11353aa99676SStefan Eßer 11363aa99676SStefan Eßer CFLAGS="-g $CFLAGS" 11373aa99676SStefan Eßer 11383aa99676SStefan Eßerelse 113944d4804dSStefan Eßer 11403aa99676SStefan Eßer CPPFLAGS="-DNDEBUG $CPPFLAGS" 114144d4804dSStefan Eßer 11423aa99676SStefan Eßer if [ "$strip_bin" -ne 0 ]; then 11433aa99676SStefan Eßer LDFLAGS="-s $LDFLAGS" 11443aa99676SStefan Eßer fi 11453aa99676SStefan Eßerfi 11463aa99676SStefan Eßer 114744d4804dSStefan Eßer# Set optimization CFLAGS. 11483aa99676SStefan Eßerif [ -n "$optimization" ]; then 11493aa99676SStefan Eßer CFLAGS="-O$optimization $CFLAGS" 11503aa99676SStefan Eßerfi 11513aa99676SStefan Eßer 115244d4804dSStefan Eßer# Set test coverage defaults. 11533aa99676SStefan Eßerif [ "$coverage" -eq 1 ]; then 11543aa99676SStefan Eßer 11553aa99676SStefan Eßer if [ "$bc_only" -eq 1 ] || [ "$dc_only" -eq 1 ]; then 11563aa99676SStefan Eßer usage "Can only specify -c without -b or -d" 11573aa99676SStefan Eßer fi 11583aa99676SStefan Eßer 11593aa99676SStefan Eßer CFLAGS="-fprofile-arcs -ftest-coverage -g -O0 $CFLAGS" 11603aa99676SStefan Eßer CPPFLAGS="-DNDEBUG $CPPFLAGS" 11613aa99676SStefan Eßer 11623aa99676SStefan Eßer COVERAGE_OUTPUT="@gcov -pabcdf \$(GCDA) \$(BC_GCDA) \$(DC_GCDA) \$(HISTORY_GCDA) \$(RAND_GCDA)" 11633aa99676SStefan Eßer COVERAGE_OUTPUT="$COVERAGE_OUTPUT;\$(RM) -f \$(GEN)*.gc*" 116444d4804dSStefan Eßer COVERAGE_OUTPUT="$COVERAGE_OUTPUT;gcovr --exclude-unreachable-branches --exclude-throw-branches --html-details --output index.html" 11653aa99676SStefan Eßer COVERAGE_PREREQS=" test coverage_output" 11663aa99676SStefan Eßer 11673aa99676SStefan Eßerelse 11683aa99676SStefan Eßer COVERAGE_OUTPUT="@printf 'Coverage not generated\\\\n'" 11693aa99676SStefan Eßer COVERAGE_PREREQS="" 11703aa99676SStefan Eßerfi 11713aa99676SStefan Eßer 117244d4804dSStefan Eßer 117344d4804dSStefan Eßer# Set some defaults. 11743aa99676SStefan Eßerif [ -z "${DESTDIR+set}" ]; then 11753aa99676SStefan Eßer destdir="" 11763aa99676SStefan Eßerelse 11773aa99676SStefan Eßer destdir="DESTDIR = $DESTDIR" 11783aa99676SStefan Eßerfi 11793aa99676SStefan Eßer 11803aa99676SStefan Eßerif [ -z "${PREFIX+set}" ]; then 11813aa99676SStefan Eßer PREFIX="/usr/local" 11823aa99676SStefan Eßerfi 11833aa99676SStefan Eßer 11843aa99676SStefan Eßerif [ -z "${BINDIR+set}" ]; then 11853aa99676SStefan Eßer BINDIR="$PREFIX/bin" 11863aa99676SStefan Eßerfi 11873aa99676SStefan Eßer 118850696a6eSStefan Eßerif [ -z "${INCLUDEDIR+set}" ]; then 118950696a6eSStefan Eßer INCLUDEDIR="$PREFIX/include" 119050696a6eSStefan Eßerfi 119150696a6eSStefan Eßer 119250696a6eSStefan Eßerif [ -z "${LIBDIR+set}" ]; then 119350696a6eSStefan Eßer LIBDIR="$PREFIX/lib" 119450696a6eSStefan Eßerfi 119550696a6eSStefan Eßer 119610041e99SStefan Eßerif [ -z "${PC_PATH+set}" ]; then 119710041e99SStefan Eßer 119810041e99SStefan Eßer set +e 119910041e99SStefan Eßer 120010041e99SStefan Eßer command -v pkg-config > /dev/null 120110041e99SStefan Eßer err=$? 120210041e99SStefan Eßer 120310041e99SStefan Eßer set -e 120410041e99SStefan Eßer 120510041e99SStefan Eßer if [ "$err" -eq 0 ]; then 120610041e99SStefan Eßer PC_PATH=$(pkg-config --variable=pc_path pkg-config) 120710041e99SStefan Eßer PC_PATH="${PC_PATH%%:*}" 120810041e99SStefan Eßer else 120910041e99SStefan Eßer PC_PATH="" 121010041e99SStefan Eßer fi 121110041e99SStefan Eßer 121210041e99SStefan Eßerfi 121310041e99SStefan Eßer 121444d4804dSStefan Eßer# Set a default for the DATAROOTDIR. This is done if either manpages will be 121544d4804dSStefan Eßer# installed, or locales are enabled because that's probably where NLS_PATH 121644d4804dSStefan Eßer# points. 12173aa99676SStefan Eßerif [ "$install_manpages" -ne 0 ] || [ "$nls" -ne 0 ]; then 12183aa99676SStefan Eßer if [ -z "${DATAROOTDIR+set}" ]; then 12193aa99676SStefan Eßer DATAROOTDIR="$PREFIX/share" 12203aa99676SStefan Eßer fi 12213aa99676SStefan Eßerfi 12223aa99676SStefan Eßer 122344d4804dSStefan Eßer# Set defaults for manpage environment variables. 12243aa99676SStefan Eßerif [ "$install_manpages" -ne 0 ]; then 12253aa99676SStefan Eßer 12263aa99676SStefan Eßer if [ -z "${DATADIR+set}" ]; then 12273aa99676SStefan Eßer DATADIR="$DATAROOTDIR" 12283aa99676SStefan Eßer fi 12293aa99676SStefan Eßer 12303aa99676SStefan Eßer if [ -z "${MANDIR+set}" ]; then 12313aa99676SStefan Eßer MANDIR="$DATADIR/man" 12323aa99676SStefan Eßer fi 12333aa99676SStefan Eßer 12343aa99676SStefan Eßer if [ -z "${MAN1DIR+set}" ]; then 12353aa99676SStefan Eßer MAN1DIR="$MANDIR/man1" 12363aa99676SStefan Eßer fi 12373aa99676SStefan Eßer 123850696a6eSStefan Eßer if [ -z "${MAN3DIR+set}" ]; then 123950696a6eSStefan Eßer MAN3DIR="$MANDIR/man3" 124050696a6eSStefan Eßer fi 124150696a6eSStefan Eßer 12423aa99676SStefan Eßerelse 124350696a6eSStefan Eßer install_man_prereqs="" 12443aa99676SStefan Eßer uninstall_man_prereqs="" 12453aa99676SStefan Eßerfi 12463aa99676SStefan Eßer 124744d4804dSStefan Eßer# Here is where we test NLS (the locale system). This is done by trying to 124844d4804dSStefan Eßer# compile src/vm.c, which has the relevant code. If it fails, then it is 124944d4804dSStefan Eßer# disabled. 12503aa99676SStefan Eßerif [ "$nls" -ne 0 ]; then 12513aa99676SStefan Eßer 12523aa99676SStefan Eßer set +e 12533aa99676SStefan Eßer 12543aa99676SStefan Eßer printf 'Testing NLS...\n' 12553aa99676SStefan Eßer 12563aa99676SStefan Eßer flags="-DBC_ENABLE_NLS=1 -DBC_ENABLED=$bc -DDC_ENABLED=$dc" 125744d4804dSStefan Eßer flags="$flags -DBC_ENABLE_HISTORY=$hist -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_AFL=0" 125810041e99SStefan Eßer flags="$flags -DBC_ENABLE_EXTRA_MATH=$extra_math -I$scriptdir/include/" 12593aa99676SStefan Eßer flags="$flags -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700" 12603aa99676SStefan Eßer 126110041e99SStefan Eßer "$CC" $CPPFLAGS $CFLAGS $flags -c "$scriptdir/src/vm.c" -o "./vm.o" > /dev/null 2>&1 12623aa99676SStefan Eßer 12633aa99676SStefan Eßer err="$?" 12643aa99676SStefan Eßer 126510041e99SStefan Eßer rm -rf "./vm.o" 12663aa99676SStefan Eßer 12673aa99676SStefan Eßer # If this errors, it is probably because of building on Windows, 12683aa99676SStefan Eßer # and NLS is not supported on Windows, so disable it. 12693aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 12703aa99676SStefan Eßer printf 'NLS does not work.\n' 12713aa99676SStefan Eßer if [ $force -eq 0 ]; then 12723aa99676SStefan Eßer printf 'Disabling NLS...\n\n' 12733aa99676SStefan Eßer nls=0 12743aa99676SStefan Eßer else 12753aa99676SStefan Eßer printf 'Forcing NLS...\n\n' 12763aa99676SStefan Eßer fi 12773aa99676SStefan Eßer else 12783aa99676SStefan Eßer printf 'NLS works.\n\n' 12793aa99676SStefan Eßer 12803aa99676SStefan Eßer printf 'Testing gencat...\n' 128110041e99SStefan Eßer gencat "./en_US.cat" "$scriptdir/locales/en_US.msg" > /dev/null 2>&1 12823aa99676SStefan Eßer 12833aa99676SStefan Eßer err="$?" 12843aa99676SStefan Eßer 128510041e99SStefan Eßer rm -rf "./en_US.cat" 12863aa99676SStefan Eßer 12873aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 12883aa99676SStefan Eßer printf 'gencat does not work.\n' 12893aa99676SStefan Eßer if [ $force -eq 0 ]; then 12903aa99676SStefan Eßer printf 'Disabling NLS...\n\n' 12913aa99676SStefan Eßer nls=0 12923aa99676SStefan Eßer else 12933aa99676SStefan Eßer printf 'Forcing NLS...\n\n' 12943aa99676SStefan Eßer fi 12953aa99676SStefan Eßer else 12963aa99676SStefan Eßer 12973aa99676SStefan Eßer printf 'gencat works.\n\n' 12983aa99676SStefan Eßer 129944d4804dSStefan Eßer # It turns out that POSIX locales are really terrible, and running 130044d4804dSStefan Eßer # gencat on one machine is not guaranteed to make those cat files 130144d4804dSStefan Eßer # portable to another machine, so we had better warn the user here. 130244d4804dSStefan Eßer if [ "$HOSTCC" != "$CC" ] || [ "$OLDHOSTCFLAGS" != "$OLDCFLAGS" ]; then 13033aa99676SStefan Eßer printf 'Cross-compile detected.\n\n' 13043aa99676SStefan Eßer printf 'WARNING: Catalog files generated with gencat may not be portable\n' 13053aa99676SStefan Eßer printf ' across different architectures.\n\n' 13063aa99676SStefan Eßer fi 13073aa99676SStefan Eßer 13083aa99676SStefan Eßer if [ -z "$NLSPATH" ]; then 13093aa99676SStefan Eßer NLSPATH="/usr/share/locale/%L/%N" 13103aa99676SStefan Eßer fi 13113aa99676SStefan Eßer 13123aa99676SStefan Eßer install_locales_prereqs=" install_locales" 13133aa99676SStefan Eßer uninstall_locales_prereqs=" uninstall_locales" 13143aa99676SStefan Eßer 13153aa99676SStefan Eßer fi 13163aa99676SStefan Eßer 13173aa99676SStefan Eßer fi 13183aa99676SStefan Eßer 13193aa99676SStefan Eßer set -e 13203aa99676SStefan Eßer 13213aa99676SStefan Eßerelse 13223aa99676SStefan Eßer install_locales_prereqs="" 13233aa99676SStefan Eßer uninstall_locales_prereqs="" 1324cf7becd2SStefan Eßer all_locales=0 1325cf7becd2SStefan Eßerfi 1326cf7becd2SStefan Eßer 1327cf7becd2SStefan Eßerif [ "$nls" -ne 0 ] && [ "$all_locales" -ne 0 ]; then 1328cf7becd2SStefan Eßer install_locales="\$(LOCALE_INSTALL) -l \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" 1329cf7becd2SStefan Eßerelse 1330cf7becd2SStefan Eßer install_locales="\$(LOCALE_INSTALL) \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" 13313aa99676SStefan Eßerfi 13323aa99676SStefan Eßer 133344d4804dSStefan Eßer# Like the above tested locale support, this tests history. 13343aa99676SStefan Eßerif [ "$hist" -eq 1 ]; then 13353aa99676SStefan Eßer 13363aa99676SStefan Eßer set +e 13373aa99676SStefan Eßer 13383aa99676SStefan Eßer printf 'Testing history...\n' 13393aa99676SStefan Eßer 13403aa99676SStefan Eßer flags="-DBC_ENABLE_HISTORY=1 -DBC_ENABLED=$bc -DDC_ENABLED=$dc" 134144d4804dSStefan Eßer flags="$flags -DBC_ENABLE_NLS=$nls -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_AFL=0" 134210041e99SStefan Eßer flags="$flags -DBC_ENABLE_EXTRA_MATH=$extra_math -I$scriptdir/include/" 13433aa99676SStefan Eßer flags="$flags -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700" 13443aa99676SStefan Eßer 134510041e99SStefan Eßer "$CC" $CPPFLAGS $CFLAGS $flags -c "$scriptdir/src/history.c" -o "./history.o" > /dev/null 2>&1 13463aa99676SStefan Eßer 13473aa99676SStefan Eßer err="$?" 13483aa99676SStefan Eßer 134910041e99SStefan Eßer rm -rf "./history.o" 13503aa99676SStefan Eßer 13513aa99676SStefan Eßer # If this errors, it is probably because of building on Windows, 13523aa99676SStefan Eßer # and history is not supported on Windows, so disable it. 13533aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 13543aa99676SStefan Eßer printf 'History does not work.\n' 13553aa99676SStefan Eßer if [ $force -eq 0 ]; then 13563aa99676SStefan Eßer printf 'Disabling history...\n\n' 13573aa99676SStefan Eßer hist=0 13583aa99676SStefan Eßer else 13593aa99676SStefan Eßer printf 'Forcing history...\n\n' 13603aa99676SStefan Eßer fi 13613aa99676SStefan Eßer else 13623aa99676SStefan Eßer printf 'History works.\n\n' 13633aa99676SStefan Eßer fi 13643aa99676SStefan Eßer 13653aa99676SStefan Eßer set -e 13663aa99676SStefan Eßer 13673aa99676SStefan Eßerfi 13683aa99676SStefan Eßer 136944d4804dSStefan Eßer# We have to disable the history tests if it is disabled or valgrind is on. 137044d4804dSStefan Eßerif [ "$hist" -eq 0 ] || [ "$vg" -ne 0 ]; then 137144d4804dSStefan Eßer test_bc_history_prereqs=" test_bc_history_skip" 137244d4804dSStefan Eßer test_dc_history_prereqs=" test_dc_history_skip" 137344d4804dSStefan Eßer history_tests="@printf 'Skipping history tests...\\\\n'" 137444d4804dSStefan Eßerelse 137510041e99SStefan Eßer history_tests="@printf '\$(TEST_STARS)\\\\n\\\\nRunning history tests...\\\\n\\\\n' \&\& \$(TESTSDIR)/history.sh bc -a \&\& \$(TESTSDIR)/history.sh dc -a \&\& printf '\\\\nAll history tests passed.\\\\n\\\\n\$(TEST_STARS)\\\\n'" 137644d4804dSStefan Eßerfi 137744d4804dSStefan Eßer 137844d4804dSStefan Eßer# Test OpenBSD. This is not in an if statement because regardless of whatever 137944d4804dSStefan Eßer# the user says, we need to know if we are on OpenBSD to activate _BSD_SOURCE. 138044d4804dSStefan Eßer# No, I cannot `#define _BSD_SOURCE` in a header because OpenBSD's patched GCC 138144d4804dSStefan Eßer# and Clang complain that that is only allowed for system headers. Sigh....So we 138244d4804dSStefan Eßer# have to check at configure time and set it on the compiler command-line. And 138344d4804dSStefan Eßer# we have to set it because we also set _POSIX_C_SOURCE, which OpenBSD headers 138444d4804dSStefan Eßer# detect, and when they detect it, they turn off _BSD_SOURCE unless it is 138544d4804dSStefan Eßer# specifically requested. 138644d4804dSStefan Eßerset +e 138744d4804dSStefan Eßerprintf 'Testing for OpenBSD...\n' 138844d4804dSStefan Eßer 138944d4804dSStefan Eßerflags="-DBC_TEST_OPENBSD -DBC_ENABLE_AFL=0" 139010041e99SStefan Eßer"$CC" $CPPFLAGS $CFLAGS $flags "-I$scriptdir/include" -E "$scriptdir/include/status.h" > /dev/null 2>&1 139144d4804dSStefan Eßer 139244d4804dSStefan Eßererr="$?" 139344d4804dSStefan Eßer 139444d4804dSStefan Eßerif [ "$err" -ne 0 ]; then 139544d4804dSStefan Eßer printf 'On OpenBSD. Using _BSD_SOURCE.\n\n' 139644d4804dSStefan Eßer bsd="-D_BSD_SOURCE" 139744d4804dSStefan Eßerelse 139844d4804dSStefan Eßer printf 'Not on OpenBSD.\n\n' 139944d4804dSStefan Eßer bsd="" 140044d4804dSStefan Eßerfi 140144d4804dSStefan Eßer 140250696a6eSStefan Eßerif [ "$library" -eq 1 ]; then 140350696a6eSStefan Eßer bc_lib="" 140450696a6eSStefan Eßerfi 140550696a6eSStefan Eßer 140650696a6eSStefan Eßerif [ "$extra_math" -eq 1 ] && [ "$bc" -ne 0 ] && [ "$library" -eq 0 ]; then 14073aa99676SStefan Eßer BC_LIB2_O="\$(GEN_DIR)/lib2.o" 14083aa99676SStefan Eßerelse 14093aa99676SStefan Eßer BC_LIB2_O="" 14103aa99676SStefan Eßerfi 14113aa99676SStefan Eßer 141244d4804dSStefan Eßer# These lines set the appropriate targets based on whether `gen/strgen.c` or 141344d4804dSStefan Eßer# `gen/strgen.sh` is used. 14143aa99676SStefan EßerGEN="strgen" 14153aa99676SStefan EßerGEN_EXEC_TARGET="\$(HOSTCC) \$(HOSTCFLAGS) -o \$(GEN_EXEC) \$(GEN_C)" 141644d4804dSStefan EßerCLEAN_PREREQS=" clean_gen clean_coverage" 14173aa99676SStefan Eßer 14183aa99676SStefan Eßerif [ -z "${GEN_HOST+set}" ]; then 14193aa99676SStefan Eßer GEN_HOST=1 14203aa99676SStefan Eßerelse 14213aa99676SStefan Eßer if [ "$GEN_HOST" -eq 0 ]; then 14223aa99676SStefan Eßer GEN="strgen.sh" 14233aa99676SStefan Eßer GEN_EXEC_TARGET="@printf 'Do not need to build gen/strgen.c\\\\n'" 142444d4804dSStefan Eßer CLEAN_PREREQS=" clean_coverage" 14253aa99676SStefan Eßer fi 14263aa99676SStefan Eßerfi 14273aa99676SStefan Eßer 14283aa99676SStefan Eßermanpage_args="" 142910328f8bSStefan Eßerunneeded="" 143010328f8bSStefan Eßerheaders="\$(HEADERS)" 14313aa99676SStefan Eßer 143244d4804dSStefan Eßer# This series of if statements figure out what source files are *not* needed. 14333aa99676SStefan Eßerif [ "$extra_math" -eq 0 ]; then 14343aa99676SStefan Eßer manpage_args="E" 143510328f8bSStefan Eßer unneeded="$unneeded rand.c" 143610328f8bSStefan Eßerelse 143710328f8bSStefan Eßer headers="$headers \$(EXTRA_MATH_HEADERS)" 14383aa99676SStefan Eßerfi 14393aa99676SStefan Eßer 144044d4804dSStefan Eßer# All of these next if statements set the build type and mark certain source 144144d4804dSStefan Eßer# files as unneeded so that they won't have targets generated for them. 144244d4804dSStefan Eßer 14433aa99676SStefan Eßerif [ "$hist" -eq 0 ]; then 14443aa99676SStefan Eßer manpage_args="${manpage_args}H" 144510328f8bSStefan Eßer unneeded="$unneeded history.c" 144610328f8bSStefan Eßerelse 144710328f8bSStefan Eßer headers="$headers \$(HISTORY_HEADERS)" 14483aa99676SStefan Eßerfi 14493aa99676SStefan Eßer 14503aa99676SStefan Eßerif [ "$nls" -eq 0 ]; then 14513aa99676SStefan Eßer manpage_args="${manpage_args}N" 14523aa99676SStefan Eßerfi 14533aa99676SStefan Eßer 145450696a6eSStefan Eßerif [ "$bc" -eq 0 ]; then 145550696a6eSStefan Eßer unneeded="$unneeded bc.c bc_lex.c bc_parse.c" 145610328f8bSStefan Eßerelse 145710328f8bSStefan Eßer headers="$headers \$(BC_HEADERS)" 145850696a6eSStefan Eßerfi 145950696a6eSStefan Eßer 146050696a6eSStefan Eßerif [ "$dc" -eq 0 ]; then 146150696a6eSStefan Eßer unneeded="$unneeded dc.c dc_lex.c dc_parse.c" 146210328f8bSStefan Eßerelse 146310328f8bSStefan Eßer headers="$headers \$(DC_HEADERS)" 146450696a6eSStefan Eßerfi 146550696a6eSStefan Eßer 146610041e99SStefan Eßer# This convoluted mess does pull the version out. If you change the format of 146710041e99SStefan Eßer# include/version.h, you may have to change this line. 146810041e99SStefan Eßerversion=$(cat "$scriptdir/include/version.h" | grep "VERSION " - | awk '{ print $3 }' -) 146910041e99SStefan Eßer 147050696a6eSStefan Eßerif [ "$library" -ne 0 ]; then 147110041e99SStefan Eßer 147250696a6eSStefan Eßer unneeded="$unneeded args.c opt.c read.c file.c main.c" 147350696a6eSStefan Eßer unneeded="$unneeded lang.c lex.c parse.c program.c" 147450696a6eSStefan Eßer unneeded="$unneeded bc.c bc_lex.c bc_parse.c" 147550696a6eSStefan Eßer unneeded="$unneeded dc.c dc_lex.c dc_parse.c" 147610328f8bSStefan Eßer headers="$headers \$(LIBRARY_HEADERS)" 147710041e99SStefan Eßer 147810041e99SStefan Eßer if [ "$PC_PATH" != "" ]; then 147910041e99SStefan Eßer 148010041e99SStefan Eßer contents=$(cat "$scriptdir/bcl.pc.in") 148110041e99SStefan Eßer 148210041e99SStefan Eßer contents=$(replace "$contents" "INCLUDEDIR" "$INCLUDEDIR") 148310041e99SStefan Eßer contents=$(replace "$contents" "LIBDIR" "$LIBDIR") 148410041e99SStefan Eßer contents=$(replace "$contents" "VERSION" "$version") 148510041e99SStefan Eßer 148610041e99SStefan Eßer printf '%s\n' "$contents" > "./bcl.pc" 148710041e99SStefan Eßer 148810041e99SStefan Eßer pkg_config_install="\$(SAFE_INSTALL) \$(PC_INSTALL_ARGS) \"\$(BCL_PC)\" \"\$(DESTDIR)\$(PC_PATH)/\$(BCL_PC)\"" 148910041e99SStefan Eßer pkg_config_uninstall="\$(RM) -f \"\$(DESTDIR)\$(PC_PATH)/\$(BCL_PC)\"" 149010041e99SStefan Eßer 149150696a6eSStefan Eßer else 149210041e99SStefan Eßer 149310041e99SStefan Eßer pkg_config_install="" 149410041e99SStefan Eßer pkg_config_uninstall="" 149510041e99SStefan Eßer 149610041e99SStefan Eßer fi 149710041e99SStefan Eßer 149810041e99SStefan Eßerelse 149910041e99SStefan Eßer 150050696a6eSStefan Eßer unneeded="$unneeded library.c" 150110041e99SStefan Eßer 150210041e99SStefan Eßer PC_PATH="" 150310041e99SStefan Eßer pkg_config_install="" 150410041e99SStefan Eßer pkg_config_uninstall="" 150510041e99SStefan Eßer 150650696a6eSStefan Eßerfi 150750696a6eSStefan Eßer 150844d4804dSStefan Eßer# library.c is not needed under normal circumstances. 150944d4804dSStefan Eßerif [ "$unneeded" = "" ]; then 151044d4804dSStefan Eßer unneeded="library.c" 151144d4804dSStefan Eßerfi 151244d4804dSStefan Eßer 151344d4804dSStefan Eßer# This sets the appropriate manpage for a full build. 151410328f8bSStefan Eßerif [ "$manpage_args" = "" ]; then 151510328f8bSStefan Eßer manpage_args="A" 151610328f8bSStefan Eßerfi 151710328f8bSStefan Eßer 151810328f8bSStefan Eßerif [ "$vg" -ne 0 ]; then 151910328f8bSStefan Eßer memcheck=1 152010328f8bSStefan Eßerfi 152110328f8bSStefan Eßer 152244d4804dSStefan Eßerif [ "$bc_default_prompt" = "" ]; then 152344d4804dSStefan Eßer bc_default_prompt="$bc_default_tty_mode" 152444d4804dSStefan Eßerfi 152544d4804dSStefan Eßer 152644d4804dSStefan Eßerif [ "$dc_default_prompt" = "" ]; then 152744d4804dSStefan Eßer dc_default_prompt="$dc_default_tty_mode" 152844d4804dSStefan Eßerfi 152944d4804dSStefan Eßer 153044d4804dSStefan Eßer# Generate the test targets and prerequisites. 1531d43fa8efSStefan Eßerbc_tests=$(gen_std_test_targets bc) 153210328f8bSStefan Eßerbc_script_tests=$(gen_script_test_targets bc) 1533d43fa8efSStefan Eßerbc_err_tests=$(gen_err_test_targets bc) 1534d43fa8efSStefan Eßerdc_tests=$(gen_std_test_targets dc) 153510328f8bSStefan Eßerdc_script_tests=$(gen_script_test_targets dc) 1536d43fa8efSStefan Eßerdc_err_tests=$(gen_err_test_targets dc) 153710328f8bSStefan Eßer 15383aa99676SStefan Eßer# Print out the values; this is for debugging. 153910041e99SStefan Eßerprintf 'Version: %s\n' "$version" 154010041e99SStefan Eßer 15413aa99676SStefan Eßerif [ "$bc" -ne 0 ]; then 15423aa99676SStefan Eßer printf 'Building bc\n' 15433aa99676SStefan Eßerelse 15443aa99676SStefan Eßer printf 'Not building bc\n' 15453aa99676SStefan Eßerfi 15463aa99676SStefan Eßerif [ "$dc" -ne 0 ]; then 15473aa99676SStefan Eßer printf 'Building dc\n' 15483aa99676SStefan Eßerelse 15493aa99676SStefan Eßer printf 'Not building dc\n' 15503aa99676SStefan Eßerfi 15513aa99676SStefan Eßerprintf '\n' 155250696a6eSStefan Eßerprintf 'BC_ENABLE_LIBRARY=%s\n\n' "$library" 15533aa99676SStefan Eßerprintf 'BC_ENABLE_HISTORY=%s\n' "$hist" 15543aa99676SStefan Eßerprintf 'BC_ENABLE_EXTRA_MATH=%s\n' "$extra_math" 15553aa99676SStefan Eßerprintf 'BC_ENABLE_NLS=%s\n' "$nls" 155610328f8bSStefan Eßerprintf 'BC_ENABLE_AFL=%s\n' "$fuzz" 15573aa99676SStefan Eßerprintf '\n' 15583aa99676SStefan Eßerprintf 'BC_NUM_KARATSUBA_LEN=%s\n' "$karatsuba_len" 15593aa99676SStefan Eßerprintf '\n' 15603aa99676SStefan Eßerprintf 'CC=%s\n' "$CC" 15613aa99676SStefan Eßerprintf 'CFLAGS=%s\n' "$CFLAGS" 15623aa99676SStefan Eßerprintf 'HOSTCC=%s\n' "$HOSTCC" 15633aa99676SStefan Eßerprintf 'HOSTCFLAGS=%s\n' "$HOSTCFLAGS" 15643aa99676SStefan Eßerprintf 'CPPFLAGS=%s\n' "$CPPFLAGS" 15653aa99676SStefan Eßerprintf 'LDFLAGS=%s\n' "$LDFLAGS" 15663aa99676SStefan Eßerprintf 'PREFIX=%s\n' "$PREFIX" 15673aa99676SStefan Eßerprintf 'BINDIR=%s\n' "$BINDIR" 156850696a6eSStefan Eßerprintf 'INCLUDEDIR=%s\n' "$INCLUDEDIR" 156950696a6eSStefan Eßerprintf 'LIBDIR=%s\n' "$LIBDIR" 15703aa99676SStefan Eßerprintf 'DATAROOTDIR=%s\n' "$DATAROOTDIR" 15713aa99676SStefan Eßerprintf 'DATADIR=%s\n' "$DATADIR" 15723aa99676SStefan Eßerprintf 'MANDIR=%s\n' "$MANDIR" 15733aa99676SStefan Eßerprintf 'MAN1DIR=%s\n' "$MAN1DIR" 157450696a6eSStefan Eßerprintf 'MAN3DIR=%s\n' "$MAN3DIR" 15753aa99676SStefan Eßerprintf 'NLSPATH=%s\n' "$NLSPATH" 157610041e99SStefan Eßerprintf 'PC_PATH=%s\n' "$PC_PATH" 15773aa99676SStefan Eßerprintf 'EXECSUFFIX=%s\n' "$EXECSUFFIX" 15783aa99676SStefan Eßerprintf 'EXECPREFIX=%s\n' "$EXECPREFIX" 15793aa99676SStefan Eßerprintf 'DESTDIR=%s\n' "$DESTDIR" 15803aa99676SStefan Eßerprintf 'LONG_BIT=%s\n' "$LONG_BIT" 15813aa99676SStefan Eßerprintf 'GEN_HOST=%s\n' "$GEN_HOST" 15823aa99676SStefan Eßerprintf 'GEN_EMU=%s\n' "$GEN_EMU" 158344d4804dSStefan Eßerprintf '\n' 158444d4804dSStefan Eßerprintf 'Setting Defaults\n' 158544d4804dSStefan Eßerprintf '================\n' 158644d4804dSStefan Eßerprintf 'bc.banner=%s\n' "$bc_default_banner" 158744d4804dSStefan Eßerprintf 'bc.sigint_reset=%s\n' "$bc_default_sigint_reset" 158844d4804dSStefan Eßerprintf 'dc.sigint_reset=%s\n' "$dc_default_sigint_reset" 158944d4804dSStefan Eßerprintf 'bc.tty_mode=%s\n' "$bc_default_tty_mode" 159044d4804dSStefan Eßerprintf 'dc.tty_mode=%s\n' "$dc_default_tty_mode" 159144d4804dSStefan Eßerprintf 'bc.prompt=%s\n' "$bc_default_prompt" 159244d4804dSStefan Eßerprintf 'dc.prompt=%s\n' "$dc_default_prompt" 159310041e99SStefan Eßerprintf 'bc.expr_exit=%s\n' "$bc_default_expr_exit" 159410041e99SStefan Eßerprintf 'dc.expr_exit=%s\n' "$dc_default_expr_exit" 159544d4804dSStefan Eßer 159644d4804dSStefan Eßer# This is where the real work begins. This is the point at which the Makefile.in 159744d4804dSStefan Eßer# template is edited and output to the Makefile. 15983aa99676SStefan Eßer 15993aa99676SStefan Eßercontents=$(cat "$scriptdir/Makefile.in") 16003aa99676SStefan Eßer 16013aa99676SStefan Eßerneedle="WARNING" 16023aa99676SStefan Eßerreplacement='*** WARNING: Autogenerated from Makefile.in. DO NOT MODIFY ***' 16033aa99676SStefan Eßer 16043aa99676SStefan Eßercontents=$(replace "$contents" "$needle" "$replacement") 16053aa99676SStefan Eßer 160644d4804dSStefan Eßer# The contents are edited to have the list of files to build. 160710328f8bSStefan Eßercontents=$(gen_file_list "$contents" $unneeded) 160810328f8bSStefan Eßer 160910328f8bSStefan EßerSRC_TARGETS="" 161010328f8bSStefan Eßer 161144d4804dSStefan Eßer# This line and loop generates the individual targets for source files. I used 161244d4804dSStefan Eßer# to just use an implicit target, but that was found to be inadequate when I 161344d4804dSStefan Eßer# added the library. 161410328f8bSStefan Eßersrc_files=$(find_src_files $unneeded) 161510328f8bSStefan Eßer 161610328f8bSStefan Eßerfor f in $src_files; do 161710328f8bSStefan Eßer o=$(replace_ext "$f" "c" "o") 161810041e99SStefan Eßer o=$(basename "$o") 161910041e99SStefan Eßer SRC_TARGETS=$(printf '%s\n\nsrc/%s: src %s %s\n\t$(CC) $(CFLAGS) -o src/%s -c %s\n' \ 162010328f8bSStefan Eßer "$SRC_TARGETS" "$o" "$headers" "$f" "$o" "$f") 162110328f8bSStefan Eßerdone 162210328f8bSStefan Eßer 162344d4804dSStefan Eßer# Replace all the placeholders. 162410041e99SStefan Eßercontents=$(replace "$contents" "ROOTDIR" "$scriptdir") 162510041e99SStefan Eßercontents=$(replace "$contents" "BUILDDIR" "$builddir") 162610041e99SStefan Eßer 162710328f8bSStefan Eßercontents=$(replace "$contents" "HEADERS" "$headers") 162810328f8bSStefan Eßer 16293aa99676SStefan Eßercontents=$(replace "$contents" "BC_ENABLED" "$bc") 16303aa99676SStefan Eßercontents=$(replace "$contents" "DC_ENABLED" "$dc") 163110328f8bSStefan Eßer 163210328f8bSStefan Eßercontents=$(replace "$contents" "BC_ALL_TESTS" "$bc_test") 1633d43fa8efSStefan Eßercontents=$(replace "$contents" "BC_ALL_TESTS_NP" "$bc_test_np") 163410328f8bSStefan Eßercontents=$(replace "$contents" "BC_TESTS" "$bc_tests") 163510328f8bSStefan Eßercontents=$(replace "$contents" "BC_SCRIPT_TESTS" "$bc_script_tests") 1636d43fa8efSStefan Eßercontents=$(replace "$contents" "BC_ERROR_TESTS" "$bc_err_tests") 163710328f8bSStefan Eßercontents=$(replace "$contents" "BC_TEST_EXEC" "$bc_test_exec") 163810328f8bSStefan Eßercontents=$(replace "$contents" "TIMECONST_ALL_TESTS" "$timeconst") 163910328f8bSStefan Eßer 164010328f8bSStefan Eßercontents=$(replace "$contents" "DC_ALL_TESTS" "$dc_test") 1641d43fa8efSStefan Eßercontents=$(replace "$contents" "DC_ALL_TESTS_NP" "$dc_test_np") 164210328f8bSStefan Eßercontents=$(replace "$contents" "DC_TESTS" "$dc_tests") 164310328f8bSStefan Eßercontents=$(replace "$contents" "DC_SCRIPT_TESTS" "$dc_script_tests") 1644d43fa8efSStefan Eßercontents=$(replace "$contents" "DC_ERROR_TESTS" "$dc_err_tests") 164510328f8bSStefan Eßercontents=$(replace "$contents" "DC_TEST_EXEC" "$dc_test_exec") 16463aa99676SStefan Eßer 16477e5c51e5SStefan Eßercontents=$(replace "$contents" "BUILD_TYPE" "$manpage_args") 16487e5c51e5SStefan Eßer 164950696a6eSStefan Eßercontents=$(replace "$contents" "LIBRARY" "$library") 16503aa99676SStefan Eßercontents=$(replace "$contents" "HISTORY" "$hist") 16513aa99676SStefan Eßercontents=$(replace "$contents" "EXTRA_MATH" "$extra_math") 16523aa99676SStefan Eßercontents=$(replace "$contents" "NLS" "$nls") 165310328f8bSStefan Eßercontents=$(replace "$contents" "FUZZ" "$fuzz") 165410328f8bSStefan Eßercontents=$(replace "$contents" "MEMCHECK" "$memcheck") 165510328f8bSStefan Eßer 16563aa99676SStefan Eßercontents=$(replace "$contents" "BC_LIB_O" "$bc_lib") 16573aa99676SStefan Eßercontents=$(replace "$contents" "BC_HELP_O" "$bc_help") 16583aa99676SStefan Eßercontents=$(replace "$contents" "DC_HELP_O" "$dc_help") 16593aa99676SStefan Eßercontents=$(replace "$contents" "BC_LIB2_O" "$BC_LIB2_O") 16603aa99676SStefan Eßercontents=$(replace "$contents" "KARATSUBA_LEN" "$karatsuba_len") 16613aa99676SStefan Eßer 16623aa99676SStefan Eßercontents=$(replace "$contents" "NLSPATH" "$NLSPATH") 16633aa99676SStefan Eßercontents=$(replace "$contents" "DESTDIR" "$destdir") 16643aa99676SStefan Eßercontents=$(replace "$contents" "EXECSUFFIX" "$EXECSUFFIX") 16653aa99676SStefan Eßercontents=$(replace "$contents" "EXECPREFIX" "$EXECPREFIX") 16663aa99676SStefan Eßercontents=$(replace "$contents" "BINDIR" "$BINDIR") 166750696a6eSStefan Eßercontents=$(replace "$contents" "INCLUDEDIR" "$INCLUDEDIR") 166850696a6eSStefan Eßercontents=$(replace "$contents" "LIBDIR" "$LIBDIR") 16693aa99676SStefan Eßercontents=$(replace "$contents" "MAN1DIR" "$MAN1DIR") 167050696a6eSStefan Eßercontents=$(replace "$contents" "MAN3DIR" "$MAN3DIR") 16713aa99676SStefan Eßercontents=$(replace "$contents" "CFLAGS" "$CFLAGS") 16723aa99676SStefan Eßercontents=$(replace "$contents" "HOSTCFLAGS" "$HOSTCFLAGS") 16733aa99676SStefan Eßercontents=$(replace "$contents" "CPPFLAGS" "$CPPFLAGS") 16743aa99676SStefan Eßercontents=$(replace "$contents" "LDFLAGS" "$LDFLAGS") 16753aa99676SStefan Eßercontents=$(replace "$contents" "CC" "$CC") 16763aa99676SStefan Eßercontents=$(replace "$contents" "HOSTCC" "$HOSTCC") 16773aa99676SStefan Eßercontents=$(replace "$contents" "COVERAGE_OUTPUT" "$COVERAGE_OUTPUT") 16783aa99676SStefan Eßercontents=$(replace "$contents" "COVERAGE_PREREQS" "$COVERAGE_PREREQS") 16793aa99676SStefan Eßercontents=$(replace "$contents" "INSTALL_PREREQS" "$install_prereqs") 168050696a6eSStefan Eßercontents=$(replace "$contents" "INSTALL_MAN_PREREQS" "$install_man_prereqs") 1681cf7becd2SStefan Eßercontents=$(replace "$contents" "INSTALL_LOCALES" "$install_locales") 16823aa99676SStefan Eßercontents=$(replace "$contents" "INSTALL_LOCALES_PREREQS" "$install_locales_prereqs") 16833aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_MAN_PREREQS" "$uninstall_man_prereqs") 16843aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_PREREQS" "$uninstall_prereqs") 16853aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_LOCALES_PREREQS" "$uninstall_locales_prereqs") 16863aa99676SStefan Eßer 168710041e99SStefan Eßercontents=$(replace "$contents" "PC_PATH" "$PC_PATH") 168810041e99SStefan Eßercontents=$(replace "$contents" "PKG_CONFIG_INSTALL" "$pkg_config_install") 168910041e99SStefan Eßercontents=$(replace "$contents" "PKG_CONFIG_UNINSTALL" "$pkg_config_uninstall") 169010041e99SStefan Eßer 169110328f8bSStefan Eßercontents=$(replace "$contents" "DEFAULT_TARGET" "$default_target") 169210328f8bSStefan Eßercontents=$(replace "$contents" "DEFAULT_TARGET_PREREQS" "$default_target_prereqs") 169310328f8bSStefan Eßercontents=$(replace "$contents" "DEFAULT_TARGET_CMD" "$default_target_cmd") 169410328f8bSStefan Eßercontents=$(replace "$contents" "SECOND_TARGET" "$second_target") 169510328f8bSStefan Eßercontents=$(replace "$contents" "SECOND_TARGET_PREREQS" "$second_target_prereqs") 169610328f8bSStefan Eßercontents=$(replace "$contents" "SECOND_TARGET_CMD" "$second_target_cmd") 169710328f8bSStefan Eßer 169850696a6eSStefan Eßercontents=$(replace "$contents" "ALL_PREREQ" "$ALL_PREREQ") 169910328f8bSStefan Eßercontents=$(replace "$contents" "BC_EXEC_PREREQ" "$bc_exec_prereq") 170010328f8bSStefan Eßercontents=$(replace "$contents" "BC_EXEC_CMD" "$bc_exec_cmd") 170110328f8bSStefan Eßercontents=$(replace "$contents" "DC_EXEC_PREREQ" "$dc_exec_prereq") 170210328f8bSStefan Eßercontents=$(replace "$contents" "DC_EXEC_CMD" "$dc_exec_cmd") 170350696a6eSStefan Eßer 17043aa99676SStefan Eßercontents=$(replace "$contents" "EXECUTABLES" "$executables") 17053aa99676SStefan Eßercontents=$(replace "$contents" "MAIN_EXEC" "$main_exec") 17063aa99676SStefan Eßercontents=$(replace "$contents" "EXEC" "$executable") 170750696a6eSStefan Eßercontents=$(replace "$contents" "TESTS" "$tests") 17083aa99676SStefan Eßer 170944d4804dSStefan Eßercontents=$(replace "$contents" "BC_HISTORY_TEST_PREREQS" "$test_bc_history_prereqs") 171044d4804dSStefan Eßercontents=$(replace "$contents" "DC_HISTORY_TEST_PREREQS" "$test_dc_history_prereqs") 171144d4804dSStefan Eßercontents=$(replace "$contents" "HISTORY_TESTS" "$history_tests") 17123aa99676SStefan Eßer 17133aa99676SStefan Eßercontents=$(replace "$contents" "VG_BC_TEST" "$vg_bc_test") 17143aa99676SStefan Eßercontents=$(replace "$contents" "VG_DC_TEST" "$vg_dc_test") 17153aa99676SStefan Eßer 17163aa99676SStefan Eßercontents=$(replace "$contents" "TIMECONST" "$timeconst") 17173aa99676SStefan Eßer 17183aa99676SStefan Eßercontents=$(replace "$contents" "KARATSUBA" "$karatsuba") 17193aa99676SStefan Eßercontents=$(replace "$contents" "KARATSUBA_TEST" "$karatsuba_test") 17203aa99676SStefan Eßer 17213aa99676SStefan Eßercontents=$(replace "$contents" "LONG_BIT" "$LONG_BIT") 17223aa99676SStefan Eßercontents=$(replace "$contents" "LONG_BIT_DEFINE" "$LONG_BIT_DEFINE") 17233aa99676SStefan Eßer 17243aa99676SStefan Eßercontents=$(replace "$contents" "GEN" "$GEN") 17253aa99676SStefan Eßercontents=$(replace "$contents" "GEN_EXEC_TARGET" "$GEN_EXEC_TARGET") 17263aa99676SStefan Eßercontents=$(replace "$contents" "CLEAN_PREREQS" "$CLEAN_PREREQS") 17273aa99676SStefan Eßercontents=$(replace "$contents" "GEN_EMU" "$GEN_EMU") 17283aa99676SStefan Eßer 172944d4804dSStefan Eßercontents=$(replace "$contents" "BSD" "$bsd") 173044d4804dSStefan Eßer 173144d4804dSStefan Eßercontents=$(replace "$contents" "BC_DEFAULT_BANNER" "$bc_default_banner") 173244d4804dSStefan Eßercontents=$(replace "$contents" "BC_DEFAULT_SIGINT_RESET" "$bc_default_sigint_reset") 173344d4804dSStefan Eßercontents=$(replace "$contents" "DC_DEFAULT_SIGINT_RESET" "$dc_default_sigint_reset") 173444d4804dSStefan Eßercontents=$(replace "$contents" "BC_DEFAULT_TTY_MODE" "$bc_default_tty_mode") 173544d4804dSStefan Eßercontents=$(replace "$contents" "DC_DEFAULT_TTY_MODE" "$dc_default_tty_mode") 173644d4804dSStefan Eßercontents=$(replace "$contents" "BC_DEFAULT_PROMPT" "$bc_default_prompt") 173744d4804dSStefan Eßercontents=$(replace "$contents" "DC_DEFAULT_PROMPT" "$dc_default_prompt") 173810041e99SStefan Eßercontents=$(replace "$contents" "BC_DEFAULT_EXPR_EXIT" "$bc_default_expr_exit") 173910041e99SStefan Eßercontents=$(replace "$contents" "DC_DEFAULT_EXPR_EXIT" "$dc_default_expr_exit") 174044d4804dSStefan Eßer 174144d4804dSStefan Eßer# Do the first print to the Makefile. 174210041e99SStefan Eßerprintf '%s\n%s\n\n' "$contents" "$SRC_TARGETS" > "Makefile" 174310328f8bSStefan Eßer 174444d4804dSStefan Eßer# Generate the individual test targets. 174510328f8bSStefan Eßerif [ "$bc" -ne 0 ]; then 1746d43fa8efSStefan Eßer gen_std_tests bc "$extra_math" "$time_tests" $bc_test_exec 174710328f8bSStefan Eßer gen_script_tests bc "$extra_math" "$generate_tests" "$time_tests" $bc_test_exec 1748d43fa8efSStefan Eßer gen_err_tests bc $bc_test_exec 174910328f8bSStefan Eßerfi 175010328f8bSStefan Eßer 175110328f8bSStefan Eßerif [ "$dc" -ne 0 ]; then 1752d43fa8efSStefan Eßer gen_std_tests dc "$extra_math" "$time_tests" $dc_test_exec 175310328f8bSStefan Eßer gen_script_tests dc "$extra_math" "$generate_tests" "$time_tests" $dc_test_exec 1754d43fa8efSStefan Eßer gen_err_tests dc $dc_test_exec 175510328f8bSStefan Eßerfi 17563aa99676SStefan Eßer 175744d4804dSStefan Eßer# Copy the correct manuals to the expected places. 175810041e99SStefan Eßermkdir -p manuals 175910041e99SStefan Eßercp -f "$scriptdir/manuals/bc/$manpage_args.1.md" manuals/bc.1.md 176010041e99SStefan Eßercp -f "$scriptdir/manuals/bc/$manpage_args.1" manuals/bc.1 176110041e99SStefan Eßercp -f "$scriptdir/manuals/dc/$manpage_args.1.md" manuals/dc.1.md 176210041e99SStefan Eßercp -f "$scriptdir/manuals/dc/$manpage_args.1" manuals/dc.1 17633aa99676SStefan Eßer 17643aa99676SStefan Eßermake clean > /dev/null 1765