update-manpages.sh 2.28 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/bin/sh
#
# Copyright © 2010-2012 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/>.

18 19
rm -rf man1 man2 man3 man4 man5 man6 man7 man8 links/*links
mkdir man1 man2 man3 man4 man5 man6 man7 man8
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

while read package; do
	echo "Updating package '$package'"
	latest_deb=`ls downloads/$package\_*.deb 2>/dev/null | tail -n1`
	if [ -z $latest_deb ]; then
		echo "Warning: Could not find .deb for package '$package'"
	else
		data_tar=`ar t $latest_deb | grep data.tar`
		ar x $latest_deb $data_tar
		mkdir -p tmp/$package
		tar xaf $data_tar --directory=tmp/$package
		for mandir in tmp/$package/usr/share/man/man?/; do
			section=`echo $mandir | cut -d/ -f6`
			# Only copy directories with files
			files=`ls $mandir`
			if [ -n "$files" ]; then
				mkdir -p tmp/$package/$section
				# Remove manpages which are links
				for manpage in $mandir/*; do
					existing=`readlink $manpage`
					if [ -n "$existing" ]; then
						linked_section=`basename $existing .gz | sed -e "s/.\+\.//"`
						echo man$linked_section/`basename $existing` $section/`basename $manpage` >> tmp.links
						rm $manpage
					fi
				done
				cp $mandir/* tmp/$package/$section
				gzip -d tmp/$package/$section/*
				# Remove manpages which contain only .so links
				for manpage in tmp/$package/$section/*; do
					existing=`grep "^\.so" $manpage | sed -e "s/^\.so //"`
					if [ -n "$existing" ]; then
						echo $existing.gz $section/`basename $manpage`.gz >> tmp.links
						rm $manpage
					fi
				done
				# Copy remaining manpages
				cp tmp/$package/$section/* $section
			fi
		done
		if [ -e tmp.links ]; then
61
			LC_ALL=C sort tmp.links > links/$package.links
62 63 64 65 66 67
		fi
		rm -rf $data_tar tmp.links
	fi
done < packages.list

rm -rf tmp