Upgrade to version 3.1.3
This version fixes an incompatibility with GNU bc.
This commit is contained in:
parent
3960d8924a
commit
ee177a09be
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/bc/dist/; revision=363074 svn path=/vendor/bc/3.1.3/; revision=363075; tag=vendor/bc/3.1.3
@ -29,7 +29,7 @@
|
|||||||
#
|
#
|
||||||
.POSIX:
|
.POSIX:
|
||||||
|
|
||||||
VERSION = 3.1.1
|
VERSION = 3.1.3
|
||||||
|
|
||||||
SRC = %%SRC%%
|
SRC = %%SRC%%
|
||||||
OBJ = %%OBJ%%
|
OBJ = %%OBJ%%
|
||||||
@ -335,7 +335,7 @@ clean_tests: clean clean_config clean_coverage
|
|||||||
@$(RM) -f bc.old
|
@$(RM) -f bc.old
|
||||||
|
|
||||||
install_locales:
|
install_locales:
|
||||||
$(LOCALE_INSTALL) $(NLSPATH) $(MAIN_EXEC) $(DESTDIR)
|
%%INSTALL_LOCALES%%
|
||||||
|
|
||||||
install_bc_manpage:
|
install_bc_manpage:
|
||||||
$(SAFE_INSTALL) $(MANPAGE_INSTALL_ARGS) $(BC_MANPAGE) $(DESTDIR)$(MAN1DIR)/$(BC_MANPAGE_NAME)
|
$(SAFE_INSTALL) $(MANPAGE_INSTALL_ARGS) $(BC_MANPAGE) $(DESTDIR)$(MAN1DIR)/$(BC_MANPAGE_NAME)
|
||||||
|
20
NEWS.md
20
NEWS.md
@ -1,5 +1,25 @@
|
|||||||
# News
|
# News
|
||||||
|
|
||||||
|
## 3.1.3
|
||||||
|
|
||||||
|
This is a production release that fixes one minor bug: if `bc` was invoked like
|
||||||
|
the following, it would error:
|
||||||
|
|
||||||
|
```
|
||||||
|
echo "if (1 < 3) 1" | bc
|
||||||
|
```
|
||||||
|
|
||||||
|
Unless users run into this bug, they do not need to upgrade, but it is suggested
|
||||||
|
that they do.
|
||||||
|
|
||||||
|
## 3.1.2
|
||||||
|
|
||||||
|
This is a production release that adds a way to install *all* locales. Users do
|
||||||
|
***NOT*** need to upgrade.
|
||||||
|
|
||||||
|
For package maintainers wishing to make use of the change, just pass `-l` to
|
||||||
|
`configure.sh`.
|
||||||
|
|
||||||
## 3.1.1
|
## 3.1.1
|
||||||
|
|
||||||
This is a production release that adds two Spanish locales. Users do ***NOT***
|
This is a production release that adds two Spanish locales. Users do ***NOT***
|
||||||
|
23
configure.sh
23
configure.sh
@ -47,12 +47,12 @@ usage() {
|
|||||||
|
|
||||||
printf 'usage: %s -h\n' "$script"
|
printf 'usage: %s -h\n' "$script"
|
||||||
printf ' %s --help\n' "$script"
|
printf ' %s --help\n' "$script"
|
||||||
printf ' %s [-bD|-dB|-c] [-EfgGHMNPT] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\n' "$script"
|
printf ' %s [-bD|-dB|-c] [-EfgGHlMNPT] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\n' "$script"
|
||||||
printf ' %s \\\n' "$script"
|
printf ' %s \\\n' "$script"
|
||||||
printf ' [--bc-only --disable-dc|--dc-only --disable-bc|--coverage] \\\n'
|
printf ' [--bc-only --disable-dc|--dc-only --disable-bc|--coverage] \\\n'
|
||||||
printf ' [--debug --disable-extra-math --disable-generated-tests] \\\n'
|
printf ' [--debug --disable-extra-math --disable-generated-tests] \\\n'
|
||||||
printf ' [--disable-history --disable-man-pages --disable-nls] \\\n'
|
printf ' [--disable-history --disable-man-pages --disable-nls] \\\n'
|
||||||
printf ' [--disable-prompt --disable-strip] \\\n'
|
printf ' [--disable-prompt --disable-strip] [--install-all-locales] \\\n'
|
||||||
printf ' [--opt=OPT_LEVEL] [--karatsuba-len=KARATSUBA_LEN] \\\n'
|
printf ' [--opt=OPT_LEVEL] [--karatsuba-len=KARATSUBA_LEN] \\\n'
|
||||||
printf ' [--prefix=PREFIX] [--bindir=BINDIR] [--datarootdir=DATAROOTDIR] \\\n'
|
printf ' [--prefix=PREFIX] [--bindir=BINDIR] [--datarootdir=DATAROOTDIR] \\\n'
|
||||||
printf ' [--datadir=DATADIR] [--mandir=MANDIR] [--man1dir=MAN1DIR] \\\n'
|
printf ' [--datadir=DATADIR] [--mandir=MANDIR] [--man1dir=MAN1DIR] \\\n'
|
||||||
@ -98,6 +98,10 @@ usage() {
|
|||||||
printf ' -k KARATSUBA_LEN, --karatsuba-len KARATSUBA_LEN\n'
|
printf ' -k KARATSUBA_LEN, --karatsuba-len KARATSUBA_LEN\n'
|
||||||
printf ' Set the karatsuba length to KARATSUBA_LEN (default is 64).\n'
|
printf ' Set the karatsuba length to KARATSUBA_LEN (default is 64).\n'
|
||||||
printf ' It is an error if KARATSUBA_LEN is not a number or is less than 16.\n'
|
printf ' It is an error if KARATSUBA_LEN is not a number or is less than 16.\n'
|
||||||
|
printf ' -l, --install-all-locales\n'
|
||||||
|
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, --disable-man-pages\n'
|
printf ' -M, --disable-man-pages\n'
|
||||||
printf ' Disable installing manpages.\n'
|
printf ' Disable installing manpages.\n'
|
||||||
printf ' -N, --disable-nls\n'
|
printf ' -N, --disable-nls\n'
|
||||||
@ -319,8 +323,9 @@ nls=1
|
|||||||
prompt=1
|
prompt=1
|
||||||
force=0
|
force=0
|
||||||
strip_bin=1
|
strip_bin=1
|
||||||
|
all_locales=0
|
||||||
|
|
||||||
while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do
|
while getopts "bBcdDEfgGhHk:lMNO:PST-" opt; do
|
||||||
|
|
||||||
case "$opt" in
|
case "$opt" in
|
||||||
b) bc_only=1 ;;
|
b) bc_only=1 ;;
|
||||||
@ -335,6 +340,7 @@ while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do
|
|||||||
h) usage ;;
|
h) usage ;;
|
||||||
H) hist=0 ;;
|
H) hist=0 ;;
|
||||||
k) karatsuba_len="$OPTARG" ;;
|
k) karatsuba_len="$OPTARG" ;;
|
||||||
|
l) all_locales=1 ;;
|
||||||
M) install_manpages=0 ;;
|
M) install_manpages=0 ;;
|
||||||
N) nls=0 ;;
|
N) nls=0 ;;
|
||||||
O) optimization="$OPTARG" ;;
|
O) optimization="$OPTARG" ;;
|
||||||
@ -423,6 +429,7 @@ while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do
|
|||||||
disable-nls) nls=0 ;;
|
disable-nls) nls=0 ;;
|
||||||
disable-prompt) prompt=0 ;;
|
disable-prompt) prompt=0 ;;
|
||||||
disable-strip) strip_bin=0 ;;
|
disable-strip) strip_bin=0 ;;
|
||||||
|
install-all-locales) all_locales=1 ;;
|
||||||
help* | bc-only* | dc-only* | coverage* | debug*)
|
help* | bc-only* | dc-only* | coverage* | debug*)
|
||||||
usage "No arg allowed for --$arg option" ;;
|
usage "No arg allowed for --$arg option" ;;
|
||||||
disable-bc* | disable-dc* | disable-extra-math*)
|
disable-bc* | disable-dc* | disable-extra-math*)
|
||||||
@ -431,6 +438,8 @@ while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do
|
|||||||
usage "No arg allowed for --$arg option" ;;
|
usage "No arg allowed for --$arg option" ;;
|
||||||
disable-man-pages* | disable-nls* | disable-strip*)
|
disable-man-pages* | disable-nls* | disable-strip*)
|
||||||
usage "No arg allowed for --$arg option" ;;
|
usage "No arg allowed for --$arg option" ;;
|
||||||
|
install-all-locales*)
|
||||||
|
usage "No arg allowed for --$arg option" ;;
|
||||||
'') break ;; # "--" terminates argument processing
|
'') break ;; # "--" terminates argument processing
|
||||||
* ) usage "Invalid option $LONG_OPTARG" ;;
|
* ) usage "Invalid option $LONG_OPTARG" ;;
|
||||||
esac
|
esac
|
||||||
@ -751,6 +760,13 @@ if [ "$nls" -ne 0 ]; then
|
|||||||
else
|
else
|
||||||
install_locales_prereqs=""
|
install_locales_prereqs=""
|
||||||
uninstall_locales_prereqs=""
|
uninstall_locales_prereqs=""
|
||||||
|
all_locales=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$nls" -ne 0 ] && [ "$all_locales" -ne 0 ]; then
|
||||||
|
install_locales="\$(LOCALE_INSTALL) -l \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)"
|
||||||
|
else
|
||||||
|
install_locales="\$(LOCALE_INSTALL) \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$hist" -eq 1 ]; then
|
if [ "$hist" -eq 1 ]; then
|
||||||
@ -911,6 +927,7 @@ contents=$(replace "$contents" "HOSTCC" "$HOSTCC")
|
|||||||
contents=$(replace "$contents" "COVERAGE_OUTPUT" "$COVERAGE_OUTPUT")
|
contents=$(replace "$contents" "COVERAGE_OUTPUT" "$COVERAGE_OUTPUT")
|
||||||
contents=$(replace "$contents" "COVERAGE_PREREQS" "$COVERAGE_PREREQS")
|
contents=$(replace "$contents" "COVERAGE_PREREQS" "$COVERAGE_PREREQS")
|
||||||
contents=$(replace "$contents" "INSTALL_PREREQS" "$install_prereqs")
|
contents=$(replace "$contents" "INSTALL_PREREQS" "$install_prereqs")
|
||||||
|
contents=$(replace "$contents" "INSTALL_LOCALES" "$install_locales")
|
||||||
contents=$(replace "$contents" "INSTALL_LOCALES_PREREQS" "$install_locales_prereqs")
|
contents=$(replace "$contents" "INSTALL_LOCALES_PREREQS" "$install_locales_prereqs")
|
||||||
contents=$(replace "$contents" "UNINSTALL_MAN_PREREQS" "$uninstall_man_prereqs")
|
contents=$(replace "$contents" "UNINSTALL_MAN_PREREQS" "$uninstall_man_prereqs")
|
||||||
contents=$(replace "$contents" "UNINSTALL_PREREQS" "$uninstall_prereqs")
|
contents=$(replace "$contents" "UNINSTALL_PREREQS" "$uninstall_prereqs")
|
||||||
|
@ -112,10 +112,10 @@
|
|||||||
|
|
||||||
#if BC_ENABLED
|
#if BC_ENABLED
|
||||||
|
|
||||||
#define BC_S (BC_ENABLED && (vm.flags & BC_FLAG_S))
|
#define BC_S (vm.flags & BC_FLAG_S)
|
||||||
#define BC_W (BC_ENABLED && (vm.flags & BC_FLAG_W))
|
#define BC_W (vm.flags & BC_FLAG_W)
|
||||||
#define BC_L (BC_ENABLED && (vm.flags & BC_FLAG_L))
|
#define BC_L (vm.flags & BC_FLAG_L)
|
||||||
#define BC_G (BC_ENABLED && (vm.flags & BC_FLAG_G))
|
#define BC_G (vm.flags & BC_FLAG_G)
|
||||||
|
|
||||||
#endif // BC_ENABLED
|
#endif // BC_ENABLED
|
||||||
|
|
||||||
|
@ -28,6 +28,9 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
|
if [ $# -eq 1 ]; then
|
||||||
|
printf '%s\n' "$1"
|
||||||
|
fi
|
||||||
printf "usage: %s NLSPATH main_exec [DESTDIR]\n" "$0" 1>&2
|
printf "usage: %s NLSPATH main_exec [DESTDIR]\n" "$0" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
@ -150,6 +153,17 @@ scriptdir=$(dirname "$script")
|
|||||||
|
|
||||||
. "$scriptdir/functions.sh"
|
. "$scriptdir/functions.sh"
|
||||||
|
|
||||||
|
all_locales=0
|
||||||
|
|
||||||
|
while getopts "l" opt; do
|
||||||
|
|
||||||
|
case "$opt" in
|
||||||
|
l) all_locales=1 ; shift ;;
|
||||||
|
?) usage "Invalid option $opt" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
test "$#" -ge 2 || usage
|
test "$#" -ge 2 || usage
|
||||||
|
|
||||||
nlspath="$1"
|
nlspath="$1"
|
||||||
@ -180,19 +194,23 @@ fi
|
|||||||
for file in $locales_dir/*.msg; do
|
for file in $locales_dir/*.msg; do
|
||||||
|
|
||||||
locale=$(basename "$file" ".msg")
|
locale=$(basename "$file" ".msg")
|
||||||
loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec")
|
|
||||||
|
|
||||||
localeexists "$locales" "$locale" "$destdir"
|
if [ "$all_locales" -eq 0 ]; then
|
||||||
err="$?"
|
|
||||||
|
|
||||||
if [ "$err" -eq 0 ]; then
|
localeexists "$locales" "$locale" "$destdir"
|
||||||
continue
|
err="$?"
|
||||||
|
|
||||||
|
if [ "$err" -eq 0 ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -L "$file" ]; then
|
if [ -L "$file" ]; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec")
|
||||||
|
|
||||||
gencatfile "$loc" "$file"
|
gencatfile "$loc" "$file"
|
||||||
|
|
||||||
done
|
done
|
||||||
@ -200,15 +218,19 @@ done
|
|||||||
for file in $locales_dir/*.msg; do
|
for file in $locales_dir/*.msg; do
|
||||||
|
|
||||||
locale=$(basename "$file" ".msg")
|
locale=$(basename "$file" ".msg")
|
||||||
loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec")
|
|
||||||
|
|
||||||
localeexists "$locales" "$locale" "$destdir"
|
if [ "$all_locales" -eq 0 ]; then
|
||||||
err="$?"
|
|
||||||
|
|
||||||
if [ "$err" -eq 0 ]; then
|
localeexists "$locales" "$locale" "$destdir"
|
||||||
continue
|
err="$?"
|
||||||
|
|
||||||
|
if [ "$err" -eq 0 ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec")
|
||||||
|
|
||||||
mkdir -p $(dirname "$loc")
|
mkdir -p $(dirname "$loc")
|
||||||
|
|
||||||
if [ -L "$file" ]; then
|
if [ -L "$file" ]; then
|
||||||
|
@ -59,6 +59,7 @@ fi
|
|||||||
# This way, we can delete catalogs for locales that we had to install
|
# This way, we can delete catalogs for locales that we had to install
|
||||||
# because they are symlinks.
|
# because they are symlinks.
|
||||||
locales=$(gen_nlspath "$destdir/$nlspath" "*" "$main_exec")
|
locales=$(gen_nlspath "$destdir/$nlspath" "*" "$main_exec")
|
||||||
|
locales=$(ls $locales 2> /dev/null)
|
||||||
|
|
||||||
for l in $locales; do
|
for l in $locales; do
|
||||||
rm -f "$l"
|
rm -f "$l"
|
||||||
|
@ -366,18 +366,18 @@ can be disabled permanently in the build by passing the `-P` flag or the
|
|||||||
|
|
||||||
Both commands are equivalent.
|
Both commands are equivalent.
|
||||||
|
|
||||||
### Long Options
|
### Locales
|
||||||
|
|
||||||
By default, `bc` and `dc` support long options like `--mathlib` and
|
By default, `bc` and `dc` do not install all locales, but only the enabled
|
||||||
`--interactive`. However, support for these options requires `getopt_long()`
|
locales. If `DESTDIR` exists and is not empty, then they will install all of
|
||||||
which is not in the POSIX standard. For those platforms that do *not* have
|
the locales that exist on the system. The `-l` flag or `--install-all-locales`
|
||||||
`getopt_long()` it will be disabled automatically, or if you wish to disable
|
option skips all of that and just installs all of the locales that `bc` and `dc`
|
||||||
them regardless, you can pass the `-L` flag or the `--disable-long-options`
|
have, regardless. To enable that behavior, you can pass the `-l` flag or the
|
||||||
option to `configure.sh`, as follows:
|
`--install-all-locales` option to `configure.sh`, as follows:
|
||||||
|
|
||||||
```
|
```
|
||||||
./configure.sh -L
|
./configure.sh -l
|
||||||
./configure.sh --disable-long-options
|
./configure.sh --install-all-locales
|
||||||
```
|
```
|
||||||
|
|
||||||
Both commands are equivalent.
|
Both commands are equivalent.
|
||||||
|
17
src/vm.c
17
src/vm.c
@ -602,8 +602,21 @@ static void bc_vm_stdin(void) {
|
|||||||
else if (BC_ERR(string))
|
else if (BC_ERR(string))
|
||||||
bc_parse_err(&vm.prs, BC_ERROR_PARSE_STRING);
|
bc_parse_err(&vm.prs, BC_ERROR_PARSE_STRING);
|
||||||
#if BC_ENABLED
|
#if BC_ENABLED
|
||||||
else if (BC_IS_BC && BC_ERR(BC_PARSE_NO_EXEC(&vm.prs)))
|
else if (BC_IS_BC && BC_ERR(BC_PARSE_NO_EXEC(&vm.prs))) {
|
||||||
bc_parse_err(&vm.prs, BC_ERROR_PARSE_BLOCK);
|
|
||||||
|
size_t i;
|
||||||
|
bool good = true;
|
||||||
|
|
||||||
|
for (i = 0; good && i < vm.prs.flags.len; ++i) {
|
||||||
|
uint16_t flag = *((uint16_t*) bc_vec_item(&vm.prs.flags, i));
|
||||||
|
good = ((flag & BC_PARSE_FLAG_BRACE) != BC_PARSE_FLAG_BRACE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (good) {
|
||||||
|
while (BC_PARSE_IF_END(&vm.prs)) bc_vm_process("else {}", true);
|
||||||
|
}
|
||||||
|
else bc_parse_err(&vm.prs, BC_ERROR_PARSE_BLOCK);
|
||||||
|
}
|
||||||
#endif // BC_ENABLED
|
#endif // BC_ENABLED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,3 +13,4 @@
|
|||||||
i = 4
|
i = 4
|
||||||
read()
|
read()
|
||||||
i *= 5
|
i *= 5
|
||||||
|
if (1 < 3) 1
|
||||||
|
@ -4,3 +4,4 @@ String /* with partial commentString /* with full comment */3
|
|||||||
7
|
7
|
||||||
String with a # hash comment3
|
String with a # hash comment3
|
||||||
20
|
20
|
||||||
|
1
|
||||||
|
@ -65,9 +65,17 @@ rm -f "$out"
|
|||||||
printf 'Running %s stdin tests...' "$d"
|
printf 'Running %s stdin tests...' "$d"
|
||||||
|
|
||||||
cat "$testdir/$d/stdin.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null
|
cat "$testdir/$d/stdin.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null
|
||||||
|
|
||||||
diff "$testdir/$d/stdin_results.txt" "$out"
|
diff "$testdir/$d/stdin_results.txt" "$out"
|
||||||
|
|
||||||
|
if [ "$d" = "bc" ]; then
|
||||||
|
|
||||||
|
cat "$testdir/$d/stdin1.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null
|
||||||
|
diff "$testdir/$d/stdin1_results.txt" "$out"
|
||||||
|
|
||||||
|
cat "$testdir/$d/stdin2.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null
|
||||||
|
diff "$testdir/$d/stdin2_results.txt" "$out"
|
||||||
|
fi
|
||||||
|
|
||||||
rm -f "$out1"
|
rm -f "$out1"
|
||||||
|
|
||||||
printf 'pass\n'
|
printf 'pass\n'
|
||||||
|
Loading…
Reference in New Issue
Block a user