diff options
Diffstat (limited to 'contrib')
749 files changed, 33550 insertions, 5954 deletions
diff --git a/contrib/bc/LICENSE.md b/contrib/bc/LICENSE.md index c8f6758e6d4b..e5d44dee6dab 100644 --- a/contrib/bc/LICENSE.md +++ b/contrib/bc/LICENSE.md @@ -1,6 +1,6 @@ # License -Copyright (c) 2018-2024 Gavin D. Howard <gavin@gavinhoward.com> +Copyright (c) 2018-2025 Gavin D. Howard <gavin@gavinhoward.com> Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -60,7 +60,7 @@ The files `src/rand.c` and `include/rand.h` are under the following copyrights and license: Copyright (c) 2014-2017 Melissa O'Neill and PCG Project contributors<br> -Copyright (c) 2018-2024 Gavin D. Howard <gavin@gavinhoward.com> +Copyright (c) 2018-2025 Gavin D. Howard <gavin@gavinhoward.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/contrib/bc/MAINTENANCE-TERMS.md b/contrib/bc/MAINTENANCE-TERMS.md new file mode 100644 index 000000000000..ef24202cc6c2 --- /dev/null +++ b/contrib/bc/MAINTENANCE-TERMS.md @@ -0,0 +1,80 @@ +# Maintenance Terms + +> Last Updated: 27 June 2025 + +The code, text, and other materials in this repository are provided as-is under +the terms of the repository's [`LICENSE.md`][0] file, as a gift to the commons +and the common good. In providing this software as-is, its author(s) admit no +further obligations from anyone using the software for any reason, particularly +with respect to: + +* Releases, +* Response time, +* Change review and integration, +* Disclosure schedules, +* Discretionary, proprietary or otherwise secretive communications, and +* Any other non-contractual obligations or conventions, regardless of their + presumed urgency or severity. + +Should anyone wish to make a contract with me (Gavin Howard) to ensure that work +he or she deems critical gets done, the terms are as follows: + +* Compute time will be charged at \$25/hr. +* My time will be charged at \$100/hr. +* All issues deemed critical by either me or the requester, that also change the + source code (anything in `gen`, `include`, or `src`) will require at least two + weeks of fuzzing without error. + * If errors are found, those hours will still be charged on top of the final + two weeks. +* All changes will require running the [release script][2] on Linux (GCC), Linux + (Clang), FreeBSD, OpenBSD, macOS, Windows. +* Any hours spent on bugs or code that have been, or are suspected to have been, + generated by "AI" will be charged double rates. + +Compute time includes, but is not limited to: + +* Fuzzing. +* Running my [release script][2]. +* Running tests and my [release script][2] on macOS. + +My time includes, but is not limited to: + +* Code review. +* Reading bug reports. +* Design. +* Coding. +* Any compute time that interferes with my ability to do any other work: + * Fuzzing makes my computer unusable, so fuzzing for the 8-12 hours of the + day that I could be working will be charged at \$100/hr. + * Same with running my [release script][2] because I run two instances on my + machine and two in VMs at the same time. + * Running my [release script][2] or any other compute time on Windows + because Windows blocks me from doing my main work on Linux. + * Any other instances of blocking compute time. + +All amounts will be billed by, and paid to, [Yzena, LLC][2]. Invoices will be +provided, including line items for what each hour was spent on. + +It is suggested that the following amounts be budgeted: + +* At least \$3000 for a non-critical issue or change. + + The release script takes about 10 hours, and I would need to run it once on + Linux (and others at the same time) and once on Windows, which is 20 hours. + Most of that won't be at the \$100/hr rate, but some probably will be. Then + an extra \$1000 for other work. + +* At least \$15,000 for a critical issue or change. + + The \$3000 above is the start, which leaves \$12,000. Fuzzing is expected to + cost \$11,400 (6 days a week, 8 hours a day, at \$100, the rest at \$25), and + rounded up to \$12,000 for good measure. + +--- + +This document is inspired by [Mike Hoye's Maintenance Terms][1]. + +[0]: LICENSE.md +[1]: https://github.com/mhoye/maintenance-terms +[2]: scripts/release.sh +[3]: https://yzena.com/ diff --git a/contrib/bc/Makefile.in b/contrib/bc/Makefile.in index c63dc242e79a..f8b120c1328e 100644 --- a/contrib/bc/Makefile.in +++ b/contrib/bc/Makefile.in @@ -1,7 +1,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -38,6 +38,8 @@ GENDIR = $(ROOTDIR)/gen BUILDDIR = %%BUILDDIR%% +VERSION = %%VERSION%% + SRC = %%SRC%% OBJ = %%OBJ%% GCDA = %%GCDA%% @@ -99,17 +101,16 @@ BC_FUZZER_C = $(BIN)/$(BC)_fuzzer_C DC_FUZZER = $(BIN)/$(DC)_fuzzer_c DC_FUZZER_C = $(BIN)/$(DC)_fuzzer_C -BC_TEST_OUTPUTS = tests/bc_outputs BC_FUZZ_OUTPUTS = tests/fuzzing/bc_outputs1 tests/fuzzing/bc_outputs2 tests/fuzzing/bc_outputs3 -DC_TEST_OUTPUTS = tests/dc_outputs DC_FUZZ_OUTPUTS = tests/fuzzing/dc_outputs LIB = libbcl LIB_NAME = $(LIB).a LIBBC = $(BIN)/$(LIB_NAME) BCL = bcl -BCL_TEST = $(BIN)/$(BCL) -BCL_TEST_C = $(TESTSDIR)/$(BCL).c + +GENERATE_TESTS = %%GENERATE_TESTS%% +PROBLEMATIC_TESTS = %%PROBLEMATIC_TESTS%% MANUALS = manuals BC_MANPAGE_NAME = $(EXEC_PREFIX)$(BC)$(EXEC_SUFFIX).1 @@ -152,11 +153,11 @@ BC_ENABLE_EXTRA_MATH = %%EXTRA_MATH%% BC_ENABLE_NLS = %%NLS%% BC_EXCLUDE_EXTRA_MATH = %%EXCLUDE_EXTRA_MATH%% -BC_ENABLE_AFL = %%FUZZ%% -BC_ENABLE_OSSFUZZ = %%OSSFUZZ%% -BC_ENABLE_MEMCHECK = %%MEMCHECK%% +BC_ENABLE_AFL = 0 +BC_ENABLE_OSSFUZZ = 0 +BC_ENABLE_MEMCHECK = 0 -LIB_FUZZING_ENGINE = %%LIB_FUZZING_ENGINE%% +LIB_FUZZING_ENGINE = 0 BC_DEFAULT_BANNER = %%BC_DEFAULT_BANNER%% BC_DEFAULT_SIGINT_RESET = %%BC_DEFAULT_SIGINT_RESET%% @@ -189,10 +190,6 @@ KARATSUBA = $(SCRIPTSDIR)/karatsuba.py LOCALE_INSTALL = $(SCRIPTSDIR)/locale_install.sh LOCALE_UNINSTALL = $(SCRIPTSDIR)/locale_uninstall.sh -VALGRIND_ARGS = --error-exitcode=100 --leak-check=full --show-leak-kinds=all --errors-for-leak-kinds=all - -TEST_STARS = *********************************************************************** - BC_NUM_KARATSUBA_LEN = %%KARATSUBA_LEN%% BC_DEFS0 = -DBC_DEFAULT_BANNER=$(BC_DEFAULT_BANNER) @@ -218,7 +215,7 @@ CPPFLAGS6 = $(CPPFLAGS5) -DBC_ENABLE_NLS=$(BC_ENABLE_NLS) CPPFLAGS7 = $(CPPFLAGS6) -D$(BC_ENABLE_EXTRA_MATH_NAME)=$(BC_ENABLE_EXTRA_MATH) CPPFLAGS8 = $(CPPFLAGS7) -DBC_ENABLE_HISTORY=$(BC_ENABLE_HISTORY) -DBC_ENABLE_LIBRARY=$(BC_ENABLE_LIBRARY) CPPFLAGS9 = $(CPPFLAGS8) -DBC_ENABLE_MEMCHECK=$(BC_ENABLE_MEMCHECK) -DBC_ENABLE_AFL=$(BC_ENABLE_AFL) -CPPFLAGS = $(CPPFLAGS9) -DBC_ENABLE_OSSFUZZ=$(BC_ENABLE_OSSFUZZ) +CPPFLAGS = -DVERSION=$(VERSION) $(CPPFLAGS9) -DBC_ENABLE_OSSFUZZ=$(BC_ENABLE_OSSFUZZ) CFLAGS = $(CPPFLAGS) $(BC_DEFS) $(DC_DEFS) %%CPPFLAGS%% %%CFLAGS%% LDFLAGS = %%LDFLAGS%% @@ -293,236 +290,10 @@ help: @printf ' check alias for `make test`\n' @printf ' clean removes all build files\n' @printf ' clean_config removes all build files as well as the generated Makefile\n' - @printf ' clean_tests removes all build files, the generated Makefile,\n' - @printf ' and generated tests\n' @printf ' install installs binaries to "%s%s"\n' "$(DESTDIR)" "$(BINDIR)" @printf ' and (if enabled) manpages to "%s%s"\n' "$(DESTDIR)" "$(MAN1DIR)" - @printf ' karatsuba runs the karatsuba script (requires Python 3)\n' - @printf ' karatsuba_test runs the karatsuba script while running tests\n' - @printf ' (requires Python 3)\n' @printf ' uninstall uninstalls binaries from "%s%s"\n' "$(DESTDIR)" "$(BINDIR)" @printf ' and (if enabled) manpages from "%s%s"\n' "$(DESTDIR)" "$(MAN1DIR)" - @printf ' test runs the test suite\n' - @printf ' test_bc runs the bc test suite, if bc has been built\n' - @printf ' test_dc runs the dc test suite, if dc has been built\n' - @printf ' time_test runs the test suite, displaying times for some things\n' - @printf ' time_test_bc runs the bc test suite, displaying times for some things\n' - @printf ' time_test_dc runs the dc test suite, displaying times for some things\n' - @printf ' timeconst runs the test on the Linux timeconst.bc script,\n' - @printf ' if it exists and bc has been built\n' - -run_all_tests: bc_all_tests timeconst_all_tests dc_all_tests - -run_all_tests_np: bc_all_tests_np timeconst_all_tests dc_all_tests_np - -bc_all_tests: - %%BC_ALL_TESTS%% - -bc_all_tests_np: - %%BC_ALL_TESTS_NP%% - -timeconst_all_tests: - %%TIMECONST_ALL_TESTS%% - -dc_all_tests: - %%DC_ALL_TESTS%% - -dc_all_tests_np: - %%DC_ALL_TESTS_NP%% - -history_all_tests: - %%HISTORY_TESTS%% - -check: test - -test: %%TESTS%% - -test_bc: test_bc_header test_bc_tests test_bc_scripts test_bc_errors test_bc_stdin test_bc_read test_bc_other - @printf '\nAll bc tests passed.\n\n$(TEST_STARS)\n' - -test_bc_tests:%%BC_TESTS%% - -test_bc_scripts:%%BC_SCRIPT_TESTS%% - -test_bc_stdin: - @export BC_TEST_OUTPUT_DIR="$(BUILDDIR)/tests"; sh $(TESTSDIR)/stdin.sh bc %%BC_TEST_EXEC%% - -test_bc_read: - @export BC_TEST_OUTPUT_DIR="$(BUILDDIR)/tests"; sh $(TESTSDIR)/read.sh bc %%BC_TEST_EXEC%% - -test_bc_errors: test_bc_error_lines%%BC_ERROR_TESTS%% - -test_bc_error_lines: - @export BC_TEST_OUTPUT_DIR="$(BUILDDIR)/tests"; sh $(TESTSDIR)/errors.sh bc %%BC_TEST_EXEC%% - -test_bc_other: - @export BC_TEST_OUTPUT_DIR="$(BUILDDIR)/tests"; sh $(TESTSDIR)/other.sh bc $(BC_ENABLE_EXTRA_MATH) %%BC_TEST_EXEC%% - -test_bc_header: - @printf '$(TEST_STARS)\n\nRunning bc tests...\n\n' - -test_dc: test_dc_header test_dc_tests test_dc_scripts test_dc_errors test_dc_stdin test_dc_read test_dc_other - @printf '\nAll dc tests passed.\n\n$(TEST_STARS)\n' - -test_dc_tests:%%DC_TESTS%% - -test_dc_scripts:%%DC_SCRIPT_TESTS%% - -test_dc_stdin: - @export BC_TEST_OUTPUT_DIR="$(BUILDDIR)/tests"; sh $(TESTSDIR)/stdin.sh dc %%DC_TEST_EXEC%% - -test_dc_read: - @export BC_TEST_OUTPUT_DIR="$(BUILDDIR)/tests"; sh $(TESTSDIR)/read.sh dc %%DC_TEST_EXEC%% - -test_dc_errors: test_dc_error_lines%%DC_ERROR_TESTS%% - -test_dc_error_lines: - @export BC_TEST_OUTPUT_DIR="$(BUILDDIR)/tests"; sh $(TESTSDIR)/errors.sh dc %%DC_TEST_EXEC%% - -test_dc_other: - @export BC_TEST_OUTPUT_DIR="$(BUILDDIR)/tests"; sh $(TESTSDIR)/other.sh dc $(BC_ENABLE_EXTRA_MATH) %%DC_TEST_EXEC%% - -test_dc_header: - @printf '$(TEST_STARS)\n\nRunning dc tests...\n\n' - -timeconst: - %%TIMECONST%% - -test_history: test_history_header test_bc_history test_dc_history - @printf '\nAll history tests passed.\n\n$(TEST_STARS)\n' - -test_bc_history:%%BC_HISTORY_TEST_PREREQS%% - -test_bc_history_all: test_bc_history0 test_bc_history1 test_bc_history2 test_bc_history3 test_bc_history4 test_bc_history5 test_bc_history6 test_bc_history7 test_bc_history8 test_bc_history9 test_bc_history10 test_bc_history11 test_bc_history12 test_bc_history13 test_bc_history14 test_bc_history15 test_bc_history16 test_bc_history17 test_bc_history18 test_bc_history19 test_bc_history20 test_bc_history21 - -test_bc_history_skip: - @printf 'No bc history tests to run\n' - -test_bc_history0: - @sh $(TESTSDIR)/history.sh bc 0 %%BC_TEST_EXEC%% - -test_bc_history1: - @sh $(TESTSDIR)/history.sh bc 1 %%BC_TEST_EXEC%% - -test_bc_history2: - @sh $(TESTSDIR)/history.sh bc 2 %%BC_TEST_EXEC%% - -test_bc_history3: - @sh $(TESTSDIR)/history.sh bc 3 %%BC_TEST_EXEC%% - -test_bc_history4: - @sh $(TESTSDIR)/history.sh bc 4 %%BC_TEST_EXEC%% - -test_bc_history5: - @sh $(TESTSDIR)/history.sh bc 5 %%BC_TEST_EXEC%% - -test_bc_history6: - @sh $(TESTSDIR)/history.sh bc 6 %%BC_TEST_EXEC%% - -test_bc_history7: - @sh $(TESTSDIR)/history.sh bc 7 %%BC_TEST_EXEC%% - -test_bc_history8: - @sh $(TESTSDIR)/history.sh bc 8 %%BC_TEST_EXEC%% - -test_bc_history9: - @sh $(TESTSDIR)/history.sh bc 9 %%BC_TEST_EXEC%% - -test_bc_history10: - @sh $(TESTSDIR)/history.sh bc 10 %%BC_TEST_EXEC%% - -test_bc_history11: - @sh $(TESTSDIR)/history.sh bc 11 %%BC_TEST_EXEC%% - -test_bc_history12: - @sh $(TESTSDIR)/history.sh bc 12 %%BC_TEST_EXEC%% - -test_bc_history13: - @sh $(TESTSDIR)/history.sh bc 13 %%BC_TEST_EXEC%% - -test_bc_history14: - @sh $(TESTSDIR)/history.sh bc 14 %%BC_TEST_EXEC%% - -test_bc_history15: - @sh $(TESTSDIR)/history.sh bc 15 %%BC_TEST_EXEC%% - -test_bc_history16: - @sh $(TESTSDIR)/history.sh bc 16 %%BC_TEST_EXEC%% - -test_bc_history17: - @sh $(TESTSDIR)/history.sh bc 17 %%BC_TEST_EXEC%% - -test_bc_history18: - @sh $(TESTSDIR)/history.sh bc 18 %%BC_TEST_EXEC%% - -test_bc_history19: - @sh $(TESTSDIR)/history.sh bc 19 %%BC_TEST_EXEC%% - -test_bc_history20: - @sh $(TESTSDIR)/history.sh bc 20 %%BC_TEST_EXEC%% - -test_bc_history21: - @sh $(TESTSDIR)/history.sh bc 21 %%BC_TEST_EXEC%% - -test_dc_history:%%DC_HISTORY_TEST_PREREQS%% - -test_dc_history_all: test_dc_history0 test_dc_history1 test_dc_history2 test_dc_history3 test_dc_history4 test_dc_history5 test_dc_history6 test_dc_history7 test_dc_history8 test_dc_history9 test_dc_history10 - -test_dc_history_skip: - @printf 'No dc history tests to run\n' - -test_dc_history0: - @sh $(TESTSDIR)/history.sh dc 0 %%DC_TEST_EXEC%% - -test_dc_history1: - @sh $(TESTSDIR)/history.sh dc 1 %%DC_TEST_EXEC%% - -test_dc_history2: - @sh $(TESTSDIR)/history.sh dc 2 %%DC_TEST_EXEC%% - -test_dc_history3: - @sh $(TESTSDIR)/history.sh dc 3 %%DC_TEST_EXEC%% - -test_dc_history4: - @sh $(TESTSDIR)/history.sh dc 4 %%DC_TEST_EXEC%% - -test_dc_history5: - @sh $(TESTSDIR)/history.sh dc 5 %%DC_TEST_EXEC%% - -test_dc_history6: - @sh $(TESTSDIR)/history.sh dc 6 %%DC_TEST_EXEC%% - -test_dc_history7: - @sh $(TESTSDIR)/history.sh dc 7 %%DC_TEST_EXEC%% - -test_dc_history8: - @sh $(TESTSDIR)/history.sh dc 8 %%DC_TEST_EXEC%% - -test_dc_history9: - @sh $(TESTSDIR)/history.sh dc 9 %%DC_TEST_EXEC%% - -test_dc_history10: - @sh $(TESTSDIR)/history.sh dc 10 %%DC_TEST_EXEC%% - -test_history_header: - @printf '$(TEST_STARS)\n\nRunning history tests...\n\n' - -library_test: $(LIBBC) - $(CC) $(CFLAGS) -lpthread $(BCL_TEST_C) $(LIBBC) -o $(BCL_TEST) - -test_library: library_test - %%BCL_TEST_EXEC%% - -karatsuba: - %%KARATSUBA%% - -karatsuba_test: - %%KARATSUBA_TEST%% - -coverage_output: - %%COVERAGE_OUTPUT%% - -coverage:%%COVERAGE_PREREQS%% manpages: $(MANPAGE) bc @@ -559,37 +330,25 @@ clean_config: clean clean_benchmarks @$(RM) -f compile_commands.json @$(RM) -f $(BCL_PC) -clean_coverage: - @printf 'Cleaning coverage files...\n' - @$(RM) -f *.gcov - @$(RM) -f *.html *.css - @$(RM) -f *.gcda *.gcno - @$(RM) -f *.profraw - @$(RM) -f $(GCDA) $(GCNO) - @$(RM) -f $(BC_GCDA) $(BC_GCNO) - @$(RM) -f $(DC_GCDA) $(DC_GCNO) - @$(RM) -f $(HISTORY_GCDA) $(HISTORY_GCNO) - @$(RM) -f $(RAND_GCDA) $(RAND_GCNO) - @$(RM) -f $(BC_LIB_GCDA) $(BC_LIB_GCNO) - @$(RM) -f $(BC_LIB2_GCDA) $(BC_LIB2_GCNO) - @$(RM) -f $(BC_HELP_GCDA) $(BC_HELP_GCNO) - @$(RM) -f $(DC_HELP_GCDA) $(DC_HELP_GCNO) - -clean_tests: clean clean_config clean_coverage +test: + @if [ $(BC_ENABLED) -ne 0 ]; then $(TESTSDIR)/all.sh -n bc $(BC_ENABLE_EXTRA_MATH) 1 $(GENERATE_TESTS) $(PROBLEMATIC_TESTS) $(BC_EXEC); fi + @if [ $(DC_ENABLED) -ne 0 ]; then $(TESTSDIR)/all.sh -n dc $(BC_ENABLE_EXTRA_MATH) 1 $(GENERATE_TESTS) $(PROBLEMATIC_TESTS) $(DC_EXEC); fi + +clean_tests: clean clean_config @printf 'Cleaning test files...\n' @$(RM) -fr $(BC_TEST_OUTPUTS) $(DC_TEST_OUTPUTS) @$(RM) -fr $(BC_FUZZ_OUTPUTS) $(DC_FUZZ_OUTPUTS) - @$(RM) -f $(TESTSDIR)/bc/parse.txt $(TESTSDIR)/bc/parse_results.txt - @$(RM) -f $(TESTSDIR)/bc/print.txt $(TESTSDIR)/bc/print_results.txt + @$(RM) -f $(TESTSDIR)/bc/parse_*.txt $(TESTSDIR)/bc/parse_*_results.txt + @$(RM) -f $(TESTSDIR)/bc/print_*.txt $(TESTSDIR)/bc/print_*_results.txt @$(RM) -f $(TESTSDIR)/bc/bessel.txt $(TESTSDIR)/bc/bessel_results.txt @$(RM) -f $(TESTSDIR)/bc/strings2.txt $(TESTSDIR)/bc/strings2_results.txt @$(RM) -f $(TESTSDIR)/bc/scripts/bessel.txt @$(RM) -f $(TESTSDIR)/bc/scripts/parse.txt @$(RM) -f $(TESTSDIR)/bc/scripts/print.txt - @$(RM) -f $(TESTSDIR)/bc/scripts/add.txt - @$(RM) -f $(TESTSDIR)/bc/scripts/divide.txt - @$(RM) -f $(TESTSDIR)/bc/scripts/multiply.txt - @$(RM) -f $(TESTSDIR)/bc/scripts/subtract.txt + @$(RM) -f $(TESTSDIR)/bc/scripts/add_*.txt + @$(RM) -f $(TESTSDIR)/bc/scripts/divide_*.txt + @$(RM) -f $(TESTSDIR)/bc/scripts/multiply_*.txt + @$(RM) -f $(TESTSDIR)/bc/scripts/subtract_*.txt @$(RM) -f $(TESTSDIR)/bc/scripts/strings2.txt @$(RM) -f $(TESTSDIR)/dc/scripts/prime.txt @$(RM) -f .log_*.txt diff --git a/contrib/bc/NEWS.md b/contrib/bc/NEWS.md index e3b1f9ecb7bc..72a276b8c015 100644 --- a/contrib/bc/NEWS.md +++ b/contrib/bc/NEWS.md @@ -1,5 +1,27 @@ # News +## 7.1.0 + +This is an ***UNTESTED*** release. If you would like testing, see the +[maintenance terms][23]. + +This fixes a few bugs: + +* Improper response to double `SIGINT` with editline. +* Not letting `libedit` handle terminal size changes. +* A `dc` crash from improperly handling an error. +* A duplicate check for reference arrays. +* Build failures with GCC 15. + +It also has a performance increase in the `band()` function and others in the +math library. + +## 7.0.3 + +This is a production release that fixes build warnings on the musl libc. + +Other users do ***NOT*** need to upgrade. + ## 7.0.2 This is a production release that fixes `Ctrl+d` on FreeBSD and Linux when using @@ -1588,3 +1610,4 @@ not thoroughly tested. [20]: https://github.com/apjanke/ronn-ng [21]: https://pandoc.org/ [22]: ./scripts/locale_uninstall.sh +[23]: ./MAINTENANCE-TERMS.md diff --git a/contrib/bc/NOTICE.md b/contrib/bc/NOTICE.md index 35536b2c27d7..c3c211a92309 100644 --- a/contrib/bc/NOTICE.md +++ b/contrib/bc/NOTICE.md @@ -1,6 +1,6 @@ # Notice -Copyright 2018-2024 Gavin D. Howard and contributors. +Copyright 2018-2025 Gavin D. Howard and contributors. ## Contributors diff --git a/contrib/bc/README.md b/contrib/bc/README.md index 696e6186b8bd..a203386f3b65 100644 --- a/contrib/bc/README.md +++ b/contrib/bc/README.md @@ -1,9 +1,7 @@ # `bc` -***WARNING: New user registration for <https://git.gavinhoward.com/> is disabled -because of spam. If you need to report a bug with `bc`, email gavin at this site -minus the `git.` part for an account, and I will create one for you. Or you can -report an issue at [GitHub][29].*** +***WARNING: This project has moved back to GitHub temporarily; self-hosted Git +forges are not working for me, so I am trying to replace them.*** ***WARNING: This project has moved to [https://git.gavinhoward.com/][20] for [these reasons][21], though GitHub will remain a mirror.*** @@ -282,6 +280,12 @@ The easiest way to run this script is with `make karatsuba`. If desired, maintainers can also skip running this script because there is a sane default for the Karatsuba number. +##### `timeconst.bc` + +The test suite will print a warning in normal usage. The warning is about a +missing `timeconst.bc`. This file [comes from][37] the [Linux kernel][38], which +has an incompatible license. The warning can be ignored. + ## Status This `bc` is robust. @@ -432,6 +436,8 @@ Other projects based on this bc are: * [macOS `bc`][35]. Any bugs in that `bc` should be reported to me, but do expect bugs because the version is old. * [Android Open Source `bc`][32]. Any bugs in that `bc` can be reported here. +* [A Fedora package][36]. If this package does not have any patches, you can + report bugs to me. This is a non-comprehensive list of Linux distros that use this `bc` as the system `bc`: @@ -469,12 +475,16 @@ Files: .gitignore The git ignore file (maintainer use only). .gitattributes The git attributes file (maintainer use only). bcl.pc.in A template pkg-config file for bcl. + build.gaml The GAML file with options for building under Rig. + build.pkg.rig The Rig build package file. + build.rig The Rig build script. configure A symlink to configure.sh to make packaging easier. configure.sh The configure script. LICENSE.md A Markdown form of the BSD 2-clause License. Makefile.in The Makefile template. NEWS.md The changelog. NOTICE.md List of contributors and copyright owners. + VERSION.txt A file containing the version. Folders: @@ -516,3 +526,6 @@ Folders: [33]: https://github.com/gentoo/gentoo/blob/master/app-alternatives/bc/bc-0.ebuild#L8 [34]: https://www.linuxfromscratch.org/lfs/view/stable/chapter08/bc.html [35]: https://github.com/apple-oss-distributions/bc/tree/main/bc +[36]: https://copr.fedorainfracloud.org/coprs/tkbcopr/bc-gh/ +[37]: https://github.com/torvalds/linux/blob/master/kernel/time/timeconst.bc +[38]: https://github.com/torvalds/linux diff --git a/contrib/bc/VERSION.txt b/contrib/bc/VERSION.txt new file mode 100644 index 000000000000..a3fcc7121bba --- /dev/null +++ b/contrib/bc/VERSION.txt @@ -0,0 +1 @@ +7.1.0 diff --git a/contrib/bc/build.gaml b/contrib/bc/build.gaml new file mode 100644 index 000000000000..b8ce873835b5 --- /dev/null +++ b/contrib/bc/build.gaml @@ -0,0 +1,402 @@ +/* + * ***************************************************************************** + * + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * ***************************************************************************** + * + * The build options file. + * + */ + +project: @com.gavinhoward.bc + +language: @C11 + +version: { + min: @24.04.05 +} + +mode: { + language: @iterative + stampers: @metadata + dependencies: @dynamic +} + +default_target: @all + +presets: { + debug: { + debug: true + optimization: "0" + memcheck: true + devtools: true + strip: false + } + release: { + optimization: "3" + lto: true + } + // This is the predefined build for BSDs. + bsd: { + optimization: "3" + history: @editline + generated_tests: false + install_manpages: false + install_locales: @system + strip: true + bc_default_banner: false + bc_default_sigint_reset: true + dc_default_sigint_reset: true + bc_default_tty_mode: true + dc_default_tty_mode: false + bc_default_prompt: @off + dc_default_prompt: @off + bc_default_expr_exit: true + dc_default_expr_exit: true + bc_default_digit_clamp: false + dc_default_digit_clamp: false + } + // This is the predefined build to match the GNU bc/dc. + gnu: { + optimization: "3" + generated_tests: false + install_manpages: true + install_locales: @system + strip: true + bc_default_banner: true + bc_default_sigint_reset: true + dc_default_sigint_reset: false + bc_default_tty_mode: true + dc_default_tty_mode: false + bc_default_prompt: @tty_mode + dc_default_prompt: @tty_mode + bc_default_expr_exit: true + dc_default_expr_exit: true + bc_default_digit_clamp: false + dc_default_digit_clamp: false + } + // This is the preferred release build of the author, Gavin D. Howard. + gdh: { + optimization: "3" + install_manpages: true + install_locales: @none + bc/default_banner: true + bc/default_sigint_reset: true + dc/default_sigint_reset: true + bc/default_tty_mode: true + dc/default_tty_mode: true + bc/default_prompt: @tty_mode + dc/default_prompt: @tty_mode + bc/default_expr_exit: false + dc/default_expr_exit: false + bc/default_digit_clamp: true + dc/default_digit_clamp: true + } + // This is the preferred debug build of the author, Gavin D. Howard. + dbg: { + optimization: "0" + debug: true + strip: false + install_manpages: true + install_locales: @system + bc/default_banner: true + bc/default_sigint_reset: true + dc/default_sigint_reset: true + bc/default_tty_mode: true + dc/default_tty_mode: true + bc/default_prompt: @tty_mode + dc/default_prompt: @tty_mode + bc/default_expr_exit: false + dc/default_expr_exit: false + bc/default_digit_clamp: true + dc/default_digit_clamp: true + } +} + +default_development: @debug +default_release: @release + +options: { + build_mode: { + type: @option + options: [ + @both + @bc + @dc + @library + ] + default: @both + desc: "Which of the executables or library to build." + } + extra_math: { + type: @bool + default: true + desc: "Enable the extra math extensions." + } + history: { + type: @option + options: [ + @none + @builtin + @editline + @readline + ] + default: @builtin + desc: "Which history implementation should be used, if any." + } + locales: { + type: @option + options: [ + @none + @system + @all + ] + default: @system + desc: "Whether to disable locales, use just the system ones, or use all (for building a package)." + } + bc/default_banner: { + type: @bool + default: false + desc: "Whether to display the bc version banner by default when in interactive mode." + } + bc/default_sigint_reset: { + type: @bool + default: true + desc: "Whether SIGINT will reset bc by default, instead of exiting, when in interactive mode." + } + dc/default_sigint_reset: { + type: @bool + default: true + desc: "Whether SIGINT will reset dc by default, instead of exiting, when in interactive mode." + } + bc/default_tty_mode: { + type: @bool + default: true + desc: "Whether TTY mode for bc should be on by default when available." + } + dc/default_tty_mode: { + type: @bool + default: false + desc: "Whether TTY mode for dc should be on by default when available." + } + bc/default_prompt: { + type: @option + options: [ + @off + @tty_mode + @on + ] + default: @tty_mode + desc: "Whether the prompt for bc should be on by default in TTY mode. This defaults to match TTY mode." + } + dc/default_prompt: { + type: @option + options: [ + @off + @tty_mode + @on + ] + default: @tty_mode + desc: "Whether the prompt for dc should be on by default in TTY mode. This defaults to match TTY mode." + } + bc/default_expr_exit: { + type: @bool + default: true + desc: "Whether to exit bc by default if an expression or expression file is given with the -e or -f options." + } + dc/default_expr_exit: { + type: @bool + default: true + desc: "Whether to exit dc by default if an expression or expression file is given with the -e or -f options." + } + bc/default_digit_clamp: { + type: @bool + default: false + desc: "Whether to have bc, by default, clamp digits that are greater than or equal to the current ibase when parsing numbers." + } + dc/default_digit_clamp: { + type: @bool + default: false + desc: "Whether to have dc, by default, clamp digits that are greater than or equal to the current ibase when parsing numbers." + } + karatsuba_len: { + type: @num + default: 32 + desc: "Set the Karatsuba length (default is 32). Must be a number and greater than or equal to 16." + } + execprefix: { + type: @string + default: "" + desc: "The prefix to prepend to the executable names, to prevent collisions." + } + execsuffix: { + type: @string + default: "" + desc: "The suffix to append to the executable names, to prevent collisions." + } + debug: { + type: @bool + default: false + desc: "Enable debug info." + } + optimization: { + type: @string + default: "0" + desc: "The optimization level for the C compiler." + } + lto: { + type: @bool + default: false + desc: "Build with link-time optimization, if available." + } + strip: { + type: @bool + default: true + desc: "Strip any binaries." + } + strict: { + type: @bool + default: true + desc: "Build with strict compiler options." + } + force: { + type: @bool + default: false + desc: "Force options that don't work. THIS IS FOR DEV ONLY!" + } + memcheck: { + type: @bool + default: false + desc: "Enable memcheck mode, to check for memory leaks." + } + valgrind: { + type: @bool + default: false + desc: "Enable Valgrind mode, to check for memory bugs." + } + afl: { + type: @bool + default: false + desc: "Enable AFL++ mode." + } + ossfuzz: { + type: @bool + default: false + desc: "Enable OSSFUZZ mode." + } + generated_tests: { + type: @bool + default: true + desc: "Enable tests generated from a GNU bc-compatible program." + } + problematic_tests: { + type: @bool + default: true + desc: "Enable tests that may be problematic." + } + coverage: { + type: @bool + default: false + desc: "Enable code coverage (only works on GCC)." + } + install_manpages: { + type: @bool + default: true + desc: "Whether to install manpages or not." + } + cflags: { + type: @list + default: [] + desc: "The command-line flags for the C compiler." + } + ldflags: { + type: @list + default: [] + desc: "The command-line flags for the C linker." + } + destdir: { + type: @path + default: "" + desc: "The equivalent of $DESTDIR in other build systems." + } + prefix: { + type: @path + default: "/usr/local" + desc: "The default prefix to install everything into." + } + bindir: { + type: @path + default: "" + desc: "The directory to install executables into. Defaults to \"$prefix/bin\"." + } + libdir: { + type: @path + default: "" + desc: "The directory to install libraries into. Defaults to \"$prefix/lib\"." + } + includedir: { + type: @path + default: "" + desc: "The location to install headers in. Defaults to \"$prefix/include\"." + } + nlspath: { + type: @path + default: "/usr/share/locale/%L/%N" + desc: "The location to install locales." + } + pc_path: { + type: @path + default: "" + desc: "The location to pkg-config files to. Defaults to the output of `pkg-config --variable=pc_path pkg-config`." + } + datarootdir: { + type: @path + default: "" + desc: "The root directory for data files. Defaults to `$prefix/share`." + } + datadir: { + type: @path + default: "" + desc: "The directory for data files. Defaults to `$datarootdir`." + } + mandir: { + type: @path + default: "" + desc: "The root directory for manpages. Defaults to `$datadir/man`." + } + man1dir: { + type: @path + default: "" + desc: "The directory for manpages in section 1. Defaults to `$mandir/man1`." + } + man3dir: { + type: @path + default: "" + desc: "The directory for manpages in section 3. Defaults to `$mandir/man3`." + } +} diff --git a/contrib/bc/build.pkg.rig b/contrib/bc/build.pkg.rig new file mode 100644 index 000000000000..d607e8885737 --- /dev/null +++ b/contrib/bc/build.pkg.rig @@ -0,0 +1,2345 @@ +/* + * ***************************************************************************** + * + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * ***************************************************************************** + * + * The build package file. + * + */ + +/// The path to the safe install script. +SAFE_INSTALL: str = path.join(src_dir, "scripts/safe-install.sh"); + +/// The file mode for executables, as an argument to the safe install script. +EXEC_INSTALL_MODE: str = "-Dm755"; + +/// The file mode for man pages and other files, as an argument to the safe +/// install script. +MANPAGE_INSTALL_MODE: str = "-Dm644"; + +// Save this. +OS: str = platform.os; + +DESTDIR: str = str(config["destdir"]); + +EXECPREFIX: str = str(config["execprefix"]); +EXECSUFFIX: str = str(config["execsuffix"]); + +/** + * Generates the true executable name for the given base name. + * @param name The base name of the executable. + * @return The true name of the executable, including prefix, suffix, and + extension. + */ +fn exe_name(name: str) -> str +{ + temp: str = EXECPREFIX +~ name +~ EXECSUFFIX; + return if OS == "Windows" { temp +~ ".exe"; } else { temp; }; +} + +/** + * Generates the default executable name for the given base name. + * @param name The base name of the executable. + * @return The true name of the executable, including prefix, suffix, and + extension. + */ +fn default_exe_name(name: str) -> str +{ + return if OS == "Windows" { name +~ ".exe"; } else { name; }; +} + +/** + * Generates the true library name for the given base name. + * @param name The base name of the library. + * @return The true name of the library, including prefix and extension. + */ +fn lib_name(name: str) -> str +{ + ext: str = if OS == "Windows" { ".lib"; } else { ".a"; }; + return "lib" +~ name +~ ext; +} + +BC_BIN: str = exe_name("bc"); +DC_BIN: str = exe_name("dc"); +LIBRARY: str = lib_name("libbcl"); + +BC_MANPAGE: str = EXECPREFIX +~ "bc" +~ EXECSUFFIX +~ ".1"; +DC_MANPAGE: str = EXECPREFIX +~ "dc" +~ EXECSUFFIX +~ ".1"; +BCL_MANPAGE: str = "bcl.3"; + +BCL_HEADER: str = "bcl.h"; +BCL_HEADER_PATH: str = path.join(src_dir, path.join("include", BCL_HEADER)); +PC_FILE: str = "bcl.pc"; + +/** + * Returns the string value of the define for a prompt default define for an + * executable. + * @param name The base name of the executable. + * @return The string value of the compiler define for the prompt default. + */ +fn prompt(name: str) -> str +{ + opt: sym = sym(config[name +~ "/default_prompt"]); + + ret: str = + if opt == @off + { + "0"; + } + else if opt == @tty_mode + { + str(uint(bool(config[name +~ "/default_tty_mode"]))); + } + else + { + "1"; + }; + + return ret; +} + +HEADERS: []str = find_src_ext("include", "h"); + +FORCE: bool = bool(config["force"]); + +BUILD_MODE: sym = sym(config["build_mode"]); + +BC_ENABLED: str = str(uint(BUILD_MODE == @both || BUILD_MODE == @bc)); +DC_ENABLED: str = str(uint(BUILD_MODE == @both || BUILD_MODE == @dc)); +LIBRARY_ENABLED: str = str(uint(BUILD_MODE == @library)); + +EXTRA_MATH_ENABLED: str = str(uint(bool(config["extra_math"]))); + +HISTORY: sym = sym(config["history"]); +HISTORY_ENABLED: str = str(uint(HISTORY != @none)); +EDITLINE_ENABLED: str = str(uint(HISTORY == @editline)); +READLINE_ENABLED: str = str(uint(HISTORY == @readline)); + +NLS_ENABLED: str = +if OS == "Windows" || BUILD_MODE == @library +{ + "0"; +} +else +{ + str(uint(sym(config["locales"]) != @none)); +}; + +BUILD_TYPE: str = +if EXTRA_MATH_ENABLED != "0" && HISTORY_ENABLED != "0" && NLS_ENABLED != "0" +{ + "A"; +} +else +{ + t: str = if EXTRA_MATH_ENABLED != "0" { ""; } else { "E"; } +~ + if HISTORY_ENABLED != "0" { ""; } else { "H"; } +~ + if NLS_ENABLED != "0" { ""; } else { "N"; }; + + t; +}; + +OPTIMIZE: str = str(config["optimization"]); + +VALGRIND_ARGS: []str = @[ + "valgrind", + "--error-exitcode=100", + "--leak-check=full", + "--show-leak-kinds=all", + "--errors-for-leak-kinds=all", + "--track-fds=yes", + "--track-origins=yes", +]; + +// Get the compiler. The user might have set one at the command line. +CC: str = language.compiler; + +// Set optimization to "0" if it is empty. +CFLAGS_OPT: str = if OPTIMIZE == "" { "0"; } else { OPTIMIZE; }; + +// Get the command-line option for defining a preprocessor variable. +DEFOPT: str = compiler_db["opt.define"]; + +// Get the command-line string for the optimization option for the compiler. +OPTOPT: str = compiler_db["opt.optimization"] +~ CFLAGS_OPT; + +// Get the compiler option for the object file to output to. +OBJOUTOPT: str = compiler_db["opt.objout"]; +EXEOUTOPT: str = compiler_db["opt.exeout"]; + +// Get the compiler option for outputting an object file rather than an +// executable. +OBJOPT: str = compiler_db["opt.obj"]; + +// Get the compiler option for setting an include directory. +INCOPT: str = compiler_db["opt.include"] +~ path.join(src_dir, "include"); + +COVERAGE_CFLAGS: []str = +if bool(config["coverage"]) +{ + @[ "-fprofile-arcs", "-ftest-coverage", "-g", "-O0", DEFOPT +~ "NDEBUG" ]; +}; + +MAINEXEC: str = +if BUILD_MODE == @both || BUILD_MODE == @bc || BUILD_MODE == @library +{ + BC_BIN; +} +else +{ + DC_BIN; +}; + +MAINEXEC_FLAGS: []str = @[ DEFOPT +~ "MAINEXEC=" +~ MAINEXEC ]; + +// XXX: Library needs these defines to be true. +BC_DEF: str = if LIBRARY_ENABLED == "0" { BC_ENABLED; } else { "1"; }; +DC_DEF: str = if LIBRARY_ENABLED == "0" { DC_ENABLED; } else { "1"; }; + +CFLAGS1: []str = config_list["cflags"] +~ @[ OPTOPT, INCOPT ] +~ + COVERAGE_CFLAGS +~ MAINEXEC_FLAGS; +CFLAGS2: []str = @[ + DEFOPT +~ "BC_ENABLED=" +~ BC_DEF, + DEFOPT +~ "DC_ENABLED=" +~ DC_DEF, + DEFOPT +~ "BUILD_TYPE=" +~ BUILD_TYPE, + DEFOPT +~ "EXECPREFIX=" +~ str(config["execprefix"]), + DEFOPT +~ "BC_NUM_KARATSUBA_LEN=" +~ str(num(config["karatsuba_len"])), + DEFOPT +~ "BC_ENABLE_LIBRARY=" +~ LIBRARY_ENABLED, + DEFOPT +~ "BC_ENABLE_NLS=" +~ NLS_ENABLED, + DEFOPT +~ "BC_ENABLE_EXTRA_MATH=" +~ EXTRA_MATH_ENABLED, + DEFOPT +~ "BC_ENABLE_HISTORY=" +~ HISTORY_ENABLED, + DEFOPT +~ "BC_ENABLE_EDITLINE=" +~ EDITLINE_ENABLED, + DEFOPT +~ "BC_ENABLE_READLINE=" +~ READLINE_ENABLED, + DEFOPT +~ "BC_ENABLE_MEMCHECK=" +~ str(uint(bool(config["memcheck"]))), + DEFOPT +~ "BC_ENABLE_AFL=" +~ str(uint(bool(config["afl"]))), + DEFOPT +~ "BC_ENABLE_OSSFUZZ=" +~ str(uint(bool(config["ossfuzz"]))), + DEFOPT +~ "BC_DEFAULT_BANNER=" +~ + str(uint(bool(config["bc/default_banner"]))), + DEFOPT +~ "BC_DEFAULT_SIGINT_RESET=" +~ + str(uint(bool(config["bc/default_sigint_reset"]))), + DEFOPT +~ "BC_DEFAULT_TTY_MODE=" +~ + str(uint(bool(config["bc/default_tty_mode"]))), + DEFOPT +~ "BC_DEFAULT_PROMPT=" +~ prompt("bc"), + DEFOPT +~ "BC_DEFAULT_EXPR_EXIT=" +~ + str(uint(bool(config["bc/default_expr_exit"]))), + DEFOPT +~ "BC_DEFAULT_DIGIT_CLAMP=" +~ + str(uint(bool(config["bc/default_digit_clamp"]))), + DEFOPT +~ "DC_DEFAULT_SIGINT_RESET=" +~ + str(uint(bool(config["dc/default_sigint_reset"]))), + DEFOPT +~ "DC_DEFAULT_TTY_MODE=" +~ + str(uint(bool(config["dc/default_tty_mode"]))), + DEFOPT +~ "DC_DEFAULT_PROMPT=" +~ prompt("dc"), + DEFOPT +~ "DC_DEFAULT_EXPR_EXIT=" +~ + str(uint(bool(config["dc/default_expr_exit"]))), + DEFOPT +~ "DC_DEFAULT_DIGIT_CLAMP=" +~ + str(uint(bool(config["dc/default_digit_clamp"]))), +]; +CFLAGS: []str = CFLAGS1 +~ CFLAGS2; + +LDFLAGS: []str = config_list["ldflags"]; + +COMMON_C_FILES: []str = @[ + "src/data.c", + "src/num.c", + "src/rand.c", + "src/vector.c", + "src/vm.c", +]; + +EXEC_C_FILES: []str = @[ + "src/args.c", + "src/file.c", + "src/lang.c", + "src/lex.c", + "src/main.c", + "src/opt.c", + "src/parse.c", + "src/program.c", + "src/read.c", +]; + +BC_C_FILES: []str = @[ + "src/bc.c", + "src/bc_lex.c", + "src/bc_parse.c", +]; + +DC_C_FILES: []str = @[ + "src/dc.c", + "src/dc_lex.c", + "src/dc_parse.c", +]; + +HISTORY_C_FILES: []str = @[ + "src/history.c", +]; + +LIBRARY_C_FILES: []str = @[ + "src/library.c", +]; + +GEN_HEADER1: str = + "// Copyright (c) 2018-2025 Gavin D. Howard and contributors.\n" +~ + "// Licensed under the 2-clause BSD license.\n" +~ + "// *** AUTOMATICALLY GENERATED FROM "; +GEN_HEADER2: str = ". DO NOT MODIFY. ***\n\n"; + +GEN_LABEL1: str = "const char *"; +GEN_LABEL2: str = " = \""; +GEN_LABEL3: str = "\";\n\n"; +GEN_NAME1: str = "const char "; +GEN_NAME2: str = "[] = {\n"; + +GEN_LABEL_EXTERN1: str = "extern const char *"; +GEN_LABEL_EXTERN2: str = ";\n\n"; +GEN_NAME_EXTERN1: str = "extern const char "; +GEN_NAME_EXTERN2: str = "[];\n\n"; + +GEN_IFDEF1: str = "#if "; +GEN_IFDEF2: str = "\n"; +GEN_ENDIF1: str = "#endif // "; +GEN_ENDIF2: str = "\n"; + +GEN_EX_START: str = "{{ A H N HN }}"; +GEN_EX_END: str = "{{ end }}"; + +/// This is the max width to print characters to strgen files. This is to ensure +/// that lines don't go much over 80 characters. +MAX_WIDTH: usize = usize(72); + +/** + * A function to generate a C file that contains a C character array with the + * contents of a text file. For more detail, see the `gen/strgen.c` program; + * this function is exactly equivalent to that or should be. + * @param input The input file name. + * @param output The output file name. + * @param exclude True if extra math stuff should be excluded, false if + * they should be included. + * @param name The name of the array. + * @param label If not equal to "", this is the label for the array, + * which is essentially the "file name" in `bc` and `dc`. + * @param define If not equal to "", this is the preprocessor define + * expression that should be used to guard the array with a + * `#if`/`#endif` combo. + * @param remove_tabs True if tabs should be ignored, false if they should be + * included. + */ +fn strgen( + input: str, + output: str, + exclude: bool, + name: str, + label: str, + def: str, + remove_tabs: bool, +) -> void +{ + in: str = io.read_file(input); + + io.open(output, "w"): f + { + f.print(GEN_HEADER1 +~ input +~ GEN_HEADER2); + + if label != "" + { + f.print(GEN_LABEL_EXTERN1 +~ label +~ GEN_LABEL_EXTERN2); + } + + f.print(GEN_NAME_EXTERN1 +~ name +~ GEN_NAME_EXTERN2); + + if def != "" + { + f.print(GEN_IFDEF1 +~ def +~ GEN_IFDEF2); + } + + if label != "" + { + f.print(GEN_LABEL1 +~ label +~ GEN_LABEL2 +~ name +~ GEN_LABEL3); + } + + f.print(GEN_NAME1 +~ name +~ GEN_NAME2); + + i: !usize = usize(0); + count: !usize = usize(0); + slashes: !usize = usize(0); + + // This is where the end of the license comment is found. + while slashes < 2 && in[i] > 0 + { + if slashes == 1 && in[i] == '*' && in[i + 1] == '/' && + (in[i + 2] == '\n' || in[i + 2] == '\r') + { + slashes! = slashes + usize(1); + i! = i + usize(2); + } + else if slashes == 0 && in[i] == '/' && in[i + 1] == '*' + { + slashes! = slashes + usize(1); + i! = i + usize(1); + } + + i! = i + usize(1); + } + + // The file is invalid if the end of the license comment could not be + // found. + if i == in.len + { + error("Could not find end of license comment"); + } + + i! = i + usize(1); + + // Do not put extra newlines at the beginning of the char array. + while in[i] == '\n' || in[i] == '\r' + { + i! = i + usize(1); + } + + // This loop is what generates the actual char array. It counts how many + // chars it has printed per line in order to insert newlines at + // appropriate places. It also skips tabs if they should be removed. + while i < in.len + { + if in[i] == '\r' + { + i! = i + usize(1); + continue; + } + + // If we should output the character, i.e., it is not a tab or we + // can remove tabs... + if !remove_tabs || in[i] != '\t' + { + // Check for excluding something for extra math. + if in[i] == '{' + { + if i + GEN_EX_START.len <= in.len && + in.slice(i, i + GEN_EX_START.len) == GEN_EX_START + { + if exclude + { + // Get past the braces. + i! = i + usize(2); + + // Find the end of the end. + while in[i] != '{' && + in.slice(i, i + GEN_EX_END.len) != GEN_EX_END + { + i! = i + usize(1); + } + + i! = i + GEN_EX_END.len; + + // Skip the last newline. + if in[i] == '\r' + { + i! = i + usize(1); + } + + i! = i + usize(1); + + continue; + } + } + else if !exclude && + in.slice(i, i + GEN_EX_END.len) == GEN_EX_END + { + i! = i + GEN_EX_END.len; + + // Skip the last newline. + if in[i] == '\r' + { + i! = i + usize(1); + } + + i! = i + usize(1); + + continue; + } + } + + // Print a tab if we are at the beginning of a line. + if count == 0 + { + f.print("\t"); + } + + val: str = str(in[i]) +~ ","; + + // Print the character. + f.print(val); + + // Adjust the count. + count! = count + val.len; + + if count > MAX_WIDTH + { + count! = usize(0); + f.print("\n"); + } + } + + i! = i + usize(1); + } + + // Make sure the end looks nice. + if count == 0 + { + f.print(" "); + } + + // Insert the NUL byte at the end. + f.print("0\n};\n"); + + if def != "" + { + f.print(GEN_ENDIF1 +~ def +~ GEN_ENDIF2); + } + } +} + +/** + * Creates a target to generate an object file from the given C file and returns + * the target name of the new target. + * @param c_file The name of the C file target. + * @return The name of the object file target. + */ +fn c2o(c_file: str) -> str +{ + o_file: str = c_file +~ (if OS == "Windows" { ".obj"; } else { ".o"; }); + + target o_file: c_file, HEADERS + { + $ $CC %(config_list["other_cflags"]) %(CFLAGS) $OBJOPT $OBJOUTOPT @(tgt) + @(file_dep); + } + + return o_file; +} + +/** + * Generates a target to turn a text file into a C file with the text file's + * contents as a char array, then generates a target to generate an object file + * from that C file, then returns the name of the object file target. + * @param txt_file The name of the text file. + * @param name The name of the char array in the C file. + * @param label The label for the array, if any. (See the @a strgen() + * function for more information.) + * @param def The preprocessor define(s) to guard the array, if any. + * (See the @a strgen() function for more information.) + * @param remove_tabs True if tabs should be ignored, false otherwise. (See the + * @a strgen() function for more information.) + * @return The name of the object file target. + */ +fn txt2o( + txt_file: str, + name: str, + label: str, + def: str, + remove_tabs: bool, +) -> str +{ + c_file: str = txt_file +~ ".c"; + + c_config: Gaml = @(gaml){ + strgen_name: $name + strgen_label: $label + strgen_define: $def + strgen_remove_tabs: $remove_tabs + }; + + push c_config: config_stack + { + target c_file: txt_file + { + strgen(file_dep, tgt, EXTRA_MATH_ENABLED == "0", + str(config["strgen_name"]), str(config["strgen_label"]), + str(config["strgen_define"]), + bool(config["strgen_remove_tabs"])); + } + } + + return c2o(c_file); +} + +/** + * Generates a target for an executable and returns its name. + * @param name The name of the executable. + * @param o_files The object files for the executable. + * @return The name of the generated target. + */ +fn exe(name: str, o_files: []str) -> void +{ + target name: o_files + { + $ $CC %(config_list["other_cflags"]) %(config_list["strip_flag"]) + %(CFLAGS) %(LDFLAGS) $EXEOUTOPT @(tgt) %(file_deps); + } +} + +/** + * Generates a target for a link. + * @param name The name of the link. + * @param exec The name of the executable target. + */ +fn ln(name: str, exec: str) -> void +{ + if OS == "Windows" + { + target name: exec + { + $ copy /v /y /b @(file_dep) @(tgt); + } + } + else + { + target name: exec + { + $ ln -fs @("./" +~ path.basename(file_dep)) @(tgt); + } + } +} + +/** + * Generates a target for a library. + * @param name The name of the library. + * @param exec The name of the executable target. + */ +fn lib(name: str, o_files: []str) -> void +{ + if OS == "WINDOWS" + { + exe(name, o_files); + } + else + { + target name: o_files + { + $ ar -r -cu @(tgt) %(file_deps); + } + } +} + +fn check_err_test( + name: str, + res: CmdResult, +) -> void +{ + if res.exitcode > 127 + { + error("Test \"" +~ name +~ "\" crashed"); + } + + if res.exitcode == 0 + { + error("Test \"" +~ name +~ "\" returned no error"); + } + + if res.exitcode == 100 + { + error("Test \"" +~ name +~ "\" had memory errors on non-fatal error\n"); + } + + if res.stderr.len <= 1 + { + error("Test \"" +~ name +~ "\" produced no error message"); + } +} + +fn check_test_retcode( + name: str, + exitcode: uint, +) -> void +{ + if exitcode != 0 + { + error("Test \"" +~ name +~ "\" failed with exitcode: " +~ + str(exitcode) +~ "\n"); + } +} + +fn check_test( + name: str, + res: CmdResult, + exp_path: str, +) -> void +{ + check_test_retcode(name, res.exitcode); + + exp := io.read_file_bytes(exp_path); + + if exp != res.stdout_full + { + error("Test \"" +~ name +~ "\" failed\n" +~ str(res.stderr)); + } +} + +fn register_standard_tests( + bin: str, + testdir: str, + src_testdir: str, + extra: bool, +) -> void +{ + all_file: str = path.join(src_testdir, "all.txt"); + tests: []str = io.read_file(all_file).split("\n"); + + extra_path := path.join(src_dir, "tests/extra_required.txt"); + extra_required: []str = io.read_file(extra_path).split("\n"); + + for t: tests + { + if t == "" + { + continue; + } + + // Skip extra math tests if it is not enabled. + if !extra && extra_required contains t + { + continue; + } + + test sym(path.join(testdir, t)): bin + { + halt: str = str(config["halt"]); + + name: str = path.basename(tgt_name); + testdir: str = path.dirname(tgt_name); + calc: str = path.basename(testdir); + + test_file: str = tgt_name +~ ".txt"; + test_result_file: str = tgt_name +~ "_results.txt"; + + src_test_file: str = path.join(src_dir, test_file); + src_test_result_file: str = path.join(src_dir, test_result_file); + + actual_test_file: str = + if !path.isfile(src_test_file) + { + // If we shouldn't generate tests, skip. + if !bool(config["generated_tests"]) + { + io.eprint("Skipping test " +~ tgt_name +~ "\n"); + return; + } + + script_name: str = name +~ "." +~ calc; + + scriptdir: str = path.join(testdir, "scripts"); + src_scriptdir: str = path.join(src_dir, scriptdir); + src_script_name: str = path.join(src_scriptdir, script_name); + + $ @(default_exe_name(calc)) $src_script_name > $test_file; + + test_file; + } + else + { + src_test_file; + }; + + exp_result_file: str = + if !path.isfile(src_test_result_file) + { + tmpfile: str = path.tmp(calc +~ "_test_result"); + + $ @(default_exe_name(calc)) %(config_list["gen_options"]) + $actual_test_file << $halt > $tmpfile; + + tmpfile; + } + else + { + src_test_result_file; + }; + + res := $ %(config_list["args"]) %(config_list["options"]) + $actual_test_file << $halt; + + check_test(tgt_name, res, exp_result_file); + } + } +} + +fn register_script_tests( + bin: str, + testdir: str, + src_testdir: str, + extra: bool, +) -> void +{ + scriptdir: str = path.join(testdir, "scripts"); + src_scriptdir: str = path.join(src_testdir, "scripts"); + all_file: str = path.join(src_scriptdir, "all.txt"); + tests: []str = io.read_file(all_file).split("\n"); + + for t: tests + { + if t == "" + { + continue; + } + + // Skip extra math tests if it is not enabled. + if !extra && (t == "rand.bc" || t == "root.bc" || t == "i2rand.bc") + { + continue; + } + + test sym(path.join(scriptdir, t)): bin + { + halt: str = str(config["halt"]); + + name: str = path.basename(tgt_name); + testdir: str = path.dirname(tgt_name); + testdir2: str = path.dirname(testdir); + calc: str = path.basename(testdir2); + + test_file: str = tgt_name; + test_file_dir: str = path.dirname(tgt_name); + test_file_name: str = path.basename(tgt_name, "." +~ calc); + test_result_file: str = path.join(test_file_dir, + test_file_name +~ ".txt"); + + src_test_file: str = path.join(src_dir, test_file); + src_test_result_file: str = path.join(src_dir, test_result_file); + + exp_result_file: str = + if !path.isfile(src_test_result_file) + { + tmpfile: str = path.tmp(calc +~ "_script_test_result"); + + // This particular test needs to be generated straight. Also, on + // Windows, we don't have `sed`, and the `bc`/`dc` there is + // probably this one anyway. + if name == "stream.dc" || host.os == "Windows" + { + $ @(default_exe_name(calc)) $src_test_file << $halt + > $tmpfile; + } + else + { + root_testdir: str = path.join(src_dir, "tests"); + + // This sed and the script are to remove an incompatibility + // with GNU bc, where GNU bc is wrong. See the development + // manual (manuals/development.md#script-tests) for more + // information. + $ @(default_exe_name(calc)) $src_test_file << $halt | + sed -n -f @(path.join(root_testdir, "script.sed")) + > $tmpfile; + } + + tmpfile; + } + else + { + src_test_result_file; + }; + + if calc == "bc" + { + res1 := $ %(config_list["args"]) -g + %(config_list["script_options"]) $src_test_file + << $halt; + + check_test(tgt_name, res1, exp_result_file); + } + + // These tests do not need to run without global stacks. + if name == "globals.bc" || name == "references.bc" || + name == "rand.bc" + { + return; + } + + res2 := $ %(config_list["args"]) %(config_list["script_options"]) + $src_test_file << $halt; + + check_test(tgt_name, res2, exp_result_file); + } + } +} + +fn register_stdin_test( + bin: str, + testdir: str, + name: str +) -> void +{ + test sym(path.join(testdir, name)): bin + { + name: str = path.basename(tgt_name); + testdir: str = path.dirname(tgt_name); + calc: str = path.basename(testdir); + + halt: str = if name == "bc" { "halt"; } else { "q"; }; + + test_file: str = tgt_name +~ ".txt"; + test_result_file: str = tgt_name +~ "_results.txt"; + + src_test_file: str = path.join(src_dir, test_file); + src_test_result_file: str = path.join(src_dir, test_result_file); + + res := $ %(config_list["args"]) %(config_list["options"]) + < $src_test_file; + + check_test(tgt_name, res, src_test_result_file); + } +} + +fn register_stdin_tests( + bin: str, + testdir: str, + src_testdir: str, +) -> void +{ + calc: str = path.basename(testdir); + + if calc == "bc" + { + for t: @[ "stdin", "stdin1", "stdin2" ] + { + register_stdin_test(bin, testdir, t); + } + } + else + { + // dc only needs one. + register_stdin_test(bin, testdir, "stdin"); + } +} + +fn register_read_tests( + bin: str, + testdir: str, + src_testdir: str, +) -> void +{ + calc: str = path.basename(testdir); + + read_call: str = if calc == "bc" { "read()"; } else { "?"; }; + read_expr: str = + if calc == "bc" + { + read_call +~ "\n5+5;"; + } + else + { + read_call; + }; + read_multiple: str = + if calc == "bc" + { + "3\n2\n1\n"; + } + else + { + "3pR\n2pR\n1pR\n"; + }; + + read_test_config: Gaml = @(gaml){ + read_call: $read_call + read_expr: $read_expr + read_multiple: $read_multiple + }; + + push read_test_config: config_stack + { + // First test is the regular read test. + test sym(path.join(testdir, "read")): bin + { + testdir: str = path.dirname(tgt_name); + src_testdir: str = path.join(src_dir, testdir); + + test_file: str = tgt_name +~ ".txt"; + src_test_file: str = path.join(src_dir, test_file); + + read_call: str = str(config["read_call"]); + + lines: []str = io.read_file(src_test_file).split("\n"); + + for l: lines + { + if l == "" + { + continue; + } + + res := $ %(config_list["args"]) %(config_list["options"]) + << @(read_call +~ "\n" +~ l +~ "\n"); + + check_test(tgt_name, res, + path.join(src_testdir, "read_results.txt")); + } + } + + // Next test is reading multiple times. + test sym(path.join(testdir, "read_multiple")): bin + { + testdir: str = path.dirname(tgt_name); + + test_file: str = tgt_name +~ ".txt"; + + path.mkdirp(path.dirname(test_file)); + + read_call: str = str(config["read_call"]); + + exp_path: str = path.tmp("read_multiple_results"); + + io.open(exp_path, "w"): f + { + f.print("3\n2\n1\n"); + } + + res := $ %(config_list["args"]) %(config_list["options"]) + -e $read_call -e $read_call -e $read_call + << @(str(config["read_multiple"])); + + check_test(tgt_name, res, exp_path); + } + + // Next test is the read errors test. + test sym(path.join(testdir, "read_errors")): bin + { + testdir: str = path.dirname(tgt_name); + src_testdir: str = path.join(src_dir, testdir); + + test_file: str = tgt_name +~ ".txt"; + src_test_file: str = path.join(src_dir, test_file); + + path.mkdirp(path.dirname(test_file)); + + read_call: str = str(config["read_call"]); + + lines: []str = io.read_file(src_test_file).split("\n"); + + for l: lines + { + if l == "" + { + continue; + } + + res := $ %(config_list["args"]) %(config_list["options"]) + << @(read_call +~ "\n" +~ l +~ "\n"); + + check_err_test(tgt_name, res); + } + } + + // Next test is the empty read test. + test sym(path.join(testdir, "read_empty")): bin + { + read_call: str = str(config["read_call"]); + + res := $ %(config_list["args"]) %(config_list["options"]) + << @(read_call +~ "\n"); + + check_err_test(tgt_name, res); + } + + // Next test is the read EOF test. + test sym(path.join(testdir, "read_EOF")): bin + { + read_call: str = str(config["read_call"]); + + res := $ %(config_list["args"]) %(config_list["options"]) + << $read_call; + + check_err_test(tgt_name, res); + } + } +} + +fn run_error_lines_test(name: str) -> void +{ + file: str = path.join(src_dir, name); + + lines: []str = io.read_file(file).split("\n"); + + for l: lines + { + if l == "" + { + continue; + } + + res := $ %(config_list["args"]) %(config_list["options"]) + %(config_list["error_options"]) << @(l +~ "\n"); + + check_err_test(name, res); + } +} + +fn register_error_tests( + bin: str, + testdir: str, + src_testdir: str, +) -> void +{ + calc: str = path.basename(testdir); + + // First test is command-line expression error. + test sym(path.join(testdir, "command-line_expr_error")): bin + { + halt: str = str(config["halt"]); + + res := $ %(config_list["args"]) %(config_list["options"]) -e "1+1" -f- + -e "2+2" << $halt; + + check_err_test(tgt_name, res); + } + + // First test is command-line file expression error. + test sym(path.join(testdir, "command-line_file_expr_error")): bin + { + testdir: str = path.dirname(tgt_name); + halt: str = str(config["halt"]); + + res := $ %(config_list["args"]) %(config_list["options"]) -e "1+1" -f- + -f @(path.join(testdir, "decimal.txt")) << $halt; + + check_err_test(tgt_name, res); + } + + if calc == "bc" + { + test sym(path.join(testdir, "posix_warning")): bin + { + res := $ %(config_list["args"]) %(config_list["options"]) -w + << @("line"); + + if res.exitcode != 0 + { + error("Test \"" +~ tgt_name +~ "\" returned an error (" +~ + str(res.exitcode) +~ ")"); + } + + output: str = str(res.stderr); + + if output == "" || output == "\n" + { + error("Test \"" +~ tgt_name +~ "\" did not print a warning"); + } + } + + test sym(path.join(testdir, "posix_errors.txt")): bin + { + run_error_lines_test(tgt_name); + } + } + + test sym(path.join(testdir, "errors.txt")): bin + { + run_error_lines_test(tgt_name); + } + + errors_dir: str = path.join(testdir, "errors"); + + for f: find_src_ext(errors_dir, "txt") + { + // Skip the problematic test, if requested. + if calc == "bc" && f contains "33.txt" && + !bool(config["problematic_tests"]) + { + continue; + } + + test sym(f): bin + { + errors_dir: str = path.dirname(tgt_name); + testdir: str = path.dirname(errors_dir); + calc: str = path.basename(testdir); + + halt: str = str(config["halt"]); + + res1 := $ %(config_list["args"]) %(config_list["error_options"]) -c + @(tgt_name) << $halt; + + check_err_test(tgt_name, res1); + + res2 := $ %(config_list["args"]) %(config_list["error_options"]) -C + @(tgt_name) << $halt; + + check_err_test(tgt_name, res2); + + res3 := $ %(config_list["args"]) %(config_list["error_options"]) -c + < @(path.join(src_dir, tgt_name)); + + check_err_test(tgt_name, res3); + + res4 := $ %(config_list["args"]) %(config_list["error_options"]) -C + < @(path.join(src_dir, tgt_name)); + + check_err_test(tgt_name, res4); + } + } +} + +fn check_kwredef_test( + name: str, + res: CmdResult, +) -> void +{ + testdir: str = path.dirname(name); + redefine_exp: str = path.join(testdir, "redefine_exp.txt"); + + check_test(tgt_name, res, redefine_exp); +} + +OTHER_LINE_LEN_RESULTS_NAME: str = "line_length_test_results.txt"; +OTHER_LINE_LEN70_RESULTS_NAME: str = "line_length70_test_results.txt"; +OTHER_MATHLIB_SCALE_RESULTS_NAME: str = "mathlib_scale_results.txt"; + +fn register_other_tests( + bin: str, + testdir: str, + src_testdir: str, + extra: bool, +) -> void +{ + calc: str = path.basename(testdir); + + path.mkdirp(testdir); + + // Halt test. + test sym(path.join(testdir, "halt")): bin + { + halt: str = str(config["halt"]) +~ "\n"; + + res := $ %(config_list["args"]) << $halt; + + check_test_retcode(tgt_name, res.exitcode); + } + + if calc == "bc" + { + // bc has two halt or quit commands, so test the second as well. + test sym(path.join(testdir, "quit")): bin + { + res := $ %(config_list["args"]) << @("quit\n"); + + check_test_retcode(tgt_name, res.exitcode); + } + + // Also, make sure quit only quits after an expression. + test sym(path.join(testdir, "quit_after_expr")): bin + { + res := $ %(config_list["args"]) -e "1+1" << @("quit\n"); + + check_test_retcode(tgt_name, res.exitcode); + + if str(res.stdout) != "2" + { + error("Test \"" +~ tgt_name +~ + "\" did not have the right output"); + } + } + + test sym(path.join(testdir, "env_args1")): bin + { + env.set env.str("BC_ENV_ARGS", " '-l' '' -q") + { + res := $ %(config_list["args"]) << @("s(.02893)\n"); + + check_test_retcode(tgt_name, res.exitcode); + } + } + + test sym(path.join(testdir, "env_args2")): bin + { + env.set env.str("BC_ENV_ARGS", " '-l' '' -q") + { + res := $ %(config_list["args"]) -e 4 << @("halt\n"); + + check_test_retcode(tgt_name, res.exitcode); + } + } + + redefine_exp: str = path.join(testdir, "redefine_exp.txt"); + + io.open(redefine_exp, "w"): f + { + f.print("5\n0\n"); + } + + test sym(path.join(testdir, "keyword_redefinition1")): bin + { + res := $ %(config_list["args"]) --redefine=print -e + "define print(x) { x }" -e "print(5)" << @("halt\n"); + + check_kwredef_test(tgt_name, res); + } + + test sym(path.join(testdir, "keyword_redefinition2")): bin + { + res := $ %(config_list["args"]) -r abs -r else -e + "abs = 5; else = 0" -e "abs;else" << @("halt\n"); + + check_kwredef_test(tgt_name, res); + } + + if extra + { + test sym(path.join(testdir, "keyword_redefinition_lib2")): bin + { + res := $ %(config_list["args"]) -lr abs -e "perm(5, 1)" -e 0 + << @("halt\n"); + + check_kwredef_test(tgt_name, res); + } + + test sym(path.join(testdir, "leading_zero_script")): bin + { + testdir: str = path.dirname(tgt_name); + src_testdir: str = path.join(src_dir, testdir); + + res := $ %(config_list["args"]) -lz + @(path.join(src_testdir, "leadingzero.txt")) + << @(str(config["halt"])); + + check_test(tgt_name, res, + path.join(src_testdir, "leadingzero_results.txt")); + } + } + + test sym(path.join(testdir, "keyword_redefinition3")): bin + { + res := $ %(config_list["args"]) -r abs -r else -e + "abs = 5; else = 0" -e "abs;else" << @("halt\n"); + + check_kwredef_test(tgt_name, res); + } + + test sym(path.join(testdir, "keyword_redefinition_error")): bin + { + res := $ %(config_list["args"]) -r break -e "define break(x) { x }"; + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, + "keyword_redefinition_without_redefine")): bin + { + res := $ %(config_list["args"]) -e "define read(x) { x }"; + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "multiline_comment_in_expr_file")): bin + { + testdir: str = path.dirname(tgt_name); + src_testdir: str = path.join(src_dir, testdir); + + // tests/bc/misc1.txt happens to have a multiline comment in it. + src_test_file: str = path.join(src_testdir, "misc1.txt"); + src_test_results_file: str = path.join(src_testdir, + "misc1_results.txt"); + + res := $ %(config_list["args"]) -f $src_test_file << @("halt\n"); + + check_test(tgt_name, res, src_test_results_file); + } + + test sym(path.join(testdir, + "multiline_comment_error_in_expr_file")): bin + { + testdir: str = path.dirname(tgt_name); + src_testdir: str = path.join(src_dir, testdir); + + src_test_file: str = path.join(src_testdir, "errors/05.txt"); + + res := $ %(config_list["args"]) -f $src_test_file << @("halt\n"); + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "multiline_string_in_expr_file")): bin + { + testdir: str = path.dirname(tgt_name); + src_testdir: str = path.join(src_dir, testdir); + + // tests/bc/strings.txt happens to have a multiline string in it. + src_test_file: str = path.join(src_testdir, "strings.txt"); + src_test_results_file: str = path.join(src_testdir, + "strings_results.txt"); + + res := $ %(config_list["args"]) -f $src_test_file << @("halt\n"); + + check_test(tgt_name, res, src_test_results_file); + } + + tst := path.join(testdir, + "multiline_string_with_backslash_error_in_expr_file"); + + test sym(tst): bin + { + testdir: str = path.dirname(tgt_name); + src_testdir: str = path.join(src_dir, testdir); + + src_test_file: str = path.join(src_testdir, "errors/16.txt"); + + res := $ %(config_list["args"]) -f $src_test_file << @("halt\n"); + + check_err_test(tgt_name, res); + } + + tst2 := path.join(testdir, "multiline_string_error_in_expr_file"); + + test sym(tst2): bin + { + testdir: str = path.dirname(tgt_name); + src_testdir: str = path.join(src_dir, testdir); + + src_test_file: str = path.join(src_testdir, "errors/04.txt"); + + res := $ %(config_list["args"]) -f $src_test_file << @("halt\n"); + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "interactive_halt")): bin + { + res := $ %(config_list["args"]) -i << @("halt\n"); + + check_test_retcode(tgt_name, res.exitcode); + } + } + else + { + test sym(path.join(testdir, "env_args1")): bin + { + env.set env.str("DC_ENV_ARGS", "'-x'"), env.str("DC_EXPR_EXIT", "1") + { + res := $ %(config_list["args"]) << @("4s stuff\n"); + + check_test_retcode(tgt_name, res.exitcode); + } + } + + test sym(path.join(testdir, "env_args2")): bin + { + env.set env.str("DC_ENV_ARGS", "'-x'"), env.str("DC_EXPR_EXIT", "1") + { + res := $ %(config_list["args"]) -e 4pR; + + check_test_retcode(tgt_name, res.exitcode); + } + } + + test sym(path.join(testdir, "extended_register_command1")): bin + { + testdir: str = path.dirname(tgt_name); + results: str = tgt_name +~ ".txt"; + + path.mkdirp(testdir); + + io.open(results, "w"): f + { + f.print("0\n"); + } + + res := $ %(config_list["args"]) -e gxpR << @("q\n"); + + check_test(tgt_name, res, results); + } + + test sym(path.join(testdir, "extended_register_command2")): bin + { + testdir: str = path.dirname(tgt_name); + results: str = tgt_name +~ ".txt"; + + path.mkdirp(testdir); + + io.open(results, "w"): f + { + f.print("1\n"); + } + + res := $ %(config_list["args"]) -x -e gxpR << @("q\n"); + + check_test(tgt_name, res, results); + } + } + + path.mkdirp(testdir); + + other_tests_results: []str = config_list["other_tests_results"]; + + io.open(path.join(testdir, OTHER_LINE_LEN_RESULTS_NAME), "w"): f + { + f.print(other_tests_results[0] +~ "\n"); + } + + io.open(path.join(testdir, OTHER_LINE_LEN70_RESULTS_NAME), "w"): f + { + f.print(other_tests_results[1] +~ "\n"); + } + + test sym(path.join(testdir, "line_length1")): bin + { + env.set env.str(str(config["var"]), "80") + { + testdir: str = path.dirname(tgt_name); + + other_tests: []str = config_list["other_tests"]; + + res := $ %(config_list["args"]) << @(other_tests[3]); + + check_test(tgt_name, res, + path.join(testdir, OTHER_LINE_LEN_RESULTS_NAME)); + } + } + + test sym(path.join(testdir, "line_length2")): bin + { + env.set env.str(str(config["var"]), "2147483647") + { + testdir: str = path.dirname(tgt_name); + + other_tests: []str = config_list["other_tests"]; + + res := $ %(config_list["args"]) << @(other_tests[3]); + + check_test(tgt_name, res, + path.join(testdir, OTHER_LINE_LEN70_RESULTS_NAME)); + } + } + + test sym(path.join(testdir, "expr_and_file_args_test")): bin + { + testdir: str = path.dirname(tgt_name); + src_testdir: str = path.join(src_dir, testdir); + + input_file: str = path.join(src_testdir, "add.txt"); + input: str = io.read_file(input_file); + results_file: str = path.join(src_testdir, "add_results.txt"); + results: str = io.read_file(results_file); + + output_file: str = path.join(testdir, "expr_file_args.txt"); + + io.open(output_file, "w"): f + { + f.print(results +~ results +~ results +~ results); + } + + res := $ %(config_list["args"]) -e $input -f $input_file + --expression $input --file $input_file + -e @(str(config["halt"])); + + check_test(tgt_name, res, output_file); + } + + test sym(path.join(testdir, "files_test")): bin + { + env.set env.str(str(config["var"]), "2147483647") + { + testdir: str = path.dirname(tgt_name); + src_testdir: str = path.join(src_dir, testdir); + + input_file: str = path.join(src_testdir, "add.txt"); + input: str = io.read_file(input_file); + results_file: str = path.join(src_testdir, "add_results.txt"); + results: str = io.read_file(results_file); + + output_file: str = path.join(testdir, "files.txt"); + + io.open(output_file, "w"): f + { + f.print(results +~ results +~ results +~ results); + } + + res := $ %(config_list["args"]) -- $input_file $input_file + $input_file $input_file << @(str(config["halt"])); + + check_test(tgt_name, res, output_file); + } + } + + test sym(path.join(testdir, "line_length3")): bin + { + env.set env.str(str(config["var"]), "62") + { + testdir: str = path.dirname(tgt_name); + + other_tests: []str = config_list["other_tests"]; + + res := $ %(config_list["args"]) -L << @(other_tests[3]); + + check_test(tgt_name, res, + path.join(testdir, OTHER_LINE_LEN_RESULTS_NAME)); + } + } + + test sym(path.join(testdir, "line_length_func")): bin + { + env.set env.str(str(config["var"]), "62") + { + testdir: str = path.dirname(tgt_name); + results: str = tgt_name +~ ".txt"; + + path.mkdirp(testdir); + + io.open(results, "w"): f + { + f.print("0\n"); + } + + other_tests: []str = config_list["other_tests"]; + + res := $ %(config_list["args"]) -L << @(other_tests[2]); + + check_test(tgt_name, res, results); + } + } + + test sym(path.join(testdir, "arg")): bin + { + halt: str = str(config["halt"]); + + res1 := $ %(config_list["args"]) -h << $halt; + check_test_retcode(tgt_name, res1.exitcode); + + res2 := $ %(config_list["args"]) -P << $halt; + check_test_retcode(tgt_name, res2.exitcode); + + res3 := $ %(config_list["args"]) -R << $halt; + check_test_retcode(tgt_name, res3.exitcode); + + res4 := $ %(config_list["args"]) -v << $halt; + check_test_retcode(tgt_name, res4.exitcode); + + res5 := $ %(config_list["args"]) -V << $halt; + check_test_retcode(tgt_name, res5.exitcode); + } + + test sym(path.join(testdir, "leading_zero_arg")): bin + { + testdir: str = path.dirname(tgt_name); + calc: str = path.basename(testdir); + + expected_file: str = tgt_name +~ ".txt"; + + expected: str = "0.1\n-0.1\n1.1\n-1.1\n0.1\n-0.1\n"; + + io.open(expected_file, "w"): f + { + f.print(expected); + } + + data: str = + if calc == "bc" + { + "0.1\n-0.1\n1.1\n-1.1\n.1\n-.1\n"; + } + else + { + "0.1pR\n_0.1pR\n1.1pR\n_1.1pR\n.1pR\n_.1pR\n"; + }; + + res := $ %(config_list["args"]) -z << $data; + + check_test(tgt_name, res, expected_file); + } + + test sym(path.join(testdir, "invalid_file_arg")): bin + { + res := $ %(config_list["args"]) -f + "astoheusanotehynstahonsetihaotsnuhynstahoaoetusha.txt"; + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "invalid_option_arg")): bin + { + other_tests: []str = config_list["other_tests"]; + + res := $ %(config_list["args"]) @("-" +~ other_tests[0]) + -e @(str(config["halt"])); + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "invalid_long_option_arg")): bin + { + other_tests: []str = config_list["other_tests"]; + + res := $ %(config_list["args"]) @("--" +~ other_tests[1]) + -e @(str(config["halt"])); + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "unrecognized_option_arg")): bin + { + res := $ %(config_list["args"]) -u -e @(str(config["halt"])); + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "unrecognized_long_option_arg")): bin + { + res := $ %(config_list["args"]) --uniform -e @(str(config["halt"])); + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "no_required_arg_for_option")): bin + { + res := $ %(config_list["args"]) -f; + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "no_required_arg_for_long_option")): bin + { + res := $ %(config_list["args"]) --file; + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "given_arg_for_long_option_with_no_arg")): bin + { + res := $ %(config_list["args"]) --version=5; + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "colon_option")): bin + { + res := $ %(config_list["args"]) -:; + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "colon_long_option")): bin + { + res := $ %(config_list["args"]) --:; + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "builtin_variable_arg_test")): bin + { + testdir: str = path.dirname(tgt_name); + calc: str = path.basename(testdir); + + extra: bool = bool(config["extra_math"]); + + output: str = + if extra + { + "14\n15\n16\n17.25\n"; + } + else + { + "14\n15\n16\n"; + }; + + output_file: str = tgt_name +~ ".txt"; + + io.open(output_file, "w"): f + { + f.print(output); + } + + data: str = + if extra + { + if calc == "bc" + { + "s=scale;i=ibase;o=obase;t=seed@2;ibase=A;obase=A;s;i;o;t;"; + } + else + { + "J2@OIKAiAopRpRpRpR"; + } + } + else + { + if calc == "bc" + { + "s=scale;i=ibase;o=obase;ibase=A;obase=A;s;i;o;"; + } + else + { + "OIKAiAopRpRpR"; + } + }; + + args: []str = + if extra + { + @[ "-S14", "-I15", "-O16", "-E17.25" ]; + } + else + { + @[ "-S14", "-I15", "-O16" ]; + }; + + res1 := $ %(config_list["args"]) %(args) << $data; + check_test(tgt_name, res1, output_file); + + long_args: []str = + if extra + { + @[ "--scale=14", "--ibase=15", "--obase=16", "--seed=17.25" ]; + } + else + { + @[ "--scale=14", "--ibase=15", "--obase=16" ]; + }; + + res2 := $ %(config_list["args"]) %(long_args) << $data; + check_test(tgt_name, res2, output_file); + } + + if calc == "bc" + { + io.open(path.join(testdir, OTHER_MATHLIB_SCALE_RESULTS_NAME), "w"): f + { + f.print("100\n"); + } + + test sym(path.join(testdir, "builtin_var_arg_with_lib")): bin + { + testdir: str = path.dirname(tgt_name); + results_file: str = path.join(testdir, + OTHER_MATHLIB_SCALE_RESULTS_NAME); + + res := $ %(config_list["args"]) -S100 -l << @("scale\n"); + + check_test(tgt_name, res, results_file); + } + + test sym(path.join(testdir, "builtin_variable_long_arg_with_lib")): bin + { + testdir: str = path.dirname(tgt_name); + results_file: str = path.join(testdir, + OTHER_MATHLIB_SCALE_RESULTS_NAME); + + res := $ %(config_list["args"]) --scale=100 --mathlib << + @("scale\n"); + + check_test(tgt_name, res, results_file); + } + + test sym(path.join(testdir, "builtin_var_arg_with_lib_env_arg")): bin + { + env.set env.str("BC_ENV_ARGS", "-l") + { + testdir: str = path.dirname(tgt_name); + results_file: str = path.join(testdir, + OTHER_MATHLIB_SCALE_RESULTS_NAME); + + res := $ %(config_list["args"]) -S100 << @("scale\n"); + + check_test(tgt_name, res, results_file); + } + } + + test sym(path.join(testdir, + "builtin_var_long_arg_with_lib_env_arg")): bin + { + env.set env.str("BC_ENV_ARGS", "-l") + { + testdir: str = path.dirname(tgt_name); + results_file: str = path.join(testdir, + OTHER_MATHLIB_SCALE_RESULTS_NAME); + + res := $ %(config_list["args"]) --scale=100 << @("scale\n"); + + check_test(tgt_name, res, results_file); + } + } + + test sym(path.join(testdir, "builtin_var_env_arg_with_lib_arg")): bin + { + env.set env.str("BC_ENV_ARGS", "-S100") + { + testdir: str = path.dirname(tgt_name); + results_file: str = path.join(testdir, + OTHER_MATHLIB_SCALE_RESULTS_NAME); + + res := $ %(config_list["args"]) -l << @("scale\n"); + + check_test(tgt_name, res, results_file); + } + } + + test sym(path.join(testdir, + "builtin_var_long_env_arg_with_lib_arg")): bin + { + env.set env.str("BC_ENV_ARGS", "--scale=100") + { + testdir: str = path.dirname(tgt_name); + results_file: str = path.join(testdir, + OTHER_MATHLIB_SCALE_RESULTS_NAME); + + res := $ %(config_list["args"]) -l << @("scale\n"); + + check_test(tgt_name, res, results_file); + } + } + + test sym(path.join(testdir, "limits")): bin + { + res := $ %(config_list["args"]) << @("limits\n"); + + check_test_retcode(tgt_name, res.exitcode); + + if str(res.stdout) == "" || str(res.stdout) == "\n" + { + error("Test \"" +~ tgt_name +~ "\" did not produce output"); + } + } + } + + test sym(path.join(testdir, "bad_arg_for_builtin_var_option")): bin + { + testdir: str = path.dirname(tgt_name); + calc: str = path.basename(testdir); + + scale: str = if calc == "bc" { "scale\n"; } else { "K\n"; }; + + res1 := $ %(config_list["args"]) --scale=18923c.rlg << $scale; + + check_err_test(tgt_name, res1); + + if bool(config["extra_math"]) + { + seed: str = if calc == "bc" { "seed\n"; } else { "J\n"; }; + + res2 := $ %(config_list["args"]) --seed=18923c.rlg << $seed; + + check_err_test(tgt_name, res2); + } + } + + test sym(path.join(testdir, "directory_as_file")): bin + { + testdir: str = path.dirname(tgt_name); + + res := $ %(config_list["args"]) $testdir; + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "binary_file")): bin + { + res := $ %(config_list["args"]) @(file_dep); + + check_err_test(tgt_name, res); + } + + test sym(path.join(testdir, "binary_stdin")): bin + { + res := $ %(config_list["args"]) < @(file_dep); + + check_err_test(tgt_name, res); + } +} + +fn register_timeconst_tests( + bin: str, + testdir: str, + src_testdir: str, +) -> void +{ + timeconst: str = path.join(testdir, "scripts/timeconst.bc"); + + if !path.isfile(path.join(src_dir, timeconst)) + { + io.eprint("Warning: " +~ timeconst +~ " does not exist\n"); + io.eprint(timeconst +~ " is not part of this bc because of " +~ + "license incompatibility\n"); + io.eprint("To test it, get it from the Linux kernel at " +~ + "`kernel/time/timeconst.bc`\n"); + io.eprint("Skipping...\n"); + + return; + } + + for i: range(1001) + { + test sym(path.join(timeconst, str(i))) + { + idx: str = path.basename(tgt_name) +~ "\n"; + file: str = path.join(src_dir, path.dirname(tgt_name)); + + // Generate. + res1 := $ bc -q $file << $idx; + + if res1.exitcode != 0 + { + io.eprint("Other bc is not GNU compatible. Skipping...\n"); + return; + } + + // Run. + res2 := $ %(config_list["args"]) -q $file << $idx; + + if res2.exitcode != 0 || res2.stdout != res1.stdout + { + error("\nFailed on input: " +~ idx +~ "\n"); + } + } + } +} + +fn register_history_tests( + bin: str, + testdir: str, + src_testdir: str, +) -> void +{ + calc: str = path.basename(testdir); + + src_test_scriptdir: str = path.dirname(src_testdir); + + len_res := $ @(path.join(src_test_scriptdir, "history.py")) $calc -a; + + if len_res.exitcode != 0 + { + io.eprint("Python 3 with pexpect doesn't work. Skipping history tests"); + return; + } + + len: usize = usize(str(len_res.stdout)); + + for i: range(len) + { + test sym(calc +~ "/history/" +~ str(i)): bin + { + name: str = tgt_name; + parts: []str = name.split("/"); + + calc: str = parts[0]; + idx: str= parts[2]; + + src_testdir: str = path.join(src_dir, "tests"); + + $ @(path.join(src_testdir, "history.py")) -t $calc $idx @(file_dep); + } + } +} + +/** + * Generates all of the test targets for an executable. + * @param name The base name of the executable. + * @param targets The targets that tests should depend on. + */ +fn exe_tests(name: str) -> void +{ + bin: str = exe_name(name); + + testdir: str = path.join("tests", name); + src_testdir: str = path.join(src_dir, testdir); + + halt: str = if name == "bc" { "halt"; } else { "q"; }; + gen_options: []str = if name == "bc" { @[ "-lq" ]; }; + options: []str = if name == "bc" { @[ "-lqc" ]; } else { @[ "-xc" ]; }; + + other_num: str = "10000000000000000000000000000000000000000000000000" +~ + "0000000000000000000000000000"; + other_num70: str = "10000000000000000000000000000000000000000000000" +~ + "000000000000000000000\\\n0000000000"; + + other_tests: []str = + if name == "bc" + { + @[ "x", "extended-register", "line_length()", other_num ]; + } + else + { + @[ "l", "mathlib", "glpR", other_num +~ "pR" ]; + }; + + other_tests_results: []str = @[ other_num, other_num70 ]; + + var: str = name.toupper() +~ "_LINE_LENGTH"; + + script_options: []str = + if name == "bc" + { + @[ "-lqC" ]; + } + else + { + @[ "-xC" ]; + }; + + error_options: []str = if name == "bc" { @[ "-ls" ]; } else { @[ "-x" ]; }; + + args: []str = + if bool(config["valgrind"]) + { + VALGRIND_ARGS +~ @[ "./" +~ bin ]; + } + else + { + @[ "./" +~ bin ]; + }; + + test_config: Gaml = @(gaml){ + args: $args + halt: $halt + gen_options: $gen_options + options: $options + script_options: $script_options + error_options: $error_options + other_tests: $other_tests + other_tests_results: $other_tests_results + var: $var + }; + + push test_config: config_stack + { + extra: bool = bool(config["extra_math"]); + + register_standard_tests(bin, testdir, src_testdir, extra); + register_script_tests(bin, testdir, src_testdir, extra); + register_stdin_tests(bin, testdir, src_testdir); + register_read_tests(bin, testdir, src_testdir); + register_error_tests(bin, testdir, src_testdir); + register_other_tests(bin, testdir, src_testdir, extra); + + if name == "bc" && bool(config["generated_tests"]) && + path.isfile(path.join(src_testdir, "scripts/timeconst.bc")) + { + register_timeconst_tests(bin, testdir, src_testdir); + } + + if host.os != "Windows" && sym(config["history"]) == @builtin + { + register_history_tests(bin, testdir, src_testdir); + } + } +} + +/** + * Gets the `$BINDIR`, including the `$DESTDIR`. This generates the default + * value if it wasn't set. + * @return The `$BINDIR`, with the `$DESTDIR`. + */ +fn get_bindir() -> str +{ + temp: str = str(config["bindir"]); + + bindir: str = + if temp == "" + { + path.join(str(config["prefix"]), "bin"); + } + else + { + temp; + }; + + return path.join(DESTDIR, bindir); +} + +/** + * Gets the `$LIBDIR`, including the `$DESTDIR`. This generates the default + * value if it wasn't set. + * @return The `$LIBDIR`, with the `$DESTDIR`. + */ +fn get_libdir() -> str +{ + temp: str = str(config["libdir"]); + + libdir: str = + if temp == "" + { + path.join(str(config["prefix"]), "lib"); + } + else + { + temp; + }; + + return path.join(DESTDIR, libdir); +} + +/** + * Gets the `$INCLUDEDIR`, including the `$DESTDIR`. This generates the default + * value if it wasn't set. + * @return The `$INCLUDEDIR`, with the `$DESTDIR`. + */ +fn get_includedir() -> str +{ + temp: str = str(config["includedir"]); + + includedir: str = + if temp == "" + { + path.join(str(config["prefix"]), "include"); + } + else + { + temp; + }; + + return path.join(DESTDIR, includedir); +} + +/** + * Gets the `$PC_PATH`, including the `$DESTDIR`. This generates the default + * value if it wasn't set. + * @return The `$PC_PATH`, with the `$DESTDIR`. + */ +fn get_pc_path() -> str +{ + pc_path: str = + if str(config["pc_path"]) == "" + { + res := $ pkg-config --variable=pc_path pkg-config; + + str(res.stdout); + } + else + { + str(config["pc_path"]); + }; + + return path.join(DESTDIR, pc_path); +} + +/** + * Gets the `$DATAROOTDIR`, including the `$DESTDIR`. This generates the default + * value if it wasn't set. + * @return The `$DATAROOTDIR`, with the `$DESTDIR`. + */ +fn get_datarootdir() -> str +{ + temp: str = str(config["datarootdir"]); + + datarootdir: str = + if temp == "" + { + path.join(str(config["prefix"]), "share"); + } + else + { + temp; + }; + + return path.join(DESTDIR, datarootdir); +} + +/** + * Gets the `$DATADIR`, including the `$DESTDIR`. This generates the default + * value if it wasn't set. + * @return The `$DATADIR`, with the `$DESTDIR`. + */ +fn get_datadir() -> str +{ + temp: str = str(config["datadir"]); + + datadir: str = + if temp == "" + { + get_datarootdir(); + } + else + { + temp; + }; + + return path.join(DESTDIR, datadir); +} + +/** + * Gets the `$MANDIR`, including the `$DESTDIR`. This generates the default + * value if it wasn't set. + * @return The `$MANDIR`, with the `$DESTDIR`. + */ +fn get_mandir() -> str +{ + temp: str = str(config["mandir"]); + + mandir: str = + if temp == "" + { + path.join(get_datadir(), "man"); + } + else + { + temp; + }; + + return path.join(DESTDIR, mandir); +} + +/** + * Gets the `$MAN1DIR`, including the `$DESTDIR`. This generates the default + * value if it wasn't set. + * @return The `$MAN1DIR`, with the `$DESTDIR`. + */ +fn get_man1dir() -> str +{ + temp: str = str(config["man1dir"]); + + man1dir: str = + if temp == "" + { + path.join(get_mandir(), "man1"); + } + else + { + temp; + }; + + return path.join(DESTDIR, man1dir); +} + +/** + * Gets the `$MAN3DIR`, including the `$DESTDIR`. This generates the default + * value if it wasn't set. + * @return The `$MAN3DIR`, with the `$DESTDIR`. + */ +fn get_man3dir() -> str +{ + temp: str = str(config["man3dir"]); + + man3dir: str = + if temp == "" + { + path.join(get_mandir(), "man3"); + } + else + { + temp; + }; + + return path.join(DESTDIR, man3dir); +} diff --git a/contrib/bc/build.rig b/contrib/bc/build.rig new file mode 100644 index 000000000000..55f8c85daddd --- /dev/null +++ b/contrib/bc/build.rig @@ -0,0 +1,575 @@ +/* + * ***************************************************************************** + * + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * ***************************************************************************** + * + * The build script file. + * + */ + +if OS == "Windows" && bool(config["lto"]) +{ + error("Link-time optimization is not supported on Windows"); +} + +if LIBRARY_ENABLED == "0" +{ + if OS != "Windows" && NLS_ENABLED != "0" + { + io.eprint("Testing NLS...\n"); + + clang_flags: []str = + if CC contains "clang" + { + @[ "-Wno_unreachable-code" ]; + }; + + flags: []str = clang_flags +~ @[ + DEFOPT +~ "BC_ENABLE_NLS=1", + DEFOPT +~ "BC_ENABLED=" +~ BC_ENABLED, + DEFOPT +~ "DC_ENABLED=" +~ DC_ENABLED, + DEFOPT +~ "BC_ENABLE_HISTORY=0", + DEFOPT +~ "BC_ENABLE_LIBRARY=0", + DEFOPT +~ "BC_ENABLE_AFL=0", + DEFOPT +~ "BC_ENABLE_EXTRA_MATH=" +~ EXTRA_MATH_ENABLED, + DEFOPT +~ "BC_ENABLE_OSSFUZZ=0", + DEFOPT +~ "_POSIX_C_SOURCE=200809L", + DEFOPT +~ "_XOPEN_SOURCE=700", + INCOPT, + ]; + + res := $ $CC %(flags) -c @(path.join(src_dir, "src/vm.c")) -E; + + if res.exitcode != 0 + { + if FORCE + { + io.eprint("Forcing NLS...\n"); + } + else + { + error("NLS does not work\n"); + } + } + else + { + if path.isfile("vm.o") + { + path.rm("vm.o"); + } + + io.eprint("NLS works.\n\n"); + io.eprint("Testing gencat...\n"); + + res2 := $ gencat ./en_US.cat + @(path.join(src_dir, "locales/en_US.msg")); + + if res2.exitcode != 0 + { + if FORCE + { + io.eprint("Forcing NLS...\n"); + } + else + { + error("gencat does not work\n"); + } + } + else + { + io.eprint("gencat works.\n\n"); + + if platform != host + { + error("Cross compiles will not work!\n\n"); + } + } + } + } + + if OS != "Windows" && sym(config["history"]) != @none + { + io.eprint("Testing history...\n"); + + flags: []str = @[ + DEFOPT +~ "BC_ENABLE_HISTORY=1", + DEFOPT +~ "BC_ENABLED=" +~ BC_ENABLED, + DEFOPT +~ "DC_ENABLED=" +~ DC_ENABLED, + DEFOPT +~ "BC_ENABLE_NLS=" +~ NLS_ENABLED, + DEFOPT +~ "BC_ENABLE_LIBRARY=0", + DEFOPT +~ "BC_ENABLE_AFL=0", + DEFOPT +~ "BC_ENABLE_EDITLINE=" +~ EDITLINE_ENABLED, + DEFOPT +~ "BC_ENABLE_READLINE=" +~ READLINE_ENABLED, + DEFOPT +~ "BC_ENABLE_EXTRA_MATH=" +~ EXTRA_MATH_ENABLED, + DEFOPT +~ "BC_ENABLE_OSSFUZZ=0", + DEFOPT +~ "_POSIX_C_SOURCE=200809L", + DEFOPT +~ "_XOPEN_SOURCE=700", + INCOPT, + ]; + + res := $ $CC %(flags) -c @(path.join(src_dir, "src/history.c")) -E; + + if res.exitcode != 0 + { + if FORCE + { + io.eprint("Forcing history...\n"); + } + else + { + error("History does not work\n"); + } + } + else + { + if path.isfile("history.o") + { + path.rm("history.o"); + } + + io.eprint("History works.\n\n"); + } + } +} + +freebsd_flags: []str = +if OS != "FreeBSD" +{ + @[ DEFOPT +~ "_POSIX_C_SOURCE=200809L", DEFOPT +~ "_XOPEN_SOURCE=700" ]; +}; + +macos: bool = (OS == "Darwin"); + +macos_flags: []str = +if macos +{ + @[ DEFOPT +~ "_DARWIN_C_SOURCE" ]; +}; + +openbsd_flags: []str = +if OS == "OpenBSD" +{ + if READLINE_ENABLED != "0" + { + error("Cannot use readline on OpenBSD"); + } + + @[ DEFOPT +~ "_BSD_SOURCE" ]; +}; + +strip_flag: []str = +if OS != "Windows" && !bool(config["debug"]) && !macos && bool(config["strip"]) +{ + @[ "-s" ]; +}; + +lto_flag: []str = +if bool(config["lto"]) +{ + @[ "-flto" ]; +}; + +strict_flags: []str = +if bool(config["strict"]) +{ + // Strict build only works for GCC and Clang, so we do want to set that + // here. + if CC contains "gcc" || CC contains "clang" + { + // These are the standard strict build flags for both compilers. + std_strict: []str = @[ "-Wall", "-Wextra", "-Werror", "-pedantic" ]; + + // Clang has -Weverything, which I ensure Yc builds under. + // + // I also want unlimited errors because Clang is my development + // compiler; it caps at 20 by default. + compiler_strict: []str = + if CC contains "clang" + { + // Oh, and add the standard. + @[ "-Weverything", "-ferror-limit=100000", "-Wno-padded", + "-Wno-unknown-warning-option", "-Wno-unsafe-buffer-usage", + "-Wno-documentation-unknown-command", "-Wno-pre-c11-compat", + "-Wno-enum-enum-conversion", "-Wno-switch-default" ]; + }; + + // Return the combination of the sets. + std_strict +~ compiler_strict; + } + else if OS == "Windows" + { + // Return the combo of the strict options, the standard, and the + // sanitizer defines. + @[ "/W4", "/WX", "/wd\"4996\"", "/permissive-" ]; + } +}; + +version_contents: str = io.read_file(path.join(src_dir, "VERSION.txt")); +version_lines: []str = version_contents.split("\n"); +version: str = version_lines[0]; + +version_flag: []str = @[ DEFOPT +~ "VERSION=" +~ version ]; + +other_flags: []str = freebsd_flags +~ macos_flags +~ openbsd_flags +~ + lto_flag +~ strict_flags +~ version_flag +~ +if bool(config["debug"]) +{ + @[ compiler_db["opt.debug"] ]; +}; + +history_files: []str = +if HISTORY != @none +{ + HISTORY_C_FILES; +}; + +c_files: []str = +if BUILD_MODE == @both +{ + COMMON_C_FILES +~ EXEC_C_FILES +~ BC_C_FILES +~ DC_C_FILES +~ history_files; +} +else if BUILD_MODE == @bc +{ + COMMON_C_FILES +~ EXEC_C_FILES +~ BC_C_FILES +~ history_files; +} +else if BUILD_MODE == @dc +{ + COMMON_C_FILES +~ EXEC_C_FILES +~ DC_C_FILES +~ history_files; +} +else +{ + COMMON_C_FILES +~ LIBRARY_C_FILES; +}; + +build_config: Gaml = @(gaml){ + other_cflags: $other_flags + strip_flag: $strip_flag +}; + +targets: []str = +push build_config: config_stack +{ + gen_o_files: []str = + if BUILD_MODE != @library + { + @[ + txt2o("gen/lib.bc", "bc_lib", "bc_lib_name", "BC_ENABLED", true), + txt2o("gen/lib2.bc", "bc_lib2", "bc_lib2_name", + "BC_ENABLED && BC_ENABLE_EXTRA_MATH", true), + txt2o("gen/bc_help.txt", "bc_help", "", "BC_ENABLED", false), + txt2o("gen/dc_help.txt", "dc_help", "", "DC_ENABLED", false), + ]; + }; + + obj_files: []str = gen_o_files +~ + for f: c_files + { + c2o(f); + }; + + if BUILD_MODE == @both || BUILD_MODE == @bc + { + if OS != "Windows" && bool(config["install_manpages"]) + { + src: str = path.join("manuals/bc", BUILD_TYPE +~ ".1"); + + target BC_MANPAGE: src + { + $ cp -f @(file_dep) @(tgt); + } + } + + exe(BC_BIN, obj_files); + } + + if BUILD_MODE == @both || BUILD_MODE == @dc + { + if OS != "Windows" && bool(config["install_manpages"]) + { + src: str = path.join("manuals/dc", BUILD_TYPE +~ ".1"); + + target DC_MANPAGE: src + { + $ cp -f @(file_dep) @(tgt); + } + } + + if BUILD_MODE == @both + { + ln(DC_BIN, BC_BIN); + } + else + { + exe(DC_BIN, obj_files); + } + } + + if BUILD_MODE == @library + { + lib(LIBRARY, obj_files); + } + + if BUILD_MODE == @both + { + @[ BC_BIN, DC_BIN ]; + } + else if BUILD_MODE == @bc + { + @[ DC_BIN ]; + } + else if BUILD_MODE == @dc + { + @[ DC_BIN ]; + } + else + { + includedir: str = get_includedir(); + libdir: str = get_libdir(); + + pc_config: Gaml = @(gaml){ + INCLUDEDIR: $includedir + LIBDIR: $libdir + VERSION: $version + }; + + push pc_config: config_stack + { + target PC_FILE: PC_FILE +~ ".in" + { + configure_file(file_dep, tgt, "%%"); + } + } + + @[ LIBRARY, PC_FILE ]; + } +}; + +if OS != "Windows" +{ + if LIBRARY_ENABLED == "0" + { + target @install: targets + { + bindir: str = get_bindir(); + + if BC_ENABLED != "0" + { + $ $SAFE_INSTALL $EXEC_INSTALL_MODE $BC_BIN + @(path.join(bindir, BC_BIN)); + } + + if DC_ENABLED != "0" + { + if BC_ENABLED != "0" + { + $ ln -sf @("./" +~ BC_BIN) @(path.join(bindir, DC_BIN)); + } + else + { + $ $SAFE_INSTALL $EXEC_INSTALL_MODE $BC_BIN + @(path.join(bindir, BC_BIN)); + } + } + + if NLS_ENABLED != "0" + { + locale_install_args: []str = + if sym(config["locales"]) == @all + { + @[ "-l" ]; + }; + + if DESTDIR != "" + { + $ @(path.join(src_dir, "scripts/locale_install.sh")) + %(locale_install_args) @(str(config["nlspath"])) + $MAINEXEC $DESTDIR; + } + else + { + $ @(path.join(src_dir, "scripts/locale_install.sh")) + %(locale_install_args) @(str(config["nlspath"])) + $MAINEXEC; + } + } + + if bool(config["install_manpages"]) + { + man1dir: str = get_man1dir(); + + if BC_ENABLED != "0" + { + $ rm -rf @(path.join(man1dir, BC_MANPAGE)); + } + + if DC_ENABLED != "0" + { + $ rm -rf @(path.join(man1dir, DC_MANPAGE)); + } + } + } + + target @uninstall + { + bindir: str = get_bindir(); + + if BC_ENABLED != "0" + { + $ rm -rf @(path.join(bindir, BC_BIN)); + } + + if DC_ENABLED != "0" + { + $ rm -rf @(path.join(bindir, DC_BIN)); + } + + if NLS_ENABLED != "0" + { + if DESTDIR != "" + { + $ @(path.join(src_dir, "scripts/locale_uninstall.sh")) + @(str(config["nlspath"])) $MAINEXEC $DESTDIR; + } + else + { + $ @(path.join(src_dir, "scripts/locale_uninstall.sh")) + @(str(config["nlspath"])) $MAINEXEC; + } + } + + if bool(config["install_manpages"]) + { + man1dir: str = get_man1dir(); + $ rm -rf @(path.join(man1dir, BC_MANPAGE)) + @(path.join(man1dir, DC_MANPAGE)); + } + } + } + else + { + target @install: targets, BCL_HEADER_PATH + { + full_libdir: str = get_libdir(); + + $ $SAFE_INSTALL $EXEC_INSTALL_MODE @(file_dep) + @(path.join(full_libdir, file_dep)); + + full_pc_path: str = get_pc_path(); + bcl_pc: str = file_deps[1]; + + $ $SAFE_INSTALL $MANPAGE_INSTALL_MODE $bcl_pc + @(path.join(full_pc_path, bcl_pc)); + + full_includedir: str = get_includedir(); + + $ $SAFE_INSTALL $MANPAGE_INSTALL_MODE @(file_deps[2]) + @(path.join(full_includedir, BCL_HEADER)); + + if bool(config["install_manpages"]) + { + $ $SAFE_INSTALL $MANPAGE_INSTALL_MODE + @(path.join(src_dir, path.join("manuals", BCL_MANPAGE))) + @(path.join(get_man3dir(), BCL_MANPAGE)); + } + } + + target @uninstall + { + $ rm -rf @(path.join(get_libdir(), LIBRARY)) + @(path.join(get_pc_path(), PC_FILE)) + @(path.join(get_includedir(), BCL_HEADER)); + + if bool(config["install_manpages"]) + { + $ rm -rf @(path.join(get_man3dir(), BCL_MANPAGE)); + } + } + } +} + +// If the platform matches the host, we can run the test suite. +if platform == host +{ + // If we have the library, build and run that test. + if BUILD_MODE == @library + { + libtesto: str = c2o("tests/bcl.c"); + + libtest: str = "bcl"; + + exe(libtest, @[ libtesto, targets[0] ]); + + test @bcl: libtest + { + $ @(str(tgt_name)); + } + } + else + { + if BUILD_MODE != @dc + { + exe_tests("bc"); + } + + if BUILD_MODE != @bc + { + exe_tests("dc"); + } + + target @clean_tests + { + for f: path.find_ext(build_dir, "txt") + { + path.rm(f); + } + } + } +} + +target "bitfuncgen" +{ + error("TODO: Make this"); +} + +target @bitfuncgen: "bitfuncgen" +{ + error("TODO: Make this"); +} + +target "ministat" +{ + error("TODO: Make this"); +} + +target @ministat: "ministat" +{ + error("TODO: Make this"); +} + +target @all: targets; diff --git a/contrib/bc/compile_flags.txt b/contrib/bc/compile_flags.txt index 3324798013c6..64af9a35e75e 100644 --- a/contrib/bc/compile_flags.txt +++ b/contrib/bc/compile_flags.txt @@ -1,6 +1,9 @@ -Weverything -pedantic -Wno-unsafe-buffer-usage +-Wno-pre-c11-compat +-Wno-unknown-warning-option +-Wno-switch-default -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -D_BSD_SOURCE diff --git a/contrib/bc/configure.sh b/contrib/bc/configure.sh index 442165d15693..92ff45cca84a 100755 --- a/contrib/bc/configure.sh +++ b/contrib/bc/configure.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -55,7 +55,7 @@ usage() { printf ' %s [-a|-bD|-dB|-c] [-CeEfgGHilmMNPrtTvz] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\\\n' "$script" printf ' [-s SETTING] [-S SETTING] [-p TYPE]\n' printf ' %s \\\n' "$script" - printf ' [--library|--bc-only --disable-dc|--dc-only --disable-bc|--coverage] \\\n' + printf ' [--library|--bc-only --disable-dc|--dc-only --disable-bc] \\\n' printf ' [--force --debug --disable-extra-math --disable-generated-tests] \\\n' printf ' [--disable-history --disable-man-pages --disable-nls --disable-strip] \\\n' printf ' [--enable-editline] [--enable-readline] [--enable-internal-history] \\\n' @@ -74,7 +74,7 @@ usage() { printf '\n' printf ' -a, --library\n' printf ' Build the libbcl instead of the programs. This is meant to be used with\n' - printf ' Other software like programming languages that want to make use of the\n' + printf ' other software like programming languages that want to make use of the\n' printf ' parsing and math capabilities. This option will install headers using\n' printf ' `make install`.\n' printf ' -b, --bc-only\n' @@ -83,10 +83,6 @@ usage() { printf ' -B, --disable-bc\n' printf ' Disable bc. It is an error if "-b", "--bc-only", "-D", or "--disable-dc"\n' printf ' are specified too.\n' - printf ' -c, --coverage\n' - printf ' Generate test coverage code. Requires gcov and gcovr.\n' - printf ' It is an error if either "-b" ("-D") or "-d" ("-B") is specified.\n' - printf ' Requires a compiler that use gcc-compatible coverage options\n' printf ' -C, --disable-clean\n' printf ' Disable the clean that configure.sh does before configure.\n' printf ' -d, --dc-only\n' @@ -133,8 +129,6 @@ usage() { printf ' Installs all locales, regardless of how many are on the system. This\n' printf ' option is useful for package maintainers who want to make sure that\n' printf ' a package contains all of the locales that end users might need.\n' - printf ' -m, --enable-memcheck\n' - printf ' Enable memcheck mode, to ensure no memory leaks. For development only.\n' printf ' -M, --disable-man-pages\n' printf ' Disable installing manpages.\n' printf ' -N, --disable-nls\n' @@ -172,17 +166,9 @@ usage() { printf ' Set the default named by SETTING to off. See below for possible values\n' printf ' for SETTING. For multiple instances of the -s or -S for the the same\n' printf ' setting, the last one is used.\n' - printf ' -t, --enable-test-timing\n' - printf ' Enable the timing of tests. This is for development only.\n' printf ' -T, --disable-strip\n' printf ' Disable stripping symbols from the compiled binary or binaries.\n' printf ' Stripping symbols only happens when debug mode is off.\n' - printf ' -v, --enable-valgrind\n' - printf ' Enable a build appropriate for valgrind. For development only.\n' - printf ' -z, --enable-fuzz-mode\n' - printf ' Enable fuzzing mode. THIS IS FOR DEVELOPMENT ONLY.\n' - printf ' -Z, --enable-ossfuzz-mode\n' - printf ' Enable fuzzing mode for OSS-Fuzz. THIS IS FOR DEVELOPMENT ONLY.\n' printf ' --prefix PREFIX\n' printf ' The prefix to install to. Overrides "$PREFIX" if it exists.\n' printf ' If PREFIX is "/usr", install path will be "/usr/bin".\n' @@ -254,12 +240,12 @@ usage() { printf ' path (or contain one). This is treated the same as the POSIX\n' printf ' definition of $NLSPATH (see POSIX environment variables for\n' printf ' more information). Default is "/usr/share/locale/%%L/%%N".\n' - printf ' PC_PATH The location to install pkg-config files to. Must be an\n' + printf ' PC_PATH The location to install pkg-config files to. Must be a\n' printf ' path or contain one. Default is the first path given by the\n' printf ' output of `pkg-config --variable=pc_path pkg-config`.\n' printf ' EXECSUFFIX The suffix to append to the executable names, used to not\n' printf ' interfere with other installed bc executables. Default is "".\n' - printf ' EXECPREFIX The prefix to append to the executable names, used to not\n' + printf ' EXECPREFIX The prefix to prepend to the executable names, used to not\n' printf ' interfere with other installed bc executables. Default is "".\n' printf ' DESTDIR For package creation. Default is "". If it is empty when\n' printf ' `%s` is run, it can also be passed to `make install`\n' "$script" @@ -482,7 +468,7 @@ find_src_files() { } # This function generates a list of files to go into the Makefile. It generates -# the list of object files, as well as the list of test coverage files. +# the list of object files. # # @param contents The contents of the Makefile template to put the list of # files into. @@ -503,8 +489,6 @@ gen_file_list() { _gen_file_list_needle_src="SRC" _gen_file_list_needle_obj="OBJ" - _gen_file_list_needle_gcda="GCDA" - _gen_file_list_needle_gcno="GCNO" _gen_file_list_replacement=$(find_src_files $_gen_file_list_unneeded | tr '\n' ' ') _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ @@ -521,151 +505,9 @@ gen_file_list() { _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ "$_gen_file_list_needle_obj" "$_gen_file_list_replacement") - _gen_file_list_replacement=$(replace_exts "$_gen_file_list_replacement" "o" "gcda") - _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ - "$_gen_file_list_needle_gcda" "$_gen_file_list_replacement") - - _gen_file_list_replacement=$(replace_exts "$_gen_file_list_replacement" "gcda" "gcno") - _gen_file_list_contents=$(replace "$_gen_file_list_contents" \ - "$_gen_file_list_needle_gcno" "$_gen_file_list_replacement") - printf '%s\n' "$_gen_file_list_contents" } -# Generates the proper test targets for each test to have its own target. This -# allows `make test` to run in parallel. -# -# @param name Which calculator to generate tests for. -# @param extra_math An integer that, if non-zero, activates extra math tests. -# @param time_tests An integer that, if non-zero, tells the test suite to time -# the execution of each test. -gen_std_tests() { - - _gen_std_tests_name="$1" - shift - - _gen_std_tests_extra_math="$1" - shift - - _gen_std_tests_time_tests="$1" - shift - - _gen_std_tests_extra_required=$(cat "$scriptdir/tests/extra_required.txt") - - for _gen_std_tests_t in $(cat "$scriptdir/tests/$_gen_std_tests_name/all.txt"); do - - if [ "$_gen_std_tests_extra_math" -eq 0 ]; then - - if [ -z "${_gen_std_tests_extra_required##*$_gen_std_tests_t*}" ]; then - printf 'test_%s_%s:\n\t@printf "Skipping %s %s\\n"\n\n' \ - "$_gen_std_tests_name" "$_gen_std_tests_t" "$_gen_std_tests_name" \ - "$_gen_std_tests_t" >> "Makefile" - continue - fi - - fi - - printf 'test_%s_%s:\n\t@export BC_TEST_OUTPUT_DIR="%s/tests"; sh $(TESTSDIR)/test.sh %s %s %s %s %s\n\n' \ - "$_gen_std_tests_name" "$_gen_std_tests_t" "$builddir" "$_gen_std_tests_name" \ - "$_gen_std_tests_t" "$generate_tests" "$time_tests" \ - "$*" >> "Makefile" - - done -} - -# Generates a list of test targets that will be used as prerequisites for other -# targets. -# -# @param name The name of the calculator to generate test targets for. -gen_std_test_targets() { - - _gen_std_test_targets_name="$1" - shift - - _gen_std_test_targets_tests=$(cat "$scriptdir/tests/${_gen_std_test_targets_name}/all.txt") - - for _gen_std_test_targets_t in $_gen_std_test_targets_tests; do - printf ' test_%s_%s' "$_gen_std_test_targets_name" "$_gen_std_test_targets_t" - done - - printf '\n' -} - -# Generates the proper test targets for each error test to have its own target. -# This allows `make test_bc_errors` and `make test_dc_errors` to run in -# parallel. -# -# @param name Which calculator to generate tests for. -gen_err_tests() { - - _gen_err_tests_name="$1" - shift - - _gen_err_tests_fs=$(ls "$scriptdir/tests/$_gen_err_tests_name/errors/") - - for _gen_err_tests_t in $_gen_err_tests_fs; do - - printf 'test_%s_error_%s:\n\t@export BC_TEST_OUTPUT_DIR="%s/tests"; sh $(TESTSDIR)/error.sh %s %s %s %s\n\n' \ - "$_gen_err_tests_name" "$_gen_err_tests_t" "$builddir" "$_gen_err_tests_name" \ - "$_gen_err_tests_t" "$problematic_tests" "$*" >> "Makefile" - - done - -} - -# Generates a list of error test targets that will be used as prerequisites for -# other targets. -# -# @param name The name of the calculator to generate test targets for. -gen_err_test_targets() { - - _gen_err_test_targets_name="$1" - shift - - _gen_err_test_targets_tests=$(ls "$scriptdir/tests/$_gen_err_test_targets_name/errors/") - - for _gen_err_test_targets_t in $_gen_err_test_targets_tests; do - printf ' test_%s_error_%s' "$_gen_err_test_targets_name" "$_gen_err_test_targets_t" - done - - printf '\n' -} - -# Generates the proper script test targets for each script test to have its own -# target. This allows `make test` to run in parallel. -# -# @param name Which calculator to generate tests for. -# @param extra_math An integer that, if non-zero, activates extra math tests. -# @param generate An integer that, if non-zero, activates generated tests. -# @param time_tests An integer that, if non-zero, tells the test suite to time -# the execution of each test. -gen_script_tests() { - - _gen_script_tests_name="$1" - shift - - _gen_script_tests_extra_math="$1" - shift - - _gen_script_tests_generate="$1" - shift - - _gen_script_tests_time="$1" - shift - - _gen_script_tests_tests=$(cat "$scriptdir/tests/$_gen_script_tests_name/scripts/all.txt") - - for _gen_script_tests_f in $_gen_script_tests_tests; do - - _gen_script_tests_b=$(basename "$_gen_script_tests_f" ".${_gen_script_tests_name}") - - printf 'test_%s_script_%s:\n\t@export BC_TEST_OUTPUT_DIR="%s/tests"; sh $(TESTSDIR)/script.sh %s %s %s 1 %s %s %s\n\n' \ - "$_gen_script_tests_name" "$_gen_script_tests_b" "$builddir" "$_gen_script_tests_name" \ - "$_gen_script_tests_f" "$_gen_script_tests_extra_math" "$_gen_script_tests_generate" \ - "$_gen_script_tests_time" "$*" >> "Makefile" - done -} - set_default() { _set_default_on="$1" @@ -710,7 +552,6 @@ predefined_build() { BSD) bc_only=0 dc_only=0 - coverage=0 debug=0 optimization="3" hist=1 @@ -723,11 +564,6 @@ predefined_build() { strip_bin=1 all_locales=0 library=0 - fuzz=0 - ossfuzz=0 - time_tests=0 - vg=0 - memcheck=0 clean=1 bc_default_banner=0 bc_default_sigint_reset=1 @@ -744,7 +580,6 @@ predefined_build() { GNU) bc_only=0 dc_only=0 - coverage=0 debug=0 optimization="3" hist=1 @@ -757,11 +592,6 @@ predefined_build() { strip_bin=1 all_locales=0 library=0 - fuzz=0 - ossfuzz=0 - time_tests=0 - vg=0 - memcheck=0 clean=1 bc_default_banner=1 bc_default_sigint_reset=1 @@ -777,10 +607,10 @@ predefined_build() { GDH) CFLAGS="-Weverything -Wno-padded -Wno-unsafe-buffer-usage -Wno-poison-system-directories" - CFLAGS="$CFLAGS -Wno-switch-default -Werror -pedantic -std=c11" + CFLAGS="$CFLAGS -Wno-unknown-warning-option -Wno-switch-default -Wno-pre-c11-compat" + CFLAGS="$CFLAGS -Werror -pedantic -std=c11" bc_only=0 dc_only=0 - coverage=0 debug=0 optimization="3" hist=1 @@ -793,11 +623,6 @@ predefined_build() { strip_bin=1 all_locales=0 library=0 - fuzz=0 - ossfuzz=0 - time_tests=0 - vg=0 - memcheck=0 clean=1 bc_default_banner=1 bc_default_sigint_reset=1 @@ -813,10 +638,10 @@ predefined_build() { DBG) CFLAGS="-Weverything -Wno-padded -Wno-unsafe-buffer-usage -Wno-poison-system-directories" - CFLAGS="$CFLAGS -Wno-switch-default -Werror -pedantic -std=c11" + CFLAGS="$CFLAGS -Wno-unknown-warning-option -Wno-switch-default -Wno-pre-c11-compat" + CFLAGS="$CFLAGS -Werror -pedantic -std=c11" bc_only=0 dc_only=0 - coverage=0 debug=1 optimization="0" hist=1 @@ -829,11 +654,6 @@ predefined_build() { strip_bin=1 all_locales=0 library=0 - fuzz=0 - ossfuzz=0 - time_tests=0 - vg=0 - memcheck=1 clean=1 bc_default_banner=1 bc_default_sigint_reset=1 @@ -852,36 +672,12 @@ predefined_build() { esac } -# Generates a list of script test targets that will be used as prerequisites for -# other targets. -# -# @param name The name of the calculator to generate script test targets for. -gen_script_test_targets() { - - _gen_script_test_targets_name="$1" - shift - - _gen_script_test_targets_tests=$(cat "$scriptdir/tests/$_gen_script_test_targets_name/scripts/all.txt") - - for _gen_script_test_targets_f in $_gen_script_test_targets_tests; do - _gen_script_test_targets_b=$(basename "$_gen_script_test_targets_f" \ - ".$_gen_script_test_targets_name") - printf ' test_%s_script_%s' "$_gen_script_test_targets_name" \ - "$_gen_script_test_targets_b" - done - - printf '\n' -} - # This is a list of defaults, but it is also the list of possible options for # users to change. # -# The development options are: force (force options even if they fail), valgrind -# (build in a way suitable for valgrind testing), memcheck (same as valgrind), -# and fuzzing (build in a way suitable for fuzzing). +# The development options are: force (force options even if they fail). bc_only=0 dc_only=0 -coverage=0 karatsuba_len=32 debug=0 hist=1 @@ -895,11 +691,6 @@ force=0 strip_bin=1 all_locales=0 library=0 -fuzz=0 -ossfuzz=0 -time_tests=0 -vg=0 -memcheck=0 clean=1 problematic_tests=1 @@ -920,13 +711,12 @@ dc_default_digit_clamp=0 # getopts is a POSIX utility, but it cannot handle long options. Thus, the # handling of long options is done by hand, and that's the reason that short and # long options cannot be mixed. -while getopts "abBcdDeEfgGhHik:lMmNO:p:PrS:s:tTvzZ-" opt; do +while getopts "abBcdDeEfgGhHik:lMNO:p:PrS:s:T-" opt; do case "$opt" in a) library=1 ;; b) bc_only=1 ;; B) dc_only=1 ;; - c) coverage=1 ;; C) clean=0 ;; d) dc_only=1 ;; D) bc_only=1 ;; @@ -940,7 +730,6 @@ while getopts "abBcdDeEfgGhHik:lMmNO:p:PrS:s:tTvzZ-" opt; do i) hist_impl="internal" ;; k) karatsuba_len="$OPTARG" ;; l) all_locales=1 ;; - m) memcheck=1 ;; M) install_manpages=0 ;; N) nls=0 ;; O) optimization="$OPTARG" ;; @@ -949,11 +738,7 @@ while getopts "abBcdDeEfgGhHik:lMmNO:p:PrS:s:tTvzZ-" opt; do r) hist_impl="readline" ;; S) set_default 0 "$OPTARG" ;; s) set_default 1 "$OPTARG" ;; - t) time_tests=1 ;; T) strip_bin=0 ;; - v) vg=1 ;; - z) fuzz=1 ;; - Z) ossfuzz=1 ;; -) arg="$1" arg="${arg#--}" @@ -963,7 +748,6 @@ while getopts "abBcdDeEfgGhHik:lMmNO:p:PrS:s:tTvzZ-" opt; do library) library=1 ;; bc-only) bc_only=1 ;; dc-only) dc_only=1 ;; - coverage) coverage=1 ;; debug) debug=1 ;; force) force=1 ;; prefix=?*) PREFIX="$LONG_OPTARG" ;; @@ -1077,27 +861,20 @@ while getopts "abBcdDeEfgGhHik:lMmNO:p:PrS:s:tTvzZ-" opt; do enable-editline) hist_impl="editline" ;; enable-readline) hist_impl="readline" ;; enable-internal-history) hist_impl="internal" ;; - enable-test-timing) time_tests=1 ;; - enable-valgrind) vg=1 ;; - enable-fuzz-mode) fuzz=1 ;; - enable-ossfuzz-mode) ossfuzz=1 ;; - enable-memcheck) memcheck=1 ;; install-all-locales) all_locales=1 ;; - help* | bc-only* | dc-only* | coverage* | debug*) + help* | bc-only* | dc-only* | debug*) usage "No arg allowed for --$arg option" ;; disable-bc* | disable-dc* | disable-clean*) usage "No arg allowed for --$arg option" ;; disable-extra-math*) usage "No arg allowed for --$arg option" ;; - disable-generated-tests* | disable-history*) + disable-history*) usage "No arg allowed for --$arg option" ;; disable-man-pages* | disable-nls* | disable-strip*) usage "No arg allowed for --$arg option" ;; disable-problematic-tests*) usage "No arg allowed for --$arg option" ;; - enable-fuzz-mode* | enable-test-timing* | enable-valgrind*) - usage "No arg allowed for --$arg option" ;; - enable-memcheck* | install-all-locales*) + install-all-locales*) usage "No arg allowed for --$arg option" ;; enable-editline* | enable-readline*) usage "No arg allowed for --$arg option" ;; @@ -1221,33 +998,7 @@ link="@printf 'No link necessary\\\\n'" main_exec="BC" executable="BC_EXEC" -tests="test_bc timeconst test_dc" - -bc_test="@export BC_TEST_OUTPUT_DIR=\"$builddir/tests\"; \$(TESTSDIR)/all.sh bc $extra_math 1 $generate_tests $problematic_tests $time_tests \$(BC_EXEC)" -bc_test_np="@export BC_TEST_OUTPUT_DIR=\"$builddir/tests\"; \$(TESTSDIR)/all.sh -n bc $extra_math 1 $generate_tests $problematic_tests $time_tests \$(BC_EXEC)" -dc_test="@export BC_TEST_OUTPUT_DIR=\"$builddir/tests\"; \$(TESTSDIR)/all.sh dc $extra_math 1 $generate_tests $problematic_tests $time_tests \$(DC_EXEC)" -dc_test_np="@export BC_TEST_OUTPUT_DIR=\"$builddir/tests\"; \$(TESTSDIR)/all.sh -n dc $extra_math 1 $generate_tests $problematic_tests $time_tests \$(DC_EXEC)" - -timeconst="@export BC_TEST_OUTPUT_DIR=\"$builddir/tests\"; \$(TESTSDIR)/bc/timeconst.sh \$(TESTSDIR)/bc/scripts/timeconst.bc \$(BC_EXEC)" - -# In order to have cleanup at exit, we need to be in -# debug mode, so don't run valgrind without that. -if [ "$vg" -ne 0 ]; then - debug=1 - bc_test_exec='valgrind $(VALGRIND_ARGS) $(BC_EXEC)' - dc_test_exec='valgrind $(VALGRIND_ARGS) $(DC_EXEC)' - bcl_test_exec='valgrind $(VALGRIND_ARGS) $(BCL_TEST)' -else - bc_test_exec='$(BC_EXEC)' - dc_test_exec='$(DC_EXEC)' - bcl_test_exec='$(BCL_TEST)' -fi - -test_bc_history_prereqs="test_bc_history_all" -test_dc_history_prereqs="test_dc_history_all" - karatsuba="@printf 'karatsuba cannot be run because one of bc or dc is not built\\\\n'" -karatsuba_test="@printf 'karatsuba cannot be run because one of bc or dc is not built\\\\n'" bc_lib="\$(GEN_DIR)/lib.o" bc_help="\$(GEN_DIR)/bc_help.o" @@ -1274,9 +1025,6 @@ if [ "$library" -ne 0 ]; then default_target_prereqs="\$(BIN) \$(OBJ)" default_target_cmd="ar -r -cu \$(LIBBC) \$(OBJ)" default_target="\$(LIBBC)" - tests="test_library" - test_bc_history_prereqs=" test_bc_history_skip" - test_dc_history_prereqs=" test_dc_history_skip" install_prereqs=" install_library" uninstall_prereqs=" uninstall_library" @@ -1292,10 +1040,6 @@ elif [ "$bc_only" -eq 1 ]; then executables="bc" - dc_test="@printf 'No dc tests to run\\\\n'" - dc_test_np="@printf 'No dc tests to run\\\\n'" - test_dc_history_prereqs=" test_dc_history_skip" - install_prereqs=" install_execs" install_man_prereqs=" install_bc_manpage" uninstall_prereqs=" uninstall_bc" @@ -1303,7 +1047,6 @@ elif [ "$bc_only" -eq 1 ]; then default_target="\$(BC_EXEC)" second_target="\$(DC_EXEC)" - tests="test_bc timeconst" elif [ "$dc_only" -eq 1 ]; then @@ -1318,58 +1061,11 @@ elif [ "$dc_only" -eq 1 ]; then main_exec="DC" executable="DC_EXEC" - bc_test="@printf 'No bc tests to run\\\\n'" - bc_test_np="@printf 'No bc tests to run\\\\n'" - test_bc_history_prereqs=" test_bc_history_skip" - - timeconst="@printf 'timeconst cannot be run because bc is not built\\\\n'" - install_prereqs=" install_execs" install_man_prereqs=" install_dc_manpage" uninstall_prereqs=" uninstall_dc" uninstall_man_prereqs=" uninstall_dc_manpage" - tests="test_dc" - -elif [ "$ossfuzz" -eq 1 ]; then - - if [ "$bc_only" -ne 0 ] || [ "$dc_only" -ne 0 ]; then - usage "An OSS-Fuzz build must build both fuzzers." - fi - - bc=1 - dc=1 - - # Expressions *cannot* exit in an OSS-Fuzz build. - bc_default_expr_exit=0 - dc_default_expr_exit=0 - - executables="bc_fuzzer and dc_fuzzer" - - karatsuba="@\$(KARATSUBA) 30 0 \$(BC_EXEC)" - karatsuba_test="@\$(KARATSUBA) 1 100 \$(BC_EXEC)" - - if [ "$library" -eq 0 ]; then - install_prereqs=" install_execs" - install_man_prereqs=" install_bc_manpage install_dc_manpage" - uninstall_prereqs=" uninstall_bc uninstall_dc" - uninstall_man_prereqs=" uninstall_bc_manpage uninstall_dc_manpage" - else - install_prereqs=" install_library install_bcl_header" - install_man_prereqs=" install_bcl_manpage" - uninstall_prereqs=" uninstall_library uninstall_bcl_header" - uninstall_man_prereqs=" uninstall_bcl_manpage" - tests="test_library" - fi - - second_target_prereqs="src/bc_fuzzer.o $default_target_prereqs" - default_target_prereqs="\$(BC_FUZZER) src/dc_fuzzer.o $default_target_prereqs" - default_target_cmd="\$(CXX) \$(CFLAGS) src/dc_fuzzer.o \$(LIB_FUZZING_ENGINE) \$(OBJS) \$(LDFLAGS) -o \$(DC_FUZZER) \&\& ln -sf ./dc_fuzzer_c \$(DC_FUZZER_C)" - second_target_cmd="\$(CXX) \$(CFLAGS) src/bc_fuzzer.o \$(LIB_FUZZING_ENGINE) \$(OBJS) \$(LDFLAGS) -o \$(BC_FUZZER) \&\& ln -sf ./bc_fuzzer_c \$(BC_FUZZER_C)" - - default_target="\$(DC_FUZZER) \$(DC_FUZZER_C)" - second_target="\$(BC_FUZZER) \$(BC_FUZZER_C)" - else bc=1 @@ -1378,7 +1074,6 @@ else executables="bc and dc" karatsuba="@\$(KARATSUBA) 30 0 \$(BC_EXEC)" - karatsuba_test="@\$(KARATSUBA) 1 100 \$(BC_EXEC)" if [ "$library" -eq 0 ]; then install_prereqs=" install_execs" @@ -1390,7 +1085,6 @@ else install_man_prereqs=" install_bcl_manpage" uninstall_prereqs=" uninstall_library uninstall_bcl_header" uninstall_man_prereqs=" uninstall_bcl_manpage" - tests="test_library" fi second_target_prereqs="$default_target_prereqs" @@ -1399,18 +1093,6 @@ else fi -if [ "$fuzz" -ne 0 ] && [ "$ossfuzz" -ne 0 ]; then - usage "Fuzzing mode and OSS-Fuzz mode are mutually exclusive" -fi - -# We need specific stuff for fuzzing. -if [ "$fuzz" -ne 0 ] || [ "$ossfuzz" -ne 0 ]; then - debug=1 - hist=0 - nls=0 - optimization="3" -fi - # This sets some necessary things for debug mode. if [ "$debug" -eq 1 ]; then @@ -1429,26 +1111,6 @@ if [ -n "$optimization" ]; then CFLAGS="-O$optimization $CFLAGS" fi -# Set test coverage defaults. -if [ "$coverage" -eq 1 ]; then - - if [ "$bc_only" -eq 1 ] || [ "$dc_only" -eq 1 ]; then - usage "Can only specify -c without -b or -d" - fi - - CFLAGS="-fprofile-arcs -ftest-coverage -g -O0 $CFLAGS" - CPPFLAGS="-DNDEBUG $CPPFLAGS" - - COVERAGE_OUTPUT="@gcov -pabcdf \$(GCDA) \$(BC_GCDA) \$(DC_GCDA) \$(HISTORY_GCDA) \$(RAND_GCDA)" - COVERAGE_OUTPUT="$COVERAGE_OUTPUT;\$(RM) -f \$(GEN)*.gc*" - COVERAGE_OUTPUT="$COVERAGE_OUTPUT;gcovr --exclude-unreachable-branches --exclude-throw-branches --html-details --output index.html" - COVERAGE_PREREQS=" test coverage_output" - -else - COVERAGE_OUTPUT="@printf 'Coverage not generated\\\\n'" - COVERAGE_PREREQS="" -fi - # Set some defaults. if [ -z "${DESTDIR+set}" ]; then destdir="" @@ -1567,7 +1229,7 @@ if [ "$nls" -ne 0 ]; then printf 'NLS works.\n\n' printf 'Testing gencat...\n' - gencat "./en_US.cat" "$scriptdir/locales/en_US.msg" > /dev/null + gencat "./en_US.cat" "$scriptdir/locales/en_US.msg" 2>&1 err="$?" @@ -1672,26 +1334,10 @@ else fi -# We have to disable the history tests if it is disabled or valgrind is on. Or -# if we are using editline or readline. -if [ "$hist" -eq 0 ] || [ "$vg" -ne 0 ]; then - test_bc_history_prereqs=" test_bc_history_skip" - test_dc_history_prereqs=" test_dc_history_skip" - history_tests="@printf 'Skipping history tests...\\\\n'" +if [ "$hist" -eq 0 ]; then CFLAGS="$CFLAGS -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0" else - if [ "$editline" -eq 0 ] && [ "$readline" -eq 0 ]; then - history_tests="@printf '\$(TEST_STARS)\\\\n\\\\nRunning history tests...\\\\n\\\\n'" - history_tests="$history_tests \&\& \$(TESTSDIR)/history.sh bc -a \&\&" - history_tests="$history_tests \$(TESTSDIR)/history.sh dc -a \&\& printf" - history_tests="$history_tests '\\\\nAll history tests passed.\\\\n\\\\n\$(TEST_STARS)\\\\n'" - else - test_bc_history_prereqs=" test_bc_history_skip" - test_dc_history_prereqs=" test_dc_history_skip" - history_tests="@printf 'Skipping history tests...\\\\n'" - fi - # We are also setting the CFLAGS and LDFLAGS here. if [ "$editline" -ne 0 ]; then LDFLAGS="$LDFLAGS -ledit" @@ -1795,7 +1441,7 @@ GEN_DIR="$scriptdir/gen" # `gen/strgen.sh` is used. GEN="strgen" GEN_EXEC_TARGET="\$(HOSTCC) -DBC_ENABLE_AFL=0 -DBC_ENABLE_OSSFUZZ=0 -I$scriptdir/include/ \$(HOSTCFLAGS) -o \$(GEN_EXEC) \$(GEN_C)" -CLEAN_PREREQS=" clean_gen clean_coverage" +CLEAN_PREREQS=" clean_gen" if [ -z "${GEN_HOST+set}" ]; then GEN_HOST=1 @@ -1803,7 +1449,6 @@ else if [ "$GEN_HOST" -eq 0 ]; then GEN="strgen.sh" GEN_EXEC_TARGET="@printf 'Do not need to build gen/strgen.c\\\\n'" - CLEAN_PREREQS=" clean_coverage" fi fi @@ -1848,9 +1493,7 @@ else headers="$headers \$(DC_HEADERS)" fi -# This convoluted mess does pull the version out. If you change the format of -# include/version.h, you may have to change this line. -version=$(cat "$scriptdir/include/version.h" | grep "VERSION " - | awk '{ print $3 }' -) +version=$(cat "$scriptdir/VERSION.txt" | head -n1) if [ "$library" -ne 0 ]; then @@ -1880,14 +1523,6 @@ if [ "$library" -ne 0 ]; then fi -elif [ "$ossfuzz" -ne 0 ]; then - - unneeded="$unneeded library.c main.c" - - PC_PATH="" - pkg_config_install="" - pkg_config_uninstall="" - else unneeded="$unneeded library.c" @@ -1909,10 +1544,6 @@ if [ "$manpage_args" = "" ]; then manpage_args="A" fi -if [ "$vg" -ne 0 ] || [ "$ossfuzz" -ne 0 ]; then - memcheck=1 -fi - if [ "$bc_default_prompt" = "" ]; then bc_default_prompt="$bc_default_tty_mode" fi @@ -1921,14 +1552,6 @@ if [ "$dc_default_prompt" = "" ]; then dc_default_prompt="$dc_default_tty_mode" fi -# Generate the test targets and prerequisites. -bc_tests=$(gen_std_test_targets bc) -bc_script_tests=$(gen_script_test_targets bc) -bc_err_tests=$(gen_err_test_targets bc) -dc_tests=$(gen_std_test_targets dc) -dc_script_tests=$(gen_script_test_targets dc) -dc_err_tests=$(gen_err_test_targets dc) - printf 'unneeded: %s\n' "$unneeded" # Print out the values; this is for debugging. @@ -1949,7 +1572,6 @@ printf 'BC_ENABLE_LIBRARY=%s\n\n' "$library" printf 'BC_ENABLE_HISTORY=%s\n' "$hist" printf 'BC_ENABLE_EXTRA_MATH=%s\n' "$extra_math" printf 'BC_ENABLE_NLS=%s\n\n' "$nls" -printf 'BC_ENABLE_AFL=%s\n' "$fuzz" printf '\n' printf 'BC_NUM_KARATSUBA_LEN=%s\n' "$karatsuba_len" printf '\n' @@ -2046,26 +1668,11 @@ contents=$(replace "$contents" "BUILDDIR" "$builddir") contents=$(replace "$contents" "HEADERS" "$headers") +contents=$(replace "$contents" "VERSION" "$version") + contents=$(replace "$contents" "BC_ENABLED" "$bc") contents=$(replace "$contents" "DC_ENABLED" "$dc") -contents=$(replace "$contents" "BC_ALL_TESTS" "$bc_test") -contents=$(replace "$contents" "BC_ALL_TESTS_NP" "$bc_test_np") -contents=$(replace "$contents" "BC_TESTS" "$bc_tests") -contents=$(replace "$contents" "BC_SCRIPT_TESTS" "$bc_script_tests") -contents=$(replace "$contents" "BC_ERROR_TESTS" "$bc_err_tests") -contents=$(replace "$contents" "BC_TEST_EXEC" "$bc_test_exec") -contents=$(replace "$contents" "TIMECONST_ALL_TESTS" "$timeconst") - -contents=$(replace "$contents" "DC_ALL_TESTS" "$dc_test") -contents=$(replace "$contents" "DC_ALL_TESTS_NP" "$dc_test_np") -contents=$(replace "$contents" "DC_TESTS" "$dc_tests") -contents=$(replace "$contents" "DC_SCRIPT_TESTS" "$dc_script_tests") -contents=$(replace "$contents" "DC_ERROR_TESTS" "$dc_err_tests") -contents=$(replace "$contents" "DC_TEST_EXEC" "$dc_test_exec") - -contents=$(replace "$contents" "BCL_TEST_EXEC" "$bcl_test_exec") - contents=$(replace "$contents" "BUILD_TYPE" "$manpage_args") contents=$(replace "$contents" "EXCLUDE_EXTRA_MATH" "$exclude_extra_math") @@ -2073,10 +1680,6 @@ contents=$(replace "$contents" "LIBRARY" "$library") contents=$(replace "$contents" "HISTORY" "$hist") contents=$(replace "$contents" "EXTRA_MATH" "$extra_math") contents=$(replace "$contents" "NLS" "$nls") -contents=$(replace "$contents" "FUZZ" "$fuzz") -contents=$(replace "$contents" "OSSFUZZ" "$ossfuzz") -contents=$(replace "$contents" "MEMCHECK" "$memcheck") -contents=$(replace "$contents" "LIB_FUZZING_ENGINE" "$LIB_FUZZING_ENGINE") contents=$(replace "$contents" "BC_LIB_O" "$bc_lib") contents=$(replace "$contents" "BC_HELP_O" "$bc_help") @@ -2099,8 +1702,6 @@ contents=$(replace "$contents" "CPPFLAGS" "$CPPFLAGS") contents=$(replace "$contents" "LDFLAGS" "$LDFLAGS") contents=$(replace "$contents" "CC" "$CC") contents=$(replace "$contents" "HOSTCC" "$HOSTCC") -contents=$(replace "$contents" "COVERAGE_OUTPUT" "$COVERAGE_OUTPUT") -contents=$(replace "$contents" "COVERAGE_PREREQS" "$COVERAGE_PREREQS") contents=$(replace "$contents" "INSTALL_PREREQS" "$install_prereqs") contents=$(replace "$contents" "INSTALL_MAN_PREREQS" "$install_man_prereqs") contents=$(replace "$contents" "INSTALL_LOCALES" "$install_locales") @@ -2126,22 +1727,14 @@ contents=$(replace "$contents" "BC_EXEC_CMD" "$bc_exec_cmd") contents=$(replace "$contents" "DC_EXEC_PREREQ" "$dc_exec_prereq") contents=$(replace "$contents" "DC_EXEC_CMD" "$dc_exec_cmd") +contents=$(replace "$contents" "GENERATE_TESTS" "$generate_tests") +contents=$(replace "$contents" "PROBLEMATIC_TESTS" "$problematic_tests") + contents=$(replace "$contents" "EXECUTABLES" "$executables") contents=$(replace "$contents" "MAIN_EXEC" "$main_exec") contents=$(replace "$contents" "EXEC" "$executable") -contents=$(replace "$contents" "TESTS" "$tests") - -contents=$(replace "$contents" "BC_HISTORY_TEST_PREREQS" "$test_bc_history_prereqs") -contents=$(replace "$contents" "DC_HISTORY_TEST_PREREQS" "$test_dc_history_prereqs") -contents=$(replace "$contents" "HISTORY_TESTS" "$history_tests") - -contents=$(replace "$contents" "VG_BC_TEST" "$vg_bc_test") -contents=$(replace "$contents" "VG_DC_TEST" "$vg_dc_test") - -contents=$(replace "$contents" "TIMECONST" "$timeconst") contents=$(replace "$contents" "KARATSUBA" "$karatsuba") -contents=$(replace "$contents" "KARATSUBA_TEST" "$karatsuba_test") contents=$(replace "$contents" "LONG_BIT_DEFINE" "$LONG_BIT_DEFINE") @@ -2169,28 +1762,6 @@ contents=$(replace "$contents" "DC_DEFAULT_DIGIT_CLAMP" "$dc_default_digit_clamp # Do the first print to the Makefile. printf '%s\n%s\n\n' "$contents" "$SRC_TARGETS" > "Makefile" -# Generate the individual test targets. -if [ "$bc" -ne 0 ]; then - gen_std_tests bc "$extra_math" "$time_tests" $bc_test_exec - gen_script_tests bc "$extra_math" "$generate_tests" "$time_tests" $bc_test_exec - gen_err_tests bc $bc_test_exec -fi - -if [ "$dc" -ne 0 ]; then - gen_std_tests dc "$extra_math" "$time_tests" $dc_test_exec - gen_script_tests dc "$extra_math" "$generate_tests" "$time_tests" $dc_test_exec - gen_err_tests dc $dc_test_exec -fi - -if [ "$ossfuzz" -ne 0 ]; then - - printf 'bc_fuzzer_c: $(BC_FUZZER)\n\tln -sf $(BC_FUZZER) bc_fuzzer_c\n' >> Makefile - printf 'bc_fuzzer_C: $(BC_FUZZER)\n\tln -sf $(BC_FUZZER) bc_fuzzer_C\n' >> Makefile - printf 'dc_fuzzer_c: $(DC_FUZZER)\n\tln -sf $(DC_FUZZER) dc_fuzzer_c\n' >> Makefile - printf 'dc_fuzzer_C: $(DC_FUZZER)\n\tln -sf $(DC_FUZZER) dc_fuzzer_C\n' >> Makefile - -fi - # Copy the correct manuals to the expected places. mkdir -p manuals cp -f "$scriptdir/manuals/bc/$manpage_args.1.md" manuals/bc.1.md diff --git a/contrib/bc/gen/bc_help.txt b/contrib/bc/gen/bc_help.txt index 489b54a185f1..ce82d2677737 100644 --- a/contrib/bc/gen/bc_help.txt +++ b/contrib/bc/gen/bc_help.txt @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -37,7 +37,7 @@ usage: %s [options] [file...] bc is a command-line, arbitrary-precision calculator with a Turing-complete language. For details, use `man %s` or see the online documentation at -https://git.gavinhoward.com/gavin/bc/src/tag/%s/manuals/bc/%s.1.md. +https://github.com/gavinhoward/bc/tree/%s/manuals/bc/%s.1.md . This bc is compatible with both the GNU bc and the POSIX bc spec. See the GNU bc manual (https://www.gnu.org/software/bc/manual/bc.html) and bc spec diff --git a/contrib/bc/gen/dc_help.txt b/contrib/bc/gen/dc_help.txt index df4ede1583a2..897ab31a8820 100644 --- a/contrib/bc/gen/dc_help.txt +++ b/contrib/bc/gen/dc_help.txt @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -37,7 +37,7 @@ usage: %s [options] [file...] dc is a reverse-polish notation command-line calculator which supports unlimited precision arithmetic. For details, use `man %s` or see the online documentation -at https://git.gavinhoward.com/gavin/bc/src/tag/%s/manuals/bc/%s.1.md. +at https://github.com/gavinhoward/bc/tree/%s/manuals/dc/%s.1.md . This dc is (mostly) compatible with the OpenBSD dc and the GNU dc. See the OpenBSD man page (http://man.openbsd.org/OpenBSD-current/man1/dc.1) and the GNU diff --git a/contrib/bc/gen/lib.bc b/contrib/bc/gen/lib.bc index 0c9389b8510d..95ba2765ddfa 100644 --- a/contrib/bc/gen/lib.bc +++ b/contrib/bc/gen/lib.bc @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/gen/lib2.bc b/contrib/bc/gen/lib2.bc index d6d9f70fe063..cc959db73ceb 100644 --- a/contrib/bc/gen/lib2.bc +++ b/contrib/bc/gen/lib2.bc @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -444,108 +444,77 @@ define void uint64(x){uintn(x,8)} define void int64(x){intn(x,8)} define void uint(x){uintn(x,ubytes(x))} define void int(x){intn(x,sbytes(x))} -define bunrev(t){ - auto a,s,m[] - s=scale - scale=0 - t=abs(t)$ - while(t!=1){ - t=divmod(t,2,m[]) - a*=2 - a+=m[0] - } - scale=s - return a -} define band(a,b){ - auto s,t,m[],n[] + auto r,p,s,m[] a=abs(a)$ b=abs(b)$ - if(b>a){ - t=b - b=a - a=t - } + r=0 + p=1 s=scale scale=0 - t=1 - while(b){ + while(a&&b) { a=divmod(a,2,m[]) - b=divmod(b,2,n[]) - t*=2 - t+=(m[0]&&n[0]) + if(m[0]){ + b=divmod(b,2,m[]) + if(m[0])r+=p + }else b/=2 + p*=2 } scale=s - return bunrev(t) + return r } define bor(a,b){ - auto s,t,m[],n[] + auto r,p,s,m[] a=abs(a)$ b=abs(b)$ - if(b>a){ - t=b - b=a - a=t - } + r=0 + p=1 s=scale scale=0 - t=1 - while(b){ - a=divmod(a,2,m[]) - b=divmod(b,2,n[]) - t*=2 - t+=(m[0]||n[0]) - } - while(a){ + while(a||b){ a=divmod(a,2,m[]) - t*=2 - t+=m[0] + if(!m[0])b=divmod(b,2,m[]) + else b/=2 + if(m[0])r+=p + p*=2 } scale=s - return bunrev(t) + return r } define bxor(a,b){ - auto s,t,m[],n[] + auto r,p,s,m[],n[] a=abs(a)$ b=abs(b)$ - if(b>a){ - t=b - b=a - a=t - } + r=0 + p=1 s=scale scale=0 - t=1 - while(b){ + while(a||b){ a=divmod(a,2,m[]) b=divmod(b,2,n[]) - t*=2 - t+=(m[0]+n[0]==1) - } - while(a){ - a=divmod(a,2,m[]) - t*=2 - t+=m[0] + if(m[0]+n[0]==1)r+=p + p*=2 } scale=s - return bunrev(t) + return r } define bshl(a,b){return abs(a)$*2^abs(b)$} define bshr(a,b){return(abs(a)$/2^abs(b)$)$} define bnotn(x,n){ - auto s,t,m[] + auto r,p,s,t,m[] s=scale scale=0 - t=2^(abs(n)$*8) - x=abs(x)$%t+t - t=1 + r=2^(abs(n)$*8) + x=abs(x)$%r+r + r=0 + p=1 while(x!=1){ x=divmod(x,2,m[]) - t*=2 - t+=!m[0] + if(!m[0])r+=p + p*=2 } scale=s - return bunrev(t) + return r } define bnot8(x){return bnotn(x,1)} define bnot16(x){return bnotn(x,2)} @@ -553,13 +522,19 @@ define bnot32(x){return bnotn(x,4)} define bnot64(x){return bnotn(x,8)} define bnot(x){return bnotn(x,ubytes(x))} define brevn(x,n){ - auto s,t,m[] + auto a,s,m[] s=scale scale=0 - t=2^(abs(n)$*8) - x=abs(x)$%t+t + a=2^(abs(n)$*8) + x=abs(x)$%a+a + a=0 + while(x!=1){ + x=divmod(x,2,m[]) + a*=2 + a+=m[0] + } scale=s - return bunrev(x) + return a } define brev8(x){return brevn(x,1)} define brev16(x){return brevn(x,2)} diff --git a/contrib/bc/gen/strgen.c b/contrib/bc/gen/strgen.c index 1394a05c4a76..996ea9b3c83a 100644 --- a/contrib/bc/gen/strgen.c +++ b/contrib/bc/gen/strgen.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -68,7 +68,7 @@ static const char* const bc_gen_ex_end = "{{ end }}"; // This is exactly what it looks like. It just slaps a simple license header on // the generated C source file. static const char* const bc_gen_header = - "// Copyright (c) 2018-2024 Gavin D. Howard and contributors.\n" + "// Copyright (c) 2018-2025 Gavin D. Howard and contributors.\n" "// Licensed under the 2-clause BSD license.\n" "// *** AUTOMATICALLY GENERATED FROM %s. DO NOT MODIFY. ***\n\n"; // clang-format on diff --git a/contrib/bc/gen/strgen.sh b/contrib/bc/gen/strgen.sh index 8542bd40ee83..683307d4fa80 100755 --- a/contrib/bc/gen/strgen.sh +++ b/contrib/bc/gen/strgen.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -96,7 +96,7 @@ if [ -n "$remove_tabs" ]; then fi cat<<EOF -// Copyright (c) 2018-2024 Gavin D. Howard and contributors. +// Copyright (c) 2018-2025 Gavin D. Howard and contributors. // Licensed under the 2-clause BSD license. // *** AUTOMATICALLY GENERATED FROM ${input}. DO NOT MODIFY. *** diff --git a/contrib/bc/include/args.h b/contrib/bc/include/args.h index 8f8f00be4630..fd9ca60c29c9 100644 --- a/contrib/bc/include/args.h +++ b/contrib/bc/include/args.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/bc.h b/contrib/bc/include/bc.h index 2213278be1da..19159c45e018 100644 --- a/contrib/bc/include/bc.h +++ b/contrib/bc/include/bc.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -265,9 +265,9 @@ bc_lex_token(BcLex* l); * @return An expression entry for bc_parse_exprs[]. */ #define BC_PARSE_EXPR_ENTRY(e1, e2, e3, e4, e5, e6, e7, e8) \ - ((UINTMAX_C(e1) << 7) | (UINTMAX_C(e2) << 6) | (UINTMAX_C(e3) << 5) | \ - (UINTMAX_C(e4) << 4) | (UINTMAX_C(e5) << 3) | (UINTMAX_C(e6) << 2) | \ - (UINTMAX_C(e7) << 1) | (UINTMAX_C(e8) << 0)) + ((UINT8_C(e1) << 7) | (UINT8_C(e2) << 6) | (UINT8_C(e3) << 5) | \ + (UINT8_C(e4) << 4) | (UINT8_C(e5) << 3) | (UINT8_C(e6) << 2) | \ + (UINT8_C(e7) << 1) | (UINT8_C(e8) << 0)) /** * Returns true if token @a i is a token that belongs in an expression. diff --git a/contrib/bc/include/bcl.h b/contrib/bc/include/bcl.h index 8e762b694f4d..a46610de47f5 100644 --- a/contrib/bc/include/bcl.h +++ b/contrib/bc/include/bcl.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/dc.h b/contrib/bc/include/dc.h index 63f5ccbd10e3..edab5605c7e7 100644 --- a/contrib/bc/include/dc.h +++ b/contrib/bc/include/dc.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/file.h b/contrib/bc/include/file.h index 86f368db11c6..d152645b1209 100644 --- a/contrib/bc/include/file.h +++ b/contrib/bc/include/file.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/history.h b/contrib/bc/include/history.h index 13f6dc6e985c..03b729707556 100644 --- a/contrib/bc/include/history.h +++ b/contrib/bc/include/history.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -120,30 +120,6 @@ typedef struct BcHistory extern const char bc_history_editrc[]; extern const size_t bc_history_editrc_len; -#ifdef __APPLE__ - -/** - * Returns true if the line is a valid line, false otherwise. - * @param line The line. - * @param len The length of the line. - * @return True if the line is valid, false otherwise. - */ -#define BC_HISTORY_INVALID_LINE(line, len) \ - ((line) == NULL && ((len) == -1 || errno == EINTR)) - -#else // __APPLE__ - -/** - * Returns true if the line is a valid line, false otherwise. - * @param line The line. - * @param len The length of the line. - * @return True if the line is valid, false otherwise. - */ -#define BC_HISTORY_INVALID_LINE(line, len) \ - ((line) == NULL && (len) == -1 && errno == EINTR) - -#endif // __APPLE__ - #else // BC_ENABLE_EDITLINE #if BC_ENABLE_READLINE diff --git a/contrib/bc/include/lang.h b/contrib/bc/include/lang.h index 6c8245139719..d0582a7d2199 100644 --- a/contrib/bc/include/lang.h +++ b/contrib/bc/include/lang.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -533,6 +533,10 @@ typedef enum BcType } BcType; #if BC_ENABLED + +/// Check if type array or array reference +#define BC_IS_ARRAY(e) (e == BC_TYPE_ARRAY || e == BC_TYPE_REF) + /// An auto variable in bc. typedef struct BcAuto { diff --git a/contrib/bc/include/lex.h b/contrib/bc/include/lex.h index d2be3c7526ef..5f97a47341df 100644 --- a/contrib/bc/include/lex.h +++ b/contrib/bc/include/lex.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/library.h b/contrib/bc/include/library.h index 9942705a5f36..db7cb1302fe8 100644 --- a/contrib/bc/include/library.h +++ b/contrib/bc/include/library.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/num.h b/contrib/bc/include/num.h index 6cead6eb3823..970873c75589 100644 --- a/contrib/bc/include/num.h +++ b/contrib/bc/include/num.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/opt.h b/contrib/bc/include/opt.h index 41058cb4e29c..a5194b34cbb8 100644 --- a/contrib/bc/include/opt.h +++ b/contrib/bc/include/opt.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/ossfuzz.h b/contrib/bc/include/ossfuzz.h index 5c12a3c9c9fb..4e233df9ab95 100644 --- a/contrib/bc/include/ossfuzz.h +++ b/contrib/bc/include/ossfuzz.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/parse.h b/contrib/bc/include/parse.h index 7f0f8768b0db..e39ea09a8aad 100644 --- a/contrib/bc/include/parse.h +++ b/contrib/bc/include/parse.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/program.h b/contrib/bc/include/program.h index e16e5c079d7d..17454057cdba 100644 --- a/contrib/bc/include/program.h +++ b/contrib/bc/include/program.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -145,6 +145,9 @@ typedef struct BcProgram #endif // BC_ENABLED + /// The number of results that have not been retired. + size_t nresults; + // The BcDig array for strmb. This uses BC_NUM_LONG_LOG10 because it is used // in bc_num_ulong2num(), which attempts to realloc, unless it is big // enough. This is big enough. @@ -207,11 +210,16 @@ typedef struct BcProgram * operands while preserving the result (which we assumed was pushed before the * actual operation). * @param p The program. - * @param nres The number of results returned by the instruction. * @param nops The number of operands used by the instruction. */ -#define bc_program_retire(p, nres, nops) \ - (bc_vec_npopAt(&(p)->results, (nops), (p)->results.len - (nres + nops))) +#define bc_program_retire(p, nops) \ + do \ + { \ + bc_vec_npopAt(&(p)->results, (nops), \ + (p)->results.len - ((p)->nresults + nops)); \ + p->nresults = 0; \ + } \ + while (0) #if DC_ENABLED diff --git a/contrib/bc/include/rand.h b/contrib/bc/include/rand.h index aee63b866cf6..f88de071b25d 100644 --- a/contrib/bc/include/rand.h +++ b/contrib/bc/include/rand.h @@ -13,7 +13,7 @@ * This code is under the following license: * * Copyright (c) 2014-2017 Melissa O'Neill and PCG Project contributors - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/contrib/bc/include/read.h b/contrib/bc/include/read.h index 62e6897635a2..c43a9980327b 100644 --- a/contrib/bc/include/read.h +++ b/contrib/bc/include/read.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/status.h b/contrib/bc/include/status.h index 203f09af628b..8e3ab9ed218b 100644 --- a/contrib/bc/include/status.h +++ b/contrib/bc/include/status.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -683,12 +683,7 @@ typedef enum BcMode #define BC_NO_SIG_EXC(vm) \ BC_LIKELY((vm)->status == (sig_atomic_t) BC_STATUS_SUCCESS && !(vm)->sig) -#ifndef _WIN32 -#define BC_SIG_INTERRUPT(vm) \ - BC_UNLIKELY((vm)->sig != 0 && (vm)->sig != SIGWINCH) -#else // _WIN32 #define BC_SIG_INTERRUPT(vm) BC_UNLIKELY((vm)->sig != 0) -#endif // _WIN32 #if BC_DEBUG diff --git a/contrib/bc/include/vector.h b/contrib/bc/include/vector.h index cad5fc2aa7c3..01b029961465 100644 --- a/contrib/bc/include/vector.h +++ b/contrib/bc/include/vector.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/include/version.h b/contrib/bc/include/version.h deleted file mode 100644 index a4fb8def5024..000000000000 --- a/contrib/bc/include/version.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * ***************************************************************************** - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * ***************************************************************************** - * - * The version of bc. - * - */ - -#ifndef BC_VERSION_H -#define BC_VERSION_H - -/// The current version. -#define VERSION 7.0.2 - -#endif // BC_VERSION_H diff --git a/contrib/bc/include/vm.h b/contrib/bc/include/vm.h index e81206b63871..86e0fe06edc1 100644 --- a/contrib/bc/include/vm.h +++ b/contrib/bc/include/vm.h @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -52,7 +52,6 @@ #endif // BC_ENABLE_NLS -#include <version.h> #include <status.h> #include <num.h> #include <lex.h> diff --git a/contrib/bc/locales/de_DE.ISO8859-1.msg b/contrib/bc/locales/de_DE.ISO8859-1.msg index 9700ab070b2c..3269b7632cc7 100644 --- a/contrib/bc/locales/de_DE.ISO8859-1.msg +++ b/contrib/bc/locales/de_DE.ISO8859-1.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/de_DE.UTF-8.msg b/contrib/bc/locales/de_DE.UTF-8.msg index 7b918fc6d1cd..7d5859584d88 100644 --- a/contrib/bc/locales/de_DE.UTF-8.msg +++ b/contrib/bc/locales/de_DE.UTF-8.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/en_US.msg b/contrib/bc/locales/en_US.msg index 4afcbcd1f813..7ae50d189b57 100644 --- a/contrib/bc/locales/en_US.msg +++ b/contrib/bc/locales/en_US.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/es_ES.ISO8859-1.msg b/contrib/bc/locales/es_ES.ISO8859-1.msg index 4d022d9bf664..a9edbfa26734 100644 --- a/contrib/bc/locales/es_ES.ISO8859-1.msg +++ b/contrib/bc/locales/es_ES.ISO8859-1.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/es_ES.UTF-8.msg b/contrib/bc/locales/es_ES.UTF-8.msg index 364cff6ee57f..25512c0862da 100644 --- a/contrib/bc/locales/es_ES.UTF-8.msg +++ b/contrib/bc/locales/es_ES.UTF-8.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/fr_FR.ISO8859-1.msg b/contrib/bc/locales/fr_FR.ISO8859-1.msg index b4b39866c96e..a3935535521c 100644 --- a/contrib/bc/locales/fr_FR.ISO8859-1.msg +++ b/contrib/bc/locales/fr_FR.ISO8859-1.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/fr_FR.UTF-8.msg b/contrib/bc/locales/fr_FR.UTF-8.msg index c3387e31ae9f..dee83c110230 100644 --- a/contrib/bc/locales/fr_FR.UTF-8.msg +++ b/contrib/bc/locales/fr_FR.UTF-8.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/ja_JP.UTF-8.msg b/contrib/bc/locales/ja_JP.UTF-8.msg index 21640eb9f1cb..5a6aac17120a 100644 --- a/contrib/bc/locales/ja_JP.UTF-8.msg +++ b/contrib/bc/locales/ja_JP.UTF-8.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/ja_JP.eucJP.msg b/contrib/bc/locales/ja_JP.eucJP.msg index 3e3b73d20f4e..3bd47e1e7d30 100644 --- a/contrib/bc/locales/ja_JP.eucJP.msg +++ b/contrib/bc/locales/ja_JP.eucJP.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/nl_NL.ISO8859-1.msg b/contrib/bc/locales/nl_NL.ISO8859-1.msg index aaf41c65b04d..4531269752a2 100644 --- a/contrib/bc/locales/nl_NL.ISO8859-1.msg +++ b/contrib/bc/locales/nl_NL.ISO8859-1.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/nl_NL.UTF-8.msg b/contrib/bc/locales/nl_NL.UTF-8.msg index 0ab0b9c3dc61..29eb3f344fba 100644 --- a/contrib/bc/locales/nl_NL.UTF-8.msg +++ b/contrib/bc/locales/nl_NL.UTF-8.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/pl_PL.ISO8859-2.msg b/contrib/bc/locales/pl_PL.ISO8859-2.msg index 5b427c808fdd..c1e2b8b5355e 100644 --- a/contrib/bc/locales/pl_PL.ISO8859-2.msg +++ b/contrib/bc/locales/pl_PL.ISO8859-2.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/pl_PL.UTF-8.msg b/contrib/bc/locales/pl_PL.UTF-8.msg index fd0f85b5f767..27cbabfc33d4 100644 --- a/contrib/bc/locales/pl_PL.UTF-8.msg +++ b/contrib/bc/locales/pl_PL.UTF-8.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/pt_PT.ISO8859-1.msg b/contrib/bc/locales/pt_PT.ISO8859-1.msg index 9b365b4a7bd1..0bec4b284f9e 100644 --- a/contrib/bc/locales/pt_PT.ISO8859-1.msg +++ b/contrib/bc/locales/pt_PT.ISO8859-1.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/pt_PT.UTF-8.msg b/contrib/bc/locales/pt_PT.UTF-8.msg index f5054a178cf4..5204e8beef40 100644 --- a/contrib/bc/locales/pt_PT.UTF-8.msg +++ b/contrib/bc/locales/pt_PT.UTF-8.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/ru_RU.CP1251.msg b/contrib/bc/locales/ru_RU.CP1251.msg index ac8957cc6aa8..3d25413b058c 100644 --- a/contrib/bc/locales/ru_RU.CP1251.msg +++ b/contrib/bc/locales/ru_RU.CP1251.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/ru_RU.CP866.msg b/contrib/bc/locales/ru_RU.CP866.msg index 763fd55a3653..6700dc6c401f 100644 --- a/contrib/bc/locales/ru_RU.CP866.msg +++ b/contrib/bc/locales/ru_RU.CP866.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/ru_RU.ISO8859-5.msg b/contrib/bc/locales/ru_RU.ISO8859-5.msg index bbb1f418c3a9..66766fbf1936 100644 --- a/contrib/bc/locales/ru_RU.ISO8859-5.msg +++ b/contrib/bc/locales/ru_RU.ISO8859-5.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/ru_RU.KOI8-R.msg b/contrib/bc/locales/ru_RU.KOI8-R.msg index d1e2bdc014d2..ecc7f03a1a93 100644 --- a/contrib/bc/locales/ru_RU.KOI8-R.msg +++ b/contrib/bc/locales/ru_RU.KOI8-R.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/ru_RU.UTF-8.msg b/contrib/bc/locales/ru_RU.UTF-8.msg index b45b3634a76b..fb796155f497 100644 --- a/contrib/bc/locales/ru_RU.UTF-8.msg +++ b/contrib/bc/locales/ru_RU.UTF-8.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/zh_CN.GB18030.msg b/contrib/bc/locales/zh_CN.GB18030.msg index 3625c5b40fdf..c01a2239f624 100644 --- a/contrib/bc/locales/zh_CN.GB18030.msg +++ b/contrib/bc/locales/zh_CN.GB18030.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/zh_CN.GB2312.msg b/contrib/bc/locales/zh_CN.GB2312.msg index 3625c5b40fdf..c01a2239f624 100644 --- a/contrib/bc/locales/zh_CN.GB2312.msg +++ b/contrib/bc/locales/zh_CN.GB2312.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/zh_CN.GBK.msg b/contrib/bc/locales/zh_CN.GBK.msg index 3625c5b40fdf..c01a2239f624 100644 --- a/contrib/bc/locales/zh_CN.GBK.msg +++ b/contrib/bc/locales/zh_CN.GBK.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/zh_CN.UTF-8.msg b/contrib/bc/locales/zh_CN.UTF-8.msg index 95813f411698..3767e45a3950 100644 --- a/contrib/bc/locales/zh_CN.UTF-8.msg +++ b/contrib/bc/locales/zh_CN.UTF-8.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/locales/zh_CN.eucCN.msg b/contrib/bc/locales/zh_CN.eucCN.msg index 3625c5b40fdf..c01a2239f624 100644 --- a/contrib/bc/locales/zh_CN.eucCN.msg +++ b/contrib/bc/locales/zh_CN.eucCN.msg @@ -1,7 +1,7 @@ $ $ $ SPDX-License-Identifier: BSD-2-Clause $ $ -$ Copyright (c) 2018-2024 Gavin D. Howard and contributors. +$ Copyright (c) 2018-2025 Gavin D. Howard and contributors. $ $ $ Redistribution and use in source and binary forms, with or without $ modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/manuals/bc/A.1 b/contrib/bc/manuals/bc/A.1 index adeb62f82e6a..9b38de7dc1bc 100644 --- a/contrib/bc/manuals/bc/A.1 +++ b/contrib/bc/manuals/bc/A.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -2109,17 +2109,6 @@ If you want to a use signed two\[cq]s complement argument, use \f[B]s2u(x)\f[R] to convert. .RE .TP -\f[B]bunrev(t)\f[R] -Assumes \f[B]t\f[R] is a bitwise\-reversed number with an extra set bit -one place more significant than the real most significant bit (which was -the least significant bit in the original number). -This number is reversed and returned without the extra set bit. -.RS -.PP -This function is used to implement other bitwise functions; it is not -meant to be used by users, but it can be. -.RE -.TP \f[B]plz(x)\f[R] If \f[B]x\f[R] is not equal to \f[B]0\f[R] and greater that \f[B]\-1\f[R] and less than \f[B]1\f[R], it is printed with a leading @@ -2943,7 +2932,7 @@ Before version \f[B]6.1.0\f[R], this bc(1) had incorrect behavior for the \f[B]quit\f[R] statement. .PP No other bugs are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHORS Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/bc/A.1.md b/contrib/bc/manuals/bc/A.1.md index e89305b1af44..73da0caa0a64 100644 --- a/contrib/bc/manuals/bc/A.1.md +++ b/contrib/bc/manuals/bc/A.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1766,16 +1766,6 @@ The extended library is a **non-portable extension**. If you want to a use signed two's complement argument, use **s2u(x)** to convert. -**bunrev(t)** - -: Assumes **t** is a bitwise-reversed number with an extra set bit one place - more significant than the real most significant bit (which was the least - significant bit in the original number). This number is reversed and - returned without the extra set bit. - - This function is used to implement other bitwise functions; it is not meant - to be used by users, but it can be. - **plz(x)** : If **x** is not equal to **0** and greater that **-1** and less than **1**, @@ -2521,7 +2511,7 @@ This bc(1) supports error messages for different locales, and thus, it supports Before version **6.1.0**, this bc(1) had incorrect behavior for the **quit** statement. -No other bugs are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +No other bugs are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHORS diff --git a/contrib/bc/manuals/bc/E.1 b/contrib/bc/manuals/bc/E.1 index e2f1b034e69a..36f402d99936 100644 --- a/contrib/bc/manuals/bc/E.1 +++ b/contrib/bc/manuals/bc/E.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1758,7 +1758,7 @@ Before version \f[B]6.1.0\f[R], this bc(1) had incorrect behavior for the \f[B]quit\f[R] statement. .PP No other bugs are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHORS Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/bc/E.1.md b/contrib/bc/manuals/bc/E.1.md index 0082caea8408..4536381f72b3 100644 --- a/contrib/bc/manuals/bc/E.1.md +++ b/contrib/bc/manuals/bc/E.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1509,7 +1509,7 @@ This bc(1) supports error messages for different locales, and thus, it supports Before version **6.1.0**, this bc(1) had incorrect behavior for the **quit** statement. -No other bugs are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +No other bugs are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHORS diff --git a/contrib/bc/manuals/bc/EH.1 b/contrib/bc/manuals/bc/EH.1 index c132a0b76a49..bf29cca9e820 100644 --- a/contrib/bc/manuals/bc/EH.1 +++ b/contrib/bc/manuals/bc/EH.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1731,7 +1731,7 @@ Before version \f[B]6.1.0\f[R], this bc(1) had incorrect behavior for the \f[B]quit\f[R] statement. .PP No other bugs are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHORS Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/bc/EH.1.md b/contrib/bc/manuals/bc/EH.1.md index 7e682058234c..27c3f46f9edc 100644 --- a/contrib/bc/manuals/bc/EH.1.md +++ b/contrib/bc/manuals/bc/EH.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1483,7 +1483,7 @@ This bc(1) supports error messages for different locales, and thus, it supports Before version **6.1.0**, this bc(1) had incorrect behavior for the **quit** statement. -No other bugs are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +No other bugs are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHORS diff --git a/contrib/bc/manuals/bc/EHN.1 b/contrib/bc/manuals/bc/EHN.1 index e3395b1cc20d..2c0a2ddc9cd9 100644 --- a/contrib/bc/manuals/bc/EHN.1 +++ b/contrib/bc/manuals/bc/EHN.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1725,7 +1725,7 @@ Before version \f[B]6.1.0\f[R], this bc(1) had incorrect behavior for the \f[B]quit\f[R] statement. .PP No other bugs are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHORS Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/bc/EHN.1.md b/contrib/bc/manuals/bc/EHN.1.md index 9578d2ab7720..eee3c9c8cb99 100644 --- a/contrib/bc/manuals/bc/EHN.1.md +++ b/contrib/bc/manuals/bc/EHN.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1475,7 +1475,7 @@ use a period (**.**) as a radix point, regardless of the value of Before version **6.1.0**, this bc(1) had incorrect behavior for the **quit** statement. -No other bugs are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +No other bugs are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHORS diff --git a/contrib/bc/manuals/bc/EN.1 b/contrib/bc/manuals/bc/EN.1 index c1ccbec567ec..ce88b2af8e14 100644 --- a/contrib/bc/manuals/bc/EN.1 +++ b/contrib/bc/manuals/bc/EN.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1752,7 +1752,7 @@ Before version \f[B]6.1.0\f[R], this bc(1) had incorrect behavior for the \f[B]quit\f[R] statement. .PP No other bugs are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHORS Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/bc/EN.1.md b/contrib/bc/manuals/bc/EN.1.md index f6ad00930902..8752c4eda7e1 100644 --- a/contrib/bc/manuals/bc/EN.1.md +++ b/contrib/bc/manuals/bc/EN.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1501,7 +1501,7 @@ use a period (**.**) as a radix point, regardless of the value of Before version **6.1.0**, this bc(1) had incorrect behavior for the **quit** statement. -No other bugs are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +No other bugs are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHORS diff --git a/contrib/bc/manuals/bc/H.1 b/contrib/bc/manuals/bc/H.1 index 9dc46ee50dee..ee0312f3e8db 100644 --- a/contrib/bc/manuals/bc/H.1 +++ b/contrib/bc/manuals/bc/H.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -2109,17 +2109,6 @@ If you want to a use signed two\[cq]s complement argument, use \f[B]s2u(x)\f[R] to convert. .RE .TP -\f[B]bunrev(t)\f[R] -Assumes \f[B]t\f[R] is a bitwise\-reversed number with an extra set bit -one place more significant than the real most significant bit (which was -the least significant bit in the original number). -This number is reversed and returned without the extra set bit. -.RS -.PP -This function is used to implement other bitwise functions; it is not -meant to be used by users, but it can be. -.RE -.TP \f[B]plz(x)\f[R] If \f[B]x\f[R] is not equal to \f[B]0\f[R] and greater that \f[B]\-1\f[R] and less than \f[B]1\f[R], it is printed with a leading @@ -2916,7 +2905,7 @@ Before version \f[B]6.1.0\f[R], this bc(1) had incorrect behavior for the \f[B]quit\f[R] statement. .PP No other bugs are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHORS Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/bc/H.1.md b/contrib/bc/manuals/bc/H.1.md index fbc0658d8171..76763ed648e5 100644 --- a/contrib/bc/manuals/bc/H.1.md +++ b/contrib/bc/manuals/bc/H.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1766,16 +1766,6 @@ The extended library is a **non-portable extension**. If you want to a use signed two's complement argument, use **s2u(x)** to convert. -**bunrev(t)** - -: Assumes **t** is a bitwise-reversed number with an extra set bit one place - more significant than the real most significant bit (which was the least - significant bit in the original number). This number is reversed and - returned without the extra set bit. - - This function is used to implement other bitwise functions; it is not meant - to be used by users, but it can be. - **plz(x)** : If **x** is not equal to **0** and greater that **-1** and less than **1**, @@ -2495,7 +2485,7 @@ This bc(1) supports error messages for different locales, and thus, it supports Before version **6.1.0**, this bc(1) had incorrect behavior for the **quit** statement. -No other bugs are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +No other bugs are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHORS diff --git a/contrib/bc/manuals/bc/HN.1 b/contrib/bc/manuals/bc/HN.1 index 7b4577f2dbd3..fb593b6d3a64 100644 --- a/contrib/bc/manuals/bc/HN.1 +++ b/contrib/bc/manuals/bc/HN.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -2109,17 +2109,6 @@ If you want to a use signed two\[cq]s complement argument, use \f[B]s2u(x)\f[R] to convert. .RE .TP -\f[B]bunrev(t)\f[R] -Assumes \f[B]t\f[R] is a bitwise\-reversed number with an extra set bit -one place more significant than the real most significant bit (which was -the least significant bit in the original number). -This number is reversed and returned without the extra set bit. -.RS -.PP -This function is used to implement other bitwise functions; it is not -meant to be used by users, but it can be. -.RE -.TP \f[B]plz(x)\f[R] If \f[B]x\f[R] is not equal to \f[B]0\f[R] and greater that \f[B]\-1\f[R] and less than \f[B]1\f[R], it is printed with a leading @@ -2910,7 +2899,7 @@ Before version \f[B]6.1.0\f[R], this bc(1) had incorrect behavior for the \f[B]quit\f[R] statement. .PP No other bugs are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHORS Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/bc/HN.1.md b/contrib/bc/manuals/bc/HN.1.md index 015035c14daf..fbbf3b09715d 100644 --- a/contrib/bc/manuals/bc/HN.1.md +++ b/contrib/bc/manuals/bc/HN.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1766,16 +1766,6 @@ The extended library is a **non-portable extension**. If you want to a use signed two's complement argument, use **s2u(x)** to convert. -**bunrev(t)** - -: Assumes **t** is a bitwise-reversed number with an extra set bit one place - more significant than the real most significant bit (which was the least - significant bit in the original number). This number is reversed and - returned without the extra set bit. - - This function is used to implement other bitwise functions; it is not meant - to be used by users, but it can be. - **plz(x)** : If **x** is not equal to **0** and greater that **-1** and less than **1**, @@ -2487,7 +2477,7 @@ use a period (**.**) as a radix point, regardless of the value of Before version **6.1.0**, this bc(1) had incorrect behavior for the **quit** statement. -No other bugs are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +No other bugs are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHORS diff --git a/contrib/bc/manuals/bc/N.1 b/contrib/bc/manuals/bc/N.1 index 193e0d15f6fb..8fc3249f8b73 100644 --- a/contrib/bc/manuals/bc/N.1 +++ b/contrib/bc/manuals/bc/N.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -2109,17 +2109,6 @@ If you want to a use signed two\[cq]s complement argument, use \f[B]s2u(x)\f[R] to convert. .RE .TP -\f[B]bunrev(t)\f[R] -Assumes \f[B]t\f[R] is a bitwise\-reversed number with an extra set bit -one place more significant than the real most significant bit (which was -the least significant bit in the original number). -This number is reversed and returned without the extra set bit. -.RS -.PP -This function is used to implement other bitwise functions; it is not -meant to be used by users, but it can be. -.RE -.TP \f[B]plz(x)\f[R] If \f[B]x\f[R] is not equal to \f[B]0\f[R] and greater that \f[B]\-1\f[R] and less than \f[B]1\f[R], it is printed with a leading @@ -2937,7 +2926,7 @@ Before version \f[B]6.1.0\f[R], this bc(1) had incorrect behavior for the \f[B]quit\f[R] statement. .PP No other bugs are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHORS Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/bc/N.1.md b/contrib/bc/manuals/bc/N.1.md index 859c32e3e774..6c9b6fce5d04 100644 --- a/contrib/bc/manuals/bc/N.1.md +++ b/contrib/bc/manuals/bc/N.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1766,16 +1766,6 @@ The extended library is a **non-portable extension**. If you want to a use signed two's complement argument, use **s2u(x)** to convert. -**bunrev(t)** - -: Assumes **t** is a bitwise-reversed number with an extra set bit one place - more significant than the real most significant bit (which was the least - significant bit in the original number). This number is reversed and - returned without the extra set bit. - - This function is used to implement other bitwise functions; it is not meant - to be used by users, but it can be. - **plz(x)** : If **x** is not equal to **0** and greater that **-1** and less than **1**, @@ -2513,7 +2503,7 @@ use a period (**.**) as a radix point, regardless of the value of Before version **6.1.0**, this bc(1) had incorrect behavior for the **quit** statement. -No other bugs are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +No other bugs are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHORS diff --git a/contrib/bc/manuals/bcl.3 b/contrib/bc/manuals/bcl.3 index f2791624b2ca..adfa61681bd8 100644 --- a/contrib/bc/manuals/bcl.3 +++ b/contrib/bc/manuals/bcl.3 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1833,7 +1833,7 @@ the value of \f[B]LC_NUMERIC\f[R]. This is also true of bcl(3). .SH BUGS None are known. -Report bugs at https://git.gavinhoward.com/gavin/bc. +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHORS Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/bcl.3.md b/contrib/bc/manuals/bcl.3.md index 41c1c120b623..48eb6174bf48 100644 --- a/contrib/bc/manuals/bcl.3.md +++ b/contrib/bc/manuals/bcl.3.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1532,7 +1532,7 @@ use a period (**.**) as a radix point, regardless of the value of # BUGS -None are known. Report bugs at https://git.gavinhoward.com/gavin/bc. +None are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHORS diff --git a/contrib/bc/manuals/build.md b/contrib/bc/manuals/build.md index d9c46ae22602..c0e7e35934b6 100644 --- a/contrib/bc/manuals/build.md +++ b/contrib/bc/manuals/build.md @@ -6,6 +6,9 @@ POSIX-compliant system. To accomplish that, a POSIX-compatible, custom `configure.sh` script is used to select build options, compiler, and compiler flags and generate a `Makefile`. +The rest of this document talks about that, *not* the build system using +[Rig][12], which is much simpler to understand, change, and use. + The general form of configuring, building, and installing this `bc` is as follows: @@ -40,7 +43,7 @@ accepted build options. ## Windows For releases, Windows builds of `bc`, `dc`, and `bcl` are available for download -from <https://git.gavinhoward.com/gavin/bc> and GitHub. +from GitHub. However, if you wish to build it yourself, this `bc` can be built using Visual Studio or MSBuild. @@ -993,3 +996,4 @@ Both commands are equivalent. [9]: #nls-locale-support [10]: #extra-math [11]: #settings +[12]: https://rigbuild.dev/ diff --git a/contrib/bc/manuals/dc/A.1 b/contrib/bc/manuals/dc/A.1 index d59e0fa68a58..50c14dd4098f 100644 --- a/contrib/bc/manuals/dc/A.1 +++ b/contrib/bc/manuals/dc/A.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1687,7 +1687,7 @@ specification at https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . .SH BUGS None are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHOR Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/dc/A.1.md b/contrib/bc/manuals/dc/A.1.md index ad0c59934fd1..bfe50b8230c6 100644 --- a/contrib/bc/manuals/dc/A.1.md +++ b/contrib/bc/manuals/dc/A.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1522,7 +1522,7 @@ https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . # BUGS -None are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +None are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHOR diff --git a/contrib/bc/manuals/dc/E.1 b/contrib/bc/manuals/dc/E.1 index a5febe44705f..b079e40ed62d 100644 --- a/contrib/bc/manuals/dc/E.1 +++ b/contrib/bc/manuals/dc/E.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1466,7 +1466,7 @@ specification at https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . .SH BUGS None are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHOR Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/dc/E.1.md b/contrib/bc/manuals/dc/E.1.md index 54b877999d0d..7bde12de49a2 100644 --- a/contrib/bc/manuals/dc/E.1.md +++ b/contrib/bc/manuals/dc/E.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1346,7 +1346,7 @@ https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . # BUGS -None are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +None are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHOR diff --git a/contrib/bc/manuals/dc/EH.1 b/contrib/bc/manuals/dc/EH.1 index 61fbaa4efe92..199f50fb0fe5 100644 --- a/contrib/bc/manuals/dc/EH.1 +++ b/contrib/bc/manuals/dc/EH.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1442,7 +1442,7 @@ specification at https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . .SH BUGS None are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHOR Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/dc/EH.1.md b/contrib/bc/manuals/dc/EH.1.md index 6398477a84dd..bbddd4ae9479 100644 --- a/contrib/bc/manuals/dc/EH.1.md +++ b/contrib/bc/manuals/dc/EH.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1323,7 +1323,7 @@ https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . # BUGS -None are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +None are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHOR diff --git a/contrib/bc/manuals/dc/EHN.1 b/contrib/bc/manuals/dc/EHN.1 index 974cb3c86791..3b4afa90e30f 100644 --- a/contrib/bc/manuals/dc/EHN.1 +++ b/contrib/bc/manuals/dc/EHN.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1439,7 +1439,7 @@ specification at https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . .SH BUGS None are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHOR Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/dc/EHN.1.md b/contrib/bc/manuals/dc/EHN.1.md index 51e30849996e..fc2c01d52a56 100644 --- a/contrib/bc/manuals/dc/EHN.1.md +++ b/contrib/bc/manuals/dc/EHN.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1318,7 +1318,7 @@ https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . # BUGS -None are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +None are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHOR diff --git a/contrib/bc/manuals/dc/EN.1 b/contrib/bc/manuals/dc/EN.1 index 5ce8defc91c7..2d1c038754e9 100644 --- a/contrib/bc/manuals/dc/EN.1 +++ b/contrib/bc/manuals/dc/EN.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1463,7 +1463,7 @@ specification at https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . .SH BUGS None are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHOR Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/dc/EN.1.md b/contrib/bc/manuals/dc/EN.1.md index ab9647a196be..ca8bb1ebdd01 100644 --- a/contrib/bc/manuals/dc/EN.1.md +++ b/contrib/bc/manuals/dc/EN.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1341,7 +1341,7 @@ https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . # BUGS -None are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +None are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHOR diff --git a/contrib/bc/manuals/dc/H.1 b/contrib/bc/manuals/dc/H.1 index 82c1bbd5c2b9..990eadec23f5 100644 --- a/contrib/bc/manuals/dc/H.1 +++ b/contrib/bc/manuals/dc/H.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1663,7 +1663,7 @@ specification at https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . .SH BUGS None are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHOR Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/dc/H.1.md b/contrib/bc/manuals/dc/H.1.md index 64c7142bc4a7..844dd686f215 100644 --- a/contrib/bc/manuals/dc/H.1.md +++ b/contrib/bc/manuals/dc/H.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1499,7 +1499,7 @@ https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . # BUGS -None are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +None are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHOR diff --git a/contrib/bc/manuals/dc/HN.1 b/contrib/bc/manuals/dc/HN.1 index c3f8c8ab1ff5..ebc4292bb138 100644 --- a/contrib/bc/manuals/dc/HN.1 +++ b/contrib/bc/manuals/dc/HN.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1660,7 +1660,7 @@ specification at https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . .SH BUGS None are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHOR Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/dc/HN.1.md b/contrib/bc/manuals/dc/HN.1.md index 28b9dadd4b4f..58c870f8efc0 100644 --- a/contrib/bc/manuals/dc/HN.1.md +++ b/contrib/bc/manuals/dc/HN.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1494,7 +1494,7 @@ https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . # BUGS -None are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +None are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHOR diff --git a/contrib/bc/manuals/dc/N.1 b/contrib/bc/manuals/dc/N.1 index 6e2baa587b1c..74ed018b97ab 100644 --- a/contrib/bc/manuals/dc/N.1 +++ b/contrib/bc/manuals/dc/N.1 @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.\" Copyright (c) 2018-2024 Gavin D. Howard and contributors. +.\" Copyright (c) 2018-2025 Gavin D. Howard and contributors. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions are met: @@ -1684,7 +1684,7 @@ specification at https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . .SH BUGS None are known. -Report bugs at https://git.gavinhoward.com/gavin/bc . +Report bugs at https://github.com/gavinhoward/bc . .SH AUTHOR Gavin D. Howard \c .MT gavin@gavinhoward.com diff --git a/contrib/bc/manuals/dc/N.1.md b/contrib/bc/manuals/dc/N.1.md index 22ea9c96bc80..10e8befb1d76 100644 --- a/contrib/bc/manuals/dc/N.1.md +++ b/contrib/bc/manuals/dc/N.1.md @@ -2,7 +2,7 @@ SPDX-License-Identifier: BSD-2-Clause -Copyright (c) 2018-2024 Gavin D. Howard and contributors. +Copyright (c) 2018-2025 Gavin D. Howard and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1517,7 +1517,7 @@ https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html . # BUGS -None are known. Report bugs at https://git.gavinhoward.com/gavin/bc . +None are known. Report bugs at https://github.com/gavinhoward/bc . # AUTHOR diff --git a/contrib/bc/project/README.md b/contrib/bc/project/README.md new file mode 100644 index 000000000000..9086bb2e9270 --- /dev/null +++ b/contrib/bc/project/README.md @@ -0,0 +1,32 @@ +# `bc` Project Management History + +This directory has the project management history of `bc`. This `README` exists +to explain what the files are. + +* `gitea.db` + + Because I (Gavin Howard, the main author) do not trust big companies, I moved + `bc` to a self-hosted Gitea instance. This is what's left of the database from + that instance. Obviously, I wiped of personal identifying information as much + as possible, but it still has the comments on issues and pull requests, as + well as the issues and pull requests themselves (whatever matters anyway). + +* `github_issues.json` + + This is information about issues reported on GitHub. I used the GitHub CLI to + export *all* of the available information, since it's public. + +* `github_prs.json` + + This is information about pull requests opened on GitHub. I used the GitHub + CLI to export *all* of the available information, since it's public. + +* `issue10.md` + + When I first started self-hosting Gitea, I was not a good sysadmin. On top of + that, I was learning how to use OpenZFS, and Gitea was stored in a ZFS + dataset. + + This is the best I could do to reproduce an actual issue that was reported and + got erased when I rolled back to a ZFS snapshot. It was originally `#10` on + Gitea, hence the file name. diff --git a/contrib/bc/project/gitea.db b/contrib/bc/project/gitea.db Binary files differnew file mode 100644 index 000000000000..c63c79ff928f --- /dev/null +++ b/contrib/bc/project/gitea.db diff --git a/contrib/bc/project/github_issues.json b/contrib/bc/project/github_issues.json new file mode 100644 index 000000000000..3ee05206a3e9 --- /dev/null +++ b/contrib/bc/project/github_issues.json @@ -0,0 +1,3667 @@ +[ + { + "assignees": [], + "author": { + "id": "U_kgDOCpvj3Q", + "is_bot": false, + "login": "Palafitas", + "name": "Palafitas" + }, + "body": "I'm using 'bc' to perform a calculation in a shell script and I'm getting the incorrect result from a simple calculation...\n\n80 - (30 * 0) / 50 - (80 / 100) * 38\n\nbc returns value 80\n\nReal value is 49.6\n\n\nOBS.: Can use the calculation direct in bc command to see output\nOBS.: bc version is 1.07.1", + "closed": true, + "closedAt": "2025-02-25T19:10:08Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6f65pc", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Two things.\n\nFirst, `bc` is not like other calculators that figure out what precision they need. Instead, `bc` requires you to set the precision before doing any calculation.\n\nThe way to do this is to set the special variable `scale` to an integer value, and then calculations will be done to at least that precision, in digits after the decimal point.\n\nOne quirk of `bc` is that `scale` is set to 0 by default, which means integer-only math.\n\nApplying integer-only math to the expression you gave, we get:\n\n```\n80 - (30 * 0) / 50 - (80 / 100) * 38\n80 - 0 / 50 - (80 / 100) * 38\n80 - 0 - (80 / 100) * 38\n80 - (80 / 100) * 38\n80 - 0 * 38\n80\n```\n\nNotice that `80 / 100` simplifies to 0 with integer-only arithmetic. That is expected.\n\nNow, watch what happens when we set `scale` to 1 first:\n\n```\nscale = 1\n80 - (30 * 0) / 50 - (80 / 100) * 38\n80 - 0 / 50 - (80 / 100) * 38\n80 - 0 - (80 / 100) * 38\n80 - (80 / 100) * 38\n80 - 0.8 * 38\n80 - 30.4\n49.6\n```\n\nAnd that is the value you expected.\n\nSo there is no calculation error; just be sure to set the precision with `scale` before running a calculation.\n\nSecond, this `bc` has never had a `1.07.1` version. That is, in fact, the latest version of the [GNU `bc`][1], so you are not even running this `bc`. So I am closing this issue as invalid.\n\n[1]: https://www.gnu.org/software/bc/", + "createdAt": "2025-02-25T19:10:08Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/87#issuecomment-2683017820", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6f9KsZ", + "author": { + "login": "Palafitas" + }, + "authorAssociation": "NONE", + "body": "Thanks, i solved the problem with '-l' to 'bc'\n\ne.g:\necho '1 + 1' | bc -l", + "createdAt": "2025-02-26T00:44:54Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/87#issuecomment-2683611929", + "viewerDidAuthor": false + } + ], + "createdAt": "2025-02-25T17:57:06Z", + "id": "I_kwDOCL0xJc6rnKtq", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 87, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Calculation error", + "updatedAt": "2025-02-26T00:44:54Z", + "url": "https://github.com/gavinhoward/bc/issues/87" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjI2Nzg4ODg=", + "is_bot": false, + "login": "shpati", + "name": "" + }, + "body": "Hi! \r\nI am trying to load multiple .bc files stored in the same directory as the program (from your modified function files from Carl's collection) but bc will not load them. \r\n\r\nThe command I give is: \r\n`bc -l *.bc`\r\n\r\nThe error I get is: \r\n```\r\nFatal error: cannot open file: *.bc\r\n 0: (main)\r\n```\r\nLoading files separately works, e.g. bc -l file1.bc file2.bc\r\nLoading files using wildcards works in the gnu bc, and it is practical. \r\n\r\nI am using the windows 10 terminal. ", + "closed": true, + "closedAt": "2024-11-10T14:27:05Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6TB7mr", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Hello.\r\n\r\nI am actually really surprised that GNU `bc` will load the files in the Windows 10 terminal, and that is because, as far as I know, wildcard expansion is done by the shell, not the program. So GNU `bc` doesn't actually do it, or so I thought.\r\n\r\nIf you were to run my `bc` with that command under bash on Linux, it would work fine because bash would expand the wildcard into a list of file names and pass that to my `bc`. It seems the Windows 10 terminal does not do that, but passes the wildcard to my `bc`, which does not know how to expand it.\r\n\r\nUnfortunately, wildcard expansion is a heavy feature, not one I can implement in an afternoon. I think it is out of scope for my `bc`, and I don't plan on implementing it.\r\n\r\nThere might be some way to get the Windows 10 terminal to do wildcard expansion, but if that doesn't work, you can run my `bc` under bash using the Windows Subsystem for Linux.", + "createdAt": "2024-11-10T14:27:05Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/85#issuecomment-2466757035", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6TC19F", + "author": { + "login": "shpati" + }, + "authorAssociation": "NONE", + "body": "Thanks a lot for the detailed answer Gavin! It seems like the solution is simple and does not need any change in code. You only need to change the linker used during compiling, like this: \r\n\r\n`cl example.c /link setargv.obj`\r\n\r\nCan you try it please? 🙂\r\n\r\nSource: https://learn.microsoft.com/en-us/cpp/c-language/expanding-wildcard-arguments?view=msvc-170", + "createdAt": "2024-11-11T00:00:13Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/85#issuecomment-2466996037", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6UKlNz", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I tried adding `setargv.obj` to the linker command (next to `bcrypt.lib`), and that didn't work.\r\n\r\nIf you can get it working, feel free to send me a PR, and I will probably accept it.", + "createdAt": "2024-11-19T14:00:38Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/85#issuecomment-2485801843", + "viewerDidAuthor": true + } + ], + "createdAt": "2024-11-10T09:58:36Z", + "id": "I_kwDOCL0xJc6dxwXg", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 85, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "NOT_PLANNED", + "title": "Does not load multiple .bc files using * wildcard", + "updatedAt": "2024-11-19T14:00:40Z", + "url": "https://github.com/gavinhoward/bc/issues/85" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjgyNzIwNQ==", + "is_bot": false, + "login": "DanielRuf", + "name": "Daniel Ruf" + }, + "body": "I'm new to C and I try to create a PHP extension of bc with SWIG, but as direct replacement for `eval()` in PHP.\r\n\r\nWhat is the **correct function from the bc code to parse a string** and return the calculation result or some error / null when parsing fails?\r\n\r\nI tried looking at the code, but didn't find the right one.", + "closed": true, + "closedAt": "2025-02-16T13:40:55Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6LSQRq", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I'm not sure what you're asking. `bc` is a program, not a library, and even though I *do* have a library, it does not include expression parsing.\r\n\r\nAre you wanting a library that can parse `bc` expressions? Unfortunately, this `bc` cannot do that, and to do so would require refactoring that I don't have time for.", + "createdAt": "2024-09-08T20:42:08Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/83#issuecomment-2336818282", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6LSRDF", + "author": { + "login": "DanielRuf" + }, + "authorAssociation": "NONE", + "body": "Understood, so I can not do some `bc_parse(some-string-from-stdin)` with that and I have to resort to some other solution then.\r\n\r\nWhere can I find the current logic of the CLI? Maybe I can do something with that.", + "createdAt": "2024-09-08T20:56:06Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/83#issuecomment-2336821445", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6LSRiv", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "You are correct.\r\n\r\nHowever, what is easiest depends on what you are trying to do. Do you need the full `bc` language? Or do you just need simple expressions? Or something else?\r\n\r\nIf you need the full language, the best solution would be to run `bc` as a child process and just feed it data.\r\n\r\nIf you need simple expression parsing, then you could implement the parsing with Lex and Yacc, and then use `bcl`, the `bc` library, to do the math.\r\n\r\nIf you need something else, we can see what might work best.", + "createdAt": "2024-09-08T21:03:51Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/83#issuecomment-2336823471", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6LSSix", + "author": { + "login": "DanielRuf" + }, + "authorAssociation": "NONE", + "body": "> Or do you just need simple expressions? Or something else?\r\n\r\nJust basic calculations like `eval(1+2/3*4-5)`.\r\n\r\n> If you need the full language, the best solution would be to run bc as a child process and just feed it data.\r\n\r\nUnfortunately this brings much overhead, I already tested that with `exec(\"bc ...\")` in PHP.\r\n\r\n> If you need simple expression parsing, then you could implement the parsing with Lex and Yacc, and then use bcl, the bc library, to do the math.\r\n\r\nThis sounds more like what I am looking for, even though I wanted to avoid Yacc.", + "createdAt": "2024-09-08T21:19:11Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/83#issuecomment-2336827569", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6LSSw-", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "While refactoring to bring the full `bc` parser into the library may be too much, I may be able to whip a small expression parser in a few hours.\r\n\r\nDo you just need the four basic arithmetic operators? Do you need parentheses? Do you need square root?\r\n\r\nLet me know what you need. I may need a week to get it to you.", + "createdAt": "2024-09-08T21:22:48Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/83#issuecomment-2336828478", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6LSTkN", + "author": { + "login": "DanielRuf" + }, + "authorAssociation": "NONE", + "body": "I will check that and let you know in the next days. At least parentheses are also needed.\r\n\r\nIf there is at least one function (like sqrt or max) implemened, then I can check the implementation and contribute some of my time to implement more or at least I can help with that.", + "createdAt": "2024-09-08T21:35:19Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/83#issuecomment-2336831757", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6LSUHv", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "`sqrt()` is already builtin; I'll add parsing for it. I can also add parsing for `max()` and `min()`.\r\n\r\nYou can see everything that's builtin [here](https://github.com/gavinhoward/bc/blob/master/manuals/bcl.3.md).", + "createdAt": "2024-09-08T21:44:30Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/83#issuecomment-2336834031", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6LTBjd", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Ack! I'm sorry! I just had something come up in my personal life that will take a lot of time to resolve!\r\n\r\nSo despite hoping to help with the parsing, I can't even help with a simple thing anymore.\r\n\r\nHowever, I can point you in the right direction. Use the [Shunting-Yard Algorithm](https://en.wikipedia.org/wiki/Shunting-yard_algorithm) like [this](https://softwareengineering.stackexchange.com/questions/254074/how-exactly-is-an-abstract-syntax-tree-created/254075#254075) to make an abstract syntax tree, and then do a post-order traversal.\r\n\r\nIf you need examples of how to use `bcl`, then [its test code](https://github.com/gavinhoward/bc/blob/master/tests/bcl.c) is a good start.\r\n\r\nAgain, I'm really sorry about this, but I figured it would be better to tell you sooner rather than later.", + "createdAt": "2024-09-09T03:03:41Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/83#issuecomment-2337020125", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6LTUUy", + "author": { + "login": "DanielRuf" + }, + "authorAssociation": "NONE", + "body": "No problem and thanks for letting me know. I will try to understand and solve it.", + "createdAt": "2024-09-09T04:37:26Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/83#issuecomment-2337097010", + "viewerDidAuthor": false + } + ], + "createdAt": "2024-09-08T20:22:38Z", + "id": "I_kwDOCL0xJc6Vwp4y", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 83, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "what function to call for parsing string expressions", + "updatedAt": "2025-02-16T13:40:55Z", + "url": "https://github.com/gavinhoward/bc/issues/83" + }, + { + "assignees": [], + "author": { + "id": "U_kgDOBqIXaQ", + "is_bot": false, + "login": "GregTonoski", + "name": "Greg Tonoski" + }, + "body": "Would you like to add elliptic curve point multiplication (https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication) to math library, perhaps?", + "closed": true, + "closedAt": "2024-08-31T18:09:54Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6Kdiqk", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I have wanted to, but I haven't *despite* wanting to. And there is a good reason: someone is going to use my `bc` to implement cryptography with vulnerabilities.\r\n\r\nIf my `bc` ships the elliptic curve arithmetic to do that, I will feel responsible. If they write the arithmetic themselves, well, they are responsible.\r\n\r\nOf course, there are other reasons to want it, but because of cryptography, I hesitate to add it.\r\n\r\nSorry!", + "createdAt": "2024-08-31T18:09:54Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/82#issuecomment-2322999972", + "viewerDidAuthor": true + } + ], + "createdAt": "2024-08-31T07:57:25Z", + "id": "I_kwDOCL0xJc6U72YL", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 82, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Feature request: elliptic curve point multiplication", + "updatedAt": "2024-08-31T18:09:55Z", + "url": "https://github.com/gavinhoward/bc/issues/82" + }, + { + "assignees": [], + "author": { + "id": "U_kgDOBqIXaQ", + "is_bot": false, + "login": "GregTonoski", + "name": "Greg Tonoski" + }, + "body": "", + "closed": true, + "closedAt": "2024-08-30T14:14:44Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6KXcRi", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you so much for the compliment! I hardly get them nowadays. You made my day!\r\n\r\nI presume \"EOM\" means \"End of Message\" which means there is no bug? So I'm going to close this now, but if you do have a bug, feel free to reopen.", + "createdAt": "2024-08-30T14:14:44Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/80#issuecomment-2321400930", + "viewerDidAuthor": true + } + ], + "createdAt": "2024-08-30T07:30:14Z", + "id": "I_kwDOCL0xJc6UzPqQ", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 80, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Excellent. Works fine. Thank you. [EOM]", + "updatedAt": "2024-08-30T14:14:44Z", + "url": "https://github.com/gavinhoward/bc/issues/80" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjU3MDY1NjU3", + "is_bot": false, + "login": "exikyut", + "name": "" + }, + "body": "Was just playing around and happened to get my stack out of sync:\r\n\r\n```\r\n1\r\n+\r\n\r\nRuntime error: stack has too few elements\r\n 0: (main)\r\n```\r\n\r\nBut I noticed this cleared the stack:\r\n\r\n<pre>\r\nf\r\n<i>(no output)</i>\r\n</pre>\r\n\r\nTrying to improve my edge-case-fu spidey sense :) I thought I'd check how other dc implementations behave.\r\n\r\nGNU `dc` immediately showed me something might be up:\r\n\r\n```\r\n1\r\n+\r\ndc: stack empty\r\nf\r\n1\r\nq\r\n$ _\r\n```\r\n\r\nHuh.\r\n\r\nOpenBSD `dc` produced byte-identical output to the above.\r\n\r\nOK... what should arbitrate as reference here? I guess some form of going back to the beginning.\r\n\r\nHow far can we go back?\r\n\r\nApparently the first version of `dc` was written in B while UNIX was being ported. Man that would be fun to play with. Perhaps there's a printout of it starting on page 9,576 of an OCR-averse PDF on bitsavers just waiting to be found :smile: \r\n\r\nhttp://takahirox.github.io/pdp11-js/unixv6.html and http://pdp11.aiju.de/ both emulate UNIX v6 in-browser, which is nice and accessible. The `dc` in both of these has the same size and timestamp; copying from the second emulator for fun, which emulates an uppercase teletype, we get:\r\n\r\n```\r\n# DC\r\n1\r\n+\r\n( +) ?\r\nF\r\n1\r\nQ\r\n# # \r\n```\r\n\r\nHrm. That's V6 UNIX. Can we go further back?\r\n\r\nYes and no, as far as I can manage.\r\n\r\nIt looks like a V1+V2 amalgamation was put together using surviving source code and tape dumps: https://www.in-ulm.de/~mascheck/various/ancient/\r\n\r\nThe project appears to have been quietly migrated to https://github.com/DoctorWkt/unix-jun72, with terrifying instructions to \"now run `make`\" underneath a wall of \"last modified: 16 years ago\" :melting_face:, but I discovered some pre-built SIMH images at https://code.google.com/archive/p/unix-jun72/downloads, which is where the project previously lived (and is what the page in the previous paragraph links to), which still work perfectly - you just run `pdp11 simh.cfg`.\r\n\r\nUnfortunately, while the system is already saying `:login:` before you can even blink and figure out whether it worked, and the distribution includes `dc`, its `f` command appears to be broken... even though I see references to support for an `f` command [on line 949 in dc1.s](https://github.com/DoctorWkt/unix-jun72/blob/1d438bd5874ec628157fbeab370c8e3f3a3ecb8b/src/cmd/dc1.s#L949) (the source is distributed across [dc2.s](https://github.com/DoctorWkt/unix-jun72/blob/1d438bd5874ec628157fbeab370c8e3f3a3ecb8b/src/cmd/dc2.s), [dc3.s](https://github.com/DoctorWkt/unix-jun72/blob/1d438bd5874ec628157fbeab370c8e3f3a3ecb8b/src/cmd/dc3.s), [dc4.s](https://github.com/DoctorWkt/unix-jun72/blob/1d438bd5874ec628157fbeab370c8e3f3a3ecb8b/src/cmd/dc4.s) and [dc5.s](https://github.com/DoctorWkt/unix-jun72/blob/1d438bd5874ec628157fbeab370c8e3f3a3ecb8b/src/cmd/dc5.s), presumably due to memory constraints). I'm not sure if I'm falling through a `default: exit(0);`, a segfault, or a case of mismatching binary/source.\r\n\r\nThe path forward there would be figuring out how to recompile the `dc` implementation; I think this might be possible but it's beyond the scope of the cursory level of interest I approached this with.\r\n\r\nIf anyone wants a rainy day project, I would be really interested to learn more about the result of others' digging around to get the earliest surviving copies of `dc` running.\r\n\r\nZooming back out to the topic, it would **seem** that current consensus is that errors *of this type* don't consume the stack; they leave it alone. But it would be nice to formally qualify this situation better. How should that be framed? Parser consumption expectations? Stack effects by errors in general?\r\n\r\nThis bugreport is somewhat of a thought experiment. I don't have any authoritative ideas or suggestions myself.", + "closed": true, + "closedAt": "2024-08-23T03:03:02Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6Bc1ec", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for digging up the history!\r\n\r\nYou are correct that my `dc` clears the stack. When I was implementing `bc` and `dc`, I wanted to minimize the possibility that an error could screw up code later.\r\n\r\nHence, my `bc` and `dc` both [\"reset\"][1] on error, which means they clear everything and try to start completely fresh.\r\n\r\nThat said, the documentation could be clearer on that; I could make it say that errors clear the stack too. (And they do clear the stack because they have to clear the stack in `bc` since the stack is implicit.)\r\n\r\nHowever, this could go both ways:\r\n\r\n* I could declare this as a mere *documentation bug*, since `dc` is *not* standardized. In that case, I would just update the manual.\r\n* Or I could declare this a *conformance bug*, because while there is no standard, all other `dc` implementations do the opposite. In this case, I would make the change and fix the bugs that pop up.\r\n\r\nQuite frankly, I'm not looking forward to doing a full release cycle, which includes 2 weeks of fuzzing (during which my machine is unusable) and 24 hours of tests, possibly repeated. This means I want to fix the docs and call it a day, but going off of what I *want* to do is not rational.\r\n\r\nI don't know if anyone watches this repo, but this is one case where I'd like to hear comments from users.\r\n\r\n[1]: https://github.com/gavinhoward/bc/blob/master/manuals/bc/A.1.md#reset", + "createdAt": "2024-06-16T19:15:40Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/79#issuecomment-2171819932", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6BfXEg", + "author": { + "login": "exikyut" + }, + "authorAssociation": "NONE", + "body": "> You are correct that my `dc` clears the stack. When I was implementing `bc` and `dc`, I wanted to minimize the possibility that an error could screw up code later.\r\n> \r\n> Hence, my `bc` and `dc` both [\"reset\"](https://github.com/gavinhoward/bc/blob/master/manuals/bc/A.1.md#reset) on error, which means they clear everything and try to start completely fresh.\r\n\r\nHuh. That makes pedagogical sense, upon consideration.\r\n\r\n> That said, the documentation could be clearer on that; I could make it say that errors clear the stack too.\r\n\r\nThat would probably be a good idea, both because `gh-dc` deviates from the norm, and because there *is* no norm; this would be the first point at which this particular graph edge / state machine transition is properly documented. Until now it's lived as an edge case in UB land.\r\n\r\n> (And they do clear the stack because they have to clear the stack in `bc` since the stack is implicit.)\r\n\r\nHuh. I wonder how other `bc`->`dc` architectural approaches have handled this situation?\r\n\r\n> However, this could go both ways:\r\n> \r\n> * I could declare this as a mere _documentation bug_, since `dc` is _not_ standardized. In that case, I would just update the manual.\r\n> * Or I could declare this a _conformance bug_, because while there is no standard, all other `dc` implementations do the opposite. In this case, I would make the change and fix the bugs that pop up.\r\n> \r\n> Quite frankly, I'm not looking forward to doing a full release cycle, which includes 2 weeks of fuzzing (during which my machine is unusable) and 24 hours of tests, possibly repeated. This means I want to fix the docs and call it a day, but going off of what I _want_ to do is not rational.\r\n\r\nGood net question. Hmm.\r\n\r\n> I don't know if anyone watches this repo, but this is one case where I'd like to hear comments from users.\r\n\r\nI am too.\r\n\r\nBut I'll add my 2¢:\r\n\r\n- Nobody has screamed until now, but `gh-dc` adoption is still rising.\r\n\r\n- Taking on the complexity of making this a `./configure`able option doesn't sound reasonable in practice.\r\n\r\n- I can only imagine a `dc` script generating different results after being switched to this implementation after some sort of upgrade process that presumably has capable humans involved in it. It would follow that said humans would presumably classify the deviation in output as the result of logic bugs and then fix them, so keeping this architectural approach is theoretically a net positive.\r\n\r\n- Applying to make `dc` a POSIX standard would make for an interesting 180-season TV series that would be excellent mid-afternoon watching while having a nap (and dreaming of how to make `dc` count to infinity twice). I'd definitely seed all 4,961 episodes.\r\n\r\n- Given that `gh-dc` is now in FreeBSD, it may well meet the theoretical/implicational interpretation (and possibly beyond) of \"significant user base\" required to [apply for OSS-Fuzz](https://google.github.io/oss-fuzz/getting-started/accepting-new-projects/) which would subject it to continual analysis and, if accepted, probably provide a slow trickle of genuinely interesting feedback. It also sounds like it would unblock a significant burnout barrier to commoditizing the process of cutting new releases - opting to letting new versions sit in OSS-Fuzz for a fortnight before releasing them (a cool strategy, and if only everything was architecturally simple enough that this could be applied everywhere) would no longer have a local performance impact.\r\n", + "createdAt": "2024-06-17T07:21:08Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/79#issuecomment-2172481824", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6BmRt8", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "> Nobody has screamed until now, but `gh-dc` adoption is still rising.\r\n\r\nYes, I agree. In fact, I initially wanted to dismiss your report as \"only one user,\" but I did not for this reason.\r\n\r\n> Taking on the complexity of making this a `./configure`able option doesn't sound reasonable in practice.\r\n\r\nI do not want that to be a build-time option. I have too many as it is.\r\n\r\n> I can only imagine a `dc` script generating different results after being switched to this implementation after some sort of upgrade process that presumably has capable humans involved in it. It would follow that said humans would presumably classify the deviation in output as the result of logic bugs and then fix them, so keeping this architectural approach is theoretically a net positive.\r\n\r\nTrue, although people would be better served to switch to `bc` since it's standard and portable.\r\n\r\n> Applying to make `dc` a POSIX standard would make for an interesting 180-season TV series that would be excellent mid-afternoon watching while having a nap (and dreaming of how to make dc count to infinity twice). I'd definitely seed all 4,961 episodes.\r\n\r\nThe [rationale in the `bc` standard][1] says these two things:\r\n\r\n> `dc` was not selected to be part of this volume of POSIX.1-2017 because `bc` was thought to have a more intuitive programmatic interface.\r\n\r\n> The consensus of the standard developers was that `dc` is a fundamentally less usable language and that that would be far too severe a penalty for avoiding the issue of being similar to but incompatible with C.\r\n\r\nYes, that is from the 2017 standard, but that language goes back to the beginning, I believe. This means that standardizing `dc` will not happen, barring some rich fellow deciding that it's his life mission to make it happen.\r\n\r\n> Given that `gh-dc` is now in FreeBSD, it may well meet the theoretical/implicational interpretation (and possibly beyond) of \"significant user base\" required to [apply for OSS-Fuzz](https://google.github.io/oss-fuzz/getting-started/accepting-new-projects/) which would subject it to continual analysis and, if accepted, probably provide a slow trickle of genuinely interesting feedback. It also sounds like it would unblock a significant burnout barrier to commoditizing the process of cutting new releases - opting to letting new versions sit in OSS-Fuzz for a fortnight before releasing them (a cool strategy, and if only everything was architecturally simple enough that this could be applied everywhere) would no longer have a local performance impact.\r\n\r\nI agree with this, so [I have applied][2]. We'll see where that goes.\r\n\r\n[1]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html#tag_20_09_18\r\n[2]: https://github.com/google/oss-fuzz/pull/12078", + "createdAt": "2024-06-17T19:45:51Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/79#issuecomment-2174294908", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6BpTwG", + "author": { + "login": "exikyut" + }, + "authorAssociation": "NONE", + "body": "> > Nobody has screamed until now, but `gh-dc` adoption is still rising.\r\n> \r\n> Yes, I agree. In fact, I initially wanted to dismiss your report as \"only one user,\" but I did not for this reason.\r\n\r\n(Sentiment of appreciation)\r\n\r\n> > Taking on the complexity of making this a `./configure`able option doesn't sound reasonable in practice.\r\n> \r\n> I do not want that to be a build-time option. I have too many as it is.\r\n\r\nI was genuinely surprised at the number of configurable options :) completely agree there haha\r\n\r\n> > I can only imagine a `dc` script generating different results after being switched to this implementation after some sort of upgrade process that presumably has capable humans involved in it. It would follow that said humans would presumably classify the deviation in output as the result of logic bugs and then fix them, so keeping this architectural approach is theoretically a net positive.\r\n> \r\n> True, although people would be better served to switch to `bc` since it's standard and portable.\r\n> \r\n> > Applying to make `dc` a POSIX standard would make for an interesting 180-season TV series that would be excellent mid-afternoon watching while having a nap (and dreaming of how to make dc count to infinity twice). I'd definitely seed all 4,961 episodes.\r\n> \r\n> The [rationale in the `bc` standard](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html#tag_20_09_18) says these two things:\r\n> \r\n> > `dc` was not selected to be part of this volume of POSIX.1-2017 because `bc` was thought to have a more intuitive programmatic interface.\r\n\r\nThanks for the TIL! I should have expected there to be extant discussion on the matter...\r\n\r\n> > The consensus of the standard developers was that `dc` is a fundamentally less usable language and that that would be far too severe a penalty for avoiding the issue of being similar to but incompatible with C.\r\n> \r\n> Yes, that is from the 2017 standard, but that language goes back to the beginning, I believe. This means that standardizing `dc` will not happen, barring some rich fellow deciding that it's his life mission to make it happen.\r\n\r\nI see. Thanks very much for the insight.\r\n\r\n> \r\n> > Given that `gh-dc` is now in FreeBSD, it may well meet the theoretical/implicational interpretation (and possibly beyond) of \"significant user base\" required to [apply for OSS-Fuzz](https://google.github.io/oss-fuzz/getting-started/accepting-new-projects/) which would subject it to continual analysis and, if accepted, probably provide a slow trickle of genuinely interesting feedback. It also sounds like it would unblock a significant burnout barrier to commoditizing the process of cutting new releases - opting to letting new versions sit in OSS-Fuzz for a fortnight before releasing them (a cool strategy, and if only everything was architecturally simple enough that this could be applied everywhere) would no longer have a local performance impact.\r\n> \r\n> I agree with this, so [I have applied](https://github.com/google/oss-fuzz/pull/12078). We'll see where that goes.\r\n\r\n**YOU GOT ACCEPTED :D :face_holding_back_tears:**\r\n\r\nI forgot that it ships in macOS, and TIL it ships in Android as well. OSS-Fuzz's scope tries to extend beyond Google-immediate interests, so this broader status quo (incl. FreeBSD) constitutes a meaningful precedent of relevance – potentially represented by the speed with which the project was accepted without further question (basically 45 minutes).", + "createdAt": "2024-06-18T06:03:35Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/79#issuecomment-2175089670", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6B3Zis", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "> YOU GOT ACCEPTED :D 🥹\r\n\r\nYes, unfortunately, I [ran into problems integrating fuzzers][1], and I don't know what to do next, so I have to put OSS-Fuzz on the back plate. Thus, we're back to where we started.\r\n\r\nThank you for the suggestion, though.\r\n\r\n[1]: https://github.com/google/oss-fuzz/pull/12098", + "createdAt": "2024-06-19T13:54:56Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/79#issuecomment-2178783404", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6C-bO7", + "author": { + "login": "spatula75" + }, + "authorAssociation": "NONE", + "body": "I also noticed this behavioral change, because on occasion I need to add a long list of numbers in `dc`, and rather than count how many numbers I have and issuing the right number of `+` operators, I have a habit of just entering way more `+` operators than I need and then grabbing the stack top value afterward. e.g.:\r\n```\r\n1 7 8 6 4 9 1 2 3 6 4 + + + + + + + + + + + + + + + + + + p\r\n```\r\nHistorically, and with other implementations of `dc`, this would result in a lot of `dc: stack empty` messages followed by the sum at the end. Now it results in a clear stack with no result.\r\n\r\nI can certainly see the merit of returning to a clean slate on an error condition when running in an \"automated\" fashion - blowing the stack in this case would generally mean you did something wrong and the results might not be trustworthy.\r\n\r\nI guess what frustrates me is that in interactive mode, this is a significant change from historical behavior that caught me off-guard and also blows up my use case, requiring me to now count how many numbers I have on the stack, and then to supply N-1 operators to get to the result I want. It's also making my stack more \"fragile\" in the sense that I now have to be very careful about my interactions with `dc`.\r\n\r\nI agree that changing behavior based on configuration-time options sounds like overkill and a lot of added complexity, especially when some users of a system might find the new behavior desirable.\r\n\r\nI see a few other possibilities:\r\n- A command line switch to either enable or disable stack clearing when running in `dc` mode, so a user can be explicit about whether they want the new behavior or the historical behavior. Whether the switch enables the old behavior, or enables the new behavior doesn't matter much to me; I'd just add a shell alias if I needed to always supply a switch.\r\n- A rule that when running in interactive mode (ie, from a keyboard not from a pipe or a file), you get the historical (non-clearing) behavior, but in non-interactive mode you always get the new (stack-clearing) behavior.\r\n- Some hybrid of the two: maybe in interactive mode you get the historical behavior _unless_ you supply a command-line switch\r\n\r\nOf course I realize that all of these options add complexity too, but hopefully not altogether too much. Any one of them would make me a happy camper.", + "createdAt": "2024-06-28T17:58:14Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/79#issuecomment-2197402555", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6DCMZY", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I am not a fan of having different behavior in interative mode vs non-interactive mode.\r\n\r\nHowever, I think `dc` implementations tend to exit on any error in non-interactive mode anyway. At least GNU `dc` does, IIRC. This one definitely does, and this behavior is documented.\r\n\r\nSo this change would only affect interactive uses anyway.\r\n\r\nI will go ahead and make the change. I will start fuzzing as well. If few or no problems appear, I will make a release.", + "createdAt": "2024-06-30T00:55:05Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 2 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/79#issuecomment-2198390360", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6JdDT8", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Okay, it took me a long time to have the time for fuzzing and testing, but this change made it into 7.0.0.\r\n\r\nI think I can close this report now, but if there are still problems, feel free to reopen.", + "createdAt": "2024-08-23T03:03:02Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/79#issuecomment-2306094332", + "viewerDidAuthor": true + } + ], + "createdAt": "2024-06-16T10:02:06Z", + "id": "I_kwDOCL0xJc6MaBsK", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 79, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Stack-consumption-on-error headscratch in comparison to other `dc`s", + "updatedAt": "2024-08-23T03:03:02Z", + "url": "https://github.com/gavinhoward/bc/issues/79" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjI2NjI1MTQx", + "is_bot": false, + "login": "freebrowser1", + "name": "" + }, + "body": "Excellent software !\r\n\r\nThis `bc` is MUCH faster than the bc supplied to Linux distros. I downloaded the source package, compiled under Ubuntu ARM and it worked. I did the same on Termux on an Android cellphone (which also has the slow 1.7 version) and it was blazingly fast as well !\r\nIt can be used for other bases up till sixteen. I changed it (locally, not on this Github site) to max base 36.\r\nMaybe that can be an option to publish it here.", + "closed": true, + "closedAt": "2024-05-15T15:52:29Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc59oi_N", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for your compliments!\r\n\r\nAs it turns out, it's the accompanying `dc` that only goes up to base 16. `bc` goes up to base 36.\r\n\r\nThere is a reason for base 36: according to the `bc` standard, it must be possible to set all input bases with a one character number. This is so any input base could be set no matter the *current* input base.\r\n\r\nFor example, say you write a function that should work in multiple bases. What if it temporarily has to set a new input base. How does it do that when the input base could be anything from binary to hexadecimal?\r\n\r\nThe answer is [here][1] (scroll down to where it says, \"When either ibase or obase is assigned a single digit value...\").\r\n\r\nNow my `bc` does take that up to base 35, which is the base you can reach by using `Z` as the single digit value.\r\n\r\nTo test this, try this code:\r\n\r\n```\r\n$ bc\r\n>>> obase=Z\r\n>>> 35\r\n01 00\r\n>>> quit\r\n```\r\n\r\nI hope this helps.\r\n\r\n[1]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html#tag_20_09_13_03", + "createdAt": "2024-05-13T14:35:35Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/78#issuecomment-2107781069", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc59sMoG", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I realize I forgot to include an example with `ibase`.\r\n\r\n```\r\n$ bc\r\n>>> ibase=Z\r\n>>> 10\r\n35\r\n>>> ibase=6*6\r\n>>> 10\r\n36\r\n>>> quit\r\n```\r\n\r\nSo yes, my `bc` already goes up to base 36 for `ibase` too, although you do need some special way, like `6*6`, to get it.", + "createdAt": "2024-05-13T20:24:59Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/78#issuecomment-2108738054", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5978rz", + "author": { + "login": "freebrowser1" + }, + "authorAssociation": "NONE", + "body": "I have changed a few source files (find in the files in the accompanied zip lines with //!!).\r\nThis allows using max base 36 with all digits and all UPPERCASE letters. When I and O are not wanted, use `export NO_I_O_DIGITS=1` (or any value) before executing bc and 34 = @, 35 = #.\r\n\r\n[src.zip](https://github.com/gavinhoward/bc/files/15323750/src.zip)\r\n", + "createdAt": "2024-05-15T15:31:15Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/78#issuecomment-2112867059", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc598Hyk", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "You did not read my comments. My `bc` already supports up to base 36.\r\n\r\nYour changes are not needed.\r\n\r\nClosing.", + "createdAt": "2024-05-15T15:52:29Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/78#issuecomment-2112912548", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5-Emcm", + "author": { + "login": "freebrowser1" + }, + "authorAssociation": "NONE", + "body": "I checked again, downloaded the source kit, compiled it (Ubuntu arm64) and ran this:\r\n' bin/bc -l <<< \"ibase=obase=24; 2^G;\"'\r\nThis results in `04 17 18 16`, i.e. decimal numbers as 'digits' which should only appear with base above 36.\r\nAfter applying my changes, it issues the correct value '4HIG'.\r\n", + "createdAt": "2024-05-16T12:35:20Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/78#issuecomment-2115135270", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5-E7EK", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "This cannot be changed.\r\n\r\nThere is a [standard for `bc`][1], and in that standard, it says,\r\n\r\n> For bases greater than 16, each digit shall be written as a separate multi-digit decimal number. Each digit except the most significant fractional digit shall be preceded by a single <space>. For bases from 17 to 100, bc shall write two-digit decimal numbers; for bases from 101 to 1000, three-digit decimal strings, and so on.\r\n\r\nSo no, as much as I would like to change it, it cannot be changed.\r\n\r\n[1]: https://pubs.opengroup.org/onlinepubs/009696799/utilities/bc.html", + "createdAt": "2024-05-16T13:15:39Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/78#issuecomment-2115219722", + "viewerDidAuthor": true + } + ], + "createdAt": "2024-05-13T07:31:19Z", + "id": "I_kwDOCL0xJc6Infdz", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 78, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "NOT_PLANNED", + "title": "Not an issue, but a change proposal", + "updatedAt": "2024-05-16T13:15:40Z", + "url": "https://github.com/gavinhoward/bc/issues/78" + }, + { + "assignees": [], + "author": { + "id": "U_kgDOB00gDQ", + "is_bot": false, + "login": "oliverkwebb", + "name": "Oliver Webb" + }, + "body": "First I'd like to thank you for the work and care in making bc.\r\n\r\nI replaced GNU bc with your bc on my system, and ran into a error trying to run bc with some external bc libraries that define functions such as `abs()`\r\n\r\nThis is because your bc already has a built in `abs()`, and unlike the functions in the -l math library, will not let you redefine it because it appear to not just be a function, but also a lexer tokens/keyword.\r\n\r\nIs this a problem that you've ran into or considered before? ", + "closed": true, + "closedAt": "2024-05-08T17:39:46Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc59O96s", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Yup! And my `bc` already has a solution:\r\n\r\n```\r\n$ bc -r abs <other_args...>\r\n```\r\n\r\nSee [here][1], scroll to the `-r`/`--redefine` option.\r\n\r\nIn short, it allows you to \"redefine\" keywords as functions, variables, or arrays.\r\n\r\nOf course, if that doesn't fix your problem, then it is a bug.\r\n\r\n[1]: https://github.com/gavinhoward/bc/blob/master/manuals/bc/A.1.md#options", + "createdAt": "2024-05-08T17:34:29Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/77#issuecomment-2101075628", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc59O_7j", + "author": { + "login": "oliverkwebb" + }, + "authorAssociation": "NONE", + "body": "Putting `-r abs` in my function arguments will run the library.\r\n\r\nThank you for your help", + "createdAt": "2024-05-08T17:39:46Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/77#issuecomment-2101083875", + "viewerDidAuthor": false + } + ], + "createdAt": "2024-05-08T17:29:50Z", + "id": "I_kwDOCL0xJc6IQwkm", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 77, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Allowing redefinition of builtin function such as abs() for compatibility with bc scripts", + "updatedAt": "2024-05-08T17:39:46Z", + "url": "https://github.com/gavinhoward/bc/issues/77" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjc0MzM1NDcx", + "is_bot": false, + "login": "mogando668", + "name": "" + }, + "body": "Dear Mr. Howard,\r\n\r\nFor gigantic `obase`s, like those below the line, even though they're clearly beyond the hard-coded `obase `max of `2,147,483,647`,`bc` appears to calculate the expression to full precision before erroring out, thus undermining any early exit criteria that ensure built-in named variables are within designated limits. I haven't tested against `ibase` but I suspect something similar would plague it, i.e. the right hand side expression is being calculated to full precision before any attempts to check them against caps.\r\n\r\nThe full `zsh`-based testing code and output are attached below.\r\n\r\nYours Sincerely\r\nJason K\r\n\r\nps : I've noticed the same issue plagues both `gnu-bc` I've installed via Homebrew as well as the macOS built-in `bc`. \r\n\r\n```\r\n 2 ^ 8 ^ 1 := 2 ^ 8\r\n 2 ^ 8 ^ 2 := 2 ^ 64\r\n 2 ^ 8 ^ 3 := 2 ^ 512\r\n 2 ^ 8 ^ 4 := 2 ^ 4096\r\n 2 ^ 8 ^ 5 := 2 ^ 32768\r\n 2 ^ 8 ^ 6 := 2 ^ 262144\r\n 2 ^ 8 ^ 7 := 2 ^ 2097152\r\n----------------------------\r\n 2 ^ 8 ^ 8 := 2 ^ 16777216\r\n 2 ^ 8 ^ 9 := 2 ^ 134217728\r\n 2 ^ 8 ^ 10 := 2 ^ 1073741824\r\n```\r\n\r\n\r\n```\r\nbc 1.07.1\r\nCopyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.\r\n\r\nDarwin m1mx4CT 22.3.0 Darwin Kernel Version 22.3.0: Mon Jan 30 20:38:37 PST 2023; root:xnu-8792.81.3~2/RELEASE_ARM64_T6000 arm64\r\n\r\ngbc is /usr/local/bin/gbc\r\n\r\nBC_BASE_MAX = 2147483647\r\nBC_DIM_MAX = 16777215\r\nBC_SCALE_MAX = 2147483647\r\nBC_STRING_MAX = 2147483647\r\nMAX Exponent = 9223372036854775807\r\nNumber of vars = 32767\r\n\r\n```\r\n\r\n`for __ in $( jot 10 ); do ( time ( printf 'obase=2^8^%d\\0' \"$__\" | xargs -0 -n 1 -P 24 timeout -v --preserve-status --foreground 8 dash -c 'for __; do echo \"$__\" | gbc; done' _ ) ); echo \"\\f ----------\\n\\t finished 2^8^$__ with exit status $? ... \\n --------\"; done`\r\n\r\n```\r\n( printf 'obase=2^8^%d\\0' \"$__\" | xargs -0 -n 1 -P 24 timeout -v --foregroun) 0.00s user 0.01s system 86% cpu 0.008 total\r\n\r\n ----------\r\n\t finished 2^8^1 with exit status 0 ... \r\n --------\r\nRuntime warning (func=(main), adr=13): obase too large, set to 2147483647\r\n( printf 'obase=2^8^%d\\0' \"$__\" | xargs -0 -n 1 -P 24 timeout -v --foregroun) 0.00s user 0.01s system 58% cpu 0.012 total\r\n\r\n ----------\r\n\t finished 2^8^2 with exit status 0 ... \r\n --------\r\nRuntime warning (func=(main), adr=13): obase too large, set to 2147483647\r\n( printf 'obase=2^8^%d\\0' \"$__\" | xargs -0 -n 1 -P 24 timeout -v --foregroun) 0.00s user 0.00s system 82% cpu 0.007 total\r\n\r\n ----------\r\n\t finished 2^8^3 with exit status 0 ... \r\n --------\r\nRuntime warning (func=(main), adr=13): obase too large, set to 2147483647\r\n( printf 'obase=2^8^%d\\0' \"$__\" | xargs -0 -n 1 -P 24 timeout -v --foregroun) 0.00s user 0.00s system 84% cpu 0.008 total\r\n\r\n ----------\r\n\t finished 2^8^4 with exit status 0 ... \r\n --------\r\nRuntime warning (func=(main), adr=13): obase too large, set to 2147483647\r\n( printf 'obase=2^8^%d\\0' \"$__\" | xargs -0 -n 1 -P 24 timeout -v --foregroun) 0.01s user 0.00s system 90% cpu 0.012 total\r\n\r\n ----------\r\n\t finished 2^8^5 with exit status 0 ... \r\n --------\r\nRuntime warning (func=(main), adr=13): obase too large, set to 2147483647\r\n( printf 'obase=2^8^%d\\0' \"$__\" | xargs -0 -n 1 -P 24 timeout -v --foregroun) 0.14s user 0.01s system 98% cpu 0.143 total\r\n\r\n ----------\r\n\t finished 2^8^6 with exit status 0 ... \r\n --------\r\nRuntime warning (func=(main), adr=13): obase too large, set to 2147483647\r\n( printf 'obase=2^8^%d\\0' \"$__\" | xargs -0 -n 1 -P 24 timeout -v --foregroun) 3.64s user 0.01s system 99% cpu 3.654 total\r\n\r\n ----------\r\n\t finished 2^8^7 with exit status 0 ... \r\n --------\r\ntimeout: sending signal TERM to command ‘dash’\r\n( printf 'obase=2^8^%d\\0' \"$__\" | xargs -0 -n 1 -P 24 timeout -v --foregroun) 0.00s user 0.00s system 0% cpu 8.009 total\r\n\r\n ----------\r\n\t finished 2^8^8 with exit status 0 ... \r\n --------\r\ntimeout: sending signal TERM to command ‘dash’\r\n( printf 'obase=2^8^%d\\0' \"$__\" | xargs -0 -n 1 -P 24 timeout -v --foregroun) 0.00s user 0.00s system 0% cpu 8.008 total\r\n\r\n ----------\r\n\t finished 2^8^9 with exit status 0 ... \r\n --------\r\nRuntime warning (func=(main), adr=13): obase too large, set to 2147483647\r\ntimeout: sending signal TERM to command ‘dash’\r\n( printf 'obase=2^8^%d\\0' \"$__\" | xargs -0 -n 1 -P 24 timeout -v --foregroun) 0.00s user 0.01s system 0% cpu 8.011 total\r\n\r\n ----------\r\n\t finished 2^8^10 with exit status 0 ... \r\n --------\r\n```", + "closed": true, + "closedAt": "2024-01-27T20:24:51Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5yCwr9", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "In general, this problem is unsolvable. It's a consequence of the limits of computing. (The technical term is \"Turing-completeness.\")\r\n\r\nFor example, to us it's obvious that `2^8^10` is out of range. But computers do not understand any \"concept\" of math, so they can't tell.\r\n\r\nAll they can do is execute the code that they are given.\r\n\r\nYou'd see an different execution time if you did this:\r\n\r\n```\r\nobase = 104438888141315250669175271071662438257996424904738378038423348328395390\\\r\n797155745684882681193499755834089010671443926283798757343818579360726323\\\r\n608785136527794595697654370999834036159013438371831442807001185594622637\\\r\n631883939771274567233468434458661749680790870580370407128404874011860911\\\r\n446797778359802900668693897688178778594690563019026094059957945343282346\\\r\n930302669644305902501597239986771421554169383555988529148631823791443449\\\r\n673408781187263949647510018904134900841706167509366833385055103297208826\\\r\n955076998361636941193301521379682583718809183365675122131849284636812555\\\r\n022599830041234478486259567449219461702380650591324561082573183538008760\\\r\n862210283427019769820231316901767800667519548507992163641937028537512478\\\r\n401490715913545998279051339961155179427110683113409058427288427979155484\\\r\n978295432353451706522326906139490598769300212296339568778287894844061600\\\r\n741294567491982305057164237715481632138063104590291613692670834285644073\\\r\n044789997190178146576347322385026725305989979599609079946920177462481771\\\r\n844986745565925017832907047311943316555080756822184657174637329688491281\\\r\n952031745700244092661691087414838507841192980452298185733897764810312608\\\r\n590300130241346718972667321649151113160292078173803343609024380470834040\\\r\n3154190336\r\n```\r\n\r\ninstead of this:\r\n\r\n```\r\nobase = 2^8^4\r\n```\r\n\r\nAgain, the computer has no idea that `2^8^4` cannot work until it calculates it. We can see it by eye (\"`8^4` is definitely greater than 64, and `2^64` is the max\"), but the computer doesn't think that like. It sees:\r\n\r\n```\r\nconstant 2\r\nconstant 8\r\nconstant 4\r\nx = exponentiation 8 4\r\nexponentiation 2 x\r\n```\r\n\r\nI hope this makes sense.", + "createdAt": "2024-01-27T20:24:51Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/75#issuecomment-1913326333", + "viewerDidAuthor": true + } + ], + "createdAt": "2024-01-27T19:16:44Z", + "id": "I_kwDOCL0xJc59ZJcH", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 75, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "bc attempts to first calculate gigantic obase before erroring out", + "updatedAt": "2024-01-27T20:24:51Z", + "url": "https://github.com/gavinhoward/bc/issues/75" + }, + { + "assignees": [], + "author": { + "id": "U_kgDOCGPbwA", + "is_bot": false, + "login": "shuang886", + "name": "Steven Huang" + }, + "body": "Hi, just want to make sure I'm not missing something glaringly obvious...\r\n\r\nI'm trying to build just the library on macOS, so:\r\n\r\n```\r\n% ./configure -a\r\nTesting for FreeBSD...\r\nNot on FreeBSD. Using _POSIX_C_SOURCE and _XOPEN_SOURCE.\r\n\r\nTesting for Mac OSX...\r\nOn Mac OSX. Using _DARWIN_C_SOURCE.\r\n\r\nTesting for OpenBSD...\r\nNot on OpenBSD.\r\n\r\nVersion: 6.7.2\r\nBuilding bc\r\nBuilding dc\r\n\r\nBC_ENABLE_LIBRARY=1\r\n\r\nBC_ENABLE_HISTORY=0\r\nBC_ENABLE_EXTRA_MATH=1\r\nBC_ENABLE_NLS=0\r\n\r\nBC_ENABLE_AFL=0\r\n\r\nBC_NUM_KARATSUBA_LEN=32\r\n\r\nCC=c99\r\nCFLAGS= -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0\r\nHOSTCC=c99\r\nHOSTCFLAGS=\r\nCPPFLAGS=-DNDEBUG -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700\r\nLDFLAGS=-s \r\nPREFIX=/usr/local\r\nBINDIR=/usr/local/bin\r\nINCLUDEDIR=/usr/local/include\r\nLIBDIR=/usr/local/lib\r\nDATAROOTDIR=/usr/local/share\r\nDATADIR=/usr/local/share\r\nMANDIR=/usr/local/share/man\r\nMAN1DIR=/usr/local/share/man/man1\r\nMAN3DIR=/usr/local/share/man/man3\r\nNLSPATH=\r\nPC_PATH=/opt/homebrew/lib/pkgconfig\r\nEXECSUFFIX=\r\nEXECPREFIX=\r\nDESTDIR=\r\nLONG_BIT=\r\nGEN_HOST=1\r\nGEN_EMU=\r\n\r\nSetting Defaults\r\n================\r\nbc.banner=0\r\nbc.sigint_reset=1\r\ndc.sigint_reset=1\r\nbc.tty_mode=1\r\ndc.tty_mode=0\r\nbc.prompt=1\r\ndc.prompt=0\r\nbc.expr_exit=1\r\ndc.expr_exit=1\r\nbc.digit_clamp=0\r\ndc.digit_clamp=0\r\n```\r\n\r\nseems to be happy, but it doesn't actually build:\r\n\r\n```\r\n% make\r\nmkdir -p bin\r\nc99 -DBC_ENABLED=1 -DDC_ENABLED=1 -I./include/ -DBUILD_TYPE=HN -DEXECPREFIX= -DMAINEXEC=bc -D_DARWIN_C_SOURCE -DBC_NUM_KARATSUBA_LEN=32 -DBC_ENABLE_NLS=0 -DBC_ENABLE_EXTRA_MATH=1 -DBC_ENABLE_HISTORY=0 -DBC_ENABLE_LIBRARY=1 -DBC_ENABLE_MEMCHECK=0 -DBC_ENABLE_AFL=0 -DBC_DEFAULT_BANNER=0 -DBC_DEFAULT_SIGINT_RESET=1 -DBC_DEFAULT_TTY_MODE=1 -DBC_DEFAULT_PROMPT=1 -DBC_DEFAULT_EXPR_EXIT=1 -DBC_DEFAULT_DIGIT_CLAMP=0 -DDC_DEFAULT_SIGINT_RESET=1 -DDC_DEFAULT_TTY_MODE=0 -DDC_DEFAULT_PROMPT=0 -DDC_DEFAULT_EXPR_EXIT=1 -DDC_DEFAULT_DIGIT_CLAMP=0 -DNDEBUG -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0 -o src/args.o -c ./src//args.c\r\n./src//args.c:62:6: error: use of undeclared identifier 'vm'\r\n if (vm->exprs.v == NULL)\r\n ^\r\n./src//args.c:64:16: error: use of undeclared identifier 'vm'\r\n bc_vec_init(&vm->exprs, sizeof(uchar), BC_DTOR_NONE);\r\n ^\r\n...lots more...\r\n```\r\n\r\n`vm` appears to be defined in `src/vm.c` but inside a `#if !BC_ENABLE_LIBRARY`, while a lot of code in `src/args.c` are not correspondingly enclosed. I tried to sprinkle in some `#if !BC_ENABLE_LIBRARY` directives but that just exposed more code that needed to be `#ifdef`ed out.\r\n\r\nBuilding the executables (i.e., just plain `./configure`) compiles and runs fine.\r\n\r\nWould you mind clarifying if there's more needed than `./configure -a`? I couldn't find anything that helps in the build manual, and I get the sense that `args.c` should not have been in the `Makefile` at all...\r\n\r\nThanks!", + "closed": true, + "closedAt": "2023-11-27T21:30:42Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5s_tei", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "You're not missing something glaringly obvious. That is a bug because it should build with no errors.\r\n\r\nI think I fixed it in 7807eead159b80b51b8c81680608f8187284971e; can you pull and test for me?\r\n\r\nIf that *is* the fix, then the problem was an extra slash in a path; apparently Mac OSX does not clean paths when doing a string comparison. Oops.", + "createdAt": "2023-11-27T21:24:37Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/71#issuecomment-1828640674", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5s_vWb", + "author": { + "login": "shuang886" + }, + "authorAssociation": "NONE", + "body": "Works now, thanks!", + "createdAt": "2023-11-27T21:30:42Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/71#issuecomment-1828648347", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5s_vvD", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "You're welcome. I'll put out a new release with the fix.", + "createdAt": "2023-11-27T21:31:57Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/71#issuecomment-1828649923", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5s_y9T", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Ah! I made a mistake! Could you pull 7eaa40ab8cac29893155471076c621c2f9929d33 and see if that works?", + "createdAt": "2023-11-27T21:41:25Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/71#issuecomment-1828663123", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5s_zsO", + "author": { + "login": "shuang886" + }, + "authorAssociation": "NONE", + "body": "Yup, still works.", + "createdAt": "2023-11-27T21:43:29Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/71#issuecomment-1828666126", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5s_0Ig", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you, and I'm sorry.", + "createdAt": "2023-11-27T21:44:49Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "HEART", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/71#issuecomment-1828667936", + "viewerDidAuthor": true + } + ], + "createdAt": "2023-11-27T17:48:32Z", + "id": "I_kwDOCL0xJc53-Mb1", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 71, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Build errors after ./configure -a", + "updatedAt": "2023-11-27T21:44:50Z", + "url": "https://github.com/gavinhoward/bc/issues/71" + }, + { + "assignees": [], + "author": { + "id": "U_kgDOBZsPsA", + "is_bot": false, + "login": "STSMHQ", + "name": "STSM" + }, + "body": "Hi, @gavinhoward,\r\n\r\nI read the [documentation file](https://git.gavinhoward.com/gavin/bc/src/branch/master/manuals/bc/A.1.md) and it seems that arrays can only old a single value per each index (a number or a string). Is there any workaround to be able to store more than one single value in an array?\r\n\r\n```shell\r\n# This works\r\nbc_example[0] = 1;\r\n\r\n# This doesn't\r\nbc_example[1] = [1, 2, 3];\r\nbc_example[2] = [1, \"Random\", 3, \"Another\"];\r\n\r\nprint bc_example[2][1] # Random\r\n```\r\n\r\nAs I already stated before in another issue, I'm using your amazing tool to keep track of my expenses and it would be amazing to be able to create a \"matrix\" or an \"array of arrays\" as people often call it. Although I know that my use case isn't the general one and that the type of feature that I'm requesting doesn't make much sense considering the main goal/purpose of this tool, I'm opening this issue to know if what I want is somehow possible using any syntax workaround not documented in the above file.", + "closed": true, + "closedAt": "2023-11-13T16:02:39Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5ruIip", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Unfortunately, there is not any workaround, and that is on purpose. The `bc` language is just too restricted to go any further without *serious* work.\r\n\r\nIt is *possible*, yes. However, I believe that would be a mistake.\r\n\r\nI once said this:\r\n\r\n> Good software design includes putting whatever complexity must exist where it *best fits*.\r\n>\r\n> -- [\"Justifying a Backwards Design Decision for Yao][1]\r\n\r\nSo one of the skills of a good programmer is knowing *where* complexity should go.\r\n\r\nIf you need multiple values in one array slot, it sounds like you need structs, objects, or some other compound data thing. That sort of complexity should live in a \"proper\" programming language.\r\n\r\nSo I suggest that you use a \"proper\" programming language with arbitrary-precision numbers, like Python.\r\n\r\nThat said, I don't want to just hang you out to dry with no solution!\r\n\r\nYou're using my `bc` because it was the best for the job until now, right? Can you tell me why that is?\r\n\r\nYou've mentioned that you use it for finances; unlike most other math, finances basically require base 10 math, so is that why my `bc` was best?\r\n\r\nIf so, I might have a solution for you.\r\n\r\nDo you know Python?\r\n\r\nIf so, I could learn how to create a C extension for Python, and then I could use my [`bc`'s library form][2] to create a Python extension to use my `bc`'s library. That way, you could use Python, but still have the decimal-based math you need for finances, and I wouldn't have to do a ton of work to add multi-values to `bc` while also adding my `bc` to Python.\r\n\r\nAs an extra bonus, if you use Python, you could then have your files be output to JSON or another well-known format. And hey, I may even be able to help you convert your scripts to Python if you send them to me. (Do it through email, not this bug report!)\r\n\r\nWill that work for you?\r\n\r\n[1]: https://gavinhoward.com/2023/02/justifying-a-backwards-design-decision-for-yao/#designing-for-lsp\r\n[2]: https://github.com/gavinhoward/bc/blob/master/manuals/bcl.3.md", + "createdAt": "2023-11-12T22:06:36Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/70#issuecomment-1807255721", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5rytlH", + "author": { + "login": "STSMHQ" + }, + "authorAssociation": "NONE", + "body": "Hi, @gavinhoward,\r\n\r\nI'm using your `bc` tool for over a year to keep track of my expenses and everything related to my personal finances. The main reason behind this decision is what you just said, generally speaking, finances use base 10 math and `bc-gh` allows me to have arbitrary-precision numbers on it. The second big reason is **you**. The passion you put into your projects is truly amazing. I know that as long as you're alive and well, you'll keep this project running and that's a important thing for me. Also, your support as shown here in this issue is very, very good. To end, I'm a follower of your [blog](https://gavinhoward.com/) since the beginning of 2022.\r\n\r\nI don't know Python. I could learn it but I don't like much its' syntax and the biggest part of its' design choices. I'll probably take this chance to improve my NuShell knowledge and try to integrate `bc-gh` into it. With NuShell, I know that I can work with well-known formats like JSON/YAML/TOML in order to be able to implement my desired workflow. Thank you for everything and keep up the excellent work.\r\n\r\n", + "createdAt": "2023-11-13T16:02:39Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/70#issuecomment-1808456007", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5ry87l", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "You flatter me! :) But more seriously, thank you for the compliments; I struggle to see worth in my code, and that helps a lot.\r\n\r\nI'm sorry I couldn't help more. But feel free to ask any questions to help with your port to NuShell. I'm happy to help with that since I was not much help here!", + "createdAt": "2023-11-13T16:35:41Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/70#issuecomment-1808518885", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5r93lR", + "author": { + "login": "STSMHQ" + }, + "authorAssociation": "NONE", + "body": "> You flatter me! :) But more seriously, thank you for the compliments; I struggle to see worth in my code, and that helps a lot.\r\n\r\nYour code and your blog posts truly make a difference to my life 💙\r\n\r\n> I'm sorry I couldn't help more. But feel free to ask any questions to help with your port to NuShell. I'm happy to help with that since I was not much help here!\r\n\r\nYou don't have to be sorry. I read the documentation of NuShell and I think I'm able to implement my current workflow with `bc-gh` on it pretty easily. Thank you for all your spent time and help offered. Have a nice rest of week!", + "createdAt": "2023-11-14T21:51:18Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/70#issuecomment-1811380561", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5sEd4h", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "You're welcome.\r\n\r\nHey, when you finish your NuShell implementation, I would love it if you could email it to me; I'm almost done with my new language, and I'd love to use it as a test application.", + "createdAt": "2023-11-15T19:12:11Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/70#issuecomment-1813110305", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5sIRpw", + "author": { + "login": "STSMHQ" + }, + "authorAssociation": "NONE", + "body": "I'm still studying it. As NuShell didn't reach yet the first ever stable level, I don't know if I should implement all of my workflow directly using it. Currently, I'm just exploring the data processing pipeline features that they have against a workflow using `sed`/`awk` and your `bc-gh`, for instance. All I'm doing is pretty much pick a JSON file, iterate over it, apply some editions/additions using your `bc-gh` and then save it again to a JSON file. Hope you like NuShell as much as I do and one day in the future, it can have the same popularity as `zsh`.\r\n\r\nIf in the future I implement something that I'm proud of, I'll happily share it with you, Gavin.", + "createdAt": "2023-11-16T09:48:33Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/70#issuecomment-1814108784", + "viewerDidAuthor": false + } + ], + "createdAt": "2023-11-12T18:51:58Z", + "id": "I_kwDOCL0xJc52lbxv", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 70, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Array - Multiple values ", + "updatedAt": "2023-11-16T09:48:33Z", + "url": "https://github.com/gavinhoward/bc/issues/70" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjQ4MjY5Mzk5", + "is_bot": false, + "login": "TediusTimmy", + "name": "Thomas" + }, + "body": "Greetings,\r\n\r\nI am going to start with some pleasantries and BS and work from there.\r\n\r\nHello. I also like bc. I have some bc-related repos: https://github.com/TediusTimmy/GNU_bc_with_GMP and https://github.com/TediusTimmy/OpenBSD_bc_with_GMP . The first one is an example of how fast bc can be, if we just use GMP. I also fixed as many of the crashes as I was aware of (admittedly, by fixing the back-end to be more robust rather than fixing the garbage generated by the front-end; if you find a crash, please let me know). In the second repo, I have a comparison of the speed of several implementations of bc (based on my own benchmark), including yours. I found it to be roughly comparable to, but still slightly slower than, OpenBSD's bc (except on one specific task, where it even beat GMP). I also wrote a spreadsheet program to use bc-like numbers: https://github.com/TediusTimmy/BC-DeciCalc (which I _really_ need to work on the documentation for).\r\n\r\nAs for those bug-fixes in GNU bc: I really haven't been able to get ahold of Phil, or Ken. Thankfully, there were some really helpful people at Debian, and maybe one day, either https://salsa.debian.org/debian/bc/-/merge_requests/4 will be merged in, or they will just use a better bc implementation, like yours.\r\n\r\nFinally, are you aware of this: https://www.php.net/manual/en/book.bc.php ? They have forked the GNU bc code for number.c and include it in their builds. Maybe they could use the library version of your code? (My only concern would be https://bugs.php.net/bug.php?id=66364 )\r\n\r\n\r\nOn to the issue: I'm not a big fan of your `p(x,y)` function. Let me explain by way of a contrived example: `p(1024,32.1)`. Now `1024` is `2^10`, so this SHOULD give us `2^10^32.1` which is `2^(10*32.1)` or `2^321`. And that's an integer, so it should be exact. But, when we do this we find that only the first 18 digits are correct with the default scale of 20. As you manipulate the scale variable, you find a correlation between the scale variable and the number of correct digits. So, in order to compute this result to 20 digits of scale, you would need to compute the log and exponential to around 117 digits of scale. I don't think that I'm out of line to expect that when you increase the scale of a computation that maybe the last three digits change and you then get extra new good digits. With this implementation of `p(x,y)`, a good chunk of the number changes.\r\n\r\nAs I was thinking about this, four cases came up:\r\n1) If we are raising a number greater than one to a positive power, then we want to bump the scale by the length of the integer part.\r\n2) If we are raising a number greater than one to a negative power, then we can probably use `e(y*l(x))` as that result goes to zero.\r\n3) Conversely, if we are raising a number less than one to a positive power, then we can probably use `e(y*l(x))` as the result goes to zero.\r\n4) Finally, if if we are raising a number less than one to a negative power, then we need to be extra careful. We need to use the reciprocal to find the integer part, but want the reciprocal to the increased scale to have an accurate result (in my testing, it removed a problem in the unit in the last place).\r\n\r\nSo, my final function to improve `p(x,y)`, then commentary:\r\n```\r\ndefine pow(x,y){\r\n\tauto a,i,s,z\r\n\tif(0==y)return 1@scale\r\n\tif(0==x){\r\n\t\tif(y>0)return 0\r\n\t\treturn 1/0\r\n\t}\r\n\ta=y$\r\n\tif(y==a)return(x^a)@scale\r\n\tz=0\r\n\tif(x<1){\r\n\t\ty=-y\r\n\t\ta=-a\r\n\t\tz=x\r\n\t\tx=1/x\r\n\t}\r\n\tif(y<0){\r\n\t\treturn e(y*l(x))\r\n\t}\r\n\ti=x^a\r\n\ts=scale\r\n\tscale+=length(i)\r\n\tif(z){\r\n\t\tx=1/z\r\n\t\ti=x^a\r\n\t}\r\n\ti*=e((y-a)*l(x))\r\n\tscale=s\r\n\treturn i@scale\r\n}\r\n```\r\nI started with your `p(x,y)` function and then added code. We begin with some special case handling for zeros, because people will complain (I didn't realize that bc already defines `0^0==1`). Next is the detection for the easy case of an integer exponent that you already had. We then handle if x is between zero and one: we save x and proceed with the reciprocal, while negating the exponent. Remember that `l(x)==-l(1/x)`. I specifically ignore if x is negative, because we will eventually call `l(x)`, which will return an erroneous value if x is negative. If the exponent is now negative, we fall back on `e(y*l(x))`: that number is going to zero anyway. Next, we compute the integral portion of the exponent and use it to get the working scale for the fractional part of the exponent. After that, if we took the reciprocal of x, recompute the reciprocal and the integral part of the exponent at this higher scale to ensure that both are accurate. Penultimately, compute the fractional part of the exponent and multiply it by the integral part to get the complete exponent. Finally, return a result at the desired scale.\r\n", + "closed": true, + "closedAt": "2023-08-19T06:38:17Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5kV35W", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Hello.\r\n\r\n> As for those bug-fixes in GNU bc: I really haven't been able to get ahold of Phil, or Ken. Thankfully, there were some really helpful people at Debian, and maybe one day, either https://salsa.debian.org/debian/bc/-/merge_requests/4 will be merged in, or they will just use a better bc implementation, like yours.\r\n\r\nMaybe I'm selfish here, but I think they should just use mine. I tested my `bc` against all of the items at <https://lists.debian.org/debian-devel/2022/08/msg00035.html> and <https://bugs.launchpad.net/ubuntu/+source/bc/+bug/1775776>, and not only does my `bc` not crash, ASan, UBSan, and Valgrind report no errors, not even memory leaks. (Yay for fuzzing!) If you know how I might submit a request for them to do so, please let me know. I'll even build the Debian package myself!\r\n\r\n> Finally, are you aware of this: https://www.php.net/manual/en/book.bc.php ? They have forked the GNU bc code for number.c and include it in their builds. Maybe they could use the library version of your code? \r\n\r\nI *am* aware, actually. This was in the back of my mind when I accepted a request from my FreeBSD contact to implement the `bcl` library. But I don't know how to contact them and convince them to use my library.\r\n\r\n> (My only concern would be https://bugs.php.net/bug.php?id=66364 )\r\n\r\nUnfortunately, the PHP authors are wrong; that behavior is well-documented in the [POSIX standard for `bc`][1], which says about multiplication:\r\n\r\n> The result shall be the product of the two expressions. If a and b are the scales of the two expressions, then the scale of the result shall be:\r\n>\r\n> `min(a+b,max(scale,a,b))`\r\n\r\nSo their fix for that bug report is wrong, in my opinion. Thus, I don't think they'll adopt my library because I won't patch my library for their \"bug.\"\r\n\r\n> On to the issue: I'm not a big fan of your `p(x,y)` function...\r\n\r\nYour criticisms are absolutely fair. Fair enough that I took your code (with style fixes), documented it, and pushed it as the `better_pow` branch in this repo.\r\n\r\nCan you take a look to check if the code is correct, that it works for you, and that the documentation I added in `manuals/algorithms.md` is correct? I documented it in my own words, to make sure I understood the code.\r\n\r\nFinally, last item: do you think that you'll open more issues on `bc` in the future? If so, I'll add an account for you on my website; I just need an email address.\r\n\r\n[1]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html#tag_20_09_13_03", + "createdAt": "2023-08-18T07:09:12Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/69#issuecomment-1683455574", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5kV5_7", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Forgot to say this:\r\n\r\n> In the second repo, I have a comparison of the speed of several implementations of bc (based on my own benchmark), including yours. I found it to be roughly comparable to, but still slightly slower than, OpenBSD's bc (except on one specific task, where it even beat GMP).\r\n\r\nThose benchmarks make sense to me, except plain OpenBSD `bc` being faster than mine; it uses plain `char` for digits, so mine should be faster. My guess is that it is parsing without many error checks.\r\n\r\nAlso, I store constants as strings, like GNU. This is because someone could change the `ibase` at any time, and if they do, that constant needs to be interpreted according to the new `ibase`. But I know for a fact that the OpenBSD `bc` has a different behavior: it will interpret the number according to the digits, no matter if the digits are invalid for the `ibase`. This allows it to precalculate, where GNU and I cannot.", + "createdAt": "2023-08-18T07:17:28Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/69#issuecomment-1683464187", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5kbO1o", + "author": { + "login": "TediusTimmy" + }, + "authorAssociation": "NONE", + "body": "Many apologies. I posted that improvement and went straight to bed last night, and then life got in the way of me responding. And I am going to go straight to bed tonight, also.\r\n\r\n> If you know how I might submit a request for them to do so, please let me know.\r\n\r\nHonestly, when it comes to Debian, Philip Hands was a godsend (but, he isn't the maintainer). I tried emailing Phil Nelson and Ken Pizzini and Ryan Kavanagh, but those probably went into spam filters. Eventually, I emailed the debian-devel mailing list and someone who helps first-time contributors (Hands) picked it up and ran with it. Like any large open-source project, it has an inscrutable political organization to outsiders like us. I was lucky that they even have a merge request for the changes (which has been open for over a year).\r\n\r\nThe real problem is that GNU bc is \"good enough\". It has vulnerabilities that no one is known to have exploited (if they even are exploitable). People complain, but not loud enough to get things done. It works for its purpose, and doesn't seem to have a large user base.\r\n\r\n> But I don't know how to contact them and convince them to use my library.\r\n\r\nAgain: inscrutable political organization. I don't actually program with PHP, I also am just aware of this extension. Looking at this bug report ( https://github.com/php/php-src/issues/10967 ), maybe the internal mailing list or the RFC process is what you want. \r\n\r\n> the PHP authors are wrong\r\n\r\nYeah. Thought, looking at it again, they could have fixed the issue here ( https://github.com/php/php-src/blob/master/ext/bcmath/bcmath.c#L258 ) instead of where they did. You could convince them that this is the better place for a bodge between their code and the bc library (as the behavior is standards-driven). Though, even Debian has a bug for this: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=610988\r\n\r\n> with style fixes\r\n\r\nWhat did you change? Oh, that. I get that from a former workplace.\r\n\r\n> it uses plain char for digits\r\n\r\nIt uses the OpenSSL BIGNUM library, which is binary words ( https://github.com/openbsd/src/blob/master/usr.bin/dc/bcode.h#L24 and https://github.com/openbsd/src/blob/master/lib/libcrypto/bn/bn_local.h#L121 ). For every 64 bits of a number, they are operating on all 64 bits, and you are operating on a little over 63 bits of it and have a normalization step. The trade-off rears its ugly head when numbers get converted to/from decimal.\r\n\r\n> do you think that you'll open more issues on bc in the future\r\n\r\nI don't have any plans. This was a spur-of-the-moment thing. I had \"finished\" a pow function for the spreadsheet, and decided to rewrite it in bc. (And then, I spent a bunch of time rewriting it again, as I realized that I had missed some corner cases). I don't plan to make a habit of this.\r\n\r\nAs for reviewing things:\r\n\r\n> being non-zero is a flag for later and a value to be used\r\n\r\nI did that, didn't I? Bad me.\r\n\r\nI don't know if the algorithm needs this much detail. It is probably good to give the impression that someone put thought and care into making sure the results were accurate. Though, really it was just some rando who kept doing really large exponents and wanted some numerical stability as he cranked up the precision while looking at numbers like https://www.youtube.com/watch?v=BdHFLfv-ThQ.", + "createdAt": "2023-08-19T06:38:17Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/69#issuecomment-1684860264", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5kbPwt", + "author": { + "login": "TediusTimmy" + }, + "authorAssociation": "NONE", + "body": "And I forgot to say something: I understand that the frustrating thing about the bcmath extension to PHP is that you have something that is _just better_. And you have no idea how to make things better.", + "createdAt": "2023-08-19T06:46:55Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/69#issuecomment-1684864045", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5kcbqC", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "> Eventually, I emailed the debian-devel mailing list and someone who helps first-time contributors (Hands) picked it up and ran with it. Like any large open-source project, it has an inscrutable political organization to outsiders like us.\r\n\r\nYeah, that sounds exhausting. Not worth it to me at the moment.\r\n\r\n> The real problem is that GNU bc is \"good enough\". It has vulnerabilities that no one is known to have exploited (if they even are exploitable). People complain, but not loud enough to get things done. It works for its purpose, and doesn't seem to have a large user base.\r\n\r\nThis is true.\r\n\r\n> Yeah. Thought, looking at it again, they could have fixed the issue here ( https://github.com/php/php-src/blob/master/ext/bcmath/bcmath.c#L258 ) instead of where they did. You could convince them that this is the better place for a bodge between their code and the bc library (as the behavior is standards-driven).\r\n\r\nEh, probably not worth it.\r\n\r\n> Though, even Debian has a bug for this: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=610988\r\n\r\nYikes. People don't read, do they? Okay, I *really* don't care about getting into Debian.\r\n\r\n> It uses the OpenSSL BIGNUM library, which is binary words\r\n\r\nOh, that was not what I understood. Oops. Those benchmarks make sense then.\r\n\r\n> I don't have any plans. This was a spur-of-the-moment thing.\r\n\r\nOkay.\r\n\r\n> As for reviewing things...I did that, didn't I? Bad me.\r\n\r\nWell, that `bc` code goes straight into the binary as a string. Using `z` as a flag and a value is useful to reduce the number of bytes used. I kept it for a reason.\r\n\r\n> I don't know if the algorithm needs this much detail. It is probably good to give the impression that someone put thought and care into making sure the results were accurate.\r\n\r\n*I* need that much detail. I *have* to understand every bit of code in this repo.\r\n\r\nTake, for example, the comment [here][1]. That was me explaining, *to myself*, an algorithm that someone else coded up. If there was a bug in that algorithm when I got it (and there was), there was no way for me to debug it unless I knew what it was supposed to be doing.\r\n\r\nIf there is a bug in your code, I need to understand your code to debug it.\r\n\r\nThat's why there is a wealth of information for developers; it's for *me*.\r\n\r\nSo I'm glad to know that the explanation is correct, but I'll keep all of it. :)\r\n\r\nI may wait a while to release a new version (I have a new PR about adding CMake support), but I will release a new version with your code within a reasonable time.\r\n\r\nThank you.\r\n\r\n[1]: https://github.com/gavinhoward/bc/blob/75cf2e3358b5a76780db0d448c02cf6f61065921/src/num.c#L3077-L3113", + "createdAt": "2023-08-20T04:43:10Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/69#issuecomment-1685174914", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5nZ8wq", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "There is now a version (`6.6.1`) with your `p()` implementation. Thank you very much!", + "createdAt": "2023-09-26T05:30:27Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/69#issuecomment-1734855722", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5nnXnb", + "author": { + "login": "TediusTimmy" + }, + "authorAssociation": "NONE", + "body": "You are welcome. I hope it is as useful for your other users as it is to me and not a maintenance burden on you.", + "createdAt": "2023-09-28T03:11:48Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/69#issuecomment-1738373595", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5nnXzO", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "None at all now that I understand it, thanks to you!", + "createdAt": "2023-09-28T03:13:15Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/69#issuecomment-1738374350", + "viewerDidAuthor": true + } + ], + "createdAt": "2023-08-18T05:29:27Z", + "id": "I_kwDOCL0xJc5uoYUw", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 69, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Incoherent rambling followed by a suggestion for an improvement.", + "updatedAt": "2023-09-28T03:13:15Z", + "url": "https://github.com/gavinhoward/bc/issues/69" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjI5MDIyNQ==", + "is_bot": false, + "login": "mhorowitz", + "name": "" + }, + "body": "platform: MacOS Ventura 13.2.1 (m1 max)\r\ncompiler: c99 from Xcode 14.2.0\r\nversion: https://git.gavinhoward.com/gavin/bc.git 55a6c05b280fbfb6873e42a5825403c17417029a\r\n\r\nBuild fails:\r\n```\r\n$ ./configure -O3\r\n<success>\r\n$ make\r\nc99 -DBC_ENABLED=1 -DDC_ENABLED=1 -I./include/ -DBUILD_TYPE=A -DEXECPREFIX= -DMAINEXEC=bc -DBC_NUM_KARATSUBA_LEN=32 -DBC_ENABLE_NLS=1 -DBC_ENABLE_EXTRA_MATH=1 -DBC_ENABLE_HISTORY=1 -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_MEMCHECK=0 -DBC_ENABLE_AFL=0 -DBC_DEFAULT_BANNER=0 -DBC_DEFAULT_SIGINT_RESET=1 -DBC_DEFAULT_TTY_MODE=1 -DBC_DEFAULT_PROMPT=1 -DBC_DEFAULT_EXPR_EXIT=1 -DBC_DEFAULT_DIGIT_CLAMP=0 -DDC_DEFAULT_SIGINT_RESET=1 -DDC_DEFAULT_TTY_MODE=0 -DDC_DEFAULT_PROMPT=0 -DDC_DEFAULT_EXPR_EXIT=1 -DDC_DEFAULT_DIGIT_CLAMP=0 -DNDEBUG -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -O3 -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0 -o src/program.o -c ./src//program.c\r\n./src//program.c:2994:6: error: use of undeclared identifier 'SIGWINCH'\r\n if (BC_SIG_INTERRUPT(vm))\r\n ^\r\n./include/status.h:698:45: note: expanded from macro 'BC_SIG_INTERRUPT'\r\n BC_UNLIKELY((vm)->sig != 0 && (vm)->sig != SIGWINCH)\r\n ^\r\n./src//program.c:3724:6: error: use of undeclared identifier 'SIGWINCH'\r\n if (BC_SIG_INTERRUPT(vm))\r\n ^\r\n./include/status.h:698:45: note: expanded from macro 'BC_SIG_INTERRUPT'\r\n BC_UNLIKELY((vm)->sig != 0 && (vm)->sig != SIGWINCH)\r\n ^\r\n2 errors generated.\r\nmake: *** [src/program.o] Error 1\r\n```\r\nI think ideally, configure.sh would detect this, and apply an appropriate set of flags, or the source would be changed appropriately.\r\n\r\nAs a workaround, this allows a successful build:\r\n```\r\nCFLAGS=-D_DARWIN_C_SOURCE ./configure -O3\r\n```", + "closed": true, + "closedAt": "2023-03-31T17:44:43Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5Y4XHV", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Stupid GitHub, closing the issue just because I mention the number in a commit...\r\n\r\nAnyway, yes, this is a bug, and yes, `configure.sh` should detect this.\r\n\r\nI've added 29b4b6a4f27b07c4a176258aaf831a5208d4e116 in an attempt to fix this. Unfortunately, I don't have a Mac, so you'll need to test this for me. Would you please do that? Thank you.", + "createdAt": "2023-03-31T01:36:32Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/67#issuecomment-1491169749", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5Y8585", + "author": { + "login": "mhorowitz" + }, + "authorAssociation": "NONE", + "body": "> I've added https://github.com/gavinhoward/bc/commit/29b4b6a4f27b07c4a176258aaf831a5208d4e116 in an attempt to fix this. Unfortunately, I don't have a Mac, so you'll need to test this for me. Would you please do that? Thank you.\r\n\r\nI tested it. ./configure.sh output includes\r\n\r\n On Mac OSX. Using _DARWIN_C_SOURCE.\r\n\r\nAnd make completes without error. Thanks for the quick fix!", + "createdAt": "2023-03-31T17:44:43Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/67#issuecomment-1492361017", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5Y867a", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for testing! And thank you for the report. I rely on users like you to help me with Mac OSX!", + "createdAt": "2023-03-31T17:46:45Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "ROCKET", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/67#issuecomment-1492365018", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5c_2t2", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Release `6.6.0` is out with the fix. Thank you!", + "createdAt": "2023-05-23T23:11:04Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/67#issuecomment-1560243062", + "viewerDidAuthor": true + } + ], + "createdAt": "2023-03-30T22:25:15Z", + "id": "I_kwDOCL0xJc5iQKue", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 67, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Build fails on macOS", + "updatedAt": "2023-05-23T23:11:20Z", + "url": "https://github.com/gavinhoward/bc/issues/67" + }, + { + "assignees": [], + "author": { + "id": "U_kgDOBZsPsA", + "is_bot": false, + "login": "STSMHQ", + "name": "STSM" + }, + "body": "Hi, there,\r\n\r\nI love your command line tool and your blog (I read all your posts). You're an amazing developer. I hope one day I can be like you.\r\nI'm opening this issue to ask you if there is any way to bypass the `Math error: overflow: number cannot fit` error on your calculator. I would like to test it for benchmark purposes against Julia REPL (for example), but your `bc` gives me this error when the number has too many digits.\r\n\r\nExample Calculation: `((169287^137)^920)^13256118217109`.\r\n\r\nRegards,\r\n**STSM**", + "closed": true, + "closedAt": "2023-03-21T17:06:49Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5XyVJh", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Hello,\r\n\r\nThank you for the compliments!\r\n\r\n> I'm opening this issue to ask you if there is any way to bypass the `Math error: overflow: number cannot fit` error on your calculator.\r\n\r\nIt depends.\r\n\r\nOn the particular example you gave, my machine did not give the error. (I am running an `x86_64` Linux machine.)\r\n\r\nThe error happens in this case because `bc` limits exponents to the maximum that can fit in the `unsigned long` type. There are good reasons for this, not least of which calculating a power with an exponent larger than that takes a long time.\r\n\r\nFor example, I started running the example calculation you gave seven hours ago, and it's still going.\r\n\r\nThe other reason is that the exponent needs to be converted into an `unsigned long` to do the actual calculation, which involves running a loop.\r\n\r\nBy the way, this is also the reason that exponents need to be integers.\r\n\r\nAnyway, one way to get around the limit would be to get a computer with a 64-bit `unsigned long` type. Machines that may *not* have that could include Windows (even if 64-bit) or 32-bit machines with any OS.\r\n\r\nAs an example, here are the limits for my machine (found by the `limits` keyword):\r\n\r\n```\r\n$ bc\r\n>>> limits\r\nBC_LONG_BIT = 64\r\nBC_BASE_DIGS = 9\r\nBC_BASE_POW = 1000000000\r\nBC_OVERFLOW_MAX = 18446744073709551615\r\n\r\nBC_BASE_MAX = 1000000000\r\nBC_DIM_MAX = 18446744073709551614\r\nBC_SCALE_MAX = 18446744073709551614\r\nBC_STRING_MAX = 18446744073709551614\r\nBC_NAME_MAX = 18446744073709551614\r\nBC_NUM_MAX = 18446744073709551614\r\nBC_RAND_MAX = 18446744073709551615\r\nMAX Exponent = 18446744073709551615\r\nNumber of vars = 18446744073709551614\r\n>>> quit\r\n```\r\n\r\nThere are two to notice: `BC_LONG_BIT` and `MAX Exponent`.\r\n\r\n`BC_LONG_BIT` is 64, which means `bc` was built assuming a 64-bit `unsigned long` type. `MAX Exponent` is the actual limit to the exponent, which equals `(2^64)-1`, which is `ULONG_MAX` on a machine with a 64-bit `unsigned long`.\r\n\r\nHowever, if I tell my `bc` to assume a 32-bit `unsigned long` when I build it, using:\r\n\r\n```\r\n$ LONG_BIT=32 ./configure <args>\r\n$ make\r\n```\r\n\r\nThen the limits look different:\r\n\r\n```\r\n$ bin/bc\r\n>>> limits\r\nBC_LONG_BIT = 32\r\nBC_BASE_DIGS = 4\r\nBC_BASE_POW = 10000\r\nBC_OVERFLOW_MAX = 4294967295\r\n\r\nBC_BASE_MAX = 10000\r\nBC_DIM_MAX = 4294967294\r\nBC_SCALE_MAX = 4294967294\r\nBC_STRING_MAX = 4294967294\r\nBC_NAME_MAX = 4294967294\r\nBC_NUM_MAX = 4294967294\r\nBC_RAND_MAX = 4294967295\r\nMAX Exponent = 4294967295\r\nNumber of vars = 18446744073709551614\r\n>>> quit\r\n```\r\n\r\n`BC_LONG_BIT` is now 32, and `MAX Exponent` is now 4294967295, which is `(2^32)-1`. Notice that 4294967295 is less than the last exponent (13256118217109) in your example calculation. This means that if 4294967295 is your `MAX Exponent`, you will get that error. And I *do* get that error when trying your example computation with that build.\r\n\r\nNow, there *is* still a way around it, but it requires some math knowledge.\r\n\r\nYou must know one fact: `(x^y)*(x^z) == x^(y+z)`.\r\n\r\nIn essence, if you multiply two powers of one number, the effect is the same as adding the exponents of those powers and then calculating the power from the sum of those exponents.\r\n\r\nUsually, you would want to just add the exponents and then calculate the power because multiplications would be much more expensive. However, in this case, we can do the opposite: split the exponent (13256118217109) into several numbers and then multiply all of those numbers together.\r\n\r\nLet's decide on one exponent to use, which I'll call `E`. I can divide 13256118217109 by `E`, and the result is the number of times that I need to multiply the power by itself. However, that will not be quite right because `E` almost certainly does not divide 13256118217109 evenly, so `13256118217109%E` won't be 0. In that case, we'll want to multiply the end result by the power where the exponent is equal to `13256118217109%E`.\r\n\r\nIt will all look like this (in `bc` code):\r\n\r\n```\r\nscale = 0\r\ns = ((169287^137)^920)\r\nn = s^E\r\nr = n\r\nt = 13256118217109 / E\r\nm = 13256118217109 % E\r\n\r\nfor (i = 1; i < t; ++i)\r\n{\r\n r *= n\r\n}\r\n\r\nr *= s^m\r\n```\r\n\r\nBut even then, we can make it faster. Since we are just multiplying the value by itself many times, we can use power again. This time, the exponents (3086 and 6172) are back within limits, so we're safe.\r\n\r\nIf we do that, we get:\r\n\r\n```\r\nscale = 0\r\ns = ((169287^137)^920)\r\nt = 13256118217109 / E\r\nm = 13256118217109 % E\r\nn = s^E\r\nr = n^t\r\nr *= s^m\r\n```\r\n\r\nAnd that should give us our answer.\r\n\r\nWe should set those exponents as best as we can to make it as efficient as possible.\r\n\r\nI know that my `bc` uses the binary representation of the exponent to calculate power. Every bit that's a 1 has an extra multiply.\r\n\r\nSo if I set one of the powers to `(2^32)-1`, I know every single bit will be 1, meaning that there will be extra multiplications. However, it will also mean I need to use an exponent of 3086 (`13256118217109/((2^32)-1)`), whereas if I set one of the powers to be `2^31`, there will only be a single 1 bit, but I will need to use an exponent of 6172.\r\n\r\nAn exponent of 6172 has the same amount of 1 bits as 3086 (it's just 3086 times 2), so it will require only one more multiply. However, `2^31` will require 30 less multiplies than `(2^32)-1`, so we'll go with that.\r\n\r\nThat gives us this code:\r\n\r\n```\r\nscale = 0\r\ne = 2^31\r\ns = ((169287^137)^920)\r\nt = 13256118217109 / e\r\nm = 13256118217109 % e\r\nn = s^e\r\nr = n^t\r\nr *= s^m\r\n```\r\n\r\nI haven't tested the above code because it will take forever. If there are problems, please let me know.\r\n\r\n> I would like to test it for benchmark purposes against Julia REPL (for example)\r\n\r\nMy `bc` will be slower than Julia. I am confident of that.\r\n\r\nThis is because my `bc` does not use the full range of hardware-native integers in order to use decimal-based math. I bet Julia does use the full range and uses binary-based math.\r\n\r\nAlso, since it's taken seven hours on my `bc` on a 64-bit machine, I am *wildly* confident that Julia will be better.\r\n\r\nYou may want a benchmark with a smaller exponent.", + "createdAt": "2023-03-16T22:04:11Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1472811617", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5X2u-Q", + "author": { + "login": "STSMHQ" + }, + "authorAssociation": "NONE", + "body": "First of all, I just want to let you know that you're really, really amazing. The passion that you've for your project(s) and for the people that interact with them is something that melts my heart. I hope one day I can be a programmer as good as you and also, more important, have the same amount of passion that you have.\r\n\r\nEnglish is not my primary language, so this may not make any sense.\r\n\r\n> Anyway, one way to get around the limit would be to get a computer with a 64-bit unsigned long type. Machines that may not have that could include Windows (even if 64-bit) or 32-bit machines with any OS.\r\n\r\nI'm using a x64 Windows Machine, that's the reason, so. I'll start compiling your `bc` on Linux using WSL.\r\n\r\n> You must know one fact: `(x^y)*(x^z) == x^(y+z)`.\r\n> \r\n> In essence, if you multiply two powers of one number, the effect is the same as adding the exponents of those powers and then calculating the power from the sum of those exponents.\r\n\r\nI knew that, but somehow I didn't think about it. Thanks for the recap.\r\n\r\n> My `bc` will be slower than Julia. I am confident of that.\r\n>\r\n> This is because my `bc` does not use the full range of hardware-native integers in order to use decimal-based math. I bet Julia does use the full range and uses binary-based math.\r\n\r\nWell, that's kinda \"chinese\" to me. I'm not as good as you to understand that low-level programming stuff\r\n\r\n> You may want a benchmark with a smaller exponent.\r\n\r\nI'll.\r\n\r\nOn another topic, I'm using your tool to keep track of my expenses. Before closing this issue, I would like to ask you if there is any way that I can use \"import\" statements in your `bc` ecosystem.\r\n\r\nI know that I can work with more than one file at the same time using the `-f`/`-c` flags, but I'm wondering if is possible to access multiple files by only importing one - and use data from other files inside it.\r\n\r\nMy goal (if that can help you answering it) is to have a single file with functions/operations and then a bunch of other files only with data (expenses and gains) - like a local mini database - that I can call in the \"main\" `bc` file and work with.\r\n", + "createdAt": "2023-03-17T14:54:05Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1473965968", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5X5p-w", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for your compliment!\r\n\r\nJust so you know, I have [not always had this passion][1]. But I firmly believe that software is meant to serve people. That's why I focus so much on helping others.\r\n\r\nIt makes me really happy that you noticed!\r\n\r\n> I'm using a x64 Windows Machine, that's the reason, so. I'll start compiling your `bc` on Linux using WSL.\r\n\r\nYeah, sorry about that. Windows is dumb in that they decided that the `unsigned long` type should remain 32 bits. It was a stupid decision.\r\n\r\n> Well, that's kinda \"chinese\" to me. I'm not as good as you to understand that low-level programming stuff\r\n\r\nI apologize. I'll try again.\r\n\r\nUnder the hood, `bc` uses 32-bit unsigned integers (on 64-bit) as \"digits\". It turns out that the highest power of 10 that 32 bits can contain is `10^9`, or 1,000,000,000. This is one more than the maximum value that `bc` allows in each 32-bit integer. If it goes higher than this, `bc` will detect that it went higher and add the extra to the next \"digit\". This keeps each digit below 1,000,000,000.\r\n\r\nHowever, that is not optimal. I did that because `bc` needs to have decimal-based math. (In other words, the math needs to be in base 10.) If you can have your math in binary, base 2, it's much cheaper because then you can make your limit `2^32`, which is much higher than `10^9` (4,294,967,296 vs. 1,000,000,000).\r\n\r\nJulia uses base 2. This means that each \"digit\" can store more, which means the numbers are smaller (in number of digits). And smaller numbers mean faster execution.\r\n\r\nI hope that made sense.\r\n\r\n> On another topic, I'm using your tool to keep track of my expenses.\r\n\r\nI admit that's *terrifying* to me. I mean, technically, it should be safe, as long as you don't do any division or modulus in your scripts. But I don't want to screw up your finances with `bc`.\r\n\r\nI hope you remember there's **no warranty**. If there is a bug, I'll try to help, but I can't guarantee that your financial records will be correct in the presence of bugs.\r\n\r\nI *will* guarantee, though, that I know of no bugs. I have fixed all of the ones I am aware of.\r\n\r\n> Before closing this issue, I would like to ask you if there is any way that I can use \"import\" statements in your bc ecosystem.\r\n\r\nSort of.\r\n\r\n> I know that I can work with more than one file at the same time using the `-f`/`-c` flags, but I'm wondering if is possible to access multiple files by only importing one - and use data from other files inside it.\r\n\r\nWell, that's the only way.\r\n\r\nActually, it's even simpler than that. `bc` runs scripts in the order given on the command-line. For example, you could run this:\r\n\r\n```\r\n$ bc funcs.bc database.bc main.bc\r\n```\r\n\r\nAnd `bc` will run `funcs.bc`, then `database.bc`, then `main.bc`.\r\n\r\nThis means that anything in `funcs.bc` can affect the execution of `database.bc`, and anything in `funcs.bc` and `database.bc` can affect the execution of `main.bc`.\r\n\r\nThis means that you can chain together scripts in a way that acts like import. Sort of. If you would only import at the top of a file.\r\n\r\nBasically, this would mean that if `bc` had an `import` statement, the above would be equivalent to putting:\r\n\r\n```\r\nimport funcs.bc\r\nimport database.bc\r\n```\r\n\r\nat the *top* of `main.bc`.\r\n\r\nI do this myself; I have a math research project, and when I get new ideas, I start a new script. But I have all of my common functions in a `lib.bc` script, so I run it like this:\r\n\r\n```\r\n$ bc lib.bc <current_script>\r\n```\r\n\r\nThis even works for global variables; if you set a variable `food_expenses` to say `101.00` at the top level of a script, that variable will equal `101.00` in later scripts.\r\n\r\nSo if I were you, I would have a `funcs.bc` script that defines all of the functions. Then I would have a `database.bc` script that has the current values of all of your expenses. It should look something like this:\r\n\r\n```\r\nfood_expenses = 101.00\r\nentertainment_expenses = 45.50\r\n```\r\n\r\nand so on.\r\n\r\nThen, in the last script, I would have the code to actually update the database, but instead of directly updating, I would have it print the new \"version\" of `database.bc` to `stdout`.\r\n\r\nThen you would run it like this:\r\n\r\n```\r\n$ bc funcs.bc database.bc main.bc > temp.bc\r\n```\r\n\r\nThen check that `temp.bc` is correct. If it is, you can remove `database.bc` and rename `temp.bc` to `database.bc`:\r\n\r\n```\r\n$ rm database.bc\r\n$ mv temp.bc database.bc\r\n```\r\n\r\nTo make the example more concrete, let's assume that you have a `funcs.bc` that looks like this:\r\n\r\n```\r\ndefine void add_to_food_expenses(expense) {\r\n # If you don't put `food_expenses` in an `auto` statement,\r\n # then the global variable will be affected.\r\n food_expenses += expense\r\n # The global `total_expenses` is also affected with an `auto`.\r\n total_expenses += expense\r\n}\r\n\r\ndefine void print_new_database() {\r\n print \"food_expenses = \", food_expenses, \"\\n\"\r\n print \"total_expenses = \", total_expenses, \"\\n\"\r\n}\r\n```\r\n\r\nThen perhaps you have a `database.bc` that looks like this:\r\n\r\n```\r\nfood_expenses = 101.00\r\ntotal_expenses = 404.40\r\n```\r\n\r\nThen you have a `main.bc` that looks like this:\r\n\r\n```\r\n# read() reads from stdin.\r\nexpense = read()\r\n\r\nadd_to_food_expenses(expense)\r\n\r\nprint_new_database()\r\n```\r\n\r\nThen running the following:\r\n\r\n```\r\n$ echo \"35.75\" | bc funcs.bc database.bc main.bc\r\n```\r\n\r\nwill print:\r\n\r\n```\r\nfood_expenses = 136.75\r\ntotal_expenses = 440.15\r\n```\r\n\r\nwhich if you redirect to `temp.bc`:\r\n\r\n```\r\n$ echo \"35.75\" | bc funcs.bc database.bc main.bc > temp.bc\r\n```\r\n\r\nwill make `temp.bc` a valid replacement for `database.bc`.\r\n\r\n(While it may be safe to redirect straight to `database.bc`, I would not suggest doing so. If `funcs.bc` has any print statements that run, `database.bc` will be overwritten before it is ever read.)\r\n\r\n> My goal (if that can help you answering it) is to have a single file with functions/operations and then a bunch of other files only with data (expenses and gains) - like a local mini database - that I can call in the \"main\" `bc` file and work with.\r\n\r\nI *think* I answered according to your goal. I hope that helps, but please come back with any questions you have.\r\n\r\n[1]: https://gavinhoward.com/2021/12/is-it-even-worth-working-on-foss-anymore/", + "createdAt": "2023-03-18T05:48:18Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1474731952", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5YHLzP", + "author": { + "login": "STSMHQ" + }, + "authorAssociation": "NONE", + "body": "Hi. Sorry for the delay replying.\r\n\r\n> It makes me really happy that you noticed!\r\n\r\nOf course. I'm lacking motivation for programming - even in my university project (I'm currently in my last year of my master degree) -, specially now with all the improvements made in the IA field, but reading your blog posts and messages like this one, somehow, gives me motivation to continue.\r\n\r\nI would like to suggest, if possible, a way to interact with you in your blog (like a comments section, for example). \r\n\r\n> I hope that made sense.\r\n\r\nIt did. I studied it in my first year at university, but I didn't know that specifically, so thank you.\r\n\r\n> I hope you remember there's **no warranty**. If there is a bug, I'll try to help, but I can't guarantee that your financial records will be correct in the presence of bugs.\r\n> \r\n> I *will* guarantee, though, that I know of no bugs. I have fixed all of the ones I am aware of.\r\n\r\nAnd that's all that matters for me. There is nothing that compares to the support that you offer.\r\n\r\n> I think I answered according to your goal. I hope that helps, but please come back with any questions you have.\r\n\r\nYou did. Thanks again for the time spent on this. I use a different set of files, but the information that you gave me is going to help me improve my system. So, thanks (one more time xD).", + "createdAt": "2023-03-21T17:06:49Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1478278351", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5YIXfA", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "> Sorry for the delay replying.\r\n\r\nNo worries!\r\n\r\n> Of course. I'm lacking motivation for programming - even in my university project (I'm currently in my last year of my master degree)\r\n\r\nOh, cool, what is your project? (I dropped out of a Master's; I'm kind of jealous.)\r\n\r\n> I would like to suggest, if possible, a way to interact with you in your blog (like a comments section, for example).\r\n\r\nI have thought about this many times and have always rejected the idea due to the amount of spam-busting and moderation required, at least as told by other bloggers. Oh, and I don't want people to see a buggy site if they have JavaScript turned off as comments nearly always require JavaScript.\r\n\r\nHowever, your suggestion has made me look at it again, and I had an idea.\r\n\r\nOne of the best pieces of software, at least for forums, is the software underpinning <https://lobste.rs/>. While I have been banned from that site, I appreciate the software for its moderation capabilities. This includes invite-only registration, which would help a lot to only allow people who want to interact with me and others in a good way.\r\n\r\nI've also always wanted to run a forum site where Free Speech was honored as much as possible because [I think Free Speech is necessary to find the truth][1].\r\n\r\nSo in response to your suggestion, if the lobste.rs software will work for my purposes, I'll spin up an instance at <https://forum.gavinhoward.com/> (or something similar), and I'll send you an invite, along with anyone else whose opinions I trust. And every time I post something new, I'll put it on the instance and link to it from the post. That should allow me to have a \"comments section\" while not interfering with my current site.\r\n\r\nI think I'll also allow others to post stuff too. Maybe I'll make its theme to be anything that is intellectually stimulating. I don't know; I'm just spitballing here.\r\n\r\n> I studied it in my first year at university, but I didn't know that specifically, so thank you.\r\n\r\nYou're welcome!\r\n\r\n> And that's all that matters for me.\r\n\r\nThank goodness!\r\n\r\n> There is nothing that compares to the support that you offer.\r\n\r\nYou're welcome! And thank you. I am overjoyed to hear this, actually.\r\n\r\nI'm starting a business right now, and my product is support for Open Source software that I have written. I was wondering if that would be a good product, but if my support is good, it might work. So I'm *thrilled* that you think so!\r\n\r\n(Don't worry; I'll always support `bc` for free; it's my gift to the world. The software that I'll be supporting for pay is at <https://git.yzena.com/Yzena/Yc>.)\r\n\r\nFull disclosure: this is also why I took your suggestion for a comments section more seriously; it would be a good way for me to network with potential clients. I apologize for having less than perfect motives.\r\n\r\nAlso, to take it one step further, can I point to this interaction we had as an example of the support I will give? I think it would be great material to advertise with. No offense if you don't want that though; I know that's a selfish motive.\r\n\r\n> You did. Thanks again for the time spent on this. I use a different set of files, but the information that you gave me is going to help me improve my system. So, thanks (one more time xD).\r\n\r\nYou're welcome! Glad I could help!\r\n\r\n[1]: https://gavinhoward.com/2019/11/recommendations-and-radicalization/", + "createdAt": "2023-03-21T21:13:49Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1478588352", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5YLZeg", + "author": { + "login": "STSMHQ" + }, + "authorAssociation": "NONE", + "body": "> Oh, cool, what is your project? (I dropped out of a Master's; I'm kind of jealous.)\r\n\r\nYou don't need to be. You seem to have the required knowledge to be a teacher on my university. I'm from Portugal, btw.\r\n\r\nMy project is about telemetry. I'm building a telemetry solution using OpenTelemetry and multiple analysis backends for a health company. The problem is that such project is inside DevOps field and that's not my expertice or even the field that I want to work on. I want to be a programmer, a system programmer to be more precise.\r\n\r\n> This includes invite-only registration, which would help a lot to only allow people who want to interact with me and others in a good way.\r\n\r\nThat seems a good way to implement it. I didn't know about that specific website, but after a brief usage of it, I can say that I liked the way that it works.\r\n\r\n> So in response to your suggestion, if the lobste.rs software will work for my purposes, I'll spin up an instance at https://forum.gavinhoward.com/ (or something similar), and I'll send you an invite, along with anyone else whose opinions I trust. And every time I post something new, I'll put it on the instance and link to it from the post. That should allow me to have a \"comments section\" while not interfering with my current site.\r\n\r\nThat makes a lot of sense. I appreciate the consideration for my opinion xD\r\n\r\nWhen that instance is online, let me know, please.\r\n\r\n> I'm starting a business right now, and my product is support for Open Source software that I have written. I was wondering if that would be a good product, but if my support is good, it might work. So I'm thrilled that you think so!\r\n\r\nI see.. something like the commercial support that Daniel Stenberg offers for cURL?\r\n\r\n> (Don't worry; I'll always support bc for free; it's my gift to the world. The software that I'll be supporting for pay is at https://git.yzena.com/Yzena/Yc.)\r\n\r\nThat's nice to read. I'm planning to use `bc` for a very long time :d\r\n\r\n> Full disclosure: this is also why I took your suggestion for a comments section more seriously; it would be a good way for me to network with potential clients. I apologize for having less than perfect motives.\r\n\r\nIt wasn't necessary to make that disclosure. You're too kind just for considering having to do it. \r\n\r\n> Also, to take it one step further, can I point to this interaction we had as an example of the support I will give? I think it would be great material to advertise with. No offense if you don't want that though; I know that's a selfish motive.\r\n\r\nOf course you can. I'm flattered to be part of that.\r\n\r\n> You're welcome! Glad I could help!\r\n\r\nYou always do. Thanks (one more time)!", + "createdAt": "2023-03-22T11:20:57Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1479382944", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5YagqG", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "> The problem is that such project is inside DevOps field and that's not my expertice or even the field that I want to work on. I want to be a programmer, a system programmer to be more precise.\r\n\r\nOuch. I feel for you, and I feel lucky.\r\n\r\nI know this may not help, but I have personally found that my system programming skills (dev) got better after I learned system admininstration (ops).\r\n\r\nSystem administration is important to me for another reason: without it, I can't host my code or the forum that I mentioned.\r\n\r\nOnce you get your Master's, maybe you can try to do what I have done: build excellent system software and support it. That may give you the room you need to make it a career. If it is going to work for me, it will surely work for you too!\r\n\r\n> When that instance is online, let me know, please.\r\n\r\nIt's up at <https://forum.gavinhoward.com/>, but email is not working, so I need to wait. Please send me an email using the email listed at <https://gavinhoward.com/contact/>, and I'll send you an invite once email is working.\r\n\r\n> I see.. something like the commercial support that Daniel Stenberg offers for cURL?\r\n\r\nYes, basically.\r\n\r\n> Of course you can. I'm flattered to be part of that.\r\n\r\nThank you!", + "createdAt": "2023-03-24T20:02:20Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1483344518", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5YtkJ8", + "author": { + "login": "STSMHQ" + }, + "authorAssociation": "NONE", + "body": "Sorry for the delay replying (again).\r\n\r\n> I know this may not help, but I have personally found that my system programming skills (dev) got better after I learned system admininstration (ops).\r\n\r\nI hope you're right.\r\n\r\n> Once you get your Master's, maybe you can try to do what I have done: build excellent system software and support it. That may give you the room you need to make it a career. If it is going to work for me, it will surely work for you too!\r\n\r\nI'm trying to learn Rust on my free time, but it's been hard - I know your opinion about Rust xD -, let's see. \r\n\r\n> It's up at https://forum.gavinhoward.com/, but email is not working, so I need to wait. Please send me an email using the email listed at https://gavinhoward.com/contact/, and I'll send you an invite once email is working.\r\n\r\nThe [forum](https://forum.gavinhoward.com/) returns a 500 error code to me and the [contact page](https://gavinhoward.com/contact/) shows me that your e-mail is `<my_first_name>@<this_website>`. I'll send an email to `<redacted>` and hope it works.\r\n\r\n> Yes, basically.\r\n\r\nI see. Well, good luck for your new project. I'm pretty sure that people will love your support as much as I do.", + "createdAt": "2023-03-29T10:27:50Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1488339580", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5YwWgF", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "> I'm trying to learn Rust on my free time, but it's been hard - I know your opinion about Rust xD -, let's see.\r\n\r\nRemember that my Rust opinion is personal; Rust is pretty good in general.\r\n\r\n> The [forum](https://forum.gavinhoward.com/) returns a 500 error code to me and the [contact page](https://gavinhoward.com/contact/) shows me that your e-mail is `<my_first_name>@<this_website>`.\r\n\r\nI'm having trouble with the forum. In fact, it turns out that sending email just doesn't work. My email provider is blaming the lobste.rs software, but the software has the right settings, so...\r\n\r\nI'm probably just going to have to write my own forum software. Sorry for the delay. It may be a year or so.\r\n\r\n> I'll send an email to `<redacted>` and hope it works.\r\n\r\nThat is the correct address. I've redacted it because I don't want it machine-readable (to avoid spam), but it is correct.\r\n\r\n> I see. Well, good luck for your new project. I'm pretty sure that people will love your support as much as I do.\r\n\r\nThank you!", + "createdAt": "2023-03-29T18:07:27Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1489070085", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5Y0Yev", + "author": { + "login": "STSMHQ" + }, + "authorAssociation": "NONE", + "body": "> Remember that my Rust opinion is personal; Rust is pretty good in general.\r\n\r\nI hope it is here to stay for the long run.\r\n\r\n> I'm probably just going to have to write my own forum software. Sorry for the delay. It may be a year or so.\r\n\r\nNo problem. I'll put a reminder on my calendar, so. See you in a year (or so). Have a nice week!", + "createdAt": "2023-03-30T11:18:53Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1490126767", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5kIVVh", + "author": { + "login": "TediusTimmy" + }, + "authorAssociation": "NONE", + "body": "Hey, I realize that you asked this five months ago, but I just saw this and I wanted to chime in, because I love REALLLY BIG NUMBERS.\r\n\r\nNow, Gavin noted that `(x^y)*(x^z) == x^(y+z)`. It is also true that `(x^y)^z == x^(y*z)`. So, we can simplify your question to `169287^1670801140084418360`. Hoo, boy is that a big number! How big is it? `2.4917161343640611*10^8735990286585912792` The number that describes how many digits are in the number has 19 digits in it.\r\n\r\nHow did I do this (and what is Julia probably doing under the covers)? The same way a slide rule works: logarithms. It is definitionally true that `a^u=e^(ln(a^u))`. So `a^u=e(u*ln(a))`. But this works in any base, so I'll choose base 10 (I hope you remember your laws of logarithms).\r\n\r\nTo follow along:\r\n```\r\nscale=40\r\n137*920*13256118217109*l(169287)/l(10)\r\n```\r\nThat should give you that exponent. Remember: the number we want is ten raised to this power. To get the leading digits, we extract the mantissa (the fractional portion of a logarithm), and then raise 10 to this power. This works because of what Gavin noted: we can separate `3.2` into `3+.2`, and we are raising ten to this power, so it becomes `(10^3)*(10^.2)`:\r\n```\r\ne(.3964985643509537948664437764527360339575*l(10))\r\n```\r\n\r\nI want to point out two things: firstly, `bc` is going to compute all of the digits of this number; secondly, it is a big number. If we pack 19 decimal digits into every 8 bytes, it will still take over 3,000 petabytes of memory to store this number. To give you a sense of scale: at the end of 2021, Internet Archive had 212 petabytes of data archived.", + "createdAt": "2023-08-16T03:29:40Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1679906145", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5kl8FL", + "author": { + "login": "STSMHQ" + }, + "authorAssociation": "NONE", + "body": "Hi, @TediusTimmy. Thank you for your explanation. It helped a lot. I didn't know some of that mathematic equivalences. Have a nice week.", + "createdAt": "2023-08-22T07:56:38Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/66#issuecomment-1687667019", + "viewerDidAuthor": false + } + ], + "createdAt": "2023-03-16T12:20:42Z", + "id": "I_kwDOCL0xJc5g_6ME", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 66, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "[QUESTION] Bypass Math Overflow for Large Computations", + "updatedAt": "2023-08-22T07:56:38Z", + "url": "https://github.com/gavinhoward/bc/issues/66" + }, + { + "assignees": [], + "author": { + "id": "U_kgDOB5Gq1Q", + "is_bot": false, + "login": "ikolesnikes", + "name": "" + }, + "body": "bin/bc enters an infinite loop while evaluating the cube-root of 0.01\r\n\r\nbin/bc -l -e 'cbrt(0.1)'\r\nreturns .46415888336127788924 (which is expected)\r\n\r\nbin/bc -l -e 'cbrt(0.01)'\r\nfreezes\r\n\r\nLooking at the definition of root(x,n) in lib2.bc the following loop never exits\r\n\r\n\twhile(r!=q){\r\n\t\tr=q\r\n\t\tq=(p*r+x/r^p)/n\r\n\t}\r\n\r\nA simple hack makes the cbrt function working.\r\n\r\n\twhile(abs(r-q)>0.000001){\r\n\t\tr=q\r\n\t\tq=(p*r+x/r^p)/n\r\n\t}", + "closed": true, + "closedAt": "2023-03-15T21:56:14Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5XXKFy", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Yes, this is a bug. I have reproduced it.\r\n\r\nYour fix pointed right to the problem, which I suspected: it ran into a pathological case where the two values, `r` and `q`, never equaled each other because they would keep switching, i.e., `r` would equal `x`, and `q` would equal `y`, then on the next iteration, `r` would equal `y`, and `q` would equal `x`.\r\n\r\nThis is the reason I hate algorithms that are calculated by series. They can easily have problems like this.\r\n\r\nI tried to fix it with 01230fcd9cfb547c5666247e1a36c624d3f2d01c. It increases the precision, but then does the comparison at a smaller precision.\r\n\r\nCan you pull and test it for me? I'll start my release process in the meantime.", + "createdAt": "2023-03-13T08:13:31Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/64#issuecomment-1465688434", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5XYwKM", + "author": { + "login": "ikolesnikes" + }, + "authorAssociation": "NONE", + "body": "I tested your solution and it worked!\r\nMaybe it's worth to add a test for this case.\r\n\r\nNever mind, you already did it.", + "createdAt": "2023-03-13T13:03:47Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/64#issuecomment-1466106508", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5XZaRe", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Yes, but you are right that if I did not, I should have!\r\n\r\nI will put out a release with the fix as soon as I can. I'll close this issue at that time.", + "createdAt": "2023-03-13T14:45:27Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/64#issuecomment-1466279006", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5XrBvX", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Release `6.5.0` is out! Thank you for the report!", + "createdAt": "2023-03-15T21:56:14Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/64#issuecomment-1470897111", + "viewerDidAuthor": true + } + ], + "createdAt": "2023-03-13T06:01:54Z", + "id": "I_kwDOCL0xJc5gm5mO", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 64, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "bc freezes evaluating cbrt(0.01)", + "updatedAt": "2023-03-15T21:56:14Z", + "url": "https://github.com/gavinhoward/bc/issues/64" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjE0ODEyNjg=", + "is_bot": false, + "login": "pg83", + "name": "Anton Samokhvalov" + }, + "body": "https://github.com/gavinhoward/bc/blob/master/scripts/safe-install.sh#L28 creates hard dependency loop on previously available bc for install process, which can be not available:\r\n\r\n* in bootstrap environments\r\n* in cross-compile environments\r\n", + "closed": true, + "closedAt": "2023-02-25T15:11:27Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5WEExO", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Whoops. I did not think of that. My bad.\r\n\r\nThis should be fixed in 313738df7f6d65875dd91ef63565227d0f782472 and 349cd801d5a7f4ab2fad76096d271397aa738063. I put out `6.3.1` because I know for a fact that Linux from Scratch will need these changes too, and they usually just grab the latest release.\r\n\r\nI hope this new release works for you. Please close this issue if it does.", + "createdAt": "2023-02-24T16:05:13Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/63#issuecomment-1443908686", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5WIxOt", + "author": { + "login": "pg83" + }, + "authorAssociation": "NONE", + "body": "thanx!", + "createdAt": "2023-02-25T15:11:27Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/63#issuecomment-1445139373", + "viewerDidAuthor": false + } + ], + "createdAt": "2023-02-24T11:34:48Z", + "id": "I_kwDOCL0xJc5fRqQO", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 63, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "bc -> bc dependency loop", + "updatedAt": "2023-02-25T15:11:28Z", + "url": "https://github.com/gavinhoward/bc/issues/63" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjUzMTI5ODE2", + "is_bot": false, + "login": "enh-google", + "name": "" + }, + "body": "trying to update AOSP to 6.2.4 (https://android-review.googlesource.com/c/platform/external/bc/+/2433072) i hit:\r\n```\r\ntests/: 413 files pushed, 0 skipped. 6.5 MB/s (1197549 bytes in 0.175s)\r\nscripts/functions.sh: 1 file pushed, 0 skipped. 60.6 MB/s (14190 bytes in 0.000s)\r\n***********************************************************************\r\n\r\nRunning bc tests...\r\n\r\nRunning bc decimal...pass\r\nSkipping bc print test\r\nSkipping bc parse test\r\nSkipping bc lib2\r\nRunning bc print2...pass\r\nRunning bc length...pass\r\nRunning bc scale...pass\r\nSkipping bc shift\r\nRunning bc add...pass\r\nRunning bc subtract...pass\r\nRunning bc multiply...pass\r\nRunning bc divide...pass\r\nRunning bc modulus...pass\r\nRunning bc power...pass\r\nRunning bc sqrt...pass\r\nSkipping bc trunc\r\nSkipping bc places\r\nRunning bc vars...pass\r\nRunning bc boolean...pass\r\nRunning bc comp...pass\r\nRunning bc abs...pass\r\nRunning bc assignments...pass\r\nRunning bc functions...pass\r\nSkipping bc scientific\r\nSkipping bc engineering\r\nRunning bc globals...pass\r\nRunning bc strings...pass\r\nSkipping bc strings2 test\r\nRunning bc letters...pass\r\nRunning bc exponent...pass\r\nRunning bc log...pass\r\nRunning bc pi...pass\r\nRunning bc arctangent...pass\r\nRunning bc sine...pass\r\nRunning bc cosine...pass\r\nSkipping bc bessel test\r\nRunning bc arrays...pass\r\nRunning bc misc...pass\r\nRunning bc misc1...pass\r\nRunning bc misc2...pass\r\nRunning bc misc3...pass\r\nRunning bc misc4...pass\r\nRunning bc misc5...pass\r\nRunning bc misc6...pass\r\nRunning bc misc7...pass\r\nRunning bc misc8...pass\r\nRunning bc void...pass\r\nSkipping bc rand\r\nRunning bc recursive_arrays...pass\r\nRunning bc divmod...pass\r\nRunning bc modexp...pass\r\nSkipping bc bitfuncs\r\nSkipping bc leadingzero\r\nRunning bc is_number...pass\r\nRunning bc is_string...pass\r\nRunning bc asciify_array...pass\r\nRunning bc line_by_line1...pass\r\nRunning bc line_by_line2...pass\r\nRunning bc line_loop_quit1...pass\r\nRunning bc line_loop_quit2...pass\r\nRunning bc stdin tests...pass\r\n/data/local/tmp/bc-tests/tests/scripts.sh[66]: check_d_arg: inaccessible or not found\r\n\r\nExit Code: 127\r\n```\r\nlooking at scripts.sh, it doesn't source functions.sh where the preceding scripts do. i'm not sure why that works with bash? i didn't think bash exported functions by default, but maybe it's doing so?\r\n\r\nanyway, i tested the obvious fix (https://android-review.googlesource.com/c/platform/external/bc/+/2433072/2/tests/scripts.sh).", + "closed": true, + "closedAt": "2023-02-15T16:15:07Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5VLKwA", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Whoops. That's a bug.\r\n\r\nI tried clicking your links, but they complained that I wasn't signed in our didn't have permission.\r\n\r\nI presume your obvious fix was to source `functions.sh`? I'll do that in my repo when I get home. Do you want a tagged release?", + "createdAt": "2023-02-14T01:55:30Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/62#issuecomment-1428990976", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5VLMMt", + "author": { + "login": "enh-google" + }, + "authorAssociation": "NONE", + "body": "> I tried clicking your links, but they complained that I wasn't signed in our didn't have permission.\r\n\r\ngah, don't get me started ... the powers that be inflicted a stupid url rewriter on us recently that mean we can't give working urls to anyone. i'd tried to manually fix these, but didn't test them. fixed now (retconned above).\r\n\r\n> I presume your obvious fix was to source `functions.sh`?\r\n\r\nexactly.\r\n\r\n> I'll do that in my repo when I get home. Do you want a tagged release?\r\n\r\nyes please... our tooling isn't yet clever enough to get us back on to the next tagged release if we switch to a sha, so until we implement that, it's quite a bit more convenient if there's another tag. (especially if i happen to go under a bus :-) )", + "createdAt": "2023-02-14T02:02:08Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/62#issuecomment-1428996909", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5VLqu1", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Fixed in 714782c613ec2a4570f63c1285d38785961edb89, which should also preemptively fix any other occurrences of this same bug.\r\n\r\nI'm running a basic release process to ensure that the release still builds and tests, but I should have a tag out tomorrow morning (US time).", + "createdAt": "2023-02-14T05:04:50Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/62#issuecomment-1429121973", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5VP1W1", + "author": { + "login": "enh-google" + }, + "authorAssociation": "NONE", + "body": "> I'm running a basic release process to ensure that the release still builds and tests, but I should have a tag out tomorrow morning (US time).\r\n\r\nthanks! no hurry...", + "createdAt": "2023-02-14T18:46:00Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/62#issuecomment-1430214069", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5VQreo", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "It's out! Because I haven't been able to get an Android environment going yet, I'm still not sure this will work for you. If it does, though, please close this issue. Otherwise, I'll try something else.", + "createdAt": "2023-02-14T22:04:15Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/62#issuecomment-1430435752", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5VRBCe", + "author": { + "login": "enh-google" + }, + "authorAssociation": "NONE", + "body": "thanks... testing now: https://android-review.googlesource.com/c/platform/external/bc/+/2436773", + "createdAt": "2023-02-14T23:24:21Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/62#issuecomment-1430524062", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5VVNiI", + "author": { + "login": "enh-google" + }, + "authorAssociation": "NONE", + "body": "merged! thanks for your help :-)", + "createdAt": "2023-02-15T16:15:07Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/62#issuecomment-1431623816", + "viewerDidAuthor": false + } + ], + "createdAt": "2023-02-14T00:32:53Z", + "id": "I_kwDOCL0xJc5eXxKU", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 62, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "another mksh/bash difference?", + "updatedAt": "2023-02-15T16:15:07Z", + "url": "https://github.com/gavinhoward/bc/issues/62" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjUzMTI5ODE2", + "is_bot": false, + "login": "enh-google", + "name": "" + }, + "body": "i haven't been able to update for some time (5.0.1 was our last update!) because the tests fail in a weird way without much useful information. i've included the current failures for 6.2.2 below, for example.\r\n\r\nmy guess is that this is something to do with Android using mksh as its /bin/sh. the interleaved output makes it appear like there might be some disagreement about job handling between bash and mksh?\r\n\r\nare the current bc tests known to work on shells other than bash (and in particular mksh)? any ideas where i should look (or some kind of parallelism i can just disable)?\r\n```\r\n~/aosp-master-with-phones/external/bc$ ./run-bc-tests-on-android.sh \r\ntests/: 413 files pushed, 0 skipped. 0.8 MB/s (1191155 bytes in 1.372s)\r\nscripts/functions.sh: 1 file pushed, 0 skipped. 75.4 MB/s (12065 bytes in 0.000s)\r\n***********************************************************************\r\n\r\nRunning bc tests...\r\n\r\nSkipping bc lib2\r\nSkipping bc shift\r\nSkipping bc trunc\r\nSkipping bc places\r\nSkipping bc print test\r\nSkRunning bc decimal...Running bc print2...ipping bc parse test\r\nRunning bc scale...Skipping bc scientific\r\nRunning bc length...Running bc sqrt...Running bc modulus...RuRunning bc add...nning bc divide...Running bc subtract...Skipping bc engineering\r\nRunning bc multiply...Running bc power...Running bc abs...Running bc functions...pass\r\nRunning bc boolean...Running bc comp...Running bc assignments...Running bc vars...pass\r\nSkipping bc rand\r\npass\r\nSRunning bc globals...kipping bc bitfuncs\r\npass\r\nRunning bc strings...pass\r\nRunning bc cosine...pass\r\nSkipping bc strings2 test\r\nSkipping bc bessel test\r\npass\r\nRunning bc sine...Running bc misc2...RRunning bc exponent...pRunning bc log...Running bc misc8...Running bc misc...Running bc misc4...Running bc pi...upass\r\nSkipping bc leadingzero\r\nnning bc misc1...ppasRunning bc arrays...asss\r\n\r\nass\r\nRunning bc arctangent...Running bc misc6...Running bc modexp...Running bc void...Running bc misc3...Running bc letters...pass\r\npass\r\npRunning bc misc7...ass\r\npass\r\npass\r\nRunning bc divmod...Running bc recursive_arrays...Running bc misc5...pass\r\npass\r\npass\r\npass\r\npass\r\npass\r\npass\r\nppass\r\nass\r\nRunning bc is_number...pass\r\npass\r\npass\r\npass\r\nRunning bc asciify_array...Running bc line_loop_quit1...pass\r\nppass\r\npass\r\npass\r\npass\r\npass\r\nass\r\nRunning bc is_string...Running bc line_by_line1...Running bc line_by_line2...Running bc line_loop_quit2...Running bc command-line error tests...Running bc stdin tests...pass\r\nRunning bc error file 01.txt with clamping...pass\r\npass\r\npass\r\nRunning bc read...Running bc error file 02.txt with clamping...Running bc error file 03.txt with clamping...pass\r\npass\r\npass\r\npass\r\npass\r\npass\r\npass\r\npass\r\nRunning bc error file 01.txt without clamping...Running bc error file 04.txt with clamping...ppass\r\nSkipping bc script multiply.bc\r\npass\r\nass\r\nRunning bc error file 02.txt without clamping...pass\r\nRunning bc error file 05.txt with clamping...Skipping bc script divide.bc\r\nRunning bc error file 03.txt without clamping...Skipping bc script subtract.bc\r\npass\r\nRunning bc errors...Running bc read errors...pass\r\nSkipping bc script add.bc\r\nRunning bc error file 06.txt with clamping...Running bc error file 04.txt without clamping...pRunning bc error file 07.txt with clamping...ass\r\nRunning bc error file 01.txt through cat with clamping...pass\r\nRunning bc error file 08.txt with clamping...pass\r\nSkipping bc script print.bc\r\nRunning bc error file 02.txt through cat with clamping...Running bc error file 03.txt through cat with clamping...pass\r\npass\r\npass\r\nRunning bc error file 05.txt without clamping...pass\r\npass\r\nRunning bc error file 09.txt with clamping...pass\r\nRunning bc error file 07.txt without clamping...pass\r\nSkipping bc script parse.bc\r\nRunRunning bc error file 04.txt through cat wnith clamping...ing bc error file 06.txt without clamping...pass\r\nRunning bc error file 10.txt with clamping...RRunning bc empty read...Running bc error file 01.txt through cat without clamping...unning bc script array.bc...RRunning bc error file 03.txt through cat without clamping...pass\r\npaRunning bc error file 08.txt without clamping...Running bc error file 11.txt with clamping...pss\r\nunning bc script array2.bc...ass\r\npass\r\npass\r\nRunning bc error file 02.txt through cat without clamping...pass\r\npass\r\nRunning bc script atan.bc...Running bc error file 09.txt without clamping...Running bc error file 05.txt through cat with clamping...pass\r\npass\r\nRunning bc error file 10.txt without clamping...Running bc error file 06.txt through cat with clamping...Running bc error file 12.txt with clamping...RunRunning bc error file 04.txt through cat without clamping...pass\r\nSkipping bc script bessel.bc\r\npass\r\nning bc error file 07.txt through cat with clamping...Running bc script functions.bc...pass\r\nRunning bc error file 11.txt without clamping...Running bc error file 13.txt with clamping...pass\r\npass\r\nRunning bc error file 08.txt through cat with clamping...pass\r\npass\r\nRunning bc error file 14.txt with clamping...pass\r\nRunning bc read EOF...pass\r\nRunning bc error file 09.txt through cat with clamping...pass\r\npass\r\npass\r\nRunning bc error file 05.txt through cat without clamping...pass\r\npRunning bc script globals.bc...pass\r\nass\r\nRunning bc error file 15.txt with clamping...Skipping bc script: rand.bc\r\nRRunning Rbc error ufninlien g10.txt through cbca ts cwriitpht len.bc...clamping...pass\r\nunning bc error file 07.txt through cat without clamping...pass\r\nRRunning bc error file 06.txt through cat without clamping...pass\r\nRunning bc error file 11.txt through cat with clamping...unning bc error file 12.txt without clamping...pass\r\nRunning bc error file 08.txt through cat without clamping...pass\r\nRunning bc error file 16.txt with clamping...pass\r\nRunning bc error file 14.txt without clamping...pass\r\nRunning bc error file 13.txt without clamping...pass\r\nRunning bc script references.bc...Running bc error file 17.txt with clamping...Running bc error file 09.txt through cat without clamping...pass\r\npass\r\npass\r\npass\r\npass\r\npass\r\nRuRunning bc error file 15.txt without clamping...nning bc error file 18.txt with clamping...Running bc script screen.bc...pass\r\nRpass\r\npapass\r\nunning bc error file 12.txt through cat with clamping...ss\r\nRunning bc error file 11.txt through cat without clamping...Rpass\r\nunning bc error file 10.txt through cat without clamping...Running bc error file 19.txt with clamping...Skipping bc script strings2.bc\r\npass\r\nRunning bc error file 13.txt through cat with clamping...pass\r\nRunning bc error file 16.txt without clamping...pass\r\nRunning bc error file 14.txt through cat with clamping...Running bc error file 20.txt with clamping...pass\r\nRunning bc error file 17.txt without clamping...pass\r\npass\r\nRunning bc error file 21.txt with clamping...paspass\r\nRunning bc script ifs.bc...s\r\nRunning bc error file 18.txt without clamping...pass\r\nRunning bc error file 15.txt through cat with clamping...pass\r\nRunning bc script ifs2.bc...Rpass\r\npass\r\nRunning bc error file 12.txt through cat without clamping...pass\r\nunning bc error file 19.txt without clamping...Running bc erpass\r\nror file 22.txt with clamping...Running bc error file 13.txt through cat without clamping...Rpass\r\npRunning bc error file 20.txt without clamping...pass\r\nass\r\nRuRRuunning bc error file 14.txt through cat without clamping...nnning bc script afl1.bc...unning bc error file 23.txt with clning bcamp einrrg..or. file 16.txt through cat with clamping...pass\r\npass\r\nRunning bc error file 17.txt through cat with clamping...Running bc error filepass\r\npass\r\npass\r\nRunniRunning bc error file 15.txt through cat without clamping... 21.txtng bc error file 24.txt with clamping... without clamping...Running bc error file 18.txt through cat with clamping...pass\r\npass\r\npass\r\npass\r\npass\r\nRunning bc error file 25.txt with clamping...pass\r\nRunning bc error file 22.txt without clamping...Running bc error file 19.txt through cat with clamping...pass\r\nRunning bc error file 16.txt through cat without clamping...Running bc error file 23.txt without clamping...pass\r\npass\r\npass\r\nRunning bc error file 20.txt through cat with clamping...pass\r\nRunning bc error file 26.txt with clamping...Running bc error file 17.txt through cat without clamping...Running bc error file 24.txt without clamping...Running bc error file 27.txt with clamping...pass\r\nRunning bc error file 18.txt through cat without clamping...pass\r\npass\r\npass\r\nRunning bc error file 21.txt through cat with clamping...pass\r\nRunning bc error file 19.txt through cat without clamping...pass\r\nRunning bc error file 22.txt through cat with clamping...pass\r\nRunning bc error file 25.txt without clamping...Running bc error file 28.txt with clamping...pass\r\npass\r\npass\r\npass\r\npass\r\nRunning bc error file 23.txt through cat with clamping...Running bc error file 20.txt through cat without clamping...RuRunning bc error file 29.txt with clamping...Running bc error file 24.txt through cat with clamping...pass\r\nnning bc error file 26.txt without clamping...pass\r\nRunning bc error file 27.txt without clamping...pass\r\npass\r\npass\r\npass\r\nRunning bc error file 22.txt through cat without clamping...Running bc error file 30.txt with clamping...Running bc error file 21.txt through cat without clamping...Running bc error file 31.txt with clamping...pass\r\npass\r\nRunning bc error file 25.txt through cat with clamping...Running bc error file 28.txt without clamping...pass\r\nRunning bc error file 23.txt through cat without clamping...pass\r\nRunning bc error file 27.txt through cat with clamping...pass\r\nRunning bc error file 32.txt with clamping...Running bc error file 24.txt through cat without clamping...Skipping problematic bc error file 33.txt...\r\nRunning bc error file 26.txt through cat with clamping...pass\r\npass\r\npass\r\npass\r\npaRunning bc error file 29.txt withss\r\npout clamping...ass\r\npass\r\nRuRupass\r\nA test failed!\r\nRunning bc error file 25.txt through cat without clamping...Running bc error file 30.txt without clamping...passnning bc error file 28.txt through nning bc error file 31.txt without clamping...\r\ncat with clamping...pass\r\nRunning bc error file 27.txt through cat without clamping...pass\r\npass\r\nA test failed!\r\nRunning bc error file 34.txt with clamping...Running bc error file 32.txt without clamping...pass\r\npass\r\nA test failed!\r\nRunning bc error file 26.txt through cat without clampiRunning bc error file 29.txt through cat with clamping...pass\r\nng...pRunning bc error file 35.txt with clamping...pass\r\nRunning bc error file 31.txt through cat with clamping...A Running bc error file 36.txt with clamping...pass\r\nRunning bc error file 30.txt through cat with clamping...\r\nRunning bc quit test...test failed!\r\nass\r\npass\r\nA test failed!\r\npass\r\nRunning bc error file 32.txt through cat with clamping...Running bc error file 28.txt through cat without clamping...Running bc error file 34.txt without clamping...pass\r\npass\r\npass\r\npass\r\nRA pass\r\ntest failed!\r\nunning bc error file 29.txt through cat without clamping...Running bcpass\r\n error file 35.txt without clamping...Running bc error file 30.txt through cat without clamping...pass\r\nRunning bc error file 31.txt through cat without clamping...Running bc error file 36.txt without clamping...A pass\r\ntest failed!\r\npass\r\nRunning bc error file 34.txt through cat with clamping...pA Running bc error file 32.txt through cat without clamping...ass\r\ntest failed!\r\npass\r\npass\r\npass\r\npass\r\nA test failed!\r\nRuRunning bc error file 35.txt through cat with clamping...nning bc error file 36.txt through cat with clamping...Rupass\r\nnning bc environment var tests...pass\r\nA test failed!\r\nRunning bc error file 34.txt through cat without clamping...A pass\r\ntest failed!\r\npass\r\nRunning bc error file 36.txt through cat without clamping...A test failed!pass\r\nRunning bc error file 35.txt through cat witpass\r\n\r\nhout clamping...Running keyword redefinition test...paA test failed!\r\nss\r\npass\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\npass\r\nA test failed!\r\nRunning multiline comment expression file test...A test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\npass\r\nA test failed!\r\nA test failed!\r\nA Rtest ufnaniilnegd !m\r\nultiline comment expression file error test...A test failed!\r\nA test failed!\r\nA test failed!\r\npass\r\nA test failed!\r\nA test failed!\r\nRunning multiline string expression file test...A test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\npass\r\nRunning multiline string expression file error test...A test failed!\r\nA test failed!\r\npass\r\nA test failed!\r\nRunning bc line length tests...A test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\nA test failed!\r\npass\r\nA test failed!\r\nA test failed!\r\nRunning bc arg tests...pass\r\nRunning bc builtin variable arg tests...pass\r\nRunning bc directory test...pass\r\nRunning bc binary file test...pass\r\nRunning bc binary stdin test...pass\r\nRunning bc limits tests...pass\r\npass\r\nRunning bc posix_errors...pass\r\n~/aosp-master-with-phones/external/bc$ \r\n```", + "closed": true, + "closedAt": "2023-01-12T17:51:06Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5SPfLa", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "> i haven't been able to update for some time (5.0.1 was our last update!)\r\n\r\nOof...I'm sorry. Have I been missing communication with you?\r\n\r\n> because the tests fail in a weird way without much useful information. i've included the current failures for 6.2.2 below, for example.\r\n\r\nI agree; that is useless.\r\n\r\n> my guess is that this is something to do with Android using mksh as its /bin/sh. the interleaved output makes it appear like there might be some disagreement about job handling between bash and mksh?\r\n\r\nI think that's a great guess, and it's my guess too because the `tests/all.sh` script does use job control. I tried to write it according to the POSIX standard, but I suspect that job control is finicky in general.\r\n\r\n> are the current bc tests known to work on shells other than bash (and in particular mksh)? any ideas where i should look (or some kind of parallelism i can just disable)?\r\n\r\nThey are known to work on `tcsh` (FreeBSD), but other than that, `bash`, and `dash`, I don't know.\r\n\r\n> any ideas where i should look (or some kind of parallelism i can just disable)?\r\n\r\nTo disable parallelism, change the last line of `run-bc-tests-on-android.sh` to:\r\n\r\n```\r\nexec adb shell $dash_t /data/local/tmp/bc-tests/tests/all.sh -n bc 0 1 0 0 0 bc\r\n```\r\n\r\nI made two changes:\r\n\r\n* Most importantly, there is a `-n` option, which is how to disable parallelism in the `tests/all.sh` script.\r\n* I also added another 0 before the last `bc` because there are now five integer positional arguments.\r\n\r\nMy hope (and it is only a hope) is that that missing integer argument is what is causing the weird failures because the script would otherwise treat the last `bc` argument as the last integer argument and cause some sort of failure. `bash` fails because it has a non-integer argument, but I don't know how `mksh` would fail in that case.\r\n\r\nThe other reason there might be failures is because I added a test that is \"problematic.\" It's my test for `malloc()` failure, and unfortunately, it only works on Linux systems with swap disabled and some other changes. I don't think it would work on Android. I did add an option to disable that test in `tests/all.sh`; that is the missing integer option, in fact. But I don't think that's the reason because I added it in the fourth position (the last is whether to time the tests), so it is a 0 in your current script.\r\n\r\nRegardless, with the parallelism disabled, you should see exactly what test is failing, and you should be able to give me that output, even if either of those are not the reason for the failure.\r\n\r\nIn the meantime, I'll work on my end. Android is a first-class user of my `bc`, and I need to start treating it that way, including setting up a building and testing environment. I'll do my best to do so myself, but if possible, can you give me a helpful link?", + "createdAt": "2023-01-12T04:16:14Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/61#issuecomment-1379791578", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5STRaK", + "author": { + "login": "enh-google" + }, + "authorAssociation": "NONE", + "body": "> > i haven't been able to update for some time (5.0.1 was our last update!)\r\n> \r\n> Oof...I'm sorry. Have I been missing communication with you?\r\n\r\nno, this is just the first time i've had time to actually look at the problem and file a bug!\r\n\r\n> > are the current bc tests known to work on shells other than bash (and in particular mksh)? any ideas where i should look (or some kind of parallelism i can just disable)?\r\n> \r\n> They are known to work on `tcsh` (FreeBSD), but other than that, `bash`, and `dash`, I don't know.\r\n\r\nyeah, there's been a lot about job control on the POSIX mailing list recently too.\r\n\r\n> > any ideas where i should look (or some kind of parallelism i can just disable)?\r\n> \r\n> To disable parallelism, change the last line of `run-bc-tests-on-android.sh` to:\r\n> \r\n> ```\r\n> exec adb shell $dash_t /data/local/tmp/bc-tests/tests/all.sh -n bc 0 1 0 0 0 bc\r\n> ```\r\n\r\nyes, that works. thanks!\r\n\r\n> In the meantime, I'll work on my end. Android is a first-class user of my `bc`, and I need to start treating it that way, including setting up a building and testing environment. I'll do my best to do so myself, but if possible, can you give me a helpful link?\r\n\r\nthere's https://source.android.com/docs/setup/build/building (and other pages about running), but it's a pretty large undertaking.\r\n\r\ntbh, i've only had two problems with bc updates:\r\n\r\n1. build changes such as the move from a shell script to a .c file for strgen. those are almost certainly easier for me to do anyway.\r\n2. test changes like this one. these have been harder for me to adapt to (although this is the first one i've failed with). there i'd say \"yes, please make sure you add options like `-n` when you make scary changes\" but one thing you haven't done but could that i think would help would be to fail hard --- making extra options optional (ho ho) makes my life harder. an error message would be more helpful, especially because changes to a row of 0s and 1s aren't necessarily immediately obvious!\r\n\r\nanyway, https://android-review.googlesource.com/c/platform/external/bc/+/2385321 works for me locally, so it should make it through CI. (and if it doesn't, that's probably a question for me anyway :-) )\r\n\r\nthanks!", + "createdAt": "2023-01-12T17:51:06Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/61#issuecomment-1380783754", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5SUcYn", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "> there's https://source.android.com/docs/setup/build/building (and other pages about running), but it's a pretty large undertaking.\r\n\r\nI'll do my best anyway. Thank you!\r\n\r\n> tbh, i've only had two problems with bc updates\r\n>\r\n> 1. build changes such as the move from a shell script to a .c file for strgen. those are almost certainly easier for me to do anyway.\r\n> 2. test changes like this one. these have been harder for me to adapt to (although this is the first one i've failed with). there i'd say \"yes, please make sure you add options like -n when you make scary changes\" but one thing you haven't done but could that i think would help would be to fail hard --- making extra options optional (ho ho) makes my life harder. an error message would be more helpful, especially because changes to a row of 0s and 1s aren't necessarily immediately obvious!\r\n\r\nI think both of these are oversights on my part. I should add sections to my `NEWS.md` entry for each version about building, packaging, and testing changes. I've never thought they were necessary to list, but here is hard evidence that yes, they are.\r\n\r\nI apologize. I will do that going forward. And I also apologize for accidentally using you as my test subject while I learn how to run a project.\r\n\r\nNow, about making things fail hard: I agree that I messed up by making arguments optional.\r\n\r\nHowever, because I have downstream users that could depend on the options *staying* optional, I'm not sure I can make them required at this point.\r\n\r\nNevertheless, I think I can do the next best thing: do error checking on each argument. This would (hopefully) allow me to add the \"fail hard\" you want (and it's a good idea!) while not causing problems for other downstream users. (Unless they have bugs in their scripts, in which case, they should be fixed anyway.)\r\n\r\nI have implemented the ideas in d5e6dbdf328407bddf53efb655abe4b9c2fcb90f, so they'll be in the next release. I hope that helps.", + "createdAt": "2023-01-12T23:06:57Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/61#issuecomment-1381090855", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5SUv2M", + "author": { + "login": "enh-google" + }, + "authorAssociation": "NONE", + "body": "> I apologize. I will do that going forward. And I also apologize for accidentally using you as my test subject while I learn how to run a project.\r\n\r\nno worries --- we're a bit of an outlier anyway. it's only when you get included in a \"ridiculously large\" meta-project (most commonly an operating system [or moral equivalent] such as android or chromium or whatever) that you tend to find people _not_ using your build system because the pain of having to duplicate your build system is still slightly less than the pain of trying to incorporate your build system into theirs!\r\n\r\n> Now, about making things fail hard: I agree that I messed up by making arguments optional.\r\n> \r\n> However, because I have downstream users that could depend on the options _staying_ optional, I'm not sure I can make them required at this point.\r\n> \r\n> Nevertheless, I think I can do the next best thing: do error checking on each argument. This would (hopefully) allow me to add the \"fail hard\" you want (and it's a good idea!) while not causing problems for other downstream users. (Unless they have bugs in their scripts, in which case, they should be fixed anyway.)\r\n\r\nyeah, maybe if you ever need more arguments, make them named? (like `--foo=bar` or `foo=bar`?)\r\n\r\n> I have implemented the ideas in [d5e6dbd](https://github.com/gavinhoward/bc/commit/d5e6dbdf328407bddf53efb655abe4b9c2fcb90f), so they'll be in the next release. I hope that helps.\r\n\r\nthanks. since you're obviously interested in the feedback, i'll try to let you know sooner next time i have an update where manual intervention is required, if i have any trouble :-)", + "createdAt": "2023-01-13T00:55:27Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/61#issuecomment-1381170572", + "viewerDidAuthor": false + } + ], + "createdAt": "2023-01-12T01:26:05Z", + "id": "I_kwDOCL0xJc5bMSgX", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 61, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "test failures on Android", + "updatedAt": "2023-01-13T00:55:28Z", + "url": "https://github.com/gavinhoward/bc/issues/61" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjUwNzg5NDY5", + "is_bot": false, + "login": "mcoret", + "name": "" + }, + "body": "Hi,\r\nI'm trying to compile the project using Visual Studio 19, and I get the following error: `error C2065: 'SIGWINCH': undeclared identifier`. I cannot find such definition in MSVC. MSYS64 version compiles without problems.\r\nThank you!", + "closed": true, + "closedAt": "2022-12-06T15:40:35Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5PvhRI", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "What version are you trying to compile?\r\n\r\nIf it's the latest `master `, I have some changes there to fix a [FreeBSD bug][1] that I suspected would break the Windows build. I guess I was right.\r\n\r\nUsually, I wait until release time to fix Windows build bugs, but I'll boot Windows and push a fix later today if that will fix your problem. I'll also have a release coming soon with new stuff.\r\n\r\nI hope this helps.\r\n\r\n[1]: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=268076", + "createdAt": "2022-12-05T17:55:25Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/60#issuecomment-1337857096", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5PvnLD", + "author": { + "login": "mcoret" + }, + "authorAssociation": "NONE", + "body": "Ah, OK, thank you again!\r\nYes, it's the `master` branch.", + "createdAt": "2022-12-05T18:11:45Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/60#issuecomment-1337881283", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5PxCgn", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I've pushed e1205eaccfa03a8dbbfd625af664f6b074b69a65 which should fix the problem for now. Can you confirm for me?", + "createdAt": "2022-12-05T22:18:12Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/60#issuecomment-1338255399", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5P2DiK", + "author": { + "login": "mcoret" + }, + "authorAssociation": "NONE", + "body": "Hi, I can confirm, everything is OK!", + "createdAt": "2022-12-06T15:40:34Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/60#issuecomment-1339570314", + "viewerDidAuthor": false + } + ], + "createdAt": "2022-12-05T17:00:01Z", + "id": "I_kwDOCL0xJc5YCR8i", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 60, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Windows MSVC compilation problem", + "updatedAt": "2022-12-06T15:40:35Z", + "url": "https://github.com/gavinhoward/bc/issues/60" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjQ2MTYwNzI3", + "is_bot": false, + "login": "firasuke", + "name": "Firas Khalil Khana" + }, + "body": "As in the title, what's the difference between the two? and why is `--localedir` only mentioned in `build.md` and not when running `./configure --help`?", + "closed": true, + "closedAt": "2022-11-26T16:37:39Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5PKKvC", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "So I originally added `--localedir` because it was one of the standard GNU configure options. This was before I understood that GNU does *not* use POSIX locales.\r\n\r\n`--localedir` does not make sense when a program is using POSIX locales, so I've [removed references to `LOCALEDIR` and friends from everything][1].\r\n\r\nDoes that answer your question?\r\n\r\n[1]: https://github.com/gavinhoward/bc/commit/f4816582b1264b64566fc162ef6512601077cc63", + "createdAt": "2022-11-26T15:24:49Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/58#issuecomment-1328065474", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5PKLiA", + "author": { + "login": "firasuke" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "So `--localedir` shouldn't be used?", + "createdAt": "2022-11-26T15:45:11Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/58#issuecomment-1328068736", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5PKNBl", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "You are correct; it should not be used.\r\n\r\nIt wasn't used to change anything in the Makefile, so it merely just didn't do anything. With the change I made, the configure script should more give an error if it is given.", + "createdAt": "2022-11-26T16:24:25Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/58#issuecomment-1328074853", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5PKNey", + "author": { + "login": "firasuke" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Ok cool, thanks for clarifying. Closing..", + "createdAt": "2022-11-26T16:37:19Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/58#issuecomment-1328076722", + "viewerDidAuthor": false + } + ], + "createdAt": "2022-11-26T10:36:13Z", + "id": "I_kwDOCL0xJc5XU90M", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 58, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Difference between --localedir and NLSPATH", + "updatedAt": "2022-11-26T16:37:39Z", + "url": "https://github.com/gavinhoward/bc/issues/58" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjQ2MTYwNzI3", + "is_bot": false, + "login": "firasuke", + "name": "Firas Khalil Khana" + }, + "body": "Hey there,\r\n\r\nI've encountered an error recently where attempting to cross-compile `bc` while using `CC` as the cross compiler and `HOSTCC` as the compiler and when passing `--prefix=/usr` as a configuration flag.\r\n\r\nIt appears that `bc` is searching for header files in `$PREFIX/include`, although the help message mentions that these options control the installation directories of bc files and not the directories header/library files are searched for.\r\n\r\nThe error disappears when I remove the `--prefix=/usr` flag and the installation defaults to `/usr/local` as there's no way to change it because `--prefix` causes an error.\r\n\r\nThe error is:\r\n\r\n```C\r\n /usr/include/bits/types/time_t.h:8:9: error: unknown type name '__time64_t'\r\n 8 | typedef __time64_t time_t;\r\n | ^~~~~~~~~~\r\n```\r\n\r\nI don't recall changing the configuration flags I use for `bc` since version 4.0, did the behavior of these flags change?\r\n\r\nThanks in advance!", + "closed": true, + "closedAt": "2022-09-14T07:40:47Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5KF-Ax", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "This looks like a bug in `configure.sh`. However, I need to know now to track it down.\r\n\r\nCan you tell me what the host system is, what the target system is, what the host compiler is, and what the target compiler is?", + "createdAt": "2022-09-12T00:19:32Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/56#issuecomment-1243078705", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5KGmRk", + "author": { + "login": "firasuke" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "The host system architecture tuple is `x86_64-unknown-linux-gnu` and the target architecture tuple is `x86_64-linux-musl`.\n\nThe host compiler `HOSTCC=gcc` and the target compiler is `CC=x86_64-linux-musl-gcc`.", + "createdAt": "2022-09-12T05:35:13Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/56#issuecomment-1243243620", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5KJkBF", + "author": { + "login": "firasuke" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "I thought this will might help narrow down the cause.\r\n\r\nThe last known working version that I tried using the same configuration flags and recipe file is version `5.2.5`, so my guess would be that the change happened after that release, possibly with the latest 6.0 release.", + "createdAt": "2022-09-12T16:52:51Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/56#issuecomment-1244020805", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5KKJKJ", + "author": { + "login": "firasuke" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "I think I found the [faulty commit](https://github.com/gavinhoward/bc/commit/c36b91b024e743edb45bf607cb3c2a9f28f0cc48).", + "createdAt": "2022-09-12T19:05:19Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/56#issuecomment-1244172937", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5KM5Kx", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I think you did too.\r\n\r\nThat commit appears to have been made as exploration; I should have added more to the commit message. Nevertheless, it appears to not be necessary anymore because I tested the FreeBSD port without those changes, and it worked fine.\r\n\r\nSo I committed 2b65eb21cfc575fdb04a090c687bd102a80cc43c to erase the rest of that commit. Can you pull and test it?", + "createdAt": "2022-09-13T04:49:35Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/56#issuecomment-1244893873", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5KP1Kn", + "author": { + "login": "firasuke" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "I can confirm that this indeed 2b65eb21cfc575fdb04a090c687bd102a80cc43c fixed the issue.\r\n\r\nCan you release this fix in a new bugfix version?", + "createdAt": "2022-09-13T16:34:53Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/56#issuecomment-1245663911", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5KQ_MW", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Wonderful!\r\n\r\nI'll release a bug fix version as soon as I have confirmation that this fix does not break FreeBSD. I hope that will be soon.", + "createdAt": "2022-09-13T21:22:20Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/56#issuecomment-1245967126", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5KShlk", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Release `6.0.3` is out. I hope it fixes your issue.\r\n\r\nIf it doesn't, please feel free to reopen.", + "createdAt": "2022-09-14T07:40:47Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/56#issuecomment-1246370148", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5KV1-D", + "author": { + "login": "firasuke" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Yup, the new release solved the issue.\r\n\r\nThanks for your time and effort!", + "createdAt": "2022-09-14T19:59:10Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 2 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/56#issuecomment-1247240067", + "viewerDidAuthor": false + } + ], + "createdAt": "2022-09-11T13:48:03Z", + "id": "I_kwDOCL0xJc5RmIzx", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 56, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Specifying `--prefix` when cross-compiling", + "updatedAt": "2022-09-14T19:59:10Z", + "url": "https://github.com/gavinhoward/bc/issues/56" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjEzNTQxNjk5", + "is_bot": false, + "login": "depler", + "name": "" + }, + "body": "Hi! Here is my command line: `bc.exe --mathlib --leading-zeroes --no-line-length --scale=100`. \r\n\r\nLast argument is ignored by some reason. As I see it `--mathlib` is overriding `scale` value", + "closed": true, + "closedAt": "2022-08-30T15:32:46Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5IMQzl", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Nice to have you back! Sorry that I rejected your original feature request for `--scale`; I was wrong to do so.\r\n\r\nI have reproduced the issue. I think you are right with what is happening.\r\n\r\nI'll get to work on fixing it.", + "createdAt": "2022-08-10T19:29:45Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/55#issuecomment-1211174117", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5IMfdA", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Stupid GitHub automatically closing issues.\r\n\r\nCan you please pull the latest `master` and check if it does what you want? In the meantime, I'll get started on the release process.", + "createdAt": "2022-08-10T20:29:31Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/55#issuecomment-1211234112", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5IMmDI", + "author": { + "login": "depler" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Yep, it works now. Thanks!", + "createdAt": "2022-08-10T20:55:12Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/55#issuecomment-1211261128", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5IMmVH", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Yay! Version `6.0.2` should come out in the next day or two. Thank you for your report!", + "createdAt": "2022-08-10T20:56:21Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/55#issuecomment-1211262279", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5Iclau", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "It's taking a little longer to get the release out. There are problems with FreeBSD. I need to fix those problems before I release. I'm sorry.\r\n\r\nI'll let you know when `6.0.2` is out.", + "createdAt": "2022-08-15T17:31:11Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/55#issuecomment-1215452846", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5JbEBZ", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "`6.0.2` is out.\r\n\r\nThat should fix the issue for you. Feel free to reopen if it does not.", + "createdAt": "2022-08-30T15:32:46Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "ROCKET", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/55#issuecomment-1231831129", + "viewerDidAuthor": true + } + ], + "createdAt": "2022-08-10T19:09:02Z", + "id": "I_kwDOCL0xJc5Pk4LF", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 55, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Scale argument is ignored", + "updatedAt": "2022-08-30T15:32:46Z", + "url": "https://github.com/gavinhoward/bc/issues/55" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjk3Njg2MjI=", + "is_bot": false, + "login": "drawkula", + "name": "yeti" + }, + "body": "Testing on Debian11...\r\n\r\nAfter configuring with `--prefix=/tmp/bctmpdir` and a successful build, `make install` fails:\r\n```\r\n/tmp/bc $ make install\r\n./scripts/locale_install.sh /usr/share/locale/%L/%N bc \r\nmkdir: cannot create directory ‘//usr/share/locale/de_DE.utf8’: Permission denied\r\nmkdir: cannot create directory ‘//usr/share/locale/de_DE.UTF-8’: Permission denied\r\nln: failed to create symbolic link '//usr/share/locale/de_DE.utf8/bc': No such file or directory\r\nmkdir: cannot create directory ‘//usr/share/locale/en_GB.utf8’: Permission denied\r\nln: failed to create symbolic link '//usr/share/locale/en_GB.utf8/bc': No such file or directory\r\nmkdir: cannot create directory ‘//usr/share/locale/en_US.utf8’: Permission denied\r\nln: failed to create symbolic link '//usr/share/locale/en_US.utf8/bc': No such file or directory\r\n./scripts/safe-install.sh -Dm644 manuals/bc.1 /tmp/bctmpdir/share/man/man1/bc.1\r\n./scripts/safe-install.sh -Dm644 manuals/dc.1 /tmp/bctmpdir/share/man/man1/dc.1\r\n./scripts/exec-install.sh /tmp/bctmpdir/bin \"\" \"/tmp/bc/bin\"\r\n```\r\nSome paths aren't adapted to fit the `--prefix=...` setting, some others fit the desired prefix setting.", + "closed": true, + "closedAt": "2022-07-23T16:23:02Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5HDhWA", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for this report. I will look into it. Thankfully, you caught me before I made a release, which is coming soon. This will be fixed in that release, even if I have to delay it.", + "createdAt": "2022-07-22T02:07:54Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1192105344", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5HDm8x", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I noticed that you are installing `bc` in a temp directory. Is this a holding directory for a package, which will then install `bc` in its true place? Or is it something eke?\r\n\r\nI ask because locales are *special* (meaning, they are bad). They *must* be installed in one, and only one place. That place is `$NLSPATH`, which is actually a format string (the funny looking path after `./scripts/locale_install.sh` in your pasted output), but it usually points to `/usr/share/locale` with separate directories for every locale and then separate files in those directories for each program.\r\n\r\nIf locales are not installed properly in `$NLSPATH`, they will not work. This means that locales *have to* ignore `--prefix`. It's stupid, but that's POSIX for you. (This behavior is mandated by the POSIX standard.)\r\n\r\nSo if you are trying to install `bc` in `/tmp/bctmpdir`, unfortunately, you still have to install the locale files in `$NLSPATH`, anyway.\r\n\r\nIf you're installing in `/tmp/bctmpdir` to later be installed in its proper place by a package manager, then you can use the `$DESTDIR` environment variable when running `configure.sh`. If you do this, then locales will be installed at `$DESTDIR/$NLSPATH`, while other files will be installed at `$DESTDIR/$PREFIX/<whatever>`, where `$PREFIX` was passed in with `--prefix=$PREFIX`. Once that is done, and the package is made, then when users install the package, the locales will be put into the correct `$NLSPATH`.\r\n\r\nIf, however, you absolutely *must* override the behavior of installing the locales in `$NLSPATH`, you can set your own `$NLSPATH` when running `configure.sh`. The `%L` in the format specifier will be replaced by the locale name, and the `%N` will be replaced by the name of the program. You probably want both of those format specifiers in there.\r\n\r\nBut I do ***NOT*** recommend this because those installed locales will not work unless your `$NLSPATH` is set to that same format during in normal usage, which it appears it is not based on the format string in your output above.\r\n\r\nI hope that explains why things are the way they are. If that is the reason you are having problems, I am willing to help you figure out what would be best for you to do.\r\n\r\nHowever, if you still believe there is a bug in the install behavior, I'll do my best to find it.\r\n\r\nPlease let me know; I would like to help in any way I can.", + "createdAt": "2022-07-22T02:57:50Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1192128305", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5HD5j0", + "author": { + "login": "drawkula" + }, + "authorAssociation": "NONE", + "body": "I just repeated the build in `/tmp` for catching the log.\r\n\r\nOriginally I wanted to have `bc`/`dc` in an own \"bonsai subtree\" in `/opt/gavinhoward-bc` for not interfering with the default `dc`/`bc` of Debian and I typically manage `/opt` via an own account not being `root` (and not my standard user account). Had I tried this as `root` I easily could have overlooked the files falling out of that subtree. I think that may surprise other users in some other contexts too or will just drop the NLS files somewhere they do not even notice.\r\n\r\nMaybe dropping them into the desired prefix too and issuing a warning is an idea?\r\n\r\nWell, so far nobody complained (or noticed it?). Maybe I'm just the one with strange ideas...\r\n\r\nIn my case, if the NLS files are dropped into that subtree with the consequence that only english works, it would be good enough. And alternatively I can just deactivate NLS.\r\n\r\nThis issue just should be about the surprise that some paths don't respect `--prefix=...` and maybe about minimising surprises.\r\n\r\nAnd it definitely is not urgent.", + "createdAt": "2022-07-22T05:42:58Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1192204532", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5HFHU6", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I agree that the surprise is bad.\r\n\r\nThe problem with putting them into the desired prefix is that they just won't work, and then I'll get bug reports about it because I know several distros that depend on the current behavior.\r\n\r\nI think there are two things I can do. First, I can ensure that locales are *not* installed if NLS is disabled. I did that. (It already did it right, thankfully.) Second, I can add warnings. I added 7 in https://github.com/gavinhoward/bc/commit/b78e8e4cfb03b1135f03426b2a4aaf848b6c4d5d.\r\n\r\nActually, there's a third thing I can do: I can have `configure.sh` output a warning to the user when the prefix does *not* match with `$NLSPATH`. That has been done in https://github.com/gavinhoward/bc/commit/6dccfebe21c62d1c043387590d23a91b8499f68c.\r\n\r\nWhat else would you like me to do or think that I should do?", + "createdAt": "2022-07-22T12:29:32Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1192523066", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5HFar1", + "author": { + "login": "drawkula" + }, + "authorAssociation": "NONE", + "body": "Thanks!\r\nThe warnings at configure-time really should help everyone.\r\n\r\nMay I add a tiny \"last\" (for in this issue) wish?\r\nCan the warning be reformatted to fit an 80 columns terminal?\r\nReformatted to be slightly below 80 CpL it will not even take more lines.\r\n", + "createdAt": "2022-07-22T13:55:53Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1192602357", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5HF6Eg", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I meant to have 80 columns or less from the beginning. Whoops.\r\n\r\nIs https://github.com/gavinhoward/bc/commit/7cdddb8cc53fc1c08fe52fcf7fedbf7c84800c7c at 80 columns or less?", + "createdAt": "2022-07-22T16:12:18Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1192730912", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5HGEY4", + "author": { + "login": "drawkula" + }, + "authorAssociation": "NONE", + "body": "Without changing the indentation 77 chars are the maximal sub-80 width that fits.\r\n```\r\n*****************************************************************************\r\n\r\nWARNING: Locales will *NOT* be installed in $PREFIX (/opt/gavinhoward-bc).\r\n\r\n This is because they *MUST* be installed at a fixed location to even\r\n work, and that fixed location is $NLSPATH ().\r\n\r\n This location is *outside* of $PREFIX. If you do not wish to install\r\n locales outside of $PREFIX, you must disable NLS with the -N or the\r\n --disable-nls options.\r\n\r\n The author apologizes for the inconvenience, but the need to install\r\n the locales at a fixed location is mandated by POSIX. It is not\r\n possible for the author to change.\r\n\r\n*****************************************************************************\r\n```\r\n", + "createdAt": "2022-07-22T17:05:23Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1192773176", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5HHHpw", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Whoops. How does https://github.com/gavinhoward/bc/commit/6035d39a68e6078f578823fe407892930fe0d955 look?", + "createdAt": "2022-07-23T03:21:18Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1193048688", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5HHS2n", + "author": { + "login": "drawkula" + }, + "authorAssociation": "NONE", + "body": "Looks good:\r\n\r\n\r\n\r\nWould it make sense not to show it when `configure` is run with `--disable-nls`?", + "createdAt": "2022-07-23T09:27:41Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1193094567", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5HHW-X", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Whoops.\r\n\r\nYou are absolutely right, of course. Does https://github.com/gavinhoward/bc/commit/8d8935e44bba15e96e8db83536ba54cd1deab398 fix the issue for you?", + "createdAt": "2022-07-23T11:39:44Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1193111447", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5HHXEq", + "author": { + "login": "drawkula" + }, + "authorAssociation": "NONE", + "body": "Perfect!\r\nThanks!", + "createdAt": "2022-07-23T11:43:19Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1193111850", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5HHgig", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "You're welcome.\r\n\r\nSince it appears this issue has been resolved, I'm going to close it, but if you disagree, feel free to reopen it.", + "createdAt": "2022-07-23T16:23:02Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/53#issuecomment-1193150624", + "viewerDidAuthor": true + } + ], + "createdAt": "2022-07-21T21:12:21Z", + "id": "I_kwDOCL0xJc5OTyTx", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 53, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "--prefix=... is partially ignored?", + "updatedAt": "2022-07-23T16:23:02Z", + "url": "https://github.com/gavinhoward/bc/issues/53" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjQ2MTYwNzI3", + "is_bot": false, + "login": "firasuke", + "name": "Firas Khalil Khana" + }, + "body": "Is it possible to provide release tarballs in `gzip` format as well for limited systems?\r\n\r\nThanks!", + "closed": true, + "closedAt": "2022-04-30T22:23:08Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5CZjfO", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Yes, absolutely.\r\n\r\nJust to be sure, you mean `.tar.gz` files, correct?", + "createdAt": "2022-04-30T14:08:36Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/52#issuecomment-1113995214", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5CZoVz", + "author": { + "login": "firasuke" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Yup, if possible.", + "createdAt": "2022-04-30T16:25:20Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/52#issuecomment-1114015091", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5CZov4", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Not a problem. I have a new release coming out soon, and I will be sure to have `.tar.gz` files for it, as well as every future release.", + "createdAt": "2022-04-30T16:38:05Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/52#issuecomment-1114016760", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5CZ0M3", + "author": { + "login": "firasuke" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Thanks!\r\n\r\nClosing this now.", + "createdAt": "2022-04-30T22:23:08Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/52#issuecomment-1114063671", + "viewerDidAuthor": false + } + ], + "createdAt": "2022-04-30T10:20:12Z", + "id": "I_kwDOCL0xJc5I0yHJ", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 52, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Release tarballs in `gzip` format", + "updatedAt": "2022-04-30T22:23:08Z", + "url": "https://github.com/gavinhoward/bc/issues/52" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjg4MjY0OTc5", + "is_bot": false, + "login": "DelilahHoare", + "name": "Delilah Hoare" + }, + "body": "Comments delimited by `/* */` and spanning multiple lines in files result in `Parse error: comment end cannot be found`. Such comments are accepted into stdin.", + "closed": true, + "closedAt": "2022-03-05T04:53:19Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc4_JAlq", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "That does sound like a bug.\r\n\r\nCould you send me the output of `bc --version`? Also, could you send me one or more files that cause it to happen?", + "createdAt": "2022-03-04T16:41:15Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/50#issuecomment-1059326314", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc4_KFB6", + "author": { + "login": "DelilahHoare" + }, + "authorAssociation": "NONE", + "body": "I should clarify that this only happens when using the `-f` flag; passing the file as an argument without that flag works.\r\n\r\n```\r\nbc 5.2.2\r\nCopyright (c) 2018-2021 Gavin D. Howard and contributors\r\nReport bugs at: https://git.yzena.com/gavin/bc\r\n\r\nThis is free software with ABSOLUTELY NO WARRANTY.\r\n```\r\n\r\n[testoneline.bc](https://github.com/gavinhoward/bc/files/8189282/testoneline.bc.txt) works,\r\n[testmultiline.bc](https://github.com/gavinhoward/bc/files/8189281/testmultiline.bc.txt) doesn't. \r\n[timeconst.bc](https://github.com/gavinhoward/bc/files/8189283/timeconst.bc.txt) comes from the linux source tree and also doesn't work.\r\n\r\n", + "createdAt": "2022-03-04T23:39:16Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/50#issuecomment-1059606650", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc4_KNpz", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you. I have confirmed the bug, and I'm working on debugging and a fix.", + "createdAt": "2022-03-05T01:30:06Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/50#issuecomment-1059641971", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc4_KWij", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Okay, I have found the problem and have committed a fix in d778d0b9177c75f207dca16b57974edbb5f9e15c and dbc4dc4c4e94712fa1d4800c81e84d6da18f5188.\r\n\r\nCould you pull and test the updated commits for me, to make sure they work for you? In the meantime, I'll prepare a release with the fix.", + "createdAt": "2022-03-05T04:03:17Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/50#issuecomment-1059678371", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc4_KYdX", + "author": { + "login": "DelilahHoare" + }, + "authorAssociation": "NONE", + "body": "It's working, thanks!", + "createdAt": "2022-03-05T04:53:19Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/50#issuecomment-1059686231", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc4_KYmm", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Great! I'll have version `5.2.3` out in a few days.", + "createdAt": "2022-03-05T04:56:48Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/50#issuecomment-1059686822", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc4_QD5x", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "`5.2.3` is out!", + "createdAt": "2022-03-07T21:53:42Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/50#issuecomment-1061174897", + "viewerDidAuthor": true + } + ], + "createdAt": "2022-03-04T00:24:45Z", + "id": "I_kwDOCL0xJc5FFokp", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 50, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Multi-line comments in files result in parse error", + "updatedAt": "2022-03-07T21:53:42Z", + "url": "https://github.com/gavinhoward/bc/issues/50" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjI3OTUyNTcx", + "is_bot": false, + "login": "oguz-ismail", + "name": "" + }, + "body": "Observe:\r\n```\r\n$ bc -s <<x\r\ndefine a(){\r\n}define b(){\r\n}\r\nx\r\n\r\nParse error: bad token\r\n <stdin>:2\r\n\r\n$ bc -s <<x\r\ndefine a(){\r\n};define b(){\r\n}\r\nx\r\n$\r\n```\r\nAs per POSIX, the first one should work fine, and the second should fail as a newline is required after a `semicolon_list` production. No other bc implementation exhibits this behavior except busybox bc, which is a fork of this one if I recall correctly.", + "closed": true, + "closedAt": "2021-11-23T05:42:14Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc46Kepe", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "This has (hopefully) been fixed in commits 5b2fe303c8c7d85d299b6576f62c8191e492fdb0, 81f838f657a2b942a76c1240d1107a4d358fd2a2, and 9ffdd5ec6915bc01fa0ceb7f5b5e9e4327615044.\r\n\r\nCould you please pull down those commits and test? If they work, I'll release an update soon.", + "createdAt": "2021-11-22T18:57:57Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/48#issuecomment-975825502", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc46KhAF", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Oh, I meant to say that I looked at the standard, and I agree with you on the interpretation of it.", + "createdAt": "2021-11-22T19:09:25Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/48#issuecomment-975835141", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc46Kkv8", + "author": { + "login": "oguz-ismail" + }, + "authorAssociation": "NONE", + "body": "@gavinhoward Yeah, it works fine now. Thanks for the fix", + "createdAt": "2021-11-22T19:29:26Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/48#issuecomment-975850492", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc46KynT", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you!\r\n\r\nI'll run my release process and put out `5.2.1` as soon as it passes.", + "createdAt": "2021-11-22T20:50:45Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/48#issuecomment-975907283", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc46L1uZ", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "`5.2.1` is out. I believe that solves this issue, so I am going to close. Feel free to reopen if you need to.\r\n\r\nThank you for your report!", + "createdAt": "2021-11-23T05:42:14Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/48#issuecomment-976182169", + "viewerDidAuthor": true + } + ], + "createdAt": "2021-11-22T11:06:32Z", + "id": "I_kwDOCL0xJc4_Ln9A", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 48, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Divergence from grammar defined by POSIX", + "updatedAt": "2021-11-23T05:42:15Z", + "url": "https://github.com/gavinhoward/bc/issues/48" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjEzNTQxNjk5", + "is_bot": false, + "login": "depler", + "name": "" + }, + "body": "Is there any command line switch to set scale at start, like `bc.exe --scale 100`? If not, could you please implement?", + "closed": true, + "closedAt": "2022-06-10T18:05:26Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc4387LJ", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "There is no direct way to do it, but you can do it like this:\r\n\r\n```\r\nbc.exe -e \"scale = 100\" -f-\r\n```\r\n\r\n`-e` is the command-line option to take expressions, and since `bc` exits by default when giving it an expression, you add `-f-` to tell it to also accept input from `stdin`.\r\n\r\nI think next release, I will add the ability to *not* exit by default on expressions for Windows. (FreeBSD wants my `bc` to exit by default.) Once I do that, you will be able to do:\r\n\r\n```\r\nbc.exe -e \"scale = 100\"\r\n```", + "createdAt": "2021-10-08T15:09:39Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/47#issuecomment-938717897", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc439Fcs", + "author": { + "login": "depler" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Well, this is not really an option for me - I want bc to exit after `-e` switch. The point is to have ability to manipulate of scale value from outside - the only option for now to do it is within a script or command. Anyway, not really a problem. Fell free to close this, if you are not going implement scale switch.", + "createdAt": "2021-10-08T16:09:16Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/47#issuecomment-938759980", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc439QqT", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Yeah, I'm sorry. It's a little too specialized to do in my opinion.\r\n\r\nThank you for understanding.", + "createdAt": "2021-10-08T16:34:17Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/47#issuecomment-938805907", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5Dmtyj", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "@depler would you still want this? I'm going to do a release soon, and I'm reconsidering it.", + "createdAt": "2022-05-23T06:10:23Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/47#issuecomment-1134222499", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5EjtT2", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "@depler I'm going to implement this.", + "createdAt": "2022-06-08T17:44:03Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/47#issuecomment-1150211318", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5EksDZ", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "It is now implemented in 488d48c87c5b9e02e5c3911918c2d6d7687246e8. The command-line options are `-S`/`--scale`, `-I`/`--ibase`, `-O`/`--obase`, and `-E`/`--seed`.\r\n\r\nIf you could test before I release `5.3.0`, I would appreciate it.\r\n\r\nAlso, history is working on Windows now!", + "createdAt": "2022-06-08T22:15:08Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/47#issuecomment-1150468313", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5Es3Dl", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "It's been released in `5.3.0`. Hope this helps!", + "createdAt": "2022-06-10T18:05:26Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/47#issuecomment-1152610533", + "viewerDidAuthor": true + } + ], + "createdAt": "2021-10-08T11:02:30Z", + "id": "I_kwDOCL0xJc482sjv", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 47, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Command switch for scale?", + "updatedAt": "2022-06-10T18:05:27Z", + "url": "https://github.com/gavinhoward/bc/issues/47" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjEzNTQxNjk5", + "is_bot": false, + "login": "depler", + "name": "" + }, + "body": "Hi! When are you going to release new version with recent changes?", + "closed": true, + "closedAt": "2021-10-06T20:42:31Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc43pTbJ", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Yes. It will be `5.1.0`.\r\n\r\nI have not done so yet because of two things. First, I was not really sure if you would find more bugs, and second, my release process takes a while. (It includes, among other things, building `bc` in every supported configuration and running the test suite for every build, on multiple platforms.)\r\n\r\nI expect that the release will go out sometime today (US time).", + "createdAt": "2021-10-04T15:03:22Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/46#issuecomment-933574345", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc43p7GT", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Release is out! Thank you for your help.", + "createdAt": "2021-10-04T18:19:40Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/46#issuecomment-933736851", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc43qhxQ", + "author": { + "login": "depler" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Thanks! Why did you put project files, debug executables and test files into release archive?", + "createdAt": "2021-10-04T22:11:43Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/46#issuecomment-933895248", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc43qjSr", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I should not have put the test files (sorry; I'll take them out next release), but I put the others there in case users *want* a debug executable. Basically, I put whatever I thought users might want even if they don't want the full repo. (I know at least Linux distro that builds a debug version of my `bc`.)", + "createdAt": "2021-10-04T22:23:01Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/46#issuecomment-933901483", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc432vHa", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "The next release is out (there was a bug), and I have implemented your suggestions, except for debug executables. Thank you.\r\n\r\nI will go ahead and close this bug now, but you can reopen if you feel the need.", + "createdAt": "2021-10-06T20:42:31Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/46#issuecomment-937095642", + "viewerDidAuthor": true + } + ], + "createdAt": "2021-10-04T13:53:49Z", + "id": "I_kwDOCL0xJc48guzb", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 46, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "New release", + "updatedAt": "2021-10-06T20:42:31Z", + "url": "https://github.com/gavinhoward/bc/issues/46" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "body": "@depler do you know how to get packages into Winget and Chocolatey? I had [someone ask me to do that][1].\r\n\r\n[1]: https://news.ycombinator.com/item?id=28653815", + "closed": true, + "closedAt": "2021-10-01T17:38:41Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc43ktg6", + "author": { + "login": "depler" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Sorry, never did this. I prefer portable windows utilities without package manager.", + "createdAt": "2021-10-01T16:20:38Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/45#issuecomment-932370490", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc43k7w9", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": ":+1: ", + "createdAt": "2021-10-01T17:38:41Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/45#issuecomment-932428861", + "viewerDidAuthor": true + } + ], + "createdAt": "2021-10-01T04:59:55Z", + "id": "I_kwDOCL0xJc48X3lM", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 45, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Get `bc` into Winget and Chocolatey", + "updatedAt": "2021-10-01T17:38:41Z", + "url": "https://github.com/gavinhoward/bc/issues/45" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjEzNTQxNjk5", + "is_bot": false, + "login": "depler", + "name": "" + }, + "body": "Can you please implement some new command line arguments?\r\n\r\n1. Ability to print equation result without line breaks, i.e. just a solid text.\r\n2. Ability to force prepending zero in equation result, i.e. `0.123` instead of current `.123`", + "closed": true, + "closedAt": "2021-09-29T23:02:01Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc43UXox", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Those are good ideas.\r\n\r\nFor the first, there is already an environment variable, `BC_LINE_LENGTH`, that can be used to do that. You just set it to a large number. Would that work, or would that still not be convenient (and I use that word for a reason; I do want it to be easy for you) on Windows? Also, if you want a separate option to remove line limits entirely, why?\r\n\r\nFor the second, I think that one might be a *really* good idea. EDIT: However, could this be implemented by something like a function in the math library such that it's not a global option affecting all numbers? Would that be better? Should we have both?\r\n\r\nIn both of these cases, I don't want to just willy-nilly implement something; I want them to be designed correctly. So I'll get started on that, but please feel free to give me your opinions about the design of them.", + "createdAt": "2021-09-27T17:16:40Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-928086577", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc43UkoZ", + "author": { + "login": "depler" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "> Also, if you want a separate option to remove line limits entirely, why?\r\n\r\nThis is exactly what I want - remove line limits entirely. Environment variables are not really useful on Windows unless you heavily use scripts. Usually you just run executable with desired variables to archive functionality (or using some config file as alternative).\r\n\r\n> However, could this be implemented by something like a function in the math library such that it's not a global option affecting all numbers? Would that be better? Should we have both?\r\n\r\nFor exactly my needs global option is preferable - I just want to see all numbers in range `-1 < 0 < 1` with zero.\r\n\r\nSo if you you think that environment variables are needed - feel free to implement both. Personally I don't like to use environment switches, command arguments are more convenient for me.\r\n", + "createdAt": "2021-09-27T18:06:20Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-928139801", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc43VIy5", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Good to know. Let me get on that and see if I can come up with something that works for you.", + "createdAt": "2021-09-27T21:15:44Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-928287929", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc43Vnrz", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I have added the two command line arguments (`z` and `C`). Could you please pull and test that they do what you want?\r\n\r\nI'm not done yet, but the rest of the work is not really going to impact what you want. It's a way to query the status of those things so that I can write library functions to print them in different ways.", + "createdAt": "2021-09-27T23:07:11Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-928414451", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc43XcED", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I've changed the options to `-z`/`--leading-zeroes` and `-L`/`--no-line-length`.", + "createdAt": "2021-09-28T06:21:27Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-928891139", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc43YQUv", + "author": { + "login": "depler" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Working fine, thanks! Can you please add new tests to windows scripts? It is just a new lines with filename of appropriate test in `tests_bc.bat` and `tests_dc.bat`.", + "createdAt": "2021-09-28T11:34:55Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-929105199", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc43Y4pl", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I'm sorry, I feel stupid, but I'm not sure what tests you want me to add. For these features? Or more tests in general?", + "createdAt": "2021-09-28T14:12:35Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-929270373", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc43ZFR5", + "author": { + "login": "depler" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "You've added this one (and may be something else): https://github.com/gavinhoward/bc/blob/master/tests/bc/leadingzero.txt\r\nWindows script doesn't know about it yet.", + "createdAt": "2021-09-28T15:09:39Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-929322105", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc43Zugt", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I see. I've added that test to the Windows bat file, but once again, can you pull and test for me? The reason is that it needs to run the test twice, and I want to be sure that works for you.", + "createdAt": "2021-09-28T17:54:31Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-929490989", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc43btxR", + "author": { + "login": "depler" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "A few changes are needed to differ `leadingzero` test from `leadingzero_z` : https://github.com/gavinhoward/bc/pull/44\r\nOtherwise it works fine.", + "createdAt": "2021-09-29T09:35:21Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-930012241", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc43crqE", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "#44 is merged. Is there anything else that needs to change for you?", + "createdAt": "2021-09-29T15:06:22Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-930265732", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc43d-9e", + "author": { + "login": "depler" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Nope. Thanks 👍", + "createdAt": "2021-09-29T23:02:01Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/43#issuecomment-930606942", + "viewerDidAuthor": false + } + ], + "createdAt": "2021-09-27T15:12:39Z", + "id": "I_kwDOCL0xJc48GQ_o", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 43, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Additional arguments", + "updatedAt": "2021-09-29T23:02:02Z", + "url": "https://github.com/gavinhoward/bc/issues/43" + }, + { + "assignees": [], + "author": { + "id": "MDQ6VXNlcjQ2Njg2NTY1", + "is_bot": false, + "login": "rubyFeedback", + "name": "" + }, + "body": "Hey there.\n\nI am using this configure line:\n\n CC=gcc ./configure --prefix=/home/Programs/Bc/7.0.3/ -G -O3 -r\n\nThis is what LFS (Linux from Scratch) recommends, but they use the conventional\n/usr/ prefix.\n\nNow interestingly, when I use the above, I get this result - a warning:\n\n WARNING: Locales will *NOT* be installed in $PREFIX (/home/Programs/Bc/7.0.3/).\n\n This is because they *MUST* be installed at a fixed location to even\n work, and that fixed location is $NLSPATH (/usr/share/locale/%L/%N).\n\n This location is *outside* of $PREFIX. If you do not wish to install\n locales outside of $PREFIX, you must disable NLS with the -N or the\n --disable-nls options.\n\n The author apologizes for the inconvenience, but the need to install\n the locales at a fixed location is mandated by POSIX, and it is not\n possible for the author to change that requirement.\n\nThe warning makes sense on traditional systems that use /usr/ as prefix.\nGoboLinux uses versioned appdirs instead. (I am not using GoboLinux\nright now, as they use /Programs/ dir; I use a slightly modified self-compiled\nvariant instead. At the least currently.)\n\nI do not believe that POSIX mandates that /usr/share/local/ must be in\nthe way described. For instance, I am about 100% certain that symlinks \nare allowed; at the least not forbidden, so I would reason that POSIX\ncan not be cited here. GoboLinux also uses symlinks by the way; they\neven still have /usr/ etc... despite versioned appdirs.\n\nMy question is: is this warning really needed? I can install all glibc-related\nlocales into /home/Programs/Glibc/2.41/share/local/ etc... and I do not\nget any warning about this. I believe the warning has had good intentions,\nbut the explanation is a bit shaky to me, and does not seem to account\nfor e. g. alternative ways to handle a linux system. Does POSIX really\nsay that symlinks are forbidden?\n\n(Also, is it true that locales must be at a fixed location per se? Because in\nprinciple, whatever is searching for the file, could also have another \nlocation. I use the example of symlinks, but even without symlinks we \nhave things such as --libdir and various other flags that allow fine-tuning\nof various things here. Even meson-build systems allow for quite some\nflexibility here.)\n", + "closed": true, + "closedAt": "2025-04-10T16:47:30Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6mkMkS", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Yes, it is necessary. I have had more people ask why locales don't work than people like you asking why there is a warning. In fact, you're the first.\n\nTo remove the warning, set `NLSPATH` on the call to `configure`, like so:\n\n```\nCC=gcc NLSPATH=/home/Programs/Bc/7.0.3/%L/%N \\\n ./configure --prefix=/home/Programs/Bc/7.0.3/ -G -O3 -r\n```\n\nThen yes, you can set up symlinks; POSIX does allow that.", + "createdAt": "2025-04-10T16:47:30Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/90#issuecomment-2794506514", + "viewerDidAuthor": true + } + ], + "createdAt": "2025-04-10T11:40:10Z", + "id": "I_kwDOCL0xJc6x8Vgk", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 90, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "locales - is the warning for non-standard prefixes still necessary?", + "updatedAt": "2025-04-10T16:47:30Z", + "url": "https://github.com/gavinhoward/bc/issues/90" + }, + { + "assignees": [], + "author": { + "id": "U_kgDOBxD9gQ", + "is_bot": false, + "login": "tungstengmd", + "name": "harlow foxworthy" + }, + "body": "this might have been excluded for a reason but can you add the \"!\" command back ? only reason being that i wanna clear the screen on certain events", + "closed": true, + "closedAt": "2025-04-18T20:43:24Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6n20Uz", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "It was excluded for a reason, and no, I will not add it. Have your shell clear the screen.", + "createdAt": "2025-04-18T20:43:23Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/91#issuecomment-2816165171", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6n25O1", + "author": { + "login": "tungstengmd" + }, + "authorAssociation": "NONE", + "body": "had a feeling, and damn you're fast", + "createdAt": "2025-04-18T20:58:15Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/91#issuecomment-2816185269", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6n3ljG", + "author": { + "login": "drawkula" + }, + "authorAssociation": "NONE", + "body": "You can hardcode the sequence to clear the screen.\nTo be a bit independent of the terminal, catching what `clear` will send may be the way.\n```\n$ clear | xxd -C -p -u -\n1B5B481B5B324A\n```\nSo this ...\n```\n$ clear | xxd -C -p -u - | dc -e '16i ? P'\n```\n... demonstrates it. Capture the value, in base10 if you prefer.\n\nTBH, I miss `!` too.\n", + "createdAt": "2025-04-18T23:55:14Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/91#issuecomment-2816366790", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6n4p5E", + "author": { + "login": "tungstengmd" + }, + "authorAssociation": "NONE", + "body": "oh wait you're onto something", + "createdAt": "2025-04-19T10:18:42Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/91#issuecomment-2816646724", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6n5dwl", + "author": { + "login": "tungstengmd" + }, + "authorAssociation": "NONE", + "body": "ok so basically you can just catch command output [as hex form] in xxd and input it to dc with the input radix as 16\ntherefore bypassing the need for `!`\nthanks @drawkula", + "createdAt": "2025-04-19T20:40:25Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/91#issuecomment-2816859173", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6n-PJv", + "author": { + "login": "drawkula" + }, + "authorAssociation": "NONE", + "body": "Sure you can read ™somewhere™ which control sequence your `$TERM` will use to clear the screen and then manually turn that into this string alike integer, but you'd have to do that anew everywhere you run your code attached to a differently behaving terminal emulation. So catching the sequence from `clear`, similar `tput` commands or directly looking it up in Terminfo or Termcap terminal definitions makes it portable and I assumed catching the output of `clear` would be the easiest of these alternatives.\n\nUsing `xxd` may limit portability a bit. That's probably the weak spot of this idea. There are alternatives, but if available, `xxd` seems to fit this job best.", + "createdAt": "2025-04-21T10:18:17Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/91#issuecomment-2818110063", + "viewerDidAuthor": false + } + ], + "createdAt": "2025-04-18T20:41:22Z", + "id": "I_kwDOCL0xJc6zJ4VJ", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 91, + "projectCards": [], + "projectItems": [], + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "add ! command", + "updatedAt": "2025-04-21T10:18:18Z", + "url": "https://github.com/gavinhoward/bc/issues/91" + }, + { + "assignees": [], + "author": { + "id": "U_kgDOB8YAUQ", + "is_bot": false, + "login": "tkb-github", + "name": "" + }, + "body": "With the release of RHEL 10 and Fedora 42, we’ve tried to build 7.0.3 on both. No issues with Clang.\n\nWith GCC (v14 for RHEL 10, v15 for Fedora 42), though, the build succeeded under the [epel-10-aarch64](https://download.copr.fedorainfracloud.org/results/tkbcopr/bc-gh/epel-10-aarch64/09140402-bc-gh/) chroot but failed with [epel-10-x86_64](https://download.copr.fedorainfracloud.org/results/tkbcopr/bc-gh/epel-10-x86_64/09140402-bc-gh/), [fedora-42-x86_64](https://download.copr.fedorainfracloud.org/results/tkbcopr/bc-gh/fedora-42-x86_64/09140402-bc-gh/) and [fedora-42-aarch64](https://download.copr.fedorainfracloud.org/results/tkbcopr/bc-gh/fedora-42-aarch64/09140402-bc-gh/). Here’s excerpts from the failed builds.\n\nepel-10-x86_64:\n\n```sh\n\ngcc -DBC_ENABLED=1 -DDC_ENABLED=1 -I./include/ -DBUILD_TYPE=A -DEXECPREFIX= -DMAINEXEC=bc -DBC_NUM_KARATSUBA_LEN=34 -DBC_ENABLE_NLS=1 -DBC_ENABLE_EXTRA_MATH=1 -DBC_ENABLE_HISTORY=1 -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_MEMCHECK=0 -DBC_ENABLE_AFL=0 -DBC_ENABLE_OSSFUZZ=0 -DBC_DEFAULT_BANNER=0 -DBC_DEFAULT_SIGINT_RESET=1 -DBC_DEFAULT_TTY_MODE=1 -DBC_DEFAULT_PROMPT=1 -DBC_DEFAULT_EXPR_EXIT=1 -DBC_DEFAULT_DIGIT_CLAMP=0 -DDC_DEFAULT_SIGINT_RESET=1 -DDC_DEFAULT_TTY_MODE=0 -DDC_DEFAULT_PROMPT=0 -DDC_DEFAULT_EXPR_EXIT=1 -DDC_DEFAULT_DIGIT_CLAMP=0 -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -O3 -g -flto ./gen/dc_help.o ./gen/bc_help.o ./gen/lib.o ./gen/lib2.o src/args.o src/bc.o src/bc_lex.o src/bc_parse.o src/data.o src/dc.o src/dc_lex.o src/dc_parse.o src/file.o src/history.o src/lang.o src/lex.o src/main.o src/num.o src/opt.o src/parse.o src/program.o src/rand.o src/read.o src/vector.o src/vm.o -Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes -o bin/bc\n/usr/bin/ld: /tmp/ccMAotuu.ltrans0.ltrans.o: relocation R_X86_64_32 against `.rodata' can not be used when making a PIE object; recompile with -fPIE\n/usr/bin/ld: failed to set dynamic section sizes: bad value\ncollect2: error: ld returned 1 exit status\nmake: *** [Makefile:241: bin/bc] Error 1\nerror: Bad exit status from /var/tmp/rpm-tmp.G7xvMo (%build)\n\nRPM build errors:\n Bad exit status from /var/tmp/rpm-tmp.G7xvMo (%build)\n\n```\n\nfedora-42-x86_64\n\n```sh\n\ngcc -DBC_ENABLED=1 -DDC_ENABLED=1 -I./include/ -DBUILD_TYPE=A -DEXECPREFIX= -DMAINEXEC=bc -DBC_NUM_KARATSUBA_LEN=34 -DBC_ENABLE_NLS=1 -DBC_ENABLE_EXTRA_MATH=1 -DBC_ENABLE_HISTORY=1 -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_MEMCHECK=0 -DBC_ENABLE_AFL=0 -DBC_ENABLE_OSSFUZZ=0 -DBC_DEFAULT_BANNER=0 -DBC_DEFAULT_SIGINT_RESET=1 -DBC_DEFAULT_TTY_MODE=1 -DBC_DEFAULT_PROMPT=1 -DBC_DEFAULT_EXPR_EXIT=1 -DBC_DEFAULT_DIGIT_CLAMP=0 -DDC_DEFAULT_SIGINT_RESET=1 -DDC_DEFAULT_TTY_MODE=0 -DDC_DEFAULT_PROMPT=0 -DDC_DEFAULT_EXPR_EXIT=1 -DDC_DEFAULT_DIGIT_CLAMP=0 -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -O3 -g -flto -o src/data.o -c ./src/data.c\nIn file included from /usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h:11,\n from ./include/status.h:46,\n from ./include/args.h:39,\n from ./src/data.c:39:\n./src/data.c:920:29: error: â^@^XfalseULâ^@^Y undeclared here (not in a function)\n 920 | BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, true),\n | ^~~~~\n./src/data.c:920:9: note: in expansion of macro â^@^XBC_PARSE_EXPR_ENTRYâ^@^Y\n 920 | BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, true),\n | ^~~~~~~~~~~~~~~~~~~\n./src/data.c:920:43: error: â^@^XtrueULâ^@^Y undeclared here (not in a function)\n 920 | BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, true),\n | ^~~~\n./src/data.c:920:9: note: in expansion of macro â^@^XBC_PARSE_EXPR_ENTRYâ^@^Y\n 920 | BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, true),\n | ^~~~~~~~~~~~~~~~~~~\nmake: *** [Makefile:668: src/data.o] Error 1\ngcc -DBC_ENABLED=1 -DDC_ENABLED=1 -I./include/ -DBUILD_TYPE=A -DEXECPREFIX= -DMAINEXEC=bc -DBC_NUM_KARATSUBA_LEN=34 -DBC_ENABLE_NLS=1 -DBC_ENABLE_EXTRA_MATH=1 -DBC_ENABLE_HISTORY=1 -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_MEMCHECK=0 -DBC_ENABLE_AFL=0 -DBC_ENABLE_OSSFUZZ=0 -DBC_DEFAULT_BANNER=0 -DBC_DEFAULT_SIGINT_RESET=1 -DBC_DEFAULT_TTY_MODE=1 -DBC_DEFAULT_PROMPT=1 -DBC_DEFAULT_EXPR_EXIT=1 -DBC_DEFAULT_DIGIT_CLAMP=0 -DDC_DEFAULT_SIGINT_RESET=1 -DDC_DEFAULT_TTY_MODE=0 -DDC_DEFAULT_PROMPT=0 -DDC_DEFAULT_EXPR_EXIT=1 -DDC_DEFAULT_DIGIT_CLAMP=0 -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -O3 -g -flto -o src/dc.o -c ./src/dc.c\nmake: *** Waiting for unfinished jobs....\ngcc -DBC_ENABLE_AFL=0 -DBC_ENABLE_OSSFUZZ=0 -I./include/ -flto -o ./gen/strgen ./gen/strgen.c\ngcc -DBC_ENABLED=1 -DDC_ENABLED=1 -I./include/ -DBUILD_TYPE=A -DEXECPREFIX= -DMAINEXEC=bc -DBC_NUM_KARATSUBA_LEN=34 -DBC_ENABLE_NLS=1 -DBC_ENABLE_EXTRA_MATH=1 -DBC_ENABLE_HISTORY=1 -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_MEMCHECK=0 -DBC_ENABLE_AFL=0 -DBC_ENABLE_OSSFUZZ=0 -DBC_DEFAULT_BANNER=0 -DBC_DEFAULT_SIGINT_RESET=1 -DBC_DEFAULT_TTY_MODE=1 -DBC_DEFAULT_PROMPT=1 -DBC_DEFAULT_EXPR_EXIT=1 -DBC_DEFAULT_DIGIT_CLAMP=0 -DDC_DEFAULT_SIGINT_RESET=1 -DDC_DEFAULT_TTY_MODE=0 -DDC_DEFAULT_PROMPT=0 -DDC_DEFAULT_EXPR_EXIT=1 -DDC_DEFAULT_DIGIT_CLAMP=0 -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -O3 -g -flto -o src/bc_parse.o -c ./src/bc_parse.c\nerror: Bad exit status from /var/tmp/rpm-tmp.hRViel (%build)\n\nRPM build errors:\n Bad exit status from /var/tmp/rpm-tmp.hRViel (%build)\n\n```\n\nfedora-42-aarch64\n\n```sh\n\ngcc -DBC_ENABLED=1 -DDC_ENABLED=1 -I./include/ -DBUILD_TYPE=A -DEXECPREFIX= -DMAINEXEC=bc -DBC_NUM_KARATSUBA_LEN=34 -DBC_ENABLE_NLS=1 -DBC_ENABLE_EXTRA_MATH=1 -DBC_ENABLE_HISTORY=1 -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_MEMCHECK=0 -DBC_ENABLE_AFL=0 -DBC_ENABLE_OSSFUZZ=0 -DBC_DEFAULT_BANNER=0 -DBC_DEFAULT_SIGINT_RESET=1 -DBC_DEFAULT_TTY_MODE=1 -DBC_DEFAULT_PROMPT=1 -DBC_DEFAULT_EXPR_EXIT=1 -DBC_DEFAULT_DIGIT_CLAMP=0 -DDC_DEFAULT_SIGINT_RESET=1 -DDC_DEFAULT_TTY_MODE=0 -DDC_DEFAULT_PROMPT=0 -DDC_DEFAULT_EXPR_EXIT=1 -DDC_DEFAULT_DIGIT_CLAMP=0 -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -O3 -g -flto -o src/data.o -c ./src/data.c\nIn file included from /usr/lib/gcc/aarch64-redhat-linux/15/include/stdint.h:11,\n from ./include/status.h:46,\n from ./include/args.h:39,\n from ./src/data.c:39:\n./src/data.c:920:29: error: â^@^XfalseULâ^@^Y undeclared here (not in a function)\n 920 | BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, true),\n | ^~~~~\n./src/data.c:920:9: note: in expansion of macro â^@^XBC_PARSE_EXPR_ENTRYâ^@^Y\n 920 | BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, true),\n | ^~~~~~~~~~~~~~~~~~~\n./src/data.c:920:43: error: â^@^XtrueULâ^@^Y undeclared here (not in a function)\n 920 | BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, true),\n | ^~~~\n./src/data.c:920:9: note: in expansion of macro â^@^XBC_PARSE_EXPR_ENTRYâ^@^Y\n 920 | BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, true),\n | ^~~~~~~~~~~~~~~~~~~\nmake: *** [Makefile:668: src/data.o] Error 1\nmake: *** Waiting for unfinished jobs....\ngcc -DBC_ENABLED=1 -DDC_ENABLED=1 -I./include/ -DBUILD_TYPE=A -DEXECPREFIX= -DMAINEXEC=bc -DBC_NUM_KARATSUBA_LEN=34 -DBC_ENABLE_NLS=1 -DBC_ENABLE_EXTRA_MATH=1 -DBC_ENABLE_HISTORY=1 -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_MEMCHECK=0 -DBC_ENABLE_AFL=0 -DBC_ENABLE_OSSFUZZ=0 -DBC_DEFAULT_BANNER=0 -DBC_DEFAULT_SIGINT_RESET=1 -DBC_DEFAULT_TTY_MODE=1 -DBC_DEFAULT_PROMPT=1 -DBC_DEFAULT_EXPR_EXIT=1 -DBC_DEFAULT_DIGIT_CLAMP=0 -DDC_DEFAULT_SIGINT_RESET=1 -DDC_DEFAULT_TTY_MODE=0 -DDC_DEFAULT_PROMPT=0 -DDC_DEFAULT_EXPR_EXIT=1 -DDC_DEFAULT_DIGIT_CLAMP=0 -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -O3 -g -flto -o src/dc.o -c ./src/dc.c\ngcc -DBC_ENABLED=1 -DDC_ENABLED=1 -I./include/ -DBUILD_TYPE=A -DEXECPREFIX= -DMAINEXEC=bc -DBC_NUM_KARATSUBA_LEN=34 -DBC_ENABLE_NLS=1 -DBC_ENABLE_EXTRA_MATH=1 -DBC_ENABLE_HISTORY=1 -DBC_ENABLE_LIBRARY=0 -DBC_ENABLE_MEMCHECK=0 -DBC_ENABLE_AFL=0 -DBC_ENABLE_OSSFUZZ=0 -DBC_DEFAULT_BANNER=0 -DBC_DEFAULT_SIGINT_RESET=1 -DBC_DEFAULT_TTY_MODE=1 -DBC_DEFAULT_PROMPT=1 -DBC_DEFAULT_EXPR_EXIT=1 -DBC_DEFAULT_DIGIT_CLAMP=0 -DDC_DEFAULT_SIGINT_RESET=1 -DDC_DEFAULT_TTY_MODE=0 -DDC_DEFAULT_PROMPT=0 -DDC_DEFAULT_EXPR_EXIT=1 -DDC_DEFAULT_DIGIT_CLAMP=0 -DBC_ENABLE_EDITLINE=0 -DBC_ENABLE_READLINE=0 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -O3 -g -flto -o src/bc_parse.o -c ./src/bc_parse.c\ngcc -DBC_ENABLE_AFL=0 -DBC_ENABLE_OSSFUZZ=0 -I./include/ -flto -o ./gen/strgen ./gen/strgen.c\nerror: Bad exit status from /var/tmp/rpm-tmp.5cLuhE (%build)\n\nRPM build errors:\n Bad exit status from /var/tmp/rpm-tmp.5cLuhE (%build)\n\n```", + "closed": true, + "closedAt": "2025-06-08T22:18:49Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6v8kNF", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "For epel-10-x86_64, just add `-fPIE` to the `CFLAGS`, like so:\n\n```\n$ CFLAGS=-fpie ./configure.sh\n$ make\n```\n\nFor the other two, it appears `stdbool.h` does not properly define `false` and `true`.", + "createdAt": "2025-06-07T05:46:33Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/92#issuecomment-2951889733", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6wDPLy", + "author": { + "login": "tkb-github" + }, + "authorAssociation": "NONE", + "body": "Thanks!", + "createdAt": "2025-06-08T06:52:46Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/issues/92#issuecomment-2953638642", + "viewerDidAuthor": false + } + ], + "createdAt": "2025-06-07T03:51:28Z", + "id": "I_kwDOCL0xJc66WQa1", + "isPinned": false, + "labels": [], + "milestone": null, + "number": 92, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "state": "CLOSED", + "stateReason": "COMPLETED", + "title": "Build failures under RHEL 10 & Fedora 42 with GCC", + "updatedAt": "2025-06-08T22:18:49Z", + "url": "https://github.com/gavinhoward/bc/issues/92" + } +] diff --git a/contrib/bc/project/github_prs.json b/contrib/bc/project/github_prs.json new file mode 100644 index 000000000000..c2ca634c3554 --- /dev/null +++ b/contrib/bc/project/github_prs.json @@ -0,0 +1,7729 @@ +[ + { + "additions": 8, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjM5MjUwOQ==", + "is_bot": false, + "login": "bolknote", + "name": "Evgeny Stepanischev" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "9f34d2427d3f13c8e95b8485f5a6041789ffe400", + "body": "Code:\r\n`define a(*t[], t[]) {}`\r\n\r\nExpected result:\r\nParse error: function parameter or auto \"t[]\" already exists\r\n\r\nActual result:\r\nParses successfully (incorrect)\r\n\r\nThe interpreter now correctly rejects functions with duplicate parameter names, even when one is a reference array (*t[]).", + "changedFiles": 3, + "closed": true, + "closedAt": "2025-03-25T04:55:24Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6j52QL", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Oh, and another thing you could get credit for: if you create `tests/bc/errors/39.txt` and put your reproducer into it, I would accept that too.", + "createdAt": "2025-03-25T02:01:13Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/89#issuecomment-2749850635", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6j6h5M", + "author": { + "login": "bolknote" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Yes, no problem! I hope I’ve managed to cover everything needed. If something isn’t quite right, please let me know!", + "createdAt": "2025-03-25T04:16:09Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/89#issuecomment-2750029388", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6j6uej", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Looks good!", + "createdAt": "2025-03-25T04:55:31Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/89#issuecomment-2750080931", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2025-03-24T22:31:38Z", + "authors": [ + { + "email": "imbolk@gmail.com", + "id": "MDQ6VXNlcjM5MjUwOQ==", + "login": "bolknote", + "name": "Evgeny Stepanischev" + } + ], + "committedDate": "2025-03-24T22:31:38Z", + "messageBody": "", + "messageHeadline": "Fix duplicate param check for ref arrays", + "oid": "97756f3dc17b74c2a9c31488e8680a03f2f016eb" + }, + { + "authoredDate": "2025-03-25T04:07:25Z", + "authors": [ + { + "email": "imbolk@gmail.com", + "id": "MDQ6VXNlcjM5MjUwOQ==", + "login": "bolknote", + "name": "Evgeny Stepanischev" + } + ], + "committedDate": "2025-03-25T04:07:25Z", + "messageBody": "", + "messageHeadline": "Fix coding style", + "oid": "facbd16ceecdd72015abe21f6f4fe4d686b8e66b" + }, + { + "authoredDate": "2025-03-25T04:10:52Z", + "authors": [ + { + "email": "imbolk@gmail.com", + "id": "MDQ6VXNlcjM5MjUwOQ==", + "login": "bolknote", + "name": "Evgeny Stepanischev" + } + ], + "committedDate": "2025-03-25T04:10:52Z", + "messageBody": "This test ensures the interpreter correctly rejects functions with\nduplicate parameter names, even when one is a reference array (*t[]).", + "messageHeadline": "Add test for duplicate ref array parameters", + "oid": "a10b2fd6a2b77325dc981a8ce296d1c22c47ba0a" + } + ], + "createdAt": "2025-03-24T22:35:24Z", + "deletions": 2, + "files": [ + { + "path": "include/lang.h", + "additions": 4, + "deletions": 0 + }, + { + "path": "src/lang.c", + "additions": 3, + "deletions": 2 + }, + { + "path": "tests/bc/errors/39.txt", + "additions": 1, + "deletions": 0 + } + ], + "fullDatabaseId": "2414968976", + "headRefName": "master", + "headRefOid": "a10b2fd6a2b77325dc981a8ce296d1c22c47ba0a", + "headRepository": { + "id": "R_kgDOOARsdw", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjM5MjUwOQ==", + "name": "Evgeny Stepanischev", + "login": "bolknote" + }, + "id": "PR_kwDOCL0xJc6P8YCQ", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [ + { + "id": "", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I'll be upfront: I have accepted this because it passes the tests, and yes, it is a bug.\r\n\r\nHowever, if you run `./scripts/format.sh` on the repo before I do that, I won't have to adjust the style, which would hide your contribution for the `if` statement in `src/lang.c`.\r\n\r\nIf you could do that, I'd appreciate it, and you would get to keep your credit. If not, no problem; just tell me.", + "submittedAt": "2025-03-25T01:55:21Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "CHANGES_REQUESTED", + "commit": { + "oid": "" + } + } + ], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "0013dbee105fad63633ffe11240b18deb3d4bf9e" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2025-03-25T04:55:24Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 89, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "CHANGES_REQUESTED", + "reviewRequests": [], + "reviews": [ + { + "id": "PRR_kwDOCL0xJc6hpxI0", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I'll be upfront: I have accepted this because it passes the tests, and yes, it is a bug.\r\n\r\nHowever, if you run `./scripts/format.sh` on the repo before I do that, I won't have to adjust the style, which would hide your contribution for the `if` statement in `src/lang.c`.\r\n\r\nIf you could do that, I'd appreciate it, and you would get to keep your credit. If not, no problem; just tell me.", + "submittedAt": "2025-03-25T01:55:21Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "CHANGES_REQUESTED", + "commit": { + "oid": "97756f3dc17b74c2a9c31488e8680a03f2f016eb" + } + } + ], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Fix duplicate param check for ref arrays", + "updatedAt": "2025-03-25T04:55:32Z", + "url": "https://github.com/gavinhoward/bc/pull/89" + }, + { + "additions": 21, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjM5MjUwOQ==", + "is_bot": false, + "login": "bolknote", + "name": "Evgeny Stepanischev" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "79d5bffaa1c74888d62c47342e5b99a96797a8b5", + "body": "```\r\nsrand = 10\r\n\r\nfor (i = 0; i < 1000000; i++) {\r\n\ta = irand(100000000)\r\n\tb = irand(100000000)\r\n\r\n\t. = new_band(a, b)\r\n}\r\n```\r\n\r\ntime bc -l band.bc\r\n\r\nreal\t0m12.768s\r\nuser\t0m12.735s\r\nsys\t0m0.030s\r\n\r\n```\r\nsrand = 10\r\n\r\nfor (i = 0; i < 1000000; i++) {\r\n\ta = irand(100000000)\r\n\tb = irand(100000000)\r\n\r\n\t. = band(a, b)\r\n}\r\n```\r\ntime bc -l band.bc\r\n\r\nreal\t0m25.416s\r\nuser\t0m25.270s\r\nsys\t0m0.119s", + "changedFiles": 1, + "closed": true, + "closedAt": "2025-03-01T05:22:26Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6gdBpI", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "After convincing myself that your changes are correct, I accept them.\r\n\r\nHowever, I *am* going to adjust the style; the lib2 file gets put into the executable as a string, and I want to eliminate useless characters.", + "createdAt": "2025-03-01T05:22:29Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/88#issuecomment-2691963464", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2025-02-27T06:55:52Z", + "authors": [ + { + "email": "imbolk@gmail.com", + "id": "MDQ6VXNlcjM5MjUwOQ==", + "login": "bolknote", + "name": "Evgeny Stepanischev" + } + ], + "committedDate": "2025-02-27T06:55:52Z", + "messageBody": "", + "messageHeadline": "The band() function has been accelerated almost 2x", + "oid": "4112814ae6456dd8d0455a1a6b1d06f7ab78d59a" + } + ], + "createdAt": "2025-02-27T07:03:09Z", + "deletions": 19, + "files": [ + { + "path": "gen/lib2.bc", + "additions": 21, + "deletions": 19 + } + ], + "fullDatabaseId": "2361404896", + "headRefName": "master", + "headRefOid": "4112814ae6456dd8d0455a1a6b1d06f7ab78d59a", + "headRepository": { + "id": "R_kgDOOARsdw", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjM5MjUwOQ==", + "name": "Evgeny Stepanischev", + "login": "bolknote" + }, + "id": "PR_kwDOCL0xJc6MwC3g", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "6c12610da98b69e873702479e49218e2944437da" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2025-03-01T05:22:26Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 88, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "The band() function has been accelerated almost 2x", + "updatedAt": "2025-03-01T05:22:30Z", + "url": "https://github.com/gavinhoward/bc/pull/88" + }, + { + "additions": 8, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjQ5NzIxNTU=", + "is_bot": false, + "login": "dag-erling", + "name": "Dag-Erling Smørgrav" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "ca389548763c40852040e5c028b0869b47a3710f", + "body": "Previously, we would catch `SIGWINCH` and call `el_resize()` from the signal handler. This is unsafe and led to strange behavior such as terminating on second resize. The simplest solution is to let libedit handle `SIGWINCH` itself.\r\n\r\nThis reverts 56bb18255a24 and 89d6c3451a60 and removes all traces of `SIGWINCH` from bc itself, and instead sets the `EL_SIGNAL` flag on the editline context, which causes libedit to detect and handle terminal size changes internally.", + "changedFiles": 5, + "closed": true, + "closedAt": "2025-01-09T03:21:56Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6UKjDG", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for your contribution.\r\n\r\nHowever, I cannot accept it. The man page for libedit says that it installs its own signal handler for a set of signals, one of which is `SIGINT`, which `bc` needs to treat specially. So I cannot use `EL_SIGNAL`. If libedit only handled `SIGWINCH`, this would work.", + "createdAt": "2024-11-19T13:57:00Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/86#issuecomment-2485792966", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6UKzkD", + "author": { + "login": "dag-erling" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Did you even test my patch? It works just fine, because (except for `SIGWINCH` and `SIGCONT`) libedit restores the previous signal handler and re-posts the signal after cleaning up.", + "createdAt": "2024-11-19T14:24:15Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/86#issuecomment-2485860611", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6ULIip", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I tested it on macOS. It did not work with `SIGINT`. I do not have access to a Linux machine, but I will later in the day.\r\n\r\nBut I do not like depending on that behavior. Signals are finicky, and that could expose platform differences.", + "createdAt": "2024-11-19T14:56:46Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/86#issuecomment-2485946537", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6ULaEs", + "author": { + "login": "dag-erling" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "I developed the patch on macOS, it works perfectly fine there and on FreeBSD. If you have an issue with it, perhaps you can describe the symptoms so I can help you figure it out instead of dismissing it out of hand?", + "createdAt": "2024-11-19T15:22:57Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/86#issuecomment-2486018348", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6UMfC7", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Please give me some leniency. Testing it is not dismissing it out of hand. I am wary of making changes that may break things. And I have little time.\r\n\r\nHowever, in this case, I decided to test my code as well and found that it had the same problem: that multiple interrupts would not be handled. I found the fix, and it works for your code.\r\n\r\nIt make still take me time to test on Linux and FreeBSD, but this patch may still be viable.", + "createdAt": "2024-11-19T17:16:46Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/86#issuecomment-2486300859", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6Zugh4", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Tested on Linux, FreeBSD, and macOS. With my fix, it works. There should be a release out soon-ish.\r\n\r\nThank you for your patience.", + "createdAt": "2025-01-09T03:22:42Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/86#issuecomment-2579105912", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6aDHFg", + "author": { + "login": "dag-erling" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Thank you!", + "createdAt": "2025-01-10T22:18:03Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/86#issuecomment-2584506720", + "viewerDidAuthor": false + } + ], + "commits": [ + { + "authoredDate": "2024-11-12T11:50:39Z", + "authors": [ + { + "email": "des@des.dev", + "id": "MDQ6VXNlcjQ5NzIxNTU=", + "login": "dag-erling", + "name": "Dag-Erling Smørgrav" + } + ], + "committedDate": "2024-11-12T11:59:50Z", + "messageBody": "Previously, we would catch SIGWINCH and call el_resize() from the signal handler. This is unsafe and led to strange behavior such as terminating on second resize. The simplest solution is to let libedit handle SIGWINCH itself.\n\nThis reverts 56bb18255a24 and 89d6c3451a60 and removes all traces of SIGWINCH from bc itself, and instead sets the EL_SIGNAL flag on the editline context, which causes libedit to detect and handle terminal size changes internally.", + "messageHeadline": "Let libedit handle terminal size changes.", + "oid": "e671399e9dc92181219da87e3aa02d44a0b4a4c3" + } + ], + "createdAt": "2024-11-12T12:02:29Z", + "deletions": 79, + "files": [ + { + "path": "include/history.h", + "additions": 0, + "deletions": 24 + }, + { + "path": "include/status.h", + "additions": 0, + "deletions": 5 + }, + { + "path": "src/history.c", + "additions": 2, + "deletions": 12 + }, + { + "path": "src/read.c", + "additions": 6, + "deletions": 12 + }, + { + "path": "src/vm.c", + "additions": 0, + "deletions": 26 + } + ], + "fullDatabaseId": "2174734014", + "headRefName": "des/sigwinch", + "headRefOid": "e671399e9dc92181219da87e3aa02d44a0b4a4c3", + "headRepository": { + "id": "R_kgDONOIgRA", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjQ5NzIxNTU=", + "name": "Dag-Erling Smørgrav", + "login": "dag-erling" + }, + "id": "PR_kwDOCL0xJc6Bn86-", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "79d5bffaa1c74888d62c47342e5b99a96797a8b5" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2025-01-09T03:21:55Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 86, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Let libedit handle terminal size changes.", + "updatedAt": "2025-01-10T22:18:04Z", + "url": "https://github.com/gavinhoward/bc/pull/86" + }, + { + "additions": 12, + "assignees": [], + "author": { + "id": "U_kgDOCgjy1g", + "is_bot": false, + "login": "henke9600", + "name": "" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "c5b7724ee07daa729f0123c6024223b834de42e3", + "body": "It's possible that the warning being ignored wasn't enabled in the first place, so always enabling it again is wrong.\r\n\r\nIn practice, this resulted in unexpected -Wdisabled-macro-expansion warnings when compiling against musl libc.", + "changedFiles": 3, + "closed": true, + "closedAt": "2024-09-21T19:14:25Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6M-4FI", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I have no comments. You followed style, and I agree that this was a problem. In fact, I had been intending to fix it, but I kept forgetting.\r\n\r\nThe question now is whether I should release. Do you know of any musl-based distros that use this `bc`? If not, I may not worry about releasing.", + "createdAt": "2024-09-21T19:15:47Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/84#issuecomment-2365292872", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6M-6p8", + "author": { + "login": "henke9600" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Not sure. I use it in my hobby distro, but i can live with the warning :slightly_smiling_face: ", + "createdAt": "2024-09-21T19:57:46Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/84#issuecomment-2365303420", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6M_b08", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": ":)\r\n\r\nI think I'll do a release soonish for Gentoo's sake; technically, Gentoo users can use musl.", + "createdAt": "2024-09-22T03:16:02Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/84#issuecomment-2365439292", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc6NRQWz", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "`7.0.3` is out. I hope it works for you.", + "createdAt": "2024-09-24T04:12:15Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/84#issuecomment-2370110899", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2024-09-21T15:30:32Z", + "authors": [ + { + "email": "henrik@lxm.se", + "id": "U_kgDOCgjy1g", + "login": "henke9600", + "name": "Henrik Lindström" + } + ], + "committedDate": "2024-09-21T15:47:44Z", + "messageBody": "It's possible that the warning being ignored wasn't enabled in the first\nplace, so always enabling it again is wrong.\n\nIn practice, this resulted in unexpected -Wdisabled-macro-expansion warnings\nwhen compiling against musl libc.\n\nSigned-off-by: Henrik Lindström <henrik@lxm.se>", + "messageHeadline": "Don't unconditionally enable warnings after ignoring them", + "oid": "16c4f913ed0935a878ce2644aab2ccc0da05c8d0" + } + ], + "createdAt": "2024-09-21T15:49:45Z", + "deletions": 6, + "files": [ + { + "path": "src/file.c", + "additions": 2, + "deletions": 1 + }, + { + "path": "src/program.c", + "additions": 8, + "deletions": 4 + }, + { + "path": "src/vm.c", + "additions": 2, + "deletions": 1 + } + ], + "fullDatabaseId": "2084576864", + "headRefName": "master", + "headRefOid": "16c4f913ed0935a878ce2644aab2ccc0da05c8d0", + "headRepository": { + "id": "R_kgDOL0az5w", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "U_kgDOCgjy1g", + "login": "henke9600" + }, + "id": "PR_kwDOCL0xJc58QB5g", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "e5d675785383ce6142116243aa63d21e5afb54f7" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2024-09-21T19:14:25Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 84, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Don't unconditionally enable warnings after ignoring them", + "updatedAt": "2024-09-24T04:12:15Z", + "url": "https://github.com/gavinhoward/bc/pull/84" + }, + { + "additions": 1, + "assignees": [], + "author": { + "id": "U_kgDOBqIXaQ", + "is_bot": false, + "login": "GregTonoski", + "name": "Greg Tonoski" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "324c30985c0d3d6f918fe81f2d8750c0bd1c78b1", + "body": "", + "changedFiles": 1, + "closed": true, + "closedAt": "2024-08-31T18:15:37Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc6KdjgL", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for catching that!\r\n\r\nUnfortunately, `A.1.md` is actually generated from `bc.1.md.in`. I edited `bc.1.md.in` instead and regenerated the manpages.\r\n\r\nI wasn't able to set you as the author of the commit because I don't know your email address, but I will if you want.", + "createdAt": "2024-08-31T18:16:53Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/pull/81#issuecomment-2323003403", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2024-08-31T07:52:27Z", + "authors": [ + { + "email": "111286121+GregTonoski@users.noreply.github.com", + "id": "U_kgDOBqIXaQ", + "login": "GregTonoski", + "name": "Greg Tonoski" + } + ], + "committedDate": "2024-08-31T07:52:27Z", + "messageBody": "", + "messageHeadline": "Update A.1.md minor correction - number instead of integer", + "oid": "8269063d303979de8188f4810a1c6b070494e025" + } + ], + "createdAt": "2024-08-31T07:52:34Z", + "deletions": 1, + "files": [ + { + "path": "manuals/bc/A.1.md", + "additions": 1, + "deletions": 1 + } + ], + "fullDatabaseId": "2047601609", + "headRefName": "patch-1", + "headRefOid": "8269063d303979de8188f4810a1c6b070494e025", + "headRepository": { + "id": "R_kgDOMq13Zg", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "U_kgDOBqIXaQ", + "name": "Greg Tonoski", + "login": "GregTonoski" + }, + "id": "PR_kwDOCL0xJc56C-vJ", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": null, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": null, + "mergedBy": null, + "milestone": null, + "number": 81, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "CLOSED", + "statusCheckRollup": [], + "title": "Update A.1.md minor correction - number instead of integer", + "updatedAt": "2024-08-31T18:16:54Z", + "url": "https://github.com/gavinhoward/bc/pull/81" + }, + { + "additions": 1, + "assignees": [], + "author": { + "id": "U_kgDOCgjy1g", + "is_bot": false, + "login": "henke9600", + "name": "" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "3278daef0079c20ccaed3a8666457c531dbe576b", + "body": "This avoids the `./configure.sh: 1693: [: unexpected operator` error when using dash.", + "changedFiles": 1, + "closed": true, + "closedAt": "2024-04-30T01:57:03Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc58OZbM", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Sorry for the wait.\r\n\r\nYes, you are correct that that is a bug. Yes, your fix is correct. Accepted without comment!\r\n\r\nThank you for your contribution!", + "createdAt": "2024-04-30T01:57:40Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/76#issuecomment-2084148940", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2024-04-28T16:12:24Z", + "authors": [ + { + "email": "henrik@lxm.se", + "id": "U_kgDOCgjy1g", + "login": "henke9600", + "name": "Henrik Lindström" + } + ], + "committedDate": "2024-04-28T16:12:24Z", + "messageBody": "", + "messageHeadline": "Make configure.sh posix compliant", + "oid": "938fc2cbcace3fb1fb353a5befff1b4a81180350" + } + ], + "createdAt": "2024-04-28T16:25:19Z", + "deletions": 1, + "files": [ + { + "path": "configure.sh", + "additions": 1, + "deletions": 1 + } + ], + "fullDatabaseId": "1844494404", + "headRefName": "master", + "headRefOid": "938fc2cbcace3fb1fb353a5befff1b4a81180350", + "headRepository": { + "id": "R_kgDOL0az5w", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "U_kgDOCgjy1g", + "login": "henke9600" + }, + "id": "PR_kwDOCL0xJc5t8MBE", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "59cf3b86eb4cafb6d7aa164d988a8c14c287e7f8" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2024-04-30T01:57:03Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 76, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Make configure.sh posix compliant", + "updatedAt": "2024-04-30T01:57:41Z", + "url": "https://github.com/gavinhoward/bc/pull/76" + }, + { + "additions": 1, + "assignees": [], + "author": { + "id": "U_kgDOB2enHg", + "is_bot": false, + "login": "naggamura", + "name": "" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "1a381d61b079fc3548d3e4dee3a8ccd9200a3f87", + "body": "Found a printing error.\r\nTry obase=2; 2^99; 2^100; 2^105; you'll get it right away.", + "changedFiles": 1, + "closed": true, + "closedAt": "2023-12-22T15:38:08Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5vVPQZ", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "You are correct; that is a bug.\r\n\r\nYour fix is correct; I got the condition backwards. Accepted without comment.\r\n\r\nSorry for taking so long, I struggle to read my own code; this is why I put in so many \"useless\" comments!\r\n\r\nAlso, I can think of another place that this *could have been* a problem and quickly tested it.\r\n\r\nThe problem is in printing in bases above base 16, where multiple characters may be printed for one digit.\r\n\r\nGuess what? I tested your fix after accepting it (I wanted your name in the Contributors list regardless), and your fix works for that too!\r\n\r\nTry this:\r\n\r\n```\r\n$ BC_LINE_LENGTH=77 bc\r\n>>> obase=128\r\n>>> 2^126\r\n 001 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000\r\n>>> quit\r\n```\r\n\r\nThat's what it is with the fix. Without, the bug shows:\r\n\r\n```\r\n$ BC_LINE_LENGTH=77 bc\r\n>>> obase=128\r\n>>> 2^126\r\n 001 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 00\\\r\n0\r\n>>> quit\r\n```\r\n\r\nI checked your fix with `BC_LINE_LENGTH=78` and `BC_LINE_LENGTH=76`, and your fix properly handles both.\r\n\r\nI am confident in your fix.\r\n\r\nAnyway, I'll start my release process and put out a release with your fix ASAP.", + "createdAt": "2023-12-22T15:53:14Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/74#issuecomment-1867838489", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5vWpvU", + "author": { + "login": "naggamura" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Oh I helped... ^^; I'm happy.\r\nI'm Jonathan Kim", + "createdAt": "2023-12-23T05:14:48Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/74#issuecomment-1868209108", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5vWqt8", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Yes, you did! And your fix has now passed the release process untouched.\r\n\r\nPlease don't think I'm a jerk for your previous PR; I try to not be.\r\n\r\nI just have ridiculously high standards and personal weaknesses in programming. And an eccentric style.\r\n\r\nIn fact, I [don't accept contributions at all][1] in my [next project][2]. Nothing against people, but I really struggle with patches. It's so bad that I actually can't get a programming job because of that. If you work in the industry, you're doing better than me.\r\n\r\nAnd nice to meet you. :)\r\n\r\n[1]: https://git.yzena.com/Yzena/Yc#user-content-open-source-not-open-contribution\r\n[2]: https://git.yzena.com/Yzena/Yc", + "createdAt": "2023-12-23T05:37:53Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/74#issuecomment-1868213116", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2023-12-22T13:22:27Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-22T13:22:27Z", + "messageBody": "Try obase=2; 2^105;", + "messageHeadline": "Fixed printing error.", + "oid": "930cb2fd56d7851ecc1af3de16b4b7357b0b5ba8" + } + ], + "createdAt": "2023-12-22T13:25:36Z", + "deletions": 1, + "files": [ + { + "path": "src/num.c", + "additions": 1, + "deletions": 1 + } + ], + "fullDatabaseId": "1655098845", + "headRefName": "master", + "headRefOid": "930cb2fd56d7851ecc1af3de16b4b7357b0b5ba8", + "headRepository": null, + "headRepositoryOwner": { + "id": "U_kgDOB2enHg", + "login": "naggamura" + }, + "id": "PR_kwDOCL0xJc5ips3d", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "39bd2c5622167a3c092ca9e2c38886ff288ba508" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2023-12-22T15:38:08Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 74, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Fixed printing error.", + "updatedAt": "2023-12-23T05:37:55Z", + "url": "https://github.com/gavinhoward/bc/pull/74" + }, + { + "additions": 657, + "assignees": [], + "author": { + "id": "U_kgDOB2enHg", + "is_bot": false, + "login": "naggamura", + "name": "" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "fcbe9d68ccc964fda12457ebbf687a27f57ff31f", + "body": "I'm sorry I missed many things on last PR.\r\nI followed your instructions step by step.\r\n\r\nImproved SQRT needs no long division in iteration.\r\nOnly one long division is needed for compose an initial estimation.\r\n\r\nNo meaningful difference for small input.\r\n\r\nFor large input, about 2.4 times faster, no meaningful difference in memory usage.\r\n\r\nHere is the result for large input.\r\n\r\n( 'CC=clang CFLAGS=-flto ./configure -O3' is used for configuring. )\r\n[stat_c1.txt](https://github.com/gavinhoward/bc/files/13696239/stat_c1.txt)\r\n[stat_c4.txt](https://github.com/gavinhoward/bc/files/13696240/stat_c4.txt)\r\n\r\nsqrt1_large.txt : by your code.\r\nsqrt2_large.txt : by my code.\r\n\r\n---------------------------------\r\n\r\nElapsed time for large input.\r\n\r\nx ../../sqrt1_large.txt\r\n+ ../../sqrt2_large.txt\r\n+--------------------------------------------------------------------------------+\r\n| + |\r\n| + |\r\n| + |\r\n| + |\r\n| + |\r\n| + |\r\n| + |\r\n| + |\r\n| + |\r\n| + |\r\n| + |\r\n| + x |\r\n| + x |\r\n| + x |\r\n| + x |\r\n| + x |\r\n| + x |\r\n| + x |\r\n| + x |\r\n| + x |\r\n| + x |\r\n| + x |\r\n| + x x|\r\n| ++ x xx|\r\n|+++ x xx|\r\n|+++ x xx|\r\n|+++ xxxx|\r\n|+++ xxxx|\r\n|+++ x xxxx|\r\n|+++ x xxxx|\r\n|+++ x xxxx|\r\n|++++ x xxxx|\r\n| A| |_A| |\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 87.84 91.81 90.215 90.3572 1.0769137\r\n+ 50 36.96 38.71 37.805 37.8088 0.44755408\r\nDifference at 99.5% confidence\r\n -52.5484 +/- 0.523644\r\n -58.1563% +/- 0.315605%\r\n (Student's t, pooled s = 0.824636)\r\n\r\n\r\n----------------------\r\n\r\n\r\nMemory for large input.\r\n\r\nx ../../sqrt1_large.txt\r\n+ ../../sqrt2_large.txt\r\n+--------------------------------------------------------------------------------+\r\n| + |\r\n| + x |\r\n| + x |\r\n| + + x x x |\r\n| + + + x x x |\r\n| + + ++ ++ xx x x x x x |\r\n|+ ++++ +++++ + +++ x xx x x x xx xxx xx|\r\n|+ + +++++++++++++++++ * + * x xxxxxxxxx xxxx xxxx xx|\r\n| |_______AM_______| |______M__A_________| |\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 5376 5596 5494 5508.96 51.80535\r\n+ 50 5184 5412 5302 5301.12 44.115174\r\nDifference at 99.5% confidence\r\n -207.84 +/- 30.5525\r\n -3.77276% +/- 0.542566%\r\n (Student's t, pooled s = 48.1141)\r\n\r\n\r\n- END -", + "changedFiles": 3, + "closed": true, + "closedAt": "2023-12-20T01:50:17Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5u0b9I", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Unfortunately, you still did not check everything. That's probably my fault because I didn't tell you everything.\r\n\r\nNevertheless, this is what I found this time:\r\n\r\n* `CC=clang ./configure -pDBG; make`, my standard debug build, failed to build.\r\n* `CC=clang ./configure -gO0; make; make test`, a less strict debug build, failed the test suite.\r\n* `CC=clang ./configure -pGDH; make`, my standard release build for myself, failed to build.\r\n* `CC=clang ./configure -pGNU; make; make test`, the standard release build for Linux, failed the test suite.\r\n* `CC=gcc ./configure -pGNU; make; make test`, the same standard Linux build but with `gcc`, also failed the test suite.\r\n* `CC=clang ./configure -pBSD; make; make test`, the standard release build for FreeBSD and friends, failed the test suite.\r\n* `CC=gcc ./configure -pBSD; make; make test`, the same standard FreeBSD build but with `gcc`, also failed the test suite.\r\n\r\nIn addition, what failed on the test suite was off by a lot; the result I got for all cases was:\r\n\r\n```\r\nRunning bc sqrt...FAIL!!!\r\n12c12\r\n< .0000000000000035071355833500363\r\n---\r\n> .8915580480000035071355833500363\r\nbc failed test sqrt\r\n```\r\n\r\nAs you can see, the numbers are the same, except at the beginning, which means that answer was about as far off as it could be.\r\n\r\nIn addition, when I ran this:\r\n\r\n```\r\n$ ./configure -gO0 -v\r\n$ make\r\n$ make test\r\n```\r\n\r\nwhich is a Valgrind-enabled build, I got this:\r\n\r\n```\r\nRunning bc sqrt...==47836== Memcheck, a memory error detector\r\n==47836== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.\r\n==47836== Using Valgrind-3.22.0 and LibVEX; rerun with -h for copyright info\r\n==47836== Command: bin/bc -lqc ./tests/bc/sqrt.txt\r\n==47836==\r\n==47836== Invalid write of size 8\r\n==47836== at 0x484C96E: memset (vg_replace_strmem.c:1386)\r\n==47836== by 0x12A28F: bc_int_elementary_mul (num.c:4274)\r\n==47836== by 0x1253AA: bc_int_k_mul (num.c:4327)\r\n==47836== by 0x124972: bc_num_sqrt (num.c:4636)\r\n==47836== by 0x13156F: bc_program_builtin (program.c:1990)\r\n==47836== by 0x12DB0C: bc_program_exec (program.c:3332)\r\n==47836== by 0x13D623: bc_vm_process (vm.c:1046)\r\n==47836== by 0x13CCA5: bc_vm_file (vm.c:1103)\r\n==47836== by 0x13C117: bc_vm_exec (vm.c:1498)\r\n==47836== by 0x13B4E1: bc_vm_boot (vm.c:1718)\r\n==47836== by 0x10C0CC: bc_main (bc.c:62)\r\n==47836== by 0x119995: main (main.c:108)\r\n==47836== Address 0x4aa2270 is 32 bytes inside a block of size 36 alloc'd\r\n==47836== at 0x4840784: malloc (vg_replace_malloc.c:442)\r\n==47836== by 0x13A4C3: bc_vm_malloc (vm.c:810)\r\n==47836== by 0x11BA76: bc_num_init (num.c:3368)\r\n==47836== by 0x1244B1: bc_num_sqrt (num.c:4567)\r\n==47836== by 0x13156F: bc_program_builtin (program.c:1990)\r\n==47836== by 0x12DB0C: bc_program_exec (program.c:3332)\r\n==47836== by 0x13D623: bc_vm_process (vm.c:1046)\r\n==47836== by 0x13CCA5: bc_vm_file (vm.c:1103)\r\n==47836== by 0x13C117: bc_vm_exec (vm.c:1498)\r\n==47836== by 0x13B4E1: bc_vm_boot (vm.c:1718)\r\n==47836== by 0x10C0CC: bc_main (bc.c:62)\r\n==47836== by 0x119995: main (main.c:108)\r\n==47836==\r\n==47836==\r\n==47836== HEAP SUMMARY:\r\n==47836== in use at exit: 0 bytes in 0 blocks\r\n==47836== total heap usage: 1,633 allocs, 1,633 frees, 331,419 bytes allocated\r\n==47836==\r\n==47836== All heap blocks were freed -- no leaks are possible\r\n==47836==\r\n==47836== For lists of detected and suppressed errors, rerun with: -s\r\n==47836== ERROR SUMMARY: 8 errors from 1 contexts (suppressed: 0 from 0)\r\nFAIL!!!\r\nbc failed test 'sqrt' with error code 100\r\n```\r\n\r\nThat needs to be fixed, both the out-of-bounds write and the unaligned write.\r\n\r\nIf you're wondering how much testing I do, do this:\r\n\r\n* Create two clones of your branch in separate directories, which I will call `bc1/` and `bc2/`.\r\n* In `bc1/`, run `scripts/release.sh 1 1 1 1 0 1 0 0 1 0 1 0 1 0 0 1 1`.\r\n* In `bc2/`, run `scripts/release.sh 1 1 1 0 1 0 1 0 1 0 1 0 0 1 1 1 1`.\r\n* Run them both in separate terminals and at the same time.\r\n* Leave it overnight.\r\n\r\nYep, you heard that last bit right: my full test run is an overnight thing. And I run both because one does `clang`, and one does `gcc`.\r\n\r\nMoving on to benchmarks, I ran\r\n\r\n```\r\n$ CC=clang CFLAGS=-flto ./configure -O3\r\n$ make\r\n```\r\n\r\nin both branches. Then I ran\r\n\r\n```\r\n$ ./scripts/benchmark.sh -p1 -n50 bc newton_raphson_sqrt_small > ../sqrt2_small.txt\r\n```\r\n\r\nin your branch, copied `benchmarks/bc/newton_raphson_sqrt_small.txt` to my branch and ran\r\n\r\n```\r\n$ ./scripts/benchmark.sh -p1 -n50 bc newton_raphson_sqrt_small > ../sqrt1_small.txt\r\n```\r\n\r\nThese are my results:\r\n\r\n```\r\n$ ./scripts/ministat -w 80 -c99.5 -C1 ../sqrt1_small.txt ../sqrt2_small.txt\r\nx ../sqrt1_small.txt\r\n+ ../sqrt2_small.txt\r\n+--------------------------------------------------------------------------------+\r\n| + x |\r\n| + x x |\r\n| + x x |\r\n| + + + x x |\r\n| + + + x x x |\r\n| + + + + x x x |\r\n| + + + + x x x |\r\n| + + + + x x x |\r\n| + + + + x x x |\r\n| + + + + + x x x x x x |\r\n| + + + + + + x x x x x x x |\r\n| + + + + + + x x x x x x x |\r\n|+ + + + + + + * x x x x x x x|\r\n| |________A_M_____| |________MA________| |\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 1.45 1.52 1.48 1.4806 0.016463937\r\n+ 50 1.38 1.45 1.42 1.4164 0.015220824\r\nDifference at 99.5% confidence\r\n -0.0642 +/- 0.0100677\r\n -4.33608% +/- 0.664237%\r\n (Student's t, pooled s = 0.0158546)\r\n$ ./scripts/ministat -w 80 -c99.5 -C4 ../sqrt1_small.txt ../sqrt2_small.txt\r\nx ../sqrt1_small.txt\r\n+ ../sqrt2_small.txt\r\n+--------------------------------------------------------------------------------+\r\n| + |\r\n| + |\r\n| x + |\r\n| x x + |\r\n| x x + + |\r\n| x x +x + + + |\r\n| x + xx +x + x + + |\r\n| x *+ xx *x++ xx + + + |\r\n| xx +*+xxxx x**++ xx + + + |\r\n|x x xx +*+xxxx x***++xx*x+++++ + ++|\r\n| |__________A_|_______M|A_________| |\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 18956 19244 19168 19168.16 57.880722\r\n+ 50 19144 19376 19224 19232.88 54.73373\r\nDifference at 99.5% confidence\r\n 64.72 +/- 35.769\r\n 0.337643% +/- 0.186939%\r\n (Student's t, pooled s = 56.3292)\r\n```\r\n\r\nYours was slightly faster and used slightly more memory.\r\n\r\nI ran the same benchmark for large, but only for one sample each, and my numbers say that yours are accurate for that benchmark.\r\n\r\nHowever, I cannot accept code that fails tests or has memory bugs. In addition, because of the test failures, you can expect that I will run a lot more tests on your code before I accept.\r\n\r\nSo I won't close this PR, but you need to fix the problems above (by running that `release.sh` script both ways and fixing every problem) before I'll look at it again.\r\n\r\nAlso, I can't understand `sqrt_2.png`. I can follow `sqrt_1.png`, but I need you to redo `sqrt_2.png` because I also won't accept the code if I don't understand it.", + "createdAt": "2023-12-17T18:09:30Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/73#issuecomment-1859239752", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5u10BR", + "author": { + "login": "naggamura" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "BcNum.len is managed as tight as possible. So clearing upper digits is needed for like sqrt(0.000...000xyz...) \r\nPassed 'make test'\r\n---", + "createdAt": "2023-12-18T05:52:00Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/73#issuecomment-1859600465", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5u12rZ", + "author": { + "login": "naggamura" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Last push was not the latest version. Pushed again.\r\n\r\nAnyway, test again and passed all tests.\r\n\r\n...\r\n==5965== \r\n==5965== HEAP SUMMARY:\r\n==5965== in use at exit: 0 bytes in 0 blocks\r\n==5965== total heap usage: 1,520 allocs, 1,520 frees, 205,685 bytes allocated\r\n==5965== \r\n==5965== All heap blocks were freed -- no leaks are possible\r\n==5965== \r\n==5965== For counts of detected and suppressed errors, rerun with: -v\r\n==5965== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)\r\npass\r\nRunning bc directory test...pass\r\nRunning bc binary file test...pass\r\nRunning bc binary stdin test...pass\r\nRunning bc limits tests...pass\r\n\r\nAll bc tests passed.\r\n\r\n...\r\n...\r\n\r\n==6927== \r\n==6927== HEAP SUMMARY:\r\n==6927== in use at exit: 0 bytes in 0 blocks\r\n==6927== total heap usage: 73 allocs, 73 frees, 37,886 bytes allocated\r\n==6927== \r\n==6927== All heap blocks were freed -- no leaks are possible\r\n==6927== \r\n==6927== For counts of detected and suppressed errors, rerun with: -v\r\n==6927== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)\r\npass\r\nRunning dc directory test...pass\r\nRunning dc binary file test...pass\r\nRunning dc binary stdin test...pass\r\n\r\nAll dc tests passed.\r\n\r\n***********************************************************************\r\n\r\n----", + "createdAt": "2023-12-18T06:05:29Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/73#issuecomment-1859611353", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5u3LdX", + "author": { + "login": "naggamura" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Doing scripts/release.sh test...", + "createdAt": "2023-12-18T09:47:53Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/73#issuecomment-1859958615", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5u_Gjj", + "author": { + "login": "naggamura" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Passed the tests.\r\n\r\nBenchmarks\r\n\r\n[stat_small_c1.txt](https://github.com/gavinhoward/bc/files/13712108/stat_small_c1.txt)\r\n[stat_small_c4.txt](https://github.com/gavinhoward/bc/files/13712109/stat_small_c4.txt)\r\n[stat_large_c1.txt](https://github.com/gavinhoward/bc/files/13712110/stat_large_c1.txt)\r\n[stat_large_c4.txt](https://github.com/gavinhoward/bc/files/13712111/stat_large_c4.txt)\r\n", + "createdAt": "2023-12-19T03:09:54Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/73#issuecomment-1862035683", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5vCDYq", + "author": { + "login": "naggamura" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "sqrt_2.png updated.", + "createdAt": "2023-12-19T13:58:49Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/73#issuecomment-1862809130", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5vFhZX", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I have spent two full days on this since the last time I sent a message. I cannot spend any more time on this; I have a project to finish and a hard deadline.\r\n\r\nSo I have to make a final decision, which is to reject this. Thank you for your contribution, but I guess I don't want it.\r\n\r\nThere are several reasons why:\r\n\r\n* Your code still contains debug code.\r\n* You created your own functions to do things when functions to do those things already exist, which shows lack of research again. And duplication.\r\n* Your proof looks wrong to me, or I still can't understand it.\r\n* Your code passes the test suite, but it did not pass another set of tests I threw at it.\r\n* This is purely a performance PR, which is not really important to me right now.\r\n\r\nBut most of all, and this is nothing against you, I just can't read other people's code. I am unable to build a theory of mind, and this extends to reading code written by other people.\r\n\r\nThere is a reason I tend to do things by myself; I can't work on the code otherwise.\r\n\r\nSo I'm afraid I have run out of time and desire. Sorry.", + "createdAt": "2023-12-20T01:50:17Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/73#issuecomment-1863718487", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2023-12-17T12:30:19Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-17T12:30:19Z", + "messageBody": "", + "messageHeadline": "New bc_num_sqrt function needs only one long division.", + "oid": "a8821844d9f05df15fde8bed92332226e147b151" + }, + { + "authoredDate": "2023-12-18T02:46:18Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-18T02:46:18Z", + "messageBody": "Passed 'sqrt test'", + "messageHeadline": "SQRT fix: post process for numbers like 0.000000...000000xyz...", + "oid": "a4e27bb46a0fc9dc59e51ba5de153b6f2fe55f5d" + }, + { + "authoredDate": "2023-12-18T05:46:38Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-18T05:46:38Z", + "messageBody": "", + "messageHeadline": "SQRT: fixed memory bug. passed 'make test'", + "oid": "f4f8cf72d513f2986bb477d10bcd0fcb520a0e7e" + }, + { + "authoredDate": "2023-12-18T06:01:30Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-18T06:01:30Z", + "messageBody": "", + "messageHeadline": "Commit missed!!! fix again.", + "oid": "1faa1296390f5e689d78c28fa9b434516f47c15d" + }, + { + "authoredDate": "2023-12-18T09:22:18Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-18T09:22:18Z", + "messageBody": "…r running release.sh", + "messageHeadline": "Removed unused variables, explicit type conversion in assignments, fo…", + "oid": "fb9d7b88c60ecdb7ce8bdfe8a11e23d09b2342fb" + }, + { + "authoredDate": "2023-12-18T13:17:09Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-18T13:17:09Z", + "messageBody": "…unning release.sh.\n\nRunning release.sh for this commit now...", + "messageHeadline": "Fixed memory warning(passing NULL with zero length to memcpy) while r…", + "oid": "9f171378fe38619d032107d388eef06519dde4a7" + }, + { + "authoredDate": "2023-12-19T03:08:34Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-19T03:08:34Z", + "messageBody": "…old one!)\n\n2. Passed Valgrind memory test.\n./configure -gO0 -v\nmake\nmake test\n\n3. Passed\nscripts/release.sh 1 1 1 0 1 0 1 0 1 0 1 0 0 1 1 1 1\non Ubuntu 18.04.2 LTS", + "messageHeadline": "1. Simple multiplication modified based on Gavin's (much better than …", + "oid": "2b3616586454f315a5014360f7f7d5d36f10bd9a" + }, + { + "authoredDate": "2023-12-19T13:57:21Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-19T13:57:21Z", + "messageBody": "", + "messageHeadline": "Proof related to sqrt approximation updated.", + "oid": "2d7b8fe4efe528076a568b0f174c35a53e47ae93" + } + ], + "createdAt": "2023-12-17T13:16:03Z", + "deletions": 72, + "files": [ + { + "path": "sqrt_1.png", + "additions": 0, + "deletions": 0 + }, + { + "path": "sqrt_2.png", + "additions": 0, + "deletions": 0 + }, + { + "path": "src/num.c", + "additions": 657, + "deletions": 72 + } + ], + "fullDatabaseId": "1647316989", + "headRefName": "master", + "headRefOid": "2d7b8fe4efe528076a568b0f174c35a53e47ae93", + "headRepository": null, + "headRepositoryOwner": { + "id": "U_kgDOB2enHg", + "login": "naggamura" + }, + "id": "PR_kwDOCL0xJc5iMA_9", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": null, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": null, + "mergedBy": null, + "milestone": null, + "number": 73, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "CLOSED", + "statusCheckRollup": [], + "title": "New bc_num_sqrt function needs only one long division.", + "updatedAt": "2023-12-20T01:50:17Z", + "url": "https://github.com/gavinhoward/bc/pull/73" + }, + { + "additions": 831, + "assignees": [], + "author": { + "id": "U_kgDOB2enHg", + "is_bot": false, + "login": "naggamura", + "name": "" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "5ee6a05918bd8341a7ed97d6594862ad5d713557", + "body": "Newton-Raphson approximation is applied to division and sqrt.\r\nTry 5^1000000 / 2^1000000 and sort(5^999999)\r\n", + "changedFiles": 3, + "closed": true, + "closedAt": "2023-12-14T04:47:11Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5uku2Q", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for your PR. I have some comments.\r\n\r\n* If you run `CC=clang ./configure.sh -pDBG; make`, my regular debug build, the build fails.\r\n* If you run `CC=clang ./configure.sh -pGDH; make`, my regular release build, the build fails.\r\n* If you run `CC=gcc CFLAGS=\"-pedantic -Wextra -Werror\" ./configure -O3; make`, the build fails.\r\n* If you run `CC=clang ./configure -gO3; make; make test`, a release build with debug information, the build succeeds, but the test suite fails on an assert.\r\n* You have functions that have reserved names (names that begin with an underscore); using those names is undefined behavior.\r\n* You did not follow my style even though there is a script (`scripts/format.sh`) that will style the code for you.\r\n\r\nIn addition, I can unfortunately tell that you did no research into my `bc`. If you had, you would know that [I already use Newton-Raphson for `sqrt()`][1].\r\n\r\nHowever, all of that could be safely discarded if the code shows promise. So I wrote [benchmarks to test your new code][2].\r\n\r\nI ran these commands with my code:\r\n\r\n```\r\n$ CC=clang CFLAGS=-flto ./configure -O3\r\n$ make\r\n```\r\n\r\nThen I ran the benchmarks as follows:\r\n\r\n```\r\n$ ./scripts/benchmark.sh -p1 -n50 bc newton_raphson_div_small > ../div1_small.txt\r\n$ ./scripts/benchmark.sh -p1 -n50 bc newton_raphson_div_large > ../div1_large.txt\r\n$ ./scripts/benchmark.sh -p1 -n50 bc newton_raphson_sqrt_small > ../sqrt1_small.txt\r\n$ ./scripts/benchmark.sh -p1 -n50 bc newton_raphson_sqrt_large > ../sqrt1_large.txt\r\n```\r\n\r\nThen I repeated the steps with your code:\r\n\r\n```\r\n$ CC=clang CFLAGS=-flto ./configure -O3\r\n$ make\r\n$ ./scripts/benchmark.sh -p1 -n50 bc newton_raphson_div_small > ../div2_small.txt\r\n$ ./scripts/benchmark.sh -p1 -n50 bc newton_raphson_div_large > ../div2_large.txt\r\n$ ./scripts/benchmark.sh -p1 -n50 bc newton_raphson_sqrt_small > ../sqrt2_small.txt\r\n$ ./scripts/benchmark.sh -p1 -n50 bc newton_raphson_sqrt_large > ../sqrt2_large.txt\r\n```\r\n\r\nThe `small` benchmarks test the operation on \"small\" numbers (below `2^64`), and the `large` benchmarks test the operation on large numbers (a small number to a power up to 1,000,000).\r\n\r\nTo test how your code did, I used `ministat` in the repo, so I ran this:\r\n\r\n```\r\n$ make ministat\r\n```\r\n\r\nThen to test the time difference on `div_small`, I ran the following:\r\n\r\n```\r\n$ ./scripts/ministat -w80 -c95 -C1 ../div1_small.txt ../div2_small.txt\r\nx ../div1_small.txt\r\n+ ../div2_small.txt\r\n+--------------------------------------------------------------------------------+\r\n| + x |\r\n| + + x * |\r\n| + + * * x |\r\n| + * * * x |\r\n| + * * * x |\r\n| + * * * x |\r\n| * * * * x + |\r\n| * * * * * x + x |\r\n|* * * * * * x * + x |\r\n|* * * * * * * * * x x + +|\r\n||____|____M_AA______|___| |\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 3.41 3.52 3.45 3.4504 0.024071323\r\n+ 50 3.41 3.67 3.44 3.4484 0.039967334\r\nNo difference proven at 95.0% confidence\r\n```\r\n\r\nAs you can tell, there's no difference at the lowest confidence I can accept.\r\n\r\nTo test the memory difference (max RSS) for `div_small`, I ran the following:\r\n\r\n```\r\n$ ./scripts/ministat -w80 -c95 -C4 ../div1_small.txt ../div2_small.txt\r\nx ../div1_small.txt\r\n+ ../div2_small.txt\r\n+--------------------------------------------------------------------------------+\r\n| x x x+ + + x +xx xx ++ |\r\n| x x + x * x+ +++ ++ x x *+ +xx xx ++ + x + |\r\n|xx x +++ + + x x*x x* *++ ++ x x +x ** +** ** x++ +* +x + +xx ++|\r\n| |_____|_____________A____A_M___________|___| |\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 34792 35000 34912 34896.88 55.262136\r\n+ 50 34808 35016 34916 34910 52.956663\r\nNo difference proven at 95.0% confidence\r\n```\r\n\r\nNo memory difference. Cool.\r\n\r\nFor the elapsed time for `div_large`:\r\n\r\n```\r\n$ ./scripts/ministat -w80 -c99.5 -C1 ../div1_large.txt ../div2_large.txt\r\nx ../div1_large.txt\r\n+ ../div2_large.txt\r\n+--------------------------------------------------------------------------------+\r\n| x + |\r\n| x ++ |\r\n| x ++ |\r\n| x ++ |\r\n| x ++ |\r\n| x ++ |\r\n| x ++ |\r\n| x ++ |\r\n| x ++ |\r\n| x ++ |\r\n| xx ++ |\r\n| xx ++ |\r\n| xx ++ |\r\n| xx ++ |\r\n| xx ++ |\r\n| xx +++ |\r\n| xx ++++ |\r\n| xx ++++ |\r\n| xxx ++++ |\r\n| xxx x ++++++|\r\n||____MA_____| |A| |\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 13.72 21.71 13.845 14.013 1.1141964\r\n+ 50 26.7 27.64 27.005 27.0158 0.17722452\r\nDifference at 99.5% confidence\r\n 13.0028 +/- 0.506578\r\n 92.791% +/- 6.90636%\r\n (Student's t, pooled s = 0.79776)\r\n```\r\n\r\nAs you can see, there *is* a difference, with *99.5% confidence*, but in favor of the *old code*. In fact, if not for the one outlier, your code would be twice as slow.\r\n\r\nAnd if we look at the max RSS difference for `div_large`:\r\n\r\n```\r\n$ ./scripts/ministat -w80 -c99.5 -C4 ../div1_large.txt ../div2_large.txt\r\nx ../div1_large.txt\r\n+ ../div2_large.txt\r\n+--------------------------------------------------------------------------------+\r\n| + |\r\n| + |\r\n| + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| xx + |\r\n| xx ++|\r\n| xx +++|\r\n|xxx +++|\r\n|xxx +++|\r\n|xxx +++|\r\n|xxx +++|\r\n|xxx +++|\r\n|xxx +++|\r\n|xxx x +++|\r\n|xxxxx +++|\r\n||A| |A||\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 8716 8968 8796 8802.72 57.549638\r\n+ 50 13812 13960 13888 13890.08 41.837314\r\nDifference at 99.5% confidence\r\n 5087.36 +/- 31.9473\r\n 57.793% +/- 0.51%\r\n (Student's t, pooled s = 50.3106)\r\n```\r\n\r\nYour code uses 50% more memory, with 99.5% confidence.\r\n\r\nMoving onto `sqrt_small`, for elapsed time, I got this:\r\n\r\n```\r\n$ ./scripts/ministat -w80 -c99.5 -C1 ../sqrt1_small.txt ../sqrt2_small.txt\r\nx ../sqrt1_small.txt\r\n+ ../sqrt2_small.txt\r\n+--------------------------------------------------------------------------------+\r\n| x + |\r\n| xx + |\r\n| xx + |\r\n| xx + |\r\n| xx + + |\r\n| xx ++++ |\r\n| xx ++++ |\r\n|xxx ++++ |\r\n|xxx ++++ |\r\n|xxxx +++++ |\r\n|xxxx +++++ |\r\n|xxxx +++++ |\r\n|xxxxx +++++ |\r\n|xxxxx x +++++++ +|\r\n| MA| |_A_| |\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 1.47 1.6 1.5 1.5072 0.023822473\r\n+ 50 3.07 3.26 3.14 3.1452 0.036153866\r\nDifference at 99.5% confidence\r\n 1.638 +/- 0.0194408\r\n 108.678% +/- 1.83123%\r\n (Student's t, pooled s = 0.0306155)\r\n```\r\n\r\nYour code is twice as slow with 99.5% confidence.\r\n\r\nFor memory on `sqrt_small`, I got this:\r\n\r\n```\r\n$ ./scripts/ministat -w80 -c99.5 -C4 ../sqrt1_small.txt ../sqrt2_small.txt\r\nx ../sqrt1_small.txt\r\n+ ../sqrt2_small.txt\r\n+--------------------------------------------------------------------------------+\r\n| xx + x |\r\n| x xx + x x ++ |\r\n| x x x xx + + x x ++ |\r\n| x xxxx x xxx++ + x x +x x +++ ++ + |\r\n|xx + x x + + xxxxx + + +* *xx***+++ x+xx++***++++ ++++ ++++|\r\n| |_____________|__M__________|A_M____________| |\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 18964 19252 19176 19160.4 68.353224\r\n+ 50 19004 19344 19242 19231.68 71.990203\r\nDifference at 99.5% confidence\r\n 71.28 +/- 44.574\r\n 0.372017% +/- 0.233047%\r\n (Student's t, pooled s = 70.1953)\r\n```\r\n\r\nSo there's a small increase of memory in your code, even at 99.5% confidence, but that's small enough that I can ignore it.\r\n\r\nFor time on `sqrt_large`, I got this:\r\n\r\n```\r\n$ ./scripts/ministat -w80 -c99.5 -C1 ../sqrt1_large.txt ../sqrt2_large.txt\r\nx ../sqrt1_large.txt\r\n+ ../sqrt2_large.txt\r\n+--------------------------------------------------------------------------------+\r\n| xx + |\r\n| xx ++ |\r\n| xx +++ |\r\n| xx +++ |\r\n| xx +++ |\r\n| xx +++ |\r\n| xx ++++ |\r\n| xx ++++ |\r\n| xxx +++++ |\r\n|xxxx +++++ |\r\n|xxxx +++++ |\r\n|xxxx +++++ |\r\n|xxxxx +++++++|\r\n| |A| |A_| |\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 176.9 184.63 180.565 180.403 1.6383681\r\n+ 50 327.42 339.26 331.24 331.3832 2.8256482\r\nDifference at 99.5% confidence\r\n 150.98 +/- 1.4666\r\n 83.6905% +/- 1.02747%\r\n (Student's t, pooled s = 2.3096)\r\n```\r\n\r\nYour code is *almost* twice as slow at 99.5% confidence.\r\n\r\nFor memory on `sqrt_large`, I got this:\r\n\r\n```\r\n$ ./scripts/ministat -w80 -c99.5 -C4 ../sqrt1_large.txt ../sqrt2_large.txt\r\nx ../sqrt1_large.txt\r\n+ ../sqrt2_large.txt\r\n+--------------------------------------------------------------------------------+\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x + |\r\n| x ++|\r\n| x ++|\r\n| x ++|\r\n| x ++|\r\n| x ++|\r\n| x ++|\r\n| x ++|\r\n|xx ++|\r\n|xx ++|\r\n|xx ++|\r\n|xx ++|\r\n|xx ++|\r\n|xxx ++|\r\n|xxx ++|\r\n||A A||\r\n+--------------------------------------------------------------------------------+\r\n N Min Max Median Avg Stddev\r\nx 50 6952 7156 7044 7046.48 42.561955\r\n+ 50 15412 15568 15496 15485.84 51.175313\r\nDifference at 99.5% confidence\r\n 8439.36 +/- 29.887\r\n 119.767% +/- 0.679408%\r\n (Student's t, pooled s = 47.0661)\r\n```\r\n\r\nYour code uses twice as much memory at 99.5% confidence.\r\n\r\nSo on average, your code is twice as slow and uses more memory.\r\n\r\nUnfortunately, based on the poor performance of your code compared to what already exists, I can't say that it shows promise.\r\n\r\nCombined with the problems I mentioned at the beginning, I'm afraid I must reject this PR completely. Sorry.\r\n\r\n[1]: https://github.com/gavinhoward/bc/blob/master/manuals/algorithms.md#square-root\r\n[2]: https://github.com/gavinhoward/bc/commit/fcbe9d68ccc964fda12457ebbf687a27f57ff31f", + "createdAt": "2023-12-14T04:47:11Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + }, + { + "content": "EYES", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/pull/72#issuecomment-1855122832", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2023-12-11T20:27:06Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-11T20:27:06Z", + "messageBody": "", + "messageHeadline": "div, sqrt improved using Newton-Raphson algorithm.", + "oid": "d6e0849220eea59ff7b380dfc779a43a33a234d1" + }, + { + "authoredDate": "2023-12-12T11:49:47Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-12T11:49:47Z", + "messageBody": "", + "messageHeadline": "Make secure more", + "oid": "7a1cd5f7667308300e7f9db46b1827fbc1dc2703" + }, + { + "authoredDate": "2023-12-13T13:53:11Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-13T13:53:11Z", + "messageBody": "", + "messageHeadline": "markdown test", + "oid": "1f0cce37b56205fbc24db847d184ce452bfdb8fa" + }, + { + "authoredDate": "2023-12-13T16:30:08Z", + "authors": [ + { + "email": "jonathan@acryl.ai", + "id": "U_kgDOB2enHg", + "login": "naggamura", + "name": "jonathan" + } + ], + "committedDate": "2023-12-13T16:30:08Z", + "messageBody": "", + "messageHeadline": "Newton-Raphson div, sqrt", + "oid": "248e3b9b34cf4893f6440c169584592fc78f6090" + } + ], + "createdAt": "2023-12-13T16:38:28Z", + "deletions": 50, + "files": [ + { + "path": "newton-raphson-div.png", + "additions": 0, + "deletions": 0 + }, + { + "path": "newton-raphson-sqrt.png", + "additions": 0, + "deletions": 0 + }, + { + "path": "src/num.c", + "additions": 831, + "deletions": 50 + } + ], + "fullDatabaseId": "1642781993", + "headRefName": "newton-raphson", + "headRefOid": "248e3b9b34cf4893f6440c169584592fc78f6090", + "headRepository": null, + "headRepositoryOwner": { + "id": "U_kgDOB2enHg", + "login": "naggamura" + }, + "id": "PR_kwDOCL0xJc5h6t0p", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": null, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": null, + "mergedBy": null, + "milestone": null, + "number": 72, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "CLOSED", + "statusCheckRollup": [], + "title": "Newton-Raphson divison, sqrt", + "updatedAt": "2023-12-14T04:47:11Z", + "url": "https://github.com/gavinhoward/bc/pull/72" + }, + { + "additions": 337, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjgwNzU4MA==", + "is_bot": false, + "login": "SamuelMarks", + "name": "Samuel Marks" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "3f4c8cc5f86092fa4a8d59bc99d8f10ad2894cf0", + "body": "WiP\r\n\r\nCan finish if you like. Can also send you a PR on your own website, just make me an account", + "changedFiles": 19, + "closed": true, + "closedAt": "2025-03-25T05:20:50Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5kTkGI", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for the PR!\r\n\r\nAllow me to I apologize upfront. Usually, I do not question user requests; after all, there is a user, and they have a request, so obviously, there is a need or a want.\r\n\r\n*However*, personally, [I ***hate*** CMake][1]. I hate it so much that I have spent *three years* designing and implementing a build system to remove it from my [other project][2], a build system that would allow building on Windows, Mac OSX, Linux, the BSD's, etc. And I was going to add support for that build system to `bc`, which I hoped would remove any need for people to use CMake to build `bc` cross-platform.\r\n\r\nSo, I apologize because I can tell you put a lot of work into this, but for once, I am asking you to provide justification. I won't ask for much; I just need to know why CMake is necessary and why you believe that keeping a fork would not serve. (Since a separate build system won't touch the code, it seems like an easy fork to keep.)\r\n\r\nAgain, I'm sorry.\r\n\r\nAlso, if I do decide to merge, I'm going to need you to explain the more complicated bits; I've tried to avoid complicated CMake as much as possible. But I need to be able to maintain the CMake code without your help.\r\n\r\n[1]: https://news.ycombinator.com/item?id=36469860\r\n[2]: https://git.yzena.com/Yzena/Yc", + "createdAt": "2023-08-17T19:34:43Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/68#issuecomment-1682850184", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5kVWMk", + "author": { + "login": "SamuelMarks" + }, + "authorAssociation": "NONE", + "body": "@gavinhoward I'm obsessed with interoperability. CMake is one way to achieve this. Open to your build system also, where I plan on taking `bc` to:\r\n- Windows (different MSVC versions);\r\n- MinGW (x86, x64, …)\r\n- DOS (via OpenWatcom and maybe via early MSVC versions)\r\n- Cygwin\r\n- Linux\r\n- macOS\r\n- iOS\r\n- Android\r\n- SunOS (Solaris→OpenSolaris→illumos→OpenIndiana)\r\n- *BSD (FreeBSD, OpenBSD, …)\r\n\r\n…and yes I know you support some of these targets already.\r\n\r\nThere are some other nice advantages like CPack and CTest, but honestly there are a number of other nice build generators out there and I tend to choose CMake just because it's the most popular and has a good number of generators.", + "createdAt": "2023-08-18T04:01:35Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/68#issuecomment-1683317540", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5kVpyv", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Okay, interoperability is something I can understand. But oh boy, I would love it if my build system could do all that.\r\n\r\nThat said, my build system (named Rig, by the way) won't be able to cross-compile in the first release, so some of those targets may not be possible in the first release of Rig. (OpenWatcom is the one that makes me most nervous.)\r\n\r\nSo I'll make you a deal. I'll do these things:\r\n\r\n1. Merge your PR,\r\n2. Set up Rig in my `bc` once it's ready,\r\n3. Write you a tutorial on how to use Rig for `bc`, and\r\n4. Help you understand the new build scripts,\r\n\r\nas long as you'll do the following:\r\n\r\n1. Give me your contact info because this is a pretty big commitment, and I want to be able to ask you questions, if at all possible (you can use the info at <https://gavinhoward.com/contact/> to send me that info privately),\r\n2. Point me to material that will help me set up environments for all of those platforms (so I can test `bc` and CMake on them myself),\r\n3. Explain to me any CMake code I don't understand (I'll make them reviews in the PR),\r\n4. Learn how to use Rig for `bc` once it's ready (I don't care if you use it for anything else), and\r\n5. At that point, give me your honest opinion if Rig can fully replace the CMake build.\r\n\r\nIf it can, I'd ***really*** like to remove the CMake then. If it can't, well, it can't, and CMake will stay in perpetuity.\r\n\r\nIn other words, I'll add CMake now if you'll give Rig a fair shake later.\r\n\r\nOh, and point number 2 is crucial; if I can't test `bc` on those platforms with CMake, I won't merge the PR because I would basically be committing to supporting those platforms by merging the PR, and I can't do that without the ability to test.\r\n\r\nBy the way, I only need to know how to set up environments for:\r\n\r\n* Windows (specifically different MSVC versions because I can already compile on the latest Windows 10);\r\n* MinGW\r\n* DOS (via OpenWatcom and maybe via early MSVC versions)\r\n* Cygwin\r\n* iOS (do I need a Mac computer?)\r\n* Android\r\n* SunOS (Solaris, OpenSolaris, illumos, OpenIndiana)\r\n\r\nI have the capability for the rest.", + "createdAt": "2023-08-18T06:04:29Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/68#issuecomment-1683397807", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5kX99Z", + "author": { + "login": "SamuelMarks" + }, + "authorAssociation": "NONE", + "body": "Great yeah sure I'll give it a shot. No guaranteed time commitments (because of everything going on in my life); but I'll see what I can do.\r\n\r\nMy email is samuel` `at symbol offscale.io; or you can use myfirstname mylastname` `at symbol gmail.com.\r\n\r\nI wrote some Windows Batch scripts for building on these different targets, and lots of things can run in a good CI/CD environment (e.g., GitHub Actions, Cirrus CI, &etc.): https://github.com/offscale/win-cmake-multi-build\r\n\r\nObviously still a ways to go to support all the different targets I'm interested in. But yeah something clean like your `bc` might be just complicated enough to test out my interoperability", + "createdAt": "2023-08-18T14:29:25Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/68#issuecomment-1684004697", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5kcbRH", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Okay. Thank you.\r\n\r\nPlease let me know when this PR is not WIP.", + "createdAt": "2023-08-20T04:29:28Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/68#issuecomment-1685173319", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5kc7km", + "author": { + "login": "SamuelMarks" + }, + "authorAssociation": "NONE", + "body": "Sure thing, I'll see if I can get to it later in the week. Last remaining errors:\r\n```\r\nbc.c.obj : error LNK2001: unresolved external symbol _bc_help\r\nvm.c.obj : error LNK2001: unresolved external symbol _bc_lib\r\nvm.c.obj : error LNK2001: unresolved external symbol _bc_lib_name\r\nvm.c.obj : error LNK2001: unresolved external symbol _bc_lib2\r\nvm.c.obj : error LNK2001: unresolved external symbol _bc_lib2_name\r\n```\r\n\r\nWhich should be defined in an object file that you define in your existent configure script:\r\n```sh\r\ncontents=$(replace \"$contents\" \"BC_HELP_O\" \"$bc_help\")\r\n```\r\n\r\nSo I just need to reverse-engineer it into CMake and we should be good to go™.", + "createdAt": "2023-08-20T14:58:39Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/68#issuecomment-1685305638", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc6j64Rc", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "It's been a year and a half, unfortunately, with no word since then.\r\n\r\nHowever, I have not stood still. I have [added][1] [Rig][2] [to `bc`][3], and I have [implemented the entire test suite in Rig][4].\r\n\r\nIn addition, Rig has the ability to cross compile now, and it will deactivate the tests under those conditions.\r\n\r\nSo because no progress has been made with CMake, and Rig is now working (except on Windows, but the only thing left is getting itself to bootstrap itself), I am rejecting this PR in favor of Rig.\r\n\r\n[1]: https://github.com/gavinhoward/bc/blob/master/build.gaml\r\n[2]: https://github.com/gavinhoward/bc/blob/master/build.rig\r\n[3]: https://github.com/gavinhoward/bc/blob/master/build.pkg.rig\r\n[4]: https://github.com/gavinhoward/bc/commit/77fcd66898f754cb1dbce262c6c0efd0879f855c", + "createdAt": "2025-03-25T05:20:50Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/68#issuecomment-2750121052", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2023-08-17T18:47:20Z", + "authors": [ + { + "email": "807580+SamuelMarks@users.noreply.github.com", + "id": "MDQ6VXNlcjgwNzU4MA==", + "login": "SamuelMarks", + "name": "Samuel Marks" + } + ], + "committedDate": "2023-08-17T18:47:20Z", + "messageBody": "", + "messageHeadline": "CMake support (initial)", + "oid": "4256fe30a6eee88983bbe39b606a793a47b96ec0" + }, + { + "authoredDate": "2023-08-17T20:06:53Z", + "authors": [ + { + "email": "807580+SamuelMarks@users.noreply.github.com", + "id": "MDQ6VXNlcjgwNzU4MA==", + "login": "SamuelMarks", + "name": "Samuel Marks" + } + ], + "committedDate": "2023-08-17T20:06:53Z", + "messageBody": "", + "messageHeadline": "Improve CMake suppoprt and remove extraneous code & files", + "oid": "63e687a593ca72430a23216ab35eb897a4677b36" + }, + { + "authoredDate": "2023-08-18T21:02:52Z", + "authors": [ + { + "email": "807580+SamuelMarks@users.noreply.github.com", + "id": "MDQ6VXNlcjgwNzU4MA==", + "login": "SamuelMarks", + "name": "Samuel Marks" + } + ], + "committedDate": "2023-08-18T21:02:52Z", + "messageBody": "", + "messageHeadline": "Improve CMake support", + "oid": "a2e95a6e697fa9d6557a16c17ad6bf8d048b5bd3" + }, + { + "authoredDate": "2023-08-19T00:43:54Z", + "authors": [ + { + "email": "807580+SamuelMarks@users.noreply.github.com", + "id": "MDQ6VXNlcjgwNzU4MA==", + "login": "SamuelMarks", + "name": "Samuel Marks" + } + ], + "committedDate": "2023-08-19T00:43:54Z", + "messageBody": "", + "messageHeadline": "Improve CMake support", + "oid": "b945314d5edcb660bc286f63e60a5a63697b9ee4" + } + ], + "createdAt": "2023-08-17T18:49:48Z", + "deletions": 17, + "files": [ + { + "path": ".gitignore", + "additions": 3, + "deletions": 0 + }, + { + "path": "CMakeLists.txt", + "additions": 123, + "deletions": 0 + }, + { + "path": "bcl.pc.in", + "additions": 1, + "deletions": 1 + }, + { + "path": "cmake/BundleIcon.icns", + "additions": 0, + "deletions": 0 + }, + { + "path": "cmake/CTestConfig.cmake", + "additions": 7, + "deletions": 0 + }, + { + "path": "cmake/Config.cmake.in", + "additions": 4, + "deletions": 0 + }, + { + "path": "cmake/CustomVolumeIcon.icns", + "additions": 0, + "deletions": 0 + }, + { + "path": "cmake/Info.plist", + "additions": 14, + "deletions": 0 + }, + { + "path": "cmake/MultiCPackConfig.cmake", + "additions": 6, + "deletions": 0 + }, + { + "path": "cmake/README.txt", + "additions": 5, + "deletions": 0 + }, + { + "path": "cmake/Welcome.txt", + "additions": 1, + "deletions": 0 + }, + { + "path": "cmake/config.h.in", + "additions": 11, + "deletions": 0 + }, + { + "path": "include/bc.h", + "additions": 8, + "deletions": 7 + }, + { + "path": "include/dc.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/history.h", + "additions": 6, + "deletions": 4 + }, + { + "path": "include/read.h", + "additions": 2, + "deletions": 1 + }, + { + "path": "include/vm.h", + "additions": 10, + "deletions": 2 + }, + { + "path": "src/CMakeLists.txt", + "additions": 134, + "deletions": 0 + }, + { + "path": "src/vm.c", + "additions": 1, + "deletions": 1 + } + ], + "fullDatabaseId": "1479523420", + "headRefName": "cmake", + "headRefOid": "b945314d5edcb660bc286f63e60a5a63697b9ee4", + "headRepository": { + "id": "R_kgDOKIWfvQ", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjgwNzU4MA==", + "name": "Samuel Marks", + "login": "SamuelMarks" + }, + "id": "PR_kwDOCL0xJc5YL7xc", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": null, + "mergeStateStatus": "DIRTY", + "mergeable": "CONFLICTING", + "mergedAt": null, + "mergedBy": null, + "milestone": null, + "number": 68, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "CLOSED", + "statusCheckRollup": [], + "title": "CMake support", + "updatedAt": "2025-03-25T05:20:51Z", + "url": "https://github.com/gavinhoward/bc/pull/68" + }, + { + "additions": 5, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjc0MTgyNg==", + "is_bot": false, + "login": "dorjechang", + "name": "alexander naumochkin" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "71fa3cd4029d416a5272b262736c4d6ab709b6ce", + "body": "Casting int -1 to size_t produces SIZE_T_MAX so\r\nBC_NUM_PRINT_WIDTH is used instead of 0", + "changedFiles": 1, + "closed": true, + "closedAt": "2023-03-15T16:06:35Z", + "comments": [], + "commits": [ + { + "authoredDate": "2023-03-15T12:46:29Z", + "authors": [ + { + "email": "alexander.naumochkin@gmail.com", + "id": "MDQ6VXNlcjc0MTgyNg==", + "login": "dorjechang", + "name": "ash" + } + ], + "committedDate": "2023-03-15T12:46:29Z", + "messageBody": "Casting int -1 to size_t produces SIZE_T_MAX so\nBC_NUM_PRINT_WIDTH is used instead of 0", + "messageHeadline": "Fix incorrect processing of env:BC_LINE_LENGTH=0", + "oid": "31042aed8426850187b43d7e639f244354da0d6c" + } + ], + "createdAt": "2023-03-15T13:08:07Z", + "deletions": 2, + "files": [ + { + "path": "src/vm.c", + "additions": 5, + "deletions": 2 + } + ], + "fullDatabaseId": "1276831340", + "headRefName": "fix_BC_LINE_LENGTH=0", + "headRefOid": "31042aed8426850187b43d7e639f244354da0d6c", + "headRepository": null, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjc0MTgyNg==", + "name": "alexander naumochkin", + "login": "dorjechang" + }, + "id": "PR_kwDOCL0xJc5MGuZs", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "0c42c52dfc0735026cb6d2534dc24436ff19778f" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2023-03-15T16:06:35Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 65, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Fix incorrect processing of env:BC_LINE_LENGTH=0", + "updatedAt": "2023-03-15T16:06:35Z", + "url": "https://github.com/gavinhoward/bc/pull/65" + }, + { + "additions": 16, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjQ2MTYwNzI3", + "is_bot": false, + "login": "firasuke", + "name": "Firas Khalil Khana" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "2ed62ba26831b34cae22b9e7b2f1dd2f3a74b541", + "body": "", + "changedFiles": 1, + "closed": true, + "closedAt": "2022-11-26T15:16:46Z", + "comments": [], + "commits": [ + { + "authoredDate": "2022-11-26T10:30:09Z", + "authors": [ + { + "email": "firasuke@gmail.com", + "id": "MDQ6VXNlcjQ2MTYwNzI3", + "login": "firasuke", + "name": "Firas Khalil Khana" + } + ], + "committedDate": "2022-11-26T10:30:09Z", + "messageBody": "", + "messageHeadline": "Mention MAN3DIR in build.md", + "oid": "f62ecdabc44ca2ed32f7f0895a78099919038da9" + } + ], + "createdAt": "2022-11-26T10:30:59Z", + "deletions": 7, + "files": [ + { + "path": "manuals/build.md", + "additions": 16, + "deletions": 7 + } + ], + "fullDatabaseId": "1136437158", + "headRefName": "master", + "headRefOid": "f62ecdabc44ca2ed32f7f0895a78099919038da9", + "headRepository": null, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjQ2MTYwNzI3", + "name": "Firas Khalil Khana", + "login": "firasuke" + }, + "id": "PR_kwDOCL0xJc5DvKem", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "09247332bf9dafef6840864598c93df92ebc0820" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2022-11-26T15:16:46Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 57, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Mention MAN3DIR in build.md", + "updatedAt": "2022-11-26T15:16:46Z", + "url": "https://github.com/gavinhoward/bc/pull/57" + }, + { + "additions": 1, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjU3MDUxMDY4", + "is_bot": false, + "login": "pacordova", + "name": "Paul Cordova" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "4355599e9a59834098ed18e670b90cec2b84120d", + "body": "On POSIX systems, `find` may have indeterministic output (I believe based on the inode on the filesystem).\r\n`sort` is needed to ensure the output is deterministic.\r\n\r\nIn my builds, this resulted in the build order in the generated `Makefile` changing around.\r\nThus building on a fresh partition made with `mkfs.ext4` would result in the binary being different each time.\r\nThe compiled binary code in the`bc` binary shuffled around depending on which files were built first.\r\nPossibly the build order in the Makefile was affecting the order in which files were linked?\r\n\r\nI added `LC_ALL=C` recommended by reproducible-builds.org. \r\nSee below for reference:\r\n- [https://reproducible-builds.org/docs/archives/](https://reproducible-builds.org/docs/archives/)\r\n- [https://reproducible-builds.org/docs/stable-inputs/](https://reproducible-builds.org/docs/stable-inputs/)", + "changedFiles": 1, + "closed": true, + "closedAt": "2022-08-03T02:35:23Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5Huq4A", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "The only hangup I would have had is if the way you did it was not portable to POSIX `sh`. I consulted the standard, and your solution is portable!\r\n\r\nI agree that reproducible builds are *very* important. So thank you for your contribution! I have accepted it, and it will be in the release out in a day or two. I just have to make sure everything builds correctly.", + "createdAt": "2022-08-03T02:37:10Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/54#issuecomment-1203416576", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5HuvNl", + "author": { + "login": "pacordova" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "No problem! Thank you for accepting my pull request!\r\nOne additional comment:\r\nWith this change I do get reproducible builds, although I do not use `-flto`\r\nYour recommended optimization of `-O3` I think should be ok, but I do know that Link Time Optimization (LTO) and Profile Guided Optimization (PGO) can both potentially break build determinism.\r\nEither way the end user should be able get reproducible builds if they want it with this change.\r\nThe CFLAGS I was testing with were `CFLAGS='-march=x86-64 -pipe -Os -fstack-protector-strong -fstack-clash-protection'` with GCC 11.2.0.", + "createdAt": "2022-08-03T03:13:48Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/54#issuecomment-1203434341", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5Hwkv2", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you!", + "createdAt": "2022-08-03T12:57:26Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/54#issuecomment-1203915766", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2022-08-02T16:49:50Z", + "authors": [ + { + "email": "pac3nc@virginia.edu", + "id": "MDQ6VXNlcjU3MDUxMDY4", + "login": "pacordova", + "name": "pac" + } + ], + "committedDate": "2022-08-02T16:49:50Z", + "messageBody": "find has indeterministic output based on the inode on the filesystem,\nso sort is needed to ensure the output is deterministic", + "messageHeadline": "improve reproducibility", + "oid": "8c7d5fa125dae5049427cb9b0ddc9ee7bbf099b4" + }, + { + "authoredDate": "2022-08-02T23:00:34Z", + "authors": [ + { + "email": "pac3nc@virginia.edu", + "id": "MDQ6VXNlcjU3MDUxMDY4", + "login": "pacordova", + "name": "pac" + } + ], + "committedDate": "2022-08-02T23:00:34Z", + "messageBody": "", + "messageHeadline": "remove -z", + "oid": "6ea4d12e2f11e0ce0bed779d991a17230db3a889" + } + ], + "createdAt": "2022-08-02T17:17:46Z", + "deletions": 1, + "files": [ + { + "path": "configure.sh", + "additions": 1, + "deletions": 1 + } + ], + "fullDatabaseId": "1015375109", + "headRefName": "reproducible_builds", + "headRefOid": "6ea4d12e2f11e0ce0bed779d991a17230db3a889", + "headRepository": null, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjU3MDUxMDY4", + "name": "Paul Cordova", + "login": "pacordova" + }, + "id": "PR_kwDOCL0xJc48hWUF", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "71215b0eb1c20aa622bd77e664ad7f099b349e91" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2022-08-03T02:35:23Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 54, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Improve Reproducibility (Reproducible Builds)", + "updatedAt": "2022-08-03T12:57:26Z", + "url": "https://github.com/gavinhoward/bc/pull/54" + }, + { + "additions": 11, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjQxMzkwMDY=", + "is_bot": false, + "login": "bsdimp", + "name": "Warner Losh" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "cad172d8f0962f47b08007beedc8f4637618ffe6", + "body": "The historic gnu bc behavior was to have ^D be delete next character if\r\nthere were any characters in the input, or end of file if there\r\nweren't. This matches what emacs users expect for editing the command\r\nline. Implement this by assuming end of file if the input is empty, and\r\ndelete forward character if it isn't.\r\n\r\nSigned-off-by: Warner Losh <imp@bsdimp.com>", + "changedFiles": 1, + "closed": true, + "closedAt": "2022-04-29T14:06:09Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc5CTTkH", + "author": { + "login": "bsdimp" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "I've been using this change in my tree for a while now since FreeBSD merged the Howard bc. If there's a way to write a test case for it, please let me know.\r\n\r\nTo test it out, it's simple: 123^B^D^M should leave you in bc and produce the answer 12. Current behavior is to exit after printing 123.", + "createdAt": "2022-04-28T15:36:16Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/51#issuecomment-1112357127", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5CVMF_", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for this submission. I have tested it, and it works as advertised. It does require a tweak to the test suite to get all of the tests to pass.\r\n\r\nHowever, there are two hangups.\r\n\r\nFirst, if I do merge this, I'm not sure it warrants another release by itself; it might be better to wait until some other change comes along.\r\n\r\nSecond, this does change the behavior of `bc` and would require a major version bump. This is also the biggest reason for wanting at least one other change; this is a small change that requires a big version bump, and I'd want something big.\r\n\r\nBut the fact that it changes behavior also gives me pause. I don't know how many people depend on the `^D` behavior for end-of-file, even when there's input, and I hesitate to make this change without knowing the numbers.\r\n\r\nHowever, I would be satisfied with just a survey of FreeBSD users, which should be the biggest portion of my userbase. (Not many Linux distros have my `bc`, and history is not available on Windows.) That is, I would be satisfied if the survey showed that the vast majority of the FreeBSD users who respond either don't care or agree with the change.\r\n\r\nI would also be satisfied with the blessing of my regular FreeBSD contact, Stefan Esser, who I believe has a good handle on what changes would be okay to make.\r\n\r\nIf you can give me either one of those two things, I'll merge. If Stefan even gives a blessing for a release, I'll do that too.", + "createdAt": "2022-04-29T03:47:48Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/51#issuecomment-1112850815", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5CW3df", + "author": { + "login": "bsdimp" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Since it's only in the command history editing, I'm having trouble understanding how it would affect tests or other input since that code path appears to be disabled when we aren't reading from a tty.\r\n\r\nAnd even if it didn't, ^D on Unix is only a tty signal of EOF. It's not used at the end of files to signify EOF, which is done by zero read.\r\n\r\nFreeBSD used gnu bc since 1998. It has the behavior I've implemented for the past at least 24 years, so it wouldn't be unreasonable to assume that it's what FreeBSD users that care one way or the other would want. Once you've started to edit the text on the line, you don't want to terminate the program and get an answer for the partially edited line.\r\n\r\nI'd argue that this is a mere bug fix to make things more compatible with bc and isn't such a gross behavior change as to warrant a major release bump, but that's just my sensibilities.\r\n\r\nI'm OK waiting on a release. I'll also chat with Stefan as well about this point.", + "createdAt": "2022-04-29T13:07:47Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/51#issuecomment-1113290591", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5CXG7p", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I have history tests, but they are only run when you run `make test_history` because they can be...flaky. No worries; I'll make the change to fix them. In fact, I might make a change to test this new behavior.\r\n\r\nYou make a compelling and convincing case that this is merely a bug fix. Stefan seems to agree that it is and that many old Unix users would expect this behavior change.\r\n\r\nIn fact, if old Unix users expect the change, then the fact that no one has said anything is probably a good indicator that no one has been using it, which means I can pull the rug out without making anybody mad.\r\n\r\nSo I'm more than satisfied. I'll make the change, and I'll make it in a bugfix release.", + "createdAt": "2022-04-29T14:06:00Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/51#issuecomment-1113353961", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5CXNGY", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I do have a question: should I remove the EOF behavior entirely?", + "createdAt": "2022-04-29T14:22:22Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/51#issuecomment-1113379224", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc5CXQAy", + "author": { + "login": "bsdimp" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "> I do have a question: should I remove the EOF behavior entirely?\r\n\r\nNo. The behavior I implemented matches gnu bc's behavior.", + "createdAt": "2022-04-29T14:28:47Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/pull/51#issuecomment-1113391154", + "viewerDidAuthor": false + }, + { + "id": "IC_kwDOCL0xJc5CXkZ_", + "author": { + "login": "stesser" + }, + "authorAssociation": "CONTRIBUTOR", + "body": " I had sent a reply to Gavin a few hours ago, and I do see that the pull request has already been merged.\r\n\r\nJust a comment regarding compatibility with the previous bc version in FreeBSD:\r\n\r\nWhile GNU bc has the requested behavior, the previous bc in FreeBSD up to 12.x did not:\r\n\r\n$ bc -v\r\nbc (BSD bc) 1.1-FreeBSD\r\n$ bc\r\n12345^B^B^B <- cursor on 3\r\n^D <- bell sound, nothing deleted\r\n<DEL>\r\n1245 <- result after pressing DEL\r\n\r\nIn the FreeBSD bc (which had been obtained from OpenBSD) ^D did only signal EOF if the input line was empty, but it did not delete to the right.\r\n\r\nGNU bc actually has the line editing behavior created by this patch, and thus it is further step towards GNU bc compatibility. (And IIRC, GNU bc had been in the FreeBSD base system, a few decades ago ...)", + "createdAt": "2022-04-29T15:55:50Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/pull/51#issuecomment-1113474687", + "viewerDidAuthor": false + } + ], + "commits": [ + { + "authoredDate": "2022-04-28T15:30:25Z", + "authors": [ + { + "email": "imp@FreeBSD.org", + "id": "MDQ6VXNlcjQxMzkwMDY=", + "login": "bsdimp", + "name": "Warner Losh" + } + ], + "committedDate": "2022-04-28T15:35:21Z", + "messageBody": "The historic gnu bc behavior was to have ^D be delete next character if\nthere were any characters in the input, or end of file if there\nweren't. This matches what emacs users expect for editing the command\nline. Implement this by assuming end of file if the input is empty, and\ndelete forward character if it isn't.\n\nSigned-off-by: Warner Losh <imp@bsdimp.com>", + "messageHeadline": "Emacs delete-next-character", + "oid": "cee56074a8fe669901e0869ee8a6e23106d1634b" + } + ], + "createdAt": "2022-04-28T15:35:29Z", + "deletions": 4, + "files": [ + { + "path": "src/history.c", + "additions": 11, + "deletions": 4 + } + ], + "fullDatabaseId": "922011328", + "headRefName": "del-forward", + "headRefOid": "cee56074a8fe669901e0869ee8a6e23106d1634b", + "headRepository": { + "id": "R_kgDOHQG2MA", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjQxMzkwMDY=", + "name": "Warner Losh", + "login": "bsdimp" + }, + "id": "PR_kwDOCL0xJc429MbA", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "f8fa6febf7521062f0c4ecb6ca4406c91c125360" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2022-04-29T14:06:09Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 51, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Emacs delete-next-character", + "updatedAt": "2022-04-29T15:55:50Z", + "url": "https://github.com/gavinhoward/bc/pull/51" + }, + { + "additions": 1, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjQ2MTYwNzI3", + "is_bot": false, + "login": "firasuke", + "name": "Firas Khalil Khana" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "c3b2d28b2d615ca2b84ba398d796040348c5f13a", + "body": "", + "changedFiles": 1, + "closed": true, + "closedAt": "2021-12-26T16:59:58Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc47rUun", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Whoops! Thanks for catching.", + "createdAt": "2021-12-26T17:00:08Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/49#issuecomment-1001212839", + "viewerDidAuthor": true + }, + { + "id": "IC_kwDOCL0xJc47rVpi", + "author": { + "login": "firasuke" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Glad I could help!", + "createdAt": "2021-12-26T17:27:15Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/49#issuecomment-1001216610", + "viewerDidAuthor": false + } + ], + "commits": [ + { + "authoredDate": "2021-12-26T16:30:19Z", + "authors": [ + { + "email": "firasuke@gmail.com", + "id": "MDQ6VXNlcjQ2MTYwNzI3", + "login": "firasuke", + "name": "Firas Khalil Khana" + } + ], + "committedDate": "2021-12-26T16:30:19Z", + "messageBody": "", + "messageHeadline": "Add missing newline character", + "oid": "ef5412b1bc939c0dbe18c7cf523e05de8561b25f" + } + ], + "createdAt": "2021-12-26T16:30:26Z", + "deletions": 1, + "files": [ + { + "path": "configure.sh", + "additions": 1, + "deletions": 1 + } + ], + "fullDatabaseId": "810041419", + "headRefName": "patch-1", + "headRefOid": "ef5412b1bc939c0dbe18c7cf523e05de8561b25f", + "headRepository": null, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjQ2MTYwNzI3", + "name": "Firas Khalil Khana", + "login": "firasuke" + }, + "id": "PR_kwDOCL0xJc4wSEBL", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "232a12f6870eaf8fed95c12aa33fb3dbd7df8715" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2021-12-26T16:59:58Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 49, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Add missing newline character", + "updatedAt": "2021-12-26T17:27:19Z", + "url": "https://github.com/gavinhoward/bc/pull/49" + }, + { + "additions": 7, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjEzNTQxNjk5", + "is_bot": false, + "login": "depler", + "name": "" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "289ad4a08981c4eaf1328ab9d16f184ee0466a34", + "body": "", + "changedFiles": 1, + "closed": true, + "closedAt": "2021-09-29T15:05:03Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc43crZP", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Looks good! Thank you!", + "createdAt": "2021-09-29T15:05:16Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/44#issuecomment-930264655", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2021-09-29T09:33:47Z", + "authors": [ + { + "email": "depler.mv@gmail.com", + "id": "MDQ6VXNlcjEzNTQxNjk5", + "login": "depler", + "name": "depler" + } + ], + "committedDate": "2021-09-29T09:33:47Z", + "messageBody": "", + "messageHeadline": "tests_bc.bat fix", + "oid": "2d05fde966b12cee7e02220f1466efd7a78a56c4" + } + ], + "createdAt": "2021-09-29T09:34:23Z", + "deletions": 7, + "files": [ + { + "path": "vs/tests/tests_bc.bat", + "additions": 7, + "deletions": 7 + } + ], + "fullDatabaseId": "745557688", + "headRefName": "master", + "headRefOid": "2d05fde966b12cee7e02220f1466efd7a78a56c4", + "headRepository": null, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjEzNTQxNjk5", + "login": "depler" + }, + "id": "PR_kwDOCL0xJc4scE64", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "74d55ddfc79df8adeb70cdb2fc81dc05f8bacbde" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2021-09-29T15:05:03Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 44, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "tests_bc.bat fix", + "updatedAt": "2021-09-29T15:05:16Z", + "url": "https://github.com/gavinhoward/bc/pull/44" + }, + { + "additions": 1017, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjEzNTQxNjk5", + "is_bot": false, + "login": "depler", + "name": "" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "da29d88f70dca79c8a7e274b1cb5dee3c4bccb6f", + "body": "Changes:\r\n- projects moved to subfolder `vs`\r\n- projects created from scratch\r\n- fixed release configuration in executable (code optimizations enabled)\r\n- executable is statically linked (should work without any dependencies starting on Vista and newer)\r\n- library contains configurations `ReleaseMD` and `ReleaseMT` (shared and static linkage)\r\n- added 'vs\\tests' subfolder with scripts for windows (uses original test files, see `tests_bc.bat`, `tests_dc.bat`)\r\n\r\nBy the way, did you test binaries on windows? I've found failed test for dc:\r\n\r\n```\r\nc:\\Data\\Sources\\bc\\vs\\tests>tests_dc.bat\r\nPASS: abs\r\nPASS: add\r\nPASS: arctangent\r\nPASS: arrays\r\nPASS: assignments\r\n\r\n...\r\n\r\nParse error: bad character 't'\r\n <stdin>:2\r\n\r\nFAIL_RUNTIME: vars\r\n```\r\n", + "changedFiles": 15, + "closed": true, + "closedAt": "2021-09-25T21:06:56Z", + "comments": [ + { + "id": "IC_kwDOCL0xJc43Q7BQ", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I'm pulling this now because I made the fixes for all issues based on your code.\r\n\r\nI'm probably going to need your help still.", + "createdAt": "2021-09-25T21:06:52Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/38#issuecomment-927182928", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2021-09-24T22:42:26Z", + "authors": [ + { + "email": "depler.mv@gmail.com", + "id": "MDQ6VXNlcjEzNTQxNjk5", + "login": "depler", + "name": "depler" + } + ], + "committedDate": "2021-09-24T22:42:26Z", + "messageBody": "", + "messageHeadline": "new bc.vcxproj, static linkage, release configuration", + "oid": "ae20dd7c1fedf9a7534aca4fda9783356cd15f86" + }, + { + "authoredDate": "2021-09-25T07:07:19Z", + "authors": [ + { + "email": "depler.mv@gmail.com", + "id": "MDQ6VXNlcjEzNTQxNjk5", + "login": "depler", + "name": "depler" + } + ], + "committedDate": "2021-09-25T07:07:19Z", + "messageBody": "", + "messageHeadline": "bcl project", + "oid": "1c9479c50217773732f4111e4c3dfbc7e7415c1e" + }, + { + "authoredDate": "2021-09-25T07:15:33Z", + "authors": [ + { + "email": "depler.mv@gmail.com", + "id": "MDQ6VXNlcjEzNTQxNjk5", + "login": "depler", + "name": "depler" + } + ], + "committedDate": "2021-09-25T07:15:33Z", + "messageBody": "", + "messageHeadline": "ReleaseMD, ReleaseMT", + "oid": "99a58fea193b6bcc1bec4adcd02c53522da20c86" + }, + { + "authoredDate": "2021-09-25T07:16:06Z", + "authors": [ + { + "email": "depler.mv@gmail.com", + "id": "MDQ6VXNlcjEzNTQxNjk5", + "login": "depler", + "name": "depler" + } + ], + "committedDate": "2021-09-25T07:16:06Z", + "messageBody": "", + "messageHeadline": "cleanup", + "oid": "2230f31c8d4d53223a1dc13b0b399e374e57999f" + }, + { + "authoredDate": "2021-09-25T07:20:11Z", + "authors": [ + { + "email": "depler.mv@gmail.com", + "id": "MDQ6VXNlcjEzNTQxNjk5", + "login": "depler", + "name": "depler" + } + ], + "committedDate": "2021-09-25T07:20:11Z", + "messageBody": "", + "messageHeadline": "fix", + "oid": "0a08c1a2d382fdf1406eecfc6669d8279810c51a" + }, + { + "authoredDate": "2021-09-25T10:48:31Z", + "authors": [ + { + "email": "depler.mv@gmail.com", + "id": "MDQ6VXNlcjEzNTQxNjk5", + "login": "depler", + "name": "depler" + } + ], + "committedDate": "2021-09-25T10:48:31Z", + "messageBody": "", + "messageHeadline": "windows tests", + "oid": "2aaf6a7c624b441346200126504e713e1e324553" + } + ], + "createdAt": "2021-09-25T07:27:03Z", + "deletions": 760, + "files": [ + { + "path": "bc.vcxproj", + "additions": 0, + "deletions": 278 + }, + { + "path": "bc.vcxproj.filters", + "additions": 0, + "deletions": 182 + }, + { + "path": "bcl.sln", + "additions": 0, + "deletions": 31 + }, + { + "path": "bcl.vcxproj", + "additions": 0, + "deletions": 161 + }, + { + "path": "bcl.vcxproj.filters", + "additions": 0, + "deletions": 96 + }, + { + "path": "src/program.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "vs/.gitignore", + "additions": 7, + "deletions": 0 + }, + { + "path": "vs/bc.sln", + "additions": 11, + "deletions": 11 + }, + { + "path": "vs/bc.vcxproj", + "additions": 298, + "deletions": 0 + }, + { + "path": "vs/bc.vcxproj.filters", + "additions": 173, + "deletions": 0 + }, + { + "path": "vs/bcl.sln", + "additions": 37, + "deletions": 0 + }, + { + "path": "vs/bcl.vcxproj", + "additions": 259, + "deletions": 0 + }, + { + "path": "vs/bcl.vcxproj.filters", + "additions": 90, + "deletions": 0 + }, + { + "path": "vs/tests/tests_bc.bat", + "additions": 81, + "deletions": 0 + }, + { + "path": "vs/tests/tests_dc.bat", + "additions": 60, + "deletions": 0 + } + ], + "fullDatabaseId": "742640199", + "headRefName": "master", + "headRefOid": "2aaf6a7c624b441346200126504e713e1e324553", + "headRepository": null, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjEzNTQxNjk5", + "login": "depler" + }, + "id": "PR_kwDOCL0xJc4sQ8pH", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "d3793fa5a17c198482baeee027464b98a3869270" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2021-09-25T21:06:56Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 38, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Visual Studio projects refactoring", + "updatedAt": "2021-09-25T21:06:56Z", + "url": "https://github.com/gavinhoward/bc/pull/38" + }, + { + "additions": 1, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjM4ODMzNTE=", + "is_bot": false, + "login": "ibara", + "name": "Brian Callahan" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "3317fc9138148ac48beb4886206be45ebac2a838", + "body": "on => one", + "changedFiles": 1, + "closed": true, + "closedAt": "2020-03-11T17:36:56Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDU5NzcwNjM0Nw==", + "author": { + "login": "codecov" + }, + "authorAssociation": "NONE", + "body": "# [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/28?src=pr&el=h1) Report\n> Merging [#28](https://codecov.io/gh/gavinhoward/bc/pull/28?src=pr&el=desc) into [master](https://codecov.io/gh/gavinhoward/bc/commit/3317fc9138148ac48beb4886206be45ebac2a838&el=desc) will **not change** coverage by `%`.\n> The diff coverage is `n/a`.\n\n[](https://codecov.io/gh/gavinhoward/bc/pull/28?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## master #28 +/- ##\n=======================================\n Coverage 99.65% 99.65% \n=======================================\n Files 16 16 \n Lines 3497 3497 \n=======================================\n Hits 3485 3485 \n Misses 12 12 \n```\n\n\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/gavinhoward/bc/pull/28?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/28?src=pr&el=footer). Last update [3317fc9...24c93ff](https://codecov.io/gh/gavinhoward/bc/pull/28?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", + "createdAt": "2020-03-11T15:39:52Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/28#issuecomment-597706347", + "viewerDidAuthor": false + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU5Nzc3MTUwMw==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you! Merged.", + "createdAt": "2020-03-11T17:39:45Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/28#issuecomment-597771503", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2020-03-11T15:37:45Z", + "authors": [ + { + "email": "ibara@users.noreply.github.com", + "id": "MDQ6VXNlcjM4ODMzNTE=", + "login": "ibara", + "name": "Brian Callahan" + } + ], + "committedDate": "2020-03-11T15:37:45Z", + "messageBody": "on => one", + "messageHeadline": "Fix a typo in build.md", + "oid": "24c93ffc52bfcae55f3b694e9684b49a105834e7" + } + ], + "createdAt": "2020-03-11T15:37:54Z", + "deletions": 1, + "files": [ + { + "path": "manuals/build.md", + "additions": 1, + "deletions": 1 + } + ], + "fullDatabaseId": "386765314", + "headRefName": "patch-1", + "headRefOid": "24c93ffc52bfcae55f3b694e9684b49a105834e7", + "headRepository": null, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjM4ODMzNTE=", + "name": "Brian Callahan", + "login": "ibara" + }, + "id": "MDExOlB1bGxSZXF1ZXN0Mzg2NzY1MzE0", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "725f14b41767d34e6be02fa07dc2db659fa55b02" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2020-03-11T17:36:56Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 28, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Fix a typo in build.md", + "updatedAt": "2020-03-11T18:18:12Z", + "url": "https://github.com/gavinhoward/bc/pull/28" + }, + { + "additions": 86, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjMwOTE2NjEz", + "is_bot": false, + "login": "zv-io", + "name": "" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "358951d4fa58db3077a5675a6547c44e41101de9", + "body": "This series addresses some bugs found on Solaris as discussed with the author in IRC earlier today. The following systems have been \"loosely\" tested to compile and pass the non-external-`bc` test suite:\r\n\r\n* Solaris 10 [sun4u] (GCC `5.5.0`) in both 32- and 64- bit modes;\r\n* Solaris 11 [sun4v] (GCC `4.8.2` and `7.5.0`) in both 32- and 64- bit modes;\r\n\r\nNote: Solaris 10 requires aliasing to a POSIX-compliant shell (e.g. `/usr/xpg4/bin/sh`) or modifying the top of any scripts citing `/bin/sh` to this value.", + "changedFiles": 62, + "closed": true, + "closedAt": "2020-01-15T22:33:33Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDU3NDQ5NzI3Mw==", + "author": { + "login": "codecov" + }, + "authorAssociation": "NONE", + "body": "# [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/27?src=pr&el=h1) Report\n> Merging [#27](https://codecov.io/gh/gavinhoward/bc/pull/27?src=pr&el=desc) into [master](https://codecov.io/gh/gavinhoward/bc/commit/358951d4fa58db3077a5675a6547c44e41101de9?src=pr&el=desc) will **not change** coverage.\n> The diff coverage is `n/a`.\n\n[](https://codecov.io/gh/gavinhoward/bc/pull/27?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## master #27 +/- ##\n=======================================\n Coverage 99.65% 99.65% \n=======================================\n Files 16 16 \n Lines 3496 3496 \n=======================================\n Hits 3484 3484 \n Misses 12 12\n```\n\n\n| [Impacted Files](https://codecov.io/gh/gavinhoward/bc/pull/27?src=pr&el=tree) | Coverage Δ | |\n|---|---|---|\n| [src/bc/parse.c](https://codecov.io/gh/gavinhoward/bc/pull/27/diff?src=pr&el=tree#diff-c3JjL2JjL3BhcnNlLmM=) | `100% <ø> (ø)` | :arrow_up: |\n| [src/parse.c](https://codecov.io/gh/gavinhoward/bc/pull/27/diff?src=pr&el=tree#diff-c3JjL3BhcnNlLmM=) | `100% <ø> (ø)` | :arrow_up: |\n| [src/read.c](https://codecov.io/gh/gavinhoward/bc/pull/27/diff?src=pr&el=tree#diff-c3JjL3JlYWQuYw==) | `100% <ø> (ø)` | :arrow_up: |\n| [src/vm.c](https://codecov.io/gh/gavinhoward/bc/pull/27/diff?src=pr&el=tree#diff-c3JjL3ZtLmM=) | `99.59% <ø> (ø)` | :arrow_up: |\n| [src/main.c](https://codecov.io/gh/gavinhoward/bc/pull/27/diff?src=pr&el=tree#diff-c3JjL21haW4uYw==) | `100% <ø> (ø)` | :arrow_up: |\n| [src/num.c](https://codecov.io/gh/gavinhoward/bc/pull/27/diff?src=pr&el=tree#diff-c3JjL251bS5j) | `99.41% <ø> (ø)` | :arrow_up: |\n| [src/lex.c](https://codecov.io/gh/gavinhoward/bc/pull/27/diff?src=pr&el=tree#diff-c3JjL2xleC5j) | `100% <ø> (ø)` | :arrow_up: |\n| [src/bc/bc.c](https://codecov.io/gh/gavinhoward/bc/pull/27/diff?src=pr&el=tree#diff-c3JjL2JjL2JjLmM=) | `100% <ø> (ø)` | :arrow_up: |\n| [src/bc/lex.c](https://codecov.io/gh/gavinhoward/bc/pull/27/diff?src=pr&el=tree#diff-c3JjL2JjL2xleC5j) | `100% <ø> (ø)` | :arrow_up: |\n| [src/lang.c](https://codecov.io/gh/gavinhoward/bc/pull/27/diff?src=pr&el=tree#diff-c3JjL2xhbmcuYw==) | `97.33% <ø> (ø)` | :arrow_up: |\n| ... and [6 more](https://codecov.io/gh/gavinhoward/bc/pull/27/diff?src=pr&el=tree-more) | |\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/gavinhoward/bc/pull/27?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/27?src=pr&el=footer). Last update [358951d...a756285](https://codecov.io/gh/gavinhoward/bc/pull/27?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", + "createdAt": "2020-01-15T05:02:18Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/27#issuecomment-574497273", + "viewerDidAuthor": false + } + ], + "commits": [ + { + "authoredDate": "2020-01-14T21:56:45Z", + "authors": [ + { + "email": "me@zv.io", + "id": "MDQ6VXNlcjMwOTE2NjEz", + "login": "zv-io", + "name": "Zach van Rijn" + } + ], + "committedDate": "2020-01-14T22:17:19Z", + "messageBody": "", + "messageHeadline": "Fix bug caused by inconsistent preservation of line endings by 'sed'.", + "oid": "d3b3813c94d6553caad61752dd7ac99dd860e20c" + }, + { + "authoredDate": "2020-01-14T22:03:42Z", + "authors": [ + { + "email": "me@zv.io", + "id": "MDQ6VXNlcjMwOTE2NjEz", + "login": "zv-io", + "name": "Zach van Rijn" + } + ], + "committedDate": "2020-01-14T22:17:26Z", + "messageBody": "…'ls' command. Improve robustness of test conditions.", + "messageHeadline": "Switch from POSIX 2008 --> 2001 build flags. Remove use of dangerous …", + "oid": "72238e589bf7e8cb6a9bb380f367c1a5edcc8b82" + }, + { + "authoredDate": "2020-01-14T22:05:02Z", + "authors": [ + { + "email": "me@zv.io", + "id": "MDQ6VXNlcjMwOTE2NjEz", + "login": "zv-io", + "name": "Zach van Rijn" + } + ], + "committedDate": "2020-01-14T22:17:27Z", + "messageBody": "", + "messageHeadline": "Update copyright year 2019 --> 2020.", + "oid": "eb34ee5e9d5607c08e7080d9c44e03d393756493" + }, + { + "authoredDate": "2020-01-14T22:24:01Z", + "authors": [ + { + "email": "me@zv.io", + "id": "MDQ6VXNlcjMwOTE2NjEz", + "login": "zv-io", + "name": "Zach van Rijn" + } + ], + "committedDate": "2020-01-14T22:24:01Z", + "messageBody": "…sions.", + "messageHeadline": "Explicit '-std=c99' to avoid ambiguity across different compilers/ver…", + "oid": "a38469fd93c20d1de3f972c982de3c234000116a" + }, + { + "authoredDate": "2020-01-14T22:57:04Z", + "authors": [ + { + "email": "me@zv.io", + "id": "MDQ6VXNlcjMwOTE2NjEz", + "login": "zv-io", + "name": "Zach van Rijn" + } + ], + "committedDate": "2020-01-14T22:59:48Z", + "messageBody": "", + "messageHeadline": "Update documentation and prepare for release.", + "oid": "f022d5dedc841bb1d23fa2e03fdc97a639de700d" + }, + { + "authoredDate": "2020-01-15T13:56:00Z", + "authors": [ + { + "email": "me@zv.io", + "id": "MDQ6VXNlcjMwOTE2NjEz", + "login": "zv-io", + "name": "Zach van Rijn" + } + ], + "committedDate": "2020-01-15T13:56:00Z", + "messageBody": "…lers/versions.\"\n\nThis reverts commit a38469fd93c20d1de3f972c982de3c234000116a.", + "messageHeadline": "Revert \"Explicit '-std=c99' to avoid ambiguity across different compi…", + "oid": "8b83e334177701cd2c05fd10090a1f582bd7e9f8" + }, + { + "authoredDate": "2020-01-15T13:57:24Z", + "authors": [ + { + "email": "me@zv.io", + "id": "MDQ6VXNlcjMwOTE2NjEz", + "login": "zv-io", + "name": "Zach van Rijn" + } + ], + "committedDate": "2020-01-15T13:57:24Z", + "messageBody": "", + "messageHeadline": "Comply with versioning policy as per author feedback in PR 27.", + "oid": "a756285f60b2139fc629c3edf230c8b1f9a875ed" + } + ], + "createdAt": "2020-01-15T04:59:12Z", + "deletions": 79, + "files": [ + { + "path": "Makefile.in", + "additions": 3, + "deletions": 3 + }, + { + "path": "NEWS.md", + "additions": 6, + "deletions": 0 + }, + { + "path": "README.md", + "additions": 3, + "deletions": 2 + }, + { + "path": "configure.sh", + "additions": 12, + "deletions": 12 + }, + { + "path": "functions.sh", + "additions": 3, + "deletions": 3 + }, + { + "path": "gen/bc_help.txt", + "additions": 1, + "deletions": 1 + }, + { + "path": "gen/dc_help.txt", + "additions": 1, + "deletions": 1 + }, + { + "path": "gen/lib.bc", + "additions": 1, + "deletions": 1 + }, + { + "path": "gen/lib2.bc", + "additions": 1, + "deletions": 1 + }, + { + "path": "gen/strgen.c", + "additions": 2, + "deletions": 2 + }, + { + "path": "include/args.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/bc.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/dc.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/history.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/lang.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/lex.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/num.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/parse.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/program.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/read.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/status.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/vector.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "include/vm.h", + "additions": 1, + "deletions": 1 + }, + { + "path": "install.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "karatsuba.py", + "additions": 1, + "deletions": 1 + }, + { + "path": "link.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "locale_install.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "locale_uninstall.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "locales/en_US.msg", + "additions": 1, + "deletions": 1 + }, + { + "path": "locales/fr_FR.ISO8859-1.msg", + "additions": 1, + "deletions": 1 + }, + { + "path": "locales/fr_FR.UTF-8.msg", + "additions": 1, + "deletions": 1 + }, + { + "path": "locales/pt_PT.ISO-8859-1.msg", + "additions": 1, + "deletions": 1 + }, + { + "path": "locales/pt_PT.UTF-8.msg", + "additions": 1, + "deletions": 1 + }, + { + "path": "release.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/args.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/bc/bc.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/bc/lex.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/bc/parse.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/data.c", + "additions": 2, + "deletions": 2 + }, + { + "path": "src/dc/dc.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/dc/lex.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/dc/parse.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/history/history.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/lang.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/lex.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/main.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/num.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/parse.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/program.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/read.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/vector.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "src/vm.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/afl.py", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/all.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/bc/timeconst.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/errors.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/randmath.py", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/read.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/script.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/scripts.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/stdin.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/test.sh", + "additions": 1, + "deletions": 1 + } + ], + "fullDatabaseId": "362957298", + "headRefName": "master", + "headRefOid": "a756285f60b2139fc629c3edf230c8b1f9a875ed", + "headRepository": null, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjMwOTE2NjEz", + "login": "zv-io" + }, + "id": "MDExOlB1bGxSZXF1ZXN0MzYyOTU3Mjk4", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [ + { + "id": "", + "author": { + "login": "michaelforney" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "", + "submittedAt": "2020-01-15T06:00:48Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "" + } + }, + { + "id": "", + "author": { + "login": "ibara" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "", + "submittedAt": "2020-01-15T20:20:03Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "" + } + }, + { + "id": "", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "", + "submittedAt": "2020-01-15T22:33:19Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "APPROVED", + "commit": { + "oid": "" + } + } + ], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "063a155d1ee6c68bfba37733777ad1331810fdf1" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2020-01-15T22:33:33Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 27, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "APPROVED", + "reviewRequests": [], + "reviews": [ + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQyOTk0NDA3", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for this PR! Unfortunately, it needs some work before I can accept it. See reviews below.", + "submittedAt": "2020-01-15T05:32:13Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "CHANGES_REQUESTED", + "commit": { + "oid": "d3b3813c94d6553caad61752dd7ac99dd860e20c" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzMDAyMDEx", + "author": { + "login": "michaelforney" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "", + "submittedAt": "2020-01-15T06:00:48Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "f022d5dedc841bb1d23fa2e03fdc97a639de700d" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzMDAyNTYx", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "", + "submittedAt": "2020-01-15T06:02:59Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "f022d5dedc841bb1d23fa2e03fdc97a639de700d" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzMDEwNjM1", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "", + "submittedAt": "2020-01-15T06:34:47Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "f022d5dedc841bb1d23fa2e03fdc97a639de700d" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzMjM5MTU3", + "author": { + "login": "zv-io" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "", + "submittedAt": "2020-01-15T14:04:17Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "f022d5dedc841bb1d23fa2e03fdc97a639de700d" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzMjQ0ODg5", + "author": { + "login": "zv-io" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "", + "submittedAt": "2020-01-15T14:12:43Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "f022d5dedc841bb1d23fa2e03fdc97a639de700d" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzMjU1NTQ0", + "author": { + "login": "zv-io" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "", + "submittedAt": "2020-01-15T14:27:10Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "f022d5dedc841bb1d23fa2e03fdc97a639de700d" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzMjU2MjE0", + "author": { + "login": "zv-io" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "", + "submittedAt": "2020-01-15T14:28:02Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "f022d5dedc841bb1d23fa2e03fdc97a639de700d" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzMjczNTgx", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "", + "submittedAt": "2020-01-15T14:50:50Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "f022d5dedc841bb1d23fa2e03fdc97a639de700d" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzMjc3MTQ4", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "", + "submittedAt": "2020-01-15T14:55:18Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "f022d5dedc841bb1d23fa2e03fdc97a639de700d" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzNDk1MzQ1", + "author": { + "login": "ibara" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "", + "submittedAt": "2020-01-15T20:20:03Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "a756285f60b2139fc629c3edf230c8b1f9a875ed" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzNDk5ODcx", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "", + "submittedAt": "2020-01-15T20:28:14Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "a756285f60b2139fc629c3edf230c8b1f9a875ed" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzNTY3ODE3", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "", + "submittedAt": "2020-01-15T22:33:01Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "COMMENTED", + "commit": { + "oid": "a756285f60b2139fc629c3edf230c8b1f9a875ed" + } + }, + { + "id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3MzQzNTY3OTcx", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "", + "submittedAt": "2020-01-15T22:33:19Z", + "includesCreatedEdit": false, + "reactionGroups": [], + "state": "APPROVED", + "commit": { + "oid": "a756285f60b2139fc629c3edf230c8b1f9a875ed" + } + } + ], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Improve portability, enable build on Solaris SPARC.", + "updatedAt": "2020-01-15T22:33:33Z", + "url": "https://github.com/gavinhoward/bc/pull/27" + }, + { + "additions": 218, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjM5NzU3OTY3", + "is_bot": false, + "login": "bugcrazy", + "name": "" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "39b0dc440325511db730ad8fbd7012ba6f3f4b4d", + "body": "Portuguese Translations pt_PT and pt_BR", + "changedFiles": 8, + "closed": true, + "closedAt": "2020-01-14T15:08:19Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDU3NDAyODE2Nw==", + "author": { + "login": "codecov" + }, + "authorAssociation": "NONE", + "body": "# [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/26?src=pr&el=h1) Report\n> Merging [#26](https://codecov.io/gh/gavinhoward/bc/pull/26?src=pr&el=desc) into [master](https://codecov.io/gh/gavinhoward/bc/commit/39b0dc440325511db730ad8fbd7012ba6f3f4b4d?src=pr&el=desc) will **not change** coverage.\n> The diff coverage is `n/a`.\n\n[](https://codecov.io/gh/gavinhoward/bc/pull/26?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## master #26 +/- ##\n=======================================\n Coverage 99.65% 99.65% \n=======================================\n Files 16 16 \n Lines 3496 3496 \n=======================================\n Hits 3484 3484 \n Misses 12 12\n```\n\n\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/gavinhoward/bc/pull/26?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/26?src=pr&el=footer). Last update [39b0dc4...2572333](https://codecov.io/gh/gavinhoward/bc/pull/26?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", + "createdAt": "2020-01-14T06:43:10Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/26#issuecomment-574028167", + "viewerDidAuthor": false + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU3NDIxOTEzMg==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Thank you for your translations! They look good. Release of Version `2.5.0` with the translations will happen in a few minutes.", + "createdAt": "2020-01-14T15:09:22Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/26#issuecomment-574219132", + "viewerDidAuthor": true + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU3NDIyMzU0Mw==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Version `2.5.0` is out with your translations. Thank you!", + "createdAt": "2020-01-14T15:17:19Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/pull/26#issuecomment-574223543", + "viewerDidAuthor": true + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU3NDI0MTA2Mw==", + "author": { + "login": "bugcrazy" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Thank you!", + "createdAt": "2020-01-14T15:52:18Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/26#issuecomment-574241063", + "viewerDidAuthor": false + } + ], + "commits": [ + { + "authoredDate": "2020-01-14T06:32:59Z", + "authors": [ + { + "email": "39757967+bugcrazy@users.noreply.github.com", + "id": "MDQ6VXNlcjM5NzU3OTY3", + "login": "bugcrazy", + "name": "bugcrazy" + } + ], + "committedDate": "2020-01-14T06:32:59Z", + "messageBody": "Portuguese Translations pt_PT and pt_BR", + "messageHeadline": "Portuguese Translations", + "oid": "25723337b998ced4976dc5beae8717d81056dc5f" + } + ], + "createdAt": "2020-01-14T06:40:25Z", + "deletions": 0, + "files": [ + { + "path": "locales/pt_BR.ISO-8859-1.msg", + "additions": 1, + "deletions": 0 + }, + { + "path": "locales/pt_BR.ISO-8859-15.msg", + "additions": 1, + "deletions": 0 + }, + { + "path": "locales/pt_BR.UTF-8.msg", + "additions": 1, + "deletions": 0 + }, + { + "path": "locales/pt_BR.utf8.msg", + "additions": 1, + "deletions": 0 + }, + { + "path": "locales/pt_PT.ISO-8859-1.msg", + "additions": 106, + "deletions": 0 + }, + { + "path": "locales/pt_PT.ISO-8859-15.msg", + "additions": 1, + "deletions": 0 + }, + { + "path": "locales/pt_PT.UTF-8.msg", + "additions": 106, + "deletions": 0 + }, + { + "path": "locales/pt_PT.utf8.msg", + "additions": 1, + "deletions": 0 + } + ], + "fullDatabaseId": "362470901", + "headRefName": "master", + "headRefOid": "25723337b998ced4976dc5beae8717d81056dc5f", + "headRepository": { + "id": "MDEwOlJlcG9zaXRvcnkyMzM3NjI4NjY=", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjM5NzU3OTY3", + "login": "bugcrazy" + }, + "id": "MDExOlB1bGxSZXF1ZXN0MzYyNDcwOTAx", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "c322c80e62415e69c8d65c69904a0e1ea37f4da3" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2020-01-14T15:08:19Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 26, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Portuguese Translations", + "updatedAt": "2020-01-14T15:52:18Z", + "url": "https://github.com/gavinhoward/bc/pull/26" + }, + { + "additions": 6, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjIyMjk2NzA2", + "is_bot": false, + "login": "eg15", + "name": "Eugene Gladchenko" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "38cc5145cb66ba9f1706630d5f987d60a46fb1b1", + "body": "Looks like I found a bug.\r\n\"-1000000000 < -1\" returns 0 (false) on my machine which is obviously wrong.\r\nThe fix will follow.", + "changedFiles": 4, + "closed": true, + "closedAt": "2019-11-22T04:42:08Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDU1NzE0ODY4Mw==", + "author": { + "login": "codecov" + }, + "authorAssociation": "NONE", + "body": "# [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/25?src=pr&el=h1) Report\n> Merging [#25](https://codecov.io/gh/gavinhoward/bc/pull/25?src=pr&el=desc) into [master](https://codecov.io/gh/gavinhoward/bc/commit/38cc5145cb66ba9f1706630d5f987d60a46fb1b1?src=pr&el=desc) will **not change** coverage.\n> The diff coverage is `100%`.\n\n[](https://codecov.io/gh/gavinhoward/bc/pull/25?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## master #25 +/- ##\n=======================================\n Coverage 99.71% 99.71% \n=======================================\n Files 16 16 \n Lines 3478 3478 \n=======================================\n Hits 3468 3468 \n Misses 10 10\n```\n\n\n| [Impacted Files](https://codecov.io/gh/gavinhoward/bc/pull/25?src=pr&el=tree) | Coverage Δ | |\n|---|---|---|\n| [src/num.c](https://codecov.io/gh/gavinhoward/bc/pull/25/diff?src=pr&el=tree#diff-c3JjL251bS5j) | `99.41% <100%> (ø)` | :arrow_up: |\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/gavinhoward/bc/pull/25?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/25?src=pr&el=footer). Last update [38cc514...96518d8](https://codecov.io/gh/gavinhoward/bc/pull/25?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", + "createdAt": "2019-11-21T15:56:12Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/25#issuecomment-557148683", + "viewerDidAuthor": false + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU1NzE2MDgyMg==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Yes, you did find a bug.\r\n\r\nYour fix looks great, and your tests do as well. I just have two requests:\r\n\r\n1. Move your tests and results into files called `comp.txt` and `comp_results.txt`.\r\n2. Change the name in `tests/bc/all.txt`.\r\n\r\nI want you to do this because I am going to write a more comprehensive set of tests for comparisons in general to make sure I did not miss anything else.\r\n\r\nIf you don't have the time to do this, I could always pull it and do the change myself.", + "createdAt": "2019-11-21T16:22:26Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/25#issuecomment-557160822", + "viewerDidAuthor": true + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU1NzIwNjQwNw==", + "author": { + "login": "eg15" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "Just finished, thank you.\r\n\r\nBTW it looks like busybox guys took your code and kept the bug in their modified version.\r\nJust fixed it there as well: https://bugs.busybox.net/show_bug.cgi?id=12336\r\n\r\nThen it should be fixed in Alpine (that's where I encountered it this morning).", + "createdAt": "2019-11-21T18:10:24Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/25#issuecomment-557206407", + "viewerDidAuthor": false + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU1NzIzMDk2NA==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "`busybox` didn't exactly take my code; I gave them my code, when it had a lot more bugs as well. Unfortunately, they decided to go their own way with it, so I don't really contribute back. (They added even more bugs.)\r\n\r\nI will merge this when I get home from work. I should have a release out after testing, which could take up to a week. I don't expect this to take that long to test, since it's so small, but I may find other problems.", + "createdAt": "2019-11-21T19:14:33Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/25#issuecomment-557230964", + "viewerDidAuthor": true + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDU1NzM4NjYzOQ==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I pulled manually. Thank you for your help!", + "createdAt": "2019-11-22T04:44:22Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [ + { + "content": "THUMBS_UP", + "users": { + "totalCount": 1 + } + } + ], + "url": "https://github.com/gavinhoward/bc/pull/25#issuecomment-557386639", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2019-11-21T15:31:00Z", + "authors": [ + { + "email": "gladchenko@gmail.com", + "id": "MDQ6VXNlcjIyMjk2NzA2", + "login": "eg15", + "name": "Eugene Gladchenko" + } + ], + "committedDate": "2019-11-21T15:31:00Z", + "messageBody": "", + "messageHeadline": "Add a test to compare negative numbers", + "oid": "888c422c21b558d3778d4ad215fd54f9387a137b" + }, + { + "authoredDate": "2019-11-21T16:00:43Z", + "authors": [ + { + "email": "gladchenko@gmail.com", + "id": "MDQ6VXNlcjIyMjk2NzA2", + "login": "eg15", + "name": "Eugene Gladchenko" + } + ], + "committedDate": "2019-11-21T16:00:43Z", + "messageBody": "", + "messageHeadline": "Fix a bug in comparing negative numbers", + "oid": "ddbecaa0601375b86dffb525973148cdd0dda8f7" + }, + { + "authoredDate": "2019-11-21T18:05:15Z", + "authors": [ + { + "email": "gladchenko@gmail.com", + "id": "MDQ6VXNlcjIyMjk2NzA2", + "login": "eg15", + "name": "Eugene Gladchenko" + } + ], + "committedDate": "2019-11-21T18:05:15Z", + "messageBody": "", + "messageHeadline": "The name of the test file changed", + "oid": "96518d8fd63fca1d01b82ac78a42251844f39201" + } + ], + "createdAt": "2019-11-21T15:52:02Z", + "deletions": 1, + "files": [ + { + "path": "src/num.c", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/bc/all.txt", + "additions": 1, + "deletions": 0 + }, + { + "path": "tests/bc/comp.txt", + "additions": 2, + "deletions": 0 + }, + { + "path": "tests/bc/comp_results.txt", + "additions": 2, + "deletions": 0 + } + ], + "fullDatabaseId": "344102387", + "headRefName": "master", + "headRefOid": "96518d8fd63fca1d01b82ac78a42251844f39201", + "headRepository": { + "id": "MDEwOlJlcG9zaXRvcnkyMjMyMDIxNDg=", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjIyMjk2NzA2", + "name": "Eugene Gladchenko", + "login": "eg15" + }, + "id": "MDExOlB1bGxSZXF1ZXN0MzQ0MTAyMzg3", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "96518d8fd63fca1d01b82ac78a42251844f39201" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2019-11-22T04:42:07Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 25, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Add a test to compare negative numbers", + "updatedAt": "2019-11-22T04:44:22Z", + "url": "https://github.com/gavinhoward/bc/pull/25" + }, + { + "additions": 43, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "is_bot": false, + "login": "stesser", + "name": "Stefan Eßer" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "b6cc5efba0e127c5a344c25505c807865494cc66", + "body": "I do not know how to restrict the pull request to just the two commits I consider relevant (probably is the GIT way to create a temporary branch for that purpose?)\r\n\r\nThe relevant commits are: \r\n\r\nca56e06\r\n684e3f6", + "changedFiles": 3, + "closed": true, + "closedAt": "2019-06-14T01:43:15Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDUwMTgzMTY1Ng==", + "author": { + "login": "codecov" + }, + "authorAssociation": "NONE", + "body": "# [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/24?src=pr&el=h1) Report\n> Merging [#24](https://codecov.io/gh/gavinhoward/bc/pull/24?src=pr&el=desc) into [master](https://codecov.io/gh/gavinhoward/bc/commit/b6cc5efba0e127c5a344c25505c807865494cc66?src=pr&el=desc) will **increase** coverage by `<.01%`.\n> The diff coverage is `100%`.\n\n[](https://codecov.io/gh/gavinhoward/bc/pull/24?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## master #24 +/- ##\n==========================================\n+ Coverage 99.73% 99.73% +<.01% \n==========================================\n Files 16 16 \n Lines 3431 3435 +4 \n==========================================\n+ Hits 3422 3426 +4 \n Misses 9 9\n```\n\n\n| [Impacted Files](https://codecov.io/gh/gavinhoward/bc/pull/24?src=pr&el=tree) | Coverage Δ | |\n|---|---|---|\n| [src/bc/parse.c](https://codecov.io/gh/gavinhoward/bc/pull/24/diff?src=pr&el=tree#diff-c3JjL2JjL3BhcnNlLmM=) | `100% <ø> (ø)` | :arrow_up: |\n| [src/program.c](https://codecov.io/gh/gavinhoward/bc/pull/24/diff?src=pr&el=tree#diff-c3JjL3Byb2dyYW0uYw==) | `99.73% <100%> (ø)` | :arrow_up: |\n| [src/num.c](https://codecov.io/gh/gavinhoward/bc/pull/24/diff?src=pr&el=tree#diff-c3JjL251bS5j) | `99.8% <100%> (ø)` | :arrow_up: |\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/gavinhoward/bc/pull/24?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/24?src=pr&el=footer). Last update [b6cc5ef...ca56e06](https://codecov.io/gh/gavinhoward/bc/pull/24?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", + "createdAt": "2019-06-13T18:43:42Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/24#issuecomment-501831656", + "viewerDidAuthor": false + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDUwMTg1MDQyMQ==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I have already made these changes in my local branch. I just haven't pushed them yet. I will push them when I get home from work, and I will close this then to remind me.\r\n\r\nThank you.", + "createdAt": "2019-06-13T19:39:54Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/24#issuecomment-501850421", + "viewerDidAuthor": true + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDUwMTkzNzA0Ng==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Changes are pushed.", + "createdAt": "2019-06-14T01:43:15Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/24#issuecomment-501937046", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2019-06-09T11:10:39Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-09T11:10:39Z", + "messageBody": "", + "messageHeadline": "Small optimization: no data to copy for BC_RESULT_ONE or _LAST", + "oid": "b32b26ca8a533480155a427906025cbe9a0c061c" + }, + { + "authoredDate": "2019-06-10T21:15:49Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-10T21:15:49Z", + "messageBody": "", + "messageHeadline": "Make limit for extension of division results depend on BC_BASE_DIGS", + "oid": "1846088a5d37f02e608228e4214ed76464abdd05" + }, + { + "authoredDate": "2019-06-10T21:17:33Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-10T21:17:33Z", + "messageBody": "", + "messageHeadline": "Simplify and speed up parsing of decimal numbers", + "oid": "5954930eb013ed5e10bea2599735f06b05b89caa" + }, + { + "authoredDate": "2019-06-12T10:16:50Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-12T10:16:50Z", + "messageBody": "Do not allocate one BcDig per character of the string passed in.\nFor ibase between 11 and 26 (decimal) more than one BcDig may be\nneeded to store the value expressed by BC_BASE_DIGS characters.\n\nTesting for that case will probably cause more overhead than just\napplying a fudge factor (not verified - special casing the ibase\nrange that needs this factor and using a factor of 1.5 instead of\n2 might be worth the extra code complexity).", + "messageHeadline": "Fix allocation size for parsed number", + "oid": "c2dc7941ee0115ba8e820685021d70ab2ab13a91" + }, + { + "authoredDate": "2019-06-12T10:25:11Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-12T10:25:11Z", + "messageBody": "", + "messageHeadline": "Merge branch 'master' of https://github.com/gavinhoward/bc", + "oid": "036b112a9d04b56b98ba3697e1641afa6352bbeb" + }, + { + "authoredDate": "2019-06-12T12:00:07Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-12T12:00:07Z", + "messageBody": "This change improves \"make test\" performance by more than 2%.", + "messageHeadline": "Better estimate of the number of BcDigs required to store a constant", + "oid": "43caceec40e4265edc8244b092bd39ba483361c5" + }, + { + "authoredDate": "2019-06-12T21:43:54Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-12T21:43:54Z", + "messageBody": "This implementation is not optimized for speed, yet. I have plans to\nadd copy-on-write semantics for BcNums (i.e. add a reference count and\ncopy the BcNum only if its refcount is > 1 it is about to be\nmodified).\n\nThis version fails in the bc/stdin test, but diagnosing this problem\nwill have to wait for tomorrow ...", + "messageHeadline": "Implement caching of numeric constants in vectors of BcNums", + "oid": "515dfe44886667eb9fbea48c214b559549d69417" + }, + { + "authoredDate": "2019-06-13T08:23:45Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-13T08:23:45Z", + "messageBody": "Beyond the changes performed by the automatic merge, remove references\nto the constvals field in struct BcFunc.", + "messageHeadline": "Merge branch 'master' of https://github.com/gavinhoward/bc", + "oid": "cd30020d2fe2d4cef802b2e65299f4e0e1a3972f" + }, + { + "authoredDate": "2019-06-13T08:33:21Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-13T08:33:21Z", + "messageBody": "", + "messageHeadline": "Merge more changes from upstream", + "oid": "21e4395740342aa65e728d02e1a5d658a9a15bc0" + }, + { + "authoredDate": "2019-06-13T08:49:54Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-13T08:49:54Z", + "messageBody": "", + "messageHeadline": "Adjust whitespace and use value of \"base\" instead of fetching it again", + "oid": "684e3f6f8a7dd8efb5b49211ef20948710cf6457" + }, + { + "authoredDate": "2019-06-13T09:14:04Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-13T09:14:04Z", + "messageBody": "", + "messageHeadline": "Fix for failing scale(0.0000000000000000000) test case", + "oid": "25799a6fa21c69cb7f9e77e53329d3b735564c9b" + }, + { + "authoredDate": "2019-06-13T11:05:20Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-13T11:05:20Z", + "messageBody": "FreeBSD uses strict checks for base system components and the build\nfailed due to the compiler warnings being treated as errors in base.", + "messageHeadline": "Remove unused local variable declarations (fix build in FreeBSD)", + "oid": "ca56e060a471ed5476a78b38c1b2d0584777d693" + } + ], + "createdAt": "2019-06-13T18:39:56Z", + "deletions": 49, + "files": [ + { + "path": "src/bc/parse.c", + "additions": 0, + "deletions": 2 + }, + { + "path": "src/num.c", + "additions": 37, + "deletions": 39 + }, + { + "path": "src/program.c", + "additions": 6, + "deletions": 8 + } + ], + "fullDatabaseId": "288048911", + "headRefName": "master", + "headRefOid": "ca56e060a471ed5476a78b38c1b2d0584777d693", + "headRepository": { + "id": "MDEwOlJlcG9zaXRvcnkxODAzNzI3NzY=", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "name": "Stefan Eßer", + "login": "stesser" + }, + "id": "MDExOlB1bGxSZXF1ZXN0Mjg4MDQ4OTEx", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": null, + "mergeStateStatus": "DIRTY", + "mergeable": "CONFLICTING", + "mergedAt": null, + "mergedBy": null, + "milestone": null, + "number": 24, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "CLOSED", + "statusCheckRollup": [], + "title": "Whitespace adjustment and removal of some unused variables", + "updatedAt": "2019-06-14T01:43:15Z", + "url": "https://github.com/gavinhoward/bc/pull/24" + }, + { + "additions": 1, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "is_bot": false, + "login": "stesser", + "name": "Stefan Eßer" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "f555270c99e7d354704071628486df0870968286", + "body": "Benchmarks show a small but significant speed-up of \"make test\" if the\r\nlimit for the shifting of operands is made more strict. Many operands\r\nwill require a second iteration of the inner loop anyway, and shifting\r\nof the operands uses cycles for no gain, then.\r\n\r\nTo my surprise, BC_BASE_DIGS=4 and =9 seem to have near identical\r\nperformance after this change. Some operations (multiplication and\r\npower) ought to be faster with larger BcDigs, but at least for the\r\nperformance of \"make test\" on my system this does not seem to affect\r\nthe run-time by a significant amount.", + "changedFiles": 1, + "closed": true, + "closedAt": "2019-06-07T13:25:25Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDQ5OTg4MzYwNQ==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "I am not planning on future releases, except for bug fixes. I will merge this now.", + "createdAt": "2019-06-07T13:25:27Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/23#issuecomment-499883605", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2019-06-07T07:33:26Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-07T07:33:26Z", + "messageBody": "Benchmarks show a small but significant speed-up of \"make test\" if the\nlimit for the shifting of operands is made more strict. Many operands\nwill require a second iteration of the inner loop anyway, and shifting\nof the operands uses cycles for no gain, then.\n\nTo my surprise, BC_BASE_DIGS=4 and =9 seem to have near identical\nperformance after this change. Some operations (multiplication and\npower) ought to be faster with larger BcDigs, but at least for the\nperformance of \"make test\" on my system this does not seem to affect\nthe run-time by a significant amount.", + "messageHeadline": "Small performance optimization", + "oid": "d8526df195150f9f20ed4e8430dff3457e5d2913" + } + ], + "createdAt": "2019-06-07T08:28:48Z", + "deletions": 1, + "files": [ + { + "path": "src/num.c", + "additions": 1, + "deletions": 1 + } + ], + "fullDatabaseId": "286093193", + "headRefName": "master", + "headRefOid": "d8526df195150f9f20ed4e8430dff3457e5d2913", + "headRepository": { + "id": "MDEwOlJlcG9zaXRvcnkxODAzNzI3NzY=", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "name": "Stefan Eßer", + "login": "stesser" + }, + "id": "MDExOlB1bGxSZXF1ZXN0Mjg2MDkzMTkz", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "6f662190645f8fb84b36a513b1369a8bf61e215e" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2019-06-07T13:25:25Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 23, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Small performance optimization (perhaps for the next following release?)", + "updatedAt": "2019-06-07T13:25:28Z", + "url": "https://github.com/gavinhoward/bc/pull/23" + }, + { + "additions": 38, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "is_bot": false, + "login": "stesser", + "name": "Stefan Eßer" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "7373e5f89c9ce873eb1a84f129c1f9be3b1ec400", + "body": "", + "changedFiles": 1, + "closed": true, + "closedAt": "2019-06-07T04:04:59Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDQ5OTY2Nzc4Nw==", + "author": { + "login": "codecov" + }, + "authorAssociation": "NONE", + "body": "# [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/22?src=pr&el=h1) Report\n> Merging [#22](https://codecov.io/gh/gavinhoward/bc/pull/22?src=pr&el=desc) into [master](https://codecov.io/gh/gavinhoward/bc/commit/7373e5f89c9ce873eb1a84f129c1f9be3b1ec400?src=pr&el=desc) will **increase** coverage by `<.01%`.\n> The diff coverage is `100%`.\n\n[](https://codecov.io/gh/gavinhoward/bc/pull/22?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## master #22 +/- ##\n==========================================\n+ Coverage 99.73% 99.73% +<.01% \n==========================================\n Files 16 16 \n Lines 3392 3409 +17 \n==========================================\n+ Hits 3383 3400 +17 \n Misses 9 9\n```\n\n\n| [Impacted Files](https://codecov.io/gh/gavinhoward/bc/pull/22?src=pr&el=tree) | Coverage Δ | |\n|---|---|---|\n| [src/num.c](https://codecov.io/gh/gavinhoward/bc/pull/22/diff?src=pr&el=tree#diff-c3JjL251bS5j) | `99.8% <100%> (ø)` | :arrow_up: |\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/gavinhoward/bc/pull/22?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/22?src=pr&el=footer). Last update [7373e5f...98719ee](https://codecov.io/gh/gavinhoward/bc/pull/22?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", + "createdAt": "2019-06-06T21:06:55Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/22#issuecomment-499667787", + "viewerDidAuthor": false + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDQ5OTc0OTQ5MQ==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Merging...for now. If it passes (which I think it will), it will stay.", + "createdAt": "2019-06-07T04:05:18Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/22#issuecomment-499749491", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2019-06-06T05:13:40Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T05:13:40Z", + "messageBody": "Since stdout is not affected by this debug print function, nchars\nshould not be modified, or printing of large numbers will be broken.", + "messageHeadline": "Resetting of nchars after printing to stderr corrupts the output", + "oid": "76794442357318437574ec8c0aa3f71903ec419a" + }, + { + "authoredDate": "2019-06-06T06:14:43Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T06:14:43Z", + "messageBody": "If the top-most BcDig contains a small value and there are lower\nnon-zero BcDigs, the integer divisor is incremented to prevent\ndivision results that do not fit into a BcDig (are > BC_BASE_POW).\n\nE.g. for 1000 / 1.1 the integer divisor will become 2 and the first\nestimate of the result will be 1000 / 2 = 500, giving a reminder of\n1000 - 500 * 1.1 = 450. The next estimate will be 700 = 500 + 450 / 2\nand so on with the reminder slowly decreasing in each iteration.\n\nSince the relative error due to the approximation of the full division\nby an integer division becomes significant for small integer divisors,\nit makes sense to extend the divisor if it i ssmall. In fact, it seems\nto pay off for all divisors that are < BC_BASE_POW / 10.", + "messageHeadline": "Fix pathological behavior in case integer is rounded up a lot", + "oid": "035ace7d24afd722ce9a3325c90213d36772e5bd" + }, + { + "authoredDate": "2019-06-06T06:25:29Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T06:25:29Z", + "messageBody": "", + "messageHeadline": "Merge branch 'div'", + "oid": "c1e655b2dd38ea27668b3a0c5b7c86ef06a8dd88" + }, + { + "authoredDate": "2019-06-06T08:21:51Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T08:21:51Z", + "messageBody": "If there was a new-line character in the string, then strrchr will\nreturn a pointer to that character. If the length of the string\nstarting at the new-line position is 1, then no text follows on the\nnew line and nchars should be set to 0,not 2.", + "messageHeadline": "Fix calculation of nchars", + "oid": "54e3cd86494fd1e2c817ea3fa49c357738da5f82" + }, + { + "authoredDate": "2019-06-06T11:32:50Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T11:32:50Z", + "messageBody": "This reverts commit 54e3cd86494fd1e2c817ea3fa49c357738da5f82.\n\nI had misread the code (thought the + 1 was outside the brackets).", + "messageHeadline": "Revert \"Fix calculation of nchars\"", + "oid": "210d9c5863215d0c371f0ec68a0fda2f601920f3" + }, + { + "authoredDate": "2019-06-06T20:07:20Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T20:07:20Z", + "messageBody": "This version does not pass all tests (hangs in divide.bc).\nI'm commiting anyway, to have a basis that is ismilar to the upstream\nrepo for further testing.", + "messageHeadline": "Merge latest upstream version.", + "oid": "94fb480d06c4e082a635d2f4866682d4f6a7b6bb" + }, + { + "authoredDate": "2019-06-06T20:50:44Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T20:50:44Z", + "messageBody": "", + "messageHeadline": "Remove debug dump of operands and intermediate results", + "oid": "59e2953c61615ff5f3deecd181f15c5249fe0bb4" + }, + { + "authoredDate": "2019-06-06T20:59:42Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T20:59:42Z", + "messageBody": "", + "messageHeadline": "Merge branch 'master' of https://github.com/gavinhoward/bc", + "oid": "6fe9b2fba0e7359152598d4e38ff93020b24b8e7" + }, + { + "authoredDate": "2019-06-06T21:01:19Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T21:01:19Z", + "messageBody": "", + "messageHeadline": "Reduce whitespace diff relative to upstream", + "oid": "595d84e4792bffa63ece31aa146ea7ccfc87ea4b" + }, + { + "authoredDate": "2019-06-06T21:03:03Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T21:03:03Z", + "messageBody": "", + "messageHeadline": "Fix lines that resulted from a mis-merge of upstream", + "oid": "98719eecc5f599365f5d2c3aa042a9cb7cdb6d6c" + } + ], + "createdAt": "2019-06-06T20:53:49Z", + "deletions": 6, + "files": [ + { + "path": "src/num.c", + "additions": 38, + "deletions": 6 + } + ], + "fullDatabaseId": "285965666", + "headRefName": "master", + "headRefOid": "98719eecc5f599365f5d2c3aa042a9cb7cdb6d6c", + "headRepository": { + "id": "MDEwOlJlcG9zaXRvcnkxODAzNzI3NzY=", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "name": "Stefan Eßer", + "login": "stesser" + }, + "id": "MDExOlB1bGxSZXF1ZXN0Mjg1OTY1NjY2", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "016a5eed2e5cc0d7e65cea785e609a0bb8a0fa70" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2019-06-07T04:04:59Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 22, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "This version completes all tests on my system", + "updatedAt": "2019-06-07T04:05:18Z", + "url": "https://github.com/gavinhoward/bc/pull/22" + }, + { + "additions": 30, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "is_bot": false, + "login": "stesser", + "name": "Stefan Eßer" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "81eb6fba565695dfe054e0b3f651fa5fa089b605", + "body": "Reduce the number of iterations required for cases where the top-most BcDig of the divisor is a small value and there are lower non-zero BcDigs. This makes the performance of the division more even for all types of operands of a given length and speeds up \"make test\" by about 3% on my system. The worst case performance of the division is improved by about a factor of 20 (estimated, not measured) for operations like 1/1.000000001.", + "changedFiles": 1, + "closed": true, + "closedAt": "2019-06-06T15:34:13Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDQ5OTM5OTU1Nw==", + "author": { + "login": "stesser" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "While here, fix calculation of vm->nchars in 2 places ...", + "createdAt": "2019-06-06T08:27:09Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/21#issuecomment-499399557", + "viewerDidAuthor": false + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDQ5OTU0NzEzMA==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Rejected for reasons stated in an email.", + "createdAt": "2019-06-06T15:34:13Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/21#issuecomment-499547130", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2019-06-06T05:13:40Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T05:13:40Z", + "messageBody": "Since stdout is not affected by this debug print function, nchars\nshould not be modified, or printing of large numbers will be broken.", + "messageHeadline": "Resetting of nchars after printing to stderr corrupts the output", + "oid": "76794442357318437574ec8c0aa3f71903ec419a" + }, + { + "authoredDate": "2019-06-06T06:14:43Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T06:14:43Z", + "messageBody": "If the top-most BcDig contains a small value and there are lower\nnon-zero BcDigs, the integer divisor is incremented to prevent\ndivision results that do not fit into a BcDig (are > BC_BASE_POW).\n\nE.g. for 1000 / 1.1 the integer divisor will become 2 and the first\nestimate of the result will be 1000 / 2 = 500, giving a reminder of\n1000 - 500 * 1.1 = 450. The next estimate will be 700 = 500 + 450 / 2\nand so on with the reminder slowly decreasing in each iteration.\n\nSince the relative error due to the approximation of the full division\nby an integer division becomes significant for small integer divisors,\nit makes sense to extend the divisor if it i ssmall. In fact, it seems\nto pay off for all divisors that are < BC_BASE_POW / 10.", + "messageHeadline": "Fix pathological behavior in case integer is rounded up a lot", + "oid": "035ace7d24afd722ce9a3325c90213d36772e5bd" + }, + { + "authoredDate": "2019-06-06T06:25:29Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T06:25:29Z", + "messageBody": "", + "messageHeadline": "Merge branch 'div'", + "oid": "c1e655b2dd38ea27668b3a0c5b7c86ef06a8dd88" + }, + { + "authoredDate": "2019-06-06T08:21:51Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T08:21:51Z", + "messageBody": "If there was a new-line character in the string, then strrchr will\nreturn a pointer to that character. If the length of the string\nstarting at the new-line position is 1, then no text follows on the\nnew line and nchars should be set to 0,not 2.", + "messageHeadline": "Fix calculation of nchars", + "oid": "54e3cd86494fd1e2c817ea3fa49c357738da5f82" + }, + { + "authoredDate": "2019-06-06T11:32:50Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-06T11:32:50Z", + "messageBody": "This reverts commit 54e3cd86494fd1e2c817ea3fa49c357738da5f82.\n\nI had misread the code (thought the + 1 was outside the brackets).", + "messageHeadline": "Revert \"Fix calculation of nchars\"", + "oid": "210d9c5863215d0c371f0ec68a0fda2f601920f3" + } + ], + "createdAt": "2019-06-06T06:53:09Z", + "deletions": 8, + "files": [ + { + "path": "src/num.c", + "additions": 30, + "deletions": 8 + } + ], + "fullDatabaseId": "285665970", + "headRefName": "master", + "headRefOid": "210d9c5863215d0c371f0ec68a0fda2f601920f3", + "headRepository": { + "id": "MDEwOlJlcG9zaXRvcnkxODAzNzI3NzY=", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "name": "Stefan Eßer", + "login": "stesser" + }, + "id": "MDExOlB1bGxSZXF1ZXN0Mjg1NjY1OTcw", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": null, + "mergeStateStatus": "DIRTY", + "mergeable": "CONFLICTING", + "mergedAt": null, + "mergedBy": null, + "milestone": null, + "number": 21, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "CLOSED", + "statusCheckRollup": [], + "title": "Improve worst case behavior of the division", + "updatedAt": "2019-06-06T15:34:14Z", + "url": "https://github.com/gavinhoward/bc/pull/21" + }, + { + "additions": 91, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "is_bot": false, + "login": "stesser", + "name": "Stefan Eßer" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "7be2294e3a91ae4f93bf4db1888d89a6c0d4537b", + "body": "I had not fully understood the current division algorithm when I suggested to \"overshoot\" subtractions and to attempt convergence from both sides.\r\n\r\nAfter analysis of the current implementation I have noticed that it can be significantly simplified and at the same time sped-up (by a factor of about 2 in my tests). The run-time of \"make test\" is reduced by some 15% on my system.", + "changedFiles": 1, + "closed": true, + "closedAt": "2019-06-06T00:26:39Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDQ5OTIyMjQ0Mw==", + "author": { + "login": "codecov" + }, + "authorAssociation": "NONE", + "body": "# [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/20?src=pr&el=h1) Report\n> Merging [#20](https://codecov.io/gh/gavinhoward/bc/pull/20?src=pr&el=desc) into [master](https://codecov.io/gh/gavinhoward/bc/commit/7be2294e3a91ae4f93bf4db1888d89a6c0d4537b?src=pr&el=desc) will **not change** coverage.\n> The diff coverage is `100%`.\n\n[](https://codecov.io/gh/gavinhoward/bc/pull/20?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## master #20 +/- ##\n=======================================\n Coverage 99.73% 99.73% \n=======================================\n Files 16 16 \n Lines 3405 3405 \n=======================================\n Hits 3396 3396 \n Misses 9 9\n```\n\n\n| [Impacted Files](https://codecov.io/gh/gavinhoward/bc/pull/20?src=pr&el=tree) | Coverage Δ | |\n|---|---|---|\n| [src/num.c](https://codecov.io/gh/gavinhoward/bc/pull/20/diff?src=pr&el=tree#diff-c3JjL251bS5j) | `99.8% <100%> (ø)` | :arrow_up: |\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/gavinhoward/bc/pull/20?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/20?src=pr&el=footer). Last update [7be2294...45edd42](https://codecov.io/gh/gavinhoward/bc/pull/20?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", + "createdAt": "2019-06-05T19:28:56Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/20#issuecomment-499222443", + "viewerDidAuthor": false + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDQ5OTIzNzA4NA==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Can you send me your tests?", + "createdAt": "2019-06-05T20:12:45Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/20#issuecomment-499237084", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2019-05-20T11:00:48Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-20T11:00:48Z", + "messageBody": "…mod per BcDig\n\nIn the last iteration of the per BcDig print loop, acc is known to be less than\npow, therefore the last div and mod operations can be skipped, resulting in a\nspeed-up of about 2% in my tests.", + "messageHeadline": "Slightly speed up printing for the obase!=10 case by skipping one div…", + "oid": "b2c2fe4f75bff27e183db6e8b4211e8f602b0e68" + }, + { + "authoredDate": "2019-06-05T10:06:38Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-05T10:06:38Z", + "messageBody": "", + "messageHeadline": "Merge branch 'master' of github.com:stesser/bc", + "oid": "caf977797a95fecc39e78b35ef964e69d7851e8a" + }, + { + "authoredDate": "2019-06-05T19:04:42Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-06-05T19:04:42Z", + "messageBody": "The run-time of \"make test\" is reduced by some 15% on my system.", + "messageHeadline": "Implement faster and simpler division algorithm", + "oid": "45edd42ef28c52287e664e2d00b5b7de31a30e22" + } + ], + "createdAt": "2019-06-05T19:25:44Z", + "deletions": 99, + "files": [ + { + "path": "src/num.c", + "additions": 91, + "deletions": 99 + } + ], + "fullDatabaseId": "285517299", + "headRefName": "master", + "headRefOid": "45edd42ef28c52287e664e2d00b5b7de31a30e22", + "headRepository": { + "id": "MDEwOlJlcG9zaXRvcnkxODAzNzI3NzY=", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "name": "Stefan Eßer", + "login": "stesser" + }, + "id": "MDExOlB1bGxSZXF1ZXN0Mjg1NTE3Mjk5", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "8904602cd9be7d6433f9ed6c2caab0f9c745dd9c" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2019-06-06T00:26:39Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 20, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Speed up and simplify division", + "updatedAt": "2019-06-06T00:26:40Z", + "url": "https://github.com/gavinhoward/bc/pull/20" + }, + { + "additions": 10, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "is_bot": false, + "login": "stesser", + "name": "Stefan Eßer" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "e318529d852cee9ce40c06f1a91f0063d8e0bd62", + "body": "In the last iteration of the per BcDig print loop, \"acc\" is known to be less than \"pow\", therefore the last div and mod operations can be skipped, resulting in a speed-up of about 2% in my tests.", + "changedFiles": 1, + "closed": true, + "closedAt": "2019-05-20T14:08:11Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDQ5Mzk1ODQwMw==", + "author": { + "login": "codecov" + }, + "authorAssociation": "NONE", + "body": "# [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/19?src=pr&el=h1) Report\n> Merging [#19](https://codecov.io/gh/gavinhoward/bc/pull/19?src=pr&el=desc) into [master](https://codecov.io/gh/gavinhoward/bc/commit/e318529d852cee9ce40c06f1a91f0063d8e0bd62?src=pr&el=desc) will **increase** coverage by `<.01%`.\n> The diff coverage is `100%`.\n\n[](https://codecov.io/gh/gavinhoward/bc/pull/19?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## master #19 +/- ##\n==========================================\n+ Coverage 99.88% 99.88% +<.01% \n==========================================\n Files 16 16 \n Lines 3409 3411 +2 \n==========================================\n+ Hits 3405 3407 +2 \n Misses 4 4\n```\n\n\n| [Impacted Files](https://codecov.io/gh/gavinhoward/bc/pull/19?src=pr&el=tree) | Coverage Δ | |\n|---|---|---|\n| [src/num.c](https://codecov.io/gh/gavinhoward/bc/pull/19/diff?src=pr&el=tree#diff-c3JjL251bS5j) | `99.8% <100%> (ø)` | :arrow_up: |\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/gavinhoward/bc/pull/19?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/gavinhoward/bc/pull/19?src=pr&el=footer). Last update [e318529...b2c2fe4](https://codecov.io/gh/gavinhoward/bc/pull/19?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", + "createdAt": "2019-05-20T12:05:10Z", + "includesCreatedEdit": true, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/19#issuecomment-493958403", + "viewerDidAuthor": false + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDQ5NDAwMjk1MQ==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Oh whoops. I did not notice this PR; I merged in the patch instead, though I did list you as the author of the commit. I hope that is okay.\r\n\r\nClosing since the code is already merged.", + "createdAt": "2019-05-20T14:08:11Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/19#issuecomment-494002951", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2019-05-20T11:00:48Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-20T11:00:48Z", + "messageBody": "…mod per BcDig\n\nIn the last iteration of the per BcDig print loop, acc is known to be less than\npow, therefore the last div and mod operations can be skipped, resulting in a\nspeed-up of about 2% in my tests.", + "messageHeadline": "Slightly speed up printing for the obase!=10 case by skipping one div…", + "oid": "b2c2fe4f75bff27e183db6e8b4211e8f602b0e68" + } + ], + "createdAt": "2019-05-20T12:00:46Z", + "deletions": 4, + "files": [ + { + "path": "src/num.c", + "additions": 10, + "deletions": 4 + } + ], + "fullDatabaseId": "280360533", + "headRefName": "d9", + "headRefOid": "b2c2fe4f75bff27e183db6e8b4211e8f602b0e68", + "headRepository": { + "id": "MDEwOlJlcG9zaXRvcnkxODAzNzI3NzY=", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "name": "Stefan Eßer", + "login": "stesser" + }, + "id": "MDExOlB1bGxSZXF1ZXN0MjgwMzYwNTMz", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": null, + "mergeStateStatus": "DIRTY", + "mergeable": "CONFLICTING", + "mergedAt": null, + "mergedBy": null, + "milestone": null, + "number": 19, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "CLOSED", + "statusCheckRollup": [], + "title": "Slightly speed up printing for the obase!=10 case", + "updatedAt": "2019-06-02T10:54:35Z", + "url": "https://github.com/gavinhoward/bc/pull/19" + }, + { + "additions": 11813, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "is_bot": false, + "login": "stesser", + "name": "Stefan Eßer" + }, + "autoMergeRequest": null, + "baseRefName": "master", + "baseRefOid": "b3ba59502ee5cc81e2019a724b94b648a35d7897", + "body": "All division and modulo test cases pass with this version.\r\n\r\nMaybe the scale could be reduced (for better performance) in parts of the algorithm, but for now the functionality is there. I have optimized the pow10 function by use of a look-up table. This table will be cached and the indexing faster than repetitive multiplication, IMHO. (Should be tested, but will not be significant in the overall picture, I guess.)\r\n\r\nI have introduced a function that rounds to a given precision. This was necessary to get the division match previous results to the last relevant digit. Just cutting off excess digits gives small errors in division and modulo results.\r\n\r\nAnother new function normalizes its argument to make len == rdx (i.e. to give a value strictly less than 1 but without 0 in the uppermost BcDig of num[]). This was required for the division, which operates on \"normalized\" values and adjusts the position of the decimal point as a final step.\r\n\r\nNeither of these functions has been added to num.h, since I was not sure about your policy with regard to having all static functions in num.c declared therein).", + "changedFiles": 17, + "closed": true, + "closedAt": "2019-05-06T13:42:00Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDQ4NzU3MzUyNA==", + "author": { + "login": "stesser" + }, + "authorAssociation": "CONTRIBUTOR", + "body": "The power has been fixed and passes all tests.\r\nThe sqrt operator gives results that do not pass the tests but differ only in the number of decimals or the precision of the calculation.", + "createdAt": "2019-04-29T13:11:00Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/18#issuecomment-487573524", + "viewerDidAuthor": false + } + ], + "commits": [ + { + "authoredDate": "2019-04-19T08:06:46Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-19T08:06:46Z", + "messageBody": "…ot found.", + "messageHeadline": "The test should use the same file name as is created if the file is n…", + "oid": "d9bda13740c6d4f67c1d69955a4ea8e3477bad4f" + }, + { + "authoredDate": "2019-04-19T14:09:03Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-19T14:09:03Z", + "messageBody": "The output has been verified to be identical to that of the C language\nversion for all files in this project by comparing the resulting .o files.", + "messageHeadline": "Provide shell version of strgen.c to allow use without compilation.", + "oid": "7d9fb3e6ffb7008afec4c7168498751366213b0f" + }, + { + "authoredDate": "2019-04-19T14:11:23Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-19T14:11:23Z", + "messageBody": "", + "messageHeadline": "Merge branch 'master' of https://github.com/gavinhoward/bc", + "oid": "fddcd0f53021d8f3164f5618ba952ab36932d8fc" + }, + { + "authoredDate": "2019-04-19T18:39:00Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-19T18:39:00Z", + "messageBody": "…nature.", + "messageHeadline": "Change parameter from char* to char** as required by the function sig…", + "oid": "a010b3e82408024f12e34030591349c4a344465b" + }, + { + "authoredDate": "2019-04-19T18:41:07Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-19T18:41:07Z", + "messageBody": "", + "messageHeadline": "Fix test to work if empty or null string is passed.", + "oid": "22fd1e9277a34ead069e9dd64942ed3cd55c2ac6" + }, + { + "authoredDate": "2019-04-20T08:34:13Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-20T08:34:13Z", + "messageBody": "", + "messageHeadline": "Merge branch 'master' of https://github.com/gavinhoward/bc", + "oid": "461c523fcbb8ff4c758ddb6ba2d9cfcf71a0a412" + }, + { + "authoredDate": "2019-04-20T08:35:20Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-20T08:35:20Z", + "messageBody": "…e was broken,", + "messageHeadline": "Change reference to v.v to use bc_vec_item(&v, 0) - my previous chang…", + "oid": "52b52a81ea9ea993d9835900398ee48d6e1dc1ad" + }, + { + "authoredDate": "2019-04-20T08:37:07Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-20T08:37:07Z", + "messageBody": "…nset", + "messageHeadline": "Split test into two parts to prevent parse error if the variable is u…", + "oid": "04ddff0bd1de2bde9c1af167cd59488a8fa3800c" + }, + { + "authoredDate": "2019-04-20T15:11:30Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-20T15:11:30Z", + "messageBody": "", + "messageHeadline": "Merge branch 'master' of https://github.com/gavinhoward/bc", + "oid": "eb62a6521bcdaea48a8a69a346facf14a46604be" + }, + { + "authoredDate": "2019-04-20T16:14:00Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-20T16:14:00Z", + "messageBody": "", + "messageHeadline": "Add information about recently added message catalogs.", + "oid": "b2950329c49de32e8dccf39ad3a64c3d210c9a46" + }, + { + "authoredDate": "2019-04-20T16:16:06Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-20T16:16:06Z", + "messageBody": "", + "messageHeadline": "Add quotes around fr_CA and fr_CH.", + "oid": "eaf8bc5fa067eb2c55c96d14ad21ba952e83f6c5" + }, + { + "authoredDate": "2019-04-20T16:17:04Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-20T16:17:04Z", + "messageBody": "", + "messageHeadline": "Fix quotes around fr_CA and fr_CH.", + "oid": "7c87d5892205451fcabb38edf42ca4c948427dd7" + }, + { + "authoredDate": "2019-04-20T16:18:07Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-20T16:18:07Z", + "messageBody": "Anyway, I'm no native speaker of English and therefore the change is only\na crude example for what might be added ... ;-)", + "messageHeadline": "I think \"for\" is better than \"in\", here.", + "oid": "ecd6481f5aeabf178cc0fc7614840f08d74473b0" + }, + { + "authoredDate": "2019-04-24T09:16:49Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-24T09:16:49Z", + "messageBody": "", + "messageHeadline": "Merge branch 'master' of https://github.com/gavinhoward/bc", + "oid": "004ad884ed95213a1a14cc7a5b05353ff91fcceb" + }, + { + "authoredDate": "2019-04-24T21:28:32Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-24T21:28:32Z", + "messageBody": "…esent numbers\n\nThis code has been tested with add/sub, multiplicaton and power of integer values.\nNo tests have been performed for division and square root, yet.\n\nNumbers with fractional parts are not supported due to the missing scaling of the\n\"scale\" parameter.", + "messageHeadline": "Initial support for 32 bit integers instead of decimal digits to repr…", + "oid": "a299ffc466db2360d0cd21f8e872a4b9ccac8f0b" + }, + { + "authoredDate": "2019-04-24T23:23:08Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Eßer" + } + ], + "committedDate": "2019-04-24T23:23:08Z", + "messageBody": "This patch starts a branch exploring the possibility of using a more\npacked representation of digits in BcNum's. I am not sure this will work\nout, but it can't hurt to try, especially since Stefan was so kind to\ncome up with a patch and send it.\n\nAs of right now, the things that are known to be broken:\n\n* Printing decimal numbers\n* Power (seg fault)", + "messageHeadline": "Commit an adjusted patch sent to me by Stefan Eßer", + "oid": "4b111c28c02ac4c999ad62de5a448eb21e01489b" + }, + { + "authoredDate": "2019-04-24T23:31:23Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-24T23:31:23Z", + "messageBody": "", + "messageHeadline": "Attempt to make Stefan's work more portable", + "oid": "0700efc9bb2aad8921d035f18bb30e4e211e0115" + }, + { + "authoredDate": "2019-04-24T23:33:48Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-24T23:33:48Z", + "messageBody": "", + "messageHeadline": "Fix a bit of code that is not portable to 8-bit arches", + "oid": "d7e4d6e8e6e0c46c3ab378c8066ceedf02fe2784" + }, + { + "authoredDate": "2019-04-25T04:33:10Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-25T04:33:10Z", + "messageBody": "… of BcDig", + "messageHeadline": "Introduce 3 function to perform memcpy, memmove, and memset on arrays…", + "oid": "394a516fb6d95a9314783e4b920f9078b8d6217b" + }, + { + "authoredDate": "2019-04-25T05:05:24Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-25T05:05:24Z", + "messageBody": "", + "messageHeadline": "Modify malloc and realloc functions to operate on BcDig arrays", + "oid": "5fd43a372b887cae774309dae0482410eaa64344" + }, + { + "authoredDate": "2019-04-25T05:14:54Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-25T05:14:54Z", + "messageBody": "…ctions for use in vector.c", + "messageHeadline": "Add BcDig alloc functions to header and re-enable the plain alloc fun…", + "oid": "ca5a74eedef9edea724f90c386cf13322a972511" + }, + { + "authoredDate": "2019-04-25T05:42:03Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-25T05:42:03Z", + "messageBody": "", + "messageHeadline": "Merge branch 'base9' of https://github.com/gavinhoward/bc into d9", + "oid": "14eff4647371265957e125e44ca8666cc845b54f" + }, + { + "authoredDate": "2019-04-25T05:56:10Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-25T05:56:10Z", + "messageBody": "", + "messageHeadline": "Use bc_num_set instead of memset in merged code", + "oid": "887d6b9b2fb148490d373f60cc13f42fb3a47102" + }, + { + "authoredDate": "2019-04-25T06:01:03Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-25T06:01:03Z", + "messageBody": "", + "messageHeadline": "Allow passing of -DBC_DEBUG_CODE on the command line", + "oid": "010dd2a01af69462ee1c94053e9f82cde65f171d" + }, + { + "authoredDate": "2019-04-25T06:09:13Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-25T06:09:13Z", + "messageBody": "", + "messageHeadline": "Remove duplicate definitioon of DUMP_NUM", + "oid": "a3430556302146f917be5266b7c6021ecd2e1133" + }, + { + "authoredDate": "2019-04-25T09:25:17Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-25T09:25:17Z", + "messageBody": "", + "messageHeadline": "Remove obsolete local variables", + "oid": "bf3b1b206e6e6a88c7ffc6ca7e10388f3fb1eb4a" + }, + { + "authoredDate": "2019-04-25T09:50:39Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-25T09:50:39Z", + "messageBody": "", + "messageHeadline": "Fix printing of the decimal point (occured multiple times)", + "oid": "610a8ee9e89626f9789ba63a3e5692adc19a46ef" + }, + { + "authoredDate": "2019-04-25T10:25:15Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-25T10:25:15Z", + "messageBody": "", + "messageHeadline": "Suppress printing of trailing zeroes of fractional parts of a result", + "oid": "0da1775703abdbd337f024a4b46208976b08508a" + }, + { + "authoredDate": "2019-04-25T17:33:54Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-25T17:33:54Z", + "messageBody": "", + "messageHeadline": "Fix a problem I introduced", + "oid": "b53a994e74fd2f226bac7756063b557dfd03f172" + }, + { + "authoredDate": "2019-04-25T21:18:49Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin D. Howard" + } + ], + "committedDate": "2019-04-25T21:18:49Z", + "messageBody": "A number of fixes and improvements ...", + "messageHeadline": "Merge pull request #15 from stesser/d9", + "oid": "7daf7e6cf26a6b3b11eeddd9d6bcc38bd52da3dc" + }, + { + "authoredDate": "2019-04-26T01:35:41Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T01:35:41Z", + "messageBody": "", + "messageHeadline": "Fix some style", + "oid": "af107d94c9352b37d4bf31815663fd68effa55b6" + }, + { + "authoredDate": "2019-04-26T01:43:49Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T01:43:49Z", + "messageBody": "", + "messageHeadline": "Fix some more style", + "oid": "f49fdaa396f2cda25379b056cf7ca9fffb0a68d6" + }, + { + "authoredDate": "2019-04-26T02:12:19Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T02:12:19Z", + "messageBody": "", + "messageHeadline": "Make some changes and mark functions that need work", + "oid": "fcf290110df0d7b09b5f89798888f05b8b371484" + }, + { + "authoredDate": "2019-04-26T03:13:54Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T03:13:54Z", + "messageBody": "There is still one bug: it allows in an extra 0 in the most significant\nspot if there is one, but it does produce the right numbers.", + "messageHeadline": "Make decimal parsing work", + "oid": "d43ec37d48c69660ba7098c88a8ef3002a49636d" + }, + { + "authoredDate": "2019-04-26T14:48:19Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T14:48:19Z", + "messageBody": "", + "messageHeadline": "Fix the definitions for BcDig", + "oid": "2eaeebffdce7fcd52b3a62d1537002b3580b6e28" + }, + { + "authoredDate": "2019-04-26T14:48:44Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T14:48:44Z", + "messageBody": "", + "messageHeadline": "Add more decimal tests", + "oid": "a0e90f3e79ef5b619b801753877d94992f6bdc95" + }, + { + "authoredDate": "2019-04-26T14:49:05Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T14:49:05Z", + "messageBody": "", + "messageHeadline": "Fix a warning", + "oid": "f196fbe426ea69bcf4fb3046cc4fedffd7fc54b7" + }, + { + "authoredDate": "2019-04-26T14:49:17Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T14:49:17Z", + "messageBody": "", + "messageHeadline": "Make parsing decimal work", + "oid": "3b60abb028266f4ff0e1aa3bdf42f440eae646c5" + }, + { + "authoredDate": "2019-04-26T15:46:29Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T15:46:29Z", + "messageBody": "", + "messageHeadline": "Fix a test result file", + "oid": "de5fcf3618c6a9ca342ed749459f395783de28d7" + }, + { + "authoredDate": "2019-04-26T15:47:50Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T15:47:50Z", + "messageBody": "", + "messageHeadline": "Fix another bug in the parse decimal procedure", + "oid": "6076dbb54bf4503abefeab22ee2a3edf6075e2e6" + }, + { + "authoredDate": "2019-04-26T15:48:12Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T15:48:25Z", + "messageBody": "This still uses an idea from Stefan Eßer and some code, mainly the\nbuffer for calculating the numbers. Other than that, I did it my way.\n\nThe reason for this is because I *really* want to make sure the radix is\non a BcDig boundary.", + "messageHeadline": "Make printing decimal numbers work", + "oid": "51cd7ea27608359bf4298766cbf1579da9c35242" + }, + { + "authoredDate": "2019-04-26T15:50:35Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T15:50:35Z", + "messageBody": "", + "messageHeadline": "Remove some TODO comments that are done", + "oid": "9cf865f8396f76015b63d5f719e1ba4f0504a629" + }, + { + "authoredDate": "2019-04-26T16:07:21Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T16:07:21Z", + "messageBody": "", + "messageHeadline": "Make add work", + "oid": "fba50a2a7d78923ffc98e593bff06913f283b9af" + }, + { + "authoredDate": "2019-04-26T16:07:45Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T16:07:45Z", + "messageBody": "", + "messageHeadline": "Add a useful #define", + "oid": "1c1697cdc5724c5e2a2969e59fb17059d84b2272" + }, + { + "authoredDate": "2019-04-26T16:13:45Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T16:13:45Z", + "messageBody": "", + "messageHeadline": "Make subtract work", + "oid": "e6f326ed2d30c6814fed8a26d57ac6a5847587c6" + }, + { + "authoredDate": "2019-04-26T16:17:02Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T16:17:02Z", + "messageBody": "", + "messageHeadline": "Get rid of some compiler warnings", + "oid": "6fccd22b21b7f8cbf7ab2b48af912dd1ffb8bf8c" + }, + { + "authoredDate": "2019-04-26T16:17:57Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T16:17:57Z", + "messageBody": "", + "messageHeadline": "Remove some done TODO comments", + "oid": "e2e67ecbda93721e0820a01ce4e5ce660010f7bc" + }, + { + "authoredDate": "2019-04-26T16:40:02Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T16:40:02Z", + "messageBody": "", + "messageHeadline": "Fix some compiler warnings", + "oid": "c4783ac369bf46f1fbc894979fee2040e29008eb" + }, + { + "authoredDate": "2019-04-26T20:32:07Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T20:32:07Z", + "messageBody": "", + "messageHeadline": "Some general cleanup on math", + "oid": "971a26711ea6c03cbd23fd22bc93d03ead700f14" + }, + { + "authoredDate": "2019-04-26T20:32:55Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T20:32:55Z", + "messageBody": "", + "messageHeadline": "Make shift work", + "oid": "b155866dbb923e50d104ec210d095e14083fa372" + }, + { + "authoredDate": "2019-04-26T20:33:43Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T20:33:43Z", + "messageBody": "", + "messageHeadline": "Remove a compiler warning", + "oid": "da6b543c1501f01e4b781c7b24d16b950cbf0bd1" + }, + { + "authoredDate": "2019-04-26T20:46:52Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T20:46:52Z", + "messageBody": "", + "messageHeadline": "Fix truncate and extend", + "oid": "c9bef2d421dda2b0796a9ccb6198fe98ff56dd34" + }, + { + "authoredDate": "2019-04-26T21:39:46Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T21:39:46Z", + "messageBody": "I don't think it is done, however; power still needs to be tested.", + "messageHeadline": "Make multiply pass its tests", + "oid": "48a0e4793be1f58638be5c1b8820944f92afc498" + }, + { + "authoredDate": "2019-04-26T21:41:15Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T21:41:15Z", + "messageBody": "", + "messageHeadline": "Remove some TODO comments that are done", + "oid": "74b16c3bc8ec25b8c1e562ce04d68045692e1864" + }, + { + "authoredDate": "2019-04-26T21:47:25Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T21:47:25Z", + "messageBody": "", + "messageHeadline": "Remove more TODO comments that are done", + "oid": "a3f260c53adfcdd0fcd01404e08260b65c87e1e7" + }, + { + "authoredDate": "2019-04-26T21:59:15Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T21:59:15Z", + "messageBody": "", + "messageHeadline": "Clean up some style", + "oid": "404ece77d2e3e5009511e77a5f9e56d4e1afb3f7" + }, + { + "authoredDate": "2019-04-26T21:59:33Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-26T21:59:33Z", + "messageBody": "", + "messageHeadline": "Fix various small issues", + "oid": "774454354a9354023b6fb7e3aa396b269a5562f7" + }, + { + "authoredDate": "2019-04-26T23:29:01Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-26T23:29:01Z", + "messageBody": "", + "messageHeadline": "Iterative division based on Newton Raphson algorithm", + "oid": "193f8529ad93306e39914ca7a2aa877669383f6f" + }, + { + "authoredDate": "2019-04-27T01:31:31Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T01:31:31Z", + "messageBody": "", + "messageHeadline": "Change some code back to what it was (with adjustments)", + "oid": "c25fd61637390cc993c91258dda2c01404b37147" + }, + { + "authoredDate": "2019-04-27T07:16:26Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T07:16:26Z", + "messageBody": "", + "messageHeadline": "Merge branch 'base9' of https://github.com/gavinhoward/bc into d9", + "oid": "87c27b5715646eb4deec4a6795c17b4c5facc408" + }, + { + "authoredDate": "2019-04-27T08:39:00Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T08:39:00Z", + "messageBody": "", + "messageHeadline": "Fix mismerge regarding nBcDig vs. places", + "oid": "70f118574077b6e61cae08bd576ca7fccc167786" + }, + { + "authoredDate": "2019-04-27T08:40:14Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T08:40:14Z", + "messageBody": "…e current rdx", + "messageHeadline": "Fix segmentation fault that occurs if the target rdx is lower than th…", + "oid": "6189d95036f123d48d505bf4d4a49ba11ca30aee" + }, + { + "authoredDate": "2019-04-27T08:42:00Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T08:42:00Z", + "messageBody": "", + "messageHeadline": "Add simple debug print macro", + "oid": "cdda6e99974b8f9551ad1bc184b3c735afac6f4a" + }, + { + "authoredDate": "2019-04-27T11:47:09Z", + "authors": [ + { + "email": "root@StefanEsser.freebsd.org", + "id": "", + "login": "", + "name": "Charlie Root" + } + ], + "committedDate": "2019-04-27T11:47:09Z", + "messageBody": "", + "messageHeadline": "Fix calculation of scale in multiplications", + "oid": "ac244bdb3ebe6e6a2693f3d5c2ae13d7723b3517" + }, + { + "authoredDate": "2019-04-27T12:36:28Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T12:36:28Z", + "messageBody": "", + "messageHeadline": "Fix seg fault in bc_num_shiftLeft()", + "oid": "b1d29c24cb4bfa07f3bc3e665811ab8b100b0b5e" + }, + { + "authoredDate": "2019-04-27T12:40:58Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin D. Howard" + } + ], + "committedDate": "2019-04-27T12:40:58Z", + "messageBody": "Newton-Raphson based division", + "messageHeadline": "Merge pull request #16 from stesser/d9", + "oid": "769fcbed7a3a0005a60254c0ed5203406b533ae3" + }, + { + "authoredDate": "2019-04-27T12:41:58Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T12:41:58Z", + "messageBody": "", + "messageHeadline": "Fix some style", + "oid": "2e736dee1ae4ddadbe4305296fc98ecc9a917e45" + }, + { + "authoredDate": "2019-04-27T12:43:57Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T12:43:57Z", + "messageBody": "", + "messageHeadline": "Fix the multiplication scale back", + "oid": "cf9f246919f39e50c911c6552d9b16f05a0fc2cf" + }, + { + "authoredDate": "2019-04-27T12:51:33Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T12:51:33Z", + "messageBody": "", + "messageHeadline": "Merge branch 'master' into base9", + "oid": "5de0bd695347a0ef5bde2d526472a2a3ba6d2a17" + }, + { + "authoredDate": "2019-04-27T13:26:35Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T13:26:35Z", + "messageBody": "", + "messageHeadline": "Add another print debug function", + "oid": "5b40e402dc37897052129db14441695a25bd86f8" + }, + { + "authoredDate": "2019-04-27T13:28:24Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T13:28:24Z", + "messageBody": "", + "messageHeadline": "Change bc_num_printDigs() a bit", + "oid": "37118f4c4f26f64bb4becb0caa55149659ca8ac3" + }, + { + "authoredDate": "2019-04-27T13:28:45Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T13:28:45Z", + "messageBody": "", + "messageHeadline": "Fix a divide by 0", + "oid": "edd9d9dd1459746a4bb2012194a3d3c831414c68" + }, + { + "authoredDate": "2019-04-27T13:28:56Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T13:28:56Z", + "messageBody": "", + "messageHeadline": "Fix some style", + "oid": "034b5b9e16e57becf5121ed60ae1dac8b8dc4ece" + }, + { + "authoredDate": "2019-04-27T13:33:16Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T13:33:16Z", + "messageBody": "", + "messageHeadline": "Fix more style", + "oid": "c88e5231008923290d1ead34ff987fb2e17043c5" + }, + { + "authoredDate": "2019-04-27T13:34:13Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T13:34:13Z", + "messageBody": "", + "messageHeadline": "Fix even more style", + "oid": "20afaeab2ffca9a32e1fa65feeb33050d9c4e204" + }, + { + "authoredDate": "2019-04-27T13:53:23Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T13:53:23Z", + "messageBody": "", + "messageHeadline": "Move an item", + "oid": "948b639a0674f3ce836fe3ba843e2253ef798cd8" + }, + { + "authoredDate": "2019-04-27T13:53:36Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T13:53:36Z", + "messageBody": "", + "messageHeadline": "Remove two unused functions", + "oid": "2316cb42fdff7b768debf3d9c65b73c9c8fc6137" + }, + { + "authoredDate": "2019-04-27T14:09:32Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T14:09:32Z", + "messageBody": "", + "messageHeadline": "Add length and scale tests", + "oid": "805328cdb9342eb249dc398b4569190d7ca78747" + }, + { + "authoredDate": "2019-04-27T14:30:10Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-27T14:30:10Z", + "messageBody": "", + "messageHeadline": "Make length work", + "oid": "b41483b364bf8fe8841e8875febeb4d58743e32f" + }, + { + "authoredDate": "2019-04-27T21:33:08Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T21:33:08Z", + "messageBody": "…upstream changes", + "messageHeadline": "Updated implementation of Newton-Raphson division algorithm to match …", + "oid": "b5aeb445a556de9d9b41a7b2d196b59bcaca90ae" + }, + { + "authoredDate": "2019-04-27T21:41:21Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T21:41:21Z", + "messageBody": "", + "messageHeadline": "Small optimization of the division function", + "oid": "6e129fc621b358d219036e6e4d01f572adb133ff" + }, + { + "authoredDate": "2019-04-27T21:43:02Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T21:43:02Z", + "messageBody": "", + "messageHeadline": "Small optimization of the division function", + "oid": "217379d6199e6bb8b586716b382731882c6096fe" + }, + { + "authoredDate": "2019-04-27T21:45:48Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T21:45:48Z", + "messageBody": "", + "messageHeadline": "Merge branch 'base9' of https://github.com/gavinhoward/bc into d9", + "oid": "45a56123c3c6ede3cf157419e56427a01ff48e2a" + }, + { + "authoredDate": "2019-04-28T00:04:02Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Eßer" + } + ], + "committedDate": "2019-04-28T00:04:02Z", + "messageBody": "He says that he made division work. Cool.", + "messageHeadline": "Import more code from Stefan", + "oid": "daaaaa795095115e813ad7c7afbae0937a046246" + }, + { + "authoredDate": "2019-04-28T10:30:47Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T10:30:47Z", + "messageBody": "I had missed to set scsale values in the parameters passed in by the divide\nfunction and thus got results that had 0 fractional digits.", + "messageHeadline": "Undo change to scale calculation in bc_num_m", + "oid": "d793fa5c3a03370627e45d5f03968039b10f34c6" + }, + { + "authoredDate": "2019-04-28T12:58:58Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T12:58:58Z", + "messageBody": "This function will be used in the division algorithm.", + "messageHeadline": "Add function to round number to a given number of decimal places", + "oid": "db970636e68f62f41c17c6053e5ccc242161e5a0" + }, + { + "authoredDate": "2019-04-28T13:50:14Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T13:50:14Z", + "messageBody": "I had a local change that made bc_num_invert implicily extend this variable,\nbut noticed with that change reverted that the precision of the calculation\nwas reduced to BC_BASE_POWER decimals, leading to imprecise division results.", + "messageHeadline": "Fix division: Extend variable to required number of decimal places", + "oid": "70997150a28b4df49639924431cb0706a403207f" + }, + { + "authoredDate": "2019-04-28T15:21:34Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T15:21:34Z", + "messageBody": "For now, keep the Newton-Raphson algorithm in an #if 0 block for reference and to\nallow to compare them in further tests.\n\nI have noticed segmentation faults when dividing very large numbers, which probably\nare due to missing calls of bc_num_extend() for destination variables of arithmetic\noperations. I'll try to fix the length calculations, but I do not know the exact\nsemantics of a number of low level calls.", + "messageHeadline": "Replace Newton-Raphson algorithm by Goldschmidt algorithm.", + "oid": "154b473a9c65f081d673556ce163c50754cf75de" + }, + { + "authoredDate": "2019-04-28T18:19:51Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T18:19:51Z", + "messageBody": "", + "messageHeadline": "Merge branch 'base9' of https://github.com/gavinhoward/bc into d9", + "oid": "307ce024f26a0433460a84ad5ad22bd3ac6f094f" + }, + { + "authoredDate": "2019-04-28T19:32:13Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T19:32:13Z", + "messageBody": "", + "messageHeadline": "Optimize bc_num_pow10", + "oid": "72109f49b8cd1e877c4b4252652d73f21d0ad689" + }, + { + "authoredDate": "2019-04-28T22:59:32Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T22:59:32Z", + "messageBody": "This makes bc complete the tests without crash, but with a result that\nhas too few digits printed. This will need to be debugged next ...", + "messageHeadline": "Fix scale parameters and remove bogus bc_num_extend calls", + "oid": "4c1e43af931618094a761dff7d1e4b0374e7576d" + }, + { + "authoredDate": "2019-04-29T10:56:32Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T10:56:32Z", + "messageBody": "Now all division and multiplication tests pass.", + "messageHeadline": "Fix position of decimal point when dividing by a very small number.", + "oid": "40b53d23eb92b69a9d079ead59def298cb089370" + }, + { + "authoredDate": "2019-04-29T11:00:23Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T11:00:23Z", + "messageBody": "", + "messageHeadline": "Improve format of dumped BcNum values in debug traces", + "oid": "33a1c689f4d5cf2026c92a954c36a50f6e772c8e" + }, + { + "authoredDate": "2019-04-29T12:24:31Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T12:24:31Z", + "messageBody": "There were 4 places where \"rdx\" had to be replaced by \"scale\".\nThis version passes all tests.", + "messageHeadline": "Fix \"power\" operator (bc_num_p).", + "oid": "c66e44871c84fc81a3595d21d9174082b62da1d3" + }, + { + "authoredDate": "2019-04-29T13:06:00Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T13:06:00Z", + "messageBody": "Results seem to be correct except for the number of decimals calculated and returned.\nThe tests still fail for that reason, but show results that are near to what is expected.", + "messageHeadline": "Mostly fix the sqrt operation.", + "oid": "627693667ff6b0bc70f4a636bd282423af74df62" + }, + { + "authoredDate": "2019-04-29T13:36:46Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-29T13:36:46Z", + "messageBody": "", + "messageHeadline": "Start building Goldschmidt", + "oid": "fdbcd063e2eab65ca07be9f62bdd10cc965a220d" + }, + { + "authoredDate": "2019-04-29T13:56:04Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-29T13:56:04Z", + "messageBody": "", + "messageHeadline": "Add a useful function", + "oid": "08f7856b38ca730b120e450dea482d0e18fd2232" + }, + { + "authoredDate": "2019-04-29T15:10:43Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T15:10:43Z", + "messageBody": "…orithm\n\nIntroduce and use a function bc_num_int_digits() that counts the number of digits\nto the left of the decimalpoint.", + "messageHeadline": "Fix and improve the calculation of the initial value for the sqrt alg…", + "oid": "cc7cd938dadfd8ecbaf61e79f7fba8060ff7194c" + }, + { + "authoredDate": "2019-04-29T16:14:21Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-29T16:14:21Z", + "messageBody": "There are still some cases that fail, but this is mostly working, and I\nwould like to save my progress.", + "messageHeadline": "Make most of divide work", + "oid": "36ec987c22af5d7ccc3b8aef0fe9758ce85c56a0" + }, + { + "authoredDate": "2019-04-29T16:28:33Z", + "authors": [ + { + "email": "yzena.tech@gmail.com", + "id": "", + "login": "", + "name": "Gavin Howard" + } + ], + "committedDate": "2019-04-29T16:28:33Z", + "messageBody": "", + "messageHeadline": "Make divide work", + "oid": "cef0397c810152aed4116fdc56dcf920d20eda32" + } + ], + "createdAt": "2019-04-29T11:21:03Z", + "deletions": 234, + "files": [ + { + "path": "include/num.h", + "additions": 71, + "deletions": 4 + }, + { + "path": "include/status.h", + "additions": 2, + "deletions": 0 + }, + { + "path": "include/vm.h", + "additions": 0, + "deletions": 2 + }, + { + "path": "src/num.c", + "additions": 838, + "deletions": 223 + }, + { + "path": "src/program.c", + "additions": 2, + "deletions": 2 + }, + { + "path": "tests/all.sh", + "additions": 1, + "deletions": 1 + }, + { + "path": "tests/bc/all.txt", + "additions": 4, + "deletions": 2 + }, + { + "path": "tests/bc/decimal.txt", + "additions": 23, + "deletions": 0 + }, + { + "path": "tests/bc/decimal_results.txt", + "additions": 23, + "deletions": 0 + }, + { + "path": "tests/bc/divide.txt", + "additions": 31, + "deletions": 0 + }, + { + "path": "tests/bc/divide_results.txt", + "additions": 30, + "deletions": 0 + }, + { + "path": "tests/bc/length.txt", + "additions": 59, + "deletions": 0 + }, + { + "path": "tests/bc/length_results.txt", + "additions": 57, + "deletions": 0 + }, + { + "path": "tests/bc/scale.txt", + "additions": 56, + "deletions": 0 + }, + { + "path": "tests/bc/scale_results.txt", + "additions": 56, + "deletions": 0 + }, + { + "path": "tests/bc/shift.txt", + "additions": 5280, + "deletions": 0 + }, + { + "path": "tests/bc/shift_results.txt", + "additions": 5280, + "deletions": 0 + } + ], + "fullDatabaseId": "274334078", + "headRefName": "d9", + "headRefOid": "914a7f66807b3567fa438c8d668a040e9d2bcc4a", + "headRepository": { + "id": "MDEwOlJlcG9zaXRvcnkxODAzNzI3NzY=", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "name": "Stefan Eßer", + "login": "stesser" + }, + "id": "MDExOlB1bGxSZXF1ZXN0Mjc0MzM0MDc4", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "914a7f66807b3567fa438c8d668a040e9d2bcc4a" + }, + "mergeStateStatus": "UNKNOWN", + "mergeable": "UNKNOWN", + "mergedAt": "2019-05-06T13:42:00Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 18, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Division and modulo pass all tests", + "updatedAt": "2019-05-06T13:42:00Z", + "url": "https://github.com/gavinhoward/bc/pull/18" + }, + { + "additions": 295, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "is_bot": false, + "login": "stesser", + "name": "Stefan Eßer" + }, + "autoMergeRequest": null, + "baseRefName": "base9", + "baseRefOid": "e396dff5929071da830a84b64405f7a7c8e0113e", + "body": "I'm still not sure about correct scale values and situations in which bc_num_extend must be called to prepare a BcNum that is to receive the result of an arithmetic operation. This leads to overflow for large values (the algorithm is essentially correct, but variables need to be extended in some cases).", + "changedFiles": 4, + "closed": true, + "closedAt": "2019-05-06T13:42:50Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDQ4NzM5MDI1OA==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "How does this new algorithm compare to Newton-Raphson performance-wise?", + "createdAt": "2019-04-28T15:38:21Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/17#issuecomment-487390258", + "viewerDidAuthor": true + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDQ4NzQwNzQ5NA==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Also, would it be possible for you to fix the crashes on both algorithms? The test suite crashes on both. It would also be nice if you could put them in a #if 0 #else #endif set so I can test the changes and see which one is faster. Thank you.", + "createdAt": "2019-04-28T19:14:59Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/17#issuecomment-487407494", + "viewerDidAuthor": true + }, + { + "id": "MDEyOklzc3VlQ29tbWVudDQ4OTYyNTA2NA==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Closed by manually merging.", + "createdAt": "2019-05-06T13:42:50Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/17#issuecomment-489625064", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2019-04-27T21:33:08Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T21:33:08Z", + "messageBody": "…upstream changes", + "messageHeadline": "Updated implementation of Newton-Raphson division algorithm to match …", + "oid": "b5aeb445a556de9d9b41a7b2d196b59bcaca90ae" + }, + { + "authoredDate": "2019-04-27T21:41:21Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T21:41:21Z", + "messageBody": "", + "messageHeadline": "Small optimization of the division function", + "oid": "6e129fc621b358d219036e6e4d01f572adb133ff" + }, + { + "authoredDate": "2019-04-27T21:43:02Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T21:43:02Z", + "messageBody": "", + "messageHeadline": "Small optimization of the division function", + "oid": "217379d6199e6bb8b586716b382731882c6096fe" + }, + { + "authoredDate": "2019-04-27T21:45:48Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T21:45:48Z", + "messageBody": "", + "messageHeadline": "Merge branch 'base9' of https://github.com/gavinhoward/bc into d9", + "oid": "45a56123c3c6ede3cf157419e56427a01ff48e2a" + }, + { + "authoredDate": "2019-04-28T10:30:47Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T10:30:47Z", + "messageBody": "I had missed to set scsale values in the parameters passed in by the divide\nfunction and thus got results that had 0 fractional digits.", + "messageHeadline": "Undo change to scale calculation in bc_num_m", + "oid": "d793fa5c3a03370627e45d5f03968039b10f34c6" + }, + { + "authoredDate": "2019-04-28T12:58:58Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T12:58:58Z", + "messageBody": "This function will be used in the division algorithm.", + "messageHeadline": "Add function to round number to a given number of decimal places", + "oid": "db970636e68f62f41c17c6053e5ccc242161e5a0" + }, + { + "authoredDate": "2019-04-28T13:50:14Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T13:50:14Z", + "messageBody": "I had a local change that made bc_num_invert implicily extend this variable,\nbut noticed with that change reverted that the precision of the calculation\nwas reduced to BC_BASE_POWER decimals, leading to imprecise division results.", + "messageHeadline": "Fix division: Extend variable to required number of decimal places", + "oid": "70997150a28b4df49639924431cb0706a403207f" + }, + { + "authoredDate": "2019-04-28T15:21:34Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T15:21:34Z", + "messageBody": "For now, keep the Newton-Raphson algorithm in an #if 0 block for reference and to\nallow to compare them in further tests.\n\nI have noticed segmentation faults when dividing very large numbers, which probably\nare due to missing calls of bc_num_extend() for destination variables of arithmetic\noperations. I'll try to fix the length calculations, but I do not know the exact\nsemantics of a number of low level calls.", + "messageHeadline": "Replace Newton-Raphson algorithm by Goldschmidt algorithm.", + "oid": "154b473a9c65f081d673556ce163c50754cf75de" + }, + { + "authoredDate": "2019-04-28T18:19:51Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T18:19:51Z", + "messageBody": "", + "messageHeadline": "Merge branch 'base9' of https://github.com/gavinhoward/bc into d9", + "oid": "307ce024f26a0433460a84ad5ad22bd3ac6f094f" + }, + { + "authoredDate": "2019-04-28T19:32:13Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T19:32:13Z", + "messageBody": "", + "messageHeadline": "Optimize bc_num_pow10", + "oid": "72109f49b8cd1e877c4b4252652d73f21d0ad689" + }, + { + "authoredDate": "2019-04-28T22:59:32Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-28T22:59:32Z", + "messageBody": "This makes bc complete the tests without crash, but with a result that\nhas too few digits printed. This will need to be debugged next ...", + "messageHeadline": "Fix scale parameters and remove bogus bc_num_extend calls", + "oid": "4c1e43af931618094a761dff7d1e4b0374e7576d" + }, + { + "authoredDate": "2019-04-29T10:56:32Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T10:56:32Z", + "messageBody": "Now all division and multiplication tests pass.", + "messageHeadline": "Fix position of decimal point when dividing by a very small number.", + "oid": "40b53d23eb92b69a9d079ead59def298cb089370" + }, + { + "authoredDate": "2019-04-29T11:00:23Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T11:00:23Z", + "messageBody": "", + "messageHeadline": "Improve format of dumped BcNum values in debug traces", + "oid": "33a1c689f4d5cf2026c92a954c36a50f6e772c8e" + }, + { + "authoredDate": "2019-04-29T12:24:31Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T12:24:31Z", + "messageBody": "There were 4 places where \"rdx\" had to be replaced by \"scale\".\nThis version passes all tests.", + "messageHeadline": "Fix \"power\" operator (bc_num_p).", + "oid": "c66e44871c84fc81a3595d21d9174082b62da1d3" + }, + { + "authoredDate": "2019-04-29T13:06:00Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T13:06:00Z", + "messageBody": "Results seem to be correct except for the number of decimals calculated and returned.\nThe tests still fail for that reason, but show results that are near to what is expected.", + "messageHeadline": "Mostly fix the sqrt operation.", + "oid": "627693667ff6b0bc70f4a636bd282423af74df62" + }, + { + "authoredDate": "2019-04-29T15:10:43Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T15:10:43Z", + "messageBody": "…orithm\n\nIntroduce and use a function bc_num_int_digits() that counts the number of digits\nto the left of the decimalpoint.", + "messageHeadline": "Fix and improve the calculation of the initial value for the sqrt alg…", + "oid": "cc7cd938dadfd8ecbaf61e79f7fba8060ff7194c" + }, + { + "authoredDate": "2019-04-29T18:13:51Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T18:13:51Z", + "messageBody": "", + "messageHeadline": "Make more Sqrt tests work", + "oid": "8f7c5a565c0c8cb4f674982c6fbb3174d6eaeee9" + }, + { + "authoredDate": "2019-04-29T18:49:15Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T18:49:15Z", + "messageBody": "", + "messageHeadline": "Make all Sqrt tests work", + "oid": "1f0f69f0d249d14270fe14a993405926a536ce05" + }, + { + "authoredDate": "2019-04-29T19:28:52Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T19:28:52Z", + "messageBody": "", + "messageHeadline": "Apply existing style to my changes - no functional change", + "oid": "f76f0365e272d675c73fb62dcfa09653960106fc" + }, + { + "authoredDate": "2019-04-29T20:10:41Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-29T20:10:41Z", + "messageBody": "", + "messageHeadline": "Fix debug printing of BcNum variables", + "oid": "0dea79ffb116b3395b949b18d80473af9e969ced" + }, + { + "authoredDate": "2019-04-30T08:47:06Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-30T08:47:06Z", + "messageBody": "…uns easier to decode", + "messageHeadline": "Make debug printing of BcNum variables use signed values to make over…", + "oid": "f8610b15aeed384d520d83ba66c964abd828d096" + }, + { + "authoredDate": "2019-04-30T09:24:44Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-30T09:24:44Z", + "messageBody": "", + "messageHeadline": "Fix printing of numbers with obase != 10 (length of fractional part)", + "oid": "36220832c7341fd267fdfb4010c579c5bc840a60" + }, + { + "authoredDate": "2019-05-02T08:43:02Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-02T08:43:02Z", + "messageBody": "", + "messageHeadline": "Merge branch 'base9' of https://github.com/gavinhoward/bc into d9", + "oid": "4534283defbcd20faf921666b0b32693633c3ec2" + }, + { + "authoredDate": "2019-05-02T08:43:21Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-02T08:43:21Z", + "messageBody": "…results.\n\nThe implementation can be changed back to a macro that accesses the array\nwithout any further computation, if the function should take non-negligible\ntime. But the function will be inlined or optimized away in most cases and\nthus should not have a significant impact on the run-time ...", + "messageHeadline": "Revert bc_num_pow10 to a function instead of an array that holds the …", + "oid": "6167e2231df4f606278ca414931612a0e7d595e1" + }, + { + "authoredDate": "2019-05-02T08:56:01Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-02T08:56:01Z", + "messageBody": "", + "messageHeadline": "Add back the forward declaration of bc_num_pow10.", + "oid": "5b2af58b477230aea07d7f69d401390d500b5a75" + }, + { + "authoredDate": "2019-05-02T11:38:00Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-02T11:38:00Z", + "messageBody": "", + "messageHeadline": "Allow to pass BC_BASE_POWER on the compiler command line", + "oid": "4d90ccff6ac554b33b5832d79bca935cb8d03fc3" + }, + { + "authoredDate": "2019-05-04T07:12:09Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T07:12:09Z", + "messageBody": "", + "messageHeadline": "Fix decoding of BcNum in debug print function", + "oid": "f28be31518134f169a64d4a8104414c335b5c947" + }, + { + "authoredDate": "2019-05-04T07:14:02Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T07:14:02Z", + "messageBody": "", + "messageHeadline": "Fix merge errors in idivision based on Goldschmidt algorithm", + "oid": "10bca1171455d813a70b60a6bb05538b40831c1a" + }, + { + "authoredDate": "2019-05-04T07:24:27Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T07:24:27Z", + "messageBody": "\"shift\" operations are used within all arithmetic operations\n\"print\" is a pre-requisite of generating the results file for the \"parse\" test", + "messageHeadline": "Change order of tests to first test features that later tests depend on", + "oid": "f213e28e1a70e1ca581f9d137a1498dedcf97095" + }, + { + "authoredDate": "2019-05-04T13:58:41Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T13:58:41Z", + "messageBody": "…compiler warning", + "messageHeadline": "Change type of variables in debug print function to int to silence a …", + "oid": "013aeffa913df9dd96eec9c2dacfb64c9e766868" + }, + { + "authoredDate": "2019-05-04T14:19:12Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T14:19:12Z", + "messageBody": "The correction is derived from the difference of the input parameter times it inverse.\nThis value could be used for a final Newton-Raphson step (at the cost of an additional\nmultiplication), but since we can assume that the input\tparameter was very near\tto 1.0,\nthe multiplication would only add non-zero digits beyond the current scale range.\n\nThe Goldschmidt\talgorithm is an\tinfinite series\tof ever smaller positive values\tand\nif the series is cut off at some point,\tthe result is known to be exact\tor smaller\nthan the exact value.\n\nThe correction applied is meant\tto compensate for the neglected\tseries elements.\nIf it is found that there are boundary cases where we over-compensate, then the\nNewton-Raphson step could be used to apply a slightly smaller correction.", + "messageHeadline": "Add correction to result of Goldschmidt\talgorithm", + "oid": "85f59a665e6b20380accdb7c9f5fbca0d39d693b" + }, + { + "authoredDate": "2019-05-04T14:24:40Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T14:24:40Z", + "messageBody": "After a correction is applied to the returned reciprocal to account for the finite\nnumber of elements used in teh Goldschmidt algorithm, the result should be correct\nwithout the final rounding step.\n\nWhile here also remove the assignment of 1 to a variable that is not used for the\nspecific case anymore, anyway ...", + "messageHeadline": "Adapt division algorithm to use the updated bc_num_invert()", + "oid": "7e21b3cca2b93e7d5509e05dbf3d2076dcffa74d" + }, + { + "authoredDate": "2019-05-04T15:01:21Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T15:01:21Z", + "messageBody": "", + "messageHeadline": "Fix width of value printed for base > 17", + "oid": "017f0c843a3439651ce310cdb6ffc90cc09f6203" + }, + { + "authoredDate": "2019-05-04T15:05:12Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T15:05:12Z", + "messageBody": "", + "messageHeadline": "Fix printing of fractional parts for obase > 10", + "oid": "1a503e62ff9e642740577f8df68e439a1b9e1d10" + }, + { + "authoredDate": "2019-05-04T16:02:15Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T16:02:15Z", + "messageBody": "It has been found to be too low e.g. when calculating l(256)/l(16) with scale=40.\nThe result is exact with this increased correction applied.", + "messageHeadline": "Double correction value applied in bc_num_invert()", + "oid": "b9db23ba3b452798cc5b4ded0125565e5940f3e3" + }, + { + "authoredDate": "2019-05-04T18:12:43Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T18:12:43Z", + "messageBody": "The locations with these markers should be checked, although the tests seem to\nsucceed wíthiut them.\n\nCurrently test succeed until \"reference.bc2\", which returns zeroes for some of\nthe test arrays. But these marked locations are probably not related to that\ntest failing.", + "messageHeadline": "Mark a few places where changes might be required with // <se>", + "oid": "276de8c876ba72f1357dd0ce7cc1ef403902cedf" + }, + { + "authoredDate": "2019-05-04T21:48:51Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T21:48:51Z", + "messageBody": "This change has been performed due to a source code analysis.\nNo tests failed with the old code (i.e., no test covered this case).", + "messageHeadline": "Fix length parameter which obviously should be scale not rdx", + "oid": "e6bd86bdb390d0a74b31aabdde56d5824f38741c" + }, + { + "authoredDate": "2019-05-04T21:50:38Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-04T21:50:38Z", + "messageBody": "", + "messageHeadline": "Add comments to the division based on the Goldschmidt algorithm", + "oid": "28ffb91991cb5ca2c8687de2ff355161088d5997" + }, + { + "authoredDate": "2019-05-05T19:54:54Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-05T19:54:54Z", + "messageBody": "… crashing\n\nThe cut-off value is arbitrary, a significantly lower limit could be applied.", + "messageHeadline": "Make shiftLeft return an error for too large shift amounts instead of…", + "oid": "e274dbe523657c7bfc4228ddbf2e6dfbbca36059" + }, + { + "authoredDate": "2019-05-05T20:00:21Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-05-05T20:00:21Z", + "messageBody": "The Goldschmidt algorithm needs larger arguments than supported by the\narray.\n\nA larger array could be used, but a disassembly showed, that the array\naccess was converted to an inlined and rolled out chain of comparisons\nand assignments.", + "messageHeadline": "Optimize bc_num_pow10() and remove the unused bc_num_pow10 array", + "oid": "914a7f66807b3567fa438c8d668a040e9d2bcc4a" + } + ], + "createdAt": "2019-04-28T15:29:42Z", + "deletions": 63, + "files": [ + { + "path": "include/num.h", + "additions": 33, + "deletions": 13 + }, + { + "path": "src/data.c", + "additions": 0, + "deletions": 19 + }, + { + "path": "src/num.c", + "additions": 260, + "deletions": 29 + }, + { + "path": "tests/bc/all.txt", + "additions": 2, + "deletions": 2 + } + ], + "fullDatabaseId": "274187961", + "headRefName": "d9", + "headRefOid": "914a7f66807b3567fa438c8d668a040e9d2bcc4a", + "headRepository": { + "id": "MDEwOlJlcG9zaXRvcnkxODAzNzI3NzY=", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "name": "Stefan Eßer", + "login": "stesser" + }, + "id": "MDExOlB1bGxSZXF1ZXN0Mjc0MTg3OTYx", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": null, + "mergeStateStatus": "DIRTY", + "mergeable": "CONFLICTING", + "mergedAt": null, + "mergedBy": null, + "milestone": null, + "number": 17, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "CLOSED", + "statusCheckRollup": [], + "title": "Implementation of an alternate algorithm for reciprocal values", + "updatedAt": "2019-05-06T13:42:51Z", + "url": "https://github.com/gavinhoward/bc/pull/17" + }, + { + "additions": 147, + "assignees": [], + "author": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "is_bot": false, + "login": "stesser", + "name": "Stefan Eßer" + }, + "autoMergeRequest": null, + "baseRefName": "base9", + "baseRefOid": "c25fd61637390cc993c91258dda2c01404b37147", + "body": "The code is not cleaned up, but since you said your are waiting for it ...", + "changedFiles": 1, + "closed": true, + "closedAt": "2019-04-27T12:40:59Z", + "comments": [ + { + "id": "MDEyOklzc3VlQ29tbWVudDQ4NzI4Mjk1Ng==", + "author": { + "login": "gavinhoward" + }, + "authorAssociation": "OWNER", + "body": "Merged. Will get to work on it now.", + "createdAt": "2019-04-27T12:41:09Z", + "includesCreatedEdit": false, + "isMinimized": false, + "minimizedReason": "", + "reactionGroups": [], + "url": "https://github.com/gavinhoward/bc/pull/16#issuecomment-487282956", + "viewerDidAuthor": true + } + ], + "commits": [ + { + "authoredDate": "2019-04-26T23:29:01Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-26T23:29:01Z", + "messageBody": "", + "messageHeadline": "Iterative division based on Newton Raphson algorithm", + "oid": "193f8529ad93306e39914ca7a2aa877669383f6f" + }, + { + "authoredDate": "2019-04-27T07:16:26Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T07:16:26Z", + "messageBody": "", + "messageHeadline": "Merge branch 'base9' of https://github.com/gavinhoward/bc into d9", + "oid": "87c27b5715646eb4deec4a6795c17b4c5facc408" + }, + { + "authoredDate": "2019-04-27T08:39:00Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T08:39:00Z", + "messageBody": "", + "messageHeadline": "Fix mismerge regarding nBcDig vs. places", + "oid": "70f118574077b6e61cae08bd576ca7fccc167786" + }, + { + "authoredDate": "2019-04-27T08:40:14Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T08:40:14Z", + "messageBody": "…e current rdx", + "messageHeadline": "Fix segmentation fault that occurs if the target rdx is lower than th…", + "oid": "6189d95036f123d48d505bf4d4a49ba11ca30aee" + }, + { + "authoredDate": "2019-04-27T08:42:00Z", + "authors": [ + { + "email": "se@freebsd.org", + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "login": "stesser", + "name": "Stefan Esser" + } + ], + "committedDate": "2019-04-27T08:42:00Z", + "messageBody": "", + "messageHeadline": "Add simple debug print macro", + "oid": "cdda6e99974b8f9551ad1bc184b3c735afac6f4a" + }, + { + "authoredDate": "2019-04-27T11:47:09Z", + "authors": [ + { + "email": "root@StefanEsser.freebsd.org", + "id": "", + "login": "", + "name": "Charlie Root" + } + ], + "committedDate": "2019-04-27T11:47:09Z", + "messageBody": "", + "messageHeadline": "Fix calculation of scale in multiplications", + "oid": "ac244bdb3ebe6e6a2693f3d5c2ae13d7723b3517" + } + ], + "createdAt": "2019-04-26T23:33:21Z", + "deletions": 63, + "files": [ + { + "path": "src/num.c", + "additions": 147, + "deletions": 63 + } + ], + "fullDatabaseId": "274063201", + "headRefName": "d9", + "headRefOid": "ac244bdb3ebe6e6a2693f3d5c2ae13d7723b3517", + "headRepository": { + "id": "MDEwOlJlcG9zaXRvcnkxODAzNzI3NzY=", + "name": "bc" + }, + "headRepositoryOwner": { + "id": "MDQ6VXNlcjYyNjQ1NDY=", + "name": "Stefan Eßer", + "login": "stesser" + }, + "id": "MDExOlB1bGxSZXF1ZXN0Mjc0MDYzMjAx", + "isCrossRepository": true, + "isDraft": false, + "labels": [], + "latestReviews": [], + "maintainerCanModify": false, + "mergeCommit": { + "oid": "769fcbed7a3a0005a60254c0ed5203406b533ae3" + }, + "mergeStateStatus": "DIRTY", + "mergeable": "CONFLICTING", + "mergedAt": "2019-04-27T12:40:59Z", + "mergedBy": { + "id": "MDQ6VXNlcjMxNzI2ODc=", + "is_bot": false, + "login": "gavinhoward", + "name": "Gavin D. Howard" + }, + "milestone": null, + "number": 16, + "potentialMergeCommit": null, + "projectCards": [], + "projectItems": [], + "reactionGroups": [], + "reviewDecision": "", + "reviewRequests": [], + "reviews": [], + "state": "MERGED", + "statusCheckRollup": [], + "title": "Newton-Raphson based division", + "updatedAt": "2019-04-27T12:41:09Z", + "url": "https://github.com/gavinhoward/bc/pull/16" + } +] diff --git a/contrib/bc/project/issue10.md b/contrib/bc/project/issue10.md new file mode 100644 index 000000000000..4c417f1922ab --- /dev/null +++ b/contrib/bc/project/issue10.md @@ -0,0 +1,104 @@ +# "scale" not set correctly with -l when first command is a syntax error + +## `mathieu` + +I just hit a (small and unlikely to be triggered) problem when using the `-l` flag: + +``` +$ bc -l +>>> 2+; # or any other syntax error it seems + +Parse error: bad expression + <stdin>:1 + +>>> l(1000) +6 +>>> scale +0 +``` + +The math library still gets loaded but `scale` doesn't get set (or gets reset)? + +The syntax error has to be on the first command and other kinds of errors (like say a divide by zero) don't seem to cause the problem. + +## `gavin` + +Hmm...let me investigate this and get back to you. This does seem like a bug. + +## `gavin` + +I'm not seeing the behavior. Can you send me the output of `bc -v`? + +## `gavin` + +I should also ask: what OS are you on? What version? What compiler did you use? Did you install from a package? + +Basically, send me as much info as you can. I would appreciate it. + +## `mathieu` + +Oh sorry yeah I should've given more details. + +That's on FreeBSD with the base system's bc, built with the default base compiler. + +On recent 12.2-STABLE: + +``` +$ bc -v +bc 4.0.1 +Copyright (c) 2018-2021 Gavin D. Howard and contributors +Report bugs at: https://git.yzena.com/gavin/bc + +This is free software with ABSOLUTELY NO WARRANTY. +``` + +Your bc is not default on 12.X yet but I enabled it with WITH_GH_BC=yes in /etc/src.conf to try it out. + +And on somewhat less recent 14-CURRENT: + +``` +$ bc -v +bc 4.0.0 +Copyright (c) 2018-2021 Gavin D. Howard and contributors +Report bugs at: https://git.yzena.com/gavin/bc + +This is free software with ABSOLUTELY NO WARRANTY. +``` + +Both amd64. Happens every time on both. + +I could give it a try on 13-STABLE too if that helps but I'd need to reboot something. + +The syntax error really has to be the FIRST input, even entering an empty line before it makes the problem not happen. + +I thought it could be an editline(3) problem since some programs end up using that pretty much only on the BSDs it seems, but that's not it. + +## `gavin` + +Yeah, my `bc` uses a custom history implementation, so it could be mine, but not `editline(3)`. + +I will pull up a FreeBSD VM and check it out. Sorry for the wait. + +## `gavin` + +I have confirmed the bug on FreeBSD with the port at version `4.0.1`. Since it is the port, and not the system one, I think the problem may lie with some incompatibility between my history implementation and what FreeBSD provides. + +This one may take me a long time to debug because I have to do it manually in the VM. Thank you for your patience. + +## `gavin` + +I found the problem! + +It is fixed in `299a4fd353`, but if you can pull that down and test, I would appreciate it. + +I will put out a release as soon as I can, and my FreeBSD contact will probably update 14-CURRENT soon thereafter. He will also update the port, but the version in 12.2 may not be updated for a bit. + +Feel free to reopen if the fix does not work for you. + +## `mathieu` + +Oof... yeah makes sense that an rc file could interfere with this. + +Yes, that fixes it here too. With that diff applied on both 12.2-STABLE and 14-CURRENT's versions. And everything else seems to still work fine too. + +Thanks for fixing this! You'd think it's really hard to trigger but I do enough typos and I start bc (with an alias with -l) often enough to make a quick calculation that I hit it twice and had decimals mysteriously missing before I started trying to reproduce it. diff --git a/contrib/bc/scripts/exec-install.sh b/contrib/bc/scripts/exec-install.sh index 581b6bd1ed24..835b7491ac66 100755 --- a/contrib/bc/scripts/exec-install.sh +++ b/contrib/bc/scripts/exec-install.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/format.sh b/contrib/bc/scripts/format.sh index f76aed378186..e8836c6ba1e0 100755 --- a/contrib/bc/scripts/format.sh +++ b/contrib/bc/scripts/format.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/functions.sh b/contrib/bc/scripts/functions.sh index 1599fea4847e..13ccbf8f3f31 100755 --- a/contrib/bc/scripts/functions.sh +++ b/contrib/bc/scripts/functions.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/karatsuba.py b/contrib/bc/scripts/karatsuba.py index 637887986ee8..c4e0720b3408 100755 --- a/contrib/bc/scripts/karatsuba.py +++ b/contrib/bc/scripts/karatsuba.py @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/link.sh b/contrib/bc/scripts/link.sh index 772de27a08c2..4562677d7b38 100755 --- a/contrib/bc/scripts/link.sh +++ b/contrib/bc/scripts/link.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/lint.sh b/contrib/bc/scripts/lint.sh index 14cdc5c3afc8..611560ced31a 100755 --- a/contrib/bc/scripts/lint.sh +++ b/contrib/bc/scripts/lint.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/locale_install.sh b/contrib/bc/scripts/locale_install.sh index e891bf57db81..cec69d7201f4 100755 --- a/contrib/bc/scripts/locale_install.sh +++ b/contrib/bc/scripts/locale_install.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/locale_uninstall.sh b/contrib/bc/scripts/locale_uninstall.sh index 1bf292b801e6..274b6bcf49f1 100755 --- a/contrib/bc/scripts/locale_uninstall.sh +++ b/contrib/bc/scripts/locale_uninstall.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/os.c b/contrib/bc/scripts/os.c index 212a61772ccf..89c5b1b95b3f 100644 --- a/contrib/bc/scripts/os.c +++ b/contrib/bc/scripts/os.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/release.pkg.yao b/contrib/bc/scripts/release.pkg.yao new file mode 100644 index 000000000000..525709c28164 --- /dev/null +++ b/contrib/bc/scripts/release.pkg.yao @@ -0,0 +1,1410 @@ +/** + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +PROG: str = path.realpath(sys.program); +REAL: str = path.realpath(PROG +~ ".."); + +SCRIPTDIR: str = path.dirname(PROG); + +WINDOWS: bool = (host.os == "Windows"); + +DEFOPT: str = if WINDOWS { "/D"; } else { "-D"; }; +C11OPT: str = if WINDOWS { "/std:c11"; } else { "-std=c11"; }; +C99OPT: str = if WINDOWS { "/std:c99"; } else { "-std=c99"; }; + +/** + * Turns a string array into a string by joining all strings together with + * spaces. + * @param arr The array to join. + * @return The joined array. + */ +fn strv2str(arr: []str) -> str +{ + ret: !str = ""; + + for item: arr + { + if ret == "" + { + ret! = item; + } + else + { + ret! = ret +~ " " +~ item; + } + } + + return ret; +} + +opts: Gaml = @(gaml){ + help: [ + "Runs the testing part of the release process.\n" + "\n" + "Usage: ", $PROG, " [-h|--help] [<options> \n" + ] + options: { + no64: { + help: "Turn off building and testing 64-bit builds." + long: @no-64 + type: @NONE + } + no128: { + help: "Turn off building and testing builds with 128-bit integers." + long: @no-128 + type: @NONE + } + C: { + help: "Turn off building under Clang." + short: @C + long: @no-clang + type: @NONE + } + C11: { + help: "Turn off building under C11." + long: @no-c11 + type: @NONE + } + G: { + help: "Turn off building under GCC." + short: @G + long: @no-gcc + type: @NONE + } + GEN: { + help: "Turn off running the gen script." + short: @G + long: @no-gen-script + type: @NONE + } + MAKE: { + help: "Turn off running the build with `configure.sh` and `make`." + long: @no-make + type: @NONE + } + RIG: { + help: "Turn off running the build with Rig." + long: @no-rig + type: @NONE + } + T: { + help: "Turn off running tests." + short: @T + long: @no-tests + type: @NONE + } + computed-goto: { + help: "Whether to test with computed goto or not." + long: @computed-goto + type: @NONE + } + e: { + help: "Whether to test with editline or not." + short: @e + long: @editline + type: @NONE + } + g: { + help: "Whether generate tests that are generated or not." + short: @g + long: @generate + type: @NONE + } + history: { + help: "Whether to test with history or not." + long: @history + type: @NONE + } + k: { + help: "Whether to run the Karatsuba tests or not." + short: @k + long: @karatsuba + type: @NONE + } + p: { + help: "Whether to run problematic tests or not." + short: @p + long: @problematic-tests + type: @NONE + } + r: { + help: "Whether to test with readline or not." + short: @r + long: @readline + type: @NONE + } + s: { + help: "Whether to run tests under sanitizers or not." + short: @s + long: @sanitizers + type: @NONE + } + settings: { + help: "Whether to test settings or not." + long: @settings + type: @NONE + } + v: { + help: "Whether to run under Valgrind or not." + short: @v + long: @valgrind + type: @NONE + } + } +}; + +// These are the booleans for the command-line flags. +no64: !bool = false; +no128: !bool = false; +clang: !bool = true; +c11: !bool = true; +gcc: !bool = true; +gen_host: !bool = true; +run_make: !bool = !WINDOWS; +run_rig: !bool = true; +tests: !bool = true; +computed_goto: !bool = false; +editline: !bool = false; +generated: !bool = false; +history: !bool = false; +karatsuba: !bool = false; +problematic: !bool = false; +readline: !bool = false; +sanitizers: !bool = false; +settings: !bool = false; +valgrind: !bool = false; + +defcc: str = if clang { "clang"; } else if gcc { "gcc"; } else { "c99"; }; +defbits: usize = if no64 { usize(32); } else { usize(64); }; + +cgoto_flags: []str = if !computed_goto { @[ "-DBC_NO_COMPUTED_GOTO" ]; }; + +// Set some strict warning flags. Clang's -Weverything can be way too strict, so +// we actually have to turn off some things. +CLANG_FLAGS: []str = @[ "-Weverything", "-Wno-padded", + "-Wno-unsafe-buffer-usage", + "-Wno-poison-system-directories", + "-Wno-switch-default", "-Wno-unknown-warning-option", + "-Wno-pre-c11-compat" ] +~ cgoto_flags; +GCC_FLAGS: []str = @[ "-Wno-clobbered" ] +~ cgoto_flags; + +CLANG_FLAGS_STR: str = strv2str(CLANG_FLAGS); + +GCC_FLAGS_STR: str = strv2str(GCC_FLAGS); + +// Common CFLAGS. +CFLAGS: []str = @[ "-Wall", "-Wextra", "-Werror", "-pedantic" ]; + +CFLAGS_STR: str = strv2str(CFLAGS); + +// Common debug and release flags. +DEBUG_CFLAGS: []str = CFLAGS +~ @[ "-fno-omit-frame-pointer" ]; +DEBUG_CFLAGS_STR: str = CFLAGS_STR +~ " -fno-omit-frame-pointer"; +RELEASE_CFLAGS: []str = CFLAGS +~ @[ "-DNDEBUG" ]; +RELEASE_CFLAGS_STR: str = CFLAGS_STR +~ " -DNDEBUG"; + +/** + * Print a header with a message. This is just to make it easy to track + * progress. + * @param msg The message to print in the header. + */ +fn header(msg: str) -> void +{ + io.eprint("\n*******************\n"); + io.eprint(msg); + io.eprint("\n*******************\n\n"); +} + +/** + * An easy way to call `make`. + * @param args The arguments to pass to `make`, if any. + */ +fn do_make(args: []str) -> void +{ + $ make -j64 %(args); +} + +/** + * An easy way to call Rig. + * @param args The arguments to pass to Rig, if any. + */ +fn do_rig(args: []str) -> void +{ + $ rig -j64 %(args); +} + +/** + * Runs `configure.sh`. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to `configure.sh` itself. + * @param gen The setting for `GEN_HOST`. + * @param long_bit The number of bits in longs. + */ +fn configure( + cflags: str, + cc: str, + flags: str, + gen: bool, + long_bit: usize +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + extra_flags: str = + if !generated + { + if !problematic { "-GP"; } else { "-G"; } + } + else if !problematic + { + "-P"; + }; + + extra_cflags: str = + if cc == "clang" + { + // We need to quiet this warning from Clang because the configure.sh + // docs have this warning, so people should know. Also, I want this + // script to work. + CLANG_FLAGS_STR +~ (if !gen_host { " -Wno-overlength-strings"; }); + } + else if cc == "gcc" + { + // We need to quiet this warning from GCC because the configure.sh docs + // have this warning, so people should know. Also, I want this script to + // work. + GCC_FLAGS_STR +~ (if !gen_host { "-Wno-overlength-strings"; }); + }; + + all_flags: str = flags +~ " " +~ extra_flags; + all_cflags: str = cflags +~ " " +~ extra_cflags; + + hdr := "Running configure.sh " +~ all_flags +~ + "..." +~ + "\n CC=\"" +~ cc +~ "\"\n" +~ + "\n CFLAGS=\"" +~ all_cflags +~ "\"\n" +~ + "\n LONG_BIT=" +~ str(long_bit) +~ + "\n GEN_HOST=" +~ str(gen); + + // Print the header and do the job. + header(hdr); + + env.set env.str("CFLAGS", str(cflags +~ extra_cflags)), + env.str("CC", cc), env.str("GEN_HOST", str(gen)), + env.str("LONG_BIT", str(long_bit)) + { + $ @(path.join(REAL, "configure.sh")) $flags $extra_flags > /dev/null + !> /dev/null; + } +} + +/** + * Build with `make`. This function also captures and outputs any warnings if + * they exist because as far as I am concerned, warnings are not acceptable for + * release. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to `configure.sh` itself. + * @param gen The setting for `GEN_HOST`. + * @param long_bit The number of bits in longs. + */ +fn build_make( + cflags: str, + cc: str, + flags: str, + gen: bool, + long_bit: usize +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + configure(cflags, cc, flags, gen, long_bit); + + hdr := "Building with `make`...\n CC=" +~ cc +~ + "\n CFLAGS=\"" +~ cflags +~ + "\n LONG_BIT=" +~ str(long_bit) +~ + "\n GEN_HOST=" +~ str(gen); + + header(hdr); + + res := $ make; + + if res.stderr.len != 0 + { + io.eprint(cc +~ "generated warning(s):\n\n"); + io.eprint(str(res.stderr)); + sys.exit(1); + } + + if res.exitcode != 0 + { + sys.exit(res.exitcode); + } +} + +/** + * Build with Rig. This function also captures and outputs any warnings if they + * exist because as far as I am concerned, warnings are not acceptable for + * release. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to `configure.sh` itself. + * @param long_bit The number of bits in longs. + */ +fn build_rig( + cflags: []str, + cc: str, + flags: []str, + long_bit: usize +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + cflags_str: str = strv2str(cflags); + + hdr := "Building with Rig...\n CC=" +~ cc +~ + "\n CFLAGS=\"" +~ cflags_str +~ + "\n LONG_BIT=" +~ str(long_bit); + + header(hdr); + + res := $ rig; + + if res.stderr.len != 0 + { + io.eprint(cc +~ "generated warning(s):\n\n"); + io.eprint(str(res.stderr)); + sys.exit(1); + } + + if res.exitcode != 0 + { + sys.exit(res.exitcode); + } +} + +/** + * Run tests with `make`. + * @param args Any arguments to pass to `make`, if any. + */ +fn run_test_make(args: []str) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + header("Running `make` tests"); + + if args.len > 0 + { + do_make(args); + } + else + { + do_make(@[ "test" ]); + + if history + { + do_make(@[ "test_history" ]); + } + } +} + +/** + * Run tests with Rig. + * @param args Any arguments to pass to Rig, if any. + */ +fn run_test_rig(args: []str) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + header("Running Rig tests"); + + if args.len > 0 + { + do_rig(args); + } + else + { + do_rig(@[ "test" ]); + + if history + { + do_rig(@[ "test_history" ]); + } + } +} + +/** + * Builds and runs tests using `make` with both calculators, then bc only, then + * dc only. If `tests` is false, then it just does the builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to `configure.sh` itself. + * @param gen The setting for `GEN_HOST`. + * @param long_bit The number of bits in longs. + */ +fn run_config_tests_make( + cflags: str, + cc: str, + flags: str, + gen: bool, + long_bit: usize, +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + header_start: str = + if tests + { + "Running tests with configure flags and `make`"; + } + else + { + "Building with configure flags and `make`"; + }; + + header("\"" +~ header_start +~ "\" ...\n" +~ + " CC=" +~ cc +~ "\n" +~ + " CFLAGS=\"" +~ cflags +~ "\"\n" +~ + " LONG_BIT=" +~ str(long_bit) +~ "\n" +~ + " GEN_HOST=" +~ str(gen)); + + build_make(cflags, cc, flags, gen, long_bit); + + if tests + { + run_test_make(@[]); + } + + do_make(@[ "clean" ]); + + build_make(cflags, cc, flags +~ " -b", gen, long_bit); + + if tests + { + run_test_make(@[]); + } + + do_make(@[ "clean" ]); + + build_make(cflags, cc, flags +~ " -d", gen, long_bit); + + if tests + { + run_test_make(@[]); + } + + do_make(@[ "clean" ]); +} + +/** + * Builds and runs tests using Rig with both calculators, then bc only, then dc + * only. If `tests` is false, then it just does the builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to Rig itself. + * @param long_bit The number of bits in longs. + */ +fn run_config_tests_rig( + cflags: []str, + cc: str, + flags: []str, + long_bit: usize, +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + header_start: str = + if tests + { + "Running tests with Rig"; + } + else + { + "Building with Rig"; + }; + + header("\"" +~ header_start +~ "\" ...\n" +~ + " CC=" +~ cc +~ "\n" +~ + " CFLAGS=\"" +~ strv2str(cflags) +~ "\"\n" +~ + " flags=\"" +~ strv2str(flags) +~ "\"\n" +~ + " LONG_BIT=" +~ str(long_bit)); + + build_rig(cflags, cc, flags, long_bit); + + if tests + { + run_test_rig(@[]); + } + + do_rig(@[ "clean" ]); + + build_rig(cflags, cc, flags +~ @[ "-Dbuild_mode=bc" ], long_bit); + + if tests + { + run_test_rig(@[]); + } + + do_rig(@[ "clean" ]); + + build_rig(cflags, cc, flags +~ @[ "-Dbuild_mode=dc" ], long_bit); + + if tests + { + run_test_rig(@[]); + } + + do_rig(@[ "clean" ]); +} + +/** + * Builds and runs tests using `run_config_tests_make()` with both calculators, + * then bc only, then dc only. If `tests` is false, then it just does the + * builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to `configure.sh` itself. + */ +fn run_config_series_make( + cflags: str, + cc: str, + flags: str, +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + if !no64 + { + if !no128 + { + run_config_tests_make(cflags, cc, flags, true, usize(64)); + } + + if gen_host + { + run_config_tests_make(cflags, cc, flags, false, usize(64)); + } + + run_config_tests_make(cflags +~ " " +~ DEFOPT +~ "BC_RAND_BUILTIN=0", + cc, flags, true, usize(64)); + + // Test Editline if history is not turned off. + if editline && !(flags contains "H") + { + run_config_tests_make(cflags +~ " " +~ DEFOPT +~ + "BC_RAND_BUILTIN=0", + cc, flags +~ " -e", true, usize(64)); + } + + // Test Readline if history is not turned off. + if readline && !(flags contains "H") + { + run_config_tests_make(cflags +~ " " +~ DEFOPT +~ + "BC_RAND_BUILTIN=0", + cc, flags +~ " -r", true, usize(64)); + } + } + + run_config_tests_make(cflags, cc, flags, true, usize(32)); + + if gen_host + { + run_config_tests_make(cflags, cc, flags, false, usize(32)); + } +} + +/** + * Builds and runs tests using `run_config_tests_rig()` with both calculators, + * then bc only, then dc only. If `tests` is false, then it just does the + * builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to Rig itself. + */ +fn run_config_series_rig( + cflags: []str, + cc: str, + flags: []str, +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + if !no64 + { + if !no128 + { + run_config_tests_rig(cflags, cc, flags, usize(64)); + } + + run_config_tests_rig(cflags +~ @[ DEFOPT +~ "BC_RAND_BUILTIN=0" ], cc, + flags, usize(64)); + + // Test Editline if history is not turned off. + if editline && !(flags contains "-Dhistory=none") + { + run_config_tests_rig(cflags +~ @[ DEFOPT +~ "BC_RAND_BUILTIN=0" ], + cc, flags +~ @[ "-Dhistory=editline" ], + usize(64)); + } + + // Test Readline if history is not turned off. + if readline && !(flags contains "-Dhistory=none") + { + run_config_tests_rig(cflags +~ @[ DEFOPT +~ "BC_RAND_BUILTIN=0" ], + cc, flags +~ @[ "-Dhistory=readline" ], + usize(64)); + } + } + + run_config_tests_rig(cflags, cc, flags, usize(32)); +} + +/** + * Builds and runs tests with each setting combo running + * `run_config_series_make()`. If `tests` is false, it just does the builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to `configure.sh` itself. + */ +fn run_settings_series_make( + cflags: str, + cc: str, + flags: str, +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + if settings + { + settings_path: str = path.join(SCRIPTDIR, "release_settings_make.txt"); + settings_txt: str = io.read_file(settings_path); + lines: []str = settings_txt.split("\n"); + + for line: lines + { + run_config_series_make(cflags, cc, flags +~ " " +~ line); + } + } + else + { + run_config_series_make(cflags, cc, flags); + } +} + +/** + * Builds and runs tests with each setting combo running + * `run_config_series_rig()`. If `tests` is false, it just does the builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to Rig itself. + */ +fn run_settings_series_rig( + cflags: []str, + cc: str, + flags: []str, +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + if settings + { + settings_path: str = path.join(SCRIPTDIR, "release_settings_rig.txt"); + settings_txt: str = io.read_file(settings_path); + lines: []str = settings_txt.split("\n"); + + for line: lines + { + opts_list: []str = + for opt: line.split(" ") + { + DEFOPT +~ opt; + }; + + run_config_series_rig(cflags, cc, flags +~ opts_list); + } + } + else + { + run_config_series_rig(cflags, cc, flags); + } +} + +/** + * Builds and runs tests with each build type running + * `run_settings_series_make()`. If `tests` is false, it just does the builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to `configure.sh` itself. + */ +fn run_test_series_make( + cflags: str, + cc: str, + flags: str, +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + series_flags: []str = @[ "E", "H", "N", "EH", "EN", "HN", "EHN" ]; + + run_settings_series_make(cflags, cc, flags); + + for sflag: series_flags + { + run_settings_series_make(cflags, cc, flags +~ " -" +~ sflag); + } +} + +/** + * Builds and runs tests with each build type running + * `run_settings_series_rig()`. If `tests` is false, it just does the builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to Rig itself. + */ +fn run_test_series_rig( + cflags: []str, + cc: str, + flags: []str, +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + series_path: str = path.join(SCRIPTDIR, "release_flags_rig.txt"); + series_txt: str = io.read_file(series_path); + series_flags: []str = series_txt.split("\n"); + + run_settings_series_rig(cflags, cc, flags); + + for line: series_flags + { + opts_list: []str = + for opt: line.split(" ") + { + DEFOPT +~ opt; + }; + + run_settings_series_rig(cflags, cc, flags +~ opts_list); + } +} + +/** + * Builds and runs tests for `bcl` with `make`. If `tests` is false, it just + * does the builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to `configure.sh` itself. + */ +fn run_lib_tests_make( + cflags: str, + cc: str, + flags: str, +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + build_make(cflags +~ " -a", cc, flags, true, usize(64)); + + if tests + { + run_test_make(@[ "test" ]); + } + + build_make(cflags +~ " -a", cc, flags, true, usize(32)); + + if tests + { + run_test_make(@[ "test" ]); + } +} + +/** + * Builds and runs tests for `bcl` with Rig. If `tests` is false, it just does + * the builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to Rig itself. + */ +fn run_lib_tests_rig( + cflags: []str, + cc: str, + flags: []str, +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + build_rig(cflags, cc, flags +~ @[ "-Dbuild_mode=library" ], usize(64)); + + if tests + { + run_test_rig(@[ "test" ]); + } + + build_rig(cflags, cc, flags +~ @[ "-Dbuild_mode=library" ], usize(32)); + + if tests + { + run_test_rig(@[ "test" ]); + } +} + +/** + * Builds and runs tests under C99, then C11, if requested, using + * `run_test_series_make()`. If run_tests is false, it just does the builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to Rig itself. + */ +fn run_tests_make( + cflags: str, + cc: str, + flags: str, +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + run_test_series_make(cflags +~ " " +~ C99OPT, cc, flags); + + if c11 + { + run_test_series_make(cflags +~ " " +~ C11OPT, cc, flags); + } +} + +/** + * Builds and runs tests under C99, then C11, if requested, using + * `run_test_series_rig()`. If run_tests is false, it just does the builds. + * @param cflags The C compiler flags. + * @param cc The C compiler. + * @param flags The flags to pass to Rig itself. + */ +fn run_tests_rig( + cflags: []str, + cc: str, + flags: []str, +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + run_test_series_rig(cflags +~ @[ C99OPT ], cc, flags); + + if c11 + { + run_test_series_rig(cflags +~ @[ C11OPT ], cc, flags); + } +} + +/** + * Runs the Karatsuba tests with `make`. + */ +fn karatsuba_make() -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + header("Running Karatsuba tests"); + + do_make(@[ "karatsuba_test" ]); +} + +/** + * Runs the Karatsuba tests with Rig. + */ +fn karatsuba_rig() -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + header("Running Karatsuba tests"); + + build_rig(RELEASE_CFLAGS, defcc, @[ "-O3" ], usize(64)); + + do_rig(@[ "karatsuba_test" ]); +} + +/** + * Builds with `make` and runs under valgrind. It runs both, bc only, then dc + * only, then the library. + */ +fn vg_make() -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + header("Running Valgrind under `make`"); + + build_make(DEBUG_CFLAGS_STR +~ " -std=c99", "gcc", "-O3 -gv", true, + defbits); + run_test_make(@[ "test" ]); + + do_make(@[ "clean_config" ]); + + build_make(DEBUG_CFLAGS_STR +~ " -std=c99", "gcc", "-O3 -gvb", true, + defbits); + run_test_make(@[ "test" ]); + + do_make(@[ "clean_config" ]); + + build_make(DEBUG_CFLAGS_STR +~ " -std=c99", "gcc", "-O3 -gvd", true, + defbits); + run_test_make(@[ "test" ]); + + do_make(@[ "clean_config" ]); + + build_make(DEBUG_CFLAGS_STR +~ " -std=c99", "gcc", "-O3 -gva", true, + defbits); + run_test_make(@[ "test" ]); + + do_make(@[ "clean_config" ]); +} + +fn vg_rig() -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + header("Running Valgrind under Rig"); + + build_rig(DEBUG_CFLAGS +~ @[ "-std=c99" ], "gcc", @[ "-O3", "-gv" ], + defbits); + run_test_rig(@[ "test" ]); + + do_rig(@[ "clean_config" ]); + + build_rig(DEBUG_CFLAGS +~ @[ "-std=c99" ], "gcc", @[ "-O3", "-gvb" ], + defbits); + run_test_rig(@[ "test" ]); + + do_rig(@[ "clean_config" ]); + + build_rig(DEBUG_CFLAGS +~ @[ "-std=c99" ], "gcc", @[ "-O3", "-gvd" ], + defbits); + run_test_rig(@[ "test" ]); + + do_rig(@[ "clean_config" ]); + + build_rig(DEBUG_CFLAGS +~ @[ "-std=c99" ], "gcc", @[ "-O3", "-gva" ], + defbits); + run_test_rig(@[ "test" ]); + + do_rig(@[ "clean_config" ]); +} + +/** + * Builds the debug series with `make` and runs the tests if `tests` allows. + * @param cc The C compiler. + */ +fn debug_make( + cc: str, +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + if cc == "clang" && sanitizers + { + run_tests_make(DEBUG_CFLAGS_STR +~ " -fsanitize=undefined", cc, "-mg"); + } + else + { + run_tests_make(DEBUG_CFLAGS_STR, cc, "-g"); + } +} + +/** + * Builds the release series with `make` and runs the tests if `tests` allows. + * @param cc The C compiler. + */ +fn release_make( + cc: str, +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + run_tests_make(RELEASE_CFLAGS_STR, cc, "-O3"); + run_lib_tests_make(RELEASE_CFLAGS_STR, cc, "-O3"); +} + +/** + * Builds the release debug series with `make` and runs the tests if `tests` + * allows. + * @param cc The C compiler. + */ +fn reldebug_make( + cc: str, +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + if cc == "clang" && sanitizers + { + run_tests_make(DEBUG_CFLAGS_STR +~ " -fsanitize=address", cc, "-mgO3"); + run_tests_make(DEBUG_CFLAGS_STR +~ " -fsanitize=memory", cc, "-mgO3"); + } + else + { + run_tests_make(DEBUG_CFLAGS_STR, cc, "-gO3"); + } + + if cc == "clang" && sanitizers + { + run_lib_tests_make(DEBUG_CFLAGS_STR +~ " -fsanitize=address", cc, + "-mgO3"); + run_lib_tests_make(DEBUG_CFLAGS_STR +~ " -fsanitize=memory", cc, + "-mgO3"); + } + else + { + run_lib_tests_make(DEBUG_CFLAGS_STR, cc, "-gO3"); + } +} + +/** + * Builds the min size release with `make` and runs the tests if `tests` allows. + * @param cc The C compiler. + */ +fn minsize_make( + cc: str, +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + run_tests_make(RELEASE_CFLAGS_STR, cc, "-Os"); + run_lib_tests_make(RELEASE_CFLAGS_STR, cc, "-Os"); +} + +/** + * Builds all sets with `make`: debug, release, release debug, and min size, and + * runs the tests if `tests` allows. + * @param cc The C compiler. + */ +fn build_set_make( + cc: str, +) -> void +{ + if !run_make + { + sys.panic("Cannot run `configure.sh` or make"); + } + + debug_make(cc); + release_make(cc); + reldebug_make(cc); + minsize_make(cc); + + if karatsuba + { + karatsuba_make(); + } + + if valgrind + { + vg_make(); + } +} + +/** + * Builds the debug series with Rig and runs the tests if `tests` allows. + * @param cc The C compiler. + */ +fn debug_rig( + cc: str, +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + if cc == "clang" && sanitizers + { + run_tests_rig(DEBUG_CFLAGS +~ @[ " -fsanitize=undefined" ], cc, + @[ "-Dmemcheck=1", "-Ddebug=1" ]); + } + else + { + run_tests_rig(DEBUG_CFLAGS, cc, @[ "-Ddebug=1" ]); + } +} + +/** + * Builds the release series with Rig and runs the tests if `tests` allows. + * @param cc The C compiler. + */ +fn release_rig( + cc: str, +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + run_tests_rig(RELEASE_CFLAGS, cc, @[ "-Doptimization=3" ]); + run_lib_tests_rig(RELEASE_CFLAGS, cc, @[ "-Doptimization=3" ]); +} + +/** + * Builds the release debug series with Rig and runs the tests if `tests` + * allows. + * @param cc The C compiler. + */ +fn reldebug_rig( + cc: str, +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + if cc == "clang" && sanitizers + { + run_tests_rig(DEBUG_CFLAGS +~ @[ " -fsanitize=address" ], cc, + @[ "-Dmemcheck=1", "-Ddebug=1", "-Doptimization=3" ]); + run_tests_rig(DEBUG_CFLAGS +~ @[ " -fsanitize=memory" ], cc, + @[ "-Dmemcheck=1", "-Ddebug=1", "-Doptimization=3" ]); + } + else + { + run_tests_rig(DEBUG_CFLAGS, cc, @[ "-gO3" ]); + } + + if cc == "clang" && sanitizers + { + run_lib_tests_rig(DEBUG_CFLAGS +~ @[ " -fsanitize=address" ], cc, + @[ "-Dmemcheck=1", "-Ddebug=1", "-Doptimization=3" ]); + run_lib_tests_rig(DEBUG_CFLAGS +~ @[ " -fsanitize=memory" ], cc, + @[ "-Dmemcheck=1", "-Ddebug=1", "-Doptimization=3" ]); + } + else + { + run_lib_tests_rig(DEBUG_CFLAGS, cc, + @[ "-Ddebug=1", "-Doptimization=3" ]); + } +} + +/** + * Builds the min size release with Rig and runs the tests if `tests` allows. + * @param cc The C compiler. + */ +fn minsize_rig( + cc: str, +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + run_tests_rig(RELEASE_CFLAGS, cc, @[ "-Doptimization=s" ]); + run_lib_tests_rig(RELEASE_CFLAGS, cc, @[ "-Doptimization=s" ]); +} + +/** + * Builds all sets with Rig: debug, release, release debug, and min size, and + * runs the tests if `tests` allows. + * @param cc The C compiler. + */ +fn build_set_rig( + cc: str, +) -> void +{ + if !run_rig + { + sys.panic("Cannot run Rig"); + } + + debug_rig(cc); + release_rig(cc); + reldebug_rig(cc); + minsize_rig(cc); + + if karatsuba + { + karatsuba_rig(); + } + + if valgrind + { + vg_rig(); + } +} + +/** + * Builds all sets with `make` under all compilers. + */ +fn build_sets_make() -> void +{ + header("Running math library under --standard with Rig"); + + build_make(DEBUG_CFLAGS_STR +~ " -std=c99", defcc, "-g", true, + defbits); + + $ bin/bc -ls << @("quit\n"); + + do_rig(@[ "clean_tests" ]); + + if clang + { + build_set_make("clang"); + } + + if gcc + { + build_set_make("gcc"); + } +} + +/** + * Builds all sets with Rig under all compilers. + */ +fn build_sets_rig() -> void +{ + header("Running math library under --standard with Rig"); + + build_rig(DEBUG_CFLAGS +~ @[ "-std=c99" ], defcc, @[ "-Ddebug=1" ], + defbits); + + $ build/bc -ls << @("quit\n"); + + do_rig(@[ "clean_tests" ]); + + if clang + { + build_set_rig("clang"); + } + + if gcc + { + build_set_rig("gcc"); + } +} + +fn build_sets() -> void +{ + if !run_make + { + build_sets_rig(); + } + else if !run_rig + { + build_sets_make(); + } + else + { + parallel.map @[ "rig", "make" ]: + (builder: str) -> void + { + if builder == "rig" + { + build_sets_rig(); + } + else if builder == "make" + { + build_sets_make(); + } + else + { + sys.panic("Bad builder: " +~ builder +~ "\n"); + } + } + } + + io.eprint("\nTests successful.\n"); +} diff --git a/contrib/bc/scripts/sqrt_frac_guess.bc b/contrib/bc/scripts/sqrt_frac_guess.bc index acbcb368d2de..4591e95a216f 100644 --- a/contrib/bc/scripts/sqrt_frac_guess.bc +++ b/contrib/bc/scripts/sqrt_frac_guess.bc @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/sqrt_int_guess.bc b/contrib/bc/scripts/sqrt_int_guess.bc index 925b7af7e103..9fabea874aeb 100644 --- a/contrib/bc/scripts/sqrt_int_guess.bc +++ b/contrib/bc/scripts/sqrt_int_guess.bc @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/sqrt_random.bc b/contrib/bc/scripts/sqrt_random.bc index 1f58c2e30c5d..08eeddab07a3 100644 --- a/contrib/bc/scripts/sqrt_random.bc +++ b/contrib/bc/scripts/sqrt_random.bc @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/scripts/sqrt_random.sh b/contrib/bc/scripts/sqrt_random.sh index e107ef532f6e..0f7013da0e0e 100755 --- a/contrib/bc/scripts/sqrt_random.sh +++ b/contrib/bc/scripts/sqrt_random.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/args.c b/contrib/bc/src/args.c index 6eba802d34ac..71a340bce1d9 100644 --- a/contrib/bc/src/args.c +++ b/contrib/bc/src/args.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/bc.c b/contrib/bc/src/bc.c index 572e42b1a16d..3e324cfb8ba0 100644 --- a/contrib/bc/src/bc.c +++ b/contrib/bc/src/bc.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/bc_fuzzer.c b/contrib/bc/src/bc_fuzzer.c index 7d7b3292b727..9c68d6acbd10 100644 --- a/contrib/bc/src/bc_fuzzer.c +++ b/contrib/bc/src/bc_fuzzer.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -36,7 +36,6 @@ #include <setjmp.h> #include <string.h> -#include <version.h> #include <status.h> #include <ossfuzz.h> #include <vm.h> diff --git a/contrib/bc/src/bc_lex.c b/contrib/bc/src/bc_lex.c index f83eaf731622..c53d583a0183 100644 --- a/contrib/bc/src/bc_lex.c +++ b/contrib/bc/src/bc_lex.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/bc_parse.c b/contrib/bc/src/bc_parse.c index cf4398709e58..f66e392a9e99 100644 --- a/contrib/bc/src/bc_parse.c +++ b/contrib/bc/src/bc_parse.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/data.c b/contrib/bc/src/data.c index bb1a6796f752..00f692a4599c 100644 --- a/contrib/bc/src/data.c +++ b/contrib/bc/src/data.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -70,8 +70,8 @@ const uchar dc_sig_msg_len = (uchar) (sizeof(dc_sig_msg) - 1); /// The copyright banner. const char bc_copyright[] = - "Copyright (c) 2018-2024 Gavin D. Howard and contributors\n" - "Report bugs at: https://git.gavinhoward.com/gavin/bc\n\n" + "Copyright (c) 2018-2025 Gavin D. Howard and contributors\n" + "Report bugs at: https://github.com/gavinhoward/bc\n\n" "This is free software with ABSOLUTELY NO WARRANTY.\n"; // clang-format on @@ -850,51 +850,51 @@ const char bc_parse_one[2] = "1"; /// A list of keywords for bc. This needs to be updated if keywords change. const BcLexKeyword bc_lex_kws[] = { - BC_LEX_KW_ENTRY("auto", 4, true), - BC_LEX_KW_ENTRY("break", 5, true), - BC_LEX_KW_ENTRY("continue", 8, false), - BC_LEX_KW_ENTRY("define", 6, true), - BC_LEX_KW_ENTRY("for", 3, true), - BC_LEX_KW_ENTRY("if", 2, true), - BC_LEX_KW_ENTRY("limits", 6, false), - BC_LEX_KW_ENTRY("return", 6, true), - BC_LEX_KW_ENTRY("while", 5, true), - BC_LEX_KW_ENTRY("halt", 4, false), - BC_LEX_KW_ENTRY("last", 4, false), - BC_LEX_KW_ENTRY("ibase", 5, true), - BC_LEX_KW_ENTRY("obase", 5, true), - BC_LEX_KW_ENTRY("scale", 5, true), + BC_LEX_KW_ENTRY("auto", 4, 1), + BC_LEX_KW_ENTRY("break", 5, 1), + BC_LEX_KW_ENTRY("continue", 8, 0), + BC_LEX_KW_ENTRY("define", 6, 1), + BC_LEX_KW_ENTRY("for", 3, 1), + BC_LEX_KW_ENTRY("if", 2, 1), + BC_LEX_KW_ENTRY("limits", 6, 0), + BC_LEX_KW_ENTRY("return", 6, 1), + BC_LEX_KW_ENTRY("while", 5, 1), + BC_LEX_KW_ENTRY("halt", 4, 0), + BC_LEX_KW_ENTRY("last", 4, 0), + BC_LEX_KW_ENTRY("ibase", 5, 1), + BC_LEX_KW_ENTRY("obase", 5, 1), + BC_LEX_KW_ENTRY("scale", 5, 1), #if BC_ENABLE_EXTRA_MATH - BC_LEX_KW_ENTRY("seed", 4, false), + BC_LEX_KW_ENTRY("seed", 4, 0), #endif // BC_ENABLE_EXTRA_MATH - BC_LEX_KW_ENTRY("length", 6, true), - BC_LEX_KW_ENTRY("print", 5, false), - BC_LEX_KW_ENTRY("sqrt", 4, true), - BC_LEX_KW_ENTRY("abs", 3, false), - BC_LEX_KW_ENTRY("is_number", 9, false), - BC_LEX_KW_ENTRY("is_string", 9, false), + BC_LEX_KW_ENTRY("length", 6, 1), + BC_LEX_KW_ENTRY("print", 5, 0), + BC_LEX_KW_ENTRY("sqrt", 4, 1), + BC_LEX_KW_ENTRY("abs", 3, 0), + BC_LEX_KW_ENTRY("is_number", 9, 0), + BC_LEX_KW_ENTRY("is_string", 9, 0), #if BC_ENABLE_EXTRA_MATH - BC_LEX_KW_ENTRY("irand", 5, false), + BC_LEX_KW_ENTRY("irand", 5, 0), #endif // BC_ENABLE_EXTRA_MATH - BC_LEX_KW_ENTRY("asciify", 7, false), - BC_LEX_KW_ENTRY("modexp", 6, false), - BC_LEX_KW_ENTRY("divmod", 6, false), - BC_LEX_KW_ENTRY("quit", 4, true), - BC_LEX_KW_ENTRY("read", 4, false), + BC_LEX_KW_ENTRY("asciify", 7, 0), + BC_LEX_KW_ENTRY("modexp", 6, 0), + BC_LEX_KW_ENTRY("divmod", 6, 0), + BC_LEX_KW_ENTRY("quit", 4, 1), + BC_LEX_KW_ENTRY("read", 4, 0), #if BC_ENABLE_EXTRA_MATH - BC_LEX_KW_ENTRY("rand", 4, false), + BC_LEX_KW_ENTRY("rand", 4, 0), #endif // BC_ENABLE_EXTRA_MATH - BC_LEX_KW_ENTRY("maxibase", 8, false), - BC_LEX_KW_ENTRY("maxobase", 8, false), - BC_LEX_KW_ENTRY("maxscale", 8, false), + BC_LEX_KW_ENTRY("maxibase", 8, 0), + BC_LEX_KW_ENTRY("maxobase", 8, 0), + BC_LEX_KW_ENTRY("maxscale", 8, 0), #if BC_ENABLE_EXTRA_MATH - BC_LEX_KW_ENTRY("maxrand", 7, false), + BC_LEX_KW_ENTRY("maxrand", 7, 0), #endif // BC_ENABLE_EXTRA_MATH - BC_LEX_KW_ENTRY("line_length", 11, false), - BC_LEX_KW_ENTRY("global_stacks", 13, false), - BC_LEX_KW_ENTRY("leading_zero", 12, false), - BC_LEX_KW_ENTRY("stream", 6, false), - BC_LEX_KW_ENTRY("else", 4, false), + BC_LEX_KW_ENTRY("line_length", 11, 0), + BC_LEX_KW_ENTRY("global_stacks", 13, 0), + BC_LEX_KW_ENTRY("leading_zero", 12, 0), + BC_LEX_KW_ENTRY("stream", 6, 0), + BC_LEX_KW_ENTRY("else", 4, 0), }; /// The length of the list of bc keywords. @@ -917,64 +917,64 @@ _Static_assert(sizeof(bc_lex_kws) / sizeof(BcLexKeyword) == BC_LEX_NKWS, const uint8_t bc_parse_exprs[] = { // Starts with BC_LEX_EOF. - BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, true), + BC_PARSE_EXPR_ENTRY(0, 0, 1, 1, 1, 1, 1, 1), // Starts with BC_LEX_OP_MULTIPLY if extra math is enabled, BC_LEX_OP_DIVIDE // otherwise. - BC_PARSE_EXPR_ENTRY(true, true, true, true, true, true, true, true), + BC_PARSE_EXPR_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), // Starts with BC_LEX_OP_REL_EQ if extra math is enabled, BC_LEX_OP_REL_LT // otherwise. - BC_PARSE_EXPR_ENTRY(true, true, true, true, true, true, true, true), + BC_PARSE_EXPR_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), #if BC_ENABLE_EXTRA_MATH // Starts with BC_LEX_OP_ASSIGN_POWER. - BC_PARSE_EXPR_ENTRY(true, true, true, true, true, true, true, true), + BC_PARSE_EXPR_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), // Starts with BC_LEX_OP_ASSIGN_RSHIFT. - BC_PARSE_EXPR_ENTRY(true, true, false, false, true, true, false, false), + BC_PARSE_EXPR_ENTRY(1, 1, 0, 0, 1, 1, 0, 0), // Starts with BC_LEX_RBRACKET. - BC_PARSE_EXPR_ENTRY(false, false, false, false, true, true, true, false), + BC_PARSE_EXPR_ENTRY(0, 0, 0, 0, 1, 1, 1, 0), // Starts with BC_LEX_KW_BREAK. - BC_PARSE_EXPR_ENTRY(false, false, false, false, false, false, false, false), + BC_PARSE_EXPR_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), // Starts with BC_LEX_KW_HALT. - BC_PARSE_EXPR_ENTRY(false, true, true, true, true, true, true, false), + BC_PARSE_EXPR_ENTRY(0, 1, 1, 1, 1, 1, 1, 0), // Starts with BC_LEX_KW_SQRT. - BC_PARSE_EXPR_ENTRY(true, true, true, true, true, true, true, true), + BC_PARSE_EXPR_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), // Starts with BC_LEX_KW_QUIT. - BC_PARSE_EXPR_ENTRY(false, true, true, true, true, true, true, true), + BC_PARSE_EXPR_ENTRY(0, 1, 1, 1, 1, 1, 1, 1), // Starts with BC_LEX_KW_GLOBAL_STACKS. - BC_PARSE_EXPR_ENTRY(true, true, false, false, 0, 0, 0, 0) + BC_PARSE_EXPR_ENTRY(1, 1, 0, 0, 0, 0, 0, 0) #else // BC_ENABLE_EXTRA_MATH // Starts with BC_LEX_OP_ASSIGN_PLUS. - BC_PARSE_EXPR_ENTRY(true, true, true, false, false, true, true, false), + BC_PARSE_EXPR_ENTRY(1, 1, 1, 0, 0, 1, 1, 0), // Starts with BC_LEX_COMMA. - BC_PARSE_EXPR_ENTRY(false, false, false, false, false, true, true, true), + BC_PARSE_EXPR_ENTRY(0, 0, 0, 0, 0, 1, 1, 1), // Starts with BC_LEX_KW_AUTO. - BC_PARSE_EXPR_ENTRY(false, false, false, false, false, false, false, false), + BC_PARSE_EXPR_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), // Starts with BC_LEX_KW_WHILE. - BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, false), + BC_PARSE_EXPR_ENTRY(0, 0, 1, 1, 1, 1, 1, 0), // Starts with BC_LEX_KW_SQRT. - BC_PARSE_EXPR_ENTRY(true, true, true, true, true, true, true, false), + BC_PARSE_EXPR_ENTRY(1, 1, 1, 1, 1, 1, 1, 0), // Starts with BC_LEX_KW_MAXIBASE. - BC_PARSE_EXPR_ENTRY(true, true, true, true, true, true, true, false), + BC_PARSE_EXPR_ENTRY(1, 1, 1, 1, 1, 1, 1, 0), // Starts with BC_LEX_KW_ELSE. - BC_PARSE_EXPR_ENTRY(false, 0, 0, 0, 0, 0, 0, 0) + BC_PARSE_EXPR_ENTRY(0, 0, 0, 0, 0, 0, 0, 0) #endif // BC_ENABLE_EXTRA_MATH }; @@ -982,25 +982,25 @@ const uint8_t bc_parse_exprs[] = { /// An array of data for operators that correspond to token types. Note that a /// lower precedence *value* means a higher precedence. const uchar bc_parse_ops[] = { - BC_PARSE_OP(0, false), BC_PARSE_OP(0, false), BC_PARSE_OP(1, false), - BC_PARSE_OP(1, false), + BC_PARSE_OP(0, 0), BC_PARSE_OP(0, 0), BC_PARSE_OP(1, 0), + BC_PARSE_OP(1, 0), #if BC_ENABLE_EXTRA_MATH - BC_PARSE_OP(2, false), + BC_PARSE_OP(2, 0), #endif // BC_ENABLE_EXTRA_MATH - BC_PARSE_OP(4, false), BC_PARSE_OP(5, true), BC_PARSE_OP(5, true), - BC_PARSE_OP(5, true), BC_PARSE_OP(6, true), BC_PARSE_OP(6, true), + BC_PARSE_OP(4, 0), BC_PARSE_OP(5, 1), BC_PARSE_OP(5, 1), + BC_PARSE_OP(5, 1), BC_PARSE_OP(6, 1), BC_PARSE_OP(6, 1), #if BC_ENABLE_EXTRA_MATH - BC_PARSE_OP(3, false), BC_PARSE_OP(7, true), BC_PARSE_OP(7, true), + BC_PARSE_OP(3, 0), BC_PARSE_OP(7, 1), BC_PARSE_OP(7, 1), #endif // BC_ENABLE_EXTRA_MATH - BC_PARSE_OP(9, true), BC_PARSE_OP(9, true), BC_PARSE_OP(9, true), - BC_PARSE_OP(9, true), BC_PARSE_OP(9, true), BC_PARSE_OP(9, true), - BC_PARSE_OP(11, true), BC_PARSE_OP(10, true), BC_PARSE_OP(8, false), - BC_PARSE_OP(8, false), BC_PARSE_OP(8, false), BC_PARSE_OP(8, false), - BC_PARSE_OP(8, false), BC_PARSE_OP(8, false), + BC_PARSE_OP(9, 1), BC_PARSE_OP(9, 1), BC_PARSE_OP(9, 1), + BC_PARSE_OP(9, 1), BC_PARSE_OP(9, 1), BC_PARSE_OP(9, 1), + BC_PARSE_OP(11, 1), BC_PARSE_OP(10, 1), BC_PARSE_OP(8, 0), + BC_PARSE_OP(8, 0), BC_PARSE_OP(8, 0), BC_PARSE_OP(8, 0), + BC_PARSE_OP(8, 0), BC_PARSE_OP(8, 0), #if BC_ENABLE_EXTRA_MATH - BC_PARSE_OP(8, false), BC_PARSE_OP(8, false), BC_PARSE_OP(8, false), + BC_PARSE_OP(8, 0), BC_PARSE_OP(8, 0), BC_PARSE_OP(8, 0), #endif // BC_ENABLE_EXTRA_MATH - BC_PARSE_OP(8, false), + BC_PARSE_OP(8, 0), }; // These identify what tokens can come after expressions in certain cases. diff --git a/contrib/bc/src/dc.c b/contrib/bc/src/dc.c index 37419acd4bd4..1376f5e00a95 100644 --- a/contrib/bc/src/dc.c +++ b/contrib/bc/src/dc.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/dc_fuzzer.c b/contrib/bc/src/dc_fuzzer.c index adaf486a668c..0cb12e4fdf4c 100644 --- a/contrib/bc/src/dc_fuzzer.c +++ b/contrib/bc/src/dc_fuzzer.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -36,7 +36,6 @@ #include <setjmp.h> #include <string.h> -#include <version.h> #include <status.h> #include <ossfuzz.h> #include <vm.h> diff --git a/contrib/bc/src/dc_lex.c b/contrib/bc/src/dc_lex.c index d5131b45331d..763957edc2ee 100644 --- a/contrib/bc/src/dc_lex.c +++ b/contrib/bc/src/dc_lex.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/dc_parse.c b/contrib/bc/src/dc_parse.c index 1996120461a8..b607bfd4c39f 100644 --- a/contrib/bc/src/dc_parse.c +++ b/contrib/bc/src/dc_parse.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/file.c b/contrib/bc/src/file.c index 9baea585603b..bc8097c5b8ce 100644 --- a/contrib/bc/src/file.c +++ b/contrib/bc/src/file.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -291,11 +291,12 @@ bc_file_vprintf(BcFile* restrict f, const char* fmt, va_list args) // This mess is to silence a warning. #if BC_CLANG +#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wformat-nonliteral" #endif // BC_CLANG r = vfprintf(f->f, fmt, args); #if BC_CLANG -#pragma clang diagnostic warning "-Wformat-nonliteral" +#pragma clang diagnostic pop #endif // BC_CLANG // Just print and propagate the error. diff --git a/contrib/bc/src/history.c b/contrib/bc/src/history.c index 32a19f71d777..594cc4eb46de 100644 --- a/contrib/bc/src/history.c +++ b/contrib/bc/src/history.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -199,6 +199,7 @@ bc_history_init(BcHistory* h) h->el = el_init(vm->name, stdin, stdout, stderr); if (BC_ERR(h->el == NULL)) bc_vm_fatalError(BC_ERR_FATAL_ALLOC_ERR); + el_set(h->el, EL_SIGNAL, 1); // I want history and a prompt. history(h->hist, &bc_history_event, H_SETSIZE, 100); @@ -264,18 +265,7 @@ bc_history_line(BcHistory* h, BcVec* vec, const char* prompt) errno = EINTR; // Get the line. - // - // XXX: Why have a macro here? Because macOS needs to be special. Honestly, - // it's starting to feel special like Windows at this point. Anyway, the - // second SIGWINCH signal of multiple will return a valid line length on - // macOS, so we need to allow for that on macOS. However, FreeBSD's editline - // is different and will mess up the terminal if we do it that way. - // - // There is one limitation with this, however: Ctrl+D won't work on macOS. - // But it's because of macOS that this problem exists, and I can't really do - // anything about it. So macOS should fix their broken editline; once they - // do, I'll fix Ctrl+D on macOS. - while (BC_HISTORY_INVALID_LINE(line, len)) + while (line == NULL && len == -1 && errno == EINTR) { line = el_gets(h->el, &len); bc_history_use_prompt = false; diff --git a/contrib/bc/src/lang.c b/contrib/bc/src/lang.c index 7968bcbd9dfd..2a62509c98b0 100644 --- a/contrib/bc/src/lang.c +++ b/contrib/bc/src/lang.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -73,9 +73,10 @@ bc_func_insert(BcFunc* f, BcProgram* p, char* name, BcType type, size_t line) BcAuto* aptr = bc_vec_item(&f->autos, i); // If they match, barf. - if (BC_ERR(idx == aptr->idx && type == aptr->type)) + if (BC_ERR(idx == aptr->idx && + BC_IS_ARRAY(type) == BC_IS_ARRAY(aptr->type))) { - const char* array = type == BC_TYPE_ARRAY ? "[]" : ""; + const char* array = BC_IS_ARRAY(type) ? "[]" : ""; bc_error(BC_ERR_PARSE_DUP_LOCAL, line, name, array); } diff --git a/contrib/bc/src/lex.c b/contrib/bc/src/lex.c index 37e52c33fffd..6b639a65b6a8 100644 --- a/contrib/bc/src/lex.c +++ b/contrib/bc/src/lex.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/library.c b/contrib/bc/src/library.c index 5451e91684a2..282dddff27d2 100644 --- a/contrib/bc/src/library.c +++ b/contrib/bc/src/library.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/main.c b/contrib/bc/src/main.c index da4c27156029..749248048e78 100644 --- a/contrib/bc/src/main.c +++ b/contrib/bc/src/main.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -47,7 +47,6 @@ #include <setjmp.h> -#include <version.h> #include <status.h> #include <vm.h> #include <bc.h> diff --git a/contrib/bc/src/num.c b/contrib/bc/src/num.c index 83f84edb91fc..2cdc6eea0087 100644 --- a/contrib/bc/src/num.c +++ b/contrib/bc/src/num.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -1093,6 +1093,7 @@ bc_num_as(BcNum* a, BcNum* b, BcNum* restrict c, size_t sub) max_len = max_int + max_rdx; + // Figure out the max length and also if we need to reverse the operation. if (do_sub) { // Check whether b has to be subtracted from a or a from b. diff --git a/contrib/bc/src/opt.c b/contrib/bc/src/opt.c index a1c8e813b1ea..6a24291ac401 100644 --- a/contrib/bc/src/opt.c +++ b/contrib/bc/src/opt.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/parse.c b/contrib/bc/src/parse.c index 0107d4cdef0d..026607994984 100644 --- a/contrib/bc/src/parse.c +++ b/contrib/bc/src/parse.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/program.c b/contrib/bc/src/program.c index 3b6ebc003a3e..af032c5f1e86 100644 --- a/contrib/bc/src/program.c +++ b/contrib/bc/src/program.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -623,6 +623,9 @@ bc_program_prepResult(BcProgram* p) { BcResult* res = bc_vec_pushEmpty(&p->results); + // Mark a result as not retired. + p->nresults += 1; + bc_result_clear(res); return res; @@ -646,6 +649,8 @@ bc_program_const(BcProgram* p, const char* code, size_t* bgn) BcConst* c = bc_vec_item(&p->consts, bc_program_index(code, bgn)); BcBigDig base = BC_PROG_IBASE(p); + assert(p->nresults == 1); + // Only reparse if the base changed. if (c->base != base) { @@ -673,6 +678,9 @@ bc_program_const(BcProgram* p, const char* code, size_t* bgn) bc_num_createCopy(&r->d.n, &c->num); BC_SIG_UNLOCK; + + // XXX: Make sure to clear the number of results. + p->nresults -= 1; } /** @@ -692,6 +700,8 @@ bc_program_op(BcProgram* p, uchar inst) res = bc_program_prepResult(p); + assert(p->nresults == 1); + bc_program_binOpPrep(p, &opd1, &n1, &opd2, &n2, 1); BC_SIG_LOCK; @@ -709,7 +719,7 @@ bc_program_op(BcProgram* p, uchar inst) // Run the operation. This also executes an item of an array. bc_program_ops[idx](n1, n2, &res->d.n, BC_PROG_SCALE(p)); - bc_program_retire(p, 1, 2); + bc_program_retire(p, 2); } /** @@ -1060,6 +1070,8 @@ bc_program_unary(BcProgram* p, uchar inst) res = bc_program_prepResult(p); + assert(p->nresults == 1); + bc_program_prep(p, &ptr, &num, 1); BC_SIG_LOCK; @@ -1070,7 +1082,7 @@ bc_program_unary(BcProgram* p, uchar inst) // This calls a function that is in an array. bc_program_unarys[inst - BC_INST_NEG](res, num); - bc_program_retire(p, 1, 1); + bc_program_retire(p, 1); } /** @@ -1091,6 +1103,8 @@ bc_program_logical(BcProgram* p, uchar inst) res = bc_program_prepResult(p); + assert(p->nresults == 1); + // All logical operators (except boolean not, which is taken care of by // bc_program_unary()), are binary operators. bc_program_binOpPrep(p, &opd1, &n1, &opd2, &n2, 1); @@ -1165,7 +1179,7 @@ bc_program_logical(BcProgram* p, uchar inst) if (cond) bc_num_one(&res->d.n); - bc_program_retire(p, 1, 2); + bc_program_retire(p, 2); } /** @@ -1880,6 +1894,8 @@ bc_program_return(BcProgram* p, uchar inst) res = bc_program_prepResult(p); + assert(p->nresults == 1); + // If we are returning normally... if (inst == BC_INST_RET) { @@ -1930,7 +1946,7 @@ bc_program_return(BcProgram* p, uchar inst) BC_SIG_LOCK; // When we retire, pop all of the unused results. - bc_program_retire(p, 1, nresults); + bc_program_retire(p, nresults); // Pop the globals, if necessary. if (BC_G) bc_program_popGlobals(p, false); @@ -1974,6 +1990,8 @@ bc_program_builtin(BcProgram* p, uchar inst) res = bc_program_prepResult(p); + assert(p->nresults == 1); + bc_program_operand(p, &opd, &num, 1); assert(num != NULL); @@ -2102,7 +2120,7 @@ bc_program_builtin(BcProgram* p, uchar inst) BC_SIG_UNLOCK; } - bc_program_retire(p, 1, 1); + bc_program_retire(p, 1); } /** @@ -2127,6 +2145,7 @@ bc_program_divmod(BcProgram* p) // the capacity is enough due to the line above. res2 = bc_program_prepResult(p); res = bc_program_prepResult(p); + assert(p->nresults == 2); // Prepare the operands. bc_program_binOpPrep(p, &opd1, &n1, &opd2, &n2, 2); @@ -2144,7 +2163,7 @@ bc_program_divmod(BcProgram* p) // Execute. bc_num_divmod(n1, n2, &res2->d.n, &res->d.n, BC_PROG_SCALE(p)); - bc_program_retire(p, 2, 2); + bc_program_retire(p, 2); } /** @@ -2176,6 +2195,8 @@ bc_program_modexp(BcProgram* p) res = bc_program_prepResult(p); + assert(p->nresults == 1); + // Get the first operand and typecheck. bc_program_operand(p, &r1, &n1, 3); bc_program_type_num(r1, n1); @@ -2198,7 +2219,7 @@ bc_program_modexp(BcProgram* p) bc_num_modexp(n1, n2, n3, &res->d.n); - bc_program_retire(p, 1, 3); + bc_program_retire(p, 3); } /** @@ -2737,6 +2758,9 @@ bc_program_pushSeed(BcProgram* p) BcResult* res; res = bc_program_prepResult(p); + + assert(p->nresults == 1); + res->t = BC_RESULT_SEED; BC_SIG_LOCK; @@ -2747,6 +2771,9 @@ bc_program_pushSeed(BcProgram* p) BC_SIG_UNLOCK; bc_num_createFromRNG(&res->d.n, &p->rng); + + // XXX: Clear the number of results. + p->nresults = 0; } #endif // BC_ENABLE_EXTRA_MATH @@ -2932,6 +2959,9 @@ bc_program_init(BcProgram* p) bc_map_init(&p->const_map); bc_vec_init(&p->strs, sizeof(char*), BC_DTOR_NONE); bc_map_init(&p->str_map); + + // XXX: Clear the number of results. + p->nresults = 0; } void @@ -2985,13 +3015,18 @@ bc_program_reset(BcProgram* p) if (BC_IS_DC) bc_vec_npop(&p->tail_calls, p->tail_calls.len - 1); #endif // DC_ENABLED -#if BC_ENABLED // Clear the stack if we are in bc. We have to do this in bc because bc's // stack is implicit. // // XXX: We don't do this in dc because other dc implementations don't. - if (BC_IS_BC || !BC_I) bc_vec_popAll(&p->results); + // However, we *MUST* pop the items for results that are not retired yet. + if (BC_IS_DC && BC_I) bc_vec_npop(&p->results, p->nresults); + else bc_vec_popAll(&p->results); + // Now clear how many results there are. + p->nresults = 0; + +#if BC_ENABLED // Clear the globals' stacks. if (BC_G) bc_program_popGlobals(p, true); #endif // BC_ENABLED @@ -3039,10 +3074,12 @@ bc_program_exec(BcProgram* p) #if BC_HAS_COMPUTED_GOTO #if BC_GCC +#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpedantic" #endif // BC_GCC #if BC_CLANG +#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wgnu-label-as-value" #endif // BC_CLANG @@ -3050,11 +3087,11 @@ bc_program_exec(BcProgram* p) BC_PROG_LBLS_ASSERT; #if BC_CLANG -#pragma clang diagnostic warning "-Wgnu-label-as-value" +#pragma clang diagnostic pop #endif // BC_CLANG #if BC_GCC -#pragma GCC diagnostic warning "-Wpedantic" +#pragma GCC diagnostic pop #endif // BC_GCC // BC_INST_INVALID is a marker for the end so that we don't have to have an @@ -3085,10 +3122,12 @@ bc_program_exec(BcProgram* p) #if BC_HAS_COMPUTED_GOTO #if BC_GCC +#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpedantic" #endif // BC_GCC #if BC_CLANG +#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wgnu-label-as-value" #endif // BC_CLANG @@ -3711,11 +3750,11 @@ bc_program_exec(BcProgram* p) #if BC_HAS_COMPUTED_GOTO #if BC_CLANG -#pragma clang diagnostic warning "-Wgnu-label-as-value" +#pragma clang diagnostic pop #endif // BC_CLANG #if BC_GCC -#pragma GCC diagnostic warning "-Wpedantic" +#pragma GCC diagnostic pop #endif // BC_GCC #else // BC_HAS_COMPUTED_GOTO diff --git a/contrib/bc/src/rand.c b/contrib/bc/src/rand.c index 0f9950788f7c..3aaf905f8520 100644 --- a/contrib/bc/src/rand.c +++ b/contrib/bc/src/rand.c @@ -13,7 +13,7 @@ * This code is under the following license: * * Copyright (c) 2014-2017 Melissa O'Neill and PCG Project contributors - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/contrib/bc/src/read.c b/contrib/bc/src/read.c index 01d804848945..650c2813bd1e 100644 --- a/contrib/bc/src/read.c +++ b/contrib/bc/src/read.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -171,34 +171,23 @@ bc_read_chars(BcVec* vec, const char* prompt) // If interupted... if (errno == EINTR) { - int sig; - // Jump out if we are supposed to quit, which certain signals // will require. if (vm->status == (sig_atomic_t) BC_STATUS_QUIT) BC_JMP; assert(vm->sig != 0); - sig = (int) vm->sig; - // Clear the signal and status. vm->sig = 0; vm->status = (sig_atomic_t) BC_STATUS_SUCCESS; -#ifndef _WIN32 - // We don't want to print anything on a SIGWINCH. - if (sig != SIGWINCH) -#endif // _WIN32 + // Print the ready message and prompt again. + bc_file_puts(&vm->fout, bc_flush_none, bc_program_ready_msg); + if (BC_PROMPT) { - // Print the ready message and prompt again. - bc_file_puts(&vm->fout, bc_flush_none, - bc_program_ready_msg); - if (BC_PROMPT) - { - bc_file_puts(&vm->fout, bc_flush_none, prompt); - } - bc_file_flush(&vm->fout, bc_flush_none); + bc_file_puts(&vm->fout, bc_flush_none, prompt); } + bc_file_flush(&vm->fout, bc_flush_none); BC_SIG_UNLOCK; diff --git a/contrib/bc/src/vector.c b/contrib/bc/src/vector.c index 4b49e61968df..7d5c0bc7376f 100644 --- a/contrib/bc/src/vector.c +++ b/contrib/bc/src/vector.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/src/vm.c b/contrib/bc/src/vm.c index 636cd4ba0c1b..95bfd73f19e5 100644 --- a/contrib/bc/src/vm.c +++ b/contrib/bc/src/vm.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -124,27 +124,6 @@ bc_vm_jmp(void) static void bc_vm_sig(int sig) { -#if BC_ENABLE_EDITLINE - // Editline needs this to resize the terminal. This also needs to come first - // because a resize always needs to happen. - if (sig == SIGWINCH) - { - if (BC_TTY) - { - el_resize(vm->history.el); - - // If the signal was a SIGWINCH, clear it because we don't need to - // print a stack trace in that case. - if (vm->sig == SIGWINCH) - { - vm->sig = 0; - } - } - - return; - } -#endif // BC_ENABLE_EDITLINE - // There is already a signal in flight if this is true. if (vm->status == (sig_atomic_t) BC_STATUS_QUIT || vm->sig != 0) { @@ -217,27 +196,23 @@ bc_vm_sigaction(void) struct sigaction sa; sigemptyset(&sa.sa_mask); - sa.sa_flags = BC_ENABLE_EDITLINE ? 0 : SA_NODEFER; + sa.sa_flags = SA_NODEFER; // This mess is to silence a warning on Clang with regards to glibc's // sigaction handler, which activates the warning here. #if BC_CLANG +#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdisabled-macro-expansion" #endif // BC_CLANG sa.sa_handler = bc_vm_sig; #if BC_CLANG -#pragma clang diagnostic warning "-Wdisabled-macro-expansion" +#pragma clang diagnostic pop #endif // BC_CLANG sigaction(SIGTERM, &sa, NULL); sigaction(SIGQUIT, &sa, NULL); sigaction(SIGINT, &sa, NULL); -#if BC_ENABLE_EDITLINE - // Editline needs this to resize the terminal. - if (BC_TTY) sigaction(SIGWINCH, &sa, NULL); -#endif // BC_ENABLE_EDITLINE - #if BC_ENABLE_HISTORY if (BC_TTY) sigaction(SIGHUP, &sa, NULL); #endif // BC_ENABLE_HISTORY @@ -544,7 +519,7 @@ bc_vm_envArgs(const char* const env_args_name, BcBigDig* scale, BcBigDig* ibase, if (env_args == NULL) return; - // Windows already allocates, so we don't need to. + // Windows already allocates, so we don't need to. #ifndef _WIN32 start = buf = vm->env_args_buffer = bc_vm_strdup(env_args); #else // _WIN32 diff --git a/contrib/bc/tests/all.sh b/contrib/bc/tests/all.sh index 28631c048e71..d5d084341e36 100755 --- a/contrib/bc/tests/all.sh +++ b/contrib/bc/tests/all.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -39,7 +39,7 @@ usage() { if [ $# -eq 1 ]; then printf '%s\n\n' "$1" fi - print 'usage: %s [-n] dir [run_extra_tests] [run_stack_tests] [gen_tests] [run_problematic_tests] [time_tests] [exec args...]\n' \ + print 'usage: %s [-n] dir [run_extra_tests] [run_stack_tests] [gen_tests] [run_problematic_tests] [exec args...]\n' \ "$script" exit 1 } @@ -103,15 +103,6 @@ else fi if [ "$#" -lt 1 ]; then - time_tests=0 - check_bool_arg "$time_tests" -else - time_tests="$1" - shift - check_bool_arg "$time_tests" -fi - -if [ "$#" -lt 1 ]; then exe="$testdir/../bin/$d" check_exec_arg "$exe" else @@ -155,10 +146,10 @@ while read t; do fi if [ "$pll" -ne 0 ]; then - sh "$testdir/test.sh" "$d" "$t" "$generate_tests" "$time_tests" "$exe" "$@" & + sh "$testdir/test.sh" "$d" "$t" "$generate_tests" "$exe" "$@" & pids="$pids $!" else - sh "$testdir/test.sh" "$d" "$t" "$generate_tests" "$time_tests" "$exe" "$@" + sh "$testdir/test.sh" "$d" "$t" "$generate_tests" "$exe" "$@" fi done < "$testdir/$d/all.txt" @@ -174,19 +165,11 @@ fi # Script tests. if [ "$pll" -ne 0 ]; then sh "$testdir/scripts.sh" "$d" "$extra" "$run_stack_tests" "$generate_tests" \ - "$time_tests" "$exe" "$@" & + "$exe" "$@" & pids="$pids $!" else sh "$testdir/scripts.sh" -n "$d" "$extra" "$run_stack_tests" "$generate_tests" \ - "$time_tests" "$exe" "$@" -fi - -# Read tests. -if [ "$pll" -ne 0 ]; then - sh "$testdir/read.sh" "$d" "$exe" "$@" & - pids="$pids $!" -else - sh "$testdir/read.sh" "$d" "$exe" "$@" + "$exe" "$@" fi # Error tests. @@ -198,8 +181,9 @@ else fi # Test all the files in the errors directory. While the other error test (in -# tests/errors.sh) does a test for every line, this does one test per file, but -# it runs the file through stdin and as a file on the command-line. +# tests/errors.sh) does a test for every line of certain error files in the main +# directory, this does one test per file in the errors directory, but it runs +# the file through stdin and as a file on the command-line. for testfile in $testdir/$d/errors/*.txt; do b=$(basename "$testfile") @@ -213,14 +197,6 @@ for testfile in $testdir/$d/errors/*.txt; do done -# Other tests. -if [ "$pll" -ne 0 ]; then - sh "$testdir/other.sh" "$d" "$extra" "$exe" "$@" & - pids="$pids $!" -else - sh "$testdir/other.sh" "$d" "$extra" "$exe" "$@" -fi - if [ "$pll" -ne 0 ]; then exit_err=0 diff --git a/contrib/bc/tests/bc/all.txt b/contrib/bc/tests/bc/all.txt index c710534aac1b..2fd582118adb 100644 --- a/contrib/bc/tests/bc/all.txt +++ b/contrib/bc/tests/bc/all.txt @@ -1,7 +1,132 @@ decimal -print -parse -lib2 +print_002 +print_003 +print_004 +print_005 +print_006 +print_007 +print_008 +print_009 +print_011 +print_012 +print_013 +print_014 +print_015 +print_016 +print_017 +print_018 +print_019 +print_020 +print_021 +print_022 +print_023 +print_024 +print_025 +print_026 +print_027 +print_028 +print_029 +print_030 +print_031 +print_032 +print_033 +print_034 +print_035 +print_036 +print_037 +print_038 +print_039 +print_040 +print_041 +print_042 +print_043 +print_044 +print_045 +print_046 +print_047 +print_048 +print_049 +print_050 +print_051 +print_052 +print_053 +print_054 +print_055 +print_056 +print_057 +print_058 +print_059 +print_060 +print_061 +print_062 +print_063 +print_064 +print_065 +print_066 +print_067 +print_068 +print_069 +print_070 +print_071 +print_072 +print_073 +print_074 +print_075 +print_076 +print_077 +print_078 +print_079 +print_080 +print_081 +print_082 +print_083 +print_084 +print_085 +print_086 +print_087 +print_088 +print_089 +print_090 +print_091 +print_092 +print_093 +print_094 +print_095 +print_096 +print_097 +print_098 +print_099 +print_100 +parse_02 +parse_03 +parse_04 +parse_05 +parse_06 +parse_07 +parse_08 +parse_09 +parse_11 +parse_12 +parse_13 +parse_14 +parse_15 +parse_16 +lib2_p +lib2_r +lib2_ceil +lib2_log +lib2_root +lib2_gcd +lib2_bytes +lib2_pi +lib2_tan +lib2_a2 +lib2_r2d +lib2_d2r +lib2_fac +lib2_perm +lib2_uint +lib2_rand print2 length scale diff --git a/contrib/bc/tests/bc/errors/39.txt b/contrib/bc/tests/bc/errors/39.txt new file mode 100644 index 000000000000..104d16136b22 --- /dev/null +++ b/contrib/bc/tests/bc/errors/39.txt @@ -0,0 +1 @@ +define a(*t[], t[]) {} diff --git a/contrib/bc/tests/bc/lib2.txt b/contrib/bc/tests/bc/lib2.txt deleted file mode 100644 index 74e1256d7bbf..000000000000 --- a/contrib/bc/tests/bc/lib2.txt +++ /dev/null @@ -1,477 +0,0 @@ -p(2, 8.0000) -p(2, 8.0001) -p(2, -8.0001) -p(1024,32.1) -r(0, 0) -r(0, 1) -r(0, 100) -r(1, 0) -r(1, 3) -r(1.4, 0) -r(1.5, 0) -r(34.45, 2) -r(64.1223, 4) -r(283.1983893, 6) -r(283.1983895, 6) -r(283.1983899, 6) -r(99.999999999, 5) -r(-1, 0) -r(-1, 3) -r(-1.4, 0) -r(-1.5, 0) -r(-34.45, 2) -r(-64.1223, 4) -r(-283.1983893, 6) -r(-283.1983895, 6) -r(-283.1983899, 6) -r(-99.999999999, 5) -ceil(0, 0) -ceil(0, 1) -ceil(0, 100) -ceil(1, 0) -ceil(1, 3) -ceil(1.4, 0) -ceil(1.5, 0) -ceil(34.45, 2) -ceil(64.1223, 4) -ceil(283.1983893, 6) -ceil(283.1983895, 6) -ceil(283.1983899, 6) -ceil(99.999999999, 5) -ceil(-1, 0) -ceil(-1, 3) -ceil(-1.4, 0) -ceil(-1.5, 0) -ceil(-34.45, 2) -ceil(-64.1223, 4) -ceil(-283.1983893, 6) -ceil(-283.1983895, 6) -ceil(-283.1983899, 6) -ceil(-99.999999999, 5) -ceil(8770735.0705156250000000000, 0) -l2(0) -l2(1) -l2(2) -l2(7) -l2(7.9999999999999999999999) -l2(8) -l10(0) -l10(1) -l10(2) -l10(5) -l10(9) -l10(9.999999999999999999999) -l10(10) -l10(11) -l10(99) -l10(99.99999999999999999999) -l10(100) -l2(-1) -l2(-2) -l2(-7) -l2(-7.9999999999999999999999) -l2(-8) -l10(-1) -l10(-2) -l10(-5) -l10(-9) -l10(-9.999999999999999999999) -l10(-10) -l10(-11) -l10(-99) -l10(-99.99999999999999999999) -l10(-100) -cbrt(27) -cbrt(-27) -cbrt(4096) -cbrt(-4096) -root(0, 3) -root(0, 4) -root(0, 5) -root(0.0000000000000, 3) -root(0.0000000000000, 4) -root(0.0000000000000, 5) -root(16, 4) -root(3125, 5) -root(-3125, 5) -gcd(285, 35) -gcd(1, 6) -gcd(5, 1) -gcd(8, 12) -gcd(40, 4096) -lcm(40, 4096) -lcm(555, 55) -ubytes(0) -ubytes(1) -ubytes(2) -ubytes(254) -ubytes(255) -ubytes(256) -ubytes(65535) -ubytes(65536) -ubytes(131072) -ubytes(4294967295) -ubytes(4294967296) -ubytes(18446744073709551615) -ubytes(18446744073709551616) -sbytes(0) -sbytes(1) -sbytes(-1) -sbytes(2) -sbytes(127) -sbytes(128) -sbytes(-127) -sbytes(-128) -sbytes(-129) -sbytes(254) -sbytes(255) -sbytes(256) -sbytes(32767) -sbytes(32768) -sbytes(-32767) -sbytes(-32768) -sbytes(65535) -sbytes(65536) -sbytes(131072) -sbytes(2147483647) -sbytes(2147483648) -sbytes(2147483649) -sbytes(-2147483647) -sbytes(-2147483648) -sbytes(-2147483649) -sbytes(4294967295) -sbytes(4294967296) -sbytes(9223372036854775807) -sbytes(9223372036854775808) -sbytes(9223372036854775809) -sbytes(-9223372036854775807) -sbytes(-9223372036854775808) -sbytes(-9223372036854775809) -pi(0) -pi(1) -pi(2) -pi(5) -pi(100) -p=pi(100) -t(0) -t(1) -t(-1) -t(2) -t(-2) -t(3) -t(-3) -t(p) -t(-p) -t(p/2) -t(-p/2) -t(p/3) -t(-p/3) -t(p/4) -t(-p/4) -t(p/5) -t(-p/5) -t(p/6) -t(-p/6) -t(p/7) -t(-p/7) -t(p/8) -t(-p/8) -t(p/9) -t(-p/9) -t(p/10) -t(-p/10) -t(p/15) -t(-p/15) -a2(0, 1) -a2(1, 1) -a2(2, 1) -a2(1, 2) -a2(0, -1) -a2(1, -1) -a2(2, -1) -a2(1, -2) -a2(-1, 1) -a2(-2, 1) -a2(-1, 2) -a2(-1, -1) -a2(-2, -1) -a2(-1, -2) -a2(1, 0) -a2(2, 0) -a2(-1, 0) -a2(-2, 0) -r2d(p) -r2d(2 * p) -r2d(p / 2) -r2d(p / 4) -r2d(p / 3) -r2d(p / 5) -r2d(p / 6) -r2d(p / 10) -r2d(-p) -r2d(2 * -p) -r2d(-p / 2) -r2d(-p / 4) -r2d(-p / 3) -r2d(-p / 5) -r2d(-p / 6) -r2d(-p / 10) -d2r(180) -d2r(360) -d2r(90) -d2r(45) -d2r(120) -d2r(72) -d2r(60) -d2r(36) -d2r(-180) -d2r(-360) -d2r(-90) -d2r(-45) -d2r(-120) -d2r(-72) -d2r(-60) -d2r(-36) -f(0) -f(1) -f(2) -f(3) -f(4) -f(5) -perm(10, 2) -comb(10, 2) -perm(6, 2) -comb(6, 2) -perm(12, 10) -comb(12, 10) -perm(24, 15) -comb(24, 15) -binary(0) -hex(0) -binary(1) -hex(1) -binary(2) -hex(2) -binary(15) -hex(15) -binary(16) -hex(16) -uint(0) -int(0) -uint(1) -int(1) -int(-1) -uint(127) -int(127) -int(-127) -uint(128) -int(128) -int(-128) -uint(129) -int(129) -int(-129) -uint(255) -int(255) -int(-255) -uint(256) -int(256) -int(-256) -uint(32767) -int(32767) -int(-32767) -uint(32768) -int(32768) -int(-32768) -uint(32769) -int(32769) -int(-32769) -uint(65535) -int(65535) -int(-65535) -uint(65536) -int(65536) -int(-65536) -uint(2147483647) -int(2147483647) -int(-2147483647) -uint(2147483648) -int(2147483648) -int(-2147483648) -uint(2147483649) -int(2147483649) -int(-2147483649) -uint(4294967295) -int(4294967295) -int(-4294967295) -uint(4294967296) -int(4294967296) -int(-4294967296) -uint8(0) -int8(0) -uint16(0) -int16(0) -uint32(0) -int32(0) -uint64(0) -int64(0) -uint8(1) -int8(1) -int8(-1) -uint16(1) -int16(1) -int16(-1) -uint32(1) -int32(1) -int32(-1) -uint64(1) -int64(1) -int64(-1) -uint8(127) -int8(127) -int8(-127) -uint16(127) -int16(127) -int16(-127) -uint32(127) -int32(127) -int32(-127) -uint64(127) -int64(127) -int64(-127) -uint8(128) -int8(128) -int8(-128) -uint16(128) -int16(128) -int16(-128) -uint32(128) -int32(128) -int32(-128) -uint64(128) -int64(128) -int64(-128) -uint8(129) -int8(129) -int8(-129) -uint16(129) -int16(129) -int16(-129) -uint32(129) -int32(129) -int32(-129) -uint64(129) -int64(129) -int64(-129) -uint8(255) -int8(255) -int8(-255) -uint16(255) -int16(255) -int16(-255) -uint32(255) -int32(255) -int32(-255) -uint64(255) -int64(255) -int64(-255) -uint8(256) -int8(256) -int8(-256) -uint16(256) -int16(256) -int16(-256) -uint32(256) -int32(256) -int32(-256) -uint64(256) -int64(256) -int64(-256) -uint16(32767) -int16(32767) -int16(-32767) -uint32(32767) -int32(32767) -int32(-32767) -uint64(32767) -int64(32767) -int64(-32767) -uint16(32768) -int16(32768) -int16(-32768) -uint32(32768) -int32(32768) -int32(-32768) -uint64(32768) -int64(32768) -int64(-32768) -uint16(32769) -int16(32769) -int16(-32769) -uint32(32769) -int32(32769) -int32(-32769) -uint64(32769) -int64(32769) -int64(-32769) -uint16(65535) -int16(65535) -int16(-65535) -uint32(65535) -int32(65535) -int32(-65535) -uint64(65535) -int64(65535) -int64(-65535) -uint16(65536) -int16(65536) -int16(-65536) -uint32(65536) -int32(65536) -int32(-65536) -uint64(65536) -int64(65536) -int64(-65536) -uint32(2147483647) -int32(2147483647) -int32(-2147483647) -uint64(2147483647) -int64(2147483647) -int64(-2147483647) -uint32(2147483648) -int32(2147483648) -int32(-2147483648) -uint64(2147483648) -int64(2147483648) -int64(-2147483648) -uint32(2147483649) -int32(2147483649) -int32(-2147483649) -uint64(2147483649) -int64(2147483649) -int64(-2147483649) -uint32(4294967295) -int32(4294967295) -int32(-4294967295) -uint64(4294967295) -int64(4294967295) -int64(-4294967295) -uint32(4294967296) -int32(4294967296) -int32(-4294967296) -uint64(4294967296) -int64(4294967296) -int64(-4294967296) -uint(-3) -uint(3.928375) -int(4.000000) -b = brand() -b < 2 -b >= 0 -i = irand(maxrand() + 1) -i <= maxrand() -i >= 0 -f = frand(10) -scale(f) == 10 -fi = ifrand(123, 28) -scale(fi) == 28 -fi < 128 diff --git a/contrib/bc/tests/bc/lib2_a2.txt b/contrib/bc/tests/bc/lib2_a2.txt new file mode 100644 index 000000000000..a0b24942676d --- /dev/null +++ b/contrib/bc/tests/bc/lib2_a2.txt @@ -0,0 +1,18 @@ +a2(0, 1) +a2(1, 1) +a2(2, 1) +a2(1, 2) +a2(0, -1) +a2(1, -1) +a2(2, -1) +a2(1, -2) +a2(-1, 1) +a2(-2, 1) +a2(-1, 2) +a2(-1, -1) +a2(-2, -1) +a2(-1, -2) +a2(1, 0) +a2(2, 0) +a2(-1, 0) +a2(-2, 0) diff --git a/contrib/bc/tests/bc/lib2_a2_results.txt b/contrib/bc/tests/bc/lib2_a2_results.txt new file mode 100644 index 000000000000..4915b6ad142e --- /dev/null +++ b/contrib/bc/tests/bc/lib2_a2_results.txt @@ -0,0 +1,18 @@ +0 +.78539816339744830961 +1.10714871779409050301 +.46364760900080611621 +3.14159265358979323846 +2.35619449019234492884 +2.03444393579570273544 +2.67794504458898712224 +-.78539816339744830961 +-1.10714871779409050301 +-.46364760900080611621 +-2.35619449019234492884 +-2.03444393579570273544 +-2.67794504458898712224 +1.57079632679489661923 +1.57079632679489661923 +-1.57079632679489661923 +-1.57079632679489661923 diff --git a/contrib/bc/tests/bc/lib2_bytes.txt b/contrib/bc/tests/bc/lib2_bytes.txt new file mode 100644 index 000000000000..79183d7a88b0 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_bytes.txt @@ -0,0 +1,46 @@ +ubytes(0) +ubytes(1) +ubytes(2) +ubytes(254) +ubytes(255) +ubytes(256) +ubytes(65535) +ubytes(65536) +ubytes(131072) +ubytes(4294967295) +ubytes(4294967296) +ubytes(18446744073709551615) +ubytes(18446744073709551616) +sbytes(0) +sbytes(1) +sbytes(-1) +sbytes(2) +sbytes(127) +sbytes(128) +sbytes(-127) +sbytes(-128) +sbytes(-129) +sbytes(254) +sbytes(255) +sbytes(256) +sbytes(32767) +sbytes(32768) +sbytes(-32767) +sbytes(-32768) +sbytes(65535) +sbytes(65536) +sbytes(131072) +sbytes(2147483647) +sbytes(2147483648) +sbytes(2147483649) +sbytes(-2147483647) +sbytes(-2147483648) +sbytes(-2147483649) +sbytes(4294967295) +sbytes(4294967296) +sbytes(9223372036854775807) +sbytes(9223372036854775808) +sbytes(9223372036854775809) +sbytes(-9223372036854775807) +sbytes(-9223372036854775808) +sbytes(-9223372036854775809) diff --git a/contrib/bc/tests/bc/lib2_bytes_results.txt b/contrib/bc/tests/bc/lib2_bytes_results.txt new file mode 100644 index 000000000000..494be6df11f6 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_bytes_results.txt @@ -0,0 +1,46 @@ +1 +1 +1 +1 +1 +2 +2 +4 +4 +4 +8 +8 +16 +1 +1 +1 +1 +1 +2 +1 +1 +2 +2 +2 +2 +2 +4 +2 +2 +4 +4 +4 +4 +8 +8 +4 +4 +8 +8 +8 +8 +16 +16 +8 +8 +16 diff --git a/contrib/bc/tests/bc/lib2_ceil.txt b/contrib/bc/tests/bc/lib2_ceil.txt new file mode 100644 index 000000000000..6da43cc70822 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_ceil.txt @@ -0,0 +1,24 @@ +ceil(0, 0) +ceil(0, 1) +ceil(0, 100) +ceil(1, 0) +ceil(1, 3) +ceil(1.4, 0) +ceil(1.5, 0) +ceil(34.45, 2) +ceil(64.1223, 4) +ceil(283.1983893, 6) +ceil(283.1983895, 6) +ceil(283.1983899, 6) +ceil(99.999999999, 5) +ceil(-1, 0) +ceil(-1, 3) +ceil(-1.4, 0) +ceil(-1.5, 0) +ceil(-34.45, 2) +ceil(-64.1223, 4) +ceil(-283.1983893, 6) +ceil(-283.1983895, 6) +ceil(-283.1983899, 6) +ceil(-99.999999999, 5) +ceil(8770735.0705156250000000000, 0) diff --git a/contrib/bc/tests/bc/lib2_ceil_results.txt b/contrib/bc/tests/bc/lib2_ceil_results.txt new file mode 100644 index 000000000000..2e9ba9c25022 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_ceil_results.txt @@ -0,0 +1,24 @@ +0 +0 +0 +1 +1.000 +2 +2 +34.45 +64.1223 +283.198390 +283.198390 +283.198390 +100.00000 +-1 +-1.000 +-2 +-2 +-34.45 +-64.1223 +-283.198390 +-283.198390 +-283.198390 +-100.00000 +8770736 diff --git a/contrib/bc/tests/bc/lib2_d2r.txt b/contrib/bc/tests/bc/lib2_d2r.txt new file mode 100644 index 000000000000..dd908be8ec43 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_d2r.txt @@ -0,0 +1,16 @@ +d2r(180) +d2r(360) +d2r(90) +d2r(45) +d2r(120) +d2r(72) +d2r(60) +d2r(36) +d2r(-180) +d2r(-360) +d2r(-90) +d2r(-45) +d2r(-120) +d2r(-72) +d2r(-60) +d2r(-36) diff --git a/contrib/bc/tests/bc/lib2_d2r_results.txt b/contrib/bc/tests/bc/lib2_d2r_results.txt new file mode 100644 index 000000000000..a64165087783 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_d2r_results.txt @@ -0,0 +1,16 @@ +3.14159265358979323846 +6.28318530717958647692 +1.57079632679489661923 +.78539816339744830961 +2.09439510239319549230 +1.25663706143591729538 +1.04719755119659774615 +.62831853071795864769 +-3.14159265358979323846 +-6.28318530717958647692 +-1.57079632679489661923 +-.78539816339744830961 +-2.09439510239319549230 +-1.25663706143591729538 +-1.04719755119659774615 +-.62831853071795864769 diff --git a/contrib/bc/tests/bc/lib2_fac.txt b/contrib/bc/tests/bc/lib2_fac.txt new file mode 100644 index 000000000000..1da42385ea44 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_fac.txt @@ -0,0 +1,6 @@ +f(0) +f(1) +f(2) +f(3) +f(4) +f(5) diff --git a/contrib/bc/tests/bc/lib2_fac_results.txt b/contrib/bc/tests/bc/lib2_fac_results.txt new file mode 100644 index 000000000000..b1fa2729fd55 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_fac_results.txt @@ -0,0 +1,6 @@ +1 +1 +2 +6 +24 +120 diff --git a/contrib/bc/tests/bc/lib2_gcd.txt b/contrib/bc/tests/bc/lib2_gcd.txt new file mode 100644 index 000000000000..e7e69a65a841 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_gcd.txt @@ -0,0 +1,7 @@ +gcd(285, 35) +gcd(1, 6) +gcd(5, 1) +gcd(8, 12) +gcd(40, 4096) +lcm(40, 4096) +lcm(555, 55) diff --git a/contrib/bc/tests/bc/lib2_gcd_results.txt b/contrib/bc/tests/bc/lib2_gcd_results.txt new file mode 100644 index 000000000000..952305d197ff --- /dev/null +++ b/contrib/bc/tests/bc/lib2_gcd_results.txt @@ -0,0 +1,7 @@ +5 +1 +1 +4 +8 +20480 +6105 diff --git a/contrib/bc/tests/bc/lib2_log.txt b/contrib/bc/tests/bc/lib2_log.txt new file mode 100644 index 000000000000..8b5c62e6d71a --- /dev/null +++ b/contrib/bc/tests/bc/lib2_log.txt @@ -0,0 +1,32 @@ +l2(0) +l2(1) +l2(2) +l2(7) +l2(7.9999999999999999999999) +l2(8) +l10(0) +l10(1) +l10(2) +l10(5) +l10(9) +l10(9.999999999999999999999) +l10(10) +l10(11) +l10(99) +l10(99.99999999999999999999) +l10(100) +l2(-1) +l2(-2) +l2(-7) +l2(-7.9999999999999999999999) +l2(-8) +l10(-1) +l10(-2) +l10(-5) +l10(-9) +l10(-9.999999999999999999999) +l10(-10) +l10(-11) +l10(-99) +l10(-99.99999999999999999999) +l10(-100) diff --git a/contrib/bc/tests/bc/lib2_log_results.txt b/contrib/bc/tests/bc/lib2_log_results.txt new file mode 100644 index 000000000000..05e0c2b0209a --- /dev/null +++ b/contrib/bc/tests/bc/lib2_log_results.txt @@ -0,0 +1,32 @@ +-14426950408889634073599246810018921374265.01964302164603717234 +0 +1.00000000000000000000 +2.80735492205760410744 +2.99999999999999999999 +3.00000000000000000000 +-4342944819032518276511289189166050822943.53857128275332257904 +0 +.30102999566398119521 +.69897000433601880478 +.95424250943932487459 +.99999999999999999999 +1.00000000000000000000 +1.04139268515822504075 +1.99563519459754991534 +1.99999999999999999999 +2.00000000000000000000 +-14426950408889634073599246810018921374265.01964302164603717234 +-14426950408889634073599246810018921374265.01964302164603717234 +-14426950408889634073599246810018921374265.01964302164603717234 +-144269504088896340735992468100189213742664594.88013355604393225658 +-14426950408889634073599246810018921374265.01964302164603717234 +-4342944819032518276511289189166050822943.53857128275332257904 +-4342944819032518276511289189166050822943.53857128275332257904 +-4342944819032518276511289189166050822943.53857128275332257904 +-4342944819032518276511289189166050822943.53857128275332257904 +-434294481903251827651128918916605082294396.66367028674257491242 +-4342944819032518276511289189166050822943.53857128275332257904 +-4342944819032518276511289189166050822943.53857128275332257904 +-4342944819032518276511289189166050822943.53857128275332257904 +-4342944819032518276511289189166050822943.53857128275332257904 +-4342944819032518276511289189166050822943.53857128275332257904 diff --git a/contrib/bc/tests/bc/lib2_p.txt b/contrib/bc/tests/bc/lib2_p.txt new file mode 100644 index 000000000000..7026d5812845 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_p.txt @@ -0,0 +1,4 @@ +p(2, 8.0000) +p(2, 8.0001) +p(2, -8.0001) +p(1024,32.1) diff --git a/contrib/bc/tests/bc/lib2_p_results.txt b/contrib/bc/tests/bc/lib2_p_results.txt new file mode 100644 index 000000000000..54089deab2b4 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_p_results.txt @@ -0,0 +1,5 @@ +256.00000000000000000000 +256.01774518281640171326 +.00390597924876622489 +42719740718418201647900434123391042292054090447133055398940832156444\ +39451561281100045924173873151.99999999999999999999 diff --git a/contrib/bc/tests/bc/lib2_perm.txt b/contrib/bc/tests/bc/lib2_perm.txt new file mode 100644 index 000000000000..84fe6afd1e52 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_perm.txt @@ -0,0 +1,9 @@ +perm(10, 2) +comb(10, 2) +perm(6, 2) +comb(6, 2) +perm(12, 10) +comb(12, 10) +perm(24, 15) +comb(24, 15) + diff --git a/contrib/bc/tests/bc/lib2_perm_results.txt b/contrib/bc/tests/bc/lib2_perm_results.txt new file mode 100644 index 000000000000..bf57dc0ea5f8 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_perm_results.txt @@ -0,0 +1,8 @@ +90 +45 +30 +15 +239500800 +66 +1709789466857472000 +1307504 diff --git a/contrib/bc/tests/bc/lib2_pi.txt b/contrib/bc/tests/bc/lib2_pi.txt new file mode 100644 index 000000000000..25bef3101e0b --- /dev/null +++ b/contrib/bc/tests/bc/lib2_pi.txt @@ -0,0 +1,5 @@ +pi(0) +pi(1) +pi(2) +pi(5) +pi(100) diff --git a/contrib/bc/tests/bc/lib2_pi_results.txt b/contrib/bc/tests/bc/lib2_pi_results.txt new file mode 100644 index 000000000000..90975cb6a726 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_pi_results.txt @@ -0,0 +1,6 @@ +3 +3.1 +3.14 +3.14159 +3.141592653589793238462643383279502884197169399375105820974944592307\ +8164062862089986280348253421170679 diff --git a/contrib/bc/tests/bc/lib2_r.txt b/contrib/bc/tests/bc/lib2_r.txt new file mode 100644 index 000000000000..2f82d85d9042 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_r.txt @@ -0,0 +1,23 @@ +r(0, 0) +r(0, 1) +r(0, 100) +r(1, 0) +r(1, 3) +r(1.4, 0) +r(1.5, 0) +r(34.45, 2) +r(64.1223, 4) +r(283.1983893, 6) +r(283.1983895, 6) +r(283.1983899, 6) +r(99.999999999, 5) +r(-1, 0) +r(-1, 3) +r(-1.4, 0) +r(-1.5, 0) +r(-34.45, 2) +r(-64.1223, 4) +r(-283.1983893, 6) +r(-283.1983895, 6) +r(-283.1983899, 6) +r(-99.999999999, 5) diff --git a/contrib/bc/tests/bc/lib2_r2d.txt b/contrib/bc/tests/bc/lib2_r2d.txt new file mode 100644 index 000000000000..904e55df9cd1 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_r2d.txt @@ -0,0 +1,17 @@ +p=pi(100) +r2d(p) +r2d(2 * p) +r2d(p / 2) +r2d(p / 4) +r2d(p / 3) +r2d(p / 5) +r2d(p / 6) +r2d(p / 10) +r2d(-p) +r2d(2 * -p) +r2d(-p / 2) +r2d(-p / 4) +r2d(-p / 3) +r2d(-p / 5) +r2d(-p / 6) +r2d(-p / 10) diff --git a/contrib/bc/tests/bc/lib2_r2d_results.txt b/contrib/bc/tests/bc/lib2_r2d_results.txt new file mode 100644 index 000000000000..38abe6dfdd52 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_r2d_results.txt @@ -0,0 +1,16 @@ +180.00000000000000000000 +360.00000000000000000000 +89.99999999999999999992 +44.99999999999999999967 +59.99999999999999999975 +35.99999999999999999985 +29.99999999999999999959 +17.99999999999999999964 +-180.00000000000000000000 +-360.00000000000000000000 +-89.99999999999999999992 +-44.99999999999999999967 +-59.99999999999999999975 +-35.99999999999999999985 +-29.99999999999999999959 +-17.99999999999999999964 diff --git a/contrib/bc/tests/bc/lib2_r_results.txt b/contrib/bc/tests/bc/lib2_r_results.txt new file mode 100644 index 000000000000..4ae686836a41 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_r_results.txt @@ -0,0 +1,23 @@ +0 +0 +0 +1 +1.000 +1 +2 +34.45 +64.1223 +283.198389 +283.198390 +283.198390 +100.00000 +-1 +-1.000 +-1 +-2 +-34.45 +-64.1223 +-283.198389 +-283.198390 +-283.198390 +-100.00000 diff --git a/contrib/bc/tests/bc/lib2_rand.txt b/contrib/bc/tests/bc/lib2_rand.txt new file mode 100644 index 000000000000..a9d94509c79f --- /dev/null +++ b/contrib/bc/tests/bc/lib2_rand.txt @@ -0,0 +1,11 @@ +b = brand() +b < 2 +b >= 0 +i = irand(maxrand() + 1) +i <= maxrand() +i >= 0 +f = frand(10) +scale(f) == 10 +fi = ifrand(123, 28) +scale(fi) == 28 +fi < 128 diff --git a/contrib/bc/tests/bc/lib2_rand_results.txt b/contrib/bc/tests/bc/lib2_rand_results.txt new file mode 100644 index 000000000000..fcb49fa99454 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_rand_results.txt @@ -0,0 +1,7 @@ +1 +1 +1 +1 +1 +1 +1 diff --git a/contrib/bc/tests/bc/lib2_root.txt b/contrib/bc/tests/bc/lib2_root.txt new file mode 100644 index 000000000000..6a0558414c44 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_root.txt @@ -0,0 +1,13 @@ +cbrt(27) +cbrt(-27) +cbrt(4096) +cbrt(-4096) +root(0, 3) +root(0, 4) +root(0, 5) +root(0.0000000000000, 3) +root(0.0000000000000, 4) +root(0.0000000000000, 5) +root(16, 4) +root(3125, 5) +root(-3125, 5) diff --git a/contrib/bc/tests/bc/lib2_root_results.txt b/contrib/bc/tests/bc/lib2_root_results.txt new file mode 100644 index 000000000000..74ebfc514abf --- /dev/null +++ b/contrib/bc/tests/bc/lib2_root_results.txt @@ -0,0 +1,13 @@ +3.00000000000000000000 +-3.00000000000000000000 +16.00000000000000000000 +-16.00000000000000000000 +0 +0 +0 +0 +0 +0 +2.00000000000000000000 +5.00000000000000000000 +-5.00000000000000000000 diff --git a/contrib/bc/tests/bc/lib2_tan.txt b/contrib/bc/tests/bc/lib2_tan.txt new file mode 100644 index 000000000000..624e798b71d8 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_tan.txt @@ -0,0 +1,30 @@ +p=pi(100) +t(0) +t(1) +t(-1) +t(2) +t(-2) +t(3) +t(-3) +t(p) +t(-p) +t(p/2) +t(-p/2) +t(p/3) +t(-p/3) +t(p/4) +t(-p/4) +t(p/5) +t(-p/5) +t(p/6) +t(-p/6) +t(p/7) +t(-p/7) +t(p/8) +t(-p/8) +t(p/9) +t(-p/9) +t(p/10) +t(-p/10) +t(p/15) +t(-p/15) diff --git a/contrib/bc/tests/bc/lib2_tan_results.txt b/contrib/bc/tests/bc/lib2_tan_results.txt new file mode 100644 index 000000000000..53fafa8d496b --- /dev/null +++ b/contrib/bc/tests/bc/lib2_tan_results.txt @@ -0,0 +1,29 @@ +0 +1.55740772465490223050 +-1.55740772465490223050 +-2.18503986326151899164 +2.18503986326151899164 +-.14254654307427780529 +.14254654307427780529 +0 +0 +769230769230769230769.23076923076923076923 +-769230769230769230769.23076923076923076923 +1.73205080756887729351 +-1.73205080756887729351 +.99999999999999999998 +-.99999999999999999998 +.72654252800536088589 +-.72654252800536088589 +.57735026918962576449 +-.57735026918962576449 +.48157461880752864432 +-.48157461880752864432 +.41421356237309504879 +-.41421356237309504879 +.36397023426620236134 +-.36397023426620236134 +.32491969623290632614 +-.32491969623290632614 +.21255656167002212525 +-.21255656167002212525 diff --git a/contrib/bc/tests/bc/lib2_uint.txt b/contrib/bc/tests/bc/lib2_uint.txt new file mode 100644 index 000000000000..a3c62519ca94 --- /dev/null +++ b/contrib/bc/tests/bc/lib2_uint.txt @@ -0,0 +1,218 @@ +binary(0) +hex(0) +binary(1) +hex(1) +binary(2) +hex(2) +binary(15) +hex(15) +binary(16) +hex(16) +uint(0) +int(0) +uint(1) +int(1) +int(-1) +uint(127) +int(127) +int(-127) +uint(128) +int(128) +int(-128) +uint(129) +int(129) +int(-129) +uint(255) +int(255) +int(-255) +uint(256) +int(256) +int(-256) +uint(32767) +int(32767) +int(-32767) +uint(32768) +int(32768) +int(-32768) +uint(32769) +int(32769) +int(-32769) +uint(65535) +int(65535) +int(-65535) +uint(65536) +int(65536) +int(-65536) +uint(2147483647) +int(2147483647) +int(-2147483647) +uint(2147483648) +int(2147483648) +int(-2147483648) +uint(2147483649) +int(2147483649) +int(-2147483649) +uint(4294967295) +int(4294967295) +int(-4294967295) +uint(4294967296) +int(4294967296) +int(-4294967296) +uint8(0) +int8(0) +uint16(0) +int16(0) +uint32(0) +int32(0) +uint64(0) +int64(0) +uint8(1) +int8(1) +int8(-1) +uint16(1) +int16(1) +int16(-1) +uint32(1) +int32(1) +int32(-1) +uint64(1) +int64(1) +int64(-1) +uint8(127) +int8(127) +int8(-127) +uint16(127) +int16(127) +int16(-127) +uint32(127) +int32(127) +int32(-127) +uint64(127) +int64(127) +int64(-127) +uint8(128) +int8(128) +int8(-128) +uint16(128) +int16(128) +int16(-128) +uint32(128) +int32(128) +int32(-128) +uint64(128) +int64(128) +int64(-128) +uint8(129) +int8(129) +int8(-129) +uint16(129) +int16(129) +int16(-129) +uint32(129) +int32(129) +int32(-129) +uint64(129) +int64(129) +int64(-129) +uint8(255) +int8(255) +int8(-255) +uint16(255) +int16(255) +int16(-255) +uint32(255) +int32(255) +int32(-255) +uint64(255) +int64(255) +int64(-255) +uint8(256) +int8(256) +int8(-256) +uint16(256) +int16(256) +int16(-256) +uint32(256) +int32(256) +int32(-256) +uint64(256) +int64(256) +int64(-256) +uint16(32767) +int16(32767) +int16(-32767) +uint32(32767) +int32(32767) +int32(-32767) +uint64(32767) +int64(32767) +int64(-32767) +uint16(32768) +int16(32768) +int16(-32768) +uint32(32768) +int32(32768) +int32(-32768) +uint64(32768) +int64(32768) +int64(-32768) +uint16(32769) +int16(32769) +int16(-32769) +uint32(32769) +int32(32769) +int32(-32769) +uint64(32769) +int64(32769) +int64(-32769) +uint16(65535) +int16(65535) +int16(-65535) +uint32(65535) +int32(65535) +int32(-65535) +uint64(65535) +int64(65535) +int64(-65535) +uint16(65536) +int16(65536) +int16(-65536) +uint32(65536) +int32(65536) +int32(-65536) +uint64(65536) +int64(65536) +int64(-65536) +uint32(2147483647) +int32(2147483647) +int32(-2147483647) +uint64(2147483647) +int64(2147483647) +int64(-2147483647) +uint32(2147483648) +int32(2147483648) +int32(-2147483648) +uint64(2147483648) +int64(2147483648) +int64(-2147483648) +uint32(2147483649) +int32(2147483649) +int32(-2147483649) +uint64(2147483649) +int64(2147483649) +int64(-2147483649) +uint32(4294967295) +int32(4294967295) +int32(-4294967295) +uint64(4294967295) +int64(4294967295) +int64(-4294967295) +uint32(4294967296) +int32(4294967296) +int32(-4294967296) +uint64(4294967296) +int64(4294967296) +int64(-4294967296) +uint(-3) +uint(3.928375) +int(4.000000) diff --git a/contrib/bc/tests/bc/lib2_results.txt b/contrib/bc/tests/bc/lib2_uint_results.txt index e5ddb51642a5..7e494e2a0812 100644 --- a/contrib/bc/tests/bc/lib2_results.txt +++ b/contrib/bc/tests/bc/lib2_uint_results.txt @@ -1,252 +1,3 @@ -256.00000000000000000000 -256.01774518281640171326 -.00390597924876622489 -42719740718418201647900434123391042292054090447133055398940832156444\ -39451561281100045924173873151.99999999999999999999 -0 -0 -0 -1 -1.000 -1 -2 -34.45 -64.1223 -283.198389 -283.198390 -283.198390 -100.00000 --1 --1.000 --1 --2 --34.45 --64.1223 --283.198389 --283.198390 --283.198390 --100.00000 -0 -0 -0 -1 -1.000 -2 -2 -34.45 -64.1223 -283.198390 -283.198390 -283.198390 -100.00000 --1 --1.000 --2 --2 --34.45 --64.1223 --283.198390 --283.198390 --283.198390 --100.00000 -8770736 --14426950408889634073599246810018921374265.01964302164603717234 -0 -1.00000000000000000000 -2.80735492205760410744 -2.99999999999999999999 -3.00000000000000000000 --4342944819032518276511289189166050822943.53857128275332257904 -0 -.30102999566398119521 -.69897000433601880478 -.95424250943932487459 -.99999999999999999999 -1.00000000000000000000 -1.04139268515822504075 -1.99563519459754991534 -1.99999999999999999999 -2.00000000000000000000 --14426950408889634073599246810018921374265.01964302164603717234 --14426950408889634073599246810018921374265.01964302164603717234 --14426950408889634073599246810018921374265.01964302164603717234 --144269504088896340735992468100189213742664594.88013355604393225658 --14426950408889634073599246810018921374265.01964302164603717234 --4342944819032518276511289189166050822943.53857128275332257904 --4342944819032518276511289189166050822943.53857128275332257904 --4342944819032518276511289189166050822943.53857128275332257904 --4342944819032518276511289189166050822943.53857128275332257904 --434294481903251827651128918916605082294396.66367028674257491242 --4342944819032518276511289189166050822943.53857128275332257904 --4342944819032518276511289189166050822943.53857128275332257904 --4342944819032518276511289189166050822943.53857128275332257904 --4342944819032518276511289189166050822943.53857128275332257904 --4342944819032518276511289189166050822943.53857128275332257904 -3.00000000000000000000 --3.00000000000000000000 -16.00000000000000000000 --16.00000000000000000000 -0 -0 -0 -0 -0 -0 -2.00000000000000000000 -5.00000000000000000000 --5.00000000000000000000 -5 -1 -1 -4 -8 -20480 -6105 -1 -1 -1 -1 -1 -2 -2 -4 -4 -4 -8 -8 -16 -1 -1 -1 -1 -1 -2 -1 -1 -2 -2 -2 -2 -2 -4 -2 -2 -4 -4 -4 -4 -8 -8 -4 -4 -8 -8 -8 -8 -16 -16 -8 -8 -16 -3 -3.1 -3.14 -3.14159 -3.141592653589793238462643383279502884197169399375105820974944592307\ -8164062862089986280348253421170679 -0 -1.55740772465490223050 --1.55740772465490223050 --2.18503986326151899164 -2.18503986326151899164 --.14254654307427780529 -.14254654307427780529 -0 -0 -769230769230769230769.23076923076923076923 --769230769230769230769.23076923076923076923 -1.73205080756887729351 --1.73205080756887729351 -.99999999999999999998 --.99999999999999999998 -.72654252800536088589 --.72654252800536088589 -.57735026918962576449 --.57735026918962576449 -.48157461880752864432 --.48157461880752864432 -.41421356237309504879 --.41421356237309504879 -.36397023426620236134 --.36397023426620236134 -.32491969623290632614 --.32491969623290632614 -.21255656167002212525 --.21255656167002212525 -0 -.78539816339744830961 -1.10714871779409050301 -.46364760900080611621 -3.14159265358979323846 -2.35619449019234492884 -2.03444393579570273544 -2.67794504458898712224 --.78539816339744830961 --1.10714871779409050301 --.46364760900080611621 --2.35619449019234492884 --2.03444393579570273544 --2.67794504458898712224 -1.57079632679489661923 -1.57079632679489661923 --1.57079632679489661923 --1.57079632679489661923 -180.00000000000000000000 -360.00000000000000000000 -89.99999999999999999992 -44.99999999999999999967 -59.99999999999999999975 -35.99999999999999999985 -29.99999999999999999959 -17.99999999999999999964 --180.00000000000000000000 --360.00000000000000000000 --89.99999999999999999992 --44.99999999999999999967 --59.99999999999999999975 --35.99999999999999999985 --29.99999999999999999959 --17.99999999999999999964 -3.14159265358979323846 -6.28318530717958647692 -1.57079632679489661923 -.78539816339744830961 -2.09439510239319549230 -1.25663706143591729538 -1.04719755119659774615 -.62831853071795864769 --3.14159265358979323846 --6.28318530717958647692 --1.57079632679489661923 --.78539816339744830961 --2.09439510239319549230 --1.25663706143591729538 --1.04719755119659774615 --.62831853071795864769 -1 -1 -2 -6 -24 -120 -90 -45 -30 -15 -239500800 -66 -1709789466857472000 -1307504 0 0 1 @@ -704,10 +455,3 @@ FF FF FF FF 00 00 00 00 Error: -3 is negative. Error: 3.928375 is not an integer. Error: 4.000000 is not an integer. -1 -1 -1 -1 -1 -1 -1 diff --git a/contrib/bc/tests/bc/scripts/add.bc b/contrib/bc/tests/bc/scripts/add_00100.bc index 9cffa2c28750..687ba889c307 100644 --- a/contrib/bc/tests/bc/scripts/add.bc +++ b/contrib/bc/tests/bc/scripts/add_00100.bc @@ -10,7 +10,7 @@ for (i = 0; i <= len; ++i) { a[i] } -for (i = 1; i <= 10000; ++i) { +for (i = 1; i <= 100; ++i) { for (j = 0; j < len; ++j) { a[i] + a[j] } diff --git a/contrib/bc/tests/bc/scripts/add_00200.bc b/contrib/bc/tests/bc/scripts/add_00200.bc new file mode 100644 index 000000000000..21112195c65d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_00200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 101; i <= 200; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_00300.bc b/contrib/bc/tests/bc/scripts/add_00300.bc new file mode 100644 index 000000000000..1b2cb7784754 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_00300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 201; i <= 300; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_00400.bc b/contrib/bc/tests/bc/scripts/add_00400.bc new file mode 100644 index 000000000000..e8a8def0450c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_00400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 301; i <= 400; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_00500.bc b/contrib/bc/tests/bc/scripts/add_00500.bc new file mode 100644 index 000000000000..971991e0f457 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_00500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 401; i <= 500; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_00600.bc b/contrib/bc/tests/bc/scripts/add_00600.bc new file mode 100644 index 000000000000..dc758b170e5e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_00600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 501; i <= 600; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_00700.bc b/contrib/bc/tests/bc/scripts/add_00700.bc new file mode 100644 index 000000000000..6819689561d5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_00700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 601; i <= 700; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_00800.bc b/contrib/bc/tests/bc/scripts/add_00800.bc new file mode 100644 index 000000000000..593144457957 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_00800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 701; i <= 800; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_00900.bc b/contrib/bc/tests/bc/scripts/add_00900.bc new file mode 100644 index 000000000000..a6cee4ff0b39 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_00900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 801; i <= 900; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_01000.bc b/contrib/bc/tests/bc/scripts/add_01000.bc new file mode 100644 index 000000000000..6f3d42a3590f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_01000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 901; i <= 1000; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_01100.bc b/contrib/bc/tests/bc/scripts/add_01100.bc new file mode 100644 index 000000000000..98866672d814 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_01100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1001; i <= 1100; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_01200.bc b/contrib/bc/tests/bc/scripts/add_01200.bc new file mode 100644 index 000000000000..82b74b103fb0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_01200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1101; i <= 1200; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_01300.bc b/contrib/bc/tests/bc/scripts/add_01300.bc new file mode 100644 index 000000000000..45e0ea4637cb --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_01300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1201; i <= 1300; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_01400.bc b/contrib/bc/tests/bc/scripts/add_01400.bc new file mode 100644 index 000000000000..123fba19dcc0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_01400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1301; i <= 1400; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_01500.bc b/contrib/bc/tests/bc/scripts/add_01500.bc new file mode 100644 index 000000000000..59a2a0dac4d1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_01500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1401; i <= 1500; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_01600.bc b/contrib/bc/tests/bc/scripts/add_01600.bc new file mode 100644 index 000000000000..2df24a0c006c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_01600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1501; i <= 1600; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_01700.bc b/contrib/bc/tests/bc/scripts/add_01700.bc new file mode 100644 index 000000000000..0646f0b881c8 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_01700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1601; i <= 1700; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_01800.bc b/contrib/bc/tests/bc/scripts/add_01800.bc new file mode 100644 index 000000000000..65a725c9cc0c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_01800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1701; i <= 1800; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_01900.bc b/contrib/bc/tests/bc/scripts/add_01900.bc new file mode 100644 index 000000000000..b73af970dd5c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_01900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1801; i <= 1900; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_02000.bc b/contrib/bc/tests/bc/scripts/add_02000.bc new file mode 100644 index 000000000000..ea76021121c3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_02000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1901; i <= 2000; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_02100.bc b/contrib/bc/tests/bc/scripts/add_02100.bc new file mode 100644 index 000000000000..0bc93bf08aa2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_02100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2001; i <= 2100; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_02200.bc b/contrib/bc/tests/bc/scripts/add_02200.bc new file mode 100644 index 000000000000..ad1aa7a32708 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_02200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2101; i <= 2200; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_02300.bc b/contrib/bc/tests/bc/scripts/add_02300.bc new file mode 100644 index 000000000000..8e9622db6390 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_02300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2201; i <= 2300; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_02400.bc b/contrib/bc/tests/bc/scripts/add_02400.bc new file mode 100644 index 000000000000..4cedd06b481f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_02400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2301; i <= 2400; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_02500.bc b/contrib/bc/tests/bc/scripts/add_02500.bc new file mode 100644 index 000000000000..75b599350b6a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_02500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2401; i <= 2500; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_02600.bc b/contrib/bc/tests/bc/scripts/add_02600.bc new file mode 100644 index 000000000000..ea371d5b3e96 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_02600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2501; i <= 2600; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_02700.bc b/contrib/bc/tests/bc/scripts/add_02700.bc new file mode 100644 index 000000000000..6e03b41c9549 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_02700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2601; i <= 2700; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_02800.bc b/contrib/bc/tests/bc/scripts/add_02800.bc new file mode 100644 index 000000000000..91e3dc906498 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_02800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2701; i <= 2800; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_02900.bc b/contrib/bc/tests/bc/scripts/add_02900.bc new file mode 100644 index 000000000000..ab103da6cc1f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_02900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2801; i <= 2900; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_03000.bc b/contrib/bc/tests/bc/scripts/add_03000.bc new file mode 100644 index 000000000000..f0149001652e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_03000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2901; i <= 3000; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_03100.bc b/contrib/bc/tests/bc/scripts/add_03100.bc new file mode 100644 index 000000000000..371d3d6d0977 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_03100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3001; i <= 3100; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_03200.bc b/contrib/bc/tests/bc/scripts/add_03200.bc new file mode 100644 index 000000000000..d8f361df8748 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_03200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3101; i <= 3200; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_03300.bc b/contrib/bc/tests/bc/scripts/add_03300.bc new file mode 100644 index 000000000000..115f61b128c5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_03300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3201; i <= 3300; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_03400.bc b/contrib/bc/tests/bc/scripts/add_03400.bc new file mode 100644 index 000000000000..c5dbb7b1148c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_03400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3301; i <= 3400; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_03500.bc b/contrib/bc/tests/bc/scripts/add_03500.bc new file mode 100644 index 000000000000..f487c0d05ce9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_03500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3401; i <= 3500; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_03600.bc b/contrib/bc/tests/bc/scripts/add_03600.bc new file mode 100644 index 000000000000..eab41fd22f77 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_03600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3501; i <= 3600; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_03700.bc b/contrib/bc/tests/bc/scripts/add_03700.bc new file mode 100644 index 000000000000..40c7f6c9f72a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_03700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3601; i <= 3700; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_03800.bc b/contrib/bc/tests/bc/scripts/add_03800.bc new file mode 100644 index 000000000000..9732ea39866b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_03800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3701; i <= 3800; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_03900.bc b/contrib/bc/tests/bc/scripts/add_03900.bc new file mode 100644 index 000000000000..c4bb1e4f5023 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_03900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3801; i <= 3900; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_04000.bc b/contrib/bc/tests/bc/scripts/add_04000.bc new file mode 100644 index 000000000000..9f4c832d40a2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_04000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3901; i <= 4000; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_04100.bc b/contrib/bc/tests/bc/scripts/add_04100.bc new file mode 100644 index 000000000000..a54f8711ad32 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_04100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4001; i <= 4100; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_04200.bc b/contrib/bc/tests/bc/scripts/add_04200.bc new file mode 100644 index 000000000000..f0d7f4ac2200 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_04200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4101; i <= 4200; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_04300.bc b/contrib/bc/tests/bc/scripts/add_04300.bc new file mode 100644 index 000000000000..6f1fd34d1d83 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_04300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4201; i <= 4300; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_04400.bc b/contrib/bc/tests/bc/scripts/add_04400.bc new file mode 100644 index 000000000000..d61ebb5cb850 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_04400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4301; i <= 4400; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_04500.bc b/contrib/bc/tests/bc/scripts/add_04500.bc new file mode 100644 index 000000000000..dec1d8d51a0a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_04500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4401; i <= 4500; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_04600.bc b/contrib/bc/tests/bc/scripts/add_04600.bc new file mode 100644 index 000000000000..c11374d541c2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_04600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4501; i <= 4600; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_04700.bc b/contrib/bc/tests/bc/scripts/add_04700.bc new file mode 100644 index 000000000000..f58c124a04b4 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_04700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4601; i <= 4700; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_04800.bc b/contrib/bc/tests/bc/scripts/add_04800.bc new file mode 100644 index 000000000000..a814317464d0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_04800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4701; i <= 4800; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_04900.bc b/contrib/bc/tests/bc/scripts/add_04900.bc new file mode 100644 index 000000000000..e6c45fda681f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_04900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4801; i <= 4900; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_05000.bc b/contrib/bc/tests/bc/scripts/add_05000.bc new file mode 100644 index 000000000000..b5f942c75b9c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_05000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4901; i <= 5000; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_05100.bc b/contrib/bc/tests/bc/scripts/add_05100.bc new file mode 100644 index 000000000000..7b6db4cab7c7 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_05100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5001; i <= 5100; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_05200.bc b/contrib/bc/tests/bc/scripts/add_05200.bc new file mode 100644 index 000000000000..e00390c3a185 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_05200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5101; i <= 5200; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_05300.bc b/contrib/bc/tests/bc/scripts/add_05300.bc new file mode 100644 index 000000000000..bba349b19f58 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_05300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5201; i <= 5300; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_05400.bc b/contrib/bc/tests/bc/scripts/add_05400.bc new file mode 100644 index 000000000000..4d56e6444d22 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_05400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5301; i <= 5400; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_05500.bc b/contrib/bc/tests/bc/scripts/add_05500.bc new file mode 100644 index 000000000000..f44e5da24185 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_05500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5401; i <= 5500; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_05600.bc b/contrib/bc/tests/bc/scripts/add_05600.bc new file mode 100644 index 000000000000..7085cfb977a0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_05600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5501; i <= 5600; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_05700.bc b/contrib/bc/tests/bc/scripts/add_05700.bc new file mode 100644 index 000000000000..3cb664410ce6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_05700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5601; i <= 5700; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_05800.bc b/contrib/bc/tests/bc/scripts/add_05800.bc new file mode 100644 index 000000000000..2b2371a97dbc --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_05800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5701; i <= 5800; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_05900.bc b/contrib/bc/tests/bc/scripts/add_05900.bc new file mode 100644 index 000000000000..263c186e6e4a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_05900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5801; i <= 5900; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_06000.bc b/contrib/bc/tests/bc/scripts/add_06000.bc new file mode 100644 index 000000000000..6a0c9adba929 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_06000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5901; i <= 6000; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_06100.bc b/contrib/bc/tests/bc/scripts/add_06100.bc new file mode 100644 index 000000000000..a39e08d837a5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_06100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6001; i <= 6100; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_06200.bc b/contrib/bc/tests/bc/scripts/add_06200.bc new file mode 100644 index 000000000000..3c027b50e4c7 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_06200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6101; i <= 6200; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_06300.bc b/contrib/bc/tests/bc/scripts/add_06300.bc new file mode 100644 index 000000000000..0034dff383c4 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_06300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6201; i <= 6300; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_06400.bc b/contrib/bc/tests/bc/scripts/add_06400.bc new file mode 100644 index 000000000000..e76787fff84b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_06400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6301; i <= 6400; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_06500.bc b/contrib/bc/tests/bc/scripts/add_06500.bc new file mode 100644 index 000000000000..219b0bfb1f21 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_06500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6401; i <= 6500; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_06600.bc b/contrib/bc/tests/bc/scripts/add_06600.bc new file mode 100644 index 000000000000..c881cdd331a5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_06600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6501; i <= 6600; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_06700.bc b/contrib/bc/tests/bc/scripts/add_06700.bc new file mode 100644 index 000000000000..89578ced8323 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_06700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6601; i <= 6700; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_06800.bc b/contrib/bc/tests/bc/scripts/add_06800.bc new file mode 100644 index 000000000000..43808bbad6db --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_06800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6701; i <= 6800; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_06900.bc b/contrib/bc/tests/bc/scripts/add_06900.bc new file mode 100644 index 000000000000..aa3e232f95c3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_06900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6801; i <= 6900; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_07000.bc b/contrib/bc/tests/bc/scripts/add_07000.bc new file mode 100644 index 000000000000..619efe0b1fbc --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_07000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6901; i <= 7000; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_07100.bc b/contrib/bc/tests/bc/scripts/add_07100.bc new file mode 100644 index 000000000000..7f62385972ba --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_07100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7001; i <= 7100; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_07200.bc b/contrib/bc/tests/bc/scripts/add_07200.bc new file mode 100644 index 000000000000..9275056c7b48 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_07200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7101; i <= 7200; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_07300.bc b/contrib/bc/tests/bc/scripts/add_07300.bc new file mode 100644 index 000000000000..aae0593d5453 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_07300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7201; i <= 7300; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_07400.bc b/contrib/bc/tests/bc/scripts/add_07400.bc new file mode 100644 index 000000000000..5ec925f71453 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_07400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7301; i <= 7400; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_07500.bc b/contrib/bc/tests/bc/scripts/add_07500.bc new file mode 100644 index 000000000000..79e3da3795ae --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_07500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7401; i <= 7500; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_07600.bc b/contrib/bc/tests/bc/scripts/add_07600.bc new file mode 100644 index 000000000000..0a6787de4f9a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_07600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7501; i <= 7600; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_07700.bc b/contrib/bc/tests/bc/scripts/add_07700.bc new file mode 100644 index 000000000000..68a270cb2149 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_07700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7601; i <= 7700; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_07800.bc b/contrib/bc/tests/bc/scripts/add_07800.bc new file mode 100644 index 000000000000..266fb799877e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_07800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7701; i <= 7800; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_07900.bc b/contrib/bc/tests/bc/scripts/add_07900.bc new file mode 100644 index 000000000000..34759324fbe9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_07900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7801; i <= 7900; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_08000.bc b/contrib/bc/tests/bc/scripts/add_08000.bc new file mode 100644 index 000000000000..7194e35553bd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_08000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7901; i <= 8000; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_08100.bc b/contrib/bc/tests/bc/scripts/add_08100.bc new file mode 100644 index 000000000000..899afff7c49f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_08100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8001; i <= 8100; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_08200.bc b/contrib/bc/tests/bc/scripts/add_08200.bc new file mode 100644 index 000000000000..7898c65c3f39 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_08200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8101; i <= 8200; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_08300.bc b/contrib/bc/tests/bc/scripts/add_08300.bc new file mode 100644 index 000000000000..e524af4e6365 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_08300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8201; i <= 8300; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_08400.bc b/contrib/bc/tests/bc/scripts/add_08400.bc new file mode 100644 index 000000000000..e1835790b535 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_08400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8301; i <= 8400; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_08500.bc b/contrib/bc/tests/bc/scripts/add_08500.bc new file mode 100644 index 000000000000..33a1b69888fb --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_08500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8401; i <= 8500; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_08600.bc b/contrib/bc/tests/bc/scripts/add_08600.bc new file mode 100644 index 000000000000..a0a85ed50d2e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_08600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8501; i <= 8600; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_08700.bc b/contrib/bc/tests/bc/scripts/add_08700.bc new file mode 100644 index 000000000000..cf453c39167c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_08700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8601; i <= 8700; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_08800.bc b/contrib/bc/tests/bc/scripts/add_08800.bc new file mode 100644 index 000000000000..0714a10c14dd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_08800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8701; i <= 8800; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_08900.bc b/contrib/bc/tests/bc/scripts/add_08900.bc new file mode 100644 index 000000000000..1cf95e2507f0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_08900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8801; i <= 8900; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_09000.bc b/contrib/bc/tests/bc/scripts/add_09000.bc new file mode 100644 index 000000000000..3838cb3e90e0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_09000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8901; i <= 9000; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_09100.bc b/contrib/bc/tests/bc/scripts/add_09100.bc new file mode 100644 index 000000000000..f5771ed8b8f9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_09100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9001; i <= 9100; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_09200.bc b/contrib/bc/tests/bc/scripts/add_09200.bc new file mode 100644 index 000000000000..4f9e0638fdd7 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_09200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9101; i <= 9200; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_09300.bc b/contrib/bc/tests/bc/scripts/add_09300.bc new file mode 100644 index 000000000000..b4fc793980c6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_09300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9201; i <= 9300; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_09400.bc b/contrib/bc/tests/bc/scripts/add_09400.bc new file mode 100644 index 000000000000..302f328b3c16 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_09400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9301; i <= 9400; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_09500.bc b/contrib/bc/tests/bc/scripts/add_09500.bc new file mode 100644 index 000000000000..a2fc67f64439 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_09500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9401; i <= 9500; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_09600.bc b/contrib/bc/tests/bc/scripts/add_09600.bc new file mode 100644 index 000000000000..0b36a67aeff6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_09600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9501; i <= 9600; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_09700.bc b/contrib/bc/tests/bc/scripts/add_09700.bc new file mode 100644 index 000000000000..5f7c395c3a22 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_09700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9601; i <= 9700; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_09800.bc b/contrib/bc/tests/bc/scripts/add_09800.bc new file mode 100644 index 000000000000..23c044c7dbc9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_09800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9701; i <= 9800; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_09900.bc b/contrib/bc/tests/bc/scripts/add_09900.bc new file mode 100644 index 000000000000..42d1a28d42b6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_09900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9801; i <= 9900; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/add_10000.bc b/contrib/bc/tests/bc/scripts/add_10000.bc new file mode 100644 index 000000000000..518e937c48a3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/add_10000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9901; i <= 10000; ++i) { + for (j = 0; j < len; ++j) { + a[i] + a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/all.txt b/contrib/bc/tests/bc/scripts/all.txt index 7b49f7c4e77a..935f05cf9fb2 100644 --- a/contrib/bc/tests/bc/scripts/all.txt +++ b/contrib/bc/tests/bc/scripts/all.txt @@ -1,10 +1,404 @@ -multiply.bc -divide.bc -subtract.bc -add.bc -print.bc +multiply_00100.bc +multiply_00200.bc +multiply_00300.bc +multiply_00400.bc +multiply_00500.bc +multiply_00600.bc +multiply_00700.bc +multiply_00800.bc +multiply_00900.bc +multiply_01000.bc +multiply_01100.bc +multiply_01200.bc +multiply_01300.bc +multiply_01400.bc +multiply_01500.bc +multiply_01600.bc +multiply_01700.bc +multiply_01800.bc +multiply_01900.bc +multiply_02000.bc +multiply_02100.bc +multiply_02200.bc +multiply_02300.bc +multiply_02400.bc +multiply_02500.bc +multiply_02600.bc +multiply_02700.bc +multiply_02800.bc +multiply_02900.bc +multiply_03000.bc +multiply_03100.bc +multiply_03200.bc +multiply_03300.bc +multiply_03400.bc +multiply_03500.bc +multiply_03600.bc +multiply_03700.bc +multiply_03800.bc +multiply_03900.bc +multiply_04000.bc +multiply_04100.bc +multiply_04200.bc +multiply_04300.bc +multiply_04400.bc +multiply_04500.bc +multiply_04600.bc +multiply_04700.bc +multiply_04800.bc +multiply_04900.bc +multiply_05000.bc +multiply_05100.bc +multiply_05200.bc +multiply_05300.bc +multiply_05400.bc +multiply_05500.bc +multiply_05600.bc +multiply_05700.bc +multiply_05800.bc +multiply_05900.bc +multiply_06000.bc +multiply_06100.bc +multiply_06200.bc +multiply_06300.bc +multiply_06400.bc +multiply_06500.bc +multiply_06600.bc +multiply_06700.bc +multiply_06800.bc +multiply_06900.bc +multiply_07000.bc +multiply_07100.bc +multiply_07200.bc +multiply_07300.bc +multiply_07400.bc +multiply_07500.bc +multiply_07600.bc +multiply_07700.bc +multiply_07800.bc +multiply_07900.bc +multiply_08000.bc +multiply_08100.bc +multiply_08200.bc +multiply_08300.bc +multiply_08400.bc +multiply_08500.bc +multiply_08600.bc +multiply_08700.bc +multiply_08800.bc +multiply_08900.bc +multiply_09000.bc +multiply_09100.bc +multiply_09200.bc +multiply_09300.bc +multiply_09400.bc +multiply_09500.bc +multiply_09600.bc +multiply_09700.bc +multiply_09800.bc +multiply_09900.bc +multiply_10000.bc +divide_00100.bc +divide_00200.bc +divide_00300.bc +divide_00400.bc +divide_00500.bc +divide_00600.bc +divide_00700.bc +divide_00800.bc +divide_00900.bc +divide_01000.bc +divide_01100.bc +divide_01200.bc +divide_01300.bc +divide_01400.bc +divide_01500.bc +divide_01600.bc +divide_01700.bc +divide_01800.bc +divide_01900.bc +divide_02000.bc +divide_02100.bc +divide_02200.bc +divide_02300.bc +divide_02400.bc +divide_02500.bc +divide_02600.bc +divide_02700.bc +divide_02800.bc +divide_02900.bc +divide_03000.bc +divide_03100.bc +divide_03200.bc +divide_03300.bc +divide_03400.bc +divide_03500.bc +divide_03600.bc +divide_03700.bc +divide_03800.bc +divide_03900.bc +divide_04000.bc +divide_04100.bc +divide_04200.bc +divide_04300.bc +divide_04400.bc +divide_04500.bc +divide_04600.bc +divide_04700.bc +divide_04800.bc +divide_04900.bc +divide_05000.bc +divide_05100.bc +divide_05200.bc +divide_05300.bc +divide_05400.bc +divide_05500.bc +divide_05600.bc +divide_05700.bc +divide_05800.bc +divide_05900.bc +divide_06000.bc +divide_06100.bc +divide_06200.bc +divide_06300.bc +divide_06400.bc +divide_06500.bc +divide_06600.bc +divide_06700.bc +divide_06800.bc +divide_06900.bc +divide_07000.bc +divide_07100.bc +divide_07200.bc +divide_07300.bc +divide_07400.bc +divide_07500.bc +divide_07600.bc +divide_07700.bc +divide_07800.bc +divide_07900.bc +divide_08000.bc +divide_08100.bc +divide_08200.bc +divide_08300.bc +divide_08400.bc +divide_08500.bc +divide_08600.bc +divide_08700.bc +divide_08800.bc +divide_08900.bc +divide_09000.bc +divide_09100.bc +divide_09200.bc +divide_09300.bc +divide_09400.bc +divide_09500.bc +divide_09600.bc +divide_09700.bc +divide_09800.bc +divide_09900.bc +divide_10000.bc +subtract_00100.bc +subtract_00200.bc +subtract_00300.bc +subtract_00400.bc +subtract_00500.bc +subtract_00600.bc +subtract_00700.bc +subtract_00800.bc +subtract_00900.bc +subtract_01000.bc +subtract_01100.bc +subtract_01200.bc +subtract_01300.bc +subtract_01400.bc +subtract_01500.bc +subtract_01600.bc +subtract_01700.bc +subtract_01800.bc +subtract_01900.bc +subtract_02000.bc +subtract_02100.bc +subtract_02200.bc +subtract_02300.bc +subtract_02400.bc +subtract_02500.bc +subtract_02600.bc +subtract_02700.bc +subtract_02800.bc +subtract_02900.bc +subtract_03000.bc +subtract_03100.bc +subtract_03200.bc +subtract_03300.bc +subtract_03400.bc +subtract_03500.bc +subtract_03600.bc +subtract_03700.bc +subtract_03800.bc +subtract_03900.bc +subtract_04000.bc +subtract_04100.bc +subtract_04200.bc +subtract_04300.bc +subtract_04400.bc +subtract_04500.bc +subtract_04600.bc +subtract_04700.bc +subtract_04800.bc +subtract_04900.bc +subtract_05000.bc +subtract_05100.bc +subtract_05200.bc +subtract_05300.bc +subtract_05400.bc +subtract_05500.bc +subtract_05600.bc +subtract_05700.bc +subtract_05800.bc +subtract_05900.bc +subtract_06000.bc +subtract_06100.bc +subtract_06200.bc +subtract_06300.bc +subtract_06400.bc +subtract_06500.bc +subtract_06600.bc +subtract_06700.bc +subtract_06800.bc +subtract_06900.bc +subtract_07000.bc +subtract_07100.bc +subtract_07200.bc +subtract_07300.bc +subtract_07400.bc +subtract_07500.bc +subtract_07600.bc +subtract_07700.bc +subtract_07800.bc +subtract_07900.bc +subtract_08000.bc +subtract_08100.bc +subtract_08200.bc +subtract_08300.bc +subtract_08400.bc +subtract_08500.bc +subtract_08600.bc +subtract_08700.bc +subtract_08800.bc +subtract_08900.bc +subtract_09000.bc +subtract_09100.bc +subtract_09200.bc +subtract_09300.bc +subtract_09400.bc +subtract_09500.bc +subtract_09600.bc +subtract_09700.bc +subtract_09800.bc +subtract_09900.bc +subtract_10000.bc +add_00100.bc +add_00200.bc +add_00300.bc +add_00400.bc +add_00500.bc +add_00600.bc +add_00700.bc +add_00800.bc +add_00900.bc +add_01000.bc +add_01100.bc +add_01200.bc +add_01300.bc +add_01400.bc +add_01500.bc +add_01600.bc +add_01700.bc +add_01800.bc +add_01900.bc +add_02000.bc +add_02100.bc +add_02200.bc +add_02300.bc +add_02400.bc +add_02500.bc +add_02600.bc +add_02700.bc +add_02800.bc +add_02900.bc +add_03000.bc +add_03100.bc +add_03200.bc +add_03300.bc +add_03400.bc +add_03500.bc +add_03600.bc +add_03700.bc +add_03800.bc +add_03900.bc +add_04000.bc +add_04100.bc +add_04200.bc +add_04300.bc +add_04400.bc +add_04500.bc +add_04600.bc +add_04700.bc +add_04800.bc +add_04900.bc +add_05000.bc +add_05100.bc +add_05200.bc +add_05300.bc +add_05400.bc +add_05500.bc +add_05600.bc +add_05700.bc +add_05800.bc +add_05900.bc +add_06000.bc +add_06100.bc +add_06200.bc +add_06300.bc +add_06400.bc +add_06500.bc +add_06600.bc +add_06700.bc +add_06800.bc +add_06900.bc +add_07000.bc +add_07100.bc +add_07200.bc +add_07300.bc +add_07400.bc +add_07500.bc +add_07600.bc +add_07700.bc +add_07800.bc +add_07900.bc +add_08000.bc +add_08100.bc +add_08200.bc +add_08300.bc +add_08400.bc +add_08500.bc +add_08600.bc +add_08700.bc +add_08800.bc +add_08900.bc +add_09000.bc +add_09100.bc +add_09200.bc +add_09300.bc +add_09400.bc +add_09500.bc +add_09600.bc +add_09700.bc +add_09800.bc +add_09900.bc +add_10000.bc print2.bc -parse.bc root.bc array.bc array2.bc diff --git a/contrib/bc/tests/bc/scripts/divide.bc b/contrib/bc/tests/bc/scripts/divide_00100.bc index 51a4c0082d6a..d2685faf9cd3 100644 --- a/contrib/bc/tests/bc/scripts/divide.bc +++ b/contrib/bc/tests/bc/scripts/divide_00100.bc @@ -12,7 +12,7 @@ for (i = 0; i <= len; ++i) { a[i] } -for (i = 1; i <= 10000; ++i) { +for (i = 1; i <= 100; ++i) { for (j = 0; j < len; ++j) { a[0] / a[j] a[i] / a[j] diff --git a/contrib/bc/tests/bc/scripts/divide_00200.bc b/contrib/bc/tests/bc/scripts/divide_00200.bc new file mode 100644 index 000000000000..027642c504d0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_00200.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 101; i <= 200; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_00300.bc b/contrib/bc/tests/bc/scripts/divide_00300.bc new file mode 100644 index 000000000000..53a3fb2e3d3a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_00300.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 201; i <= 300; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_00400.bc b/contrib/bc/tests/bc/scripts/divide_00400.bc new file mode 100644 index 000000000000..15f8ba961e61 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_00400.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 301; i <= 400; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_00500.bc b/contrib/bc/tests/bc/scripts/divide_00500.bc new file mode 100644 index 000000000000..732bd2867a23 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_00500.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 401; i <= 500; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_00600.bc b/contrib/bc/tests/bc/scripts/divide_00600.bc new file mode 100644 index 000000000000..4ac87e33319f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_00600.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 501; i <= 600; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_00700.bc b/contrib/bc/tests/bc/scripts/divide_00700.bc new file mode 100644 index 000000000000..0b272167f0fb --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_00700.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 601; i <= 700; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_00800.bc b/contrib/bc/tests/bc/scripts/divide_00800.bc new file mode 100644 index 000000000000..0e08bb7016e3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_00800.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 701; i <= 800; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_00900.bc b/contrib/bc/tests/bc/scripts/divide_00900.bc new file mode 100644 index 000000000000..cef55f474661 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_00900.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 801; i <= 900; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_01000.bc b/contrib/bc/tests/bc/scripts/divide_01000.bc new file mode 100644 index 000000000000..5291d71fc316 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_01000.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 901; i <= 1000; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_01100.bc b/contrib/bc/tests/bc/scripts/divide_01100.bc new file mode 100644 index 000000000000..ff9a49a6bd9a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_01100.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1001; i <= 1100; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_01200.bc b/contrib/bc/tests/bc/scripts/divide_01200.bc new file mode 100644 index 000000000000..9dd0fadf3a4d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_01200.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1101; i <= 1200; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_01300.bc b/contrib/bc/tests/bc/scripts/divide_01300.bc new file mode 100644 index 000000000000..5ac02c35a087 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_01300.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1201; i <= 1300; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_01400.bc b/contrib/bc/tests/bc/scripts/divide_01400.bc new file mode 100644 index 000000000000..9189a546b01c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_01400.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1301; i <= 1400; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_01500.bc b/contrib/bc/tests/bc/scripts/divide_01500.bc new file mode 100644 index 000000000000..7feed3c7389d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_01500.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1401; i <= 1500; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_01600.bc b/contrib/bc/tests/bc/scripts/divide_01600.bc new file mode 100644 index 000000000000..4847d9dbe62c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_01600.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1501; i <= 1600; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_01700.bc b/contrib/bc/tests/bc/scripts/divide_01700.bc new file mode 100644 index 000000000000..81db9b7b4bbe --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_01700.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1601; i <= 1700; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_01800.bc b/contrib/bc/tests/bc/scripts/divide_01800.bc new file mode 100644 index 000000000000..25b7476e7d6e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_01800.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1701; i <= 1800; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_01900.bc b/contrib/bc/tests/bc/scripts/divide_01900.bc new file mode 100644 index 000000000000..80a8292c0b52 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_01900.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1801; i <= 1900; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_02000.bc b/contrib/bc/tests/bc/scripts/divide_02000.bc new file mode 100644 index 000000000000..268f1636f65f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_02000.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1901; i <= 2000; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_02100.bc b/contrib/bc/tests/bc/scripts/divide_02100.bc new file mode 100644 index 000000000000..cd5f57546856 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_02100.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2001; i <= 2100; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_02200.bc b/contrib/bc/tests/bc/scripts/divide_02200.bc new file mode 100644 index 000000000000..40eb46b58dc8 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_02200.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2101; i <= 2200; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_02300.bc b/contrib/bc/tests/bc/scripts/divide_02300.bc new file mode 100644 index 000000000000..50da630cdeb1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_02300.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2201; i <= 2300; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_02400.bc b/contrib/bc/tests/bc/scripts/divide_02400.bc new file mode 100644 index 000000000000..744e082c95b5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_02400.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2301; i <= 2400; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_02500.bc b/contrib/bc/tests/bc/scripts/divide_02500.bc new file mode 100644 index 000000000000..294f2677971f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_02500.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2401; i <= 2500; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_02600.bc b/contrib/bc/tests/bc/scripts/divide_02600.bc new file mode 100644 index 000000000000..0adb8203d56b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_02600.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2501; i <= 2600; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_02700.bc b/contrib/bc/tests/bc/scripts/divide_02700.bc new file mode 100644 index 000000000000..7107d6674bcf --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_02700.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2601; i <= 2700; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_02800.bc b/contrib/bc/tests/bc/scripts/divide_02800.bc new file mode 100644 index 000000000000..0a818c9461c6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_02800.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2701; i <= 2800; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_02900.bc b/contrib/bc/tests/bc/scripts/divide_02900.bc new file mode 100644 index 000000000000..8113032c261b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_02900.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2801; i <= 2900; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_03000.bc b/contrib/bc/tests/bc/scripts/divide_03000.bc new file mode 100644 index 000000000000..772d2e8cd2c3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_03000.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2901; i <= 3000; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_03100.bc b/contrib/bc/tests/bc/scripts/divide_03100.bc new file mode 100644 index 000000000000..916759661db5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_03100.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3001; i <= 3100; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_03200.bc b/contrib/bc/tests/bc/scripts/divide_03200.bc new file mode 100644 index 000000000000..52542b9b6dd1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_03200.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3101; i <= 3200; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_03300.bc b/contrib/bc/tests/bc/scripts/divide_03300.bc new file mode 100644 index 000000000000..d2315cf2ad43 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_03300.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3201; i <= 3300; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_03400.bc b/contrib/bc/tests/bc/scripts/divide_03400.bc new file mode 100644 index 000000000000..03cf3e5c7d67 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_03400.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3301; i <= 3400; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_03500.bc b/contrib/bc/tests/bc/scripts/divide_03500.bc new file mode 100644 index 000000000000..8fac5cc5bb82 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_03500.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3401; i <= 3500; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_03600.bc b/contrib/bc/tests/bc/scripts/divide_03600.bc new file mode 100644 index 000000000000..a8a3af330a29 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_03600.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3501; i <= 3600; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_03700.bc b/contrib/bc/tests/bc/scripts/divide_03700.bc new file mode 100644 index 000000000000..9f38b3e61350 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_03700.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3601; i <= 3700; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_03800.bc b/contrib/bc/tests/bc/scripts/divide_03800.bc new file mode 100644 index 000000000000..db59cdd08602 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_03800.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3701; i <= 3800; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_03900.bc b/contrib/bc/tests/bc/scripts/divide_03900.bc new file mode 100644 index 000000000000..d7de3afba717 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_03900.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3801; i <= 3900; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_04000.bc b/contrib/bc/tests/bc/scripts/divide_04000.bc new file mode 100644 index 000000000000..86755a73ef5b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_04000.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3901; i <= 4000; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_04100.bc b/contrib/bc/tests/bc/scripts/divide_04100.bc new file mode 100644 index 000000000000..03156cd3a747 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_04100.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4001; i <= 4100; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_04200.bc b/contrib/bc/tests/bc/scripts/divide_04200.bc new file mode 100644 index 000000000000..2df36aa73292 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_04200.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4101; i <= 4200; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_04300.bc b/contrib/bc/tests/bc/scripts/divide_04300.bc new file mode 100644 index 000000000000..527cbb191fa3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_04300.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4201; i <= 4300; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_04400.bc b/contrib/bc/tests/bc/scripts/divide_04400.bc new file mode 100644 index 000000000000..358cf70a6a81 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_04400.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4301; i <= 4400; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_04500.bc b/contrib/bc/tests/bc/scripts/divide_04500.bc new file mode 100644 index 000000000000..d298c5ba1801 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_04500.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4401; i <= 4500; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_04600.bc b/contrib/bc/tests/bc/scripts/divide_04600.bc new file mode 100644 index 000000000000..b58a50a8c5a3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_04600.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4501; i <= 4600; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_04700.bc b/contrib/bc/tests/bc/scripts/divide_04700.bc new file mode 100644 index 000000000000..05a561bd145b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_04700.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4601; i <= 4700; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_04800.bc b/contrib/bc/tests/bc/scripts/divide_04800.bc new file mode 100644 index 000000000000..5ed04489a07f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_04800.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4701; i <= 4800; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_04900.bc b/contrib/bc/tests/bc/scripts/divide_04900.bc new file mode 100644 index 000000000000..ff3b46812838 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_04900.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4801; i <= 4900; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_05000.bc b/contrib/bc/tests/bc/scripts/divide_05000.bc new file mode 100644 index 000000000000..a32273f5ac38 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_05000.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4901; i <= 5000; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_05100.bc b/contrib/bc/tests/bc/scripts/divide_05100.bc new file mode 100644 index 000000000000..9b5aa7fcf72c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_05100.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5001; i <= 5100; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_05200.bc b/contrib/bc/tests/bc/scripts/divide_05200.bc new file mode 100644 index 000000000000..178dcac6ec5f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_05200.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5101; i <= 5200; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_05300.bc b/contrib/bc/tests/bc/scripts/divide_05300.bc new file mode 100644 index 000000000000..49768eca0511 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_05300.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5201; i <= 5300; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_05400.bc b/contrib/bc/tests/bc/scripts/divide_05400.bc new file mode 100644 index 000000000000..c0078a2fac94 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_05400.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5301; i <= 5400; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_05500.bc b/contrib/bc/tests/bc/scripts/divide_05500.bc new file mode 100644 index 000000000000..9d289e0f6a2e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_05500.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5401; i <= 5500; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_05600.bc b/contrib/bc/tests/bc/scripts/divide_05600.bc new file mode 100644 index 000000000000..66193069e42d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_05600.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5501; i <= 5600; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_05700.bc b/contrib/bc/tests/bc/scripts/divide_05700.bc new file mode 100644 index 000000000000..483622bfc219 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_05700.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5601; i <= 5700; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_05800.bc b/contrib/bc/tests/bc/scripts/divide_05800.bc new file mode 100644 index 000000000000..c8bc59d63aaf --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_05800.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5701; i <= 5800; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_05900.bc b/contrib/bc/tests/bc/scripts/divide_05900.bc new file mode 100644 index 000000000000..13e5a0f2209b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_05900.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5801; i <= 5900; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_06000.bc b/contrib/bc/tests/bc/scripts/divide_06000.bc new file mode 100644 index 000000000000..318fc5b25f5f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_06000.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5901; i <= 6000; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_06100.bc b/contrib/bc/tests/bc/scripts/divide_06100.bc new file mode 100644 index 000000000000..57bf61d4730f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_06100.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6001; i <= 6100; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_06200.bc b/contrib/bc/tests/bc/scripts/divide_06200.bc new file mode 100644 index 000000000000..ab1ac853431e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_06200.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6101; i <= 6200; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_06300.bc b/contrib/bc/tests/bc/scripts/divide_06300.bc new file mode 100644 index 000000000000..e2a320b0abd2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_06300.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6201; i <= 6300; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_06400.bc b/contrib/bc/tests/bc/scripts/divide_06400.bc new file mode 100644 index 000000000000..f3e0557b7e8b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_06400.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6301; i <= 6400; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_06500.bc b/contrib/bc/tests/bc/scripts/divide_06500.bc new file mode 100644 index 000000000000..62c84d07f3cd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_06500.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6401; i <= 6500; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_06600.bc b/contrib/bc/tests/bc/scripts/divide_06600.bc new file mode 100644 index 000000000000..04e1d9dcdf07 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_06600.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6501; i <= 6600; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_06700.bc b/contrib/bc/tests/bc/scripts/divide_06700.bc new file mode 100644 index 000000000000..af23039798d9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_06700.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6601; i <= 6700; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_06800.bc b/contrib/bc/tests/bc/scripts/divide_06800.bc new file mode 100644 index 000000000000..6da3f2da386b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_06800.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6701; i <= 6800; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_06900.bc b/contrib/bc/tests/bc/scripts/divide_06900.bc new file mode 100644 index 000000000000..769d57fb1656 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_06900.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6801; i <= 6900; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_07000.bc b/contrib/bc/tests/bc/scripts/divide_07000.bc new file mode 100644 index 000000000000..758b61fb99ec --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_07000.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6901; i <= 7000; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_07100.bc b/contrib/bc/tests/bc/scripts/divide_07100.bc new file mode 100644 index 000000000000..2ef9f19390b8 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_07100.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7001; i <= 7100; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_07200.bc b/contrib/bc/tests/bc/scripts/divide_07200.bc new file mode 100644 index 000000000000..dcab8948d540 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_07200.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7101; i <= 7200; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_07300.bc b/contrib/bc/tests/bc/scripts/divide_07300.bc new file mode 100644 index 000000000000..f8aeae59b336 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_07300.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7201; i <= 7300; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_07400.bc b/contrib/bc/tests/bc/scripts/divide_07400.bc new file mode 100644 index 000000000000..7a26ce5583fc --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_07400.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7301; i <= 7400; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_07500.bc b/contrib/bc/tests/bc/scripts/divide_07500.bc new file mode 100644 index 000000000000..0c197595ae9f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_07500.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7401; i <= 7500; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_07600.bc b/contrib/bc/tests/bc/scripts/divide_07600.bc new file mode 100644 index 000000000000..868d0702f3db --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_07600.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7501; i <= 7600; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_07700.bc b/contrib/bc/tests/bc/scripts/divide_07700.bc new file mode 100644 index 000000000000..b30f66ebb5b8 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_07700.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7601; i <= 7700; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_07800.bc b/contrib/bc/tests/bc/scripts/divide_07800.bc new file mode 100644 index 000000000000..118df8fe112d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_07800.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7701; i <= 7800; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_07900.bc b/contrib/bc/tests/bc/scripts/divide_07900.bc new file mode 100644 index 000000000000..42fd0771dca6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_07900.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7801; i <= 7900; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_08000.bc b/contrib/bc/tests/bc/scripts/divide_08000.bc new file mode 100644 index 000000000000..3bdaa26e707e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_08000.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7901; i <= 8000; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_08100.bc b/contrib/bc/tests/bc/scripts/divide_08100.bc new file mode 100644 index 000000000000..f0e4592382b2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_08100.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8001; i <= 8100; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_08200.bc b/contrib/bc/tests/bc/scripts/divide_08200.bc new file mode 100644 index 000000000000..ef1bb329cff1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_08200.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8101; i <= 8200; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_08300.bc b/contrib/bc/tests/bc/scripts/divide_08300.bc new file mode 100644 index 000000000000..f3fe8a69eeda --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_08300.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8201; i <= 8300; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_08400.bc b/contrib/bc/tests/bc/scripts/divide_08400.bc new file mode 100644 index 000000000000..5c9ec5c8fba2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_08400.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8301; i <= 8400; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_08500.bc b/contrib/bc/tests/bc/scripts/divide_08500.bc new file mode 100644 index 000000000000..64059da94286 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_08500.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8401; i <= 8500; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_08600.bc b/contrib/bc/tests/bc/scripts/divide_08600.bc new file mode 100644 index 000000000000..72fe4114998b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_08600.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8501; i <= 8600; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_08700.bc b/contrib/bc/tests/bc/scripts/divide_08700.bc new file mode 100644 index 000000000000..c1927841a49f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_08700.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8601; i <= 8700; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_08800.bc b/contrib/bc/tests/bc/scripts/divide_08800.bc new file mode 100644 index 000000000000..4ae7fcab3dcd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_08800.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8701; i <= 8800; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_08900.bc b/contrib/bc/tests/bc/scripts/divide_08900.bc new file mode 100644 index 000000000000..7e59baa4a150 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_08900.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8801; i <= 8900; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_09000.bc b/contrib/bc/tests/bc/scripts/divide_09000.bc new file mode 100644 index 000000000000..26d3f62ac6a1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_09000.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8901; i <= 9000; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_09100.bc b/contrib/bc/tests/bc/scripts/divide_09100.bc new file mode 100644 index 000000000000..e8a372db80e2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_09100.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9001; i <= 9100; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_09200.bc b/contrib/bc/tests/bc/scripts/divide_09200.bc new file mode 100644 index 000000000000..00d391459a46 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_09200.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9101; i <= 9200; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_09300.bc b/contrib/bc/tests/bc/scripts/divide_09300.bc new file mode 100644 index 000000000000..4a64b9347192 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_09300.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9201; i <= 9300; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_09400.bc b/contrib/bc/tests/bc/scripts/divide_09400.bc new file mode 100644 index 000000000000..55a70f7cbf41 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_09400.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9301; i <= 9400; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_09500.bc b/contrib/bc/tests/bc/scripts/divide_09500.bc new file mode 100644 index 000000000000..09df2d540454 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_09500.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9401; i <= 9500; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_09600.bc b/contrib/bc/tests/bc/scripts/divide_09600.bc new file mode 100644 index 000000000000..491e3c2caa33 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_09600.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9501; i <= 9600; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_09700.bc b/contrib/bc/tests/bc/scripts/divide_09700.bc new file mode 100644 index 000000000000..33a183e2493e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_09700.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9601; i <= 9700; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_09800.bc b/contrib/bc/tests/bc/scripts/divide_09800.bc new file mode 100644 index 000000000000..ae007e8a7a00 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_09800.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9701; i <= 9800; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_09900.bc b/contrib/bc/tests/bc/scripts/divide_09900.bc new file mode 100644 index 000000000000..e8fdc75987b6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_09900.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9801; i <= 9900; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/divide_10000.bc b/contrib/bc/tests/bc/scripts/divide_10000.bc new file mode 100644 index 000000000000..f4490d7d220d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/divide_10000.bc @@ -0,0 +1,23 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 * 10^(-scale) +len = 1 + 2 * scale + +x +scale += 10 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9901; i <= 10000; ++i) { + for (j = 0; j < len; ++j) { + a[0] / a[j] + a[i] / a[j] + (a[0] * i) / a[j] + a[0] / (a[j] * i) + (a[0] * i) / (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply.bc b/contrib/bc/tests/bc/scripts/multiply_00100.bc index 3aa64cc5e031..bc979d176c2a 100644 --- a/contrib/bc/tests/bc/scripts/multiply.bc +++ b/contrib/bc/tests/bc/scripts/multiply_00100.bc @@ -9,7 +9,7 @@ for (i = 0; i <= len; ++i) { a[i] } -for (i = 1; i <= 10000; ++i) { +for (i = 1; i <= 100; ++i) { for (j = 0; j < len; ++j) { a[0] * a[j] a[i] * a[j] diff --git a/contrib/bc/tests/bc/scripts/multiply_00200.bc b/contrib/bc/tests/bc/scripts/multiply_00200.bc new file mode 100644 index 000000000000..08c36d5dd4b3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_00200.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 101; i <= 200; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_00300.bc b/contrib/bc/tests/bc/scripts/multiply_00300.bc new file mode 100644 index 000000000000..3c56a569d2ee --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_00300.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 201; i <= 300; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_00400.bc b/contrib/bc/tests/bc/scripts/multiply_00400.bc new file mode 100644 index 000000000000..3dc750947aee --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_00400.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 301; i <= 400; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_00500.bc b/contrib/bc/tests/bc/scripts/multiply_00500.bc new file mode 100644 index 000000000000..a1f14e121cbb --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_00500.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 401; i <= 500; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_00600.bc b/contrib/bc/tests/bc/scripts/multiply_00600.bc new file mode 100644 index 000000000000..21a017a7f7cb --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_00600.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 501; i <= 600; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_00700.bc b/contrib/bc/tests/bc/scripts/multiply_00700.bc new file mode 100644 index 000000000000..3246b5e1a568 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_00700.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 601; i <= 700; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_00800.bc b/contrib/bc/tests/bc/scripts/multiply_00800.bc new file mode 100644 index 000000000000..4bc39b0a1fef --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_00800.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 701; i <= 800; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_00900.bc b/contrib/bc/tests/bc/scripts/multiply_00900.bc new file mode 100644 index 000000000000..febc77dead15 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_00900.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 801; i <= 900; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_01000.bc b/contrib/bc/tests/bc/scripts/multiply_01000.bc new file mode 100644 index 000000000000..ba5c1d984f67 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_01000.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 901; i <= 1000; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_01100.bc b/contrib/bc/tests/bc/scripts/multiply_01100.bc new file mode 100644 index 000000000000..a09c35252286 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_01100.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1001; i <= 1100; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_01200.bc b/contrib/bc/tests/bc/scripts/multiply_01200.bc new file mode 100644 index 000000000000..7a6b04c48b9e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_01200.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1101; i <= 1200; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_01300.bc b/contrib/bc/tests/bc/scripts/multiply_01300.bc new file mode 100644 index 000000000000..4fab6beb0a62 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_01300.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1201; i <= 1300; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_01400.bc b/contrib/bc/tests/bc/scripts/multiply_01400.bc new file mode 100644 index 000000000000..954afe5473de --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_01400.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1301; i <= 1400; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_01500.bc b/contrib/bc/tests/bc/scripts/multiply_01500.bc new file mode 100644 index 000000000000..8d150418618a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_01500.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1401; i <= 1500; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_01600.bc b/contrib/bc/tests/bc/scripts/multiply_01600.bc new file mode 100644 index 000000000000..45f170705f99 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_01600.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1501; i <= 1600; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_01700.bc b/contrib/bc/tests/bc/scripts/multiply_01700.bc new file mode 100644 index 000000000000..7eb34740139e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_01700.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1601; i <= 1700; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_01800.bc b/contrib/bc/tests/bc/scripts/multiply_01800.bc new file mode 100644 index 000000000000..719db5b358a2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_01800.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1701; i <= 1800; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_01900.bc b/contrib/bc/tests/bc/scripts/multiply_01900.bc new file mode 100644 index 000000000000..4a4a6c8b43c6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_01900.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1801; i <= 1900; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_02000.bc b/contrib/bc/tests/bc/scripts/multiply_02000.bc new file mode 100644 index 000000000000..432e0d078dee --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_02000.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1901; i <= 2000; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_02100.bc b/contrib/bc/tests/bc/scripts/multiply_02100.bc new file mode 100644 index 000000000000..825b96a7c0d3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_02100.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2001; i <= 2100; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_02200.bc b/contrib/bc/tests/bc/scripts/multiply_02200.bc new file mode 100644 index 000000000000..fd3d71684054 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_02200.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2101; i <= 2200; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_02300.bc b/contrib/bc/tests/bc/scripts/multiply_02300.bc new file mode 100644 index 000000000000..1e2adbe81fc0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_02300.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2201; i <= 2300; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_02400.bc b/contrib/bc/tests/bc/scripts/multiply_02400.bc new file mode 100644 index 000000000000..6f648ae5eb9d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_02400.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2301; i <= 2400; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_02500.bc b/contrib/bc/tests/bc/scripts/multiply_02500.bc new file mode 100644 index 000000000000..6990fa78af64 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_02500.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2401; i <= 2500; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_02600.bc b/contrib/bc/tests/bc/scripts/multiply_02600.bc new file mode 100644 index 000000000000..22d0eca373c9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_02600.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2501; i <= 2600; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_02700.bc b/contrib/bc/tests/bc/scripts/multiply_02700.bc new file mode 100644 index 000000000000..ea8d632288ec --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_02700.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2601; i <= 2700; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_02800.bc b/contrib/bc/tests/bc/scripts/multiply_02800.bc new file mode 100644 index 000000000000..5cd01d5012c0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_02800.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2701; i <= 2800; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_02900.bc b/contrib/bc/tests/bc/scripts/multiply_02900.bc new file mode 100644 index 000000000000..cdb1cb1e43c9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_02900.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2801; i <= 2900; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_03000.bc b/contrib/bc/tests/bc/scripts/multiply_03000.bc new file mode 100644 index 000000000000..1afcd634ade1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_03000.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2901; i <= 3000; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_03100.bc b/contrib/bc/tests/bc/scripts/multiply_03100.bc new file mode 100644 index 000000000000..a39ef85bdfc5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_03100.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3001; i <= 3100; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_03200.bc b/contrib/bc/tests/bc/scripts/multiply_03200.bc new file mode 100644 index 000000000000..33f465a82bf6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_03200.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3101; i <= 3200; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_03300.bc b/contrib/bc/tests/bc/scripts/multiply_03300.bc new file mode 100644 index 000000000000..2cc412b5837f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_03300.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3201; i <= 3300; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_03400.bc b/contrib/bc/tests/bc/scripts/multiply_03400.bc new file mode 100644 index 000000000000..40f528023e17 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_03400.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3301; i <= 3400; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_03500.bc b/contrib/bc/tests/bc/scripts/multiply_03500.bc new file mode 100644 index 000000000000..dce2f326a54a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_03500.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3401; i <= 3500; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_03600.bc b/contrib/bc/tests/bc/scripts/multiply_03600.bc new file mode 100644 index 000000000000..1223415dc675 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_03600.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3501; i <= 3600; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_03700.bc b/contrib/bc/tests/bc/scripts/multiply_03700.bc new file mode 100644 index 000000000000..80397b3d0cfd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_03700.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3601; i <= 3700; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_03800.bc b/contrib/bc/tests/bc/scripts/multiply_03800.bc new file mode 100644 index 000000000000..0431d8b1c9d5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_03800.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3701; i <= 3800; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_03900.bc b/contrib/bc/tests/bc/scripts/multiply_03900.bc new file mode 100644 index 000000000000..0f60df9aae71 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_03900.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3801; i <= 3900; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_04000.bc b/contrib/bc/tests/bc/scripts/multiply_04000.bc new file mode 100644 index 000000000000..ceeafea6975c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_04000.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3901; i <= 4000; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_04100.bc b/contrib/bc/tests/bc/scripts/multiply_04100.bc new file mode 100644 index 000000000000..980fa7cb1c7e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_04100.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4001; i <= 4100; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_04200.bc b/contrib/bc/tests/bc/scripts/multiply_04200.bc new file mode 100644 index 000000000000..1b16065ce434 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_04200.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4101; i <= 4200; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_04300.bc b/contrib/bc/tests/bc/scripts/multiply_04300.bc new file mode 100644 index 000000000000..ae2549f392b6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_04300.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4201; i <= 4300; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_04400.bc b/contrib/bc/tests/bc/scripts/multiply_04400.bc new file mode 100644 index 000000000000..0b22a8b36cca --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_04400.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4301; i <= 4400; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_04500.bc b/contrib/bc/tests/bc/scripts/multiply_04500.bc new file mode 100644 index 000000000000..374b595501f4 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_04500.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4401; i <= 4500; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_04600.bc b/contrib/bc/tests/bc/scripts/multiply_04600.bc new file mode 100644 index 000000000000..f4e0150e100b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_04600.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4501; i <= 4600; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_04700.bc b/contrib/bc/tests/bc/scripts/multiply_04700.bc new file mode 100644 index 000000000000..351cf2ae3bd7 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_04700.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4601; i <= 4700; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_04800.bc b/contrib/bc/tests/bc/scripts/multiply_04800.bc new file mode 100644 index 000000000000..75bab62c7467 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_04800.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4701; i <= 4800; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_04900.bc b/contrib/bc/tests/bc/scripts/multiply_04900.bc new file mode 100644 index 000000000000..bb127c4e685d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_04900.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4801; i <= 4900; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_05000.bc b/contrib/bc/tests/bc/scripts/multiply_05000.bc new file mode 100644 index 000000000000..2b817f2e4f31 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_05000.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4901; i <= 5000; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_05100.bc b/contrib/bc/tests/bc/scripts/multiply_05100.bc new file mode 100644 index 000000000000..a5067e8d60e6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_05100.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5001; i <= 5100; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_05200.bc b/contrib/bc/tests/bc/scripts/multiply_05200.bc new file mode 100644 index 000000000000..4cecc2212520 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_05200.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5101; i <= 5200; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_05300.bc b/contrib/bc/tests/bc/scripts/multiply_05300.bc new file mode 100644 index 000000000000..03c475b3de26 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_05300.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5201; i <= 5300; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_05400.bc b/contrib/bc/tests/bc/scripts/multiply_05400.bc new file mode 100644 index 000000000000..5bfeb9c4f048 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_05400.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5301; i <= 5400; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_05500.bc b/contrib/bc/tests/bc/scripts/multiply_05500.bc new file mode 100644 index 000000000000..1e12f9233a30 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_05500.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5401; i <= 5500; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_05600.bc b/contrib/bc/tests/bc/scripts/multiply_05600.bc new file mode 100644 index 000000000000..25a60e2d25a1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_05600.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5501; i <= 5600; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_05700.bc b/contrib/bc/tests/bc/scripts/multiply_05700.bc new file mode 100644 index 000000000000..c824af19bacd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_05700.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5601; i <= 5700; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_05800.bc b/contrib/bc/tests/bc/scripts/multiply_05800.bc new file mode 100644 index 000000000000..a7eedc9fb733 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_05800.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5701; i <= 5800; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_05900.bc b/contrib/bc/tests/bc/scripts/multiply_05900.bc new file mode 100644 index 000000000000..9bd0f7044428 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_05900.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5801; i <= 5900; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_06000.bc b/contrib/bc/tests/bc/scripts/multiply_06000.bc new file mode 100644 index 000000000000..6353c74cbf73 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_06000.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5901; i <= 6000; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_06100.bc b/contrib/bc/tests/bc/scripts/multiply_06100.bc new file mode 100644 index 000000000000..d49224821a06 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_06100.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6001; i <= 6100; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_06200.bc b/contrib/bc/tests/bc/scripts/multiply_06200.bc new file mode 100644 index 000000000000..c4483f401a2c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_06200.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6101; i <= 6200; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_06300.bc b/contrib/bc/tests/bc/scripts/multiply_06300.bc new file mode 100644 index 000000000000..c86e62d3a87f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_06300.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6201; i <= 6300; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_06400.bc b/contrib/bc/tests/bc/scripts/multiply_06400.bc new file mode 100644 index 000000000000..0140f164f1ac --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_06400.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6301; i <= 6400; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_06500.bc b/contrib/bc/tests/bc/scripts/multiply_06500.bc new file mode 100644 index 000000000000..e9ee4fe5a896 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_06500.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6401; i <= 6500; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_06600.bc b/contrib/bc/tests/bc/scripts/multiply_06600.bc new file mode 100644 index 000000000000..267dcbf8aa6b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_06600.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6501; i <= 6600; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_06700.bc b/contrib/bc/tests/bc/scripts/multiply_06700.bc new file mode 100644 index 000000000000..851c771952e1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_06700.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6601; i <= 6700; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_06800.bc b/contrib/bc/tests/bc/scripts/multiply_06800.bc new file mode 100644 index 000000000000..d2141d7c065c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_06800.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6701; i <= 6800; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_06900.bc b/contrib/bc/tests/bc/scripts/multiply_06900.bc new file mode 100644 index 000000000000..5a9e9affde94 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_06900.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6801; i <= 6900; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_07000.bc b/contrib/bc/tests/bc/scripts/multiply_07000.bc new file mode 100644 index 000000000000..549a1df72211 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_07000.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6901; i <= 7000; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_07100.bc b/contrib/bc/tests/bc/scripts/multiply_07100.bc new file mode 100644 index 000000000000..0a664833487d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_07100.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7001; i <= 7100; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_07200.bc b/contrib/bc/tests/bc/scripts/multiply_07200.bc new file mode 100644 index 000000000000..913f053eab19 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_07200.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7101; i <= 7200; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_07300.bc b/contrib/bc/tests/bc/scripts/multiply_07300.bc new file mode 100644 index 000000000000..50643873d43f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_07300.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7201; i <= 7300; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_07400.bc b/contrib/bc/tests/bc/scripts/multiply_07400.bc new file mode 100644 index 000000000000..8c401f0da1dd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_07400.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7301; i <= 7400; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_07500.bc b/contrib/bc/tests/bc/scripts/multiply_07500.bc new file mode 100644 index 000000000000..fedd47a45d45 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_07500.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7401; i <= 7500; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_07600.bc b/contrib/bc/tests/bc/scripts/multiply_07600.bc new file mode 100644 index 000000000000..b1b5727d0314 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_07600.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7501; i <= 7600; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_07700.bc b/contrib/bc/tests/bc/scripts/multiply_07700.bc new file mode 100644 index 000000000000..40531a676a12 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_07700.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7601; i <= 7700; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_07800.bc b/contrib/bc/tests/bc/scripts/multiply_07800.bc new file mode 100644 index 000000000000..dd847d26911d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_07800.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7701; i <= 7800; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_07900.bc b/contrib/bc/tests/bc/scripts/multiply_07900.bc new file mode 100644 index 000000000000..8313633df2f9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_07900.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7801; i <= 7900; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_08000.bc b/contrib/bc/tests/bc/scripts/multiply_08000.bc new file mode 100644 index 000000000000..e496cf78b42c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_08000.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7901; i <= 8000; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_08100.bc b/contrib/bc/tests/bc/scripts/multiply_08100.bc new file mode 100644 index 000000000000..7f07ce4e3525 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_08100.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8001; i <= 8100; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_08200.bc b/contrib/bc/tests/bc/scripts/multiply_08200.bc new file mode 100644 index 000000000000..0916404d35d4 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_08200.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8101; i <= 8200; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_08300.bc b/contrib/bc/tests/bc/scripts/multiply_08300.bc new file mode 100644 index 000000000000..9de6c4997520 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_08300.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8201; i <= 8300; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_08400.bc b/contrib/bc/tests/bc/scripts/multiply_08400.bc new file mode 100644 index 000000000000..429bd41bd843 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_08400.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8301; i <= 8400; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_08500.bc b/contrib/bc/tests/bc/scripts/multiply_08500.bc new file mode 100644 index 000000000000..c84c3fb66c6e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_08500.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8401; i <= 8500; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_08600.bc b/contrib/bc/tests/bc/scripts/multiply_08600.bc new file mode 100644 index 000000000000..30492744af01 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_08600.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8501; i <= 8600; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_08700.bc b/contrib/bc/tests/bc/scripts/multiply_08700.bc new file mode 100644 index 000000000000..06cc0e094cf5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_08700.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8601; i <= 8700; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_08800.bc b/contrib/bc/tests/bc/scripts/multiply_08800.bc new file mode 100644 index 000000000000..9ae52a604a04 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_08800.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8701; i <= 8800; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_08900.bc b/contrib/bc/tests/bc/scripts/multiply_08900.bc new file mode 100644 index 000000000000..b1a1ccfa2dc1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_08900.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8801; i <= 8900; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_09000.bc b/contrib/bc/tests/bc/scripts/multiply_09000.bc new file mode 100644 index 000000000000..487cb5a678bc --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_09000.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8901; i <= 9000; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_09100.bc b/contrib/bc/tests/bc/scripts/multiply_09100.bc new file mode 100644 index 000000000000..1c187475a5ed --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_09100.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9001; i <= 9100; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_09200.bc b/contrib/bc/tests/bc/scripts/multiply_09200.bc new file mode 100644 index 000000000000..2dbdb1bec1b9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_09200.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9101; i <= 9200; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_09300.bc b/contrib/bc/tests/bc/scripts/multiply_09300.bc new file mode 100644 index 000000000000..ffc5b8cea907 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_09300.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9201; i <= 9300; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_09400.bc b/contrib/bc/tests/bc/scripts/multiply_09400.bc new file mode 100644 index 000000000000..6932c1dd73c7 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_09400.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9301; i <= 9400; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_09500.bc b/contrib/bc/tests/bc/scripts/multiply_09500.bc new file mode 100644 index 000000000000..2ac486b146a0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_09500.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9401; i <= 9500; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_09600.bc b/contrib/bc/tests/bc/scripts/multiply_09600.bc new file mode 100644 index 000000000000..782176ba711b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_09600.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9501; i <= 9600; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_09700.bc b/contrib/bc/tests/bc/scripts/multiply_09700.bc new file mode 100644 index 000000000000..fe4135de594d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_09700.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9601; i <= 9700; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_09800.bc b/contrib/bc/tests/bc/scripts/multiply_09800.bc new file mode 100644 index 000000000000..3115b311f312 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_09800.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9701; i <= 9800; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_09900.bc b/contrib/bc/tests/bc/scripts/multiply_09900.bc new file mode 100644 index 000000000000..abbcfeefbbe9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_09900.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9801; i <= 9900; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/multiply_10000.bc b/contrib/bc/tests/bc/scripts/multiply_10000.bc new file mode 100644 index 000000000000..e97e61623eac --- /dev/null +++ b/contrib/bc/tests/bc/scripts/multiply_10000.bc @@ -0,0 +1,20 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9901; i <= 10000; ++i) { + for (j = 0; j < len; ++j) { + a[0] * a[j] + a[i] * a[j] + (a[0] * i) * a[j] + a[0] * (a[j] * i) + (a[0] * i) * (a[j] * i) + } +} diff --git a/contrib/bc/tests/bc/scripts/parse.bc b/contrib/bc/tests/bc/scripts/parse.bc deleted file mode 100644 index 179daf116efd..000000000000 --- a/contrib/bc/tests/bc/scripts/parse.bc +++ /dev/null @@ -1,20 +0,0 @@ -#! /usr/bin/bc -q - -for (b = 2; b <= 16; ++b) { - if (b == 10) continue - obase = 10 - print "ibase = A; ibase = ", b, "\n" - print "\qibase = \q\n" - b - obase = b - for (i = 0; i <= 4096; ++i) { - i - print "0.", i, "\n" - print ".", i, "\n" - print "1.", i, "\n" - print i, ".", "\n" - print i, ".", i, "\n" - } -} - -halt diff --git a/contrib/bc/tests/bc/scripts/parse_02.bc b/contrib/bc/tests/bc/scripts/parse_02.bc new file mode 100644 index 000000000000..dc695e8a63ed --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_02.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 2 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_03.bc b/contrib/bc/tests/bc/scripts/parse_03.bc new file mode 100644 index 000000000000..8418c472184e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_03.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 3 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_04.bc b/contrib/bc/tests/bc/scripts/parse_04.bc new file mode 100644 index 000000000000..6671dc3093e6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_04.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 4 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_05.bc b/contrib/bc/tests/bc/scripts/parse_05.bc new file mode 100644 index 000000000000..868c003a507a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_05.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 5 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_06.bc b/contrib/bc/tests/bc/scripts/parse_06.bc new file mode 100644 index 000000000000..ddef2fd58686 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_06.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 6 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_07.bc b/contrib/bc/tests/bc/scripts/parse_07.bc new file mode 100644 index 000000000000..83fb125d719a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_07.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 7 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_08.bc b/contrib/bc/tests/bc/scripts/parse_08.bc new file mode 100644 index 000000000000..c8f798e4e82e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_08.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 8 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_09.bc b/contrib/bc/tests/bc/scripts/parse_09.bc new file mode 100644 index 000000000000..98463b24edde --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_09.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 9 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_11.bc b/contrib/bc/tests/bc/scripts/parse_11.bc new file mode 100644 index 000000000000..efaf17293ce8 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_11.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 11 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_12.bc b/contrib/bc/tests/bc/scripts/parse_12.bc new file mode 100644 index 000000000000..a71a05a3b9dd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_12.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 12 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_13.bc b/contrib/bc/tests/bc/scripts/parse_13.bc new file mode 100644 index 000000000000..37d88e7168f0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_13.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 13 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_14.bc b/contrib/bc/tests/bc/scripts/parse_14.bc new file mode 100644 index 000000000000..e824db979639 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_14.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 14 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_15.bc b/contrib/bc/tests/bc/scripts/parse_15.bc new file mode 100644 index 000000000000..ad954a2ac4a8 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_15.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 15 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/parse_16.bc b/contrib/bc/tests/bc/scripts/parse_16.bc new file mode 100644 index 000000000000..3a716cbe40ec --- /dev/null +++ b/contrib/bc/tests/bc/scripts/parse_16.bc @@ -0,0 +1,19 @@ +#! /usr/bin/bc -q + +b = 16 + +obase = 10 +print "ibase = A; ibase = ", b, "\n" +print "\qibase = \q\n" +b +obase = b +for (i = 0; i <= 4096; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +halt diff --git a/contrib/bc/tests/bc/scripts/print.bc b/contrib/bc/tests/bc/scripts/print.bc deleted file mode 100644 index 9530cbdb3fc2..000000000000 --- a/contrib/bc/tests/bc/scripts/print.bc +++ /dev/null @@ -1,25 +0,0 @@ -#! /usr/bin/bc -q - -for (b = 2; b <= 100; ++b) { - - if (b == 10) continue - - s = b * b - - print "obase = ", b, "\n" - print "\qobase = \q\n" - b - - for (i = 0; i <= s; ++i) { - i - print "0.", i, "\n" - print ".", i, "\n" - print "1.", i, "\n" - print i, ".", "\n" - print i, ".", i, "\n" - } - - 2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 -} - -halt diff --git a/contrib/bc/tests/bc/scripts/print_002.bc b/contrib/bc/tests/bc/scripts/print_002.bc new file mode 100644 index 000000000000..e96bd8d3f440 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_002.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 2 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_003.bc b/contrib/bc/tests/bc/scripts/print_003.bc new file mode 100644 index 000000000000..46365153a3c8 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_003.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 3 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_004.bc b/contrib/bc/tests/bc/scripts/print_004.bc new file mode 100644 index 000000000000..ff0b285930fe --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_004.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 4 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_005.bc b/contrib/bc/tests/bc/scripts/print_005.bc new file mode 100644 index 000000000000..6a5982ae6a5e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_005.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 5 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_006.bc b/contrib/bc/tests/bc/scripts/print_006.bc new file mode 100644 index 000000000000..3b9bbccb2850 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_006.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 6 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_007.bc b/contrib/bc/tests/bc/scripts/print_007.bc new file mode 100644 index 000000000000..f6e784792575 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_007.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 7 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_008.bc b/contrib/bc/tests/bc/scripts/print_008.bc new file mode 100644 index 000000000000..a77d41751233 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_008.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 8 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_009.bc b/contrib/bc/tests/bc/scripts/print_009.bc new file mode 100644 index 000000000000..1aef988112a1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_009.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 9 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_011.bc b/contrib/bc/tests/bc/scripts/print_011.bc new file mode 100644 index 000000000000..fb2d29293ad8 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_011.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 11 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_012.bc b/contrib/bc/tests/bc/scripts/print_012.bc new file mode 100644 index 000000000000..466e64e2798e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_012.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 12 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_013.bc b/contrib/bc/tests/bc/scripts/print_013.bc new file mode 100644 index 000000000000..55525fd1398c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_013.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 13 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_014.bc b/contrib/bc/tests/bc/scripts/print_014.bc new file mode 100644 index 000000000000..dfa40541c7a3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_014.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 14 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_015.bc b/contrib/bc/tests/bc/scripts/print_015.bc new file mode 100644 index 000000000000..2426e409d94a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_015.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 15 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_016.bc b/contrib/bc/tests/bc/scripts/print_016.bc new file mode 100644 index 000000000000..44131bfe3ab7 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_016.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 16 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_017.bc b/contrib/bc/tests/bc/scripts/print_017.bc new file mode 100644 index 000000000000..e6c802166d2a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_017.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 17 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_018.bc b/contrib/bc/tests/bc/scripts/print_018.bc new file mode 100644 index 000000000000..256c3436ab5a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_018.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 18 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_019.bc b/contrib/bc/tests/bc/scripts/print_019.bc new file mode 100644 index 000000000000..a2552236a144 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_019.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 19 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_020.bc b/contrib/bc/tests/bc/scripts/print_020.bc new file mode 100644 index 000000000000..df15b92c727a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_020.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 20 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_021.bc b/contrib/bc/tests/bc/scripts/print_021.bc new file mode 100644 index 000000000000..83b3d2ad3c73 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_021.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 21 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_022.bc b/contrib/bc/tests/bc/scripts/print_022.bc new file mode 100644 index 000000000000..9ab0d5e92f5c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_022.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 22 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_023.bc b/contrib/bc/tests/bc/scripts/print_023.bc new file mode 100644 index 000000000000..4641ee25d325 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_023.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 23 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_024.bc b/contrib/bc/tests/bc/scripts/print_024.bc new file mode 100644 index 000000000000..7c02ba179d71 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_024.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 24 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_025.bc b/contrib/bc/tests/bc/scripts/print_025.bc new file mode 100644 index 000000000000..95883f34338f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_025.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 25 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_026.bc b/contrib/bc/tests/bc/scripts/print_026.bc new file mode 100644 index 000000000000..152fe8053ddd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_026.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 26 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_027.bc b/contrib/bc/tests/bc/scripts/print_027.bc new file mode 100644 index 000000000000..60b56ca3112e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_027.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 27 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_028.bc b/contrib/bc/tests/bc/scripts/print_028.bc new file mode 100644 index 000000000000..b41b482aaec9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_028.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 28 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_029.bc b/contrib/bc/tests/bc/scripts/print_029.bc new file mode 100644 index 000000000000..3637407473e3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_029.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 29 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_030.bc b/contrib/bc/tests/bc/scripts/print_030.bc new file mode 100644 index 000000000000..066546061a72 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_030.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 30 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_031.bc b/contrib/bc/tests/bc/scripts/print_031.bc new file mode 100644 index 000000000000..5f0ba04afdc3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_031.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 31 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_032.bc b/contrib/bc/tests/bc/scripts/print_032.bc new file mode 100644 index 000000000000..8c1f7b83b505 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_032.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 32 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_033.bc b/contrib/bc/tests/bc/scripts/print_033.bc new file mode 100644 index 000000000000..d4af3e843772 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_033.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 33 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_034.bc b/contrib/bc/tests/bc/scripts/print_034.bc new file mode 100644 index 000000000000..90607dac7a14 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_034.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 34 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_035.bc b/contrib/bc/tests/bc/scripts/print_035.bc new file mode 100644 index 000000000000..175054b155ca --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_035.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 35 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_036.bc b/contrib/bc/tests/bc/scripts/print_036.bc new file mode 100644 index 000000000000..63c212f3723d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_036.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 36 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_037.bc b/contrib/bc/tests/bc/scripts/print_037.bc new file mode 100644 index 000000000000..8e51d9af1c40 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_037.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 37 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_038.bc b/contrib/bc/tests/bc/scripts/print_038.bc new file mode 100644 index 000000000000..7208ed1e8507 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_038.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 38 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_039.bc b/contrib/bc/tests/bc/scripts/print_039.bc new file mode 100644 index 000000000000..0459f33f2e0d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_039.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 39 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_040.bc b/contrib/bc/tests/bc/scripts/print_040.bc new file mode 100644 index 000000000000..53df241dbaf0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_040.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 40 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_041.bc b/contrib/bc/tests/bc/scripts/print_041.bc new file mode 100644 index 000000000000..c539ad9592ee --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_041.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 41 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_042.bc b/contrib/bc/tests/bc/scripts/print_042.bc new file mode 100644 index 000000000000..088c3b2f4cb4 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_042.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 42 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_043.bc b/contrib/bc/tests/bc/scripts/print_043.bc new file mode 100644 index 000000000000..8646a8f2af4c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_043.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 43 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_044.bc b/contrib/bc/tests/bc/scripts/print_044.bc new file mode 100644 index 000000000000..1bd208266f4b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_044.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 44 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_045.bc b/contrib/bc/tests/bc/scripts/print_045.bc new file mode 100644 index 000000000000..7463c3e5575a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_045.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 45 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_046.bc b/contrib/bc/tests/bc/scripts/print_046.bc new file mode 100644 index 000000000000..dd78294c5bb1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_046.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 46 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_047.bc b/contrib/bc/tests/bc/scripts/print_047.bc new file mode 100644 index 000000000000..3b0654918876 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_047.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 47 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_048.bc b/contrib/bc/tests/bc/scripts/print_048.bc new file mode 100644 index 000000000000..71dba3d7e536 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_048.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 48 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_049.bc b/contrib/bc/tests/bc/scripts/print_049.bc new file mode 100644 index 000000000000..7ab19539ef2a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_049.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 49 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_050.bc b/contrib/bc/tests/bc/scripts/print_050.bc new file mode 100644 index 000000000000..93983f5f5c6f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_050.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 50 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_051.bc b/contrib/bc/tests/bc/scripts/print_051.bc new file mode 100644 index 000000000000..32f5e76a46b5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_051.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 51 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_052.bc b/contrib/bc/tests/bc/scripts/print_052.bc new file mode 100644 index 000000000000..662170d78452 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_052.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 52 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_053.bc b/contrib/bc/tests/bc/scripts/print_053.bc new file mode 100644 index 000000000000..05986f27bd7e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_053.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 53 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_054.bc b/contrib/bc/tests/bc/scripts/print_054.bc new file mode 100644 index 000000000000..92e20b70329a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_054.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 54 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_055.bc b/contrib/bc/tests/bc/scripts/print_055.bc new file mode 100644 index 000000000000..014637b461c2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_055.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 55 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_056.bc b/contrib/bc/tests/bc/scripts/print_056.bc new file mode 100644 index 000000000000..42642cb8e29d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_056.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 56 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_057.bc b/contrib/bc/tests/bc/scripts/print_057.bc new file mode 100644 index 000000000000..e4dd3d1eb8f6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_057.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 57 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_058.bc b/contrib/bc/tests/bc/scripts/print_058.bc new file mode 100644 index 000000000000..cc2e5e5e1dae --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_058.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 58 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_059.bc b/contrib/bc/tests/bc/scripts/print_059.bc new file mode 100644 index 000000000000..2abe27da21da --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_059.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 59 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_060.bc b/contrib/bc/tests/bc/scripts/print_060.bc new file mode 100644 index 000000000000..c542d10d1e57 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_060.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 60 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_061.bc b/contrib/bc/tests/bc/scripts/print_061.bc new file mode 100644 index 000000000000..bcd520e0f38e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_061.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 61 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_062.bc b/contrib/bc/tests/bc/scripts/print_062.bc new file mode 100644 index 000000000000..4b9875e077c3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_062.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 62 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_063.bc b/contrib/bc/tests/bc/scripts/print_063.bc new file mode 100644 index 000000000000..9f4d77042b23 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_063.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 63 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_064.bc b/contrib/bc/tests/bc/scripts/print_064.bc new file mode 100644 index 000000000000..8878d0a8e05a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_064.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 64 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_065.bc b/contrib/bc/tests/bc/scripts/print_065.bc new file mode 100644 index 000000000000..faf3b4361d09 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_065.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 65 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_066.bc b/contrib/bc/tests/bc/scripts/print_066.bc new file mode 100644 index 000000000000..07f30fa22c0f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_066.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 66 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_067.bc b/contrib/bc/tests/bc/scripts/print_067.bc new file mode 100644 index 000000000000..202604d755b0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_067.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 67 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_068.bc b/contrib/bc/tests/bc/scripts/print_068.bc new file mode 100644 index 000000000000..f90912bef26a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_068.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 68 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_069.bc b/contrib/bc/tests/bc/scripts/print_069.bc new file mode 100644 index 000000000000..175263e39074 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_069.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 69 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_070.bc b/contrib/bc/tests/bc/scripts/print_070.bc new file mode 100644 index 000000000000..0786f4d3aa14 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_070.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 70 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_071.bc b/contrib/bc/tests/bc/scripts/print_071.bc new file mode 100644 index 000000000000..292c38e91852 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_071.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 71 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_072.bc b/contrib/bc/tests/bc/scripts/print_072.bc new file mode 100644 index 000000000000..e6506ee7ee37 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_072.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 72 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_073.bc b/contrib/bc/tests/bc/scripts/print_073.bc new file mode 100644 index 000000000000..6b7d3efae5cd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_073.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 73 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_074.bc b/contrib/bc/tests/bc/scripts/print_074.bc new file mode 100644 index 000000000000..e61abaf98f94 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_074.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 74 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_075.bc b/contrib/bc/tests/bc/scripts/print_075.bc new file mode 100644 index 000000000000..84704063a65e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_075.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 75 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_076.bc b/contrib/bc/tests/bc/scripts/print_076.bc new file mode 100644 index 000000000000..3efed22515d9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_076.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 76 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_077.bc b/contrib/bc/tests/bc/scripts/print_077.bc new file mode 100644 index 000000000000..ef01f150c1b0 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_077.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 77 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_078.bc b/contrib/bc/tests/bc/scripts/print_078.bc new file mode 100644 index 000000000000..8f431f54c12f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_078.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 78 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_079.bc b/contrib/bc/tests/bc/scripts/print_079.bc new file mode 100644 index 000000000000..5eb213c19431 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_079.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 79 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_080.bc b/contrib/bc/tests/bc/scripts/print_080.bc new file mode 100644 index 000000000000..46b1a547d3a3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_080.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 80 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_081.bc b/contrib/bc/tests/bc/scripts/print_081.bc new file mode 100644 index 000000000000..9b0f2415f19e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_081.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 81 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_082.bc b/contrib/bc/tests/bc/scripts/print_082.bc new file mode 100644 index 000000000000..ac1cc4028775 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_082.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 82 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_083.bc b/contrib/bc/tests/bc/scripts/print_083.bc new file mode 100644 index 000000000000..8f6966e280f4 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_083.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 83 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_084.bc b/contrib/bc/tests/bc/scripts/print_084.bc new file mode 100644 index 000000000000..e5e2c167c6f7 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_084.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 84 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_085.bc b/contrib/bc/tests/bc/scripts/print_085.bc new file mode 100644 index 000000000000..3e5b50b591f7 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_085.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 85 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_086.bc b/contrib/bc/tests/bc/scripts/print_086.bc new file mode 100644 index 000000000000..9cfcc8982fa7 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_086.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 86 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_087.bc b/contrib/bc/tests/bc/scripts/print_087.bc new file mode 100644 index 000000000000..ed3c6687272b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_087.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 87 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_088.bc b/contrib/bc/tests/bc/scripts/print_088.bc new file mode 100644 index 000000000000..1e001883e576 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_088.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 88 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_089.bc b/contrib/bc/tests/bc/scripts/print_089.bc new file mode 100644 index 000000000000..4234219f487d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_089.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 89 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_090.bc b/contrib/bc/tests/bc/scripts/print_090.bc new file mode 100644 index 000000000000..ebe4650c1696 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_090.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 90 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_091.bc b/contrib/bc/tests/bc/scripts/print_091.bc new file mode 100644 index 000000000000..5c5fd5c95256 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_091.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 91 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_092.bc b/contrib/bc/tests/bc/scripts/print_092.bc new file mode 100644 index 000000000000..992a738fee41 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_092.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 92 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_093.bc b/contrib/bc/tests/bc/scripts/print_093.bc new file mode 100644 index 000000000000..7e91b2b5e8fd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_093.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 93 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_094.bc b/contrib/bc/tests/bc/scripts/print_094.bc new file mode 100644 index 000000000000..3567fe0bf69e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_094.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 94 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_095.bc b/contrib/bc/tests/bc/scripts/print_095.bc new file mode 100644 index 000000000000..1945f2daee1e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_095.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 95 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_096.bc b/contrib/bc/tests/bc/scripts/print_096.bc new file mode 100644 index 000000000000..837f87a57e63 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_096.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 96 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_097.bc b/contrib/bc/tests/bc/scripts/print_097.bc new file mode 100644 index 000000000000..efcf4a096ece --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_097.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 97 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_098.bc b/contrib/bc/tests/bc/scripts/print_098.bc new file mode 100644 index 000000000000..d14203d29656 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_098.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 98 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_099.bc b/contrib/bc/tests/bc/scripts/print_099.bc new file mode 100644 index 000000000000..0bbb410318ee --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_099.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 99 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/print_100.bc b/contrib/bc/tests/bc/scripts/print_100.bc new file mode 100644 index 000000000000..4ac46e3eba42 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/print_100.bc @@ -0,0 +1,22 @@ +#! /usr/bin/bc -q + +b = 100 + +s = b * b + +print "obase = ", b, "\n" +print "\qobase = \q\n" +b + +for (i = 0; i <= s; ++i) { + i + print "0.", i, "\n" + print ".", i, "\n" + print "1.", i, "\n" + print i, ".", "\n" + print i, ".", i, "\n" +} + +2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460 + +halt diff --git a/contrib/bc/tests/bc/scripts/subtract.bc b/contrib/bc/tests/bc/scripts/subtract_00100.bc index 1e592942cab3..93339780f2f7 100644 --- a/contrib/bc/tests/bc/scripts/subtract.bc +++ b/contrib/bc/tests/bc/scripts/subtract_00100.bc @@ -10,7 +10,7 @@ for (i = 0; i <= len; ++i) { a[i] } -for (i = 1; i <= 10000; ++i) { +for (i = 1; i <= 100; ++i) { for (j = 0; j < len; ++j) { a[i] - a[j] } diff --git a/contrib/bc/tests/bc/scripts/subtract_00200.bc b/contrib/bc/tests/bc/scripts/subtract_00200.bc new file mode 100644 index 000000000000..2bcad94d76d1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_00200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 101; i <= 200; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_00300.bc b/contrib/bc/tests/bc/scripts/subtract_00300.bc new file mode 100644 index 000000000000..5d5b5fd2bf61 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_00300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 201; i <= 300; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_00400.bc b/contrib/bc/tests/bc/scripts/subtract_00400.bc new file mode 100644 index 000000000000..9298eeec0007 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_00400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 301; i <= 400; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_00500.bc b/contrib/bc/tests/bc/scripts/subtract_00500.bc new file mode 100644 index 000000000000..581a8144fea7 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_00500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 401; i <= 500; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_00600.bc b/contrib/bc/tests/bc/scripts/subtract_00600.bc new file mode 100644 index 000000000000..2a1a5e6eb1ae --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_00600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 501; i <= 600; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_00700.bc b/contrib/bc/tests/bc/scripts/subtract_00700.bc new file mode 100644 index 000000000000..867277161d2c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_00700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 601; i <= 700; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_00800.bc b/contrib/bc/tests/bc/scripts/subtract_00800.bc new file mode 100644 index 000000000000..68dfd28f1108 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_00800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 701; i <= 800; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_00900.bc b/contrib/bc/tests/bc/scripts/subtract_00900.bc new file mode 100644 index 000000000000..b343861ecf26 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_00900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 801; i <= 900; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_01000.bc b/contrib/bc/tests/bc/scripts/subtract_01000.bc new file mode 100644 index 000000000000..4e8e5951c8d9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_01000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 901; i <= 1000; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_01100.bc b/contrib/bc/tests/bc/scripts/subtract_01100.bc new file mode 100644 index 000000000000..0b7d1a5ca314 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_01100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1001; i <= 1100; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_01200.bc b/contrib/bc/tests/bc/scripts/subtract_01200.bc new file mode 100644 index 000000000000..bfa237043f89 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_01200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1101; i <= 1200; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_01300.bc b/contrib/bc/tests/bc/scripts/subtract_01300.bc new file mode 100644 index 000000000000..c83483db9e8b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_01300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1201; i <= 1300; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_01400.bc b/contrib/bc/tests/bc/scripts/subtract_01400.bc new file mode 100644 index 000000000000..e979361f49f4 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_01400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1301; i <= 1400; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_01500.bc b/contrib/bc/tests/bc/scripts/subtract_01500.bc new file mode 100644 index 000000000000..c2ef1ee1385e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_01500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1401; i <= 1500; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_01600.bc b/contrib/bc/tests/bc/scripts/subtract_01600.bc new file mode 100644 index 000000000000..2113ddefeb5f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_01600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1501; i <= 1600; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_01700.bc b/contrib/bc/tests/bc/scripts/subtract_01700.bc new file mode 100644 index 000000000000..ca9505c1983f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_01700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1601; i <= 1700; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_01800.bc b/contrib/bc/tests/bc/scripts/subtract_01800.bc new file mode 100644 index 000000000000..650cc6a7d551 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_01800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1701; i <= 1800; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_01900.bc b/contrib/bc/tests/bc/scripts/subtract_01900.bc new file mode 100644 index 000000000000..72c17fd1af8a --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_01900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1801; i <= 1900; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_02000.bc b/contrib/bc/tests/bc/scripts/subtract_02000.bc new file mode 100644 index 000000000000..579c84e67f8f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_02000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 1901; i <= 2000; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_02100.bc b/contrib/bc/tests/bc/scripts/subtract_02100.bc new file mode 100644 index 000000000000..2ed9f5f0c8a9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_02100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2001; i <= 2100; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_02200.bc b/contrib/bc/tests/bc/scripts/subtract_02200.bc new file mode 100644 index 000000000000..0a11cab25d6e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_02200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2101; i <= 2200; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_02300.bc b/contrib/bc/tests/bc/scripts/subtract_02300.bc new file mode 100644 index 000000000000..29c66c1913fd --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_02300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2201; i <= 2300; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_02400.bc b/contrib/bc/tests/bc/scripts/subtract_02400.bc new file mode 100644 index 000000000000..b0f2f197a2c6 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_02400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2301; i <= 2400; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_02500.bc b/contrib/bc/tests/bc/scripts/subtract_02500.bc new file mode 100644 index 000000000000..7e9d46a8bc3b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_02500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2401; i <= 2500; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_02600.bc b/contrib/bc/tests/bc/scripts/subtract_02600.bc new file mode 100644 index 000000000000..49acabcf66e5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_02600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2501; i <= 2600; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_02700.bc b/contrib/bc/tests/bc/scripts/subtract_02700.bc new file mode 100644 index 000000000000..8d7473e93f75 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_02700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2601; i <= 2700; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_02800.bc b/contrib/bc/tests/bc/scripts/subtract_02800.bc new file mode 100644 index 000000000000..588db5a26ee7 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_02800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2701; i <= 2800; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_02900.bc b/contrib/bc/tests/bc/scripts/subtract_02900.bc new file mode 100644 index 000000000000..1e6a4fea0416 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_02900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2801; i <= 2900; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_03000.bc b/contrib/bc/tests/bc/scripts/subtract_03000.bc new file mode 100644 index 000000000000..0eb1e3da7cf9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_03000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 2901; i <= 3000; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_03100.bc b/contrib/bc/tests/bc/scripts/subtract_03100.bc new file mode 100644 index 000000000000..6513ee49fe93 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_03100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3001; i <= 3100; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_03200.bc b/contrib/bc/tests/bc/scripts/subtract_03200.bc new file mode 100644 index 000000000000..310541d4de02 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_03200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3101; i <= 3200; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_03300.bc b/contrib/bc/tests/bc/scripts/subtract_03300.bc new file mode 100644 index 000000000000..c984f7c73e04 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_03300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3201; i <= 3300; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_03400.bc b/contrib/bc/tests/bc/scripts/subtract_03400.bc new file mode 100644 index 000000000000..608ab651fc2b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_03400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3301; i <= 3400; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_03500.bc b/contrib/bc/tests/bc/scripts/subtract_03500.bc new file mode 100644 index 000000000000..215b96d850d4 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_03500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3401; i <= 3500; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_03600.bc b/contrib/bc/tests/bc/scripts/subtract_03600.bc new file mode 100644 index 000000000000..90d0d4d5144e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_03600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3501; i <= 3600; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_03700.bc b/contrib/bc/tests/bc/scripts/subtract_03700.bc new file mode 100644 index 000000000000..511bf1ed4f9d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_03700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3601; i <= 3700; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_03800.bc b/contrib/bc/tests/bc/scripts/subtract_03800.bc new file mode 100644 index 000000000000..99b69618b745 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_03800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3701; i <= 3800; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_03900.bc b/contrib/bc/tests/bc/scripts/subtract_03900.bc new file mode 100644 index 000000000000..a438bdfb86be --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_03900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3801; i <= 3900; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_04000.bc b/contrib/bc/tests/bc/scripts/subtract_04000.bc new file mode 100644 index 000000000000..7371044e02c3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_04000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 3901; i <= 4000; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_04100.bc b/contrib/bc/tests/bc/scripts/subtract_04100.bc new file mode 100644 index 000000000000..f9f47d394f65 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_04100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4001; i <= 4100; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_04200.bc b/contrib/bc/tests/bc/scripts/subtract_04200.bc new file mode 100644 index 000000000000..56ff98e521b1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_04200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4101; i <= 4200; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_04300.bc b/contrib/bc/tests/bc/scripts/subtract_04300.bc new file mode 100644 index 000000000000..2ee5767b2088 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_04300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4201; i <= 4300; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_04400.bc b/contrib/bc/tests/bc/scripts/subtract_04400.bc new file mode 100644 index 000000000000..b355f189948f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_04400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4301; i <= 4400; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_04500.bc b/contrib/bc/tests/bc/scripts/subtract_04500.bc new file mode 100644 index 000000000000..aa34485891ce --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_04500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4401; i <= 4500; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_04600.bc b/contrib/bc/tests/bc/scripts/subtract_04600.bc new file mode 100644 index 000000000000..cd5bea596488 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_04600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4501; i <= 4600; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_04700.bc b/contrib/bc/tests/bc/scripts/subtract_04700.bc new file mode 100644 index 000000000000..36de8058bb93 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_04700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4601; i <= 4700; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_04800.bc b/contrib/bc/tests/bc/scripts/subtract_04800.bc new file mode 100644 index 000000000000..cc714dd72fd9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_04800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4701; i <= 4800; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_04900.bc b/contrib/bc/tests/bc/scripts/subtract_04900.bc new file mode 100644 index 000000000000..6e8cfb8c931d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_04900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4801; i <= 4900; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_05000.bc b/contrib/bc/tests/bc/scripts/subtract_05000.bc new file mode 100644 index 000000000000..f4847219bdb9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_05000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 4901; i <= 5000; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_05100.bc b/contrib/bc/tests/bc/scripts/subtract_05100.bc new file mode 100644 index 000000000000..bea4f5b09f2d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_05100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5001; i <= 5100; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_05200.bc b/contrib/bc/tests/bc/scripts/subtract_05200.bc new file mode 100644 index 000000000000..38a7b5c6d234 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_05200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5101; i <= 5200; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_05300.bc b/contrib/bc/tests/bc/scripts/subtract_05300.bc new file mode 100644 index 000000000000..9004108f3e8d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_05300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5201; i <= 5300; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_05400.bc b/contrib/bc/tests/bc/scripts/subtract_05400.bc new file mode 100644 index 000000000000..eec164c504cb --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_05400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5301; i <= 5400; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_05500.bc b/contrib/bc/tests/bc/scripts/subtract_05500.bc new file mode 100644 index 000000000000..864f05e70d25 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_05500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5401; i <= 5500; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_05600.bc b/contrib/bc/tests/bc/scripts/subtract_05600.bc new file mode 100644 index 000000000000..874f45183b7c --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_05600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5501; i <= 5600; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_05700.bc b/contrib/bc/tests/bc/scripts/subtract_05700.bc new file mode 100644 index 000000000000..6a5c351c574f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_05700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5601; i <= 5700; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_05800.bc b/contrib/bc/tests/bc/scripts/subtract_05800.bc new file mode 100644 index 000000000000..5fc99fe84503 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_05800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5701; i <= 5800; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_05900.bc b/contrib/bc/tests/bc/scripts/subtract_05900.bc new file mode 100644 index 000000000000..cb12eba549b2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_05900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5801; i <= 5900; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_06000.bc b/contrib/bc/tests/bc/scripts/subtract_06000.bc new file mode 100644 index 000000000000..0c85a7267eb1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_06000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 5901; i <= 6000; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_06100.bc b/contrib/bc/tests/bc/scripts/subtract_06100.bc new file mode 100644 index 000000000000..8f43fc2687d3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_06100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6001; i <= 6100; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_06200.bc b/contrib/bc/tests/bc/scripts/subtract_06200.bc new file mode 100644 index 000000000000..d508561b5838 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_06200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6101; i <= 6200; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_06300.bc b/contrib/bc/tests/bc/scripts/subtract_06300.bc new file mode 100644 index 000000000000..3073a3f75dfc --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_06300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6201; i <= 6300; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_06400.bc b/contrib/bc/tests/bc/scripts/subtract_06400.bc new file mode 100644 index 000000000000..ee25fc01bca3 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_06400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6301; i <= 6400; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_06500.bc b/contrib/bc/tests/bc/scripts/subtract_06500.bc new file mode 100644 index 000000000000..ff59fcde38c2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_06500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6401; i <= 6500; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_06600.bc b/contrib/bc/tests/bc/scripts/subtract_06600.bc new file mode 100644 index 000000000000..8bd56c8d2df9 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_06600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6501; i <= 6600; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_06700.bc b/contrib/bc/tests/bc/scripts/subtract_06700.bc new file mode 100644 index 000000000000..160a31bdf4a2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_06700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6601; i <= 6700; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_06800.bc b/contrib/bc/tests/bc/scripts/subtract_06800.bc new file mode 100644 index 000000000000..7d2bc99dec0d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_06800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6701; i <= 6800; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_06900.bc b/contrib/bc/tests/bc/scripts/subtract_06900.bc new file mode 100644 index 000000000000..716d7c273111 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_06900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6801; i <= 6900; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_07000.bc b/contrib/bc/tests/bc/scripts/subtract_07000.bc new file mode 100644 index 000000000000..259dc55507f2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_07000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 6901; i <= 7000; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_07100.bc b/contrib/bc/tests/bc/scripts/subtract_07100.bc new file mode 100644 index 000000000000..b992c30681ec --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_07100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7001; i <= 7100; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_07200.bc b/contrib/bc/tests/bc/scripts/subtract_07200.bc new file mode 100644 index 000000000000..afa77522e912 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_07200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7101; i <= 7200; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_07300.bc b/contrib/bc/tests/bc/scripts/subtract_07300.bc new file mode 100644 index 000000000000..5dd6997fbeff --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_07300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7201; i <= 7300; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_07400.bc b/contrib/bc/tests/bc/scripts/subtract_07400.bc new file mode 100644 index 000000000000..70b88b1bc04b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_07400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7301; i <= 7400; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_07500.bc b/contrib/bc/tests/bc/scripts/subtract_07500.bc new file mode 100644 index 000000000000..806565dc5fa8 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_07500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7401; i <= 7500; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_07600.bc b/contrib/bc/tests/bc/scripts/subtract_07600.bc new file mode 100644 index 000000000000..b063df122391 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_07600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7501; i <= 7600; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_07700.bc b/contrib/bc/tests/bc/scripts/subtract_07700.bc new file mode 100644 index 000000000000..f31cb7b170a8 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_07700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7601; i <= 7700; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_07800.bc b/contrib/bc/tests/bc/scripts/subtract_07800.bc new file mode 100644 index 000000000000..222b583de5c5 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_07800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7701; i <= 7800; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_07900.bc b/contrib/bc/tests/bc/scripts/subtract_07900.bc new file mode 100644 index 000000000000..8a36cb2020c2 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_07900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7801; i <= 7900; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_08000.bc b/contrib/bc/tests/bc/scripts/subtract_08000.bc new file mode 100644 index 000000000000..8b10e0644622 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_08000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 7901; i <= 8000; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_08100.bc b/contrib/bc/tests/bc/scripts/subtract_08100.bc new file mode 100644 index 000000000000..b7bf9481f6ff --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_08100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8001; i <= 8100; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_08200.bc b/contrib/bc/tests/bc/scripts/subtract_08200.bc new file mode 100644 index 000000000000..2cf2b2282ca1 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_08200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8101; i <= 8200; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_08300.bc b/contrib/bc/tests/bc/scripts/subtract_08300.bc new file mode 100644 index 000000000000..43e1090b2708 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_08300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8201; i <= 8300; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_08400.bc b/contrib/bc/tests/bc/scripts/subtract_08400.bc new file mode 100644 index 000000000000..ecde1157ef8d --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_08400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8301; i <= 8400; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_08500.bc b/contrib/bc/tests/bc/scripts/subtract_08500.bc new file mode 100644 index 000000000000..5e6e8ac95d34 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_08500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8401; i <= 8500; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_08600.bc b/contrib/bc/tests/bc/scripts/subtract_08600.bc new file mode 100644 index 000000000000..f56db3c36a3b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_08600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8501; i <= 8600; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_08700.bc b/contrib/bc/tests/bc/scripts/subtract_08700.bc new file mode 100644 index 000000000000..3d5d9b94598b --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_08700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8601; i <= 8700; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_08800.bc b/contrib/bc/tests/bc/scripts/subtract_08800.bc new file mode 100644 index 000000000000..87a5449472da --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_08800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8701; i <= 8800; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_08900.bc b/contrib/bc/tests/bc/scripts/subtract_08900.bc new file mode 100644 index 000000000000..2ac715811882 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_08900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8801; i <= 8900; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_09000.bc b/contrib/bc/tests/bc/scripts/subtract_09000.bc new file mode 100644 index 000000000000..7c39d922b736 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_09000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 8901; i <= 9000; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_09100.bc b/contrib/bc/tests/bc/scripts/subtract_09100.bc new file mode 100644 index 000000000000..5b8c99cf0312 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_09100.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9001; i <= 9100; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_09200.bc b/contrib/bc/tests/bc/scripts/subtract_09200.bc new file mode 100644 index 000000000000..173f64d70786 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_09200.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9101; i <= 9200; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_09300.bc b/contrib/bc/tests/bc/scripts/subtract_09300.bc new file mode 100644 index 000000000000..6226e6fecb1f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_09300.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9201; i <= 9300; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_09400.bc b/contrib/bc/tests/bc/scripts/subtract_09400.bc new file mode 100644 index 000000000000..0e76fa04f14f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_09400.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9301; i <= 9400; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_09500.bc b/contrib/bc/tests/bc/scripts/subtract_09500.bc new file mode 100644 index 000000000000..b5336018e368 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_09500.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9401; i <= 9500; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_09600.bc b/contrib/bc/tests/bc/scripts/subtract_09600.bc new file mode 100644 index 000000000000..479bfe29e361 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_09600.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9501; i <= 9600; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_09700.bc b/contrib/bc/tests/bc/scripts/subtract_09700.bc new file mode 100644 index 000000000000..14c5df67605e --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_09700.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9601; i <= 9700; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_09800.bc b/contrib/bc/tests/bc/scripts/subtract_09800.bc new file mode 100644 index 000000000000..5d62bae24a40 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_09800.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9701; i <= 9800; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_09900.bc b/contrib/bc/tests/bc/scripts/subtract_09900.bc new file mode 100644 index 000000000000..d2926980b543 --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_09900.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9801; i <= 9900; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/scripts/subtract_10000.bc b/contrib/bc/tests/bc/scripts/subtract_10000.bc new file mode 100644 index 000000000000..32cafefd324f --- /dev/null +++ b/contrib/bc/tests/bc/scripts/subtract_10000.bc @@ -0,0 +1,17 @@ +#! /usr/bin/bc -lq + +scale = 20 +x = 1234567890 / scale +len = length(x) + 1 + scale +len *= 2 + +for (i = 0; i <= len; ++i) { + a[i] = x * (10^i) + a[i] +} + +for (i = 9901; i <= 10000; ++i) { + for (j = 0; j < len; ++j) { + a[i] - a[j] + } +} diff --git a/contrib/bc/tests/bc/timeconst.sh b/contrib/bc/tests/bc/timeconst.sh index 35bd80d56040..393268843649 100755 --- a/contrib/bc/tests/bc/timeconst.sh +++ b/contrib/bc/tests/bc/timeconst.sh @@ -1,6 +1,6 @@ #! /bin/sh # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -81,6 +81,9 @@ base=$(basename "$timeconst") # If the script does not exist, just skip. Running this test is not necessary. if [ ! -f "$timeconst" ]; then printf 'Warning: %s does not exist\n' "$timeconst" + printf '%s is not part of this bc because of license incompatibility\n' "$timeconst" + printf 'Get it at https://github.com/torvalds/linux/blob/master/kernel/time/timeconst.bc\n' + printf 'if you want to test it\n' printf 'Skipping...\n' exit 0 fi diff --git a/contrib/bc/tests/bcl.c b/contrib/bc/tests/bcl.c index 3a2df4488c05..fb730e773c6d 100644 --- a/contrib/bc/tests/bcl.c +++ b/contrib/bc/tests/bcl.c @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (c) 2018-2024 Gavin D. Howard and contributors. + * Copyright (c) 2018-2025 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/tests/dc/scripts/easter.dc b/contrib/bc/tests/dc/scripts/easter.dc new file mode 100644 index 000000000000..e2c126ba1129 --- /dev/null +++ b/contrib/bc/tests/dc/scripts/easter.dc @@ -0,0 +1,49 @@ +#! /usr/bin/dc + +# This is the actual script. +[ + ddsf + [ + lfp + [too early + ]P + q + ]s@ + 1583>@ + ddd19%1+sg100/1+d3*4/12-sx8*5+25/5-sz5*4/lx-10-sdlg11*20+lz+lx-30% + d + [30+]s@ + 0>@d + [ + [1+]s@ + lg11<@ + ]s@ + 25=@d + [1+]s@ + 24=@se44le-d + [30+]s@ + 21>@dld+7%-7+ + [March ]sm + d + [ + 31- + [April ]sm + ]s@ + 31<@dn32PsnlmPdnsn1z>p + 10P +]sp + +2021 +lpx + +2022 +lpx + +2023 +lpx + +2024 +lpx + +2025 +lpx diff --git a/contrib/bc/tests/dc/scripts/easter.sh b/contrib/bc/tests/dc/scripts/easter.sh deleted file mode 100755 index ee8fa1d94c81..000000000000 --- a/contrib/bc/tests/dc/scripts/easter.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/sh -# -# SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# - -set -e - -script="$0" - -testdir=$(dirname "${script}") - -# Just print the usage and exit with an error. This can receive a message to -# print. -# @param 1 A message to print. -usage() { - if [ $# -eq 1 ]; then - printf '%s\n\n' "$1" - fi - printf 'usage: %s dc_exec year [options...]\n' "$script" - exit 1 -} - -. "$testdir/../../../scripts/functions.sh" - -if test $# -lt 2 -then - usage "Not enough arguments; need 2" -fi - -dc_exec="$1" -shift -check_exec_arg "$dc_exec" - -year="$1" -shift - -echo $year ' -[ - ddsf - [ - lfp - [too early - ]P - q - ]s@ - 1583>@ - ddd19%1+sg100/1+d3*4/12-sx8*5+25/5-sz5*4/lx-10-sdlg11*20+lz+lx-30% - d - [30+]s@ - 0>@d - [ - [1+]s@ - lg11<@ - ]s@ - 25=@d - [1+]s@ - 24=@se44le-d - [30+]s@ - 21>@dld+7%-7+ - [March ]sm - d - [ - 31- - [April ]sm - ]s@ - 31<@psnlmPpsn1z>p -]sp -lpx' | "$dc_exec" "$@" | tr '\012' ' ' -echo '' diff --git a/contrib/bc/tests/dc/scripts/easter.txt b/contrib/bc/tests/dc/scripts/easter.txt new file mode 100644 index 000000000000..0aef9531346d --- /dev/null +++ b/contrib/bc/tests/dc/scripts/easter.txt @@ -0,0 +1,5 @@ +4 April 2021 +17 April 2022 +9 April 2023 +31 March 2024 +20 April 2025 diff --git a/contrib/bc/tests/dc/scripts/prime.dc b/contrib/bc/tests/dc/scripts/prime.dc index cc769d2bbee1..6902aaef8f0c 100644 --- a/contrib/bc/tests/dc/scripts/prime.dc +++ b/contrib/bc/tests/dc/scripts/prime.dc @@ -1 +1 @@ -0k2p3p[dl!d2+s!%0=@l!l^!<#]s#[s/0ds^]s@[p]s&[ddvs^3s!l# x0<&2+d100000>.]ds.x +0k2p3p[dl!d2+s!%0=@l!l^!<#]s#[s/0ds^]s@[p]s&[ddvs^3s!l# x0<&2+d10000>.]ds.x diff --git a/contrib/bc/tests/error.sh b/contrib/bc/tests/error.sh index 15cbd5577ed6..aa229a916809 100755 --- a/contrib/bc/tests/error.sh +++ b/contrib/bc/tests/error.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -100,8 +100,6 @@ fi if [ "$d" = "bc" ]; then opts="-l" halt="halt" - read_call="read()" - read_expr="${read_call}\n5+5;" else opts="-x" halt="q" diff --git a/contrib/bc/tests/errors.sh b/contrib/bc/tests/errors.sh index 47053f9c7b43..93e4f5d0dedf 100755 --- a/contrib/bc/tests/errors.sh +++ b/contrib/bc/tests/errors.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -89,8 +89,6 @@ read_errors="read_errors" if [ "$d" = "bc" ]; then opts="-l" halt="halt" - read_call="read()" - read_expr="${read_call}\n5+5;" else opts="-x" halt="q" diff --git a/contrib/bc/tests/extra_required.txt b/contrib/bc/tests/extra_required.txt index 038e6775d644..b335af4d57bf 100644 --- a/contrib/bc/tests/extra_required.txt +++ b/contrib/bc/tests/extra_required.txt @@ -1,5 +1,20 @@ engineering -lib2 +lib2_p +lib2_r +lib2_ceil +lib2_log +lib2_root +lib2_gcd +lib2_bytes +lib2_pi +lib2_tan +lib2_a2 +lib2_r2d +lib2_d2r +lib2_fac +lib2_perm +lib2_uint +lib2_rand fib places rand diff --git a/contrib/bc/tests/history.py b/contrib/bc/tests/history.py index a3b722386a62..cf19174f6d90 100755 --- a/contrib/bc/tests/history.py +++ b/contrib/bc/tests/history.py @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -128,7 +128,7 @@ def write_str(child, s): def bc_banner(child): bc_banner1 = "bc [0-9]+\\.[0-9]+\\.[0-9]+\r\n" bc_banner2 = "Copyright \\(c\\) 2018-[2-9][0-9][0-9][0-9] Gavin D. Howard and contributors\r\n" - bc_banner3 = "Report bugs at: https://git.gavinhoward.com/gavin/bc\r\n\r\n" + bc_banner3 = "Report bugs at: https://github.com/gavinhoward/bc\r\n\r\n" bc_banner4 = "This is free software with ABSOLUTELY NO WARRANTY.\r\n\r\n" expect(child, bc_banner1) expect(child, bc_banner2) diff --git a/contrib/bc/tests/history.sh b/contrib/bc/tests/history.sh index d06d3c6af104..514ee1769903 100755 --- a/contrib/bc/tests/history.sh +++ b/contrib/bc/tests/history.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/tests/other.sh b/contrib/bc/tests/other.sh deleted file mode 100755 index 1012fe919dea..000000000000 --- a/contrib/bc/tests/other.sh +++ /dev/null @@ -1,593 +0,0 @@ -#! /bin/sh -# -# SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# - -set -e - -script="$0" -testdir=$(dirname "$script") - -. "$testdir/../scripts/functions.sh" - -outputdir=${BC_TEST_OUTPUT_DIR:-$testdir} - -# Just print the usage and exit with an error. This can receive a message to -# print. -# @param 1 A message to print. -usage() { - if [ $# -eq 1 ]; then - printf '%s\n\n' "$1" - fi - printf 'usage: %s dir extra_math [exec args...]\n' "$script" - exit 1 -} - -# Command-line processing. -if [ "$#" -ge 2 ]; then - - d="$1" - shift - check_d_arg "$d" - - extra_math="$1" - shift - check_bool_arg "$extra_math" - -else - usage "Not enough arguments; need 2" -fi - -if [ "$#" -lt 1 ]; then - exe="$testdir/../bin/$d" - check_exec_arg "$exe" -else - exe="$1" - shift - check_exec_arg "$exe" -fi - -if [ "$d" = "bc" ]; then - halt="quit" -else - halt="q" -fi - -mkdir -p "$outputdir" - -# For tests later. -num=100000000000000000000000000000000000000000000000000000000000000000000000000000 -num2="$num" -numres="$num" -num70="10000000000000000000000000000000000000000000000000000000000000000000\\ -0000000000" - -# Set stuff for the correct calculator. -if [ "$d" = "bc" ]; then - halt="halt" - opt="x" - lopt="extended-register" - line_var="BC_LINE_LENGTH" - lltest="line_length()" -else - halt="q" - opt="l" - lopt="mathlib" - line_var="DC_LINE_LENGTH" - num="$num pR" - lltest="glpR" -fi - -# I use these, so unset them to make the tests work. -unset BC_ENV_ARGS -unset BC_LINE_LENGTH -unset DC_ENV_ARGS -unset DC_LINE_LENGTH - -set +e - -printf '\nRunning %s quit test...' "$d" - -printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" > /dev/null 2>&1 - -checktest_retcode "$d" "$?" "quit" - -# bc has two halt or quit commands, so test the second as well. -if [ "$d" = bc ]; then - - printf '%s\n' "quit" 2> /dev/null | "$exe" "$@" > /dev/null 2>&1 - - checktest_retcode "$d" "$?" quit - - two=$("$exe" "$@" -e 1+1 -e quit) - - checktest_retcode "$d" "$?" quit - - if [ "$two" != "2" ]; then - err_exit "$d failed test quit" 1 - fi -fi - -printf 'pass\n' - -base=$(basename "$exe") - -printf 'Running %s environment var tests...' "$d" - -if [ "$d" = "bc" ]; then - - export BC_ENV_ARGS=" '-l' '' -q" - - printf 's(.02893)\n' 2> /dev/null | "$exe" "$@" > /dev/null - - checktest_retcode "$d" "$?" "environment var" - - printf 'halt\n' 2> /dev/null | "$exe" "$@" -e 4 > /dev/null - - err="$?" - checktest_retcode "$d" "$?" "environment var" - - printf 'pass\n' - - printf 'Running keyword redefinition test...' - - unset BC_ENV_ARGS - - redefine_res="$outputdir/bc_outputs/redefine.txt" - redefine_out="$outputdir/bc_outputs/redefine_results.txt" - - outdir=$(dirname "$redefine_out") - - if [ ! -d "$outdir" ]; then - mkdir -p "$outdir" - fi - - printf '5\n0\n' > "$redefine_res" - - printf 'halt\n' 2> /dev/null | "$exe" "$@" --redefine=print -e 'define print(x) { x }' -e 'print(5)' > "$redefine_out" - err="$?" - - checktest "$d" "$err" "keyword redefinition" "$redefine_res" "$redefine_out" - - printf 'halt\n' 2> /dev/null | "$exe" "$@" -r "abs" -r "else" -e 'abs = 5;else = 0' -e 'abs;else' > "$redefine_out" - err="$?" - - checktest "$d" "$err" "keyword redefinition" "$redefine_res" "$redefine_out" - - if [ "$extra_math" -ne 0 ]; then - - printf 'halt\n' 2> /dev/null | "$exe" "$@" -lr abs -e "perm(5, 1)" -e "0" > "$redefine_out" - err="$?" - - checktest "$d" "$err" "keyword not redefined in builtin library" "$redefine_res" "$redefine_out" - - fi - - "$exe" "$@" -r "break" -e 'define break(x) { x }' 2> "$redefine_out" - err="$?" - - checkerrtest "$d" "$err" "keyword redefinition error" "$redefine_out" "$d" - - "$exe" "$@" -e 'define read(x) { x }' 2> "$redefine_out" - err="$?" - - checkerrtest "$d" "$err" "Keyword redefinition error without BC_REDEFINE_KEYWORDS" "$redefine_out" "$d" - - printf 'pass\n' - printf 'Running multiline comment expression file test...' - - multiline_expr_res="" - multiline_expr_out="$outputdir/bc_outputs/multiline_expr_results.txt" - - # tests/bc/misc1.txt happens to have a multiline comment in it. - printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/misc1.txt" > "$multiline_expr_out" - err="$?" - - checktest "$d" "$err" "multiline comment in expression file" "$testdir/bc/misc1_results.txt" \ - "$multiline_expr_out" - - printf 'pass\n' - printf 'Running multiline comment expression file error test...' - - printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/errors/05.txt" 2> "$multiline_expr_out" - err="$?" - - checkerrtest "$d" "$err" "multiline comment in expression file error" \ - "$multiline_expr_out" "$d" - - printf 'pass\n' - printf 'Running multiline string expression file test...' - - # tests/bc/strings.txt happens to have a multiline string in it. - printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/strings.txt" > "$multiline_expr_out" - err="$?" - - checktest "$d" "$err" "multiline string in expression file" "$testdir/bc/strings_results.txt" \ - "$multiline_expr_out" - - printf 'pass\n' - printf 'Running multiline string expression file error test...' - - printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/errors/16.txt" 2> "$multiline_expr_out" - err="$?" - - checkerrtest "$d" "$err" "multiline string in expression file with backslash error" \ - "$multiline_expr_out" "$d" - - printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/errors/04.txt" 2> "$multiline_expr_out" - err="$?" - - checkerrtest "$d" "$err" "multiline string in expression file error" \ - "$multiline_expr_out" "$d" - - printf 'pass\n' - -else - - export DC_ENV_ARGS="'-x'" - export DC_EXPR_EXIT="1" - - printf '4s stuff\n' 2> /dev/null | "$exe" "$@" > /dev/null - - checktest_retcode "$d" "$?" "environment var" - - "$exe" "$@" -e 4pR > /dev/null - - checktest_retcode "$d" "$?" "environment var" - - printf 'pass\n' - - set +e - - # dc has an extra test for a case that someone found running this easter.dc - # script. It went into an infinite loop, so we want to check that we did not - # regress. - printf 'three\n' 2> /dev/null | cut -c1-3 > /dev/null - err=$? - - if [ "$err" -eq 0 ]; then - - printf 'Running dc Easter script...' - - easter_out="$outputdir/dc_outputs/easter.txt" - easter_res="$outputdir/dc_outputs/easter_results.txt" - - outdir=$(dirname "$easter_out") - - if [ ! -d "$outdir" ]; then - mkdir -p "$outdir" - fi - - printf '4 April 2021\n' > "$easter_res" - - "$testdir/dc/scripts/easter.sh" "$exe" 2021 "$@" 2> /dev/null | cut -c1-12 > "$easter_out" - err="$?" - - checktest "$d" "$err" "Easter script" "$easter_out" "$easter_res" - - printf 'pass\n' - fi - - unset DC_ENV_ARGS - unset DC_EXPR_EXIT - - printf 'Running dc extended register command tests...' - - ext_reg_out="$outputdir/dc_outputs/ext_reg.txt" - ext_reg_res="$outputdir/dc_outputs/ext_reg_results.txt" - - outdir=$(dirname "$ext_reg_out") - - if [ ! -d "$outdir" ]; then - mkdir -p "$outdir" - fi - - printf '0\n' > "$ext_reg_res" - - printf '%s\n' "$halt" | "$exe" "$@" -e "gxpR" 2> /dev/null > "$ext_reg_out" - err="$?" - - checktest "$d" "$err" "Extended register command" "$ext_reg_out" "$ext_reg_res" - - printf '1\n' > "$ext_reg_res" - - printf '%s\n' "$halt" | "$exe" "$@" -x -e "gxpR" 2> /dev/null > "$ext_reg_out" - err="$?" - - checktest "$d" "$err" "Extended register command" "$ext_reg_out" "$ext_reg_res" - - printf 'pass\n' - -fi - -out1="$outputdir/${d}_outputs/${d}_other.txt" -out2="$outputdir/${d}_outputs/${d}_other_test.txt" - -printf 'Running %s line length tests...' "$d" - -printf '%s\n' "$numres" > "$out1" - -export "$line_var"=80 -printf '%s\n' "$num" 2> /dev/null | "$exe" "$@" > "$out2" - -checktest "$d" "$?" "line length" "$out1" "$out2" - -printf '%s\n' "$num70" > "$out1" - -export "$line_var"=2147483647 -printf '%s\n' "$num" 2> /dev/null | "$exe" "$@" > "$out2" - -checktest "$d" "$?" "line length 2" "$out1" "$out2" - -printf '%s\n' "$num2" > "$out1" - -export "$line_var"=62 -printf '%s\n' "$num" 2> /dev/null | "$exe" "$@" -L > "$out2" - -checktest "$d" "$?" "line length 3" "$out1" "$out2" - -printf '0\n' > "$out1" -printf '%s\n' "$lltest" 2> /dev/null | "$exe" "$@" -L > "$out2" - -checktest "$d" "$?" "line length 3" "$out1" "$out2" - -printf 'pass\n' - -printf '%s\n' "$numres" > "$out1" -export "$line_var"=2147483647 - -printf 'Running %s arg tests...' "$d" - -f="$testdir/$d/add.txt" -exprs=$(cat "$f") -results=$(cat "$testdir/$d/add_results.txt") - -printf '%s\n%s\n%s\n%s\n' "$results" "$results" "$results" "$results" > "$out1" - -"$exe" "$@" -e "$exprs" -f "$f" --expression "$exprs" --file "$f" -e "$halt" > "$out2" - -checktest "$d" "$?" "arg" "$out1" "$out2" - -printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -- "$f" "$f" "$f" "$f" > "$out2" - -checktest "$d" "$?" "arg" "$out1" "$out2" - -if [ "$d" = "bc" ]; then - printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -i > /dev/null 2>&1 -fi - -printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -h > /dev/null -checktest_retcode "$d" "$?" "arg" -printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -P > /dev/null -checktest_retcode "$d" "$?" "arg" -printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -R > /dev/null -checktest_retcode "$d" "$?" "arg" -printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -v > /dev/null -checktest_retcode "$d" "$?" "arg" -printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -V > /dev/null -checktest_retcode "$d" "$?" "arg" - -out=$(printf '0.1\n-0.1\n1.1\n-1.1\n0.1\n-0.1\n') -printf '%s\n' "$out" > "$out1" - -if [ "$d" = "bc" ]; then - data=$(printf '0.1\n-0.1\n1.1\n-1.1\n.1\n-.1\n') -else - data=$(printf '0.1pR\n_0.1pR\n1.1pR\n_1.1pR\n.1pR\n_.1pR\n') -fi - -printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" -z > "$out2" -checktest "$d" "$?" "leading zero" "$out1" "$out2" - -if [ "$d" = "bc" ] && [ "$extra_math" -ne 0 ]; then - - printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -lz "$testdir/bc/leadingzero.txt" > "$out2" - - checktest "$d" "$?" "leading zero script" "$testdir/bc/leadingzero_results.txt" "$out2" - -fi - -"$exe" "$@" -f "saotehasotnehasthistohntnsahxstnhalcrgxgrlpyasxtsaosysxsatnhoy.txt" > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "invalid file argument" "$out2" "$d" - -"$exe" "$@" "-$opt" -e "$exprs" > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "invalid option argument" "$out2" "$d" - -"$exe" "$@" "--$lopt" -e "$exprs" > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "invalid long option argument" "$out2" "$d" - -"$exe" "$@" "-u" -e "$exprs" > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "unrecognized option argument" "$out2" "$d" - -"$exe" "$@" "--uniform" -e "$exprs" > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "unrecognized long option argument" "$out2" "$d" - -"$exe" "$@" -f > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "missing required argument to short option" "$out2" "$d" - -"$exe" "$@" --file > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "missing required argument to long option" "$out2" "$d" - -"$exe" "$@" --version=5 > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "given argument to long option with no argument" "$out2" "$d" - -"$exe" "$@" -: > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "colon short option" "$out2" "$d" - -"$exe" "$@" --: > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "colon long option" "$out2" "$d" - -printf 'pass\n' - -printf 'Running %s builtin variable arg tests...' "$d" - -if [ "$extra_math" -ne 0 ]; then - - out=$(printf '14\n15\n16\n17.25\n') - printf '%s\n' "$out" > "$out1" - - if [ "$d" = "bc" ]; then - data=$(printf 's=scale;i=ibase;o=obase;t=seed@2;ibase=A;obase=A;s;i;o;t;') - else - data=$(printf 'J2@OIKAiAopRpRpRpR') - fi - - printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" -S14 -I15 -O16 -E17.25 > "$out2" - checktest "$d" "$?" "builtin variable args" "$out1" "$out2" - - printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" --scale=14 --ibase=15 --obase=16 --seed=17.25 > "$out2" - checktest "$d" "$?" "builtin variable long args" "$out1" "$out2" - -else - - out=$(printf '14\n15\n16\n') - printf '%s\n' "$out" > "$out1" - - if [ "$d" = "bc" ]; then - data=$(printf 's=scale;i=ibase;o=obase;ibase=A;obase=A;s;i;o;') - else - data=$(printf 'OIKAiAopRpRpR') - fi - - printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" -S14 -I15 -O16 > "$out2" - checktest "$d" "$?" "builtin variable args" "$out1" "$out2" - - printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" --scale=14 --ibase=15 --obase=16 > "$out2" - checktest "$d" "$?" "builtin variable long args" "$out1" "$out2" - -fi - -if [ "$d" = "bc" ]; then - - out=$(printf '100\n') - printf '%s\n' "$out" > "$out1" - - printf 'scale\n' 2> /dev/null | "$exe" "$@" -S100 -l > "$out2" - checktest "$d" "$?" "builtin variable args with math lib" "$out1" "$out2" - - printf 'scale\n' 2> /dev/null | "$exe" "$@" --scale=100 --mathlib > "$out2" - checktest "$d" "$?" "builtin variable long args with math lib" "$out1" "$out2" - - export BC_ENV_ARGS="-l" - - printf 'scale\n' 2> /dev/null | "$exe" "$@" -S100 > "$out2" - checktest "$d" "$?" "builtin variable args with math lib env arg" "$out1" "$out2" - - printf 'scale\n' 2> /dev/null | "$exe" "$@" --scale=100 > "$out2" - checktest "$d" "$?" "builtin variable long args with math lib env arg" "$out1" "$out2" - - export BC_ENV_ARGS="-S100" - - printf 'scale\n' 2> /dev/null | "$exe" "$@" -l > "$out2" - checktest "$d" "$?" "builtin variable args with math lib arg" "$out1" "$out2" - - export BC_ENV_ARGS="--scale=100" - - printf 'scale\n' 2> /dev/null | "$exe" "$@" -l > "$out2" - checktest "$d" "$?" "builtin variable long args with math lib arg" "$out1" "$out2" - -fi - -printf 'scale\n' 2> /dev/null | "$exe" "$@" --scale=18923c.rlg > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "invalid command-line arg for builtin variable" "$out2" "$d" - -if [ "$extra_math" -ne 0 ]; then - - printf 'seed\n' 2> /dev/null | "$exe" "$@" --seed=18923c.rlg > /dev/null 2> "$out2" - err="$?" - - checkerrtest "$d" "$err" "invalid command-line arg for seed" "$out2" "$d" - -fi - -printf 'pass\n' - -printf 'Running %s directory test...' "$d" - -"$exe" "$@" "$testdir" > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "directory" "$out2" "$d" - -printf 'pass\n' - -printf 'Running %s binary file test...' "$d" - -bin="/bin/sh" - -"$exe" "$@" "$bin" > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "binary file" "$out2" "$d" - -printf 'pass\n' - -printf 'Running %s binary stdin test...' "$d" - -cat "$bin" 2> /dev/null | "$exe" "$@" > /dev/null 2> "$out2" -err="$?" - -checkerrtest "$d" "$err" "binary stdin" "$out2" "$d" - -printf 'pass\n' - -if [ "$d" = "bc" ]; then - - printf 'Running %s limits tests...' "$d" - printf 'limits\n' 2> /dev/null | "$exe" "$@" /dev/null > "$out2" 2>&1 - - checktest_retcode "$d" "$?" "limits" - - if [ ! -s "$out2" ]; then - err_exit "$d did not produce output on the limits test" 1 - fi - - exec printf 'pass\n' - -fi diff --git a/contrib/bc/tests/read.sh b/contrib/bc/tests/read.sh deleted file mode 100755 index fd4b9b6721a5..000000000000 --- a/contrib/bc/tests/read.sh +++ /dev/null @@ -1,166 +0,0 @@ -#! /bin/sh -# -# SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# - -set -e - -script="$0" -testdir=$(dirname "$script") - -. "$testdir/../scripts/functions.sh" - -outputdir=${BC_TEST_OUTPUT_DIR:-$testdir} - -# Just print the usage and exit with an error. This can receive a message to -# print. -# @param 1 A message to print. -usage() { - if [ $# -eq 1 ]; then - printf '%s\n\n' "$1" - fi - printf 'usage: %s dir [exe [args...]]\n' "$script" - printf 'valid dirs are:\n' - printf '\n' - cat "$testdir/all.txt" - printf '\n' - exit 1 -} - -# Command-line processing. -if [ "$#" -lt 1 ]; then - usage "Not enough arguments" -fi - -d="$1" -shift -check_d_arg "$d" - -if [ "$#" -gt 0 ]; then - exe="$1" - shift - check_exec_arg "$exe" -else - exe="$testdir/../bin/$d" - check_exec_arg "$exe" -fi - -name="$testdir/$d/read.txt" -results="$testdir/$d/read_results.txt" -errors="$testdir/$d/read_errors.txt" - -out="$outputdir/${d}_outputs/read_results.txt" -multiple_res="$outputdir/${d}_outputs/read_multiple_results.txt" -outdir=$(dirname "$out") - -# Make sure the directory exists. -if [ ! -d "$outdir" ]; then - mkdir -p "$outdir" -fi - -exebase=$(basename "$exe") - -# Set stuff for the correct calculator. -if [ "$d" = "bc" ]; then - options="-lq" - halt="halt" - read_call="read()" - read_expr="${read_call}\n5+5;" - read_multiple=$(printf '%s\n%s\n%s\n' "3" "2" "1") -else - options="-x" - halt="q" - read_call="?" - read_expr="${read_call}" - read_multiple=$(printf '%spR\n%spR\n%spR\n' "3" "2" "1") -fi - -# I use these, so unset them to make the tests work. -unset BC_ENV_ARGS -unset BC_LINE_LENGTH -unset DC_ENV_ARGS -unset DC_LINE_LENGTH - -printf 'Running %s read...' "$d" - -set +e - -# Run read() on every line. -while read line; do - - printf '%s\n%s\n' "$read_call" "$line" | "$exe" "$@" "$options" > "$out" - checktest "$d" "$?" 'read' "$results" "$out" - -done < "$name" - -printf 'pass\n' - -printf 'Running %s read multiple...' "$d" - -printf '3\n2\n1\n' > "$multiple_res" - -# Run multiple read() calls. -printf '%s\n' "$read_multiple" | "$exe" "$@" "$options" -e "$read_call" -e "$read_call" -e "$read_call" > "$out" -checktest "$d" "$?" 'read multiple' "$multiple_res" "$out" - -printf 'pass\n' - -printf 'Running %s read errors...' "$d" - -# Run read on every line. -while read line; do - - printf '%s\n%s\n' "$read_call" "$line" | "$exe" "$@" "$options" 2> "$out" > /dev/null - err="$?" - - checkerrtest "$d" "$err" "$line" "$out" "$exebase" - -done < "$errors" - -printf 'pass\n' - -printf 'Running %s empty read...' "$d" - -read_test=$(printf '%s\n' "$read_call") - -printf '%s\n' "$read_test" | "$exe" "$@" "$opts" 2> "$out" > /dev/null -err="$?" - -checkerrtest "$d" "$err" "$read_test" "$out" "$exebase" - -printf 'pass\n' - -printf 'Running %s read EOF...' "$d" - -read_test=$(printf '%s' "$read_call") - -printf '%s' "$read_test" | "$exe" "$@" "$opts" 2> "$out" > /dev/null -err="$?" - -checkerrtest "$d" "$err" "$read_test" "$out" "$exebase" - -exec printf 'pass\n' diff --git a/contrib/bc/tests/script.sh b/contrib/bc/tests/script.sh index b1346ef09904..ce5cf19ee275 100755 --- a/contrib/bc/tests/script.sh +++ b/contrib/bc/tests/script.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -44,7 +44,7 @@ usage() { if [ $# -eq 1 ]; then printf '%s\n\n' "$1" fi - printf 'usage: %s dir script [run_extra_tests] [run_stack_tests] [generate_tests] [time_tests] [exec args...]\n' "$script" + printf 'usage: %s dir script [run_extra_tests] [run_stack_tests] [generate_tests] [exec args...]\n' "$script" exit 1 } @@ -91,15 +91,6 @@ else fi if [ "$#" -gt 0 ]; then - time_tests="$1" - shift - check_bool_arg "$time_tests" -else - time_tests=0 - check_bool_arg "$generate" -fi - -if [ "$#" -gt 0 ]; then exe="$1" shift check_exec_arg "$exe" @@ -209,16 +200,8 @@ set +e printf 'Running %s script %s...' "$d" "$f" -# Yes this is poor timing, but it works. -if [ "$time_tests" -ne 0 ]; then - printf '\n' - printf '%s\n' "$halt" 2> /dev/null | /usr/bin/time -p "$exe" "$@" $options "$s" > "$out" - err="$?" - printf '\n' -else - printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" $options "$s" > "$out" - err="$?" -fi +printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" $options "$s" > "$out" +err="$?" checktest "$d" "$err" "script $f" "$res" "$out" diff --git a/contrib/bc/tests/scripts.sh b/contrib/bc/tests/scripts.sh index 2c8af6c06df0..eb2963e4a9ed 100755 --- a/contrib/bc/tests/scripts.sh +++ b/contrib/bc/tests/scripts.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -40,7 +40,7 @@ usage() { if [ $# -eq 1 ]; then printf '%s\n\n' "$1" fi - printf 'usage: %s [-n] dir [run_extra_tests] [run_stack_tests] [generate_tests] [time_tests] [exec args...]\n' "$script" + printf 'usage: %s [-n] dir [run_extra_tests] [run_stack_tests] [generate_tests] [exec args...]\n' "$script" exit 1 } @@ -96,15 +96,6 @@ else fi if [ "$#" -gt 0 ]; then - time_tests="$1" - shift - check_bool_arg "$time_tests" -else - time_tests=0 - check_bool_arg "$time_tests" -fi - -if [ "$#" -gt 0 ]; then exe="$1" shift check_exec_arg "$exe" @@ -124,11 +115,11 @@ for s in $scripts; do if [ "$pll" -ne 0 ]; then sh "$testdir/script.sh" "$d" "$f" "$run_extra_tests" "$run_stack_tests" \ - "$generate" "$time_tests" "$exe" "$@" & + "$generate" "$exe" "$@" & pids="$pids $!" else sh "$testdir/script.sh" "$d" "$f" "$run_extra_tests" "$run_stack_tests" \ - "$generate" "$time_tests" "$exe" "$@" + "$generate" "$exe" "$@" fi done diff --git a/contrib/bc/tests/stdin.sh b/contrib/bc/tests/stdin.sh index 7061e950367e..ba56606b18c4 100755 --- a/contrib/bc/tests/stdin.sh +++ b/contrib/bc/tests/stdin.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: diff --git a/contrib/bc/tests/test.sh b/contrib/bc/tests/test.sh index 7b5916f02990..3dd3e19963fa 100755 --- a/contrib/bc/tests/test.sh +++ b/contrib/bc/tests/test.sh @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2018-2024 Gavin D. Howard and contributors. +# Copyright (c) 2018-2025 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -44,7 +44,7 @@ usage() { if [ $# -eq 1 ]; then printf '%s\n\n' "$1" fi - printf 'usage: %s dir test [generate_tests] [time_tests] [exe [args...]]\n' "$0" + printf 'usage: %s dir test [generate_tests] [exe [args...]]\n' "$0" printf 'valid dirs are:\n' printf '\n' cat "$testdir/all.txt" @@ -78,15 +78,6 @@ else fi if [ "$#" -gt 0 ]; then - time_tests="$1" - shift - check_bool_arg "$time_tests" -else - time_tests=0 - check_bool_arg "$time_tests" -fi - -if [ "$#" -gt 0 ]; then exe="$1" shift check_exec_arg "$exe" @@ -155,15 +146,8 @@ set +e printf 'Running %s %s...' "$d" "$t" -if [ "$time_tests" -ne 0 ]; then - printf '\n' - printf '%s\n' "$halt" 2> /dev/null | /usr/bin/time -p "$exe" "$@" $options "$name" > "$out" - err="$?" - printf '\n' -else - printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" $options "$name" > "$out" - err="$?" -fi +printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" $options "$name" > "$out" +err="$?" checktest "$d" "$err" "$t" "$results" "$out" diff --git a/contrib/bc/vs/bc.vcxproj b/contrib/bc/vs/bc.vcxproj index c98ebc6eee53..baffabbb2b4f 100644 --- a/contrib/bc/vs/bc.vcxproj +++ b/contrib/bc/vs/bc.vcxproj @@ -204,7 +204,6 @@ <ClInclude Include="..\include\read.h" /> <ClInclude Include="..\include\status.h" /> <ClInclude Include="..\include\vector.h" /> - <ClInclude Include="..\include\version.h" /> <ClInclude Include="..\include\vm.h" /> </ItemGroup> <ItemGroup> diff --git a/contrib/bc/vs/bc.vcxproj.filters b/contrib/bc/vs/bc.vcxproj.filters index f26387253f27..caa30d9c7fa4 100644 --- a/contrib/bc/vs/bc.vcxproj.filters +++ b/contrib/bc/vs/bc.vcxproj.filters @@ -66,9 +66,6 @@ <ClInclude Include="..\include\vector.h"> <Filter>include</Filter> </ClInclude> - <ClInclude Include="..\include\version.h"> - <Filter>include</Filter> - </ClInclude> <ClInclude Include="..\include\vm.h"> <Filter>include</Filter> </ClInclude> diff --git a/contrib/bc/vs/bcl.vcxproj b/contrib/bc/vs/bcl.vcxproj index f838cac7cbd1..96bd3ba2a552 100644 --- a/contrib/bc/vs/bcl.vcxproj +++ b/contrib/bc/vs/bcl.vcxproj @@ -256,7 +256,6 @@ <ClInclude Include="..\include\read.h" /> <ClInclude Include="..\include\status.h" /> <ClInclude Include="..\include\vector.h" /> - <ClInclude Include="..\include\version.h" /> <ClInclude Include="..\include\vm.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> diff --git a/contrib/bc/vs/bcl.vcxproj.filters b/contrib/bc/vs/bcl.vcxproj.filters index b62d1899e2bf..ae3d24125dd6 100644 --- a/contrib/bc/vs/bcl.vcxproj.filters +++ b/contrib/bc/vs/bcl.vcxproj.filters @@ -80,9 +80,6 @@ <ClInclude Include="..\include\vector.h"> <Filter>include</Filter> </ClInclude> - <ClInclude Include="..\include\version.h"> - <Filter>include</Filter> - </ClInclude> <ClInclude Include="..\include\vm.h"> <Filter>include</Filter> </ClInclude> diff --git a/contrib/kyua/doc/kyuafile.5.in b/contrib/kyua/doc/kyuafile.5.in index 43f00816d407..a9106e95d790 100644 --- a/contrib/kyua/doc/kyuafile.5.in +++ b/contrib/kyua/doc/kyuafile.5.in @@ -485,7 +485,7 @@ plain_test_program{name='the_test', .Ss FreeBSD jail execution environment The following example configures the test to be run within a temporary jail with -.Xr vnet 9 +.Xr VNET 9 support and the permission to create raw sockets: .Bd -literal -offset indent syntax(2) diff --git a/contrib/libxo/libxo/xo.h b/contrib/libxo/libxo/xo.h index 6a61a16c7cae..7f37b469b54e 100644 --- a/contrib/libxo/libxo/xo.h +++ b/contrib/libxo/libxo/xo.h @@ -27,6 +27,10 @@ #include <stdlib.h> #include <errno.h> +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + #ifdef __dead2 #define NORETURN __dead2 #else @@ -699,4 +703,8 @@ xo_retain_clear_all (void); void xo_retain_clear (const char *fmt); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + #endif /* INCLUDE_XO_H */ diff --git a/contrib/libxo/libxo/xo_encoder.h b/contrib/libxo/libxo/xo_encoder.h index 099248ae13a6..bb57194ab030 100644 --- a/contrib/libxo/libxo/xo_encoder.h +++ b/contrib/libxo/libxo/xo_encoder.h @@ -20,6 +20,10 @@ #include <string.h> +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + /* * Expose libxo's memory allocation functions */ @@ -167,4 +171,8 @@ xo_encoder_op_name (xo_encoder_op_t op); void xo_failure (xo_handle_t *xop, const char *fmt, ...); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + #endif /* XO_ENCODER_H */ diff --git a/contrib/llvm-project/libcxx/include/__functional/binary_function.h b/contrib/llvm-project/libcxx/include/__functional/binary_function.h index ddee3b170311..18879f65112b 100644 --- a/contrib/llvm-project/libcxx/include/__functional/binary_function.h +++ b/contrib/llvm-project/libcxx/include/__functional/binary_function.h @@ -39,11 +39,10 @@ struct __binary_function_keep_layout_base { }; #if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION) -_LIBCPP_DIAGNOSTIC_PUSH -_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <class _Arg1, class _Arg2, class _Result> using __binary_function = binary_function<_Arg1, _Arg2, _Result>; -_LIBCPP_DIAGNOSTIC_POP +_LIBCPP_SUPPRESS_DEPRECATED_POP #else template <class _Arg1, class _Arg2, class _Result> using __binary_function = __binary_function_keep_layout_base<_Arg1, _Arg2, _Result>; diff --git a/contrib/llvm-project/libcxx/include/__functional/unary_function.h b/contrib/llvm-project/libcxx/include/__functional/unary_function.h index 69b1bc94220a..d46df2e86fbd 100644 --- a/contrib/llvm-project/libcxx/include/__functional/unary_function.h +++ b/contrib/llvm-project/libcxx/include/__functional/unary_function.h @@ -36,11 +36,10 @@ struct __unary_function_keep_layout_base { }; #if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION) -_LIBCPP_DIAGNOSTIC_PUSH -_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <class _Arg, class _Result> using __unary_function = unary_function<_Arg, _Result>; -_LIBCPP_DIAGNOSTIC_POP +_LIBCPP_SUPPRESS_DEPRECATED_POP #else template <class _Arg, class _Result> using __unary_function = __unary_function_keep_layout_base<_Arg, _Result>; diff --git a/contrib/llvm-project/libcxx/include/__functional/weak_result_type.h b/contrib/llvm-project/libcxx/include/__functional/weak_result_type.h index ad7a8395186c..488fec9dac21 100644 --- a/contrib/llvm-project/libcxx/include/__functional/weak_result_type.h +++ b/contrib/llvm-project/libcxx/include/__functional/weak_result_type.h @@ -77,6 +77,7 @@ struct __maybe_derive_from_unary_function // bool is true template <class _Tp> struct __maybe_derive_from_unary_function<_Tp, false> {}; +_LIBCPP_SUPPRESS_DEPRECATED_PUSH template <class _Tp, bool = __derives_from_binary_function<_Tp>::value> struct __maybe_derive_from_binary_function // bool is true : public __derives_from_binary_function<_Tp>::type {}; @@ -99,6 +100,7 @@ struct __weak_result_type_imp<_Tp, false> template <class _Tp> struct __weak_result_type : public __weak_result_type_imp<_Tp> {}; +_LIBCPP_SUPPRESS_DEPRECATED_POP // 0 argument case diff --git a/contrib/llvm-project/libcxx/include/__memory/allocator_traits.h b/contrib/llvm-project/libcxx/include/__memory/allocator_traits.h index c5fcc89327b8..f3e327edda12 100644 --- a/contrib/llvm-project/libcxx/include/__memory/allocator_traits.h +++ b/contrib/llvm-project/libcxx/include/__memory/allocator_traits.h @@ -40,6 +40,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD template <class _Tp> \ struct NAME<_Tp, __void_t<typename _Tp::PROPERTY > > : true_type {} +_LIBCPP_SUPPRESS_DEPRECATED_PUSH // __pointer template <class _Tp, class _Alloc, @@ -67,6 +68,7 @@ struct __const_pointer<_Tp, _Ptr, _Alloc, false> { using type _LIBCPP_NODEBUG = typename pointer_traits<_Ptr>::template rebind<const _Tp>; #endif }; +_LIBCPP_SUPPRESS_DEPRECATED_POP // __void_pointer _LIBCPP_ALLOCATOR_TRAITS_HAS_XXX(__has_void_pointer, void_pointer); diff --git a/contrib/llvm-project/libcxx/include/__memory/uninitialized_algorithms.h b/contrib/llvm-project/libcxx/include/__memory/uninitialized_algorithms.h index 7475ef5cf85d..79cab80dcf73 100644 --- a/contrib/llvm-project/libcxx/include/__memory/uninitialized_algorithms.h +++ b/contrib/llvm-project/libcxx/include/__memory/uninitialized_algorithms.h @@ -642,7 +642,8 @@ __uninitialized_allocator_relocate(_Alloc& __alloc, _Tp* __first, _Tp* __last, _ __guard.__complete(); std::__allocator_destroy(__alloc, __first, __last); } else { - __builtin_memcpy(const_cast<__remove_const_t<_Tp>*>(__result), __first, sizeof(_Tp) * (__last - __first)); + // Casting to void* to suppress clang complaining that this is technically UB. + __builtin_memcpy(static_cast<void*>(const_cast<__remove_const_t<_Tp>*>(__result)), __first, sizeof(_Tp) * (__last - __first)); } } diff --git a/contrib/llvm-project/libcxx/include/__type_traits/is_trivially_relocatable.h b/contrib/llvm-project/libcxx/include/__type_traits/is_trivially_relocatable.h index c0871731cc00..9b0e240de55f 100644 --- a/contrib/llvm-project/libcxx/include/__type_traits/is_trivially_relocatable.h +++ b/contrib/llvm-project/libcxx/include/__type_traits/is_trivially_relocatable.h @@ -11,7 +11,6 @@ #include <__config> #include <__type_traits/enable_if.h> -#include <__type_traits/integral_constant.h> #include <__type_traits/is_same.h> #include <__type_traits/is_trivially_copyable.h> @@ -23,8 +22,11 @@ _LIBCPP_BEGIN_NAMESPACE_STD // A type is trivially relocatable if a move construct + destroy of the original object is equivalent to // `memcpy(dst, src, sizeof(T))`. - -#if __has_builtin(__is_trivially_relocatable) +// +// Note that we don't use the __is_trivially_relocatable Clang builtin right now because it does not +// implement the semantics of any current or future trivial relocation proposal and it can lead to +// incorrect optimizations on some platforms (Windows) and supported compilers (AppleClang). +#if __has_builtin(__is_trivially_relocatable) && 0 template <class _Tp, class = void> struct __libcpp_is_trivially_relocatable : integral_constant<bool, __is_trivially_relocatable(_Tp)> {}; #else diff --git a/contrib/llvm-project/libcxx/include/tuple b/contrib/llvm-project/libcxx/include/tuple index 081b90c7bbec..1d39974d5a6b 100644 --- a/contrib/llvm-project/libcxx/include/tuple +++ b/contrib/llvm-project/libcxx/include/tuple @@ -302,7 +302,9 @@ class __tuple_leaf { template <class _Tp> static _LIBCPP_HIDE_FROM_ABI constexpr bool __can_bind_reference() { -# if __has_keyword(__reference_binds_to_temporary) +# if __has_keyword(__reference_constructs_from_temporary) + return !__reference_constructs_from_temporary(_Hp, _Tp); +# elif __has_keyword(__reference_binds_to_temporary) return !__reference_binds_to_temporary(_Hp, _Tp); # else return true; diff --git a/contrib/unbound/config.guess b/contrib/unbound/config.guess index 48a684601bd2..a9d01fde4617 100755 --- a/contrib/unbound/config.guess +++ b/contrib/unbound/config.guess @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2024 Free Software Foundation, Inc. +# Copyright 1992-2025 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2024-07-27' +timestamp='2025-07-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -60,7 +60,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2024 Free Software Foundation, Inc. +Copyright 1992-2025 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -1597,8 +1597,11 @@ EOF *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; - *:Ironclad:*:*) - GUESS=$UNAME_MACHINE-unknown-ironclad + x86_64:[Ii]ronclad:*:*|i?86:[Ii]ronclad:*:*) + GUESS=$UNAME_MACHINE-pc-ironclad-mlibc + ;; + *:[Ii]ronclad:*:*) + GUESS=$UNAME_MACHINE-unknown-ironclad-mlibc ;; esac @@ -1808,8 +1811,8 @@ fi exit 1 # Local variables: -# eval: (add-hook 'before-save-hook 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-format: "%Y-%02m-%02d" # time-stamp-end: "'" # End: diff --git a/contrib/unbound/config.h.in b/contrib/unbound/config.h.in index f2dc8c8b92b3..584810398b91 100644 --- a/contrib/unbound/config.h.in +++ b/contrib/unbound/config.h.in @@ -48,13 +48,13 @@ internal symbols */ #undef EXPORT_ALL_SYMBOLS -/* Define to 1 if you have the `accept4' function. */ +/* Define to 1 if you have the 'accept4' function. */ #undef HAVE_ACCEPT4 -/* Define to 1 if you have the `arc4random' function. */ +/* Define to 1 if you have the 'arc4random' function. */ #undef HAVE_ARC4RANDOM -/* Define to 1 if you have the `arc4random_uniform' function. */ +/* Define to 1 if you have the 'arc4random_uniform' function. */ #undef HAVE_ARC4RANDOM_UNIFORM /* Define to 1 if you have the <arpa/inet.h> header file. */ @@ -78,7 +78,7 @@ /* If we have be64toh */ #undef HAVE_BE64TOH -/* Define to 1 if you have the `BIO_set_callback_ex' function. */ +/* Define to 1 if you have the 'BIO_set_callback_ex' function. */ #undef HAVE_BIO_SET_CALLBACK_EX /* Define to 1 if you have the <bsd/stdlib.h> header file. */ @@ -87,241 +87,241 @@ /* Define to 1 if you have the <bsd/string.h> header file. */ #undef HAVE_BSD_STRING_H -/* Define to 1 if you have the `chown' function. */ +/* Define to 1 if you have the 'chown' function. */ #undef HAVE_CHOWN -/* Define to 1 if you have the `chroot' function. */ +/* Define to 1 if you have the 'chroot' function. */ #undef HAVE_CHROOT -/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */ +/* Define to 1 if you have the 'CRYPTO_cleanup_all_ex_data' function. */ #undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA -/* Define to 1 if you have the `CRYPTO_THREADID_set_callback' function. */ +/* Define to 1 if you have the 'CRYPTO_THREADID_set_callback' function. */ #undef HAVE_CRYPTO_THREADID_SET_CALLBACK -/* Define to 1 if you have the `ctime_r' function. */ +/* Define to 1 if you have the 'ctime_r' function. */ #undef HAVE_CTIME_R -/* Define to 1 if you have the `daemon' function. */ +/* Define to 1 if you have the 'daemon' function. */ #undef HAVE_DAEMON -/* Define to 1 if you have the declaration of `arc4random', and to 0 if you +/* Define to 1 if you have the declaration of 'arc4random', and to 0 if you don't. */ #undef HAVE_DECL_ARC4RANDOM -/* Define to 1 if you have the declaration of `arc4random_uniform', and to 0 +/* Define to 1 if you have the declaration of 'arc4random_uniform', and to 0 if you don't. */ #undef HAVE_DECL_ARC4RANDOM_UNIFORM -/* Define to 1 if you have the declaration of `evsignal_assign', and to 0 if +/* Define to 1 if you have the declaration of 'evsignal_assign', and to 0 if you don't. */ #undef HAVE_DECL_EVSIGNAL_ASSIGN -/* Define to 1 if you have the declaration of `inet_ntop', and to 0 if you +/* Define to 1 if you have the declaration of 'inet_ntop', and to 0 if you don't. */ #undef HAVE_DECL_INET_NTOP -/* Define to 1 if you have the declaration of `inet_pton', and to 0 if you +/* Define to 1 if you have the declaration of 'inet_pton', and to 0 if you don't. */ #undef HAVE_DECL_INET_PTON -/* Define to 1 if you have the declaration of `nghttp2_session_server_new', +/* Define to 1 if you have the declaration of 'nghttp2_session_server_new', and to 0 if you don't. */ #undef HAVE_DECL_NGHTTP2_SESSION_SERVER_NEW -/* Define to 1 if you have the declaration of `ngtcp2_conn_server_new', and to +/* Define to 1 if you have the declaration of 'ngtcp2_conn_server_new', and to 0 if you don't. */ #undef HAVE_DECL_NGTCP2_CONN_SERVER_NEW -/* Define to 1 if you have the declaration of `ngtcp2_crypto_encrypt_cb', and +/* Define to 1 if you have the declaration of 'ngtcp2_crypto_encrypt_cb', and to 0 if you don't. */ #undef HAVE_DECL_NGTCP2_CRYPTO_ENCRYPT_CB -/* Define to 1 if you have the declaration of `NID_ED25519', and to 0 if you +/* Define to 1 if you have the declaration of 'NID_ED25519', and to 0 if you don't. */ #undef HAVE_DECL_NID_ED25519 -/* Define to 1 if you have the declaration of `NID_ED448', and to 0 if you +/* Define to 1 if you have the declaration of 'NID_ED448', and to 0 if you don't. */ #undef HAVE_DECL_NID_ED448 -/* Define to 1 if you have the declaration of `NID_secp384r1', and to 0 if you +/* Define to 1 if you have the declaration of 'NID_secp384r1', and to 0 if you don't. */ #undef HAVE_DECL_NID_SECP384R1 -/* Define to 1 if you have the declaration of `NID_X9_62_prime256v1', and to 0 +/* Define to 1 if you have the declaration of 'NID_X9_62_prime256v1', and to 0 if you don't. */ #undef HAVE_DECL_NID_X9_62_PRIME256V1 -/* Define to 1 if you have the declaration of `reallocarray', and to 0 if you +/* Define to 1 if you have the declaration of 'reallocarray', and to 0 if you don't. */ #undef HAVE_DECL_REALLOCARRAY -/* Define to 1 if you have the declaration of `redisConnect', and to 0 if you +/* Define to 1 if you have the declaration of 'redisConnect', and to 0 if you don't. */ #undef HAVE_DECL_REDISCONNECT -/* Define to 1 if you have the declaration of `sk_SSL_COMP_pop_free', and to 0 +/* Define to 1 if you have the declaration of 'sk_SSL_COMP_pop_free', and to 0 if you don't. */ #undef HAVE_DECL_SK_SSL_COMP_POP_FREE /* Define to 1 if you have the declaration of - `SSL_COMP_get_compression_methods', and to 0 if you don't. */ + 'SSL_COMP_get_compression_methods', and to 0 if you don't. */ #undef HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS -/* Define to 1 if you have the declaration of `SSL_CTX_set_ecdh_auto', and to +/* Define to 1 if you have the declaration of 'SSL_CTX_set_ecdh_auto', and to 0 if you don't. */ #undef HAVE_DECL_SSL_CTX_SET_ECDH_AUTO -/* Define to 1 if you have the declaration of `strlcat', and to 0 if you +/* Define to 1 if you have the declaration of 'strlcat', and to 0 if you don't. */ #undef HAVE_DECL_STRLCAT -/* Define to 1 if you have the declaration of `strlcpy', and to 0 if you +/* Define to 1 if you have the declaration of 'strlcpy', and to 0 if you don't. */ #undef HAVE_DECL_STRLCPY -/* Define to 1 if you have the declaration of `XML_StopParser', and to 0 if +/* Define to 1 if you have the declaration of 'XML_StopParser', and to 0 if you don't. */ #undef HAVE_DECL_XML_STOPPARSER /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H -/* Define to 1 if you have the `DSA_SIG_set0' function. */ +/* Define to 1 if you have the 'DSA_SIG_set0' function. */ #undef HAVE_DSA_SIG_SET0 /* Define to 1 if you have the <endian.h> header file. */ #undef HAVE_ENDIAN_H -/* Define to 1 if you have the `endprotoent' function. */ +/* Define to 1 if you have the 'endprotoent' function. */ #undef HAVE_ENDPROTOENT -/* Define to 1 if you have the `endpwent' function. */ +/* Define to 1 if you have the 'endpwent' function. */ #undef HAVE_ENDPWENT -/* Define to 1 if you have the `endservent' function. */ +/* Define to 1 if you have the 'endservent' function. */ #undef HAVE_ENDSERVENT -/* Define to 1 if you have the `ENGINE_cleanup' function. */ +/* Define to 1 if you have the 'ENGINE_cleanup' function. */ #undef HAVE_ENGINE_CLEANUP -/* Define to 1 if you have the `ERR_free_strings' function. */ +/* Define to 1 if you have the 'ERR_free_strings' function. */ #undef HAVE_ERR_FREE_STRINGS -/* Define to 1 if you have the `ERR_load_crypto_strings' function. */ +/* Define to 1 if you have the 'ERR_load_crypto_strings' function. */ #undef HAVE_ERR_LOAD_CRYPTO_STRINGS -/* Define to 1 if you have the `event_assign' function. */ +/* Define to 1 if you have the 'event_assign' function. */ #undef HAVE_EVENT_ASSIGN -/* Define to 1 if you have the `event_base_free' function. */ +/* Define to 1 if you have the 'event_base_free' function. */ #undef HAVE_EVENT_BASE_FREE -/* Define to 1 if you have the `event_base_get_method' function. */ +/* Define to 1 if you have the 'event_base_get_method' function. */ #undef HAVE_EVENT_BASE_GET_METHOD -/* Define to 1 if you have the `event_base_new' function. */ +/* Define to 1 if you have the 'event_base_new' function. */ #undef HAVE_EVENT_BASE_NEW -/* Define to 1 if you have the `event_base_once' function. */ +/* Define to 1 if you have the 'event_base_once' function. */ #undef HAVE_EVENT_BASE_ONCE /* Define to 1 if you have the <event.h> header file. */ #undef HAVE_EVENT_H -/* Define to 1 if you have the `EVP_aes_256_cbc' function. */ +/* Define to 1 if you have the 'EVP_aes_256_cbc' function. */ #undef HAVE_EVP_AES_256_CBC -/* Define to 1 if you have the `EVP_cleanup' function. */ +/* Define to 1 if you have the 'EVP_cleanup' function. */ #undef HAVE_EVP_CLEANUP -/* Define to 1 if you have the `EVP_default_properties_is_fips_enabled' +/* Define to 1 if you have the 'EVP_default_properties_is_fips_enabled' function. */ #undef HAVE_EVP_DEFAULT_PROPERTIES_IS_FIPS_ENABLED -/* Define to 1 if you have the `EVP_DigestVerify' function. */ +/* Define to 1 if you have the 'EVP_DigestVerify' function. */ #undef HAVE_EVP_DIGESTVERIFY -/* Define to 1 if you have the `EVP_dss1' function. */ +/* Define to 1 if you have the 'EVP_dss1' function. */ #undef HAVE_EVP_DSS1 -/* Define to 1 if you have the `EVP_EncryptInit_ex' function. */ +/* Define to 1 if you have the 'EVP_EncryptInit_ex' function. */ #undef HAVE_EVP_ENCRYPTINIT_EX -/* Define to 1 if you have the `EVP_MAC_CTX_set_params' function. */ +/* Define to 1 if you have the 'EVP_MAC_CTX_set_params' function. */ #undef HAVE_EVP_MAC_CTX_SET_PARAMS -/* Define to 1 if you have the `EVP_MD_CTX_new' function. */ +/* Define to 1 if you have the 'EVP_MD_CTX_new' function. */ #undef HAVE_EVP_MD_CTX_NEW -/* Define to 1 if you have the `EVP_sha1' function. */ +/* Define to 1 if you have the 'EVP_sha1' function. */ #undef HAVE_EVP_SHA1 -/* Define to 1 if you have the `EVP_sha256' function. */ +/* Define to 1 if you have the 'EVP_sha256' function. */ #undef HAVE_EVP_SHA256 -/* Define to 1 if you have the `EVP_sha512' function. */ +/* Define to 1 if you have the 'EVP_sha512' function. */ #undef HAVE_EVP_SHA512 -/* Define to 1 if you have the `ev_default_loop' function. */ +/* Define to 1 if you have the 'ev_default_loop' function. */ #undef HAVE_EV_DEFAULT_LOOP -/* Define to 1 if you have the `ev_loop' function. */ +/* Define to 1 if you have the 'ev_loop' function. */ #undef HAVE_EV_LOOP /* Define to 1 if you have the <expat.h> header file. */ #undef HAVE_EXPAT_H -/* Define to 1 if you have the `explicit_bzero' function. */ +/* Define to 1 if you have the 'explicit_bzero' function. */ #undef HAVE_EXPLICIT_BZERO -/* Define to 1 if you have the `fcntl' function. */ +/* Define to 1 if you have the 'fcntl' function. */ #undef HAVE_FCNTL -/* Define to 1 if you have the `FIPS_mode' function. */ +/* Define to 1 if you have the 'FIPS_mode' function. */ #undef HAVE_FIPS_MODE -/* Define to 1 if you have the `fork' function. */ +/* Define to 1 if you have the 'fork' function. */ #undef HAVE_FORK -/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +/* Define to 1 if fseeko (and ftello) are declared in stdio.h. */ #undef HAVE_FSEEKO -/* Define to 1 if you have the `fsync' function. */ +/* Define to 1 if you have the 'fsync' function. */ #undef HAVE_FSYNC /* Whether getaddrinfo is available */ #undef HAVE_GETADDRINFO -/* Define to 1 if you have the `getauxval' function. */ +/* Define to 1 if you have the 'getauxval' function. */ #undef HAVE_GETAUXVAL -/* Define to 1 if you have the `getentropy' function. */ +/* Define to 1 if you have the 'getentropy' function. */ #undef HAVE_GETENTROPY -/* Define to 1 if you have the `getifaddrs' function. */ +/* Define to 1 if you have the 'getifaddrs' function. */ #undef HAVE_GETIFADDRS /* Define to 1 if you have the <getopt.h> header file. */ #undef HAVE_GETOPT_H -/* Define to 1 if you have the `getpwnam' function. */ +/* Define to 1 if you have the 'getpwnam' function. */ #undef HAVE_GETPWNAM -/* Define to 1 if you have the `getrlimit' function. */ +/* Define to 1 if you have the 'getrlimit' function. */ #undef HAVE_GETRLIMIT -/* Define to 1 if you have the `gettid' function. */ +/* Define to 1 if you have the 'gettid' function. */ #undef HAVE_GETTID -/* Define to 1 if you have the `glob' function. */ +/* Define to 1 if you have the 'glob' function. */ #undef HAVE_GLOB /* Define to 1 if you have the <glob.h> header file. */ #undef HAVE_GLOB_H -/* Define to 1 if you have the `gmtime_r' function. */ +/* Define to 1 if you have the 'gmtime_r' function. */ #undef HAVE_GMTIME_R /* Define to 1 if you have the <grp.h> header file. */ @@ -330,7 +330,7 @@ /* Define to 1 if you have the <hiredis/hiredis.h> header file. */ #undef HAVE_HIREDIS_HIREDIS_H -/* Define to 1 if you have the `HMAC_Init_ex' function. */ +/* Define to 1 if you have the 'HMAC_Init_ex' function. */ #undef HAVE_HMAC_INIT_EX /* If we have htobe64 */ @@ -339,19 +339,19 @@ /* Define to 1 if you have the <ifaddrs.h> header file. */ #undef HAVE_IFADDRS_H -/* Define to 1 if you have the `if_nametoindex' function. */ +/* Define to 1 if you have the 'if_nametoindex' function. */ #undef HAVE_IF_NAMETOINDEX -/* Define to 1 if you have the `inet_aton' function. */ +/* Define to 1 if you have the 'inet_aton' function. */ #undef HAVE_INET_ATON -/* Define to 1 if you have the `inet_ntop' function. */ +/* Define to 1 if you have the 'inet_ntop' function. */ #undef HAVE_INET_NTOP -/* Define to 1 if you have the `inet_pton' function. */ +/* Define to 1 if you have the 'inet_pton' function. */ #undef HAVE_INET_PTON -/* Define to 1 if you have the `initgroups' function. */ +/* Define to 1 if you have the 'initgroups' function. */ #undef HAVE_INITGROUPS /* Define to 1 if you have the <inttypes.h> header file. */ @@ -363,10 +363,10 @@ /* Define to 1 if you have the <iphlpapi.h> header file. */ #undef HAVE_IPHLPAPI_H -/* Define to 1 if you have the `isblank' function. */ +/* Define to 1 if you have the 'isblank' function. */ #undef HAVE_ISBLANK -/* Define to 1 if you have the `kill' function. */ +/* Define to 1 if you have the 'kill' function. */ #undef HAVE_KILL /* Use portable libbsd functions */ @@ -384,7 +384,7 @@ /* Define to 1 if you have the <linux/net_tstamp.h> header file. */ #undef HAVE_LINUX_NET_TSTAMP_H -/* Define to 1 if you have the `localtime_r' function. */ +/* Define to 1 if you have the 'localtime_r' function. */ #undef HAVE_LOCALTIME_R /* Define to 1 if you have the <login_cap.h> header file. */ @@ -393,7 +393,7 @@ /* If have GNU libc compatible malloc */ #undef HAVE_MALLOC -/* Define to 1 if you have the `memmove' function. */ +/* Define to 1 if you have the 'memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the <minix/config.h> header file. */ @@ -435,49 +435,49 @@ /* Define this to use ngtcp2. */ #undef HAVE_NGTCP2 -/* Define to 1 if you have the `ngtcp2_ccerr_default' function. */ +/* Define to 1 if you have the 'ngtcp2_ccerr_default' function. */ #undef HAVE_NGTCP2_CCERR_DEFAULT -/* Define to 1 if you have the `ngtcp2_conn_encode_0rtt_transport_params' +/* Define to 1 if you have the 'ngtcp2_conn_encode_0rtt_transport_params' function. */ #undef HAVE_NGTCP2_CONN_ENCODE_0RTT_TRANSPORT_PARAMS -/* Define to 1 if you have the `ngtcp2_conn_get_max_local_streams_uni' +/* Define to 1 if you have the 'ngtcp2_conn_get_max_local_streams_uni' function. */ #undef HAVE_NGTCP2_CONN_GET_MAX_LOCAL_STREAMS_UNI -/* Define to 1 if you have the `ngtcp2_conn_get_num_scid' function. */ +/* Define to 1 if you have the 'ngtcp2_conn_get_num_scid' function. */ #undef HAVE_NGTCP2_CONN_GET_NUM_SCID -/* Define to 1 if you have the `ngtcp2_conn_in_closing_period' function. */ +/* Define to 1 if you have the 'ngtcp2_conn_in_closing_period' function. */ #undef HAVE_NGTCP2_CONN_IN_CLOSING_PERIOD -/* Define to 1 if you have the `ngtcp2_conn_in_draining_period' function. */ +/* Define to 1 if you have the 'ngtcp2_conn_in_draining_period' function. */ #undef HAVE_NGTCP2_CONN_IN_DRAINING_PERIOD /* Define if ngtcp2_conn_shutdown_stream has 4 arguments. */ #undef HAVE_NGTCP2_CONN_SHUTDOWN_STREAM4 -/* Define to 1 if you have the `ngtcp2_conn_tls_early_data_rejected' function. +/* Define to 1 if you have the 'ngtcp2_conn_tls_early_data_rejected' function. */ #undef HAVE_NGTCP2_CONN_TLS_EARLY_DATA_REJECTED -/* Define to 1 if you have the `ngtcp2_crypto_encrypt_cb' function. */ +/* Define to 1 if you have the 'ngtcp2_crypto_encrypt_cb' function. */ #undef HAVE_NGTCP2_CRYPTO_ENCRYPT_CB /* Define to 1 if you have the - `ngtcp2_crypto_quictls_configure_client_context' function. */ + 'ngtcp2_crypto_quictls_configure_client_context' function. */ #undef HAVE_NGTCP2_CRYPTO_QUICTLS_CONFIGURE_CLIENT_CONTEXT /* Define to 1 if you have the - `ngtcp2_crypto_quictls_configure_server_context' function. */ + 'ngtcp2_crypto_quictls_configure_server_context' function. */ #undef HAVE_NGTCP2_CRYPTO_QUICTLS_CONFIGURE_SERVER_CONTEXT /* Define to 1 if you have the - `ngtcp2_crypto_quictls_from_ossl_encryption_level' function. */ + 'ngtcp2_crypto_quictls_from_ossl_encryption_level' function. */ #undef HAVE_NGTCP2_CRYPTO_QUICTLS_FROM_OSSL_ENCRYPTION_LEVEL -/* Define to 1 if the system has the type `ngtcp2_encryption_level'. */ +/* Define to 1 if the system has the type 'ngtcp2_encryption_level'. */ #undef HAVE_NGTCP2_ENCRYPTION_LEVEL /* Define to 1 if you have the <ngtcp2/ngtcp2_crypto_openssl.h> header file. @@ -494,13 +494,13 @@ /* Use libnss for crypto */ #undef HAVE_NSS -/* Define to 1 if you have the `OpenSSL_add_all_digests' function. */ +/* Define to 1 if you have the 'OpenSSL_add_all_digests' function. */ #undef HAVE_OPENSSL_ADD_ALL_DIGESTS /* Define to 1 if you have the <openssl/bn.h> header file. */ #undef HAVE_OPENSSL_BN_H -/* Define to 1 if you have the `OPENSSL_config' function. */ +/* Define to 1 if you have the 'OPENSSL_config' function. */ #undef HAVE_OPENSSL_CONFIG /* Define to 1 if you have the <openssl/conf.h> header file. */ @@ -521,10 +521,10 @@ /* Define to 1 if you have the <openssl/err.h> header file. */ #undef HAVE_OPENSSL_ERR_H -/* Define to 1 if you have the `OPENSSL_init_crypto' function. */ +/* Define to 1 if you have the 'OPENSSL_init_crypto' function. */ #undef HAVE_OPENSSL_INIT_CRYPTO -/* Define to 1 if you have the `OPENSSL_init_ssl' function. */ +/* Define to 1 if you have the 'OPENSSL_init_ssl' function. */ #undef HAVE_OPENSSL_INIT_SSL /* Define to 1 if you have the <openssl/param_build.h> header file. */ @@ -539,10 +539,10 @@ /* Define to 1 if you have the <openssl/ssl.h> header file. */ #undef HAVE_OPENSSL_SSL_H -/* Define to 1 if you have the `OSSL_PARAM_BLD_new' function. */ +/* Define to 1 if you have the 'OSSL_PARAM_BLD_new' function. */ #undef HAVE_OSSL_PARAM_BLD_NEW -/* Define to 1 if you have the `poll' function. */ +/* Define to 1 if you have the 'poll' function. */ #undef HAVE_POLL /* Define to 1 if you have the <poll.h> header file. */ @@ -554,10 +554,10 @@ /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT -/* Define to 1 if the system has the type `pthread_rwlock_t'. */ +/* Define to 1 if the system has the type 'pthread_rwlock_t'. */ #undef HAVE_PTHREAD_RWLOCK_T -/* Define to 1 if the system has the type `pthread_spinlock_t'. */ +/* Define to 1 if the system has the type 'pthread_spinlock_t'. */ #undef HAVE_PTHREAD_SPINLOCK_T /* Define to 1 if you have the <pwd.h> header file. */ @@ -566,101 +566,101 @@ /* Define if you have Python libraries and header files. */ #undef HAVE_PYTHON -/* Define to 1 if you have the `random' function. */ +/* Define to 1 if you have the 'random' function. */ #undef HAVE_RANDOM -/* Define to 1 if you have the `RAND_cleanup' function. */ +/* Define to 1 if you have the 'RAND_cleanup' function. */ #undef HAVE_RAND_CLEANUP /* If we have reallocarray(3) */ #undef HAVE_REALLOCARRAY -/* Define to 1 if you have the `recvmsg' function. */ +/* Define to 1 if you have the 'recvmsg' function. */ #undef HAVE_RECVMSG -/* Define to 1 if you have the `sendmsg' function. */ +/* Define to 1 if you have the 'sendmsg' function. */ #undef HAVE_SENDMSG -/* Define to 1 if you have the `setregid' function. */ +/* Define to 1 if you have the 'setregid' function. */ #undef HAVE_SETREGID -/* Define to 1 if you have the `setresgid' function. */ +/* Define to 1 if you have the 'setresgid' function. */ #undef HAVE_SETRESGID -/* Define to 1 if you have the `setresuid' function. */ +/* Define to 1 if you have the 'setresuid' function. */ #undef HAVE_SETRESUID -/* Define to 1 if you have the `setreuid' function. */ +/* Define to 1 if you have the 'setreuid' function. */ #undef HAVE_SETREUID -/* Define to 1 if you have the `setrlimit' function. */ +/* Define to 1 if you have the 'setrlimit' function. */ #undef HAVE_SETRLIMIT -/* Define to 1 if you have the `setsid' function. */ +/* Define to 1 if you have the 'setsid' function. */ #undef HAVE_SETSID -/* Define to 1 if you have the `setusercontext' function. */ +/* Define to 1 if you have the 'setusercontext' function. */ #undef HAVE_SETUSERCONTEXT -/* Define to 1 if you have the `SHA512_Update' function. */ +/* Define to 1 if you have the 'SHA512_Update' function. */ #undef HAVE_SHA512_UPDATE -/* Define to 1 if you have the `shmget' function. */ +/* Define to 1 if you have the 'shmget' function. */ #undef HAVE_SHMGET -/* Define to 1 if you have the `sigprocmask' function. */ +/* Define to 1 if you have the 'sigprocmask' function. */ #undef HAVE_SIGPROCMASK -/* Define to 1 if you have the `sleep' function. */ +/* Define to 1 if you have the 'sleep' function. */ #undef HAVE_SLEEP -/* Define to 1 if you have the `snprintf' function. */ +/* Define to 1 if you have the 'snprintf' function. */ #undef HAVE_SNPRINTF -/* Define to 1 if you have the `socketpair' function. */ +/* Define to 1 if you have the 'socketpair' function. */ #undef HAVE_SOCKETPAIR /* Using Solaris threads */ #undef HAVE_SOLARIS_THREADS -/* Define to 1 if you have the `srandom' function. */ +/* Define to 1 if you have the 'srandom' function. */ #undef HAVE_SRANDOM /* Define if you have the SSL libraries installed. */ #undef HAVE_SSL -/* Define to 1 if you have the `SSL_CTX_set_alpn_protos' function. */ +/* Define to 1 if you have the 'SSL_CTX_set_alpn_protos' function. */ #undef HAVE_SSL_CTX_SET_ALPN_PROTOS -/* Define to 1 if you have the `SSL_CTX_set_alpn_select_cb' function. */ +/* Define to 1 if you have the 'SSL_CTX_set_alpn_select_cb' function. */ #undef HAVE_SSL_CTX_SET_ALPN_SELECT_CB -/* Define to 1 if you have the `SSL_CTX_set_ciphersuites' function. */ +/* Define to 1 if you have the 'SSL_CTX_set_ciphersuites' function. */ #undef HAVE_SSL_CTX_SET_CIPHERSUITES -/* Define to 1 if you have the `SSL_CTX_set_security_level' function. */ +/* Define to 1 if you have the 'SSL_CTX_set_security_level' function. */ #undef HAVE_SSL_CTX_SET_SECURITY_LEVEL -/* Define to 1 if you have the `SSL_CTX_set_tlsext_ticket_key_evp_cb' +/* Define to 1 if you have the 'SSL_CTX_set_tlsext_ticket_key_evp_cb' function. */ #undef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB -/* Define to 1 if you have the `SSL_CTX_set_tmp_ecdh' function. */ +/* Define to 1 if you have the 'SSL_CTX_set_tmp_ecdh' function. */ #undef HAVE_SSL_CTX_SET_TMP_ECDH -/* Define to 1 if you have the `SSL_get0_alpn_selected' function. */ +/* Define to 1 if you have the 'SSL_get0_alpn_selected' function. */ #undef HAVE_SSL_GET0_ALPN_SELECTED -/* Define to 1 if you have the `SSL_get0_peername' function. */ +/* Define to 1 if you have the 'SSL_get0_peername' function. */ #undef HAVE_SSL_GET0_PEERNAME -/* Define to 1 if you have the `SSL_get1_peer_certificate' function. */ +/* Define to 1 if you have the 'SSL_get1_peer_certificate' function. */ #undef HAVE_SSL_GET1_PEER_CERTIFICATE -/* Define to 1 if you have the `SSL_is_quic' function. */ +/* Define to 1 if you have the 'SSL_is_quic' function. */ #undef HAVE_SSL_IS_QUIC -/* Define to 1 if you have the `SSL_set1_host' function. */ +/* Define to 1 if you have the 'SSL_set1_host' function. */ #undef HAVE_SSL_SET1_HOST /* Define to 1 if you have the <stdarg.h> header file. */ @@ -681,7 +681,7 @@ /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H -/* Define to 1 if you have the `strftime' function. */ +/* Define to 1 if you have the 'strftime' function. */ #undef HAVE_STRFTIME /* Define to 1 if you have the <strings.h> header file. */ @@ -690,39 +690,39 @@ /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H -/* Define to 1 if you have the `strlcat' function. */ +/* Define to 1 if you have the 'strlcat' function. */ #undef HAVE_STRLCAT -/* Define to 1 if you have the `strlcpy' function. */ +/* Define to 1 if you have the 'strlcpy' function. */ #undef HAVE_STRLCPY -/* Define to 1 if you have the `strptime' function. */ +/* Define to 1 if you have the 'strptime' function. */ #undef HAVE_STRPTIME -/* Define to 1 if you have the `strsep' function. */ +/* Define to 1 if you have the 'strsep' function. */ #undef HAVE_STRSEP -/* Define to 1 if `ipi_spec_dst' is a member of `struct in_pktinfo'. */ +/* Define to 1 if 'ipi_spec_dst' is a member of 'struct in_pktinfo'. */ #undef HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST -/* Define to 1 if `tokenlen' is a member of `struct ngtcp2_pkt_hd'. */ +/* Define to 1 if 'tokenlen' is a member of 'struct ngtcp2_pkt_hd'. */ #undef HAVE_STRUCT_NGTCP2_PKT_HD_TOKENLEN -/* Define to 1 if `max_tx_udp_payload_size' is a member of `struct +/* Define to 1 if 'max_tx_udp_payload_size' is a member of 'struct ngtcp2_settings'. */ #undef HAVE_STRUCT_NGTCP2_SETTINGS_MAX_TX_UDP_PAYLOAD_SIZE -/* Define to 1 if `tokenlen' is a member of `struct ngtcp2_settings'. */ +/* Define to 1 if 'tokenlen' is a member of 'struct ngtcp2_settings'. */ #undef HAVE_STRUCT_NGTCP2_SETTINGS_TOKENLEN -/* Define to 1 if `original_dcid_present' is a member of `struct +/* Define to 1 if 'original_dcid_present' is a member of 'struct ngtcp2_transport_params'. */ #undef HAVE_STRUCT_NGTCP2_TRANSPORT_PARAMS_ORIGINAL_DCID_PRESENT -/* Define to 1 if the system has the type `struct ngtcp2_version_cid'. */ +/* Define to 1 if the system has the type 'struct ngtcp2_version_cid'. */ #undef HAVE_STRUCT_NGTCP2_VERSION_CID -/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */ +/* Define to 1 if 'sun_len' is a member of 'struct sockaddr_un'. */ #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN /* Define if you have Swig libraries and header files. */ @@ -782,16 +782,16 @@ /* Define to 1 if you have the <time.h> header file. */ #undef HAVE_TIME_H -/* Define to 1 if you have the `tzset' function. */ +/* Define to 1 if you have the 'tzset' function. */ #undef HAVE_TZSET /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H -/* Define to 1 if you have the `usleep' function. */ +/* Define to 1 if you have the 'usleep' function. */ #undef HAVE_USLEEP -/* Define to 1 if you have the `vfork' function. */ +/* Define to 1 if you have the 'vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the <vfork.h> header file. */ @@ -809,22 +809,22 @@ /* Define to 1 if you have the <winsock2.h> header file. */ #undef HAVE_WINSOCK2_H -/* Define to 1 if `fork' works. */ +/* Define to 1 if 'fork' works. */ #undef HAVE_WORKING_FORK -/* Define to 1 if `vfork' works. */ +/* Define to 1 if 'vfork' works. */ #undef HAVE_WORKING_VFORK -/* Define to 1 if you have the `writev' function. */ +/* Define to 1 if you have the 'writev' function. */ #undef HAVE_WRITEV /* Define to 1 if you have the <ws2tcpip.h> header file. */ #undef HAVE_WS2TCPIP_H -/* Define to 1 if you have the `X509_VERIFY_PARAM_set1_host' function. */ +/* Define to 1 if you have the 'X509_VERIFY_PARAM_set1_host' function. */ #undef HAVE_X509_VERIFY_PARAM_SET1_HOST -/* Define to 1 if you have the `_beginthreadex' function. */ +/* Define to 1 if you have the '_beginthreadex' function. */ #undef HAVE__BEGINTHREADEX /* If HMAC_Init_ex() returns void */ @@ -923,16 +923,16 @@ /* Shared data */ #undef SHARE_DIR -/* The size of `pthread_t', as computed by sizeof. */ +/* The size of 'pthread_t', as computed by sizeof. */ #undef SIZEOF_PTHREAD_T -/* The size of `size_t', as computed by sizeof. */ +/* The size of 'size_t', as computed by sizeof. */ #undef SIZEOF_SIZE_T -/* The size of `time_t', as computed by sizeof. */ +/* The size of 'time_t', as computed by sizeof. */ #undef SIZEOF_TIME_T -/* The size of `unsigned long', as computed by sizeof. */ +/* The size of 'unsigned long', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_LONG /* define if (v)snprintf does not return length needed, (but length used) */ @@ -941,7 +941,7 @@ /* Define to 1 if libsodium supports sodium_set_misuse_handler */ #undef SODIUM_MISUSE_HANDLER -/* Define to 1 if all of the C90 standard headers exist (not just the ones +/* Define to 1 if all of the C89 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS @@ -1035,7 +1035,7 @@ /* Define this to enable SHA256 and SHA512 support. */ #undef USE_SHA2 -/* Enable extensions on AIX 3, Interix. */ +/* Enable extensions on AIX, Interix, z/OS. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif @@ -1096,11 +1096,15 @@ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif +/* Enable extensions specified by C23 Annex F. */ +#ifndef __STDC_WANT_IEC_60559_EXT__ +# undef __STDC_WANT_IEC_60559_EXT__ +#endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif -/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +/* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif @@ -1141,30 +1145,36 @@ /* Define if you want PyUnbound. */ #undef WITH_PYUNBOUND -/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a - `char[]'. */ +/* Define to 1 if 'lex' declares 'yytext' as a 'char *' by default, not a + 'char[]'. */ #undef YYTEXT_POINTER /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS -/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +/* Define to 1 if necessary to make fseeko visible. */ #undef _LARGEFILE_SOURCE -/* Define for large files, on AIX-style hosts. */ +/* Define to 1 on platforms where this makes off_t a 64-bit type. */ #undef _LARGE_FILES /* Enable for compile on Minix */ #undef _NETBSD_SOURCE +/* Number of bits in time_t, on hosts where this is settable. */ +#undef _TIME_BITS + +/* Define to 1 on platforms where this makes time_t a 64-bit type. */ +#undef __MINGW_USE_VC2005_COMPAT + /* defined to use gcc ansi snprintf and sscanf that understands %lld when compiled for windows. */ #undef __USE_MINGW_ANSI_STDIO -/* Define to empty if `const' does not conform to ANSI C. */ +/* Define to empty if 'const' does not conform to ANSI C. */ #undef const -/* Define to `int' if <sys/types.h> doesn't define. */ +/* Define as 'int' if <sys/types.h> doesn't define. */ #undef gid_t /* in_addr_t */ @@ -1173,28 +1183,28 @@ /* in_port_t */ #undef in_port_t -/* Define to `__inline__' or `__inline' if that's what the C compiler +/* Define to '__inline__' or '__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif -/* Define to `short' if <sys/types.h> does not define. */ +/* Define to 'short' if <sys/types.h> does not define. */ #undef int16_t -/* Define to `int' if <sys/types.h> does not define. */ +/* Define to 'int' if <sys/types.h> does not define. */ #undef int32_t -/* Define to `long long' if <sys/types.h> does not define. */ +/* Define to 'long long' if <sys/types.h> does not define. */ #undef int64_t -/* Define to `signed char' if <sys/types.h> does not define. */ +/* Define to 'signed char' if <sys/types.h> does not define. */ #undef int8_t /* Define if replacement function should be used. */ #undef malloc -/* Define to `long int' if <sys/types.h> does not define. */ +/* Define to 'long int' if <sys/types.h> does not define. */ #undef off_t /* Define as a signed integer type capable of holding a process identifier. */ @@ -1203,34 +1213,34 @@ /* Define to 'int' if not defined */ #undef rlim_t -/* Define to `unsigned int' if <sys/types.h> does not define. */ +/* Define as 'unsigned int' if <stddef.h> doesn't define. */ #undef size_t /* Define to 'int' if not defined */ #undef socklen_t -/* Define to `int' if <sys/types.h> does not define. */ +/* Define to 'int' if <sys/types.h> does not define. */ #undef ssize_t /* Define to 'unsigned char if not defined */ #undef u_char -/* Define to `int' if <sys/types.h> doesn't define. */ +/* Define as 'int' if <sys/types.h> doesn't define. */ #undef uid_t -/* Define to `unsigned short' if <sys/types.h> does not define. */ +/* Define to 'unsigned short' if <sys/types.h> does not define. */ #undef uint16_t -/* Define to `unsigned int' if <sys/types.h> does not define. */ +/* Define to 'unsigned int' if <sys/types.h> does not define. */ #undef uint32_t -/* Define to `unsigned long long' if <sys/types.h> does not define. */ +/* Define to 'unsigned long long' if <sys/types.h> does not define. */ #undef uint64_t -/* Define to `unsigned char' if <sys/types.h> does not define. */ +/* Define to 'unsigned char' if <sys/types.h> does not define. */ #undef uint8_t -/* Define as `fork' if `vfork' does not work. */ +/* Define as 'fork' if 'vfork' does not work. */ #undef vfork #if defined(OMITTED__D_GNU_SOURCE) && !defined(_GNU_SOURCE) diff --git a/contrib/unbound/config.sub b/contrib/unbound/config.sub index 4aaae46f6f74..3d35cde174de 100755 --- a/contrib/unbound/config.sub +++ b/contrib/unbound/config.sub @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2024 Free Software Foundation, Inc. +# Copyright 1992-2025 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale -timestamp='2024-05-27' +timestamp='2025-07-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -76,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) -Copyright 1992-2024 Free Software Foundation, Inc. +Copyright 1992-2025 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -145,6 +145,7 @@ case $1 in | kfreebsd*-gnu* \ | knetbsd*-gnu* \ | kopensolaris*-gnu* \ + | ironclad-* \ | linux-* \ | managarm-* \ | netbsd*-eabi* \ @@ -242,7 +243,6 @@ case $1 in | rombug \ | semi \ | sequent* \ - | siemens \ | sgi* \ | siemens \ | sim \ @@ -261,7 +261,7 @@ case $1 in basic_machine=$field1-$field2 basic_os= ;; - zephyr*) + tock* | zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; @@ -1194,7 +1194,7 @@ case $cpu-$vendor in xscale-* | xscalee[bl]-*) cpu=`echo "$cpu" | sed 's/^xscale/arm/'` ;; - arm64-* | aarch64le-*) + arm64-* | aarch64le-* | arm64_32-*) cpu=aarch64 ;; @@ -1321,6 +1321,7 @@ case $cpu-$vendor in | i960 \ | ia16 \ | ia64 \ + | intelgt \ | ip2k \ | iq2000 \ | javascript \ @@ -1522,6 +1523,10 @@ EOF kernel=nto os=`echo "$basic_os" | sed -e 's|nto|qnx|'` ;; + ironclad*) + kernel=ironclad + os=`echo "$basic_os" | sed -e 's|ironclad|mlibc|'` + ;; linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|linux|gnu|'` @@ -1976,6 +1981,7 @@ case $os in | atheos* \ | auroraux* \ | aux* \ + | banan_os* \ | beos* \ | bitrig* \ | bme* \ @@ -2022,7 +2028,6 @@ case $os in | ios* \ | iris* \ | irix* \ - | ironclad* \ | isc* \ | its* \ | l4re* \ @@ -2118,6 +2123,7 @@ case $os in | sysv* \ | tenex* \ | tirtos* \ + | tock* \ | toppers* \ | tops10* \ | tops20* \ @@ -2214,6 +2220,8 @@ case $kernel-$os-$obj in ;; uclinux-uclibc*- | uclinux-gnu*- ) ;; + ironclad-mlibc*-) + ;; managarm-mlibc*- | managarm-kernel*- ) ;; windows*-msvc*-) @@ -2249,6 +2257,8 @@ case $kernel-$os-$obj in ;; *-eabi*- | *-gnueabi*-) ;; + ios*-simulator- | tvos*-simulator- | watchos*-simulator- ) + ;; none--*) # None (no kernel, i.e. freestanding / bare metal), # can be paired with an machine code file format @@ -2347,8 +2357,8 @@ echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" exit # Local variables: -# eval: (add-hook 'before-save-hook 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-format: "%Y-%02m-%02d" # time-stamp-end: "'" # End: diff --git a/contrib/unbound/configure b/contrib/unbound/configure index 0b78d97b16e9..c4c5de99d85d 100755 --- a/contrib/unbound/configure +++ b/contrib/unbound/configure @@ -1,11 +1,11 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for unbound 1.23.0. +# Generated by GNU Autoconf 2.72 for unbound 1.23.1. # # Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>. # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # @@ -17,7 +17,6 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -26,12 +25,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -103,7 +103,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -133,15 +133,14 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 + as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: @@ -149,12 +148,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop - case \`(set -o) 2>/dev/null\` in #( +else case e in #( + e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi " @@ -172,8 +172,9 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : -else \$as_nop - exitcode=1; echo positional parameters were not saved. +else case e in #( + e) exitcode=1; echo positional parameters were not saved. ;; +esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) @@ -195,14 +196,15 @@ test \$(( 1 + 1 )) = 2 || exit 1 if (eval "$as_required") 2>/dev/null then : as_have_required=yes -else $as_nop - as_have_required=no +else case e in #( + e) as_have_required=no ;; +esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : -else $as_nop - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do @@ -235,12 +237,13 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && +else case e in #( + e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes -fi +fi ;; +esac fi @@ -262,7 +265,7 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. +# out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi @@ -283,7 +286,8 @@ $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 -fi +fi ;; +esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -322,14 +326,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -398,11 +394,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -416,21 +413,14 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -504,6 +494,8 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' + t clear + :clear s/[$]LINENO.*/&-/ t lineno b @@ -552,7 +544,6 @@ esac as_echo='printf %s\n' as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -564,9 +555,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -591,10 +582,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated SHELL=${CONFIG_SHELL-/bin/sh} @@ -622,8 +615,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.23.0' -PACKAGE_STRING='unbound 1.23.0' +PACKAGE_VERSION='1.23.1' +PACKAGE_STRING='unbound 1.23.1' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -660,6 +653,7 @@ ac_includes_default="\ ac_header_c_list= ac_func_c_list= +enable_year2038=no ac_subst_vars='LTLIBOBJS date version @@ -746,6 +740,7 @@ PTHREAD_LIBS PTHREAD_CXX PTHREAD_CC ax_pthread_config +CPP ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ SLDNS_ALLOCCHECK_EXTRA_OBJ USE_SYSTEMD_FALSE @@ -756,7 +751,6 @@ SYSTEMD_LIBS SYSTEMD_CFLAGS RUNTIME_PATH LIBOBJS -CPP PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG @@ -939,6 +933,7 @@ with_libmnl enable_explicit_port_randomisation enable_linux_ip_local_port_range with_libunbound_only +enable_year2038 ' ac_precious_vars='build_alias host_alias @@ -954,11 +949,11 @@ LT_SYS_LIBRARY_PATH PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR -CPP SYSTEMD_CFLAGS SYSTEMD_LIBS SYSTEMD_DAEMON_CFLAGS SYSTEMD_DAEMON_LIBS +CPP PYTHON_VERSION SOURCE_DATE_EPOCH PROTOBUFC_CFLAGS @@ -1071,7 +1066,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1097,7 +1092,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1310,7 +1305,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1326,7 +1321,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1356,8 +1351,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: '$ac_option' +Try '$0 --help' for more information" ;; *=*) @@ -1365,7 +1360,7 @@ Try \`$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1415,7 +1410,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: `$host' +# There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1483,7 +1478,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1511,7 +1506,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures unbound 1.23.0 to adapt to many kinds of systems. +'configure' configures unbound 1.23.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1525,11 +1520,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages + -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' + -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] + --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1537,10 +1532,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. +By default, 'make install' will install all the files in +'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify +an installation prefix other than '$ac_default_prefix' using '--prefix', +for instance '--prefix=\$HOME'. For better control, use the options below. @@ -1577,7 +1572,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.23.0:";; + short | recursive ) echo "Configuration of unbound 1.23.1:";; esac cat <<\_ACEOF @@ -1653,6 +1648,7 @@ Optional Features: randomness. Define this only when the target system restricts (e.g. some of SELinux enabled distributions) the use of non-ephemeral ports. + --enable-year2038 support timestamps after 2038 Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1728,12 +1724,12 @@ Some influential environment variables: LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> - YACC The `Yet Another Compiler Compiler' implementation to use. - Defaults to the first program found out of: `bison -y', `byacc', - `yacc'. + YACC The 'Yet Another Compiler Compiler' implementation to use. + Defaults to the first program found out of: 'bison -y', 'byacc', + 'yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a - default value of `-d' given by some make applications. + default value of '-d' given by some make applications. LT_SYS_LIBRARY_PATH User-defined run-time library search path. PKG_CONFIG path to pkg-config utility @@ -1741,7 +1737,6 @@ Some influential environment variables: directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path - CPP C preprocessor SYSTEMD_CFLAGS C compiler flags for SYSTEMD, overriding pkg-config SYSTEMD_LIBS @@ -1750,6 +1745,7 @@ Some influential environment variables: C compiler flags for SYSTEMD_DAEMON, overriding pkg-config SYSTEMD_DAEMON_LIBS linker flags for SYSTEMD_DAEMON, overriding pkg-config + CPP C preprocessor PYTHON_VERSION The installed Python version to use, for example '2.3'. This string will be appended to the Python interpreter canonical @@ -1763,7 +1759,7 @@ Some influential environment variables: PROTOBUFC_LIBS linker flags for PROTOBUFC, overriding pkg-config -Use these variables to override the choices made by `configure' or to help +Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>. @@ -1830,10 +1826,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.23.0 -generated by GNU Autoconf 2.71 +unbound configure 1.23.1 +generated by GNU Autoconf 2.72 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1872,11 +1868,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } && test -s conftest.$ac_objext then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1895,8 +1892,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> @@ -1904,10 +1901,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -1947,11 +1946,12 @@ printf "%s\n" "$ac_try_echo"; } >&5 } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -1974,15 +1974,15 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case <limits.h> declares $2. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (void); below. */ #include <limits.h> #undef $2 @@ -1993,7 +1993,7 @@ else $as_nop #ifdef __cplusplus extern "C" #endif -char $2 (); +char $2 (void); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ @@ -2012,11 +2012,13 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext + conftest$ac_exeext conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2037,8 +2039,8 @@ printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @@ -2068,12 +2070,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - eval "$3=yes" +else case e in #( + e) eval "$3=yes" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2082,44 +2086,6 @@ printf "%s\n" "$ac_res" >&6; } } # ac_fn_c_check_type -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - } -then : - ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that @@ -2150,12 +2116,13 @@ printf "%s\n" "$ac_try_echo"; } >&5 test $ac_status = 0; }; } then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 +else case e in #( + e) printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=$ac_status + ac_retval=$ac_status ;; +esac fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno @@ -2208,18 +2175,19 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid; break -else $as_nop - as_fn_arith $ac_mid + 1 && ac_lo=$as_val +else case e in #( + e) as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int @@ -2254,20 +2222,23 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_lo=$ac_mid; break -else $as_nop - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val +else case e in #( + e) as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else $as_nop - ac_lo= ac_hi= +else case e in #( + e) ac_lo= ac_hi= ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. @@ -2290,8 +2261,9 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid -else $as_nop - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +else case e in #( + e) as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done @@ -2339,8 +2311,9 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : echo >>conftest.val; read $3 <conftest.val; ac_retval=0 -else $as_nop - ac_retval=1 +else case e in #( + e) ac_retval=1 ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -2352,6 +2325,45 @@ rm -f conftest.val } # ac_fn_c_compute_int +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + } +then : + ac_retval=0 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 ;; +esac +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR # ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR @@ -2365,8 +2377,8 @@ printf %s "checking whether $as_decl_name is declared... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 -else $as_nop - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` +else case e in #( + e) as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` eval ac_save_FLAGS=\$$6 as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -2390,12 +2402,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" -else $as_nop - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval $6=\$ac_save_FLAGS - + ;; +esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2416,8 +2430,8 @@ printf %s "checking for $2.$3... " >&6; } if eval test \${$4+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int @@ -2433,8 +2447,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int @@ -2450,12 +2464,15 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" -else $as_nop - eval "$4=no" +else case e in #( + e) eval "$4=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$4 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -2487,8 +2504,8 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by unbound $as_me 1.23.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +It was created by unbound $as_me 1.23.1, which was +generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -2734,10 +2751,10 @@ esac printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } fi done @@ -2774,9 +2791,7 @@ struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; +static char *e (char **p, int i) { return p[i]; } @@ -2790,6 +2805,21 @@ static char *f (char * (*g) (char **, int), char **p, ...) return s; } +/* C89 style stringification. */ +#define noexpand_stringify(a) #a +const char *stringified = noexpand_stringify(arbitrary+token=sequence); + +/* C89 style token pasting. Exercises some of the corner cases that + e.g. old MSVC gets wrong, but not very hard. */ +#define noexpand_concat(a,b) a##b +#define expand_concat(a,b) noexpand_concat(a,b) +extern int vA; +extern int vbee; +#define aye A +#define bee B +int *pvA = &expand_concat(v,aye); +int *pvbee = &noexpand_concat(v,bee); + /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated @@ -2817,16 +2847,19 @@ ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? +/* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif +// See if C++-style comments work. + #include <stdbool.h> extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); +extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare @@ -2876,7 +2909,6 @@ typedef const char *ccp; static inline int test_restrict (ccp restrict text) { - // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) @@ -2942,6 +2974,8 @@ ac_c_conftest_c99_main=' ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; + // Work around memory leak warnings. + free (ia); // Check named initializers. struct named_init ni = { @@ -2963,7 +2997,7 @@ ac_c_conftest_c99_main=' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? +/* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif @@ -3159,8 +3193,9 @@ IFS=$as_save_IFS if $as_found then : -else $as_nop - as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; +esac fi @@ -3188,12 +3223,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -3202,18 +3237,18 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. @@ -3229,11 +3264,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## @@ -3251,11 +3286,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=23 -UNBOUND_VERSION_MICRO=0 +UNBOUND_VERSION_MICRO=1 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=31 +LIBUNBOUND_REVISION=32 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -3354,6 +3389,7 @@ LIBUNBOUND_AGE=1 # 1.21.1 had 9:29:1 # 1.22.0 had 9:30:1 # 1.23.0 had 9:31:1 +# 1.23.1 had 9:32:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -3406,8 +3442,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3429,7 +3465,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3451,8 +3488,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3474,7 +3511,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -3509,8 +3547,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3532,7 +3570,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3554,8 +3593,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no @@ -3594,7 +3633,8 @@ if test $ac_prog_rejected = yes; then ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3618,8 +3658,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3641,7 +3681,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3667,8 +3708,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3690,7 +3731,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -3728,8 +3770,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3751,7 +3793,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -3773,8 +3816,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3796,7 +3839,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -3825,10 +3869,10 @@ fi fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -3900,8 +3944,8 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' + # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. +# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. @@ -3921,7 +3965,7 @@ do ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' + # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. @@ -3932,8 +3976,9 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else $as_nop - ac_file='' +else case e in #( + e) ac_file='' ;; +esac fi if test -z "$ac_file" then : @@ -3942,13 +3987,14 @@ printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } @@ -3972,10 +4018,10 @@ printf "%s\n" "$ac_try_echo"; } >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. + # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) +# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will +# work properly (i.e., refer to 'conftest.exe'), while it won't with +# 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in @@ -3985,11 +4031,12 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 @@ -4005,6 +4052,8 @@ int main (void) { FILE *f = fopen ("conftest.out", "w"); + if (!f) + return 1; return ferror (f) || fclose (f) != 0; ; @@ -4044,26 +4093,27 @@ printf "%s\n" "$ac_try_echo"; } >&5 if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } +If you meant to cross compile, use '--host'. +See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +rm -f conftest.$ac_ext conftest$ac_cv_exeext \ + conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4095,16 +4145,18 @@ then : break;; esac done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext +rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } @@ -4115,8 +4167,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4133,12 +4185,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -4156,8 +4210,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag +else case e in #( + e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -4175,8 +4229,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" +else case e in #( + e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4191,8 +4245,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag +else case e in #( + e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4209,12 +4263,15 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag + ac_c_werror_flag=$ac_save_c_werror_flag ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -4241,8 +4298,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +else case e in #( + e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4259,25 +4316,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" + CC="$CC $ac_cv_prog_cc_c11" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 + ac_prog_cc_stdc=c11 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -4287,8 +4347,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no +else case e in #( + e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4305,25 +4365,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" + CC="$CC $ac_cv_prog_cc_c99" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 + ac_prog_cc_stdc=c99 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -4333,8 +4396,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no +else case e in #( + e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4351,25 +4414,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" + CC="$CC $ac_cv_prog_cc_c89" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 + ac_prog_cc_stdc=c89 ;; +esac fi fi @@ -4420,8 +4486,8 @@ printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 @@ -4437,10 +4503,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes -else $as_nop - ac_cv_safe_to_define___extensions__=no +else case e in #( + e) ac_cv_safe_to_define___extensions__=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } @@ -4450,8 +4518,8 @@ printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_should_define__xopen_source=no +else case e in #( + e) ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4470,8 +4538,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 @@ -4489,10 +4557,12 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } @@ -4517,6 +4587,8 @@ printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h @@ -4536,8 +4608,9 @@ then : printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h -else $as_nop - MINIX= +else case e in #( + e) MINIX= ;; +esac fi if test $ac_cv_safe_to_define___extensions__ = yes then : @@ -4632,13 +4705,14 @@ printf "%s\n" X"$ub_conf_file" | if test ${with_run_dir+y} then : withval=$with_run_dir; UNBOUND_RUN_DIR="$withval" -else $as_nop - if test $on_mingw = no; then +else case e in #( + e) if test $on_mingw = no; then UNBOUND_RUN_DIR=`dirname "$ub_conf_file"` else UNBOUND_RUN_DIR="" fi - + ;; +esac fi @@ -4653,13 +4727,14 @@ printf "%s\n" "#define RUN_DIR \"$hdr_run\"" >>confdefs.h if test ${with_chroot_dir+y} then : withval=$with_chroot_dir; UNBOUND_CHROOT_DIR="$withval" -else $as_nop - if test $on_mingw = no; then +else case e in #( + e) if test $on_mingw = no; then UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR" else UNBOUND_CHROOT_DIR="" fi - + ;; +esac fi @@ -4674,8 +4749,9 @@ printf "%s\n" "#define CHROOT_DIR \"$hdr_chroot\"" >>confdefs.h if test ${with_share_dir+y} then : withval=$with_share_dir; UNBOUND_SHARE_DIR="$withval" -else $as_nop - UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR" +else case e in #( + e) UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR" ;; +esac fi @@ -4688,13 +4764,14 @@ printf "%s\n" "#define SHARE_DIR \"$UNBOUND_SHARE_DIR\"" >>confdefs.h if test ${with_pidfile+y} then : withval=$with_pidfile; UNBOUND_PIDFILE="$withval" -else $as_nop - if test $on_mingw = no; then +else case e in #( + e) if test $on_mingw = no; then UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid" else UNBOUND_PIDFILE="" fi - + ;; +esac fi @@ -4709,13 +4786,14 @@ printf "%s\n" "#define PIDFILE \"$hdr_pid\"" >>confdefs.h if test ${with_rootkey_file+y} then : withval=$with_rootkey_file; UNBOUND_ROOTKEY_FILE="$withval" -else $as_nop - if test $on_mingw = no; then +else case e in #( + e) if test $on_mingw = no; then UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key" else UNBOUND_ROOTKEY_FILE="C:\\Program Files\\Unbound\\root.key" fi - + ;; +esac fi @@ -4730,13 +4808,14 @@ printf "%s\n" "#define ROOT_ANCHOR_FILE \"$hdr_rkey\"" >>confdefs.h if test ${with_rootcert_file+y} then : withval=$with_rootcert_file; UNBOUND_ROOTCERT_FILE="$withval" -else $as_nop - if test $on_mingw = no; then +else case e in #( + e) if test $on_mingw = no; then UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem" else UNBOUND_ROOTCERT_FILE="C:\\Program Files\\Unbound\\icannbundle.pem" fi - + ;; +esac fi @@ -4751,8 +4830,9 @@ printf "%s\n" "#define ROOT_CERT_FILE \"$hdr_rpem\"" >>confdefs.h if test ${with_username+y} then : withval=$with_username; UNBOUND_USERNAME="$withval" -else $as_nop - UNBOUND_USERNAME="unbound" +else case e in #( + e) UNBOUND_USERNAME="unbound" ;; +esac fi @@ -4775,8 +4855,8 @@ printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then +else case e in #( + e) if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4795,9 +4875,10 @@ do as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in +case `"$ac_path_GREP" --version 2>&1` in #( *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -4832,7 +4913,8 @@ IFS=$as_save_IFS else ac_cv_path_GREP=$GREP fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } @@ -4846,8 +4928,8 @@ printf %s "checking for an ANSI C-conforming const... " >&6; } if test ${ac_cv_c_const+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4911,10 +4993,12 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_const=yes -else $as_nop - ac_cv_c_const=no +else case e in #( + e) ac_cv_c_const=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 printf "%s\n" "$ac_cv_c_const" >&6; } @@ -4941,8 +5025,8 @@ cache=`echo g | sed 'y%.=/+-%___p_%'` if eval test \${cv_prog_cc_flag_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -g -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" @@ -4950,7 +5034,8 @@ else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then @@ -4973,8 +5058,8 @@ cache=`echo O2 | sed 'y%.=/+-%___p_%'` if eval test \${cv_prog_cc_flag_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -O2 -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" @@ -4982,7 +5067,8 @@ else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then @@ -5012,8 +5098,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5035,7 +5121,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -5057,8 +5144,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5080,7 +5167,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -5115,8 +5203,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5138,7 +5226,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -5160,8 +5249,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no @@ -5200,7 +5289,8 @@ if test $ac_prog_rejected = yes; then ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -5224,8 +5314,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5247,7 +5337,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -5273,8 +5364,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5296,7 +5387,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -5334,8 +5426,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5357,7 +5449,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then @@ -5379,8 +5472,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5402,7 +5495,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then @@ -5431,10 +5525,10 @@ fi fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -5466,8 +5560,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -5484,12 +5578,14 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } @@ -5507,8 +5603,8 @@ printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_c_werror_flag=$ac_c_werror_flag +else case e in #( + e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -5526,8 +5622,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" +else case e in #( + e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5542,8 +5638,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag +else case e in #( + e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5560,12 +5656,15 @@ if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag + ac_c_werror_flag=$ac_save_c_werror_flag ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } @@ -5592,8 +5691,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +else case e in #( + e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5610,25 +5709,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" + CC="$CC $ac_cv_prog_cc_c11" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 + ac_prog_cc_stdc=c11 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -5638,8 +5740,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no +else case e in #( + e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5656,25 +5758,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" + CC="$CC $ac_cv_prog_cc_c99" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 + ac_prog_cc_stdc=c99 ;; +esac fi fi if test x$ac_prog_cc_stdc = xno @@ -5684,8 +5789,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no +else case e in #( + e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5702,25 +5807,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x +else case e in #( + e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" + CC="$CC $ac_cv_prog_cc_c89" ;; +esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 + ac_prog_cc_stdc=c89 ;; +esac fi fi @@ -5757,8 +5865,8 @@ cache=`echo Werror | sed 'y%.=/+-%___p_%'` if eval test \${cv_prog_cc_flag_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -Werror -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" @@ -5766,7 +5874,8 @@ else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then @@ -5789,8 +5898,8 @@ cache=`echo Wall | sed 'y%.=/+-%___p_%'` if eval test \${cv_prog_cc_flag_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -Wall -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" @@ -5798,7 +5907,8 @@ else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then @@ -5823,8 +5933,8 @@ cache=`echo std=c99 | sed 'y%.=/+-%___p_%'` if eval test \${cv_prog_cc_flag_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -std=c99 -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" @@ -5832,7 +5942,8 @@ else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then @@ -5855,8 +5966,8 @@ cache=`echo xc99 | sed 'y%.=/+-%___p_%'` if eval test \${cv_prog_cc_flag_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -xc99 -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" @@ -5864,7 +5975,8 @@ else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then @@ -5901,12 +6013,12 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE as a flag for $CC" >&5 printf %s "checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE as a flag for $CC... " >&6; } -cache=`printf "%s\n" "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE" | $as_tr_sh` +cache=`printf "%s\n" "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE" | sed "$as_sed_sh"` if eval test \${cv_prog_cc_flag_needed_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo ' #include "confdefs.h" #include <stdlib.h> @@ -5960,7 +6072,8 @@ fi fi rm -f conftest conftest.c conftest.o - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then @@ -5993,12 +6106,12 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE as a flag for $CC" >&5 printf %s "checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE as a flag for $CC... " >&6; } -cache=`printf "%s\n" "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE" | $as_tr_sh` +cache=`printf "%s\n" "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE" | sed "$as_sed_sh"` if eval test \${cv_prog_cc_flag_needed_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo ' #include "confdefs.h" #include <stdlib.h> @@ -6052,7 +6165,8 @@ fi fi rm -f conftest conftest.c conftest.o - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then @@ -6085,12 +6199,12 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG as a flag for $CC" >&5 printf %s "checking whether we need $C99FLAG as a flag for $CC... " >&6; } -cache=`printf "%s\n" "$C99FLAG" | $as_tr_sh` +cache=`printf "%s\n" "$C99FLAG" | sed "$as_sed_sh"` if eval test \${cv_prog_cc_flag_needed_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo ' #include <stdbool.h> #include <ctype.h> @@ -6117,7 +6231,8 @@ fi fi rm -f conftest conftest.c conftest.o - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then @@ -6154,8 +6269,8 @@ cache=_D_BSD_SOURCE__D_DEFAULT_SOURCE if eval test \${cv_prog_cc_flag_needed_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo ' #include <ctype.h> @@ -6183,7 +6298,8 @@ fi fi rm -f conftest conftest.c conftest.o - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then @@ -6220,8 +6336,8 @@ cache=_D_GNU_SOURCE if eval test \${cv_prog_cc_flag_needed_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo ' #include <netinet/in.h> @@ -6249,7 +6365,8 @@ fi fi rm -f conftest conftest.c conftest.o - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then @@ -6289,8 +6406,8 @@ cache=_D_GNU_SOURCE__D_FRSRESGID if eval test \${cv_prog_cc_flag_needed_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo ' #include <unistd.h> @@ -6318,7 +6435,8 @@ fi fi rm -f conftest conftest.c conftest.o - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then @@ -6355,8 +6473,8 @@ cache=_D_POSIX_C_SOURCE_200112 if eval test \${cv_prog_cc_flag_needed_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo ' #include "confdefs.h" #ifdef HAVE_TIME_H @@ -6395,7 +6513,8 @@ fi fi rm -f conftest conftest.c conftest.o - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then @@ -6432,8 +6551,8 @@ cache=_D__EXTENSIONS__ if eval test \${cv_prog_cc_flag_needed_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo ' #include "confdefs.h" #include <stdlib.h> @@ -6478,7 +6597,8 @@ fi fi rm -f conftest conftest.c conftest.o - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then @@ -6534,8 +6654,8 @@ cache=`echo W | sed 'y%.=/+-%___p_%'` if eval test \${cv_prog_cc_flag_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -W -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" @@ -6543,7 +6663,8 @@ else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then @@ -6566,8 +6687,8 @@ cache=`echo Wall | sed 'y%.=/+-%___p_%'` if eval test \${cv_prog_cc_flag_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -Wall -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" @@ -6575,7 +6696,8 @@ else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then @@ -6598,8 +6720,8 @@ cache=`echo Wextra | sed 'y%.=/+-%___p_%'` if eval test \${cv_prog_cc_flag_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -Wextra -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" @@ -6607,7 +6729,8 @@ else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then @@ -6630,8 +6753,8 @@ cache=`echo Wdeclaration-after-statement | sed 'y%.=/+-%___p_%'` if eval test \${cv_prog_cc_flag_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -Wdeclaration-after-statement -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" @@ -6639,7 +6762,8 @@ else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then @@ -6704,9 +6828,10 @@ printf "%s\n" "yes" >&6; } fi rm -f conftest conftest.c conftest.o -else $as_nop - CFLAGS="$BAKCFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else case e in #( + e) CFLAGS="$BAKCFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -6753,9 +6878,10 @@ printf "%s\n" "yes" >&6; } fi rm -f conftest conftest.c conftest.o -else $as_nop - LDFLAGS="$BAKLDFLAGS" ; CFLAGS="$BAKCFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else case e in #( + e) LDFLAGS="$BAKLDFLAGS" ; CFLAGS="$BAKCFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -6800,9 +6926,10 @@ printf "%s\n" "yes" >&6; } fi rm -f conftest conftest.c conftest.o -else $as_nop - LDFLAGS="$BAKLDFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else case e in #( + e) LDFLAGS="$BAKLDFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -6816,8 +6943,8 @@ printf %s "checking for inline... " >&6; } if test ${ac_cv_c_inline+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_inline=no +else case e in #( + e) ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -6835,7 +6962,8 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 printf "%s\n" "$ac_cv_c_inline" >&6; } @@ -6861,8 +6989,8 @@ printf %s "checking whether the C compiler (${CC-cc}) accepts the \"format\" att if test ${ac_cv_c_format_attribute+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_format_attribute=no +else case e in #( + e) ac_cv_c_format_attribute=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> @@ -6882,11 +7010,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_format_attribute="yes" -else $as_nop - ac_cv_c_format_attribute="no" +else case e in #( + e) ac_cv_c_format_attribute="no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi @@ -6904,8 +7034,8 @@ printf %s "checking whether the C compiler (${CC-cc}) accepts the \"unused\" att if test ${ac_cv_c_unused_attribute+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_unused_attribute=no +else case e in #( + e) ac_cv_c_unused_attribute=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> @@ -6924,11 +7054,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_unused_attribute="yes" -else $as_nop - ac_cv_c_unused_attribute="no" +else case e in #( + e) ac_cv_c_unused_attribute="no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi @@ -6950,8 +7082,8 @@ printf %s "checking whether the C compiler (${CC-cc}) accepts the \"weak\" attri if test ${ac_cv_c_weak_attribute+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_weak_attribute=no +else case e in #( + e) ac_cv_c_weak_attribute=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> @@ -6970,11 +7102,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_weak_attribute="yes" -else $as_nop - ac_cv_c_weak_attribute="no" +else case e in #( + e) ac_cv_c_weak_attribute="no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi @@ -7001,8 +7135,8 @@ printf %s "checking whether the C compiler (${CC-cc}) accepts the \"noreturn\" a if test ${ac_cv_c_noreturn_attribute+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_noreturn_attribute=no +else case e in #( + e) ac_cv_c_noreturn_attribute=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> @@ -7021,11 +7155,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_noreturn_attribute="yes" -else $as_nop - ac_cv_c_noreturn_attribute="no" +else case e in #( + e) ac_cv_c_noreturn_attribute="no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi @@ -7054,8 +7190,8 @@ CFLAGS="$CFLAGS -Werror" if test ${ac_cv_c_fallthrough_attribute+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_fallthrough_attribute=no +else case e in #( + e) ac_cv_c_fallthrough_attribute=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> @@ -7089,11 +7225,13 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_fallthrough_attribute="yes" -else $as_nop - ac_cv_c_fallthrough_attribute="no" +else case e in #( + e) ac_cv_c_fallthrough_attribute="no" ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi CFLAGS="$BAKCFLAGS" @@ -7131,8 +7269,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LEX+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$LEX"; then +else case e in #( + e) if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7154,7 +7292,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then @@ -7212,8 +7351,8 @@ printf %s "checking for lex output file root... " >&6; } if test ${ac_cv_prog_lex_root+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) ac_cv_prog_lex_root=unknown { { ac_try="$LEX conftest.l" case "(($ac_try" in @@ -7230,7 +7369,8 @@ if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 printf "%s\n" "$ac_cv_prog_lex_root" >&6; } @@ -7245,15 +7385,15 @@ LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test ${LEXLIB+y} then : -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lex library" >&5 printf %s "checking for lex library... " >&6; } if test ${ac_cv_lib_lex+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) ac_save_LIBS="$LIBS" ac_found=false for ac_cv_lib_lex in 'none needed' -lfl -ll 'not found'; do @@ -7283,7 +7423,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ fi done LIBS="$ac_save_LIBS" - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 printf "%s\n" "$ac_cv_lib_lex" >&6; } @@ -7295,10 +7436,12 @@ printf "%s\n" "$as_me: WARNING: required lex library not found; giving up on $LE elif test "$ac_cv_lib_lex" = 'none needed' then : LEXLIB='' -else $as_nop - LEXLIB=$ac_cv_lib_lex +else case e in #( + e) LEXLIB=$ac_cv_lib_lex ;; +esac fi - + ;; +esac fi @@ -7310,8 +7453,8 @@ printf %s "checking whether yytext is a pointer... " >&6; } if test ${ac_cv_prog_lex_yytext_pointer+y} then : printf %s "(cached) " >&6 -else $as_nop - # POSIX says lex can declare yytext either as a pointer or an array; the +else case e in #( + e) # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no @@ -7326,7 +7469,8 @@ then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 printf "%s\n" "$ac_cv_prog_lex_yytext_pointer" >&6; } @@ -7386,8 +7530,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_YACC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$YACC"; then +else case e in #( + e) if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7409,7 +7553,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then @@ -7437,8 +7582,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_doxygen+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$doxygen"; then +else case e in #( + e) if test -n "$doxygen"; then ac_cv_prog_doxygen="$doxygen" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7460,7 +7605,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi doxygen=$ac_cv_prog_doxygen if test -n "$doxygen"; then @@ -7480,8 +7626,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$STRIP"; then +else case e in #( + e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7503,7 +7649,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then @@ -7525,8 +7672,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_STRIP"; then +else case e in #( + e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -7548,7 +7695,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then @@ -7586,15 +7734,16 @@ printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_build_alias=$build_alias +else case e in #( + e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } @@ -7621,14 +7770,15 @@ printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "x$host_alias" = x; then +else case e in #( + e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } @@ -7678,8 +7828,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - case $AR in +else case e in #( + e) case $AR in [\\/]* | ?:[\\/]*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; @@ -7704,6 +7854,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi AR=$ac_cv_path_AR @@ -7726,8 +7877,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_AR in +else case e in #( + e) case $ac_pt_AR in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_AR="$ac_pt_AR" # Let the user override the test with a path. ;; @@ -7752,6 +7903,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_AR=$ac_cv_path_ac_pt_AR @@ -7883,8 +8035,8 @@ printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ +else case e in #( + e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done @@ -7909,9 +8061,10 @@ do as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in +case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -7946,7 +8099,8 @@ IFS=$as_save_IFS else ac_cv_path_SED=$SED fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } @@ -7971,8 +8125,8 @@ printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 +else case e in #( + e) if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then @@ -7994,9 +8148,10 @@ do as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in +case `"$ac_path_EGREP" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -8032,20 +8187,23 @@ else ac_cv_path_EGREP=$EGREP fi - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" + EGREP_TRADITIONAL=$EGREP + ac_cv_path_EGREP_TRADITIONAL=$EGREP { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 -else $as_nop - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 +else case e in #( + e) if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then @@ -8067,9 +8225,10 @@ do as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in +case `"$ac_path_FGREP" --version 2>&1` in #( *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +#( *) ac_count=0 printf %s 0123456789 >"conftest.in" @@ -8105,7 +8264,8 @@ else ac_cv_path_FGREP=$FGREP fi - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } @@ -8136,8 +8296,9 @@ test -z "$GREP" && GREP=grep if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else $as_nop - with_gnu_ld=no +else case e in #( + e) with_gnu_ld=no ;; +esac fi ac_prog=ld @@ -8182,8 +8343,8 @@ fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -z "$LD"; then +else case e in #( + e) if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs @@ -8206,7 +8367,8 @@ else $as_nop IFS=$lt_save_ifs else lt_cv_path_LD=$LD # Let the user override the test with a path. -fi +fi ;; +esac fi LD=$lt_cv_path_LD @@ -8223,8 +8385,8 @@ printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 -else $as_nop - # I'd rather use --version here, but apparently some GNU lds only accept -v. +else case e in #( + e) # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes @@ -8232,6 +8394,7 @@ case `$LD -v 2>&1 </dev/null` in *) lt_cv_prog_gnu_ld=no ;; +esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 @@ -8251,8 +8414,8 @@ printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$NM"; then +else case e in #( + e) if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else @@ -8299,7 +8462,8 @@ else IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} -fi +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf "%s\n" "$lt_cv_path_NM" >&6; } @@ -8320,8 +8484,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DUMPBIN+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$DUMPBIN"; then +else case e in #( + e) if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8343,7 +8507,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then @@ -8369,8 +8534,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DUMPBIN+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DUMPBIN"; then +else case e in #( + e) if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8392,7 +8557,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then @@ -8446,8 +8612,8 @@ printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_nm_interface="BSD nm" +else case e in #( + e) lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) @@ -8460,7 +8626,8 @@ else $as_nop if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi - rm -f conftest* + rm -f conftest* ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } @@ -8482,8 +8649,8 @@ printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 -else $as_nop - i=0 +else case e in #( + e) i=0 teststring=ABCD case $build_os in @@ -8605,7 +8772,8 @@ else $as_nop fi ;; esac - + ;; +esac fi if test -n "$lt_cv_sys_max_cmd_len"; then @@ -8662,8 +8830,8 @@ printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 -else $as_nop - case $host in +else case e in #( + e) case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys @@ -8694,7 +8862,8 @@ else $as_nop lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac - + ;; +esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd @@ -8710,8 +8879,8 @@ printf %s "checking how to convert $build file names to toolchain format... " >& if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 -else $as_nop - #assume ordinary cross tools, or native build. +else case e in #( + e) #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) @@ -8722,7 +8891,8 @@ case $host in esac ;; esac - + ;; +esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd @@ -8738,8 +8908,9 @@ printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_reload_flag='-r' +else case e in #( + e) lt_cv_ld_reload_flag='-r' ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } @@ -8780,8 +8951,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$OBJDUMP"; then +else case e in #( + e) if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8803,7 +8974,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then @@ -8825,8 +8997,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OBJDUMP"; then +else case e in #( + e) if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8848,7 +9020,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then @@ -8889,8 +9062,8 @@ printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_file_magic_cmd='$MAGIC_CMD' +else case e in #( + e) lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support @@ -9083,7 +9256,8 @@ os2*) lt_cv_deplibs_check_method=pass_all ;; esac - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } @@ -9135,8 +9309,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$DLLTOOL"; then +else case e in #( + e) if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9158,7 +9332,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then @@ -9180,8 +9355,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DLLTOOL"; then +else case e in #( + e) if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9203,7 +9378,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then @@ -9245,8 +9421,8 @@ printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_sharedlib_from_linklib_cmd='unknown' +else case e in #( + e) lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) @@ -9266,7 +9442,8 @@ cygwin* | mingw* | pw32* | cegcc*) lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } @@ -9289,8 +9466,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$AR"; then +else case e in #( + e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9312,7 +9489,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then @@ -9338,8 +9516,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_AR"; then +else case e in #( + e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9361,7 +9539,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then @@ -9407,8 +9586,8 @@ printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ar_at_file=no +else case e in #( + e) lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -9445,7 +9624,8 @@ then : fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf "%s\n" "$lt_cv_ar_at_file" >&6; } @@ -9470,8 +9650,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$STRIP"; then +else case e in #( + e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9493,7 +9673,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then @@ -9515,8 +9696,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_STRIP"; then +else case e in #( + e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9538,7 +9719,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then @@ -9579,8 +9761,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$RANLIB"; then +else case e in #( + e) if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9602,7 +9784,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then @@ -9624,8 +9807,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_RANLIB"; then +else case e in #( + e) if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9647,7 +9830,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then @@ -9733,8 +9917,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$AWK"; then +else case e in #( + e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -9756,7 +9940,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then @@ -9805,8 +9990,8 @@ printf %s "checking command to parse $NM output from $compiler object... " >&6; if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -10061,7 +10246,8 @@ _LT_EOF lt_cv_sys_global_symbol_pipe= fi done - + ;; +esac fi if test -z "$lt_cv_sys_global_symbol_pipe"; then @@ -10125,8 +10311,9 @@ printf %s "checking for sysroot... " >&6; } if test ${with_sysroot+y} then : withval=$with_sysroot; -else $as_nop - with_sysroot=no +else case e in #( + e) with_sysroot=no ;; +esac fi @@ -10161,8 +10348,8 @@ printf %s "checking for a working dd... " >&6; } if test ${ac_cv_path_lt_DD+y} then : printf %s "(cached) " >&6 -else $as_nop - printf 0123456789abcdef0123456789abcdef >conftest.i +else case e in #( + e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then @@ -10198,7 +10385,8 @@ else ac_cv_path_lt_DD=$lt_DD fi -rm -f conftest.i conftest2.i conftest.out +rm -f conftest.i conftest2.i conftest.out ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 printf "%s\n" "$ac_cv_path_lt_DD" >&6; } @@ -10209,8 +10397,8 @@ printf %s "checking how to truncate binary pipes... " >&6; } if test ${lt_cv_truncate_bin+y} then : printf %s "(cached) " >&6 -else $as_nop - printf 0123456789abcdef0123456789abcdef >conftest.i +else case e in #( + e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then @@ -10218,7 +10406,8 @@ if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; the && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out -test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 printf "%s\n" "$lt_cv_truncate_bin" >&6; } @@ -10428,8 +10617,8 @@ printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_ext=c +else case e in #( + e) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' @@ -10449,8 +10638,9 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes -else $as_nop - lt_cv_cc_needs_belf=no +else case e in #( + e) lt_cv_cc_needs_belf=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -10459,7 +10649,8 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } @@ -10517,8 +10708,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$MANIFEST_TOOL"; then +else case e in #( + e) if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -10540,7 +10731,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then @@ -10562,8 +10754,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_MANIFEST_TOOL"; then +else case e in #( + e) if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -10585,7 +10777,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then @@ -10617,15 +10810,16 @@ printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_mainfest_tool+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_path_mainfest_tool=no +else case e in #( + e) lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi - rm -f conftest* + rm -f conftest* ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } @@ -10648,8 +10842,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DSYMUTIL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$DSYMUTIL"; then +else case e in #( + e) if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -10671,7 +10865,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then @@ -10693,8 +10888,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_DSYMUTIL"; then +else case e in #( + e) if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -10716,7 +10911,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then @@ -10750,8 +10946,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NMEDIT+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$NMEDIT"; then +else case e in #( + e) if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -10773,7 +10969,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then @@ -10795,8 +10992,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NMEDIT+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_NMEDIT"; then +else case e in #( + e) if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -10818,7 +11015,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then @@ -10852,8 +11050,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LIPO+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$LIPO"; then +else case e in #( + e) if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -10875,7 +11073,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then @@ -10897,8 +11096,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_LIPO+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_LIPO"; then +else case e in #( + e) if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -10920,7 +11119,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then @@ -10954,8 +11154,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$OTOOL"; then +else case e in #( + e) if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -10977,7 +11177,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then @@ -10999,8 +11200,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OTOOL"; then +else case e in #( + e) if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -11022,7 +11223,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then @@ -11056,8 +11258,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL64+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$OTOOL64"; then +else case e in #( + e) if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -11079,7 +11281,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then @@ -11101,8 +11304,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL64+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_OTOOL64"; then +else case e in #( + e) if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -11124,7 +11327,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then @@ -11181,8 +11385,8 @@ printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_apple_cc_single_mod=no +else case e in #( + e) lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE @@ -11208,7 +11412,8 @@ else $as_nop fi rm -rf libconftest.dylib* rm -f conftest.* - fi + fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } @@ -11218,8 +11423,8 @@ printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_exported_symbols_list=no +else case e in #( + e) lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" @@ -11237,13 +11442,15 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes -else $as_nop - lt_cv_ld_exported_symbols_list=no +else case e in #( + e) lt_cv_ld_exported_symbols_list=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } @@ -11253,8 +11460,8 @@ printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_ld_force_load=no +else case e in #( + e) lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF @@ -11279,7 +11486,8 @@ _LT_EOF fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf "%s\n" "$lt_cv_ld_force_load" >&6; } @@ -11397,8 +11605,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - enable_shared=yes +else case e in #( + e) enable_shared=yes ;; +esac fi @@ -11429,8 +11638,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - enable_static=yes +else case e in #( + e) enable_static=yes ;; +esac fi @@ -11461,8 +11671,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - pic_mode=default +else case e in #( + e) pic_mode=default ;; +esac fi @@ -11492,8 +11703,9 @@ then : IFS=$lt_save_ifs ;; esac -else $as_nop - enable_fast_install=yes +else case e in #( + e) enable_fast_install=yes ;; +esac fi @@ -11520,15 +11732,17 @@ then : ;; esac lt_cv_with_aix_soname=$with_aix_soname -else $as_nop - if test ${lt_cv_with_aix_soname+y} +else case e in #( + e) if test ${lt_cv_with_aix_soname+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_with_aix_soname=aix +else case e in #( + e) lt_cv_with_aix_soname=aix ;; +esac fi - with_aix_soname=$lt_cv_with_aix_soname + with_aix_soname=$lt_cv_with_aix_soname ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 @@ -11619,8 +11833,8 @@ printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 -else $as_nop - rm -f .libs 2>/dev/null +else case e in #( + e) rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs @@ -11628,7 +11842,8 @@ else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi -rmdir .libs 2>/dev/null +rmdir .libs 2>/dev/null ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf "%s\n" "$lt_cv_objdir" >&6; } @@ -11689,8 +11904,8 @@ printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 -else $as_nop - case $MAGIC_CMD in +else case e in #( + e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; @@ -11733,6 +11948,7 @@ _LT_EOF IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; +esac ;; esac fi @@ -11756,8 +11972,8 @@ printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 -else $as_nop - case $MAGIC_CMD in +else case e in #( + e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; @@ -11800,6 +12016,7 @@ _LT_EOF IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; +esac ;; esac fi @@ -11895,8 +12112,8 @@ printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_rtti_exceptions=no +else case e in #( + e) lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment @@ -11924,7 +12141,8 @@ else $as_nop fi fi $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } @@ -12289,8 +12507,9 @@ printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +else case e in #( + e) lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } @@ -12305,8 +12524,8 @@ printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_pic_works=no +else case e in #( + e) lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment @@ -12334,7 +12553,8 @@ else $as_nop fi fi $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } @@ -12370,8 +12590,8 @@ printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_static_works=no +else case e in #( + e) lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext @@ -12392,7 +12612,8 @@ else $as_nop fi $RM -r conftest* LDFLAGS=$save_LDFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } @@ -12414,8 +12635,8 @@ printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_c_o=no +else case e in #( + e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest @@ -12455,7 +12676,8 @@ else $as_nop cd .. $RM -r conftest $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -12470,8 +12692,8 @@ printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler_c_o=no +else case e in #( + e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest @@ -12511,7 +12733,8 @@ else $as_nop cd .. $RM -r conftest $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -13105,8 +13328,8 @@ else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -13138,7 +13361,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi - + ;; +esac fi aix_libpath=$lt_cv_aix_libpath_ @@ -13160,8 +13384,8 @@ else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -13193,7 +13417,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi - + ;; +esac fi aix_libpath=$lt_cv_aix_libpath_ @@ -13444,8 +13669,8 @@ printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_prog_compiler__b=no +else case e in #( + e) lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext @@ -13466,7 +13691,8 @@ else $as_nop fi $RM -r conftest* LDFLAGS=$save_LDFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } @@ -13514,8 +13740,8 @@ printf %s "checking whether the $host_os linker accepts -exported_symbol... " >& if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 -else $as_nop - save_LDFLAGS=$LDFLAGS +else case e in #( + e) save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13524,12 +13750,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes -else $as_nop - lt_cv_irix_exported_symbol=no +else case e in #( + e) lt_cv_irix_exported_symbol=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS + LDFLAGS=$save_LDFLAGS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } @@ -13854,8 +14082,8 @@ printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 -else $as_nop - $RM conftest* +else case e in #( + e) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 @@ -13891,7 +14119,8 @@ else $as_nop cat conftest.err 1>&5 fi $RM conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } @@ -14618,8 +14847,8 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 -else $as_nop - lt_cv_shlibpath_overrides_runpath=no +else case e in #( + e) lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ @@ -14646,7 +14875,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir - + ;; +esac fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath @@ -15074,16 +15304,22 @@ printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -15095,24 +15331,27 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes -else $as_nop - ac_cv_lib_dl_dlopen=no +else case e in #( + e) ac_cv_lib_dl_dlopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop - +else case e in #( + e) lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes - + ;; +esac fi ;; @@ -15130,22 +15369,28 @@ fi if test "x$ac_cv_func_shl_load" = xyes then : lt_cv_dlopen=shl_load -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char shl_load (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (void); int main (void) { @@ -15157,39 +15402,47 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes -else $as_nop - ac_cv_lib_dld_shl_load=no +else case e in #( + e) ac_cv_lib_dld_shl_load=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else $as_nop - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +else case e in #( + e) ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes then : lt_cv_dlopen=dlopen -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -15201,34 +15454,42 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes -else $as_nop - ac_cv_lib_dl_dlopen=no +else case e in #( + e) ac_cv_lib_dl_dlopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -15240,34 +15501,42 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_svld_dlopen=yes -else $as_nop - ac_cv_lib_svld_dlopen=no +else case e in #( + e) ac_cv_lib_svld_dlopen=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dld_link (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (void); int main (void) { @@ -15279,12 +15548,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes -else $as_nop - ac_cv_lib_dld_dld_link=no +else case e in #( + e) ac_cv_lib_dld_dld_link=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } @@ -15293,19 +15564,24 @@ then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi ;; @@ -15333,8 +15609,8 @@ printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 -else $as_nop - if test yes = "$cross_compiling"; then : +else case e in #( + e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -15428,7 +15704,8 @@ _LT_EOF fi rm -fr conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf "%s\n" "$lt_cv_dlopen_self" >&6; } @@ -15440,8 +15717,8 @@ printf %s "checking whether a statically linked program can dlopen itself... " > if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 -else $as_nop - if test yes = "$cross_compiling"; then : +else case e in #( + e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -15535,7 +15812,8 @@ _LT_EOF fi rm -fr conftest* - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } @@ -15710,8 +15988,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PKG_CONFIG in +else case e in #( + e) case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; @@ -15736,6 +16014,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG @@ -15758,8 +16037,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 -else $as_nop - case $ac_pt_PKG_CONFIG in +else case e in #( + e) case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; @@ -15784,6 +16063,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG @@ -16115,265 +16395,132 @@ ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default" if test "x$ac_cv_type_int8_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define int8_t signed char" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "int16_t" "ac_cv_type_int16_t" "$ac_includes_default" if test "x$ac_cv_type_int16_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define int16_t short" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default" if test "x$ac_cv_type_int32_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define int32_t int" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "int64_t" "ac_cv_type_int64_t" "$ac_includes_default" if test "x$ac_cv_type_int64_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define int64_t long long" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default" if test "x$ac_cv_type_uint8_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define uint8_t unsigned char" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default" if test "x$ac_cv_type_uint16_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define uint16_t unsigned short" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default" if test "x$ac_cv_type_uint32_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define uint32_t unsigned int" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "$ac_includes_default" if test "x$ac_cv_type_uint64_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define uint64_t unsigned long long" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define size_t unsigned int" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define ssize_t int" >>confdefs.h - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -printf %s "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test ${ac_cv_prog_CPP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CC needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - -else $as_nop - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - # Broken: success on invalid input. -continue -else $as_nop - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -printf "%s\n" "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - -else $as_nop - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - # Broken: success on invalid input. -continue -else $as_nop - # Passes both tests. -ac_preproc_ok=: -break + ;; +esac fi -rm -f conftest.err conftest.i conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok +ac_fn_c_check_type "$LINENO" "uid_t" "ac_cv_type_uid_t" "$ac_includes_default" +if test "x$ac_cv_type_uid_t" = xyes then : -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } +else case e in #( + e) +printf "%s\n" "#define uid_t int" >>confdefs.h + ;; +esac fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 -printf %s "checking for uid_t in sys/types.h... " >&6; } -if test ${ac_cv_type_uid_t+y} +ac_fn_c_check_type "$LINENO" "gid_t" "ac_cv_type_gid_t" "$ac_includes_default" +if test "x$ac_cv_type_gid_t" = xyes then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "uid_t" >/dev/null 2>&1 -then : - ac_cv_type_uid_t=yes -else $as_nop - ac_cv_type_uid_t=no -fi -rm -rf conftest* - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 -printf "%s\n" "$ac_cv_type_uid_t" >&6; } -if test $ac_cv_type_uid_t = no; then - -printf "%s\n" "#define uid_t int" >>confdefs.h - +else case e in #( + e) printf "%s\n" "#define gid_t int" >>confdefs.h - + ;; +esac fi @@ -16382,8 +16529,8 @@ fi if test "x$ac_cv_type_pid_t" = xyes then : -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _WIN64 && !defined __CYGWIN__ @@ -16402,14 +16549,16 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' +else case e in #( + e) ac_pid_type='__int64' ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - + ;; +esac fi @@ -16417,10 +16566,11 @@ ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define off_t long int" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "u_char" "ac_cv_type_u_char" " @@ -16433,10 +16583,11 @@ $ac_includes_default if test "x$ac_cv_type_u_char" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define u_char unsigned char" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "rlim_t" "ac_cv_type_rlim_t" " @@ -16449,10 +16600,11 @@ $ac_includes_default if test "x$ac_cv_type_rlim_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define rlim_t unsigned long" >>confdefs.h - + ;; +esac fi @@ -16469,10 +16621,11 @@ $ac_includes_default if test "x$ac_cv_type_socklen_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define socklen_t int" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "in_addr_t" "ac_cv_type_in_addr_t" " @@ -16488,10 +16641,11 @@ $ac_includes_default if test "x$ac_cv_type_in_addr_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define in_addr_t uint32_t" >>confdefs.h - + ;; +esac fi ac_fn_c_check_type "$LINENO" "in_port_t" "ac_cv_type_in_port_t" " @@ -16507,10 +16661,11 @@ $ac_includes_default if test "x$ac_cv_type_in_port_t" = xyes then : -else $as_nop - +else case e in #( + e) printf "%s\n" "#define in_port_t uint16_t" >>confdefs.h - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if memcmp compares unsigned" >&5 @@ -16529,8 +16684,8 @@ printf "%s\n" "#define MEMCMP_IS_BROKEN 1" >>confdefs.h esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> @@ -16549,8 +16704,8 @@ if ac_fn_c_try_run "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "#define MEMCMP_IS_BROKEN 1" >>confdefs.h @@ -16561,24 +16716,26 @@ printf "%s\n" "#define MEMCMP_IS_BROKEN 1" >>confdefs.h ;; esac - + ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 printf %s "checking size of time_t... " >&6; } if test ${ac_cv_sizeof_time_t+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" " +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" " $ac_includes_default #ifdef TIME_WITH_SYS_TIME # include <sys/time.h> @@ -16594,17 +16751,19 @@ $ac_includes_default " then : -else $as_nop - if test "$ac_cv_type_time_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_time_t" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (time_t) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_time_t=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 printf "%s\n" "$ac_cv_sizeof_time_t" >&6; } @@ -16616,28 +16775,30 @@ printf "%s\n" "#define SIZEOF_TIME_T $ac_cv_sizeof_time_t" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 printf %s "checking size of size_t... " >&6; } if test ${ac_cv_sizeof_size_t+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_size_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_size_t" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (size_t) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_size_t=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 printf "%s\n" "$ac_cv_sizeof_size_t" >&6; } @@ -16654,8 +16815,9 @@ printf "%s\n" "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h if test ${enable_rpath+y} then : enableval=$enable_rpath; enable_rpath=$enableval -else $as_nop - enable_rpath=yes +else case e in #( + e) enable_rpath=yes ;; +esac fi if test "x$enable_rpath" = xno; then @@ -16671,15 +16833,21 @@ printf %s "checking for library containing inet_pton... " >&6; } if test ${ac_cv_search_inet_pton+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char inet_pton (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char inet_pton (void); int main (void) { @@ -16710,11 +16878,13 @@ done if test ${ac_cv_search_inet_pton+y} then : -else $as_nop - ac_cv_search_inet_pton=no +else case e in #( + e) ac_cv_search_inet_pton=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_pton" >&5 printf "%s\n" "$ac_cv_search_inet_pton" >&6; } @@ -16730,15 +16900,21 @@ printf %s "checking for library containing socket... " >&6; } if test ${ac_cv_search_socket+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char socket (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char socket (void); int main (void) { @@ -16769,11 +16945,13 @@ done if test ${ac_cv_search_socket+y} then : -else $as_nop - ac_cv_search_socket=no +else case e in #( + e) ac_cv_search_socket=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 printf "%s\n" "$ac_cv_search_socket" >&6; } @@ -16793,8 +16971,8 @@ printf %s "checking for working chown... " >&6; } if test ${ac_cv_func_chown_works+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on glibc systems. @@ -16802,8 +16980,8 @@ then : # If we don't know, assume the worst. *) ac_cv_func_chown_works=no ;; esac -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include <fcntl.h> @@ -16831,15 +17009,18 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_chown_works=yes -else $as_nop - ac_cv_func_chown_works=no +else case e in #( + e) ac_cv_func_chown_works=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f conftest.chown - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_chown_works" >&5 printf "%s\n" "$ac_cv_func_chown_works" >&6; } @@ -16872,19 +17053,19 @@ printf %s "checking for working fork... " >&6; } if test ${ac_cv_func_fork_works+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : ac_cv_func_fork_works=cross -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { - /* By Ruediger Kuhlmann. */ + /* By R. Kuhlmann. */ return fork () < 0; ; @@ -16894,13 +17075,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_fork_works=yes -else $as_nop - ac_cv_func_fork_works=no +else case e in #( + e) ac_cv_func_fork_works=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 printf "%s\n" "$ac_cv_func_fork_works" >&6; } @@ -16928,12 +17112,12 @@ printf %s "checking for working vfork... " >&6; } if test ${ac_cv_func_vfork_works+y} then : printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes +else case e in #( + e) if test "$cross_compiling" = yes then : ac_cv_func_vfork_works=cross -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default @@ -17044,13 +17228,16 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_vfork_works=yes -else $as_nop - ac_cv_func_vfork_works=no +else case e in #( + e) ac_cv_func_vfork_works=no ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 printf "%s\n" "$ac_cv_func_vfork_works" >&6; } @@ -17080,74 +17267,99 @@ fi printf "%s\n" "#define RETSIGTYPE void" >>confdefs.h -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 -printf %s "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } -if test ${ac_cv_sys_largefile_source+y} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for declarations of fseeko and ftello" >&5 +printf %s "checking for declarations of fseeko and ftello... " >&6; } +if test ${ac_cv_func_fseeko_ftello+y} then : printf %s "(cached) " >&6 -else $as_nop - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + +#if defined __hpux && !defined _LARGEFILE_SOURCE +# include <limits.h> +# if LONG_MAX >> 31 == 0 +# error "32-bit HP-UX 11/ia64 needs _LARGEFILE_SOURCE for fseeko in C++" +# endif +#endif #include <sys/types.h> /* for off_t */ - #include <stdio.h> +#include <stdio.h> + int main (void) { -int (*fp) (FILE *, off_t, int) = fseeko; - return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + + int (*fp1) (FILE *, off_t, int) = fseeko; + off_t (*fp2) (FILE *) = ftello; + return fseeko (stdin, 0, 0) + && fp1 (stdin, 0, 0) + && ftello (stdin) >= 0 + && fp2 (stdin) >= 0; + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : - ac_cv_sys_largefile_source=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_cv_func_fseeko_ftello=yes +else case e in #( + e) ac_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE=1" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#define _LARGEFILE_SOURCE 1 + +#if defined __hpux && !defined _LARGEFILE_SOURCE +# include <limits.h> +# if LONG_MAX >> 31 == 0 +# error "32-bit HP-UX 11/ia64 needs _LARGEFILE_SOURCE for fseeko in C++" +# endif +#endif #include <sys/types.h> /* for off_t */ - #include <stdio.h> +#include <stdio.h> + int main (void) { -int (*fp) (FILE *, off_t, int) = fseeko; - return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + + int (*fp1) (FILE *, off_t, int) = fseeko; + off_t (*fp2) (FILE *) = ftello; + return fseeko (stdin, 0, 0) + && fp1 (stdin, 0, 0) + && ftello (stdin) >= 0 + && fp2 (stdin) >= 0; + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : - ac_cv_sys_largefile_source=1; break + ac_cv_func_fseeko_ftello="need _LARGEFILE_SOURCE" +else case e in #( + e) ac_cv_func_fseeko_ftello=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - ac_cv_sys_largefile_source=unknown - break -done +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 -printf "%s\n" "$ac_cv_sys_largefile_source" >&6; } -case $ac_cv_sys_largefile_source in #( - no | unknown) ;; - *) -printf "%s\n" "#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source" >>confdefs.h -;; +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac -rm -rf conftest* - -# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug -# in glibc 2.1.3, but that breaks too many other things. -# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. -if test $ac_cv_sys_largefile_source != unknown; then +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fseeko_ftello" >&5 +printf "%s\n" "$ac_cv_func_fseeko_ftello" >&6; } +if test "$ac_cv_func_fseeko_ftello" != no +then : printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h fi +if test "$ac_cv_func_fseeko_ftello" = "need _LARGEFILE_SOURCE" +then : + +printf "%s\n" "#define _LARGEFILE_SOURCE 1" >>confdefs.h + +fi # Check whether --enable-largefile was given. @@ -17155,31 +17367,34 @@ if test ${enable_largefile+y} then : enableval=$enable_largefile; fi - -if test "$enable_largefile" != no; then - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -printf %s "checking for special C compiler options needed for large files... " >&6; } -if test ${ac_cv_sys_largefile_CC+y} +if test "$enable_largefile,$enable_year2038" != no,no +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable large file support" >&5 +printf %s "checking for $CC option to enable large file support... " >&6; } +if test ${ac_cv_sys_largefile_opts+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) ac_save_CC="$CC" + ac_opt_found=no + for ac_opt in "none needed" "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES=1" "-n32"; do + if test x"$ac_opt" != x"none needed" +then : + CC="$ac_save_CC $ac_opt" +fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, +#ifndef FTYPE +# define FTYPE off_t +#endif + /* Check that FTYPE can represent 2**63 - 1 correctly. + We can't simply define LARGE_FTYPE to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) +#define LARGE_FTYPE (((FTYPE) 1 << 31 << 31) - 1 + ((FTYPE) 1 << 31 << 31)) + int FTYPE_is_large[(LARGE_FTYPE % 2147483629 == 721 + && LARGE_FTYPE % 2147483647 == 1) ? 1 : -1]; int main (void) @@ -17189,142 +17404,88 @@ main (void) return 0; } _ACEOF - if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_compile "$LINENO" then : - break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - CC="$CC -n32" + if test x"$ac_opt" = x"none needed" +then : + # GNU/Linux s390x and alpha need _FILE_OFFSET_BITS=64 for wide ino_t. + CC="$CC -DFTYPE=ino_t" if ac_fn_c_try_compile "$LINENO" then : - ac_cv_sys_largefile_CC=' -n32'; break + +else case e in #( + e) CC="$CC -D_FILE_OFFSET_BITS=64" + if ac_fn_c_try_compile "$LINENO" +then : + ac_opt='-D_FILE_OFFSET_BITS=64' +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if test ${ac_cv_sys_file_offset_bits+y} -then : - printf %s "(cached) " >&6 -else $as_nop - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_sys_file_offset_bits=no; break + ac_cv_sys_largefile_opts=$ac_opt + ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) -{ + test $ac_opt_found = no || break + done + CC="$ac_save_CC" - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_sys_file_offset_bits=64; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done + test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected" ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h -;; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_opts" >&5 +printf "%s\n" "$ac_cv_sys_largefile_opts" >&6; } + +ac_have_largefile=yes +case $ac_cv_sys_largefile_opts in #( + "none needed") : + ;; #( + "supported through gnulib") : + ;; #( + "support not detected") : + ac_have_largefile=no ;; #( + "-D_FILE_OFFSET_BITS=64") : + +printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h + ;; #( + "-D_LARGE_FILES=1") : + +printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h + ;; #( + "-n32") : + CC="$CC -n32" ;; #( + *) : + as_fn_error $? "internal error: bad value for \$ac_cv_sys_largefile_opts" "$LINENO" 5 ;; esac -rm -rf conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -printf %s "checking for _LARGE_FILES value needed for large files... " >&6; } -if test ${ac_cv_sys_large_files+y} + +if test "$enable_year2038" != no +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option for timestamps after 2038" >&5 +printf %s "checking for $CC option for timestamps after 2038... " >&6; } +if test ${ac_cv_sys_year2038_opts+y} then : printf %s "(cached) " >&6 -else $as_nop - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" +else case e in #( + e) ac_save_CPPFLAGS="$CPPFLAGS" + ac_opt_found=no + for ac_opt in "none needed" "-D_TIME_BITS=64" "-D__MINGW_USE_VC2005_COMPAT" "-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"; do + if test x"$ac_opt" != x"none needed" then : - ac_cv_sys_large_files=no; break + CPPFLAGS="$ac_save_CPPFLAGS $ac_opt" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#define _LARGE_FILES 1 -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; + + #include <time.h> + /* Check that time_t can represent 2**32 - 1 correctly. */ + #define LARGE_TIME_T \\ + ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) + int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 + && LARGE_TIME_T % 65537 == 0) + ? 1 : -1]; + int main (void) { @@ -17335,25 +17496,47 @@ main (void) _ACEOF if ac_fn_c_try_compile "$LINENO" then : - ac_cv_sys_large_files=1; break + ac_cv_sys_year2038_opts="$ac_opt" + ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done + test $ac_opt_found = no || break + done + CPPFLAGS="$ac_save_CPPFLAGS" + test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected" ;; +esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -printf "%s\n" "$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h -;; +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_year2038_opts" >&5 +printf "%s\n" "$ac_cv_sys_year2038_opts" >&6; } + +ac_have_year2038=yes +case $ac_cv_sys_year2038_opts in #( + "none needed") : + ;; #( + "support not detected") : + ac_have_year2038=no ;; #( + "-D_TIME_BITS=64") : + +printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h + ;; #( + "-D__MINGW_USE_VC2005_COMPAT") : + +printf "%s\n" "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h + ;; #( + "-U_USE_32_BIT_TIME_T"*) : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error $? "the 'time_t' type is currently forced to be 32-bit. It +will stop working after mid-January 2038. Remove +_USE_32BIT_TIME_T from the compiler flags. +See 'config.log' for more details" "$LINENO" 5; } ;; #( + *) : + as_fn_error $? "internal error: bad value for \$ac_cv_sys_year2038_opts" "$LINENO" 5 ;; esac -rm -rf conftest* - fi + fi +fi @@ -17363,8 +17546,8 @@ cache=_D_LARGEFILE_SOURCE_1 if eval test \${cv_prog_cc_flag_needed_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo ' #include <stdio.h> int test(void) { @@ -17390,7 +17573,8 @@ fi fi rm -f conftest conftest.c conftest.o - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then @@ -17434,8 +17618,8 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: crosscompile(yes)" >&5 printf "%s\n" "crosscompile(yes)" >&6; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17570,17 +17754,19 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "#define NONBLOCKING_IS_BROKEN 1" >>confdefs.h - + ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi fi @@ -17618,10 +17804,11 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "#define MKDIR_HAS_ONE_ARG 1" >>confdefs.h -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -17639,8 +17826,8 @@ if test c${cross_compiling} = cno; then if test "$cross_compiling" = yes then : eval "ac_cv_c_strptime_works=maybe" -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 600 @@ -17655,11 +17842,13 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : eval "ac_cv_c_strptime_works=yes" -else $as_nop - eval "ac_cv_c_strptime_works=no" +else case e in #( + e) eval "ac_cv_c_strptime_works=no" ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi else @@ -17680,13 +17869,14 @@ printf "%s\n" "#define STRPTIME_WORKS 1" >>confdefs.h fi -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strptime.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strptime.$ac_objext" ;; esac - + ;; +esac fi done @@ -17713,8 +17903,9 @@ fi if test ${enable_systemd+y} then : enableval=$enable_systemd; -else $as_nop - enable_systemd=no +else case e in #( + e) enable_systemd=no ;; +esac fi have_systemd=no @@ -17795,8 +17986,8 @@ See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. @@ -17806,7 +17997,7 @@ and SYSTEMD_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see <http://pkg-config.freedesktop.org/>. -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else SYSTEMD_CFLAGS=$pkg_cv_SYSTEMD_CFLAGS SYSTEMD_LIBS=$pkg_cv_SYSTEMD_LIBS @@ -17890,8 +18081,8 @@ See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. @@ -17901,7 +18092,7 @@ and SYSTEMD_DAEMON_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see <http://pkg-config.freedesktop.org/>. -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else SYSTEMD_DAEMON_CFLAGS=$pkg_cv_SYSTEMD_DAEMON_CFLAGS SYSTEMD_DAEMON_LIBS=$pkg_cv_SYSTEMD_DAEMON_LIBS @@ -17998,8 +18189,8 @@ esac printf "%s\n" "#define malloc rpl_malloc_unbound" >>confdefs.h -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H #include <stdlib.h> @@ -18029,15 +18220,17 @@ esac printf "%s\n" "#define malloc rpl_malloc_unbound" >>confdefs.h -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h - + ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi @@ -18082,10 +18275,11 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_WINDOWS_THREADS 1" >>confdefs.h -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -18101,12 +18295,286 @@ else if test ${with_pthreads+y} then : withval=$with_pthreads; -else $as_nop - withval="yes" +else case e in #( + e) withval="yes" ;; +esac fi ub_have_pthreads=no if test x_$withval != x_no; then + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test ${ac_cv_prog_CPP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else case e in #( + e) # Broken: fails on valid input. +continue ;; +esac +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else case e in #( + e) # Passes both tests. +ac_preproc_ok=: +break ;; +esac +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + break +fi + + done + ac_cv_prog_CPP=$CPP + ;; +esac +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else case e in #( + e) # Broken: fails on valid input. +continue ;; +esac +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else case e in #( + e) # Passes both tests. +ac_preproc_ok=: +break ;; +esac +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See 'config.log' for more details" "$LINENO" 5; } ;; +esac +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep -e" >&5 +printf %s "checking for egrep -e... " >&6; } +if test ${ac_cv_path_EGREP_TRADITIONAL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -z "$EGREP_TRADITIONAL"; then + ac_path_EGREP_TRADITIONAL_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue +# Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. + # Check for GNU $ac_path_EGREP_TRADITIONAL +case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( +*GNU*) + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; +#( +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" + "$ac_path_EGREP_TRADITIONAL" -E 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" + ac_path_EGREP_TRADITIONAL_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_TRADITIONAL_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then + : + fi +else + ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL +fi + + if test "$ac_cv_path_EGREP_TRADITIONAL" +then : + ac_cv_path_EGREP_TRADITIONAL="$ac_cv_path_EGREP_TRADITIONAL -E" +else case e in #( + e) if test -z "$EGREP_TRADITIONAL"; then + ac_path_EGREP_TRADITIONAL_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue +# Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. + # Check for GNU $ac_path_EGREP_TRADITIONAL +case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( +*GNU*) + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; +#( +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" + "$ac_path_EGREP_TRADITIONAL" 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" + ac_path_EGREP_TRADITIONAL_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_TRADITIONAL_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL +fi + ;; +esac +fi ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP_TRADITIONAL" >&5 +printf "%s\n" "$ac_cv_path_EGREP_TRADITIONAL" >&6; } + EGREP_TRADITIONAL=$ac_cv_path_EGREP_TRADITIONAL + @@ -18147,8 +18615,14 @@ printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char pthread_join (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_join (void); int main (void) { @@ -18242,7 +18716,7 @@ case $host_os in _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 + $EGREP_TRADITIONAL "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} @@ -18272,8 +18746,8 @@ printf %s "checking whether $CC is Clang... " >&6; } if test ${ax_cv_PTHREAD_CLANG+y} then : printf %s "(cached) " >&6 -else $as_nop - ax_cv_PTHREAD_CLANG=no +else case e in #( + e) ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18285,14 +18759,15 @@ else $as_nop _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 + $EGREP_TRADITIONAL "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 then : ax_cv_PTHREAD_CLANG=yes fi rm -rf conftest* fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; } @@ -18342,8 +18817,9 @@ esac if test "x$ax_pthread_check_macro" = "x--" then : ax_pthread_check_cond=0 -else $as_nop - ax_pthread_check_cond="!defined($ax_pthread_check_macro)" +else case e in #( + e) ax_pthread_check_cond="!defined($ax_pthread_check_macro)" ;; +esac fi @@ -18377,8 +18853,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ax_pthread_config+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ax_pthread_config"; then +else case e in #( + e) if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -18401,7 +18877,8 @@ done IFS=$as_save_IFS test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" -fi +fi ;; +esac fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then @@ -18534,8 +19011,8 @@ printf %s "checking whether Clang needs flag to prevent \"argument unused\" warn if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y} then : printf %s "(cached) " >&6 -else $as_nop - ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown +else case e in #( + e) ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one # (.c -> exe), because the warning occurs only in the second @@ -18581,7 +19058,8 @@ then : ax_pthread_try=no fi ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } @@ -18608,8 +19086,8 @@ printf %s "checking for joinable pthread attribute... " >&6; } if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y} then : printf %s "(cached) " >&6 -else $as_nop - ax_cv_PTHREAD_JOINABLE_ATTR=unknown +else case e in #( + e) ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18629,7 +19107,8 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } @@ -18649,14 +19128,15 @@ printf %s "checking whether more special flags are required for pthreads... " >& if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y} then : printf %s "(cached) " >&6 -else $as_nop - ax_cv_PTHREAD_SPECIAL_FLAGS=no +else case e in #( + e) ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" ;; esac - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } @@ -18672,8 +19152,8 @@ printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; } if test ${ax_cv_PTHREAD_PRIO_INHERIT+y} then : printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int @@ -18688,12 +19168,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_PTHREAD_PRIO_INHERIT=yes -else $as_nop - ax_cv_PTHREAD_PRIO_INHERIT=no +else case e in #( + e) ax_cv_PTHREAD_PRIO_INHERIT=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } @@ -18743,8 +19225,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PTHREAD_CC+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$PTHREAD_CC"; then +else case e in #( + e) if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -18766,7 +19248,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then @@ -18793,8 +19276,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PTHREAD_CXX+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$PTHREAD_CXX"; then +else case e in #( + e) if test -n "$PTHREAD_CXX"; then ac_cv_prog_PTHREAD_CXX="$PTHREAD_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -18816,7 +19299,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi PTHREAD_CXX=$ac_cv_prog_PTHREAD_CXX if test -n "$PTHREAD_CXX"; then @@ -18886,28 +19370,30 @@ fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5 printf %s "checking size of unsigned long... " >&6; } if test ${ac_cv_sizeof_unsigned_long+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_unsigned_long" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_unsigned_long" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned long) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_long=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5 printf "%s\n" "$ac_cv_sizeof_unsigned_long" >&6; } @@ -18919,28 +19405,30 @@ printf "%s\n" "#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long" >>confd # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of pthread_t" >&5 printf %s "checking size of pthread_t... " >&6; } if test ${ac_cv_sizeof_pthread_t+y} then : printf %s "(cached) " >&6 -else $as_nop - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pthread_t))" "ac_cv_sizeof_pthread_t" "$ac_includes_default" +else case e in #( + e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pthread_t))" "ac_cv_sizeof_pthread_t" "$ac_includes_default" then : -else $as_nop - if test "$ac_cv_type_pthread_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) if test "$ac_cv_type_pthread_t" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (pthread_t) -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_pthread_t=0 - fi + fi ;; +esac fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_t" >&5 printf "%s\n" "$ac_cv_sizeof_pthread_t" >&6; } @@ -19008,8 +19496,9 @@ fi if test ${with_solaris_threads+y} then : withval=$with_solaris_threads; -else $as_nop - withval="no" +else case e in #( + e) withval="no" ;; +esac fi ub_have_sol_threads=no @@ -19023,15 +19512,21 @@ printf %s "checking for library containing thr_create... " >&6; } if test ${ac_cv_search_thr_create+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char thr_create (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char thr_create (void); int main (void) { @@ -19062,11 +19557,13 @@ done if test ${ac_cv_search_thr_create+y} then : -else $as_nop - ac_cv_search_thr_create=no +else case e in #( + e) ac_cv_search_thr_create=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_thr_create" >&5 printf "%s\n" "$ac_cv_search_thr_create" >&6; } @@ -19087,8 +19584,8 @@ cache=`echo mt | sed 'y%.=/+-%___p_%'` if eval test \${cv_prog_cc_flag_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -mt -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" @@ -19096,7 +19593,8 @@ else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then @@ -19113,10 +19611,11 @@ fi ub_have_sol_threads=yes -else $as_nop - +else case e in #( + e) as_fn_error $? "no solaris threads found." "$LINENO" 5 - + ;; +esac fi fi @@ -19149,8 +19648,9 @@ printf "%s\n" "#define UB_SYSLOG_FACILITY ${UNBOUND_SYSLOG_FACILITY}" >>confdefs if test ${with_dynlibmodule+y} then : withval=$with_dynlibmodule; -else $as_nop - withval="no" +else case e in #( + e) withval="no" ;; +esac fi @@ -19173,15 +19673,21 @@ printf %s "checking for library containing dlopen... " >&6; } if test ${ac_cv_search_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -19212,11 +19718,13 @@ done if test ${ac_cv_search_dlopen+y} then : -else $as_nop - ac_cv_search_dlopen=no +else case e in #( + e) ac_cv_search_dlopen=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 printf "%s\n" "$ac_cv_search_dlopen" >&6; } @@ -19240,8 +19748,9 @@ fi if test ${with_pyunbound+y} then : withval=$with_pyunbound; -else $as_nop - withval="no" +else case e in #( + e) withval="no" ;; +esac fi @@ -19258,8 +19767,9 @@ fi if test ${with_pythonmodule+y} then : withval=$with_pythonmodule; -else $as_nop - withval="no" +else case e in #( + e) withval="no" ;; +esac fi @@ -19287,8 +19797,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PYTHON in +else case e in #( + e) case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; @@ -19313,6 +19823,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi PYTHON=$ac_cv_path_PYTHON @@ -19490,8 +20001,9 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : pythonexists=yes -else $as_nop - pythonexists=no +else case e in #( + e) pythonexists=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -19601,8 +20113,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_SWIG+y} then : printf %s "(cached) " >&6 -else $as_nop - case $SWIG in +else case e in #( + e) case $SWIG in [\\/]* | ?:[\\/]*) ac_cv_path_SWIG="$SWIG" # Let the user override the test with a path. ;; @@ -19627,6 +20139,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi SWIG=$ac_cv_path_SWIG @@ -19727,8 +20240,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_SWIG+y} then : printf %s "(cached) " >&6 -else $as_nop - case $SWIG in +else case e in #( + e) case $SWIG in [\\/]* | ?:[\\/]*) ac_cv_path_SWIG="$SWIG" # Let the user override the test with a path. ;; @@ -19753,6 +20266,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi SWIG=$ac_cv_path_SWIG @@ -19914,15 +20428,17 @@ ax_date_fmt="%Y%m%d" if test x"$SOURCE_DATE_EPOCH" = x then : CONFIG_DATE=`date "+$ax_date_fmt"` -else $as_nop - ax_build_date=`date -u -d "@$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null \ +else case e in #( + e) ax_build_date=`date -u -d "@$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null \ || date -u -r "$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null` if test x"$ax_build_date" = x then : as_fn_error $? "malformed SOURCE_DATE_EPOCH" "$LINENO" 5 -else $as_nop - CONFIG_DATE=$ax_build_date -fi +else case e in #( + e) CONFIG_DATE=$ax_build_date ;; +esac +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CONFIG_DATE" >&5 printf "%s\n" "$CONFIG_DATE" >&6; } @@ -20017,10 +20533,11 @@ if test ${with_ssl+y} then : withval=$with_ssl; -else $as_nop - +else case e in #( + e) withval="yes" - + ;; +esac fi if test x_$withval = x_no; then @@ -20116,8 +20633,8 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } # check if -lwsock32 or -lgdi32 are needed. @@ -20150,8 +20667,8 @@ printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } LIBS="$BAKLIBS" @@ -20184,8 +20701,8 @@ printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } LIBS="$BAKLIBS" @@ -20218,8 +20735,8 @@ printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } LIBS="$BAKLIBS" @@ -20252,8 +20769,8 @@ printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } LIBS="$BAKLIBS" @@ -20285,32 +20802,38 @@ printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "OpenSSL found in $ssldir, but version 0.9.7 or higher is required" "$LINENO" 5 - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -20355,8 +20878,14 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char SSL_CTX_new (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char SSL_CTX_new (void); int main (void) { @@ -20372,8 +20901,8 @@ then : printf "%s\n" "no" >&6; } LIBS="$BAKLIBS" -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } LIBS="$BAKLIBS" @@ -20382,15 +20911,21 @@ printf %s "checking for library containing dlopen... " >&6; } if test ${ac_cv_search_dlopen+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (void); int main (void) { @@ -20421,11 +20956,13 @@ done if test ${ac_cv_search_dlopen+y} then : -else $as_nop - ac_cv_search_dlopen=no +else case e in #( + e) ac_cv_search_dlopen=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 printf "%s\n" "$ac_cv_search_dlopen" >&6; } @@ -20436,7 +20973,8 @@ then : fi - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -20471,13 +21009,14 @@ then : printf "%s\n" "no" >&6; } LIBS="$BAKLIBS" -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } LIBS="$BAKLIBS" LIBS="$LIBS -lcrypt32" - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -20497,8 +21036,8 @@ printf %s "checking for $CC options needed to detect all undeclared functions... if test ${ac_cv_c_undeclared_builtin_options+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_save_CFLAGS=$CFLAGS +else case e in #( + e) ac_save_CFLAGS=$CFLAGS ac_cv_c_undeclared_builtin_options='cannot detect' for ac_arg in '' -fno-builtin; do CFLAGS="$ac_save_CFLAGS $ac_arg" @@ -20517,8 +21056,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : -else $as_nop - # This test program should compile successfully. +else case e in #( + e) # This test program should compile successfully. # No library function is consistently available on # freestanding implementations, so test against a dummy # declaration. Include always-available headers on the @@ -20546,26 +21085,29 @@ then : if test x"$ac_arg" = x then : ac_cv_c_undeclared_builtin_options='none needed' -else $as_nop - ac_cv_c_undeclared_builtin_options=$ac_arg +else case e in #( + e) ac_cv_c_undeclared_builtin_options=$ac_arg ;; +esac fi break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done CFLAGS=$ac_save_CFLAGS - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } case $ac_cv_c_undeclared_builtin_options in #( 'cannot detect') : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot make $CC report undeclared builtins -See \`config.log' for more details" "$LINENO" 5; } ;; #( +See 'config.log' for more details" "$LINENO" 5; } ;; #( 'none needed') : ac_c_undeclared_builtin_options='' ;; #( *) : @@ -20576,32 +21118,36 @@ ac_fn_check_decl "$LINENO" "strlcpy" "ac_cv_have_decl_strlcpy" "$ac_includes_def if test "x$ac_cv_have_decl_strlcpy" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_STRLCPY $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "strlcat" "ac_cv_have_decl_strlcat" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strlcat" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_STRLCAT $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "arc4random" "ac_cv_have_decl_arc4random" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_arc4random" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_ARC4RANDOM $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "arc4random_uniform" "ac_cv_have_decl_arc4random_uniform" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_arc4random_uniform" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_ARC4RANDOM_UNIFORM $ac_have_decl" >>confdefs.h @@ -20920,8 +21466,9 @@ $ac_includes_default if test "x$ac_cv_have_decl_SSL_COMP_get_compression_methods" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "sk_SSL_COMP_pop_free" "ac_cv_have_decl_sk_SSL_COMP_pop_free" " @@ -20948,8 +21495,9 @@ $ac_includes_default if test "x$ac_cv_have_decl_sk_SSL_COMP_pop_free" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_SK_SSL_COMP_POP_FREE $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "SSL_CTX_set_ecdh_auto" "ac_cv_have_decl_SSL_CTX_set_ecdh_auto" " @@ -20976,8 +21524,9 @@ $ac_includes_default if test "x$ac_cv_have_decl_SSL_CTX_set_ecdh_auto" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_SSL_CTX_SET_ECDH_AUTO $ac_have_decl" >>confdefs.h @@ -21027,14 +21576,15 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: int" >&5 printf "%s\n" "int" >&6; } -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: void" >&5 printf "%s\n" "void" >&6; } printf "%s\n" "#define HMAC_INIT_EX_RETURNS_VOID 1" >>confdefs.h - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -21065,21 +21615,27 @@ fi if test "x$ac_cv_header_bsd_string_h" = xyes -a "x$ac_cv_header_bsd_stdlib_h" = xyes; then for func in strlcpy strlcat arc4random arc4random_uniform reallocarray; do - as_ac_Search=`printf "%s\n" "ac_cv_search_$func" | $as_tr_sh` + as_ac_Search=`printf "%s\n" "ac_cv_search_$func" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing $func" >&5 printf %s "checking for library containing $func... " >&6; } if eval test \${$as_ac_Search+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char $func (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char $func (void); int main (void) { @@ -21110,11 +21666,13 @@ done if eval test \${$as_ac_Search+y} then : -else $as_nop - eval "$as_ac_Search=no" +else case e in #( + e) eval "$as_ac_Search=no" ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi eval ac_res=\$$as_ac_Search { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 @@ -21209,16 +21767,18 @@ case "$enable_gost" in if test "x$ac_cv_func_EVP_PKEY_set_type_str" = xyes then : : -else $as_nop - as_fn_error $? "OpenSSL 1.0.0 is needed for GOST support" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "OpenSSL 1.0.0 is needed for GOST support" "$LINENO" 5 ;; +esac fi ac_fn_c_check_func "$LINENO" "EC_KEY_new" "ac_cv_func_EC_KEY_new" if test "x$ac_cv_func_EC_KEY_new" = xyes then : -else $as_nop - as_fn_error $? "OpenSSL does not support ECC, needed for GOST support" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "OpenSSL does not support ECC, needed for GOST support" "$LINENO" 5 ;; +esac fi @@ -21232,8 +21792,8 @@ fi if test "$cross_compiling" = yes then : eval "ac_cv_c_gost_works=maybe" -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> @@ -21321,11 +21881,13 @@ _ACEOF if ac_fn_c_try_run "$LINENO" then : eval "ac_cv_c_gost_works=yes" -else $as_nop - eval "ac_cv_c_gost_works=no" +else case e in #( + e) eval "ac_cv_c_gost_works=no" ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi CFLAGS="$BAKCFLAGS" @@ -21371,26 +21933,29 @@ then : fi -else $as_nop - +else case e in #( + e) # without EVP_PKEY_fromdata, older openssl, check for support ac_fn_c_check_func "$LINENO" "ECDSA_sign" "ac_cv_func_ECDSA_sign" if test "x$ac_cv_func_ECDSA_sign" = xyes then : -else $as_nop - as_fn_error $? "OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 ;; +esac fi ac_fn_c_check_func "$LINENO" "SHA384_Init" "ac_cv_func_SHA384_Init" if test "x$ac_cv_func_SHA384_Init" = xyes then : -else $as_nop - as_fn_error $? "OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 ;; +esac fi - + ;; +esac fi ac_fn_check_decl "$LINENO" "NID_X9_62_prime256v1" "ac_cv_have_decl_NID_X9_62_prime256v1" "$ac_includes_default @@ -21400,15 +21965,17 @@ fi if test "x$ac_cv_have_decl_NID_X9_62_prime256v1" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_NID_X9_62_PRIME256V1 $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : -else $as_nop - as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 ;; +esac fi ac_fn_check_decl "$LINENO" "NID_secp384r1" "ac_cv_have_decl_NID_secp384r1" "$ac_includes_default #include <openssl/evp.h> @@ -21417,15 +21984,17 @@ ac_fn_check_decl "$LINENO" "NID_secp384r1" "ac_cv_have_decl_NID_secp384r1" "$ac_ if test "x$ac_cv_have_decl_NID_secp384r1" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_NID_SECP384R1 $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : -else $as_nop - as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 ;; +esac fi # see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency) @@ -21471,7 +22040,7 @@ case "$enable_dsa" in if test "x$ac_cv_func_DSA_SIG_new" = xyes then : - as_ac_Type=`printf "%s\n" "ac_cv_type_DSA_SIG*" | $as_tr_sh` + as_ac_Type=`printf "%s\n" "ac_cv_type_DSA_SIG*" | sed "$as_sed_sh"` ac_fn_c_check_type "$LINENO" "DSA_SIG*" "$as_ac_Type" " $ac_includes_default #ifdef HAVE_OPENSSL_ERR_H @@ -21498,15 +22067,17 @@ then : printf "%s\n" "#define USE_DSA 1" >>confdefs.h -else $as_nop - if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5 - fi +else case e in #( + e) if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5 + fi ;; +esac fi -else $as_nop - if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5 - fi +else case e in #( + e) if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5 + fi ;; +esac fi else @@ -21553,8 +22124,9 @@ case "$enable_ed25519" in if test "x$ac_cv_have_decl_NID_ED25519" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_NID_ED25519 $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 @@ -21562,9 +22134,10 @@ then : use_ed25519="yes" -else $as_nop - if test "x$enable_ed25519" = "xyes"; then as_fn_error $? "OpenSSL does not support ED25519 and you used --enable-ed25519." "$LINENO" 5 - fi +else case e in #( + e) if test "x$enable_ed25519" = "xyes"; then as_fn_error $? "OpenSSL does not support ED25519 and you used --enable-ed25519." "$LINENO" 5 + fi ;; +esac fi fi @@ -21608,8 +22181,9 @@ case "$enable_ed448" in if test "x$ac_cv_have_decl_NID_ED448" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_NID_ED448 $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 @@ -21617,9 +22191,10 @@ then : use_ed448="yes" -else $as_nop - if test "x$enable_ed448" = "xyes"; then as_fn_error $? "OpenSSL does not support ED448 and you used --enable-ed448." "$LINENO" 5 - fi +else case e in #( + e) if test "x$enable_ed448" = "xyes"; then as_fn_error $? "OpenSSL does not support ED448 and you used --enable-ed448." "$LINENO" 5 + fi ;; +esac fi fi @@ -21665,8 +22240,9 @@ if test "x$ac_cv_have_decl_MSG_FASTOPEN" = xyes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&5 printf "%s\n" "$as_me: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&2;} -else $as_nop - as_fn_error $? "TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client" "$LINENO" 5 ;; +esac fi printf "%s\n" "#define USE_MSG_FASTOPEN 1" >>confdefs.h @@ -21680,8 +22256,9 @@ if test "x$ac_cv_have_decl_CONNECT_RESUME_ON_READ_WRITE" = xyes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&5 printf "%s\n" "$as_me: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&2;} -else $as_nop - as_fn_error $? "TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client" "$LINENO" 5 ;; +esac fi printf "%s\n" "#define USE_OSX_MSG_FASTOPEN 1" >>confdefs.h @@ -21709,8 +22286,9 @@ if test "x$ac_cv_have_decl_TCP_FASTOPEN" = xyes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support server mode TFO" >&5 printf "%s\n" "$as_me: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support server mode TFO" >&2;} -else $as_nop - as_fn_error $? "TCP Fast Open is not available for server mode: please rerun without --enable-tfo-server" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "TCP Fast Open is not available for server mode: please rerun without --enable-tfo-server" "$LINENO" 5 ;; +esac fi printf "%s\n" "#define USE_TCP_FASTOPEN 1" >>confdefs.h @@ -21726,8 +22304,9 @@ esac if test ${with_libevent+y} then : withval=$with_libevent; -else $as_nop - with_libevent="no" +else case e in #( + e) with_libevent="no" ;; +esac fi if test "x_$with_libevent" != x_no; then @@ -21806,15 +22385,21 @@ printf %s "checking for library containing clock_gettime... " >&6; } if test ${ac_cv_search_clock_gettime+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char clock_gettime (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (void); int main (void) { @@ -21845,11 +22430,13 @@ done if test ${ac_cv_search_clock_gettime+y} then : -else $as_nop - ac_cv_search_clock_gettime=no +else case e in #( + e) ac_cv_search_clock_gettime=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 printf "%s\n" "$ac_cv_search_clock_gettime" >&6; } @@ -21882,15 +22469,21 @@ printf %s "checking for library containing event_set... " >&6; } if test ${ac_cv_search_event_set+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char event_set (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char event_set (void); int main (void) { @@ -21921,11 +22514,13 @@ done if test ${ac_cv_search_event_set+y} then : -else $as_nop - ac_cv_search_event_set=no +else case e in #( + e) ac_cv_search_event_set=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_event_set" >&5 printf "%s\n" "$ac_cv_search_event_set" >&6; } @@ -21937,22 +22532,28 @@ then : fi -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing event_set" >&5 printf %s "checking for library containing event_set... " >&6; } if test ${ac_cv_search_event_set+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char event_set (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char event_set (void); int main (void) { @@ -21983,11 +22584,13 @@ done if test ${ac_cv_search_event_set+y} then : -else $as_nop - ac_cv_search_event_set=no +else case e in #( + e) ac_cv_search_event_set=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_event_set" >&5 printf "%s\n" "$ac_cv_search_event_set" >&6; } @@ -21998,7 +22601,8 @@ then : fi - + ;; +esac fi ac_fn_c_check_func "$LINENO" "event_base_free" "ac_cv_func_event_base_free" if test "x$ac_cv_func_event_base_free" = xyes @@ -22060,8 +22664,9 @@ fi if test "x$ac_cv_have_decl_evsignal_assign" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_EVSIGNAL_ASSIGN $ac_have_decl" >>confdefs.h @@ -22082,8 +22687,9 @@ fi if test ${with_libexpat+y} then : withval=$with_libexpat; -else $as_nop - withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" +else case e in #( + e) withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libexpat" >&5 @@ -22119,8 +22725,9 @@ ac_fn_check_decl "$LINENO" "XML_StopParser" "ac_cv_have_decl_XML_StopParser" "$a if test "x$ac_cv_have_decl_XML_StopParser" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_XML_STOPPARSER $ac_have_decl" >>confdefs.h @@ -22131,8 +22738,9 @@ printf "%s\n" "#define HAVE_DECL_XML_STOPPARSER $ac_have_decl" >>confdefs.h if test ${with_libhiredis+y} then : withval=$with_libhiredis; -else $as_nop - withval="no" +else case e in #( + e) withval="no" ;; +esac fi found_libhiredis="no" @@ -22176,8 +22784,9 @@ fi if test "x$ac_cv_have_decl_redisConnect" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_REDISCONNECT $ac_have_decl" >>confdefs.h @@ -22189,8 +22798,9 @@ fi if test ${with_libnghttp2+y} then : withval=$with_libnghttp2; -else $as_nop - withval="no" +else case e in #( + e) withval="no" ;; +esac fi found_libnghttp2="no" @@ -22234,8 +22844,9 @@ fi if test "x$ac_cv_have_decl_nghttp2_session_server_new" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_NGHTTP2_SESSION_SERVER_NEW $ac_have_decl" >>confdefs.h @@ -22247,8 +22858,9 @@ fi if test ${with_libngtcp2+y} then : withval=$with_libngtcp2; -else $as_nop - withval="no" +else case e in #( + e) withval="no" ;; +esac fi found_libngtcp2="no" @@ -22306,8 +22918,9 @@ fi if test "x$ac_cv_have_decl_ngtcp2_conn_server_new" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_NGTCP2_CONN_SERVER_NEW $ac_have_decl" >>confdefs.h @@ -22318,8 +22931,9 @@ printf "%s\n" "#define HAVE_DECL_NGTCP2_CONN_SERVER_NEW $ac_have_decl" >>confdef if test "x$ac_cv_have_decl_ngtcp2_crypto_encrypt_cb" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_NGTCP2_CRYPTO_ENCRYPT_CB $ac_have_decl" >>confdefs.h @@ -22328,16 +22942,22 @@ printf %s "checking for ngtcp2_crypto_encrypt_cb in -lngtcp2_crypto_openssl... " if test ${ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lngtcp2_crypto_openssl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char ngtcp2_crypto_encrypt_cb (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char ngtcp2_crypto_encrypt_cb (void); int main (void) { @@ -22349,12 +22969,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb=yes -else $as_nop - ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb=no +else case e in #( + e) ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb" >&5 printf "%s\n" "$ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb" >&6; } @@ -22368,16 +22990,22 @@ printf %s "checking for ngtcp2_crypto_encrypt_cb in -lngtcp2_crypto_quictls... " if test ${ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lngtcp2_crypto_quictls $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char ngtcp2_crypto_encrypt_cb (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char ngtcp2_crypto_encrypt_cb (void); int main (void) { @@ -22389,12 +23017,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb=yes -else $as_nop - ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb=no +else case e in #( + e) ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb" >&5 printf "%s\n" "$ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb" >&6; } @@ -22478,8 +23108,9 @@ if test "x$ac_cv_func_SSL_is_quic" = xyes then : printf "%s\n" "#define HAVE_SSL_IS_QUIC 1" >>confdefs.h -else $as_nop - as_fn_error $? "No QUIC support detected in OpenSSL. Need OpenSSL version with QUIC support to enable DNS over QUIC with libngtcp2." "$LINENO" 5 +else case e in #( + e) as_fn_error $? "No QUIC support detected in OpenSSL. Need OpenSSL version with QUIC support to enable DNS over QUIC with libngtcp2." "$LINENO" 5 ;; +esac fi done @@ -22578,11 +23209,12 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_NGTCP2_CONN_SHUTDOWN_STREAM4 1" >>confdefs.h -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -22612,16 +23244,22 @@ printf %s "checking for compress in -lz... " >&6; } if test ${ac_cv_lib_z_compress+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char compress (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char compress (void); int main (void) { @@ -22633,12 +23271,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_z_compress=yes -else $as_nop - ac_cv_lib_z_compress=no +else case e in #( + e) ac_cv_lib_z_compress=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5 printf "%s\n" "$ac_cv_lib_z_compress" >&6; } @@ -22676,16 +23316,22 @@ printf %s "checking for compress in -lz... " >&6; } if test ${ac_cv_lib_z_compress+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char compress (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char compress (void); int main (void) { @@ -22697,12 +23343,14 @@ _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_z_compress=yes -else $as_nop - ac_cv_lib_z_compress=no +else case e in #( + e) ac_cv_lib_z_compress=no ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5 printf "%s\n" "$ac_cv_lib_z_compress" >&6; } @@ -22771,8 +23419,8 @@ printf "%s\n" "#define USE_WINSOCK 1" >>confdefs.h fi fi -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_WS2TCPIP_H @@ -22799,8 +23447,8 @@ printf "%s\n" "#define USE_WINSOCK 1" >>confdefs.h USE_WINSOCK="1" -else $as_nop - ORIGLIBS="$LIBS" +else case e in #( + e) ORIGLIBS="$LIBS" LIBS="$LIBS -lws2_32" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -22829,19 +23477,22 @@ printf "%s\n" "#define USE_WINSOCK 1" >>confdefs.h USE_WINSOCK="1" -else $as_nop - +else case e in #( + e) ac_cv_func_getaddrinfo="no" LIBS="$ORIGLIBS" - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -22876,8 +23527,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$WINDRES"; then +else case e in #( + e) if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -22899,7 +23550,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then @@ -22921,8 +23573,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_WINDRES"; then +else case e in #( + e) if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -22944,7 +23596,8 @@ done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then @@ -23034,9 +23687,10 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_IOCTLSOCKET 1" >>confdefs.h -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -23059,8 +23713,8 @@ cache=`echo daemon | sed 'y%.=/+-%___p_%'` if eval test \${cv_cc_deprecated_$cache+y} then : printf %s "(cached) " >&6 -else $as_nop - +else case e in #( + e) echo ' #include <stdlib.h> #include <unistd.h> @@ -23072,7 +23726,8 @@ else eval "cv_cc_deprecated_$cache=yes" fi rm -f conftest conftest.o conftest.c - + ;; +esac fi if eval "test \"`echo '$cv_cc_deprecated_'$cache`\" = yes"; then @@ -23179,9 +23834,10 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_HTOBE64 1" >>confdefs.h -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -23214,9 +23870,10 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_BE64TOH 1" >>confdefs.h -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -23226,15 +23883,21 @@ printf %s "checking for library containing setusercontext... " >&6; } if test ${ac_cv_search_setusercontext+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char setusercontext (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char setusercontext (void); int main (void) { @@ -23265,11 +23928,13 @@ done if test ${ac_cv_search_setusercontext+y} then : -else $as_nop - ac_cv_search_setusercontext=no +else case e in #( + e) ac_cv_search_setusercontext=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setusercontext" >&5 printf "%s\n" "$ac_cv_search_setusercontext" >&6; } @@ -23493,14 +24158,15 @@ if test "x$ac_cv_func_setresuid" = xyes then : printf "%s\n" "#define HAVE_SETRESUID 1" >>confdefs.h -else $as_nop - ac_fn_c_check_func "$LINENO" "setreuid" "ac_cv_func_setreuid" +else case e in #( + e) ac_fn_c_check_func "$LINENO" "setreuid" "ac_cv_func_setreuid" if test "x$ac_cv_func_setreuid" = xyes then : printf "%s\n" "#define HAVE_SETREUID 1" >>confdefs.h fi - + ;; +esac fi done @@ -23512,14 +24178,15 @@ if test "x$ac_cv_func_setresgid" = xyes then : printf "%s\n" "#define HAVE_SETRESGID 1" >>confdefs.h -else $as_nop - ac_fn_c_check_func "$LINENO" "setregid" "ac_cv_func_setregid" +else case e in #( + e) ac_fn_c_check_func "$LINENO" "setregid" "ac_cv_func_setregid" if test "x$ac_cv_func_setregid" = xyes then : printf "%s\n" "#define HAVE_SETREGID 1" >>confdefs.h fi - + ;; +esac fi done @@ -23563,11 +24230,12 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_LINK_ATOMIC_STORE 1" >>confdefs.h -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -23598,8 +24266,9 @@ $ac_includes_default if test "x$ac_cv_have_decl_inet_pton" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_INET_PTON $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "inet_ntop" "ac_cv_have_decl_inet_ntop" " @@ -23628,8 +24297,9 @@ $ac_includes_default if test "x$ac_cv_have_decl_inet_ntop" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_INET_NTOP $ac_have_decl" >>confdefs.h @@ -23638,13 +24308,14 @@ if test "x$ac_cv_func_inet_aton" = xyes then : printf "%s\n" "#define HAVE_INET_ATON 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" inet_aton.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS inet_aton.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" @@ -23652,13 +24323,14 @@ if test "x$ac_cv_func_inet_pton" = xyes then : printf "%s\n" "#define HAVE_INET_PTON 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" inet_pton.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS inet_pton.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "inet_ntop" "ac_cv_func_inet_ntop" @@ -23666,13 +24338,14 @@ if test "x$ac_cv_func_inet_ntop" = xyes then : printf "%s\n" "#define HAVE_INET_NTOP 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" inet_ntop.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS inet_ntop.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" @@ -23680,13 +24353,14 @@ if test "x$ac_cv_func_snprintf" = xyes then : printf "%s\n" "#define HAVE_SNPRINTF 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" snprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS snprintf.$ac_objext" ;; esac - + ;; +esac fi # test if snprintf return the proper length @@ -23698,8 +24372,8 @@ printf %s "checking for correct snprintf return value... " >&6; } then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: maybe" >&5 printf "%s\n" "maybe" >&6; } -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default @@ -23710,8 +24384,8 @@ if ac_fn_c_try_run "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } @@ -23723,10 +24397,12 @@ printf "%s\n" "#define SNPRINTF_RET_BROKEN /**/" >>confdefs.h ;; esac - + ;; +esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi fi @@ -23736,13 +24412,14 @@ if test "x$ac_cv_func_strlcat" = xyes then : printf "%s\n" "#define HAVE_STRLCAT 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strlcat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strlcat.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy" @@ -23750,13 +24427,14 @@ if test "x$ac_cv_func_strlcpy" = xyes then : printf "%s\n" "#define HAVE_STRLCPY 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strlcpy.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strlcpy.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove" @@ -23764,13 +24442,14 @@ if test "x$ac_cv_func_memmove" = xyes then : printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" memmove.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memmove.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r" @@ -23778,13 +24457,14 @@ if test "x$ac_cv_func_gmtime_r" = xyes then : printf "%s\n" "#define HAVE_GMTIME_R 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" gmtime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS gmtime_r.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "isblank" "ac_cv_func_isblank" @@ -23792,13 +24472,14 @@ if test "x$ac_cv_func_isblank" = xyes then : printf "%s\n" "#define HAVE_ISBLANK 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" isblank.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS isblank.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero" @@ -23806,13 +24487,14 @@ if test "x$ac_cv_func_explicit_bzero" = xyes then : printf "%s\n" "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" explicit_bzero.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS explicit_bzero.$ac_objext" ;; esac - + ;; +esac fi LIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS" @@ -23842,8 +24524,8 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_REALLOCARRAY 1" >>confdefs.h -else $as_nop - +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } case " $LIBOBJS " in @@ -23852,7 +24534,8 @@ printf "%s\n" "no" >&6; } ;; esac - + ;; +esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext @@ -23860,8 +24543,9 @@ ac_fn_check_decl "$LINENO" "reallocarray" "ac_cv_have_decl_reallocarray" "$ac_in if test "x$ac_cv_have_decl_reallocarray" = xyes then : ac_have_decl=1 -else $as_nop - ac_have_decl=0 +else case e in #( + e) ac_have_decl=0 ;; +esac fi printf "%s\n" "#define HAVE_DECL_REALLOCARRAY $ac_have_decl" >>confdefs.h @@ -23871,13 +24555,14 @@ if test "x$ac_cv_func_arc4random" = xyes then : printf "%s\n" "#define HAVE_ARC4RANDOM 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" arc4random.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS arc4random.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "arc4random_uniform" "ac_cv_func_arc4random_uniform" @@ -23885,13 +24570,14 @@ if test "x$ac_cv_func_arc4random_uniform" = xyes then : printf "%s\n" "#define HAVE_ARC4RANDOM_UNIFORM 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" arc4random_uniform.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS arc4random_uniform.$ac_objext" ;; esac - + ;; +esac fi if test "$ac_cv_func_arc4random" = "no"; then @@ -23909,8 +24595,8 @@ if test "x$ac_cv_func_getentropy" = xyes then : printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h -else $as_nop - +else case e in #( + e) if test "$USE_WINSOCK" = 1; then case " $LIBOBJS " in *" getentropy_win.$ac_objext "* ) ;; @@ -23943,8 +24629,8 @@ if test "x$ac_cv_header_sys_sha2_h" = xyes then : printf "%s\n" "#define HAVE_SYS_SHA2_H 1" >>confdefs.h -else $as_nop - +else case e in #( + e) for ac_func in SHA512_Update do : @@ -23953,19 +24639,21 @@ if test "x$ac_cv_func_SHA512_Update" = xyes then : printf "%s\n" "#define HAVE_SHA512_UPDATE 1" >>confdefs.h -else $as_nop - +else case e in #( + e) case " $LIBOBJS " in *" sha512.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS sha512.$ac_objext" ;; esac - + ;; +esac fi done - + ;; +esac fi done @@ -23978,15 +24666,21 @@ printf %s "checking for library containing clock_gettime... " >&6; } if test ${ac_cv_search_clock_gettime+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char clock_gettime (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (void); int main (void) { @@ -24017,11 +24711,13 @@ done if test ${ac_cv_search_clock_gettime+y} then : -else $as_nop - ac_cv_search_clock_gettime=no +else case e in #( + e) ac_cv_search_clock_gettime=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 printf "%s\n" "$ac_cv_search_clock_gettime" >&6; } @@ -24056,8 +24752,8 @@ if test "x$ac_cv_func_SHA512_Update" = xyes then : printf "%s\n" "#define HAVE_SHA512_UPDATE 1" >>confdefs.h -else $as_nop - +else case e in #( + e) printf "%s\n" "#define COMPAT_SHA512 1" >>confdefs.h @@ -24067,7 +24763,8 @@ printf "%s\n" "#define COMPAT_SHA512 1" >>confdefs.h ;; esac - + ;; +esac fi done @@ -24091,15 +24788,21 @@ printf %s "checking for library containing clock_gettime... " >&6; } if test ${ac_cv_search_clock_gettime+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char clock_gettime (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (void); int main (void) { @@ -24130,11 +24833,13 @@ done if test ${ac_cv_search_clock_gettime+y} then : -else $as_nop - ac_cv_search_clock_gettime=no +else case e in #( + e) ac_cv_search_clock_gettime=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 printf "%s\n" "$ac_cv_search_clock_gettime" >&6; } @@ -24148,7 +24853,8 @@ fi ;; esac fi - + ;; +esac fi done @@ -24161,13 +24867,14 @@ if test "x$ac_cv_func_ctime_r" = xyes then : printf "%s\n" "#define HAVE_CTIME_R 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" ctime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS ctime_r.$ac_objext" ;; esac - + ;; +esac fi ac_fn_c_check_func "$LINENO" "strsep" "ac_cv_func_strsep" @@ -24175,13 +24882,14 @@ if test "x$ac_cv_func_strsep" = xyes then : printf "%s\n" "#define HAVE_STRSEP 1" >>confdefs.h -else $as_nop - case " $LIBOBJS " in +else case e in #( + e) case " $LIBOBJS " in *" strsep.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strsep.$ac_objext" ;; esac - + ;; +esac fi @@ -24232,8 +24940,9 @@ fi if test ${enable_dnstap+y} then : enableval=$enable_dnstap; opt_dnstap=$enableval -else $as_nop - opt_dnstap=no +else case e in #( + e) opt_dnstap=no ;; +esac fi @@ -24242,8 +24951,9 @@ fi if test ${with_dnstap_socket_path+y} then : withval=$with_dnstap_socket_path; opt_dnstap_socket_path=$withval -else $as_nop - opt_dnstap_socket_path="$UNBOUND_RUN_DIR/dnstap.sock" +else case e in #( + e) opt_dnstap_socket_path="$UNBOUND_RUN_DIR/dnstap.sock" ;; +esac fi @@ -24255,8 +24965,8 @@ printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PROTOC_C+y} then : printf %s "(cached) " >&6 -else $as_nop - case $PROTOC_C in +else case e in #( + e) case $PROTOC_C in [\\/]* | ?:[\\/]*) ac_cv_path_PROTOC_C="$PROTOC_C" # Let the user override the test with a path. ;; @@ -24281,6 +24991,7 @@ done IFS=$as_save_IFS ;; +esac ;; esac fi PROTOC_C=$ac_cv_path_PROTOC_C @@ -24309,8 +25020,8 @@ then : fi LDFLAGS="$LDFLAGS -L$withval/lib" -else $as_nop - +else case e in #( + e) if test -n "$PKG_CONFIG"; then pkg_failed=no @@ -24426,7 +25137,8 @@ fi fi fi - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing protobuf_c_message_pack" >&5 @@ -24434,15 +25146,21 @@ printf %s "checking for library containing protobuf_c_message_pack... " >&6; } if test ${ac_cv_search_protobuf_c_message_pack+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char protobuf_c_message_pack (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char protobuf_c_message_pack (void); int main (void) { @@ -24473,11 +25191,13 @@ done if test ${ac_cv_search_protobuf_c_message_pack+y} then : -else $as_nop - ac_cv_search_protobuf_c_message_pack=no +else case e in #( + e) ac_cv_search_protobuf_c_message_pack=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_protobuf_c_message_pack" >&5 printf "%s\n" "$ac_cv_search_protobuf_c_message_pack" >&6; } @@ -24486,8 +25206,9 @@ if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" -else $as_nop - as_fn_error $? "The protobuf-c library was not found. Please install the development libraries for protobuf-c!" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "The protobuf-c library was not found. Please install the development libraries for protobuf-c!" "$LINENO" 5 ;; +esac fi @@ -24527,8 +25248,9 @@ printf "%s\n" "#define DNSTAP_SOCKET_PATH \"$hdr_dnstap_socket_path\"" >>confdef if test ${enable_dnscrypt+y} then : enableval=$enable_dnscrypt; opt_dnscrypt=$enableval -else $as_nop - opt_dnscrypt=no +else case e in #( + e) opt_dnscrypt=no ;; +esac fi @@ -24548,15 +25270,21 @@ printf %s "checking for library containing sodium_init... " >&6; } if test ${ac_cv_search_sodium_init+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char sodium_init (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char sodium_init (void); int main (void) { @@ -24587,11 +25315,13 @@ done if test ${ac_cv_search_sodium_init+y} then : -else $as_nop - ac_cv_search_sodium_init=no +else case e in #( + e) ac_cv_search_sodium_init=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sodium_init" >&5 printf "%s\n" "$ac_cv_search_sodium_init" >&6; } @@ -24600,8 +25330,9 @@ if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" -else $as_nop - as_fn_error $? "The sodium library was not found. Please install sodium!" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "The sodium library was not found. Please install sodium!" "$LINENO" 5 ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing crypto_box_curve25519xchacha20poly1305_beforenm" >&5 @@ -24609,15 +25340,21 @@ printf %s "checking for library containing crypto_box_curve25519xchacha20poly130 if test ${ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char crypto_box_curve25519xchacha20poly1305_beforenm (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char crypto_box_curve25519xchacha20poly1305_beforenm (void); int main (void) { @@ -24648,11 +25385,13 @@ done if test ${ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm+y} then : -else $as_nop - ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm=no +else case e in #( + e) ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm" >&5 printf "%s\n" "$ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm" >&6; } @@ -24667,11 +25406,12 @@ then : printf "%s\n" "#define USE_DNSCRYPT_XCHACHA20 1" >>confdefs.h -else $as_nop - +else case e in #( + e) ENABLE_DNSCRYPT_XCHACHA20=0 - + ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing sodium_set_misuse_handler" >&5 @@ -24679,15 +25419,21 @@ printf %s "checking for library containing sodium_set_misuse_handler... " >&6; } if test ${ac_cv_search_sodium_set_misuse_handler+y} then : printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS +else case e in #( + e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char sodium_set_misuse_handler (); + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ +#ifdef __cplusplus +extern "C" +#endif +char sodium_set_misuse_handler (void); int main (void) { @@ -24718,11 +25464,13 @@ done if test ${ac_cv_search_sodium_set_misuse_handler+y} then : -else $as_nop - ac_cv_search_sodium_set_misuse_handler=no +else case e in #( + e) ac_cv_search_sodium_set_misuse_handler=no ;; +esac fi rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +LIBS=$ac_func_search_save_LIBS ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sodium_set_misuse_handler" >&5 printf "%s\n" "$ac_cv_search_sodium_set_misuse_handler" >&6; } @@ -24835,16 +25583,17 @@ if test "x$ac_cv_header_net_pfvar_h" = xyes then : printf "%s\n" "#define HAVE_NET_PFVAR_H 1" >>confdefs.h -else $as_nop - +else case e in #( + e) # mnl # Check whether --with-libmnl was given. if test ${with_libmnl+y} then : withval=$with_libmnl; -else $as_nop - withval="yes" +else case e in #( + e) withval="yes" ;; +esac fi found_libmnl="no" @@ -24875,7 +25624,8 @@ printf "%s\n" "found in $dir" >&6; } if test x_$found_libmnl != x_yes; then as_fn_error $? "Could not find libmnl, libmnl.h" "$LINENO" 5 fi - + ;; +esac fi done @@ -25073,7 +25823,7 @@ printf "%s\n" "#define MAXSYSLOGMSGLEN 10240" >>confdefs.h -version=1.23.0 +version=1.23.1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for build time" >&5 printf %s "checking for build time... " >&6; } @@ -25081,15 +25831,17 @@ ax_date_fmt="%b %e, %Y" if test x"$SOURCE_DATE_EPOCH" = x then : date=`date "+$ax_date_fmt"` -else $as_nop - ax_build_date=`date -u -d "@$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null \ +else case e in #( + e) ax_build_date=`date -u -d "@$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null \ || date -u -r "$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null` if test x"$ax_build_date" = x then : as_fn_error $? "malformed SOURCE_DATE_EPOCH" "$LINENO" 5 -else $as_nop - date=$ax_build_date -fi +else case e in #( + e) date=$ax_build_date ;; +esac +fi ;; +esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $date" >&5 printf "%s\n" "$date" >&6; } @@ -25110,8 +25862,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the +# 'ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF @@ -25141,14 +25893,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote + # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # `set' quotes correctly as required by POSIX, so do not add quotes. + # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -25209,6 +25961,12 @@ LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs +# Check whether --enable-year2038 was given. +if test ${enable_year2038+y} +then : + enableval=$enable_year2038; +fi + if test -z "${USE_SYSTEMD_TRUE}" && test -z "${USE_SYSTEMD_FALSE}"; then as_fn_error $? "conditional \"USE_SYSTEMD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -25242,7 +26000,6 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh @@ -25251,12 +26008,13 @@ then : # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi @@ -25328,7 +26086,7 @@ IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 @@ -25357,7 +26115,6 @@ as_fn_error () } # as_fn_error - # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -25397,11 +26154,12 @@ then : { eval $1+=\$2 }' -else $as_nop - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -25415,11 +26173,12 @@ then : { as_val=$(( $* )) }' -else $as_nop - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith @@ -25502,9 +26261,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -25585,10 +26344,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 @@ -25603,8 +26364,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by unbound $as_me 1.23.0, which was -generated by GNU Autoconf 2.71. Invocation command line was +This file was extended by unbound $as_me 1.23.1, which was +generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -25636,7 +26397,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions +'$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -25671,11 +26432,11 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -unbound config.status 1.23.0 -configured by $0, generated by GNU Autoconf 2.71, +unbound config.status 1.23.1 +configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -25735,8 +26496,8 @@ do ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; + as_fn_error $? "ambiguous option: '$1' +Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ @@ -25744,8 +26505,8 @@ Try \`$0 --help' for more information.";; ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: '$1' +Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -26100,7 +26861,7 @@ do "contrib/unbound_portable.service") CONFIG_FILES="$CONFIG_FILES contrib/unbound_portable.service" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done @@ -26120,7 +26881,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. +# after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= @@ -26144,7 +26905,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. +# This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -26302,13 +27063,13 @@ fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. +# This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF -# Transform confdefs.h into an awk script `defines.awk', embedded as +# Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. @@ -26418,7 +27179,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -26440,19 +27201,19 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. + # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is `configure' which instantiates (i.e., don't + # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` @@ -26576,7 +27337,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when `$srcdir' = `.'. +# Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -26605,9 +27366,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" diff --git a/contrib/unbound/configure.ac b/contrib/unbound/configure.ac index 76239c099572..051e7b392e33 100644 --- a/contrib/unbound/configure.ac +++ b/contrib/unbound/configure.ac @@ -12,14 +12,14 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[23]) -m4_define([VERSION_MICRO],[0]) +m4_define([VERSION_MICRO],[1]) AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound]) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=31 +LIBUNBOUND_REVISION=32 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -118,6 +118,7 @@ LIBUNBOUND_AGE=1 # 1.21.1 had 9:29:1 # 1.22.0 had 9:30:1 # 1.23.0 had 9:31:1 +# 1.23.1 had 9:32:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary diff --git a/contrib/unbound/doc/README b/contrib/unbound/doc/README index 50d9022dbdca..1cd60bb0b12d 100644 --- a/contrib/unbound/doc/README +++ b/contrib/unbound/doc/README @@ -1,4 +1,4 @@ -README for Unbound 1.23.0 +README for Unbound 1.23.1 Copyright 2007 NLnet Labs http://unbound.net diff --git a/contrib/unbound/doc/example.conf b/contrib/unbound/doc/example.conf index ab9445fc69f1..3a5188f00477 100644 --- a/contrib/unbound/doc/example.conf +++ b/contrib/unbound/doc/example.conf @@ -1,7 +1,7 @@ # # Example configuration file. # -# See unbound.conf(5) man page, version 1.15.0. +# See unbound.conf(5) man page, version 1.23.1. # # this is a comment. @@ -17,7 +17,7 @@ server: # whitespace is not necessary, but looks cleaner. # verbosity number, 0 is least verbose. 1 is default. - verbosity: 1 + # verbosity: 1 # print statistics to the log (for every thread) every N seconds. # Set to "" or 0 to disable. Default is disabled. @@ -35,9 +35,14 @@ server: # statistics-cumulative: no # enable extended statistics (query types, answer codes, status) - # printed from unbound-control. default off, because of speed. + # printed from unbound-control. Default off, because of speed. # extended-statistics: no + # Inhibits selected extended statistics (qtype, qclass, qopcode, rcode, + # rpz-actions) from printing if their value is 0. + # Default on. + # statistics-inhibit-zero: yes + # number of threads to create. 1 disables threading. # num-threads: 1 @@ -50,11 +55,16 @@ server: # interface: 192.0.2.154 # interface: 192.0.2.154@5003 # interface: 2001:DB8::5 + # interface: eth0@5003 # enable this feature to copy the source address of queries to reply. # Socket options are not supported on all platforms. experimental. # interface-automatic: no + # instead of the default port, open additional ports separated by + # spaces when interface-automatic is enabled, by listing them here. + # interface-automatic-ports: "" + # port to answer queries from # port: 53 @@ -133,8 +143,8 @@ server: # edns-buffer-size: 1232 # Maximum UDP response size (not applied to TCP response). - # Suggested values are 512 to 4096. Default is 4096. 65536 disables it. - # max-udp-size: 4096 + # Suggested values are 512 to 4096. Default is 1232. 65536 disables it. + # max-udp-size: 1232 # max memory to use for stream(tcp and tls) waiting result buffers. # stream-wait-size: 4m @@ -164,13 +174,53 @@ server: # perform connect for UDP sockets to mitigate ICMP side channel. # udp-connect: yes - # The number of retries when a non-positive response is received. + # The number of retries, per upstream nameserver in a delegation, when + # a throwaway response (also timeouts) is received. # outbound-msg-retry: 5 + # Hard limit on the number of outgoing queries Unbound will make while + # resolving a name, making sure large NS sets do not loop. + # It resets on query restarts (e.g., CNAME) and referrals. + # max-sent-count: 32 + + # Hard limit on the number of times Unbound is allowed to restart a + # query upon encountering a CNAME record. + # max-query-restarts: 11 + + # Limit on number of NS records in NS RRset for incoming packets. + # iter-scrub-ns: 20 + + # Limit on number of CNAME, DNAME records for incoming packets. + # iter-scrub-cname: 11 + + # Limit on upstream queries for an incoming query and its recursion. + # max-global-quota: 200 + # msec for waiting for an unknown server to reply. Increase if you # are behind a slow satellite link, to eg. 1128. # unknown-server-time-limit: 376 + # msec before recursion replies are dropped. The work item continues. + # discard-timeout: 1900 + + # Max number of replies waiting for recursion per IP address. + # wait-limit: 1000 + + # Max replies waiting for recursion for IP address with cookie. + # wait-limit-cookie: 10000 + + # Apart from the default, the wait limit can be set for a netblock. + # wait-limit-netblock: 192.0.2.0/24 50000 + + # Apart from the default, the wait limit with cookie can be adjusted. + # wait-limit-cookie-netblock: 192.0.2.0/24 50000 + + # Defaults for loopback, it has no wait limit. + # wait-limit-netblock: 127.0.0.0/8 -1 + # wait-limit-netblock: ::1/128 -1 + # wait-limit-cookie-netblock: 127.0.0.0/8 -1 + # wait-limit-cookie-netblock: ::1/128 -1 + # the amount of memory to use for the RRset cache. # plain value in bytes or you can append k, m or G. default is "4Mb". # rrset-cache-size: 4m @@ -191,6 +241,11 @@ server: # the time to live (TTL) value cap for negative responses in the cache # cache-max-negative-ttl: 3600 + # the time to live (TTL) value lower bound, in seconds. Default 0. + # For negative responses in the cache. If disabled, default, + # cache-min-ttl applies if configured. + # cache-min-negative-ttl: 0 + # the time to live (TTL) value for cached roundtrip times, lameness and # EDNS version information for hosts. In seconds. # infra-host-ttl: 900 @@ -198,6 +253,9 @@ server: # minimum wait time for responses, increase if uplink is long. In msec. # infra-cache-min-rtt: 50 + # maximum wait time for responses. In msec. + # infra-cache-max-rtt: 120000 + # enable to make server probe down hosts more frequently. # infra-keep-probing: no @@ -209,7 +267,8 @@ server: # the maximum number of hosts that are cached (roundtrip, EDNS, lame). # infra-cache-numhosts: 10000 - # define a number of tags here, use with local-zone, access-control. + # define a number of tags here, use with local-zone, access-control, + # interface-*. # repeat the define-tag statement to add additional tags. # define-tag: "tag1 tag2 tag3" @@ -219,6 +278,18 @@ server: # Enable IPv6, "yes" or "no". # do-ip6: yes + # If running unbound on an IPv6-only host, domains that only have + # IPv4 servers would become unresolveable. If NAT64 is available in + # the network, unbound can use NAT64 to reach these servers with + # the following option. This is NOT needed for enabling DNS64 on a + # system that has IPv4 connectivity. + # Consider also enabling prefer-ip6 to prefer native IPv6 connections + # to nameservers. + # do-nat64: no + + # NAT64 prefix. Defaults to using dns64-prefix value. + # nat64-prefix: 64:ff9b::0/96 + # Enable UDP, "yes" or "no". # do-udp: yes @@ -247,9 +318,14 @@ server: # Enable EDNS TCP keepalive option. # edns-tcp-keepalive: no - # Timeout for EDNS TCP keepalive, in msec. + # Timeout for EDNS TCP keepalive, in msec. Overrides tcp-idle-timeout + # if edns-tcp-keepalive is set. # edns-tcp-keepalive-timeout: 120000 + # UDP queries that have waited in the socket buffer for a long time + # can be dropped. Default is 0, disabled. In seconds, such as 3. + # sock-queue-timeout: 0 + # Use systemd socket activation for UDP, TCP, and control sockets. # use-systemd: no @@ -263,11 +339,10 @@ server: # Choose deny (drop message), refuse (polite error reply), # allow (recursive ok), allow_setrd (recursive ok, rd bit is forced on), # allow_snoop (recursive and nonrecursive ok) + # allow_cookie (allow UDP with valid cookie or stateful transport) # deny_non_local (drop queries unless can be answered from local-data) # refuse_non_local (like deny_non_local but polite error reply). - # access-control: 0.0.0.0/0 refuse # access-control: 127.0.0.0/8 allow - # access-control: ::0/0 refuse # access-control: ::1 allow # access-control: ::ffff:127.0.0.1 allow @@ -276,7 +351,7 @@ server: # are tagged with one of these tags. # access-control-tag: 192.0.2.0/24 "tag2 tag3" - # set action for particular tag for given access control element + # set action for particular tag for given access control element. # if you have multiple tag values, the tag used to lookup the action # is the first tag match between access-control-tag and local-zone-tag # where "first" comes from the order of the define-tag values. @@ -288,6 +363,58 @@ server: # Set view for access control element # access-control-view: 192.0.2.0/24 viewname + # Similar to 'access-control:' but for interfaces. + # Control which listening interfaces are allowed to accept (recursive) + # queries for this server. + # The specified interfaces should be the same as the ones specified in + # 'interface:' followed by the action. + # The actions are the same as 'access-control:' above. + # By default all the interfaces configured are refused. + # Note: any 'access-control*:' setting overrides all 'interface-*:' + # settings for targeted clients. + # interface-action: 192.0.2.153 allow + # interface-action: 192.0.2.154 allow + # interface-action: 192.0.2.154@5003 allow + # interface-action: 2001:DB8::5 allow + # interface-action: eth0@5003 allow + + # Similar to 'access-control-tag:' but for interfaces. + # Tag interfaces with a list of tags (in "" with spaces between). + # Interfaces using these tags use localzones that are tagged with one + # of these tags. + # The specified interfaces should be the same as the ones specified in + # 'interface:' followed by the list of tags. + # Note: any 'access-control*:' setting overrides all 'interface-*:' + # settings for targeted clients. + # interface-tag: eth0@5003 "tag2 tag3" + + # Similar to 'access-control-tag-action:' but for interfaces. + # Set action for particular tag for a given interface element. + # If you have multiple tag values, the tag used to lookup the action + # is the first tag match between interface-tag and local-zone-tag + # where "first" comes from the order of the define-tag values. + # The specified interfaces should be the same as the ones specified in + # 'interface:' followed by the tag and action. + # Note: any 'access-control*:' setting overrides all 'interface-*:' + # settings for targeted clients. + # interface-tag-action: eth0@5003 tag3 refuse + + # Similar to 'access-control-tag-data:' but for interfaces. + # Set redirect data for a particular tag for an interface element. + # The specified interfaces should be the same as the ones specified in + # 'interface:' followed by the tag and the redirect data. + # Note: any 'access-control*:' setting overrides all 'interface-*:' + # settings for targeted clients. + # interface-tag-data: eth0@5003 tag2 "A 127.0.0.1" + + # Similar to 'access-control-view:' but for interfaces. + # Set view for an interface element. + # The specified interfaces should be the same as the ones specified in + # 'interface:' followed by the view name. + # Note: any 'access-control*:' setting overrides all 'interface-*:' + # settings for targeted clients. + # interface-view: eth0@5003 viewname + # if given, a chroot(2) is done to the given directory. # i.e. you can chroot to the working directory, for example, # for extra security, but make sure all files are in that directory. @@ -311,19 +438,19 @@ server: # How to do this is specific to your OS. # # If you give "" no chroot is performed. The path must not end in a /. - # chroot: "@UNBOUND_CHROOT_DIR@" + # chroot: "/var/unbound" # if given, user privileges are dropped (after binding port), # and the given username is assumed. Default is user "unbound". # If you give "" no privileges are dropped. - # username: "@UNBOUND_USERNAME@" + # username: "unbound" # the working directory. The relative files in this config are # relative to this directory. If you give "" the working directory # is not changed. # If you give a server: directory: dir before include: file statements # then those includes can be relative to the working directory. - # directory: "@UNBOUND_RUN_DIR@" + # directory: "/var/unbound" # the log file, "" means log to stderr. # Use of this option sets use-syslog to "no". @@ -340,6 +467,10 @@ server: # print UTC timestamp in ascii to logfile, default is epoch in seconds. # log-time-ascii: no + # log timestamp in ISO8601 format if also log-time-ascii is enabled. + # (y-m-dTh:m:s.msec[+-]tzhours:tzminutes) + # log-time-iso: no + # print one line with time, IP, name, type, class for every query. # log-queries: no @@ -351,6 +482,9 @@ server: # filtering log-queries and log-replies from the log. # log-tag-queryreply: no + # log with destination address, port and type for log-replies. + # log-destaddr: no + # log the local-zone actions, like local-zone type inform is enabled # also for the other local zone types. # log-local-actions: no @@ -359,7 +493,7 @@ server: # log-servfail: no # the pid file. Can be an absolute path outside of chroot/work dir. - # pidfile: "@UNBOUND_PIDFILE@" + # pidfile: "/var/unbound/unbound.pid" # file to read root hints from. # get one from https://www.internic.net/domain/named.cache @@ -409,6 +543,9 @@ server: # Harden against out of zone rrsets, to avoid spoofing attempts. # harden-glue: yes + # Harden against unverified (outside-zone, including sibling zone) glue rrsets + # harden-unverified-glue: no + # Harden against receiving dnssec-stripped data. If you turn it # off, failing to validate dnskey data for a trustanchor will # trigger insecure mode for that zone (like without a trustanchor). @@ -425,10 +562,15 @@ server: # harden-referral-path: no # Harden against algorithm downgrade when multiple algorithms are - # advertised in the DS record. If no, allows the weakest algorithm - # to validate the zone. + # advertised in the DS record. If no, allows any algorithm + # to validate the zone which is the standard behavior for validators. + # Check the manpage for detailed information. # harden-algo-downgrade: no + # Harden against unknown records in the authority section and the + # additional section. + # harden-unknown-additional: no + # Sent minimum amount of information to upstream servers to enhance # privacy. Only sent minimum required labels of the QNAME and set QTYPE # to A when possible. @@ -521,7 +663,7 @@ server: # And then enable the auto-trust-anchor-file config item. # Please note usage of unbound-anchor root anchor is at your own risk # and under the terms of our LICENSE (see that file in the source). - # auto-trust-anchor-file: "@UNBOUND_ROOTKEY_FILE@" + # auto-trust-anchor-file: "/var/unbound/root.key" # trust anchor signaling sends a RFC8145 key tag query after priming. # trust-anchor-signaling: yes @@ -589,13 +731,19 @@ server: # that set CD but cannot validate themselves. # ignore-cd-flag: no + # Disable the DO flag in outgoing requests. It is helpful for upstream + # devices that cannot handle DNSSEC information. But do not enable it + # otherwise, because it would stop DNSSEC validation. + # disable-edns-do: no + # Serve expired responses from cache, with serve-expired-reply-ttl in - # the response, and then attempt to fetch the data afresh. + # the response. By default it first tries to refresh an expired answer. + # Can be configured with serve-expired-client-timeout. # serve-expired: no # # Limit serving of expired responses to configured seconds after # expiration. 0 disables the limit. - # serve-expired-ttl: 0 + # serve-expired-ttl: 86400 # # Set the TTL of expired records to the serve-expired-ttl value after a # failed attempt to retrieve the record from upstream. This makes sure @@ -608,10 +756,9 @@ server: # # Time in milliseconds before replying to the client with expired data. # This essentially enables the serve-stale behavior as specified in - # RFC 8767 that first tries to resolve before - # immediately responding with expired data. 0 disables this behavior. - # A recommended value is 1800. - # serve-expired-client-timeout: 0 + # RFC 8767 that first tries to resolve before immediately responding + # with expired data. 0 disables this behavior. + # serve-expired-client-timeout: 1800 # Return the original TTL as received from the upstream name server rather # than the decrementing TTL as stored in the cache. Enabling this feature @@ -670,6 +817,8 @@ server: # local-zone: "127.in-addr.arpa." nodefault # local-zone: "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." nodefault # local-zone: "home.arpa." nodefault + # local-zone: "resolver.arpa." nodefault + # local-zone: "service.arpa." nodefault # local-zone: "onion." nodefault # local-zone: "test." nodefault # local-zone: "invalid." nodefault @@ -736,6 +885,8 @@ server: # o always_transparent, always_refuse, always_nxdomain, always_nodata, # always_deny resolve in that way but ignore local data for # that name + # o block_a resolves all records normally but returns + # NODATA for A queries and ignores local data for that name # o always_null returns 0.0.0.0 or ::0 for any name in the zone. # o noview breaks out of that view towards global local-zones. # @@ -778,6 +929,7 @@ server: # tls-service-pem: "path/to/publiccertfile.pem" # tls-port: 853 # https-port: 443 + # quic-port: 853 # cipher setting for TLSv1.2 # tls-ciphers: "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256" @@ -811,6 +963,8 @@ server: # Add system certs to the cert bundle, from the Windows Cert Store # tls-win-cert: no + # and on other systems, the default openssl certificates + # tls-system-cert: no # Pad queries over TLS upstreams # pad-queries: yes @@ -840,6 +994,13 @@ server: # Disable TLS for DNS-over-HTTP downstream service. # http-notls-downstream: no + # Maximum number of bytes used for QUIC buffers. + # quic-size: 8m + + # The interfaces that use these listed port numbers will support and + # expect PROXYv2. For UDP and TCP/TLS interfaces. + # proxy-protocol-port: portno for each of the port numbers. + # DNS64 prefix. Must be specified when DNS64 is use. # Enable dns64 in module-config. Used to synthesize IPv6 from IPv4. # dns64-prefix: 64:ff9b::0/96 @@ -876,6 +1037,13 @@ server: # if 0(default) it is disabled, otherwise states qps allowed per ip address # ip-ratelimit: 0 + # global query ratelimit for all ip addresses with a valid DNS Cookie. + # feature is experimental. + # if 0(default) it is disabled, otherwise states qps allowed per ip address + # useful in combination with 'allow_cookie'. + # If used, suggested to be higher than ip-ratelimit, tenfold. + # ip-ratelimit-cookie: 0 + # ip ratelimits are tracked in a cache, size in bytes of cache (or k,m). # ip-ratelimit-size: 4m # ip ratelimit cache slabs, reduces lock contention if equal to cpucount. @@ -897,6 +1065,32 @@ server: # the number of servers that will be used in the fast server selection. # fast-server-num: 3 + # reply to requests containing DNS Cookies as specified in RFC 7873 and RFC 9018. + # answer-cookie: no + + # secret for DNS Cookie generation. + # useful for anycast deployments. + # example value "000102030405060708090a0b0c0d0e0f". + # cookie-secret: <128 bit random hex string> + + # File with cookie secrets, the 'cookie-secret:' option is ignored + # and the file can be managed to have staging and active secrets + # with remote control commands. Disabled with "". Default is "". + # cookie-secret-file: "/usr/local/etc/unbound_cookiesecrets.txt" + + # Enable to attach Extended DNS Error codes (RFC8914) to responses. + # ede: no + + # Enable to attach an Extended DNS Error (RFC8914) Code 3 - Stale + # Answer as EDNS0 option to expired responses. + # Note that the ede option above needs to be enabled for this to work. + # ede-serve-expired: no + + # Enable DNS Error Reporting (RFC9567). + # qname-minimisation is advised to be turned on as well to increase + # privacy on the outgoing reports. + # dns-error-reporting: no + # Specific options for ipsecmod. Unbound needs to be configured with # --enable-ipsecmod for these to take effect. # @@ -941,7 +1135,7 @@ server: # o and give a python-script to run. python: # Script file to load - # python-script: "@UNBOUND_SHARE_DIR@/ubmodule-tst.py" + # python-script: "/var/unbound/ubmodule-tst.py" # Dynamic library config section. To enable: # o use --with-dynlibmodule to configure before compiling. @@ -952,7 +1146,7 @@ python: # the module-config then you need one dynlib-file per instance. dynlib: # Script file to load - # dynlib-file: "@UNBOUND_SHARE_DIR@/dynlib.so" + # dynlib-file: "/var/unbound/dynlib.so" # Remote control config section. remote-control: @@ -975,16 +1169,16 @@ remote-control: # control-use-cert: "yes" # Unbound server key file. - # server-key-file: "@UNBOUND_RUN_DIR@/unbound_server.key" + # server-key-file: "/var/unbound/unbound_server.key" # Unbound server certificate file. - # server-cert-file: "@UNBOUND_RUN_DIR@/unbound_server.pem" + # server-cert-file: "/var/unbound/unbound_server.pem" # unbound-control key file. - # control-key-file: "@UNBOUND_RUN_DIR@/unbound_control.key" + # control-key-file: "/var/unbound/unbound_control.key" # unbound-control certificate file. - # control-cert-file: "@UNBOUND_RUN_DIR@/unbound_control.pem" + # control-cert-file: "/var/unbound/unbound_control.pem" # Stub zones. # Create entries like below, to make all queries for 'example.com' and @@ -1031,11 +1225,11 @@ remote-control: # has a copy of the root for local usage. The second serves example.org # authoritatively. zonefile: reads from file (and writes to it if you also # download it), primary: fetches with AXFR and IXFR, or url to zonefile. -# With allow-notify: you can give additional (apart from primaries) sources of -# notifies. +# With allow-notify: you can give additional (apart from primaries and urls) +# sources of notifies. # auth-zone: # name: "." -# primary: 199.9.14.201 # b.root-servers.net +# primary: 170.247.170.2 # b.root-servers.net # primary: 192.33.4.12 # c.root-servers.net # primary: 199.7.91.13 # d.root-servers.net # primary: 192.5.5.241 # f.root-servers.net @@ -1043,7 +1237,7 @@ remote-control: # primary: 193.0.14.129 # k.root-servers.net # primary: 192.0.47.132 # xfr.cjr.dns.icann.org # primary: 192.0.32.132 # xfr.lax.dns.icann.org -# primary: 2001:500:200::b # b.root-servers.net +# primary: 2801:1b8:10::b # b.root-servers.net # primary: 2001:500:2::c # c.root-servers.net # primary: 2001:500:2d::d # d.root-servers.net # primary: 2001:500:2f::f # f.root-servers.net @@ -1111,6 +1305,11 @@ remote-control: # backend: "testframe" # # secret seed string to calculate hashed keys # secret-seed: "default" +# # if the backend should be read from, but not written to. +# cachedb-no-store: no +# # if the cachedb should be checked before a serve-expired response is +# # given, when serve-expired is enabled. +# cachedb-check-when-serve-expired: yes # # # For "redis" backend: # # (to enable, use --with-libhiredis to configure before compiling) @@ -1118,10 +1317,36 @@ remote-control: # redis-server-host: 127.0.0.1 # # redis server's TCP port # redis-server-port: 6379 +# # if the server uses a unix socket, set its path, or "" when not used. +# redis-server-path: "/var/lib/redis/redis-server.sock" +# # if the server uses an AUTH password, specify here, or "" when not used. +# redis-server-password: "" # # timeout (in ms) for communication with the redis server # redis-timeout: 100 +# # timeout (in ms) for commands, if 0, uses redis-timeout. +# redis-command-timeout: 0 +# # timeout (in ms) for connection set up, if 0, uses redis-timeout. +# redis-connect-timeout: 0 # # set timeout on redis records based on DNS response TTL # redis-expire-records: no +# # redis logical database to use, 0 is the default database. +# redis-logical-db: 0 +# # redis replica server's IP address or host name +# redis-replica-server-host: 127.0.0.1 +# # redis replica server's TCP port +# redis-replica-server-port: 6379 +# # if the replica server uses a unix socket, set its path, or "" when not used. +# redis-replica-server-path: "/var/lib/redis/redis-server.sock" +# # if the replica server uses an AUTH password, specify here, or "" when not used. +# redis-replica-server-password: "" +# # timeout (in ms) for communication with the redis replica server +# redis-replica-timeout: 100 +# # timeout (in ms) for redis replica commands, if 0, uses redis-replica-timeout. +# redis-replica-command-timeout: 0 +# # timeout (in ms) for redis replica connection set up, if 0, uses redis-replica-timeout. +# redis-replica-connect-timeout: 0 +# # redis logical database to use for the replica server, 0 is the default database. +# redis-replica-logical-db: 0 # IPSet # Add specify domain into set via ipset. @@ -1143,7 +1368,7 @@ remote-control: # dnstap-enable: no # # if set to yes frame streams will be used in bidirectional mode # dnstap-bidirectional: yes -# dnstap-socket-path: "@DNSTAP_SOCKET_PATH@" +# dnstap-socket-path: "" # # if "" use the unix socket in dnstap-socket-path, otherwise, # # set it to "IPaddress[@port]" of the destination. # dnstap-ip: "" @@ -1163,6 +1388,8 @@ remote-control: # dnstap-identity: "" # # if "" it uses the package version. # dnstap-version: "" +# # log only 1/N messages, if 0 it is disabled. default 0. +# dnstap-sample-rate: 0 # dnstap-log-resolver-query-messages: no # dnstap-log-resolver-response-messages: no # dnstap-log-client-query-messages: no @@ -1171,7 +1398,8 @@ remote-control: # dnstap-log-forwarder-response-messages: no # Response Policy Zones -# RPZ policies. Applied in order of configuration. QNAME, Response IP +# RPZ policies. Applied in order of configuration. Any match from an earlier +# RPZ zone will terminate the RPZ lookup. QNAME, Response IP # Address, nsdname, nsip and clientip triggers are supported. Supported # actions are: NXDOMAIN, NODATA, PASSTHRU, DROP, Local Data, tcp-only # and drop. Policies can be loaded from a file, or using zone diff --git a/contrib/unbound/doc/example.conf.in b/contrib/unbound/doc/example.conf.in index ba817288bb62..e0149a2df6aa 100644 --- a/contrib/unbound/doc/example.conf.in +++ b/contrib/unbound/doc/example.conf.in @@ -1,7 +1,7 @@ # # Example configuration file. # -# See unbound.conf(5) man page, version 1.23.0. +# See unbound.conf(5) man page, version 1.23.1. # # this is a comment. diff --git a/contrib/unbound/doc/libunbound.3 b/contrib/unbound/doc/libunbound.3 index 7df4f59d7831..8ef33b0998a2 100644 --- a/contrib/unbound/doc/libunbound.3 +++ b/contrib/unbound/doc/libunbound.3 @@ -1,4 +1,4 @@ -.TH "libunbound" "3" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" +.TH "libunbound" "3" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" libunbound.3 -- unbound library functions manual .\" @@ -44,7 +44,7 @@ .B ub_ctx_zone_remove, .B ub_ctx_data_add, .B ub_ctx_data_remove -\- Unbound DNS validating resolver 1.15.0 functions. +\- Unbound DNS validating resolver 1.23.1 functions. .SH "SYNOPSIS" .B #include <unbound.h> .LP diff --git a/contrib/unbound/doc/libunbound.3.in b/contrib/unbound/doc/libunbound.3.in index 4edc9b3c30af..8ef33b0998a2 100644 --- a/contrib/unbound/doc/libunbound.3.in +++ b/contrib/unbound/doc/libunbound.3.in @@ -1,4 +1,4 @@ -.TH "libunbound" "3" "Apr 24, 2025" "NLnet Labs" "unbound 1.23.0" +.TH "libunbound" "3" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" libunbound.3 -- unbound library functions manual .\" @@ -44,7 +44,7 @@ .B ub_ctx_zone_remove, .B ub_ctx_data_add, .B ub_ctx_data_remove -\- Unbound DNS validating resolver 1.23.0 functions. +\- Unbound DNS validating resolver 1.23.1 functions. .SH "SYNOPSIS" .B #include <unbound.h> .LP diff --git a/contrib/unbound/doc/unbound-anchor.8 b/contrib/unbound/doc/unbound-anchor.8 index 268640d8155c..23c1dd4b060f 100644 --- a/contrib/unbound/doc/unbound-anchor.8 +++ b/contrib/unbound/doc/unbound-anchor.8 @@ -1,4 +1,4 @@ -.TH "unbound-anchor" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" +.TH "unbound-anchor" "8" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound-anchor.8 -- unbound anchor maintenance utility manual .\" @@ -26,13 +26,13 @@ Suggested usage: .nf # in the init scripts. # provide or update the root anchor (if necessary) - unbound-anchor \-a "@UNBOUND_ROOTKEY_FILE@" + unbound-anchor \-a "/var/unbound/root.key" # Please note usage of this root anchor is at your own risk # and under the terms of our LICENSE (see source). # # start validating resolver # the unbound.conf contains: - # auto-trust-anchor-file: "@UNBOUND_ROOTKEY_FILE@" + # auto-trust-anchor-file: "/var/unbound/root.key" unbound \-c unbound.conf .fi .P @@ -53,12 +53,12 @@ The available options are: .TP .B \-a \fIfile The root anchor key file, that is read in and written out. -Default is @UNBOUND_ROOTKEY_FILE@. +Default is /var/unbound/root.key. If the file does not exist, or is empty, a builtin root key is written to it. .TP .B \-c \fIfile The root update certificate file, that is read in. -Default is @UNBOUND_ROOTCERT_FILE@. +Default is /var/unbound/icannbundle.pem. If the file does not exist, or is empty, a builtin certificate is used. .TP .B \-l @@ -169,11 +169,11 @@ The build\-in configuration can be overridden by providing a root\-cert file and a rootkey file. .SH "FILES" .TP -.I @UNBOUND_ROOTKEY_FILE@ +.I /var/unbound/root.key The root anchor file, updated with 5011 tracking, and read and written to. The file is created if it does not exist. .TP -.I @UNBOUND_ROOTCERT_FILE@ +.I /var/unbound/icannbundle.pem The trusted self\-signed certificate that is used to verify the downloaded DNSSEC root trust anchor. You can update it by fetching it from https://data.iana.org/root\-anchors/icannbundle.pem (and validate it). diff --git a/contrib/unbound/doc/unbound-anchor.8.in b/contrib/unbound/doc/unbound-anchor.8.in index c3a8d64cabbe..f93c5d0cd045 100644 --- a/contrib/unbound/doc/unbound-anchor.8.in +++ b/contrib/unbound/doc/unbound-anchor.8.in @@ -1,4 +1,4 @@ -.TH "unbound-anchor" "8" "Apr 24, 2025" "NLnet Labs" "unbound 1.23.0" +.TH "unbound-anchor" "8" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound-anchor.8 -- unbound anchor maintenance utility manual .\" diff --git a/contrib/unbound/doc/unbound-checkconf.8 b/contrib/unbound/doc/unbound-checkconf.8 index ac8782dcde40..9afc0df10de3 100644 --- a/contrib/unbound/doc/unbound-checkconf.8 +++ b/contrib/unbound/doc/unbound-checkconf.8 @@ -1,4 +1,4 @@ -.TH "unbound-checkconf" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" +.TH "unbound-checkconf" "8" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound-checkconf.8 -- unbound configuration checker manual .\" @@ -14,6 +14,7 @@ unbound\-checkconf .B unbound\-checkconf .RB [ \-h ] .RB [ \-f ] +.RB [ \-q ] .RB [ \-o .IR option ] .RI [ cfgfile ] @@ -37,6 +38,9 @@ Print full pathname, with chroot applied to it. Use with the \-o option. If given, after checking the config file the value of this option is printed to stdout. For "" (disabled) options an empty line is printed. .TP +.B \-q +Make the operation quiet, suppress output on success. +.TP .I cfgfile The config file to read with settings for Unbound. It is checked. If omitted, the config file at the default location is checked. @@ -45,7 +49,7 @@ The unbound\-checkconf program exits with status code 1 on error, 0 for a correct config file. .SH "FILES" .TP -.I @ub_conf_file@ +.I /var/unbound/unbound.conf Unbound configuration file. .SH "SEE ALSO" \fIunbound.conf\fR(5), diff --git a/contrib/unbound/doc/unbound-checkconf.8.in b/contrib/unbound/doc/unbound-checkconf.8.in index 73cb0ebcbb5f..8902784bf0c9 100644 --- a/contrib/unbound/doc/unbound-checkconf.8.in +++ b/contrib/unbound/doc/unbound-checkconf.8.in @@ -1,4 +1,4 @@ -.TH "unbound-checkconf" "8" "Apr 24, 2025" "NLnet Labs" "unbound 1.23.0" +.TH "unbound-checkconf" "8" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound-checkconf.8 -- unbound configuration checker manual .\" diff --git a/contrib/unbound/doc/unbound-control.8 b/contrib/unbound/doc/unbound-control.8 index 9d0c10e942bd..abc333c42ff9 100644 --- a/contrib/unbound/doc/unbound-control.8 +++ b/contrib/unbound/doc/unbound-control.8 @@ -1,4 +1,4 @@ -.TH "unbound-control" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" +.TH "unbound-control" "8" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound-control.8 -- unbound remote control manual .\" @@ -32,7 +32,7 @@ Show the version and commandline option help. .TP .B \-c \fIcfgfile The config file to read with settings. If not given the default -config file @ub_conf_file@ is used. +config file /var/unbound/unbound.conf is used. .TP .B \-s \fIserver[@port] IPv4 or IPv6 address of the server to contact. If not given, the @@ -54,6 +54,161 @@ Stop the server. The server daemon exits. .B reload Reload the server. This flushes the cache and reads the config file fresh. .TP +.B reload_keep_cache +Reload the server but try to keep the RRset and message cache if +(re)configuration allows for it. +That means the caches sizes and the number of threads must not change between +reloads. +.TP +.B fast_reload \fR[\fI+dpv\fR] +Reload the server, but keep downtime to a minimum, so that user queries +keep seeing service. This needs the code compiled with threads. The config +is loaded in a thread, and prepared, then it briefly pauses the existing +server and updates config options. The intent is that the pause does not +impact the service of user queries. The cache is kept. Also user queries +worked on are kept and continue, but with the new config options. +.IP +This command is experimental at this time. +.IP +The amount of temporal memory needed during a fast_reload is twice the +amount needed for configuration. +This is because Unbound temporarily needs to store both current configuration +values and new ones while trying to fast_reload. +Zones loaded from disk (authority zones and RPZ zones) are included in such +memory needs. +.IP +Options that can be changed are for +forwards, +stubs, +views, +authority zones, +RPZ zones and +local zones. +.IP +Also +access-control and similar options, +interface-action and similar options and +tcp-connection-limit. +It can reload some +define-tag +changes, more on that below. +Further options include +insecure-lan-zones, +domain-insecure, +trust-anchor-file, +trust-anchor, +trusted-keys-file, +auto-trust-anchor-file, +edns-client-string, +ipset, +log-identity, +infra-cache-numhosts, +msg-cache-size, +rrset-cache-size, +key-cache-size, +ratelimit-size, +neg-cache-size, +num-queries-per-thread, +jostle-timeout, +use-caps-for-id, +unwanted-reply-threshold, +tls-use-sni, +outgoing-tcp-mss, +ip-dscp, +max-reuse-tcp-queries, +tcp-reuse-timeout, +tcp-auth-query-timeout, +delay-close. +.IP +It does not work with +interface and +outgoing-interface changes, +also not with +remote control, +outgoing-port-permit, +outgoing-port-avoid, +msg-buffer-size, +any **\*-slabs** options and +statistics-interval changes. +.IP +For dnstap these options can be changed: +dnstap-log-resolver-query-messages, +dnstap-log-resolver-response-messages, +dnstap-log-client-query-messages, +dnstap-log-client-response-messages, +dnstap-log-forwarder-query-messages and +dnstap-log-forwarder-response-messages. +.IP +It does not work with these options: +dnstap-enable, +dnstap-bidirectional, +dnstap-socket-path, +dnstap-ip, +dnstap-tls, +dnstap-tls-server-name, +dnstap-tls-cert-bundle, +dnstap-tls-client-key-file and +dnstap-tls-client-cert-file. +.IP +The options +dnstap-send-identity, +dnstap-send-version, +dnstap-identity, and +dnstap-version can be loaded +when ``+p`` is not used. +.IP +The '+v' option makes the output verbose which includes the time it took to do +the reload. +With '+vv' it is more verbose which includes the amount of memory that was +allocated temporarily to perform the reload; this amount of memory can be big +if the config has large contents. +In the timing output the 'reload' time is the time during which the server was +paused. +.IP +The '+p' option makes the reload not pause threads, they keep running. +Locks are acquired, but items are updated in sequence, so it is possible +for threads to see an inconsistent state with some options from the old +and some options from the new config, such as cache TTL parameters from the +old config and forwards from the new config. The stubs and forwards are +updated at the same time, so that they are viewed consistently, either old +or new values together. The option makes the reload time take eg. 3 +microseconds instead of 0.3 milliseconds during which the worker threads are +interrupted. So, the interruption is much shorter, at the expense of some +inconsistency. After the reload itself, every worker thread is briefly +contacted to make them release resources, this makes the delete timing +a little longer, and takes up time from the remote control servicing +worker thread. +.IP +With the nopause option, the reload does not work to reload some options, +that fast reload works on without the nopause option: val-bogus-ttl, +val-override-date, val-sig-skew-min, val-sig-skew-max, val-max-restart, +val-nsec3-keysize-iterations, target-fetch-policy, outbound-msg-retry, +max-sent-count, max-query-restarts, do-not-query-address, +do-not-query-localhost, private-address, private-domain, caps-exempt, +nat64-prefix, do-nat64, infra-host-ttl, infra-keep-probing, ratelimit, +ip-ratelimit, ip-ratelimit-cookie, wait-limit-netblock, +wait-limit-cookie-netblock, ratelimit-below-domain, ratelimit-for-domain. +.IP +The '+d' option makes the reload drop queries that the worker threads are +working on. This is like flush_requestlist. Without it the queries are kept +so that users keep getting answers for those queries that are currently +processed. The drop makes it so that queries during the life time of the +query processing see only old, or only new config options. +.IP +When there are changes to the config tags, from the \fBdefine\-tag\fR option, +then the '+d' option is implicitly turned on with a warning printout, and +queries are dropped. +This is to stop references to the old tag information, by the old +queries. If the number of tags is increased in the newly loaded config, by +adding tags at the end, then the implicit '+d' option is not needed. +.IP +For response ip, that is actions associated with IP addresses, and perhaps +intersected with access control tag and action information, those settings +are stored with a query when it comes in based on its source IP address. +The old information is kept with the query until the queries are done. +This is gone when those queries are resolved and finished, or it is possible +to flush the requestlist with '+d'. +.TP .B verbosity \fInumber Change verbosity value for logging. Same values as \fBverbosity\fR keyword in \fIunbound.conf\fR(5). This new setting lasts until the server is issued @@ -115,31 +270,38 @@ Remove local data RRs read from stdin of unbound\-control. Input is one name per line. For bulk removals. .TP .B dump_cache -The contents of the cache is printed in a text format to stdout. You can -redirect it to a file to store the cache in a file. +The content of the cache is printed in a text format to stdout. +You can redirect it to a file to store the cache in a file. +Not supported in remote Unbounds in multi-process operation. .TP .B load_cache -The contents of the cache is loaded from stdin. Uses the same format as -dump_cache uses. Loading the cache with old, or wrong data can result -in old or wrong data returned to clients. Loading data into the cache -in this way is supported in order to aid with debugging. +The content of the cache is loaded from stdin. +Uses the same format as dump_cache uses. +Loading the cache with old, or wrong data can result in old or wrong data +returned to clients. +Loading data into the cache in this way is supported in order to aid with +debugging. +Not supported in remote Unbounds in multi-process operation. .TP .B lookup \fIname Print to stdout the name servers that would be used to look up the name specified. .TP -.B flush \fIname +.B flush \fR[\fI+c\fR] \fIname Remove the name from the cache. Removes the types -A, AAAA, NS, SOA, CNAME, DNAME, MX, PTR, SRV and NAPTR. +A, AAAA, NS, SOA, CNAME, DNAME, MX, PTR, SRV, NAPTR, SVCB and HTTPS. Because that is fast to do. Other record types can be removed using .B flush_type or .B flush_zone\fR. +.IP +The '+c' option removes the items also from the cachedb cache. If +cachedb is in use. .TP -.B flush_type \fIname\fR \fItype +.B flush_type \fR[\fI+c\fR] \fIname\fR \fItype Remove the name, type information from the cache. .TP -.B flush_zone \fIname +.B flush_zone \fR[\fI+c\fR] \fIname Remove all information at or below the name from the cache. The rrsets and key entries are removed so that new lookups will be performed. This needs to walk and inspect the entire cache, and is a slow operation. @@ -147,10 +309,10 @@ The entries are set to expired in the implementation of this command (so, with serve\-expired enabled, it'll serve that information but schedule a prefetch for new information). .TP -.B flush_bogus +.B flush_bogus \fR[\fI+c\fR] Remove all bogus data from the cache. .TP -.B flush_negative +.B flush_negative \fR[\fI+c\fR] Remove all negative data from the cache. This is nxdomain answers, nodata answers and servfail answers. Also removes bad key entries (which could be due to failed lookups) from the dnssec key cache, and @@ -233,22 +395,24 @@ still be bogus, use \fBflush_zone\fR to remove it), does not affect the config f .B insecure_remove \fIzone Removes domain\-insecure for the given zone. .TP -.B forward_add \fR[\fI+i\fR] \fIzone addr ... +.B forward_add \fR[\fI+it\fR] \fIzone addr ... Add a new forward zone to running Unbound. With +i option also adds a \fIdomain\-insecure\fR for the zone (so it can resolve insecurely if you have a DNSSEC root trust anchor configured for other names). The addr can be IP4, IP6 or nameserver names, like \fIforward-zone\fR config in unbound.conf. +The +t option sets it to use tls upstream, like \fIforward\-tls\-upstream\fR: yes. .TP .B forward_remove \fR[\fI+i\fR] \fIzone Remove a forward zone from running Unbound. The +i also removes a \fIdomain\-insecure\fR for the zone. .TP -.B stub_add \fR[\fI+ip\fR] \fIzone addr ... +.B stub_add \fR[\fI+ipt\fR] \fIzone addr ... Add a new stub zone to running Unbound. With +i option also adds a \fIdomain\-insecure\fR for the zone. With +p the stub zone is set to prime, without it it is set to notprime. The addr can be IP4, IP6 or nameserver names, like the \fIstub-zone\fR config in unbound.conf. +The +t option sets it to use tls upstream, like \fIstub\-tls\-upstream\fR: yes. .TP .B stub_remove \fR[\fI+i\fR] \fIzone Remove a stub zone from running Unbound. The +i also removes a @@ -289,20 +453,22 @@ just the ratelimited ips, with their estimated qps. The ratelimited ips are dropped before checking the cache. .TP .B list_auth_zones -List the auth zones that are configured. Printed one per line with a -status, indicating if the zone is expired and current serial number. +List the auth zones that are configured. Printed one per line with a status, +indicating if the zone is expired and current serial number. Configured RPZ +zones are included. .TP .B auth_zone_reload \fIzone\fR -Reload the auth zone from zonefile. The zonefile is read in overwriting -the current contents of the zone in memory. This changes the auth zone -contents itself, not the cache contents. Such cache contents exists if -you set Unbound to validate with for-upstream yes and that can be cleared -with \fBflush_zone\fR \fIzone\fR. +Reload the auth zone (or RPZ zone) from zonefile. The zonefile is read in +overwriting the current contents of the zone in memory. This changes the auth +zone contents itself, not the cache contents. Such cache contents exists if +you set Unbound to validate with for-upstream yes and that can be cleared with +\fBflush_zone\fR \fIzone\fR. .TP .B auth_zone_transfer \fIzone\fR -Transfer the auth zone from master. The auth zone probe sequence is started, -where the masters are probed to see if they have an updated zone (with the SOA -serial check). And then the zone is transferred for a newer zone version. +Transfer the auth zone (or RPZ zone) from master. The auth zone probe sequence +is started, where the masters are probed to see if they have an updated zone +(with the SOA serial check). And then the zone is transferred for a newer zone +version. .TP .B rpz_enable \fIzone\fR Enable the RPZ zone if it had previously been disabled. @@ -333,6 +499,41 @@ Remove a list of \fIlocal_data\fR for given view from stdin. Like local_datas_re .TP .B view_local_datas \fIview\fR Add a list of \fIlocal_data\fR for given view from stdin. Like local_datas. +.TP +.B add_cookie_secret <secret> +Add or replace a cookie secret persistently. <secret> needs to be an 128 bit +hex string. +.IP +Cookie secrets can be either \fIactive\fR or \fIstaging\fR. \fIActive\fR cookie +secrets are used to create DNS Cookies, but verification of a DNS Cookie +succeeds with any of the \fIactive\fR or \fIstaging\fR cookie secrets. The +state of the current cookie secrets can be printed with the +\fBprint_cookie_secrets\fR command. +.IP +When there are no cookie secrets configured yet, the <secret> is added as +\fIactive\fR. If there is already an \fIactive\fR cookie secret, the <secret> +is added as \fIstaging\fR or replacing an existing \fIstaging\fR secret. +.IP +To "roll" a cookie secret used in an anycast set. The new secret has to be +added as staging secret to \fBall\fR nodes in the anycast set. When \fBall\fR +nodes can verify DNS Cookies with the new secret, the new secret can be +activated with the \fBactivate_cookie_secret\fR command. After \fBall\fR nodes +have the new secret \fIactive\fR for at least one hour, the previous secret can +be dropped with the \fBdrop_cookie_secret\fR command. +.IP +Persistence is accomplished by writing to a file which if configured with the +\fBcookie\-secret\-file\fR option in the server section of the config file. +This is disabled by default, "". +.TP +.B drop_cookie_secret +Drop the \fIstaging\fR cookie secret. +.TP +.B activate_cookie_secret +Make the current \fIstaging\fR cookie secret \fIactive\fR, and the current +\fIactive\fR cookie secret \fIstaging\fR. +.TP +.B print_cookie_secrets +Show the current configured cookie secrets with their status. .SH "EXIT CODE" The unbound\-control program exits with status code 1 on error, 0 on success. .SH "SET UP" @@ -361,6 +562,21 @@ number of queries received by thread .I threadX.num.queries_ip_ratelimited number of queries rate limited by thread .TP +.I threadX.num.queries_cookie_valid +number of queries with a valid DNS Cookie by thread +.TP +.I threadX.num.queries_cookie_client +number of queries with a client part only DNS Cookie by thread +.TP +.I threadX.num.queries_cookie_invalid +number of queries with an invalid DNS Cookie by thread +.TP +.I threadX.num.queries_discard_timeout +number of queries removed due to discard-timeout by thread +.TP +.I threadX.num.queries_wait_limit +number of queries removed due to wait-limit by thread +.TP .I threadX.num.cachehits number of queries that were successfully answered using a cache lookup .TP @@ -380,6 +596,9 @@ request for certificates. .I threadX.num.dnscrypt.malformed number of request that were neither cleartext, not valid dnscrypt messages. .TP +.I threadX.num.dns_error_reports +number of DNS Error Reports generated by thread +.TP .I threadX.num.prefetch number of cache prefetches performed. This number is included in cachehits, as the original query had the unprefetched answer from cache, @@ -390,6 +609,14 @@ as a cache response was sent. .I threadX.num.expired number of replies that served an expired cache entry. .TP +.I threadX.num.queries_timed_out +number of queries that are dropped because they waited in the UDP socket buffer +for too long. +.TP +.I threadX.query.queue_time_us.max +The maximum wait time for packets in the socket buffer, in microseconds. This +is only reported when sock-queue-timeout is enabled. +.TP .I threadX.num.recursivereplies The number of replies sent to queries that needed recursive processing. Could be smaller than threadX.num.cachemiss if due to timeouts no replies were sent for some queries. .TP @@ -430,6 +657,24 @@ buffers are full. .I total.num.queries summed over threads. .TP +.I total.num.queries_ip_ratelimited +summed over threads. +.TP +.I total.num.queries_cookie_valid +summed over threads. +.TP +.I total.num.queries_cookie_client +summed over threads. +.TP +.I total.num.queries_cookie_invalid +summed over threads. +.TP +.I total.num.queries_discard_timeout +summed over threads. +.TP +.I total.num.queries_wait_limit +summed over threads. +.TP .I total.num.cachehits summed over threads. .TP @@ -448,12 +693,21 @@ summed over threads. .I total.num.dnscrypt.malformed summed over threads. .TP +.I total.num.dns_error_reports +summed over threads. +.TP .I total.num.prefetch summed over threads. .TP .I total.num.expired summed over threads. .TP +.I total.num.queries_timed_out +summed over threads. +.TP +.I total.query.queue_time_us.max +the maximum of the thread values. +.TP .I total.num.recursivereplies summed over threads. .TP @@ -519,6 +773,10 @@ queries waiting for request stream completion. Memory in bytes used by the HTTP/2 response buffers. Containing DNS responses waiting to be written back to the clients. .TP +.I mem.quic +Memory in bytes used by QUIC. Containing connection information, stream +information, queries read and responses written back to the clients. +.TP .I histogram.<sec>.<usec>.to.<sec>.<usec> Shows a histogram, summed over all threads. Every element counts the recursive queries whose reply time fit between the lower and upper bound. @@ -550,6 +808,10 @@ Number of queries that were made using TCP towards the Unbound server. Number of queries that the Unbound server made using TCP outgoing towards other servers. .TP +.I num.query.udpout +Number of queries that the Unbound server made using UDP outgoing towards +other servers. +.TP .I num.query.tls Number of queries that were made using TLS towards the Unbound server. These are also counted in num.query.tcp, because TLS uses TCP. @@ -563,6 +825,10 @@ Number of queries that were made using HTTPS towards the Unbound server. These are also counted in num.query.tcp and num.query.tls, because HTTPS uses TLS and TCP. .TP +.I num.query.quic +Number of queries that were made using QUIC towards the Unbound server. +These are also counted in num.query.tls, because TLS is used for these queries. +.TP .I num.query.ipv6 Number of queries that were made using IPv6 towards the Unbound server. .TP @@ -585,7 +851,7 @@ ratelimiting. .TP .I num.query.dnscrypt.shared_secret.cachemiss The number of dnscrypt queries that did not find a shared secret in the cache. -The can be use to compute the shared secret hitrate. +This can be used to compute the shared secret hitrate. .TP .I num.query.dnscrypt.replay The number of dnscrypt queries that found a nonce hit in the nonce cache and @@ -641,6 +907,18 @@ timing and protocol support information. The number of items in the key cache. These are DNSSEC keys, one item per delegation point, and their validation status. .TP +.I msg.cache.max_collisions +The maximum number of hash table collisions in the msg cache. This is the +number of hashes that are identical when a new element is inserted in the +hash table. If the value is very large, like hundreds, something is wrong +with the performance of the hash table, hash values are incorrect or malicious. +.TP +.I rrset.cache.max_collisions +The maximum number of hash table collisions in the rrset cache. This is the +number of hashes that are identical when a new element is inserted in the +hash table. If the value is very large, like hundreds, something is wrong +with the performance of the hash table, hash values are incorrect or malicious. +.TP .I dnscrypt_shared_secret.cache.count The number of items in the shared secret cache. These are precomputed shared secrets for a given client public key/server secret key pair. Shared secrets @@ -680,7 +958,12 @@ Number of queries that got an answer that contained EDNS client subnet data. .I num.query.subnet_cache Number of queries answered from the edns client subnet cache. These are counted as cachemiss by the main counters, but hit the client subnet -specific cache, after getting processed by the edns client subnet module. +specific cache after getting processed by the edns client subnet module. +.TP +.I num.query.cachedb +Number of queries answered from the external cache of cachedb. +These are counted as cachemiss by the main counters, but hit the cachedb +external cache after getting processed by the cachedb module. .TP .I num.rpz.action.<rpz_action> Number of queries answered using configured RPZ policy, per RPZ action type. @@ -688,10 +971,10 @@ Possible actions are: nxdomain, nodata, passthru, drop, tcp\-only, local\-data, disabled, and cname\-override. .SH "FILES" .TP -.I @ub_conf_file@ +.I /var/unbound/unbound.conf Unbound configuration file. .TP -.I @UNBOUND_RUN_DIR@ +.I /var/unbound directory with private keys (unbound_server.key and unbound_control.key) and self\-signed certificates (unbound_server.pem and unbound_control.pem). .SH "SEE ALSO" diff --git a/contrib/unbound/doc/unbound-control.8.in b/contrib/unbound/doc/unbound-control.8.in index 449c279d6499..f7a497782701 100644 --- a/contrib/unbound/doc/unbound-control.8.in +++ b/contrib/unbound/doc/unbound-control.8.in @@ -1,4 +1,4 @@ -.TH "unbound-control" "8" "Apr 24, 2025" "NLnet Labs" "unbound 1.23.0" +.TH "unbound-control" "8" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound-control.8 -- unbound remote control manual .\" diff --git a/contrib/unbound/doc/unbound-host.1 b/contrib/unbound/doc/unbound-host.1 index 94c8ca3dd569..7fba066968ec 100644 --- a/contrib/unbound/doc/unbound-host.1 +++ b/contrib/unbound/doc/unbound-host.1 @@ -1,4 +1,4 @@ -.TH "unbound\-host" "1" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" +.TH "unbound\-host" "1" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound-host.1 -- unbound DNS lookup utility .\" @@ -73,7 +73,7 @@ For example \-y "example.com DS 31560 5 1 1CFED84787E6E19CCF9372C1187325972FE546 .TP .B \-D Enables DNSSEC validation. Reads the root anchor from the default configured -root anchor at the default location, \fI@UNBOUND_ROOTKEY_FILE@\fR. +root anchor at the default location, \fI/var/unbound/root.key\fR. .TP .B \-f \fIkeyfile Reads keys from a file. Every line has a DS or DNSKEY record, in the format diff --git a/contrib/unbound/doc/unbound-host.1.in b/contrib/unbound/doc/unbound-host.1.in index f56a8d4d18ed..a99bab0f7be6 100644 --- a/contrib/unbound/doc/unbound-host.1.in +++ b/contrib/unbound/doc/unbound-host.1.in @@ -1,4 +1,4 @@ -.TH "unbound\-host" "1" "Apr 24, 2025" "NLnet Labs" "unbound 1.23.0" +.TH "unbound\-host" "1" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound-host.1 -- unbound DNS lookup utility .\" diff --git a/contrib/unbound/doc/unbound.8 b/contrib/unbound/doc/unbound.8 index 723f23238b8e..331fc47f358e 100644 --- a/contrib/unbound/doc/unbound.8 +++ b/contrib/unbound/doc/unbound.8 @@ -1,4 +1,4 @@ -.TH "unbound" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" +.TH "unbound" "8" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound.8 -- unbound manual .\" @@ -9,7 +9,7 @@ .\" .SH "NAME" .B unbound -\- Unbound DNS validating resolver 1.15.0. +\- Unbound DNS validating resolver 1.23.1. .SH "SYNOPSIS" .B unbound .RB [ \-h ] @@ -58,7 +58,7 @@ Show the version number and commandline option help, and exit. .TP .B \-c\fI cfgfile Set the config file with settings for Unbound to read instead of reading the -file at the default location, @ub_conf_file@. The syntax is +file at the default location, /var/unbound/unbound.conf. The syntax is described in \fIunbound.conf\fR(5). .TP .B \-d @@ -75,7 +75,7 @@ concurrently. .TP .B \-v Increase verbosity. If given multiple times, more information is logged. -This is in addition to the verbosity (if any) from the config file. +This is added to the verbosity (if any) from the config file. .TP .B \-V Show the version number and build options, and exit. diff --git a/contrib/unbound/doc/unbound.8.in b/contrib/unbound/doc/unbound.8.in index 33c87cde4edf..1ec4c304b70c 100644 --- a/contrib/unbound/doc/unbound.8.in +++ b/contrib/unbound/doc/unbound.8.in @@ -1,4 +1,4 @@ -.TH "unbound" "8" "Apr 24, 2025" "NLnet Labs" "unbound 1.23.0" +.TH "unbound" "8" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound.8 -- unbound manual .\" @@ -9,7 +9,7 @@ .\" .SH "NAME" .B unbound -\- Unbound DNS validating resolver 1.23.0. +\- Unbound DNS validating resolver 1.23.1. .SH "SYNOPSIS" .B unbound .RB [ \-h ] diff --git a/contrib/unbound/doc/unbound.conf.5 b/contrib/unbound/doc/unbound.conf.5 index e1cc5c020756..af03aefb1855 100644 --- a/contrib/unbound/doc/unbound.conf.5 +++ b/contrib/unbound/doc/unbound.conf.5 @@ -1,4 +1,4 @@ -.TH "unbound.conf" "5" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" +.TH "unbound.conf" "5" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound.conf.5 -- unbound.conf manual .\" @@ -112,13 +112,21 @@ If enabled, extended statistics are printed from \fIunbound\-control\fR(8). Default is off, because keeping track of more statistics takes time. The counters are listed in \fIunbound\-control\fR(8). .TP +.B statistics\-inhibit\-zero: \fI<yes or no> +If enabled, selected extended statistics with a value of 0 are inhibited from +printing with \fIunbound\-control\fR(8). +These are query types, query classes, query opcodes, answer rcodes +(except NOERROR, FORMERR, SERVFAIL, NXDOMAIN, NOTIMPL, REFUSED) and +RPZ actions. +Default is on. +.TP .B num\-threads: \fI<number> The number of threads to create to serve clients. Use 1 for no threading. .TP .B port: \fI<port number> The port number, default 53, on which the server responds to queries. .TP -.B interface: \fI<ip address[@port]> +.B interface: \fI<ip address or interface name [@port]> Interface to use to connect to the network. This interface is listened to for queries from clients, and answers to clients are given from it. Can be given multiple times to work on several interfaces. If none are @@ -129,7 +137,7 @@ A port number can be specified with @port (without spaces between interface and port number), if not specified the default port (from \fBport\fR) is used. .TP -.B ip\-address: \fI<ip address[@port]> +.B ip\-address: \fI<ip address or interface name [@port]> Same as interface: (for ease of compatibility with nsd.conf). .TP .B interface\-automatic: \fI<yes or no> @@ -140,6 +148,15 @@ ip\-transparent you can select which (future) interfaces Unbound provides service on. This feature is experimental, and needs support in your OS for particular socket options. Default value is no. .TP +.B interface\-automatic\-ports: \fI<string> +List the port numbers that interface-automatic listens on. If empty, the +default port is listened on. The port numbers are separated by spaces in the +string. Default is "". +.IP +This can be used to have interface automatic to deal with the interface, +and listen on the normal port number, by including it in the list, and +also https or dns over tls port numbers by putting them in the list as well. +.TP .B outgoing\-interface: \fI<ip address or ip6 netblock> Interface to use to connect to the network. This interface is used to send queries to authoritative servers and receive their replies. Can be given @@ -216,7 +233,8 @@ number). .B max\-udp\-size: \fI<number> Maximum UDP response size (not applied to TCP response). 65536 disables the udp response size maximum, and uses the choice from the client, always. -Suggested values are 512 to 4096. Default is 4096. +Suggested values are 512 to 4096. Default is 1232. The default value is the +same as the default for edns\-buffer\-size. .TP .B stream\-wait\-size: \fI<number> Number of bytes size maximum to use for waiting stream buffers. Default is @@ -284,6 +302,40 @@ Increase this if you are behind a slow satellite link, to eg. 1128. That would then avoid re\-querying every initial query because it times out. Default is 376 msec. .TP +.B discard\-timeout: \fI<msec> +The wait time in msec where recursion requests are dropped. This is +to stop a large number of replies from accumulating. They receive +no reply, the work item continues to recurse. It is nice to be a bit +larger than serve\-expired\-client\-timeout if that is enabled. +A value of 1900 msec is suggested. The value 0 disables it. +Default 1900 msec. +.TP +.B wait\-limit: \fI<number> +The number of replies that can wait for recursion, for an IP address. +This makes a ratelimit per IP address of waiting replies for recursion. +It stops very large amounts of queries waiting to be returned to one +destination. The value 0 disables wait limits. Default is 1000. +.TP +.B wait\-limit\-cookie: \fI<number> +The number of replies that can wait for recursion, for an IP address +that sent the query with a valid DNS cookie. Since the cookie validates +the client address, the limit can be higher. Default is 10000. +.TP +.B wait\-limit\-netblock: \fI<netblock> <number> +The wait limit for the netblock. If not given the wait\-limit value is +used. The most specific netblock is used to determine the limit. Useful for +overriding the default for a specific, group or individual, server. +The value -1 disables wait limits for the netblock. +By default the loopback has a wait limit netblock of -1, it is not limited, +because it is separated from the rest of network for spoofed packets. +The loopback addresses 127.0.0.0/8 and ::1/128 are default at -1. +.TP +.B wait\-limit\-cookie\-netblock: \fI<netblock> <number> +The wait limit for the netblock, when the query has a DNS cookie. +If not given, the wait\-limit\-cookie value is used. +The value -1 disables wait limits for the netblock. +The loopback addresses 127.0.0.0/8 and ::1/128 are default at -1. +.TP .B so\-rcvbuf: \fI<number> If not 0, then set the SO_RCVBUF socket option to get more buffer space on UDP port 53 incoming queries. So that short spikes on busy @@ -340,7 +392,7 @@ ip\-transparent option is also available. The value of the Differentiated Services Codepoint (DSCP) in the differentiated services field (DS) of the outgoing IP packet headers. The field replaces the outdated IPv4 Type-Of-Service field and the -IPV6 traffic class field. +IPv6 traffic class field. .TP .B rrset\-cache\-size: \fI<number> Number of bytes size of the RRset cache. Default is 4 megabytes. @@ -370,6 +422,15 @@ Time to live maximum for negative responses, these have a SOA in the authority section that is limited in time. Default is 3600. This applies to nxdomain and nodata answers. .TP +.B cache\-min\-negative\-ttl: \fI<seconds> +Time to live minimum for negative responses, these have a SOA in the +authority section that is limited in time. +Default is 0 (disabled). +If this is disabled and \fBcache-min-ttl\fR is configured, it will take effect +instead. +In that case you can set this to 1 to honor the upstream TTL. +This applies to nxdomain and nodata answers. +.TP .B infra\-host\-ttl: \fI<seconds> Time to live for entries in the host cache. The host cache contains roundtrip timing, lameness and EDNS support information. Default is 900. @@ -386,6 +447,10 @@ Lower limit for dynamic retransmit timeout calculation in infrastructure cache. Default is 50 milliseconds. Increase this value if using forwarders needing more time to do recursive name resolution. .TP +.B infra\-cache\-max\-rtt: \fI<msec> +Upper limit for dynamic retransmit timeout calculation in infrastructure +cache. Default is 2 minutes. +.TP .B infra\-keep\-probing: \fI<yes or no> If enabled the server keeps probing hosts that are down, in the one probe at a time regime. Default is no. Hosts that are down, eg. they did @@ -403,7 +468,7 @@ Enable or disable whether ip4 queries are answered or issued. Default is yes. Enable or disable whether ip6 queries are answered or issued. Default is yes. If disabled, queries are not answered on IPv6, and queries are not sent on IPv6 to the internet nameservers. With this option you can disable the -ipv6 transport for sending DNS traffic, it does not impact the contents of +IPv6 transport for sending DNS traffic, it does not impact the contents of the DNS traffic, which may have ip4 and ip6 addresses in it. .TP .B prefer\-ip4: \fI<yes or no> @@ -450,6 +515,8 @@ configured value if the number of free buffers falls below 35% of the total number configured, and finally to 0 if the number of free buffers falls below 20% of the total number configured. A minimum timeout of 200 milliseconds is observed regardless of the option value used. +It will be overridden by \fBedns\-tcp\-keepalive\-timeout\fR if +\fBedns\-tcp\-keepalive\fR is enabled. .TP .B tcp-reuse-timeout: \fI<msec>\fR The period Unbound will keep TCP persistent connections open to @@ -468,20 +535,19 @@ This option defaults to 3000 milliseconds. Enable or disable EDNS TCP Keepalive. Default is no. .TP .B edns-tcp-keepalive-timeout: \fI<msec>\fR -The period Unbound will wait for a query on a TCP connection when -EDNS TCP Keepalive is active. If this timeout expires Unbound closes -the connection. If the client supports the EDNS TCP Keepalive option, +Overrides \fBtcp\-idle\-timeout\fR when \fBedns\-tcp\-keepalive\fR is enabled. +If the client supports the EDNS TCP Keepalive option, Unbound sends the timeout value to the client to encourage it to close the connection before the server times out. This option defaults to 120000 milliseconds. -When the number of free incoming TCP buffers falls below 50% of -the total number configured, the advertised timeout is progressively -reduced to 1% of the configured value, then to 0.2% of the configured -value if the number of free buffers falls below 35% of the total number -configured, and finally to 0 if the number of free buffers falls below -20% of the total number configured. -A minimum actual timeout of 200 milliseconds is observed regardless of the -advertised timeout. +.TP +.B sock\-queue\-timeout: \fI<sec>\fR +UDP queries that have waited in the socket buffer for a long time can be +dropped. Default is 0, disabled. The time is set in seconds, 3 could be a +good value to ignore old queries that likely the client does not need a reply +for any more. This could happen if the host has not been able to service +the queries for a while, i.e. Unbound is not running, and then is enabled +again. It uses timestamp socket options. .TP .B tcp\-upstream: \fI<yes or no> Enable or disable whether the upstream queries use TCP only for transport. @@ -499,10 +565,14 @@ Enabled or disable whether the upstream queries use TLS only for transport. Default is no. Useful in tunneling scenarios. The TLS contains plain DNS in TCP wireformat. The other server must support this (see \fBtls\-service\-key\fR). -If you enable this, also configure a tls\-cert\-bundle or use tls\-win\-cert to -load CA certs, otherwise the connections cannot be authenticated. -This option enables TLS for all of them, but if you do not set this you can -configure TLS specifically for some forward zones with forward\-tls\-upstream. And also with stub\-tls\-upstream. +If you enable this, also configure a tls\-cert\-bundle or use tls\-win\-cert or +tls\-system\-cert to load CA certs, otherwise the connections cannot be +authenticated. This option enables TLS for all of them, but if you do not set +this you can configure TLS specifically for some forward zones with +forward\-tls\-upstream. And also with stub\-tls\-upstream. +If the tls\-upstream option is enabled, it is for all the forwards and stubs, +where the forward\-tls\-upstream and stub\-tls\-upstream options are ignored, +as if they had been set to yes. .TP .B ssl\-upstream: \fI<yes or no> Alternate syntax for \fBtls\-upstream\fR. If both are present in the config @@ -551,7 +621,12 @@ Alternate syntax for \fBtls\-cert\-bundle\fR. Add the system certificates to the cert bundle certificates for authentication. If no cert bundle, it uses only these certificates. Default is no. On windows this option uses the certificates from the cert store. Use -the tls\-cert\-bundle option on other systems. +the tls\-cert\-bundle option on other systems. On other systems, this option +enables the system certificates. +.TP +.B tls\-system\-cert: \fI<yes or no> +This the same setting as the tls\-win\-cert setting, under a different name. +Because it is not windows specific. .TP .B tls\-additional\-port: \fI<portnr> List portnumbers as tls\-additional\-port, and when interfaces are defined, @@ -637,6 +712,29 @@ Ignored if the option is not available. Default is yes. Disable use of TLS for the downstream DNS-over-HTTP connections. Useful for local back end servers. Default is no. .TP +.B proxy\-protocol\-port: \fI<portnr> +List port numbers as proxy\-protocol\-port, and when interfaces are defined, +eg. with the @port suffix, as this port number, they support and expect PROXYv2. +In this case the proxy address will only be used for the network communication +and initial ACL (check if the proxy itself is denied/refused by configuration). +The proxied address (if any) will then be used as the true client address and +will be used where applicable for logging, ACL, DNSTAP, RPZ and IP ratelimiting. +PROXYv2 is supported for UDP and TCP/TLS listening interfaces. +There is no support for PROXYv2 on a DoH, DoQ or DNSCrypt listening interface. +Can list multiple, each on a new statement. +.TP +.B quic\-port: \fI<number> +The port number on which to provide DNS-over-QUIC service, default 853, only +interfaces configured with that port number as @number get the QUIC service. +The interface uses QUIC for the UDP traffic on that port number. +.TP +.B quic\-size: \fI<size in bytes> +Maximum number of bytes for all QUIC buffers and data combined. Default is 8 +megabytes. A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, +megabytes or gigabytes (1024*1024 bytes in a megabyte). New connections receive +connection refused when the limit is exceeded. New streams are reset when the +limit is exceeded. +.TP .B use\-systemd: \fI<yes or no> Enable or disable systemd socket activation. Default is no. @@ -652,19 +750,25 @@ When at the limit, further connections are accepted but closed immediately. This option is experimental at this time. .TP .B access\-control: \fI<IP netblock> <action> +Specify treatment of incoming queries from their originating IP address. +Queries can be allowed to have access to this server that gives DNS +answers, or refused, with other actions possible. The IP address range +can be specified as a netblock, it is possible to give the statement +several times in order to specify the treatment of different netblocks. +.IP The netblock is given as an IP4 or IP6 address with /size appended for a classless network block. The action can be \fIdeny\fR, \fIrefuse\fR, -\fIallow\fR, \fIallow_setrd\fR, \fIallow_snoop\fR, \fIdeny_non_local\fR or -\fIrefuse_non_local\fR. -The most specific netblock match is used, if none match \fIdeny\fR is used. +\fIallow\fR, \fIallow_setrd\fR, \fIallow_snoop\fR, \fIallow_cookie\fR, +\fIdeny_non_local\fR or \fIrefuse_non_local\fR. +The most specific netblock match is used, if none match \fIrefuse\fR is used. The order of the access\-control statements therefore does not matter. .IP -The action \fIdeny\fR stops queries from hosts from that netblock. +The \fIdeny\fR action stops queries from hosts from that netblock. .IP -The action \fIrefuse\fR stops queries too, but sends a DNS rcode REFUSED +The \fIrefuse\fR action stops queries too, but sends a DNS rcode REFUSED error message back. .IP -The action \fIallow\fR gives access to clients from that netblock. +The \fIallow\fR action gives access to clients from that netblock. It gives only access for recursion clients (which is what almost all clients need). Nonrecursive queries are refused. .IP @@ -684,14 +788,27 @@ may be useful if another DNS server must forward requests for specific zones to a resolver DNS server, but only supports stub domains and sends queries to the resolver DNS server with the RD bit cleared. .IP -The action \fIallow_snoop\fR gives nonrecursive access too. This give +The \fIallow_snoop\fR action gives nonrecursive access too. This give both recursive and non recursive access. The name \fIallow_snoop\fR refers to cache snooping, a technique to use nonrecursive queries to examine the cache contents (for malicious acts). However, nonrecursive queries can also be a valuable debugging tool (when you want to examine the cache contents). In that case use \fIallow_snoop\fR for your administration host. .IP -By default only localhost is \fIallow\fRed, the rest is \fIrefuse\fRd. +The \fIallow_cookie\fR action allows access only to UDP queries that contain a +valid DNS Cookie as specified in RFC 7873 and RFC 9018, when the +\fBanswer\-cookie\fR option is enabled. +UDP queries containing only a DNS Client Cookie and no Server Cookie, or an +invalid DNS Cookie, will receive a BADCOOKIE response including a newly +generated DNS Cookie, allowing clients to retry with that DNS Cookie. +The \fIallow_cookie\fR action will also accept requests over stateful +transports, regardless of the presence of an DNS Cookie and regardless of the +\fBanswer\-cookie\fR setting. +UDP queries without a DNS Cookie receive REFUSED responses with the TC flag set, +that may trigger fall back to TCP for those clients. +.IP +By default only localhost (the 127.0.0.0/8 IP netblock, not the loopback +interface) is implicitly \fIallow\fRed, the rest is \fIrefuse\fRd. The default is \fIrefuse\fRd, because that is protocol\-friendly. The DNS protocol is not designed to handle dropped packets due to policy, and dropping may result in (possibly excessive) retried queries. @@ -722,6 +839,50 @@ Set redirect data for particular tag for given access control element. .B access\-control\-view: \fI<IP netblock> <view name> Set view for given access control element. .TP +.B interface\-action: \fI<ip address or interface name [@port]> <action> +Similar to \fBaccess\-control:\fR but for interfaces. +.IP +The action is the same as the ones defined under \fBaccess\-control:\fR. +Interfaces are \fIrefuse\fRd by default. +By default only localhost (the 127.0.0.0/8 IP netblock, not the loopback +interface) is implicitly \fIallow\fRed through the default +\fBaccess\-control:\fR behavior. +This also means that any attempt to use the \fBinterface-*:\fR options for the +loopback interface will not work as they will be overridden by the implicit +default "\fBaccess\-control:\fR 127.0.0.0/8 allow" option. +.IP +Note that the interface needs to be already specified with \fBinterface:\fR +and that any \fBaccess-control*:\fR setting overrides all \fBinterface-*:\fR +settings for targeted clients. +.TP +.B interface\-tag: \fI<ip address or interface name [@port]> <"list of tags"> +Similar to \fBaccess\-control-tag:\fR but for interfaces. +.IP +Note that the interface needs to be already specified with \fBinterface:\fR +and that any \fBaccess-control*:\fR setting overrides all \fBinterface-*:\fR +settings for targeted clients. +.TP +.B interface\-tag\-action: \fI<ip address or interface name [@port]> <tag> <action> +Similar to \fBaccess\-control-tag-action:\fR but for interfaces. +.IP +Note that the interface needs to be already specified with \fBinterface:\fR +and that any \fBaccess-control*:\fR setting overrides all \fBinterface-*:\fR +settings for targeted clients. +.TP +.B interface\-tag\-data: \fI<ip address or interface name [@port]> <tag> <"resource record string"> +Similar to \fBaccess\-control-tag-data:\fR but for interfaces. +.IP +Note that the interface needs to be already specified with \fBinterface:\fR +and that any \fBaccess-control*:\fR setting overrides all \fBinterface-*:\fR +settings for targeted clients. +.TP +.B interface\-view: \fI<ip address or interface name [@port]> <view name> +Similar to \fBaccess\-control-view:\fR but for interfaces. +.IP +Note that the interface needs to be already specified with \fBinterface:\fR +and that any \fBaccess-control*:\fR setting overrides all \fBinterface-*:\fR +settings for targeted clients. +.TP .B chroot: \fI<directory> If chroot is enabled, you should pass the configfile (from the commandline) as a full path from the original root. After the @@ -745,13 +906,12 @@ outside of the chroot directory. Additionally, Unbound may need to access /dev/urandom (for entropy) from inside the chroot. .IP -If given a chroot is done to the given directory. By default chroot is -enabled and the default is "@UNBOUND_CHROOT_DIR@". If you give "" no -chroot is performed. +If given a chroot is done to the given directory. The chroot is by default +set to "/var/unbound". If you give "" no chroot is performed. .TP .B username: \fI<name> If given, after binding the port the user privileges are dropped. Default is -"@UNBOUND_USERNAME@". If you give username: "" no user change is performed. +"unbound". If you give username: "" no user change is performed. .IP If this user is not capable of binding the port, reloads (by signal HUP) will still retain the opened ports. @@ -759,7 +919,7 @@ If you change the port number in the config file, and that new port number requires privileges, then a reload will fail; a restart is needed. .TP .B directory: \fI<directory> -Sets the working directory for the program. Default is "@UNBOUND_RUN_DIR@". +Sets the working directory for the program. Default is "/var/unbound". On Windows the string "%EXECUTABLE%" tries to change to the directory that unbound.exe resides in. If you give a server: directory: dir before include: file statements @@ -794,6 +954,10 @@ Sets logfile lines to use a timestamp in UTC ascii. Default is no, which prints the seconds since 1970 in brackets. No effect if using syslog, in that case syslog formats the timestamp printed into the log files. .TP +.B log\-time\-iso:\fR <yes or no> +Log time in ISO8601 format, if \fBlog\-time\-ascii:\fR yes is also set. +Default is no. +.TP .B log\-queries: \fI<yes or no> Prints one line per query to the log, with the log timestamp and IP address, name, type and class. Default is no. Note that it takes time to print these @@ -812,6 +976,11 @@ Prints the word 'query' and 'reply' with log\-queries and log\-replies. This makes filtering logs easier. The default is off (for backwards compatibility). .TP +.B log\-destaddr: \fI<yes or no> +Prints the destination address, port and type in the log\-replies output. +This disambiguates what type of traffic, eg. udp or tcp, and to what local +port the traffic was sent to. +.TP .B log\-local\-actions: \fI<yes or no> Print log lines to inform about local zone actions. These lines are like the local\-zone type inform prints out, but they are also printed for the other @@ -823,14 +992,14 @@ This is separate from the verbosity debug logs, much smaller, and printed at the error level, not the info level of debug info from verbosity. .TP .B pidfile: \fI<filename> -The process id is written to the file. Default is "@UNBOUND_PIDFILE@". +The process id is written to the file. Default is "/var/unbound/unbound.pid". So, .nf -kill \-HUP `cat @UNBOUND_PIDFILE@` +kill \-HUP `cat /var/unbound/unbound.pid` .fi triggers a reload, .nf -kill \-TERM `cat @UNBOUND_PIDFILE@` +kill \-TERM `cat /var/unbound/unbound.pid` .fi gracefully terminates. .TP @@ -890,17 +1059,22 @@ closer to that of BIND 9, while setting "\-1 \-1 \-1 \-1 \-1" gives behaviour rumoured to be closer to that of BIND 8. .TP .B harden\-short\-bufsize: \fI<yes or no> -Very small EDNS buffer sizes from queries are ignored. Default is on, as +Very small EDNS buffer sizes from queries are ignored. Default is yes, as described in the standard. .TP .B harden\-large\-queries: \fI<yes or no> -Very large queries are ignored. Default is off, since it is legal protocol +Very large queries are ignored. Default is no, since it is legal protocol wise to send these, and could be necessary for operation if TSIG or EDNS payload is very large. .TP .B harden\-glue: \fI<yes or no> Will trust glue only if it is within the servers authority. Default is yes. .TP +.B harden\-unverified\-glue: \fI<yes or no> +Will trust only in-zone glue. Will try to resolve all out of zone +(\fI<unverfied>) glue. Will fallback to the original glue if unable to resolve. +Default is no. +.TP .B harden\-dnssec\-stripped: \fI<yes or no> Require DNSSEC data for trust\-anchored zones, if such data is absent, the zone becomes bogus. If turned off, and no DNSSEC data is received @@ -936,10 +1110,29 @@ to increase the max depth that is checked to. .TP .B harden\-algo\-downgrade: \fI<yes or no> Harden against algorithm downgrade when multiple algorithms are -advertised in the DS record. If no, allows the weakest algorithm to -validate the zone. Default is no. Zone signers must produce zones -that allow this feature to work, but sometimes they do not, and turning -this option off avoids that validation failure. +advertised in the DS record. +This works by first choosing only the strongest DS digest type as per RFC 4509 +(Unbound treats the highest algorithm as the strongest) and then +expecting signatures from all the advertised signing algorithms from the chosen +DS(es) to be present. +If no, allows any one supported algorithm to validate the zone, even if other advertised algorithms are broken. +Default is no. +RFC 6840 mandates that zone signers must produce zones signed with all +advertised algorithms, but sometimes they do not. +RFC 6840 also clarifies that this requirement is not for validators and +validators should accept any single valid path. +It should thus be explicitly noted that this option violates RFC 6840 for +DNSSEC validation and should only be used to perform a signature +completeness test to support troubleshooting. +Using this option may break DNSSEC resolution with non-RFC6840-conforming +signers and/or in multi-signer configurations that don't send all the +advertised signatures. +.TP +.B harden\-unknown\-additional: \fI<yes or no> +Harden against unknown records in the authority section and additional +section. Default is no. If no, such records are copied from the upstream +and presented to the client together with the answer. If yes, it could +hamper future protocol developments that want to add records. .TP .B use\-caps\-for\-id: \fI<yes or no> Use 0x20\-encoded random bits in the query to foil spoof attempts. @@ -954,7 +1147,7 @@ queries. For domains that do not support 0x20 and also fail with fallback because they keep sending different answers, like some load balancers. Can be given multiple times, for different domains. .TP -.B caps\-whitelist: \fI<yes or no> +.B caps\-whitelist: \fI<domain> Alternate syntax for \fBcaps\-exempt\fR. .TP .B qname\-minimisation: \fI<yes or no> @@ -1018,10 +1211,11 @@ IP6 ::1 and IP4 127.0.0.1/8. If no, then localhost can be used to send queries to. Default is yes. .TP .B prefetch: \fI<yes or no> -If yes, message cache elements are prefetched before they expire to -keep the cache up to date. Default is no. Turning it on gives about -10 percent more traffic and load on the machine, but popular items do -not expire from the cache. +If yes, cache hits on message cache elements that are on their last 10 percent +of their TTL value trigger a prefetch to keep the cache up to date. +Default is no. +Turning it on gives about 10 percent more traffic and load on the machine, but +popular items do not expire from the cache. .TP .B prefetch\-key: \fI<yes or no> If yes, fetch the DNSKEYs earlier in the validation process, when a DS @@ -1041,12 +1235,13 @@ from the query ID, for speed and thread safety). Default is yes. .B minimal-responses: \fI<yes or no> If yes, Unbound does not insert authority/additional sections into response messages when those sections are not required. This reduces response -size significantly, and may avoid TCP fallback for some responses. -This may cause a slight speedup. The default is yes, even though the DNS +size significantly, and may avoid TCP fallback for some responses which may +cause a slight speedup. The default is yes, even though the DNS protocol RFCs mandate these sections, and the additional content could -be of use and save roundtrips for clients. Because they are not used, -and the saved roundtrips are easier saved with prefetch, whilst this is -faster. +save roundtrips for clients that use the additional content. +However these sections are hardly used by clients. +Enabling prefetch can benefit clients that need the additional content +by trying to keep that content fresh in the cache. .TP .B disable-dnssec-lame-check: \fI<yes or no> If true, disables the DNSSEC lameness check in the iterator. This check @@ -1069,9 +1264,6 @@ Adding \fIrespip\fR to the front will cause RPZ processing to be done on all queries. The default is "\fIvalidator iterator\fR". .IP -When the server is built with -EDNS client subnet support the default is "\fIsubnetcache validator -iterator\fR". Most modules that need to be listed here have to be listed at the beginning of the line. The subnetcachedb module has to be listed just before the iterator. @@ -1195,17 +1387,33 @@ servers that set the CD flag but cannot validate DNSSEC themselves are the clients, and then Unbound provides them with DNSSEC protection. The default value is "no". .TP +.B disable\-edns\-do: \fI<yes or no> +Disable the EDNS DO flag in upstream requests. +It breaks DNSSEC validation for Unbound's clients. +This results in the upstream name servers to not include DNSSEC records in +their replies and could be helpful for devices that cannot handle DNSSEC +information. +When the option is enabled, clients that set the DO flag receive no EDNS +record in the response to indicate the lack of support to them. +If this option is enabled but Unbound is already configured for DNSSEC +validation (i.e., the validator module is enabled; default) this option is +implicitly turned off with a warning as to not break DNSSEC validation in +Unbound. +Default is no. +.TP .B serve\-expired: \fI<yes or no> If enabled, Unbound attempts to serve old responses from cache with a -TTL of \fBserve\-expired\-reply\-ttl\fR in the response without waiting for the -actual resolution to finish. The actual resolution answer ends up in the cache -later on. Default is "no". +TTL of \fBserve\-expired\-reply\-ttl\fR in the response. +By default the expired answer will be used after a resolution attempt errored +out or is taking more than serve\-expired\-client\-timeout to resolve. +Default is "no". .TP .B serve\-expired\-ttl: \fI<seconds> -Limit serving of expired responses to configured seconds after expiration. 0 -disables the limit. This option only applies when \fBserve\-expired\fR is -enabled. A suggested value per RFC 8767 is between -86400 (1 day) and 259200 (3 days). The default is 0. +Limit serving of expired responses to configured seconds after expiration. +0 disables the limit. +This option only applies when \fBserve\-expired\fR is enabled. +A suggested value per RFC 8767 is between 86400 (1 day) and 259200 (3 days). +The default is 86400. .TP .B serve\-expired\-ttl\-reset: \fI<yes or no> Set the TTL of expired records to the \fBserve\-expired\-ttl\fR value after a @@ -1219,12 +1427,14 @@ TTL value to use when replying with expired data. If use 30 as the value (RFC 8767). The default is 30. .TP .B serve\-expired\-client\-timeout: \fI<msec> -Time in milliseconds before replying to the client with expired data. This -essentially enables the serve-stale behavior as specified in +Time in milliseconds before replying to the client with expired data. +This essentially enables the serve-stale behavior as specified in RFC 8767 that first tries to resolve before immediately -responding with expired data. A recommended value per -RFC 8767 is 1800. Setting this to 0 will disable this -behavior. Default is 0. +responding with expired data. +Setting this to 0 will disable this behavior and instead serve the expired +record immediately from the cache before attempting to refresh it via +resolution. +Default is 1800. .TP .B serve\-original\-ttl: \fI<yes or no> If enabled, Unbound will always return the original TTL as received from @@ -1313,14 +1523,24 @@ address space are not validated. This is usually required whenever Configure a local zone. The type determines the answer to give if there is no match from local\-data. The types are deny, refuse, static, transparent, redirect, nodefault, typetransparent, inform, inform_deny, -inform_redirect, always_transparent, always_refuse, always_nxdomain, always_null, noview, -and are explained below. After that the default settings are listed. Use -local\-data: to enter data into the local zone. Answers for local zones -are authoritative DNS answers. By default the zones are class IN. +inform_redirect, always_transparent, block_a, always_refuse, always_nxdomain, +always_null, noview, and are explained below. After that the default settings +are listed. Use local\-data: to enter data into the local zone. Answers for +local zones are authoritative DNS answers. By default the zones are class IN. .IP If you need more complicated authoritative data, with referrals, wildcards, CNAME/DNAME support, or DNSSEC authoritative service, setup a stub\-zone for -it as detailed in the stub zone section below. +it as detailed in the stub zone section below. A stub\-zone can be used to +have unbound send queries to another server, an authoritative server, to +fetch the information. With a forward\-zone, unbound sends queries to a server +that is a recursive server to fetch the information. With an auth\-zone a +zone can be loaded from file and used, it can be used like a local\-zone +for users downstream, or the auth\-zone information can be used to fetch +information from when resolving like it is an upstream server. The +forward\-zone and auth\-zone options are described in their sections below. +If you want to perform filtering of the information that the users can fetch, +the local\-zone and local\-data statements allow for this, but also the +rpz functionality can be used, described in the RPZ section. .TP 10 \h'5'\fIdeny\fR Do not send an answer, drop the query. @@ -1381,6 +1601,12 @@ Ie. answer queries with fixed data and also log the machines that ask. \h'5'\fIalways_transparent\fR Like transparent, but ignores local data and resolves normally. .TP 10 +\h'5'\fIblock_a\fR +Like transparent, but ignores local data and resolves normally all query +types excluding A. For A queries it unconditionally returns NODATA. +Useful in cases when there is a need to explicitly force all apps to use +IPv6 protocol and avoid any queries to IPv4. +.TP 10 \h'5'\fIalways_refuse\fR Like refuse, but ignores local data and refuses the query. .TP 10 @@ -1413,6 +1639,7 @@ given zone. Use \fInodefault\fR if you use exactly that zone, if you want to use a subzone, use \fItransparent\fR. .P The default zones are localhost, reverse 127.0.0.1 and ::1, the home.arpa, +the resolver.arpa, the service.arpa, the onion, test, invalid and the AS112 zones. The AS112 zones are reverse DNS zones for private use and reserved IP addresses for which the servers on the internet cannot provide correct answers. They are configured by @@ -1468,6 +1695,24 @@ local\-data: "home.arpa. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800" .fi .TP 10 +\h'5'\fIresolver.arpa (RFC 9462)\fR +Default content: +.nf +local\-zone: "resolver.arpa." static +local\-data: "resolver.arpa. 10800 IN NS localhost." +local\-data: "resolver.arpa. 10800 IN + SOA localhost. nobody.invalid. 1 3600 1200 604800 10800" +.fi +.TP 10 +\h'5'\fIservice.arpa (draft-ietf-dnssd-srp-25)\fR +Default content: +.nf +local\-zone: "service.arpa." static +local\-data: "service.arpa. 10800 IN NS localhost." +local\-data: "service.arpa. 10800 IN + SOA localhost. nobody.invalid. 1 3600 1200 604800 10800" +.fi +.TP 10 \h'5'\fIonion (RFC 7686)\fR Default content: .nf @@ -1591,7 +1836,7 @@ This specifies the action data for \fIresponse-ip\fR with action being to redirect as specified by "\fIresource record string\fR". "Resource record string" is similar to that of \fIaccess-control-tag-action\fR, but it must be of either AAAA, A or CNAME types. -If the IP-netblock is an IPv6/IPV4 prefix, the record +If the IP-netblock is an IPv6/IPv4 prefix, the record must be AAAA/A respectively, unless it is a CNAME (which can be used for both versions of IP netblocks). If it is CNAME there must not be more than one \fIresponse-ip-data\fR for the same IP-netblock. @@ -1697,11 +1942,30 @@ A value of 0 will disable ratelimiting for domain names that end in this name. .TP 5 .B ip\-ratelimit: \fI<number or 0> Enable global ratelimiting of queries accepted per IP address. -If 0, the default, it is disabled. This option is experimental at this time. +This option is experimental at this time. The ratelimit is in queries per second that are allowed. More queries are completely dropped and will not receive a reply, SERVFAIL or otherwise. IP ratelimiting happens before looking in the cache. This may be useful for mitigating amplification attacks. +Clients with a valid DNS Cookie will bypass the ratelimit. +If a ratelimit for such clients is still needed, \fBip\-ratelimit\-cookie\fR +can be used instead. +Default is 0 (disabled). +.TP 5 +.B ip\-ratelimit\-cookie: \fI<number or 0> +Enable global ratelimiting of queries accepted per IP address with a valid DNS +Cookie. +This option is experimental at this time. +The ratelimit is in queries per second that are allowed. +More queries are completely dropped and will not receive a reply, SERVFAIL or +otherwise. +IP ratelimiting happens before looking in the cache. +This option could be useful in combination with \fIallow_cookie\fR in an +attempt to mitigate other amplification attacks than UDP reflections (e.g., +attacks targeting Unbound itself) which are already handled with DNS Cookies. +If used, the value is suggested to be higher than \fBip\-ratelimit\fR e.g., +tenfold. +Default is 0 (disabled). .TP 5 .B ip\-ratelimit\-size: \fI<memory size> Give the size of the data structure in which the current ongoing rates are @@ -1733,9 +1997,44 @@ set ip\-ratelimit to a suspicious rate to aggressively limit unusually high traffic. Default is off. .TP 5 .B outbound\-msg\-retry: \fI<number> -The number of retries Unbound will do in case of a non positive response is -received. If a forward nameserver is used, this is the number of retries per -forward nameserver in case of throwaway response. +The number of retries, per upstream nameserver in a delegation, that Unbound +will attempt in case a throwaway response is received. +No response (timeout) contributes to the retry counter. +If a forward/stub zone is used, this is the number of retries per nameserver in +the zone. +Default is 5. +.TP 5 +.B max\-sent\-count: \fI<number> +Hard limit on the number of outgoing queries Unbound will make while resolving +a name, making sure large NS sets do not loop. +Results in SERVFAIL when reached. +It resets on query restarts (e.g., CNAME) and referrals. +Default is 32. +.TP 5 +.B max\-query\-restarts: \fI<number> +Hard limit on the number of times Unbound is allowed to restart a query upon +encountering a CNAME record. +Results in SERVFAIL when reached. +Changing this value needs caution as it can allow long CNAME chains to be +accepted, where Unbound needs to verify (resolve) each link individually. +Default is 11. +.TP 5 +.B iter\-scrub\-ns: \fI<number> +Limit on the number of NS records allowed in an rrset of type NS, from the +iterator scrubber. This protects the internals of the resolver from overly +large NS sets. Default is 20. +.TP 5 +.B iter\-scrub\-cname: \fI<number> +Limit on the number of CNAME, DNAME records in an answer, from the iterator +scrubber. This protects the internals of the resolver from overly long +indirection chains. Clips off the remainder of the reply packet at that point. +Default is 11. +.TP 5 +.B max\-global\-quota: \fI<number> +Limit on the number of upstream queries sent out for an incoming query and +its subqueries from recursion. It is not reset during the resolution. When +it is exceeded the query is failed and the lookup process stops. +Default is 200. .TP 5 .B fast\-server\-permil: \fI<number> Specify how many times out of 1000 to pick from the set of fastest servers. @@ -1752,6 +2051,32 @@ Set the number of servers that should be used for fast server selection. Only use the fastest specified number of servers with the fast\-server\-permil option, that turns this on or off. The default is to use the fastest 3 servers. .TP 5 +.B answer\-cookie: \fI<yes or no> +If enabled, Unbound will answer to requests containing DNS Cookies as +specified in RFC 7873 and RFC 9018. +Default is no. +.TP 5 +.B cookie\-secret: \fI<128 bit hex string> +Server's secret for DNS Cookie generation. +Useful to explicitly set for servers in an anycast deployment that need to +share the secret in order to verify each other's Server Cookies. +An example hex string would be "000102030405060708090a0b0c0d0e0f". +Default is a 128 bits random secret generated at startup time. +This option is ignored if a \fBcookie\-secret\-file\fR is +present. In that case the secrets from that file are used in DNS Cookie +calculations. +.TP 5 +.B cookie\-secret\-file: \fI<filename> +File from which the secrets are read used in DNS Cookie calculations. When this +file exists, the secrets in this file are used and the secret specified by the +\fBcookie-secret\fR option is ignored. +Enable it by setting a filename, like "/usr/local/etc/unbound_cookiesecrets.txt". +The content of this file must be manipulated with the \fBadd_cookie_secret\fR, +\fBdrop_cookie_secret\fR and \fBactivate_cookie_secret\fR commands to the +\fIunbound\-control\fR(8) tool. Please see that manpage on how to perform a +safe cookie secret rollover. +Default is "" (disabled). +.TP 5 .B edns\-client\-string: \fI<IP netblock> <string> Include an EDNS0 option containing configured ascii string in queries with destination address matching the configured IP netblock. This configuration @@ -1761,6 +2086,34 @@ option can be used multiple times. The most specific match will be used. EDNS0 option code for the \fIedns\-client\-string\fR option, from 0 to 65535. A value from the `Reserved for Local/Experimental` range (65001-65534) should be used. Default is 65001. +.TP 5 +.B ede: \fI<yes or no> +If enabled, Unbound will respond with Extended DNS Error codes (RFC8914). +These EDEs provide additional information with a response mainly for, but not +limited to, DNS and DNSSEC errors. + +When the \fBval-log-level\fR option is also set to \fB2\fR, responses with +Extended DNS Errors concerning DNSSEC failures will also contain a descriptive +text message about the reason for the failure. +Default is "no". +.TP 5 +.B ede\-serve\-expired: \fI<yes or no> +If enabled, Unbound will attach an Extended DNS Error (RFC8914) Code 3 - Stale +Answer as EDNS0 option to the expired response. +The \fBede\fR option needs to be enabled as well for this to work. +Default is "no". +.TP 5 +.B dns\-error\-reporting: \fI<yes or no> +If enabled, Unbound will send DNS Error Reports (RFC9567). +The name servers need to express support by attaching the Report-Channel EDNS0 +option on their replies specifying the reporting agent for the zone. +Any errors encountered during resolution that would result in Unbound +generating an Extended DNS Error (RFC8914) will be reported to the zone's +reporting agent. +The \fBede\fR option does not need to be enabled for this to work. +It is advised that the \fBqname\-minimisation\fR option is also enabled to +increase privacy on the outgoing reports. +Default is "no". .SS "Remote Control Options" In the .B remote\-control: @@ -1776,15 +2129,17 @@ section for options. To setup the correct self\-signed certificates use the The option is used to enable remote control, default is "no". If turned off, the server does not listen for control commands. .TP 5 -.B control\-interface: \fI<ip address or path> +.B control\-interface: \fI<ip address or interface name or path> Give IPv4 or IPv6 addresses or local socket path to listen on for control commands. +If an interface name is used instead of an ip address, the list of ip addresses +on that interface are used. By default localhost (127.0.0.1 and ::1) is listened to. Use 0.0.0.0 and ::0 to listen to all interfaces. If you change this and permissions have been dropped, you must restart the server for the change to take effect. .IP -If you set it to an absolute path, a local socket is used. The local socket +If you set it to an absolute path, a unix domain socket is used. This socket does not use the certificates and keys, so those files need not be present. To restrict access, Unbound sets permissions on the file to the user and group that is configured, the access bits are set to allow the group members @@ -1968,13 +2323,32 @@ useful when you want immediate changes to be visible. Authority zones are configured with \fBauth\-zone:\fR, and each one must have a \fBname:\fR. There can be multiple ones, by listing multiple auth\-zone clauses, each with a different name, pertaining to that part of the namespace. The authority zone with the name closest to the name looked up is used. -Authority zones are processed after \fBlocal\-zones\fR and before -cache (\fBfor\-downstream:\fR \fIyes\fR), and when used in this manner -make Unbound respond like an authority server. Authority zones are also -processed after cache, just before going to the network to fetch -information for recursion (\fBfor\-upstream:\fR \fIyes\fR), and when used -in this manner provide a local copy of an authority server that speeds up -lookups of that data. +Authority zones can be processed on two distinct, non-exclusive, configurable +stages. +.LP +With \fBfor\-downstream:\fR \fIyes\fR (default), authority zones are processed +after \fBlocal\-zones\fR and before cache. +When used in this manner, Unbound responds like an authority server with no +further processing other than returning an answer from the zone contents. +A notable example, in this case, is CNAME records which are returned verbatim +to downstream clients without further resolution. +.LP +With \fBfor\-upstream:\fR \fIyes\fR (default), authority zones are processed +after the cache lookup, just before going to the network to fetch +information for recursion. +When used in this manner they provide a local copy of an authority server +that speeds up lookups for that data during resolving. +.LP +If both options are enabled (default), client queries for an authority zone are +answered authoritatively from Unbound, while internal queries that require data +from the authority zone consult the local zone data instead of going to the +network. +.LP +An interesting configuration is \fBfor\-downstream:\fR \fIno\fR, +\fBfor\-upstream:\fR \fIyes\fR that allows for hyperlocal behavior where both +client and internal queries consult the local zone data while resolving. +In this case, the aforementioned CNAME example will result in a thoroughly +resolved answer. .LP Authority zones can be read from zonefile. And can be kept updated via AXFR and IXFR. After update the zonefile is rewritten. The update mechanism @@ -2027,8 +2401,8 @@ With allow\-notify you can specify additional sources of notifies. When notified, the server attempts to first probe and then zone transfer. If the notify is from a primary, it first attempts that primary. Otherwise other primaries are attempted. If there are no primaries, but only urls, the -file is downloaded when notified. The primaries from primary: statements are -allowed notify by default. +file is downloaded when notified. The primaries from primary: and url: +statements are allowed notify by default. .TP .B fallback\-enabled: \fI<yes or no> Default no. If enabled, Unbound falls back to querying the internet as @@ -2151,8 +2525,8 @@ The dynamic library file to load. Repeat this option for every dynlib module instance added to the \fBmodule\-config:\fR option. .SS "DNS64 Module Options" .LP -The dns64 module must be configured in the \fBmodule\-config:\fR "dns64 -validator iterator" directive and be compiled into the daemon to be +The dns64 module must be configured in the \fBmodule\-config:\fR directive +e.g., "dns64 validator iterator" and be compiled into the daemon to be enabled. These settings go in the \fBserver:\fR section. .TP .B dns64\-prefix: \fI<IPv6 prefix>\fR @@ -2168,6 +2542,21 @@ List domain for which the AAAA records are ignored and the A record is used by dns64 processing instead. Can be entered multiple times, list a new domain for which it applies, one per line. Applies also to names underneath the name given. +.SS "NAT64 Operation" +.LP +NAT64 operation allows using a NAT64 prefix for outbound requests to IPv4-only +servers. It is controlled by two options in the \fBserver:\fR section: +.TP +.B do\-nat64: \fI<yes or no>\fR +Use NAT64 to reach IPv4-only servers. +Consider also enabling \fBprefer\-ip6\fR to prefer native IPv6 connections to +nameservers. +Default no. +.TP +.B nat64\-prefix: \fI<IPv6 prefix>\fR +Use a specific NAT64 prefix to reach IPv4-only servers. Defaults to using +the prefix configured in \fBdns64\-prefix\fR, which in turn defaults to +64:ff9b::/96. The prefix length must be one of /32, /40, /48, /56, /64 or /96. .SS "DNSCrypt Options" .LP The @@ -2237,8 +2626,8 @@ in the dnscrypt nonce cache. Close to the number of cpus is a fairly good setting. .SS "EDNS Client Subnet Module Options" .LP -The ECS module must be configured in the \fBmodule\-config:\fR "subnetcache -validator iterator" directive and be compiled into the daemon to be +The ECS module must be configured in the \fBmodule\-config:\fR directive e.g., +"subnetcache validator iterator" and be compiled into the daemon to be enabled. These settings go in the \fBserver:\fR section. .LP If the destination address is allowed in the configuration Unbound will add the @@ -2258,6 +2647,18 @@ The maximum size of the ECS cache is controlled by 'msg-cache-size' in the configuration file. On top of that, for each query only 100 different subnets are allowed to be stored for each address family. Exceeding that number, older entries will be purged from cache. +.LP +Note that due to the nature of how EDNS Client Subnet works, by segregating the +client IP space in order to try and have tailored responses for prefixes of +unknown sizes, resolution and cache response performance are impacted as a +result. +Usage of the subnetcache module should only be enabled in installations that +require such functionality where the resolver and the clients belong to +different networks. +An example of that is an open resolver installation. +.LP +This module does not interact with the \fBserve\-expired*\fR and +\fBprefetch:\fR options. .TP .B send\-client\-subnet: \fI<IP address>\fR Send client source address to this authority. Append /num to indicate a @@ -2306,8 +2707,8 @@ Specifies the maximum number of subnets ECS answers kept in the ECS radix tree. This number applies for each qname/qclass/qtype tuple. Defaults to 100. .SS "Opportunistic IPsec Support Module Options" .LP -The IPsec module must be configured in the \fBmodule\-config:\fR "ipsecmod -validator iterator" directive and be compiled into Unbound by using +The IPsec module must be configured in the \fBmodule\-config:\fR directive +e.g., "ipsecmod validator iterator" and be compiled into Unbound by using \fB\-\-enable\-ipsecmod\fR to be enabled. These settings go in the \fBserver:\fR section. .LP @@ -2372,12 +2773,12 @@ Allow the ipsecmod functionality for the domain so that the module logic will be executed. Can be given multiple times, for different domains. If the option is not specified, all domains are treated as being allowed (default). .TP -.B ipsecmod\-whitelist: \fI<yes or no> +.B ipsecmod\-whitelist: \fI<domain> Alternate syntax for \fBipsecmod\-allow\fR. .SS "Cache DB Module Options" .LP -The Cache DB module must be configured in the \fBmodule\-config:\fR -"validator cachedb iterator" directive and be compiled into the daemon +The Cache DB module must be configured in the \fBmodule\-config:\fR directive +e.g., "validator cachedb iterator" and be compiled into the daemon with \fB\-\-enable\-cachedb\fR. If this module is enabled and configured, the specified backend database works as a second level cache: @@ -2389,11 +2790,7 @@ If Unbound cannot even find an answer in the backend, it resolves the query as usual, and stores the answer in the backend. .P This module interacts with the \fBserve\-expired\-*\fR options and will reply -with expired data if Unbound is configured for that. Currently the use -of \fBserve\-expired\-client\-timeout:\fR and -\fBserve\-expired\-reply\-ttl:\fR is not consistent for data originating from -the external cache as these will result in a reply with 0 TTL without trying to -update the data first, ignoring the configured values. +with expired data if Unbound is configured for that. .P If Unbound was built with \fB\-\-with\-libhiredis\fR @@ -2444,6 +2841,21 @@ operationally. If the backend database is shared by multiple Unbound instances, all instances must use the same secret seed. This option defaults to "default". +.TP +.B cachedb-no-store: \fI<yes or no>\fR +If the backend should be read from, but not written to. This makes this +instance not store dns messages in the backend. But if data is available it +is retrieved. The default is no. +.TP +.B cachedb-check-when-serve-expired: \fI<yes or no>\fR +If enabled, the cachedb is checked before an expired response is returned. +When \fBserve\-expired\fR is enabled, without \fBserve\-expired\-client\-timeout\fR, it then +does not immediately respond with an expired response from cache, but instead +first checks the cachedb for valid contents, and if so returns it. If the +cachedb also has no valid contents, the serve expired response is sent. +If also \fBserve\-expired\-client\-timeout\fR is enabled, the expired response +is delayed until the timeout expires. Unless the lookup succeeds within the +timeout. The default is yes. .P The following .B cachedb @@ -2460,6 +2872,16 @@ This option defaults to "127.0.0.1". The TCP port number of the Redis server. This option defaults to 6379. .TP +.B redis-server-path: \fI<unix socket path>\fR +The unix socket path to connect to the Redis server. Off by default, and it +can be set to "" to turn this off. Unix sockets may have better throughput +than the IP address option. +.TP +.B redis-server-password: \fI"<password>"\fR +The Redis AUTH password to use for the Redis server. +Only relevant if Redis is configured for client password authorisation. +Off by default, and it can be set to "" to turn this off. +.TP .B redis-timeout: \fI<msec>\fR The period until when Unbound waits for a response from the Redis sever. If this timeout expires Unbound closes the connection, treats it as @@ -2467,6 +2889,16 @@ if the Redis server does not have the requested data, and will try to re-establish a new connection later. This option defaults to 100 milliseconds. .TP +.B redis-command-timeout: \fI<msec>\fR +The timeout to use for Redis commands, in milliseconds. +If 0, it uses the \fBredis\-timeout\fR value. +The default is 0. +.TP +.B redis-connect-timeout: \fI<msec>\fR +The timeout to use for Redis connection set up, in milliseconds. +If 0, it uses the \fBredis\-timeout\fR value. +The default is 0. +.TP .B redis-expire-records: \fI<yes or no> If Redis record expiration is enabled. If yes, Unbound sets timeout for Redis records so that Redis can evict keys that have expired automatically. If @@ -2474,6 +2906,63 @@ Unbound is configured with \fBserve-expired\fR and \fBserve-expired-ttl\fR is 0, this option is internally reverted to "no". Redis SETEX support is required for this option (Redis >= 2.0.0). This option defaults to no. +.TP +.B redis-logical-db: \fI<logical database index> +The logical database in Redis to use. +These are databases in the same Redis instance sharing the same configuration +and persisted in the same RDB/AOF file. +If unsure about using this option, Redis documentation +(https://redis.io/commands/select/) suggests not to use a single Redis instance +for multiple unrelated applications. +The default database in Redis is 0 while other logical databases need to be +explicitly SELECT'ed upon connecting. +This option defaults to 0. +.TP +.B redis-replica-server-host: \fI<server address or name>\fR +The IP (either v6 or v4) address or domain name of the Redis replica server. +In general an IP address should be specified as otherwise Unbound will have to +resolve the name of the server every time it establishes a connection +to the server. +This server is treated as a read-only replica server +(https://redis.io/docs/management/replication/#read-only-replica). +If specified, all Redis read commands will go to this replica server, while +the write commands will go to the \fBredis-server-host\fR. +This option defaults to "" (disabled). +.TP +.B redis-replica-server-port: \fI<port number>\fR +The TCP port number of the Redis replica server. +This option defaults to 6379. +.TP +.B redis-replica-server-path: \fI<unix socket path>\fR +The unix socket path to connect to the Redis server. Off by default, and it +can be set to "" to turn this off. Unix sockets may have better throughput +than the IP address option. +.TP +.B redis-replica-server-password: \fI"<password>"\fR +The Redis AUTH password to use for the Redis replica server. +Only relevant if Redis is configured for client password authorisation. +Off by default, and it can be set to "" to turn this off. +.TP +.B redis-replica-timeout: \fI<msec>\fR +The period until when Unbound waits for a response from the Redis replica sever. +If this timeout expires Unbound closes the connection, treats it as +if the Redis replica server does not have the requested data, and will try to +re-establish a new connection later. +This option defaults to 100 milliseconds. +.TP +.B redis-replica-command-timeout: \fI<msec>\fR +The timeout to use for Redis replica commands, in milliseconds. +If 0, it uses the \fBredis\-replica\-timeout\fR value. +The default is 0. +.TP +.B redis-replica-connect-timeout: \fI<msec>\fR +The timeout to use for Redis replica connection set up, in milliseconds. +If 0, it uses the \fBredis\-replica\-timeout\fR value. +The default is 0. +.TP +.B redis-replica-logical-db: \fI<logical database index> +Same as \fBredis-logical-db\fR but for the Redis replica server. +This option defaults to 0. .SS DNSTAP Logging Options DNSTAP support, when compiled in by using \fB\-\-enable\-dnstap\fR, is enabled in the \fBdnstap:\fR section. @@ -2493,7 +2982,7 @@ yes. .TP .B dnstap-socket-path: \fI<file name> Sets the unix socket file name for connecting to the server that is -listening on that socket. Default is "@DNSTAP_SOCKET_PATH@". +listening on that socket. Default is "". .TP .B dnstap-ip: \fI<IPaddress[@port]> If "", the unix socket is used, if set with an IP address (IPv4 or IPv6) @@ -2534,6 +3023,13 @@ Default is "". The version to send with messages, if "" the package version is used. Default is "". .TP +.B dnstap-sample-rate: \fI<number> +The sample rate for log of messages, it logs only 1/N messages. With 0 it +is disabled. Default is 0. This is useful in a high volume environment, +where log functionality would otherwise not be reliable. For example 10 +would spend only 1/10th time on logging, and 100 would only spend a +hundredth of the time on logging. +.TP .B dnstap-log-resolver-query-messages: \fI<yes or no> Enable to log resolver query messages. Default is no. These are messages from Unbound to upstream servers. @@ -2558,9 +3054,11 @@ Enable to log forwarder response messages. Default is no. .SS Response Policy Zone Options .LP Response Policy Zones are configured with \fBrpz:\fR, and each one must have a -\fBname:\fR. There can be multiple ones, by listing multiple rpz clauses, each -with a different name. RPZ clauses are applied in order of configuration. The -\fBrespip\fR module needs to be added to the \fBmodule-config\fR, e.g.: +\fBname:\fR. There can be multiple ones, by listing multiple RPZ clauses, each +with a different name. RPZ clauses are applied in order of configuration and +any match from an earlier RPZ zone will terminate the RPZ lookup. Note that a +PASSTHRU action is still considered a match. +The \fBrespip\fR module needs to be added to the \fBmodule-config\fR, e.g.: \fBmodule-config: "respip validator iterator"\fR. .P QNAME, Response IP Address, nsdname, nsip and clientip triggers are supported. @@ -2568,12 +3066,13 @@ Supported actions are: NXDOMAIN, NODATA, PASSTHRU, DROP, Local Data, tcp\-only and drop. RPZ QNAME triggers are applied after \fBlocal\-zones\fR and before \fBauth\-zones\fR. .P -The rpz zone is formatted with a SOA start record as usual. The items in -the zone are entries, that specify what to act on (the trigger) and what to -do (the action). The trigger to act on is recorded in the name, the action -to do is recorded as the resource record. The names all end in the zone -name, so you could type the trigger names without a trailing dot in the -zonefile. +The RPZ zone is a regular DNS zone formatted with a SOA start record as usual. +The items in the zone are entries, that specify what to act on (the trigger) +and what to do (the action). +The trigger to act on is recorded in the name, the action to do is recorded as +the resource record. +The names all end in the zone name, so you could type the trigger names without +a trailing dot in the zonefile. .P An example RPZ record, that answers example.com with NXDOMAIN .nf @@ -2642,8 +3141,8 @@ With allow\-notify you can specify additional sources of notifies. When notified, the server attempts to first probe and then zone transfer. If the notify is from a primary, it first attempts that primary. Otherwise other primaries are attempted. If there are no primaries, but only urls, the -file is downloaded when notified. The primaries from primary: statements are -allowed notify by default. +file is downloaded when notified. The primaries from primary: and url: +statements are allowed notify by default. .TP .B zonefile: \fI<filename> The filename where the zone is stored. If not given then no zonefile is used. @@ -2673,7 +3172,7 @@ externally blocked. Default is no. If enabled the zone is authoritatively answered for and queries for the RPZ zone information are answered to downstream clients. This is useful for monitoring scripts, that can then access the SOA information to check if -the rpz information is up to date. Default is no. +the RPZ information is up to date. Default is no. .TP .B tags: \fI<list of tags> Limit the policies from this RPZ clause to clients with a matching tag. Tags @@ -2714,18 +3213,18 @@ server: .fi .SH "FILES" .TP -.I @UNBOUND_RUN_DIR@ +.I /var/unbound default Unbound working directory. .TP -.I @UNBOUND_CHROOT_DIR@ +.I /var/unbound default \fIchroot\fR(2) location. .TP -.I @ub_conf_file@ +.I /var/unbound/unbound.conf Unbound configuration file. .TP -.I @UNBOUND_PIDFILE@ +.I /var/unbound/unbound.pid default Unbound pidfile with process ID of the running daemon. .TP .I unbound.log diff --git a/contrib/unbound/doc/unbound.conf.5.in b/contrib/unbound/doc/unbound.conf.5.in index 4484267dbc79..46af53802479 100644 --- a/contrib/unbound/doc/unbound.conf.5.in +++ b/contrib/unbound/doc/unbound.conf.5.in @@ -1,4 +1,4 @@ -.TH "unbound.conf" "5" "Apr 24, 2025" "NLnet Labs" "unbound 1.23.0" +.TH "unbound.conf" "5" "Jul 16, 2025" "NLnet Labs" "unbound 1.23.1" .\" .\" unbound.conf.5 -- unbound.conf manual .\" diff --git a/contrib/unbound/edns-subnet/subnetmod.c b/contrib/unbound/edns-subnet/subnetmod.c index ead720f34006..c5e215b8b684 100644 --- a/contrib/unbound/edns-subnet/subnetmod.c +++ b/contrib/unbound/edns-subnet/subnetmod.c @@ -51,6 +51,7 @@ #include "services/cache/dns.h" #include "util/module.h" #include "util/regional.h" +#include "util/fptr_wlist.h" #include "util/storage/slabhash.h" #include "util/config_file.h" #include "util/data/msgreply.h" @@ -155,7 +156,8 @@ int ecs_whitelist_check(struct query_info* qinfo, /* Cache by default, might be disabled after parsing EDNS option * received from nameserver. */ - if(!iter_stub_fwd_no_cache(qstate, &qstate->qinfo, NULL, NULL, NULL, 0)) { + if(!iter_stub_fwd_no_cache(qstate, &qstate->qinfo, NULL, NULL, NULL, 0) + && sq->ecs_client_in.subnet_validdata) { qstate->no_cache_store = 0; } @@ -522,6 +524,69 @@ common_prefix(uint8_t *a, uint8_t *b, uint8_t net) return !memcmp(a, b, n) && ((net % 8) == 0 || a[n] == b[n]); } +/** + * Create sub request that looks up the query. + * @param qstate: query state + * @param sq: subnet qstate + * @return false on failure. + */ +static int +generate_sub_request(struct module_qstate *qstate, struct subnet_qstate* sq) +{ + struct module_qstate* subq = NULL; + uint16_t qflags = 0; /* OPCODE QUERY, no flags */ + int prime = 0; + int valrec = 0; + struct query_info qinf; + qinf.qname = qstate->qinfo.qname; + qinf.qname_len = qstate->qinfo.qname_len; + qinf.qtype = qstate->qinfo.qtype; + qinf.qclass = qstate->qinfo.qclass; + qinf.local_alias = NULL; + + qflags |= BIT_RD; + if((qstate->query_flags & BIT_CD)!=0) { + qflags |= BIT_CD; + valrec = 1; + } + + fptr_ok(fptr_whitelist_modenv_attach_sub(qstate->env->attach_sub)); + if(!(*qstate->env->attach_sub)(qstate, &qinf, qflags, prime, valrec, + &subq)) { + return 0; + } + if(subq) { + /* It is possible to access the subquery module state. */ + if(sq->ecs_client_in.subnet_source_mask == 0 && + edns_opt_list_find(qstate->edns_opts_front_in, + qstate->env->cfg->client_subnet_opcode)) { + subq->no_cache_store = 1; + } + } + return 1; +} + +/** + * Perform the query without subnet + * @param qstate: query state + * @param sq: subnet qstate + * @return module state + */ +static enum module_ext_state +generate_lookup_without_subnet(struct module_qstate *qstate, + struct subnet_qstate* sq) +{ + verbose(VERB_ALGO, "subnetcache: make subquery to look up without subnet"); + if(!generate_sub_request(qstate, sq)) { + verbose(VERB_ALGO, "Could not generate sub query"); + qstate->return_rcode = LDNS_RCODE_FORMERR; + qstate->return_msg = NULL; + return module_finished; + } + sq->wait_subquery = 1; + return module_wait_subquery; +} + static enum module_ext_state eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) { @@ -557,14 +622,7 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) * is still useful to put it in the edns subnet cache for * when a client explicitly asks for subnet specific answer. */ verbose(VERB_QUERY, "subnetcache: Authority indicates no support"); - if(!sq->started_no_cache_store) { - lock_rw_wrlock(&sne->biglock); - update_cache(qstate, id); - lock_rw_unlock(&sne->biglock); - } - if (sq->subnet_downstream) - cp_edns_bad_response(c_out, c_in); - return module_finished; + return generate_lookup_without_subnet(qstate, sq); } /* Purposefully there was no sent subnet, and there is consequently @@ -589,14 +647,14 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) !common_prefix(s_out->subnet_addr, s_in->subnet_addr, s_out->subnet_source_mask)) { - /* we can not accept, restart query without option */ + /* we can not accept, perform query without option */ verbose(VERB_QUERY, "subnetcache: forged data"); s_out->subnet_validdata = 0; (void)edns_opt_list_remove(&qstate->edns_opts_back_out, qstate->env->cfg->client_subnet_opcode); sq->subnet_sent = 0; sq->subnet_sent_no_subnet = 0; - return module_restart_next; + return generate_lookup_without_subnet(qstate, sq); } lock_rw_wrlock(&sne->biglock); @@ -795,6 +853,9 @@ ecs_edns_back_parsed(struct module_qstate* qstate, int id, } else if(sq->subnet_sent_no_subnet) { /* The answer can be stored as scope 0, not in global cache. */ qstate->no_cache_store = 1; + } else if(sq->subnet_sent) { + /* Need another query to be able to store in global cache. */ + qstate->no_cache_store = 1; } return 1; @@ -812,6 +873,32 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, strmodulevent(event)); log_query_info(VERB_QUERY, "subnetcache operate: query", &qstate->qinfo); + if(sq && sq->wait_subquery_done) { + /* The subquery lookup returned. */ + if(sq->ecs_client_in.subnet_source_mask == 0 && + edns_opt_list_find(qstate->edns_opts_front_in, + qstate->env->cfg->client_subnet_opcode)) { + if(!sq->started_no_cache_store && + qstate->return_msg) { + lock_rw_wrlock(&sne->biglock); + update_cache(qstate, id); + lock_rw_unlock(&sne->biglock); + } + if (sq->subnet_downstream) + cp_edns_bad_response(&sq->ecs_client_out, + &sq->ecs_client_in); + /* It is a scope zero lookup, append edns subnet + * option to the querier. */ + subnet_ecs_opt_list_append(&sq->ecs_client_out, + &qstate->edns_opts_front_out, qstate, + qstate->region); + } + sq->wait_subquery_done = 0; + qstate->ext_state[id] = module_finished; + qstate->no_cache_store = sq->started_no_cache_store; + qstate->no_cache_lookup = sq->started_no_cache_lookup; + return; + } if((event == module_event_new || event == module_event_pass) && sq == NULL) { struct edns_option* ecs_opt; @@ -822,6 +909,8 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, } sq = (struct subnet_qstate*)qstate->minfo[id]; + if(sq->wait_subquery) + return; /* Wait for that subquery to return */ if((ecs_opt = edns_opt_list_find( qstate->edns_opts_front_in, @@ -851,6 +940,14 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, /* No clients are interested in result or we could not * parse it, we don't do client subnet */ sq->ecs_server_out.subnet_validdata = 0; + if(edns_opt_list_find(qstate->edns_opts_front_in, + qstate->env->cfg->client_subnet_opcode)) { + /* aggregated this deaggregated state */ + qstate->ext_state[id] = + generate_lookup_without_subnet( + qstate, sq); + return; + } verbose(VERB_ALGO, "subnetcache: pass to next module"); qstate->ext_state[id] = module_wait_module; return; @@ -891,6 +988,14 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, } lock_rw_unlock(&sne->biglock); } + if(sq->ecs_client_in.subnet_source_mask == 0 && + edns_opt_list_find(qstate->edns_opts_front_in, + qstate->env->cfg->client_subnet_opcode)) { + /* client asked for resolution without edns subnet */ + qstate->ext_state[id] = generate_lookup_without_subnet( + qstate, sq); + return; + } sq->ecs_server_out.subnet_addr_fam = sq->ecs_client_in.subnet_addr_fam; @@ -927,6 +1032,8 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, qstate->ext_state[id] = module_wait_module; return; } + if(sq && sq->wait_subquery) + return; /* Wait for that subquery to return */ /* Query handed back by next module, we have a 'final' answer */ if(sq && event == module_event_moddone) { qstate->ext_state[id] = eval_response(qstate, id, sq); @@ -975,10 +1082,27 @@ subnetmod_clear(struct module_qstate *ATTR_UNUSED(qstate), } void -subnetmod_inform_super(struct module_qstate *ATTR_UNUSED(qstate), - int ATTR_UNUSED(id), struct module_qstate *ATTR_UNUSED(super)) +subnetmod_inform_super(struct module_qstate *qstate, int id, + struct module_qstate *super) { - /* Not used */ + struct subnet_qstate* super_sq = + (struct subnet_qstate*)super->minfo[id]; + log_query_info(VERB_ALGO, "subnetcache inform_super: query", + &super->qinfo); + super_sq->wait_subquery = 0; + super_sq->wait_subquery_done = 1; + if(qstate->return_rcode != LDNS_RCODE_NOERROR || + !qstate->return_msg) { + super->return_msg = NULL; + super->return_rcode = LDNS_RCODE_SERVFAIL; + return; + } + super->return_rcode = LDNS_RCODE_NOERROR; + super->return_msg = dns_copy_msg(qstate->return_msg, super->region); + if(!super->return_msg) { + log_err("subnetcache: copy response, out of memory"); + super->return_rcode = LDNS_RCODE_SERVFAIL; + } } size_t diff --git a/contrib/unbound/edns-subnet/subnetmod.h b/contrib/unbound/edns-subnet/subnetmod.h index 1ff8a23ecdba..3893820fabaf 100644 --- a/contrib/unbound/edns-subnet/subnetmod.h +++ b/contrib/unbound/edns-subnet/subnetmod.h @@ -102,6 +102,10 @@ struct subnet_qstate { int started_no_cache_store; /** has the subnet module been started with no_cache_lookup? */ int started_no_cache_lookup; + /** Wait for subquery that has been started for nonsubnet lookup. */ + int wait_subquery; + /** The subquery waited for is done. */ + int wait_subquery_done; }; void subnet_data_delete(void* d, void* ATTR_UNUSED(arg)); diff --git a/contrib/unbound/ltmain.sh b/contrib/unbound/ltmain.sh index 7f3523d335c5..3e6a3db3a5a1 100644 --- a/contrib/unbound/ltmain.sh +++ b/contrib/unbound/ltmain.sh @@ -1,12 +1,12 @@ -#! /bin/sh +#! /usr/bin/env sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in -## by inline-source v2014-01-03.01 +## by inline-source v2019-02-19.15 -# libtool (GNU libtool) 2.4.6 +# libtool (GNU libtool) 2.5.4 # Provide generalized library-building support services. # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 -# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# Copyright (C) 1996-2019, 2021-2024 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -31,8 +31,8 @@ PROGRAM=libtool PACKAGE=libtool -VERSION=2.4.6 -package_revision=2.4.6 +VERSION=2.5.4 +package_revision=2.5.4 ## ------ ## @@ -64,34 +64,25 @@ package_revision=2.4.6 # libraries, which are installed to $pkgauxdir. # Set a version string for this script. -scriptversion=2015-01-20.17; # UTC +scriptversion=2019-02-19.15; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 -# Copyright (C) 2004-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. - -# As a special exception to the GNU General Public License, if you distribute -# this file as part of a program or library that is built using GNU Libtool, -# you may include this file under the same distribution terms that you use -# for the rest of that program. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# This is free software. There is NO warranty; not even for +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Copyright (C) 2004-2019, 2021, 2023-2024 Bootstrap Authors +# +# This file is dual licensed under the terms of the MIT license +# <https://opensource.org/licenses/MIT>, and GPL version 2 or later +# <https://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of +# these licenses when using or redistributing this software or any of +# the files within it. See the URLs above, or the file `LICENSE` +# included in the Bootstrap distribution for the full license texts. -# Please report bugs or propose patches to gary@gnu.org. +# Please report bugs or propose patches to: +# <https://github.com/gnulib-modules/bootstrap/issues> ## ------ ## @@ -139,9 +130,12 @@ do _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# These NLS vars are set unconditionally (bootstrap issue #24). Unset those +# in case the environment reset is needed later and the $save_* variant is not +# defined (see the code above). +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL # Make sure IFS has a sensible default sp=' ' @@ -149,7 +143,7 @@ nl=' ' IFS="$sp $nl" -# There are apparently some retarded systems that use ';' as a PATH separator! +# There are apparently some systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { @@ -159,6 +153,26 @@ if test "${PATH_SEPARATOR+set}" != set; then fi +# func_unset VAR +# -------------- +# Portably unset VAR. +# In some shells, an 'unset VAR' statement leaves a non-zero return +# status if VAR is already unset, which might be problematic if the +# statement is used at the end of a function (thus poisoning its return +# value) or when 'set -e' is active (causing even a spurious abort of +# the script in this case). +func_unset () +{ + { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } +} + + +# Make sure CDPATH doesn't cause `cd` commands to output the target dir. +func_unset CDPATH + +# Make sure ${,E,F}GREP behave sanely. +func_unset GREP_OPTIONS + ## ------------------------- ## ## Locate command utilities. ## @@ -259,7 +273,7 @@ test -z "$SED" && { rm -f conftest.in conftest.tmp conftest.nl conftest.out } - func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" rm -f conftest.sed SED=$func_path_progs_result } @@ -295,7 +309,7 @@ test -z "$GREP" && { rm -f conftest.in conftest.tmp conftest.nl conftest.out } - func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" GREP=$func_path_progs_result } @@ -360,6 +374,35 @@ sed_double_backslash="\ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" +# require_check_ifs_backslash +# --------------------------- +# Check if we can use backslash as IFS='\' separator, and set +# $check_ifs_backshlash_broken to ':' or 'false'. +require_check_ifs_backslash=func_require_check_ifs_backslash +func_require_check_ifs_backslash () +{ + _G_save_IFS=$IFS + IFS='\' + _G_check_ifs_backshlash='a\\b' + for _G_i in $_G_check_ifs_backshlash + do + case $_G_i in + a) + check_ifs_backshlash_broken=false + ;; + '') + break + ;; + *) + check_ifs_backshlash_broken=: + break + ;; + esac + done + IFS=$_G_save_IFS + require_check_ifs_backslash=: +} + ## ----------------- ## ## Global variables. ## @@ -546,7 +589,7 @@ func_require_term_colors () # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is - # useable or anything else if it does not work. + # usable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes @@ -580,16 +623,16 @@ if test yes = "$_G_HAVE_PLUSEQ_OP"; then { $debug_cmd - func_quote_for_eval "$2" - eval "$1+=\\ \$func_quote_for_eval_result" + func_quote_arg pretty "$2" + eval "$1+=\\ \$func_quote_arg_result" }' else func_append_quoted () { $debug_cmd - func_quote_for_eval "$2" - eval "$1=\$$1\\ \$func_quote_for_eval_result" + func_quote_arg pretty "$2" + eval "$1=\$$1\\ \$func_quote_arg_result" } fi @@ -696,7 +739,7 @@ eval 'func_dirname () # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. -# value retuned in "$func_basename_result" +# value returned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () @@ -854,7 +897,7 @@ func_mkdir_p () # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. + # list in case some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done @@ -1091,85 +1134,203 @@ func_relative_path () } -# func_quote_for_eval ARG... -# -------------------------- -# Aesthetically quote ARGs to be evaled later. -# This function returns two values: -# i) func_quote_for_eval_result -# double-quoted, suitable for a subsequent eval -# ii) func_quote_for_eval_unquoted_result -# has all characters that are still active within double -# quotes backslashified. -func_quote_for_eval () +# func_quote_portable EVAL ARG +# ---------------------------- +# Internal function to portably implement func_quote_arg. Note that we still +# keep attention to performance here so we as much as possible try to avoid +# calling sed binary (so far O(N) complexity as long as func_append is O(1)). +func_quote_portable () { $debug_cmd - func_quote_for_eval_unquoted_result= - func_quote_for_eval_result= - while test 0 -lt $#; do - case $1 in - *[\\\`\"\$]*) - _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; - *) - _G_unquoted_arg=$1 ;; - esac - if test -n "$func_quote_for_eval_unquoted_result"; then - func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" - else - func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + $require_check_ifs_backslash + + func_quote_portable_result=$2 + + # one-time-loop (easy break) + while true + do + if $1; then + func_quote_portable_result=`$ECHO "$2" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` + break fi - case $_G_unquoted_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and variable expansion - # for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_quoted_arg=\"$_G_unquoted_arg\" + # Quote for eval. + case $func_quote_portable_result in + *[\\\`\"\$]*) + # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string + # contains the shell wildcard characters. + case $check_ifs_backshlash_broken$func_quote_portable_result in + :*|*[\[\*\?]*) + func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ + | $SED "$sed_quote_subst"` + break + ;; + esac + + func_quote_portable_old_IFS=$IFS + for _G_char in '\' '`' '"' '$' + do + # STATE($1) PREV($2) SEPARATOR($3) + set start "" "" + func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy + IFS=$_G_char + for _G_part in $func_quote_portable_result + do + case $1 in + quote) + func_append func_quote_portable_result "$3$2" + set quote "$_G_part" "\\$_G_char" + ;; + start) + set first "" "" + func_quote_portable_result= + ;; + first) + set quote "$_G_part" "" + ;; + esac + done + done + IFS=$func_quote_portable_old_IFS ;; - *) - _G_quoted_arg=$_G_unquoted_arg - ;; + *) ;; esac - - if test -n "$func_quote_for_eval_result"; then - func_append func_quote_for_eval_result " $_G_quoted_arg" - else - func_append func_quote_for_eval_result "$_G_quoted_arg" - fi - shift + break done + + func_quote_portable_unquoted_result=$func_quote_portable_result + case $func_quote_portable_result in + # double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # many bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_portable_result=\"$func_quote_portable_result\" + ;; + esac } -# func_quote_for_expand ARG -# ------------------------- -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - $debug_cmd +# func_quotefast_eval ARG +# ----------------------- +# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', +# but optimized for speed. Result is stored in $func_quotefast_eval. +if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then + printf -v _GL_test_printf_tilde %q '~' + if test '\~' = "$_GL_test_printf_tilde"; then + func_quotefast_eval () + { + printf -v func_quotefast_eval_result %q "$1" + } + else + # Broken older Bash implementations. Make those faster too if possible. + func_quotefast_eval () + { + case $1 in + '~'*) + func_quote_portable false "$1" + func_quotefast_eval_result=$func_quote_portable_result + ;; + *) + printf -v func_quotefast_eval_result %q "$1" + ;; + esac + } + fi +else + func_quotefast_eval () + { + func_quote_portable false "$1" + func_quotefast_eval_result=$func_quote_portable_result + } +fi - case $1 in - *[\\\`\"]*) - _G_arg=`$ECHO "$1" | $SED \ - -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; - *) - _G_arg=$1 ;; + +# func_quote_arg MODEs ARG +# ------------------------ +# Quote one ARG to be evaled later. MODEs argument may contain zero or more +# specifiers listed below separated by ',' character. This function returns two +# values: +# i) func_quote_arg_result +# double-quoted (when needed), suitable for a subsequent eval +# ii) func_quote_arg_unquoted_result +# has all characters that are still active within double +# quotes backslashified. Available only if 'unquoted' is specified. +# +# Available modes: +# ---------------- +# 'eval' (default) +# - escape shell special characters +# 'expand' +# - the same as 'eval'; but do not quote variable references +# 'pretty' +# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might +# be used later in func_quote to get output like: 'echo "a b"' instead +# of 'echo a\ b'. This is slower than default on some shells. +# 'unquoted' +# - produce also $func_quote_arg_unquoted_result which does not contain +# wrapping double-quotes. +# +# Examples for 'func_quote_arg pretty,unquoted string': +# +# string | *_result | *_unquoted_result +# ------------+-----------------------+------------------- +# " | \" | \" +# a b | "a b" | a b +# "a b" | "\"a b\"" | \"a b\" +# * | "*" | * +# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" +# +# Examples for 'func_quote_arg pretty,unquoted,expand string': +# +# string | *_result | *_unquoted_result +# --------------+---------------------+-------------------- +# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" +func_quote_arg () +{ + _G_quote_expand=false + case ,$1, in + *,expand,*) + _G_quote_expand=: + ;; esac - case $_G_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_arg=\"$_G_arg\" + case ,$1, in + *,pretty,*|*,expand,*|*,unquoted,*) + func_quote_portable $_G_quote_expand "$2" + func_quote_arg_result=$func_quote_portable_result + func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result + ;; + *) + # Faster quote-for-eval for some shells. + func_quotefast_eval "$2" + func_quote_arg_result=$func_quotefast_eval_result ;; esac +} - func_quote_for_expand_result=$_G_arg + +# func_quote MODEs ARGs... +# ------------------------ +# Quote all ARGs to be evaled later and join them into single command. See +# func_quote_arg's description for more info. +func_quote () +{ + $debug_cmd + _G_func_quote_mode=$1 ; shift + func_quote_result= + while test 0 -lt $#; do + func_quote_arg "$_G_func_quote_mode" "$1" + if test -n "$func_quote_result"; then + func_append func_quote_result " $func_quote_arg_result" + else + func_append func_quote_result "$func_quote_arg_result" + fi + shift + done } @@ -1215,8 +1376,8 @@ func_show_eval () _G_cmd=$1 _G_fail_exp=${2-':'} - func_quote_for_expand "$_G_cmd" - eval "func_notquiet $func_quote_for_expand_result" + func_quote_arg pretty,expand "$_G_cmd" + eval "func_notquiet $func_quote_arg_result" $opt_dry_run || { eval "$_G_cmd" @@ -1241,8 +1402,8 @@ func_show_eval_locale () _G_fail_exp=${2-':'} $opt_quiet || { - func_quote_for_expand "$_G_cmd" - eval "func_echo $func_quote_for_expand_result" + func_quote_arg expand,pretty "$_G_cmd" + eval "func_echo $func_quote_arg_result" } $opt_dry_run || { @@ -1369,30 +1530,26 @@ func_lt_ver () # End: #! /bin/sh -# Set a version string for this script. -scriptversion=2014-01-07.03; # UTC - # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 -# Copyright (C) 2010-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# This is free software. There is NO warranty; not even for +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Copyright (C) 2010-2019, 2021, 2023-2024 Bootstrap Authors +# +# This file is dual licensed under the terms of the MIT license +# <https://opensource.org/licenses/MIT>, and GPL version 2 or later +# <https://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of +# these licenses when using or redistributing this software or any of +# the files within it. See the URLs above, or the file `LICENSE` +# included in the Bootstrap distribution for the full license texts. -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Please report bugs or propose patches to: +# <https://github.com/gnulib-modules/bootstrap/issues> -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Please report bugs or propose patches to gary@gnu.org. +# Set a version string for this script. +scriptversion=2019-02-19.15; # UTC ## ------ ## @@ -1415,7 +1572,7 @@ scriptversion=2014-01-07.03; # UTC # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file -# starting with '# Written by ' and ending with '# warranty; '. +# starting with '# Written by ' and ending with '# Copyright'. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the @@ -1427,7 +1584,7 @@ scriptversion=2014-01-07.03; # UTC # to display verbose messages only when your user has specified # '--verbose'. # -# After sourcing this file, you can plug processing for additional +# After sourcing this file, you can plug in processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. @@ -1476,8 +1633,8 @@ fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## # This section contains functions for adding, removing, and running hooks -# to the main code. A hook is just a named list of of function, that can -# be run in order later on. +# in the main code. A hook is just a list of function names that can be +# run in order later on. # func_hookable FUNC_NAME # ----------------------- @@ -1510,7 +1667,8 @@ func_add_hook () # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ -# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +# Remove HOOK_FUNC from the list of hook functions to be called by +# FUNC_NAME. func_remove_hook () { $debug_cmd @@ -1519,10 +1677,28 @@ func_remove_hook () } +# func_propagate_result FUNC_NAME_A FUNC_NAME_B +# --------------------------------------------- +# If the *_result variable of FUNC_NAME_A _is set_, assign its value to +# *_result variable of FUNC_NAME_B. +func_propagate_result () +{ + $debug_cmd + + func_propagate_result_result=: + if eval "test \"\${${1}_result+set}\" = set" + then + eval "${2}_result=\$${1}_result" + else + func_propagate_result_result=false + fi +} + + # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. -# It is assumed that the list of hook functions contains nothing more +# It's assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. @@ -1532,22 +1708,19 @@ func_run_hooks () case " $hookable_fns " in *" $1 "*) ;; - *) func_fatal_error "'$1' does not support hook funcions.n" ;; + *) func_fatal_error "'$1' does not support hook functions." ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do - eval $_G_hook '"$@"' - - # store returned options list back into positional - # parameters for next 'cmd' execution. - eval _G_hook_result=\$${_G_hook}_result - eval set dummy "$_G_hook_result"; shift + func_unset "${_G_hook}_result" + eval $_G_hook '${1+"$@"}' + func_propagate_result $_G_hook func_run_hooks + if $func_propagate_result_result; then + eval set dummy "$func_run_hooks_result"; shift + fi done - - func_quote_for_eval ${1+"$@"} - func_run_hooks_result=$func_quote_for_eval_result } @@ -1557,10 +1730,18 @@ func_run_hooks () ## --------------- ## # In order to add your own option parsing hooks, you must accept the -# full positional parameter list in your hook function, remove any -# options that you action, and then pass back the remaining unprocessed -# options in '<hooked_function_name>_result', escaped suitably for -# 'eval'. Like this: +# full positional parameter list from your hook function. You may remove +# or edit any options that you action, and then pass back the remaining +# unprocessed options in '<hooked_function_name>_result', escaped +# suitably for 'eval'. +# +# The '<hooked_function_name>_result' variable is automatically unset +# before your hook gets called; for best performance, only set the +# *_result variable when necessary (i.e. don't call the 'func_quote' +# function unnecessarily because it can be an expensive operation on some +# machines). +# +# Like this: # # my_options_prep () # { @@ -1570,9 +1751,8 @@ func_run_hooks () # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' -# -# func_quote_for_eval ${1+"$@"} -# my_options_prep_result=$func_quote_for_eval_result +# # No change in '$@' (ignored completely by this hook). Leave +# # my_options_prep_result variable intact. # } # func_add_hook func_options_prep my_options_prep # @@ -1581,25 +1761,36 @@ func_run_hooks () # { # $debug_cmd # -# # Note that for efficiency, we parse as many options as we can +# args_changed=false +# +# # Note that, for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in -# --silent|-s) opt_silent=: ;; +# --silent|-s) opt_silent=: +# args_changed=: +# ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift +# args_changed=: # ;; -# *) set dummy "$_G_opt" "$*"; shift; break ;; +# *) # Make sure the first unrecognised option "$_G_opt" +# # is added back to "$@" in case we need it later, +# # if $args_changed was set to 'true'. +# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # -# func_quote_for_eval ${1+"$@"} -# my_silent_option_result=$func_quote_for_eval_result +# # Only call 'func_quote' here if we processed at least one argument. +# if $args_changed; then +# func_quote eval ${1+"$@"} +# my_silent_option_result=$func_quote_result +# fi # } # func_add_hook func_parse_options my_silent_option # @@ -1610,17 +1801,26 @@ func_run_hooks () # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." -# -# func_quote_for_eval ${1+"$@"} -# my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # -# You'll alse need to manually amend $usage_message to reflect the extra +# You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. +# func_options_finish [ARG]... +# ---------------------------- +# Finishing the option parse loop (call 'func_options' hooks ATM). +func_options_finish () +{ + $debug_cmd + + func_run_hooks func_options ${1+"$@"} + func_propagate_result func_run_hooks func_options_finish +} + + # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the @@ -1630,17 +1830,27 @@ func_options () { $debug_cmd - func_options_prep ${1+"$@"} - eval func_parse_options \ - ${func_options_prep_result+"$func_options_prep_result"} - eval func_validate_options \ - ${func_parse_options_result+"$func_parse_options_result"} + _G_options_quoted=false - eval func_run_hooks func_options \ - ${func_validate_options_result+"$func_validate_options_result"} + for my_func in options_prep parse_options validate_options options_finish + do + func_unset func_${my_func}_result + func_unset func_run_hooks_result + eval func_$my_func '${1+"$@"}' + func_propagate_result func_$my_func func_options + if $func_propagate_result_result; then + eval set dummy "$func_options_result"; shift + _G_options_quoted=: + fi + done - # save modified positional parameters for caller - func_options_result=$func_run_hooks_result + $_G_options_quoted || { + # As we (func_options) are top-level options-parser function and + # nobody quoted "$@" for us yet, we need to do it explicitly for + # caller. + func_quote eval ${1+"$@"} + func_options_result=$func_quote_result + } } @@ -1649,9 +1859,8 @@ func_options () # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and -# needs to propogate that back to rest of this script, then the complete -# modified list must be put in 'func_run_hooks_result' before -# returning. +# needs to propagate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before returning. func_hookable func_options_prep func_options_prep () { @@ -1662,9 +1871,7 @@ func_options_prep () opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} - - # save modified positional parameters for caller - func_options_prep_result=$func_run_hooks_result + func_propagate_result func_run_hooks func_options_prep } @@ -1676,25 +1883,32 @@ func_parse_options () { $debug_cmd - func_parse_options_result= - + _G_parse_options_requote=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} - - # Adjust func_parse_options positional parameters to match - eval set dummy "$func_run_hooks_result"; shift + func_propagate_result func_run_hooks func_parse_options + if $func_propagate_result_result; then + eval set dummy "$func_parse_options_result"; shift + # Even though we may have changed "$@", we passed the "$@" array + # down into the hook and it quoted it for us (because we are in + # this if-branch). No need to quote it again. + _G_parse_options_requote=false + fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break + # We expect that one of the options parsed in this function matches + # and thus we remove _G_opt from "$@" and need to re-quote. + _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' - func_echo "enabling shell trace mode" + func_echo "enabling shell trace mode" >&2 $debug_cmd ;; @@ -1704,7 +1918,10 @@ func_parse_options () ;; --warnings|--warning|-W) - test $# = 0 && func_missing_arg $_G_opt && break + if test $# = 0 && func_missing_arg $_G_opt; then + _G_parse_options_requote=: + break + fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above @@ -1757,15 +1974,24 @@ func_parse_options () shift ;; - --) break ;; + --) _G_parse_options_requote=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift + _G_match_parse_options=false + break + ;; esac + + if $_G_match_parse_options; then + _G_parse_options_requote=: + fi done - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - func_parse_options_result=$func_quote_for_eval_result + if $_G_parse_options_requote; then + # save modified positional parameters for caller + func_quote eval ${1+"$@"} + func_parse_options_result=$func_quote_result + fi } @@ -1782,12 +2008,10 @@ func_validate_options () test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} + func_propagate_result func_run_hooks func_validate_options # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE - - # save modified positional parameters for caller - func_validate_options_result=$func_run_hooks_result } @@ -1843,8 +2067,8 @@ func_missing_arg () # func_split_equals STRING # ------------------------ -# Set func_split_equals_lhs and func_split_equals_rhs shell variables after -# splitting STRING at the '=' sign. +# Set func_split_equals_lhs and func_split_equals_rhs shell variables +# after splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ @@ -1859,8 +2083,9 @@ then func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} - test "x$func_split_equals_lhs" = "x$1" \ - && func_split_equals_rhs= + if test "x$func_split_equals_lhs" = "x$1"; then + func_split_equals_rhs= + fi }' else # ...otherwise fall back to using expr, which is often a shell builtin. @@ -1870,7 +2095,7 @@ else func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= - test "x$func_split_equals_lhs" = "x$1" \ + test "x$func_split_equals_lhs=" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals @@ -1896,7 +2121,7 @@ else { $debug_cmd - func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt @@ -1938,31 +2163,44 @@ func_usage_message () # func_version # ------------ # Echo version message to standard output and exit. +# The version message is extracted from the calling file's header +# comments, with leading '# ' stripped: +# 1. First display the progname and version +# 2. Followed by the header comment line matching /^# Written by / +# 3. Then a blank line followed by the first following line matching +# /^# Copyright / +# 4. Immediately followed by any lines between the previous matches, +# except lines preceding the intervening completely blank line. +# For example, see the header comments of this file. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' - /(C)/!b go - :more - /\./!{ - N - s|\n# | | - b more - } - :go - /^# Written by /,/# warranty; / { - s|^# || - s|^# *$|| - s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| - p + /^# Written by /!b + s|^# ||; p; n + + :fwd2blnk + /./ { + n + b fwd2blnk } - /^# Written by / { - s|^# || - p + p; n + + :holdwrnt + s|^# || + s|^# *$|| + /^Copyright /!{ + /./H + n + b holdwrnt } - /^warranty; /q' < "$progpath" + + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + G + s|\(\n\)\n*|\1|g + p; q' < "$progpath" exit $? } @@ -1972,12 +2210,35 @@ func_version () # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. -scriptversion='(GNU libtool) 2.4.6' +scriptversion='(GNU libtool) 2.5.4' + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + year=`date +%Y` + + cat <<EOF +$progname $scriptversion +Copyright (C) $year Free Software Foundation, Inc. +License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html> +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. + +Originally written by Gordon Matzigkeit, 1996 +(See AUTHORS for complete contributor listing) +EOF + + exit $? +} # func_echo ARG... @@ -2000,18 +2261,6 @@ func_echo () } -# func_warning ARG... -# ------------------- -# Libtool warnings are not categorized, so override funclib.sh -# func_warning with this simpler definition. -func_warning () -{ - $debug_cmd - - $warning_func ${1+"$@"} -} - - ## ---------------- ## ## Options parsing. ## ## ---------------- ## @@ -2023,19 +2272,23 @@ usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: - --config show all configuration variables - --debug enable verbose shell tracing - -n, --dry-run display commands without modifying any files - --features display basic configuration information and exit - --mode=MODE use operation mode MODE - --no-warnings equivalent to '-Wnone' - --preserve-dup-deps don't remove duplicate dependency libraries - --quiet, --silent don't print informational messages - --tag=TAG use configuration variables from tag TAG - -v, --verbose print more informational messages than default - --version print version information - -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] - -h, --help, --help-all print short, long, or detailed help message + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information + --finish use operation '--mode=finish' + --mode=MODE use operation mode MODE + --no-finish don't update shared library cache + --no-quiet, --no-silent print default informational messages + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --reorder-cache=DIRS reorder shared library cache for preferred DIRS + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. @@ -2068,13 +2321,13 @@ include the following information: compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname (GNU libtool) 2.4.6 + version: $progname $scriptversion automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to <bug-libtool@gnu.org>. -GNU libtool home page: <http://www.gnu.org/software/libtool/>. -General help using GNU software: <http://www.gnu.org/gethelp/>." +GNU libtool home page: <https://www.gnu.org/software/libtool/>. +General help using GNU software: <https://www.gnu.org/gethelp/>." exit 0 } @@ -2264,12 +2517,17 @@ libtool_options_prep () opt_dry_run=false opt_help=false opt_mode= + opt_reorder_cache=false opt_preserve_dup_deps=false opt_quiet=false + opt_finishing=true + opt_warning= nonopt= preserve_args= + _G_rc_lt_options_prep=: + # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) @@ -2293,11 +2551,16 @@ libtool_options_prep () uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; + *) + _G_rc_lt_options_prep=false + ;; esac - # Pass back the list of options. - func_quote_for_eval ${1+"$@"} - libtool_options_prep_result=$func_quote_for_eval_result + if $_G_rc_lt_options_prep; then + # Pass back the list of options. + func_quote eval ${1+"$@"} + libtool_options_prep_result=$func_quote_result + fi } func_add_hook func_options_prep libtool_options_prep @@ -2309,9 +2572,12 @@ libtool_parse_options () { $debug_cmd + _G_rc_lt_parse_options=false + # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do + _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in @@ -2345,14 +2611,18 @@ libtool_parse_options () clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error - *) func_error "invalid argument for $_G_opt" + *) func_error "invalid argument '$1' for $_G_opt" exit_cmd=exit - break ;; esac shift ;; + --no-finish) + opt_finishing=false + func_append preserve_args " $_G_opt" + ;; + --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" @@ -2368,6 +2638,24 @@ libtool_parse_options () func_append preserve_args " $_G_opt" ;; + --reorder-cache) + opt_reorder_cache=true + shared_lib_dirs=$1 + if test -n "$shared_lib_dirs"; then + case $1 in + # Must begin with /: + /*) ;; + + # Catch anything else as an error (relative paths) + *) func_error "invalid argument '$1' for $_G_opt" + func_error "absolute paths are required for $_G_opt" + exit_cmd=exit + ;; + esac + fi + shift + ;; + --silent|--quiet) opt_quiet=: opt_verbose=false @@ -2386,19 +2674,36 @@ libtool_parse_options () func_append preserve_args " $_G_opt" ;; - # An option not handled by this hook function: - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"} ; shift + _G_match_lt_parse_options=false + break + ;; esac + $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done - - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - libtool_parse_options_result=$func_quote_for_eval_result + if $_G_rc_lt_parse_options; then + # save modified positional parameters for caller + func_quote eval ${1+"$@"} + libtool_parse_options_result=$func_quote_result + fi } func_add_hook func_parse_options libtool_parse_options +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + if $opt_warning; then + $debug_cmd + $warning_func ${1+"$@"} + fi +} + # libtool_validate_options [ARG]... # --------------------------------- @@ -2415,10 +2720,10 @@ libtool_validate_options () # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" - case $host in + case $host_os in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 - *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + cygwin* | mingw* | windows* | pw32* | cegcc* | solaris2* | os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; @@ -2451,8 +2756,8 @@ libtool_validate_options () } # Pass back the unparsed argument list - func_quote_for_eval ${1+"$@"} - libtool_validate_options_result=$func_quote_for_eval_result + func_quote eval ${1+"$@"} + libtool_validate_options_result=$func_quote_result } func_add_hook func_validate_options libtool_validate_options @@ -2750,7 +3055,7 @@ EOF # func_convert_core_file_wine_to_w32 ARG # Helper function used by file name conversion functions when $build is *nix, -# and $host is mingw, cygwin, or some other w32 environment. Relies on a +# and $host is mingw, windows, cygwin, or some other w32 environment. Relies on a # correctly configured wine environment available, with the winepath program # in $build's $PATH. # @@ -2782,9 +3087,10 @@ func_convert_core_file_wine_to_w32 () # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. +# $host is mingw, windows, cygwin, or some other w32 environment. Relies on a +# correctly configured wine environment available, with the winepath program +# in $build's $PATH. Assumes ARG has no leading or trailing path separator +# characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. @@ -2927,6 +3233,15 @@ func_convert_path_front_back_pathsep () # end func_convert_path_front_back_pathsep +# func_convert_delimited_path PATH ORIG_DELIMITER NEW_DELIMITER +# Replaces a delimiter for a given path. +func_convert_delimited_path () +{ + converted_path=`$ECHO "$1" | $SED "s#$2#$3#g"` +} +# end func_convert_delimited_path + + ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## @@ -3261,6 +3576,65 @@ func_dll_def_p () } +# func_reorder_shared_lib_cache DIRS +# Reorder the shared library cache by unconfiguring previous shared library cache +# and configuring preferred search directories before previous search directories. +# Previous shared library cache: /usr/lib /usr/local/lib +# Preferred search directories: /tmp/testing +# Reordered shared library cache: /tmp/testing /usr/lib /usr/local/lib +func_reorder_shared_lib_cache () +{ + $debug_cmd + + case $host_os in + openbsd*) + get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"` + func_convert_delimited_path "$get_search_directories" ':' '\ ' + save_search_directories=$converted_path + func_convert_delimited_path "$1" ':' '\ ' + + # Ensure directories exist + for dir in $converted_path; do + # Ensure each directory is an absolute path + case $dir in + /*) ;; + *) func_error "Directory '$dir' is not an absolute path" + exit $EXIT_FAILURE ;; + esac + # Ensure no trailing slashes + func_stripname '' '/' "$dir" + dir=$func_stripname_result + if test -d "$dir"; then + if test -n "$preferred_search_directories"; then + preferred_search_directories="$preferred_search_directories $dir" + else + preferred_search_directories=$dir + fi + else + func_error "Directory '$dir' does not exist" + exit $EXIT_FAILURE + fi + done + + PATH="$PATH:/sbin" ldconfig -U $save_search_directories + PATH="$PATH:/sbin" ldconfig -m $preferred_search_directories $save_search_directories + get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"` + func_convert_delimited_path "$get_search_directories" ':' '\ ' + reordered_search_directories=$converted_path + + $ECHO "Original: $save_search_directories" + $ECHO "Reordered: $reordered_search_directories" + exit $EXIT_SUCCESS + ;; + *) + func_error "--reorder-cache is not supported for host_os=$host_os." + exit $EXIT_FAILURE + ;; + esac +} +# end func_reorder_shared_lib_cache + + # func_mode_compile arg... func_mode_compile () { @@ -3418,8 +3792,8 @@ func_mode_compile () esac done - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ + func_quote_arg pretty "$libobj" + test "X$libobj" != "X$func_quote_arg_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" @@ -3439,7 +3813,7 @@ func_mode_compile () # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) + cygwin* | mingw* | windows* | pw32* | os2* | cegcc*) pic_mode=default ;; esac @@ -3492,8 +3866,8 @@ compiler." func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result + func_quote_arg pretty "$srcfile" + qsrcfile=$func_quote_arg_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then @@ -3648,7 +4022,8 @@ This mode accepts the following additional options: -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler + -Wc,FLAG + -Xcompiler FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. @@ -3754,6 +4129,8 @@ The following components of LINK-COMMAND are treated specially: -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wa,FLAG + -Xassembler FLAG pass linker-specific FLAG directly to the assembler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) @@ -3830,6 +4207,12 @@ if $opt_help; then fi +# If option '--reorder-cache', reorder the shared library cache and exit. +if $opt_reorder_cache; then + func_reorder_shared_lib_cache $shared_lib_dirs +fi + + # func_mode_execute arg... func_mode_execute () { @@ -4014,7 +4397,7 @@ func_mode_finish () fi fi - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs" && $opt_finishing; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. @@ -4039,6 +4422,12 @@ func_mode_finish () for libdir in $libdirs; do $ECHO " $libdir" done + if test "false" = "$opt_finishing"; then + echo + echo "NOTE: finish_cmds were not executed during testing, so you must" + echo "manually run ldconfig to add a given test directory, LIBDIR, to" + echo "the search path for generated executables." + fi echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" @@ -4096,8 +4485,8 @@ func_mode_install () case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " + func_quote_arg pretty "$nonopt" + install_prog="$func_quote_arg_result " arg=$1 shift else @@ -4107,8 +4496,8 @@ func_mode_install () # The real first argument should be the name of the installation program. # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" + func_quote_arg pretty "$arg" + func_append install_prog "$func_quote_arg_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; @@ -4165,12 +4554,12 @@ func_mode_install () esac # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" + func_quote_arg pretty "$arg" + func_append install_prog " $func_quote_arg_result" if test -n "$arg2"; then - func_quote_for_eval "$arg2" + func_quote_arg pretty "$arg2" fi - func_append install_shared_prog " $func_quote_for_eval_result" + func_append install_shared_prog " $func_quote_arg_result" done test -z "$install_prog" && \ @@ -4181,8 +4570,8 @@ func_mode_install () if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" + func_quote_arg pretty "$install_override_mode" + func_append install_shared_prog " -m $func_quote_arg_result" fi fi @@ -4275,8 +4664,15 @@ func_mode_install () func_append dir "$objdir" if test -n "$relink_command"; then + # Strip any trailing slash from the destination. + func_stripname '' '/' "$libdir" + destlibdir=$func_stripname_result + + func_stripname '' '/' "$destdir" + s_destdir=$func_stripname_result + # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that @@ -4313,7 +4709,7 @@ func_mode_install () 'exit $?' tstripme=$stripme case $host_os in - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= @@ -4426,7 +4822,7 @@ func_mode_install () # Do a test to see if this is really a libtool program. case $host in - *cygwin* | *mingw*) + *cygwin* | *mingw* | *windows*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result @@ -4478,8 +4874,8 @@ func_mode_install () relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" + func_quote_arg expand,pretty "$relink_command" + eval "func_echo $func_quote_arg_result" } if eval "$relink_command"; then : else @@ -4654,7 +5050,7 @@ extern \"C\" { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in - *cygwin* | *mingw* | *cegcc* ) + *cygwin* | *mingw* | *windows* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; @@ -4666,7 +5062,7 @@ extern \"C\" { eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in - *cygwin* | *mingw* | *cegcc* ) + *cygwin* | *mingw* | *windows* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; @@ -4680,7 +5076,7 @@ extern \"C\" { func_basename "$dlprefile" name=$func_basename_result case $host in - *cygwin* | *mingw* | *cegcc* ) + *cygwin* | *mingw* | *windows* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" @@ -4706,8 +5102,16 @@ extern \"C\" { eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + case $host in + i[3456]86-*-mingw32*) + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + ;; + *) + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/__nm_//' >> '$nlist'" + ;; + esac } else # not an import lib $opt_dry_run || { @@ -4855,7 +5259,7 @@ static const void *lt_preloaded_setup() { # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in - *cygwin* | *mingw* | *cegcc* ) + *cygwin* | *mingw* | *windows* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` @@ -4931,7 +5335,7 @@ func_win32_libid () *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || @@ -5198,7 +5602,7 @@ func_extract_archives () # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw +# incorporate the script contents within a cygwin/mingw/windows # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. @@ -5206,7 +5610,7 @@ func_extract_archives () # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is -# the $objdir directory. This is a cygwin/mingw-specific +# the $objdir directory. This is a cygwin/mingw/windows-specific # behavior. func_emit_wrapper () { @@ -5258,7 +5662,8 @@ else if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + func_quote_arg pretty "$ECHO" + qECHO=$func_quote_arg_result $ECHO "\ # A function that is used when there is no print builtin or printf. @@ -5268,7 +5673,7 @@ func_fallback_echo () \$1 _LTECHO_EOF' } - ECHO=\"$qECHO\" + ECHO=$qECHO fi # Very basic option parsing. These options are (a) specific to @@ -5330,7 +5735,7 @@ func_exec_program_core () " case $host in # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) + *-*-mingw* | *-*-windows* | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 @@ -5398,7 +5803,7 @@ func_exec_program () file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done - # Usually 'no', except on cygwin/mingw when embedded into + # Usually 'no', except on cygwin/mingw/windows when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then @@ -5530,7 +5935,7 @@ EOF #endif #include <stdio.h> #include <stdlib.h> -#ifdef _MSC_VER +#if defined _WIN32 && !defined __GNUC__ # include <direct.h> # include <process.h> # include <io.h> @@ -5555,7 +5960,7 @@ EOF /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ -int _putenv (const char *); +_CRTIMP int __cdecl _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ @@ -5753,7 +6158,7 @@ main (int argc, char *argv[]) { EOF case $host in - *mingw* | *cygwin* ) + *mingw* | *windows* | *cygwin* ) # make stdout use "unix" line endings echo " setmode(1,_O_BINARY);" ;; @@ -5772,7 +6177,7 @@ EOF { /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX namespace, but it is not one of the ones we know about and - have already dealt with, above (inluding dump-script), then + have already dealt with, above (including dump-script), then report an error. Otherwise, targets might begin to believe they are allowed to use options in the LTWRAPPER_OPTION_PREFIX namespace. The first time any user complains about this, we'll @@ -5856,7 +6261,7 @@ EOF EOF case $host_os in - mingw*) + mingw* | windows*) cat <<"EOF" { char* p; @@ -5898,7 +6303,7 @@ EOF EOF case $host_os in - mingw*) + mingw* | windows*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ newargz = prepare_spawn (newargz); @@ -6317,7 +6722,7 @@ lt_update_lib_path (const char *name, const char *value) EOF case $host_os in - mingw*) + mingw* | windows*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). @@ -6492,7 +6897,7 @@ func_mode_link () $debug_cmd case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra @@ -6516,6 +6921,7 @@ func_mode_link () finalize_command=$nonopt compile_rpath= + compile_rpath_tail= finalize_rpath= compile_shlibpath= finalize_shlibpath= @@ -6556,10 +6962,12 @@ func_mode_link () xrpath= perm_rpath= temp_rpath= + temp_rpath_tail= thread_safe=no vinfo= vinfo_number=no weak_libs= + rpath_arg= single_module=$wl-single_module func_infer_tag $base_compile @@ -6611,9 +7019,9 @@ func_mode_link () while test "$#" -gt 0; do arg=$1 shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" + func_quote_arg pretty,unquoted "$arg" + qarg=$func_quote_arg_unquoted_result + func_append libtool_args " $func_quote_arg_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then @@ -6822,7 +7230,7 @@ func_mode_link () case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) - func_fatal_error "only absolute run-paths are allowed" + func_fatal_error "argument to -rpath is not absolute: $arg" ;; esac if test rpath = "$prev"; then @@ -6849,6 +7257,13 @@ func_mode_link () prev= continue ;; + xassembler) + func_append compiler_flags " -Xassembler $qarg" + prev= + func_append compile_command " -Xassembler $qarg" + func_append finalize_command " -Xassembler $qarg" + continue + ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" @@ -6991,7 +7406,7 @@ func_mode_link () ;; esac case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; @@ -7011,7 +7426,7 @@ func_mode_link () -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; @@ -7019,7 +7434,7 @@ func_mode_link () # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; @@ -7039,7 +7454,7 @@ func_mode_link () esac elif test X-lc_r = "X$arg"; then case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc_r directly, use -pthread flag. continue ;; @@ -7062,16 +7477,29 @@ func_mode_link () # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) + # -q <option> for IBM XL C/C++ compiler. + -model|-arch|-isysroot|--sysroot|-q) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. + -pthread) + case $host in + *solaris2*) ;; + *) + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + ;; + esac + continue + ;; + -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" @@ -7094,7 +7522,7 @@ func_mode_link () -no-install) case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" @@ -7154,7 +7582,7 @@ func_mode_link () dir=$lt_sysroot$func_stripname_result ;; *) - func_fatal_error "only absolute run-paths are allowed" + func_fatal_error "argument ($arg) to '-R' is not an absolute path: $dir" ;; esac case "$xrpath " in @@ -7211,9 +7639,9 @@ func_mode_link () save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" + func_quote_arg pretty "$flag" + func_append arg " $func_quote_arg_result" + func_append compiler_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" @@ -7227,16 +7655,21 @@ func_mode_link () save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" + func_quote_arg pretty "$flag" + func_append arg " $wl$func_quote_arg_result" + func_append compiler_flags " $wl$func_quote_arg_result" + func_append linker_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; + -Xassembler) + prev=xassembler + continue + ;; + -Xcompiler) prev=xcompiler continue @@ -7254,8 +7687,8 @@ func_mode_link () # -msg_* for osf cc -msg_*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result ;; # Flags to be passed through unchanged, with rationale: @@ -7274,12 +7707,31 @@ func_mode_link () # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang + # -fdiagnostics-color* simply affects output + # -frecord-gcc-switches used to verify flags were respected + # -fsanitize=* Clang/GCC memory and address sanitizer + # -fno-sanitize* Clang/GCC memory and address sanitizer + # -shared-libsan Link with shared sanitizer runtimes (Clang) + # -static-libsan Link with static sanitizer runtimes (Clang) + # -no-canonical-prefixes Do not expand any symbolic links + # -fuse-ld=* Linker select flags for GCC + # -static-* direct GCC to link specific libraries statically + # -fcilkplus Cilk Plus language extension features for C/C++ + # -rtlib=* select c runtime lib with clang + # --unwindlib=* select unwinder library with clang + # -f{file|debug|macro|profile}-prefix-map=* needed for lto linking + # -Wa,* Pass flags directly to the assembler + # -Werror, -Werror=* Report (specified) warnings as errors -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ - -specs=*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-no-canonical-prefixes| \ + -stdlib=*|-rtlib=*|--unwindlib=*| \ + -specs=*|-fsanitize=*|-fno-sanitize*|-shared-libsan|-static-libsan| \ + -ffile-prefix-map=*|-fdebug-prefix-map=*|-fmacro-prefix-map=*|-fprofile-prefix-map=*| \ + -fdiagnostics-color*|-frecord-gcc-switches| \ + -fuse-ld=*|-static-*|-fcilkplus|-Wa,*|-Werror|-Werror=*) + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" @@ -7300,15 +7752,15 @@ func_mode_link () continue else # Otherwise treat like 'Some other compiler flag' below - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result fi ;; # Some other compiler flag. -* | +*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result ;; *.$objext) @@ -7428,15 +7880,27 @@ func_mode_link () *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result + func_quote_arg pretty "$arg" + arg=$func_quote_arg_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" + if test -n "$rpath_arg"; then + func_append finalize_rpath " ${arg##*,}" + unset rpath_arg + else + case $arg in + -Wl,-rpath,*) + func_append finalize_rpath " ${arg##*,}";; + -Wl,-rpath) + rpath_arg=1;; + *) + func_append compile_command " $arg" + func_append finalize_command " $arg" + esac + fi fi done # argument parsing loop @@ -7607,7 +8071,7 @@ func_mode_link () found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" @@ -7784,18 +8248,15 @@ func_mode_link () ;; esac if $valid_a_lib; then - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" + func_warning "Linking the shared library $output against the static library $deplib is not portable!" deplibs="$deplib $deplibs" else - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." + func_warning "Trying to link with static lib archive $deplib." + func_warning "I have the capability to make that library automatically link in when" + func_warning "you link to this library. But I can only do this if you have a" + func_warning "shared version of the library, which you do not appear to have" + func_warning "because the file extensions .$libext of this argument makes me believe" + func_warning "that it is just a static archive that I should not use here." fi ;; esac @@ -7990,7 +8451,7 @@ func_mode_link () fi case $host in # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) + *cygwin* | *mingw* | *windows* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present @@ -8090,7 +8551,10 @@ func_mode_link () # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; - *) func_append temp_rpath "$absdir:" ;; + *) case $absdir in + "$progdir/"*) func_append temp_rpath "$absdir:" ;; + *) func_append temp_rpath_tail "$absdir:" ;; + esac esac fi @@ -8100,9 +8564,12 @@ func_mode_link () case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) - case "$compile_rpath " in + case "$compile_rpath$compile_rpath_tail " in *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; + *) case $absdir in + "$progdir/"*) func_append compile_rpath " $absdir" ;; + *) func_append compile_rpath_tail " $absdir" ;; + esac esac ;; esac @@ -8133,8 +8600,8 @@ func_mode_link () fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc* | *os2*) + case $host_os in + cygwin* | mingw* | windows* | cegcc* | os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no @@ -8160,11 +8627,11 @@ func_mode_link () if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" + func_warning "Linking the executable $output against the loadable module" else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" + func_warning "Linking the shared library $output against the loadable module" fi - $ECHO "*** $linklib is not portable!" + func_warning "$linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then @@ -8174,9 +8641,12 @@ func_mode_link () case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) - case "$compile_rpath " in + case "$compile_rpath$compile_rpath_tail " in *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; + *) case $absdir in + "$progdir/"*) func_append compile_rpath " $absdir" ;; + *) func_append compile_rpath_tail " $absdir" ;; + esac esac ;; esac @@ -8203,8 +8673,8 @@ func_mode_link () soname=$dlname elif test -n "$soname_spec"; then # bleh windows - case $host in - *cygwin* | mingw* | *cegcc* | *os2*) + case $host_os in + cygwin* | mingw* | windows* | cegcc* | os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major @@ -8251,6 +8721,7 @@ func_mode_link () case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-emscripten*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) @@ -8259,11 +8730,10 @@ func_mode_link () if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" + func_warning "lib $linklib is a module, not a shared library" if test -z "$old_library"; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" + func_warning "And there doesn't seem to be a static archive available" + func_warning "The link will probably fail, sorry" else add=$dir/$old_library fi @@ -8346,7 +8816,7 @@ func_mode_link () test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then - add_dir=-L$libdir + add_dir=-L$lt_sysroot$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in @@ -8363,7 +8833,7 @@ func_mode_link () fi else # We cannot seem to hardcode it, guess we'll fake it. - add_dir=-L$libdir + add_dir=-L$lt_sysroot$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in @@ -8403,21 +8873,19 @@ func_mode_link () # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system cannot link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." + func_warning "This system cannot link to static lib archive $lib." + func_warning "I have the capability to make that library automatically link in when" + func_warning "you link to this library. But I can only do this if you have a" + func_warning "shared version of the library, which you do not appear to have." if test yes = "$module"; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + func_warning "But as you try to build a module library, libtool will still create " + func_warning "a static module, that should work as long as the dlopening application" + func_warning "is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." + func_warning "However, this would only work if libtool was able to extract symbol" + func_warning "lists from a program, using 'nm' or equivalent, but libtool could" + func_warning "not find such a program. So, this module is probably useless." + func_warning "'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module @@ -8540,6 +9008,10 @@ func_mode_link () fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs + + func_append temp_rpath "$temp_rpath_tail" + func_append compile_rpath "$compile_rpath_tail" + if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" @@ -8577,42 +9049,46 @@ func_mode_link () # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: new_libs="$deplib $new_libs" for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; + if $opt_preserve_dup_deps; then + new_libs="$deplib $new_libs" + else + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. And if not possible for portability + # reasons, then --preserve-dup-deps should be used. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; esac - ;; - esac + fi done tmp_libs= for deplib in $new_libs; do @@ -8634,7 +9110,7 @@ func_mode_link () test CXX = "$tagname" && { case $host_os in linux*) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi @@ -8744,9 +9220,7 @@ func_mode_link () if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" + func_warning "Linking the shared library $output against the non-libtool objects $objs is not portable!" func_append libobjs " $objs" fi fi @@ -8807,13 +9281,13 @@ func_mode_link () # case $version_type in # correct linux to gnu/linux during the next big refactor - darwin|freebsd-elf|linux|osf|windows|none) + darwin|freebsd-elf|linux|midnightbsd-elf|osf|qnx|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; - freebsd-aout|qnx|sunos) + freebsd-aout|sco|sunos) current=$number_major revision=$number_minor age=0 @@ -8825,6 +9299,9 @@ func_mode_link () revision=$number_minor lt_irix_increment=no ;; + *) + func_fatal_configuration "$modename: unknown library version type '$version_type'" + ;; esac ;; no) @@ -8898,7 +9375,7 @@ func_mode_link () versuffix=.$current.$revision ;; - freebsd-elf) + freebsd-elf | midnightbsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision @@ -8960,8 +9437,9 @@ func_mode_link () ;; qnx) - major=.$current - versuffix=.$current + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision ;; sco) @@ -9114,7 +9592,7 @@ func_mode_link () if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) @@ -9124,7 +9602,7 @@ func_mode_link () *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) @@ -9165,108 +9643,6 @@ func_mode_link () # implementing what was already the behavior. newdeplibs=$deplibs ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c <<EOF - int main() { return 0; } -EOF - $opt_dry_run || $RM conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then - ldd_output=`ldd conftest` - for i in $deplibs; do - case $i in - -l*) - func_stripname -l '' "$i" - name=$func_stripname_result - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $i "*) - func_append newdeplibs " $i" - i= - ;; - esac - fi - if test -n "$i"; then - libname=`eval "\\$ECHO \"$libname_spec\""` - deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` - set dummy $deplib_matches; shift - deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then - func_append newdeplibs " $i" - else - droppeddeps=yes - echo - $ECHO "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which I believe you do not have" - echo "*** because a test_compile did reveal that the linker did not use it for" - echo "*** its dynamic dependency list that programs get resolved with at runtime." - fi - fi - ;; - *) - func_append newdeplibs " $i" - ;; - esac - done - else - # Error occurred in the first compile. Let's try to salvage - # the situation: Compile a separate program for each library. - for i in $deplibs; do - case $i in - -l*) - func_stripname -l '' "$i" - name=$func_stripname_result - $opt_dry_run || $RM conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $i; then - ldd_output=`ldd conftest` - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $i "*) - func_append newdeplibs " $i" - i= - ;; - esac - fi - if test -n "$i"; then - libname=`eval "\\$ECHO \"$libname_spec\""` - deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` - set dummy $deplib_matches; shift - deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then - func_append newdeplibs " $i" - else - droppeddeps=yes - echo - $ECHO "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because a test_compile did reveal that the linker did not use this one" - echo "*** as a dynamic dependency that programs can get resolved with at runtime." - fi - fi - else - droppeddeps=yes - echo - $ECHO "*** Warning! Library $i is needed by this library but I was not able to" - echo "*** make it link in! You will probably need to install it or some" - echo "*** library that it depends on before this library will be fully" - echo "*** functional. Installing it before continuing would be even better." - fi - ;; - *) - func_append newdeplibs " $i" - ;; - esac - done - fi - ;; file_magic*) set dummy $deplibs_check_method; shift file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` @@ -9330,17 +9706,16 @@ EOF fi if test -n "$a_deplib"; then droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" + func_warning "Linker path does not have real file for library $a_deplib." + func_warning "I have the capability to make that library automatically link in when" + func_warning "you link to this library. But I can only do this if you have a" + func_warning "shared version of the library, which you do not appear to have" + func_warning "because I did check the linker path looking for a file starting" if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + func_warning "with $libname but no candidates were found. (...for file magic test)" else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" + func_warning "with $libname and none of the candidates passed a file format test" + func_warning "using a file magic. Last file checked: $potlib" fi fi ;; @@ -9384,17 +9759,16 @@ EOF fi if test -n "$a_deplib"; then droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" + func_warning "Linker path does not have real file for library $a_deplib." + func_warning "I have the capability to make that library automatically link in when" + func_warning "you link to this library. But I can only do this if you have a" + func_warning "shared version of the library, which you do not appear to have" + func_warning "because I did check the linker path looking for a file starting" if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + func_warning "with $libname but no candidates were found. (...for regex pattern test)" else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" + func_warning "with $libname and none of the candidates passed a file format test" + func_warning "using a regex pattern. Last file checked: $potlib" fi fi ;; @@ -9418,11 +9792,11 @@ EOF *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." + func_warning "Inter-library dependencies are not supported in this platform." else - echo "*** Warning: inter-library dependencies are not known to be supported." + func_warning "Inter-library dependencies are not known to be supported." fi - echo "*** All declared inter-library dependencies are being dropped." + func_warning "All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac @@ -9443,17 +9817,15 @@ EOF if test yes = "$droppeddeps"; then if test yes = "$module"; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." + func_warning "libtool could not satisfy all declared inter-library" + func_warning "dependencies of module $libname. Therefore, libtool will create" + func_warning "a static module, that should work as long as the dlopening" + func_warning "application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." + func_warning "However, this would only work if libtool was able to extract symbol" + func_warning "lists from a program, using 'nm' or equivalent, but libtool could" + func_warning "not find such a program. So, this module is probably useless." + func_warning "'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext @@ -9628,7 +10000,7 @@ EOF orig_export_symbols= case $host_os in - cygwin* | mingw* | cegcc*) + cygwin* | mingw* | windows* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { @@ -9826,20 +10198,7 @@ EOF last_robj= k=1 - if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then - output=$output_objdir/$output_la.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + if test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output @@ -9858,6 +10217,19 @@ EOF func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + elif test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." @@ -9935,8 +10307,8 @@ EOF for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" + func_quote_arg expand,pretty "$cmd" + eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? @@ -10029,8 +10401,8 @@ EOF eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" + func_quote_arg expand,pretty "$cmd" + eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? @@ -10298,7 +10670,7 @@ EOF esac fi case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; @@ -10376,7 +10748,7 @@ EOF # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; - *cygwin* | *mingw* ) + *cygwin* | *mingw* | *windows* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) @@ -10504,12 +10876,13 @@ EOF elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + func_quote_arg pretty "$var_value" + relink_command="$var=$func_quote_arg_result; export $var; $relink_command" fi done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + func_quote eval cd "`pwd`" + func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" + relink_command=$func_quote_arg_unquoted_result fi # Only actually do things if not in dry run mode. @@ -10529,7 +10902,7 @@ EOF *) exeext= ;; esac case $host in - *cygwin* | *mingw* ) + *cygwin* | *mingw* | windows* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result @@ -10749,13 +11122,15 @@ EOF elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + func_quote_arg pretty,unquoted "$var_value" + relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" fi done # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + func_quote eval cd "`pwd`" + relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + func_quote_arg pretty,unquoted "$relink_command" + relink_command=$func_quote_arg_unquoted_result if test yes = "$hardcode_automatic"; then relink_command= fi @@ -10861,7 +11236,7 @@ EOF # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *windows*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" diff --git a/contrib/unbound/smallapp/unbound-control-setup.sh b/contrib/unbound/smallapp/unbound-control-setup.sh index 3709a8c3118b..872133ccc536 100755..100644 --- a/contrib/unbound/smallapp/unbound-control-setup.sh +++ b/contrib/unbound/smallapp/unbound-control-setup.sh @@ -5,22 +5,22 @@ # Copyright (c) 2008, NLnet Labs. All rights reserved. # # This software is open source. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: -# +# # Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. -# +# # Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. -# +# # Neither the name of the NLNET LABS nor the names of its contributors may # be used to endorse or promote products derived from this software without # specific prior written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -57,87 +57,162 @@ SVR_BASE=unbound_server # base name for unbound-control keys CTL_BASE=unbound_control +# flag to recreate generated certificates +RECREATE=0 + # we want -rw-r----- access (say you run this as root: grp=yes (server), all=no). umask 0027 # end of options -# functions: -error ( ) { - echo "$0 fatal error: $1" - exit 1 +set -eu + +cleanup() { + echo "removing artifacts" + + rm -rf \ + server.cnf \ + client.cnf \ + "${SVR_BASE}_trust.pem" \ + "${CTL_BASE}_trust.pem" \ + "${SVR_BASE}_trust.srl" } -# check arguments: -while test $# -ne 0; do - case $1 in - -d) - if test $# -eq 1; then error "need argument for -d"; fi - DESTDIR="$2" - shift - ;; - *) - echo "unbound-control-setup.sh - setup SSL keys for unbound-control" - echo " -d dir use directory to store keys and certificates." - echo " default: $DESTDIR" - echo "please run this command using the same user id that the " - echo "unbound daemon uses, it needs read privileges." - exit 1 - ;; - esac - shift +fatal() { + printf "fatal error: $*\n" >/dev/stderr + exit 1 +} + +usage() { + cat <<EOF +usage: $0 OPTIONS +OPTIONS +-d <dir> used directory to store keys and certificates (default: $DESTDIR) +-h show help notice +-r recreate certificates +EOF +} + +OPTIND=1 +while getopts 'd:hr' arg; do + case "$arg" in + d) DESTDIR="$OPTARG" ;; + h) usage; exit 1 ;; + r) RECREATE=1 ;; + ?) fatal "'$arg' unknown option" ;; + esac done +shift $((OPTIND - 1)) + +if ! openssl version </dev/null >/dev/null 2>&1; then + echo "$0 requires openssl to be installed for keys/certificates generation." >&2 + exit 1 +fi -# go!: echo "setup in directory $DESTDIR" -cd "$DESTDIR" || error "could not cd to $DESTDIR" - -# create certificate keys; do not recreate if they already exist. -if test -f $SVR_BASE.key; then - echo "$SVR_BASE.key exists" -else - echo "generating $SVR_BASE.key" - openssl genrsa -out $SVR_BASE.key $BITS || error "could not genrsa" +cd "$DESTDIR" + +trap cleanup INT + +# === +# Generate server certificate +# === + +# generate private key; do no recreate it if they already exist. +if [ ! -f "$SVR_BASE.key" ]; then + openssl genrsa -out "$SVR_BASE.key" "$BITS" +fi + +cat >server.cnf <<EOF +[req] +default_bits=$BITS +default_md=$HASH +prompt=no +distinguished_name=req_distinguished_name +x509_extensions=v3_ca +[req_distinguished_name] +commonName=$SERVERNAME +[v3_ca] +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid:always,issuer:always +basicConstraints=critical,CA:TRUE,pathlen:0 +subjectAltName=DNS:$SERVERNAME +EOF + +[ -f server.cnf ] || fatal "cannot create openssl configuration" + +if [ ! -f "$SVR_BASE.pem" -o $RECREATE -eq 1 ]; then + openssl req \ + -new -x509 \ + -key "$SVR_BASE.key" \ + -config server.cnf \ + -days "$DAYS" \ + -out "$SVR_BASE.pem" + + [ ! -f "SVR_BASE.pem" ] || fatal "cannot create server certificate" fi -if test -f $CTL_BASE.key; then - echo "$CTL_BASE.key exists" -else - echo "generating $CTL_BASE.key" - openssl genrsa -out $CTL_BASE.key $BITS || error "could not genrsa" + +# === +# Generate client certificate +# === + +# generate private key; do no recreate it if they already exist. +if [ ! -f "$CTL_BASE.key" ]; then + openssl genrsa -out "$CTL_BASE.key" "$BITS" fi -# create self-signed cert for server -echo "[req]" > request.cfg -echo "default_bits=$BITS" >> request.cfg -echo "default_md=$HASH" >> request.cfg -echo "prompt=no" >> request.cfg -echo "distinguished_name=req_distinguished_name" >> request.cfg -echo "" >> request.cfg -echo "[req_distinguished_name]" >> request.cfg -echo "commonName=$SERVERNAME" >> request.cfg +cat >client.cnf <<EOF +[req] +default_bits=$BITS +default_md=$HASH +prompt=no +distinguished_name=req_distinguished_name +req_extensions=v3_req +[req_distinguished_name] +commonName=$CLIENTNAME +[v3_req] +basicConstraints=critical,CA:FALSE +subjectAltName=DNS:$CLIENTNAME +EOF + +[ -f client.cnf ] || fatal "cannot create openssl configuration" + +if [ ! -f "$CTL_BASE.pem" -o $RECREATE -eq 1 ]; then + openssl x509 \ + -addtrust serverAuth \ + -in "$SVR_BASE.pem" \ + -out "${SVR_BASE}_trust.pem" + + openssl req \ + -new \ + -config client.cnf \ + -key "$CTL_BASE.key" \ + | openssl x509 \ + -req \ + -days "$DAYS" \ + -CA "${SVR_BASE}_trust.pem" \ + -CAkey "$SVR_BASE.key" \ + -CAcreateserial \ + -$HASH \ + -extfile client.cnf \ + -extensions v3_req \ + -out "$CTL_BASE.pem" + + [ ! -f "CTL_BASE.pem" ] || fatal "cannot create signed client certificate" +fi -test -f request.cfg || error "could not create request.cfg" +# remove unused permissions +chmod o-rw \ + "$SVR_BASE.pem" \ + "$SVR_BASE.key" +chmod g+r,o-rw \ + "$CTL_BASE.pem" \ + "$CTL_BASE.key" + +cleanup + +echo "Setup success. Certificates created. Enable in unbound.conf file to use" -echo "create $SVR_BASE.pem (self signed certificate)" -openssl req -key $SVR_BASE.key -config request.cfg -new -x509 -days $DAYS -out $SVR_BASE.pem || error "could not create $SVR_BASE.pem" -# create trusted usage pem -openssl x509 -in $SVR_BASE.pem -addtrust serverAuth -out $SVR_BASE"_trust.pem" - -# create client request and sign it, piped -echo "[req]" > request.cfg -echo "default_bits=$BITS" >> request.cfg -echo "default_md=$HASH" >> request.cfg -echo "prompt=no" >> request.cfg -echo "distinguished_name=req_distinguished_name" >> request.cfg -echo "" >> request.cfg -echo "[req_distinguished_name]" >> request.cfg -echo "commonName=$CLIENTNAME" >> request.cfg - -test -f request.cfg || error "could not create request.cfg" - -echo "create $CTL_BASE.pem (signed client certificate)" -openssl req -key $CTL_BASE.key -config request.cfg -new | openssl x509 -req -days $DAYS -CA $SVR_BASE"_trust.pem" -CAkey $SVR_BASE.key -CAcreateserial -$HASH -out $CTL_BASE.pem -test -f $CTL_BASE.pem || error "could not create $CTL_BASE.pem" # create trusted usage pem # openssl x509 -in $CTL_BASE.pem -addtrust clientAuth -out $CTL_BASE"_trust.pem" @@ -148,13 +223,3 @@ test -f $CTL_BASE.pem || error "could not create $CTL_BASE.pem" # echo "empty password is used, simply click OK on the password dialog box." # openssl pkcs12 -export -in $CTL_BASE"_trust.pem" -inkey $CTL_BASE.key -name "unbound remote control client cert" -out $CTL_BASE"_browser.pfx" -password "pass:" || error "could not create browser certificate" -# set desired permissions -chmod 0640 $SVR_BASE.pem $SVR_BASE.key $CTL_BASE.pem $CTL_BASE.key - -# remove crap -rm -f request.cfg -rm -f $CTL_BASE"_trust.pem" $SVR_BASE"_trust.pem" $SVR_BASE"_trust.srl" - -echo "Setup success. Certificates created. Enable in unbound.conf file to use" - -exit 0 |