From e99548ea8a2b1dd4e163036cabf4e26c40fe5170 Mon Sep 17 00:00:00 2001
From: Andrew Wood
Date: Mon, 28 Aug 2023 10:04:39 +0100
Subject: [PATCH] Major restructuring to switch build system from old scripts
to GNU Automake.
---
.gitignore | 17 +-
Makefile.am | 102 ++++
README.md | 18 +-
autoconf/Makefile.in | 14 -
autoconf/configure.in | 193 -------
autoconf/make/link.mk | 11 -
autoconf/make/package.mk | 17 -
autoconf/make/rules.mk | 47 --
autoconf/make/unreal.mk | 188 ------
autoconf/make/vars.mk | 46 --
autoconf/scripts/depend.sh | 33 --
autoconf/scripts/index.sh | 191 -------
autoconf/scripts/install-sh | 541 ------------------
autoconf/scripts/makemake.sh | 130 -----
autoconf/scripts/mkinstalldirs | 33 --
autoconf/scripts/po2table.sh | 63 --
autoconf/scripts/run-test.sh | 209 -------
configure.ac | 98 ++++
doc/DEVELOPERS.md | 71 +--
doc/NEWS.md | 18 +-
doc/PACKAGE | 1 -
doc/TODO.md | 4 -
doc/VERSION | 1 -
{autoconf/scripts => doc}/benchmark.sh | 2 +-
doc/lsm.in | 19 -
doc/{quickref.1.in => pv.1} | 82 +--
doc/release-checklist | 8 +-
generate.sh | 44 --
po/.gitignore | 9 +
po/LINGUAS | 4 +
po/Makefile.in.in | 510 +++++++++++++++++
po/Makevars | 82 +++
po/POTFILES.in | 16 +
{src/nls => po}/de.po | 358 ++++++------
{src/nls => po}/fr.po | 358 ++++++------
{src/nls => po}/pl.po | 363 ++++++------
{src/nls => po}/pt.po | 359 ++++++------
src/include/config-aux.h | 11 +-
autoconf/header.in => src/include/config.h.in | 50 +-
src/include/library/getopt.h | 40 --
src/include/library/gettext.h | 59 --
src/include/pv.h | 5 +
src/library/getopt.c | 115 ----
src/library/gettext.c | 119 ----
src/main/help.c | 4 +-
src/main/options.c | 5 +-
src/main/version.c | 6 +-
src/nls/pv.pot | 467 ---------------
...length_at_magnitude_boundary_-_Bytes.test} | 0
..._length_at_magnitude_boundary_-_Rate.test} | 0
..._files.sh => Bug_-_Install_all_files.test} | 22 +-
...-rate.sh => Display_-_--average-rate.test} | 0
...play_-_--bits.sh => Display_-_--bits.test} | 0
...ent.sh => Display_-_--buffer-percent.test} | 0
...ay_-_--bytes.sh => Display_-_--bytes.test} | 0
...> Display_-_--eta_-_plausible_values.test} | 0
...isplay_-_--fineta_-_plausible_values.test} | 0
...itten.sh => Display_-_--last-written.test} | 0
..._--numeric.sh => Display_-_--numeric.test} | 0
...es.sh => Display_-_--numeric_--bytes.test} | 0
...play_-_--numeric_--bytes_--line-mode.test} | 0
...er.sh => Display_-_--numeric_--timer.test} | 0
...isplay_-_--progress_-_basic_movement.test} | 0
...=> Display_-_--progress_-_increasing.test} | 0
...ay_-_--quiet.sh => Display_-_--quiet.test} | 0
...y_-_--rate_-_displayed_value_changes.test} | 0
..._-_--timer_-_displayed_value_changes.test} | 0
..._--pidfile.sh => General_-_--pidfile.test} | 2 +-
...rity_-_Basic.sh => Integrity_-_Basic.test} | 0
...y_data.sh => Integrity_-_Binary_data.test} | 0
...sh => Integrity_-_From_bursty_source.test} | 0
...sh => Integrity_-_Large_file_support.test} | 6 +-
... => Integrity_-_On_output_pipe_close.test} | 2 +-
...> Integrity_-_When_adjusted_remotely.test} | 2 +-
..._-_Basic.sh => Memory_safety_-_Basic.test} | 2 +-
...ory_safety_-_Remote_control_receiver.test} | 4 +-
...emory_safety_-_Remote_control_sender.test} | 4 +-
...ect-io.sh => Modifiers_-_--direct-io.test} | 0
..._-_--force.sh => Modifiers_-_--force.test} | 0
...nterval.sh => Modifiers_-_--interval.test} | 0
...e-mode.sh => Modifiers_-_--line-mode.test} | 0
...rs_-_--size.sh => Modifiers_-_--size.test} | 0
...=> Modifiers_-_--size_from_file_size.test} | 0
...rs_-_--sync.sh => Modifiers_-_--sync.test} | 0
..._width.sh => Terminal_-_Detect_width.test} | 6 +-
...-limit.sh => Transfer_-_--rate-limit.test} | 0
...-_--remote.sh => Transfer_-_--remote.test} | 2 +-
...size.sh => Transfer_-_--stop-at-size.test} | 0
{autoconf/scripts => tests}/run-valgrind.sh | 4 +-
tests/test-env.sh | 28 +
90 files changed, 1704 insertions(+), 3521 deletions(-)
create mode 100644 Makefile.am
delete mode 100644 autoconf/Makefile.in
delete mode 100644 autoconf/configure.in
delete mode 100644 autoconf/make/link.mk
delete mode 100644 autoconf/make/package.mk
delete mode 100644 autoconf/make/rules.mk
delete mode 100644 autoconf/make/unreal.mk
delete mode 100644 autoconf/make/vars.mk
delete mode 100755 autoconf/scripts/depend.sh
delete mode 100755 autoconf/scripts/index.sh
delete mode 100755 autoconf/scripts/install-sh
delete mode 100755 autoconf/scripts/makemake.sh
delete mode 100755 autoconf/scripts/mkinstalldirs
delete mode 100755 autoconf/scripts/po2table.sh
delete mode 100755 autoconf/scripts/run-test.sh
create mode 100644 configure.ac
delete mode 100644 doc/PACKAGE
delete mode 100644 doc/VERSION
rename {autoconf/scripts => doc}/benchmark.sh (95%)
delete mode 100644 doc/lsm.in
rename doc/{quickref.1.in => pv.1} (94%)
delete mode 100755 generate.sh
create mode 100644 po/.gitignore
create mode 100644 po/LINGUAS
create mode 100644 po/Makefile.in.in
create mode 100644 po/Makevars
create mode 100644 po/POTFILES.in
rename {src/nls => po}/de.po (89%)
rename {src/nls => po}/fr.po (89%)
rename {src/nls => po}/pl.po (85%)
rename {src/nls => po}/pt.po (88%)
rename autoconf/header.in => src/include/config.h.in (88%)
delete mode 100644 src/include/library/getopt.h
delete mode 100644 src/include/library/gettext.h
delete mode 100644 src/library/getopt.c
delete mode 100644 src/library/gettext.c
delete mode 100644 src/nls/pv.pot
rename tests/{Bug_-_Display_length_at_magnitude_boundary_-_Bytes.sh => Bug_-_Display_length_at_magnitude_boundary_-_Bytes.test} (100%)
mode change 100644 => 100755
rename tests/{Bug_-_Display_length_at_magnitude_boundary_-_Rate.sh => Bug_-_Display_length_at_magnitude_boundary_-_Rate.test} (100%)
mode change 100644 => 100755
rename tests/{Bug_-_Install_all_files.sh => Bug_-_Install_all_files.test} (60%)
mode change 100644 => 100755
rename tests/{Display_-_--average-rate.sh => Display_-_--average-rate.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--bits.sh => Display_-_--bits.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--buffer-percent.sh => Display_-_--buffer-percent.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--bytes.sh => Display_-_--bytes.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--eta_-_plausible_values.sh => Display_-_--eta_-_plausible_values.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--fineta_-_plausible_values.sh => Display_-_--fineta_-_plausible_values.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--last-written.sh => Display_-_--last-written.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--numeric.sh => Display_-_--numeric.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--numeric_--bytes.sh => Display_-_--numeric_--bytes.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--numeric_--bytes_--line-mode.sh => Display_-_--numeric_--bytes_--line-mode.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--numeric_--timer.sh => Display_-_--numeric_--timer.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--progress_-_basic_movement.sh => Display_-_--progress_-_basic_movement.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--progress_-_increasing.sh => Display_-_--progress_-_increasing.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--quiet.sh => Display_-_--quiet.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--rate_-_displayed_value_changes.sh => Display_-_--rate_-_displayed_value_changes.test} (100%)
mode change 100644 => 100755
rename tests/{Display_-_--timer_-_displayed_value_changes.sh => Display_-_--timer_-_displayed_value_changes.test} (100%)
mode change 100644 => 100755
rename tests/{General_-_--pidfile.sh => General_-_--pidfile.test} (99%)
mode change 100644 => 100755
rename tests/{Integrity_-_Basic.sh => Integrity_-_Basic.test} (100%)
mode change 100644 => 100755
rename tests/{Integrity_-_Binary_data.sh => Integrity_-_Binary_data.test} (100%)
mode change 100644 => 100755
rename tests/{Integrity_-_From_bursty_source.sh => Integrity_-_From_bursty_source.test} (100%)
mode change 100644 => 100755
rename tests/{Integrity_-_Large_file_support.sh => Integrity_-_Large_file_support.test} (99%)
mode change 100644 => 100755
rename tests/{Integrity_-_On_output_pipe_close.sh => Integrity_-_On_output_pipe_close.test} (99%)
mode change 100644 => 100755
rename tests/{Integrity_-_When_adjusted_remotely.sh => Integrity_-_When_adjusted_remotely.test} (99%)
mode change 100644 => 100755
rename tests/{Memory_safety_-_Basic.sh => Memory_safety_-_Basic.test} (95%)
mode change 100644 => 100755
rename tests/{Memory_safety_-_Remote_control_receiver.sh => Memory_safety_-_Remote_control_receiver.test} (96%)
mode change 100644 => 100755
rename tests/{Memory_safety_-_Remote_control_sender.sh => Memory_safety_-_Remote_control_sender.test} (96%)
mode change 100644 => 100755
rename tests/{Modifiers_-_--direct-io.sh => Modifiers_-_--direct-io.test} (100%)
mode change 100644 => 100755
rename tests/{Modifiers_-_--force.sh => Modifiers_-_--force.test} (100%)
mode change 100644 => 100755
rename tests/{Modifiers_-_--interval.sh => Modifiers_-_--interval.test} (100%)
mode change 100644 => 100755
rename tests/{Modifiers_-_--line-mode.sh => Modifiers_-_--line-mode.test} (100%)
mode change 100644 => 100755
rename tests/{Modifiers_-_--size.sh => Modifiers_-_--size.test} (100%)
mode change 100644 => 100755
rename tests/{Modifiers_-_--size_from_file_size.sh => Modifiers_-_--size_from_file_size.test} (100%)
mode change 100644 => 100755
rename tests/{Modifiers_-_--sync.sh => Modifiers_-_--sync.test} (100%)
mode change 100644 => 100755
rename tests/{Terminal_-_Detect_width.sh => Terminal_-_Detect_width.test} (98%)
mode change 100644 => 100755
rename tests/{Transfer_-_--rate-limit.sh => Transfer_-_--rate-limit.test} (100%)
mode change 100644 => 100755
rename tests/{Transfer_-_--remote.sh => Transfer_-_--remote.test} (99%)
mode change 100644 => 100755
rename tests/{Transfer_-_--stop-at-size.sh => Transfer_-_--stop-at-size.test} (100%)
mode change 100644 => 100755
rename {autoconf/scripts => tests}/run-valgrind.sh (94%)
create mode 100644 tests/test-env.sh
diff --git a/.gitignore b/.gitignore
index dc96e0a..59d1a38 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,18 @@
-*~
+build-aux
+missing
+compile
+depcomp
+install-sh
+config.sub
+config.guess
+Makefile.in
+aclocal.m4
+autoscan.log
configure
+configure.scan
+autom4te.cache
+ABOUT-NLS
+m4
+*~
+*.tar.gz
patch-backlog
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..e920174
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,102 @@
+## Process this file with automake to produce Makefile.in
+
+AUTOMAKE_OPTIONS = subdir-objects no-dependencies
+
+SUBDIRS = po
+
+bin_PROGRAMS = pv
+dist_doc_DATA = README.md doc/INSTALL doc/COPYING doc/NEWS.md doc/ACKNOWLEDGEMENTS.md doc/DEVELOPERS.md doc/TODO.md doc/benchmark.sh
+dist_man1_MANS = doc/pv.1
+
+EXTRA_DIST = doc/pv.1.md
+
+pv_SOURCES = \
+src/main/debug.c \
+src/main/help.c \
+src/main/main.c \
+src/main/options.c \
+src/main/remote.c \
+src/main/version.c \
+src/pv/cursor.c \
+src/pv/display.c \
+src/pv/file.c \
+src/pv/loop.c \
+src/pv/number.c \
+src/pv/signal.c \
+src/pv/state.c \
+src/pv/string.c \
+src/pv/transfer.c \
+src/pv/watchpid.c \
+src/include/config-aux.h \
+src/include/options.h \
+src/include/pv-internal.h \
+src/include/pv.h
+
+## Allow tests to write diagnostic info to fd 9 to reach the original
+## stderr even when the test driver is sending test output to a file.
+AM_TESTS_FD_REDIRECT = 9>&2
+
+AM_TESTS_ENVIRONMENT = \
+ . $(srcdir)/tests/test-env.sh \
+ ;
+TESTS = \
+tests/Bug_-_Display_length_at_magnitude_boundary_-_Bytes.test \
+tests/Bug_-_Display_length_at_magnitude_boundary_-_Rate.test \
+tests/Bug_-_Install_all_files.test \
+tests/Display_-_--average-rate.test \
+tests/Display_-_--bits.test \
+tests/Display_-_--buffer-percent.test \
+tests/Display_-_--bytes.test \
+tests/Display_-_--eta_-_plausible_values.test \
+tests/Display_-_--fineta_-_plausible_values.test \
+tests/Display_-_--last-written.test \
+tests/Display_-_--numeric_--bytes_--line-mode.test \
+tests/Display_-_--numeric_--bytes.test \
+tests/Display_-_--numeric.test \
+tests/Display_-_--numeric_--timer.test \
+tests/Display_-_--progress_-_basic_movement.test \
+tests/Display_-_--progress_-_increasing.test \
+tests/Display_-_--quiet.test \
+tests/Display_-_--rate_-_displayed_value_changes.test \
+tests/Display_-_--timer_-_displayed_value_changes.test \
+tests/General_-_--pidfile.test \
+tests/Integrity_-_Basic.test \
+tests/Integrity_-_Binary_data.test \
+tests/Integrity_-_From_bursty_source.test \
+tests/Integrity_-_Large_file_support.test \
+tests/Integrity_-_On_output_pipe_close.test \
+tests/Integrity_-_When_adjusted_remotely.test \
+tests/Memory_safety_-_Basic.test \
+tests/Memory_safety_-_Remote_control_receiver.test \
+tests/Memory_safety_-_Remote_control_sender.test \
+tests/Modifiers_-_--direct-io.test \
+tests/Modifiers_-_--force.test \
+tests/Modifiers_-_--interval.test \
+tests/Modifiers_-_--line-mode.test \
+tests/Modifiers_-_--size_from_file_size.test \
+tests/Modifiers_-_--size.test \
+tests/Modifiers_-_--sync.test \
+tests/Terminal_-_Detect_width.test \
+tests/Transfer_-_--rate-limit.test \
+tests/Transfer_-_--remote.test \
+tests/Transfer_-_--stop-at-size.test
+
+EXTRA_DIST += $(TESTS) tests/run-valgrind.sh tests/test-env.sh
+
+doc/pv.1.md: $(srcdir)/doc/pv.1
+ test -d doc || mkdir doc
+ pandoc --from man --to markdown < $< > $@
+
+SUFFIXES = .c .o .e
+
+.c.e:
+ -splint -badflag +posixlib $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $< > $@ 2>&1
+ -flawfinder $< >> $@ 2>&1
+
+indent:
+ cd $(srcdir) && indent -npro -kr -i8 -cd42 -c45 -l120 src/*/*.c
+
+analyse: $(pv_SOURCES:.c=.e) FORCE
+ grep -E -e '^Finished checking --' -e 'Hits = ' $+ 2>/dev/null || true
+
+FORCE:
diff --git a/README.md b/README.md
index 65ec1e4..976e076 100644
--- a/README.md
+++ b/README.md
@@ -11,8 +11,8 @@ completion it is, and an estimate of how long it will be until completion.
Documentation
-------------
-A manual page is included in this distribution. See "`man ./doc/quickref.1`",
-or "`man pv`" after installation.
+A manual page is included in this distribution ("`man pv`"). Before
+installation, it is in "[doc/pv.1.md](./doc/pv.1)".
Changes are listed in "[doc/NEWS.md](./doc/NEWS.md)". The to-do list is "[doc/TODO.md](./doc/TODO.md)".
@@ -22,15 +22,17 @@ Developers and translators, please see "[doc/DEVELOPERS.md](./doc/DEVELOPERS.md)
Compilation
-----------
-If this is not a packaged release, first run "`./generate.sh`".
-
To compile the package, type "`sh ./configure`", which should generate a
-Makefile for your system. You may then type "`make`" to build everything.
-Note that GNU _make_ is required; this may be installed as _gmake_ on some
-systems, so if typing "`make`" gives an error, try "`gmake`" instead.
+Makefile for your system. You may then type "`make`" to build everything,
+and "`make install`" to install it.
See the file "[doc/INSTALL](./doc/INSTALL)" for more about the _configure_ script.
+If this is not a packaged release, you will need the GNU build system tools
+(`autoconf`, `aclocal`, `autopoint`, `automake`) and the `gettext`
+development tools. You can then run "`autoreconf -is`" to generate the
+"`configure`" script.
+
Author and acknowledgements
---------------------------
@@ -44,7 +46,7 @@ though the [project issue tracker](https://codeberg.org/a-j-wood/pv/issues).
The **pv** home page is at:
- [http://www.ivarch.com/programs/pv.shtml](http://www.ivarch.com/programs/pv.shtml)
+[http://www.ivarch.com/programs/pv.shtml](http://www.ivarch.com/programs/pv.shtml)
The latest version can always be found here.
diff --git a/autoconf/Makefile.in b/autoconf/Makefile.in
deleted file mode 100644
index 57bde9a..0000000
--- a/autoconf/Makefile.in
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# Files from which this is generated (inside directory `autoconf/make'):
-#
-# package.mk # package name and distribution details
-# vars.mk # compilation, shell and linking variables
-# filelist.mk~ # lists of files (generated by "makemake.sh")
-# unreal.mk # phony targets
-# modules.mk~ # module linking rules (generated by "makemake.sh")
-# rules.mk # compilation rules
-# link.mk # real top-level targets
-# depend.mk~ # dependencies (generated by "makemake.sh")
-#
-#
-
diff --git a/autoconf/configure.in b/autoconf/configure.in
deleted file mode 100644
index 90225f1..0000000
--- a/autoconf/configure.in
+++ /dev/null
@@ -1,193 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-dnl
-dnl Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood
-dnl
-dnl Distributed under the Artistic License v2.0; see `doc/COPYING'.
-
-AC_INIT
-AC_CONFIG_SRCDIR([src/main/version.c])
-AC_CONFIG_AUX_DIR(autoconf/scripts)
-AC_CONFIG_HEADERS([src/include/config.h:autoconf/header.in])
-AH_BOTTOM([#include "config-aux.h"])
-
-dnl Package identity
-PACKAGE=`cat $srcdir/doc/PACKAGE`
-VERSION=`cat $srcdir/doc/VERSION`
-UCPACKAGE=`tr a-z A-Z < $srcdir/doc/PACKAGE`
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-AC_SUBST(UCPACKAGE)
-AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Package name])
-AC_DEFINE_UNQUOTED([PROGRAM_NAME], ["$PACKAGE"], [Name of this program])
-AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version of this program])
-AC_DEFINE([COPYRIGHT_YEAR], [_("2023")], [Copyright year])
-AC_DEFINE([COPYRIGHT_HOLDER], [_("Andrew Wood ")], [Copyright holder])
-AC_DEFINE([PROJECT_HOMEPAGE], ["http://www.ivarch.com/programs/" PROGRAM_NAME ".shtml"], [Project homepage])
-AC_DEFINE([BUG_REPORTS_TO], [_("")], [Bug reporting email address])
-
-AC_LANG(C)
-CFLAGS=${CFLAGS:-"-O"}
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_USE_SYSTEM_EXTENSIONS
-AC_C_CONST
-AC_HEADER_STDBOOL
-AC_SYS_LARGEFILE
-AC_CHECK_FUNCS(getopt_long getopt)
-AC_CHECK_HEADERS(getopt.h)
-AC_CHECK_FUNCS(memcpy basename vsnprintf strlcat)
-AC_CHECK_FUNCS(fdatasync)
-AC_CHECK_FUNCS(fpathconf sysconf posix_memalign)
-AC_CHECK_HEADERS(limits.h)
-AC_CHECK_HEADERS(wctype.h)
-AC_CHECK_HEADERS(termios.h)
-AC_CHECK_HEADERS(sys/ioctl.h)
-
-AC_ARG_ENABLE(debugging,
- [ --enable-debugging compile with debugging support],
- if test "$enable_debugging" = "yes"; then
- CFLAGS="$CFLAGS -g -Wall"
- AC_DEFINE([ENABLE_DEBUGGING], [1], [Debugging support enabled])
- fi
-)
-
-AC_ARG_ENABLE(profiling,
- [ --enable-profiling compile with profiling support],
- if test "$enable_profiling" = "yes"; then
- CFLAGS="-pg $CFLAGS"
- fi
-)
-
-STATIC_NLS="no"
-AC_ARG_ENABLE(static-nls, [ --enable-static-nls hardcode NLS with no support files],
- if test "$enable_static_nls" = "yes"; then
- STATIC_NLS="yes"
- fi,
- STATIC_NLS="no"
-)
-
-NLS_SUPPORT="no"
-AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support],
- if test "$enable_nls" = "yes"; then
- NLS_SUPPORT="yes"
- fi,
- NLS_SUPPORT="yes"
-)
-
-SPLICE_SUPPORT="no"
-AC_ARG_ENABLE(splice, [ --disable-splice do not use splice system call],
- if test "$enable_splice" = "yes"; then
- SPLICE_SUPPORT="yes"
- fi,
- SPLICE_SUPPORT="yes"
-)
-
-IPC_SUPPORT="no"
-AC_ARG_ENABLE(ipc, [ --disable-ipc turn off IPC messaging],
- if test "$enable_ipc" = "yes"; then
- IPC_SUPPORT="yes"
- fi,
- IPC_SUPPORT="yes"
-)
-
-AC_ARG_ENABLE([static],
- [AS_HELP_STRING([--enable-static], [enable static linking])],
- [
- if test "$enable_static" = "yes"; then
- CFLAGS="$CFLAGS -static"
- fi
- ])
-
-
-dnl AIX needs -lc128
-AC_EGREP_CPP([^yes$], [#ifdef _AIX
-yes
-#endif
-], [LIBS="$LIBS -lc128"])
-
-dnl Native Language Support
-if test "$NLS_SUPPORT" = "yes"; then
- AC_DEFINE([ENABLE_NLS], [1], [Enable native language support])
- AC_PATH_PROG(MSGFMT, msgfmt, NOMSGFMT)
- AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
- AC_PATH_PROG(XGETTEXT, xgettext, xgettext)
- if test "x$MSGFMT" = "xNOMSGFMT"; then
- MSGFMT=""
- STATIC_NLS="yes"
- fi
- if test "$STATIC_NLS" = "yes"; then
- CATALOGS=""
- NLSOBJ="src/nls/table.o"
- else
- AC_CHECK_LIB(intl, main)
- AC_CHECK_LIB(i, main)
- fi
- CATOBJEXT=.mo
- INSTOBJEXT=.mo
- for lang in de fr pl pt; do
- GMOFILES="$GMOFILES $lang.gmo"
- POFILES="$POFILES \$(srcdir)/src/nls/$lang.po"
- CATALOGS="$CATALOGS src/nls/$lang$CATOBJEXT";
- done
- if test "$STATIC_NLS" = "yes"; then
- CATALOGS=""
- else
- AC_CHECK_FUNC(gettext,
- [AC_DEFINE([HAVE_GETTEXT], [1], [The gettext function is available])
- NLSOBJ=""
- ], [CATALOGS=""; NLSOBJ="src/nls/table.o"
- ]
- )
- fi
-fi
-AC_CHECK_HEADERS(libintl.h)
-AC_CHECK_HEADERS(locale.h)
-AC_SUBST(MSGFMT)
-AC_SUBST(GMSGFMT)
-AC_SUBST(XGETTEXT)
-AC_SUBST(CATOBJEXT)
-AC_SUBST(INSTOBJEXT)
-AC_SUBST(GMOFILES)
-AC_SUBST(POFILES)
-AC_SUBST(CATALOGS)
-AC_SUBST(NLSOBJ)
-
-if test "$IPC_SUPPORT" = "yes"; then
- AC_CHECK_HEADERS(sys/ipc.h sys/param.h libgen.h)
-fi
-
-if test "$SPLICE_SUPPORT" = "yes"; then
- AC_CHECK_FUNCS(splice)
-fi
-
-dnl This must go after all the compiler based tests above.
-AC_LANG_WERROR
-
-dnl Fudging for separate build directories.
-dnl
-subdirs=""
-for i in `find $srcdir/src -type d -print | sed s,$srcdir/,,`; do
- subdirs="$subdirs $i"
-done
-
-dnl Stitch together the Makefile fragments.
-dnl
-mk_segments="autoconf/Makefile.in"
-for i in vars.mk package.mk filelist.mk~ unreal.mk modules.mk~ \
- rules.mk link.mk depend.mk~; do
- mk_segments="$mk_segments:autoconf/make/$i"
-done
-
-dnl Output files (and create build directory structure too).
-dnl
-AC_CONFIG_FILES([Makefile:$mk_segments doc/lsm:doc/lsm.in
- doc/quickref.1:doc/quickref.1.in
- src/.dummy:doc/NEWS.md])
-AC_CONFIG_COMMANDS([default],[rm -f src/.dummy
- for i in $subdirs; do
- test -d $i || mkdir $i
- done
-],[subdirs="$subdirs"])
-AC_OUTPUT
-
-dnl EOF
diff --git a/autoconf/make/link.mk b/autoconf/make/link.mk
deleted file mode 100644
index 9f861cd..0000000
--- a/autoconf/make/link.mk
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-# Targets.
-#
-
-$(package): src/main.o src/library.o src/pv.o @NLSOBJ@
- $(CC) $(LINKFLAGS) $(CFLAGS) -o $@ src/main.o src/library.o src/pv.o @NLSOBJ@ $(LIBS)
-
-$(package)-static: src/main.o src/library.o src/pv.o @NLSOBJ@
- $(CC) $(LINKFLAGS) $(CFLAGS) -static -o $@ src/main.o src/library.o src/pv.o @NLSOBJ@ $(LIBS)
-
-# EOF
diff --git a/autoconf/make/package.mk b/autoconf/make/package.mk
deleted file mode 100644
index 5eb3725..0000000
--- a/autoconf/make/package.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-# Package name, version, and distribution files.
-#
-
-package = @PACKAGE@
-version = @VERSION@
-PACKAGE = @PACKAGE@
-
-distfiles = \
-$(srcdir)/README.md \
-$(srcdir)/autoconf \
-$(srcdir)/configure \
-$(srcdir)/doc \
-$(srcdir)/src \
-$(srcdir)/tests
-
-# EOF
diff --git a/autoconf/make/rules.mk b/autoconf/make/rules.mk
deleted file mode 100644
index 2abc630..0000000
--- a/autoconf/make/rules.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Compilation rules.
-#
-
-.SUFFIXES: .c .d .o .e
-
-.c.o:
- $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
-
-.c.d:
- sh $(srcdir)/autoconf/scripts/depend.sh \
- $(CC) $< $(<:%.c=%) $(srcdir) $(CFLAGS) $(CPPFLAGS) > $@
-
-.c.e:
- -splint -badflag +posixlib $(CPPFLAGS) $< > $@ 2>&1
- -flawfinder $< >> $@ 2>&1
-
-#
-# Native language support
-#
-
-%.mo: %.po
- $(MSGFMT) -o $@ $<
- @touch $@
- @chmod 644 $@
-
-%.gmo: %.po
- rm -f $@
- $(GMSGFMT) -o $@ $<
- @touch $@
- @chmod 644 $@
-
-$(srcdir)/src/nls/$(PACKAGE).pot: $(allsrc)
- $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(srcdir) \
- --add-comments --keyword=_ --keyword=N_ \
- $(allsrc)
- if cmp -s $(PACKAGE).po $@; then \
- rm -f $(PACKAGE).po; \
- else \
- rm -f $@; \
- mv $(PACKAGE).po $@; \
- chmod 644 $@; \
- fi
-
-src/nls/table.c: $(POFILES)
- sh $(srcdir)/autoconf/scripts/po2table.sh $(POFILES) > src/nls/table.c
-
diff --git a/autoconf/make/unreal.mk b/autoconf/make/unreal.mk
deleted file mode 100644
index 07154fb..0000000
--- a/autoconf/make/unreal.mk
+++ /dev/null
@@ -1,188 +0,0 @@
-#
-# Rules for all phony targets.
-#
-
-.PHONY: all help make dep depend test check analyse \
- clean depclean analysisclean indentclean distclean gitclean \
- index manhtml indent update-po \
- doc dist release \
- install uninstall
-
-all: $(alltarg) $(CATALOGS)
-
-help:
- @echo 'This Makefile has the following utility targets:'
- @echo
- @echo ' all build all binary targets'
- @echo ' install install compiled package and manual'
- @echo ' uninstall uninstall the package'
- @echo ' check / test run standardised tests on the compiled binary'
- @echo
- @echo 'Developer targets:'
- @echo
- @echo ' make rebuild the Makefile (after adding new files)'
- @echo ' dep / depend rebuild .d (dependency) files'
- @echo ' analyse run analysis tools on all .c files'
- @echo ' clean remove .o (object) files'
- @echo ' depclean remove .d (dependency) files'
- @echo ' analysisclean remove .e (analysis) files'
- @echo ' indentclean remove files left over from "make indent"'
- @echo ' distclean remove everything not distributed'
- @echo ' gitclean remove everything not in version control'
- @echo
- @echo ' index generate an HTML index of source code'
- @echo ' manhtml output HTML man page to stdout'
- @echo ' indent reformat all source files with "indent"'
- @echo ' update-po update the .po files'
- @echo
- @echo ' dist create a source tarball for distribution'
- @echo ' release create and sign tar.gz and tar.bz2'
- @echo
-
-make:
- echo > $(srcdir)/autoconf/make/filelist.mk~
- echo > $(srcdir)/autoconf/make/modules.mk~
- cd $(srcdir); \
- bash autoconf/scripts/makemake.sh \
- autoconf/make/filelist.mk~ \
- autoconf/make/modules.mk~
- sh ./config.status
-
-dep depend: $(alldep)
- echo '#' > $(srcdir)/autoconf/make/depend.mk~
- echo '# Dependencies.' >> $(srcdir)/autoconf/make/depend.mk~
- echo '#' >> $(srcdir)/autoconf/make/depend.mk~
- echo >> $(srcdir)/autoconf/make/depend.mk~
- cat $(alldep) >> $(srcdir)/autoconf/make/depend.mk~
- sh ./config.status
-
-analyse: $(allanalysis)
-
-clean:
- rm -f $(allobj)
-
-depclean:
- rm -f $(alldep)
-
-analysisclean:
- rm -f $(allanalysis)
-
-indentclean:
- cd $(srcdir) && for FILE in $(allsrc); do rm -f ./$${FILE}~; done
-
-update-po: $(srcdir)/src/nls/$(PACKAGE).pot
- catalogs='$(CATALOGS)'; \
- for cat in $$catalogs; do \
- lang=$(srcdir)/`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \
- mv $$lang.po $$lang.old.po; \
- if $(MSGMERGE) $$lang.old.po $(srcdir)/src/nls/$(PACKAGE).pot > $$lang.po; then \
- rm -f $$lang.old.po; \
- else \
- echo "msgmerge for $$cat failed!"; \
- rm -f $$lang.po; \
- mv $$lang.old.po $$lang.po; \
- chmod 644 $$lang.po; \
- fi; \
- done
-
-distclean: clean depclean analysisclean
- rm -f $(alltarg) src/include/config.h
- rm -rf $(package)-$(version).tar* $(package)-$(version)
- rm -f *.html config.*
- rm Makefile
-
-gitclean: distclean
- rm -f doc/lsm
- rm -f doc/quickref.1
- rm -f configure
- rm -f src/nls/*.gmo src/nls/*.mo
- echo > $(srcdir)/autoconf/make/depend.mk~
- echo > $(srcdir)/autoconf/make/filelist.mk~
- echo > $(srcdir)/autoconf/make/modules.mk~
-
-doc:
- -true
-
-index:
- (cd $(srcdir); sh autoconf/scripts/index.sh $(srcdir)) > index.html
-
-manhtml:
- @man2html ./doc/quickref.1 \
- | sed -e '1,/]*> ||ig' \
- -e 's|]*>\([^<]*\)|\1|ig' \
- -e '/\)|\1
|ig' \
- -e 's/
//ig' \
- -e 's/<[0-9A-Za-z_.-]\+@[0-9A-Za-z_.-]\+>//g' \
- -e 's|\(http://.*\)|\1|ig' \
- | sed -e '1,/
Index/,/
&1 | grep -F 'uid' | grep -Fq "$(MAINTAINER)" && gpg -u "$(MAINTAINER)" -ab *.tar.gz && cp $(package)-$(version).tar.gz.asc $(package)-$(version).tar.gz.txt
- chmod 644 $(package)-$(version)*
diff --git a/autoconf/make/vars.mk b/autoconf/make/vars.mk
deleted file mode 100644
index 87670c9..0000000
--- a/autoconf/make/vars.mk
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Variables for Make.
-#
-
-srcdir = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-infodir = @infodir@
-mandir = @mandir@
-etcdir = @prefix@/etc
-datadir = @datadir@
-datarootdir = @datarootdir@
-sbindir = @sbindir@
-
-VPATH = $(srcdir)
-
-localedir = $(datadir)/locale
-gnulocaledir = $(prefix)/share/locale
-
-CATALOGS = @CATALOGS@
-POFILES = @POFILES@
-GMSGFMT = @GMSGFMT@
-MSGFMT = @MSGFMT@
-XGETTEXT = @XGETTEXT@
-MSGMERGE = msgmerge
-CATOBJEXT = @CATOBJEXT@
-INSTOBJEXT = @INSTOBJEXT@
-
-SHELL = /bin/sh
-CC = @CC@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-UNINSTALL = rm -f
-
-LDFLAGS = -r
-LINKFLAGS = @LDFLAGS@
-DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\"
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@ -I$(srcdir)/src/include -Isrc/include $(DEFS)
-LIBS = @LIBS@
-
-alltarg = @PACKAGE@
-
-# EOF
diff --git a/autoconf/scripts/depend.sh b/autoconf/scripts/depend.sh
deleted file mode 100755
index 4674b3f..0000000
--- a/autoconf/scripts/depend.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-#
-# Generate dependencies for a C source file.
-#
-
-CC="$1"
-shift
-file="$1"
-shift
-stem="$1"
-shift
-srcdir="$1"
-abssrc=$(echo "$srcdir" | sed ':1
-s,^\./,,g
-t1')
-shift
-
-abssrc=$(echo "$abssrc" | sed 's,\.,\\.,g')
-srcdir=$(echo "$srcdir" | sed 's,\.,\\.,g')
-
-$CC -M -MG "$@" "$file" \
-| sed \
- -e "s,^.*\.o:,${stem}.d ${stem}.o:," \
- -e 's,'"$srcdir"'/,,g' \
- -e 's,'"$abssrc"'/,,g' \
- -e 's, /[^ ]*,,g' \
- -e '/^ \\$/d' -e 's/ \\$//' \
-| tr '\n' ' ' \
-| tr -s ' '
-
-echo
-
-# EOF
diff --git a/autoconf/scripts/index.sh b/autoconf/scripts/index.sh
deleted file mode 100755
index b4164b6..0000000
--- a/autoconf/scripts/index.sh
+++ /dev/null
@@ -1,191 +0,0 @@
-#!/bin/sh
-#
-# Script to generate an HTML index of all C code from the current directory
-# downwards (skipping directories ending in ~). The header comment in each
-# file is listed, and each function's prototype and comment are given. A
-# list of "TODO:" comments is also generated.
-#
-# Outputs the HTML on standard output.
-#
-# If a parameter is given, it is the prefix to put before any "view file"
-# links, eg ".." to link to "../dir/file.c" instead of "dir/file.c".
-#
-# Skips any files containing the string !NOINDEX.
-#
-# Requires ctags and cproto.
-#
-
-command -v "ctags" >/dev/null 2>&1 || { echo "${0##*/}: ctags: command not found" 1>&2; exit 1; }
-command -v "cproto" >/dev/null 2>&1 || { echo "${0##*/}: cproto: command not found" 1>&2; exit 1; }
-
-linkPrefix=$1
-test -n "${linkPrefix}" || linkPrefix="."
-
-# Add "/" to the link prefix, and empty it entirely if it ends up just "./".
-linkPrefix=$(echo "${linkPrefix}" | sed 's,/*$,,')
-test "$linkPrefix" = "." && linkPrefix="" || linkPrefix="${linkPrefix}/"
-
-# Convert the given string to HTML-escaped values (<, >, & escaped) on
-# stdout.
-#
-html_safe () {
- echo "$*" \
- | sed -e 's|&|\&|g;s|<|\<|g;s|>|\>|g'
-}
-
-
-# Convert the given string to HTML-escaped values (<, >, & escaped) on
-# stdout, also adding a
to the end of each line.
-#
-html_safebr () {
- echo "$*" \
- | sed -e 's|&|\&|g;s|<|\<|g;s|>|\>|g;s/$/
/'
-}
-
-allEligibleFiles=$(
- find . -name '*~' -prune -o -type f -name '*.c' \
- -exec grep -FL '!NOINDEX' /dev/null '{}' ';'
-)
-
-ctagsOutput=$(
- echo "${allEligibleFiles}" \
- | ctags -nRf- -L- --c-types=f \
- | sed 's/ .\// /;s/;" .*$//'
-)
-
-sourceFiles=$(echo "${ctagsOutput}" | cut -d ' ' -f 2 | sort | uniq)
-
-echo ''
-echo 'Source Code Index'
-echo ''
-echo ''
-echo '
'
-
-echo ''
-echo ''
-echo "${sourceFiles}" \
-| sed -e \
- 's|^.*$|\0 |'
-echo '
'
-
-for sourceFile in ${sourceFiles}; do
-
- sourceDir="${sourceFile##*/}"
- test "${sourceDir}" = "${sourceFile}" && sourceDir="."
- functionPrototypes=$(
- cproto -f1 -I. -Isrc/include -I"${sourceDir}" "${sourceFile}" 2>/dev/null \
- | sed -n 's/^.*[ *]\([^ *(]*\)(.*$/\1/p'
- )
- fileHeaderComment=$(
- sed -n -e '1,/\*\//{/\/\*/,/\*\//{s/^[\/ *]//;s/^\*[\/]*//;p;};}' \
- < "${sourceFile}"
- )
- fileShortDescription=$(echo "${fileHeaderComment}" | sed -n '1,/^ *$/{/^ *[^ ]*/p;}')
- fileLongDescription=$(echo "${fileHeaderComment}" | sed '1,/^ *$/d')
-
- echo '
'
- echo ''
- echo ''
- echo ''"${sourceFile}"' | '
- echo ' - | '
- echo ''"$(html_safe "${fileShortDescription}")"' | '
- echo '
'
- echo '[View File]
'
- echo ''
- html_safebr "${fileLongDescription}"
- echo '
'
-
- if [ -n "${functionPrototypes}" ]; then
- echo 'Functions defined:
'
- echo ''
- echo "${functionPrototypes}" \
- | sed 's|^.*$|\0|' \
- | sed 's/^//;s|$| |'
- echo '
'
- fi
-
- echo '['
- echo 'Top |'
- echo 'To Do |'
- echo 'Functions ]
'
-done
-
-echo ''
-echo ''
-
-echo "${ctagsOutput}" | while read -r functionName sourceFile sourceLineNo restOfLine; do
- echo ''"${functionName}"'' \
- '['"${sourceFile}"'] '
-done
-echo '
'
-
-# shellcheck disable=SC2034
-echo "${ctagsOutput}" | while read -r functionName sourceFile sourceLineNo restOfLine; do
-
- functionPrototype=$(
- sed -n "${sourceLineNo},/{/p" < "${sourceFile}" \
- | tr '\n' ' ' \
- | tr -d '{'
- )
-
- lastCommentOpenLineNo=$(sed -n '1,'"${sourceLineNo}"'{/\/\*/=;}' < "${sourceFile}" | sed -n '$p')
- test -n "${lastCommentOpenLineNo}" || lastCommentOpenLineNo=1
- lastCommentCloseLineNo=$(sed -n '1,'"${sourceLineNo}"'{/}/=;}' < "${sourceFile}" | sed -n '$p')
- test -n "${lastCommentCloseLineNo}" || lastCommentCloseLineNo=1
- functionHeaderComment=$(
- sed -n -e \
- "${lastCommentOpenLineNo},"'/\*\//{h;s/^[\/ *]//;s/^\*[\/]*//;p;x;/\*\//q;}' \
- < "${sourceFile}"
- )
- test "${lastCommentOpenLineNo}" -le "${lastCommentCloseLineNo}" && functionHeaderComment=""
-
- echo '
'
- echo ''
- echo ''"${functionName}"'' \
- '['"${sourceFile}"']'
- echo '
'
-
- echo ''"$(html_safe "${functionPrototype}")"'
'
-
- echo ''
- html_safebr "${functionHeaderComment}"
- echo '
'
-
- echo '['
- echo 'Top |'
- echo 'To Do |'
- echo 'Files ]
'
-done
-
-echo ''
-echo ''
-for sourceFile in ${sourceFiles}; do
-
- todoLineNumbers=$(sed -n \
- -e '/\/\*.*\*\//!{/\/\*/,/\*\//{/TODO:/{=;};};}' \
- -e '/\/\*.*\*\//{/TODO:/{=;};}' \
- < "${sourceFile}")
-
- test -n "${todoLineNumbers}" || continue
-
- echo ''"${sourceFile}"''
- echo ''
-
- for todoLineNo in ${todoLineNumbers}; do
- todoNote=$(sed -n "${todoLineNo}"'{s/^.*TODO://;s/\*\/.*$//;p;}' < "${sourceFile}")
- echo "- [${todoLineNo}] $(html_safe "${todoNote}")
"
- done
-
- echo '
'
-done
-
-echo ''
-
-# EOF
diff --git a/autoconf/scripts/install-sh b/autoconf/scripts/install-sh
deleted file mode 100755
index ec298b5..0000000
--- a/autoconf/scripts/install-sh
+++ /dev/null
@@ -1,541 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2020-11-14.01; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# 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 the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-tab=' '
-nl='
-'
-IFS=" $tab$nl"
-
-# Set DOITPROG to "echo" to test this script.
-
-doit=${DOITPROG-}
-doit_exec=${doit:-exec}
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-# Create dirs (including intermediate dirs) using mode 755.
-# This is like GNU 'install' as of coreutils 8.32 (2020).
-mkdir_umask=22
-
-backupsuffix=
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-is_target_a_directory=possibly
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
- --help display this help and exit.
- --version display version info and exit.
-
- -c (ignored)
- -C install only if different (preserve data modification time)
- -d create directories instead of installing files.
- -g GROUP $chgrpprog installed files to GROUP.
- -m MODE $chmodprog installed files to MODE.
- -o USER $chownprog installed files to USER.
- -p pass -p to $cpprog.
- -s $stripprog installed files.
- -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
- -t DIRECTORY install into DIRECTORY.
- -T report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
- RMPROG STRIPPROG
-
-By default, rm is invoked with -f; when overridden with RMPROG,
-it's up to you to specify -f if you want it.
-
-If -S is not specified, no backups are attempted.
-
-Email bug reports to bug-automake@gnu.org.
-Automake home page: https://www.gnu.org/software/automake/
-"
-
-while test $# -ne 0; do
- case $1 in
- -c) ;;
-
- -C) copy_on_change=true;;
-
- -d) dir_arg=true;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) mode=$2
- case $mode in
- *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -p) cpprog="$cpprog -p";;
-
- -s) stripcmd=$stripprog;;
-
- -S) backupsuffix="$2"
- shift;;
-
- -t)
- is_target_a_directory=always
- dst_arg=$2
- # Protect names problematic for 'test' and other utilities.
- case $dst_arg in
- -* | [=\(\)!]) dst_arg=./$dst_arg;;
- esac
- shift;;
-
- -T) is_target_a_directory=never;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
- if test -n "$dst_arg"; then
- echo "$0: target directory not allowed when installing a directory." >&2
- exit 1
- fi
-fi
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
- # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dst_arg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dst_arg"
- shift # fnord
- fi
- shift # arg
- dst_arg=$arg
- # Protect names problematic for 'test' and other utilities.
- case $dst_arg in
- -* | [=\(\)!]) dst_arg=./$dst_arg;;
- esac
- done
-fi
-
-if test $# -eq 0; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call 'install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-if test -z "$dir_arg"; then
- if test $# -gt 1 || test "$is_target_a_directory" = always; then
- if test ! -d "$dst_arg"; then
- echo "$0: $dst_arg: Is not a directory." >&2
- exit 1
- fi
- fi
-fi
-
-if test -z "$dir_arg"; then
- do_exit='(exit $ret); exit $ret'
- trap "ret=129; $do_exit" 1
- trap "ret=130; $do_exit" 2
- trap "ret=141; $do_exit" 13
- trap "ret=143; $do_exit" 15
-
- # Set umask so as not to create temps with too-generous modes.
- # However, 'strip' requires both read and write access to temps.
- case $mode in
- # Optimize common cases.
- *644) cp_umask=133;;
- *755) cp_umask=22;;
-
- *[0-7])
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw='% 200'
- fi
- cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
- *)
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw=,u+rw
- fi
- cp_umask=$mode$u_plus_rw;;
- esac
-fi
-
-for src
-do
- # Protect names problematic for 'test' and other utilities.
- case $src in
- -* | [=\(\)!]) src=./$src;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- dstdir=$dst
- test -d "$dstdir"
- dstdir_status=$?
- # Don't chown directories that already exist.
- if test $dstdir_status = 0; then
- chowncmd=""
- fi
- else
-
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dst_arg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
- dst=$dst_arg
-
- # If destination is a directory, append the input filename.
- if test -d "$dst"; then
- if test "$is_target_a_directory" = never; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dstbase=`basename "$src"`
- case $dst in
- */) dst=$dst$dstbase;;
- *) dst=$dst/$dstbase;;
- esac
- dstdir_status=0
- else
- dstdir=`dirname "$dst"`
- test -d "$dstdir"
- dstdir_status=$?
- fi
- fi
-
- case $dstdir in
- */) dstdirslash=$dstdir;;
- *) dstdirslash=$dstdir/;;
- esac
-
- obsolete_mkdir_used=false
-
- if test $dstdir_status != 0; then
- case $posix_mkdir in
- '')
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- # The $RANDOM variable is not portable (e.g., dash). Use it
- # here however when possible just to lower collision chance.
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-
- trap '
- ret=$?
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
- exit $ret
- ' 0
-
- # Because "mkdir -p" follows existing symlinks and we likely work
- # directly in world-writeable /tmp, make sure that the '$tmpdir'
- # directory is successfully created first before we actually test
- # 'mkdir -p'.
- if (umask $mkdir_umask &&
- $mkdirprog $mkdir_mode "$tmpdir" &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- test_tmpdir="$tmpdir/a"
- ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
- fi
- trap '' 0;;
- esac
-
- if
- $posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
- )
- then :
- else
-
- # mkdir does not conform to POSIX,
- # or it failed possibly due to a race condition. Create the
- # directory the slow way, step by step, checking for races as we go.
-
- case $dstdir in
- /*) prefix='/';;
- [-=\(\)!]*) prefix='./';;
- *) prefix='';;
- esac
-
- oIFS=$IFS
- IFS=/
- set -f
- set fnord $dstdir
- shift
- set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test X"$d" = X && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
- done
-
- if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
- fi
- fi
- fi
-
- if test -n "$dir_arg"; then
- { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
- { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
- test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
- else
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=${dstdirslash}_inst.$$_
- rmtmp=${dstdirslash}_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
- # Copy the file name to the temp name.
- (umask $cp_umask &&
- { test -z "$stripcmd" || {
- # Create $dsttmp read-write so that cp doesn't create it read-only,
- # which would cause strip to fail.
- if test -z "$doit"; then
- : >"$dsttmp" # No need to fork-exec 'touch'.
- else
- $doit touch "$dsttmp"
- fi
- }
- } &&
- $doit_exec $cpprog "$src" "$dsttmp") &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
- # If -C, don't bother to copy if it wouldn't change the file.
- if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
- set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- set +f &&
- test "$old" = "$new" &&
- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
- then
- rm -f "$dsttmp"
- else
- # If $backupsuffix is set, and the file being installed
- # already exists, attempt a backup. Don't worry if it fails,
- # e.g., if mv doesn't support -f.
- if test -n "$backupsuffix" && test -f "$dst"; then
- $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
- fi
-
- # Rename the file to the real destination.
- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
- {
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- fi || exit 1
-
- trap '' 0
- fi
-done
-
-# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/autoconf/scripts/makemake.sh b/autoconf/scripts/makemake.sh
deleted file mode 100755
index 27abad0..0000000
--- a/autoconf/scripts/makemake.sh
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/bin/sh
-#
-# Generate Makefile components "filelist.mk~" (list source, object, and
-# dependency files) and "modules.mk~" (linking rules for each directory's
-# overall object file) by scanning the directory "src" for files ending in
-# ".c", and for subdirectories not starting with "_".
-#
-# Modules live inside subdirectories called [^_]* - i.e. a directory "foo" will
-# have a rule created which links all code inside it to "foo.o".
-#
-# The directory "src/include" is never scanned; neither are CVS or SVN
-# directories.
-#
-
-listingsFile="$1"
-linkingRulesFile="$2"
-
-FIND="find"
-GREP="grep"
-command -v gfind 2>/dev/null | grep /gfind >/dev/null && FIND="gfind"
-command -v which ggrep 2>/dev/null | grep /ggrep >/dev/null && GREP="ggrep"
-
-{
-echo '# Automatically generated file listings'
-echo '#'
-echo "# Creation time: $(date)"
-echo
-} > "${listingsFile}"
-
-{
-echo '# Automatically generated module linking rules'
-echo '#'
-echo "# Creation time: $(date)"
-echo
-} > "${linkingRulesFile}"
-
-printf "%s" "Scanning for source files: "
-
-allsrc=$("${FIND}" src -type f -name "*.c" -print)
-allobj=$(echo "${allsrc}" | tr ' ' '\n' | sed 's/\.c$/.o/')
-alldep=$(echo "${allsrc}" | tr ' ' '\n' | sed 's/\.c$/.d/')
-allanalysis=$(echo "${allsrc}" | tr ' ' '\n' | sed 's/\.c$/.e/')
-
-echo "$(echo "${allsrc}" | wc -w | tr -d ' ') found"
-
-printf "%s" "Scanning for modules: "
-
-modules=$("${FIND}" src -type d -print \
- | "${GREP}" -v '^src$' \
- | "${GREP}" -v '/_' \
- | "${GREP}" -v '^src/include' \
- | "${GREP}" -v 'CVS' \
- | "${GREP}" -v '.svn' \
- | while read -r DIR; do \
- CONTENT=$(/bin/ls -d "${DIR}"/* \
- | "${GREP}" -v '.po$' \
- | "${GREP}" -v '.gmo$' \
- | "${GREP}" -v '.mo$' \
- | "${GREP}" -v '.h$' \
- | sed -n '$p'); \
- [ -n "$CONTENT" ] || continue; \
- echo "${DIR}"; \
- done
- )
-
-echo "up to $(echo "${modules}" | wc -w | tr -d ' ') found"
-
-echo "Writing module linking rules"
-
-printf "%s" "["
-for i in ${modules}; do printf "%s" " "; done
-printf "%s\r%s" "]" "["
-
-for i in ${modules}; do
- printf "%s" "."
- allobj="${allobj} ${i}.o"
- deps=""
- for j in "${i}"/*.c; do
- [ -f "$j" ] || continue
- newobj=$(echo "$j" | sed -e 's@\.c$@.o@')
- deps="$deps $newobj"
- done
- for j in "${i}"/*; do
- [ -d "$j" ] || continue
- [ "$(basename "$j")" = "CVS" ] && continue
- [ "$(basename "$j")" = ".svn" ] && continue
- CONTENT=$(/bin/ls -d "$j"/* \
- | "${GREP}" -v '.po$' \
- | "${GREP}" -v '.gmo$' \
- | "${GREP}" -v '.mo$' \
- | "${GREP}" -v '.h$' \
- | sed -n '$p')
- [ -n "$CONTENT" ] || continue
- deps="$deps $j.o"
- done
- [ -n "$deps" ] || continue
- {
- echo "$i.o: $deps"
- echo " \$(LD) \$(LDFLAGS) -o \$@ $deps"
- echo
- } >> "${linkingRulesFile}"
-done
-
-echo ']'
-
-echo "Listing source, object and dependency files"
-
-{
-printf "%s" "allsrc = "
-echo "$allsrc" | tr '\n' ' ' | sed 's,src/nls/cat-id-tbl.c,,' | sed -e 's/ $//;s/ / \\!/g' \
-| tr '!' '\n'
-echo
-echo
-printf "%s" "allobj = "
-echo "$allobj" | tr '\n' ' ' | sed -e 's/ $//;s/ / \\!/g' | tr '!' '\n'
-echo
-echo
-printf "%s" "alldep = "
-echo "$alldep" | tr '\n' ' ' | sed -e 's/ $//;s/ / \\!/g' | tr '!' '\n'
-echo
-echo
-printf "%s" "allanalysis = "
-echo "$allanalysis" | tr '\n' ' ' | sed -e 's/ $//;s/ / \\!/g' | tr '!' '\n'
-echo
-echo
-} >> "${listingsFile}"
-
-echo >> "${linkingRulesFile}"
-
-# EOF
diff --git a/autoconf/scripts/mkinstalldirs b/autoconf/scripts/mkinstalldirs
deleted file mode 100755
index ff059dd..0000000
--- a/autoconf/scripts/mkinstalldirs
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman
-# Created: 1993-05-16
-# Last modified: 1994-03-25
-# Public domain
-
-errstatus=0
-
-for file in ${1+"$@"} ; do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d in ${1+"$@"} ; do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp" 1>&2
- mkdir "$pathcomp" || errstatus=$?
- chmod 755 $pathcomp 2>/dev/null
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here
diff --git a/autoconf/scripts/po2table.sh b/autoconf/scripts/po2table.sh
deleted file mode 100755
index b1b80dc..0000000
--- a/autoconf/scripts/po2table.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh
-#
-# Messy script to convert all of the given .po files to a single C file on
-# stdout.
-
-cat <
-
-struct msgtable_s {
- char *msgid;
- char *msgstr;
-};
-
-
-struct msgtable_s *minigettext__gettable(char *lang)
-{
- if (0 == lang)
- return 0;
-
-EOF
-
-for POFILE in "$@"; do
- LANG=$(basename "$POFILE" | sed 's/.po$//')
- echo " if (strncmp(lang, \"$LANG\", 2) == 0) {"
- echo " static struct msgtable_s data[] = {";
-
- awk 'BEGIN{i=0;s=0;}
- /^msgid[ ]+/ {
- if (s) print " }, ";
- print " {";
- print " " substr($0,7);
- i=1;
- s=0;
- }
- /^msgstr[ ]+/ {
- print " ,";
- i=0;s=1;
- print " " substr($0,8);
- }
- /^[ ]*"/ {
- if (i||s) print " " $0;
- }
- END {if (i||s) print " }\n";}
- ' < "$POFILE"
- echo ' , { 0, 0 } };'
- echo " return data;"
- echo " }"
-done
-
-cat </dev/null) || workFile1="./.tmp1"
-workFile2=$(mktemp 2>/dev/null) || workFile2="./.tmp2"
-workFile3=$(mktemp 2>/dev/null) || workFile3="./.tmp3"
-workFile4=$(mktemp 2>/dev/null) || workFile4="./.tmp4"
-
-# Clean up the temporary files on exit, in case we are interrupted.
-trap 'rm -f "${workFile1}" "${workFile2}" "${workFile3}" "${workFile4}"' EXIT
-
-# Variables used by the test scripts.
-export testSubject sourcePath workFile1 workFile2 workFile3 workFile4
-
-# Set everything to the "C" locale.
-LANG=C
-LC_ALL=C
-export LANG LC_ALL
-
-# If no tests were specified, list all test scripts under the source path.
-test -n "${selectedTests}" || selectedTests=$(find "${sourcePath}/tests" -maxdepth 1 -type f | sort -n)
-
-# Initial pass to count the number of tests and find the length of the
-# longest test name, to use when formatting the output.
-#
-numberOfTests=0
-maxTestNameLength=0
-for testScript in ${selectedTests}; do
- # Find the test script, make sure it exists.
- test -f "${testScript}" || testScript="${sourcePath}/tests/${testScript}"
- test -f "${testScript}" || testScript=$(find "${sourcePath}/tests" -maxdepth 1 -type f -name "${testScript##*/}*" | sed -n '1p')
- test -f "${testScript}" || continue
-
- numberOfTests=$((1+numberOfTests))
-
- testScriptLeaf="${testScript##*/}"
- testName="$(echo "${testScriptLeaf%.sh}" | tr '_' ' ' | sed 's/ - /: /')"
- testNameLength=${#testName}
- test "${testNameLength}" -gt "${maxTestNameLength}" && maxTestNameLength="${testNameLength}"
-done
-
-# Set a minimum and maximum test name length.
-test "${maxTestNameLength}" -lt 10 && maxTestNameLength=10
-test "${maxTestNameLength}" -gt 60 && maxTestNameLength=60
-
-# Count the number of digits in the number of tests so we know how wide the
-# column for the test count should be.
-testCountWidth=${#numberOfTests}
-
-# Get the terminal width, for later display formatting calculations.
-#
-# We have to fiddle with `stty' because $COLUMNS is only in `bash', `resize`
-# is not available everywhere, and `stty' itself varies in its output format
-# between "columns 158" and "158 cols".
-#
-terminalWidth=80
-test -t 1 && terminalWidth=$(stty -a 2>/dev/null | tr ';' '\n' | grep -e cols -e columns | tr ' ' '\n' | grep '[0-9]' | sed -n 1p)
-test -n "${terminalWidth}" || terminalWidth=80
-
-# Remaining space left on each line after the result description.
-colsUsed=$((testCountWidth + 1 + testCountWidth + 2 + maxTestNameLength + 2 + 8 + 2))
-colsRemaining=0
-test "${colsUsed}" -lt "${terminalWidth}" && colsRemaining=$((terminalWidth - colsUsed))
-
-# Run all of the selected test scripts, formatting the output.
-#
-testPassCount=0
-testFailCount=0
-testSkipCount=0
-testNumber=0
-for testScript in ${selectedTests}; do
- # Find the test script, make sure it exists.
- test -f "${testScript}" || testScript="${sourcePath}/tests/${testScript}"
- test -f "${testScript}" || testScript=$(find "${sourcePath}/tests" -maxdepth 1 -type f -name "${testScript##*/}*" | sed -n '1p')
- test -f "${testScript}" || continue
-
- testNumber=$((1+testNumber))
-
- testScriptLeaf="${testScript##*/}"
- testName="$(echo "${testScriptLeaf%.sh}" | tr '_' ' ' | sed 's/ - /: /')"
- printf "%${testCountWidth}d/%d: %-${maxTestNameLength}.${maxTestNameLength}s " "${testNumber}" "${numberOfTests}" "${testName}"
-
- # Run the test script, capturing the output and the exit status.
- testExitStatus=0
- testOutput=""
- if test -s "${testScript}"; then
- true > "${workFile1}"
- true > "${workFile2}"
- true > "${workFile3}"
- true > "${workFile4}"
- testOutput=$(sh "${testScript}" 2>&1)
- testExitStatus=$?
- else
- testOutput="test script has not yet been written"
- testExitStatus=2
- fi
-
- # Work out what we're going to say about this test result.
- testResultDescription=""
- resultFormatCodes=""
- if test ${testExitStatus} -eq 0; then
- resultFormatCodes="${formatCodesPass}"
- testResultDescription="OK"
- testPassCount=$((1+testPassCount))
- elif test ${testExitStatus} -eq 2; then
- resultFormatCodes="${formatCodesSkip}"
- testResultDescription="skipped"
- testSkipCount=$((1+testSkipCount))
- else
- resultFormatCodes="${formatCodesFail}"
- testResultDescription="FAILED"
- testFailCount=$((1+testFailCount))
- fi
-
- # If stdout is not a terminal, don't use terminal format codes.
- test -t 1 || resultFormatCodes=""
-
- # Show the description of the test result, and start a new line.
- test -n "${resultFormatCodes}" && command -v tput >/dev/null 2>&1 && echo "${resultFormatCodes}" | tr ';' '\n' | tput -S 2>/dev/null
- printf "%s" "${testResultDescription}"
-
- # If there was any output from the test, display it - either on the
- # current line, if there's space, or the next line, with each line
- # prefixed with the test number.
- if test -n "${testOutput}"; then
- if test "${#testOutput}" -lt "${colsRemaining}" && ! test "$(echo "${testOutput}" | wc -l | tr -dc '0-9')" -gt 1 2>/dev/null; then
- printf " - %s" "${testOutput}"
- else
- printf "\n%s" "$(echo "${testOutput}" | sed "s,^,$(printf "%${testCountWidth}d/%d: - " "${testNumber}" "${numberOfTests}"),")"
- fi
- fi
- printf "\n"
-
- test -n "${resultFormatCodes}" && command -v tput >/dev/null 2>&1 && tput sgr0 2>/dev/null
-done
-
-# Clean up.
-rm -f "${workFile1}" "${workFile2}" "${workFile3}" "${workFile4}"
-trap '' EXIT
-
-# Report the totals.
-printf "\n"
-printf "%s: " "Tests passed"
-numberFormatting="${formatCodesPass}"
-test "${testPassCount}" -gt 0 || numberFormatting="${formatCodesZero}"
-test -t 1 && command -v tput >/dev/null 2>&1 && echo "${numberFormatting}" | tr ';' '\n' | tput -S 2>/dev/null
-printf "%d" "${testPassCount}"
-test -t 1 && command -v tput >/dev/null 2>&1 && tput sgr0 2>/dev/null
-
-printf " %s: " "Tests failed"
-numberFormatting="${formatCodesFail}"
-test "${testFailCount}" -gt 0 || numberFormatting="${formatCodesZero}"
-test -t 1 && command -v tput >/dev/null 2>&1 && echo "${numberFormatting}" | tr ';' '\n' | tput -S 2>/dev/null
-printf "%d" "${testFailCount}"
-test -t 1 && command -v tput >/dev/null 2>&1 && tput sgr0 2>/dev/null
-
-printf " %s: " "Tests skipped"
-numberFormatting="${formatCodesSkip}"
-test "${testSkipCount}" -gt 0 || numberFormatting="${formatCodesZero}"
-test -t 1 && command -v tput >/dev/null 2>&1 && echo "${numberFormatting}" | tr ';' '\n' | tput -S 2>/dev/null
-printf "%d" "${testSkipCount}"
-test -t 1 && command -v tput >/dev/null 2>&1 && tput sgr0 2>/dev/null
-printf "\n"
-
-# Exit with status 1 if any test failed outright, 0 otherwise.
-test "${testFailCount}" -eq 0 || exit 1
-exit 0
-
-# EOF
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..79a07d9
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,98 @@
+dnl Process this file with autoconf to produce a configure script.
+dnl
+dnl Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood
+dnl
+dnl Distributed under the Artistic License v2.0; see `doc/COPYING'.
+
+AC_INIT([pv], [0.0.20230828-UNRELEASED], [https://codeberg.org/a-j-wood/pv/issues], [pv], [https://www.ivarch.com/programs/pv.shtml])
+AC_CONFIG_SRCDIR([src/include/config.h.in])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_CONFIG_HEADERS([src/include/config.h])
+AM_INIT_AUTOMAKE([-Wall -Werror foreign])
+AC_LANG(C)
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_USE_SYSTEM_EXTENSIONS
+AC_C_CONST
+AC_HEADER_STDBOOL
+AC_SYS_LARGEFILE
+AC_CHECK_FUNCS([getopt_long])
+AC_CHECK_HEADERS([getopt.h])
+AC_CHECK_FUNCS([memcpy basename vsnprintf strlcat])
+AC_CHECK_FUNCS([fdatasync])
+AC_CHECK_FUNCS([fpathconf sysconf posix_memalign])
+AC_CHECK_HEADERS([limits.h])
+AC_CHECK_HEADERS([wctype.h])
+AC_CHECK_HEADERS([termios.h])
+AC_CHECK_HEADERS([sys/ioctl.h])
+AC_CHECK_HEADERS([libintl.h locale.h])
+AH_BOTTOM([#include "config-aux.h"])
+
+AM_GNU_GETTEXT_VERSION([0.21])
+AM_GNU_GETTEXT([external])
+CPPFLAGS="$CPPFLAGS -DLOCALEDIR=\\\"\$(localedir)\\\""
+
+AC_ARG_ENABLE([debugging],
+ [ --enable-debugging compile with debugging support],
+ if test "$enable_debugging" = "yes"; then
+ CFLAGS="$CFLAGS -g -Wall"
+ AC_DEFINE([ENABLE_DEBUGGING], [1], [Debugging support enabled])
+ fi
+)
+
+AC_ARG_ENABLE([profiling],
+ [ --enable-profiling compile with profiling support],
+ if test "$enable_profiling" = "yes"; then
+ CFLAGS="-pg $CFLAGS"
+ fi
+)
+
+SPLICE_SUPPORT="no"
+AC_ARG_ENABLE([splice], [ --disable-splice do not use splice system call],
+ if test "$enable_splice" = "yes"; then
+ SPLICE_SUPPORT="yes"
+ fi,
+ SPLICE_SUPPORT="yes"
+)
+
+IPC_SUPPORT="no"
+AC_ARG_ENABLE([ipc], [ --disable-ipc turn off IPC messaging],
+ if test "$enable_ipc" = "yes"; then
+ IPC_SUPPORT="yes"
+ fi,
+ IPC_SUPPORT="yes"
+)
+
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static], [enable static linking])],
+ [
+ if test "$enable_static" = "yes"; then
+ CFLAGS="$CFLAGS -static"
+ fi
+ ])
+
+dnl AIX needs -lc128
+AC_EGREP_CPP([^yes$], [#ifdef _AIX
+yes
+#endif
+], [LIBS="$LIBS -lc128"])
+
+if test "$IPC_SUPPORT" = "yes"; then
+ AC_CHECK_HEADERS([sys/ipc.h sys/param.h libgen.h])
+fi
+
+if test "$SPLICE_SUPPORT" = "yes"; then
+ AC_CHECK_FUNCS([splice])
+fi
+
+CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/src/include"
+
+dnl This must go after all the compiler based tests above.
+AC_LANG_WERROR
+
+AC_CONFIG_FILES([
+ po/Makefile.in
+ Makefile
+])
+
+AC_OUTPUT
diff --git a/doc/DEVELOPERS.md b/doc/DEVELOPERS.md
index 80f5c55..c4f607d 100644
--- a/doc/DEVELOPERS.md
+++ b/doc/DEVELOPERS.md
@@ -6,12 +6,9 @@ translators:
* `--enable-debugging` - build in debugging support
* `--enable-profiling` - build in support for profiling
- * `--enable-static-nls` - compile translations directly into the program
These "`make`" targets are available:
- * `make help` - describe all of the "`.PHONY`" targets
- * `make index` - generate a source code index
* `make analyse` - run _splint_ and _flawfinder_ on all C source files
@@ -33,24 +30,8 @@ This does mean that if you call "`debug()`", make sure it has no side
effects, as they won't be present in builds without debugging support.
Builds produced after "`./configure --enable-profiling`" will write profile
-data when run, to be used with _gprof_. See "`man gprof`" for details.
-
-
-Source code indexing
---------------------
-
-Running "`make index`" calls a script which uses _cproto_ and _ctags_ to
-generate a single file, "`index.html`", which lists all C source files, all
-functions within them, and all TODOs marked in the code.
-
-It relies on each function having a comment block directly before it,
-describing what it does.
-
-The indexing script pre-dates the author's knowledge of documentation
-generation tools like Doxygen, and is over 20 years old. If it contains
-bugs, then rather than fixing them, it may be worth looking at how to alter
-the C sources to better suit widely available documentation generation
-tools. Please open issues or start discussions about this if it comes up.
+data when run, to be used with _gprof_. See "`man gprof`" for details.
+Please note that the memory safety checks will fail with profiling enabled.
Source code analysis
@@ -60,9 +41,9 @@ Running "`make analyse`" runs _splint_ and _flawfinder_ on all C sources,
writing the output of both programs to files named "`*.e`" for each "`*.c`".
There are no dependency rules set up for these "`.e`" files, so if a header
-file is altered, either run "`make analysisclean`", manually remove the
-relevant "`.e`" files, or update the timestamp of the relevant "`.c`" files
-before running "`make analyse`" again.
+file is altered, manually remove the relevant "`.e`" files, or update the
+timestamp of the relevant "`.c`" files, before running "`make analyse`"
+again.
The eventual goal is for all C source files to generate zero warnings from
either tool.
@@ -72,7 +53,7 @@ Translation notes
-----------------
The message catalogues used to translate program messages into other
-languages are in the "`src/nls/`" directory, named "`xx.po`", where "`xx`"
+languages are in the "`po/`" directory, named "`xx.po`", where "`xx`"
is the ISO 639-1 2-letter language code, such as "`fr`" for French.
Each of these files contains lines like this:
@@ -89,37 +70,33 @@ It is the "`msgstr`" lines which need to be updated by translators.
Message catalogue files should all be encoded as UTF-8.
-To quickly test translations, use "`./configure --enable-static-nls`". This
-is not recommended for production use, because it replaces the system
-internationalisation libraries with some very simplistic alternatives, but
-it has the benefit of compiling the message catalogues directly into the
-program.
+_FIXME: The test below doesn't work on Debian with only en_GB installed, and
+also it looks like the compiled-in LOCALEDIR is overriding LOCPATH._
-This means that after making a change to a "`.po`" file, do this:
+After making a change to a "`.po`" file, test it by compiling it and installing
+to a temporary location, like this:
- make
- LANG=de LC_ALL=en_GB.UTF-8 ./pv --help
+ make install DESTDIR=/tmp/yourtest
+ localedef -f UTF-8 -i de_DE /tmp/yourtest/usr/local/share/locale/de_DE.UTF-8
+ LOCPATH=/tmp/yourtest/usr/local/share/locale \
+ LC_ALL=de_DE.UTF-8 ./pv --help
Replace "`--help`" with whatever is appropriate for your test. In this
example, the language being tested is "`de`" (German), on a system which is
-otherwise running in English with UTF-8 support.
+running with UTF-8 support.
-To add a new language, edit "`autoconf/configure.in`". Look for this line:
+To add a new language, create the new message catalogue file under "`po/`"
+by copying "`po/pv.pot`" to "`po/xx.po`", where "`xx`" is the language code,
+and adjusting it. The "`.pot`" file is generated automatically by "`make`".
- for lang in de fr pl pt; do
+Next, add the language code to "`po/LINGUAS`" - this is a list of the
+2-letter codes of the supported languages.
-Add the new language code before the "`; do`".
+Finally, run "`./config.status`" and "`make -C po update-po`".
-Create the new message catalogue file under "`src/nls/`" by copying
-"`src/nls/pv.pot`" to "`src/nls/xx.po`", where "`xx`" is the language code,
-and adjusting it.
-
-Then run "`./generate.sh`" to generate a new "`configure`" script; you will
-need to run "`./configure --enable-static-nls`" and "`make`" afterwards.
-
-When the source code is updated, running "`make`" will update the "`pv.pot`"
-file so that it lists where all the messages are in the source, and running
-"`make update-po`" will use _msgmerge_ to update all of the "`.po`" files
+When the source code is updated, running "`make -C po update-po`" will
+update the "`pv.pot`" file so that it lists where all the messages are in
+the source. It will also use _msgmerge_ to update all of the "`.po`" files
from the updated "`pv.pot`" file. After doing this, look for missing
translations (empty "`msgstr`" lines) or translations marked as "fuzzy", as
these will need to be corrected by translators.
diff --git a/doc/NEWS.md b/doc/NEWS.md
index 1b3e730..979a5e1 100644
--- a/doc/NEWS.md
+++ b/doc/NEWS.md
@@ -1,13 +1,19 @@
-0.0.20230816-UNRELEASED
+0.0.20230828-UNRELEASED
* feature: new "`--enable-static`" option to "`configure`" for static builds ([#75](https://codeberg.org/a-j-wood/pv/pull/75))
- * cleanup: added a test for terminal width detection to "`make test`"
- * cleanup: added a test to "`make test`" to ensure that "`make install`" installs everything expected
+ * security: with "`--pidfile`", write to a temporary file and rename it into place, to improve security
+ * security: keep self-contained copies of name and format string in PV internal state for memory safety
+ * cleanup: switched the build system to GNU Automake
+ * cleanup: added a test for terminal width detection to "`make check`"
+ * cleanup: added a test to "`make check`" to ensure that "`make install`" installs everything expected
* cleanup: replaced *AC_HEADER_TIOCGWINSZ* with *AC_CHECK_HEADERS(sys/ioctl.h)* for better MacOS compatibility ([#74](https://codeberg.org/a-j-wood/pv/issues/74))
* cleanup: with "`--sync`", call `fsync()` instead of `fdatasync()` on incapable systems ([#73](https://codeberg.org/a-j-wood/pv/issues/73))
- * cleanup: keep self-contained copies of name and format string in PV internal state for memory safety
- * cleanup: with "`--pidfile`", write to a temporary file and rename it into place, to improve security
- * misc: moved from GitHub to Codeberg; updated issue tracking links in documentation
+ * cleanup: replaced the test harness with the one native to GNU Automake
+ * cleanup: the manual is now a static file instead of needing to be built with "`configure`"
+ * dropped: dropped support for "`--enable-static-nls`"
+ * dropped: removed the Linux Software Map file, as the LSM project appears to be long dead
+ * dropped: will no longer publish to SourceForge as it has a chequered history and is unnecessary
+ * dropped: removed project from GitHub and moved to Codeberg - see "[Give Up GitHub](https://giveupgithub.org/)"
1.7.24 - 30 July 2023
diff --git a/doc/PACKAGE b/doc/PACKAGE
deleted file mode 100644
index f1345ae..0000000
--- a/doc/PACKAGE
+++ /dev/null
@@ -1 +0,0 @@
-pv
diff --git a/doc/TODO.md b/doc/TODO.md
index 96bc7b5..469ea77 100644
--- a/doc/TODO.md
+++ b/doc/TODO.md
@@ -41,10 +41,6 @@ Feature requests
* ([#54](https://codeberg.org/a-j-wood/pv/issues/54)) Run command every n percent ([haarp](https://github.com/haarp))
* ([#56](https://codeberg.org/a-j-wood/pv/issues/56)) Support for backgrounding pv, and allowing it to be monitored separately ([jimbobmcgee](https://github.com/jimbobmcgee))
* ([#67](https://codeberg.org/a-j-wood/pv/issues/67)) Wrap another process to monitor its stdin & stdout ([Alex Mason](https://github.com/axman6))
- * Make the manual a static file instead of building it with "configure"
- * Drop support for the LSM as the LSM project appears to be dead
- * Drop SourceForge from the release checklist as it has been problematic for OSS for decades
- * Switch build system to GNU Automake
* Switch license to GPLv3+
Any assistance would be appreciated.
diff --git a/doc/VERSION b/doc/VERSION
deleted file mode 100644
index 4c7e0fb..0000000
--- a/doc/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-0.0.20230816-UNRELEASED
diff --git a/autoconf/scripts/benchmark.sh b/doc/benchmark.sh
similarity index 95%
rename from autoconf/scripts/benchmark.sh
rename to doc/benchmark.sh
index a5eca7b..021caa2 100755
--- a/autoconf/scripts/benchmark.sh
+++ b/doc/benchmark.sh
@@ -18,7 +18,7 @@ dd if=/dev/zero of="${test_input}" bs=1k count=1k >/dev/null 2>&1
echo -e "Buf(k)\tRate(k)\tReads\tRsize\tWrites\tWsize"
for ((buffer=100; buffer<=1000; buffer+=100)); do
- for ((rate=0; rate<=1000; rate+=100)); do
+ for ((rate=100; rate<=1000; rate+=100)); do
rateparm="-L ${rate}k"
test ${rate} -eq 0 && rateparm=""
strace -tt -o "${strace_output}" \
diff --git a/doc/lsm.in b/doc/lsm.in
deleted file mode 100644
index 5eeb0ad..0000000
--- a/doc/lsm.in
+++ /dev/null
@@ -1,19 +0,0 @@
-Begin3
-Title: @PACKAGE@
-Version: @VERSION@
-Entered-date: 30JUL23
-Description: A tool for monitoring the progress of data through a
- pipeline. It can be inserted into any normal pipeline
- between two processes to give a visual indication of how
- quickly data is passing through, how long it has taken, how
- near to completion it is, and an estimate of how long it
- will be until completion.
-Keywords: progress bar, console, pipe, transfer rate
-Author: Andrew Wood
-Maintained-by: Andrew Wood
-Primary-site: http://www.ivarch.com/programs/@PACKAGE@.shtml
-Alternate-site:
-Original-site:
-Platforms:
-Copying-policy: Artistic 2.0
-End
diff --git a/doc/quickref.1.in b/doc/pv.1
similarity index 94%
rename from doc/quickref.1.in
rename to doc/pv.1
index ee1f40b..4d3065f 100644
--- a/doc/quickref.1.in
+++ b/doc/pv.1
@@ -1,17 +1,17 @@
-.TH @UCPACKAGE@ 1 "August 2023" Linux "User Manuals"
+.TH PV 1 "August 2023" Linux "User Manuals"
.SH NAME
-@PACKAGE@ \- monitor the progress of data through a pipe
+pv \- monitor the progress of data through a pipe
.SH SYNOPSIS
-.B @PACKAGE@
+.B pv
[\fIOPTION\fR]
[\fIFILE\fR]...
.br
-.B @PACKAGE@
+.B pv
[\fI\-h\fR|\fI\-V\fR]
.SH DESCRIPTION
-.B @PACKAGE@
+.B pv
shows the progress of data through a pipeline by giving information such as
time elapsed, percentage completed (with progress bar), current throughput
rate, total data transferred, and ETA.
@@ -20,7 +20,7 @@ To use it, insert it in a pipeline between two processes, with the
appropriate options. Its standard input will be passed through to its
standard output and progress will be shown on standard error.
-.B @PACKAGE@
+.B pv
will copy each supplied
.B FILE
in turn to standard output
@@ -35,15 +35,15 @@ A simple example to watch how quickly a file is transferred using
.BR nc (1):
.RS
-.B @PACKAGE@ file | nc -w 1 somewhere.com 3000
+.B pv file | nc -w 1 somewhere.com 3000
.RE
A similar example, transferring a file from another process and passing the
expected size to
-.BR @PACKAGE@ :
+.BR pv :
.RS
-.B cat file | @PACKAGE@ -s 12345 | nc -w 1 somewhere.com 3000
+.B cat file | pv -s 12345 | nc -w 1 somewhere.com 3000
.RE
A more complicated example using numeric output to feed into the
@@ -53,7 +53,7 @@ program for a full-screen progress display:
.RS
.B (tar cf - . \e
.br
-.B " | @PACKAGE@ -n -s $(du -sb . | awk '{print $1}') \e"
+.B " | pv -n -s $(du -sb . | awk '{print $1}') \e"
.br
.B " | gzip -9 > out.tgz) 2>&1 \e"
.br
@@ -63,24 +63,24 @@ program for a full-screen progress display:
Taking an image of a disk, skipping errors:
.RS
-.B @PACKAGE@ -EE /dev/your/disk/device > disk-image.img
+.B pv -EE /dev/your/disk/device > disk-image.img
.RE
Writing an image back to a disk:
.RS
-.B @PACKAGE@ disk-image.img > /dev/your/disk/device
+.B pv disk-image.img > /dev/your/disk/device
.RE
Zeroing a disk:
.RS
-.B @PACKAGE@ < /dev/zero > /dev/your/disk/device
+.B pv < /dev/zero > /dev/your/disk/device
.RE
Note that if the input size cannot be calculated, and the output is a block
device, then the size of the block device will be used and
-.B @PACKAGE@
+.B pv
will automatically stop at that size as if
.B \-S
had been given.
@@ -88,25 +88,25 @@ had been given.
(Linux only): Watching file descriptor 3 opened by another process 1234:
.RS
-.B @PACKAGE@ -d 1234:3
+.B pv -d 1234:3
.RE
(Linux only): Watching all file descriptors used by process 1234:
.RS
-.B @PACKAGE@ -d 1234
+.B pv -d 1234
.RE
.SH OPTIONS
-.B @PACKAGE@
+.B pv
takes many options, which are divided into display switches, output
modifiers, and general options.
.SH DISPLAY SWITCHES
If no display switches are specified,
-.B @PACKAGE@
+.B pv
behaves as if
.BR \-p ", " \-t ", " \-e ", " \-r ", and " \-b
had been given (i.e. everything except average rate is switched on).
@@ -123,7 +123,7 @@ moving.
.TP
.B \-t, \-\-timer
Turn the timer on. This will display the total elapsed time that
-.B @PACKAGE@
+.B pv
has been running for.
.TP
.B \-e, \-\-eta
@@ -191,7 +191,7 @@ section below.
.TP
.B \-n, \-\-numeric
Numeric output. Instead of giving a visual indication of progress,
-.B @PACKAGE@
+.B pv
will give an integer percentage, one per line, on standard error, suitable
for piping (via convoluted redirection) into
.BR dialog (1).
@@ -313,7 +313,7 @@ parts of it apart.
.TP
.B \-f, \-\-force
Force output. Normally,
-.B @PACKAGE@
+.B pv
will not output any visual display if standard error is not a terminal.
This option forces it to do so.
.TP
@@ -322,7 +322,7 @@ Use cursor positioning escape sequences instead of just using carriage
returns. This is useful in conjunction with
.B \-N
(name) if you are using multiple
-.B @PACKAGE@
+.B pv
invocations in a single, long, pipeline.
@@ -410,7 +410,7 @@ the effect of caches, at the cost of performance. Due to memory alignment
requirements, it also may cause read or write failures with an error of
"Invalid argument", especially if reading and writing files across a variety
of filesystems in a single
-.B @PACKAGE@
+.B pv
call. Use this option with caution.
.TP
.B \-d PID[:FD], \-\-watchfd PID[:FD]
@@ -419,7 +419,7 @@ Instead of transferring data, watch file descriptor
of process
.BR PID ,
and show its progress. The
-.B @PACKAGE@
+.B pv
process will exit when
.B FD
either changes to a different file, changes read/write mode, or is closed;
@@ -431,7 +431,7 @@ If only a
.B PID
is specified, then that process will be watched, and all regular files and
block devices it opens will be shown with a progress bar. The
-.B @PACKAGE@
+.B pv
process will exit when process
.B PID
exits.
@@ -440,14 +440,14 @@ exits.
If
.B PID
is an instance of
-.B @PACKAGE@
+.B pv
that is already running,
.B \-R PID
will cause that instance to act as though it had been given
this instance's command line instead. For example, if
-.B @PACKAGE@ -L 123K
+.B pv -L 123K
is running with process ID 9876, then running
-.B @PACKAGE@ -R 9876 -L 321K
+.B pv -R 9876 -L 321K
will cause it to start using a rate limit of 321KiB instead of 123KiB.
Note that some options cannot be changed while running, such as
.BR \-c ,
@@ -462,15 +462,15 @@ and
.TP
.B \-P FILE, \-\-pidfile FILE
Save the process ID of
-.B @PACKAGE@
+.B pv
in
.BR FILE .
The file will be replaced if it already exists, and will be removed when
-.B @PACKAGE@
+.B pv
exits. While
-.B @PACKAGE@
+.B pv
is running, it will contain a single number - the process ID of
-.B @PACKAGE@
+.B pv
- followed by a newline.
.TP
.B \-h, \-\-help
@@ -556,19 +556,19 @@ The format string equivalent of turning on all display switches is
Some suggested common switch combinations:
.TP
-.B @PACKAGE@ -ptebar
+.B pv -ptebar
Show a progress bar, elapsed time, estimated completion time, byte counter,
average rate, and current rate.
.TP
-.B @PACKAGE@ -betlap
+.B pv -betlap
Show a progress bar, elapsed time, estimated completion time, line counter,
and average rate, counting lines instead of bytes.
.TP
-.B @PACKAGE@ -t
+.B pv -t
Show only the elapsed time - useful as a simple timer, e.g.
.BR "sleep 10m | pv -t" .
.TP
-.B @PACKAGE@ -pterb
+.B pv -pterb
The default behaviour: progress bar, elapsed time, estimated completion
time, current rate, and byte counter.
@@ -620,7 +620,7 @@ contributors.
.SH KNOWN PROBLEMS
The following problems are known to exist in
-.BR @PACKAGE@ :
+.BR pv :
.TP
.B *
In some versions of
@@ -644,7 +644,7 @@ running, if started near the bottom of the screen (IPC is needed to handle
the terminal scrolling). To fix this, start
.B cygserver
before using
-.BR "@PACKAGE@ -c" .
+.BR "pv -c" .
.P
.TP
.B *
@@ -655,7 +655,7 @@ option is not available on Cygwin without
running (SYSV IPC is needed). To fix this, start
.B cygserver
before running the instance of
-.B @PACKAGE@
+.B pv
you want, at runtime, to change the parameters of.
.P
If you find any other problems, please report them.
@@ -663,9 +663,9 @@ If you find any other problems, please report them.
.SH REPORTING BUGS
Report bugs in
-.B @PACKAGE@
+.B pv
to pv@ivarch.com or use the contact form linked from the
-.B @PACKAGE@
+.B pv
home page:
diff --git a/doc/release-checklist b/doc/release-checklist
index 262f11b..7d043cd 100644
--- a/doc/release-checklist
+++ b/doc/release-checklist
@@ -1,18 +1,16 @@
Before releasing a new version, go through this checklist:
- check for patches from https://tracker.debian.org/pkg/pv
- - bump doc/VERSION
- - bump doc/lsm.in
+ - bump version in configure.ac and doc/NEWS.md
- check doc/NEWS.md is up to date
- check manual is up to date
- make indent; make indent indentclean
- make update-po
- - make test
+ - make check
- commit to repository
- - wipe build directory, re-run generate.sh and configure
+ - wipe build directory, re-run autoreconf and configure
- make release MAINTAINER=
- make manhtml | tidy -asxhtml | sed -e '1,//d' -e '/<\/body>/,$d'
- update HTML for todo and news
- copy and sign tar.gz to HTML directory (sig as both .asc and .txt)
- - submit new release to Sourceforge
- upload HTML
diff --git a/generate.sh b/generate.sh
deleted file mode 100755
index 2003d27..0000000
--- a/generate.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-#
-# Script to autogenerate the `configure' script, and the config header
-# template if `autoconf' is available, and then rebuild the dependency list.
-
-set -e
-
-cd $(dirname $0)
-
-test -t 1 && echo "${0##*/}: running autoconf"
-autoconf autoconf/configure.in > configure
-chmod 755 configure
-
-if command -v autoheader >/dev/null; then
- test -t 1 && echo "${0##*/}: running autoheader"
- autoheader autoconf/configure.in
-else
- test -t 1 && echo "${0##*/}: autoheader not found, skipping"
-fi
-
-echo > autoconf/make/depend.mk~
-echo > autoconf/make/filelist.mk~
-echo > autoconf/make/modules.mk~
-
-MAKE=make
-command -v gmake >/dev/null 2>&1 && MAKE=gmake
-
-rm -rf .gen
-mkdir .gen
-cd .gen
-
-test -t 1 && echo "${0##*/}: running new \`configure' script"
-sh ../configure
-
-test -t 1 && echo "${0##*/}: regenerating Makefile fragments"
-$MAKE make
-$MAKE dep
-
-test -t 1 && echo "${0##*/}: cleaning up"
-cd ..
-rm -rf .gen
-rm -rf autom4te.cache autoconf/autom4te.cache
-
-# EOF
diff --git a/po/.gitignore b/po/.gitignore
new file mode 100644
index 0000000..a16e297
--- /dev/null
+++ b/po/.gitignore
@@ -0,0 +1,9 @@
+Makevars.template
+*.sed
+*.gmo
+*.header
+*.sin
+*.pot
+Rules-quot
+stamp-po
+*~
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..24cac49
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,4 @@
+de
+fr
+pl
+pt
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..6b25f0d
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,510 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-2000 Ulrich Drepper
+# Copyright (C) 2000-2020 Free Software Foundation, Inc.
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved. This file is offered as-is,
+# without any warranty.
+#
+# Origin: gettext-0.21
+GETTEXT_MACRO_VERSION = 0.20
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SED = @SED@
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+# When building gettext-tools, we prefer to use the built programs
+# rather than installed programs. However, we can't do that when we
+# are cross compiling.
+CROSS_COMPILING = @CROSS_COMPILING@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = @MSGMERGE@
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
+POFILESDEPS_yes = $(POFILESDEPS_)
+POFILESDEPS_no =
+POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
+
+DISTFILESDEPS_ = update-po
+DISTFILESDEPS_yes = $(DISTFILESDEPS_)
+DISTFILESDEPS_no =
+DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+all: all-@USE_NLS@
+
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update
+
+# The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs.
+# The GNU Coding Standards say in
+# :
+# "GNU distributions usually contain some files which are not source files
+# ... . Since these files normally appear in the source directory, they
+# should always appear in the source directory, not in the build directory.
+# So Makefile rules to update them should put the updated files in the
+# source directory."
+# Therefore we put these files in the source directory, not the build directory.
+
+# During .po -> .gmo conversion, take into account the most recent changes to
+# the .pot file. This eliminates the need to update the .po files when the
+# .pot file has changed, which would be troublesome if the .po files are put
+# under version control.
+$(GMOFILES): $(srcdir)/$(DOMAIN).pot
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \
+ cd $(srcdir) && \
+ rm -f $${lang}.gmo && \
+ $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \
+ $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \
+ mv t-$${lang}.gmo $${lang}.gmo && \
+ rm -f $${lang}.1po
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all-yes: $(srcdir)/stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+CHECK_MACRO_VERSION = \
+ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+ exit 1; \
+ }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target).
+
+# $(srcdir)/stamp-po is a timestamp denoting the last time at which the CATALOGS
+# have been loosely updated. Its purpose is that when a developer or translator
+# checks out the package from a version control system, and the $(DOMAIN).pot
+# file is not under version control, "make" will update the $(DOMAIN).pot and
+# the $(CATALOGS), but subsequent invocations of "make" will do nothing. This
+# timestamp would not be necessary if updating the $(CATALOGS) would always
+# touch them; however, the rule for $(POFILES) has been designed to not touch
+# files that don't need to be changed.
+$(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot
+ @$(CHECK_MACRO_VERSION)
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch $(srcdir)/stamp-po" && \
+ echo timestamp > $(srcdir)/stamp-poT && \
+ mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+# The determination of whether the package xyz is a GNU one is based on the
+# heuristic whether some file in the top level directory mentions "GNU xyz".
+# If GNU 'find' is available, we avoid grepping through monster files.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+ package_gnu="$(PACKAGE_GNU)"; \
+ test -n "$$package_gnu" || { \
+ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \
+ else \
+ LC_ALL=C grep -i 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+ fi; \
+ } | grep -v 'libtool:' >/dev/null; then \
+ package_gnu=yes; \
+ else \
+ package_gnu=no; \
+ fi; \
+ }; \
+ if test "$$package_gnu" = "yes"; then \
+ package_prefix='GNU '; \
+ else \
+ package_prefix=''; \
+ fi; \
+ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+ else \
+ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+ fi; \
+ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ ;; \
+ *) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --package-name="$${package_prefix}@PACKAGE@" \
+ --package-version='@VERSION@' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ ;; \
+ esac
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot-header; then \
+ sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
+ cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \
+ rm -f $(DOMAIN).1po \
+ || exit 1; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(POFILESDEPS)
+ @test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) \
+ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+ 0.1[6-7] | 0.1[6-7].*) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \
+ esac; \
+ }; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+ fi; \
+ done; \
+ done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+install-dvi install-ps install-pdf install-html:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f $(srcdir)/stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f $(srcdir)/$(DOMAIN).pot $(srcdir)/stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: $(srcdir)/stamp-po $(DISTFILES)
+ @dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ else \
+ case $(XGETTEXT) in \
+ :) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because a suitable 'xgettext' program was not found in PATH." 1>&2;; \
+ *) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because 'xgettext' found no strings to extract. Check the contents of the POTFILES.in file and the XGETTEXT_OPTIONS in the Makevars file." 1>&2;; \
+ esac; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ 0.1[6-7] | 0.1[6-7].*) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ esac; \
+ }; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && @SHELL@ ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000..75aa240
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,82 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+#
+# Copyright (C) 2003-2019 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to use, copy, distribute, and modify it.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Andrew Wood
+
+# This tells whether or not to prepend "GNU " prefix to the package
+# name that gets inserted into the header of the $(DOMAIN).pot file.
+# Possible values are "yes", "no", or empty. If it is empty, try to
+# detect it automatically by scanning the files in $(top_srcdir) for
+# "GNU packagename" string.
+PACKAGE_GNU =
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS =
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context. Possible values are "yes" and "no". Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = no
+
+# These options get passed to msgmerge.
+# Useful options are in particular:
+# --previous to keep previous msgids of translated messages,
+# --quiet to reduce the verbosity.
+MSGMERGE_OPTIONS =
+
+# These options get passed to msginit.
+# If you want to disable line wrapping when writing PO files, add
+# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
+# MSGINIT_OPTIONS.
+MSGINIT_OPTIONS =
+
+# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
+# has changed. Possible values are "yes" and "no". Set this to no if
+# the POT file is checked in the repository and the version control
+# program ignores timestamps.
+PO_DEPENDS_ON_POT = yes
+
+# This tells whether or not to forcibly update $(DOMAIN).pot and
+# regenerate PO files on "make dist". Possible values are "yes" and
+# "no". Set this to no if the POT file and PO files are maintained
+# externally.
+DIST_DEPENDS_ON_UPDATE_PO = yes
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..c461d09
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,16 @@
+src/main/debug.c
+src/main/help.c
+src/main/main.c
+src/main/options.c
+src/main/remote.c
+src/main/version.c
+src/pv/cursor.c
+src/pv/display.c
+src/pv/file.c
+src/pv/loop.c
+src/pv/number.c
+src/pv/signal.c
+src/pv/state.c
+src/pv/string.c
+src/pv/transfer.c
+src/pv/watchpid.c
diff --git a/src/nls/de.po b/po/de.po
similarity index 89%
rename from src/nls/de.po
rename to po/de.po
index 08c1e6f..011923d 100644
--- a/src/nls/de.po
+++ b/po/de.po
@@ -1,7 +1,8 @@
msgid ""
msgstr ""
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-06 20:51+0100\n"
+"Report-Msgid-Bugs-To: https://codeberg.org/a-j-wood/pv/issues\n"
+"POT-Creation-Date: 2023-08-28 09:37+0100\n"
+"Language: de\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Date: 1999-06-01 15:18:29+0100\n"
"From: Andrew Wood \n"
@@ -19,164 +20,6 @@ msgstr ""
"nls/intl/textdomain.c src/nls/intl-cat/cat-compat.c src/nls/intl-gett/intl-"
"compat.c\n"
-#: src/pv/cursor.c:85
-msgid "failed to get terminal name"
-msgstr "Terminalname konnte nicht gelesen werden"
-
-#: src/pv/cursor.c:117
-msgid "failed to open lock file"
-msgstr "Sperrdatei konnte nicht geöffnet werden"
-
-#: src/pv/cursor.c:150
-msgid "lock attempt failed"
-msgstr "Sperrversuch fehlgeschlagen"
-
-#: src/pv/cursor.c:391
-msgid "failed to open terminal"
-msgstr "Terminal konnte nicht geöffnet werden"
-
-#: src/pv/file.c:119
-msgid "failed to seek to start of output"
-msgstr "Konnte nicht versuchen, die Ausgabe zu starten"
-
-#: src/pv/file.c:210
-msgid "failed to close file"
-msgstr "Datei konnte nicht geschlossen werden"
-
-#: src/pv/file.c:232
-msgid "failed to read file"
-msgstr "Datei konnte nicht gelesen werden"
-
-#: src/pv/file.c:239 src/main/options.c:284
-msgid "failed to stat file"
-msgstr "Dateiinformationen konnten nicht gelesen werden"
-
-#: src/pv/file.c:246
-msgid "failed to stat output file"
-msgstr "Dateiinformationen für Ausgabe-Datei konnten nicht gelesen werden"
-
-#: src/pv/file.c:268
-msgid "input file is output file"
-msgstr "Eingabe-Datei ist Ausgabe-Datei"
-
-#: src/pv/transfer.c:366
-msgid "read failed"
-msgstr "read-Aufruf fehlgeschlagen"
-
-#: src/pv/transfer.c:381
-msgid "warning: read errors detected"
-msgstr "warnung: lesefehler erkannt"
-
-#: src/pv/transfer.c:393
-msgid "file is not seekable"
-msgstr "datei ist nicht durchsuchbar"
-
-#: src/pv/transfer.c:452
-msgid "failed to seek past error"
-msgstr "konnte den Fehler nicht überwinden"
-
-#: src/pv/transfer.c:468
-msgid "skipped past read error"
-msgstr "über den Lesefehler hinaus verschoben"
-
-#: src/pv/transfer.c:468 src/pv/display.c:666
-msgid "B"
-msgstr "B"
-
-#: src/pv/transfer.c:624
-msgid "write failed"
-msgstr "write-Aufruf fehlgeschlagen"
-
-#: src/pv/transfer.c:743 src/pv/display.c:600
-msgid "buffer allocation failed"
-msgstr "Puffer konnte nicht allokiert werden"
-
-#.
-#. * Any other error is a problem and we must report back.
-#.
-#: src/pv/transfer.c:840
-msgid "select call failed"
-msgstr "select-Aufruf fehlgeschlagen"
-
-#: src/pv/watchpid.c:73 src/pv/watchpid.c:83 src/pv/watchpid.c:94
-#: src/pv/watchpid.c:102 src/pv/watchpid.c:139 src/pv/watchpid.c:150
-#: src/pv/watchpid.c:158 src/pv/watchpid.c:169 src/pv/watchpid.c:253
-#: src/pv/watchpid.c:261 src/pv/watchpid.c:292 src/pv/watchpid.c:312
-#: src/pv/loop.c:506 src/pv/loop.c:558 src/pv/loop.c:602
-msgid "pid"
-msgstr ""
-
-#: src/pv/watchpid.c:83 src/pv/watchpid.c:95 src/pv/watchpid.c:104
-#: src/pv/watchpid.c:150 src/pv/watchpid.c:159 src/pv/watchpid.c:171
-msgid "fd"
-msgstr ""
-
-#: src/pv/watchpid.c:104 src/pv/watchpid.c:171
-msgid "not a regular file or block device"
-msgstr "keine normale Datei oder Blockgerät"
-
-#: src/pv/state.c:30
-msgid "history structure allocation failed"
-msgstr ""
-
-#: src/pv/state.c:59
-msgid "none"
-msgstr ""
-
-#: src/pv/display.c:165
-msgid "yzafpnum kMGTPEZY"
-msgstr ""
-
-#: src/pv/display.c:170
-msgid "yzafpnum KMGTPEZY"
-msgstr ""
-
-#: src/pv/display.c:662
-msgid "b"
-msgstr ""
-
-#: src/pv/display.c:717 src/pv/display.c:728
-msgid "b/s"
-msgstr ""
-
-#: src/pv/display.c:720 src/pv/display.c:732
-msgid "/s"
-msgstr ""
-
-#: src/pv/display.c:720 src/pv/display.c:732
-msgid "B/s"
-msgstr ""
-
-#: src/pv/display.c:768 src/pv/display.c:772 src/pv/display.c:831
-msgid "ETA"
-msgstr "ETA"
-
-#. GNU standard license line and free software notice
-#: src/main/version.c:28
-msgid "License: Artistic v2.0 "
-msgstr ""
-
-#: src/main/version.c:29
-msgid "This is free software: you are free to change and redistribute it."
-msgstr ""
-
-#: src/main/version.c:30
-msgid "There is NO WARRANTY, to the extent permitted by law."
-msgstr ""
-
-#. Project web site link
-#: src/main/version.c:32
-msgid "Project web site"
-msgstr ""
-
-#: src/main/remote.c:215
-msgid "message not received"
-msgstr "Nachricht nicht empfangen"
-
-#: src/main/remote.c:318
-msgid "IPC not supported on this system"
-msgstr "IPC wird auf diesem System nicht unterstützt"
-
#: src/main/help.c:283
msgid "show progress bar"
msgstr "Fortschritts-Anzeige"
@@ -378,23 +221,11 @@ msgstr "zeige Versionsinformationen und beende"
msgid "write debug logs to FILE"
msgstr ""
-#. @-formatconst@
-#.
-#. * splint note: unavoidable use of %s in translated string. Should
-#. * be hard to exploit - the message catalogue would have to be
-#. * replaced or forced to load from another location.
-#.
#: src/main/help.c:427
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Syntax: %s [OPTION] [DATEI]..."
-#. @-mustfreefresh@
-#.
-#. * splint note: the gettext calls made by _() cause memory leak
-#. * warnings, but in this case it's unavoidable, and mitigated by the
-#. * fact we only translate each string once.
-#.
#: src/main/help.c:438
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
@@ -407,49 +238,53 @@ msgstr ""
msgid "Please report any bugs to %s."
msgstr "Bitte senden Sie Fehlerberichte an %s."
-#: src/main/main.c:75
+#: src/main/main.c:82
msgid "state allocation failed"
msgstr "Zustandszuweisung fehlgeschlagen"
-#: src/main/main.c:243
+#: src/main/main.c:320
msgid "failed to read terminal attributes"
msgstr ""
-#: src/main/options.c:111
+#: src/main/options.c:205
msgid "option structure allocation failed"
msgstr "`option' konnte nicht allokiert werden"
-#: src/main/options.c:124
+#: src/main/options.c:224
msgid "option structure argv allocation failed"
msgstr "`option' (argv) konnte nicht allokiert werden"
-#: src/main/options.c:163
+#: src/main/options.c:281
msgid "integer argument expected"
msgstr "Ganzzahliges Argument erwartet"
-#: src/main/options.c:171
+#: src/main/options.c:292
msgid "numeric argument expected"
msgstr "numerisches Argument erwartet"
-#: src/main/options.c:180
+#: src/main/options.c:303
msgid "process ID or pid:fd pair expected"
msgstr "Prozess-ID oder PID:FD-Paar erwartet"
-#: src/main/options.c:185
+#: src/main/options.c:310
msgid "invalid process ID"
msgstr "ungültige Prozess-ID"
-#: src/main/options.c:358
+#: src/main/options.c:411 src/pv/file.c:239
+msgid "failed to stat file"
+msgstr "Dateiinformationen konnten nicht gelesen werden"
+
+#: src/main/options.c:503
#, c-format
msgid "Try `%s --help' for more information."
msgstr "`%s --help' zeigt weitere Informationen an."
-#: src/main/options.c:360
+#: src/main/options.c:505
#, c-format
msgid "Try `%s -h' for more information."
msgstr "`%s -h' zeigt weitere Informationen an."
-#: src/main/options.c:374
+#: src/main/options.c:536
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -457,26 +292,175 @@ msgstr ""
"Beim Anzeigen von Dateideskriptoren können keine Optionen für den "
"Zeilenmodus oder den Übertragungsmodifikator verwendet werden"
-#: src/main/options.c:381
+#: src/main/options.c:545
msgid "cannot use cursor positioning when watching file descriptors"
msgstr ""
"Beim Anzeigen von Dateideskriptoren können keine Zeilenmodus- oder "
"Übertragungsmodifikatoroptionen verwendet werden."
-#: src/main/options.c:388
+#: src/main/options.c:554
msgid "cannot use remote control when watching file descriptors"
msgstr ""
"kann keine Fernbedienung verwenden, wenn Dateideskriptoren angezeigt werden"
-#: src/main/options.c:395
+#: src/main/options.c:563
msgid "cannot transfer files when watching file descriptors"
msgstr ""
"Dateien können beim Betrachten von Dateideskriptoren nicht übertragen werden"
-#: src/main/options.c:402
+#: src/main/options.c:578
msgid "not available on systems without /proc/self/fdinfo"
msgstr "Nicht verfügbar auf Systemen ohne /proc/self/fdinfo"
+#: src/main/remote.c:238
+msgid "message not received"
+msgstr "Nachricht nicht empfangen"
+
+#: src/main/remote.c:347
+msgid "IPC not supported on this system"
+msgstr "IPC wird auf diesem System nicht unterstützt"
+
+#: src/main/version.c:28
+msgid "License: Artistic v2.0 "
+msgstr ""
+
+#: src/main/version.c:29
+msgid "This is free software: you are free to change and redistribute it."
+msgstr ""
+
+#: src/main/version.c:30
+msgid "There is NO WARRANTY, to the extent permitted by law."
+msgstr ""
+
+#: src/main/version.c:32
+msgid "Project web site"
+msgstr ""
+
+#: src/pv/cursor.c:85
+msgid "failed to get terminal name"
+msgstr "Terminalname konnte nicht gelesen werden"
+
+#: src/pv/cursor.c:117
+msgid "failed to open lock file"
+msgstr "Sperrdatei konnte nicht geöffnet werden"
+
+#: src/pv/cursor.c:150
+msgid "lock attempt failed"
+msgstr "Sperrversuch fehlgeschlagen"
+
+#: src/pv/cursor.c:391
+msgid "failed to open terminal"
+msgstr "Terminal konnte nicht geöffnet werden"
+
+#: src/pv/display.c:165
+msgid "yzafpnum kMGTPEZY"
+msgstr ""
+
+#: src/pv/display.c:170
+msgid "yzafpnum KMGTPEZY"
+msgstr ""
+
+#: src/pv/display.c:600 src/pv/transfer.c:743
+msgid "buffer allocation failed"
+msgstr "Puffer konnte nicht allokiert werden"
+
+#: src/pv/display.c:662
+msgid "b"
+msgstr ""
+
+#: src/pv/display.c:666 src/pv/transfer.c:468
+msgid "B"
+msgstr "B"
+
+#: src/pv/display.c:717 src/pv/display.c:728
+msgid "b/s"
+msgstr ""
+
+#: src/pv/display.c:720 src/pv/display.c:732
+msgid "/s"
+msgstr ""
+
+#: src/pv/display.c:720 src/pv/display.c:732
+msgid "B/s"
+msgstr ""
+
+#: src/pv/display.c:768 src/pv/display.c:772 src/pv/display.c:831
+msgid "ETA"
+msgstr "ETA"
+
+#: src/pv/file.c:119
+msgid "failed to seek to start of output"
+msgstr "Konnte nicht versuchen, die Ausgabe zu starten"
+
+#: src/pv/file.c:210
+msgid "failed to close file"
+msgstr "Datei konnte nicht geschlossen werden"
+
+#: src/pv/file.c:232
+msgid "failed to read file"
+msgstr "Datei konnte nicht gelesen werden"
+
+#: src/pv/file.c:246
+msgid "failed to stat output file"
+msgstr "Dateiinformationen für Ausgabe-Datei konnten nicht gelesen werden"
+
+#: src/pv/file.c:268
+msgid "input file is output file"
+msgstr "Eingabe-Datei ist Ausgabe-Datei"
+
+#: src/pv/loop.c:506 src/pv/loop.c:558 src/pv/loop.c:602 src/pv/watchpid.c:73
+#: src/pv/watchpid.c:83 src/pv/watchpid.c:94 src/pv/watchpid.c:102
+#: src/pv/watchpid.c:139 src/pv/watchpid.c:150 src/pv/watchpid.c:158
+#: src/pv/watchpid.c:169 src/pv/watchpid.c:253 src/pv/watchpid.c:261
+#: src/pv/watchpid.c:292 src/pv/watchpid.c:312
+msgid "pid"
+msgstr ""
+
+#: src/pv/state.c:30
+msgid "history structure allocation failed"
+msgstr ""
+
+#: src/pv/state.c:59
+msgid "none"
+msgstr ""
+
+#: src/pv/transfer.c:366
+msgid "read failed"
+msgstr "read-Aufruf fehlgeschlagen"
+
+#: src/pv/transfer.c:381
+msgid "warning: read errors detected"
+msgstr "warnung: lesefehler erkannt"
+
+#: src/pv/transfer.c:393
+msgid "file is not seekable"
+msgstr "datei ist nicht durchsuchbar"
+
+#: src/pv/transfer.c:452
+msgid "failed to seek past error"
+msgstr "konnte den Fehler nicht überwinden"
+
+#: src/pv/transfer.c:468
+msgid "skipped past read error"
+msgstr "über den Lesefehler hinaus verschoben"
+
+#: src/pv/transfer.c:624
+msgid "write failed"
+msgstr "write-Aufruf fehlgeschlagen"
+
+#: src/pv/transfer.c:840
+msgid "select call failed"
+msgstr "select-Aufruf fehlgeschlagen"
+
+#: src/pv/watchpid.c:83 src/pv/watchpid.c:95 src/pv/watchpid.c:104
+#: src/pv/watchpid.c:150 src/pv/watchpid.c:159 src/pv/watchpid.c:171
+msgid "fd"
+msgstr ""
+
+#: src/pv/watchpid.c:104 src/pv/watchpid.c:171
+msgid "not a regular file or block device"
+msgstr "keine normale Datei oder Blockgerät"
+
#~ msgid ""
#~ "Debugging is enabled; export the DEBUG environment variable to define "
#~ "the\n"
diff --git a/src/nls/fr.po b/po/fr.po
similarity index 89%
rename from src/nls/fr.po
rename to po/fr.po
index 1af391f..d8f4077 100644
--- a/src/nls/fr.po
+++ b/po/fr.po
@@ -1,7 +1,8 @@
msgid ""
msgstr ""
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-06 20:51+0100\n"
+"Report-Msgid-Bugs-To: https://codeberg.org/a-j-wood/pv/issues\n"
+"POT-Creation-Date: 2023-08-28 09:37+0100\n"
+"Language: fr\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Date: 1999-06-01 15:18:29+0100\n"
"From: Andrew Wood \n"
@@ -19,164 +20,6 @@ msgstr ""
"nls/intl/textdomain.c src/nls/intl-cat/cat-compat.c src/nls/intl-gett/intl-"
"compat.c\n"
-#: src/pv/cursor.c:85
-msgid "failed to get terminal name"
-msgstr "échec de lecture du nom du terminal"
-
-#: src/pv/cursor.c:117
-msgid "failed to open lock file"
-msgstr "échec de l'ouverture du fichier de verrouillage"
-
-#: src/pv/cursor.c:150
-msgid "lock attempt failed"
-msgstr "tentative de verrouillage échoué"
-
-#: src/pv/cursor.c:391
-msgid "failed to open terminal"
-msgstr "l'ouverture du terminal a échoué"
-
-#: src/pv/file.c:119
-msgid "failed to seek to start of output"
-msgstr "ne peut pas passer au début de la sortie"
-
-#: src/pv/file.c:210
-msgid "failed to close file"
-msgstr "la fermeture du fichier a échoué"
-
-#: src/pv/file.c:232
-msgid "failed to read file"
-msgstr "la lecture du fichier a échoué"
-
-#: src/pv/file.c:239 src/main/options.c:284
-msgid "failed to stat file"
-msgstr "échec à statuer sur le fichier"
-
-#: src/pv/file.c:246
-msgid "failed to stat output file"
-msgstr "échec à statuer sur le fichier de sortie"
-
-#: src/pv/file.c:268
-msgid "input file is output file"
-msgstr "fichiers d'entré et de sortie sont les mêmes"
-
-#: src/pv/transfer.c:366
-msgid "read failed"
-msgstr "la lecture a échoué"
-
-#: src/pv/transfer.c:381
-msgid "warning: read errors detected"
-msgstr "avertissement: erreurs de lecture détectées"
-
-#: src/pv/transfer.c:393
-msgid "file is not seekable"
-msgstr "ne peut pas se déplacer dans le fichier"
-
-#: src/pv/transfer.c:452
-msgid "failed to seek past error"
-msgstr "n'a pas réussi à dépasser l'erreur"
-
-#: src/pv/transfer.c:468
-msgid "skipped past read error"
-msgstr "erreur de lecture dépassée"
-
-#: src/pv/transfer.c:468 src/pv/display.c:666
-msgid "B"
-msgstr "O"
-
-#: src/pv/transfer.c:624
-msgid "write failed"
-msgstr "l'écriture a échoué"
-
-#: src/pv/transfer.c:743 src/pv/display.c:600
-msgid "buffer allocation failed"
-msgstr "l'allocation de mémoire tampon a échoué"
-
-#.
-#. * Any other error is a problem and we must report back.
-#.
-#: src/pv/transfer.c:840
-msgid "select call failed"
-msgstr "appel de sélection a échoué"
-
-#: src/pv/watchpid.c:73 src/pv/watchpid.c:83 src/pv/watchpid.c:94
-#: src/pv/watchpid.c:102 src/pv/watchpid.c:139 src/pv/watchpid.c:150
-#: src/pv/watchpid.c:158 src/pv/watchpid.c:169 src/pv/watchpid.c:253
-#: src/pv/watchpid.c:261 src/pv/watchpid.c:292 src/pv/watchpid.c:312
-#: src/pv/loop.c:506 src/pv/loop.c:558 src/pv/loop.c:602
-msgid "pid"
-msgstr ""
-
-#: src/pv/watchpid.c:83 src/pv/watchpid.c:95 src/pv/watchpid.c:104
-#: src/pv/watchpid.c:150 src/pv/watchpid.c:159 src/pv/watchpid.c:171
-msgid "fd"
-msgstr ""
-
-#: src/pv/watchpid.c:104 src/pv/watchpid.c:171
-msgid "not a regular file or block device"
-msgstr "pas un fichier ordinaire ou un périphérique de bloc"
-
-#: src/pv/state.c:30
-msgid "history structure allocation failed"
-msgstr ""
-
-#: src/pv/state.c:59
-msgid "none"
-msgstr ""
-
-#: src/pv/display.c:165
-msgid "yzafpnum kMGTPEZY"
-msgstr ""
-
-#: src/pv/display.c:170
-msgid "yzafpnum KMGTPEZY"
-msgstr ""
-
-#: src/pv/display.c:662
-msgid "b"
-msgstr ""
-
-#: src/pv/display.c:717 src/pv/display.c:728
-msgid "b/s"
-msgstr ""
-
-#: src/pv/display.c:720 src/pv/display.c:732
-msgid "/s"
-msgstr "/s"
-
-#: src/pv/display.c:720 src/pv/display.c:732
-msgid "B/s"
-msgstr "O/s"
-
-#: src/pv/display.c:768 src/pv/display.c:772 src/pv/display.c:831
-msgid "ETA"
-msgstr "ETA"
-
-#. GNU standard license line and free software notice
-#: src/main/version.c:28
-msgid "License: Artistic v2.0 "
-msgstr ""
-
-#: src/main/version.c:29
-msgid "This is free software: you are free to change and redistribute it."
-msgstr ""
-
-#: src/main/version.c:30
-msgid "There is NO WARRANTY, to the extent permitted by law."
-msgstr ""
-
-#. Project web site link
-#: src/main/version.c:32
-msgid "Project web site"
-msgstr ""
-
-#: src/main/remote.c:215
-msgid "message not received"
-msgstr "message non reçu"
-
-#: src/main/remote.c:318
-msgid "IPC not supported on this system"
-msgstr "IPC non pris en charge sur ce système"
-
#: src/main/help.c:283
msgid "show progress bar"
msgstr "affiche la barre de progression"
@@ -377,23 +220,11 @@ msgstr "afficher la version puis quitter"
msgid "write debug logs to FILE"
msgstr ""
-#. @-formatconst@
-#.
-#. * splint note: unavoidable use of %s in translated string. Should
-#. * be hard to exploit - the message catalogue would have to be
-#. * replaced or forced to load from another location.
-#.
#: src/main/help.c:427
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Utilisation : %s [OPTIONS] [FICHIER]..."
-#. @-mustfreefresh@
-#.
-#. * splint note: the gettext calls made by _() cause memory leak
-#. * warnings, but in this case it's unavoidable, and mitigated by the
-#. * fact we only translate each string once.
-#.
#: src/main/help.c:438
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
@@ -406,49 +237,53 @@ msgstr ""
msgid "Please report any bugs to %s."
msgstr "SVP rapporter touts bogues à %s."
-#: src/main/main.c:75
+#: src/main/main.c:82
msgid "state allocation failed"
msgstr "échec de l'allocation de mémoire de condition"
-#: src/main/main.c:243
+#: src/main/main.c:320
msgid "failed to read terminal attributes"
msgstr ""
-#: src/main/options.c:111
+#: src/main/options.c:205
msgid "option structure allocation failed"
msgstr "l'allocation pour la structure d'une option a echoué"
-#: src/main/options.c:124
+#: src/main/options.c:224
msgid "option structure argv allocation failed"
msgstr "l'allocation pour la structure de l'option argv a echoué"
-#: src/main/options.c:163
+#: src/main/options.c:281
msgid "integer argument expected"
msgstr "Valeur entière attendue"
-#: src/main/options.c:171
+#: src/main/options.c:292
msgid "numeric argument expected"
msgstr "Valeur numérique attendue"
-#: src/main/options.c:180
+#: src/main/options.c:303
msgid "process ID or pid:fd pair expected"
msgstr "ID de processus ou paire pid:fd attendue"
-#: src/main/options.c:185
+#: src/main/options.c:310
msgid "invalid process ID"
msgstr "ID de processus non valide"
-#: src/main/options.c:358
+#: src/main/options.c:411 src/pv/file.c:239
+msgid "failed to stat file"
+msgstr "échec à statuer sur le fichier"
+
+#: src/main/options.c:503
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Essayez `%s --help' pour plus d'information."
-#: src/main/options.c:360
+#: src/main/options.c:505
#, c-format
msgid "Try `%s -h' for more information."
msgstr "Essayez `%s -h' pour plus d'information."
-#: src/main/options.c:374
+#: src/main/options.c:536
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -456,28 +291,177 @@ msgstr ""
"impossible d'utiliser le mode ligne ou les options de modificateur de "
"transfert lors de la visualisation des descripteurs de fichiers"
-#: src/main/options.c:381
+#: src/main/options.c:545
msgid "cannot use cursor positioning when watching file descriptors"
msgstr ""
"impossible d'utiliser le positionnement du curseur lors de la visualisation "
"des descripteurs de fichier"
-#: src/main/options.c:388
+#: src/main/options.c:554
msgid "cannot use remote control when watching file descriptors"
msgstr ""
"impossible d'utiliser la télécommande lors de la visualisation des "
"descripteurs de fichiers"
-#: src/main/options.c:395
+#: src/main/options.c:563
msgid "cannot transfer files when watching file descriptors"
msgstr ""
"impossible de transférer des fichiers lorsque vous regardez des descripteurs "
"de fichiers"
-#: src/main/options.c:402
+#: src/main/options.c:578
msgid "not available on systems without /proc/self/fdinfo"
msgstr "non disponible sur les systèmes sans /proc/self/fdinfo"
+#: src/main/remote.c:238
+msgid "message not received"
+msgstr "message non reçu"
+
+#: src/main/remote.c:347
+msgid "IPC not supported on this system"
+msgstr "IPC non pris en charge sur ce système"
+
+#: src/main/version.c:28
+msgid "License: Artistic v2.0 "
+msgstr ""
+
+#: src/main/version.c:29
+msgid "This is free software: you are free to change and redistribute it."
+msgstr ""
+
+#: src/main/version.c:30
+msgid "There is NO WARRANTY, to the extent permitted by law."
+msgstr ""
+
+#: src/main/version.c:32
+msgid "Project web site"
+msgstr ""
+
+#: src/pv/cursor.c:85
+msgid "failed to get terminal name"
+msgstr "échec de lecture du nom du terminal"
+
+#: src/pv/cursor.c:117
+msgid "failed to open lock file"
+msgstr "échec de l'ouverture du fichier de verrouillage"
+
+#: src/pv/cursor.c:150
+msgid "lock attempt failed"
+msgstr "tentative de verrouillage échoué"
+
+#: src/pv/cursor.c:391
+msgid "failed to open terminal"
+msgstr "l'ouverture du terminal a échoué"
+
+#: src/pv/display.c:165
+msgid "yzafpnum kMGTPEZY"
+msgstr ""
+
+#: src/pv/display.c:170
+msgid "yzafpnum KMGTPEZY"
+msgstr ""
+
+#: src/pv/display.c:600 src/pv/transfer.c:743
+msgid "buffer allocation failed"
+msgstr "l'allocation de mémoire tampon a échoué"
+
+#: src/pv/display.c:662
+msgid "b"
+msgstr ""
+
+#: src/pv/display.c:666 src/pv/transfer.c:468
+msgid "B"
+msgstr "O"
+
+#: src/pv/display.c:717 src/pv/display.c:728
+msgid "b/s"
+msgstr ""
+
+#: src/pv/display.c:720 src/pv/display.c:732
+msgid "/s"
+msgstr "/s"
+
+#: src/pv/display.c:720 src/pv/display.c:732
+msgid "B/s"
+msgstr "O/s"
+
+#: src/pv/display.c:768 src/pv/display.c:772 src/pv/display.c:831
+msgid "ETA"
+msgstr "ETA"
+
+#: src/pv/file.c:119
+msgid "failed to seek to start of output"
+msgstr "ne peut pas passer au début de la sortie"
+
+#: src/pv/file.c:210
+msgid "failed to close file"
+msgstr "la fermeture du fichier a échoué"
+
+#: src/pv/file.c:232
+msgid "failed to read file"
+msgstr "la lecture du fichier a échoué"
+
+#: src/pv/file.c:246
+msgid "failed to stat output file"
+msgstr "échec à statuer sur le fichier de sortie"
+
+#: src/pv/file.c:268
+msgid "input file is output file"
+msgstr "fichiers d'entré et de sortie sont les mêmes"
+
+#: src/pv/loop.c:506 src/pv/loop.c:558 src/pv/loop.c:602 src/pv/watchpid.c:73
+#: src/pv/watchpid.c:83 src/pv/watchpid.c:94 src/pv/watchpid.c:102
+#: src/pv/watchpid.c:139 src/pv/watchpid.c:150 src/pv/watchpid.c:158
+#: src/pv/watchpid.c:169 src/pv/watchpid.c:253 src/pv/watchpid.c:261
+#: src/pv/watchpid.c:292 src/pv/watchpid.c:312
+msgid "pid"
+msgstr ""
+
+#: src/pv/state.c:30
+msgid "history structure allocation failed"
+msgstr ""
+
+#: src/pv/state.c:59
+msgid "none"
+msgstr ""
+
+#: src/pv/transfer.c:366
+msgid "read failed"
+msgstr "la lecture a échoué"
+
+#: src/pv/transfer.c:381
+msgid "warning: read errors detected"
+msgstr "avertissement: erreurs de lecture détectées"
+
+#: src/pv/transfer.c:393
+msgid "file is not seekable"
+msgstr "ne peut pas se déplacer dans le fichier"
+
+#: src/pv/transfer.c:452
+msgid "failed to seek past error"
+msgstr "n'a pas réussi à dépasser l'erreur"
+
+#: src/pv/transfer.c:468
+msgid "skipped past read error"
+msgstr "erreur de lecture dépassée"
+
+#: src/pv/transfer.c:624
+msgid "write failed"
+msgstr "l'écriture a échoué"
+
+#: src/pv/transfer.c:840
+msgid "select call failed"
+msgstr "appel de sélection a échoué"
+
+#: src/pv/watchpid.c:83 src/pv/watchpid.c:95 src/pv/watchpid.c:104
+#: src/pv/watchpid.c:150 src/pv/watchpid.c:159 src/pv/watchpid.c:171
+msgid "fd"
+msgstr ""
+
+#: src/pv/watchpid.c:104 src/pv/watchpid.c:171
+msgid "not a regular file or block device"
+msgstr "pas un fichier ordinaire ou un périphérique de bloc"
+
#~ msgid ""
#~ "Debugging is enabled; export the DEBUG environment variable to define "
#~ "the\n"
diff --git a/src/nls/pl.po b/po/pl.po
similarity index 85%
rename from src/nls/pl.po
rename to po/pl.po
index 716a191..4f713bf 100644
--- a/src/nls/pl.po
+++ b/po/pl.po
@@ -5,176 +5,16 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-06 20:51+0100\n"
+"Report-Msgid-Bugs-To: https://codeberg.org/a-j-wood/pv/issues\n"
+"POT-Creation-Date: 2023-08-28 09:37+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
-"Language: \n"
+"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/pv/cursor.c:85
-msgid "failed to get terminal name"
-msgstr ""
-
-# "Przewidywany czas ukończenia" for ETA is too long
-#: src/pv/cursor.c:117
-msgid "failed to open lock file"
-msgstr ""
-
-#: src/pv/cursor.c:150
-msgid "lock attempt failed"
-msgstr ""
-
-#: src/pv/cursor.c:391
-msgid "failed to open terminal"
-msgstr "nie udało się otworzyć terminala"
-
-#: src/pv/file.c:119
-msgid "failed to seek to start of output"
-msgstr ""
-
-# "Przewidywany czas ukończenia" for ETA is too long
-#: src/pv/file.c:210
-msgid "failed to close file"
-msgstr "nie udało się zamknąć pliku"
-
-#: src/pv/file.c:232
-msgid "failed to read file"
-msgstr "nie udało się odczytać pliku"
-
-#: src/pv/file.c:239 src/main/options.c:284
-msgid "failed to stat file"
-msgstr "nie udało się wykonać operacji stat na pliku"
-
-#: src/pv/file.c:246
-msgid "failed to stat output file"
-msgstr "nie udało się wykonać operacji stat na pliku wyjściowym"
-
-#: src/pv/file.c:268
-msgid "input file is output file"
-msgstr "plik wejściowy jest zarazem plikiem wyjściowym"
-
-#: src/pv/transfer.c:366
-msgid "read failed"
-msgstr "błąd odczytu"
-
-#: src/pv/transfer.c:381
-msgid "warning: read errors detected"
-msgstr ""
-
-#: src/pv/transfer.c:393
-msgid "file is not seekable"
-msgstr ""
-
-#: src/pv/transfer.c:452
-msgid "failed to seek past error"
-msgstr ""
-
-#: src/pv/transfer.c:468
-msgid "skipped past read error"
-msgstr ""
-
-#: src/pv/transfer.c:468 src/pv/display.c:666
-msgid "B"
-msgstr "B"
-
-#: src/pv/transfer.c:624
-msgid "write failed"
-msgstr "błąd zapisu"
-
-#: src/pv/transfer.c:743 src/pv/display.c:600
-msgid "buffer allocation failed"
-msgstr "nie udało się zaalokować bufora"
-
-#.
-#. * Any other error is a problem and we must report back.
-#.
-#: src/pv/transfer.c:840
-msgid "select call failed"
-msgstr "nie udało się wywołać funkcji select"
-
-#: src/pv/watchpid.c:73 src/pv/watchpid.c:83 src/pv/watchpid.c:94
-#: src/pv/watchpid.c:102 src/pv/watchpid.c:139 src/pv/watchpid.c:150
-#: src/pv/watchpid.c:158 src/pv/watchpid.c:169 src/pv/watchpid.c:253
-#: src/pv/watchpid.c:261 src/pv/watchpid.c:292 src/pv/watchpid.c:312
-#: src/pv/loop.c:506 src/pv/loop.c:558 src/pv/loop.c:602
-msgid "pid"
-msgstr ""
-
-#: src/pv/watchpid.c:83 src/pv/watchpid.c:95 src/pv/watchpid.c:104
-#: src/pv/watchpid.c:150 src/pv/watchpid.c:159 src/pv/watchpid.c:171
-msgid "fd"
-msgstr ""
-
-#: src/pv/watchpid.c:104 src/pv/watchpid.c:171
-msgid "not a regular file or block device"
-msgstr ""
-
-#: src/pv/state.c:30
-msgid "history structure allocation failed"
-msgstr ""
-
-#: src/pv/state.c:59
-msgid "none"
-msgstr ""
-
-#: src/pv/display.c:165
-msgid "yzafpnum kMGTPEZY"
-msgstr ""
-
-#: src/pv/display.c:170
-msgid "yzafpnum KMGTPEZY"
-msgstr ""
-
-#: src/pv/display.c:662
-msgid "b"
-msgstr ""
-
-#: src/pv/display.c:717 src/pv/display.c:728
-msgid "b/s"
-msgstr ""
-
-#: src/pv/display.c:720 src/pv/display.c:732
-msgid "/s"
-msgstr "/s"
-
-#: src/pv/display.c:720 src/pv/display.c:732
-msgid "B/s"
-msgstr "B/s"
-
-#: src/pv/display.c:768 src/pv/display.c:772 src/pv/display.c:831
-msgid "ETA"
-msgstr "ETA"
-
-#. GNU standard license line and free software notice
-#: src/main/version.c:28
-msgid "License: Artistic v2.0 "
-msgstr ""
-
-#: src/main/version.c:29
-msgid "This is free software: you are free to change and redistribute it."
-msgstr ""
-
-#: src/main/version.c:30
-msgid "There is NO WARRANTY, to the extent permitted by law."
-msgstr ""
-
-#. Project web site link
-#: src/main/version.c:32
-msgid "Project web site"
-msgstr ""
-
-#: src/main/remote.c:215
-msgid "message not received"
-msgstr ""
-
-#: src/main/remote.c:318
-msgid "IPC not supported on this system"
-msgstr ""
-
#: src/main/help.c:283
msgid "show progress bar"
msgstr "pokaż pasek postępu"
@@ -375,23 +215,11 @@ msgstr "wyświetl informacje o wersji i wyjdź"
msgid "write debug logs to FILE"
msgstr ""
-#. @-formatconst@
-#.
-#. * splint note: unavoidable use of %s in translated string. Should
-#. * be hard to exploit - the message catalogue would have to be
-#. * replaced or forced to load from another location.
-#.
#: src/main/help.c:427
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Sposób użycia: %s [OPCJA] [PLIK]..."
-#. @-mustfreefresh@
-#.
-#. * splint note: the gettext calls made by _() cause memory leak
-#. * warnings, but in this case it's unavoidable, and mitigated by the
-#. * fact we only translate each string once.
-#.
#: src/main/help.c:438
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
@@ -404,69 +232,224 @@ msgstr ""
msgid "Please report any bugs to %s."
msgstr "Proszę przesyłać zgłoszenia błędów do %s."
-#: src/main/main.c:75
+#: src/main/main.c:82
msgid "state allocation failed"
msgstr ""
-#: src/main/main.c:243
+#: src/main/main.c:320
msgid "failed to read terminal attributes"
msgstr ""
-#: src/main/options.c:111
+#: src/main/options.c:205
msgid "option structure allocation failed"
msgstr "nie udało się zaalokować struktur opcji"
-#: src/main/options.c:124
+#: src/main/options.c:224
msgid "option structure argv allocation failed"
msgstr "nie udało się zaalokować struktur opcji argv"
-#: src/main/options.c:163
+#: src/main/options.c:281
msgid "integer argument expected"
msgstr ""
-#: src/main/options.c:171
+#: src/main/options.c:292
msgid "numeric argument expected"
msgstr ""
-#: src/main/options.c:180
+#: src/main/options.c:303
msgid "process ID or pid:fd pair expected"
msgstr ""
-#: src/main/options.c:185
+#: src/main/options.c:310
msgid "invalid process ID"
msgstr ""
-#: src/main/options.c:358
+#: src/main/options.c:411 src/pv/file.c:239
+msgid "failed to stat file"
+msgstr "nie udało się wykonać operacji stat na pliku"
+
+#: src/main/options.c:503
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Spróbuj `%s --help' by uzyskać więcej informacji"
-#: src/main/options.c:360
+#: src/main/options.c:505
#, c-format
msgid "Try `%s -h' for more information."
msgstr "Spróbuj `%s -h' by uzyskać więcej informacji"
-#: src/main/options.c:374
+#: src/main/options.c:536
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
msgstr ""
-#: src/main/options.c:381
+#: src/main/options.c:545
msgid "cannot use cursor positioning when watching file descriptors"
msgstr ""
-#: src/main/options.c:388
+#: src/main/options.c:554
msgid "cannot use remote control when watching file descriptors"
msgstr ""
-#: src/main/options.c:395
+#: src/main/options.c:563
msgid "cannot transfer files when watching file descriptors"
msgstr ""
-#: src/main/options.c:402
+#: src/main/options.c:578
msgid "not available on systems without /proc/self/fdinfo"
msgstr ""
+#: src/main/remote.c:238
+msgid "message not received"
+msgstr ""
+
+#: src/main/remote.c:347
+msgid "IPC not supported on this system"
+msgstr ""
+
+#: src/main/version.c:28
+msgid "License: Artistic v2.0 "
+msgstr ""
+
+#: src/main/version.c:29
+msgid "This is free software: you are free to change and redistribute it."
+msgstr ""
+
+#: src/main/version.c:30
+msgid "There is NO WARRANTY, to the extent permitted by law."
+msgstr ""
+
+#: src/main/version.c:32
+msgid "Project web site"
+msgstr ""
+
+#: src/pv/cursor.c:85
+msgid "failed to get terminal name"
+msgstr ""
+
+# "Przewidywany czas ukończenia" for ETA is too long
+#: src/pv/cursor.c:117
+msgid "failed to open lock file"
+msgstr ""
+
+#: src/pv/cursor.c:150
+msgid "lock attempt failed"
+msgstr ""
+
+#: src/pv/cursor.c:391
+msgid "failed to open terminal"
+msgstr "nie udało się otworzyć terminala"
+
+#: src/pv/display.c:165
+msgid "yzafpnum kMGTPEZY"
+msgstr ""
+
+#: src/pv/display.c:170
+msgid "yzafpnum KMGTPEZY"
+msgstr ""
+
+#: src/pv/display.c:600 src/pv/transfer.c:743
+msgid "buffer allocation failed"
+msgstr "nie udało się zaalokować bufora"
+
+#: src/pv/display.c:662
+msgid "b"
+msgstr ""
+
+#: src/pv/display.c:666 src/pv/transfer.c:468
+msgid "B"
+msgstr "B"
+
+#: src/pv/display.c:717 src/pv/display.c:728
+msgid "b/s"
+msgstr ""
+
+#: src/pv/display.c:720 src/pv/display.c:732
+msgid "/s"
+msgstr "/s"
+
+#: src/pv/display.c:720 src/pv/display.c:732
+msgid "B/s"
+msgstr "B/s"
+
+#: src/pv/display.c:768 src/pv/display.c:772 src/pv/display.c:831
+msgid "ETA"
+msgstr "ETA"
+
+#: src/pv/file.c:119
+msgid "failed to seek to start of output"
+msgstr ""
+
+# "Przewidywany czas ukończenia" for ETA is too long
+#: src/pv/file.c:210
+msgid "failed to close file"
+msgstr "nie udało się zamknąć pliku"
+
+#: src/pv/file.c:232
+msgid "failed to read file"
+msgstr "nie udało się odczytać pliku"
+
+#: src/pv/file.c:246
+msgid "failed to stat output file"
+msgstr "nie udało się wykonać operacji stat na pliku wyjściowym"
+
+#: src/pv/file.c:268
+msgid "input file is output file"
+msgstr "plik wejściowy jest zarazem plikiem wyjściowym"
+
+#: src/pv/loop.c:506 src/pv/loop.c:558 src/pv/loop.c:602 src/pv/watchpid.c:73
+#: src/pv/watchpid.c:83 src/pv/watchpid.c:94 src/pv/watchpid.c:102
+#: src/pv/watchpid.c:139 src/pv/watchpid.c:150 src/pv/watchpid.c:158
+#: src/pv/watchpid.c:169 src/pv/watchpid.c:253 src/pv/watchpid.c:261
+#: src/pv/watchpid.c:292 src/pv/watchpid.c:312
+msgid "pid"
+msgstr ""
+
+#: src/pv/state.c:30
+msgid "history structure allocation failed"
+msgstr ""
+
+#: src/pv/state.c:59
+msgid "none"
+msgstr ""
+
+#: src/pv/transfer.c:366
+msgid "read failed"
+msgstr "błąd odczytu"
+
+#: src/pv/transfer.c:381
+msgid "warning: read errors detected"
+msgstr ""
+
+#: src/pv/transfer.c:393
+msgid "file is not seekable"
+msgstr ""
+
+#: src/pv/transfer.c:452
+msgid "failed to seek past error"
+msgstr ""
+
+#: src/pv/transfer.c:468
+msgid "skipped past read error"
+msgstr ""
+
+#: src/pv/transfer.c:624
+msgid "write failed"
+msgstr "błąd zapisu"
+
+#: src/pv/transfer.c:840
+msgid "select call failed"
+msgstr "nie udało się wywołać funkcji select"
+
+#: src/pv/watchpid.c:83 src/pv/watchpid.c:95 src/pv/watchpid.c:104
+#: src/pv/watchpid.c:150 src/pv/watchpid.c:159 src/pv/watchpid.c:171
+msgid "fd"
+msgstr ""
+
+#: src/pv/watchpid.c:104 src/pv/watchpid.c:171
+msgid "not a regular file or block device"
+msgstr ""
+
#~ msgid "Web site: %s"
#~ msgstr "Strona WWW: %s"
diff --git a/src/nls/pt.po b/po/pt.po
similarity index 88%
rename from src/nls/pt.po
rename to po/pt.po
index 0497c58..b89ecb6 100644
--- a/src/nls/pt.po
+++ b/po/pt.po
@@ -5,174 +5,16 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-06 20:51+0100\n"
+"Report-Msgid-Bugs-To: https://codeberg.org/a-j-wood/pv/issues\n"
+"POT-Creation-Date: 2023-08-28 09:37+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
-"Language: \n"
+"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/pv/cursor.c:85
-msgid "failed to get terminal name"
-msgstr "erro ao ler o nome do terminal"
-
-#: src/pv/cursor.c:117
-msgid "failed to open lock file"
-msgstr "erro ao abrir arquivo de bloqueio"
-
-#: src/pv/cursor.c:150
-msgid "lock attempt failed"
-msgstr "tentativa de bloqueio falhou"
-
-#: src/pv/cursor.c:391
-msgid "failed to open terminal"
-msgstr "erro abrindo o terminal"
-
-#: src/pv/file.c:119
-msgid "failed to seek to start of output"
-msgstr "não pode mover para o início da produção"
-
-#: src/pv/file.c:210
-msgid "failed to close file"
-msgstr "erro fechando o arquivo"
-
-#: src/pv/file.c:232
-msgid "failed to read file"
-msgstr "erro lendo o arquivo"
-
-#: src/pv/file.c:239 src/main/options.c:284
-msgid "failed to stat file"
-msgstr "erro obtendo informações do arquivo"
-
-#: src/pv/file.c:246
-msgid "failed to stat output file"
-msgstr "erro obtendo informações do arquivo de saída"
-
-#: src/pv/file.c:268
-msgid "input file is output file"
-msgstr "os arquivos de entrada e saída são o mesmo"
-
-#: src/pv/transfer.c:366
-msgid "read failed"
-msgstr "erro de leitura"
-
-#: src/pv/transfer.c:381
-msgid "warning: read errors detected"
-msgstr "aviso: erros de leitura detectados"
-
-#: src/pv/transfer.c:393
-msgid "file is not seekable"
-msgstr "não pode mover dentro do arquivo"
-
-#: src/pv/transfer.c:452
-msgid "failed to seek past error"
-msgstr "não pode ir além do erro"
-
-#: src/pv/transfer.c:468
-msgid "skipped past read error"
-msgstr "ignorado erro de leitura"
-
-#: src/pv/transfer.c:468 src/pv/display.c:666
-msgid "B"
-msgstr ""
-
-#: src/pv/transfer.c:624
-msgid "write failed"
-msgstr "erro de gravação"
-
-#: src/pv/transfer.c:743 src/pv/display.c:600
-msgid "buffer allocation failed"
-msgstr "erro alocando o buffer"
-
-#.
-#. * Any other error is a problem and we must report back.
-#.
-#: src/pv/transfer.c:840
-msgid "select call failed"
-msgstr "erro na chamada da função select"
-
-#: src/pv/watchpid.c:73 src/pv/watchpid.c:83 src/pv/watchpid.c:94
-#: src/pv/watchpid.c:102 src/pv/watchpid.c:139 src/pv/watchpid.c:150
-#: src/pv/watchpid.c:158 src/pv/watchpid.c:169 src/pv/watchpid.c:253
-#: src/pv/watchpid.c:261 src/pv/watchpid.c:292 src/pv/watchpid.c:312
-#: src/pv/loop.c:506 src/pv/loop.c:558 src/pv/loop.c:602
-msgid "pid"
-msgstr ""
-
-#: src/pv/watchpid.c:83 src/pv/watchpid.c:95 src/pv/watchpid.c:104
-#: src/pv/watchpid.c:150 src/pv/watchpid.c:159 src/pv/watchpid.c:171
-msgid "fd"
-msgstr ""
-
-#: src/pv/watchpid.c:104 src/pv/watchpid.c:171
-msgid "not a regular file or block device"
-msgstr "não é um arquivo regular ou dispositivo de bloqueio"
-
-#: src/pv/state.c:30
-msgid "history structure allocation failed"
-msgstr ""
-
-#: src/pv/state.c:59
-msgid "none"
-msgstr ""
-
-#: src/pv/display.c:165
-msgid "yzafpnum kMGTPEZY"
-msgstr ""
-
-#: src/pv/display.c:170
-msgid "yzafpnum KMGTPEZY"
-msgstr ""
-
-#: src/pv/display.c:662
-msgid "b"
-msgstr ""
-
-#: src/pv/display.c:717 src/pv/display.c:728
-msgid "b/s"
-msgstr ""
-
-#: src/pv/display.c:720 src/pv/display.c:732
-msgid "/s"
-msgstr ""
-
-#: src/pv/display.c:720 src/pv/display.c:732
-msgid "B/s"
-msgstr "B/s"
-
-#: src/pv/display.c:768 src/pv/display.c:772 src/pv/display.c:831
-msgid "ETA"
-msgstr "ETA"
-
-#. GNU standard license line and free software notice
-#: src/main/version.c:28
-msgid "License: Artistic v2.0 "
-msgstr ""
-
-#: src/main/version.c:29
-msgid "This is free software: you are free to change and redistribute it."
-msgstr ""
-
-#: src/main/version.c:30
-msgid "There is NO WARRANTY, to the extent permitted by law."
-msgstr ""
-
-#. Project web site link
-#: src/main/version.c:32
-msgid "Project web site"
-msgstr ""
-
-#: src/main/remote.c:215
-msgid "message not received"
-msgstr "mensagem não recebida"
-
-#: src/main/remote.c:318
-msgid "IPC not supported on this system"
-msgstr "IPC não suportado neste sistema"
-
#: src/main/help.c:283
msgid "show progress bar"
msgstr "exibe barra de progressão"
@@ -373,23 +215,11 @@ msgstr "exibe a versão e termina"
msgid "write debug logs to FILE"
msgstr ""
-#. @-formatconst@
-#.
-#. * splint note: unavoidable use of %s in translated string. Should
-#. * be hard to exploit - the message catalogue would have to be
-#. * replaced or forced to load from another location.
-#.
#: src/main/help.c:427
#, c-format
msgid "Usage: %s [OPTION] [FILE]..."
msgstr "Uso: %s [OPÇÕES] [ARQUIVOS]..."
-#. @-mustfreefresh@
-#.
-#. * splint note: the gettext calls made by _() cause memory leak
-#. * warnings, but in this case it's unavoidable, and mitigated by the
-#. * fact we only translate each string once.
-#.
#: src/main/help.c:438
msgid ""
"Concatenate FILE(s), or standard input, to standard output, with monitoring."
@@ -402,49 +232,53 @@ msgstr ""
msgid "Please report any bugs to %s."
msgstr "Por favor, reporte quaisquer defeitos para %s."
-#: src/main/main.c:75
+#: src/main/main.c:82
msgid "state allocation failed"
msgstr "alocação de memória de status falhou"
-#: src/main/main.c:243
+#: src/main/main.c:320
msgid "failed to read terminal attributes"
msgstr ""
-#: src/main/options.c:111
+#: src/main/options.c:205
msgid "option structure allocation failed"
msgstr "erro na alocação da estrutura de opções"
-#: src/main/options.c:124
+#: src/main/options.c:224
msgid "option structure argv allocation failed"
msgstr "erro na alocação da estrutura de opções argv"
-#: src/main/options.c:163
+#: src/main/options.c:281
msgid "integer argument expected"
msgstr "argumento inteiro esperado"
-#: src/main/options.c:171
+#: src/main/options.c:292
msgid "numeric argument expected"
msgstr "argumento numérico esperado"
-#: src/main/options.c:180
+#: src/main/options.c:303
msgid "process ID or pid:fd pair expected"
msgstr "ID do processo ou par pid:fd esperado"
-#: src/main/options.c:185
+#: src/main/options.c:310
msgid "invalid process ID"
msgstr "ID de processo inválido"
-#: src/main/options.c:358
+#: src/main/options.c:411 src/pv/file.c:239
+msgid "failed to stat file"
+msgstr "erro obtendo informações do arquivo"
+
+#: src/main/options.c:503
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Tente `%s --help' para maiores informações."
-#: src/main/options.c:360
+#: src/main/options.c:505
#, c-format
msgid "Try `%s -h' for more information."
msgstr "Tente `%s -h' para maiores informações."
-#: src/main/options.c:374
+#: src/main/options.c:536
msgid ""
"cannot use line mode or transfer modifier options when watching file "
"descriptors"
@@ -452,24 +286,173 @@ msgstr ""
"não pode usar o modo de linha ou opções de modificador de transferência ao "
"assistir os descritores de arquivo"
-#: src/main/options.c:381
+#: src/main/options.c:545
msgid "cannot use cursor positioning when watching file descriptors"
msgstr ""
"não pode usar o posicionamento do cursor ao observar os descritores de "
"arquivo"
-#: src/main/options.c:388
+#: src/main/options.c:554
msgid "cannot use remote control when watching file descriptors"
msgstr "não pode usar o controle remoto ao assistir os descritores de arquivo"
-#: src/main/options.c:395
+#: src/main/options.c:563
msgid "cannot transfer files when watching file descriptors"
msgstr "não pode transferir arquivos ao assistir descritores de arquivo"
-#: src/main/options.c:402
+#: src/main/options.c:578
msgid "not available on systems without /proc/self/fdinfo"
msgstr "não disponível em sistemas sem /proc/self/fdinfo"
+#: src/main/remote.c:238
+msgid "message not received"
+msgstr "mensagem não recebida"
+
+#: src/main/remote.c:347
+msgid "IPC not supported on this system"
+msgstr "IPC não suportado neste sistema"
+
+#: src/main/version.c:28
+msgid "License: Artistic v2.0 "
+msgstr ""
+
+#: src/main/version.c:29
+msgid "This is free software: you are free to change and redistribute it."
+msgstr ""
+
+#: src/main/version.c:30
+msgid "There is NO WARRANTY, to the extent permitted by law."
+msgstr ""
+
+#: src/main/version.c:32
+msgid "Project web site"
+msgstr ""
+
+#: src/pv/cursor.c:85
+msgid "failed to get terminal name"
+msgstr "erro ao ler o nome do terminal"
+
+#: src/pv/cursor.c:117
+msgid "failed to open lock file"
+msgstr "erro ao abrir arquivo de bloqueio"
+
+#: src/pv/cursor.c:150
+msgid "lock attempt failed"
+msgstr "tentativa de bloqueio falhou"
+
+#: src/pv/cursor.c:391
+msgid "failed to open terminal"
+msgstr "erro abrindo o terminal"
+
+#: src/pv/display.c:165
+msgid "yzafpnum kMGTPEZY"
+msgstr ""
+
+#: src/pv/display.c:170
+msgid "yzafpnum KMGTPEZY"
+msgstr ""
+
+#: src/pv/display.c:600 src/pv/transfer.c:743
+msgid "buffer allocation failed"
+msgstr "erro alocando o buffer"
+
+#: src/pv/display.c:662
+msgid "b"
+msgstr ""
+
+#: src/pv/display.c:666 src/pv/transfer.c:468
+msgid "B"
+msgstr ""
+
+#: src/pv/display.c:717 src/pv/display.c:728
+msgid "b/s"
+msgstr ""
+
+#: src/pv/display.c:720 src/pv/display.c:732
+msgid "/s"
+msgstr ""
+
+#: src/pv/display.c:720 src/pv/display.c:732
+msgid "B/s"
+msgstr "B/s"
+
+#: src/pv/display.c:768 src/pv/display.c:772 src/pv/display.c:831
+msgid "ETA"
+msgstr "ETA"
+
+#: src/pv/file.c:119
+msgid "failed to seek to start of output"
+msgstr "não pode mover para o início da produção"
+
+#: src/pv/file.c:210
+msgid "failed to close file"
+msgstr "erro fechando o arquivo"
+
+#: src/pv/file.c:232
+msgid "failed to read file"
+msgstr "erro lendo o arquivo"
+
+#: src/pv/file.c:246
+msgid "failed to stat output file"
+msgstr "erro obtendo informações do arquivo de saída"
+
+#: src/pv/file.c:268
+msgid "input file is output file"
+msgstr "os arquivos de entrada e saída são o mesmo"
+
+#: src/pv/loop.c:506 src/pv/loop.c:558 src/pv/loop.c:602 src/pv/watchpid.c:73
+#: src/pv/watchpid.c:83 src/pv/watchpid.c:94 src/pv/watchpid.c:102
+#: src/pv/watchpid.c:139 src/pv/watchpid.c:150 src/pv/watchpid.c:158
+#: src/pv/watchpid.c:169 src/pv/watchpid.c:253 src/pv/watchpid.c:261
+#: src/pv/watchpid.c:292 src/pv/watchpid.c:312
+msgid "pid"
+msgstr ""
+
+#: src/pv/state.c:30
+msgid "history structure allocation failed"
+msgstr ""
+
+#: src/pv/state.c:59
+msgid "none"
+msgstr ""
+
+#: src/pv/transfer.c:366
+msgid "read failed"
+msgstr "erro de leitura"
+
+#: src/pv/transfer.c:381
+msgid "warning: read errors detected"
+msgstr "aviso: erros de leitura detectados"
+
+#: src/pv/transfer.c:393
+msgid "file is not seekable"
+msgstr "não pode mover dentro do arquivo"
+
+#: src/pv/transfer.c:452
+msgid "failed to seek past error"
+msgstr "não pode ir além do erro"
+
+#: src/pv/transfer.c:468
+msgid "skipped past read error"
+msgstr "ignorado erro de leitura"
+
+#: src/pv/transfer.c:624
+msgid "write failed"
+msgstr "erro de gravação"
+
+#: src/pv/transfer.c:840
+msgid "select call failed"
+msgstr "erro na chamada da função select"
+
+#: src/pv/watchpid.c:83 src/pv/watchpid.c:95 src/pv/watchpid.c:104
+#: src/pv/watchpid.c:150 src/pv/watchpid.c:159 src/pv/watchpid.c:171
+msgid "fd"
+msgstr ""
+
+#: src/pv/watchpid.c:104 src/pv/watchpid.c:171
+msgid "not a regular file or block device"
+msgstr "não é um arquivo regular ou dispositivo de bloqueio"
+
#~ msgid ""
#~ "Debugging is enabled; export the DEBUG environment variable to define "
#~ "the\n"
diff --git a/src/include/config-aux.h b/src/include/config-aux.h
index 629e077..1971c42 100644
--- a/src/include/config-aux.h
+++ b/src/include/config-aux.h
@@ -8,8 +8,15 @@
* Distributed under the Artistic License v2.0; see `doc/COPYING'.
*/
-#ifdef ENABLE_NLS
-# include "library/gettext.h"
+#if ENABLE_NLS
+# ifdef HAVE_LIBINTL_H
+# include
+# endif
+# ifdef HAVE_LOCALE_H
+# include
+# endif
+# define _(String) gettext (String)
+# define N_(String) (String)
#else
# define _(String) (String)
# define N_(String) (String)
diff --git a/autoconf/header.in b/src/include/config.h.in
similarity index 88%
rename from autoconf/header.in
rename to src/include/config.h.in
index cdce1ec..37dd4d7 100644
--- a/autoconf/header.in
+++ b/src/include/config.h.in
@@ -1,53 +1,51 @@
-/* autoconf/header.in. Generated from autoconf/configure.in by autoheader. */
-
-/* Bug reporting email address */
-#undef BUG_REPORTS_TO
-
-/* Copyright holder */
-#undef COPYRIGHT_HOLDER
-
-/* Copyright year */
-#undef COPYRIGHT_YEAR
+/* src/include/config.h.in. Generated from configure.ac by autoheader. */
/* Debugging support enabled */
#undef ENABLE_DEBUGGING
-/* Enable native language support */
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
#undef ENABLE_NLS
/* Define to 1 if you have the `basename' function. */
#undef HAVE_BASENAME
+/* Define to 1 if you have the Mac OS X function
+ CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES
+
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
+ the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+ */
+#undef HAVE_DCGETTEXT
+
/* Define to 1 if you have the `fdatasync' function. */
#undef HAVE_FDATASYNC
/* Define to 1 if you have the `fpathconf' function. */
#undef HAVE_FPATHCONF
-/* Define to 1 if you have the `getopt' function. */
-#undef HAVE_GETOPT
-
/* Define to 1 if you have the header file. */
#undef HAVE_GETOPT_H
/* Define to 1 if you have the `getopt_long' function. */
#undef HAVE_GETOPT_LONG
-/* The gettext function is available */
+/* Define if the GNU gettext() function is already present or preinstalled. */
#undef HAVE_GETTEXT
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
/* Define to 1 if you have the header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the header file. */
#undef HAVE_LIBGEN_H
-/* Define to 1 if you have the `i' library (-li). */
-#undef HAVE_LIBI
-
-/* Define to 1 if you have the `intl' library (-lintl). */
-#undef HAVE_LIBINTL
-
/* Define to 1 if you have the header file. */
#undef HAVE_LIBINTL_H
@@ -126,7 +124,7 @@
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
-/* Package name */
+/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
@@ -147,12 +145,6 @@
/* Define to the version of this package. */
#undef PACKAGE_VERSION
-/* Name of this program */
-#undef PROGRAM_NAME
-
-/* Project homepage */
-#undef PROJECT_HOMEPAGE
-
/* Define to 1 if all of the C90 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. */
@@ -246,7 +238,7 @@
#endif
-/* Version of this program */
+/* Version number of package */
#undef VERSION
/* Number of bits in a file offset, on hosts where this is settable. */
diff --git a/src/include/library/getopt.h b/src/include/library/getopt.h
deleted file mode 100644
index e85f863..0000000
--- a/src/include/library/getopt.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Replacement getopt function's header file. Include this AFTER config.h.
- *
- * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood
- *
- * Distributed under the Artistic License v2.0; see `doc/COPYING'.
- */
-
-#ifndef _LIBRARY_GETOPT_H
-#define _LIBRARY_GETOPT_H 1
-
-#ifdef HAVE_GETOPT_H
-#include
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef HAVE_GETOPT
-
-int minigetopt(int, char **, char *);
-extern char *minioptarg;
-extern int minioptind, miniopterr, minioptopt;
-
-#define getopt minigetopt /* Flawfinder: ignore */
-#define optarg minioptarg
-#define optind minioptind
-#define opterr miniopterr
-#define optopt minioptopt
-
-#endif /* !HAVE_GETOPT */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _LIBRARY_GETOPT_H */
-
-/* EOF */
diff --git a/src/include/library/gettext.h b/src/include/library/gettext.h
deleted file mode 100644
index 06e51af..0000000
--- a/src/include/library/gettext.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Replacement gettext library header file. Include this within config.h,
- * like this:
- *
- * #ifdef ENABLE_NLS
- * # include "library/gettext.h"
- * #else
- * # define _(String) (String)
- * # define N_(String) (String)
- * #endif
- *
- * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood
- *
- * Distributed under the Artistic License v2.0; see `doc/COPYING'.
- */
-
-#ifndef _LIBRARY_GETTEXT_H
-#define _LIBRARY_GETTEXT_H 1
-
-#ifdef HAVE_GETTEXT
-# ifdef HAVE_LIBINTL_H
-# include
-# endif
-# ifdef HAVE_LOCALE_H
-# include
-# endif
-# define _(String) gettext (String)
-# define N_(String) (String)
-#else
-# define _(String) minigettext (String)
-# define N_(String) (String)
-# ifdef HAVE_LOCALE_H
-# include
-# else
-# define setlocale minisetlocale
-# ifndef LC_ALL
-# define LC_ALL ""
-# endif
-# endif
-# define bindtextdomain minibindtextdomain
-# define textdomain minitextdomain
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-char *minisetlocale(const char *, const char *);
-char *minibindtextdomain(const char *, const char *);
-char *minitextdomain(const char *);
-char *minigettext(const char *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _LIBRARY_GETTEXT_H */
-
-/* EOF */
diff --git a/src/include/pv.h b/src/include/pv.h
index 5f175a0..ed474b0 100644
--- a/src/include/pv.h
+++ b/src/include/pv.h
@@ -9,7 +9,12 @@
#ifndef _PV_H
#define _PV_H 1
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include
+#include
#ifdef __cplusplus
extern "C" {
diff --git a/src/library/getopt.c b/src/library/getopt.c
deleted file mode 100644
index d090c80..0000000
--- a/src/library/getopt.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Small reimplementation of getopt().
- *
- * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood
- *
- * Distributed under the Artistic License v2.0; see `doc/COPYING'.
- */
-
-#include "config.h"
-#include
-#include
-#include
-
-#ifndef HAVE_GETOPT
-
-char *minioptarg = NULL;
-int minioptind = 0;
-int miniopterr = 1;
-int minioptopt = 0;
-
-
-/*
- * Minimalist getopt() clone, which handles short options only and doesn't
- * permute argv[].
- */
-int minigetopt(int argc, char **argv, char *optstring)
-{
- static int nextchar = 0;
- int optchar;
- int i;
-
- if ((0 == minioptind) && (argc > 0))
- minioptind++;
-
- if ((nextchar > 0) && (0 == argv[minioptind][nextchar])) {
- minioptind++;
- nextchar = 0;
- }
-
- if (minioptind >= argc)
- return -1;
-
- /*
- * End of options if arg doesn't start with "-"
- */
- if (argv[minioptind][0] != '-')
- return -1;
-
- /*
- * End of options if arg is just "-"
- */
- if (0 == argv[minioptind][1])
- return -1;
-
- /*
- * End of options if arg is "--", but don't include the "--" in the
- * non-option arguments
- */
- if (('-' == argv[minioptind][1]) && (0 == argv[minioptind][2])) {
- minioptind++;
- return -1;
- }
-
- if (0 == nextchar)
- nextchar = 1;
-
- optchar = argv[minioptind][nextchar++];
-
- for (i = 0; optstring[i] != 0 && optstring[i] != optchar; i++) {
- }
-
- if (0 == optstring[i]) {
- minioptopt = optchar;
- if (miniopterr)
- fprintf(stderr, "%s: invalid option -- %c\n", argv[0], optchar);
- return '?';
- }
-
- if (optstring[i + 1] != ':') {
- minioptarg = NULL;
- return optchar;
- }
-
- /*
- * At this point we've got an option that takes an argument.
- */
-
- /*
- * Next character isn't 0, so the argument is within this array
- * element (i.e. "-dFOO").
- */
- if (argv[minioptind][nextchar] != 0) {
- minioptarg = &(argv[minioptind][nextchar]);
- nextchar = 0;
- minioptind++;
- return optchar;
- }
-
- /*
- * Argument is in the next array element (i.e. "-d FOO").
- */
- nextchar = 0;
- minioptind++;
- if (minioptind >= argc) {
- fprintf(stderr, "%s: option `-%c' requires an argument\n", argv[0], optchar);
- return ':';
- }
- minioptarg = argv[minioptind++];
-
- return optchar;
-}
-
-#endif /* HAVE_GETOPT */
-
-/* EOF */
diff --git a/src/library/gettext.c b/src/library/gettext.c
deleted file mode 100644
index 5cc610e..0000000
--- a/src/library/gettext.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Very minimal (and stupid) implementation of gettext, with a fixed lookup
- * table.
- *
- * This library ONLY handles gettext(), and that only for the basic form (it
- * translates strings to other strings with no other modification, so %2$d
- * style constructs are not dealt with). The setlocale(), bindtextdomain(),
- * and textdomain() functions are ignored.
- *
- * To use this library, create a function that, given a language string,
- * returns a struct msg_table_s[] of msgid and msgstr pairs, with the end
- * of the table being marked by a NULL msgid. The po2table.sh script will do
- * this.
- *
- * Copyright 2002-2008, 2010, 2012-2015, 2017, 2021, 2023 Andrew Wood
- *
- * Distributed under the Artistic License v2.0; see `doc/COPYING'.
- */
-
-#include "config.h"
-#include
-#include
-#include
-
-#ifndef HAVE_GETTEXT
-
-struct msgtable_s {
- char *msgid;
- char *msgstr;
-};
-
-#if ENABLE_NLS
-struct msgtable_s *minigettext__gettable(char *);
-#else /* ENABLE_NLS */
-struct msgtable_s *minigettext__gettable(char *a)
-{
- return NULL;
-}
-#endif /* ENABLE_NLS */
-
-char *minisetlocale(const char *a, const char *b)
-{
- return NULL;
-}
-
-
-char *minibindtextdomain(const char *a, const char *b)
-{
- return NULL;
-}
-
-
-char *minitextdomain(const char *a)
-{
- return NULL;
-}
-
-
-char *minigettext(const char *msgid)
-{
- static struct msgtable_s *table = NULL;
- static int tried_lang = 0;
- char *lang;
- int i;
-
- if (NULL == msgid)
- return NULL;
-
- /*
- * flawfinder rationale (below): each getenv() call is checked for
- * NULL, and with each one, only the first 2 characters of the value
- * are ever read by minigettext__gettable().
- */
-
- if (0 == tried_lang) {
- lang = getenv("LANGUAGE"); /* flawfinder: ignore */
- if (NULL != lang)
- table = minigettext__gettable(lang);
-
- if (NULL == table) {
- lang = getenv("LANG"); /* flawfinder: ignore */
- if (NULL != lang)
- table = minigettext__gettable(lang);
- }
-
- if (NULL == table) {
- lang = getenv("LC_ALL"); /* flawfinder: ignore */
- if (NULL != lang)
- table = minigettext__gettable(lang);
- }
-
- if (NULL == table) {
- lang = getenv("LC_MESSAGES"); /* flawfinder: ignore */
- if (NULL != lang)
- table = minigettext__gettable(lang);
- }
-
- tried_lang = 1;
- }
-
- if (NULL == table)
- return (char *) msgid;
-
- for (i = 0; table[i].msgid; i++) {
- if (0 == strcmp(table[i].msgid, msgid)) {
- if (0 == table[i].msgstr)
- return (char *) msgid;
- if (0 == table[i].msgstr[0])
- return (char *) msgid;
- return table[i].msgstr;
- }
- }
-
- return (char *) msgid;
-}
-
-#endif /* HAVE_GETTEXT */
-
-/* EOF */
diff --git a/src/main/help.c b/src/main/help.c
index 29ce32d..1d4ca93 100644
--- a/src/main/help.c
+++ b/src/main/help.c
@@ -424,7 +424,7 @@ void display_help(void)
* be hard to exploit - the message catalogue would have to be
* replaced or forced to load from another location.
*/
- printf(_("Usage: %s [OPTION] [FILE]..."), PROGRAM_NAME);
+ printf(_("Usage: %s [OPTION] [FILE]..."), PACKAGE_NAME);
/*@+formatconst@ */
printf("\n");
@@ -579,7 +579,7 @@ void display_help(void)
* splint note: see earlier "formatconst" note.
* flawfinder: same reason.
*/
- printf(bug_report_note, BUG_REPORTS_TO); /* flawfinder: ignore */
+ printf(bug_report_note, PACKAGE_BUGREPORT); /* flawfinder: ignore */
/*@+formatconst@ */
}
diff --git a/src/main/options.c b/src/main/options.c
index 1665865..81673b0 100644
--- a/src/main/options.c
+++ b/src/main/options.c
@@ -8,9 +8,7 @@
#include "config.h"
#include "options.h"
-#include "library/getopt.h"
#include "pv.h"
-#include "pv-internal.h"
#include
#include
@@ -18,6 +16,9 @@
#include
#include
#include
+#ifdef HAVE_GETOPT_H
+#include
+#endif
void display_help(void);
diff --git a/src/main/version.c b/src/main/version.c
index c6e2bb9..0fe4908 100644
--- a/src/main/version.c
+++ b/src/main/version.c
@@ -21,15 +21,15 @@ void display_version(void)
* fact we only translate each string once.
*/
/* GNU standard first line format: program and version only */
- printf("%s %s\n", PROGRAM_NAME, VERSION);
+ printf("%s %s\n", PACKAGE_NAME, PACKAGE_VERSION);
/* GNU standard second line format - "Copyright" always in English */
- printf("Copyright %s %s\n", COPYRIGHT_YEAR, COPYRIGHT_HOLDER);
+ printf("Copyright %s %s\n", "2023", "Andrew Wood");
/* GNU standard license line and free software notice */
printf("%s\n", _("License: Artistic v2.0 "));
printf("%s\n", _("This is free software: you are free to change and redistribute it."));
printf("%s\n", _("There is NO WARRANTY, to the extent permitted by law."));
/* Project web site link */
- printf("\n%s: <%s>\n", _("Project web site"), PROJECT_HOMEPAGE);
+ printf("\n%s: <%s>\n", _("Project web site"), PACKAGE_URL);
}
/* EOF */
diff --git a/src/nls/pv.pot b/src/nls/pv.pot
deleted file mode 100644
index 3131aa9..0000000
--- a/src/nls/pv.pot
+++ /dev/null
@@ -1,467 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR , YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-06 20:51+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: src/pv/cursor.c:85
-msgid "failed to get terminal name"
-msgstr ""
-
-#: src/pv/cursor.c:117
-msgid "failed to open lock file"
-msgstr ""
-
-#: src/pv/cursor.c:150
-msgid "lock attempt failed"
-msgstr ""
-
-#: src/pv/cursor.c:391
-msgid "failed to open terminal"
-msgstr ""
-
-#: src/pv/file.c:119
-msgid "failed to seek to start of output"
-msgstr ""
-
-#: src/pv/file.c:210
-msgid "failed to close file"
-msgstr ""
-
-#: src/pv/file.c:232
-msgid "failed to read file"
-msgstr ""
-
-#: src/pv/file.c:239 src/main/options.c:284
-msgid "failed to stat file"
-msgstr ""
-
-#: src/pv/file.c:246
-msgid "failed to stat output file"
-msgstr ""
-
-#: src/pv/file.c:268
-msgid "input file is output file"
-msgstr ""
-
-#: src/pv/transfer.c:366
-msgid "read failed"
-msgstr ""
-
-#: src/pv/transfer.c:381
-msgid "warning: read errors detected"
-msgstr ""
-
-#: src/pv/transfer.c:393
-msgid "file is not seekable"
-msgstr ""
-
-#: src/pv/transfer.c:452
-msgid "failed to seek past error"
-msgstr ""
-
-#: src/pv/transfer.c:468
-msgid "skipped past read error"
-msgstr ""
-
-#: src/pv/transfer.c:468 src/pv/display.c:666
-msgid "B"
-msgstr ""
-
-#: src/pv/transfer.c:624
-msgid "write failed"
-msgstr ""
-
-#: src/pv/transfer.c:743 src/pv/display.c:600
-msgid "buffer allocation failed"
-msgstr ""
-
-#.
-#. * Any other error is a problem and we must report back.
-#.
-#: src/pv/transfer.c:840
-msgid "select call failed"
-msgstr ""
-
-#: src/pv/watchpid.c:73 src/pv/watchpid.c:83 src/pv/watchpid.c:94
-#: src/pv/watchpid.c:102 src/pv/watchpid.c:139 src/pv/watchpid.c:150
-#: src/pv/watchpid.c:158 src/pv/watchpid.c:169 src/pv/watchpid.c:253
-#: src/pv/watchpid.c:261 src/pv/watchpid.c:292 src/pv/watchpid.c:312
-#: src/pv/loop.c:506 src/pv/loop.c:558 src/pv/loop.c:602
-msgid "pid"
-msgstr ""
-
-#: src/pv/watchpid.c:83 src/pv/watchpid.c:95 src/pv/watchpid.c:104
-#: src/pv/watchpid.c:150 src/pv/watchpid.c:159 src/pv/watchpid.c:171
-msgid "fd"
-msgstr ""
-
-#: src/pv/watchpid.c:104 src/pv/watchpid.c:171
-msgid "not a regular file or block device"
-msgstr ""
-
-#: src/pv/state.c:30
-msgid "history structure allocation failed"
-msgstr ""
-
-#: src/pv/state.c:59
-msgid "none"
-msgstr ""
-
-#: src/pv/display.c:165
-msgid "yzafpnum kMGTPEZY"
-msgstr ""
-
-#: src/pv/display.c:170
-msgid "yzafpnum KMGTPEZY"
-msgstr ""
-
-#: src/pv/display.c:662
-msgid "b"
-msgstr ""
-
-#: src/pv/display.c:717 src/pv/display.c:728
-msgid "b/s"
-msgstr ""
-
-#: src/pv/display.c:720 src/pv/display.c:732
-msgid "/s"
-msgstr ""
-
-#: src/pv/display.c:720 src/pv/display.c:732
-msgid "B/s"
-msgstr ""
-
-#: src/pv/display.c:768 src/pv/display.c:772 src/pv/display.c:831
-msgid "ETA"
-msgstr ""
-
-#. GNU standard license line and free software notice
-#: src/main/version.c:28
-msgid "License: Artistic v2.0 "
-msgstr ""
-
-#: src/main/version.c:29
-msgid "This is free software: you are free to change and redistribute it."
-msgstr ""
-
-#: src/main/version.c:30
-msgid "There is NO WARRANTY, to the extent permitted by law."
-msgstr ""
-
-#. Project web site link
-#: src/main/version.c:32
-msgid "Project web site"
-msgstr ""
-
-#: src/main/remote.c:215
-msgid "message not received"
-msgstr ""
-
-#: src/main/remote.c:318
-msgid "IPC not supported on this system"
-msgstr ""
-
-#: src/main/help.c:283
-msgid "show progress bar"
-msgstr ""
-
-#: src/main/help.c:286
-msgid "show elapsed time"
-msgstr ""
-
-#: src/main/help.c:289
-msgid "show estimated time of arrival (completion)"
-msgstr ""
-
-#: src/main/help.c:292
-msgid "show absolute estimated time of arrival (completion)"
-msgstr ""
-
-#: src/main/help.c:295
-msgid "show data transfer rate counter"
-msgstr ""
-
-#: src/main/help.c:298
-msgid "show data transfer average rate counter"
-msgstr ""
-
-#: src/main/help.c:300 src/main/help.c:328 src/main/help.c:340
-msgid "SEC"
-msgstr ""
-
-#: src/main/help.c:301
-msgid "compute average rate over past SEC seconds (default 30s)"
-msgstr ""
-
-#: src/main/help.c:304
-msgid "show number of bytes transferred"
-msgstr ""
-
-#: src/main/help.c:307
-msgid "show number of bits transferred"
-msgstr ""
-
-#: src/main/help.c:310
-msgid "show percentage of transfer buffer in use"
-msgstr ""
-
-#: src/main/help.c:312
-msgid "NUM"
-msgstr ""
-
-#: src/main/help.c:313
-msgid "show NUM bytes last written"
-msgstr ""
-
-#: src/main/help.c:315
-msgid "FORMAT"
-msgstr ""
-
-#: src/main/help.c:316
-msgid "set output format to FORMAT"
-msgstr ""
-
-#: src/main/help.c:319
-msgid "output percentages, not visual information"
-msgstr ""
-
-#: src/main/help.c:322
-msgid "do not output any transfer information at all"
-msgstr ""
-
-#: src/main/help.c:326
-msgid "display nothing until first byte transferred"
-msgstr ""
-
-#: src/main/help.c:329
-msgid "display nothing until SEC seconds have passed"
-msgstr ""
-
-#: src/main/help.c:331
-msgid "SIZE"
-msgstr ""
-
-#: src/main/help.c:332
-msgid "set estimated data size to SIZE bytes"
-msgstr ""
-
-#: src/main/help.c:335
-msgid "count lines instead of bytes"
-msgstr ""
-
-#: src/main/help.c:338
-msgid "lines are null-terminated"
-msgstr ""
-
-#: src/main/help.c:341
-msgid "update every SEC seconds"
-msgstr ""
-
-#: src/main/help.c:343
-msgid "WIDTH"
-msgstr ""
-
-#: src/main/help.c:344
-msgid "assume terminal is WIDTH characters wide"
-msgstr ""
-
-#: src/main/help.c:346
-msgid "HEIGHT"
-msgstr ""
-
-#: src/main/help.c:347
-msgid "assume terminal is HEIGHT rows high"
-msgstr ""
-
-#: src/main/help.c:349
-msgid "NAME"
-msgstr ""
-
-#: src/main/help.c:350
-msgid "prefix visual information with NAME"
-msgstr ""
-
-#: src/main/help.c:353
-msgid "output even if standard error is not a terminal"
-msgstr ""
-
-#: src/main/help.c:356
-msgid "use cursor positioning escape sequences"
-msgstr ""
-
-#: src/main/help.c:359
-msgid "RATE"
-msgstr ""
-
-#: src/main/help.c:360
-msgid "limit transfer to RATE bytes per second"
-msgstr ""
-
-#: src/main/help.c:362
-msgid "BYTES"
-msgstr ""
-
-#: src/main/help.c:363
-msgid "use a buffer size of BYTES"
-msgstr ""
-
-#: src/main/help.c:366
-msgid "never use splice(), always use read/write"
-msgstr ""
-
-#: src/main/help.c:369
-msgid "skip read errors in input"
-msgstr ""
-
-#: src/main/help.c:372
-msgid "stop after --size bytes have been transferred"
-msgstr ""
-
-#: src/main/help.c:375
-msgid "flush cache to disk after every write"
-msgstr ""
-
-#: src/main/help.c:378
-msgid "use direct I/O to bypass cache"
-msgstr ""
-
-#: src/main/help.c:381
-msgid "PID"
-msgstr ""
-
-#: src/main/help.c:382
-msgid "update settings of process PID"
-msgstr ""
-
-#: src/main/help.c:386 src/main/help.c:401
-msgid "FILE"
-msgstr ""
-
-#: src/main/help.c:387
-msgid "save process ID in FILE"
-msgstr ""
-
-#: src/main/help.c:390
-msgid "PID[:FD]"
-msgstr ""
-
-#: src/main/help.c:391
-msgid "watch file FD opened by process PID"
-msgstr ""
-
-#: src/main/help.c:395
-msgid "show this help and exit"
-msgstr ""
-
-#: src/main/help.c:398
-msgid "show version information and exit"
-msgstr ""
-
-#: src/main/help.c:402
-msgid "write debug logs to FILE"
-msgstr ""
-
-#. @-formatconst@
-#.
-#. * splint note: unavoidable use of %s in translated string. Should
-#. * be hard to exploit - the message catalogue would have to be
-#. * replaced or forced to load from another location.
-#.
-#: src/main/help.c:427
-#, c-format
-msgid "Usage: %s [OPTION] [FILE]..."
-msgstr ""
-
-#. @-mustfreefresh@
-#.
-#. * splint note: the gettext calls made by _() cause memory leak
-#. * warnings, but in this case it's unavoidable, and mitigated by the
-#. * fact we only translate each string once.
-#.
-#: src/main/help.c:438
-msgid ""
-"Concatenate FILE(s), or standard input, to standard output, with monitoring."
-msgstr ""
-
-#: src/main/help.c:575
-#, c-format
-msgid "Please report any bugs to %s."
-msgstr ""
-
-#: src/main/main.c:75
-msgid "state allocation failed"
-msgstr ""
-
-#: src/main/main.c:243
-msgid "failed to read terminal attributes"
-msgstr ""
-
-#: src/main/options.c:111
-msgid "option structure allocation failed"
-msgstr ""
-
-#: src/main/options.c:124
-msgid "option structure argv allocation failed"
-msgstr ""
-
-#: src/main/options.c:163
-msgid "integer argument expected"
-msgstr ""
-
-#: src/main/options.c:171
-msgid "numeric argument expected"
-msgstr ""
-
-#: src/main/options.c:180
-msgid "process ID or pid:fd pair expected"
-msgstr ""
-
-#: src/main/options.c:185
-msgid "invalid process ID"
-msgstr ""
-
-#: src/main/options.c:358
-#, c-format
-msgid "Try `%s --help' for more information."
-msgstr ""
-
-#: src/main/options.c:360
-#, c-format
-msgid "Try `%s -h' for more information."
-msgstr ""
-
-#: src/main/options.c:374
-msgid ""
-"cannot use line mode or transfer modifier options when watching file "
-"descriptors"
-msgstr ""
-
-#: src/main/options.c:381
-msgid "cannot use cursor positioning when watching file descriptors"
-msgstr ""
-
-#: src/main/options.c:388
-msgid "cannot use remote control when watching file descriptors"
-msgstr ""
-
-#: src/main/options.c:395
-msgid "cannot transfer files when watching file descriptors"
-msgstr ""
-
-#: src/main/options.c:402
-msgid "not available on systems without /proc/self/fdinfo"
-msgstr ""
diff --git a/tests/Bug_-_Display_length_at_magnitude_boundary_-_Bytes.sh b/tests/Bug_-_Display_length_at_magnitude_boundary_-_Bytes.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Bug_-_Display_length_at_magnitude_boundary_-_Bytes.sh
rename to tests/Bug_-_Display_length_at_magnitude_boundary_-_Bytes.test
diff --git a/tests/Bug_-_Display_length_at_magnitude_boundary_-_Rate.sh b/tests/Bug_-_Display_length_at_magnitude_boundary_-_Rate.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Bug_-_Display_length_at_magnitude_boundary_-_Rate.sh
rename to tests/Bug_-_Display_length_at_magnitude_boundary_-_Rate.test
diff --git a/tests/Bug_-_Install_all_files.sh b/tests/Bug_-_Install_all_files.test
old mode 100644
new mode 100755
similarity index 60%
rename from tests/Bug_-_Install_all_files.sh
rename to tests/Bug_-_Install_all_files.test
index 7582a9c..5d71355
--- a/tests/Bug_-_Install_all_files.sh
+++ b/tests/Bug_-_Install_all_files.test
@@ -8,7 +8,7 @@ testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"
makeDir="${testSubject%/*}"
if ! test -d "${makeDir}"; then
echo "could not find the directory to run \`make' in"
- exit 2
+ exit 77
fi
makeCommand=$(command -v gmake 2>/dev/null)
@@ -17,7 +17,7 @@ test -z "${makeCommand}" && makeCommand="make"
testInstallDir=$(mktemp -d)
if ! test -n "${testInstallDir}"; then
echo "failed to create temporary installation directory"
- exit 2
+ exit 77
fi
export DESTDIR="${testInstallDir}"
@@ -37,24 +37,6 @@ if ! find "${testInstallDir}" -type f -name "pv*" | grep -Fv "pv.1" | grep -Fq "
exitStatus=1
fi
-# Only check for message catalogue files if any were defined in the Makefile.
-if grep "^CATALOGS" "${makeDir}/Makefile" 2>/dev/null | cut -d = -f 2 | grep -Fq .mo; then
- if ! find "${testInstallDir}" -type f -name "*.mo" | grep -Fq ".mo"; then
- echo "installation of localisation files failed"
- exitStatus=1
- fi
-else
- # There should always be some message catalogue files defined, if
- # msgfmt is available.
- if command -v msgfmt >/dev/null 2>&1 || command -v gmsgfmt >/dev/null 2>&1; then
- echo "no localisation files defined in the Makefile (\$CATALOGS is empty)"
- exitStatus=1
- else
- echo "no \`msgfmt', so no localisation files installed"
- test "${exitStatus}" = 0 && exitStatus=2
- fi
-fi
-
rm -rf "${testInstallDir}"
exit "${exitStatus}"
diff --git a/tests/Display_-_--average-rate.sh b/tests/Display_-_--average-rate.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--average-rate.sh
rename to tests/Display_-_--average-rate.test
diff --git a/tests/Display_-_--bits.sh b/tests/Display_-_--bits.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--bits.sh
rename to tests/Display_-_--bits.test
diff --git a/tests/Display_-_--buffer-percent.sh b/tests/Display_-_--buffer-percent.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--buffer-percent.sh
rename to tests/Display_-_--buffer-percent.test
diff --git a/tests/Display_-_--bytes.sh b/tests/Display_-_--bytes.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--bytes.sh
rename to tests/Display_-_--bytes.test
diff --git a/tests/Display_-_--eta_-_plausible_values.sh b/tests/Display_-_--eta_-_plausible_values.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--eta_-_plausible_values.sh
rename to tests/Display_-_--eta_-_plausible_values.test
diff --git a/tests/Display_-_--fineta_-_plausible_values.sh b/tests/Display_-_--fineta_-_plausible_values.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--fineta_-_plausible_values.sh
rename to tests/Display_-_--fineta_-_plausible_values.test
diff --git a/tests/Display_-_--last-written.sh b/tests/Display_-_--last-written.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--last-written.sh
rename to tests/Display_-_--last-written.test
diff --git a/tests/Display_-_--numeric.sh b/tests/Display_-_--numeric.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--numeric.sh
rename to tests/Display_-_--numeric.test
diff --git a/tests/Display_-_--numeric_--bytes.sh b/tests/Display_-_--numeric_--bytes.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--numeric_--bytes.sh
rename to tests/Display_-_--numeric_--bytes.test
diff --git a/tests/Display_-_--numeric_--bytes_--line-mode.sh b/tests/Display_-_--numeric_--bytes_--line-mode.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--numeric_--bytes_--line-mode.sh
rename to tests/Display_-_--numeric_--bytes_--line-mode.test
diff --git a/tests/Display_-_--numeric_--timer.sh b/tests/Display_-_--numeric_--timer.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--numeric_--timer.sh
rename to tests/Display_-_--numeric_--timer.test
diff --git a/tests/Display_-_--progress_-_basic_movement.sh b/tests/Display_-_--progress_-_basic_movement.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--progress_-_basic_movement.sh
rename to tests/Display_-_--progress_-_basic_movement.test
diff --git a/tests/Display_-_--progress_-_increasing.sh b/tests/Display_-_--progress_-_increasing.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--progress_-_increasing.sh
rename to tests/Display_-_--progress_-_increasing.test
diff --git a/tests/Display_-_--quiet.sh b/tests/Display_-_--quiet.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--quiet.sh
rename to tests/Display_-_--quiet.test
diff --git a/tests/Display_-_--rate_-_displayed_value_changes.sh b/tests/Display_-_--rate_-_displayed_value_changes.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--rate_-_displayed_value_changes.sh
rename to tests/Display_-_--rate_-_displayed_value_changes.test
diff --git a/tests/Display_-_--timer_-_displayed_value_changes.sh b/tests/Display_-_--timer_-_displayed_value_changes.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Display_-_--timer_-_displayed_value_changes.sh
rename to tests/Display_-_--timer_-_displayed_value_changes.test
diff --git a/tests/General_-_--pidfile.sh b/tests/General_-_--pidfile.test
old mode 100644
new mode 100755
similarity index 99%
rename from tests/General_-_--pidfile.sh
rename to tests/General_-_--pidfile.test
index 15aacef..71fd752
--- a/tests/General_-_--pidfile.sh
+++ b/tests/General_-_--pidfile.test
@@ -8,7 +8,7 @@ testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"
# Check we can run "kill -s 0".
if ! kill -s 0 $$ >/dev/null 2>&1; then
echo "cannot check process existence with \`kill -s 0'"
- exit 2
+ exit 77
fi
dd if=/dev/zero bs=150 count=1 2>/dev/null \
diff --git a/tests/Integrity_-_Basic.sh b/tests/Integrity_-_Basic.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Integrity_-_Basic.sh
rename to tests/Integrity_-_Basic.test
diff --git a/tests/Integrity_-_Binary_data.sh b/tests/Integrity_-_Binary_data.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Integrity_-_Binary_data.sh
rename to tests/Integrity_-_Binary_data.test
diff --git a/tests/Integrity_-_From_bursty_source.sh b/tests/Integrity_-_From_bursty_source.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Integrity_-_From_bursty_source.sh
rename to tests/Integrity_-_From_bursty_source.test
diff --git a/tests/Integrity_-_Large_file_support.sh b/tests/Integrity_-_Large_file_support.test
old mode 100644
new mode 100755
similarity index 99%
rename from tests/Integrity_-_Large_file_support.sh
rename to tests/Integrity_-_Large_file_support.test
index eb771e7..ef085a4
--- a/tests/Integrity_-_Large_file_support.sh
+++ b/tests/Integrity_-_Large_file_support.test
@@ -11,7 +11,7 @@ workFile1FreeKiB=$(df -kP "${workFile1Dir}" | sed -n '$p' | awk '{print $(NF-2)}
test -n "${workFile1FreeKiB}" || workFile1FreeKiB=0
if ! test "${workFile1FreeKiB}" -gt 3300000 2>/dev/null; then
echo "test requires at least 3GB free on ${workFile1Dir}"
- exit 2
+ exit 77
fi
# Generate a 3GB sparse file - we don't really need 3GB of free space unless
@@ -19,7 +19,7 @@ fi
true > "${workFile1}"
if ! dd if="/dev/zero" of="${workFile1}" count=1 bs=1048576 seek=3072 2>/dev/null; then
echo "failed to create 3GB specimen file"
- exit 2
+ exit 77
fi
# NB the "stat" command is not portable - BSD stat(1) has a different syntax
@@ -29,7 +29,7 @@ fileSize=$(ls -nl "${workFile1}" 2>/dev/null | awk '{print $5}')
test -n "${fileSize}" || fileSize=0
if ! test "${fileSize}" -gt 3000000; then
echo "failed to validate specimen file size"
- exit 2
+ exit 77
fi
# Transfer the file, and count how many bytes came through.
diff --git a/tests/Integrity_-_On_output_pipe_close.sh b/tests/Integrity_-_On_output_pipe_close.test
old mode 100644
new mode 100755
similarity index 99%
rename from tests/Integrity_-_On_output_pipe_close.sh
rename to tests/Integrity_-_On_output_pipe_close.test
index 5dffd20..a60a792
--- a/tests/Integrity_-_On_output_pipe_close.sh
+++ b/tests/Integrity_-_On_output_pipe_close.test
@@ -19,7 +19,7 @@ done
# Check that it really is GNU head, and skip the test if not.
if ! echo | "${HEAD}" -c 10 >/dev/null 2>&1; then
echo "GNU \`head' is required"
- exit 2
+ exit 77
fi
# Don't use dd. See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=324308
diff --git a/tests/Integrity_-_When_adjusted_remotely.sh b/tests/Integrity_-_When_adjusted_remotely.test
old mode 100644
new mode 100755
similarity index 99%
rename from tests/Integrity_-_When_adjusted_remotely.sh
rename to tests/Integrity_-_When_adjusted_remotely.test
index 195cde9..5c28a5a
--- a/tests/Integrity_-_When_adjusted_remotely.sh
+++ b/tests/Integrity_-_When_adjusted_remotely.test
@@ -9,7 +9,7 @@ testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2=
# Do nothing if IPC is not supported.
if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
echo "IPC is not supported on this platform"
- exit 2
+ exit 77
fi
# Generate some data.
diff --git a/tests/Memory_safety_-_Basic.sh b/tests/Memory_safety_-_Basic.test
old mode 100644
new mode 100755
similarity index 95%
rename from tests/Memory_safety_-_Basic.sh
rename to tests/Memory_safety_-_Basic.test
index 2c6ea91..06cae7d
--- a/tests/Memory_safety_-_Basic.sh
+++ b/tests/Memory_safety_-_Basic.test
@@ -7,7 +7,7 @@
sourcePath="${sourcePath:-.}"; testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2="${workFile2:-.tmp2}"; workFile3="${workFile3:-.tmp3}"; workFile4="${workFile4:-.tmp4}"
# Load the valgrind function.
-. "${sourcePath}/autoconf/scripts/run-valgrind.sh"
+. "${sourcePath}/tests/run-valgrind.sh"
# Plain, no options.
{ echo "testing" | runWithValgrind >/dev/null 2>&1; } 4>&1 || exit 1
diff --git a/tests/Memory_safety_-_Remote_control_receiver.sh b/tests/Memory_safety_-_Remote_control_receiver.test
old mode 100644
new mode 100755
similarity index 96%
rename from tests/Memory_safety_-_Remote_control_receiver.sh
rename to tests/Memory_safety_-_Remote_control_receiver.test
index 37196bc..c45bda6
--- a/tests/Memory_safety_-_Remote_control_receiver.sh
+++ b/tests/Memory_safety_-_Remote_control_receiver.test
@@ -8,11 +8,11 @@ sourcePath="${sourcePath:-.}"; testSubject="${testSubject:-false}"; workFile1="$
# Do nothing if IPC is not supported.
if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
echo "IPC is not supported on this platform"
- exit 2
+ exit 77
fi
# Load the valgrind function.
-. "${sourcePath}/autoconf/scripts/run-valgrind.sh"
+. "${sourcePath}/tests/run-valgrind.sh"
dd if=/dev/urandom of="${workFile1}" bs=1024 count=10240 2>/dev/null
diff --git a/tests/Memory_safety_-_Remote_control_sender.sh b/tests/Memory_safety_-_Remote_control_sender.test
old mode 100644
new mode 100755
similarity index 96%
rename from tests/Memory_safety_-_Remote_control_sender.sh
rename to tests/Memory_safety_-_Remote_control_sender.test
index 1175a08..d347a9c
--- a/tests/Memory_safety_-_Remote_control_sender.sh
+++ b/tests/Memory_safety_-_Remote_control_sender.test
@@ -9,11 +9,11 @@ sourcePath="${sourcePath:-.}"; testSubject="${testSubject:-false}"; workFile1="$
# Do nothing if IPC is not supported.
if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
echo "IPC is not supported on this platform"
- exit 2
+ exit 77
fi
# Load the valgrind function.
-. "${sourcePath}/autoconf/scripts/run-valgrind.sh"
+. "${sourcePath}/tests/run-valgrind.sh"
dd if=/dev/urandom of="${workFile1}" bs=1024 count=10240 2>/dev/null
diff --git a/tests/Modifiers_-_--direct-io.sh b/tests/Modifiers_-_--direct-io.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Modifiers_-_--direct-io.sh
rename to tests/Modifiers_-_--direct-io.test
diff --git a/tests/Modifiers_-_--force.sh b/tests/Modifiers_-_--force.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Modifiers_-_--force.sh
rename to tests/Modifiers_-_--force.test
diff --git a/tests/Modifiers_-_--interval.sh b/tests/Modifiers_-_--interval.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Modifiers_-_--interval.sh
rename to tests/Modifiers_-_--interval.test
diff --git a/tests/Modifiers_-_--line-mode.sh b/tests/Modifiers_-_--line-mode.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Modifiers_-_--line-mode.sh
rename to tests/Modifiers_-_--line-mode.test
diff --git a/tests/Modifiers_-_--size.sh b/tests/Modifiers_-_--size.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Modifiers_-_--size.sh
rename to tests/Modifiers_-_--size.test
diff --git a/tests/Modifiers_-_--size_from_file_size.sh b/tests/Modifiers_-_--size_from_file_size.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Modifiers_-_--size_from_file_size.sh
rename to tests/Modifiers_-_--size_from_file_size.test
diff --git a/tests/Modifiers_-_--sync.sh b/tests/Modifiers_-_--sync.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Modifiers_-_--sync.sh
rename to tests/Modifiers_-_--sync.test
diff --git a/tests/Terminal_-_Detect_width.sh b/tests/Terminal_-_Detect_width.test
old mode 100644
new mode 100755
similarity index 98%
rename from tests/Terminal_-_Detect_width.sh
rename to tests/Terminal_-_Detect_width.test
index 11958a5..3e3a0db
--- a/tests/Terminal_-_Detect_width.sh
+++ b/tests/Terminal_-_Detect_width.test
@@ -8,13 +8,13 @@ testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2=
# Skip the test if `tmux' is not available.
if ! command -v tmux >/dev/null 2>&1; then
echo "test requires \`tmux'"
- exit 2
+ exit 77
fi
# Skip the test if `tmux' does not have "-C".
if echo "kill-server" | tmux -C -L pvtest 2>&1 | grep -Fq "tmux: unknown option"; then
echo "test requires a newer \`tmux'"
- exit 2
+ exit 77
fi
# Run the given command $3 inside a terminal of the given width $1, waiting
@@ -76,7 +76,7 @@ checkSize="100"
detectedWidth=$(runInTerminal "${checkSize}" 1 "stty -a | tr \\\";\\\" \\\"\\\\n\\\" | grep col | sed -n 1p | tr -dc 0-9")
if ! test "${detectedWidth}" = "${checkSize}"; then
echo "test requires a \`tmux' that can resize a detached window (requested width ${checkSize}, detected ${detectedWidth})"
- exit 2
+ exit 77
fi
# Test the progress bar width at various terminal sizes.
diff --git a/tests/Transfer_-_--rate-limit.sh b/tests/Transfer_-_--rate-limit.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Transfer_-_--rate-limit.sh
rename to tests/Transfer_-_--rate-limit.test
diff --git a/tests/Transfer_-_--remote.sh b/tests/Transfer_-_--remote.test
old mode 100644
new mode 100755
similarity index 99%
rename from tests/Transfer_-_--remote.sh
rename to tests/Transfer_-_--remote.test
index a1f2e68..e3e9ba8
--- a/tests/Transfer_-_--remote.sh
+++ b/tests/Transfer_-_--remote.test
@@ -8,7 +8,7 @@ testSubject="${testSubject:-false}"; workFile1="${workFile1:-.tmp1}"; workFile2=
# Do nothing if IPC is not supported.
if ! "${testSubject}" -h 2>/dev/null | grep -Eq "^ -R,"; then
echo "IPC is not supported on this platform"
- exit 2
+ exit 77
fi
# Generate an empty test file.
diff --git a/tests/Transfer_-_--stop-at-size.sh b/tests/Transfer_-_--stop-at-size.test
old mode 100644
new mode 100755
similarity index 100%
rename from tests/Transfer_-_--stop-at-size.sh
rename to tests/Transfer_-_--stop-at-size.test
diff --git a/autoconf/scripts/run-valgrind.sh b/tests/run-valgrind.sh
similarity index 94%
rename from autoconf/scripts/run-valgrind.sh
rename to tests/run-valgrind.sh
index 7957070..454b19c 100755
--- a/autoconf/scripts/run-valgrind.sh
+++ b/tests/run-valgrind.sh
@@ -2,7 +2,7 @@
#
# Function to launch the test subject under valgrind.
#
-# If valgrind is unavailable, exits the script with status 2, after writing
+# If valgrind is unavailable, exits the script with status 77, after writing
# a note to file descriptor 4.
#
# If valgrind finds an error, writes the error to "valgrind.out" in the
@@ -26,7 +26,7 @@ testSubject="${testSubject:-false}"; workFile4="${workFile4:-.tmp4}"
if ! command -v valgrind >/dev/null 2>&1; then
echo "test requires \`valgrind'"
- exit 2
+ exit 77
fi
runWithValgrind () {
diff --git a/tests/test-env.sh b/tests/test-env.sh
new file mode 100644
index 0000000..9bc00de
--- /dev/null
+++ b/tests/test-env.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Set up the environment variables, temporary working files, and cleanup
+# processes required to run each test.
+#
+# Tests must exit with 0 for success, 1 for failure, 77 to skip the test, or
+# 99 for a fatal error with the test framework.
+
+# Parameters.
+testSubject="./pv"
+sourcePath="${srcdir}"
+
+# Set everything to the "C" locale.
+LANG=C
+LC_ALL=C
+export LANG LC_ALL
+
+# Temporary working files, for the test scripts to use.
+workFile1=$(mktemp 2>/dev/null) || workFile1="./.tmp1"
+workFile2=$(mktemp 2>/dev/null) || workFile2="./.tmp2"
+workFile3=$(mktemp 2>/dev/null) || workFile3="./.tmp3"
+workFile4=$(mktemp 2>/dev/null) || workFile4="./.tmp4"
+
+# Clean up the temporary files on exit, in case we are interrupted.
+trap 'rm -f "${workFile1}" "${workFile2}" "${workFile3}" "${workFile4}"' EXIT
+
+# Variables used by the test scripts.
+export testSubject sourcePath workFile1 workFile2 workFile3 workFile4