Major restructuring to switch build system from old scripts to GNU Automake.

This commit is contained in:
Andrew Wood
2023-08-28 10:04:39 +01:00
parent 5495e0e808
commit e99548ea8a
90 changed files with 1704 additions and 3521 deletions
+16 -1
View File
@@ -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
+102
View File
@@ -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:
+10 -8
View File
@@ -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:
&nbsp;&nbsp;[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.
-14
View File
@@ -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")
#
#
-193
View File
@@ -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 <andrew.wood@ivarch.com>")], [Copyright holder])
AC_DEFINE([PROJECT_HOMEPAGE], ["http://www.ivarch.com/programs/" PROGRAM_NAME ".shtml"], [Project homepage])
AC_DEFINE([BUG_REPORTS_TO], [_("<pv@ivarch.com>")], [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
-11
View File
@@ -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
-17
View File
@@ -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
-47
View File
@@ -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
-188
View File
@@ -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,/<BODY/d' -e '/<\/BODY/,$$d' \
-e 's|<A [^>]*>&nbsp;</A>||ig' \
-e 's|<A [^>]*>\([^<]*\)</A>|\1|ig' \
-e '/<H1/d' -e 's|\(</H[0-9]>\)|\1<P>|ig' \
-e 's/<DL COMPACT>/<DL>/ig' \
-e 's/&lt;[0-9A-Za-z_.-]\+@[0-9A-Za-z_.-]\+&gt;//g' \
-e 's|<I>\(http://.*\)</I>|<A HREF="\1">\1</A>|ig' \
| sed -e '1,/<HR/d' -e '/<H2>Index/,/<HR/d' \
indent:
cd $(srcdir) && indent -npro -kr -i8 -cd42 -c45 -l120 $(allsrc)
dist: doc update-po
rm -rf $(package)-$(version)
mkdir $(package)-$(version)
cp -dprf Makefile $(distfiles) $(package)-$(version)
cd $(package)-$(version); $(MAKE) distclean
cp -dpf doc/lsm $(package)-$(version)/doc/
chmod 644 `find $(package)-$(version) -type f -print`
chmod 755 `find $(package)-$(version) -type d -print`
chmod 755 `find $(package)-$(version)/autoconf/scripts`
chmod 755 $(package)-$(version)/configure
rm -rf DUMMY `find $(package)-$(version) -type d -name CVS`
rm -rf DUMMY `find $(package)-$(version) -type d -name .svn`
tar cf $(package)-$(version).tar $(package)-$(version)
rm -rf $(package)-$(version)
-gzip -f9 $(package)-$(version).tar
check test: $(alltarg)
sh $(srcdir)/autoconf/scripts/run-test.sh ./$(package) $(srcdir)
install: all doc
$(srcdir)/autoconf/scripts/mkinstalldirs \
"$(DESTDIR)$(bindir)"
$(srcdir)/autoconf/scripts/mkinstalldirs \
"$(DESTDIR)$(mandir)/man1"
$(INSTALL) -m 755 $(package) \
"$(DESTDIR)$(bindir)/$(package)"
$(INSTALL) -m 644 doc/quickref.1 \
"$(DESTDIR)$(mandir)/man1/$(package).1"
if test -n "$(CATALOGS)"; then \
catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
name=`echo $$cat | sed 's,^.*/,,g'`; \
if test "`echo $$name | sed 's/.*\(\..*\)/\1/'`" = ".gmo"; then \
destdir=$(gnulocaledir); \
else \
destdir=$(localedir); \
fi; \
lang=`echo $$name | sed 's/$(CATOBJEXT)$$//'`; \
dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \
$(srcdir)/autoconf/scripts/mkinstalldirs $$dir; \
$(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
done; \
fi
uninstall:
-$(UNINSTALL) "$(DESTDIR)$(bindir)/$(package)"
-$(UNINSTALL) "$(DESTDIR)$(mandir)/man1/$(package).1"
-$(UNINSTALL) "$(DESTDIR)$(mandir)/man1/$(package).1.gz"
-if test -n "$(CATALOGS)"; then \
catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
name=`echo $$cat | sed 's,^.*/,,g'`; \
if test "`echo $$name | sed 's/.*\(\..*\)/\1/'`" = ".gmo"; then \
destdir=$(gnulocaledir); \
else \
destdir=$(localedir); \
fi; \
lang=`echo $$name | sed 's/$(CATOBJEXT)$$//'`; \
dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \
$(UNINSTALL) $$dir/$(PACKAGE)$(INSTOBJEXT); \
done; \
fi
release: dist
-gpg --list-secret-keys 2>&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)*
-46
View File
@@ -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
-33
View File
@@ -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
-191
View File
@@ -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|&|\&amp;|g;s|<|\&lt;|g;s|>|\&gt;|g'
}
# Convert the given string to HTML-escaped values (<, >, & escaped) on
# stdout, also adding a <BR> to the end of each line.
#
html_safebr () {
echo "$*" \
| sed -e 's|&|\&amp;|g;s|<|\&lt;|g;s|>|\&gt;|g;s/$/<BR>/'
}
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 '<HTML><HEAD>'
echo '<TITLE>Source Code Index</TITLE>'
echo '</HEAD><BODY>'
echo '<H1><A NAME="top">Source Code Index</A></H1>'
echo '<P><UL>'
echo '<LI><A HREF="#files">File Listing</A></LI>'
echo '<LI><A HREF="#funcs">Function Listing</A></LI>'
echo '<LI><A HREF="#todo">To-Do Listing</A></LI>'
echo '</UL></P>'
echo '<H2><A NAME="files">File Listing</A></H2>'
echo '<P><UL>'
echo "${sourceFiles}" \
| sed -e \
's|^.*$|<LI><CODE CLASS="filename"><A HREF="#file-\0">\0</A></CODE></LI>|'
echo '</UL></P>'
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 '<P><HR WIDTH="100%"></P>'
echo '<P><TABLE BORDER="0"><TR>'
echo '<TD VALIGN="TOP"><CODE CLASS="filename">'
echo '<A NAME="file-'"${sourceFile}"'">'"${sourceFile}"'</A></CODE></TD>'
echo '<TD VALIGN="TOP"> - </TD>'
echo '<TD VALIGN="TOP">'"$(html_safe "${fileShortDescription}")"'</TD>'
echo '</TR></TABLE></P>'
echo '<P><SMALL>[<A HREF="'"${linkPrefix}${sourceFile}"'">View File</A>]</SMALL></P>'
echo '<P><BLOCKQUOTE>'
html_safebr "${fileLongDescription}"
echo '</BLOCKQUOTE></P>'
if [ -n "${functionPrototypes}" ]; then
echo '<P>Functions defined:</P>'
echo '<P><UL>'
echo "${functionPrototypes}" \
| sed 's|^.*$|<A HREF="#func-\0---'"${sourceFile}"'">\0</A>|' \
| sed 's/^/<LI><CODE CLASS="funcname">/;s|$|</CODE></LI>|'
echo '</UL></P>'
fi
echo '<P ALIGN="RIGHT"><SMALL CLASS="navbar">['
echo '<A HREF="#top">Top</A> |'
echo '<A HREF="#todo">To Do</A> |'
echo '<A HREF="#funcs">Functions</A> ]</SMALL></P>'
done
echo '<H2><A NAME="funcs">Function Listing</A></H2>'
echo '<P><UL>'
echo "${ctagsOutput}" | while read -r functionName sourceFile sourceLineNo restOfLine; do
echo '<LI><CODE CLASS="funcname"><A' \
'HREF="#func-'"${functionName}"'---'"${sourceFile}"'">'"${functionName}"'</A></CODE>' \
'[<CODE CLASS="filename">'"${sourceFile}"'</CODE>]</LI>'
done
echo '</UL></P>'
# 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 '<P><HR WIDTH="100%"></P>'
echo '<P ALIGN="LEFT">'
echo '<CODE CLASS="funcname"><A' \
'NAME="func-'"${functionName}"'---'"${sourceFile}"'">'"${functionName}"'</A></CODE>' \
'[<CODE CLASS="filename"><A HREF="#file-'"${sourceFile}"'">'"${sourceFile}"'</A></CODE>]'
echo '</P>'
echo '<P><CODE CLASS="funcdef">'"$(html_safe "${functionPrototype}")"'</CODE></P>'
echo '<P><BLOCKQUOTE>'
html_safebr "${functionHeaderComment}"
echo '</BLOCKQUOTE></P>'
echo '<P ALIGN="RIGHT"><SMALL CLASS="navbar">['
echo '<A HREF="#top">Top</A> |'
echo '<A HREF="#todo">To Do</A> |'
echo '<A HREF="#files">Files</A> ]</SMALL></P>'
done
echo '<H2><A NAME="todo">To Do Listing</A></H2>'
echo '<P><UL>'
for sourceFile in ${sourceFiles}; do
todoLineNumbers=$(sed -n \
-e '/\/\*.*\*\//!{/\/\*/,/\*\//{/TODO:/{=;};};}' \
-e '/\/\*.*\*\//{/TODO:/{=;};}' \
< "${sourceFile}")
test -n "${todoLineNumbers}" || continue
echo '<LI><CODE CLASS="filename"><A' \
'HREF="#file-'"${sourceFile}"'">'"${sourceFile}"'</A></CODE>'
echo '<UL>'
for todoLineNo in ${todoLineNumbers}; do
todoNote=$(sed -n "${todoLineNo}"'{s/^.*TODO://;s/\*\/.*$//;p;}' < "${sourceFile}")
echo "<LI>[<B>${todoLineNo}</B>] $(html_safe "${todoNote}")</LI>"
done
echo '</UL></LI>'
done
echo '</BODY></HTML>'
# EOF
-541
View File
@@ -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:
-130
View File
@@ -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
-33
View File
@@ -1,33 +0,0 @@
#!/bin/sh
# mkinstalldirs --- make directory hierarchy
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
# 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
-63
View File
@@ -1,63 +0,0 @@
#!/bin/sh
#
# Messy script to convert all of the given .po files to a single C file on
# stdout.
cat <<EOF
/*
* Translation table - automatically generated by po2table.sh.
*/
#include "config.h"
#include <string.h>
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 <<EOF
return 0;
}
/* EOF */
EOF
# EOF
-209
View File
@@ -1,209 +0,0 @@
#!/bin/sh
#
# Parameters: testSubject sourcePath [testScript...]
#
# Run one or more test scripts. The ${testSubject} is the path of the test
# subject program, and the ${sourcePath} is the path to the top level of the
# source directory. If any ${testScript} parameters are given, they are the
# tests to run (each one being either the full path to a script, or the base
# filename of the script in the test directory). If no test scripts are
# listed, then all tests directly under "${sourcePath}/tests/" are run.
#
# Test scripts should be written to exit 0 if the test passed, 2 if the test
# is to be skipped, or any other exit status to indicate failure. They are
# run via "sh" (not "bash" or "ksh" or "csh").
#
# The test scripts can rely on the environment variables "testSubject",
# "sourcePath", "workFile1", "workFile2", "workFile3", and "workFile4" being
# populated, and should use those work files - which will be present and
# empty - for scratch space. They should not delete those files.
#
# When the test scripts are called, LANG and LC_ALL are set to "C".
#
# Anything output by a test script on stdout or stderr is captured and shown
# after the "OK" / "FAILED" / "skipped" result description.
#
# The exit status of this script will be 1 if any test failed, 0 otherwise.
# A skipped test is not counted as a failure.
#
# Parameters.
testSubject="$1"
sourcePath="$2"
shift
shift
selectedTests="$*"
# Constants.
formatCodesPass="setaf 2;bold" # terminal capabilities for "pass" formatting
formatCodesFail="setaf 1;bold" # terminal capabilities for "fail" formatting
formatCodesSkip="setaf 3" # terminal capabilities for "skip" formatting
formatCodesZero="setaf 4" # terminal capabilities for zero result
# 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
# 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
+98
View File
@@ -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
+24 -47
View File
@@ -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.
+12 -6
View File
@@ -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
-1
View File
@@ -1 +0,0 @@
pv
-4
View File
@@ -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.
-1
View File
@@ -1 +0,0 @@
0.0.20230816-UNRELEASED
@@ -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}" \
-19
View File
@@ -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 <andrew.wood@ivarch.com>
Maintained-by: Andrew Wood <andrew.wood@ivarch.com>
Primary-site: http://www.ivarch.com/programs/@PACKAGE@.shtml
Alternate-site:
Original-site:
Platforms:
Copying-policy: Artistic 2.0
End
+41 -41
View File
@@ -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: <http://www.ivarch.com/programs/pv.shtml>
+3 -5
View File
@@ -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=<signing-user>
- make manhtml | tidy -asxhtml | sed -e '1,/<body>/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
-44
View File
@@ -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
+9
View File
@@ -0,0 +1,9 @@
Makevars.template
*.sed
*.gmo
*.header
*.sin
*.pot
Rules-quot
stamp-po
*~
+4
View File
@@ -0,0 +1,4 @@
de
fr
pl
pt
+510
View File
@@ -0,0 +1,510 @@
# Makefile for PO directory in any package using GNU gettext.
# Copyright (C) 1995-2000 Ulrich Drepper <drepper@gnu.ai.mit.edu>
# 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
# <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html>:
# "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:
+82
View File
@@ -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
+16
View File
@@ -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
+171 -187
View File
@@ -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 <ivarch@ubik>\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 <https://opensource.org/license/artistic-2-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 <https://opensource.org/license/artistic-2-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"
+171 -187
View File
@@ -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 <ivarch@ubik>\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 <https://opensource.org/license/artistic-2-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 <https://opensource.org/license/artistic-2-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"
+173 -190
View File
@@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 <https://opensource.org/license/artistic-2-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 <https://opensource.org/license/artistic-2-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"
+171 -188
View File
@@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 <https://opensource.org/license/artistic-2-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 <https://opensource.org/license/artistic-2-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"
+9 -2
View File
@@ -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 <libintl.h>
# endif
# ifdef HAVE_LOCALE_H
# include <locale.h>
# endif
# define _(String) gettext (String)
# define N_(String) (String)
#else
# define _(String) (String)
# define N_(String) (String)
+21 -29
View File
@@ -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 <getopt.h> 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 <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the <libgen.h> 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 <libintl.h> 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. */
-40
View File
@@ -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 <getopt.h>
#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 */
-59
View File
@@ -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 <libintl.h>
# endif
# ifdef HAVE_LOCALE_H
# include <locale.h>
# endif
# define _(String) gettext (String)
# define N_(String) (String)
#else
# define _(String) minigettext (String)
# define N_(String) (String)
# ifdef HAVE_LOCALE_H
# include <locale.h>
# 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 */
+5
View File
@@ -9,7 +9,12 @@
#ifndef _PV_H
#define _PV_H 1
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdlib.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
-115
View File
@@ -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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#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 */
-119
View File
@@ -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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#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 */
+2 -2
View File
@@ -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@ */
}
+3 -2
View File
@@ -8,9 +8,7 @@
#include "config.h"
#include "options.h"
#include "library/getopt.h"
#include "pv.h"
#include "pv-internal.h"
#include <stdio.h>
#include <stdlib.h>
@@ -18,6 +16,9 @@
#include <errno.h>
#include <sys/stat.h>
#include <unistd.h>
#ifdef HAVE_GETOPT_H
#include <getopt.h>
#endif
void display_help(void);
+3 -3
View File
@@ -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 <https://opensource.org/license/artistic-2-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 */
-467
View File
@@ -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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 <https://opensource.org/license/artistic-2-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 ""
+2 -20
View File
@@ -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}"
View File
View File
View File
View File
+1 -1
View File
@@ -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 \
View File
@@ -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.
@@ -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
@@ -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.
+1 -1
View File
@@ -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
@@ -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
@@ -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
View File
View File
View File
View File
+3 -3
View File
@@ -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.
+1 -1
View File
@@ -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.
@@ -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 () {
+28
View File
@@ -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