13aa99676SStefan Eßer#! /bin/sh 23aa99676SStefan Eßer# 33aa99676SStefan Eßer# SPDX-License-Identifier: BSD-2-Clause 43aa99676SStefan Eßer# 510328f8bSStefan Eßer# Copyright (c) 2018-2021 Gavin D. Howard and contributors. 63aa99676SStefan Eßer# 73aa99676SStefan Eßer# Redistribution and use in source and binary forms, with or without 83aa99676SStefan Eßer# modification, are permitted provided that the following conditions are met: 93aa99676SStefan Eßer# 103aa99676SStefan Eßer# * Redistributions of source code must retain the above copyright notice, this 113aa99676SStefan Eßer# list of conditions and the following disclaimer. 123aa99676SStefan Eßer# 133aa99676SStefan Eßer# * Redistributions in binary form must reproduce the above copyright notice, 143aa99676SStefan Eßer# this list of conditions and the following disclaimer in the documentation 153aa99676SStefan Eßer# and/or other materials provided with the distribution. 163aa99676SStefan Eßer# 173aa99676SStefan Eßer# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 183aa99676SStefan Eßer# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 193aa99676SStefan Eßer# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 203aa99676SStefan Eßer# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 213aa99676SStefan Eßer# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 223aa99676SStefan Eßer# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 233aa99676SStefan Eßer# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 243aa99676SStefan Eßer# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 253aa99676SStefan Eßer# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 263aa99676SStefan Eßer# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 273aa99676SStefan Eßer# POSSIBILITY OF SUCH DAMAGE. 283aa99676SStefan Eßer# 293aa99676SStefan Eßer 303aa99676SStefan Eßerscript="$0" 313aa99676SStefan Eßerscriptdir=$(dirname "$script") 323aa99676SStefan Eßerscript=$(basename "$script") 333aa99676SStefan Eßer 343aa99676SStefan Eßer. "$scriptdir/functions.sh" 353aa99676SStefan Eßer 3610328f8bSStefan Eßercd "$scriptdir" 3710328f8bSStefan Eßer 383aa99676SStefan Eßerusage() { 393aa99676SStefan Eßer 403aa99676SStefan Eßer if [ $# -gt 0 ]; then 413aa99676SStefan Eßer 423aa99676SStefan Eßer _usage_val=1 433aa99676SStefan Eßer 443aa99676SStefan Eßer printf "%s\n\n" "$1" 453aa99676SStefan Eßer 463aa99676SStefan Eßer else 473aa99676SStefan Eßer _usage_val=0 483aa99676SStefan Eßer fi 493aa99676SStefan Eßer 5050696a6eSStefan Eßer printf 'usage:\n' 5150696a6eSStefan Eßer printf ' %s -h\n' "$script" 523aa99676SStefan Eßer printf ' %s --help\n' "$script" 5310328f8bSStefan Eßer printf ' %s [-a|-bD|-dB|-c] [-CEfgGHlmMNPtTvz] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\n' "$script" 543aa99676SStefan Eßer printf ' %s \\\n' "$script" 5550696a6eSStefan Eßer printf ' [--library|--bc-only --disable-dc|--dc-only --disable-bc|--coverage]\\\n' 5650696a6eSStefan Eßer printf ' [--force --debug --disable-extra-math --disable-generated-tests] \\\n' 573aa99676SStefan Eßer printf ' [--disable-history --disable-man-pages --disable-nls] \\\n' 58cf7becd2SStefan Eßer printf ' [--disable-prompt --disable-strip] [--install-all-locales] \\\n' 593aa99676SStefan Eßer printf ' [--opt=OPT_LEVEL] [--karatsuba-len=KARATSUBA_LEN] \\\n' 603aa99676SStefan Eßer printf ' [--prefix=PREFIX] [--bindir=BINDIR] [--datarootdir=DATAROOTDIR] \\\n' 613aa99676SStefan Eßer printf ' [--datadir=DATADIR] [--mandir=MANDIR] [--man1dir=MAN1DIR] \\\n' 623aa99676SStefan Eßer printf '\n' 6350696a6eSStefan Eßer printf ' -a, --library\n' 6450696a6eSStefan Eßer printf ' Build the libbc instead of the programs. This is meant to be used with\n' 6550696a6eSStefan Eßer printf ' Other software like programming languages that want to make use of the\n' 6650696a6eSStefan Eßer printf ' parsing and math capabilities. This option will install headers using\n' 6750696a6eSStefan Eßer printf ' `make install`.\n' 683aa99676SStefan Eßer printf ' -b, --bc-only\n' 6950696a6eSStefan Eßer printf ' Build bc only. It is an error if "-d", "--dc-only", "-B", or\n' 7050696a6eSStefan Eßer printf ' "--disable-bc" are specified too.\n' 713aa99676SStefan Eßer printf ' -B, --disable-bc\n' 723aa99676SStefan Eßer printf ' Disable bc. It is an error if "-b", "--bc-only", "-D", or "--disable-dc"\n' 733aa99676SStefan Eßer printf ' are specified too.\n' 743aa99676SStefan Eßer printf ' -c, --coverage\n' 753aa99676SStefan Eßer printf ' Generate test coverage code. Requires gcov and regcovr.\n' 763aa99676SStefan Eßer printf ' It is an error if either "-b" ("-D") or "-d" ("-B") is specified.\n' 773aa99676SStefan Eßer printf ' Requires a compiler that use gcc-compatible coverage options\n' 7810328f8bSStefan Eßer printf ' -C, --disable-clean\n' 7910328f8bSStefan Eßer printf ' Disable the clean that configure.sh does before configure.\n' 803aa99676SStefan Eßer printf ' -d, --dc-only\n' 8150696a6eSStefan Eßer printf ' Build dc only. It is an error if "-b", "--bc-only", "-D", or\n' 8250696a6eSStefan Eßer printf ' "--disable-dc" are specified too.\n' 833aa99676SStefan Eßer printf ' -D, --disable-dc\n' 8450696a6eSStefan Eßer printf ' Disable dc. It is an error if "-d", "--dc-only", "-B", or "--disable-bc"\n' 853aa99676SStefan Eßer printf ' are specified too.\n' 863aa99676SStefan Eßer printf ' -E, --disable-extra-math\n' 873aa99676SStefan Eßer printf ' Disable extra math. This includes: "$" operator (truncate to integer),\n' 883aa99676SStefan Eßer printf ' "@" operator (set number of decimal places), and r(x, p) (rounding\n' 893aa99676SStefan Eßer printf ' function). Additionally, this option disables the extra printing\n' 903aa99676SStefan Eßer printf ' functions in the math library.\n' 913aa99676SStefan Eßer printf ' -f, --force\n' 923aa99676SStefan Eßer printf ' Force use of all enabled options, even if they do not work. This\n' 933aa99676SStefan Eßer printf ' option is to allow the maintainer a way to test that certain options\n' 943aa99676SStefan Eßer printf ' are not failing invisibly. (Development only.)' 953aa99676SStefan Eßer printf ' -g, --debug\n' 963aa99676SStefan Eßer printf ' Build in debug mode. Adds the "-g" flag, and if there are no\n' 973aa99676SStefan Eßer printf ' other CFLAGS, and "-O" was not given, this also adds the "-O0"\n' 983aa99676SStefan Eßer printf ' flag. If this flag is *not* given, "-DNDEBUG" is added to CPPFLAGS\n' 993aa99676SStefan Eßer printf ' and a strip flag is added to the link stage.\n' 1003aa99676SStefan Eßer printf ' -G, --disable-generated-tests\n' 1013aa99676SStefan Eßer printf ' Disable generating tests. This is for platforms that do not have a\n' 1023aa99676SStefan Eßer printf ' GNU bc-compatible bc to generate tests.\n' 1033aa99676SStefan Eßer printf ' -h, --help\n' 1043aa99676SStefan Eßer printf ' Print this help message and exit.\n' 1053aa99676SStefan Eßer printf ' -H, --disable-history\n' 1063aa99676SStefan Eßer printf ' Disable history.\n' 1073aa99676SStefan Eßer printf ' -k KARATSUBA_LEN, --karatsuba-len KARATSUBA_LEN\n' 1083aa99676SStefan Eßer printf ' Set the karatsuba length to KARATSUBA_LEN (default is 64).\n' 1093aa99676SStefan Eßer printf ' It is an error if KARATSUBA_LEN is not a number or is less than 16.\n' 110cf7becd2SStefan Eßer printf ' -l, --install-all-locales\n' 111cf7becd2SStefan Eßer printf ' Installs all locales, regardless of how many are on the system. This\n' 112cf7becd2SStefan Eßer printf ' option is useful for package maintainers who want to make sure that\n' 113cf7becd2SStefan Eßer printf ' a package contains all of the locales that end users might need.\n' 11410328f8bSStefan Eßer printf ' -m, --enable-memcheck\n' 11510328f8bSStefan Eßer printf ' Enable memcheck mode, to ensure no memory leaks. For development only.\n' 1163aa99676SStefan Eßer printf ' -M, --disable-man-pages\n' 1173aa99676SStefan Eßer printf ' Disable installing manpages.\n' 1183aa99676SStefan Eßer printf ' -N, --disable-nls\n' 1193aa99676SStefan Eßer printf ' Disable POSIX locale (NLS) support.\n' 1203aa99676SStefan Eßer printf ' -O OPT_LEVEL, --opt OPT_LEVEL\n' 1213aa99676SStefan Eßer printf ' Set the optimization level. This can also be included in the CFLAGS,\n' 1223aa99676SStefan Eßer printf ' but it is provided, so maintainers can build optimized debug builds.\n' 1233aa99676SStefan Eßer printf ' This is passed through to the compiler, so it must be supported.\n' 1243aa99676SStefan Eßer printf ' -P, --disable-prompt\n' 1253aa99676SStefan Eßer printf ' Disables the prompt in the built bc. The prompt will never show up,\n' 1263aa99676SStefan Eßer printf ' or in other words, it will be permanently disabled and cannot be\n' 1273aa99676SStefan Eßer printf ' enabled.\n' 12810328f8bSStefan Eßer printf ' -t, --enable-test-timing\n' 12910328f8bSStefan Eßer printf ' Enable the timing of tests. This is for development only.\n' 1303aa99676SStefan Eßer printf ' -T, --disable-strip\n' 1313aa99676SStefan Eßer printf ' Disable stripping symbols from the compiled binary or binaries.\n' 1323aa99676SStefan Eßer printf ' Stripping symbols only happens when debug mode is off.\n' 13310328f8bSStefan Eßer printf ' -v, --enable-valgrind\n' 13410328f8bSStefan Eßer printf ' Enable a build appropriate for valgrind. For development only.\n' 13510328f8bSStefan Eßer printf ' -z, --enable-fuzz-mode\n' 13610328f8bSStefan Eßer printf ' Enable fuzzing mode. THIS IS FOR DEVELOPMENT ONLY.\n' 1373aa99676SStefan Eßer printf ' --prefix PREFIX\n' 1383aa99676SStefan Eßer printf ' The prefix to install to. Overrides "$PREFIX" if it exists.\n' 1393aa99676SStefan Eßer printf ' If PREFIX is "/usr", install path will be "/usr/bin".\n' 1403aa99676SStefan Eßer printf ' Default is "/usr/local".\n' 1413aa99676SStefan Eßer printf ' --bindir BINDIR\n' 14250696a6eSStefan Eßer printf ' The directory to install binaries in. Overrides "$BINDIR" if it exists.\n' 1433aa99676SStefan Eßer printf ' Default is "$PREFIX/bin".\n' 14450696a6eSStefan Eßer printf ' --includedir INCLUDEDIR\n' 14550696a6eSStefan Eßer printf ' The directory to install headers in. Overrides "$INCLUDEDIR" if it\n' 14650696a6eSStefan Eßer printf ' exists. Default is "$PREFIX/include".\n' 14750696a6eSStefan Eßer printf ' --libdir LIBDIR\n' 14850696a6eSStefan Eßer printf ' The directory to install libraries in. Overrides "$LIBDIR" if it exists.\n' 14950696a6eSStefan Eßer printf ' Default is "$PREFIX/lib".\n' 1503aa99676SStefan Eßer printf ' --datarootdir DATAROOTDIR\n' 1513aa99676SStefan Eßer printf ' The root location for data files. Overrides "$DATAROOTDIR" if it exists.\n' 1523aa99676SStefan Eßer printf ' Default is "$PREFIX/share".\n' 1533aa99676SStefan Eßer printf ' --datadir DATADIR\n' 1543aa99676SStefan Eßer printf ' The location for data files. Overrides "$DATADIR" if it exists.\n' 1553aa99676SStefan Eßer printf ' Default is "$DATAROOTDIR".\n' 1563aa99676SStefan Eßer printf ' --mandir MANDIR\n' 1573aa99676SStefan Eßer printf ' The location to install manpages to. Overrides "$MANDIR" if it exists.\n' 1583aa99676SStefan Eßer printf ' Default is "$DATADIR/man".\n' 1593aa99676SStefan Eßer printf ' --man1dir MAN1DIR\n' 1603aa99676SStefan Eßer printf ' The location to install Section 1 manpages to. Overrides "$MAN1DIR" if\n' 1613aa99676SStefan Eßer printf ' it exists. Default is "$MANDIR/man1".\n' 16250696a6eSStefan Eßer printf ' --man3dir MAN3DIR\n' 16350696a6eSStefan Eßer printf ' The location to install Section 3 manpages to. Overrides "$MAN3DIR" if\n' 16450696a6eSStefan Eßer printf ' it exists. Default is "$MANDIR/man3".\n' 1653aa99676SStefan Eßer printf '\n' 1663aa99676SStefan Eßer printf 'In addition, the following environment variables are used:\n' 1673aa99676SStefan Eßer printf '\n' 1683aa99676SStefan Eßer printf ' CC C compiler. Must be compatible with POSIX c99. If there is a\n' 1693aa99676SStefan Eßer printf ' space in the basename of the compiler, the items after the\n' 1703aa99676SStefan Eßer printf ' first space are assumed to be compiler flags, and in that case,\n' 1713aa99676SStefan Eßer printf ' the flags are automatically moved into CFLAGS. Default is\n' 1723aa99676SStefan Eßer printf ' "c99".\n' 1733aa99676SStefan Eßer printf ' HOSTCC Host C compiler. Must be compatible with POSIX c99. If there is\n' 1743aa99676SStefan Eßer printf ' a space in the basename of the compiler, the items after the\n' 1753aa99676SStefan Eßer printf ' first space are assumed to be compiler flags, and in the case,\n' 1763aa99676SStefan Eßer printf ' the flags are automatically moved into HOSTCFLAGS. Default is\n' 1773aa99676SStefan Eßer printf ' "$CC".\n' 1783aa99676SStefan Eßer printf ' HOST_CC Same as HOSTCC. If HOSTCC also exists, it is used.\n' 1793aa99676SStefan Eßer printf ' CFLAGS C compiler flags.\n' 1803aa99676SStefan Eßer printf ' HOSTCFLAGS CFLAGS for HOSTCC. Default is "$CFLAGS".\n' 1813aa99676SStefan Eßer printf ' HOST_CFLAGS Same as HOST_CFLAGS. If HOST_CFLAGS also exists, it is used.\n' 1823aa99676SStefan Eßer printf ' CPPFLAGS C preprocessor flags. Default is "".\n' 1833aa99676SStefan Eßer printf ' LDFLAGS Linker flags. Default is "".\n' 1843aa99676SStefan Eßer printf ' PREFIX The prefix to install to. Default is "/usr/local".\n' 1853aa99676SStefan Eßer printf ' If PREFIX is "/usr", install path will be "/usr/bin".\n' 18650696a6eSStefan Eßer printf ' BINDIR The directory to install binaries in. Default is "$PREFIX/bin".\n' 18750696a6eSStefan Eßer printf ' INCLUDEDIR The directory to install header files in. Default is\n' 18850696a6eSStefan Eßer printf ' "$PREFIX/include".\n' 18950696a6eSStefan Eßer printf ' LIBDIR The directory to install libraries in. Default is\n' 19050696a6eSStefan Eßer printf ' "$PREFIX/lib".\n' 1913aa99676SStefan Eßer printf ' DATAROOTDIR The root location for data files. Default is "$PREFIX/share".\n' 1923aa99676SStefan Eßer printf ' DATADIR The location for data files. Default is "$DATAROOTDIR".\n' 1933aa99676SStefan Eßer printf ' MANDIR The location to install manpages to. Default is "$DATADIR/man".\n' 1943aa99676SStefan Eßer printf ' MAN1DIR The location to install Section 1 manpages to. Default is\n' 1953aa99676SStefan Eßer printf ' "$MANDIR/man1".\n' 19650696a6eSStefan Eßer printf ' MAN3DIR The location to install Section 3 manpages to. Default is\n' 19750696a6eSStefan Eßer printf ' "$MANDIR/man3".\n' 1983aa99676SStefan Eßer printf ' NLSPATH The location to install locale catalogs to. Must be an absolute\n' 1993aa99676SStefan Eßer printf ' path (or contain one). This is treated the same as the POSIX\n' 2003aa99676SStefan Eßer printf ' definition of $NLSPATH (see POSIX environment variables for\n' 2013aa99676SStefan Eßer printf ' more information). Default is "/usr/share/locale/%%L/%%N".\n' 2023aa99676SStefan Eßer printf ' EXECSUFFIX The suffix to append to the executable names, used to not\n' 2033aa99676SStefan Eßer printf ' interfere with other installed bc executables. Default is "".\n' 2043aa99676SStefan Eßer printf ' EXECPREFIX The prefix to append to the executable names, used to not\n' 2053aa99676SStefan Eßer printf ' interfere with other installed bc executables. Default is "".\n' 2063aa99676SStefan Eßer printf ' DESTDIR For package creation. Default is "". If it is empty when\n' 2073aa99676SStefan Eßer printf ' `%s` is run, it can also be passed to `make install`\n' "$script" 2083aa99676SStefan Eßer printf ' later as an environment variable. If both are specified,\n' 2093aa99676SStefan Eßer printf ' the one given to `%s` takes precedence.\n' "$script" 2103aa99676SStefan Eßer printf ' LONG_BIT The number of bits in a C `long` type. This is mostly for the\n' 2113aa99676SStefan Eßer printf ' embedded space since this `bc` uses `long`s internally for\n' 2123aa99676SStefan Eßer printf ' overflow checking. In C99, a `long` is required to be 32 bits.\n' 2133aa99676SStefan Eßer printf ' For most normal desktop systems, setting this is unnecessary,\n' 2143aa99676SStefan Eßer printf ' except that 32-bit platforms with 64-bit longs may want to set\n' 2153aa99676SStefan Eßer printf ' it to `32`. Default is the default of `LONG_BIT` for the target\n' 2163aa99676SStefan Eßer printf ' platform. Minimum allowed is `32`. It is a build time error if\n' 2173aa99676SStefan Eßer printf ' the specified value of `LONG_BIT` is greater than the default\n' 2183aa99676SStefan Eßer printf ' value of `LONG_BIT` for the target platform.\n' 2193aa99676SStefan Eßer printf ' GEN_HOST Whether to use `gen/strgen.c`, instead of `gen/strgen.sh`, to\n' 2203aa99676SStefan Eßer printf ' produce the C files that contain the help texts as well as the\n' 2213aa99676SStefan Eßer printf ' math libraries. By default, `gen/strgen.c` is used, compiled by\n' 2223aa99676SStefan Eßer printf ' "$HOSTCC" and run on the host machine. Using `gen/strgen.sh`\n' 2233aa99676SStefan Eßer printf ' removes the need to compile and run an executable on the host\n' 2243aa99676SStefan Eßer printf ' machine since `gen/strgen.sh` is a POSIX shell script. However,\n' 2253aa99676SStefan Eßer printf ' `gen/lib2.bc` is perilously close to 4095 characters, the max\n' 2263aa99676SStefan Eßer printf ' supported length of a string literal in C99 (and it could be\n' 2273aa99676SStefan Eßer printf ' added to in the future), and `gen/strgen.sh` generates a string\n' 2283aa99676SStefan Eßer printf ' literal instead of an array, as `gen/strgen.c` does. For most\n' 2293aa99676SStefan Eßer printf ' production-ready compilers, this limit probably is not\n' 2303aa99676SStefan Eßer printf ' enforced, but it could be. Both options are still available for\n' 2313aa99676SStefan Eßer printf ' this reason. If you are sure your compiler does not have the\n' 2323aa99676SStefan Eßer printf ' limit and do not want to compile and run a binary on the host\n' 2333aa99676SStefan Eßer printf ' machine, set this variable to "0". Any other value, or a\n' 2343aa99676SStefan Eßer printf ' non-existent value, will cause the build system to compile and\n' 2353aa99676SStefan Eßer printf ' run `gen/strgen.c`. Default is "".\n' 2363aa99676SStefan Eßer printf ' GEN_EMU Emulator to run string generator code under (leave empty if not\n' 2373aa99676SStefan Eßer printf ' necessary). This is not necessary when using `gen/strgen.sh`.\n' 2383aa99676SStefan Eßer printf ' Default is "".\n' 2393aa99676SStefan Eßer printf '\n' 2403aa99676SStefan Eßer printf 'WARNING: even though `configure.sh` supports both option types, short and\n' 2413aa99676SStefan Eßer printf 'long, it does not support handling both at the same time. Use only one type.\n' 2423aa99676SStefan Eßer 2433aa99676SStefan Eßer exit "$_usage_val" 2443aa99676SStefan Eßer} 2453aa99676SStefan Eßer 2463aa99676SStefan Eßerreplace_ext() { 2473aa99676SStefan Eßer 2483aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 2493aa99676SStefan Eßer err_exit "Invalid number of args to $0" 2503aa99676SStefan Eßer fi 2513aa99676SStefan Eßer 2523aa99676SStefan Eßer _replace_ext_file="$1" 2533aa99676SStefan Eßer _replace_ext_ext1="$2" 2543aa99676SStefan Eßer _replace_ext_ext2="$3" 2553aa99676SStefan Eßer 2569a995fe1SStefan Eßer _replace_ext_result="${_replace_ext_file%.$_replace_ext_ext1}.$_replace_ext_ext2" 2573aa99676SStefan Eßer 2583aa99676SStefan Eßer printf '%s\n' "$_replace_ext_result" 2593aa99676SStefan Eßer} 2603aa99676SStefan Eßer 2613aa99676SStefan Eßerreplace_exts() { 2623aa99676SStefan Eßer 2633aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 2643aa99676SStefan Eßer err_exit "Invalid number of args to $0" 2653aa99676SStefan Eßer fi 2663aa99676SStefan Eßer 2673aa99676SStefan Eßer _replace_exts_files="$1" 2683aa99676SStefan Eßer _replace_exts_ext1="$2" 2693aa99676SStefan Eßer _replace_exts_ext2="$3" 2703aa99676SStefan Eßer 2713aa99676SStefan Eßer for _replace_exts_file in $_replace_exts_files; do 2723aa99676SStefan Eßer _replace_exts_new_name=$(replace_ext "$_replace_exts_file" "$_replace_exts_ext1" "$_replace_exts_ext2") 2733aa99676SStefan Eßer _replace_exts_result="$_replace_exts_result $_replace_exts_new_name" 2743aa99676SStefan Eßer done 2753aa99676SStefan Eßer 2763aa99676SStefan Eßer printf '%s\n' "$_replace_exts_result" 2773aa99676SStefan Eßer} 2783aa99676SStefan Eßer 2793aa99676SStefan Eßerreplace() { 2803aa99676SStefan Eßer 2813aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 2823aa99676SStefan Eßer err_exit "Invalid number of args to $0" 2833aa99676SStefan Eßer fi 2843aa99676SStefan Eßer 2853aa99676SStefan Eßer _replace_str="$1" 2863aa99676SStefan Eßer _replace_needle="$2" 2873aa99676SStefan Eßer _replace_replacement="$3" 2883aa99676SStefan Eßer 2893aa99676SStefan Eßer substring_replace "$_replace_str" "%%$_replace_needle%%" "$_replace_replacement" 2903aa99676SStefan Eßer} 2913aa99676SStefan Eßer 29210328f8bSStefan Eßerfind_src_files() { 29310328f8bSStefan Eßer 29410328f8bSStefan Eßer if [ "$#" -ge 1 ] && [ "$1" != "" ]; then 29510328f8bSStefan Eßer 29610328f8bSStefan Eßer while [ "$#" -ge 1 ]; do 29710328f8bSStefan Eßer _find_src_files_a="${1## }" 29810328f8bSStefan Eßer shift 29910328f8bSStefan Eßer _find_src_files_args="$_find_src_files_args ! -path src/${_find_src_files_a}" 30010328f8bSStefan Eßer done 30110328f8bSStefan Eßer 30210328f8bSStefan Eßer else 30310328f8bSStefan Eßer _find_src_files_args="-print" 30410328f8bSStefan Eßer fi 30510328f8bSStefan Eßer 30610328f8bSStefan Eßer printf '%s\n' $(find src/ -depth -name "*.c" $_find_src_files_args) 30710328f8bSStefan Eßer} 30810328f8bSStefan Eßer 30950696a6eSStefan Eßergen_file_list() { 3103aa99676SStefan Eßer 31150696a6eSStefan Eßer if [ "$#" -lt 1 ]; then 3123aa99676SStefan Eßer err_exit "Invalid number of args to $0" 3133aa99676SStefan Eßer fi 3143aa99676SStefan Eßer 31550696a6eSStefan Eßer _gen_file_list_contents="$1" 3163aa99676SStefan Eßer shift 3173aa99676SStefan Eßer 31850696a6eSStefan Eßer p=$(pwd) 31950696a6eSStefan Eßer 32050696a6eSStefan Eßer cd "$scriptdir" 32150696a6eSStefan Eßer 32250696a6eSStefan Eßer if [ "$#" -ge 1 ]; then 32310328f8bSStefan Eßer _gen_file_list_unneeded="$@" 3243aa99676SStefan Eßer else 32510328f8bSStefan Eßer _gen_file_list_unneeded="" 3263aa99676SStefan Eßer fi 3273aa99676SStefan Eßer 32850696a6eSStefan Eßer _gen_file_list_needle_src="SRC" 32950696a6eSStefan Eßer _gen_file_list_needle_obj="OBJ" 33050696a6eSStefan Eßer _gen_file_list_needle_gcda="GCDA" 33150696a6eSStefan Eßer _gen_file_list_needle_gcno="GCNO" 33250696a6eSStefan Eßer 33310328f8bSStefan Eßer _gen_file_list_replacement=$(find_src_files $_gen_file_list_unneeded | tr '\n' ' ') 33450696a6eSStefan Eßer _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ 33550696a6eSStefan Eßer "$_gen_file_list_needle_src" "$_gen_file_list_replacement") 33650696a6eSStefan Eßer 33750696a6eSStefan Eßer _gen_file_list_replacement=$(replace_exts "$_gen_file_list_replacement" "c" "o") 33850696a6eSStefan Eßer _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ 33950696a6eSStefan Eßer "$_gen_file_list_needle_obj" "$_gen_file_list_replacement") 34050696a6eSStefan Eßer 34150696a6eSStefan Eßer _gen_file_list_replacement=$(replace_exts "$_gen_file_list_replacement" "o" "gcda") 34250696a6eSStefan Eßer _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ 34350696a6eSStefan Eßer "$_gen_file_list_needle_gcda" "$_gen_file_list_replacement") 34450696a6eSStefan Eßer 34550696a6eSStefan Eßer _gen_file_list_replacement=$(replace_exts "$_gen_file_list_replacement" "gcda" "gcno") 34650696a6eSStefan Eßer _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ 34750696a6eSStefan Eßer "$_gen_file_list_needle_gcno" "$_gen_file_list_replacement") 34850696a6eSStefan Eßer 34950696a6eSStefan Eßer cd "$p" 35050696a6eSStefan Eßer 35150696a6eSStefan Eßer printf '%s\n' "$_gen_file_list_contents" 3523aa99676SStefan Eßer} 3533aa99676SStefan Eßer 35410328f8bSStefan Eßergen_tests() { 35510328f8bSStefan Eßer 35610328f8bSStefan Eßer _gen_tests_name="$1" 35710328f8bSStefan Eßer shift 35810328f8bSStefan Eßer 35910328f8bSStefan Eßer _gen_tests_uname="$1" 36010328f8bSStefan Eßer shift 36110328f8bSStefan Eßer 36210328f8bSStefan Eßer _gen_tests_extra_math="$1" 36310328f8bSStefan Eßer shift 36410328f8bSStefan Eßer 36510328f8bSStefan Eßer _gen_tests_time_tests="$1" 36610328f8bSStefan Eßer shift 36710328f8bSStefan Eßer 36810328f8bSStefan Eßer _gen_tests_extra_required=$(cat tests/extra_required.txt) 36910328f8bSStefan Eßer 37010328f8bSStefan Eßer for _gen_tests_t in $(cat "$scriptdir/tests/$_gen_tests_name/all.txt"); do 37110328f8bSStefan Eßer 37210328f8bSStefan Eßer if [ "$_gen_tests_extra_math" -eq 0 ]; then 37310328f8bSStefan Eßer 37410328f8bSStefan Eßer if [ -z "${_gen_tests_extra_required##*$_gen_tests_t*}" ]; then 37510328f8bSStefan Eßer printf 'test_%s_%s:\n\t@printf "Skipping %s %s\\n"\n\n' \ 37610328f8bSStefan Eßer "$_gen_tests_name" "$_gen_tests_t" "$_gen_tests_name" \ 37710328f8bSStefan Eßer "$_gen_tests_t" >> "$scriptdir/Makefile" 37810328f8bSStefan Eßer continue 37910328f8bSStefan Eßer fi 38010328f8bSStefan Eßer 38110328f8bSStefan Eßer fi 38210328f8bSStefan Eßer 38310328f8bSStefan Eßer printf 'test_%s_%s:\n\t@sh tests/test.sh %s %s %s %s %s\n\n' \ 38410328f8bSStefan Eßer "$_gen_tests_name" "$_gen_tests_t" "$_gen_tests_name" \ 38510328f8bSStefan Eßer "$_gen_tests_t" "$generate_tests" "$time_tests" \ 38610328f8bSStefan Eßer "$*" >> "$scriptdir/Makefile" 38710328f8bSStefan Eßer 38810328f8bSStefan Eßer done 38910328f8bSStefan Eßer} 39010328f8bSStefan Eßer 39110328f8bSStefan Eßergen_test_targets() { 39210328f8bSStefan Eßer 39310328f8bSStefan Eßer _gen_test_targets_name="$1" 39410328f8bSStefan Eßer shift 39510328f8bSStefan Eßer 39610328f8bSStefan Eßer _gen_test_targets_tests=$(cat "$scriptdir/tests/${_gen_test_targets_name}/all.txt") 39710328f8bSStefan Eßer 39810328f8bSStefan Eßer for _gen_test_targets_t in $_gen_test_targets_tests; do 39910328f8bSStefan Eßer printf ' test_%s_%s' "$_gen_test_targets_name" "$_gen_test_targets_t" 40010328f8bSStefan Eßer done 40110328f8bSStefan Eßer 40210328f8bSStefan Eßer printf '\n' 40310328f8bSStefan Eßer} 40410328f8bSStefan Eßer 40510328f8bSStefan Eßergen_script_tests() { 40610328f8bSStefan Eßer 40710328f8bSStefan Eßer _gen_script_tests_name="$1" 40810328f8bSStefan Eßer shift 40910328f8bSStefan Eßer 41010328f8bSStefan Eßer _gen_script_tests_extra_math="$1" 41110328f8bSStefan Eßer shift 41210328f8bSStefan Eßer 41310328f8bSStefan Eßer _gen_script_tests_generate="$1" 41410328f8bSStefan Eßer shift 41510328f8bSStefan Eßer 41610328f8bSStefan Eßer _gen_script_tests_time="$1" 41710328f8bSStefan Eßer shift 41810328f8bSStefan Eßer 41910328f8bSStefan Eßer _gen_script_tests_tests=$(cat "$scriptdir/tests/$_gen_script_tests_name/scripts/all.txt") 42010328f8bSStefan Eßer 42110328f8bSStefan Eßer for _gen_script_tests_f in $_gen_script_tests_tests; do 42210328f8bSStefan Eßer 42310328f8bSStefan Eßer _gen_script_tests_b=$(basename "$_gen_script_tests_f" ".${_gen_script_tests_name}") 42410328f8bSStefan Eßer 42510328f8bSStefan Eßer printf 'test_%s_script_%s:\n\t@sh tests/script.sh %s %s %s 1 %s %s %s\n\n' \ 42610328f8bSStefan Eßer "$_gen_script_tests_name" "$_gen_script_tests_b" "$_gen_script_tests_name" \ 42710328f8bSStefan Eßer "$_gen_script_tests_f" "$_gen_script_tests_extra_math" "$_gen_script_tests_generate" \ 42810328f8bSStefan Eßer "$_gen_script_tests_time" "$*" >> "$scriptdir/Makefile" 42910328f8bSStefan Eßer done 43010328f8bSStefan Eßer} 43110328f8bSStefan Eßer 43210328f8bSStefan Eßergen_script_test_targets() { 43310328f8bSStefan Eßer 43410328f8bSStefan Eßer _gen_script_test_targets_name="$1" 43510328f8bSStefan Eßer shift 43610328f8bSStefan Eßer 43710328f8bSStefan Eßer _gen_script_test_targets_tests=$(cat "$scriptdir/tests/$_gen_script_test_targets_name/scripts/all.txt") 43810328f8bSStefan Eßer 43910328f8bSStefan Eßer for _gen_script_test_targets_f in $_gen_script_test_targets_tests; do 44010328f8bSStefan Eßer _gen_script_test_targets_b=$(basename "$_gen_script_test_targets_f" \ 44110328f8bSStefan Eßer ".$_gen_script_test_targets_name") 44210328f8bSStefan Eßer printf ' test_%s_script_%s' "$_gen_script_test_targets_name" \ 44310328f8bSStefan Eßer "$_gen_script_test_targets_b" 44410328f8bSStefan Eßer done 44510328f8bSStefan Eßer 44610328f8bSStefan Eßer printf '\n' 44710328f8bSStefan Eßer} 44810328f8bSStefan Eßer 4493aa99676SStefan Eßerbc_only=0 4503aa99676SStefan Eßerdc_only=0 4513aa99676SStefan Eßercoverage=0 4523aa99676SStefan Eßerkaratsuba_len=32 4533aa99676SStefan Eßerdebug=0 4543aa99676SStefan Eßerhist=1 4553aa99676SStefan Eßerextra_math=1 4563aa99676SStefan Eßeroptimization="" 4573aa99676SStefan Eßergenerate_tests=1 4583aa99676SStefan Eßerinstall_manpages=1 4593aa99676SStefan Eßernls=1 4603aa99676SStefan Eßerprompt=1 4613aa99676SStefan Eßerforce=0 4623aa99676SStefan Eßerstrip_bin=1 463cf7becd2SStefan Eßerall_locales=0 46450696a6eSStefan Eßerlibrary=0 46510328f8bSStefan Eßerfuzz=0 46610328f8bSStefan Eßertime_tests=0 46710328f8bSStefan Eßervg=0 46810328f8bSStefan Eßermemcheck=0 46910328f8bSStefan Eßerclean=1 4703aa99676SStefan Eßer 47110328f8bSStefan Eßerwhile getopts "abBcdDEfgGhHk:lMmNO:PStTvz-" opt; do 4723aa99676SStefan Eßer 4733aa99676SStefan Eßer case "$opt" in 47450696a6eSStefan Eßer a) library=1 ;; 4753aa99676SStefan Eßer b) bc_only=1 ;; 4763aa99676SStefan Eßer B) dc_only=1 ;; 4773aa99676SStefan Eßer c) coverage=1 ;; 47810328f8bSStefan Eßer C) clean=0 ;; 4793aa99676SStefan Eßer d) dc_only=1 ;; 4803aa99676SStefan Eßer D) bc_only=1 ;; 4813aa99676SStefan Eßer E) extra_math=0 ;; 4823aa99676SStefan Eßer f) force=1 ;; 4833aa99676SStefan Eßer g) debug=1 ;; 4843aa99676SStefan Eßer G) generate_tests=0 ;; 4853aa99676SStefan Eßer h) usage ;; 4863aa99676SStefan Eßer H) hist=0 ;; 4873aa99676SStefan Eßer k) karatsuba_len="$OPTARG" ;; 488cf7becd2SStefan Eßer l) all_locales=1 ;; 48910328f8bSStefan Eßer m) memcheck=1 ;; 4903aa99676SStefan Eßer M) install_manpages=0 ;; 4913aa99676SStefan Eßer N) nls=0 ;; 4923aa99676SStefan Eßer O) optimization="$OPTARG" ;; 4933aa99676SStefan Eßer P) prompt=0 ;; 49410328f8bSStefan Eßer t) time_tests=1 ;; 4953aa99676SStefan Eßer T) strip_bin=0 ;; 49610328f8bSStefan Eßer v) vg=1 ;; 49710328f8bSStefan Eßer z) fuzz=1 ;; 4983aa99676SStefan Eßer -) 4993aa99676SStefan Eßer arg="$1" 5003aa99676SStefan Eßer arg="${arg#--}" 5013aa99676SStefan Eßer LONG_OPTARG="${arg#*=}" 5023aa99676SStefan Eßer case $arg in 5033aa99676SStefan Eßer help) usage ;; 50450696a6eSStefan Eßer library) library=1 ;; 5053aa99676SStefan Eßer bc-only) bc_only=1 ;; 5063aa99676SStefan Eßer dc-only) dc_only=1 ;; 5073aa99676SStefan Eßer coverage) coverage=1 ;; 5083aa99676SStefan Eßer debug) debug=1 ;; 5093aa99676SStefan Eßer force) force=1 ;; 5103aa99676SStefan Eßer prefix=?*) PREFIX="$LONG_OPTARG" ;; 5113aa99676SStefan Eßer prefix) 5123aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 5133aa99676SStefan Eßer usage "No argument given for '--$arg' option" 5143aa99676SStefan Eßer fi 5153aa99676SStefan Eßer PREFIX="$2" 5163aa99676SStefan Eßer shift ;; 5173aa99676SStefan Eßer bindir=?*) BINDIR="$LONG_OPTARG" ;; 5183aa99676SStefan Eßer bindir) 5193aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 5203aa99676SStefan Eßer usage "No argument given for '--$arg' option" 5213aa99676SStefan Eßer fi 5223aa99676SStefan Eßer BINDIR="$2" 5233aa99676SStefan Eßer shift ;; 52450696a6eSStefan Eßer includedir=?*) INCLUDEDIR="$LONG_OPTARG" ;; 52550696a6eSStefan Eßer includedir) 52650696a6eSStefan Eßer if [ "$#" -lt 2 ]; then 52750696a6eSStefan Eßer usage "No argument given for '--$arg' option" 52850696a6eSStefan Eßer fi 52950696a6eSStefan Eßer INCLUDEDIR="$2" 53050696a6eSStefan Eßer shift ;; 53150696a6eSStefan Eßer libdir=?*) LIBDIR="$LONG_OPTARG" ;; 53250696a6eSStefan Eßer libdir) 53350696a6eSStefan Eßer if [ "$#" -lt 2 ]; then 53450696a6eSStefan Eßer usage "No argument given for '--$arg' option" 53550696a6eSStefan Eßer fi 53650696a6eSStefan Eßer LIBDIR="$2" 53750696a6eSStefan Eßer shift ;; 5383aa99676SStefan Eßer datarootdir=?*) DATAROOTDIR="$LONG_OPTARG" ;; 5393aa99676SStefan Eßer datarootdir) 5403aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 5413aa99676SStefan Eßer usage "No argument given for '--$arg' option" 5423aa99676SStefan Eßer fi 5433aa99676SStefan Eßer DATAROOTDIR="$2" 5443aa99676SStefan Eßer shift ;; 5453aa99676SStefan Eßer datadir=?*) DATADIR="$LONG_OPTARG" ;; 5463aa99676SStefan Eßer datadir) 5473aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 5483aa99676SStefan Eßer usage "No argument given for '--$arg' option" 5493aa99676SStefan Eßer fi 5503aa99676SStefan Eßer DATADIR="$2" 5513aa99676SStefan Eßer shift ;; 5523aa99676SStefan Eßer mandir=?*) MANDIR="$LONG_OPTARG" ;; 5533aa99676SStefan Eßer mandir) 5543aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 5553aa99676SStefan Eßer usage "No argument given for '--$arg' option" 5563aa99676SStefan Eßer fi 5573aa99676SStefan Eßer MANDIR="$2" 5583aa99676SStefan Eßer shift ;; 5593aa99676SStefan Eßer man1dir=?*) MAN1DIR="$LONG_OPTARG" ;; 5603aa99676SStefan Eßer man1dir) 5613aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 5623aa99676SStefan Eßer usage "No argument given for '--$arg' option" 5633aa99676SStefan Eßer fi 5643aa99676SStefan Eßer MAN1DIR="$2" 5653aa99676SStefan Eßer shift ;; 56650696a6eSStefan Eßer man3dir=?*) MAN3DIR="$LONG_OPTARG" ;; 56750696a6eSStefan Eßer man3dir) 56850696a6eSStefan Eßer if [ "$#" -lt 2 ]; then 56950696a6eSStefan Eßer usage "No argument given for '--$arg' option" 57050696a6eSStefan Eßer fi 57150696a6eSStefan Eßer MAN3DIR="$2" 57250696a6eSStefan Eßer shift ;; 5733aa99676SStefan Eßer localedir=?*) LOCALEDIR="$LONG_OPTARG" ;; 5743aa99676SStefan Eßer localedir) 5753aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 5763aa99676SStefan Eßer usage "No argument given for '--$arg' option" 5773aa99676SStefan Eßer fi 5783aa99676SStefan Eßer LOCALEDIR="$2" 5793aa99676SStefan Eßer shift ;; 5803aa99676SStefan Eßer karatsuba-len=?*) karatsuba_len="$LONG_OPTARG" ;; 5813aa99676SStefan Eßer karatsuba-len) 5823aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 5833aa99676SStefan Eßer usage "No argument given for '--$arg' option" 5843aa99676SStefan Eßer fi 5853aa99676SStefan Eßer karatsuba_len="$1" 5863aa99676SStefan Eßer shift ;; 5873aa99676SStefan Eßer opt=?*) optimization="$LONG_OPTARG" ;; 5883aa99676SStefan Eßer opt) 5893aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 5903aa99676SStefan Eßer usage "No argument given for '--$arg' option" 5913aa99676SStefan Eßer fi 5923aa99676SStefan Eßer optimization="$1" 5933aa99676SStefan Eßer shift ;; 5943aa99676SStefan Eßer disable-bc) dc_only=1 ;; 5953aa99676SStefan Eßer disable-dc) bc_only=1 ;; 59610328f8bSStefan Eßer disable-clean) clean=0 ;; 5973aa99676SStefan Eßer disable-extra-math) extra_math=0 ;; 5983aa99676SStefan Eßer disable-generated-tests) generate_tests=0 ;; 5993aa99676SStefan Eßer disable-history) hist=0 ;; 6003aa99676SStefan Eßer disable-man-pages) install_manpages=0 ;; 6013aa99676SStefan Eßer disable-nls) nls=0 ;; 6023aa99676SStefan Eßer disable-prompt) prompt=0 ;; 6033aa99676SStefan Eßer disable-strip) strip_bin=0 ;; 60410328f8bSStefan Eßer enable-test-timing) time_tests=1 ;; 60510328f8bSStefan Eßer enable-valgrind) vg=1 ;; 60610328f8bSStefan Eßer enable-fuzz-mode) fuzz=1 ;; 60710328f8bSStefan Eßer enable-memcheck) memcheck=1 ;; 608cf7becd2SStefan Eßer install-all-locales) all_locales=1 ;; 6093aa99676SStefan Eßer help* | bc-only* | dc-only* | coverage* | debug*) 6103aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 61110328f8bSStefan Eßer disable-bc* | disable-dc* | disable-clean*) 61210328f8bSStefan Eßer usage "No arg allowed for --$arg option" ;; 61310328f8bSStefan Eßer disable-extra-math*) 6143aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 6153aa99676SStefan Eßer disable-generated-tests* | disable-history*) 6163aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 6173aa99676SStefan Eßer disable-man-pages* | disable-nls* | disable-strip*) 6183aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 61910328f8bSStefan Eßer enable-fuzz-mode* | enable-test-timing* | enable-valgrind*) 62010328f8bSStefan Eßer usage "No arg allowed for --$arg option" ;; 62110328f8bSStefan Eßer enable-memcheck* | install-all-locales*) 622cf7becd2SStefan Eßer usage "No arg allowed for --$arg option" ;; 6233aa99676SStefan Eßer '') break ;; # "--" terminates argument processing 6243aa99676SStefan Eßer * ) usage "Invalid option $LONG_OPTARG" ;; 6253aa99676SStefan Eßer esac 6263aa99676SStefan Eßer shift 6273aa99676SStefan Eßer OPTIND=1 ;; 6283aa99676SStefan Eßer ?) usage "Invalid option $opt" ;; 6293aa99676SStefan Eßer esac 6303aa99676SStefan Eßer 6313aa99676SStefan Eßerdone 6323aa99676SStefan Eßer 63310328f8bSStefan Eßerif [ "$clean" -ne 0 ]; then 63410328f8bSStefan Eßer if [ -f ./Makefile ]; then 63510328f8bSStefan Eßer make clean_config > /dev/null 63610328f8bSStefan Eßer fi 63710328f8bSStefan Eßerfi 63810328f8bSStefan Eßer 6393aa99676SStefan Eßerif [ "$bc_only" -eq 1 ] && [ "$dc_only" -eq 1 ]; then 6403aa99676SStefan Eßer usage "Can only specify one of -b(-D) or -d(-B)" 6413aa99676SStefan Eßerfi 6423aa99676SStefan Eßer 64350696a6eSStefan Eßerif [ "$library" -ne 0 ]; then 64450696a6eSStefan Eßer if [ "$bc_only" -eq 1 ] || [ "$dc_only" -eq 1 ]; then 64550696a6eSStefan Eßer usage "Must not specify -b(-D) or -d(-B) when building the library" 64650696a6eSStefan Eßer fi 64750696a6eSStefan Eßerfi 64850696a6eSStefan Eßer 6493aa99676SStefan Eßercase $karatsuba_len in 6503aa99676SStefan Eßer (*[!0-9]*|'') usage "KARATSUBA_LEN is not a number" ;; 6513aa99676SStefan Eßer (*) ;; 6523aa99676SStefan Eßeresac 6533aa99676SStefan Eßer 6543aa99676SStefan Eßerif [ "$karatsuba_len" -lt 16 ]; then 6553aa99676SStefan Eßer usage "KARATSUBA_LEN is less than 16" 6563aa99676SStefan Eßerfi 6573aa99676SStefan Eßer 6583aa99676SStefan Eßerset -e 6593aa99676SStefan Eßer 6603aa99676SStefan Eßerif [ -z "${LONG_BIT+set}" ]; then 6613aa99676SStefan Eßer LONG_BIT_DEFINE="" 6623aa99676SStefan Eßerelif [ "$LONG_BIT" -lt 32 ]; then 6633aa99676SStefan Eßer usage "LONG_BIT is less than 32" 6643aa99676SStefan Eßerelse 6653aa99676SStefan Eßer LONG_BIT_DEFINE="-DBC_LONG_BIT=\$(BC_LONG_BIT)" 6663aa99676SStefan Eßerfi 6673aa99676SStefan Eßer 6683aa99676SStefan Eßerif [ -z "$CC" ]; then 6693aa99676SStefan Eßer CC="c99" 6703aa99676SStefan Eßerelse 6713aa99676SStefan Eßer ccbase=$(basename "$CC") 6723aa99676SStefan Eßer suffix=" *" 6733aa99676SStefan Eßer prefix="* " 6743aa99676SStefan Eßer 6753aa99676SStefan Eßer if [ "${ccbase%%$suffix}" != "$ccbase" ]; then 6763aa99676SStefan Eßer ccflags="${ccbase#$prefix}" 6773aa99676SStefan Eßer cc="${ccbase%%$suffix}" 6783aa99676SStefan Eßer ccdir=$(dirname "$CC") 6793aa99676SStefan Eßer if [ "$ccdir" = "." ] && [ "${CC#.}" = "$CC" ]; then 6803aa99676SStefan Eßer ccdir="" 6813aa99676SStefan Eßer else 6823aa99676SStefan Eßer ccdir="$ccdir/" 6833aa99676SStefan Eßer fi 6843aa99676SStefan Eßer CC="${ccdir}${cc}" 6853aa99676SStefan Eßer CFLAGS="$CFLAGS $ccflags" 6863aa99676SStefan Eßer fi 6873aa99676SStefan Eßerfi 6883aa99676SStefan Eßer 6893aa99676SStefan Eßerif [ -z "$HOSTCC" ] && [ -z "$HOST_CC" ]; then 6903aa99676SStefan Eßer HOSTCC="$CC" 6913aa99676SStefan Eßerelif [ -z "$HOSTCC" ]; then 6923aa99676SStefan Eßer HOSTCC="$HOST_CC" 6933aa99676SStefan Eßerfi 6943aa99676SStefan Eßer 6953aa99676SStefan Eßerif [ "$HOSTCC" != "$CC" ]; then 6963aa99676SStefan Eßer ccbase=$(basename "$HOSTCC") 6973aa99676SStefan Eßer suffix=" *" 6983aa99676SStefan Eßer prefix="* " 6993aa99676SStefan Eßer 7003aa99676SStefan Eßer if [ "${ccbase%%$suffix}" != "$ccbase" ]; then 7013aa99676SStefan Eßer ccflags="${ccbase#$prefix}" 7023aa99676SStefan Eßer cc="${ccbase%%$suffix}" 7033aa99676SStefan Eßer ccdir=$(dirname "$HOSTCC") 7043aa99676SStefan Eßer if [ "$ccdir" = "." ] && [ "${HOSTCC#.}" = "$HOSTCC" ]; then 7053aa99676SStefan Eßer ccdir="" 7063aa99676SStefan Eßer else 7073aa99676SStefan Eßer ccdir="$ccdir/" 7083aa99676SStefan Eßer fi 7093aa99676SStefan Eßer HOSTCC="${ccdir}${cc}" 7103aa99676SStefan Eßer HOSTCFLAGS="$HOSTCFLAGS $ccflags" 7113aa99676SStefan Eßer fi 7123aa99676SStefan Eßerfi 7133aa99676SStefan Eßer 7143aa99676SStefan Eßerif [ -z "${HOSTCFLAGS+set}" ] && [ -z "${HOST_CFLAGS+set}" ]; then 7153aa99676SStefan Eßer HOSTCFLAGS="$CFLAGS" 7163aa99676SStefan Eßerelif [ -z "${HOSTCFLAGS+set}" ]; then 7173aa99676SStefan Eßer HOSTCFLAGS="$HOST_CFLAGS" 7183aa99676SStefan Eßerfi 7193aa99676SStefan Eßer 7203aa99676SStefan Eßerlink="@printf 'No link necessary\\\\n'" 7213aa99676SStefan Eßermain_exec="BC" 7223aa99676SStefan Eßerexecutable="BC_EXEC" 7233aa99676SStefan Eßer 72450696a6eSStefan Eßertests="test_bc timeconst test_dc" 72550696a6eSStefan Eßer 7263aa99676SStefan Eßerbc_test="@tests/all.sh bc $extra_math 1 $generate_tests 0 \$(BC_EXEC)" 7273aa99676SStefan Eßerdc_test="@tests/all.sh dc $extra_math 1 $generate_tests 0 \$(DC_EXEC)" 7283aa99676SStefan Eßer 7293aa99676SStefan Eßertimeconst="@tests/bc/timeconst.sh tests/bc/scripts/timeconst.bc \$(BC_EXEC)" 7303aa99676SStefan Eßer 7313aa99676SStefan Eßer# In order to have cleanup at exit, we need to be in 7323aa99676SStefan Eßer# debug mode, so don't run valgrind without that. 73310328f8bSStefan Eßerif [ "$vg" -ne 0 ]; then 73410328f8bSStefan Eßer debug=1 73510328f8bSStefan Eßer bc_test_exec='valgrind $(VALGRIND_ARGS) $(BC_EXEC)' 73610328f8bSStefan Eßer dc_test_exec='valgrind $(VALGRIND_ARGS) $(DC_EXEC)' 7373aa99676SStefan Eßerelse 73810328f8bSStefan Eßer bc_test_exec='$(BC_EXEC)' 73910328f8bSStefan Eßer dc_test_exec='$(DC_EXEC)' 7403aa99676SStefan Eßerfi 7413aa99676SStefan Eßer 7423aa99676SStefan Eßerkaratsuba="@printf 'karatsuba cannot be run because one of bc or dc is not built\\\\n'" 7433aa99676SStefan Eßerkaratsuba_test="@printf 'karatsuba cannot be run because one of bc or dc is not built\\\\n'" 7443aa99676SStefan Eßer 7453aa99676SStefan Eßerbc_lib="\$(GEN_DIR)/lib.o" 7463aa99676SStefan Eßerbc_help="\$(GEN_DIR)/bc_help.o" 7473aa99676SStefan Eßerdc_help="\$(GEN_DIR)/dc_help.o" 7483aa99676SStefan Eßer 74910328f8bSStefan Eßerdefault_target_prereqs="\$(BIN) \$(OBJS)" 75010328f8bSStefan Eßerdefault_target_cmd="\$(CC) \$(CFLAGS) \$(OBJS) \$(LDFLAGS) -o \$(EXEC)" 75110328f8bSStefan Eßerdefault_target="\$(DC_EXEC)" 75210328f8bSStefan Eßer 75310328f8bSStefan Eßersecond_target_prereqs="" 75410328f8bSStefan Eßersecond_target_cmd="$default_target_cmd" 75510328f8bSStefan Eßersecond_target="\$(BC_EXEC)" 75610328f8bSStefan Eßer 75710328f8bSStefan Eßerif [ "$library" -ne 0 ]; then 75810328f8bSStefan Eßer 75910328f8bSStefan Eßer extra_math=1 76010328f8bSStefan Eßer nls=0 76110328f8bSStefan Eßer hist=0 76210328f8bSStefan Eßer prompt=0 76310328f8bSStefan Eßer bc=1 76410328f8bSStefan Eßer dc=1 76510328f8bSStefan Eßer 76610328f8bSStefan Eßer default_target_prereqs="\$(BIN) \$(OBJ)" 76710328f8bSStefan Eßer default_target_cmd="ar -r -cu \$(LIBBC) \$(OBJ)" 76810328f8bSStefan Eßer default_target="\$(LIBBC)" 76910328f8bSStefan Eßer tests="test_library" 77010328f8bSStefan Eßer 77110328f8bSStefan Eßerelif [ "$bc_only" -eq 1 ]; then 7723aa99676SStefan Eßer 7733aa99676SStefan Eßer bc=1 7743aa99676SStefan Eßer dc=0 7753aa99676SStefan Eßer 7763aa99676SStefan Eßer dc_help="" 7773aa99676SStefan Eßer 7783aa99676SStefan Eßer executables="bc" 7793aa99676SStefan Eßer 7803aa99676SStefan Eßer dc_test="@printf 'No dc tests to run\\\\n'" 7813aa99676SStefan Eßer 78250696a6eSStefan Eßer install_prereqs=" install_execs" 78350696a6eSStefan Eßer install_man_prereqs=" install_bc_manpage" 7843aa99676SStefan Eßer uninstall_prereqs=" uninstall_bc" 7853aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_bc_manpage" 7863aa99676SStefan Eßer 78710328f8bSStefan Eßer default_target="\$(BC_EXEC)" 78810328f8bSStefan Eßer second_target="\$(DC_EXEC)" 78910328f8bSStefan Eßer tests="test_bc timeconst" 79010328f8bSStefan Eßer 7913aa99676SStefan Eßerelif [ "$dc_only" -eq 1 ]; then 7923aa99676SStefan Eßer 7933aa99676SStefan Eßer bc=0 7943aa99676SStefan Eßer dc=1 7953aa99676SStefan Eßer 7963aa99676SStefan Eßer bc_lib="" 7973aa99676SStefan Eßer bc_help="" 7983aa99676SStefan Eßer 7993aa99676SStefan Eßer executables="dc" 8003aa99676SStefan Eßer 8013aa99676SStefan Eßer main_exec="DC" 8023aa99676SStefan Eßer executable="DC_EXEC" 8033aa99676SStefan Eßer 8043aa99676SStefan Eßer bc_test="@printf 'No bc tests to run\\\\n'" 8053aa99676SStefan Eßer 8063aa99676SStefan Eßer timeconst="@printf 'timeconst cannot be run because bc is not built\\\\n'" 8073aa99676SStefan Eßer 80850696a6eSStefan Eßer install_prereqs=" install_execs" 80950696a6eSStefan Eßer install_man_prereqs=" install_dc_manpage" 8103aa99676SStefan Eßer uninstall_prereqs=" uninstall_dc" 8113aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_dc_manpage" 8123aa99676SStefan Eßer 81310328f8bSStefan Eßer tests="test_dc" 81410328f8bSStefan Eßer 8153aa99676SStefan Eßerelse 8163aa99676SStefan Eßer 8173aa99676SStefan Eßer bc=1 8183aa99676SStefan Eßer dc=1 8193aa99676SStefan Eßer 8203aa99676SStefan Eßer executables="bc and dc" 8213aa99676SStefan Eßer 8223aa99676SStefan Eßer karatsuba="@\$(KARATSUBA) 30 0 \$(BC_EXEC)" 8233aa99676SStefan Eßer karatsuba_test="@\$(KARATSUBA) 1 100 \$(BC_EXEC)" 8243aa99676SStefan Eßer 82550696a6eSStefan Eßer if [ "$library" -eq 0 ]; then 82650696a6eSStefan Eßer install_prereqs=" install_execs" 82750696a6eSStefan Eßer install_man_prereqs=" install_bc_manpage install_dc_manpage" 8283aa99676SStefan Eßer uninstall_prereqs=" uninstall_bc uninstall_dc" 8293aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_bc_manpage uninstall_dc_manpage" 83050696a6eSStefan Eßer else 83150696a6eSStefan Eßer install_prereqs=" install_library install_bcl_header" 83250696a6eSStefan Eßer install_man_prereqs=" install_bcl_manpage" 83350696a6eSStefan Eßer uninstall_prereqs=" uninstall_library uninstall_bcl_header" 83450696a6eSStefan Eßer uninstall_man_prereqs=" uninstall_bcl_manpage" 83550696a6eSStefan Eßer tests="test_library" 83650696a6eSStefan Eßer fi 8373aa99676SStefan Eßer 83810328f8bSStefan Eßer second_target_prereqs="$default_target_prereqs" 83910328f8bSStefan Eßer default_target_prereqs="$second_target" 84010328f8bSStefan Eßer default_target_cmd="\$(LINK) \$(BIN) \$(EXEC_PREFIX)\$(DC)" 84110328f8bSStefan Eßer 84210328f8bSStefan Eßerfi 84310328f8bSStefan Eßer 84410328f8bSStefan Eßerif [ "$fuzz" -ne 0 ]; then 84510328f8bSStefan Eßer debug=1 84610328f8bSStefan Eßer hist=0 84710328f8bSStefan Eßer prompt=0 84810328f8bSStefan Eßer nls=0 84910328f8bSStefan Eßer optimization="3" 8503aa99676SStefan Eßerfi 8513aa99676SStefan Eßer 8523aa99676SStefan Eßerif [ "$debug" -eq 1 ]; then 8533aa99676SStefan Eßer 8543aa99676SStefan Eßer if [ -z "$CFLAGS" ] && [ -z "$optimization" ]; then 8553aa99676SStefan Eßer CFLAGS="-O0" 8563aa99676SStefan Eßer fi 8573aa99676SStefan Eßer 8583aa99676SStefan Eßer CFLAGS="-g $CFLAGS" 8593aa99676SStefan Eßer 8603aa99676SStefan Eßerelse 8613aa99676SStefan Eßer CPPFLAGS="-DNDEBUG $CPPFLAGS" 8623aa99676SStefan Eßer if [ "$strip_bin" -ne 0 ]; then 8633aa99676SStefan Eßer LDFLAGS="-s $LDFLAGS" 8643aa99676SStefan Eßer fi 8653aa99676SStefan Eßerfi 8663aa99676SStefan Eßer 8673aa99676SStefan Eßerif [ -n "$optimization" ]; then 8683aa99676SStefan Eßer CFLAGS="-O$optimization $CFLAGS" 8693aa99676SStefan Eßerfi 8703aa99676SStefan Eßer 8713aa99676SStefan Eßerif [ "$coverage" -eq 1 ]; then 8723aa99676SStefan Eßer 8733aa99676SStefan Eßer if [ "$bc_only" -eq 1 ] || [ "$dc_only" -eq 1 ]; then 8743aa99676SStefan Eßer usage "Can only specify -c without -b or -d" 8753aa99676SStefan Eßer fi 8763aa99676SStefan Eßer 8773aa99676SStefan Eßer CFLAGS="-fprofile-arcs -ftest-coverage -g -O0 $CFLAGS" 8783aa99676SStefan Eßer CPPFLAGS="-DNDEBUG $CPPFLAGS" 8793aa99676SStefan Eßer 8803aa99676SStefan Eßer COVERAGE_OUTPUT="@gcov -pabcdf \$(GCDA) \$(BC_GCDA) \$(DC_GCDA) \$(HISTORY_GCDA) \$(RAND_GCDA)" 8813aa99676SStefan Eßer COVERAGE_OUTPUT="$COVERAGE_OUTPUT;\$(RM) -f \$(GEN)*.gc*" 8823aa99676SStefan Eßer COVERAGE_OUTPUT="$COVERAGE_OUTPUT;gcovr --html-details --output index.html" 8833aa99676SStefan Eßer COVERAGE_PREREQS=" test coverage_output" 8843aa99676SStefan Eßer 8853aa99676SStefan Eßerelse 8863aa99676SStefan Eßer COVERAGE_OUTPUT="@printf 'Coverage not generated\\\\n'" 8873aa99676SStefan Eßer COVERAGE_PREREQS="" 8883aa99676SStefan Eßerfi 8893aa99676SStefan Eßer 8903aa99676SStefan Eßerif [ -z "${DESTDIR+set}" ]; then 8913aa99676SStefan Eßer destdir="" 8923aa99676SStefan Eßerelse 8933aa99676SStefan Eßer destdir="DESTDIR = $DESTDIR" 8943aa99676SStefan Eßerfi 8953aa99676SStefan Eßer 8963aa99676SStefan Eßerif [ -z "${PREFIX+set}" ]; then 8973aa99676SStefan Eßer PREFIX="/usr/local" 8983aa99676SStefan Eßerfi 8993aa99676SStefan Eßer 9003aa99676SStefan Eßerif [ -z "${BINDIR+set}" ]; then 9013aa99676SStefan Eßer BINDIR="$PREFIX/bin" 9023aa99676SStefan Eßerfi 9033aa99676SStefan Eßer 90450696a6eSStefan Eßerif [ -z "${INCLUDEDIR+set}" ]; then 90550696a6eSStefan Eßer INCLUDEDIR="$PREFIX/include" 90650696a6eSStefan Eßerfi 90750696a6eSStefan Eßer 90850696a6eSStefan Eßerif [ -z "${LIBDIR+set}" ]; then 90950696a6eSStefan Eßer LIBDIR="$PREFIX/lib" 91050696a6eSStefan Eßerfi 91150696a6eSStefan Eßer 9123aa99676SStefan Eßerif [ "$install_manpages" -ne 0 ] || [ "$nls" -ne 0 ]; then 9133aa99676SStefan Eßer if [ -z "${DATAROOTDIR+set}" ]; then 9143aa99676SStefan Eßer DATAROOTDIR="$PREFIX/share" 9153aa99676SStefan Eßer fi 9163aa99676SStefan Eßerfi 9173aa99676SStefan Eßer 9183aa99676SStefan Eßerif [ "$install_manpages" -ne 0 ]; then 9193aa99676SStefan Eßer 9203aa99676SStefan Eßer if [ -z "${DATADIR+set}" ]; then 9213aa99676SStefan Eßer DATADIR="$DATAROOTDIR" 9223aa99676SStefan Eßer fi 9233aa99676SStefan Eßer 9243aa99676SStefan Eßer if [ -z "${MANDIR+set}" ]; then 9253aa99676SStefan Eßer MANDIR="$DATADIR/man" 9263aa99676SStefan Eßer fi 9273aa99676SStefan Eßer 9283aa99676SStefan Eßer if [ -z "${MAN1DIR+set}" ]; then 9293aa99676SStefan Eßer MAN1DIR="$MANDIR/man1" 9303aa99676SStefan Eßer fi 9313aa99676SStefan Eßer 93250696a6eSStefan Eßer if [ -z "${MAN3DIR+set}" ]; then 93350696a6eSStefan Eßer MAN3DIR="$MANDIR/man3" 93450696a6eSStefan Eßer fi 93550696a6eSStefan Eßer 9363aa99676SStefan Eßerelse 93750696a6eSStefan Eßer install_man_prereqs="" 9383aa99676SStefan Eßer uninstall_man_prereqs="" 9393aa99676SStefan Eßerfi 9403aa99676SStefan Eßer 9413aa99676SStefan Eßerif [ "$nls" -ne 0 ]; then 9423aa99676SStefan Eßer 9433aa99676SStefan Eßer set +e 9443aa99676SStefan Eßer 9453aa99676SStefan Eßer printf 'Testing NLS...\n' 9463aa99676SStefan Eßer 9473aa99676SStefan Eßer flags="-DBC_ENABLE_NLS=1 -DBC_ENABLED=$bc -DDC_ENABLED=$dc" 9483aa99676SStefan Eßer flags="$flags -DBC_ENABLE_HISTORY=$hist" 9493aa99676SStefan Eßer flags="$flags -DBC_ENABLE_EXTRA_MATH=$extra_math -I./include/" 9503aa99676SStefan Eßer flags="$flags -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700" 9513aa99676SStefan Eßer 9523aa99676SStefan Eßer "$CC" $CPPFLAGS $CFLAGS $flags -c "src/vm.c" -o "$scriptdir/vm.o" > /dev/null 2>&1 9533aa99676SStefan Eßer 9543aa99676SStefan Eßer err="$?" 9553aa99676SStefan Eßer 9563aa99676SStefan Eßer rm -rf "$scriptdir/vm.o" 9573aa99676SStefan Eßer 9583aa99676SStefan Eßer # If this errors, it is probably because of building on Windows, 9593aa99676SStefan Eßer # and NLS is not supported on Windows, so disable it. 9603aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 9613aa99676SStefan Eßer printf 'NLS does not work.\n' 9623aa99676SStefan Eßer if [ $force -eq 0 ]; then 9633aa99676SStefan Eßer printf 'Disabling NLS...\n\n' 9643aa99676SStefan Eßer nls=0 9653aa99676SStefan Eßer else 9663aa99676SStefan Eßer printf 'Forcing NLS...\n\n' 9673aa99676SStefan Eßer fi 9683aa99676SStefan Eßer else 9693aa99676SStefan Eßer printf 'NLS works.\n\n' 9703aa99676SStefan Eßer 9713aa99676SStefan Eßer printf 'Testing gencat...\n' 9723aa99676SStefan Eßer gencat "$scriptdir/en_US.cat" "$scriptdir/locales/en_US.msg" > /dev/null 2>&1 9733aa99676SStefan Eßer 9743aa99676SStefan Eßer err="$?" 9753aa99676SStefan Eßer 9763aa99676SStefan Eßer rm -rf "$scriptdir/en_US.cat" 9773aa99676SStefan Eßer 9783aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 9793aa99676SStefan Eßer printf 'gencat does not work.\n' 9803aa99676SStefan Eßer if [ $force -eq 0 ]; then 9813aa99676SStefan Eßer printf 'Disabling NLS...\n\n' 9823aa99676SStefan Eßer nls=0 9833aa99676SStefan Eßer else 9843aa99676SStefan Eßer printf 'Forcing NLS...\n\n' 9853aa99676SStefan Eßer fi 9863aa99676SStefan Eßer else 9873aa99676SStefan Eßer 9883aa99676SStefan Eßer printf 'gencat works.\n\n' 9893aa99676SStefan Eßer 9903aa99676SStefan Eßer if [ "$HOSTCC" != "$CC" ]; then 9913aa99676SStefan Eßer printf 'Cross-compile detected.\n\n' 9923aa99676SStefan Eßer printf 'WARNING: Catalog files generated with gencat may not be portable\n' 9933aa99676SStefan Eßer printf ' across different architectures.\n\n' 9943aa99676SStefan Eßer fi 9953aa99676SStefan Eßer 9963aa99676SStefan Eßer if [ -z "$NLSPATH" ]; then 9973aa99676SStefan Eßer NLSPATH="/usr/share/locale/%L/%N" 9983aa99676SStefan Eßer fi 9993aa99676SStefan Eßer 10003aa99676SStefan Eßer install_locales_prereqs=" install_locales" 10013aa99676SStefan Eßer uninstall_locales_prereqs=" uninstall_locales" 10023aa99676SStefan Eßer 10033aa99676SStefan Eßer fi 10043aa99676SStefan Eßer 10053aa99676SStefan Eßer fi 10063aa99676SStefan Eßer 10073aa99676SStefan Eßer set -e 10083aa99676SStefan Eßer 10093aa99676SStefan Eßerelse 10103aa99676SStefan Eßer install_locales_prereqs="" 10113aa99676SStefan Eßer uninstall_locales_prereqs="" 1012cf7becd2SStefan Eßer all_locales=0 1013cf7becd2SStefan Eßerfi 1014cf7becd2SStefan Eßer 1015cf7becd2SStefan Eßerif [ "$nls" -ne 0 ] && [ "$all_locales" -ne 0 ]; then 1016cf7becd2SStefan Eßer install_locales="\$(LOCALE_INSTALL) -l \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" 1017cf7becd2SStefan Eßerelse 1018cf7becd2SStefan Eßer install_locales="\$(LOCALE_INSTALL) \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" 10193aa99676SStefan Eßerfi 10203aa99676SStefan Eßer 10213aa99676SStefan Eßerif [ "$hist" -eq 1 ]; then 10223aa99676SStefan Eßer 10233aa99676SStefan Eßer set +e 10243aa99676SStefan Eßer 10253aa99676SStefan Eßer printf 'Testing history...\n' 10263aa99676SStefan Eßer 10273aa99676SStefan Eßer flags="-DBC_ENABLE_HISTORY=1 -DBC_ENABLED=$bc -DDC_ENABLED=$dc" 102850696a6eSStefan Eßer flags="$flags -DBC_ENABLE_NLS=$nls -DBC_ENABLE_LIBRARY=0" 10293aa99676SStefan Eßer flags="$flags -DBC_ENABLE_EXTRA_MATH=$extra_math -I./include/" 10303aa99676SStefan Eßer flags="$flags -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700" 10313aa99676SStefan Eßer 103250696a6eSStefan Eßer "$CC" $CPPFLAGS $CFLAGS $flags -c "src/history.c" -o "$scriptdir/history.o" > /dev/null 2>&1 10333aa99676SStefan Eßer 10343aa99676SStefan Eßer err="$?" 10353aa99676SStefan Eßer 10363aa99676SStefan Eßer rm -rf "$scriptdir/history.o" 10373aa99676SStefan Eßer 10383aa99676SStefan Eßer # If this errors, it is probably because of building on Windows, 10393aa99676SStefan Eßer # and history is not supported on Windows, so disable it. 10403aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 10413aa99676SStefan Eßer printf 'History does not work.\n' 10423aa99676SStefan Eßer if [ $force -eq 0 ]; then 10433aa99676SStefan Eßer printf 'Disabling history...\n\n' 10443aa99676SStefan Eßer hist=0 10453aa99676SStefan Eßer else 10463aa99676SStefan Eßer printf 'Forcing history...\n\n' 10473aa99676SStefan Eßer fi 10483aa99676SStefan Eßer else 10493aa99676SStefan Eßer printf 'History works.\n\n' 10503aa99676SStefan Eßer fi 10513aa99676SStefan Eßer 10523aa99676SStefan Eßer set -e 10533aa99676SStefan Eßer 10543aa99676SStefan Eßerfi 10553aa99676SStefan Eßer 105650696a6eSStefan Eßerif [ "$library" -eq 1 ]; then 105750696a6eSStefan Eßer bc_lib="" 105850696a6eSStefan Eßerfi 105950696a6eSStefan Eßer 106050696a6eSStefan Eßerif [ "$extra_math" -eq 1 ] && [ "$bc" -ne 0 ] && [ "$library" -eq 0 ]; then 10613aa99676SStefan Eßer BC_LIB2_O="\$(GEN_DIR)/lib2.o" 10623aa99676SStefan Eßerelse 10633aa99676SStefan Eßer BC_LIB2_O="" 10643aa99676SStefan Eßerfi 10653aa99676SStefan Eßer 10663aa99676SStefan EßerGEN="strgen" 10673aa99676SStefan EßerGEN_EXEC_TARGET="\$(HOSTCC) \$(HOSTCFLAGS) -o \$(GEN_EXEC) \$(GEN_C)" 10683aa99676SStefan EßerCLEAN_PREREQS=" clean_gen" 10693aa99676SStefan Eßer 10703aa99676SStefan Eßerif [ -z "${GEN_HOST+set}" ]; then 10713aa99676SStefan Eßer GEN_HOST=1 10723aa99676SStefan Eßerelse 10733aa99676SStefan Eßer if [ "$GEN_HOST" -eq 0 ]; then 10743aa99676SStefan Eßer GEN="strgen.sh" 10753aa99676SStefan Eßer GEN_EXEC_TARGET="@printf 'Do not need to build gen/strgen.c\\\\n'" 10763aa99676SStefan Eßer CLEAN_PREREQS="" 10773aa99676SStefan Eßer fi 10783aa99676SStefan Eßerfi 10793aa99676SStefan Eßer 10803aa99676SStefan Eßermanpage_args="" 108110328f8bSStefan Eßerunneeded="" 108210328f8bSStefan Eßerheaders="\$(HEADERS)" 10833aa99676SStefan Eßer 10843aa99676SStefan Eßerif [ "$extra_math" -eq 0 ]; then 10853aa99676SStefan Eßer manpage_args="E" 108610328f8bSStefan Eßer unneeded="$unneeded rand.c" 108710328f8bSStefan Eßerelse 108810328f8bSStefan Eßer headers="$headers \$(EXTRA_MATH_HEADERS)" 10893aa99676SStefan Eßerfi 10903aa99676SStefan Eßer 10913aa99676SStefan Eßerif [ "$hist" -eq 0 ]; then 10923aa99676SStefan Eßer manpage_args="${manpage_args}H" 109310328f8bSStefan Eßer unneeded="$unneeded history.c" 109410328f8bSStefan Eßerelse 109510328f8bSStefan Eßer headers="$headers \$(HISTORY_HEADERS)" 10963aa99676SStefan Eßerfi 10973aa99676SStefan Eßer 10983aa99676SStefan Eßerif [ "$nls" -eq 0 ]; then 10993aa99676SStefan Eßer manpage_args="${manpage_args}N" 11003aa99676SStefan Eßerfi 11013aa99676SStefan Eßer 11023aa99676SStefan Eßerif [ "$prompt" -eq 0 ]; then 11033aa99676SStefan Eßer manpage_args="${manpage_args}P" 11043aa99676SStefan Eßerfi 11053aa99676SStefan Eßer 110650696a6eSStefan Eßerif [ "$bc" -eq 0 ]; then 110750696a6eSStefan Eßer unneeded="$unneeded bc.c bc_lex.c bc_parse.c" 110810328f8bSStefan Eßerelse 110910328f8bSStefan Eßer headers="$headers \$(BC_HEADERS)" 111050696a6eSStefan Eßerfi 111150696a6eSStefan Eßer 111250696a6eSStefan Eßerif [ "$dc" -eq 0 ]; then 111350696a6eSStefan Eßer unneeded="$unneeded dc.c dc_lex.c dc_parse.c" 111410328f8bSStefan Eßerelse 111510328f8bSStefan Eßer headers="$headers \$(DC_HEADERS)" 111650696a6eSStefan Eßerfi 111750696a6eSStefan Eßer 111850696a6eSStefan Eßerif [ "$library" -ne 0 ]; then 111950696a6eSStefan Eßer unneeded="$unneeded args.c opt.c read.c file.c main.c" 112050696a6eSStefan Eßer unneeded="$unneeded lang.c lex.c parse.c program.c" 112150696a6eSStefan Eßer unneeded="$unneeded bc.c bc_lex.c bc_parse.c" 112250696a6eSStefan Eßer unneeded="$unneeded dc.c dc_lex.c dc_parse.c" 112310328f8bSStefan Eßer headers="$headers \$(LIBRARY_HEADERS)" 112450696a6eSStefan Eßerelse 112550696a6eSStefan Eßer unneeded="$unneeded library.c" 112650696a6eSStefan Eßerfi 112750696a6eSStefan Eßer 112810328f8bSStefan Eßerif [ "$manpage_args" = "" ]; then 112910328f8bSStefan Eßer manpage_args="A" 113010328f8bSStefan Eßerfi 113110328f8bSStefan Eßer 113210328f8bSStefan Eßerif [ "$vg" -ne 0 ]; then 113310328f8bSStefan Eßer memcheck=1 113410328f8bSStefan Eßerfi 113510328f8bSStefan Eßer 113610328f8bSStefan Eßerbc_tests=$(gen_test_targets bc) 113710328f8bSStefan Eßerbc_script_tests=$(gen_script_test_targets bc) 113810328f8bSStefan Eßerdc_tests=$(gen_test_targets dc) 113910328f8bSStefan Eßerdc_script_tests=$(gen_script_test_targets dc) 114010328f8bSStefan Eßer 11413aa99676SStefan Eßer# Print out the values; this is for debugging. 11423aa99676SStefan Eßerif [ "$bc" -ne 0 ]; then 11433aa99676SStefan Eßer printf 'Building bc\n' 11443aa99676SStefan Eßerelse 11453aa99676SStefan Eßer printf 'Not building bc\n' 11463aa99676SStefan Eßerfi 11473aa99676SStefan Eßerif [ "$dc" -ne 0 ]; then 11483aa99676SStefan Eßer printf 'Building dc\n' 11493aa99676SStefan Eßerelse 11503aa99676SStefan Eßer printf 'Not building dc\n' 11513aa99676SStefan Eßerfi 11523aa99676SStefan Eßerprintf '\n' 115350696a6eSStefan Eßerprintf 'BC_ENABLE_LIBRARY=%s\n\n' "$library" 11543aa99676SStefan Eßerprintf 'BC_ENABLE_HISTORY=%s\n' "$hist" 11553aa99676SStefan Eßerprintf 'BC_ENABLE_EXTRA_MATH=%s\n' "$extra_math" 11563aa99676SStefan Eßerprintf 'BC_ENABLE_NLS=%s\n' "$nls" 11573aa99676SStefan Eßerprintf 'BC_ENABLE_PROMPT=%s\n' "$prompt" 115810328f8bSStefan Eßerprintf 'BC_ENABLE_AFL=%s\n' "$fuzz" 11593aa99676SStefan Eßerprintf '\n' 11603aa99676SStefan Eßerprintf 'BC_NUM_KARATSUBA_LEN=%s\n' "$karatsuba_len" 11613aa99676SStefan Eßerprintf '\n' 11623aa99676SStefan Eßerprintf 'CC=%s\n' "$CC" 11633aa99676SStefan Eßerprintf 'CFLAGS=%s\n' "$CFLAGS" 11643aa99676SStefan Eßerprintf 'HOSTCC=%s\n' "$HOSTCC" 11653aa99676SStefan Eßerprintf 'HOSTCFLAGS=%s\n' "$HOSTCFLAGS" 11663aa99676SStefan Eßerprintf 'CPPFLAGS=%s\n' "$CPPFLAGS" 11673aa99676SStefan Eßerprintf 'LDFLAGS=%s\n' "$LDFLAGS" 11683aa99676SStefan Eßerprintf 'PREFIX=%s\n' "$PREFIX" 11693aa99676SStefan Eßerprintf 'BINDIR=%s\n' "$BINDIR" 117050696a6eSStefan Eßerprintf 'INCLUDEDIR=%s\n' "$INCLUDEDIR" 117150696a6eSStefan Eßerprintf 'LIBDIR=%s\n' "$LIBDIR" 11723aa99676SStefan Eßerprintf 'DATAROOTDIR=%s\n' "$DATAROOTDIR" 11733aa99676SStefan Eßerprintf 'DATADIR=%s\n' "$DATADIR" 11743aa99676SStefan Eßerprintf 'MANDIR=%s\n' "$MANDIR" 11753aa99676SStefan Eßerprintf 'MAN1DIR=%s\n' "$MAN1DIR" 117650696a6eSStefan Eßerprintf 'MAN3DIR=%s\n' "$MAN3DIR" 11773aa99676SStefan Eßerprintf 'NLSPATH=%s\n' "$NLSPATH" 11783aa99676SStefan Eßerprintf 'EXECSUFFIX=%s\n' "$EXECSUFFIX" 11793aa99676SStefan Eßerprintf 'EXECPREFIX=%s\n' "$EXECPREFIX" 11803aa99676SStefan Eßerprintf 'DESTDIR=%s\n' "$DESTDIR" 11813aa99676SStefan Eßerprintf 'LONG_BIT=%s\n' "$LONG_BIT" 11823aa99676SStefan Eßerprintf 'GEN_HOST=%s\n' "$GEN_HOST" 11833aa99676SStefan Eßerprintf 'GEN_EMU=%s\n' "$GEN_EMU" 11843aa99676SStefan Eßer 11853aa99676SStefan Eßercontents=$(cat "$scriptdir/Makefile.in") 11863aa99676SStefan Eßer 11873aa99676SStefan Eßerneedle="WARNING" 11883aa99676SStefan Eßerreplacement='*** WARNING: Autogenerated from Makefile.in. DO NOT MODIFY ***' 11893aa99676SStefan Eßer 11903aa99676SStefan Eßercontents=$(replace "$contents" "$needle" "$replacement") 11913aa99676SStefan Eßer 119250696a6eSStefan Eßerif [ "$unneeded" = "" ]; then 119310328f8bSStefan Eßer unneeded="library.c" 119450696a6eSStefan Eßerfi 11953aa99676SStefan Eßer 119610328f8bSStefan Eßercontents=$(gen_file_list "$contents" $unneeded) 119710328f8bSStefan Eßer 119810328f8bSStefan EßerSRC_TARGETS="" 119910328f8bSStefan Eßer 120010328f8bSStefan Eßersrc_files=$(find_src_files $unneeded) 120110328f8bSStefan Eßer 120210328f8bSStefan Eßerfor f in $src_files; do 120310328f8bSStefan Eßer o=$(replace_ext "$f" "c" "o") 120410328f8bSStefan Eßer SRC_TARGETS=$(printf '%s\n\n%s: %s %s\n\t$(CC) $(CFLAGS) -o %s -c %s\n' \ 120510328f8bSStefan Eßer "$SRC_TARGETS" "$o" "$headers" "$f" "$o" "$f") 120610328f8bSStefan Eßerdone 120710328f8bSStefan Eßer 120810328f8bSStefan Eßercontents=$(replace "$contents" "HEADERS" "$headers") 120910328f8bSStefan Eßer 12103aa99676SStefan Eßercontents=$(replace "$contents" "BC_ENABLED" "$bc") 12113aa99676SStefan Eßercontents=$(replace "$contents" "DC_ENABLED" "$dc") 121210328f8bSStefan Eßer 121310328f8bSStefan Eßercontents=$(replace "$contents" "BC_ALL_TESTS" "$bc_test") 121410328f8bSStefan Eßercontents=$(replace "$contents" "BC_TESTS" "$bc_tests") 121510328f8bSStefan Eßercontents=$(replace "$contents" "BC_SCRIPT_TESTS" "$bc_script_tests") 121610328f8bSStefan Eßercontents=$(replace "$contents" "BC_TEST_EXEC" "$bc_test_exec") 121710328f8bSStefan Eßercontents=$(replace "$contents" "TIMECONST_ALL_TESTS" "$timeconst") 121810328f8bSStefan Eßer 121910328f8bSStefan Eßercontents=$(replace "$contents" "DC_ALL_TESTS" "$dc_test") 122010328f8bSStefan Eßercontents=$(replace "$contents" "DC_TESTS" "$dc_tests") 122110328f8bSStefan Eßercontents=$(replace "$contents" "DC_SCRIPT_TESTS" "$dc_script_tests") 122210328f8bSStefan Eßercontents=$(replace "$contents" "DC_TEST_EXEC" "$dc_test_exec") 12233aa99676SStefan Eßer 1224*7e5c51e5SStefan Eßercontents=$(replace "$contents" "BUILD_TYPE" "$manpage_args") 1225*7e5c51e5SStefan Eßer 122650696a6eSStefan Eßercontents=$(replace "$contents" "LIBRARY" "$library") 12273aa99676SStefan Eßercontents=$(replace "$contents" "HISTORY" "$hist") 12283aa99676SStefan Eßercontents=$(replace "$contents" "EXTRA_MATH" "$extra_math") 12293aa99676SStefan Eßercontents=$(replace "$contents" "NLS" "$nls") 12303aa99676SStefan Eßercontents=$(replace "$contents" "PROMPT" "$prompt") 123110328f8bSStefan Eßercontents=$(replace "$contents" "FUZZ" "$fuzz") 123210328f8bSStefan Eßercontents=$(replace "$contents" "MEMCHECK" "$memcheck") 123310328f8bSStefan Eßer 12343aa99676SStefan Eßercontents=$(replace "$contents" "BC_LIB_O" "$bc_lib") 12353aa99676SStefan Eßercontents=$(replace "$contents" "BC_HELP_O" "$bc_help") 12363aa99676SStefan Eßercontents=$(replace "$contents" "DC_HELP_O" "$dc_help") 12373aa99676SStefan Eßercontents=$(replace "$contents" "BC_LIB2_O" "$BC_LIB2_O") 12383aa99676SStefan Eßercontents=$(replace "$contents" "KARATSUBA_LEN" "$karatsuba_len") 12393aa99676SStefan Eßer 12403aa99676SStefan Eßercontents=$(replace "$contents" "NLSPATH" "$NLSPATH") 12413aa99676SStefan Eßercontents=$(replace "$contents" "DESTDIR" "$destdir") 12423aa99676SStefan Eßercontents=$(replace "$contents" "EXECSUFFIX" "$EXECSUFFIX") 12433aa99676SStefan Eßercontents=$(replace "$contents" "EXECPREFIX" "$EXECPREFIX") 12443aa99676SStefan Eßercontents=$(replace "$contents" "BINDIR" "$BINDIR") 124550696a6eSStefan Eßercontents=$(replace "$contents" "INCLUDEDIR" "$INCLUDEDIR") 124650696a6eSStefan Eßercontents=$(replace "$contents" "LIBDIR" "$LIBDIR") 12473aa99676SStefan Eßercontents=$(replace "$contents" "MAN1DIR" "$MAN1DIR") 124850696a6eSStefan Eßercontents=$(replace "$contents" "MAN3DIR" "$MAN3DIR") 12493aa99676SStefan Eßercontents=$(replace "$contents" "CFLAGS" "$CFLAGS") 12503aa99676SStefan Eßercontents=$(replace "$contents" "HOSTCFLAGS" "$HOSTCFLAGS") 12513aa99676SStefan Eßercontents=$(replace "$contents" "CPPFLAGS" "$CPPFLAGS") 12523aa99676SStefan Eßercontents=$(replace "$contents" "LDFLAGS" "$LDFLAGS") 12533aa99676SStefan Eßercontents=$(replace "$contents" "CC" "$CC") 12543aa99676SStefan Eßercontents=$(replace "$contents" "HOSTCC" "$HOSTCC") 12553aa99676SStefan Eßercontents=$(replace "$contents" "COVERAGE_OUTPUT" "$COVERAGE_OUTPUT") 12563aa99676SStefan Eßercontents=$(replace "$contents" "COVERAGE_PREREQS" "$COVERAGE_PREREQS") 12573aa99676SStefan Eßercontents=$(replace "$contents" "INSTALL_PREREQS" "$install_prereqs") 125850696a6eSStefan Eßercontents=$(replace "$contents" "INSTALL_MAN_PREREQS" "$install_man_prereqs") 1259cf7becd2SStefan Eßercontents=$(replace "$contents" "INSTALL_LOCALES" "$install_locales") 12603aa99676SStefan Eßercontents=$(replace "$contents" "INSTALL_LOCALES_PREREQS" "$install_locales_prereqs") 12613aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_MAN_PREREQS" "$uninstall_man_prereqs") 12623aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_PREREQS" "$uninstall_prereqs") 12633aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_LOCALES_PREREQS" "$uninstall_locales_prereqs") 12643aa99676SStefan Eßer 126510328f8bSStefan Eßercontents=$(replace "$contents" "DEFAULT_TARGET" "$default_target") 126610328f8bSStefan Eßercontents=$(replace "$contents" "DEFAULT_TARGET_PREREQS" "$default_target_prereqs") 126710328f8bSStefan Eßercontents=$(replace "$contents" "DEFAULT_TARGET_CMD" "$default_target_cmd") 126810328f8bSStefan Eßercontents=$(replace "$contents" "SECOND_TARGET" "$second_target") 126910328f8bSStefan Eßercontents=$(replace "$contents" "SECOND_TARGET_PREREQS" "$second_target_prereqs") 127010328f8bSStefan Eßercontents=$(replace "$contents" "SECOND_TARGET_CMD" "$second_target_cmd") 127110328f8bSStefan Eßer 127250696a6eSStefan Eßercontents=$(replace "$contents" "ALL_PREREQ" "$ALL_PREREQ") 127310328f8bSStefan Eßercontents=$(replace "$contents" "BC_EXEC_PREREQ" "$bc_exec_prereq") 127410328f8bSStefan Eßercontents=$(replace "$contents" "BC_EXEC_CMD" "$bc_exec_cmd") 127510328f8bSStefan Eßercontents=$(replace "$contents" "DC_EXEC_PREREQ" "$dc_exec_prereq") 127610328f8bSStefan Eßercontents=$(replace "$contents" "DC_EXEC_CMD" "$dc_exec_cmd") 127750696a6eSStefan Eßer 12783aa99676SStefan Eßercontents=$(replace "$contents" "EXECUTABLES" "$executables") 12793aa99676SStefan Eßercontents=$(replace "$contents" "MAIN_EXEC" "$main_exec") 12803aa99676SStefan Eßercontents=$(replace "$contents" "EXEC" "$executable") 128150696a6eSStefan Eßercontents=$(replace "$contents" "TESTS" "$tests") 12823aa99676SStefan Eßer 12833aa99676SStefan Eßercontents=$(replace "$contents" "BC_TEST" "$bc_test") 12843aa99676SStefan Eßercontents=$(replace "$contents" "DC_TEST" "$dc_test") 12853aa99676SStefan Eßer 12863aa99676SStefan Eßercontents=$(replace "$contents" "VG_BC_TEST" "$vg_bc_test") 12873aa99676SStefan Eßercontents=$(replace "$contents" "VG_DC_TEST" "$vg_dc_test") 12883aa99676SStefan Eßer 12893aa99676SStefan Eßercontents=$(replace "$contents" "TIMECONST" "$timeconst") 12903aa99676SStefan Eßer 12913aa99676SStefan Eßercontents=$(replace "$contents" "KARATSUBA" "$karatsuba") 12923aa99676SStefan Eßercontents=$(replace "$contents" "KARATSUBA_TEST" "$karatsuba_test") 12933aa99676SStefan Eßer 12943aa99676SStefan Eßercontents=$(replace "$contents" "LONG_BIT" "$LONG_BIT") 12953aa99676SStefan Eßercontents=$(replace "$contents" "LONG_BIT_DEFINE" "$LONG_BIT_DEFINE") 12963aa99676SStefan Eßer 12973aa99676SStefan Eßercontents=$(replace "$contents" "GEN" "$GEN") 12983aa99676SStefan Eßercontents=$(replace "$contents" "GEN_EXEC_TARGET" "$GEN_EXEC_TARGET") 12993aa99676SStefan Eßercontents=$(replace "$contents" "CLEAN_PREREQS" "$CLEAN_PREREQS") 13003aa99676SStefan Eßercontents=$(replace "$contents" "GEN_EMU" "$GEN_EMU") 13013aa99676SStefan Eßer 130210328f8bSStefan Eßerprintf '%s\n%s\n\n' "$contents" "$SRC_TARGETS" > "$scriptdir/Makefile" 130310328f8bSStefan Eßer 130410328f8bSStefan Eßerif [ "$bc" -ne 0 ]; then 130510328f8bSStefan Eßer gen_tests bc BC "$extra_math" "$time_tests" $bc_test_exec 130610328f8bSStefan Eßer gen_script_tests bc "$extra_math" "$generate_tests" "$time_tests" $bc_test_exec 130710328f8bSStefan Eßerfi 130810328f8bSStefan Eßer 130910328f8bSStefan Eßerif [ "$dc" -ne 0 ]; then 131010328f8bSStefan Eßer gen_tests dc DC "$extra_math" "$time_tests" $dc_test_exec 131110328f8bSStefan Eßer gen_script_tests dc "$extra_math" "$generate_tests" "$time_tests" $dc_test_exec 131210328f8bSStefan Eßerfi 13133aa99676SStefan Eßer 13143aa99676SStefan Eßercd "$scriptdir" 13153aa99676SStefan Eßer 13163aa99676SStefan Eßercp -f manuals/bc/$manpage_args.1.md manuals/bc.1.md 13173aa99676SStefan Eßercp -f manuals/bc/$manpage_args.1 manuals/bc.1 13183aa99676SStefan Eßercp -f manuals/dc/$manpage_args.1.md manuals/dc.1.md 13193aa99676SStefan Eßercp -f manuals/dc/$manpage_args.1 manuals/dc.1 13203aa99676SStefan Eßer 13213aa99676SStefan Eßermake clean > /dev/null 1322