summaryrefslogtreecommitdiffstats
path: root/templates/generate-one-template.sh
blob: c24fa4d8af9f41ff0f0cfddc0fdedad9a66a6f3b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/sh
#
# Copyright © 2019 Dr. Tobias Quathamer <toddy@debian.org>
#
# 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/>.

# Require one argument (the name of the manpage)
if [ -z "$1" ]; then
	echo "Please specify the name of the manpage, e.g. 'arch.1'." >&2
	exit 1
fi

# Normalize to the basename of the manpage
manpage=$(basename $1)
potfile=$(find man* -type f -name "$manpage.pot")

# If the file exists, create a backup.
if [ -f "$potfile" ]; then
  cp "$potfile" backup.pot
fi

tmp1=$(mktemp)
tmp2=$(mktemp)

# Get the current time to ensure that all potfiles
# have the exact same date and time of creation in the header.
# datetime=$(date --iso-8601=minutes | sed -e "s/T/ /")
datetime=$(date "+%Y-%m-%d %H:%M%z")

# Find all upstream manpages with a matching name
potfiles=""
upstream_manpages=$(find ../upstream/*/ -type f -name "$manpage" | LC_ALL=C sort)
if [ -z "$upstream_manpages" ]; then
  echo "The manpage '$manpage' could not be found." >&2
  exit 1
fi

# Create pot file
echo "Generating pot file for manpage '$manpage'"

for upstream_manpage in $upstream_manpages; do
  # Create a template for each distribution
  distribution=$(echo $upstream_manpage | cut -d/ -f3)

  potfile=$(mktemp --tmpdir "$distribution.$manpage.XXX.pot")
  potfiles="$potfiles $potfile"
  ./generate-template.sh $distribution $manpage > $potfile

  # Ensure the same timestamp
  if [ -f "$potfile" ]; then
    sed -i -e "s/^\"POT-Creation-Date: .*$/\"POT-Creation-Date: $datetime\\\\n\"/" "$potfile"
  fi
done
mandir=$(basename $(dirname $upstream_manpage))

# New long extensions are used (e.g. 3type), shorten this to just the number:
mandir=$(echo $mandir|cut -c 1-4)

# Merge all pot files into one
msgcat -o "$mandir/$manpage.pot" $potfiles

# Remove random characters from multiple file information
# and reformat the comment into something more readable, e.g.:
# "#. #-#-#-#-#  archlinux.fclose.3.0bX.pot (PACKAGE VERSION)  #-#-#-#-#"
sed -i -e "s/^#\(\.\?\) #-#-#-#-# \([^.]*\)\.\(.\+\)\.[A-Za-z0-9]\{3\}\.pot/#\1 #-#-#-#-# \2: \3.pot/" "$mandir/$manpage.pot"

# Determine if the only change is the "POT-Creation-Date:" header
# If so, copy back the backup to revert that change
if [ -f "$mandir/$manpage.pot" -a -f "backup.pot" ]; then
  sed -f remove-potcdate.sed < "backup.pot" > "$tmp1"
  sed -f remove-potcdate.sed < "$mandir/$manpage.pot" > "$tmp2"
  if cmp "$tmp1" "$tmp2" >/dev/null 2>&1; then
    mv "backup.pot" "$mandir/$manpage.pot"
  fi
fi

rm -f $tmp1 $tmp2 backup.pot $potfiles