#! /bin/sh
#
# cvs.sh
#
# This file contains support code from Makefile.common
# It defines a shell function for each known target
# and then does a case to call the correct function.
call_and_fix_autoconf()
{
$AUTOCONF || exit 1
if test -r configure.in.in ; then
perl -pi -e "print \"if test \\\"x\\\$with_fast_perl\\\" = \\\"xyes\\\"; then\
\\n perl -i.bak \\\$ac_aux_dir/conf.change.pl \\\$CONFIG_STATUS\
\\\\\\n || mv \\\$CONFIG_STATUS.bak \\\$CONFIG_STATUS\
\\n rm -f \\\$CONFIG_STATUS.bak\\nfi\
\\n\" if /^\\s*chmod\\s+.*\\+x\\s+.*CONFIG_STATUS/;" configure
fi
}
strip_makefile()
{
if test -f $makefile_wo; then :; else
perl -e '$in=0; while ( <> ) { $in = 1 if ($_=~ m/^if /); print $_ unless ($in); $in = 0 if ($_ =~ m/^endif/); }' < Makefile.am.in > $makefile_wo
fi
}
check_autotool_versions()
{
AUTOCONF_VERSION=`$AUTOCONF --version | head -n 1`
case $AUTOCONF_VERSION in
Autoconf*2.[5-9]* | autoconf*2.[5-9]* ) : ;;
"" )
echo "*** AUTOCONF NOT FOUND!."
echo "*** KDE requires autoconf 2.52, 2.53 or 2.54"
exit 1
;;
* )
echo "*** YOU'RE USING $AUTOCONF_VERSION."
echo "*** KDE requires autoconf 2.52, 2.53 or 2.54"
exit 1
;;
esac
AUTOHEADER_VERSION=`$AUTOHEADER --version | head -n 1`
case $AUTOHEADER_VERSION in
Autoconf*2.[5-9]* | autoheader*2.[5-9]* ) : ;;
"" )
echo "*** AUTOHEADER NOT FOUND!."
echo "*** KDE requires autoheader 2.52 or 2.53 (part of autoconf)"
exit 1
;;
* )
echo "*** YOU'RE USING $AUTOHEADER_VERSION."
echo "*** KDE requires autoheader 2.52 or 2.53 (part of autoconf)"
exit 1
;;
esac
AUTOMAKE_STRING=`$AUTOMAKE --version | head -n 1`
case $AUTOMAKE_STRING in
automake*1.5d* )
echo "*** YOU'RE USING $AUTOMAKE_STRING."
echo "*** KDE requires automake 1.6"
exit 1
;;
automake*1.[6-9] | automake*1.[6-9].* | automake*1.1[0-9] | automake*1.1[0-9].* ) : ;;
"" )
echo "*** AUTOMAKE NOT FOUND!."
echo "*** KDE requires automake 1.6"
exit 1
;;
unsermake* ) :
echo "*** YOU'RE USING UNSERMAKE."
echo "*** GOOD LUCK!! :)"
;;
* )
echo "*** YOU'RE USING $AUTOMAKE_STRING."
echo "*** KDE requires automake 1.6"
exit 1
;;
esac
}
cvs()
{
check_autotool_versions
### Produce acinclude.m4
if grep '\$(top_srcdir)/acinclude.m4:' $makefile_am >/dev/null; then
echo "*** Creating acinclude.m4"
rm -f acinclude.m4 configure.files
strip_makefile
$MAKE -f $makefile_wo top_srcdir=. ./acinclude.m4
fi
### Make new subdirs and configure.in.
### The make calls could be optimized away here,
### with a little thought.
if test -r configure.in.in; then
rm -f subdirs configure.in
echo "*** Creating list of subdirectories"
subdirs
echo "*** Creating configure.in"
configure_files
strip_makefile
$MAKE -f $makefile_wo top_srcdir=. ./configure.in || exit 1
fi
echo "*** Creating aclocal.m4"
$ACLOCAL || exit 1
echo "*** Creating configure"
call_and_fix_autoconf
if egrep "^AM_CONFIG_HEADER" configure.in >/dev/null 2>&1; then
echo "*** Creating config.h template"
$AUTOHEADER || exit 1
fi
echo "*** Creating Makefile templates"
$AUTOMAKE || exit 1
if test -z "$UNSERMAKE"; then
echo "*** Postprocessing Makefile templates"
perl -w admin/am_edit || exit 1
fi
if egrep "^cvs-local:" $makefile_am >/dev/null; then \
strip_makefile
$MAKE -f $makefile_wo cvs-local top_srcdir=. || exit 1
fi
echo "*** Creating date/time stamp"
touch stamp-h.in
echo "*** Finished"
echo " Don't forget to run ./configure"
echo " If you haven't done so in a while, run ./configure --help"
}
dist()
{
check_autotool_versions
###
### First build all of the files necessary to do just "make"
###
if grep '\$(top_srcdir)/acinclude.m4:' $makefile_am >/dev/null; then
strip_makefile
$MAKE -f $makefile_wo top_srcdir=. ./acinclude.m4
fi
if test -r configure.in.in; then
subdirs
configure_files
strip_makefile
$MAKE -f $makefile_wo top_srcdir=. ./configure.in
fi
$ACLOCAL
$AUTOHEADER
$AUTOMAKE --foreign --include-deps
perl -w admin/am_edit
call_and_fix_autoconf
touch stamp-h.in
if grep "^cvs-local:" $makefile_am >/dev/null; then
strip_makefile
$MAKE -f $makefile_wo cvs-local top_srcdir=.
fi
###
### Then make messages
###
if test -d po; then
LIST=`find ./po -name "*.po"`
for i in $LIST; do
file2=`echo $i | sed -e "s#\.po#\.gmo#"`
msgfmt -o $file2 $i || touch $file2
done
fi
if grep "^cvs-dist-local:" $makefile_am >/dev/null; then
strip_makefile
$MAKE -f $makefile_wo cvs-dist-local top_srcdir=.
fi
}
subdir_dist()
{
$ACLOCAL
$AUTOHEADER
$AUTOMAKE --foreign --include-deps
perl -w ../admin/am_edit
call_and_fix_autoconf
touch stamp-h.in
}
configure_in()
{
rm -f configure.in configure.in.new
kde_use_qt_param=
test -f configure.files || { echo "need configure.files for configure.in"; exit 1; }
cat `egrep -v "configure.in.bot" < configure.files` > configure.in.new
echo "KDE_CREATE_SUBDIRSLIST" >> configure.in.new
if test -f Makefile.am.in; then
subdirs=`cat subdirs`
for dir in $subdirs; do
dir=`echo $dir | sed -e "s,[-+.],_,g"`
echo "AM_CONDITIONAL($dir""_SUBDIR_included, test \"x\$$dir""_SUBDIR_included\" = xyes)" >> configure.in.new
done
fi
# echo "AC_OUTPUT( \\" >> configure.in.new
mfs=`find . -type d -print | fgrep -v "/." | \
sed -e "s#\./##" -e "/^debian/d" | sort`
for i in $mfs; do
topleveldir=`echo $i| sed -e "s#/.*##"`
if test -f $topleveldir/configure.in; then
continue
fi
if test -f $i/Makefile.am; then :; else
continue
fi
if test -s inst-apps; then
if grep "\"^$topleveldir\"" inst-apps > /dev/null 2>&1; then
continue
fi
fi
if test "$i" = "."; then
echo "AC_CONFIG_FILES([ Makefile ])" >> configure.in.new
else
echo "AC_CONFIG_FILES([ $i/Makefile ])" >> configure.in.new
fi
if test -n "$UNSERMAKE"; then
if test "$i" = "."; then
echo "AC_CONFIG_FILES([ Makefile.rules ])" >> configure.in.new
else
echo "AC_CONFIG_FILES([ $i/Makefile.rules ])" >> configure.in.new
fi
fi
done
files=`cat configure.files`
list=`egrep '^dnl AC_OUTPUT\(.*\)' $files | sed -e "s#^.*dnl AC_OUTPUT(\(.*\))#\1#"`
for file in $list; do
echo "AC_CONFIG_FILES([ $file ])" >> configure.in.new
done
if test -n "$UNSERMAKE"; then
echo "AC_CONFIG_FILES([ MakeVars ])" >> configure.in.new
fi
echo "AC_OUTPUT" >> configure.in.new
modulename=
if test -f configure.in.in; then
if head -n 2 configure.in.in | egrep "^#MIN_CONFIG\(.*\)$" > /dev/null; then
kde_use_qt_param=`cat configure.in.in | sed -n -e "s/#MIN_CONFIG(\(.*\))/\1/p"`
fi
if head -n 2 configure.in.in | egrep "^#MIN_CONFIG" > /dev/null; then
line=`grep "^AM_INIT_AUTOMAKE(" configure.in.in`
if test -n "$line"; then
modulename=`echo $line | sed -e "s#AM_INIT_AUTOMAKE(\([^,]*\),.*#\1#"`
VERSION=`echo $line | sed -e "s#AM_INIT_AUTOMAKE([^,]*, *\([^)]*\)).*#\1#"`
fi
sed -e "s#AM_INIT_AUTOMAKE([^@].*#dnl PACKAGE set before#" \
configure.in.new > configure.in && mv configure.in configure.in.new
fi
fi
if test -z "$VERSION" || test "$VERSION" = "@VERSION@"; then
VERSION="\"3.1.3\""
fi
if test -z "$modulename" || test "$modulename" = "@MODULENAME@"; then
modulename=`pwd`;
modulename=`basename $modulename`
esc_VERSION=`echo $VERSION | sed -e "s#[^.0-9a-zA-Z]##g"`
modulename=`echo $modulename | sed -e "s#-$esc_VERSION##"`
fi
if test -n "$kde_use_qt_param"; then
sed -e "s#^dnl KDE_USE_QT#KDE_USE_QT($kde_use_qt_param)#" \
configure.in.new > configure.in && mv configure.in configure.in.new
fi
sed -e "s#@MODULENAME@#$modulename#" configure.in.new |
sed -e "s#@VERSION@#$VERSION#" > configure.in
botfiles=`cat configure.files | egrep "configure.in.bot"`
test -n "$botfiles" && cat $botfiles >> configure.in
cat $admindir/configure.in.bot.end >> configure.in
rm -f configure.in.new
}
configure_files()
{
admindir=NO
for i in . .. ../.. ../../..; do
if test -x $i/admin; then admindir=$i/admin; break; fi
done
rm -f configure.files
touch configure.files
if test -f configure.in.in && head -n 2 configure.in.in | grep "^#MIN_CONFIG" > /dev/null; then
echo $admindir/configure.in.min >> configure.files
fi
test -f configure.in.in && echo configure.in.in >> configure.files
list=`find . -name "configure.in.in" -o -name "configure.in.bot" | \
sed -e "s,/configure,/aaaconfigure," | sort | sed -e "s,/aaaconfigure,/configure,"`
for i in $list; do if test -f $i && test `dirname $i` != "." ; then
echo $i >> configure.files
fi; done
test -f configure.in.mid && echo configure.in.mid >> configure.files
test -f configure.in.bot && echo configure.in.bot >> configure.files
}
subdirs()
{
dirs=
compilefirst=`sed -ne 's#^COMPILE_FIRST[ ]*=[ ]*##p' $makefile_am | head -n 1`
compilelast=`sed -ne 's#^COMPILE_LAST[ ]*=[ ]*##p' $makefile_am | head -n 1`
for i in `ls -1`; do
if test -f $i/Makefile.am; then
case " $compilefirst $compilelast " in
*" $i "*) ;;
*) dirs="$dirs $i"
esac
fi
done
: > ./_SUBDIRS
for d in $compilefirst; do
echo $d >> ./_SUBDIRS
done
(for d in $dirs; do
list=`sed -ne "s#^COMPILE_BEFORE_$d""[ ]*=[ ]*##p" $makefile_am | head -n 1`
for s in $list; do
echo $s $d
done
list=`sed -ne "s#^COMPILE_AFTER_$d""[ ]*=[ ]*##p" $makefile_am | head -n 1`
for s in $list; do
echo $d $s
done
echo $d $d
done ) | tsort >> ./_SUBDIRS
for d in $compilelast; do
echo $d >> ./_SUBDIRS
done
if test -f Makefile.am.in; then
cp Makefile.am.in Makefile.am
if test -n "$UNSERMAKE"; then
topsubdirs=
for i in $compilefirst $dirs $compilelast; do
vari=`echo $i | sed -e "s,[-+],_,g"`
echo "if $vari""_SUBDIR_included" >> Makefile.am
echo "$vari""_SUBDIR=$i" >> Makefile.am
echo "endif" >> Makefile.am
topsubdirs="$topsubdirs \$($vari""_SUBDIR)"
done
echo "SUBDIRS=$topsubdirs" >> Makefile.am
else
echo "SUBDIRS="'$(TOPSUBDIRS)' >> Makefile.am
fi
fi
if test -r subdirs && diff subdirs _SUBDIRS > /dev/null; then
rm -f _SUBDIRS
fi
test -r _SUBDIRS && mv _SUBDIRS subdirs || true
}
cvs_clean()
{
if test -d CVS; then :; else
echo "You don't have a toplevel CVS directory."
echo "You most certainly didn't use cvs to get these sources."
echo "But this function depends on cvs's information."
exit 1
fi
perl $admindir/cvs-clean.pl
}
package_merge()
{
catalogs=$POFILES
for cat in $catalogs; do
msgmerge -o $cat.new $cat $PACKAGE.pot
if test -s $cat.new; then
grep -v "\"POT-Creation" $cat.new > $cat.new.2
grep -v "\"POT-Creation" $cat >> $cat.new.1
if diff $cat.new.1 $cat.new.2; then
rm $cat.new
else
mv $cat.new $cat
fi
rm -f $cat.new.1 $cat.new.2
fi
done
}
package_messages()
{
rm -rf po.backup
mkdir po.backup
for i in `ls -1 po/*.pot 2>/dev/null | sed -e "s#po/##"`; do
egrep -v '^#([^:]|$)' po/$i | egrep '^.*[^ ]+.*$' | grep -v "\"POT-Creation" > po.backup/$i
cp po/$i po.backup/backup_$i
touch -r po/$i po.backup/backup_$i
rm po/$i
done
podir=${podir:-$PWD/po}
files=`find . -name Makefile.am | xargs egrep -l '^messages:' `
dirs=`for i in $files; do echo \`dirname $i\`; done`
tmpname="$PWD/messages.log"
if test -z "$EXTRACTRC"; then EXTRACTRC=extractrc ; fi
if test -z "$PREPARETIPS"; then PREPARETIPS=preparetips ; fi
export EXTRACTRC PREPARETIPS
for subdir in $dirs; do
test -z "$VERBOSE" || echo "Making messages in $subdir"
(cd $subdir
if test -n "`grep -e '^messages:.*rc.cpp' Makefile.am`"; then
$EXTRACTRC *.rc *.ui > rc.cpp
else
candidates=`ls -1 *.rc *.ui 2>/dev/null`
if test -n "$candidates"; then
echo "$subdir has *.rc or *.ui files, but not correct messages line"
fi
fi
if test -n "`grep -r KAboutData *.c* *.C* 2>/dev/null`"; then
echo -e 'i18n("_: NAME OF TRANSLATORS\\n"\n"Your names")\ni18n("_: EMAIL OF TRANSLATORS\\n"\n"Your emails")' > _translatorinfo.cpp
else echo " " > _translatorinfo.cpp
fi
perl -e '$mes=0; while (<STDIN>) { next if (/^(if|else|endif)\s/); if (/^messages:/) { $mes=1; print $_; next; } if ($mes) { if (/$\\(XGETTEXT\)/ && / -o/) { s/ -o \$\(podir\)/ _translatorinfo.cpp -o \$\(podir\)/ } print $_; } else { print $_; } }' < Makefile.am | egrep -v '^include ' > _transMakefile
$MAKE -s -f _transMakefile podir=$podir EXTRACTRC="$EXTRACTRC" PREPARETIPS="$PREPARETIPS" \
XGETTEXT="${XGETTEXT:-xgettext} -C -ki18n -ktr2i18n -kI18N_NOOP -ktranslate -kaliasLocale -x ${includedir:-$KDEDIR/include}/kde.pot" \
messages
) 2>&1 | grep -v '^make\[1\]' > $tmpname
test -s $tmpname && { echo $subdir ; cat "$tmpname"; }
test -f $subdir/rc.cpp && rm -f $subdir/rc.cpp
rm -f $subdir/_translatorinfo.cpp
rm -f $subdir/_transMakefile
done
rm -f $tmpname
for i in `ls -1 po.backup/*.pot 2>/dev/null | sed -e "s#po.backup/##" | egrep -v '^backup_'`; do
test -f po/$i || echo "disappeared: $i"
done
for i in `ls -1 po/*.pot 2>/dev/null | sed -e "s#po/##"`; do
msgmerge -q -o po/$i po/$i po/$i
egrep -v '^#([^:]|$)' po/$i | egrep '^.*[^ ]+.*$' | grep -v "\"POT-Creation" > temp.pot
if test -f po.backup/$i && test -n "`diff temp.pot po.backup/$i`"; then
echo "will update $i"
msgmerge -q po.backup/backup_$i po/$i > temp.pot
mv temp.pot po/$i
else
if test -f po.backup/backup_$i; then
test -z "$VERBOSE" || echo "I'm restoring $i"
mv po.backup/backup_$i po/$i
rm po.backup/$i
else
echo "will add $i"
fi
fi
done
rm -f temp.pot
rm -rf po.backup
}
admindir=`echo "$0" | sed 's%[\\/][^\\/][^\\/]*$%%'`
test "x$admindir" = "x$0" && admindir=.
test "x$MAKE" = x && MAKE=make
makefile_am=Makefile.am
makefile_wo=Makefile.am
if test -f Makefile.am.in; then
makefile_am=Makefile.am.in
makefile_wo=Makefile.am.in.wo
fi
# Sucking AUTOCONF detection code - commented out
#. $admindir/detect-autoconf.sh
AUTOCONF="autoconf"
AUTOHEADER="autoheader"
AUTOM4TE="autom4te"
AUTOMAKE="automake"
ACLOCAL="aclocal -I m4"
###
### Main
###
arg=`echo $1 | tr '\-.' __`
case $arg in
cvs | dist | subdir_dist | configure_in | configure_files | subdirs | \
cvs_clean | package_merge | package_messages ) $arg ;;
* ) echo "Usage: cvs.sh <target>"
echo "Target can be one of:"
echo " cvs cvs-clean dist"
echo " configure.in configure.files"
echo " package-merge package-messages"
echo ""
echo "Usage: anything but $1"
exit 1 ;;
esac
if test -f Makefile.am.in.wo; then
rm Makefile.am.in.wo
fi
exit 0