aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2021-02-06 21:12:36 +0200
committerSergey Poznyakoff <gray@gnu.org>2021-02-06 21:12:36 +0200
commit10981302e720796de51418762b5fcaae4426c9ad (patch)
tree8226dbd13a4806d9dcd4e3451b42d135c7a154a6
parent6f725b8a3f294cf875b9777593dc2544161a9f32 (diff)
downloadwyslij-po-10981302e720796de51418762b5fcaae4426c9ad.tar.gz
wyslij-po-10981302e720796de51418762b5fcaae4426c9ad.tar.bz2
Drop gnulib dependencies; use mailutils functions
-rw-r--r--.gitignore27
-rw-r--r--Makefile.am4
-rw-r--r--NEWS5
-rw-r--r--README3
-rw-r--r--README-alpha2
-rw-r--r--README-hacking15
-rwxr-xr-xbootstrap1028
-rw-r--r--bootstrap.conf62
-rw-r--r--configure.ac30
-rw-r--r--doc/.gitignore4
-rw-r--r--doc/Config2
-rw-r--r--doc/Makefile.am58
-rwxr-xr-xdoc/check-docs.sh2
-rwxr-xr-xdoc/gendocs.sh4
-rw-r--r--doc/rendition.texi85
-rw-r--r--doc/values.texi2
-rw-r--r--doc/wyslij-po.texi28
-rw-r--r--po/.gitignore17
-rw-r--r--po/Makevars46
-rw-r--r--po/POTFILES.in2
-rw-r--r--src/.gitignore1
-rw-r--r--src/Makefile.am12
-rw-r--r--src/gettext.h301
-rw-r--r--src/http.c206
-rw-r--r--src/main.c5
-rw-r--r--src/po.c25
-rw-r--r--src/wyslij-po.h6
27 files changed, 561 insertions, 1421 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..01ddade
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,27 @@
+*.a
+*.o
+*.tar.*
+*~
+.deps
+.libs
+.emacs.desktop*
+.emacsrc
+.gdbinit
+ABOUT-NLS
+ChangeLog
+INSTALL
+Makefile
+Makefile.in
+TAGS
+aclocal.m4
+autom4te.cache
+build-aux
+config.h
+config.h.in
+config.log
+config.status
+configure
+core
+m4
+stamp-h1
+tmp/
diff --git a/Makefile.am b/Makefile.am
index 7904566..385fe41 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
# This file is part of Wyslij-po
-# Copyright (C) 2007, 2009, 2017 Sergey Poznyakoff
+# Copyright (C) 2007-2021 Sergey Poznyakoff
#
# Wyslij-po is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -15,4 +15,4 @@
# along with Wyslij-po. If not, see <http://www.gnu.org/licenses/>. */
ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = lib src doc po
+SUBDIRS = src doc po
diff --git a/NEWS b/NEWS
index 4338db6..bd32296 100644
--- a/NEWS
+++ b/NEWS
@@ -1,8 +1,11 @@
-Wyslij-po NEWS -- history of user-visible changes. 2018-02-02
+Wyslij-po NEWS -- history of user-visible changes. 2021-02-06
See the end of file for copying conditions.
Please send mailfromd bug reports to <bug-wyslij-po@gnu.org.ua>
+Version 3.2.90 (git)
+
+
Version 3.2 - 2018-02-02
* Requires Mailutils 3.4
diff --git a/README b/README
index 353d016..7d5b589 100644
--- a/README
+++ b/README
@@ -1,5 +1,4 @@
Wyslij-po README
-Copyright (C) 2007, 2017 Sergey Poznyakoff
See the end of file for copying conditions.
* Introduction
@@ -42,7 +41,7 @@ Send bug reports to <bug-wyslij-po@gnu.org.ua>.
* Copyright information:
-Copyright (C) 2007 Sergey Poznyakoff
+Copyright (C) 2007-2021 Sergey Poznyakoff
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
diff --git a/README-alpha b/README-alpha
index a1956cc..e738e9b 100644
--- a/README-alpha
+++ b/README-alpha
@@ -29,7 +29,7 @@ contact <bug-wyslij-po@gnu.org.ua>.
^L
* Copyright information:
-Copyright (C) 2007, 2017 Sergey Poznyakoff
+Copyright (C) 2007-2021 Sergey Poznyakoff
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
diff --git a/README-hacking b/README-hacking
index 9cbf5a6..3d8447d 100644
--- a/README-hacking
+++ b/README-hacking
@@ -1,4 +1,4 @@
-These notes intend to help people working on the SVN version of
+These notes intend to help people working on the development version of
this package.
* Requirements
@@ -19,7 +19,7 @@ sure that you have the latest stable version.
* Bootstrapping
Obviously, if you are reading these notes, you did manage to check out
-this package from SVN. The next step is to get other files needed to
+this package from GIT. The next step is to get other files needed to
build, which are extracted from other source packages:
1. Change to the source tree directory
@@ -28,19 +28,12 @@ build, which are extracted from other source packages:
2. Run
- ./bootstrap
-
-or, if you have previously checked out gnulib sources (say, to the
-directory $HOME/gnulib):
-
- ./bootstrap --gnulib-srcdir=$HOME/gnulib
-
-For more information about `bootstrap', run `bootstrap --help'.
+ autoreconf -f -i -s
^L
* Copyright information:
-Copyright (C) 2007, 2017 Sergey Poznyakoff
+Copyright (C) 2007-2021 Sergey Poznyakoff
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
diff --git a/bootstrap b/bootstrap
deleted file mode 100755
index 26066b2..0000000
--- a/bootstrap
+++ /dev/null
@@ -1,1028 +0,0 @@
-#! /bin/sh
-# Print a version string.
-scriptversion=2016-11-03.18; # UTC
-
-# Bootstrap this package from checked-out sources.
-
-# Copyright (C) 2003-2017 Free Software Foundation, Inc.
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# Originally written by Paul Eggert. The canonical version of this
-# script is maintained as build-aux/bootstrap in gnulib, however, to
-# be useful to your project, you should place a copy of it under
-# version control in the top-level directory of your project. The
-# intent is that all customization can be done with a bootstrap.conf
-# file also maintained in your version control; gnulib comes with a
-# template build-aux/bootstrap.conf to get you started.
-
-# Please report bugs or propose patches to bug-gnulib@gnu.org.
-
-nl='
-'
-
-# Ensure file names are sorted consistently across platforms.
-LC_ALL=C
-export LC_ALL
-
-# Ensure that CDPATH is not set. Otherwise, the output from cd
-# would cause trouble in at least one use below.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-local_gl_dir=gl
-
-# Honor $PERL, but work even if there is none.
-PERL="${PERL-perl}"
-
-me=$0
-
-usage() {
- cat <<EOF
-Usage: $me [OPTION]...
-Bootstrap this package from the checked-out sources.
-
-Options:
- --gnulib-srcdir=DIRNAME specify the local directory where gnulib
- sources reside. Use this if you already
- have gnulib sources on your machine, and
- do not want to waste your bandwidth downloading
- them again. Defaults to \$GNULIB_SRCDIR
- --bootstrap-sync if this bootstrap script is not identical to
- the version in the local gnulib sources,
- update this script, and then restart it with
- /bin/sh or the shell \$CONFIG_SHELL
- --no-bootstrap-sync do not check whether bootstrap is out of sync
- --copy copy files instead of creating symbolic links
- --force attempt to bootstrap even if the sources seem
- not to have been checked out
- --no-git do not use git to update gnulib. Requires that
- --gnulib-srcdir point to a correct gnulib snapshot
- --skip-po do not download po files
-
-If the file $me.conf exists in the same directory as this script, its
-contents are read as shell variables to configure the bootstrap.
-
-For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
-are honored.
-
-Running without arguments will suffice in most cases.
-EOF
-}
-
-# warnf_ FORMAT-STRING ARG1...
-warnf_ ()
-{
- warnf_format_=$1
- shift
- nl='
-'
- case $* in
- *$nl*) me_=$(printf "$me"|tr "$nl|" '??')
- printf "$warnf_format_" "$@" | sed "s|^|$me_: |" ;;
- *) printf "$me: $warnf_format_" "$@" ;;
- esac >&2
-}
-
-# warn_ WORD1...
-warn_ ()
-{
- # If IFS does not start with ' ', set it and emit the warning in a subshell.
- case $IFS in
- ' '*) warnf_ '%s\n' "$*";;
- *) (IFS=' '; warn_ "$@");;
- esac
-}
-
-# die WORD1...
-die() { warn_ "$@"; exit 1; }
-
-# Configuration.
-
-# Name of the Makefile.am
-gnulib_mk=gnulib.mk
-
-# List of gnulib modules needed.
-gnulib_modules=
-
-# Any gnulib files needed that are not in modules.
-gnulib_files=
-
-: ${AUTOPOINT=autopoint}
-: ${AUTORECONF=autoreconf}
-
-# A function to be called right after gnulib-tool is run.
-# Override it via your own definition in bootstrap.conf.
-bootstrap_post_import_hook() { :; }
-
-# A function to be called after everything else in this script.
-# Override it via your own definition in bootstrap.conf.
-bootstrap_epilogue() { :; }
-
-# The command to download all .po files for a specified domain into
-# a specified directory. Fill in the first %s is the domain name, and
-# the second with the destination directory. Use rsync's -L and -r
-# options because the latest/%s directory and the .po files within are
-# all symlinks.
-po_download_command_format=\
-"rsync --delete --exclude '*.s1' -Lrtvz \
- 'translationproject.org::tp/latest/%s/' '%s'"
-
-# Fallback for downloading .po files (if rsync fails).
-po_download_command_format2=\
-"wget --mirror -nd -q -np -A.po -P '%s' \
- http://translationproject.org/latest/%s/"
-
-# Prefer a non-empty tarname (4th argument of AC_INIT if given), else
-# fall back to the package name (1st argument with munging)
-extract_package_name='
- /^AC_INIT(\[*/{
- s///
- /^[^,]*,[^,]*,[^,]*,[ []*\([^][ ,)]\)/{
- s//\1/
- s/[],)].*//
- p
- q
- }
- s/[],)].*//
- s/^GNU //
- y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
- s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g
- p
- }
-'
-package=$(sed -n "$extract_package_name" configure.ac) \
- || die 'cannot find package name in configure.ac'
-gnulib_name=lib$package
-
-build_aux=build-aux
-source_base=lib
-m4_base=m4
-doc_base=doc
-tests_base=tests
-gnulib_extra_files=''
-
-# Additional gnulib-tool options to use. Use "\newline" to break lines.
-gnulib_tool_option_extras=
-
-# Other locale categories that need message catalogs.
-EXTRA_LOCALE_CATEGORIES=
-
-# Additional xgettext options to use. Use "\\\newline" to break lines.
-XGETTEXT_OPTIONS='\\\
- --flag=_:1:pass-c-format\\\
- --flag=N_:1:pass-c-format\\\
- --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
-'
-
-# Package bug report address and copyright holder for gettext files
-COPYRIGHT_HOLDER='Free Software Foundation, Inc.'
-MSGID_BUGS_ADDRESS=bug-$package@gnu.org
-
-# Files we don't want to import.
-excluded_files=
-
-# File that should exist in the top directory of a checked out hierarchy,
-# but not in a distribution tarball.
-checkout_only_file=README-hacking
-
-# Whether to use copies instead of symlinks.
-copy=false
-
-# Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
-# those files to be generated in directories like lib/, m4/, and po/.
-# Or set it to 'auto' to make this script select which to use based
-# on which version control system (if any) is used in the source directory.
-vc_ignore=auto
-
-# Set this to true in bootstrap.conf to enable --bootstrap-sync by
-# default.
-bootstrap_sync=false
-
-# Use git to update gnulib sources
-use_git=true
-
-check_exists() {
- if test "$1" = "--verbose"; then
- ($2 --version </dev/null) >/dev/null 2>&1
- if test $? -ge 126; then
- # If not found, run with diagnostics as one may be
- # presented with env variables to set to find the right version
- ($2 --version </dev/null)
- fi
- else
- ($1 --version </dev/null) >/dev/null 2>&1
- fi
-
- test $? -lt 126
-}
-
-# find_tool ENVVAR NAMES...
-# -------------------------
-# Search for a required program. Use the value of ENVVAR, if set,
-# otherwise find the first of the NAMES that can be run.
-# If found, set ENVVAR to the program name, die otherwise.
-#
-# FIXME: code duplication, see also gnu-web-doc-update.
-find_tool ()
-{
- find_tool_envvar=$1
- shift
- find_tool_names=$@
- eval "find_tool_res=\$$find_tool_envvar"
- if test x"$find_tool_res" = x; then
- for i; do
- if check_exists $i; then
- find_tool_res=$i
- break
- fi
- done
- fi
- if test x"$find_tool_res" = x; then
- warn_ "one of these is required: $find_tool_names;"
- die "alternatively set $find_tool_envvar to a compatible tool"
- fi
- eval "$find_tool_envvar=\$find_tool_res"
- eval "export $find_tool_envvar"
-}
-
-# Override the default configuration, if necessary.
-# Make sure that bootstrap.conf is sourced from the current directory
-# if we were invoked as "sh bootstrap".
-case "$0" in
- */*) test -r "$0.conf" && . "$0.conf" ;;
- *) test -r "$0.conf" && . ./"$0.conf" ;;
-esac
-
-# Extra files from gnulib, which override files from other sources.
-test -z "${gnulib_extra_files}" && \
- gnulib_extra_files="
- build-aux/install-sh
- build-aux/mdate-sh
- build-aux/texinfo.tex
- build-aux/depcomp
- build-aux/config.guess
- build-aux/config.sub
- doc/INSTALL
-"
-
-if test "$vc_ignore" = auto; then
- vc_ignore=
- test -d .git && vc_ignore=.gitignore
- test -d CVS && vc_ignore="$vc_ignore .cvsignore"
-fi
-
-# Translate configuration into internal form.
-
-# Parse options.
-
-for option
-do
- case $option in
- --help)
- usage
- exit;;
- --gnulib-srcdir=*)
- GNULIB_SRCDIR=${option#--gnulib-srcdir=};;
- --skip-po)
- SKIP_PO=t;;
- --force)
- checkout_only_file=;;
- --copy)
- copy=true;;
- --bootstrap-sync)
- bootstrap_sync=true;;
- --no-bootstrap-sync)
- bootstrap_sync=false;;
- --no-git)
- use_git=false;;
- *)
- die "$option: unknown option";;
- esac
-done
-
-$use_git || test -d "$GNULIB_SRCDIR" \
- || die "Error: --no-git requires --gnulib-srcdir"
-
-if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
- die "Bootstrapping from a non-checked-out distribution is risky."
-fi
-
-# Strip blank and comment lines to leave significant entries.
-gitignore_entries() {
- sed '/^#/d; /^$/d' "$@"
-}
-
-# If $STR is not already on a line by itself in $FILE, insert it at the start.
-# Entries are inserted at the start of the ignore list to ensure existing
-# entries starting with ! are not overridden. Such entries support
-# whitelisting exceptions after a more generic blacklist pattern.
-insert_if_absent() {
- file=$1
- str=$2
- test -f $file || touch $file
- test -r $file || die "Error: failed to read ignore file: $file"
- duplicate_entries=$(gitignore_entries $file | sort | uniq -d)
- if [ "$duplicate_entries" ] ; then
- die "Error: Duplicate entries in $file: " $duplicate_entries
- fi
- linesold=$(gitignore_entries $file | wc -l)
- linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l)
- if [ $linesold != $linesnew ] ; then
- { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \
- || die "insert_if_absent $file $str: failed"
- fi
-}
-
-# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
-# insert_if_absent.
-insert_vc_ignore() {
- vc_ignore_file="$1"
- pattern="$2"
- case $vc_ignore_file in
- *.gitignore)
- # A .gitignore entry that does not start with '/' applies
- # recursively to subdirectories, so prepend '/' to every
- # .gitignore entry.
- pattern=$(echo "$pattern" | sed s,^,/,);;
- esac
- insert_if_absent "$vc_ignore_file" "$pattern"
-}
-
-# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
-found_aux_dir=no
-grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
- >/dev/null && found_aux_dir=yes
-grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
- >/dev/null && found_aux_dir=yes
-test $found_aux_dir = yes \
- || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it"
-
-# If $build_aux doesn't exist, create it now, otherwise some bits
-# below will malfunction. If creating it, also mark it as ignored.
-if test ! -d $build_aux; then
- mkdir $build_aux
- for dot_ig in x $vc_ignore; do
- test $dot_ig = x && continue
- insert_vc_ignore $dot_ig $build_aux
- done
-fi
-
-# Note this deviates from the version comparison in automake
-# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
-# but this should suffice as we won't be specifying old
-# version formats or redundant trailing .0 in bootstrap.conf.
-# If we did want full compatibility then we should probably
-# use m4_version_compare from autoconf.
-sort_ver() { # sort -V is not generally available
- ver1="$1"
- ver2="$2"
-
- # split on '.' and compare each component
- i=1
- while : ; do
- p1=$(echo "$ver1" | cut -d. -f$i)
- p2=$(echo "$ver2" | cut -d. -f$i)
- if [ ! "$p1" ]; then
- echo "$1 $2"
- break
- elif [ ! "$p2" ]; then
- echo "$2 $1"
- break
- elif [ ! "$p1" = "$p2" ]; then
- if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison
- echo "$2 $1"
- elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison
- echo "$1 $2"
- else # numeric, then lexicographic comparison
- lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1)
- if [ "$lp" = "$p2" ]; then
- echo "$1 $2"
- else
- echo "$2 $1"
- fi
- fi
- break
- fi
- i=$(($i+1))
- done
-}
-
-get_version_sed='
-# Move version to start of line.
-s/.*[v ]\([0-9]\)/\1/
-
-# Skip lines that do not start with version.
-/^[0-9]/!d
-
-# Remove characters after the version.
-s/[^.a-z0-9-].*//
-
-# The first component must be digits only.
-s/^\([0-9]*\)[a-z-].*/\1/
-
-#the following essentially does s/5.005/5.5/
-s/\.0*\([1-9]\)/.\1/g
-p
-q'
-
-get_version() {
- app=$1
-
- $app --version >/dev/null 2>&1 || { $app --version; return 1; }
-
- $app --version 2>&1 | sed -n "$get_version_sed"
-}
-
-check_versions() {
- ret=0
-
- while read app req_ver; do
- # We only need libtoolize from the libtool package.
- if test "$app" = libtool; then
- app=libtoolize
- fi
- # Exempt git if --no-git is in effect.
- if test "$app" = git; then
- $use_git || continue
- fi
- # Honor $APP variables ($TAR, $AUTOCONF, etc.)
- appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_')
- test "$appvar" = TAR && appvar=AMTAR
- case $appvar in
- GZIP) ;; # Do not use $GZIP: it contains gzip options.
- PERL::*) ;; # Keep perl modules as-is
- *) eval "app=\${$appvar-$app}" ;;
- esac
-
- # Handle the still-experimental Automake-NG programs specially.
- # They remain named as the mainstream Automake programs ("automake",
- # and "aclocal") to avoid gratuitous incompatibilities with
- # pre-existing usages (by, say, autoreconf, or custom autogen.sh
- # scripts), but correctly identify themselves (as being part of
- # "GNU automake-ng") when asked their version.
- case $app in
- automake-ng|aclocal-ng)
- app=${app%-ng}
- ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || {
- warn_ "Error: '$app' not found or not from Automake-NG"
- ret=1
- continue
- } ;;
- # Another check is for perl modules. These can be written as
- # e.g. perl::XML::XPath in case of XML::XPath module, etc.
- perl::*)
- # Extract module name
- app="${app#perl::}"
- if ! $PERL -m"$app" -e 'exit 0' >/dev/null 2>&1; then
- warn_ "Error: perl module '$app' not found"
- ret=1
- fi
- continue
- ;;
- esac
- if [ "$req_ver" = "-" ]; then
- # Merely require app to exist; not all prereq apps are well-behaved
- # so we have to rely on $? rather than get_version.
- if ! check_exists --verbose $app; then
- warn_ "Error: '$app' not found"
- ret=1
- fi
- else
- # Require app to produce a new enough version string.
- inst_ver=$(get_version $app)
- if [ ! "$inst_ver" ]; then
- warn_ "Error: '$app' not found"
- ret=1
- else
- latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
- if [ ! "$latest_ver" = "$inst_ver" ]; then
- warnf_ '%s\n' \
- "Error: '$app' version == $inst_ver is too old" \
- " '$app' version >= $req_ver is required"
- ret=1
- fi
- fi
- fi
- done
-
- return $ret
-}
-
-print_versions() {
- echo "Program Min_version"
- echo "----------------------"
- printf %s "$buildreq"
- echo "----------------------"
- # can't depend on column -t
-}
-
-# Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6.
-# Also find the compatible sha1 utility on the BSDs
-if test x"$SKIP_PO" = x; then
- find_tool SHA1SUM sha1sum gsha1sum shasum sha1
-fi
-
-use_libtool=0
-# We'd like to use grep -E, to see if any of LT_INIT,
-# AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
-# but that's not portable enough (e.g., for Solaris).
-grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
- && use_libtool=1
-grep '^[ ]*LT_INIT' configure.ac >/dev/null \
- && use_libtool=1
-if test $use_libtool = 1; then
- find_tool LIBTOOLIZE glibtoolize libtoolize
-fi
-
-# gnulib-tool requires at least automake and autoconf.
-# If either is not listed, add it (with minimum version) as a prerequisite.
-case $buildreq in
- *automake*) ;;
- *) buildreq="automake 1.9
-$buildreq" ;;
-esac
-case $buildreq in
- *autoconf*) ;;
- *) buildreq="autoconf 2.59
-$buildreq" ;;
-esac
-
-# When we can deduce that gnulib-tool will require patch,
-# and when patch is not already listed as a prerequisite, add it, too.
-if test -d "$local_gl_dir" \
- && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then
- case $buildreq in
- *patch*) ;;
- *) buildreq="patch -
-$buildreq" ;;
- esac
-fi
-
-if ! printf "$buildreq" | check_versions; then
- echo >&2
- if test -f README-prereq; then
- die "See README-prereq for how to get the prerequisite programs"
- else
- die "Please install the prerequisite programs"
- fi
-fi
-
-# Warn the user if autom4te appears to be broken; this causes known
-# issues with at least gettext 0.18.3.
-probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -)
-if test "x$probe" != xhi; then
- warn_ "WARNING: your autom4te wrapper eats stdin;"
- warn_ "if bootstrap fails, consider upgrading your autotools"
-fi
-
-echo "$0: Bootstrapping from checked-out $package sources..."
-
-# See if we can use gnulib's git-merge-changelog merge driver.
-if $use_git && test -d .git && check_exists git; then
- if git config merge.merge-changelog.driver >/dev/null ; then
- :
- elif check_exists git-merge-changelog; then
- echo "$0: initializing git-merge-changelog driver"
- git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
- git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
- else
- echo "$0: consider installing git-merge-changelog from gnulib"
- fi
-fi
-
-
-cleanup_gnulib() {
- status=$?
- rm -fr "$gnulib_path"
- exit $status
-}
-
-git_modules_config () {
- test -f .gitmodules && git config --file .gitmodules "$@"
-}
-
-if $use_git; then
- gnulib_path=$(git_modules_config submodule.gnulib.path)
- test -z "$gnulib_path" && gnulib_path=gnulib
-fi
-
-# Get gnulib files. Populate $GNULIB_SRCDIR, possibly updating a
-# submodule, for use in the rest of the script.
-
-case ${GNULIB_SRCDIR--} in
--)
- # Note that $use_git is necessarily true in this case.
- if git_modules_config submodule.gnulib.url >/dev/null; then
- echo "$0: getting gnulib files..."
- git submodule init -- "$gnulib_path" || exit $?
- git submodule update -- "$gnulib_path" || exit $?
-
- elif [ ! -d "$gnulib_path" ]; then
- echo "$0: getting gnulib files..."
-
- trap cleanup_gnulib 1 2 13 15
-
- shallow=
- git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2'
- git clone $shallow git://git.sv.gnu.org/gnulib "$gnulib_path" ||
- cleanup_gnulib
-
- trap - 1 2 13 15
- fi
- GNULIB_SRCDIR=$gnulib_path
- ;;
-*)
- # Use GNULIB_SRCDIR directly or as a reference.
- if $use_git && test -d "$GNULIB_SRCDIR"/.git && \
- git_modules_config submodule.gnulib.url >/dev/null; then
- echo "$0: getting gnulib files..."
- if git submodule -h|grep -- --reference > /dev/null; then
- # Prefer the one-liner available in git 1.6.4 or newer.
- git submodule update --init --reference "$GNULIB_SRCDIR" \
- "$gnulib_path" || exit $?
- else
- # This fallback allows at least git 1.5.5.
- if test -f "$gnulib_path"/gnulib-tool; then
- # Since file already exists, assume submodule init already complete.
- git submodule update -- "$gnulib_path" || exit $?
- else
- # Older git can't clone into an empty directory.
- rmdir "$gnulib_path" 2>/dev/null
- git clone --reference "$GNULIB_SRCDIR" \
- "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \
- && git submodule init -- "$gnulib_path" \
- && git submodule update -- "$gnulib_path" \
- || exit $?
- fi
- fi
- GNULIB_SRCDIR=$gnulib_path
- fi
- ;;
-esac
-
-# $GNULIB_SRCDIR now points to the version of gnulib to use, and
-# we no longer need to use git or $gnulib_path below here.
-
-if $bootstrap_sync; then
- cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || {
- echo "$0: updating bootstrap and restarting..."
- case $(sh -c 'echo "$1"' -- a) in
- a) ignored=--;;
- *) ignored=ignored;;
- esac
- exec sh -c \
- 'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \
- $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \
- "$0" "$@" --no-bootstrap-sync
- }
-fi
-
-gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
-<$gnulib_tool || exit $?
-
-# Get translations.
-
-download_po_files() {
- subdir=$1
- domain=$2
- echo "$me: getting translations into $subdir for $domain..."
- cmd=$(printf "$po_download_command_format" "$domain" "$subdir")
- eval "$cmd" && return
- # Fallback to HTTP.
- cmd=$(printf "$po_download_command_format2" "$subdir" "$domain")
- eval "$cmd"
-}
-
-# Mirror .po files to $po_dir/.reference and copy only the new
-# or modified ones into $po_dir. Also update $po_dir/LINGUAS.
-# Note po files that exist locally only are left in $po_dir but will
-# not be included in LINGUAS and hence will not be distributed.
-update_po_files() {
- # Directory containing primary .po files.
- # Overwrite them only when we're sure a .po file is new.
- po_dir=$1
- domain=$2
-
- # Mirror *.po files into this dir.
- # Usually contains *.s1 checksum files.
- ref_po_dir="$po_dir/.reference"
-
- test -d $ref_po_dir || mkdir $ref_po_dir || return
- download_po_files $ref_po_dir $domain \
- && ls "$ref_po_dir"/*.po 2>/dev/null |
- sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return
-
- langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g')
- test "$langs" = '*' && langs=x
- for po in $langs; do
- case $po in x) continue;; esac
- new_po="$ref_po_dir/$po.po"
- cksum_file="$ref_po_dir/$po.s1"
- if ! test -f "$cksum_file" ||
- ! test -f "$po_dir/$po.po" ||
- ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then
- echo "$me: updated $po_dir/$po.po..."
- cp "$new_po" "$po_dir/$po.po" \
- && $SHA1SUM < "$new_po" > "$cksum_file" || return
- fi
- done
-}
-
-case $SKIP_PO in
-'')
- if test -d po; then
- update_po_files po $package || exit
- fi
-
- if test -d runtime-po; then
- update_po_files runtime-po $package-runtime || exit
- fi;;
-esac
-
-symlink_to_dir()
-{
- src=$1/$2
- dst=${3-$2}
-
- test -f "$src" && {
-
- # If the destination directory doesn't exist, create it.
- # This is required at least for "lib/uniwidth/cjk.h".
- dst_dir=$(dirname "$dst")
- if ! test -d "$dst_dir"; then
- mkdir -p "$dst_dir"
-
- # If we've just created a directory like lib/uniwidth,
- # tell version control system(s) it's ignorable.
- # FIXME: for now, this does only one level
- parent=$(dirname "$dst_dir")
- for dot_ig in x $vc_ignore; do
- test $dot_ig = x && continue
- ig=$parent/$dot_ig
- insert_vc_ignore $ig "${dst_dir##*/}"
- done
- fi
-
- if $copy; then
- {
- test ! -h "$dst" || {
- echo "$me: rm -f $dst" &&
- rm -f "$dst"
- }
- } &&
- test -f "$dst" &&
- cmp -s "$src" "$dst" || {
- echo "$me: cp -fp $src $dst" &&
- cp -fp "$src" "$dst"
- }
- else
- # Leave any existing symlink alone, if it already points to the source,
- # so that broken build tools that care about symlink times
- # aren't confused into doing unnecessary builds. Conversely, if the
- # existing symlink's time stamp is older than the source, make it afresh,
- # so that broken tools aren't confused into skipping needed builds. See
- # <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00326.html>.
- test -h "$dst" &&
- src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 &&
- dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 &&
- test "$src_i" = "$dst_i" &&
- both_ls=$(ls -dt "$src" "$dst") &&
- test "X$both_ls" = "X$dst$nl$src" || {
- dot_dots=
- case $src in
- /*) ;;
- *)
- case /$dst/ in
- *//* | */../* | */./* | /*/*/*/*/*/)
- die "invalid symlink calculation: $src -> $dst";;
- /*/*/*/*/) dot_dots=../../../;;
- /*/*/*/) dot_dots=../../;;
- /*/*/) dot_dots=../;;
- esac;;
- esac
-
- echo "$me: ln -fs $dot_dots$src $dst" &&
- ln -fs "$dot_dots$src" "$dst"
- }
- fi
- }
-}
-
-version_controlled_file() {
- parent=$1
- file=$2
- if test -d .git; then
- git rm -n "$file" > /dev/null 2>&1
- elif test -d .svn; then
- svn log -r HEAD "$file" > /dev/null 2>&1
- elif test -d CVS; then
- grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null |
- grep '^/[^/]*/[0-9]' > /dev/null
- else
- warn_ "no version control for $file?"
- false
- fi
-}
-
-# NOTE: we have to be careful to run both autopoint and libtoolize
-# before gnulib-tool, since gnulib-tool is likely to provide newer
-# versions of files "installed" by these two programs.
-# Then, *after* gnulib-tool (see below), we have to be careful to
-# run autoreconf in such a way that it does not run either of these
-# two just-pre-run programs.
-
-# Import from gettext.
-with_gettext=yes
-grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
- with_gettext=no
-
-if test $with_gettext = yes || test $use_libtool = 1; then
-
- tempbase=.bootstrap$$
- trap "rm -f $tempbase.0 $tempbase.1" 1 2 13 15
-
- > $tempbase.0 > $tempbase.1 &&
- find . ! -type d -print | sort > $tempbase.0 || exit
-
- if test $with_gettext = yes; then
- # Released autopoint has the tendency to install macros that have been
- # obsoleted in current gnulib, so run this before gnulib-tool.
- echo "$0: $AUTOPOINT --force"
- $AUTOPOINT --force || exit
- fi
-
- # Autoreconf runs aclocal before libtoolize, which causes spurious
- # warnings if the initial aclocal is confused by the libtoolized
- # (or worse out-of-date) macro directory.
- # libtoolize 1.9b added the --install option; but we support back
- # to libtoolize 1.5.22, where the install action was default.
- if test $use_libtool = 1; then
- install=
- case $($LIBTOOLIZE --help) in
- *--install*) install=--install ;;
- esac
- echo "running: $LIBTOOLIZE $install --copy"
- $LIBTOOLIZE $install --copy
- fi
-
- find . ! -type d -print | sort >$tempbase.1
- old_IFS=$IFS
- IFS=$nl
- for file in $(comm -13 $tempbase.0 $tempbase.1); do
- IFS=$old_IFS
- parent=${file%/*}
- version_controlled_file "$parent" "$file" || {
- for dot_ig in x $vc_ignore; do
- test $dot_ig = x && continue
- ig=$parent/$dot_ig
- insert_vc_ignore "$ig" "${file##*/}"
- done
- }
- done
- IFS=$old_IFS
-
- rm -f $tempbase.0 $tempbase.1
- trap - 1 2 13 15
-fi
-
-# Import from gnulib.
-
-gnulib_tool_options="\
- --import\
- --no-changelog\
- --aux-dir $build_aux\
- --doc-base $doc_base\
- --lib $gnulib_name\
- --m4-base $m4_base/\
- --source-base $source_base/\
- --tests-base $tests_base\
- --local-dir $local_gl_dir\
- $gnulib_tool_option_extras\
-"
-if test $use_libtool = 1; then
- case "$gnulib_tool_options " in
- *' --libtool '*) ;;
- *) gnulib_tool_options="$gnulib_tool_options --libtool" ;;
- esac
-fi
-echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
-$gnulib_tool $gnulib_tool_options --import $gnulib_modules \
- || die "gnulib-tool failed"
-
-for file in $gnulib_files; do
- symlink_to_dir "$GNULIB_SRCDIR" $file \
- || die "failed to symlink $file"
-done
-
-bootstrap_post_import_hook \
- || die "bootstrap_post_import_hook failed"
-
-# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
-# gnulib-populated directories. Such .m4 files would cause aclocal to fail.
-# The following requires GNU find 4.2.3 or newer. Considering the usual
-# portability constraints of this script, that may seem a very demanding
-# requirement, but it should be ok. Ignore any failure, which is fine,
-# since this is only a convenience to help developers avoid the relatively
-# unusual case in which a symlinked-to .m4 file is git-removed from gnulib
-# between successive runs of this script.
-find "$m4_base" "$source_base" \
- -depth \( -name '*.m4' -o -name '*.[ch]' \) \
- -type l -xtype l -delete > /dev/null 2>&1
-
-# Invoke autoreconf with --force --install to ensure upgrades of tools
-# such as ylwrap.
-AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS"
-
-# Some systems (RHEL 5) are using ancient autotools, for which the
-# --no-recursive option had not been invented. Detect that lack and
-# omit the option when it's not supported. FIXME in 2017: remove this
-# hack when RHEL 5 autotools are updated, or when they become irrelevant.
-case $($AUTORECONF --help) in
- *--no-recursive*) AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive";;
-esac
-
-# Tell autoreconf not to invoke autopoint or libtoolize; they were run above.
-echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS"
-AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \
- || die "autoreconf failed"
-
-# Get some extra files from gnulib, overriding existing files.
-for file in $gnulib_extra_files; do
- case $file in
- */INSTALL) dst=INSTALL;;
- build-aux/*) dst=$build_aux/${file#build-aux/};;
- *) dst=$file;;
- esac
- symlink_to_dir "$GNULIB_SRCDIR" $file $dst \
- || die "failed to symlink $file"
-done
-
-if test $with_gettext = yes; then
- # Create gettext configuration.
- echo "$0: Creating po/Makevars from po/Makevars.template ..."
- rm -f po/Makevars
- sed '
- /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
- /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/
- /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'|
- /^XGETTEXT_OPTIONS *=/{
- s/$/ \\/
- a\
- '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
- }
- ' po/Makevars.template >po/Makevars \
- || die 'cannot generate po/Makevars'
-
- # If the 'gettext' module is in use, grab the latest Makefile.in.in.
- # If only the 'gettext-h' module is in use, assume autopoint already
- # put the correct version of this file into place.
- case $gnulib_modules in
- *gettext-h*) ;;
- *gettext*)
- cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \
- || die "cannot create po/Makefile.in.in"
- ;;
- esac
-
- if test -d runtime-po; then
- # Similarly for runtime-po/Makevars, but not quite the same.
- rm -f runtime-po/Makevars
- sed '
- /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
- /^subdir *=.*/s/=.*/= runtime-po/
- /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
- /^XGETTEXT_OPTIONS *=/{
- s/$/ \\/
- a\
- '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
- }
- ' po/Makevars.template >runtime-po/Makevars \
- || die 'cannot generate runtime-po/Makevars'
-
- # Copy identical files from po to runtime-po.
- (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
- fi
-fi
-
-bootstrap_epilogue
-
-echo "$0: done. Now you can run './configure'."
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/bootstrap.conf b/bootstrap.conf
deleted file mode 100644
index f56fd1a..0000000
--- a/bootstrap.conf
+++ /dev/null
@@ -1,62 +0,0 @@
-# Bootstrap configuration.
-
-# Copyright (C) 2007, 2009-2010, 2017 Sergey Poznyakoff
-
-# Wyslij-po is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-
-# Wyslij-po is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with Wyslij-po. If not, see <http://www.gnu.org/licenses/>. */
-
-gnulib_mk=Makefile.am
-gnulib_name=libgnu
-
-gnulib_modules="\
- configmake\
- gettext-h\
- obstack
- xalloc"
-
-## I18N
-NLS_MARKERS="\
-mu_error:1\
-"
-# Additional xgettext options to use. Use "\\\newline" to break lines.
-if [ -n "$NLS_MARKERS" ]; then
- XGETTEXT_OPTIONS="$XGETTEXT_OPTIONS "`echo $NLS_MARKERS | tr ' ' '\n' | sed 's/.*/ --flag=&:pass-c-format\\\\\\\\\\\\/'`"
-"
-fi
-
-# Bug address
-extract_bug_address='
- /^AC-INIT-BUG-ADDRESS/{
- s/[][]//g
- s/.*=//p
- }
-'
-
-COPYRIGHT_HOLDER="Sergey Poznyakoff"
-MSGID_BUGS_ADDRESS=`echo 'changequote([,])' | m4 -D'AC_INIT=AC-INIT-BUG-ADDRESS=$3' - configure.ac | sed -n "$extract_bug_address"`
-if test -z "$MSGID_BUGS_ADDRESS"; then
- MSGID_BUGS_ADDRESS="bug-${package}@gnu.org.ua"
-fi
-
-if [ -r .bootstrap ]; then
- echo "$0: Reading configuration file .bootstrap"
- eval set -- "`sed 's/#.*$//;/^$/d' .bootstrap | tr '\n' ' '` $*"
-fi
-
-for dir in build-aux lib m4
-do
- test -d $dir || mkdir $dir
-done
-
-
-
diff --git a/configure.ac b/configure.ac
index 34409fe..8676812 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
# -*- Autoconf -*-
# Configuration for Wyslij-po
#
-# Copyright (C) 2007, 2009-2010, 2016-2018 Sergey Poznyakoff
+# Copyright (C) 2007-2021 Sergey Poznyakoff
#
# Wyslij-po is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -16,8 +16,8 @@
# You should have received a copy of the GNU General Public License
# along with Wyslij-po. If not, see <http://www.gnu.org/licenses/>. */
-AC_PREREQ(2.63)
-AC_INIT([wyslij-po], [3.2], [bug-wyslij-po@gnu.org.ua],
+AC_PREREQ(2.64)
+AC_INIT([wyslij-po], [3.2.90], [bug-wyslij-po@gnu.org.ua],
[wyslij-po], [http://www.gnu.org.ua/software/wyslij-po])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_SRCDIR([src/wyslij-po.h])
@@ -29,7 +29,6 @@ AM_SILENT_RULES([yes])
# Checks for programs.
AC_PROG_CC
-gl_EARLY
# Checks for libraries.
@@ -38,36 +37,15 @@ gl_EARLY
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_SIZE_T
-# Checks for library functions.
-gl_INIT
-
# Check for GNU Mailutils
AM_GNU_MAILUTILS(3.4, [auth mailer])
# Gettext.
AM_ICONV
AM_GNU_GETTEXT([external], [need-formatstring-macros])
-AM_GNU_GETTEXT_VERSION([0.17])
+AM_GNU_GETTEXT_VERSION([0.19])
-# Doc hints.
-# Select a rendition level:
-# DISTRIB for stable releases (at most one dot in the version number)
-# and maintenance releases (two dots, patchlevel < 50)
-# PROOF for alpha releases.
-# PUBLISH can only be required manually when running make in doc/
-AC_SUBST(RENDITION)
-case `echo $VERSION|sed 's/[[^.]]//g'` in
-""|".") RENDITION=DISTRIB;;
-"..") if test `echo $VERSION | sed 's/.*\.//'` -lt 50; then
- RENDITION=DISTRIB
- else
- RENDITION=PROOF
- fi;;
-*) RENDITION=PROOF;;
-esac
-
AC_CONFIG_FILES([Makefile
- lib/Makefile
src/Makefile
doc/Makefile
po/Makefile.in])
diff --git a/doc/.gitignore b/doc/.gitignore
new file mode 100644
index 0000000..7637ab3
--- /dev/null
+++ b/doc/.gitignore
@@ -0,0 +1,4 @@
+/stamp-vti
+/version.texi
+/wyslij-po.info
+/wyslij-po.t2d/
diff --git a/doc/Config b/doc/Config
index f230372..a199aca 100644
--- a/doc/Config
+++ b/doc/Config
@@ -1,5 +1,5 @@
# Texi2any configuration for Wyslij-po documentation. -*- perl -*-
-# Copyright (C) 2009, 2015, 2017 Sergey Poznyakoff
+# Copyright (C) 2009-2021 Sergey Poznyakoff
#
# Wyslij-po is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/doc/Makefile.am b/doc/Makefile.am
index c0cd600..060098a 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,5 +1,5 @@
# This file is part of wyslij-po
-# Copyright (C) 2007, 2015-2017 Sergey Poznyakoff
+# Copyright (C) 2007-2021 Sergey Poznyakoff
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -19,10 +19,8 @@
info_TEXINFOS=wyslij-po.texi
wyslij_po_TEXINFOS=\
fdl.texi\
- rendition.texi\
values.texi
-
EXTRA_DIST = \
check-docs.sh\
gendocs_template\
@@ -32,51 +30,6 @@ EXTRA_DIST = \
clean-local:
rm -rf manual
-# Checking
-check-format:
- @if test -n "`cat $(info_TEXINFOS) $(wyslij_po_TEXINFOS) | tr -d -c '\t'`"; then \
- echo "Sources contain tabs; run make untabify"; \
- false; \
- fi
-
-check-options:
- @check-docs.sh options \
- '/argp_option options\[\] = /,/^}/s/[ \t]*{ *"\([^,"]*\)".*/\1/pg' \
- 's/@opindex *\([^@,]*\).*/\1/p' \
- $(top_srcdir)/src/main.c -- \
- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I$(srcdir) -E - \
- $(info_TEXINFOS)
-
-check-refs:
- @sed -e = $(info_TEXINFOS) $(wyslij_po_TEXINFOS) | \
- sed -n 'N;/@FIXME-.*ref/{s/\(^[0-9][0-9]*\).*@FIXME-.*ref{\([^}]*\)}.*/$(info_TEXINFOS):\1: \2/gp}' > $@-t; \
- if [ -s $@-t ]; then echo "Unresolved cross-references:"; cat $@-t;\
- fi
- rm -f $@-t
-
-check-fixmes:
- @sed -e = $(info_TEXINFOS) | \
- sed -n 'N;/@FIXME{/{s/\(^[0-9][0-9]*\).*@FIXME{\([^}]*\).*/$(info_TEXINFOS):\1: \2/gp}' > $@-t; \
- if [ -s $@-t ]; then echo "Unresolved FIXMEs:"; cat $@-t;\
- fi
- rm -f $@-t
-
-check-unrevised:
- @grep -Hn @UNREVISED $(info_TEXINFOS) > $@-t; \
- if [ -s $@-t ]; then \
- echo "Unrevised nodes:"; \
- cat $@-t; \
- rm $@-t; \
- false;\
- else \
- rm $@-t; \
- fi
-
-all-check-docs: check-format check-options check-refs check-fixmes check-unrevised
-
-check-docs:
- $(MAKE) -k all-check-docs
-
#
master-menu:
@@ -87,14 +40,9 @@ untabify:
final: untabify master-menu
-# The rendering level is one of PUBLISH, DISTRIB or PROOF.
-# Just call `make RENDITION=PROOF [target]' if you want PROOF rendition.
-
-MAKEINFOFLAGS=-D$(RENDITION)
-
GENDOCS=gendocs.sh
-TEXI2DVI=texi2dvi -t '@set $(RENDITION)' -E
+TEXI2DVI=texi2dvi --tidy -t '@set $(RENDITION)' -E
# Make sure you set TEXINPUTS.
# TEXINPUTS=/usr/share/texmf/pdftex/plain/misc/ is ok for most distributions
@@ -103,7 +51,7 @@ manual:
TEXINPUTS=$(srcdir):$(top_srcdir)/build-aux:$(TEXINPUTS) \
MAKEINFO="$(MAKEINFO) $(MAKEINFOFLAGS)" \
TEXI2DVI="$(TEXI2DVI) -t @finalout" \
- $(GENDOCS) --no-copy-images $(PACKAGE) '$(PACKAGE_NAME) manual'
+ $(SHELL) $(GENDOCS) --no-copy-images $(PACKAGE) '$(PACKAGE_NAME) manual'
manual.tar.bz2: manual
tar cfj manual.tar.bz2 manual
diff --git a/doc/check-docs.sh b/doc/check-docs.sh
index 17a2409..6595772 100755
--- a/doc/check-docs.sh
+++ b/doc/check-docs.sh
@@ -1,6 +1,6 @@
#! /bin/sh
# This file is part of mailfrom filter.
-# Copyright (C) 2006-2007, 2017 Sergey Poznyakoff
+# Copyright (C) 2006-2021 Sergey Poznyakoff
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/doc/gendocs.sh b/doc/gendocs.sh
index 8ac3a06..38c4d05 100755
--- a/doc/gendocs.sh
+++ b/doc/gendocs.sh
@@ -4,8 +4,8 @@
scriptversion=2015-02-28.17
-# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
-# Free Software Foundation, Inc.
+# Copyright 2003-2013, 2015, 2017, 2020-2021 Free Software Foundation,
+# Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/doc/rendition.texi b/doc/rendition.texi
deleted file mode 100644
index 016583d..0000000
--- a/doc/rendition.texi
+++ /dev/null
@@ -1,85 +0,0 @@
-@c Let's use the concept of 'renditions' by Fra@,{c}ois Pinard
-@c I extended it by adding a FIXME_FOOTNOTE variable, which controls
-@c whether FIXME information should be placed in footnotes or
-@c inlined.
-
-@c ======================================================================
-@c This document has three levels of rendition: PUBLISH, DISTRIB or PROOF,
-@c as decided by @set symbols. The PUBLISH rendition does not show
-@c notes or marks asking for revision. Most users will prefer having more
-@c information, even if this information is not fully revised for adequacy,
-@c so DISTRIB is the default for distributions. The PROOF rendition
-@c show all marks to the point of ugliness, but is nevertheless useful to
-@c those working on the manual itself.
-@c ======================================================================
-
-@c Set this symbol if you wish FIXMEs to appear in footnotes, instead
-@c of being inserted into the text.
-@c @set PROOF_FOOTNOTED
-
-@ifclear PUBLISH
-@ifclear DISTRIB
-@ifclear PROOF
-@set DISTRIB
-@end ifclear
-@end ifclear
-@end ifclear
-
-@ifset PUBLISH
-@set RENDITION The book, version
-@end ifset
-
-@ifset DISTRIB
-@set RENDITION FTP release, version
-@end ifset
-
-@ifset PROOF
-@set RENDITION Proof reading version
-@end ifset
-
-@c Output marks for nodes needing revision, but not in PUBLISH rendition.
-
-@macro UNREVISED
-@ifclear PUBLISH
-@quotation
-@emph{(This message will disappear, once this node revised.)}
-@end quotation
-@end ifclear
-@end macro
-
-@c Output various FIXME information only in PROOF rendition.
-
-@macro FIXME{string}
-@ifset PROOF
-@ifset PROOF_FOOTNOTED
-@footnote{@strong{FIXME:} \string\}
-@end ifset
-@ifclear PROOF_FOOTNOTED
-@cartouche
-@strong{<FIXME>} \string\ @strong{</>}
-@end cartouche
-@end ifclear
-@end ifset
-
-@end macro
-
-@macro FIXME-ref{string}
-@ifset PROOF
-@strong{<REF>} \string\ @strong{</>}
-@end ifset
-
-@end macro
-
-@macro FIXME-pxref{string}
-@ifset PROOF
-@strong{<PXREF>} \string\ @strong{</>}
-@end ifset
-
-@end macro
-
-@macro FIXME-xref{string}
-@ifset PROOF
-@strong{<XREF>} \string\ @strong{</>}
-@end ifset
-
-@end macro
diff --git a/doc/values.texi b/doc/values.texi
index 4689589..0accf38 100644
--- a/doc/values.texi
+++ b/doc/values.texi
@@ -1,5 +1,5 @@
@c This file is part of wyslij-po manual.
-@c Copyright (C) 2007, 2009, 2017 Sergey Poznyakoff
+@c Copyright (C) 2007-2021 Sergey Poznyakoff
@c See the file wyslij-po.texi for copying conditions.
@c *******************************************************************
diff --git a/doc/wyslij-po.texi b/doc/wyslij-po.texi
index 0ef41a8..32edb56 100644
--- a/doc/wyslij-po.texi
+++ b/doc/wyslij-po.texi
@@ -1,5 +1,4 @@
\input texinfo @c -*-texinfo-*-
-@smallbook
@c %**start of header
@setfilename wyslij-po.info
@settitle Wyslij-po Manual
@@ -13,7 +12,6 @@
@syncodeindex pr cp
@include version.texi
-@include rendition.texi
@include values.texi
@macro xopindex{option,text}
@@ -36,7 +34,7 @@
@end ifinfo
@copying
-Copyright @copyright{} 2007, 2009, 2017 Sergey Poznyakoff
+Copyright @copyright{} 2007-2021 Sergey Poznyakoff
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -480,9 +478,9 @@ is separated from it with a colon. For the @samp{sendmail} protocol,
the mailer location sets the full file name of the sendmail-compatible
@acronym{MTA} binary, for example:
-@smallexample
+@example
sendmail:/usr/sbin/sendmail
-@end smallexample
+@end example
A special form of a sendmail @acronym{URL}, consisting of protocol
specification only (@samp{sendmail:}) is also allowed. It means
@@ -497,12 +495,12 @@ server, and, optionally, the port number. If the port number is
present, it is separated from the rest of @acronym{URL} by a colon.
For example:
-@smallexample
+@example
@group
smtp://remote.server.net
smtp://remote.server.net:24
@end group
-@end smallexample
+@end example
@xopindex{mailer, described}
The @acronym{URL} of the mailer to use is set using @option{--mailer}
@@ -644,9 +642,9 @@ Mailer Statement,, mailutils, GNU Mailutils Manual}.
Set command line of the utility used for file compression. For
example:
-@smallexample
+@example
compress "/usr/bin/bzip2 -c";
-@end smallexample
+@end example
@xref{gzip}, for a detailed discussion of file compression.
@@ -665,9 +663,9 @@ Set @acronym{TP} robot (recipient) email address. @xref{Sending}.
Set emails of carbon copy recipients. @var{Email} may contain multiple
email addresses, separated by commas:
-@smallexample
+@example
cc "<tp@@localhost>,<bitbucket@@remote.tld>";
-@end smallexample
+@end example
@noindent
Notice the use of quote characters.
@@ -688,9 +686,9 @@ folder. @var{Folder} can be any valid mailbox @acronym{URL}
example instructs @command{wyslij-po} to keep copies of the messages
it sends in a @acronym{MH} folder @samp{+po-out}:
-@smallexample
+@example
fcc "mh:~/Mail/po-out";
-@end smallexample
+@end example
@end deffn
@deffn {Configuration} from @var{email}
@@ -767,9 +765,9 @@ string is then used as the full language name (the look-up key).
For example, the following entry:
-@smallexample
+@example
pt_BR Brazilian Portuguese
-@end smallexample
+@end example
@noindent
means that when the string @samp{Brazilian Portuguese} is encountered
diff --git a/po/.gitignore b/po/.gitignore
new file mode 100644
index 0000000..afecbe1
--- /dev/null
+++ b/po/.gitignore
@@ -0,0 +1,17 @@
+/remove-potcdate.sin
+/quot.sed
+/insert-header.sin
+/en@quot.header
+/en@boldquot.header
+/boldquot.sed
+/Rules-quot
+/Makevars.template
+/Makefile.in.in
+/.reference/
+/LINGUAS
+/POTFILES
+/*.gmo
+/*.po
+/stamp-po
+/wyslij-po.pot
+/remove-potcdate.sed
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000..c84a344
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,46 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# 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_ \
+ --flag=_:1:pass-c-format\
+ --flag=N_:1:pass-c-format\
+ --flag=error:3:c-format --flag=error_at_line:5:c-format\
+ --flag=mu_error:1:pass-c-format\
+ $${end_of_xgettext_options+}
+
+# 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 = Sergey Poznyakoff
+
+# 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 = $(PACKAGE_BUGREPORT)
+
+# 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 =
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 84fbaf6..705d1a0 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,5 +1,5 @@
# List of files which contain translatable strings.
-# Copyright (C) 2007, 2009, 2017 Sergey Poznyakoff
+# Copyright (C) 2007-2021 Sergey Poznyakoff
# GPLv3+, see the file ../COPYING for details.
src/main.c
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644
index 0000000..6dd1cd0
--- /dev/null
+++ b/src/.gitignore
@@ -0,0 +1 @@
+/wyslij-po \ No newline at end of file
diff --git a/src/Makefile.am b/src/Makefile.am
index d7588c1..9bb2a91 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,5 +1,5 @@
# This file is part of Wyslij-po
-# Copyright (C) 2007, 2009, 2014, 2017 Sergey Poznyakoff
+# Copyright (C) 2007-2021 Sergey Poznyakoff
#
# Wyslij-po is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -23,13 +23,13 @@ wyslij_po_SOURCES = \
wyslij-po.h
sysconf_DATA = wyslij-po.lc
-EXTRA_DIST = wyslij-po.lc
+EXTRA_DIST = wyslij-po.lc gettext.h
AM_CPPFLAGS=\
-DSYSCONFDIR=\"$(sysconfdir)\"\
+ -DLOCALEDIR=\"$(datarootdir)/locale\"\
+ -I $(srcdir)\
$(MAILUTILS_INCLUDES)\
- $(MU_COMMON_INCLUDES)\
- -I${top_srcdir}/lib\
- -I${top_builddir}/lib
+ $(MU_COMMON_INCLUDES)
-LDADD = ../lib/libgnu.a $(MAILUTILS_LIBS) @LIBINTL@
+LDADD = $(MAILUTILS_LIBS) @LIBINTL@
diff --git a/src/gettext.h b/src/gettext.h
new file mode 100644
index 0000000..249668a
--- /dev/null
+++ b/src/gettext.h
@@ -0,0 +1,301 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+ Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2020 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option
+ or through "#define ENABLE NLS 0" before including this file. */
+#if defined ENABLE_NLS && ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions. */
+# include <libintl.h>
+
+/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
+ the gettext() and ngettext() macros. This is an alternative to calling
+ textdomain(), and is useful for libraries. */
+# ifdef DEFAULT_TEXT_DOMAIN
+# undef gettext
+# define gettext(Msgid) \
+ dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
+# undef ngettext
+# define ngettext(Msgid1, Msgid2, N) \
+ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
+# endif
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+ chokes if dcgettext is defined as a macro. So include it now, to make
+ later inclusions of <locale.h> a NOP. We don't include <libintl.h>
+ as well because people using "gettext.h" will not include <libintl.h>,
+ and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+ is OK. */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
+ <libintl.h>, which chokes if dcgettext is defined as a macro. So include
+ it now, to make later inclusions of <libintl.h> a NOP. */
+#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
+# include <cstdlib>
+# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H
+# include <libintl.h>
+# endif
+#endif
+
+/* Disabled NLS.
+ The casts to 'const char *' serve the purpose of producing warnings
+ for invalid uses of the value returned from these functions.
+ On pre-ANSI systems without 'const', the config.h file is supposed to
+ contain "#define const". */
+# undef gettext
+# define gettext(Msgid) ((const char *) (Msgid))
+# undef dgettext
+# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
+# undef dcgettext
+# define dcgettext(Domainname, Msgid, Category) \
+ ((void) (Category), dgettext (Domainname, Msgid))
+# undef ngettext
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 \
+ ? ((void) (Msgid2), (const char *) (Msgid1)) \
+ : ((void) (Msgid1), (const char *) (Msgid2)))
+# undef dngettext
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+ ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
+# undef dcngettext
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+ ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N))
+# undef textdomain
+# define textdomain(Domainname) ((const char *) (Domainname))
+# undef bindtextdomain
+# define bindtextdomain(Domainname, Dirname) \
+ ((void) (Domainname), (const char *) (Dirname))
+# undef bind_textdomain_codeset
+# define bind_textdomain_codeset(Domainname, Codeset) \
+ ((void) (Domainname), (const char *) (Codeset))
+
+#endif
+
+/* Prefer gnulib's setlocale override over libintl's setlocale override. */
+#ifdef GNULIB_defined_setlocale
+# undef setlocale
+# define setlocale rpl_setlocale
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+ extraction of messages, but does not call gettext(). The run-time
+ translation is done at a different place in the code.
+ The argument, String, should be a literal string. Concatenated strings
+ and other string expressions won't work.
+ The macro's expansion is not parenthesized, so that it is suitable as
+ initializer for static 'char[]' or 'const char[]' variables. */
+#define gettext_noop(String) String
+
+/* The separator between msgctxt and msgid in a .mo file. */
+#define GETTEXT_CONTEXT_GLUE "\004"
+
+/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
+ MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be
+ short and rarely need to change.
+ The letter 'p' stands for 'particular' or 'special'. */
+#ifdef DEFAULT_TEXT_DOMAIN
+# define pgettext(Msgctxt, Msgid) \
+ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#else
+# define pgettext(Msgctxt, Msgid) \
+ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#endif
+#define dpgettext(Domainname, Msgctxt, Msgid) \
+ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
+ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
+#ifdef DEFAULT_TEXT_DOMAIN
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#else
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#endif
+#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
+ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+pgettext_aux (const char *domain,
+ const char *msg_ctxt_id, const char *msgid,
+ int category)
+{
+ const char *translation = dcgettext (domain, msg_ctxt_id, category);
+ if (translation == msg_ctxt_id)
+ return msgid;
+ else
+ return translation;
+}
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+npgettext_aux (const char *domain,
+ const char *msg_ctxt_id, const char *msgid,
+ const char *msgid_plural, unsigned long int n,
+ int category)
+{
+ const char *translation =
+ dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+ if (translation == msg_ctxt_id || translation == msgid_plural)
+ return (n == 1 ? msgid : msgid_plural);
+ else
+ return translation;
+}
+
+/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID
+ can be arbitrary expressions. But for string literals these macros are
+ less efficient than those above. */
+
+#include <string.h>
+
+/* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported.
+ This relates to the -Wvla and -Wvla-larger-than warnings, enabled in
+ the default GCC many warnings set. This allows programs to disable use
+ of VLAs, which may be unintended, or may be awkward to support portably,
+ or may have security implications due to non-deterministic stack usage. */
+
+#if (!defined GNULIB_NO_VLA \
+ && (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
+ /* || (__STDC_VERSION__ == 199901L && !defined __HP_cc)
+ || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ ))
+# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
+#else
+# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
+#endif
+
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+#include <stdlib.h>
+#endif
+
+#define pgettext_expr(Msgctxt, Msgid) \
+ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
+#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
+ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcpgettext_expr (const char *domain,
+ const char *msgctxt, const char *msgid,
+ int category)
+{
+ size_t msgctxt_len = strlen (msgctxt) + 1;
+ size_t msgid_len = strlen (msgid) + 1;
+ const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+ char buf[1024];
+ char *msg_ctxt_id =
+ (msgctxt_len + msgid_len <= sizeof (buf)
+ ? buf
+ : (char *) malloc (msgctxt_len + msgid_len));
+ if (msg_ctxt_id != NULL)
+#endif
+ {
+ int found_translation;
+ memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+ msg_ctxt_id[msgctxt_len - 1] = '\004';
+ memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+ translation = dcgettext (domain, msg_ctxt_id, category);
+ found_translation = (translation != msg_ctxt_id);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ if (msg_ctxt_id != buf)
+ free (msg_ctxt_id);
+#endif
+ if (found_translation)
+ return translation;
+ }
+ return msgid;
+}
+
+#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
+ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcnpgettext_expr (const char *domain,
+ const char *msgctxt, const char *msgid,
+ const char *msgid_plural, unsigned long int n,
+ int category)
+{
+ size_t msgctxt_len = strlen (msgctxt) + 1;
+ size_t msgid_len = strlen (msgid) + 1;
+ const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+ char buf[1024];
+ char *msg_ctxt_id =
+ (msgctxt_len + msgid_len <= sizeof (buf)
+ ? buf
+ : (char *) malloc (msgctxt_len + msgid_len));
+ if (msg_ctxt_id != NULL)
+#endif
+ {
+ int found_translation;
+ memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+ msg_ctxt_id[msgctxt_len - 1] = '\004';
+ memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+ translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+ found_translation = !(translation == msg_ctxt_id || translation == msgid_plural);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ if (msg_ctxt_id != buf)
+ free (msg_ctxt_id);
+#endif
+ if (found_translation)
+ return translation;
+ }
+ return (n == 1 ? msgid : msgid_plural);
+}
+
+#endif /* _LIBGETTEXT_H */
diff --git a/src/http.c b/src/http.c
index 35d09bb..bbdc695 100644
--- a/src/http.c
+++ b/src/http.c
@@ -1,5 +1,5 @@
/* This file is part of Wyslij-po
- Copyright (C) 2007, 2009-2010, 2017 Sergey Poznyakoff
+ Copyright (C) 2007-2021 Sergey Poznyakoff
Wyslij-po is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -52,35 +52,12 @@ http_stream_wait (mu_stream_t stream, int flags, size_t *attempt)
return ETIMEDOUT;
}
-static char *
-obstack_s_expand (struct obstack *pstk, const char *tmpl, const char *val)
-{
- while (*tmpl)
- {
- if (tmpl[0] == '%' && tmpl[1] == 's')
- {
- obstack_grow (pstk, val, strlen (val));
- tmpl += 2;
- }
- else
- {
- obstack_1grow (pstk, *tmpl);
- tmpl++;
- }
- }
- obstack_1grow (pstk, 0);
- return obstack_finish (pstk);
-}
-
static int
-parse_project_url (mu_url_t url, struct obstack *pstk,
- char **phost, char **ppath, unsigned *pport)
+parse_project_url (mu_url_t url, char **phost, char **ppath, unsigned *pport)
{
int status;
- const char *s;
- size_t size;
- char *host;
-
+ char const *s;
+
status = mu_url_sget_scheme (url, &s);
if (status)
{
@@ -95,7 +72,7 @@ parse_project_url (mu_url_t url, struct obstack *pstk,
return 1;
}
- status = mu_url_get_host (url, NULL, 0, &size);
+ status = mu_url_aget_host (url, phost);
if (status)
{
mu_error (_("cannot extract host information from the url `%s': %s"),
@@ -103,21 +80,23 @@ parse_project_url (mu_url_t url, struct obstack *pstk,
return 1;
}
- host = obstack_alloc (pstk, size + 1);
- mu_url_get_host (url, host, size + 1, NULL);
-
- *phost = host;
- s = mu_url_to_string (url);
- obstack_grow (pstk, s, strlen (s) + 1);
- *ppath = obstack_finish (pstk);
-
+ status = mu_url_aget_path (url, ppath);
+ if (status)
+ {
+ free (*phost);
+ //FIXME
+ mu_error (_("cannot extract host information from the url `%s': %s"),
+ mu_url_to_string (url), mu_strerror (status));
+ return 1;
+ }
+
mu_url_get_port (url, pport);
return 0;
}
static int
-create_project_url (const char *project, struct obstack *pstk,
+create_project_url (const char *project,
char **phost, char **ppath, unsigned *pport)
{
char *url_str = NULL;
@@ -146,57 +125,19 @@ create_project_url (const char *project, struct obstack *pstk,
return 1;
}
mu_wordsplit_free (&ws);
- rc = parse_project_url (url, pstk, phost, ppath, pport);
+ rc = parse_project_url (url, phost, ppath, pport);
mu_url_destroy (&url);
free (url_str);
return rc;
}
-
+
static int
-read_project_page (const char *project, struct obstack *pstk)
-{
+http_send (mu_stream_t stream, char const *cmd)
+{
int ret, off = 0;
- mu_stream_t stream;
size_t nb, size;
size_t attempt;
- char *host;
- char *path;
- char *cmd;
- unsigned port = 0;
-
- if (create_project_url (project, pstk, &host, &path, &port))
- return 1;
-
- if (port == 0)
- port = 80;
-
- cmd = obstack_s_expand (pstk, "GET %s HTTP/1.0\r\n\r\n", path);
-
- if (verbose > 2)
- mu_printf (_("Connecting to %s:%u\n"), host, port);
-
- ret = mu_tcp_stream_create (&stream, host, port, MU_STREAM_NONBLOCK);
- if (ret != 0 && !(ret == EAGAIN || ret == EINPROGRESS))
- {
- mu_error ("mu_tcp_stream_create: %s", mu_strerror (ret));
- return 1;
- }
-
- for (attempt = 0; ret; )
- {
- if ((ret == EAGAIN || ret == EINPROGRESS) && attempt < io_attempts)
- {
- ret = http_stream_wait (stream, MU_STREAM_READY_WR, &attempt);
- if (ret == 0)
- {
- ret = mu_stream_open (stream);
- continue;
- }
- }
- mu_error ("mu_stream_open: %s", mu_strerror (ret));
- return 1;
- }
-
+
for (attempt = 0, size = strlen (cmd); size > 0; )
{
ret = mu_stream_write (stream, cmd + off, size, &nb);
@@ -234,11 +175,16 @@ read_project_page (const char *project, struct obstack *pstk)
return 1;
}
}
+ return 0;
+}
- if (verbose > 2)
- mu_printf (_("Getting %s\n"), path);
+static int
+http_read (mu_stream_t stream, mu_opool_t pool)
+{
+ int ret;
+ size_t nb;
+ size_t attempt = 0;
- attempt = 0;
for (;;)
{
ret = mu_stream_read (stream, rbuf, sizeof (rbuf), &nb);
@@ -246,7 +192,7 @@ read_project_page (const char *project, struct obstack *pstk)
{
if (nb == 0)
break;
- obstack_grow (pstk, rbuf, nb);
+ mu_opool_append (pool, rbuf, nb);
}
else if (ret == EAGAIN)
{
@@ -271,9 +217,64 @@ read_project_page (const char *project, struct obstack *pstk)
ret = mu_stream_close (stream);
if (ret != 0)
mu_error ("mu_stream_close: %s", mu_strerror (ret));
+ return ret;
+}
+
+static int
+read_project_page (const char *project, mu_opool_t pool)
+{
+ int ret;
+ char *host;
+ char *path;
+ char *cmd;
+ unsigned port = 0;
+ mu_stream_t stream;
+ size_t attempt;
+
+ if (create_project_url (project, &host, &path, &port))
+ return 1;
+
+ if (port == 0)
+ port = 80;
+
+ if (mu_asprintf (&cmd,
+ "GET /%s HTTP/1.1\r\nHost:%s\r\nConnection:close\r\n\r\n",
+ path,
+ host))
+ mu_alloc_die ();
+
+ if (verbose > 2)
+ mu_printf (_("Connecting to %s:%u\n"), host, port);
+
+ ret = mu_tcp_stream_create (&stream, host, port, MU_STREAM_NONBLOCK);
+ for (attempt = 0; ret; )
+ {
+ if ((ret == EAGAIN || ret == EINPROGRESS) && attempt < io_attempts)
+ {
+ ret = http_stream_wait (stream, MU_STREAM_READY_WR, &attempt);
+ if (ret == 0)
+ {
+ ret = mu_stream_open (stream);
+ continue;
+ }
+ }
+ mu_error ("mu_stream_open: %s", mu_strerror (ret));
+ return 1;
+ }
+
+ if (ret == 0 && (ret = http_send (stream, cmd)) == 0)
+ {
+ if (verbose > 2)
+ mu_printf (_("Getting /%s\n"), path);
+ ret = http_read (stream, pool);
+ }
mu_stream_destroy (&stream);
- return 0;
+ free (host);
+ free (path);
+ free (cmd);
+
+ return ret;
}
static int
@@ -335,20 +336,22 @@ int
verify_pot_version (const char *project, const char *vers)
{
int rc;
- struct obstack stk;
+ mu_opool_t pool;
if (!pot_regex)
return 1;
if (verbose > 1)
mu_printf (_("Verifying POT file version for `%s'\n"), project);
- obstack_init (&stk);
- rc = read_project_page (project, &stk);
+ mu_opool_create (&pool, MU_OPOOL_ENOMEMABRT);
+ rc = read_project_page (project, pool);
if (rc == 0)
{
- char *text = obstack_finish (&stk);
+ char *text;
regmatch_t match[2];
-
+
+ mu_opool_append_char (pool, 0);
+ text = mu_opool_finish (pool, NULL);
if (http_ok (text))
exit (1);
@@ -364,15 +367,16 @@ verify_pot_version (const char *project, const char *vers)
if (len > 4 && memcmp (text + match[1].rm_eo - 4, ".pot", 4) == 0)
len -= 4;
- package_str = obstack_alloc (&stk, len + 1);
- memcpy (package_str, text + match[1].rm_so, len);
- package_str[len] = 0;
-
- len = strlen (project) + 1 + strlen (vers);
- pot_str = obstack_alloc (&stk, len + 1);
- strcpy (pot_str, project);
- strcat (pot_str, "-");
- strcat (pot_str, vers);
+ mu_opool_append (pool, text + match[1].rm_so, len);
+ mu_opool_append_char (pool, 0);
+ package_str = mu_opool_finish (pool, NULL);
+
+ mu_opool_appendz (pool, project);
+ mu_opool_append_char (pool, '-');
+ mu_opool_appendz (pool, vers);
+ mu_opool_append_char (pool, 0);
+ pot_str = mu_opool_finish (pool, NULL);
+
if (strcmp (package_str, pot_str))
{
mu_error (_("POT project string (%s) does not match latest version (%s)"),
@@ -381,7 +385,7 @@ verify_pot_version (const char *project, const char *vers)
}
}
}
- obstack_free (&stk, NULL);
+ mu_opool_destroy (&pool);
return rc;
}
@@ -401,6 +405,6 @@ compile_pot_regex_str ()
mu_error (_("Invalid regex: no subexpressions"));
exit(1);
}
- pot_regex = xmalloc (sizeof (pot_regex[0]));
+ pot_regex = mu_alloc (sizeof (pot_regex[0]));
*pot_regex = re;
}
diff --git a/src/main.c b/src/main.c
index d84fed6..0e8ae8c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,5 +1,5 @@
/* This file is part of Wyslij-po
- Copyright (C) 2007-2010, 2016-2017 Sergey Poznyakoff
+ Copyright (C) 2007-2021 Sergey Poznyakoff
Wyslij-po is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,7 +15,6 @@
along with Wyslij-po. If not, see <http://www.gnu.org/licenses/>. */
#include "wyslij-po.h"
-#include "configmake.h"
static char prog_doc[] = N_("Submit PO files to the Translation Project");
static char args_doc[] = N_("FILE ...");
@@ -211,7 +210,7 @@ static char *
concat (const char *a, const char *b, const char *c)
{
size_t size = strlen (a) + strlen (b) + (c ? strlen (c) : 0 ) + 1;
- char *p = xmalloc (size);
+ char *p = mu_alloc (size);
strcpy (p, a);
strcat (p, b);
if (c)
diff --git a/src/po.c b/src/po.c
index 7be1556..ebd4444 100644
--- a/src/po.c
+++ b/src/po.c
@@ -1,5 +1,5 @@
/* This file is part of Wyslij-po
- Copyright (C) 2007, 2010, 2017 Sergey Poznyakoff
+ Copyright (C) 2007-2021 Sergey Poznyakoff
Wyslij-po is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -163,7 +163,7 @@ po_read_line (struct po_file *file, char **buf, size_t *size)
if (i == *size)
{
*size += 512;
- *buf = xrealloc (*buf, *size);
+ *buf = mu_realloc (*buf, *size);
}
(*buf)[i] = po_cur_char (file);
po_next_char (file);
@@ -173,7 +173,7 @@ po_read_line (struct po_file *file, char **buf, size_t *size)
if (i == *size)
{
*size += 512;
- *buf = xrealloc (*buf, *size);
+ *buf = mu_realloc (*buf, *size);
}
(*buf)[i] = 0;
return i;
@@ -185,7 +185,8 @@ po_header (const char *name)
struct po_file pof;
size_t bufsize = 0;
char *buf = NULL;
- struct obstack stk;
+ mu_opool_t pool;
+ size_t size;
int status;
struct mu_wordsplit ws;
int wsflags = MU_WRDSF_NOVAR | MU_WRDSF_NOCMD
@@ -209,7 +210,7 @@ po_header (const char *name)
exit (1);
}
- obstack_init (&stk);
+ mu_opool_create (&pool, MU_OPOOL_ENOMEMABRT);
while (1)
{
char *p;
@@ -232,10 +233,10 @@ po_header (const char *name)
exit (1);
}
wsflags |= MU_WRDSF_REUSE;
- obstack_grow (&stk, ws.ws_wordv[0], strlen (ws.ws_wordv[0]));
+ mu_opool_appendz (pool, ws.ws_wordv[0]);
}
- obstack_1grow (&stk, '\n');
- obstack_1grow (&stk, 0);
+ mu_opool_append_char (pool, '\n');
+ mu_opool_append_char (pool, 0);
po_close (&pof);
if (wsflags & MU_WRDSF_REUSE)
@@ -243,14 +244,14 @@ po_header (const char *name)
free (buf);
- str = obstack_finish (&stk);
- status = mu_header_create (&header, str, strlen (str) + 1);
+ str = mu_opool_finish (pool, &size);
+ status = mu_header_create (&header, str, size);
if (status)
{
mu_error (_("cannot create header: %s"), mu_strerror (status));
exit (1);
}
- obstack_free (&stk, NULL);
+ mu_opool_destroy (&pool);
}
char *
@@ -385,7 +386,7 @@ restore_file_name (const char *file_name, char **pemail)
if (mu_asprintf (&name, "%s-%s.%s%s",
ws.ws_wordv[0], ws.ws_wordv[1], langcode, PO_SUF))
- xalloc_die ();
+ mu_alloc_die ();
mu_wordsplit_free (&ws);
diff --git a/src/wyslij-po.h b/src/wyslij-po.h
index 71f879d..b1d0109 100644
--- a/src/wyslij-po.h
+++ b/src/wyslij-po.h
@@ -1,5 +1,5 @@
/* This file is part of Wyslij-po
- Copyright (C) 2007, 2009-2010, 2017 Sergey Poznyakoff
+ Copyright (C) 2007-2021 Sergey Poznyakoff
Wyslij-po is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,11 +20,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <mailutils/mailutils.h>
-#define obstack_chunk_alloc malloc
-#define obstack_chunk_free free
-#include "obstack.h"
#include <regex.h>
-#include <xalloc.h>
#include <gettext.h>
#include <locale.h>

Return to:

Send suggestions and report system problems to the System administrator.