13aa99676SStefan Eßer#! /bin/sh 23aa99676SStefan Eßer# 33aa99676SStefan Eßer# SPDX-License-Identifier: BSD-2-Clause 43aa99676SStefan Eßer# 5fdc4a7c8SStefan Eßer# Copyright (c) 2018-2025 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. 3900698711SStefan 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 46d101cdd6SStefan 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" 55d101cdd6SStefan Eßer printf ' %s [-a|-bD|-dB|-c] [-CeEfgGHilmMNPrtTvz] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\\\n' "$script" 56d101cdd6SStefan Eßer printf ' [-s SETTING] [-S SETTING] [-p TYPE]\n' 573aa99676SStefan Eßer printf ' %s \\\n' "$script" 58fdc4a7c8SStefan Eßer printf ' [--library|--bc-only --disable-dc|--dc-only --disable-bc] \\\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' 61d101cdd6SStefan Eßer printf ' [--enable-editline] [--enable-readline] [--enable-internal-history] \\\n' 62d101cdd6SStefan Eßer printf ' [--disable-problematic-tests] [--install-all-locales] \\\n' 63d101cdd6SStefan Eßer printf ' [--opt=OPT_LEVEL] [--karatsuba-len=KARATSUBA_LEN] \\\n' 6410041e99SStefan Eßer printf ' [--set-default-on=SETTING] [--set-default-off=SETTING] \\\n' 65d101cdd6SStefan Eßer printf ' [--predefined-build-type=TYPE] \\\n' 663aa99676SStefan Eßer printf ' [--prefix=PREFIX] [--bindir=BINDIR] [--datarootdir=DATAROOTDIR] \\\n' 673aa99676SStefan Eßer printf ' [--datadir=DATADIR] [--mandir=MANDIR] [--man1dir=MAN1DIR] \\\n' 68d101cdd6SStefan Eßer printf ' [--man3dir=MAN3DIR]\n' 69d101cdd6SStefan Eßer 70d101cdd6SStefan Eßer if [ "$_usage_val" -ne 0 ]; then 7112e0d316SStefan Eßer exit "$_usage_val" 72d101cdd6SStefan Eßer fi 73d101cdd6SStefan Eßer 743aa99676SStefan Eßer printf '\n' 7550696a6eSStefan Eßer printf ' -a, --library\n' 7644d4804dSStefan Eßer printf ' Build the libbcl instead of the programs. This is meant to be used with\n' 77fdc4a7c8SStefan Eßer printf ' other software like programming languages that want to make use of the\n' 7850696a6eSStefan Eßer printf ' parsing and math capabilities. This option will install headers using\n' 7950696a6eSStefan Eßer printf ' `make install`.\n' 803aa99676SStefan Eßer printf ' -b, --bc-only\n' 8150696a6eSStefan Eßer printf ' Build bc only. It is an error if "-d", "--dc-only", "-B", or\n' 8250696a6eSStefan Eßer printf ' "--disable-bc" are specified too.\n' 833aa99676SStefan Eßer printf ' -B, --disable-bc\n' 843aa99676SStefan Eßer printf ' Disable bc. It is an error if "-b", "--bc-only", "-D", or "--disable-dc"\n' 853aa99676SStefan Eßer printf ' are specified too.\n' 8610328f8bSStefan Eßer printf ' -C, --disable-clean\n' 8710328f8bSStefan Eßer printf ' Disable the clean that configure.sh does before configure.\n' 883aa99676SStefan Eßer printf ' -d, --dc-only\n' 8950696a6eSStefan Eßer printf ' Build dc only. It is an error if "-b", "--bc-only", "-D", or\n' 9050696a6eSStefan Eßer printf ' "--disable-dc" are specified too.\n' 913aa99676SStefan Eßer printf ' -D, --disable-dc\n' 9250696a6eSStefan Eßer printf ' Disable dc. It is an error if "-d", "--dc-only", "-B", or "--disable-bc"\n' 933aa99676SStefan Eßer printf ' are specified too.\n' 9478bc019dSStefan Eßer printf ' -e, --enable-editline\n' 9578bc019dSStefan Eßer printf ' Enable the use of libedit/editline. This is meant for those users that\n' 96d101cdd6SStefan Eßer printf ' want vi-like or Emacs-like behavior in history. This option is ignored\n' 97d101cdd6SStefan Eßer printf ' if history is disabled. If the -r or -i options are given with this\n' 98d101cdd6SStefan Eßer printf ' option, the last occurrence of all of the three is used.\n' 993aa99676SStefan Eßer printf ' -E, --disable-extra-math\n' 1003aa99676SStefan Eßer printf ' Disable extra math. This includes: "$" operator (truncate to integer),\n' 1013aa99676SStefan Eßer printf ' "@" operator (set number of decimal places), and r(x, p) (rounding\n' 1023aa99676SStefan Eßer printf ' function). Additionally, this option disables the extra printing\n' 1033aa99676SStefan Eßer printf ' functions in the math library.\n' 1043aa99676SStefan Eßer printf ' -f, --force\n' 1053aa99676SStefan Eßer printf ' Force use of all enabled options, even if they do not work. This\n' 1063aa99676SStefan Eßer printf ' option is to allow the maintainer a way to test that certain options\n' 10700698711SStefan Eßer printf ' are not failing invisibly. (Development only.)\n' 1083aa99676SStefan Eßer printf ' -g, --debug\n' 1093aa99676SStefan Eßer printf ' Build in debug mode. Adds the "-g" flag, and if there are no\n' 1103aa99676SStefan Eßer printf ' other CFLAGS, and "-O" was not given, this also adds the "-O0"\n' 1113aa99676SStefan Eßer printf ' flag. If this flag is *not* given, "-DNDEBUG" is added to CPPFLAGS\n' 1123aa99676SStefan Eßer printf ' and a strip flag is added to the link stage.\n' 1133aa99676SStefan Eßer printf ' -G, --disable-generated-tests\n' 1143aa99676SStefan Eßer printf ' Disable generating tests. This is for platforms that do not have a\n' 1153aa99676SStefan Eßer printf ' GNU bc-compatible bc to generate tests.\n' 1163aa99676SStefan Eßer printf ' -h, --help\n' 1173aa99676SStefan Eßer printf ' Print this help message and exit.\n' 1183aa99676SStefan Eßer printf ' -H, --disable-history\n' 1193aa99676SStefan Eßer printf ' Disable history.\n' 120d101cdd6SStefan Eßer printf ' -i, --enable-internal-history\n' 121d101cdd6SStefan Eßer printf ' Enable the internal history implementation and do not depend on either\n' 122d101cdd6SStefan Eßer printf ' editline or readline. This option is ignored if history is disabled.\n' 123d101cdd6SStefan Eßer printf ' If this option is given along with -e and -r, the last occurrence of\n' 124d101cdd6SStefan Eßer printf ' all of the three is used.\n' 1253aa99676SStefan Eßer printf ' -k KARATSUBA_LEN, --karatsuba-len KARATSUBA_LEN\n' 126a970610aSStefan Eßer printf ' Set the karatsuba length to KARATSUBA_LEN (default is 32).\n' 1273aa99676SStefan Eßer printf ' It is an error if KARATSUBA_LEN is not a number or is less than 16.\n' 128cf7becd2SStefan Eßer printf ' -l, --install-all-locales\n' 129cf7becd2SStefan Eßer printf ' Installs all locales, regardless of how many are on the system. This\n' 130cf7becd2SStefan Eßer printf ' option is useful for package maintainers who want to make sure that\n' 131cf7becd2SStefan Eßer printf ' a package contains all of the locales that end users might need.\n' 1323aa99676SStefan Eßer printf ' -M, --disable-man-pages\n' 1333aa99676SStefan Eßer printf ' Disable installing manpages.\n' 1343aa99676SStefan Eßer printf ' -N, --disable-nls\n' 1353aa99676SStefan Eßer printf ' Disable POSIX locale (NLS) support.\n' 136d101cdd6SStefan Eßer printf ' ***WARNING***: Locales ignore the prefix because they *must* be\n' 137d101cdd6SStefan Eßer printf ' installed at a fixed location to work at all. If you do not want that\n' 138d101cdd6SStefan Eßer printf ' to happen, you must disable locales (NLS) completely.\n' 1393aa99676SStefan Eßer printf ' -O OPT_LEVEL, --opt OPT_LEVEL\n' 1403aa99676SStefan Eßer printf ' Set the optimization level. This can also be included in the CFLAGS,\n' 1413aa99676SStefan Eßer printf ' but it is provided, so maintainers can build optimized debug builds.\n' 1423aa99676SStefan Eßer printf ' This is passed through to the compiler, so it must be supported.\n' 143d101cdd6SStefan Eßer printf ' -p TYPE, --predefined-build-type=TYPE\n' 144d101cdd6SStefan Eßer printf ' Sets a given predefined build type with specific defaults. This is for\n' 145d101cdd6SStefan Eßer printf ' easy setting of predefined builds. For example, to get a build that\n' 146d101cdd6SStefan Eßer printf ' acts like the GNU bc by default, TYPE should be "GNU" (without the\n' 147d101cdd6SStefan Eßer printf ' quotes) This option *must* come before any others that might change the\n' 148d101cdd6SStefan Eßer printf ' build options. Currently supported values for TYPE include: "BSD" (for\n' 149d101cdd6SStefan Eßer printf ' matching the BSD bc and BSD dc), "GNU" (for matching the GNU bc and\n' 150d101cdd6SStefan Eßer printf ' dc), "GDH" (for the preferred build of the author, Gavin D. Howard),\n' 151d101cdd6SStefan Eßer printf ' and "DBG" (for the preferred debug build of the author). This will\n' 152d101cdd6SStefan Eßer printf ' also automatically enable a release build (except for "DBG").\n' 153d101cdd6SStefan Eßer printf ' -P, --disable-problematic-tests\n' 154d101cdd6SStefan Eßer printf ' Disables problematic tests. These tests usually include tests that\n' 155d101cdd6SStefan Eßer printf ' can cause a SIGKILL because of too much memory usage.\n' 15678bc019dSStefan Eßer printf ' -r, --enable-readline\n' 15778bc019dSStefan Eßer printf ' Enable the use of libreadline/readline. This is meant for those users\n' 15878bc019dSStefan Eßer printf ' that want vi-like or Emacs-like behavior in history. This option is\n' 159d101cdd6SStefan Eßer printf ' ignored if history is disabled. If this option is given along with -e\n' 160a970610aSStefan Eßer printf ' and -i, the last occurrence of all of the three is used.\n' 16144d4804dSStefan Eßer printf ' -s SETTING, --set-default-on SETTING\n' 16244d4804dSStefan Eßer printf ' Set the default named by SETTING to on. See below for possible values\n' 16344d4804dSStefan Eßer printf ' for SETTING. For multiple instances of the -s or -S for the the same\n' 16444d4804dSStefan Eßer printf ' setting, the last one is used.\n' 16544d4804dSStefan Eßer printf ' -S SETTING, --set-default-off SETTING\n' 16644d4804dSStefan Eßer printf ' Set the default named by SETTING to off. See below for possible values\n' 16744d4804dSStefan Eßer printf ' for SETTING. For multiple instances of the -s or -S for the the same\n' 16844d4804dSStefan Eßer printf ' setting, the last one is used.\n' 1693aa99676SStefan Eßer printf ' -T, --disable-strip\n' 1703aa99676SStefan Eßer printf ' Disable stripping symbols from the compiled binary or binaries.\n' 1713aa99676SStefan Eßer printf ' Stripping symbols only happens when debug mode is off.\n' 1723aa99676SStefan Eßer printf ' --prefix PREFIX\n' 1733aa99676SStefan Eßer printf ' The prefix to install to. Overrides "$PREFIX" if it exists.\n' 1743aa99676SStefan Eßer printf ' If PREFIX is "/usr", install path will be "/usr/bin".\n' 1753aa99676SStefan Eßer printf ' Default is "/usr/local".\n' 176d101cdd6SStefan Eßer printf ' ***WARNING***: Locales ignore the prefix because they *must* be\n' 177d101cdd6SStefan Eßer printf ' installed at a fixed location to work at all. If you do not want that to\n' 178d101cdd6SStefan Eßer printf ' happen, you must disable locales (NLS) completely.\n' 1793aa99676SStefan Eßer printf ' --bindir BINDIR\n' 18050696a6eSStefan Eßer printf ' The directory to install binaries in. Overrides "$BINDIR" if it exists.\n' 1813aa99676SStefan Eßer printf ' Default is "$PREFIX/bin".\n' 18250696a6eSStefan Eßer printf ' --includedir INCLUDEDIR\n' 18350696a6eSStefan Eßer printf ' The directory to install headers in. Overrides "$INCLUDEDIR" if it\n' 18450696a6eSStefan Eßer printf ' exists. Default is "$PREFIX/include".\n' 18550696a6eSStefan Eßer printf ' --libdir LIBDIR\n' 18650696a6eSStefan Eßer printf ' The directory to install libraries in. Overrides "$LIBDIR" if it exists.\n' 18750696a6eSStefan Eßer printf ' Default is "$PREFIX/lib".\n' 1883aa99676SStefan Eßer printf ' --datarootdir DATAROOTDIR\n' 1893aa99676SStefan Eßer printf ' The root location for data files. Overrides "$DATAROOTDIR" if it exists.\n' 1903aa99676SStefan Eßer printf ' Default is "$PREFIX/share".\n' 1913aa99676SStefan Eßer printf ' --datadir DATADIR\n' 1923aa99676SStefan Eßer printf ' The location for data files. Overrides "$DATADIR" if it exists.\n' 1933aa99676SStefan Eßer printf ' Default is "$DATAROOTDIR".\n' 1943aa99676SStefan Eßer printf ' --mandir MANDIR\n' 1953aa99676SStefan Eßer printf ' The location to install manpages to. Overrides "$MANDIR" if it exists.\n' 1963aa99676SStefan Eßer printf ' Default is "$DATADIR/man".\n' 1973aa99676SStefan Eßer printf ' --man1dir MAN1DIR\n' 1983aa99676SStefan Eßer printf ' The location to install Section 1 manpages to. Overrides "$MAN1DIR" if\n' 1993aa99676SStefan Eßer printf ' it exists. Default is "$MANDIR/man1".\n' 20050696a6eSStefan Eßer printf ' --man3dir MAN3DIR\n' 20150696a6eSStefan Eßer printf ' The location to install Section 3 manpages to. Overrides "$MAN3DIR" if\n' 20250696a6eSStefan Eßer printf ' it exists. Default is "$MANDIR/man3".\n' 2033aa99676SStefan Eßer printf '\n' 2043aa99676SStefan Eßer printf 'In addition, the following environment variables are used:\n' 2053aa99676SStefan Eßer printf '\n' 2063aa99676SStefan Eßer printf ' CC C compiler. Must be compatible with POSIX c99. If there is a\n' 2073aa99676SStefan Eßer printf ' space in the basename of the compiler, the items after the\n' 2083aa99676SStefan Eßer printf ' first space are assumed to be compiler flags, and in that case,\n' 2093aa99676SStefan Eßer printf ' the flags are automatically moved into CFLAGS. Default is\n' 2103aa99676SStefan Eßer printf ' "c99".\n' 2113aa99676SStefan Eßer printf ' HOSTCC Host C compiler. Must be compatible with POSIX c99. If there is\n' 2123aa99676SStefan Eßer printf ' a space in the basename of the compiler, the items after the\n' 2133aa99676SStefan Eßer printf ' first space are assumed to be compiler flags, and in the case,\n' 2143aa99676SStefan Eßer printf ' the flags are automatically moved into HOSTCFLAGS. Default is\n' 2153aa99676SStefan Eßer printf ' "$CC".\n' 2163aa99676SStefan Eßer printf ' HOST_CC Same as HOSTCC. If HOSTCC also exists, it is used.\n' 2173aa99676SStefan Eßer printf ' CFLAGS C compiler flags.\n' 2183aa99676SStefan Eßer printf ' HOSTCFLAGS CFLAGS for HOSTCC. Default is "$CFLAGS".\n' 2193aa99676SStefan Eßer printf ' HOST_CFLAGS Same as HOST_CFLAGS. If HOST_CFLAGS also exists, it is used.\n' 2203aa99676SStefan Eßer printf ' CPPFLAGS C preprocessor flags. Default is "".\n' 2213aa99676SStefan Eßer printf ' LDFLAGS Linker flags. Default is "".\n' 2223aa99676SStefan Eßer printf ' PREFIX The prefix to install to. Default is "/usr/local".\n' 2233aa99676SStefan Eßer printf ' If PREFIX is "/usr", install path will be "/usr/bin".\n' 224d101cdd6SStefan Eßer printf ' ***WARNING***: Locales ignore the prefix because they *must* be\n' 225d101cdd6SStefan Eßer printf ' installed at a fixed location to work at all. If you do not\n' 226d101cdd6SStefan Eßer printf ' want that to happen, you must disable locales (NLS) completely.\n' 22750696a6eSStefan Eßer printf ' BINDIR The directory to install binaries in. Default is "$PREFIX/bin".\n' 22850696a6eSStefan Eßer printf ' INCLUDEDIR The directory to install header files in. Default is\n' 22950696a6eSStefan Eßer printf ' "$PREFIX/include".\n' 23050696a6eSStefan Eßer printf ' LIBDIR The directory to install libraries in. Default is\n' 23150696a6eSStefan Eßer printf ' "$PREFIX/lib".\n' 2323aa99676SStefan Eßer printf ' DATAROOTDIR The root location for data files. Default is "$PREFIX/share".\n' 2333aa99676SStefan Eßer printf ' DATADIR The location for data files. Default is "$DATAROOTDIR".\n' 2343aa99676SStefan Eßer printf ' MANDIR The location to install manpages to. Default is "$DATADIR/man".\n' 2353aa99676SStefan Eßer printf ' MAN1DIR The location to install Section 1 manpages to. Default is\n' 2363aa99676SStefan Eßer printf ' "$MANDIR/man1".\n' 23750696a6eSStefan Eßer printf ' MAN3DIR The location to install Section 3 manpages to. Default is\n' 23850696a6eSStefan Eßer printf ' "$MANDIR/man3".\n' 2393aa99676SStefan Eßer printf ' NLSPATH The location to install locale catalogs to. Must be an absolute\n' 2403aa99676SStefan Eßer printf ' path (or contain one). This is treated the same as the POSIX\n' 2413aa99676SStefan Eßer printf ' definition of $NLSPATH (see POSIX environment variables for\n' 2423aa99676SStefan Eßer printf ' more information). Default is "/usr/share/locale/%%L/%%N".\n' 243fdc4a7c8SStefan Eßer printf ' PC_PATH The location to install pkg-config files to. Must be a\n' 24410041e99SStefan Eßer printf ' path or contain one. Default is the first path given by the\n' 24510041e99SStefan Eßer printf ' output of `pkg-config --variable=pc_path pkg-config`.\n' 2463aa99676SStefan Eßer printf ' EXECSUFFIX The suffix to append to the executable names, used to not\n' 2473aa99676SStefan Eßer printf ' interfere with other installed bc executables. Default is "".\n' 248fdc4a7c8SStefan Eßer printf ' EXECPREFIX The prefix to prepend to the executable names, used to not\n' 2493aa99676SStefan Eßer printf ' interfere with other installed bc executables. Default is "".\n' 2503aa99676SStefan Eßer printf ' DESTDIR For package creation. Default is "". If it is empty when\n' 2513aa99676SStefan Eßer printf ' `%s` is run, it can also be passed to `make install`\n' "$script" 2523aa99676SStefan Eßer printf ' later as an environment variable. If both are specified,\n' 2533aa99676SStefan Eßer printf ' the one given to `%s` takes precedence.\n' "$script" 2543aa99676SStefan Eßer printf ' LONG_BIT The number of bits in a C `long` type. This is mostly for the\n' 2553aa99676SStefan Eßer printf ' embedded space since this `bc` uses `long`s internally for\n' 2563aa99676SStefan Eßer printf ' overflow checking. In C99, a `long` is required to be 32 bits.\n' 2573aa99676SStefan Eßer printf ' For most normal desktop systems, setting this is unnecessary,\n' 2583aa99676SStefan Eßer printf ' except that 32-bit platforms with 64-bit longs may want to set\n' 2593aa99676SStefan Eßer printf ' it to `32`. Default is the default of `LONG_BIT` for the target\n' 2603aa99676SStefan Eßer printf ' platform. Minimum allowed is `32`. It is a build time error if\n' 2613aa99676SStefan Eßer printf ' the specified value of `LONG_BIT` is greater than the default\n' 2623aa99676SStefan Eßer printf ' value of `LONG_BIT` for the target platform.\n' 2633aa99676SStefan Eßer printf ' GEN_HOST Whether to use `gen/strgen.c`, instead of `gen/strgen.sh`, to\n' 2643aa99676SStefan Eßer printf ' produce the C files that contain the help texts as well as the\n' 2653aa99676SStefan Eßer printf ' math libraries. By default, `gen/strgen.c` is used, compiled by\n' 2663aa99676SStefan Eßer printf ' "$HOSTCC" and run on the host machine. Using `gen/strgen.sh`\n' 2673aa99676SStefan Eßer printf ' removes the need to compile and run an executable on the host\n' 2683aa99676SStefan Eßer printf ' machine since `gen/strgen.sh` is a POSIX shell script. However,\n' 26978bc019dSStefan Eßer printf ' `gen/lib2.bc` is over 4095 characters, the max supported length\n' 27078bc019dSStefan Eßer printf ' of a string literal in C99, and `gen/strgen.sh` generates a\n' 27178bc019dSStefan Eßer printf ' string literal instead of an array, as `gen/strgen.c` does. For\n' 27278bc019dSStefan Eßer printf ' most production-ready compilers, this limit probably is not\n' 2733aa99676SStefan Eßer printf ' enforced, but it could be. Both options are still available for\n' 2743aa99676SStefan Eßer printf ' this reason. If you are sure your compiler does not have the\n' 2753aa99676SStefan Eßer printf ' limit and do not want to compile and run a binary on the host\n' 2763aa99676SStefan Eßer printf ' machine, set this variable to "0". Any other value, or a\n' 2773aa99676SStefan Eßer printf ' non-existent value, will cause the build system to compile and\n' 2783aa99676SStefan Eßer printf ' run `gen/strgen.c`. Default is "".\n' 2793aa99676SStefan Eßer printf ' GEN_EMU Emulator to run string generator code under (leave empty if not\n' 2803aa99676SStefan Eßer printf ' necessary). This is not necessary when using `gen/strgen.sh`.\n' 2813aa99676SStefan Eßer printf ' Default is "".\n' 2823aa99676SStefan Eßer printf '\n' 2833aa99676SStefan Eßer printf 'WARNING: even though `configure.sh` supports both option types, short and\n' 2843aa99676SStefan Eßer printf 'long, it does not support handling both at the same time. Use only one type.\n' 28544d4804dSStefan Eßer printf '\n' 28644d4804dSStefan Eßer printf 'Settings\n' 28744d4804dSStefan Eßer printf '========\n' 28844d4804dSStefan Eßer printf '\n' 28944d4804dSStefan Eßer printf 'bc and dc have some settings that, while they cannot be removed by build time\n' 29044d4804dSStefan Eßer printf 'options, can have their defaults changed at build time by packagers. Users are\n' 29144d4804dSStefan Eßer printf 'also able to change each setting with environment variables.\n' 29244d4804dSStefan Eßer printf '\n' 29344d4804dSStefan Eßer printf 'The following is a table of settings, along with their default values and the\n' 29444d4804dSStefan Eßer printf 'environment variables users can use to change them. (For the defaults, non-zero\n' 29544d4804dSStefan Eßer printf 'means on, and zero means off.)\n' 29644d4804dSStefan Eßer printf '\n' 29744d4804dSStefan Eßer printf '| Setting | Description | Default | Env Variable |\n' 29844d4804dSStefan Eßer printf '| =============== | ==================== | ============ | ==================== |\n' 29944d4804dSStefan Eßer printf '| bc.banner | Whether to display | 0 | BC_BANNER |\n' 30044d4804dSStefan Eßer printf '| | the bc version | | |\n' 30144d4804dSStefan Eßer printf '| | banner when in | | |\n' 30244d4804dSStefan Eßer printf '| | interactive mode. | | |\n' 30344d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 30444d4804dSStefan Eßer printf '| bc.sigint_reset | Whether SIGINT will | 1 | BC_SIGINT_RESET |\n' 30544d4804dSStefan Eßer printf '| | reset bc, instead of | | |\n' 30644d4804dSStefan Eßer printf '| | exiting, when in | | |\n' 30744d4804dSStefan Eßer printf '| | interactive mode. | | |\n' 30844d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 30944d4804dSStefan Eßer printf '| dc.sigint_reset | Whether SIGINT will | 1 | DC_SIGINT_RESET |\n' 31044d4804dSStefan Eßer printf '| | reset dc, instead of | | |\n' 31144d4804dSStefan Eßer printf '| | exiting, when in | | |\n' 31244d4804dSStefan Eßer printf '| | interactive mode. | | |\n' 31344d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 31444d4804dSStefan Eßer printf '| bc.tty_mode | Whether TTY mode for | 1 | BC_TTY_MODE |\n' 31544d4804dSStefan Eßer printf '| | bc should be on when | | |\n' 31644d4804dSStefan Eßer printf '| | available. | | |\n' 31744d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 31844d4804dSStefan Eßer printf '| dc.tty_mode | Whether TTY mode for | 0 | BC_TTY_MODE |\n' 31944d4804dSStefan Eßer printf '| | dc should be on when | | |\n' 32044d4804dSStefan Eßer printf '| | available. | | |\n' 32144d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 32244d4804dSStefan Eßer printf '| bc.prompt | Whether the prompt | $BC_TTY_MODE | BC_PROMPT |\n' 32344d4804dSStefan Eßer printf '| | for bc should be on | | |\n' 32444d4804dSStefan Eßer printf '| | in tty mode. | | |\n' 32544d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 32644d4804dSStefan Eßer printf '| dc.prompt | Whether the prompt | $DC_TTY_MODE | DC_PROMPT |\n' 32744d4804dSStefan Eßer printf '| | for dc should be on | | |\n' 32844d4804dSStefan Eßer printf '| | in tty mode. | | |\n' 32944d4804dSStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 33010041e99SStefan Eßer printf '| bc.expr_exit | Whether to exit bc | 1 | BC_EXPR_EXIT |\n' 33110041e99SStefan Eßer printf '| | if an expression or | | |\n' 33210041e99SStefan Eßer printf '| | expression file is | | |\n' 33310041e99SStefan Eßer printf '| | given with the -e or | | |\n' 33410041e99SStefan Eßer printf '| | -f options. | | |\n' 33510041e99SStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 33610041e99SStefan Eßer printf '| dc.expr_exit | Whether to exit dc | 1 | DC_EXPR_EXIT |\n' 33710041e99SStefan Eßer printf '| | if an expression or | | |\n' 33810041e99SStefan Eßer printf '| | expression file is | | |\n' 33910041e99SStefan Eßer printf '| | given with the -e or | | |\n' 34010041e99SStefan Eßer printf '| | -f options. | | |\n' 34110041e99SStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 342d101cdd6SStefan Eßer printf '| bc.digit_clamp | Whether to have bc | 0 | BC_DIGIT_CLAMP |\n' 343d101cdd6SStefan Eßer printf '| | clamp digits that | | |\n' 344d101cdd6SStefan Eßer printf '| | are greater than or | | |\n' 345d101cdd6SStefan Eßer printf '| | equal to the current | | |\n' 346d101cdd6SStefan Eßer printf '| | ibase when parsing | | |\n' 347d101cdd6SStefan Eßer printf '| | numbers. | | |\n' 348d101cdd6SStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 349d101cdd6SStefan Eßer printf '| dc.digit_clamp | Whether to have dc | 0 | DC_DIGIT_CLAMP |\n' 350d101cdd6SStefan Eßer printf '| | clamp digits that | | |\n' 351d101cdd6SStefan Eßer printf '| | are greater than or | | |\n' 352d101cdd6SStefan Eßer printf '| | equal to the current | | |\n' 353d101cdd6SStefan Eßer printf '| | ibase when parsing | | |\n' 354d101cdd6SStefan Eßer printf '| | numbers. | | |\n' 355d101cdd6SStefan Eßer printf '| --------------- | -------------------- | ------------ | -------------------- |\n' 35644d4804dSStefan Eßer printf '\n' 35744d4804dSStefan Eßer printf 'These settings are not meant to be changed on a whim. They are meant to ensure\n' 35844d4804dSStefan Eßer printf 'that this bc and dc will conform to the expectations of the user on each\n' 35944d4804dSStefan Eßer printf 'platform.\n' 3603aa99676SStefan Eßer 3613aa99676SStefan Eßer exit "$_usage_val" 3623aa99676SStefan Eßer} 3633aa99676SStefan Eßer 36444d4804dSStefan Eßer# Replaces a file extension in a filename. This is used mostly to turn filenames 36544d4804dSStefan Eßer# like `src/num.c` into `src/num.o`. In other words, it helps to link targets to 36644d4804dSStefan Eßer# the files they depend on. 36744d4804dSStefan Eßer# 36844d4804dSStefan Eßer# @param file The filename. 36944d4804dSStefan Eßer# @param ext1 The extension to replace. 37044d4804dSStefan Eßer# @param ext2 The new extension. 3713aa99676SStefan Eßerreplace_ext() { 3723aa99676SStefan Eßer 3733aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 3743aa99676SStefan Eßer err_exit "Invalid number of args to $0" 3753aa99676SStefan Eßer fi 3763aa99676SStefan Eßer 3773aa99676SStefan Eßer _replace_ext_file="$1" 3783aa99676SStefan Eßer _replace_ext_ext1="$2" 3793aa99676SStefan Eßer _replace_ext_ext2="$3" 3803aa99676SStefan Eßer 3819a995fe1SStefan Eßer _replace_ext_result="${_replace_ext_file%.$_replace_ext_ext1}.$_replace_ext_ext2" 3823aa99676SStefan Eßer 3833aa99676SStefan Eßer printf '%s\n' "$_replace_ext_result" 3843aa99676SStefan Eßer} 3853aa99676SStefan Eßer 38644d4804dSStefan Eßer# Replaces a file extension in every filename given in a list. The list is just 38744d4804dSStefan Eßer# a space-separated list of words, so filenames are expected to *not* have 38844d4804dSStefan Eßer# spaces in them. See the documentation for `replace_ext()`. 38944d4804dSStefan Eßer# 39044d4804dSStefan Eßer# @param files The list of space-separated filenames to replace extensions for. 39144d4804dSStefan Eßer# @param ext1 The extension to replace. 39244d4804dSStefan Eßer# @param ext2 The new extension. 3933aa99676SStefan Eßerreplace_exts() { 3943aa99676SStefan Eßer 3953aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 3963aa99676SStefan Eßer err_exit "Invalid number of args to $0" 3973aa99676SStefan Eßer fi 3983aa99676SStefan Eßer 3993aa99676SStefan Eßer _replace_exts_files="$1" 4003aa99676SStefan Eßer _replace_exts_ext1="$2" 4013aa99676SStefan Eßer _replace_exts_ext2="$3" 4023aa99676SStefan Eßer 4033aa99676SStefan Eßer for _replace_exts_file in $_replace_exts_files; do 4043aa99676SStefan Eßer _replace_exts_new_name=$(replace_ext "$_replace_exts_file" "$_replace_exts_ext1" "$_replace_exts_ext2") 4053aa99676SStefan Eßer _replace_exts_result="$_replace_exts_result $_replace_exts_new_name" 4063aa99676SStefan Eßer done 4073aa99676SStefan Eßer 4083aa99676SStefan Eßer printf '%s\n' "$_replace_exts_result" 4093aa99676SStefan Eßer} 4103aa99676SStefan Eßer 41144d4804dSStefan Eßer# Finds a placeholder in @a str and replaces it. This is the workhorse of 41244d4804dSStefan Eßer# configure.sh. It's what replaces placeholders in Makefile.in with the data 41344d4804dSStefan Eßer# needed for the chosen build. Below, you will see a lot of calls to this 41444d4804dSStefan Eßer# function. 41544d4804dSStefan Eßer# 41644d4804dSStefan Eßer# Note that needle can never contain an exclamation point. For more information, 41744d4804dSStefan Eßer# see substring_replace() in scripts/functions.sh. 41844d4804dSStefan Eßer# 41944d4804dSStefan Eßer# @param str The string to find and replace placeholders in. 42044d4804dSStefan Eßer# @param needle The placeholder name. 42144d4804dSStefan Eßer# @param replacement The string to use to replace the placeholder. 4223aa99676SStefan Eßerreplace() { 4233aa99676SStefan Eßer 4243aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 4253aa99676SStefan Eßer err_exit "Invalid number of args to $0" 4263aa99676SStefan Eßer fi 4273aa99676SStefan Eßer 4283aa99676SStefan Eßer _replace_str="$1" 4293aa99676SStefan Eßer _replace_needle="$2" 4303aa99676SStefan Eßer _replace_replacement="$3" 4313aa99676SStefan Eßer 4323aa99676SStefan Eßer substring_replace "$_replace_str" "%%$_replace_needle%%" "$_replace_replacement" 4333aa99676SStefan Eßer} 4343aa99676SStefan Eßer 43544d4804dSStefan Eßer# This function finds all the source files that need to be built. If there is 43644d4804dSStefan Eßer# only one argument and it is empty, then all source files are built. Otherwise, 43744d4804dSStefan Eßer# the arguments are all assumed to be source files that should *not* be built. 43810328f8bSStefan Eßerfind_src_files() { 43910328f8bSStefan Eßer 44010041e99SStefan Eßer _find_src_files_args="" 44110041e99SStefan Eßer 44210328f8bSStefan Eßer if [ "$#" -ge 1 ] && [ "$1" != "" ]; then 44310328f8bSStefan Eßer 44410328f8bSStefan Eßer while [ "$#" -ge 1 ]; do 44510328f8bSStefan Eßer _find_src_files_a="${1## }" 44610328f8bSStefan Eßer shift 44710041e99SStefan Eßer _find_src_files_args=$(printf '%s\n%s/src/%s\n' "$_find_src_files_args" "$scriptdir" "${_find_src_files_a}") 44810328f8bSStefan Eßer done 44910328f8bSStefan Eßer 45010328f8bSStefan Eßer fi 45110328f8bSStefan Eßer 452e6857bd4SStefan Eßer _find_src_files_files=$(find "$scriptdir/src" -depth -name "*.c" -print | LC_ALL=C sort) 45310041e99SStefan Eßer 45410041e99SStefan Eßer _find_src_files_result="" 45510041e99SStefan Eßer 45610041e99SStefan Eßer for _find_src_files_f in $_find_src_files_files; do 45710041e99SStefan Eßer 45810041e99SStefan Eßer # If this is true, the file is part of args, and therefore, unneeded. 45910041e99SStefan Eßer if [ "${_find_src_files_args##*$_find_src_files_f}" != "${_find_src_files_args}" ]; then 46010041e99SStefan Eßer continue 46110041e99SStefan Eßer fi 46210041e99SStefan Eßer 46310041e99SStefan Eßer _find_src_files_result=$(printf '%s\n%s\n' "$_find_src_files_result" "$_find_src_files_f") 46410041e99SStefan Eßer 46510041e99SStefan Eßer done 46610041e99SStefan Eßer 46710041e99SStefan Eßer printf '%s\n' "$_find_src_files_result" 46810328f8bSStefan Eßer} 46910328f8bSStefan Eßer 47044d4804dSStefan Eßer# This function generates a list of files to go into the Makefile. It generates 471fdc4a7c8SStefan Eßer# the list of object files. 47244d4804dSStefan Eßer# 47344d4804dSStefan Eßer# @param contents The contents of the Makefile template to put the list of 47444d4804dSStefan Eßer# files into. 47550696a6eSStefan Eßergen_file_list() { 4763aa99676SStefan Eßer 47750696a6eSStefan Eßer if [ "$#" -lt 1 ]; then 4783aa99676SStefan Eßer err_exit "Invalid number of args to $0" 4793aa99676SStefan Eßer fi 4803aa99676SStefan Eßer 48150696a6eSStefan Eßer _gen_file_list_contents="$1" 4823aa99676SStefan Eßer shift 4833aa99676SStefan Eßer 48450696a6eSStefan Eßer if [ "$#" -ge 1 ]; then 48510328f8bSStefan Eßer _gen_file_list_unneeded="$@" 4863aa99676SStefan Eßer else 48710328f8bSStefan Eßer _gen_file_list_unneeded="" 4883aa99676SStefan Eßer fi 4893aa99676SStefan Eßer 49050696a6eSStefan Eßer _gen_file_list_needle_src="SRC" 49150696a6eSStefan Eßer _gen_file_list_needle_obj="OBJ" 49250696a6eSStefan Eßer 49310328f8bSStefan Eßer _gen_file_list_replacement=$(find_src_files $_gen_file_list_unneeded | tr '\n' ' ') 49450696a6eSStefan Eßer _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ 49550696a6eSStefan Eßer "$_gen_file_list_needle_src" "$_gen_file_list_replacement") 49650696a6eSStefan Eßer 49710041e99SStefan Eßer _gen_file_list_cbases="" 49810041e99SStefan Eßer 49910041e99SStefan Eßer for _gen_file_list_f in $_gen_file_list_replacement; do 50010041e99SStefan Eßer _gen_file_list_b=$(basename "$_gen_file_list_f") 50110041e99SStefan Eßer _gen_file_list_cbases="$_gen_file_list_cbases src/$_gen_file_list_b" 50210041e99SStefan Eßer done 50310041e99SStefan Eßer 50410041e99SStefan Eßer _gen_file_list_replacement=$(replace_exts "$_gen_file_list_cbases" "c" "o") 50550696a6eSStefan Eßer _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ 50650696a6eSStefan Eßer "$_gen_file_list_needle_obj" "$_gen_file_list_replacement") 50750696a6eSStefan Eßer 50850696a6eSStefan Eßer printf '%s\n' "$_gen_file_list_contents" 5093aa99676SStefan Eßer} 5103aa99676SStefan Eßer 51144d4804dSStefan Eßerset_default() { 51244d4804dSStefan Eßer 51344d4804dSStefan Eßer _set_default_on="$1" 51444d4804dSStefan Eßer shift 51544d4804dSStefan Eßer 51644d4804dSStefan Eßer _set_default_name="$1" 51744d4804dSStefan Eßer shift 51844d4804dSStefan Eßer 51944d4804dSStefan Eßer # The reason that the variables that are being set do not have the same 52044d4804dSStefan Eßer # non-collision avoidance that the other variables do is that we *do* want 52144d4804dSStefan Eßer # the settings of these variables to leak out of the function. They adjust 52244d4804dSStefan Eßer # the settings outside of the function. 52344d4804dSStefan Eßer case "$_set_default_name" in 52444d4804dSStefan Eßer 52544d4804dSStefan Eßer bc.banner) bc_default_banner="$_set_default_on" ;; 52644d4804dSStefan Eßer bc.sigint_reset) bc_default_sigint_reset="$_set_default_on" ;; 52744d4804dSStefan Eßer dc.sigint_reset) dc_default_sigint_reset="$_set_default_on" ;; 52844d4804dSStefan Eßer bc.tty_mode) bc_default_tty_mode="$_set_default_on" ;; 52944d4804dSStefan Eßer dc.tty_mode) dc_default_tty_mode="$_set_default_on" ;; 53044d4804dSStefan Eßer bc.prompt) bc_default_prompt="$_set_default_on" ;; 53144d4804dSStefan Eßer dc.prompt) dc_default_prompt="$_set_default_on" ;; 53210041e99SStefan Eßer bc.expr_exit) bc_default_expr_exit="$_set_default_on";; 53310041e99SStefan Eßer dc.expr_exit) dc_default_expr_exit="$_set_default_on";; 534d101cdd6SStefan Eßer bc.digit_clamp) bc_default_digit_clamp="$_set_default_on";; 535d101cdd6SStefan Eßer dc.digit_clamp) dc_default_digit_clamp="$_set_default_on";; 53644d4804dSStefan Eßer ?) usage "Invalid setting: $_set_default_name" ;; 53744d4804dSStefan Eßer 53844d4804dSStefan Eßer esac 53944d4804dSStefan Eßer} 54044d4804dSStefan Eßer 541d101cdd6SStefan Eßerpredefined_build() { 542d101cdd6SStefan Eßer 543d101cdd6SStefan Eßer _predefined_build_type="$1" 544d101cdd6SStefan Eßer shift 545d101cdd6SStefan Eßer 546d101cdd6SStefan Eßer # The reason that the variables that are being set do not have the same 547d101cdd6SStefan Eßer # non-collision avoidance that the other variables do is that we *do* want 548d101cdd6SStefan Eßer # the settings of these variables to leak out of the function. They adjust 549d101cdd6SStefan Eßer # the settings outside of the function. 550d101cdd6SStefan Eßer case "$_predefined_build_type" in 551d101cdd6SStefan Eßer 552d101cdd6SStefan Eßer BSD) 553d101cdd6SStefan Eßer bc_only=0 554d101cdd6SStefan Eßer dc_only=0 555d101cdd6SStefan Eßer debug=0 556d101cdd6SStefan Eßer optimization="3" 557d101cdd6SStefan Eßer hist=1 558d101cdd6SStefan Eßer hist_impl="editline" 559d101cdd6SStefan Eßer extra_math=1 560d101cdd6SStefan Eßer generate_tests=$generate_tests 561d101cdd6SStefan Eßer install_manpages=0 562d101cdd6SStefan Eßer nls=1 563d101cdd6SStefan Eßer force=0 564d101cdd6SStefan Eßer strip_bin=1 565d101cdd6SStefan Eßer all_locales=0 566d101cdd6SStefan Eßer library=0 567d101cdd6SStefan Eßer clean=1 568d101cdd6SStefan Eßer bc_default_banner=0 569d101cdd6SStefan Eßer bc_default_sigint_reset=1 570d101cdd6SStefan Eßer dc_default_sigint_reset=1 571d101cdd6SStefan Eßer bc_default_tty_mode=1 572d101cdd6SStefan Eßer dc_default_tty_mode=0 573d101cdd6SStefan Eßer bc_default_prompt="" 574d101cdd6SStefan Eßer dc_default_prompt="" 575d101cdd6SStefan Eßer bc_default_expr_exit=1 576d101cdd6SStefan Eßer dc_default_expr_exit=1 577d101cdd6SStefan Eßer bc_default_digit_clamp=0 578d101cdd6SStefan Eßer dc_default_digit_clamp=0;; 579d101cdd6SStefan Eßer 580d101cdd6SStefan Eßer GNU) 581d101cdd6SStefan Eßer bc_only=0 582d101cdd6SStefan Eßer dc_only=0 583d101cdd6SStefan Eßer debug=0 584d101cdd6SStefan Eßer optimization="3" 585d101cdd6SStefan Eßer hist=1 586d101cdd6SStefan Eßer hist_impl="internal" 587d101cdd6SStefan Eßer extra_math=1 588d101cdd6SStefan Eßer generate_tests=$generate_tests 589d101cdd6SStefan Eßer install_manpages=1 590d101cdd6SStefan Eßer nls=1 591d101cdd6SStefan Eßer force=0 592d101cdd6SStefan Eßer strip_bin=1 593d101cdd6SStefan Eßer all_locales=0 594d101cdd6SStefan Eßer library=0 595d101cdd6SStefan Eßer clean=1 596d101cdd6SStefan Eßer bc_default_banner=1 597d101cdd6SStefan Eßer bc_default_sigint_reset=1 598d101cdd6SStefan Eßer dc_default_sigint_reset=0 599d101cdd6SStefan Eßer bc_default_tty_mode=1 600d101cdd6SStefan Eßer dc_default_tty_mode=0 601d101cdd6SStefan Eßer bc_default_prompt="" 602d101cdd6SStefan Eßer dc_default_prompt="" 603d101cdd6SStefan Eßer bc_default_expr_exit=1 604d101cdd6SStefan Eßer dc_default_expr_exit=1 605d101cdd6SStefan Eßer bc_default_digit_clamp=1 606d101cdd6SStefan Eßer dc_default_digit_clamp=0;; 607d101cdd6SStefan Eßer 608d101cdd6SStefan Eßer GDH) 60912e0d316SStefan Eßer CFLAGS="-Weverything -Wno-padded -Wno-unsafe-buffer-usage -Wno-poison-system-directories" 610fdc4a7c8SStefan Eßer CFLAGS="$CFLAGS -Wno-unknown-warning-option -Wno-switch-default -Wno-pre-c11-compat" 611fdc4a7c8SStefan Eßer CFLAGS="$CFLAGS -Werror -pedantic -std=c11" 612d101cdd6SStefan Eßer bc_only=0 613d101cdd6SStefan Eßer dc_only=0 614d101cdd6SStefan Eßer debug=0 615d101cdd6SStefan Eßer optimization="3" 616d101cdd6SStefan Eßer hist=1 617d101cdd6SStefan Eßer hist_impl="internal" 618d101cdd6SStefan Eßer extra_math=1 619d101cdd6SStefan Eßer generate_tests=1 620d101cdd6SStefan Eßer install_manpages=1 621d101cdd6SStefan Eßer nls=0 622d101cdd6SStefan Eßer force=0 623d101cdd6SStefan Eßer strip_bin=1 624d101cdd6SStefan Eßer all_locales=0 625d101cdd6SStefan Eßer library=0 626d101cdd6SStefan Eßer clean=1 627d101cdd6SStefan Eßer bc_default_banner=1 628d101cdd6SStefan Eßer bc_default_sigint_reset=1 629d101cdd6SStefan Eßer dc_default_sigint_reset=1 630d101cdd6SStefan Eßer bc_default_tty_mode=1 631d101cdd6SStefan Eßer dc_default_tty_mode=1 632d101cdd6SStefan Eßer bc_default_prompt="" 633d101cdd6SStefan Eßer dc_default_prompt="" 634d101cdd6SStefan Eßer bc_default_expr_exit=0 635d101cdd6SStefan Eßer dc_default_expr_exit=0 636d101cdd6SStefan Eßer bc_default_digit_clamp=1 637d101cdd6SStefan Eßer dc_default_digit_clamp=1;; 638d101cdd6SStefan Eßer 639d101cdd6SStefan Eßer DBG) 64012e0d316SStefan Eßer CFLAGS="-Weverything -Wno-padded -Wno-unsafe-buffer-usage -Wno-poison-system-directories" 641fdc4a7c8SStefan Eßer CFLAGS="$CFLAGS -Wno-unknown-warning-option -Wno-switch-default -Wno-pre-c11-compat" 642fdc4a7c8SStefan Eßer CFLAGS="$CFLAGS -Werror -pedantic -std=c11" 643d101cdd6SStefan Eßer bc_only=0 644d101cdd6SStefan Eßer dc_only=0 645d101cdd6SStefan Eßer debug=1 646d101cdd6SStefan Eßer optimization="0" 647d101cdd6SStefan Eßer hist=1 648d101cdd6SStefan Eßer hist_impl="internal" 649d101cdd6SStefan Eßer extra_math=1 650d101cdd6SStefan Eßer generate_tests=1 651d101cdd6SStefan Eßer install_manpages=1 652d101cdd6SStefan Eßer nls=1 653d101cdd6SStefan Eßer force=0 654d101cdd6SStefan Eßer strip_bin=1 655d101cdd6SStefan Eßer all_locales=0 656d101cdd6SStefan Eßer library=0 657d101cdd6SStefan Eßer clean=1 658d101cdd6SStefan Eßer bc_default_banner=1 659d101cdd6SStefan Eßer bc_default_sigint_reset=1 660d101cdd6SStefan Eßer dc_default_sigint_reset=1 661d101cdd6SStefan Eßer bc_default_tty_mode=1 662d101cdd6SStefan Eßer dc_default_tty_mode=1 663d101cdd6SStefan Eßer bc_default_prompt="" 664d101cdd6SStefan Eßer dc_default_prompt="" 665d101cdd6SStefan Eßer bc_default_expr_exit=0 666d101cdd6SStefan Eßer dc_default_expr_exit=0 667d101cdd6SStefan Eßer bc_default_digit_clamp=1 668d101cdd6SStefan Eßer dc_default_digit_clamp=1;; 669d101cdd6SStefan Eßer 670d101cdd6SStefan Eßer ?|'') usage "Invalid user build: \"$_predefined_build_type\". Accepted types are BSD, GNU, GDH, DBG.";; 671d101cdd6SStefan Eßer 672d101cdd6SStefan Eßer esac 673d101cdd6SStefan Eßer} 674d101cdd6SStefan Eßer 67544d4804dSStefan Eßer# This is a list of defaults, but it is also the list of possible options for 67644d4804dSStefan Eßer# users to change. 67744d4804dSStefan Eßer# 678fdc4a7c8SStefan Eßer# The development options are: force (force options even if they fail). 6793aa99676SStefan Eßerbc_only=0 6803aa99676SStefan Eßerdc_only=0 6813aa99676SStefan Eßerkaratsuba_len=32 6823aa99676SStefan Eßerdebug=0 6833aa99676SStefan Eßerhist=1 684d101cdd6SStefan Eßerhist_impl="internal" 6853aa99676SStefan Eßerextra_math=1 6863aa99676SStefan Eßeroptimization="" 6873aa99676SStefan Eßergenerate_tests=1 6883aa99676SStefan Eßerinstall_manpages=1 6893aa99676SStefan Eßernls=1 6903aa99676SStefan Eßerforce=0 6913aa99676SStefan Eßerstrip_bin=1 692cf7becd2SStefan Eßerall_locales=0 69350696a6eSStefan Eßerlibrary=0 69410328f8bSStefan Eßerclean=1 695d101cdd6SStefan Eßerproblematic_tests=1 6963aa99676SStefan Eßer 69744d4804dSStefan Eßer# The empty strings are because they depend on TTY mode. If they are directly 69844d4804dSStefan Eßer# set, though, they will be integers. We test for empty strings later. 69944d4804dSStefan Eßerbc_default_banner=0 70044d4804dSStefan Eßerbc_default_sigint_reset=1 70144d4804dSStefan Eßerdc_default_sigint_reset=1 70244d4804dSStefan Eßerbc_default_tty_mode=1 70344d4804dSStefan Eßerdc_default_tty_mode=0 70444d4804dSStefan Eßerbc_default_prompt="" 70544d4804dSStefan Eßerdc_default_prompt="" 70610041e99SStefan Eßerbc_default_expr_exit=1 70710041e99SStefan Eßerdc_default_expr_exit=1 708d101cdd6SStefan Eßerbc_default_digit_clamp=0 709d101cdd6SStefan Eßerdc_default_digit_clamp=0 71044d4804dSStefan Eßer 71144d4804dSStefan Eßer# getopts is a POSIX utility, but it cannot handle long options. Thus, the 71244d4804dSStefan Eßer# handling of long options is done by hand, and that's the reason that short and 71344d4804dSStefan Eßer# long options cannot be mixed. 714fdc4a7c8SStefan Eßerwhile getopts "abBcdDeEfgGhHik:lMNO:p:PrS:s:T-" opt; do 7153aa99676SStefan Eßer 7163aa99676SStefan Eßer case "$opt" in 71750696a6eSStefan Eßer a) library=1 ;; 7183aa99676SStefan Eßer b) bc_only=1 ;; 7193aa99676SStefan Eßer B) dc_only=1 ;; 72010328f8bSStefan Eßer C) clean=0 ;; 7213aa99676SStefan Eßer d) dc_only=1 ;; 7223aa99676SStefan Eßer D) bc_only=1 ;; 723d101cdd6SStefan Eßer e) hist_impl="editline" ;; 7243aa99676SStefan Eßer E) extra_math=0 ;; 7253aa99676SStefan Eßer f) force=1 ;; 7263aa99676SStefan Eßer g) debug=1 ;; 7273aa99676SStefan Eßer G) generate_tests=0 ;; 7283aa99676SStefan Eßer h) usage ;; 7293aa99676SStefan Eßer H) hist=0 ;; 730d101cdd6SStefan Eßer i) hist_impl="internal" ;; 7313aa99676SStefan Eßer k) karatsuba_len="$OPTARG" ;; 732cf7becd2SStefan Eßer l) all_locales=1 ;; 7333aa99676SStefan Eßer M) install_manpages=0 ;; 7343aa99676SStefan Eßer N) nls=0 ;; 7353aa99676SStefan Eßer O) optimization="$OPTARG" ;; 736d101cdd6SStefan Eßer p) predefined_build "$OPTARG" ;; 737d101cdd6SStefan Eßer P) problematic_tests=0 ;; 738d101cdd6SStefan Eßer r) hist_impl="readline" ;; 73944d4804dSStefan Eßer S) set_default 0 "$OPTARG" ;; 74044d4804dSStefan Eßer s) set_default 1 "$OPTARG" ;; 7413aa99676SStefan Eßer T) strip_bin=0 ;; 7423aa99676SStefan Eßer -) 7433aa99676SStefan Eßer arg="$1" 7443aa99676SStefan Eßer arg="${arg#--}" 7453aa99676SStefan Eßer LONG_OPTARG="${arg#*=}" 7463aa99676SStefan Eßer case $arg in 7473aa99676SStefan Eßer help) usage ;; 74850696a6eSStefan Eßer library) library=1 ;; 7493aa99676SStefan Eßer bc-only) bc_only=1 ;; 7503aa99676SStefan Eßer dc-only) dc_only=1 ;; 7513aa99676SStefan Eßer debug) debug=1 ;; 7523aa99676SStefan Eßer force) force=1 ;; 7533aa99676SStefan Eßer prefix=?*) PREFIX="$LONG_OPTARG" ;; 7543aa99676SStefan Eßer prefix) 7553aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 7563aa99676SStefan Eßer usage "No argument given for '--$arg' option" 7573aa99676SStefan Eßer fi 7583aa99676SStefan Eßer PREFIX="$2" 7593aa99676SStefan Eßer shift ;; 7603aa99676SStefan Eßer bindir=?*) BINDIR="$LONG_OPTARG" ;; 7613aa99676SStefan Eßer bindir) 7623aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 7633aa99676SStefan Eßer usage "No argument given for '--$arg' option" 7643aa99676SStefan Eßer fi 7653aa99676SStefan Eßer BINDIR="$2" 7663aa99676SStefan Eßer shift ;; 76750696a6eSStefan Eßer includedir=?*) INCLUDEDIR="$LONG_OPTARG" ;; 76850696a6eSStefan Eßer includedir) 76950696a6eSStefan Eßer if [ "$#" -lt 2 ]; then 77050696a6eSStefan Eßer usage "No argument given for '--$arg' option" 77150696a6eSStefan Eßer fi 77250696a6eSStefan Eßer INCLUDEDIR="$2" 77350696a6eSStefan Eßer shift ;; 77450696a6eSStefan Eßer libdir=?*) LIBDIR="$LONG_OPTARG" ;; 77550696a6eSStefan Eßer libdir) 77650696a6eSStefan Eßer if [ "$#" -lt 2 ]; then 77750696a6eSStefan Eßer usage "No argument given for '--$arg' option" 77850696a6eSStefan Eßer fi 77950696a6eSStefan Eßer LIBDIR="$2" 78050696a6eSStefan Eßer shift ;; 7813aa99676SStefan Eßer datarootdir=?*) DATAROOTDIR="$LONG_OPTARG" ;; 7823aa99676SStefan Eßer datarootdir) 7833aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 7843aa99676SStefan Eßer usage "No argument given for '--$arg' option" 7853aa99676SStefan Eßer fi 7863aa99676SStefan Eßer DATAROOTDIR="$2" 7873aa99676SStefan Eßer shift ;; 7883aa99676SStefan Eßer datadir=?*) DATADIR="$LONG_OPTARG" ;; 7893aa99676SStefan Eßer datadir) 7903aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 7913aa99676SStefan Eßer usage "No argument given for '--$arg' option" 7923aa99676SStefan Eßer fi 7933aa99676SStefan Eßer DATADIR="$2" 7943aa99676SStefan Eßer shift ;; 7953aa99676SStefan Eßer mandir=?*) MANDIR="$LONG_OPTARG" ;; 7963aa99676SStefan Eßer mandir) 7973aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 7983aa99676SStefan Eßer usage "No argument given for '--$arg' option" 7993aa99676SStefan Eßer fi 8003aa99676SStefan Eßer MANDIR="$2" 8013aa99676SStefan Eßer shift ;; 8023aa99676SStefan Eßer man1dir=?*) MAN1DIR="$LONG_OPTARG" ;; 8033aa99676SStefan Eßer man1dir) 8043aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 8053aa99676SStefan Eßer usage "No argument given for '--$arg' option" 8063aa99676SStefan Eßer fi 8073aa99676SStefan Eßer MAN1DIR="$2" 8083aa99676SStefan Eßer shift ;; 80950696a6eSStefan Eßer man3dir=?*) MAN3DIR="$LONG_OPTARG" ;; 81050696a6eSStefan Eßer man3dir) 81150696a6eSStefan Eßer if [ "$#" -lt 2 ]; then 81250696a6eSStefan Eßer usage "No argument given for '--$arg' option" 81350696a6eSStefan Eßer fi 81450696a6eSStefan Eßer MAN3DIR="$2" 81550696a6eSStefan Eßer shift ;; 8163aa99676SStefan Eßer karatsuba-len=?*) karatsuba_len="$LONG_OPTARG" ;; 8173aa99676SStefan Eßer karatsuba-len) 8183aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 8193aa99676SStefan Eßer usage "No argument given for '--$arg' option" 8203aa99676SStefan Eßer fi 8213aa99676SStefan Eßer karatsuba_len="$1" 8223aa99676SStefan Eßer shift ;; 8233aa99676SStefan Eßer opt=?*) optimization="$LONG_OPTARG" ;; 8243aa99676SStefan Eßer opt) 8253aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 8263aa99676SStefan Eßer usage "No argument given for '--$arg' option" 8273aa99676SStefan Eßer fi 8283aa99676SStefan Eßer optimization="$1" 8293aa99676SStefan Eßer shift ;; 83044d4804dSStefan Eßer set-default-on=?*) set_default 1 "$LONG_OPTARG" ;; 83144d4804dSStefan Eßer set-default-on) 83244d4804dSStefan Eßer if [ "$#" -lt 2 ]; then 83344d4804dSStefan Eßer usage "No argument given for '--$arg' option" 83444d4804dSStefan Eßer fi 83544d4804dSStefan Eßer set_default 1 "$1" 83644d4804dSStefan Eßer shift ;; 83744d4804dSStefan Eßer set-default-off=?*) set_default 0 "$LONG_OPTARG" ;; 83844d4804dSStefan Eßer set-default-off) 83944d4804dSStefan Eßer if [ "$#" -lt 2 ]; then 84044d4804dSStefan Eßer usage "No argument given for '--$arg' option" 84144d4804dSStefan Eßer fi 84244d4804dSStefan Eßer set_default 0 "$1" 84344d4804dSStefan Eßer shift ;; 844d101cdd6SStefan Eßer predefined-build-type=?*) predefined_build "$LONG_OPTARG" ;; 845d101cdd6SStefan Eßer predefined-build-type) 846d101cdd6SStefan Eßer if [ "$#" -lt 2 ]; then 847d101cdd6SStefan Eßer usage "No argument given for '--$arg' option" 848d101cdd6SStefan Eßer fi 849d101cdd6SStefan Eßer predefined_build "$1" 850d101cdd6SStefan Eßer shift ;; 8513aa99676SStefan Eßer disable-bc) dc_only=1 ;; 8523aa99676SStefan Eßer disable-dc) bc_only=1 ;; 85310328f8bSStefan Eßer disable-clean) clean=0 ;; 8543aa99676SStefan Eßer disable-extra-math) extra_math=0 ;; 8553aa99676SStefan Eßer disable-generated-tests) generate_tests=0 ;; 8563aa99676SStefan Eßer disable-history) hist=0 ;; 8573aa99676SStefan Eßer disable-man-pages) install_manpages=0 ;; 8583aa99676SStefan Eßer disable-nls) nls=0 ;; 8593aa99676SStefan Eßer disable-strip) strip_bin=0 ;; 860d101cdd6SStefan Eßer disable-problematic-tests) problematic_tests=0 ;; 861d101cdd6SStefan Eßer enable-editline) hist_impl="editline" ;; 862d101cdd6SStefan Eßer enable-readline) hist_impl="readline" ;; 863d101cdd6SStefan Eßer enable-internal-history) hist_impl="internal" ;; 864cf7becd2SStefan Eßer install-all-locales) all_locales=1 ;; 865fdc4a7c8SStefan Eßer help* | bc-only* | dc-only* | debug*) 8663aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 86710328f8bSStefan Eßer disable-bc* | disable-dc* | disable-clean*) 86810328f8bSStefan Eßer usage "No arg allowed for --$arg option" ;; 86910328f8bSStefan Eßer disable-extra-math*) 8703aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 871fdc4a7c8SStefan Eßer disable-history*) 8723aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 8733aa99676SStefan Eßer disable-man-pages* | disable-nls* | disable-strip*) 8743aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 875d101cdd6SStefan Eßer disable-problematic-tests*) 876d101cdd6SStefan Eßer usage "No arg allowed for --$arg option" ;; 877fdc4a7c8SStefan Eßer install-all-locales*) 878cf7becd2SStefan Eßer usage "No arg allowed for --$arg option" ;; 87978bc019dSStefan Eßer enable-editline* | enable-readline*) 88078bc019dSStefan Eßer usage "No arg allowed for --$arg option" ;; 881d101cdd6SStefan Eßer enable-internal-history*) 882d101cdd6SStefan Eßer usage "No arg allowed for --$arg option" ;; 8833aa99676SStefan Eßer '') break ;; # "--" terminates argument processing 8843aa99676SStefan Eßer * ) usage "Invalid option $LONG_OPTARG" ;; 8853aa99676SStefan Eßer esac 8863aa99676SStefan Eßer shift 8873aa99676SStefan Eßer OPTIND=1 ;; 88844d4804dSStefan Eßer ?) usage "Invalid option: $opt" ;; 8893aa99676SStefan Eßer esac 8903aa99676SStefan Eßer 8913aa99676SStefan Eßerdone 8923aa99676SStefan Eßer 89344d4804dSStefan Eßer# Sometimes, developers don't want configure.sh to do a config clean. But 89444d4804dSStefan Eßer# sometimes they do. 89510328f8bSStefan Eßerif [ "$clean" -ne 0 ]; then 89610328f8bSStefan Eßer if [ -f ./Makefile ]; then 89710328f8bSStefan Eßer make clean_config > /dev/null 89810328f8bSStefan Eßer fi 89910328f8bSStefan Eßerfi 90010328f8bSStefan Eßer 90144d4804dSStefan Eßer# It is an error to say that bc only should be built and likewise for dc. 9023aa99676SStefan Eßerif [ "$bc_only" -eq 1 ] && [ "$dc_only" -eq 1 ]; then 9033aa99676SStefan Eßer usage "Can only specify one of -b(-D) or -d(-B)" 9043aa99676SStefan Eßerfi 9053aa99676SStefan Eßer 90644d4804dSStefan Eßer# The library is mutually exclusive to the calculators, so it's an error to 90744d4804dSStefan Eßer# give an option for either of them. 90850696a6eSStefan Eßerif [ "$library" -ne 0 ]; then 90950696a6eSStefan Eßer if [ "$bc_only" -eq 1 ] || [ "$dc_only" -eq 1 ]; then 91050696a6eSStefan Eßer usage "Must not specify -b(-D) or -d(-B) when building the library" 91150696a6eSStefan Eßer fi 91250696a6eSStefan Eßerfi 91350696a6eSStefan Eßer 91444d4804dSStefan Eßer# KARATSUBA_LEN must be an integer and must be 16 or greater. 9153aa99676SStefan Eßercase $karatsuba_len in 9163aa99676SStefan Eßer (*[!0-9]*|'') usage "KARATSUBA_LEN is not a number" ;; 9173aa99676SStefan Eßer (*) ;; 9183aa99676SStefan Eßeresac 9193aa99676SStefan Eßer 9203aa99676SStefan Eßerif [ "$karatsuba_len" -lt 16 ]; then 9213aa99676SStefan Eßer usage "KARATSUBA_LEN is less than 16" 9223aa99676SStefan Eßerfi 9233aa99676SStefan Eßer 9243aa99676SStefan Eßerset -e 9253aa99676SStefan Eßer 9263aa99676SStefan Eßerif [ -z "${LONG_BIT+set}" ]; then 9273aa99676SStefan Eßer LONG_BIT_DEFINE="" 9283aa99676SStefan Eßerelif [ "$LONG_BIT" -lt 32 ]; then 9293aa99676SStefan Eßer usage "LONG_BIT is less than 32" 9303aa99676SStefan Eßerelse 931d101cdd6SStefan Eßer LONG_BIT_DEFINE="-DBC_LONG_BIT=$LONG_BIT" 9323aa99676SStefan Eßerfi 9333aa99676SStefan Eßer 9343aa99676SStefan Eßerif [ -z "$CC" ]; then 9353aa99676SStefan Eßer CC="c99" 9363aa99676SStefan Eßerelse 93744d4804dSStefan Eßer 93844d4804dSStefan Eßer # I had users complain that, if they gave CFLAGS as part of CC, which 93944d4804dSStefan Eßer # autotools allows in its braindead way, the build would fail with an error. 94044d4804dSStefan Eßer # I don't like adjusting for autotools, but oh well. These lines puts the 94144d4804dSStefan Eßer # stuff after the first space into CFLAGS. 9423aa99676SStefan Eßer ccbase=$(basename "$CC") 9433aa99676SStefan Eßer suffix=" *" 9443aa99676SStefan Eßer prefix="* " 9453aa99676SStefan Eßer 9463aa99676SStefan Eßer if [ "${ccbase%%$suffix}" != "$ccbase" ]; then 9473aa99676SStefan Eßer ccflags="${ccbase#$prefix}" 9483aa99676SStefan Eßer cc="${ccbase%%$suffix}" 9493aa99676SStefan Eßer ccdir=$(dirname "$CC") 9503aa99676SStefan Eßer if [ "$ccdir" = "." ] && [ "${CC#.}" = "$CC" ]; then 9513aa99676SStefan Eßer ccdir="" 9523aa99676SStefan Eßer else 9533aa99676SStefan Eßer ccdir="$ccdir/" 9543aa99676SStefan Eßer fi 9553aa99676SStefan Eßer CC="${ccdir}${cc}" 9563aa99676SStefan Eßer CFLAGS="$CFLAGS $ccflags" 9573aa99676SStefan Eßer fi 9583aa99676SStefan Eßerfi 9593aa99676SStefan Eßer 9603aa99676SStefan Eßerif [ -z "$HOSTCC" ] && [ -z "$HOST_CC" ]; then 9613aa99676SStefan Eßer HOSTCC="$CC" 9623aa99676SStefan Eßerelif [ -z "$HOSTCC" ]; then 9633aa99676SStefan Eßer HOSTCC="$HOST_CC" 9643aa99676SStefan Eßerfi 9653aa99676SStefan Eßer 9663aa99676SStefan Eßerif [ "$HOSTCC" != "$CC" ]; then 96744d4804dSStefan Eßer 96844d4804dSStefan Eßer # Like above, this splits HOSTCC and HOSTCFLAGS. 9693aa99676SStefan Eßer ccbase=$(basename "$HOSTCC") 9703aa99676SStefan Eßer suffix=" *" 9713aa99676SStefan Eßer prefix="* " 9723aa99676SStefan Eßer 9733aa99676SStefan Eßer if [ "${ccbase%%$suffix}" != "$ccbase" ]; then 9743aa99676SStefan Eßer ccflags="${ccbase#$prefix}" 9753aa99676SStefan Eßer cc="${ccbase%%$suffix}" 9763aa99676SStefan Eßer ccdir=$(dirname "$HOSTCC") 9773aa99676SStefan Eßer if [ "$ccdir" = "." ] && [ "${HOSTCC#.}" = "$HOSTCC" ]; then 9783aa99676SStefan Eßer ccdir="" 9793aa99676SStefan Eßer else 9803aa99676SStefan Eßer ccdir="$ccdir/" 9813aa99676SStefan Eßer fi 9823aa99676SStefan Eßer HOSTCC="${ccdir}${cc}" 9833aa99676SStefan Eßer HOSTCFLAGS="$HOSTCFLAGS $ccflags" 9843aa99676SStefan Eßer fi 9853aa99676SStefan Eßerfi 9863aa99676SStefan Eßer 9873aa99676SStefan Eßerif [ -z "${HOSTCFLAGS+set}" ] && [ -z "${HOST_CFLAGS+set}" ]; then 9883aa99676SStefan Eßer HOSTCFLAGS="$CFLAGS" 9893aa99676SStefan Eßerelif [ -z "${HOSTCFLAGS+set}" ]; then 9903aa99676SStefan Eßer HOSTCFLAGS="$HOST_CFLAGS" 9913aa99676SStefan Eßerfi 9923aa99676SStefan Eßer 99344d4804dSStefan Eßer# Store these for the cross compilation detection later. 99444d4804dSStefan EßerOLDCFLAGS="$CFLAGS" 99544d4804dSStefan EßerOLDHOSTCFLAGS="$HOSTCFLAGS" 99644d4804dSStefan Eßer 9973aa99676SStefan Eßerlink="@printf 'No link necessary\\\\n'" 9983aa99676SStefan Eßermain_exec="BC" 9993aa99676SStefan Eßerexecutable="BC_EXEC" 10003aa99676SStefan Eßer 10013aa99676SStefan Eßerkaratsuba="@printf 'karatsuba cannot be run because one of bc or dc is not built\\\\n'" 10023aa99676SStefan Eßer 10033aa99676SStefan Eßerbc_lib="\$(GEN_DIR)/lib.o" 10043aa99676SStefan Eßerbc_help="\$(GEN_DIR)/bc_help.o" 10053aa99676SStefan Eßerdc_help="\$(GEN_DIR)/dc_help.o" 10063aa99676SStefan Eßer 100710328f8bSStefan Eßerdefault_target_prereqs="\$(BIN) \$(OBJS)" 100810328f8bSStefan Eßerdefault_target_cmd="\$(CC) \$(CFLAGS) \$(OBJS) \$(LDFLAGS) -o \$(EXEC)" 100910328f8bSStefan Eßerdefault_target="\$(DC_EXEC)" 101010328f8bSStefan Eßer 101110328f8bSStefan Eßersecond_target_prereqs="" 101210328f8bSStefan Eßersecond_target_cmd="$default_target_cmd" 101310328f8bSStefan Eßersecond_target="\$(BC_EXEC)" 101410328f8bSStefan Eßer 101544d4804dSStefan Eßer# This if/else if chain is for setting the defaults that change based on whether 101644d4804dSStefan Eßer# the library is being built, bc only, dc only, or both calculators. 101710328f8bSStefan Eßerif [ "$library" -ne 0 ]; then 101810328f8bSStefan Eßer 101910328f8bSStefan Eßer extra_math=1 102010328f8bSStefan Eßer nls=0 102110328f8bSStefan Eßer hist=0 102210328f8bSStefan Eßer bc=1 102310328f8bSStefan Eßer dc=1 102410328f8bSStefan Eßer 102510328f8bSStefan Eßer default_target_prereqs="\$(BIN) \$(OBJ)" 102610328f8bSStefan Eßer default_target_cmd="ar -r -cu \$(LIBBC) \$(OBJ)" 102710328f8bSStefan Eßer default_target="\$(LIBBC)" 102810328f8bSStefan Eßer 102910041e99SStefan Eßer install_prereqs=" install_library" 103010041e99SStefan Eßer uninstall_prereqs=" uninstall_library" 103110041e99SStefan Eßer install_man_prereqs=" install_bcl_manpage" 103210041e99SStefan Eßer uninstall_man_prereqs=" uninstall_bcl_manpage" 103310041e99SStefan Eßer 103410328f8bSStefan Eßerelif [ "$bc_only" -eq 1 ]; then 10353aa99676SStefan Eßer 10363aa99676SStefan Eßer bc=1 10373aa99676SStefan Eßer dc=0 10383aa99676SStefan Eßer 10393aa99676SStefan Eßer dc_help="" 10403aa99676SStefan Eßer 10413aa99676SStefan Eßer executables="bc" 10423aa99676SStefan Eßer 104350696a6eSStefan Eßer install_prereqs=" install_execs" 104450696a6eSStefan Eßer install_man_prereqs=" install_bc_manpage" 10453aa99676SStefan Eßer uninstall_prereqs=" uninstall_bc" 10463aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_bc_manpage" 10473aa99676SStefan Eßer 104810328f8bSStefan Eßer default_target="\$(BC_EXEC)" 104910328f8bSStefan Eßer second_target="\$(DC_EXEC)" 105010328f8bSStefan Eßer 10513aa99676SStefan Eßerelif [ "$dc_only" -eq 1 ]; then 10523aa99676SStefan Eßer 10533aa99676SStefan Eßer bc=0 10543aa99676SStefan Eßer dc=1 10553aa99676SStefan Eßer 10563aa99676SStefan Eßer bc_lib="" 10573aa99676SStefan Eßer bc_help="" 10583aa99676SStefan Eßer 10593aa99676SStefan Eßer executables="dc" 10603aa99676SStefan Eßer 10613aa99676SStefan Eßer main_exec="DC" 10623aa99676SStefan Eßer executable="DC_EXEC" 10633aa99676SStefan Eßer 106450696a6eSStefan Eßer install_prereqs=" install_execs" 106550696a6eSStefan Eßer install_man_prereqs=" install_dc_manpage" 10663aa99676SStefan Eßer uninstall_prereqs=" uninstall_dc" 10673aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_dc_manpage" 10683aa99676SStefan Eßer 10693aa99676SStefan Eßerelse 10703aa99676SStefan Eßer 10713aa99676SStefan Eßer bc=1 10723aa99676SStefan Eßer dc=1 10733aa99676SStefan Eßer 10743aa99676SStefan Eßer executables="bc and dc" 10753aa99676SStefan Eßer 10763aa99676SStefan Eßer karatsuba="@\$(KARATSUBA) 30 0 \$(BC_EXEC)" 10773aa99676SStefan Eßer 107850696a6eSStefan Eßer if [ "$library" -eq 0 ]; then 107950696a6eSStefan Eßer install_prereqs=" install_execs" 108050696a6eSStefan Eßer install_man_prereqs=" install_bc_manpage install_dc_manpage" 10813aa99676SStefan Eßer uninstall_prereqs=" uninstall_bc uninstall_dc" 10823aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_bc_manpage uninstall_dc_manpage" 108350696a6eSStefan Eßer else 108450696a6eSStefan Eßer install_prereqs=" install_library install_bcl_header" 108550696a6eSStefan Eßer install_man_prereqs=" install_bcl_manpage" 108650696a6eSStefan Eßer uninstall_prereqs=" uninstall_library uninstall_bcl_header" 108750696a6eSStefan Eßer uninstall_man_prereqs=" uninstall_bcl_manpage" 108850696a6eSStefan Eßer fi 10893aa99676SStefan Eßer 109010328f8bSStefan Eßer second_target_prereqs="$default_target_prereqs" 109110328f8bSStefan Eßer default_target_prereqs="$second_target" 109210328f8bSStefan Eßer default_target_cmd="\$(LINK) \$(BIN) \$(EXEC_PREFIX)\$(DC)" 109310328f8bSStefan Eßer 109410328f8bSStefan Eßerfi 109510328f8bSStefan Eßer 109644d4804dSStefan Eßer# This sets some necessary things for debug mode. 10973aa99676SStefan Eßerif [ "$debug" -eq 1 ]; then 10983aa99676SStefan Eßer 10993aa99676SStefan Eßer if [ -z "$CFLAGS" ] && [ -z "$optimization" ]; then 11003aa99676SStefan Eßer CFLAGS="-O0" 11013aa99676SStefan Eßer fi 11023aa99676SStefan Eßer 11033aa99676SStefan Eßer CFLAGS="-g $CFLAGS" 11043aa99676SStefan Eßer 11053aa99676SStefan Eßerelse 11063aa99676SStefan Eßer CPPFLAGS="-DNDEBUG $CPPFLAGS" 11073aa99676SStefan Eßerfi 11083aa99676SStefan Eßer 110944d4804dSStefan Eßer# Set optimization CFLAGS. 11103aa99676SStefan Eßerif [ -n "$optimization" ]; then 11113aa99676SStefan Eßer CFLAGS="-O$optimization $CFLAGS" 11123aa99676SStefan Eßerfi 11133aa99676SStefan Eßer 111444d4804dSStefan Eßer# Set some defaults. 11153aa99676SStefan Eßerif [ -z "${DESTDIR+set}" ]; then 11163aa99676SStefan Eßer destdir="" 11173aa99676SStefan Eßerelse 11183aa99676SStefan Eßer destdir="DESTDIR = $DESTDIR" 11193aa99676SStefan Eßerfi 11203aa99676SStefan Eßer 1121d101cdd6SStefan Eßer# defprefix is for a warning about locales later. 11223aa99676SStefan Eßerif [ -z "${PREFIX+set}" ]; then 11233aa99676SStefan Eßer PREFIX="/usr/local" 1124d101cdd6SStefan Eßer defprefix=1 1125d101cdd6SStefan Eßerelse 1126d101cdd6SStefan Eßer defprefix=0 11273aa99676SStefan Eßerfi 11283aa99676SStefan Eßer 11293aa99676SStefan Eßerif [ -z "${BINDIR+set}" ]; then 11303aa99676SStefan Eßer BINDIR="$PREFIX/bin" 11313aa99676SStefan Eßerfi 11323aa99676SStefan Eßer 113350696a6eSStefan Eßerif [ -z "${INCLUDEDIR+set}" ]; then 113450696a6eSStefan Eßer INCLUDEDIR="$PREFIX/include" 113550696a6eSStefan Eßerfi 113650696a6eSStefan Eßer 113750696a6eSStefan Eßerif [ -z "${LIBDIR+set}" ]; then 113850696a6eSStefan Eßer LIBDIR="$PREFIX/lib" 113950696a6eSStefan Eßerfi 114050696a6eSStefan Eßer 114110041e99SStefan Eßerif [ -z "${PC_PATH+set}" ]; then 114210041e99SStefan Eßer 114310041e99SStefan Eßer set +e 114410041e99SStefan Eßer 114510041e99SStefan Eßer command -v pkg-config > /dev/null 114610041e99SStefan Eßer err=$? 114710041e99SStefan Eßer 114810041e99SStefan Eßer set -e 114910041e99SStefan Eßer 115010041e99SStefan Eßer if [ "$err" -eq 0 ]; then 115110041e99SStefan Eßer PC_PATH=$(pkg-config --variable=pc_path pkg-config) 115210041e99SStefan Eßer PC_PATH="${PC_PATH%%:*}" 115310041e99SStefan Eßer else 115410041e99SStefan Eßer PC_PATH="" 115510041e99SStefan Eßer fi 115610041e99SStefan Eßer 115710041e99SStefan Eßerfi 115810041e99SStefan Eßer 115944d4804dSStefan Eßer# Set a default for the DATAROOTDIR. This is done if either manpages will be 1160d101cdd6SStefan Eßer# installed, or locales are enabled because that's probably where NLSPATH 116144d4804dSStefan Eßer# points. 11623aa99676SStefan Eßerif [ "$install_manpages" -ne 0 ] || [ "$nls" -ne 0 ]; then 11633aa99676SStefan Eßer if [ -z "${DATAROOTDIR+set}" ]; then 11643aa99676SStefan Eßer DATAROOTDIR="$PREFIX/share" 11653aa99676SStefan Eßer fi 11663aa99676SStefan Eßerfi 11673aa99676SStefan Eßer 116844d4804dSStefan Eßer# Set defaults for manpage environment variables. 11693aa99676SStefan Eßerif [ "$install_manpages" -ne 0 ]; then 11703aa99676SStefan Eßer 11713aa99676SStefan Eßer if [ -z "${DATADIR+set}" ]; then 11723aa99676SStefan Eßer DATADIR="$DATAROOTDIR" 11733aa99676SStefan Eßer fi 11743aa99676SStefan Eßer 11753aa99676SStefan Eßer if [ -z "${MANDIR+set}" ]; then 11763aa99676SStefan Eßer MANDIR="$DATADIR/man" 11773aa99676SStefan Eßer fi 11783aa99676SStefan Eßer 11793aa99676SStefan Eßer if [ -z "${MAN1DIR+set}" ]; then 11803aa99676SStefan Eßer MAN1DIR="$MANDIR/man1" 11813aa99676SStefan Eßer fi 11823aa99676SStefan Eßer 118350696a6eSStefan Eßer if [ -z "${MAN3DIR+set}" ]; then 118450696a6eSStefan Eßer MAN3DIR="$MANDIR/man3" 118550696a6eSStefan Eßer fi 118650696a6eSStefan Eßer 11873aa99676SStefan Eßerelse 118850696a6eSStefan Eßer install_man_prereqs="" 11893aa99676SStefan Eßer uninstall_man_prereqs="" 11903aa99676SStefan Eßerfi 11913aa99676SStefan Eßer 119244d4804dSStefan Eßer# Here is where we test NLS (the locale system). This is done by trying to 119344d4804dSStefan Eßer# compile src/vm.c, which has the relevant code. If it fails, then it is 119444d4804dSStefan Eßer# disabled. 11953aa99676SStefan Eßerif [ "$nls" -ne 0 ]; then 11963aa99676SStefan Eßer 11973aa99676SStefan Eßer set +e 11983aa99676SStefan Eßer 11993aa99676SStefan Eßer printf 'Testing NLS...\n' 12003aa99676SStefan Eßer 12013aa99676SStefan Eßer flags="-DBC_ENABLE_NLS=1 -DBC_ENABLED=$bc -DDC_ENABLED=$dc" 120244d4804dSStefan Eßer flags="$flags -DBC_ENABLE_HISTORY=$hist -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_AFL=0" 120312e0d316SStefan Eßer flags="$flags -DBC_ENABLE_EXTRA_MATH=$extra_math -DBC_ENABLE_OSSFUZZ=0" 120412e0d316SStefan Eßer flags="$flags -I$scriptdir/include/ -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700" 12053aa99676SStefan Eßer 1206d101cdd6SStefan Eßer ccbase=$(basename "$CC") 1207d101cdd6SStefan Eßer 1208d101cdd6SStefan Eßer if [ "$ccbase" = "clang" ]; then 1209d101cdd6SStefan Eßer flags="$flags -Wno-unreachable-code" 1210d101cdd6SStefan Eßer fi 1211d101cdd6SStefan Eßer 121212e0d316SStefan Eßer "$CC" $CPPFLAGS $CFLAGS $flags -c "$scriptdir/src/vm.c" -E > /dev/null 12133aa99676SStefan Eßer 12143aa99676SStefan Eßer err="$?" 12153aa99676SStefan Eßer 121610041e99SStefan Eßer rm -rf "./vm.o" 12173aa99676SStefan Eßer 121812e0d316SStefan Eßer # If this errors, it is probably because of building on Windows or musl, 121912e0d316SStefan Eßer # and NLS is not supported on Windows or musl, so disable it. 12203aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 12213aa99676SStefan Eßer printf 'NLS does not work.\n' 12223aa99676SStefan Eßer if [ $force -eq 0 ]; then 12233aa99676SStefan Eßer printf 'Disabling NLS...\n\n' 12243aa99676SStefan Eßer nls=0 12253aa99676SStefan Eßer else 12263aa99676SStefan Eßer printf 'Forcing NLS...\n\n' 12273aa99676SStefan Eßer fi 12283aa99676SStefan Eßer else 12293aa99676SStefan Eßer printf 'NLS works.\n\n' 12303aa99676SStefan Eßer 12313aa99676SStefan Eßer printf 'Testing gencat...\n' 1232fdc4a7c8SStefan Eßer gencat "./en_US.cat" "$scriptdir/locales/en_US.msg" 2>&1 12333aa99676SStefan Eßer 12343aa99676SStefan Eßer err="$?" 12353aa99676SStefan Eßer 123610041e99SStefan Eßer rm -rf "./en_US.cat" 12373aa99676SStefan Eßer 12383aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 12393aa99676SStefan Eßer printf 'gencat does not work.\n' 12403aa99676SStefan Eßer if [ $force -eq 0 ]; then 12413aa99676SStefan Eßer printf 'Disabling NLS...\n\n' 12423aa99676SStefan Eßer nls=0 12433aa99676SStefan Eßer else 12443aa99676SStefan Eßer printf 'Forcing NLS...\n\n' 12453aa99676SStefan Eßer fi 12463aa99676SStefan Eßer else 12473aa99676SStefan Eßer 12483aa99676SStefan Eßer printf 'gencat works.\n\n' 12493aa99676SStefan Eßer 125044d4804dSStefan Eßer # It turns out that POSIX locales are really terrible, and running 125144d4804dSStefan Eßer # gencat on one machine is not guaranteed to make those cat files 125244d4804dSStefan Eßer # portable to another machine, so we had better warn the user here. 125344d4804dSStefan Eßer if [ "$HOSTCC" != "$CC" ] || [ "$OLDHOSTCFLAGS" != "$OLDCFLAGS" ]; then 12543aa99676SStefan Eßer printf 'Cross-compile detected.\n\n' 12553aa99676SStefan Eßer printf 'WARNING: Catalog files generated with gencat may not be portable\n' 12563aa99676SStefan Eßer printf ' across different architectures.\n\n' 12573aa99676SStefan Eßer fi 12583aa99676SStefan Eßer 12593aa99676SStefan Eßer if [ -z "$NLSPATH" ]; then 12603aa99676SStefan Eßer NLSPATH="/usr/share/locale/%L/%N" 12613aa99676SStefan Eßer fi 12623aa99676SStefan Eßer 12633aa99676SStefan Eßer install_locales_prereqs=" install_locales" 12643aa99676SStefan Eßer uninstall_locales_prereqs=" uninstall_locales" 12653aa99676SStefan Eßer 12663aa99676SStefan Eßer fi 12673aa99676SStefan Eßer 12683aa99676SStefan Eßer fi 12693aa99676SStefan Eßer 12703aa99676SStefan Eßer set -e 12713aa99676SStefan Eßer 12723aa99676SStefan Eßerelse 12733aa99676SStefan Eßer install_locales_prereqs="" 12743aa99676SStefan Eßer uninstall_locales_prereqs="" 1275cf7becd2SStefan Eßer all_locales=0 1276cf7becd2SStefan Eßerfi 1277cf7becd2SStefan Eßer 1278cf7becd2SStefan Eßerif [ "$nls" -ne 0 ] && [ "$all_locales" -ne 0 ]; then 1279cf7becd2SStefan Eßer install_locales="\$(LOCALE_INSTALL) -l \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" 1280cf7becd2SStefan Eßerelse 1281cf7becd2SStefan Eßer install_locales="\$(LOCALE_INSTALL) \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" 12823aa99676SStefan Eßerfi 12833aa99676SStefan Eßer 128444d4804dSStefan Eßer# Like the above tested locale support, this tests history. 12853aa99676SStefan Eßerif [ "$hist" -eq 1 ]; then 12863aa99676SStefan Eßer 1287d101cdd6SStefan Eßer if [ "$hist_impl" = "editline" ]; then 1288d101cdd6SStefan Eßer editline=1 1289d101cdd6SStefan Eßer readline=0 1290d101cdd6SStefan Eßer elif [ "$hist_impl" = "readline" ]; then 1291d101cdd6SStefan Eßer editline=0 1292d101cdd6SStefan Eßer readline=1 1293d101cdd6SStefan Eßer else 1294d101cdd6SStefan Eßer editline=0 1295d101cdd6SStefan Eßer readline=0 129678bc019dSStefan Eßer fi 129778bc019dSStefan Eßer 12983aa99676SStefan Eßer set +e 12993aa99676SStefan Eßer 13003aa99676SStefan Eßer printf 'Testing history...\n' 13013aa99676SStefan Eßer 13023aa99676SStefan Eßer flags="-DBC_ENABLE_HISTORY=1 -DBC_ENABLED=$bc -DDC_ENABLED=$dc" 130344d4804dSStefan Eßer flags="$flags -DBC_ENABLE_NLS=$nls -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_AFL=0" 130478bc019dSStefan Eßer flags="$flags -DBC_ENABLE_EDITLINE=$editline -DBC_ENABLE_READLINE=$readline" 130512e0d316SStefan Eßer flags="$flags -DBC_ENABLE_EXTRA_MATH=$extra_math -DBC_ENABLE_OSSFUZZ=0" 130612e0d316SStefan Eßer flags="$flags -I$scriptdir/include/ -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700" 13073aa99676SStefan Eßer 130812e0d316SStefan Eßer "$CC" $CPPFLAGS $CFLAGS $flags -c "$scriptdir/src/history.c" -E > /dev/null 13093aa99676SStefan Eßer 13103aa99676SStefan Eßer err="$?" 13113aa99676SStefan Eßer 131210041e99SStefan Eßer rm -rf "./history.o" 13133aa99676SStefan Eßer 13143aa99676SStefan Eßer # If this errors, it is probably because of building on Windows, 13153aa99676SStefan Eßer # and history is not supported on Windows, so disable it. 13163aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 13173aa99676SStefan Eßer printf 'History does not work.\n' 13183aa99676SStefan Eßer if [ $force -eq 0 ]; then 13193aa99676SStefan Eßer printf 'Disabling history...\n\n' 13203aa99676SStefan Eßer hist=0 13213aa99676SStefan Eßer else 13223aa99676SStefan Eßer printf 'Forcing history...\n\n' 13233aa99676SStefan Eßer fi 13243aa99676SStefan Eßer else 13253aa99676SStefan Eßer printf 'History works.\n\n' 13263aa99676SStefan Eßer fi 13273aa99676SStefan Eßer 13283aa99676SStefan Eßer set -e 13293aa99676SStefan Eßer 1330d101cdd6SStefan Eßerelse 1331d101cdd6SStefan Eßer 1332d101cdd6SStefan Eßer editline=0 1333d101cdd6SStefan Eßer readline=0 1334d101cdd6SStefan Eßer 13353aa99676SStefan Eßerfi 13363aa99676SStefan Eßer 1337fdc4a7c8SStefan Eßerif [ "$hist" -eq 0 ]; then 133878bc019dSStefan Eßer CFLAGS="$CFLAGS -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0" 133944d4804dSStefan Eßerelse 134078bc019dSStefan Eßer 134178bc019dSStefan Eßer # We are also setting the CFLAGS and LDFLAGS here. 134278bc019dSStefan Eßer if [ "$editline" -ne 0 ]; then 134378bc019dSStefan Eßer LDFLAGS="$LDFLAGS -ledit" 134476238846SStefan Eßer CPPFLAGS="$CPPFLAGS -DBC_ENABLE_EDITLINE=1 -DBC_ENABLE_READLINE=0" 134578bc019dSStefan Eßer elif [ "$readline" -ne 0 ]; then 134678bc019dSStefan Eßer LDFLAGS="$LDFLAGS -lreadline" 134776238846SStefan Eßer CPPFLAGS="$CPPFLAGS -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=1" 134878bc019dSStefan Eßer else 134976238846SStefan Eßer CPPFLAGS="$CPPFLAGS -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0" 135078bc019dSStefan Eßer fi 135178bc019dSStefan Eßer 135278bc019dSStefan Eßerfi 135378bc019dSStefan Eßer 135478bc019dSStefan Eßer# Test FreeBSD. This is not in an if statement because regardless of whatever 135578bc019dSStefan Eßer# the user says, we need to know if we are on FreeBSD. If we are, we cannot set 135678bc019dSStefan Eßer# _POSIX_C_SOURCE and _XOPEN_SOURCE. The FreeBSD headers turn *off* stuff when 135778bc019dSStefan Eßer# that is done. 135878bc019dSStefan Eßerset +e 135978bc019dSStefan Eßerprintf 'Testing for FreeBSD...\n' 136078bc019dSStefan Eßer 136178bc019dSStefan Eßerflags="-DBC_TEST_FREEBSD -DBC_ENABLE_AFL=0" 136212e0d316SStefan Eßer"$CC" $CPPFLAGS $CFLAGS $flags "-I$scriptdir/include" -E "$scriptdir/scripts/os.c" > /dev/null 136378bc019dSStefan Eßer 136478bc019dSStefan Eßererr="$?" 136578bc019dSStefan Eßer 136678bc019dSStefan Eßerif [ "$err" -ne 0 ]; then 136778bc019dSStefan Eßer printf 'On FreeBSD. Not using _POSIX_C_SOURCE and _XOPEN_SOURCE.\n\n' 136878bc019dSStefan Eßerelse 136978bc019dSStefan Eßer printf 'Not on FreeBSD. Using _POSIX_C_SOURCE and _XOPEN_SOURCE.\n\n' 137078bc019dSStefan Eßer CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700" 137144d4804dSStefan Eßerfi 137244d4804dSStefan Eßer 1373a970610aSStefan Eßer# Test macOS. This is not in an if statement because regardless of whatever the 1374a970610aSStefan Eßer# user says, we need to know if we are on macOS. If we are, we have to set 137576238846SStefan Eßer# _DARWIN_C_SOURCE. 1376a970610aSStefan Eßerprintf 'Testing for macOS...\n' 137776238846SStefan Eßer 137876238846SStefan Eßerflags="-DBC_TEST_APPLE -DBC_ENABLE_AFL=0" 137912e0d316SStefan Eßer"$CC" $CPPFLAGS $CFLAGS $flags "-I$scriptdir/include" -E "$scriptdir/scripts/os.c" > /dev/null 138076238846SStefan Eßer 138176238846SStefan Eßererr="$?" 138276238846SStefan Eßer 138376238846SStefan Eßerif [ "$err" -ne 0 ]; then 1384a970610aSStefan Eßer printf 'On macOS. Using _DARWIN_C_SOURCE.\n\n' 138576238846SStefan Eßer apple="-D_DARWIN_C_SOURCE" 138676238846SStefan Eßerelse 1387a970610aSStefan Eßer printf 'Not on macOS.\n\n' 138876238846SStefan Eßer apple="" 138976238846SStefan Eßerfi 139076238846SStefan Eßer 1391a970610aSStefan Eßer# We can't use the linker's strip flag on macOS. 1392a970610aSStefan Eßerif [ "$debug" -eq 0 ] && [ "$apple" = "" ] && [ "$strip_bin" -ne 0 ]; then 1393e6857bd4SStefan Eßer LDFLAGS="-s $LDFLAGS" 1394e6857bd4SStefan Eßerfi 1395e6857bd4SStefan Eßer 139644d4804dSStefan Eßer# Test OpenBSD. This is not in an if statement because regardless of whatever 139744d4804dSStefan Eßer# the user says, we need to know if we are on OpenBSD to activate _BSD_SOURCE. 139844d4804dSStefan Eßer# No, I cannot `#define _BSD_SOURCE` in a header because OpenBSD's patched GCC 139944d4804dSStefan Eßer# and Clang complain that that is only allowed for system headers. Sigh....So we 140044d4804dSStefan Eßer# have to check at configure time and set it on the compiler command-line. And 140144d4804dSStefan Eßer# we have to set it because we also set _POSIX_C_SOURCE, which OpenBSD headers 140244d4804dSStefan Eßer# detect, and when they detect it, they turn off _BSD_SOURCE unless it is 140344d4804dSStefan Eßer# specifically requested. 140444d4804dSStefan Eßerprintf 'Testing for OpenBSD...\n' 140544d4804dSStefan Eßer 140644d4804dSStefan Eßerflags="-DBC_TEST_OPENBSD -DBC_ENABLE_AFL=0" 140712e0d316SStefan Eßer"$CC" $CPPFLAGS $CFLAGS $flags "-I$scriptdir/include" -E "$scriptdir/scripts/os.c" > /dev/null 140844d4804dSStefan Eßer 140944d4804dSStefan Eßererr="$?" 141044d4804dSStefan Eßer 141144d4804dSStefan Eßerif [ "$err" -ne 0 ]; then 1412d101cdd6SStefan Eßer 141344d4804dSStefan Eßer printf 'On OpenBSD. Using _BSD_SOURCE.\n\n' 141444d4804dSStefan Eßer bsd="-D_BSD_SOURCE" 1415d101cdd6SStefan Eßer 1416d101cdd6SStefan Eßer # Readline errors on OpenBSD, for some weird reason. 1417d101cdd6SStefan Eßer if [ "$readline" -ne 0 ]; then 1418d101cdd6SStefan Eßer usage "Cannot use readline on OpenBSD" 1419d101cdd6SStefan Eßer fi 1420d101cdd6SStefan Eßer 142144d4804dSStefan Eßerelse 142244d4804dSStefan Eßer printf 'Not on OpenBSD.\n\n' 142344d4804dSStefan Eßer bsd="" 142444d4804dSStefan Eßerfi 142544d4804dSStefan Eßer 142676238846SStefan Eßerset -e 142776238846SStefan Eßer 142850696a6eSStefan Eßerif [ "$library" -eq 1 ]; then 142950696a6eSStefan Eßer bc_lib="" 143050696a6eSStefan Eßerfi 143150696a6eSStefan Eßer 143250696a6eSStefan Eßerif [ "$extra_math" -eq 1 ] && [ "$bc" -ne 0 ] && [ "$library" -eq 0 ]; then 14333aa99676SStefan Eßer BC_LIB2_O="\$(GEN_DIR)/lib2.o" 14343aa99676SStefan Eßerelse 14353aa99676SStefan Eßer BC_LIB2_O="" 14363aa99676SStefan Eßerfi 14373aa99676SStefan Eßer 1438d101cdd6SStefan EßerGEN_DIR="$scriptdir/gen" 1439d101cdd6SStefan Eßer 144044d4804dSStefan Eßer# These lines set the appropriate targets based on whether `gen/strgen.c` or 144144d4804dSStefan Eßer# `gen/strgen.sh` is used. 14423aa99676SStefan EßerGEN="strgen" 144312e0d316SStefan EßerGEN_EXEC_TARGET="\$(HOSTCC) -DBC_ENABLE_AFL=0 -DBC_ENABLE_OSSFUZZ=0 -I$scriptdir/include/ \$(HOSTCFLAGS) -o \$(GEN_EXEC) \$(GEN_C)" 1444fdc4a7c8SStefan EßerCLEAN_PREREQS=" clean_gen" 14453aa99676SStefan Eßer 14463aa99676SStefan Eßerif [ -z "${GEN_HOST+set}" ]; then 14473aa99676SStefan Eßer GEN_HOST=1 14483aa99676SStefan Eßerelse 14493aa99676SStefan Eßer if [ "$GEN_HOST" -eq 0 ]; then 14503aa99676SStefan Eßer GEN="strgen.sh" 14513aa99676SStefan Eßer GEN_EXEC_TARGET="@printf 'Do not need to build gen/strgen.c\\\\n'" 14523aa99676SStefan Eßer fi 14533aa99676SStefan Eßerfi 14543aa99676SStefan Eßer 145512e0d316SStefan Eßer# The fuzzer files are always unneeded because they'll be built separately. 14563aa99676SStefan Eßermanpage_args="" 145712e0d316SStefan Eßerunneeded="bc_fuzzer.c dc_fuzzer.c" 145810328f8bSStefan Eßerheaders="\$(HEADERS)" 14593aa99676SStefan Eßer 146044d4804dSStefan Eßer# This series of if statements figure out what source files are *not* needed. 14613aa99676SStefan Eßerif [ "$extra_math" -eq 0 ]; then 146278bc019dSStefan Eßer exclude_extra_math=1 14633aa99676SStefan Eßer manpage_args="E" 146410328f8bSStefan Eßer unneeded="$unneeded rand.c" 146510328f8bSStefan Eßerelse 146678bc019dSStefan Eßer exclude_extra_math=0 146710328f8bSStefan Eßer headers="$headers \$(EXTRA_MATH_HEADERS)" 14683aa99676SStefan Eßerfi 14693aa99676SStefan Eßer 147044d4804dSStefan Eßer# All of these next if statements set the build type and mark certain source 147144d4804dSStefan Eßer# files as unneeded so that they won't have targets generated for them. 147244d4804dSStefan Eßer 14733aa99676SStefan Eßerif [ "$hist" -eq 0 ]; then 14743aa99676SStefan Eßer manpage_args="${manpage_args}H" 147510328f8bSStefan Eßer unneeded="$unneeded history.c" 147610328f8bSStefan Eßerelse 147710328f8bSStefan Eßer headers="$headers \$(HISTORY_HEADERS)" 14783aa99676SStefan Eßerfi 14793aa99676SStefan Eßer 14803aa99676SStefan Eßerif [ "$nls" -eq 0 ]; then 14813aa99676SStefan Eßer manpage_args="${manpage_args}N" 14823aa99676SStefan Eßerfi 14833aa99676SStefan Eßer 148450696a6eSStefan Eßerif [ "$bc" -eq 0 ]; then 148550696a6eSStefan Eßer unneeded="$unneeded bc.c bc_lex.c bc_parse.c" 148610328f8bSStefan Eßerelse 148710328f8bSStefan Eßer headers="$headers \$(BC_HEADERS)" 148850696a6eSStefan Eßerfi 148950696a6eSStefan Eßer 149050696a6eSStefan Eßerif [ "$dc" -eq 0 ]; then 149150696a6eSStefan Eßer unneeded="$unneeded dc.c dc_lex.c dc_parse.c" 149210328f8bSStefan Eßerelse 149310328f8bSStefan Eßer headers="$headers \$(DC_HEADERS)" 149450696a6eSStefan Eßerfi 149550696a6eSStefan Eßer 1496fdc4a7c8SStefan Eßerversion=$(cat "$scriptdir/VERSION.txt" | head -n1) 149710041e99SStefan Eßer 149850696a6eSStefan Eßerif [ "$library" -ne 0 ]; then 149910041e99SStefan Eßer 150050696a6eSStefan Eßer unneeded="$unneeded args.c opt.c read.c file.c main.c" 150150696a6eSStefan Eßer unneeded="$unneeded lang.c lex.c parse.c program.c" 150250696a6eSStefan Eßer unneeded="$unneeded bc.c bc_lex.c bc_parse.c" 150350696a6eSStefan Eßer unneeded="$unneeded dc.c dc_lex.c dc_parse.c" 150410328f8bSStefan Eßer headers="$headers \$(LIBRARY_HEADERS)" 150510041e99SStefan Eßer 150610041e99SStefan Eßer if [ "$PC_PATH" != "" ]; then 150710041e99SStefan Eßer 150810041e99SStefan Eßer contents=$(cat "$scriptdir/bcl.pc.in") 150910041e99SStefan Eßer 151010041e99SStefan Eßer contents=$(replace "$contents" "INCLUDEDIR" "$INCLUDEDIR") 151110041e99SStefan Eßer contents=$(replace "$contents" "LIBDIR" "$LIBDIR") 151210041e99SStefan Eßer contents=$(replace "$contents" "VERSION" "$version") 151310041e99SStefan Eßer 1514175a4d10SStefan Eßer printf '%s\n' "$contents" > "$scriptdir/bcl.pc" 151510041e99SStefan Eßer 151610041e99SStefan Eßer pkg_config_install="\$(SAFE_INSTALL) \$(PC_INSTALL_ARGS) \"\$(BCL_PC)\" \"\$(DESTDIR)\$(PC_PATH)/\$(BCL_PC)\"" 151710041e99SStefan Eßer pkg_config_uninstall="\$(RM) -f \"\$(DESTDIR)\$(PC_PATH)/\$(BCL_PC)\"" 151810041e99SStefan Eßer 151950696a6eSStefan Eßer else 152010041e99SStefan Eßer 152110041e99SStefan Eßer pkg_config_install="" 152210041e99SStefan Eßer pkg_config_uninstall="" 152310041e99SStefan Eßer 152410041e99SStefan Eßer fi 152510041e99SStefan Eßer 152610041e99SStefan Eßerelse 152710041e99SStefan Eßer 152850696a6eSStefan Eßer unneeded="$unneeded library.c" 152910041e99SStefan Eßer 153010041e99SStefan Eßer PC_PATH="" 153110041e99SStefan Eßer pkg_config_install="" 153210041e99SStefan Eßer pkg_config_uninstall="" 153310041e99SStefan Eßer 153450696a6eSStefan Eßerfi 153550696a6eSStefan Eßer 153612e0d316SStefan Eßer# library.c, bc_fuzzer.c, and dc_fuzzer.c are not needed under normal 153712e0d316SStefan Eßer# circumstances. 153844d4804dSStefan Eßerif [ "$unneeded" = "" ]; then 153912e0d316SStefan Eßer unneeded="library.c bc_fuzzer.c dc_fuzzer.c" 154044d4804dSStefan Eßerfi 154144d4804dSStefan Eßer 154244d4804dSStefan Eßer# This sets the appropriate manpage for a full build. 154310328f8bSStefan Eßerif [ "$manpage_args" = "" ]; then 154410328f8bSStefan Eßer manpage_args="A" 154510328f8bSStefan Eßerfi 154610328f8bSStefan Eßer 154744d4804dSStefan Eßerif [ "$bc_default_prompt" = "" ]; then 154844d4804dSStefan Eßer bc_default_prompt="$bc_default_tty_mode" 154944d4804dSStefan Eßerfi 155044d4804dSStefan Eßer 155144d4804dSStefan Eßerif [ "$dc_default_prompt" = "" ]; then 155244d4804dSStefan Eßer dc_default_prompt="$dc_default_tty_mode" 155344d4804dSStefan Eßerfi 155444d4804dSStefan Eßer 1555e6857bd4SStefan Eßerprintf 'unneeded: %s\n' "$unneeded" 1556e6857bd4SStefan Eßer 15573aa99676SStefan Eßer# Print out the values; this is for debugging. 155810041e99SStefan Eßerprintf 'Version: %s\n' "$version" 155910041e99SStefan Eßer 15603aa99676SStefan Eßerif [ "$bc" -ne 0 ]; then 15613aa99676SStefan Eßer printf 'Building bc\n' 15623aa99676SStefan Eßerelse 15633aa99676SStefan Eßer printf 'Not building bc\n' 15643aa99676SStefan Eßerfi 15653aa99676SStefan Eßerif [ "$dc" -ne 0 ]; then 15663aa99676SStefan Eßer printf 'Building dc\n' 15673aa99676SStefan Eßerelse 15683aa99676SStefan Eßer printf 'Not building dc\n' 15693aa99676SStefan Eßerfi 15703aa99676SStefan Eßerprintf '\n' 157150696a6eSStefan Eßerprintf 'BC_ENABLE_LIBRARY=%s\n\n' "$library" 15723aa99676SStefan Eßerprintf 'BC_ENABLE_HISTORY=%s\n' "$hist" 15733aa99676SStefan Eßerprintf 'BC_ENABLE_EXTRA_MATH=%s\n' "$extra_math" 1574d101cdd6SStefan Eßerprintf 'BC_ENABLE_NLS=%s\n\n' "$nls" 15753aa99676SStefan Eßerprintf '\n' 15763aa99676SStefan Eßerprintf 'BC_NUM_KARATSUBA_LEN=%s\n' "$karatsuba_len" 15773aa99676SStefan Eßerprintf '\n' 15783aa99676SStefan Eßerprintf 'CC=%s\n' "$CC" 15793aa99676SStefan Eßerprintf 'CFLAGS=%s\n' "$CFLAGS" 15803aa99676SStefan Eßerprintf 'HOSTCC=%s\n' "$HOSTCC" 15813aa99676SStefan Eßerprintf 'HOSTCFLAGS=%s\n' "$HOSTCFLAGS" 15823aa99676SStefan Eßerprintf 'CPPFLAGS=%s\n' "$CPPFLAGS" 15833aa99676SStefan Eßerprintf 'LDFLAGS=%s\n' "$LDFLAGS" 15843aa99676SStefan Eßerprintf 'PREFIX=%s\n' "$PREFIX" 15853aa99676SStefan Eßerprintf 'BINDIR=%s\n' "$BINDIR" 158650696a6eSStefan Eßerprintf 'INCLUDEDIR=%s\n' "$INCLUDEDIR" 158750696a6eSStefan Eßerprintf 'LIBDIR=%s\n' "$LIBDIR" 15883aa99676SStefan Eßerprintf 'DATAROOTDIR=%s\n' "$DATAROOTDIR" 15893aa99676SStefan Eßerprintf 'DATADIR=%s\n' "$DATADIR" 15903aa99676SStefan Eßerprintf 'MANDIR=%s\n' "$MANDIR" 15913aa99676SStefan Eßerprintf 'MAN1DIR=%s\n' "$MAN1DIR" 159250696a6eSStefan Eßerprintf 'MAN3DIR=%s\n' "$MAN3DIR" 15933aa99676SStefan Eßerprintf 'NLSPATH=%s\n' "$NLSPATH" 159410041e99SStefan Eßerprintf 'PC_PATH=%s\n' "$PC_PATH" 15953aa99676SStefan Eßerprintf 'EXECSUFFIX=%s\n' "$EXECSUFFIX" 15963aa99676SStefan Eßerprintf 'EXECPREFIX=%s\n' "$EXECPREFIX" 15973aa99676SStefan Eßerprintf 'DESTDIR=%s\n' "$DESTDIR" 15983aa99676SStefan Eßerprintf 'LONG_BIT=%s\n' "$LONG_BIT" 15993aa99676SStefan Eßerprintf 'GEN_HOST=%s\n' "$GEN_HOST" 16003aa99676SStefan Eßerprintf 'GEN_EMU=%s\n' "$GEN_EMU" 160144d4804dSStefan Eßerprintf '\n' 160244d4804dSStefan Eßerprintf 'Setting Defaults\n' 160344d4804dSStefan Eßerprintf '================\n' 160444d4804dSStefan Eßerprintf 'bc.banner=%s\n' "$bc_default_banner" 160544d4804dSStefan Eßerprintf 'bc.sigint_reset=%s\n' "$bc_default_sigint_reset" 160644d4804dSStefan Eßerprintf 'dc.sigint_reset=%s\n' "$dc_default_sigint_reset" 160744d4804dSStefan Eßerprintf 'bc.tty_mode=%s\n' "$bc_default_tty_mode" 160844d4804dSStefan Eßerprintf 'dc.tty_mode=%s\n' "$dc_default_tty_mode" 160944d4804dSStefan Eßerprintf 'bc.prompt=%s\n' "$bc_default_prompt" 161044d4804dSStefan Eßerprintf 'dc.prompt=%s\n' "$dc_default_prompt" 161110041e99SStefan Eßerprintf 'bc.expr_exit=%s\n' "$bc_default_expr_exit" 161210041e99SStefan Eßerprintf 'dc.expr_exit=%s\n' "$dc_default_expr_exit" 1613d101cdd6SStefan Eßerprintf 'bc.digit_clamp=%s\n' "$bc_default_digit_clamp" 1614d101cdd6SStefan Eßerprintf 'dc.digit_clamp=%s\n' "$dc_default_digit_clamp" 1615d101cdd6SStefan Eßer 1616d101cdd6SStefan Eßer# This code outputs a warning. The warning is to not surprise users when locales 1617d101cdd6SStefan Eßer# are installed outside of the prefix. This warning is suppressed when the 1618d101cdd6SStefan Eßer# default prefix is used, as well, so as not to panic users just installing by 1619d101cdd6SStefan Eßer# hand. I believe this will be okay because NLSPATH is usually in /usr and the 1620d101cdd6SStefan Eßer# default prefix is /usr/local, so they'll be close that way. 1621d101cdd6SStefan Eßerif [ "$nls" -ne 0 ] && [ "${NLSPATH#$PREFIX}" = "${NLSPATH}" ] && [ "$defprefix" -eq 0 ]; then 1622d101cdd6SStefan Eßer printf '\n********************************************************************************\n\n' 1623d101cdd6SStefan Eßer printf 'WARNING: Locales will *NOT* be installed in $PREFIX (%s).\n' "$PREFIX" 1624d101cdd6SStefan Eßer printf '\n' 1625d101cdd6SStefan Eßer printf ' This is because they *MUST* be installed at a fixed location to even\n' 1626d101cdd6SStefan Eßer printf ' work, and that fixed location is $NLSPATH (%s).\n' "$NLSPATH" 1627d101cdd6SStefan Eßer printf '\n' 1628d101cdd6SStefan Eßer printf ' This location is *outside* of $PREFIX. If you do not wish to install\n' 1629d101cdd6SStefan Eßer printf ' locales outside of $PREFIX, you must disable NLS with the -N or the\n' 1630d101cdd6SStefan Eßer printf ' --disable-nls options.\n' 1631d101cdd6SStefan Eßer printf '\n' 1632d101cdd6SStefan Eßer printf ' The author apologizes for the inconvenience, but the need to install\n' 1633d101cdd6SStefan Eßer printf ' the locales at a fixed location is mandated by POSIX, and it is not\n' 1634d101cdd6SStefan Eßer printf ' possible for the author to change that requirement.\n' 1635d101cdd6SStefan Eßer printf '\n********************************************************************************\n' 1636d101cdd6SStefan Eßerfi 163744d4804dSStefan Eßer 163844d4804dSStefan Eßer# This is where the real work begins. This is the point at which the Makefile.in 163944d4804dSStefan Eßer# template is edited and output to the Makefile. 16403aa99676SStefan Eßer 16413aa99676SStefan Eßercontents=$(cat "$scriptdir/Makefile.in") 16423aa99676SStefan Eßer 16433aa99676SStefan Eßerneedle="WARNING" 16443aa99676SStefan Eßerreplacement='*** WARNING: Autogenerated from Makefile.in. DO NOT MODIFY ***' 16453aa99676SStefan Eßer 16463aa99676SStefan Eßercontents=$(replace "$contents" "$needle" "$replacement") 16473aa99676SStefan Eßer 164844d4804dSStefan Eßer# The contents are edited to have the list of files to build. 164910328f8bSStefan Eßercontents=$(gen_file_list "$contents" $unneeded) 165010328f8bSStefan Eßer 165110328f8bSStefan EßerSRC_TARGETS="" 165210328f8bSStefan Eßer 165344d4804dSStefan Eßer# This line and loop generates the individual targets for source files. I used 165444d4804dSStefan Eßer# to just use an implicit target, but that was found to be inadequate when I 165544d4804dSStefan Eßer# added the library. 165610328f8bSStefan Eßersrc_files=$(find_src_files $unneeded) 165710328f8bSStefan Eßer 165810328f8bSStefan Eßerfor f in $src_files; do 165910328f8bSStefan Eßer o=$(replace_ext "$f" "c" "o") 166010041e99SStefan Eßer o=$(basename "$o") 166110041e99SStefan Eßer SRC_TARGETS=$(printf '%s\n\nsrc/%s: src %s %s\n\t$(CC) $(CFLAGS) -o src/%s -c %s\n' \ 166210328f8bSStefan Eßer "$SRC_TARGETS" "$o" "$headers" "$f" "$o" "$f") 166310328f8bSStefan Eßerdone 166410328f8bSStefan Eßer 166544d4804dSStefan Eßer# Replace all the placeholders. 166610041e99SStefan Eßercontents=$(replace "$contents" "ROOTDIR" "$scriptdir") 166710041e99SStefan Eßercontents=$(replace "$contents" "BUILDDIR" "$builddir") 166810041e99SStefan Eßer 166910328f8bSStefan Eßercontents=$(replace "$contents" "HEADERS" "$headers") 167010328f8bSStefan Eßer 1671fdc4a7c8SStefan Eßercontents=$(replace "$contents" "VERSION" "$version") 1672fdc4a7c8SStefan Eßer 16733aa99676SStefan Eßercontents=$(replace "$contents" "BC_ENABLED" "$bc") 16743aa99676SStefan Eßercontents=$(replace "$contents" "DC_ENABLED" "$dc") 167510328f8bSStefan Eßer 16767e5c51e5SStefan Eßercontents=$(replace "$contents" "BUILD_TYPE" "$manpage_args") 167778bc019dSStefan Eßercontents=$(replace "$contents" "EXCLUDE_EXTRA_MATH" "$exclude_extra_math") 16787e5c51e5SStefan Eßer 167950696a6eSStefan Eßercontents=$(replace "$contents" "LIBRARY" "$library") 16803aa99676SStefan Eßercontents=$(replace "$contents" "HISTORY" "$hist") 16813aa99676SStefan Eßercontents=$(replace "$contents" "EXTRA_MATH" "$extra_math") 16823aa99676SStefan Eßercontents=$(replace "$contents" "NLS" "$nls") 168310328f8bSStefan Eßer 16843aa99676SStefan Eßercontents=$(replace "$contents" "BC_LIB_O" "$bc_lib") 16853aa99676SStefan Eßercontents=$(replace "$contents" "BC_HELP_O" "$bc_help") 16863aa99676SStefan Eßercontents=$(replace "$contents" "DC_HELP_O" "$dc_help") 16873aa99676SStefan Eßercontents=$(replace "$contents" "BC_LIB2_O" "$BC_LIB2_O") 16883aa99676SStefan Eßercontents=$(replace "$contents" "KARATSUBA_LEN" "$karatsuba_len") 16893aa99676SStefan Eßer 16903aa99676SStefan Eßercontents=$(replace "$contents" "NLSPATH" "$NLSPATH") 16913aa99676SStefan Eßercontents=$(replace "$contents" "DESTDIR" "$destdir") 16923aa99676SStefan Eßercontents=$(replace "$contents" "EXECSUFFIX" "$EXECSUFFIX") 16933aa99676SStefan Eßercontents=$(replace "$contents" "EXECPREFIX" "$EXECPREFIX") 16943aa99676SStefan Eßercontents=$(replace "$contents" "BINDIR" "$BINDIR") 169550696a6eSStefan Eßercontents=$(replace "$contents" "INCLUDEDIR" "$INCLUDEDIR") 169650696a6eSStefan Eßercontents=$(replace "$contents" "LIBDIR" "$LIBDIR") 16973aa99676SStefan Eßercontents=$(replace "$contents" "MAN1DIR" "$MAN1DIR") 169850696a6eSStefan Eßercontents=$(replace "$contents" "MAN3DIR" "$MAN3DIR") 16993aa99676SStefan Eßercontents=$(replace "$contents" "CFLAGS" "$CFLAGS") 17003aa99676SStefan Eßercontents=$(replace "$contents" "HOSTCFLAGS" "$HOSTCFLAGS") 17013aa99676SStefan Eßercontents=$(replace "$contents" "CPPFLAGS" "$CPPFLAGS") 17023aa99676SStefan Eßercontents=$(replace "$contents" "LDFLAGS" "$LDFLAGS") 17033aa99676SStefan Eßercontents=$(replace "$contents" "CC" "$CC") 17043aa99676SStefan Eßercontents=$(replace "$contents" "HOSTCC" "$HOSTCC") 17053aa99676SStefan Eßercontents=$(replace "$contents" "INSTALL_PREREQS" "$install_prereqs") 170650696a6eSStefan Eßercontents=$(replace "$contents" "INSTALL_MAN_PREREQS" "$install_man_prereqs") 1707cf7becd2SStefan Eßercontents=$(replace "$contents" "INSTALL_LOCALES" "$install_locales") 17083aa99676SStefan Eßercontents=$(replace "$contents" "INSTALL_LOCALES_PREREQS" "$install_locales_prereqs") 17093aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_MAN_PREREQS" "$uninstall_man_prereqs") 17103aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_PREREQS" "$uninstall_prereqs") 17113aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_LOCALES_PREREQS" "$uninstall_locales_prereqs") 17123aa99676SStefan Eßer 171310041e99SStefan Eßercontents=$(replace "$contents" "PC_PATH" "$PC_PATH") 171410041e99SStefan Eßercontents=$(replace "$contents" "PKG_CONFIG_INSTALL" "$pkg_config_install") 171510041e99SStefan Eßercontents=$(replace "$contents" "PKG_CONFIG_UNINSTALL" "$pkg_config_uninstall") 171610041e99SStefan Eßer 171710328f8bSStefan Eßercontents=$(replace "$contents" "DEFAULT_TARGET" "$default_target") 171810328f8bSStefan Eßercontents=$(replace "$contents" "DEFAULT_TARGET_PREREQS" "$default_target_prereqs") 171910328f8bSStefan Eßercontents=$(replace "$contents" "DEFAULT_TARGET_CMD" "$default_target_cmd") 172010328f8bSStefan Eßercontents=$(replace "$contents" "SECOND_TARGET" "$second_target") 172110328f8bSStefan Eßercontents=$(replace "$contents" "SECOND_TARGET_PREREQS" "$second_target_prereqs") 172210328f8bSStefan Eßercontents=$(replace "$contents" "SECOND_TARGET_CMD" "$second_target_cmd") 172310328f8bSStefan Eßer 172450696a6eSStefan Eßercontents=$(replace "$contents" "ALL_PREREQ" "$ALL_PREREQ") 172510328f8bSStefan Eßercontents=$(replace "$contents" "BC_EXEC_PREREQ" "$bc_exec_prereq") 172610328f8bSStefan Eßercontents=$(replace "$contents" "BC_EXEC_CMD" "$bc_exec_cmd") 172710328f8bSStefan Eßercontents=$(replace "$contents" "DC_EXEC_PREREQ" "$dc_exec_prereq") 172810328f8bSStefan Eßercontents=$(replace "$contents" "DC_EXEC_CMD" "$dc_exec_cmd") 172950696a6eSStefan Eßer 1730fdc4a7c8SStefan Eßercontents=$(replace "$contents" "GENERATE_TESTS" "$generate_tests") 1731fdc4a7c8SStefan Eßercontents=$(replace "$contents" "PROBLEMATIC_TESTS" "$problematic_tests") 1732fdc4a7c8SStefan Eßer 17333aa99676SStefan Eßercontents=$(replace "$contents" "EXECUTABLES" "$executables") 17343aa99676SStefan Eßercontents=$(replace "$contents" "MAIN_EXEC" "$main_exec") 17353aa99676SStefan Eßercontents=$(replace "$contents" "EXEC" "$executable") 17363aa99676SStefan Eßer 17373aa99676SStefan Eßercontents=$(replace "$contents" "KARATSUBA" "$karatsuba") 17383aa99676SStefan Eßer 17393aa99676SStefan Eßercontents=$(replace "$contents" "LONG_BIT_DEFINE" "$LONG_BIT_DEFINE") 17403aa99676SStefan Eßer 1741d101cdd6SStefan Eßercontents=$(replace "$contents" "GEN_DIR" "$GEN_DIR") 17423aa99676SStefan Eßercontents=$(replace "$contents" "GEN" "$GEN") 17433aa99676SStefan Eßercontents=$(replace "$contents" "GEN_EXEC_TARGET" "$GEN_EXEC_TARGET") 17443aa99676SStefan Eßercontents=$(replace "$contents" "CLEAN_PREREQS" "$CLEAN_PREREQS") 17453aa99676SStefan Eßercontents=$(replace "$contents" "GEN_EMU" "$GEN_EMU") 17463aa99676SStefan Eßer 174744d4804dSStefan Eßercontents=$(replace "$contents" "BSD" "$bsd") 174876238846SStefan Eßercontents=$(replace "$contents" "APPLE" "$apple") 174944d4804dSStefan Eßer 175044d4804dSStefan Eßercontents=$(replace "$contents" "BC_DEFAULT_BANNER" "$bc_default_banner") 175144d4804dSStefan Eßercontents=$(replace "$contents" "BC_DEFAULT_SIGINT_RESET" "$bc_default_sigint_reset") 175244d4804dSStefan Eßercontents=$(replace "$contents" "DC_DEFAULT_SIGINT_RESET" "$dc_default_sigint_reset") 175344d4804dSStefan Eßercontents=$(replace "$contents" "BC_DEFAULT_TTY_MODE" "$bc_default_tty_mode") 175444d4804dSStefan Eßercontents=$(replace "$contents" "DC_DEFAULT_TTY_MODE" "$dc_default_tty_mode") 175544d4804dSStefan Eßercontents=$(replace "$contents" "BC_DEFAULT_PROMPT" "$bc_default_prompt") 175644d4804dSStefan Eßercontents=$(replace "$contents" "DC_DEFAULT_PROMPT" "$dc_default_prompt") 175710041e99SStefan Eßercontents=$(replace "$contents" "BC_DEFAULT_EXPR_EXIT" "$bc_default_expr_exit") 175810041e99SStefan Eßercontents=$(replace "$contents" "DC_DEFAULT_EXPR_EXIT" "$dc_default_expr_exit") 1759d101cdd6SStefan Eßercontents=$(replace "$contents" "BC_DEFAULT_DIGIT_CLAMP" "$bc_default_digit_clamp") 1760d101cdd6SStefan Eßercontents=$(replace "$contents" "DC_DEFAULT_DIGIT_CLAMP" "$dc_default_digit_clamp") 176144d4804dSStefan Eßer 176244d4804dSStefan Eßer# Do the first print to the Makefile. 176310041e99SStefan Eßerprintf '%s\n%s\n\n' "$contents" "$SRC_TARGETS" > "Makefile" 176410328f8bSStefan Eßer 176544d4804dSStefan Eßer# Copy the correct manuals to the expected places. 176610041e99SStefan Eßermkdir -p manuals 176710041e99SStefan Eßercp -f "$scriptdir/manuals/bc/$manpage_args.1.md" manuals/bc.1.md 176810041e99SStefan Eßercp -f "$scriptdir/manuals/bc/$manpage_args.1" manuals/bc.1 176910041e99SStefan Eßercp -f "$scriptdir/manuals/dc/$manpage_args.1.md" manuals/dc.1.md 177010041e99SStefan Eßercp -f "$scriptdir/manuals/dc/$manpage_args.1" manuals/dc.1 17713aa99676SStefan Eßer 17723aa99676SStefan Eßermake clean > /dev/null 1773