13aa99676SStefan Eßer#! /bin/sh 23aa99676SStefan Eßer# 33aa99676SStefan Eßer# SPDX-License-Identifier: BSD-2-Clause 43aa99676SStefan Eßer# 53aa99676SStefan Eßer# Copyright (c) 2018-2020 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 363aa99676SStefan Eßerusage() { 373aa99676SStefan Eßer 383aa99676SStefan Eßer if [ $# -gt 0 ]; then 393aa99676SStefan Eßer 403aa99676SStefan Eßer _usage_val=1 413aa99676SStefan Eßer 423aa99676SStefan Eßer printf "%s\n\n" "$1" 433aa99676SStefan Eßer 443aa99676SStefan Eßer else 453aa99676SStefan Eßer _usage_val=0 463aa99676SStefan Eßer fi 473aa99676SStefan Eßer 483aa99676SStefan Eßer printf 'usage: %s -h\n' "$script" 493aa99676SStefan Eßer printf ' %s --help\n' "$script" 50*cf7becd2SStefan Eßer printf ' %s [-bD|-dB|-c] [-EfgGHlMNPT] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\n' "$script" 513aa99676SStefan Eßer printf ' %s \\\n' "$script" 523aa99676SStefan Eßer printf ' [--bc-only --disable-dc|--dc-only --disable-bc|--coverage] \\\n' 533aa99676SStefan Eßer printf ' [--debug --disable-extra-math --disable-generated-tests] \\\n' 543aa99676SStefan Eßer printf ' [--disable-history --disable-man-pages --disable-nls] \\\n' 55*cf7becd2SStefan Eßer printf ' [--disable-prompt --disable-strip] [--install-all-locales] \\\n' 563aa99676SStefan Eßer printf ' [--opt=OPT_LEVEL] [--karatsuba-len=KARATSUBA_LEN] \\\n' 573aa99676SStefan Eßer printf ' [--prefix=PREFIX] [--bindir=BINDIR] [--datarootdir=DATAROOTDIR] \\\n' 583aa99676SStefan Eßer printf ' [--datadir=DATADIR] [--mandir=MANDIR] [--man1dir=MAN1DIR] \\\n' 593aa99676SStefan Eßer printf ' [--force] \\\n' 603aa99676SStefan Eßer printf '\n' 613aa99676SStefan Eßer printf ' -b, --bc-only\n' 623aa99676SStefan Eßer printf ' Build bc only. It is an error if "-d", "--dc-only", "-B", or "--disable-bc"\n' 633aa99676SStefan Eßer printf ' are specified too.\n' 643aa99676SStefan Eßer printf ' -B, --disable-bc\n' 653aa99676SStefan Eßer printf ' Disable bc. It is an error if "-b", "--bc-only", "-D", or "--disable-dc"\n' 663aa99676SStefan Eßer printf ' are specified too.\n' 673aa99676SStefan Eßer printf ' -c, --coverage\n' 683aa99676SStefan Eßer printf ' Generate test coverage code. Requires gcov and regcovr.\n' 693aa99676SStefan Eßer printf ' It is an error if either "-b" ("-D") or "-d" ("-B") is specified.\n' 703aa99676SStefan Eßer printf ' Requires a compiler that use gcc-compatible coverage options\n' 713aa99676SStefan Eßer printf ' -d, --dc-only\n' 723aa99676SStefan Eßer printf ' Build dc only. 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 ' -D, --disable-dc\n' 753aa99676SStefan Eßer printf ' Disable dc. It is an error if "-d", "--dc-only" "-B", or "--disable-bc"\n' 763aa99676SStefan Eßer printf ' are specified too.\n' 773aa99676SStefan Eßer printf ' -E, --disable-extra-math\n' 783aa99676SStefan Eßer printf ' Disable extra math. This includes: "$" operator (truncate to integer),\n' 793aa99676SStefan Eßer printf ' "@" operator (set number of decimal places), and r(x, p) (rounding\n' 803aa99676SStefan Eßer printf ' function). Additionally, this option disables the extra printing\n' 813aa99676SStefan Eßer printf ' functions in the math library.\n' 823aa99676SStefan Eßer printf ' -f, --force\n' 833aa99676SStefan Eßer printf ' Force use of all enabled options, even if they do not work. This\n' 843aa99676SStefan Eßer printf ' option is to allow the maintainer a way to test that certain options\n' 853aa99676SStefan Eßer printf ' are not failing invisibly. (Development only.)' 863aa99676SStefan Eßer printf ' -g, --debug\n' 873aa99676SStefan Eßer printf ' Build in debug mode. Adds the "-g" flag, and if there are no\n' 883aa99676SStefan Eßer printf ' other CFLAGS, and "-O" was not given, this also adds the "-O0"\n' 893aa99676SStefan Eßer printf ' flag. If this flag is *not* given, "-DNDEBUG" is added to CPPFLAGS\n' 903aa99676SStefan Eßer printf ' and a strip flag is added to the link stage.\n' 913aa99676SStefan Eßer printf ' -G, --disable-generated-tests\n' 923aa99676SStefan Eßer printf ' Disable generating tests. This is for platforms that do not have a\n' 933aa99676SStefan Eßer printf ' GNU bc-compatible bc to generate tests.\n' 943aa99676SStefan Eßer printf ' -h, --help\n' 953aa99676SStefan Eßer printf ' Print this help message and exit.\n' 963aa99676SStefan Eßer printf ' -H, --disable-history\n' 973aa99676SStefan Eßer printf ' Disable history.\n' 983aa99676SStefan Eßer printf ' -k KARATSUBA_LEN, --karatsuba-len KARATSUBA_LEN\n' 993aa99676SStefan Eßer printf ' Set the karatsuba length to KARATSUBA_LEN (default is 64).\n' 1003aa99676SStefan Eßer printf ' It is an error if KARATSUBA_LEN is not a number or is less than 16.\n' 101*cf7becd2SStefan Eßer printf ' -l, --install-all-locales\n' 102*cf7becd2SStefan Eßer printf ' Installs all locales, regardless of how many are on the system. This\n' 103*cf7becd2SStefan Eßer printf ' option is useful for package maintainers who want to make sure that\n' 104*cf7becd2SStefan Eßer printf ' a package contains all of the locales that end users might need.\n' 1053aa99676SStefan Eßer printf ' -M, --disable-man-pages\n' 1063aa99676SStefan Eßer printf ' Disable installing manpages.\n' 1073aa99676SStefan Eßer printf ' -N, --disable-nls\n' 1083aa99676SStefan Eßer printf ' Disable POSIX locale (NLS) support.\n' 1093aa99676SStefan Eßer printf ' -O OPT_LEVEL, --opt OPT_LEVEL\n' 1103aa99676SStefan Eßer printf ' Set the optimization level. This can also be included in the CFLAGS,\n' 1113aa99676SStefan Eßer printf ' but it is provided, so maintainers can build optimized debug builds.\n' 1123aa99676SStefan Eßer printf ' This is passed through to the compiler, so it must be supported.\n' 1133aa99676SStefan Eßer printf ' -P, --disable-prompt\n' 1143aa99676SStefan Eßer printf ' Disables the prompt in the built bc. The prompt will never show up,\n' 1153aa99676SStefan Eßer printf ' or in other words, it will be permanently disabled and cannot be\n' 1163aa99676SStefan Eßer printf ' enabled.\n' 1173aa99676SStefan Eßer printf ' -T, --disable-strip\n' 1183aa99676SStefan Eßer printf ' Disable stripping symbols from the compiled binary or binaries.\n' 1193aa99676SStefan Eßer printf ' Stripping symbols only happens when debug mode is off.\n' 1203aa99676SStefan Eßer printf ' --prefix PREFIX\n' 1213aa99676SStefan Eßer printf ' The prefix to install to. Overrides "$PREFIX" if it exists.\n' 1223aa99676SStefan Eßer printf ' If PREFIX is "/usr", install path will be "/usr/bin".\n' 1233aa99676SStefan Eßer printf ' Default is "/usr/local".\n' 1243aa99676SStefan Eßer printf ' --bindir BINDIR\n' 1253aa99676SStefan Eßer printf ' The directory to install binaries. Overrides "$BINDIR" if it exists.\n' 1263aa99676SStefan Eßer printf ' Default is "$PREFIX/bin".\n' 1273aa99676SStefan Eßer printf ' --datarootdir DATAROOTDIR\n' 1283aa99676SStefan Eßer printf ' The root location for data files. Overrides "$DATAROOTDIR" if it exists.\n' 1293aa99676SStefan Eßer printf ' Default is "$PREFIX/share".\n' 1303aa99676SStefan Eßer printf ' --datadir DATADIR\n' 1313aa99676SStefan Eßer printf ' The location for data files. Overrides "$DATADIR" if it exists.\n' 1323aa99676SStefan Eßer printf ' Default is "$DATAROOTDIR".\n' 1333aa99676SStefan Eßer printf ' --mandir MANDIR\n' 1343aa99676SStefan Eßer printf ' The location to install manpages to. Overrides "$MANDIR" if it exists.\n' 1353aa99676SStefan Eßer printf ' Default is "$DATADIR/man".\n' 1363aa99676SStefan Eßer printf ' --man1dir MAN1DIR\n' 1373aa99676SStefan Eßer printf ' The location to install Section 1 manpages to. Overrides "$MAN1DIR" if\n' 1383aa99676SStefan Eßer printf ' it exists. Default is "$MANDIR/man1".\n' 1393aa99676SStefan Eßer printf '\n' 1403aa99676SStefan Eßer printf 'In addition, the following environment variables are used:\n' 1413aa99676SStefan Eßer printf '\n' 1423aa99676SStefan Eßer printf ' CC C compiler. Must be compatible with POSIX c99. If there is a\n' 1433aa99676SStefan Eßer printf ' space in the basename of the compiler, the items after the\n' 1443aa99676SStefan Eßer printf ' first space are assumed to be compiler flags, and in that case,\n' 1453aa99676SStefan Eßer printf ' the flags are automatically moved into CFLAGS. Default is\n' 1463aa99676SStefan Eßer printf ' "c99".\n' 1473aa99676SStefan Eßer printf ' HOSTCC Host C compiler. Must be compatible with POSIX c99. If there is\n' 1483aa99676SStefan Eßer printf ' a space in the basename of the compiler, the items after the\n' 1493aa99676SStefan Eßer printf ' first space are assumed to be compiler flags, and in the case,\n' 1503aa99676SStefan Eßer printf ' the flags are automatically moved into HOSTCFLAGS. Default is\n' 1513aa99676SStefan Eßer printf ' "$CC".\n' 1523aa99676SStefan Eßer printf ' HOST_CC Same as HOSTCC. If HOSTCC also exists, it is used.\n' 1533aa99676SStefan Eßer printf ' CFLAGS C compiler flags.\n' 1543aa99676SStefan Eßer printf ' HOSTCFLAGS CFLAGS for HOSTCC. Default is "$CFLAGS".\n' 1553aa99676SStefan Eßer printf ' HOST_CFLAGS Same as HOST_CFLAGS. If HOST_CFLAGS also exists, it is used.\n' 1563aa99676SStefan Eßer printf ' CPPFLAGS C preprocessor flags. Default is "".\n' 1573aa99676SStefan Eßer printf ' LDFLAGS Linker flags. Default is "".\n' 1583aa99676SStefan Eßer printf ' PREFIX The prefix to install to. Default is "/usr/local".\n' 1593aa99676SStefan Eßer printf ' If PREFIX is "/usr", install path will be "/usr/bin".\n' 1603aa99676SStefan Eßer printf ' BINDIR The directory to install binaries. Default is "$PREFIX/bin".\n' 1613aa99676SStefan Eßer printf ' DATAROOTDIR The root location for data files. Default is "$PREFIX/share".\n' 1623aa99676SStefan Eßer printf ' DATADIR The location for data files. Default is "$DATAROOTDIR".\n' 1633aa99676SStefan Eßer printf ' MANDIR The location to install manpages to. Default is "$DATADIR/man".\n' 1643aa99676SStefan Eßer printf ' MAN1DIR The location to install Section 1 manpages to. Default is\n' 1653aa99676SStefan Eßer printf ' "$MANDIR/man1".\n' 1663aa99676SStefan Eßer printf ' NLSPATH The location to install locale catalogs to. Must be an absolute\n' 1673aa99676SStefan Eßer printf ' path (or contain one). This is treated the same as the POSIX\n' 1683aa99676SStefan Eßer printf ' definition of $NLSPATH (see POSIX environment variables for\n' 1693aa99676SStefan Eßer printf ' more information). Default is "/usr/share/locale/%%L/%%N".\n' 1703aa99676SStefan Eßer printf ' EXECSUFFIX The suffix to append to the executable names, used to not\n' 1713aa99676SStefan Eßer printf ' interfere with other installed bc executables. Default is "".\n' 1723aa99676SStefan Eßer printf ' EXECPREFIX The prefix to append to the executable names, used to not\n' 1733aa99676SStefan Eßer printf ' interfere with other installed bc executables. Default is "".\n' 1743aa99676SStefan Eßer printf ' DESTDIR For package creation. Default is "". If it is empty when\n' 1753aa99676SStefan Eßer printf ' `%s` is run, it can also be passed to `make install`\n' "$script" 1763aa99676SStefan Eßer printf ' later as an environment variable. If both are specified,\n' 1773aa99676SStefan Eßer printf ' the one given to `%s` takes precedence.\n' "$script" 1783aa99676SStefan Eßer printf ' LONG_BIT The number of bits in a C `long` type. This is mostly for the\n' 1793aa99676SStefan Eßer printf ' embedded space since this `bc` uses `long`s internally for\n' 1803aa99676SStefan Eßer printf ' overflow checking. In C99, a `long` is required to be 32 bits.\n' 1813aa99676SStefan Eßer printf ' For most normal desktop systems, setting this is unnecessary,\n' 1823aa99676SStefan Eßer printf ' except that 32-bit platforms with 64-bit longs may want to set\n' 1833aa99676SStefan Eßer printf ' it to `32`. Default is the default of `LONG_BIT` for the target\n' 1843aa99676SStefan Eßer printf ' platform. Minimum allowed is `32`. It is a build time error if\n' 1853aa99676SStefan Eßer printf ' the specified value of `LONG_BIT` is greater than the default\n' 1863aa99676SStefan Eßer printf ' value of `LONG_BIT` for the target platform.\n' 1873aa99676SStefan Eßer printf ' GEN_HOST Whether to use `gen/strgen.c`, instead of `gen/strgen.sh`, to\n' 1883aa99676SStefan Eßer printf ' produce the C files that contain the help texts as well as the\n' 1893aa99676SStefan Eßer printf ' math libraries. By default, `gen/strgen.c` is used, compiled by\n' 1903aa99676SStefan Eßer printf ' "$HOSTCC" and run on the host machine. Using `gen/strgen.sh`\n' 1913aa99676SStefan Eßer printf ' removes the need to compile and run an executable on the host\n' 1923aa99676SStefan Eßer printf ' machine since `gen/strgen.sh` is a POSIX shell script. However,\n' 1933aa99676SStefan Eßer printf ' `gen/lib2.bc` is perilously close to 4095 characters, the max\n' 1943aa99676SStefan Eßer printf ' supported length of a string literal in C99 (and it could be\n' 1953aa99676SStefan Eßer printf ' added to in the future), and `gen/strgen.sh` generates a string\n' 1963aa99676SStefan Eßer printf ' literal instead of an array, as `gen/strgen.c` does. For most\n' 1973aa99676SStefan Eßer printf ' production-ready compilers, this limit probably is not\n' 1983aa99676SStefan Eßer printf ' enforced, but it could be. Both options are still available for\n' 1993aa99676SStefan Eßer printf ' this reason. If you are sure your compiler does not have the\n' 2003aa99676SStefan Eßer printf ' limit and do not want to compile and run a binary on the host\n' 2013aa99676SStefan Eßer printf ' machine, set this variable to "0". Any other value, or a\n' 2023aa99676SStefan Eßer printf ' non-existent value, will cause the build system to compile and\n' 2033aa99676SStefan Eßer printf ' run `gen/strgen.c`. Default is "".\n' 2043aa99676SStefan Eßer printf ' GEN_EMU Emulator to run string generator code under (leave empty if not\n' 2053aa99676SStefan Eßer printf ' necessary). This is not necessary when using `gen/strgen.sh`.\n' 2063aa99676SStefan Eßer printf ' Default is "".\n' 2073aa99676SStefan Eßer printf '\n' 2083aa99676SStefan Eßer printf 'WARNING: even though `configure.sh` supports both option types, short and\n' 2093aa99676SStefan Eßer printf 'long, it does not support handling both at the same time. Use only one type.\n' 2103aa99676SStefan Eßer 2113aa99676SStefan Eßer exit "$_usage_val" 2123aa99676SStefan Eßer} 2133aa99676SStefan Eßer 2143aa99676SStefan Eßerreplace_ext() { 2153aa99676SStefan Eßer 2163aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 2173aa99676SStefan Eßer err_exit "Invalid number of args to $0" 2183aa99676SStefan Eßer fi 2193aa99676SStefan Eßer 2203aa99676SStefan Eßer _replace_ext_file="$1" 2213aa99676SStefan Eßer _replace_ext_ext1="$2" 2223aa99676SStefan Eßer _replace_ext_ext2="$3" 2233aa99676SStefan Eßer 2243aa99676SStefan Eßer _replace_ext_result=${_replace_ext_file%.$_replace_ext_ext1}.$_replace_ext_ext2 2253aa99676SStefan Eßer 2263aa99676SStefan Eßer printf '%s\n' "$_replace_ext_result" 2273aa99676SStefan Eßer} 2283aa99676SStefan Eßer 2293aa99676SStefan Eßerreplace_exts() { 2303aa99676SStefan Eßer 2313aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 2323aa99676SStefan Eßer err_exit "Invalid number of args to $0" 2333aa99676SStefan Eßer fi 2343aa99676SStefan Eßer 2353aa99676SStefan Eßer _replace_exts_files="$1" 2363aa99676SStefan Eßer _replace_exts_ext1="$2" 2373aa99676SStefan Eßer _replace_exts_ext2="$3" 2383aa99676SStefan Eßer 2393aa99676SStefan Eßer for _replace_exts_file in $_replace_exts_files; do 2403aa99676SStefan Eßer _replace_exts_new_name=$(replace_ext "$_replace_exts_file" "$_replace_exts_ext1" "$_replace_exts_ext2") 2413aa99676SStefan Eßer _replace_exts_result="$_replace_exts_result $_replace_exts_new_name" 2423aa99676SStefan Eßer done 2433aa99676SStefan Eßer 2443aa99676SStefan Eßer printf '%s\n' "$_replace_exts_result" 2453aa99676SStefan Eßer} 2463aa99676SStefan Eßer 2473aa99676SStefan Eßerreplace() { 2483aa99676SStefan Eßer 2493aa99676SStefan Eßer if [ "$#" -ne 3 ]; then 2503aa99676SStefan Eßer err_exit "Invalid number of args to $0" 2513aa99676SStefan Eßer fi 2523aa99676SStefan Eßer 2533aa99676SStefan Eßer _replace_str="$1" 2543aa99676SStefan Eßer _replace_needle="$2" 2553aa99676SStefan Eßer _replace_replacement="$3" 2563aa99676SStefan Eßer 2573aa99676SStefan Eßer substring_replace "$_replace_str" "%%$_replace_needle%%" "$_replace_replacement" 2583aa99676SStefan Eßer} 2593aa99676SStefan Eßer 2603aa99676SStefan Eßergen_file_lists() { 2613aa99676SStefan Eßer 2623aa99676SStefan Eßer if [ "$#" -lt 3 ]; then 2633aa99676SStefan Eßer err_exit "Invalid number of args to $0" 2643aa99676SStefan Eßer fi 2653aa99676SStefan Eßer 2663aa99676SStefan Eßer _gen_file_lists_contents="$1" 2673aa99676SStefan Eßer shift 2683aa99676SStefan Eßer 2693aa99676SStefan Eßer _gen_file_lists_filedir="$1" 2703aa99676SStefan Eßer shift 2713aa99676SStefan Eßer 2723aa99676SStefan Eßer _gen_file_lists_typ="$1" 2733aa99676SStefan Eßer shift 2743aa99676SStefan Eßer 2753aa99676SStefan Eßer # If there is an extra argument, and it 2763aa99676SStefan Eßer # is zero, we keep the file lists empty. 2773aa99676SStefan Eßer if [ "$#" -gt 0 ]; then 2783aa99676SStefan Eßer _gen_file_lists_use="$1" 2793aa99676SStefan Eßer else 2803aa99676SStefan Eßer _gen_file_lists_use="1" 2813aa99676SStefan Eßer fi 2823aa99676SStefan Eßer 2833aa99676SStefan Eßer _gen_file_lists_needle_src="${_gen_file_lists_typ}SRC" 2843aa99676SStefan Eßer _gen_file_lists_needle_obj="${_gen_file_lists_typ}OBJ" 2853aa99676SStefan Eßer _gen_file_lists_needle_gcda="${_gen_file_lists_typ}GCDA" 2863aa99676SStefan Eßer _gen_file_lists_needle_gcno="${_gen_file_lists_typ}GCNO" 2873aa99676SStefan Eßer 2883aa99676SStefan Eßer if [ "$_gen_file_lists_use" -ne 0 ]; then 2893aa99676SStefan Eßer 2903aa99676SStefan Eßer _gen_file_lists_replacement=$(cd "$_gen_file_lists_filedir" && find . ! -name . -prune -name "*.c" | cut -d/ -f2 | sed "s@^@$_gen_file_lists_filedir/@g" | tr '\n' ' ') 2913aa99676SStefan Eßer _gen_file_lists_contents=$(replace "$_gen_file_lists_contents" "$_gen_file_lists_needle_src" "$_gen_file_lists_replacement") 2923aa99676SStefan Eßer 2933aa99676SStefan Eßer _gen_file_lists_replacement=$(replace_exts "$_gen_file_lists_replacement" "c" "o") 2943aa99676SStefan Eßer _gen_file_lists_contents=$(replace "$_gen_file_lists_contents" "$_gen_file_lists_needle_obj" "$_gen_file_lists_replacement") 2953aa99676SStefan Eßer 2963aa99676SStefan Eßer _gen_file_lists_replacement=$(replace_exts "$_gen_file_lists_replacement" "o" "gcda") 2973aa99676SStefan Eßer _gen_file_lists_contents=$(replace "$_gen_file_lists_contents" "$_gen_file_lists_needle_gcda" "$_gen_file_lists_replacement") 2983aa99676SStefan Eßer 2993aa99676SStefan Eßer _gen_file_lists_replacement=$(replace_exts "$_gen_file_lists_replacement" "gcda" "gcno") 3003aa99676SStefan Eßer _gen_file_lists_contents=$(replace "$_gen_file_lists_contents" "$_gen_file_lists_needle_gcno" "$_gen_file_lists_replacement") 3013aa99676SStefan Eßer 3023aa99676SStefan Eßer else 3033aa99676SStefan Eßer _gen_file_lists_contents=$(replace "$_gen_file_lists_contents" "$_gen_file_lists_needle_src" "") 3043aa99676SStefan Eßer _gen_file_lists_contents=$(replace "$_gen_file_lists_contents" "$_gen_file_lists_needle_obj" "") 3053aa99676SStefan Eßer _gen_file_lists_contents=$(replace "$_gen_file_lists_contents" "$_gen_file_lists_needle_gcda" "") 3063aa99676SStefan Eßer _gen_file_lists_contents=$(replace "$_gen_file_lists_contents" "$_gen_file_lists_needle_gcno" "") 3073aa99676SStefan Eßer fi 3083aa99676SStefan Eßer 3093aa99676SStefan Eßer printf '%s\n' "$_gen_file_lists_contents" 3103aa99676SStefan Eßer} 3113aa99676SStefan Eßer 3123aa99676SStefan Eßerbc_only=0 3133aa99676SStefan Eßerdc_only=0 3143aa99676SStefan Eßercoverage=0 3153aa99676SStefan Eßerkaratsuba_len=32 3163aa99676SStefan Eßerdebug=0 3173aa99676SStefan Eßerhist=1 3183aa99676SStefan Eßerextra_math=1 3193aa99676SStefan Eßeroptimization="" 3203aa99676SStefan Eßergenerate_tests=1 3213aa99676SStefan Eßerinstall_manpages=1 3223aa99676SStefan Eßernls=1 3233aa99676SStefan Eßerprompt=1 3243aa99676SStefan Eßerforce=0 3253aa99676SStefan Eßerstrip_bin=1 326*cf7becd2SStefan Eßerall_locales=0 3273aa99676SStefan Eßer 328*cf7becd2SStefan Eßerwhile getopts "bBcdDEfgGhHk:lMNO:PST-" opt; do 3293aa99676SStefan Eßer 3303aa99676SStefan Eßer case "$opt" in 3313aa99676SStefan Eßer b) bc_only=1 ;; 3323aa99676SStefan Eßer B) dc_only=1 ;; 3333aa99676SStefan Eßer c) coverage=1 ;; 3343aa99676SStefan Eßer d) dc_only=1 ;; 3353aa99676SStefan Eßer D) bc_only=1 ;; 3363aa99676SStefan Eßer E) extra_math=0 ;; 3373aa99676SStefan Eßer f) force=1 ;; 3383aa99676SStefan Eßer g) debug=1 ;; 3393aa99676SStefan Eßer G) generate_tests=0 ;; 3403aa99676SStefan Eßer h) usage ;; 3413aa99676SStefan Eßer H) hist=0 ;; 3423aa99676SStefan Eßer k) karatsuba_len="$OPTARG" ;; 343*cf7becd2SStefan Eßer l) all_locales=1 ;; 3443aa99676SStefan Eßer M) install_manpages=0 ;; 3453aa99676SStefan Eßer N) nls=0 ;; 3463aa99676SStefan Eßer O) optimization="$OPTARG" ;; 3473aa99676SStefan Eßer P) prompt=0 ;; 3483aa99676SStefan Eßer T) strip_bin=0 ;; 3493aa99676SStefan Eßer -) 3503aa99676SStefan Eßer arg="$1" 3513aa99676SStefan Eßer arg="${arg#--}" 3523aa99676SStefan Eßer LONG_OPTARG="${arg#*=}" 3533aa99676SStefan Eßer case $arg in 3543aa99676SStefan Eßer help) usage ;; 3553aa99676SStefan Eßer bc-only) bc_only=1 ;; 3563aa99676SStefan Eßer dc-only) dc_only=1 ;; 3573aa99676SStefan Eßer coverage) coverage=1 ;; 3583aa99676SStefan Eßer debug) debug=1 ;; 3593aa99676SStefan Eßer force) force=1 ;; 3603aa99676SStefan Eßer prefix=?*) PREFIX="$LONG_OPTARG" ;; 3613aa99676SStefan Eßer prefix) 3623aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 3633aa99676SStefan Eßer usage "No argument given for '--$arg' option" 3643aa99676SStefan Eßer fi 3653aa99676SStefan Eßer PREFIX="$2" 3663aa99676SStefan Eßer shift ;; 3673aa99676SStefan Eßer bindir=?*) BINDIR="$LONG_OPTARG" ;; 3683aa99676SStefan Eßer bindir) 3693aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 3703aa99676SStefan Eßer usage "No argument given for '--$arg' option" 3713aa99676SStefan Eßer fi 3723aa99676SStefan Eßer BINDIR="$2" 3733aa99676SStefan Eßer shift ;; 3743aa99676SStefan Eßer datarootdir=?*) DATAROOTDIR="$LONG_OPTARG" ;; 3753aa99676SStefan Eßer datarootdir) 3763aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 3773aa99676SStefan Eßer usage "No argument given for '--$arg' option" 3783aa99676SStefan Eßer fi 3793aa99676SStefan Eßer DATAROOTDIR="$2" 3803aa99676SStefan Eßer shift ;; 3813aa99676SStefan Eßer datadir=?*) DATADIR="$LONG_OPTARG" ;; 3823aa99676SStefan Eßer datadir) 3833aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 3843aa99676SStefan Eßer usage "No argument given for '--$arg' option" 3853aa99676SStefan Eßer fi 3863aa99676SStefan Eßer DATADIR="$2" 3873aa99676SStefan Eßer shift ;; 3883aa99676SStefan Eßer mandir=?*) MANDIR="$LONG_OPTARG" ;; 3893aa99676SStefan Eßer mandir) 3903aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 3913aa99676SStefan Eßer usage "No argument given for '--$arg' option" 3923aa99676SStefan Eßer fi 3933aa99676SStefan Eßer MANDIR="$2" 3943aa99676SStefan Eßer shift ;; 3953aa99676SStefan Eßer man1dir=?*) MAN1DIR="$LONG_OPTARG" ;; 3963aa99676SStefan Eßer man1dir) 3973aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 3983aa99676SStefan Eßer usage "No argument given for '--$arg' option" 3993aa99676SStefan Eßer fi 4003aa99676SStefan Eßer MAN1DIR="$2" 4013aa99676SStefan Eßer shift ;; 4023aa99676SStefan Eßer localedir=?*) LOCALEDIR="$LONG_OPTARG" ;; 4033aa99676SStefan Eßer localedir) 4043aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 4053aa99676SStefan Eßer usage "No argument given for '--$arg' option" 4063aa99676SStefan Eßer fi 4073aa99676SStefan Eßer LOCALEDIR="$2" 4083aa99676SStefan Eßer shift ;; 4093aa99676SStefan Eßer karatsuba-len=?*) karatsuba_len="$LONG_OPTARG" ;; 4103aa99676SStefan Eßer karatsuba-len) 4113aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 4123aa99676SStefan Eßer usage "No argument given for '--$arg' option" 4133aa99676SStefan Eßer fi 4143aa99676SStefan Eßer karatsuba_len="$1" 4153aa99676SStefan Eßer shift ;; 4163aa99676SStefan Eßer opt=?*) optimization="$LONG_OPTARG" ;; 4173aa99676SStefan Eßer opt) 4183aa99676SStefan Eßer if [ "$#" -lt 2 ]; then 4193aa99676SStefan Eßer usage "No argument given for '--$arg' option" 4203aa99676SStefan Eßer fi 4213aa99676SStefan Eßer optimization="$1" 4223aa99676SStefan Eßer shift ;; 4233aa99676SStefan Eßer disable-bc) dc_only=1 ;; 4243aa99676SStefan Eßer disable-dc) bc_only=1 ;; 4253aa99676SStefan Eßer disable-extra-math) extra_math=0 ;; 4263aa99676SStefan Eßer disable-generated-tests) generate_tests=0 ;; 4273aa99676SStefan Eßer disable-history) hist=0 ;; 4283aa99676SStefan Eßer disable-man-pages) install_manpages=0 ;; 4293aa99676SStefan Eßer disable-nls) nls=0 ;; 4303aa99676SStefan Eßer disable-prompt) prompt=0 ;; 4313aa99676SStefan Eßer disable-strip) strip_bin=0 ;; 432*cf7becd2SStefan Eßer install-all-locales) all_locales=1 ;; 4333aa99676SStefan Eßer help* | bc-only* | dc-only* | coverage* | debug*) 4343aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 4353aa99676SStefan Eßer disable-bc* | disable-dc* | disable-extra-math*) 4363aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 4373aa99676SStefan Eßer disable-generated-tests* | disable-history*) 4383aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 4393aa99676SStefan Eßer disable-man-pages* | disable-nls* | disable-strip*) 4403aa99676SStefan Eßer usage "No arg allowed for --$arg option" ;; 441*cf7becd2SStefan Eßer install-all-locales*) 442*cf7becd2SStefan Eßer usage "No arg allowed for --$arg option" ;; 4433aa99676SStefan Eßer '') break ;; # "--" terminates argument processing 4443aa99676SStefan Eßer * ) usage "Invalid option $LONG_OPTARG" ;; 4453aa99676SStefan Eßer esac 4463aa99676SStefan Eßer shift 4473aa99676SStefan Eßer OPTIND=1 ;; 4483aa99676SStefan Eßer ?) usage "Invalid option $opt" ;; 4493aa99676SStefan Eßer esac 4503aa99676SStefan Eßer 4513aa99676SStefan Eßerdone 4523aa99676SStefan Eßer 4533aa99676SStefan Eßerif [ "$bc_only" -eq 1 ] && [ "$dc_only" -eq 1 ]; then 4543aa99676SStefan Eßer usage "Can only specify one of -b(-D) or -d(-B)" 4553aa99676SStefan Eßerfi 4563aa99676SStefan Eßer 4573aa99676SStefan Eßercase $karatsuba_len in 4583aa99676SStefan Eßer (*[!0-9]*|'') usage "KARATSUBA_LEN is not a number" ;; 4593aa99676SStefan Eßer (*) ;; 4603aa99676SStefan Eßeresac 4613aa99676SStefan Eßer 4623aa99676SStefan Eßerif [ "$karatsuba_len" -lt 16 ]; then 4633aa99676SStefan Eßer usage "KARATSUBA_LEN is less than 16" 4643aa99676SStefan Eßerfi 4653aa99676SStefan Eßer 4663aa99676SStefan Eßerset -e 4673aa99676SStefan Eßer 4683aa99676SStefan Eßerif [ -z "${LONG_BIT+set}" ]; then 4693aa99676SStefan Eßer LONG_BIT_DEFINE="" 4703aa99676SStefan Eßerelif [ "$LONG_BIT" -lt 32 ]; then 4713aa99676SStefan Eßer usage "LONG_BIT is less than 32" 4723aa99676SStefan Eßerelse 4733aa99676SStefan Eßer LONG_BIT_DEFINE="-DBC_LONG_BIT=\$(BC_LONG_BIT)" 4743aa99676SStefan Eßerfi 4753aa99676SStefan Eßer 4763aa99676SStefan Eßerif [ -z "$CC" ]; then 4773aa99676SStefan Eßer CC="c99" 4783aa99676SStefan Eßerelse 4793aa99676SStefan Eßer ccbase=$(basename "$CC") 4803aa99676SStefan Eßer suffix=" *" 4813aa99676SStefan Eßer prefix="* " 4823aa99676SStefan Eßer 4833aa99676SStefan Eßer if [ "${ccbase%%$suffix}" != "$ccbase" ]; then 4843aa99676SStefan Eßer ccflags="${ccbase#$prefix}" 4853aa99676SStefan Eßer cc="${ccbase%%$suffix}" 4863aa99676SStefan Eßer ccdir=$(dirname "$CC") 4873aa99676SStefan Eßer if [ "$ccdir" = "." ] && [ "${CC#.}" = "$CC" ]; then 4883aa99676SStefan Eßer ccdir="" 4893aa99676SStefan Eßer else 4903aa99676SStefan Eßer ccdir="$ccdir/" 4913aa99676SStefan Eßer fi 4923aa99676SStefan Eßer CC="${ccdir}${cc}" 4933aa99676SStefan Eßer CFLAGS="$CFLAGS $ccflags" 4943aa99676SStefan Eßer fi 4953aa99676SStefan Eßerfi 4963aa99676SStefan Eßer 4973aa99676SStefan Eßerif [ -z "$HOSTCC" ] && [ -z "$HOST_CC" ]; then 4983aa99676SStefan Eßer HOSTCC="$CC" 4993aa99676SStefan Eßerelif [ -z "$HOSTCC" ]; then 5003aa99676SStefan Eßer HOSTCC="$HOST_CC" 5013aa99676SStefan Eßerfi 5023aa99676SStefan Eßer 5033aa99676SStefan Eßerif [ "$HOSTCC" != "$CC" ]; then 5043aa99676SStefan Eßer ccbase=$(basename "$HOSTCC") 5053aa99676SStefan Eßer suffix=" *" 5063aa99676SStefan Eßer prefix="* " 5073aa99676SStefan Eßer 5083aa99676SStefan Eßer if [ "${ccbase%%$suffix}" != "$ccbase" ]; then 5093aa99676SStefan Eßer ccflags="${ccbase#$prefix}" 5103aa99676SStefan Eßer cc="${ccbase%%$suffix}" 5113aa99676SStefan Eßer ccdir=$(dirname "$HOSTCC") 5123aa99676SStefan Eßer if [ "$ccdir" = "." ] && [ "${HOSTCC#.}" = "$HOSTCC" ]; then 5133aa99676SStefan Eßer ccdir="" 5143aa99676SStefan Eßer else 5153aa99676SStefan Eßer ccdir="$ccdir/" 5163aa99676SStefan Eßer fi 5173aa99676SStefan Eßer HOSTCC="${ccdir}${cc}" 5183aa99676SStefan Eßer HOSTCFLAGS="$HOSTCFLAGS $ccflags" 5193aa99676SStefan Eßer fi 5203aa99676SStefan Eßerfi 5213aa99676SStefan Eßer 5223aa99676SStefan Eßerif [ -z "${HOSTCFLAGS+set}" ] && [ -z "${HOST_CFLAGS+set}" ]; then 5233aa99676SStefan Eßer HOSTCFLAGS="$CFLAGS" 5243aa99676SStefan Eßerelif [ -z "${HOSTCFLAGS+set}" ]; then 5253aa99676SStefan Eßer HOSTCFLAGS="$HOST_CFLAGS" 5263aa99676SStefan Eßerfi 5273aa99676SStefan Eßer 5283aa99676SStefan Eßerlink="@printf 'No link necessary\\\\n'" 5293aa99676SStefan Eßermain_exec="BC" 5303aa99676SStefan Eßerexecutable="BC_EXEC" 5313aa99676SStefan Eßer 5323aa99676SStefan Eßerbc_test="@tests/all.sh bc $extra_math 1 $generate_tests 0 \$(BC_EXEC)" 5333aa99676SStefan Eßerbc_time_test="@tests/all.sh bc $extra_math 1 $generate_tests 1 \$(BC_EXEC)" 5343aa99676SStefan Eßer 5353aa99676SStefan Eßerdc_test="@tests/all.sh dc $extra_math 1 $generate_tests 0 \$(DC_EXEC)" 5363aa99676SStefan Eßerdc_time_test="@tests/all.sh dc $extra_math 1 $generate_tests 1 \$(DC_EXEC)" 5373aa99676SStefan Eßer 5383aa99676SStefan Eßertimeconst="@tests/bc/timeconst.sh tests/bc/scripts/timeconst.bc \$(BC_EXEC)" 5393aa99676SStefan Eßer 5403aa99676SStefan Eßer# In order to have cleanup at exit, we need to be in 5413aa99676SStefan Eßer# debug mode, so don't run valgrind without that. 5423aa99676SStefan Eßerif [ "$debug" -ne 0 ]; then 5433aa99676SStefan Eßer vg_bc_test="@tests/all.sh bc $extra_math 1 $generate_tests 0 valgrind \$(VALGRIND_ARGS) \$(BC_EXEC)" 5443aa99676SStefan Eßer vg_dc_test="@tests/all.sh dc $extra_math 1 $generate_tests 0 valgrind \$(VALGRIND_ARGS) \$(DC_EXEC)" 5453aa99676SStefan Eßerelse 5463aa99676SStefan Eßer vg_bc_test="@printf 'Cannot run valgrind without debug flags\\\\n'" 5473aa99676SStefan Eßer vg_dc_test="@printf 'Cannot run valgrind without debug flags\\\\n'" 5483aa99676SStefan Eßerfi 5493aa99676SStefan Eßer 5503aa99676SStefan Eßerkaratsuba="@printf 'karatsuba cannot be run because one of bc or dc is not built\\\\n'" 5513aa99676SStefan Eßerkaratsuba_test="@printf 'karatsuba cannot be run because one of bc or dc is not built\\\\n'" 5523aa99676SStefan Eßer 5533aa99676SStefan Eßerbc_lib="\$(GEN_DIR)/lib.o" 5543aa99676SStefan Eßerbc_help="\$(GEN_DIR)/bc_help.o" 5553aa99676SStefan Eßerdc_help="\$(GEN_DIR)/dc_help.o" 5563aa99676SStefan Eßer 5573aa99676SStefan Eßerif [ "$bc_only" -eq 1 ]; then 5583aa99676SStefan Eßer 5593aa99676SStefan Eßer bc=1 5603aa99676SStefan Eßer dc=0 5613aa99676SStefan Eßer 5623aa99676SStefan Eßer dc_help="" 5633aa99676SStefan Eßer 5643aa99676SStefan Eßer executables="bc" 5653aa99676SStefan Eßer 5663aa99676SStefan Eßer dc_test="@printf 'No dc tests to run\\\\n'" 5673aa99676SStefan Eßer dc_time_test="@printf 'No dc tests to run\\\\n'" 5683aa99676SStefan Eßer vg_dc_test="@printf 'No dc tests to run\\\\n'" 5693aa99676SStefan Eßer 5703aa99676SStefan Eßer install_prereqs=" install_bc_manpage" 5713aa99676SStefan Eßer uninstall_prereqs=" uninstall_bc" 5723aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_bc_manpage" 5733aa99676SStefan Eßer 5743aa99676SStefan Eßerelif [ "$dc_only" -eq 1 ]; then 5753aa99676SStefan Eßer 5763aa99676SStefan Eßer bc=0 5773aa99676SStefan Eßer dc=1 5783aa99676SStefan Eßer 5793aa99676SStefan Eßer bc_lib="" 5803aa99676SStefan Eßer bc_help="" 5813aa99676SStefan Eßer 5823aa99676SStefan Eßer executables="dc" 5833aa99676SStefan Eßer 5843aa99676SStefan Eßer main_exec="DC" 5853aa99676SStefan Eßer executable="DC_EXEC" 5863aa99676SStefan Eßer 5873aa99676SStefan Eßer bc_test="@printf 'No bc tests to run\\\\n'" 5883aa99676SStefan Eßer bc_time_test="@printf 'No bc tests to run\\\\n'" 5893aa99676SStefan Eßer vg_bc_test="@printf 'No bc tests to run\\\\n'" 5903aa99676SStefan Eßer 5913aa99676SStefan Eßer timeconst="@printf 'timeconst cannot be run because bc is not built\\\\n'" 5923aa99676SStefan Eßer 5933aa99676SStefan Eßer install_prereqs=" install_dc_manpage" 5943aa99676SStefan Eßer uninstall_prereqs=" uninstall_dc" 5953aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_dc_manpage" 5963aa99676SStefan Eßer 5973aa99676SStefan Eßerelse 5983aa99676SStefan Eßer 5993aa99676SStefan Eßer bc=1 6003aa99676SStefan Eßer dc=1 6013aa99676SStefan Eßer 6023aa99676SStefan Eßer executables="bc and dc" 6033aa99676SStefan Eßer 6043aa99676SStefan Eßer link="\$(LINK) \$(BIN) \$(EXEC_PREFIX)\$(DC)" 6053aa99676SStefan Eßer 6063aa99676SStefan Eßer karatsuba="@\$(KARATSUBA) 30 0 \$(BC_EXEC)" 6073aa99676SStefan Eßer karatsuba_test="@\$(KARATSUBA) 1 100 \$(BC_EXEC)" 6083aa99676SStefan Eßer 6093aa99676SStefan Eßer install_prereqs=" install_bc_manpage install_dc_manpage" 6103aa99676SStefan Eßer uninstall_prereqs=" uninstall_bc uninstall_dc" 6113aa99676SStefan Eßer uninstall_man_prereqs=" uninstall_bc_manpage uninstall_dc_manpage" 6123aa99676SStefan Eßer 6133aa99676SStefan Eßerfi 6143aa99676SStefan Eßer 6153aa99676SStefan Eßerif [ "$debug" -eq 1 ]; then 6163aa99676SStefan Eßer 6173aa99676SStefan Eßer if [ -z "$CFLAGS" ] && [ -z "$optimization" ]; then 6183aa99676SStefan Eßer CFLAGS="-O0" 6193aa99676SStefan Eßer fi 6203aa99676SStefan Eßer 6213aa99676SStefan Eßer CFLAGS="-g $CFLAGS" 6223aa99676SStefan Eßer 6233aa99676SStefan Eßerelse 6243aa99676SStefan Eßer CPPFLAGS="-DNDEBUG $CPPFLAGS" 6253aa99676SStefan Eßer if [ "$strip_bin" -ne 0 ]; then 6263aa99676SStefan Eßer LDFLAGS="-s $LDFLAGS" 6273aa99676SStefan Eßer fi 6283aa99676SStefan Eßerfi 6293aa99676SStefan Eßer 6303aa99676SStefan Eßerif [ -n "$optimization" ]; then 6313aa99676SStefan Eßer CFLAGS="-O$optimization $CFLAGS" 6323aa99676SStefan Eßerfi 6333aa99676SStefan Eßer 6343aa99676SStefan Eßerif [ "$coverage" -eq 1 ]; then 6353aa99676SStefan Eßer 6363aa99676SStefan Eßer if [ "$bc_only" -eq 1 ] || [ "$dc_only" -eq 1 ]; then 6373aa99676SStefan Eßer usage "Can only specify -c without -b or -d" 6383aa99676SStefan Eßer fi 6393aa99676SStefan Eßer 6403aa99676SStefan Eßer CFLAGS="-fprofile-arcs -ftest-coverage -g -O0 $CFLAGS" 6413aa99676SStefan Eßer CPPFLAGS="-DNDEBUG $CPPFLAGS" 6423aa99676SStefan Eßer 6433aa99676SStefan Eßer COVERAGE_OUTPUT="@gcov -pabcdf \$(GCDA) \$(BC_GCDA) \$(DC_GCDA) \$(HISTORY_GCDA) \$(RAND_GCDA)" 6443aa99676SStefan Eßer COVERAGE_OUTPUT="$COVERAGE_OUTPUT;\$(RM) -f \$(GEN)*.gc*" 6453aa99676SStefan Eßer COVERAGE_OUTPUT="$COVERAGE_OUTPUT;gcovr --html-details --output index.html" 6463aa99676SStefan Eßer COVERAGE_PREREQS=" test coverage_output" 6473aa99676SStefan Eßer 6483aa99676SStefan Eßerelse 6493aa99676SStefan Eßer COVERAGE_OUTPUT="@printf 'Coverage not generated\\\\n'" 6503aa99676SStefan Eßer COVERAGE_PREREQS="" 6513aa99676SStefan Eßerfi 6523aa99676SStefan Eßer 6533aa99676SStefan Eßerif [ -z "${DESTDIR+set}" ]; then 6543aa99676SStefan Eßer destdir="" 6553aa99676SStefan Eßerelse 6563aa99676SStefan Eßer destdir="DESTDIR = $DESTDIR" 6573aa99676SStefan Eßerfi 6583aa99676SStefan Eßer 6593aa99676SStefan Eßerif [ -z "${PREFIX+set}" ]; then 6603aa99676SStefan Eßer PREFIX="/usr/local" 6613aa99676SStefan Eßerfi 6623aa99676SStefan Eßer 6633aa99676SStefan Eßerif [ -z "${BINDIR+set}" ]; then 6643aa99676SStefan Eßer BINDIR="$PREFIX/bin" 6653aa99676SStefan Eßerfi 6663aa99676SStefan Eßer 6673aa99676SStefan Eßerif [ "$install_manpages" -ne 0 ] || [ "$nls" -ne 0 ]; then 6683aa99676SStefan Eßer if [ -z "${DATAROOTDIR+set}" ]; then 6693aa99676SStefan Eßer DATAROOTDIR="$PREFIX/share" 6703aa99676SStefan Eßer fi 6713aa99676SStefan Eßerfi 6723aa99676SStefan Eßer 6733aa99676SStefan Eßerif [ "$install_manpages" -ne 0 ]; then 6743aa99676SStefan Eßer 6753aa99676SStefan Eßer if [ -z "${DATADIR+set}" ]; then 6763aa99676SStefan Eßer DATADIR="$DATAROOTDIR" 6773aa99676SStefan Eßer fi 6783aa99676SStefan Eßer 6793aa99676SStefan Eßer if [ -z "${MANDIR+set}" ]; then 6803aa99676SStefan Eßer MANDIR="$DATADIR/man" 6813aa99676SStefan Eßer fi 6823aa99676SStefan Eßer 6833aa99676SStefan Eßer if [ -z "${MAN1DIR+set}" ]; then 6843aa99676SStefan Eßer MAN1DIR="$MANDIR/man1" 6853aa99676SStefan Eßer fi 6863aa99676SStefan Eßer 6873aa99676SStefan Eßerelse 6883aa99676SStefan Eßer install_prereqs="" 6893aa99676SStefan Eßer uninstall_man_prereqs="" 6903aa99676SStefan Eßerfi 6913aa99676SStefan Eßer 6923aa99676SStefan Eßerif [ "$nls" -ne 0 ]; then 6933aa99676SStefan Eßer 6943aa99676SStefan Eßer set +e 6953aa99676SStefan Eßer 6963aa99676SStefan Eßer printf 'Testing NLS...\n' 6973aa99676SStefan Eßer 6983aa99676SStefan Eßer flags="-DBC_ENABLE_NLS=1 -DBC_ENABLED=$bc -DDC_ENABLED=$dc" 6993aa99676SStefan Eßer flags="$flags -DBC_ENABLE_HISTORY=$hist" 7003aa99676SStefan Eßer flags="$flags -DBC_ENABLE_EXTRA_MATH=$extra_math -I./include/" 7013aa99676SStefan Eßer flags="$flags -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700" 7023aa99676SStefan Eßer 7033aa99676SStefan Eßer "$CC" $CPPFLAGS $CFLAGS $flags -c "src/vm.c" -o "$scriptdir/vm.o" > /dev/null 2>&1 7043aa99676SStefan Eßer 7053aa99676SStefan Eßer err="$?" 7063aa99676SStefan Eßer 7073aa99676SStefan Eßer rm -rf "$scriptdir/vm.o" 7083aa99676SStefan Eßer 7093aa99676SStefan Eßer # If this errors, it is probably because of building on Windows, 7103aa99676SStefan Eßer # and NLS is not supported on Windows, so disable it. 7113aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 7123aa99676SStefan Eßer printf 'NLS does not work.\n' 7133aa99676SStefan Eßer if [ $force -eq 0 ]; then 7143aa99676SStefan Eßer printf 'Disabling NLS...\n\n' 7153aa99676SStefan Eßer nls=0 7163aa99676SStefan Eßer else 7173aa99676SStefan Eßer printf 'Forcing NLS...\n\n' 7183aa99676SStefan Eßer fi 7193aa99676SStefan Eßer else 7203aa99676SStefan Eßer printf 'NLS works.\n\n' 7213aa99676SStefan Eßer 7223aa99676SStefan Eßer printf 'Testing gencat...\n' 7233aa99676SStefan Eßer gencat "$scriptdir/en_US.cat" "$scriptdir/locales/en_US.msg" > /dev/null 2>&1 7243aa99676SStefan Eßer 7253aa99676SStefan Eßer err="$?" 7263aa99676SStefan Eßer 7273aa99676SStefan Eßer rm -rf "$scriptdir/en_US.cat" 7283aa99676SStefan Eßer 7293aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 7303aa99676SStefan Eßer printf 'gencat does not work.\n' 7313aa99676SStefan Eßer if [ $force -eq 0 ]; then 7323aa99676SStefan Eßer printf 'Disabling NLS...\n\n' 7333aa99676SStefan Eßer nls=0 7343aa99676SStefan Eßer else 7353aa99676SStefan Eßer printf 'Forcing NLS...\n\n' 7363aa99676SStefan Eßer fi 7373aa99676SStefan Eßer else 7383aa99676SStefan Eßer 7393aa99676SStefan Eßer printf 'gencat works.\n\n' 7403aa99676SStefan Eßer 7413aa99676SStefan Eßer if [ "$HOSTCC" != "$CC" ]; then 7423aa99676SStefan Eßer printf 'Cross-compile detected.\n\n' 7433aa99676SStefan Eßer printf 'WARNING: Catalog files generated with gencat may not be portable\n' 7443aa99676SStefan Eßer printf ' across different architectures.\n\n' 7453aa99676SStefan Eßer fi 7463aa99676SStefan Eßer 7473aa99676SStefan Eßer if [ -z "$NLSPATH" ]; then 7483aa99676SStefan Eßer NLSPATH="/usr/share/locale/%L/%N" 7493aa99676SStefan Eßer fi 7503aa99676SStefan Eßer 7513aa99676SStefan Eßer install_locales_prereqs=" install_locales" 7523aa99676SStefan Eßer uninstall_locales_prereqs=" uninstall_locales" 7533aa99676SStefan Eßer 7543aa99676SStefan Eßer fi 7553aa99676SStefan Eßer 7563aa99676SStefan Eßer fi 7573aa99676SStefan Eßer 7583aa99676SStefan Eßer set -e 7593aa99676SStefan Eßer 7603aa99676SStefan Eßerelse 7613aa99676SStefan Eßer install_locales_prereqs="" 7623aa99676SStefan Eßer uninstall_locales_prereqs="" 763*cf7becd2SStefan Eßer all_locales=0 764*cf7becd2SStefan Eßerfi 765*cf7becd2SStefan Eßer 766*cf7becd2SStefan Eßerif [ "$nls" -ne 0 ] && [ "$all_locales" -ne 0 ]; then 767*cf7becd2SStefan Eßer install_locales="\$(LOCALE_INSTALL) -l \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" 768*cf7becd2SStefan Eßerelse 769*cf7becd2SStefan Eßer install_locales="\$(LOCALE_INSTALL) \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" 7703aa99676SStefan Eßerfi 7713aa99676SStefan Eßer 7723aa99676SStefan Eßerif [ "$hist" -eq 1 ]; then 7733aa99676SStefan Eßer 7743aa99676SStefan Eßer set +e 7753aa99676SStefan Eßer 7763aa99676SStefan Eßer printf 'Testing history...\n' 7773aa99676SStefan Eßer 7783aa99676SStefan Eßer flags="-DBC_ENABLE_HISTORY=1 -DBC_ENABLED=$bc -DDC_ENABLED=$dc" 7793aa99676SStefan Eßer flags="$flags -DBC_ENABLE_NLS=$nls" 7803aa99676SStefan Eßer flags="$flags -DBC_ENABLE_EXTRA_MATH=$extra_math -I./include/" 7813aa99676SStefan Eßer flags="$flags -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700" 7823aa99676SStefan Eßer 7833aa99676SStefan Eßer "$CC" $CPPFLAGS $CFLAGS $flags -c "src/history/history.c" -o "$scriptdir/history.o" > /dev/null 2>&1 7843aa99676SStefan Eßer 7853aa99676SStefan Eßer err="$?" 7863aa99676SStefan Eßer 7873aa99676SStefan Eßer rm -rf "$scriptdir/history.o" 7883aa99676SStefan Eßer 7893aa99676SStefan Eßer # If this errors, it is probably because of building on Windows, 7903aa99676SStefan Eßer # and history is not supported on Windows, so disable it. 7913aa99676SStefan Eßer if [ "$err" -ne 0 ]; then 7923aa99676SStefan Eßer printf 'History does not work.\n' 7933aa99676SStefan Eßer if [ $force -eq 0 ]; then 7943aa99676SStefan Eßer printf 'Disabling history...\n\n' 7953aa99676SStefan Eßer hist=0 7963aa99676SStefan Eßer else 7973aa99676SStefan Eßer printf 'Forcing history...\n\n' 7983aa99676SStefan Eßer fi 7993aa99676SStefan Eßer else 8003aa99676SStefan Eßer printf 'History works.\n\n' 8013aa99676SStefan Eßer fi 8023aa99676SStefan Eßer 8033aa99676SStefan Eßer set -e 8043aa99676SStefan Eßer 8053aa99676SStefan Eßerfi 8063aa99676SStefan Eßer 8073aa99676SStefan Eßerif [ "$extra_math" -eq 1 ] && [ "$bc" -ne 0 ]; then 8083aa99676SStefan Eßer BC_LIB2_O="\$(GEN_DIR)/lib2.o" 8093aa99676SStefan Eßerelse 8103aa99676SStefan Eßer BC_LIB2_O="" 8113aa99676SStefan Eßerfi 8123aa99676SStefan Eßer 8133aa99676SStefan EßerGEN="strgen" 8143aa99676SStefan EßerGEN_EXEC_TARGET="\$(HOSTCC) \$(HOSTCFLAGS) -o \$(GEN_EXEC) \$(GEN_C)" 8153aa99676SStefan EßerCLEAN_PREREQS=" clean_gen" 8163aa99676SStefan Eßer 8173aa99676SStefan Eßerif [ -z "${GEN_HOST+set}" ]; then 8183aa99676SStefan Eßer GEN_HOST=1 8193aa99676SStefan Eßerelse 8203aa99676SStefan Eßer if [ "$GEN_HOST" -eq 0 ]; then 8213aa99676SStefan Eßer GEN="strgen.sh" 8223aa99676SStefan Eßer GEN_EXEC_TARGET="@printf 'Do not need to build gen/strgen.c\\\\n'" 8233aa99676SStefan Eßer CLEAN_PREREQS="" 8243aa99676SStefan Eßer fi 8253aa99676SStefan Eßerfi 8263aa99676SStefan Eßer 8273aa99676SStefan Eßermanpage_args="" 8283aa99676SStefan Eßer 8293aa99676SStefan Eßerif [ "$extra_math" -eq 0 ]; then 8303aa99676SStefan Eßer manpage_args="E" 8313aa99676SStefan Eßerfi 8323aa99676SStefan Eßer 8333aa99676SStefan Eßerif [ "$hist" -eq 0 ]; then 8343aa99676SStefan Eßer manpage_args="${manpage_args}H" 8353aa99676SStefan Eßerfi 8363aa99676SStefan Eßer 8373aa99676SStefan Eßerif [ "$nls" -eq 0 ]; then 8383aa99676SStefan Eßer manpage_args="${manpage_args}N" 8393aa99676SStefan Eßerfi 8403aa99676SStefan Eßer 8413aa99676SStefan Eßerif [ "$prompt" -eq 0 ]; then 8423aa99676SStefan Eßer manpage_args="${manpage_args}P" 8433aa99676SStefan Eßerfi 8443aa99676SStefan Eßer 8453aa99676SStefan Eßerif [ "$manpage_args" = "" ]; then 8463aa99676SStefan Eßer manpage_args="A" 8473aa99676SStefan Eßerfi 8483aa99676SStefan Eßer 8493aa99676SStefan Eßer# Print out the values; this is for debugging. 8503aa99676SStefan Eßerif [ "$bc" -ne 0 ]; then 8513aa99676SStefan Eßer printf 'Building bc\n' 8523aa99676SStefan Eßerelse 8533aa99676SStefan Eßer printf 'Not building bc\n' 8543aa99676SStefan Eßerfi 8553aa99676SStefan Eßerif [ "$dc" -ne 0 ]; then 8563aa99676SStefan Eßer printf 'Building dc\n' 8573aa99676SStefan Eßerelse 8583aa99676SStefan Eßer printf 'Not building dc\n' 8593aa99676SStefan Eßerfi 8603aa99676SStefan Eßerprintf '\n' 8613aa99676SStefan Eßerprintf 'BC_ENABLE_HISTORY=%s\n' "$hist" 8623aa99676SStefan Eßerprintf 'BC_ENABLE_EXTRA_MATH=%s\n' "$extra_math" 8633aa99676SStefan Eßerprintf 'BC_ENABLE_NLS=%s\n' "$nls" 8643aa99676SStefan Eßerprintf 'BC_ENABLE_PROMPT=%s\n' "$prompt" 8653aa99676SStefan Eßerprintf '\n' 8663aa99676SStefan Eßerprintf 'BC_NUM_KARATSUBA_LEN=%s\n' "$karatsuba_len" 8673aa99676SStefan Eßerprintf '\n' 8683aa99676SStefan Eßerprintf 'CC=%s\n' "$CC" 8693aa99676SStefan Eßerprintf 'CFLAGS=%s\n' "$CFLAGS" 8703aa99676SStefan Eßerprintf 'HOSTCC=%s\n' "$HOSTCC" 8713aa99676SStefan Eßerprintf 'HOSTCFLAGS=%s\n' "$HOSTCFLAGS" 8723aa99676SStefan Eßerprintf 'CPPFLAGS=%s\n' "$CPPFLAGS" 8733aa99676SStefan Eßerprintf 'LDFLAGS=%s\n' "$LDFLAGS" 8743aa99676SStefan Eßerprintf 'PREFIX=%s\n' "$PREFIX" 8753aa99676SStefan Eßerprintf 'BINDIR=%s\n' "$BINDIR" 8763aa99676SStefan Eßerprintf 'DATAROOTDIR=%s\n' "$DATAROOTDIR" 8773aa99676SStefan Eßerprintf 'DATADIR=%s\n' "$DATADIR" 8783aa99676SStefan Eßerprintf 'MANDIR=%s\n' "$MANDIR" 8793aa99676SStefan Eßerprintf 'MAN1DIR=%s\n' "$MAN1DIR" 8803aa99676SStefan Eßerprintf 'NLSPATH=%s\n' "$NLSPATH" 8813aa99676SStefan Eßerprintf 'EXECSUFFIX=%s\n' "$EXECSUFFIX" 8823aa99676SStefan Eßerprintf 'EXECPREFIX=%s\n' "$EXECPREFIX" 8833aa99676SStefan Eßerprintf 'DESTDIR=%s\n' "$DESTDIR" 8843aa99676SStefan Eßerprintf 'LONG_BIT=%s\n' "$LONG_BIT" 8853aa99676SStefan Eßerprintf 'GEN_HOST=%s\n' "$GEN_HOST" 8863aa99676SStefan Eßerprintf 'GEN_EMU=%s\n' "$GEN_EMU" 8873aa99676SStefan Eßer 8883aa99676SStefan Eßercontents=$(cat "$scriptdir/Makefile.in") 8893aa99676SStefan Eßer 8903aa99676SStefan Eßerneedle="WARNING" 8913aa99676SStefan Eßerreplacement='*** WARNING: Autogenerated from Makefile.in. DO NOT MODIFY ***' 8923aa99676SStefan Eßer 8933aa99676SStefan Eßercontents=$(replace "$contents" "$needle" "$replacement") 8943aa99676SStefan Eßer 8953aa99676SStefan Eßercontents=$(gen_file_lists "$contents" "$scriptdir/src" "") 8963aa99676SStefan Eßercontents=$(gen_file_lists "$contents" "$scriptdir/src/bc" "BC_" "$bc") 8973aa99676SStefan Eßercontents=$(gen_file_lists "$contents" "$scriptdir/src/dc" "DC_" "$dc") 8983aa99676SStefan Eßercontents=$(gen_file_lists "$contents" "$scriptdir/src/history" "HISTORY_" "$hist") 8993aa99676SStefan Eßercontents=$(gen_file_lists "$contents" "$scriptdir/src/rand" "RAND_" "$extra_math") 9003aa99676SStefan Eßer 9013aa99676SStefan Eßercontents=$(replace "$contents" "BC_ENABLED" "$bc") 9023aa99676SStefan Eßercontents=$(replace "$contents" "DC_ENABLED" "$dc") 9033aa99676SStefan Eßercontents=$(replace "$contents" "LINK" "$link") 9043aa99676SStefan Eßer 9053aa99676SStefan Eßercontents=$(replace "$contents" "HISTORY" "$hist") 9063aa99676SStefan Eßercontents=$(replace "$contents" "EXTRA_MATH" "$extra_math") 9073aa99676SStefan Eßercontents=$(replace "$contents" "NLS" "$nls") 9083aa99676SStefan Eßercontents=$(replace "$contents" "PROMPT" "$prompt") 9093aa99676SStefan Eßercontents=$(replace "$contents" "BC_LIB_O" "$bc_lib") 9103aa99676SStefan Eßercontents=$(replace "$contents" "BC_HELP_O" "$bc_help") 9113aa99676SStefan Eßercontents=$(replace "$contents" "DC_HELP_O" "$dc_help") 9123aa99676SStefan Eßercontents=$(replace "$contents" "BC_LIB2_O" "$BC_LIB2_O") 9133aa99676SStefan Eßercontents=$(replace "$contents" "KARATSUBA_LEN" "$karatsuba_len") 9143aa99676SStefan Eßer 9153aa99676SStefan Eßercontents=$(replace "$contents" "NLSPATH" "$NLSPATH") 9163aa99676SStefan Eßercontents=$(replace "$contents" "DESTDIR" "$destdir") 9173aa99676SStefan Eßercontents=$(replace "$contents" "EXECSUFFIX" "$EXECSUFFIX") 9183aa99676SStefan Eßercontents=$(replace "$contents" "EXECPREFIX" "$EXECPREFIX") 9193aa99676SStefan Eßercontents=$(replace "$contents" "BINDIR" "$BINDIR") 9203aa99676SStefan Eßercontents=$(replace "$contents" "MAN1DIR" "$MAN1DIR") 9213aa99676SStefan Eßercontents=$(replace "$contents" "CFLAGS" "$CFLAGS") 9223aa99676SStefan Eßercontents=$(replace "$contents" "HOSTCFLAGS" "$HOSTCFLAGS") 9233aa99676SStefan Eßercontents=$(replace "$contents" "CPPFLAGS" "$CPPFLAGS") 9243aa99676SStefan Eßercontents=$(replace "$contents" "LDFLAGS" "$LDFLAGS") 9253aa99676SStefan Eßercontents=$(replace "$contents" "CC" "$CC") 9263aa99676SStefan Eßercontents=$(replace "$contents" "HOSTCC" "$HOSTCC") 9273aa99676SStefan Eßercontents=$(replace "$contents" "COVERAGE_OUTPUT" "$COVERAGE_OUTPUT") 9283aa99676SStefan Eßercontents=$(replace "$contents" "COVERAGE_PREREQS" "$COVERAGE_PREREQS") 9293aa99676SStefan Eßercontents=$(replace "$contents" "INSTALL_PREREQS" "$install_prereqs") 930*cf7becd2SStefan Eßercontents=$(replace "$contents" "INSTALL_LOCALES" "$install_locales") 9313aa99676SStefan Eßercontents=$(replace "$contents" "INSTALL_LOCALES_PREREQS" "$install_locales_prereqs") 9323aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_MAN_PREREQS" "$uninstall_man_prereqs") 9333aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_PREREQS" "$uninstall_prereqs") 9343aa99676SStefan Eßercontents=$(replace "$contents" "UNINSTALL_LOCALES_PREREQS" "$uninstall_locales_prereqs") 9353aa99676SStefan Eßer 9363aa99676SStefan Eßercontents=$(replace "$contents" "EXECUTABLES" "$executables") 9373aa99676SStefan Eßercontents=$(replace "$contents" "MAIN_EXEC" "$main_exec") 9383aa99676SStefan Eßercontents=$(replace "$contents" "EXEC" "$executable") 9393aa99676SStefan Eßer 9403aa99676SStefan Eßercontents=$(replace "$contents" "BC_TEST" "$bc_test") 9413aa99676SStefan Eßercontents=$(replace "$contents" "BC_TIME_TEST" "$bc_time_test") 9423aa99676SStefan Eßer 9433aa99676SStefan Eßercontents=$(replace "$contents" "DC_TEST" "$dc_test") 9443aa99676SStefan Eßercontents=$(replace "$contents" "DC_TIME_TEST" "$dc_time_test") 9453aa99676SStefan Eßer 9463aa99676SStefan Eßercontents=$(replace "$contents" "VG_BC_TEST" "$vg_bc_test") 9473aa99676SStefan Eßercontents=$(replace "$contents" "VG_DC_TEST" "$vg_dc_test") 9483aa99676SStefan Eßer 9493aa99676SStefan Eßercontents=$(replace "$contents" "TIMECONST" "$timeconst") 9503aa99676SStefan Eßer 9513aa99676SStefan Eßercontents=$(replace "$contents" "KARATSUBA" "$karatsuba") 9523aa99676SStefan Eßercontents=$(replace "$contents" "KARATSUBA_TEST" "$karatsuba_test") 9533aa99676SStefan Eßer 9543aa99676SStefan Eßercontents=$(replace "$contents" "LONG_BIT" "$LONG_BIT") 9553aa99676SStefan Eßercontents=$(replace "$contents" "LONG_BIT_DEFINE" "$LONG_BIT_DEFINE") 9563aa99676SStefan Eßer 9573aa99676SStefan Eßercontents=$(replace "$contents" "GEN" "$GEN") 9583aa99676SStefan Eßercontents=$(replace "$contents" "GEN_EXEC_TARGET" "$GEN_EXEC_TARGET") 9593aa99676SStefan Eßercontents=$(replace "$contents" "CLEAN_PREREQS" "$CLEAN_PREREQS") 9603aa99676SStefan Eßercontents=$(replace "$contents" "GEN_EMU" "$GEN_EMU") 9613aa99676SStefan Eßer 9623aa99676SStefan Eßerprintf '%s\n' "$contents" > "$scriptdir/Makefile" 9633aa99676SStefan Eßer 9643aa99676SStefan Eßercd "$scriptdir" 9653aa99676SStefan Eßer 9663aa99676SStefan Eßercp -f manuals/bc/$manpage_args.1.md manuals/bc.1.md 9673aa99676SStefan Eßercp -f manuals/bc/$manpage_args.1 manuals/bc.1 9683aa99676SStefan Eßercp -f manuals/dc/$manpage_args.1.md manuals/dc.1.md 9693aa99676SStefan Eßercp -f manuals/dc/$manpage_args.1 manuals/dc.1 9703aa99676SStefan Eßer 9713aa99676SStefan Eßermake clean > /dev/null 972