5 # This file contains support code from Makefile.common
6 # It defines a shell function for each known target
7 # and then does a case to call the correct function.
11 call_and_fix_autoconf()
14 if test -r configure.in.in ; then
15 perl -pi -e "print \"if test \\\"x\\\$with_fast_perl\\\" = \\\"xyes\\\"; then\
16 \\n perl -i.bak \\\$ac_aux_dir/conf.change.pl \\\$CONFIG_STATUS\
17 \\\\\\n || mv \\\$CONFIG_STATUS.bak \\\$CONFIG_STATUS\
18 \\n rm -f \\\$CONFIG_STATUS.bak\\nfi\
19 \\n\" if /^\\s*chmod\\s+.*\\+x\\s+.*CONFIG_STATUS/; s,^#line.*LINENO.*\$,/* \$& */, ;" configure
25 if test ! -f $makefile_wo; then
26 perl -e '$in=0; while ( <> ) { $in = 1 if ($_ =~ m/^if / ); print $_ unless ($in || $_ =~ m/^include /); $in = 0 if ($_ =~ m/^endif/); }' < $makefile_am > $makefile_wo
30 check_autotool_versions()
32 required_autoconf_version="2.53 or newer"
33 AUTOCONF_VERSION=`$AUTOCONF --version | head -n 1`
34 case $AUTOCONF_VERSION in
35 Autoconf*2.5* | autoconf*2.5* ) : ;;
36 Autoconf*2.6* | autoconf*2.6* ) : ;;
38 echo "*** AUTOCONF NOT FOUND!."
39 echo "*** KDE requires autoconf $required_autoconf_version"
43 echo "*** YOU'RE USING $AUTOCONF_VERSION."
44 echo "*** KDE requires autoconf $required_autoconf_version"
49 AUTOHEADER_VERSION=`$AUTOHEADER --version | head -n 1`
50 case $AUTOHEADER_VERSION in
51 Autoconf*2.6* | autoheader*2.6* ) : ;;
53 echo "*** AUTOHEADER NOT FOUND!."
54 echo "*** KDE requires autoheader $required_autoconf_version"
58 echo "*** YOU'RE USING $AUTOHEADER_VERSION."
59 echo "*** KDE requires autoheader $required_autoconf_version"
66 AUTOMAKE_STRING=`$AUTOMAKE --version | head -n 1`
67 required_automake_version="1.6.1 or newer"
68 case $AUTOMAKE_STRING in
69 automake*1.5d* | automake*1.5* | automake*1.5-* )
70 echo "*** YOU'RE USING $AUTOMAKE_STRING."
71 echo "*** KDE requires automake $required_automake_version"
74 automake*1.6.* | automake*1.7* | automake*1.8* | automake*1.9*) : ;;
76 echo "*** AUTOMAKE NOT FOUND!."
77 echo "*** KDE requires automake $required_automake_version"
81 echo "*** YOU'RE USING UNSERMAKE."
82 echo "*** GOOD LUCK!! :)"
86 echo "*** YOU'RE USING $AUTOMAKE_STRING."
87 echo "*** KDE requires automake $required_automake_version"
91 unset required_automake_version
96 check_autotool_versions
99 ### Make new subdirs and configure.in.
100 ### The make calls could be optimized away here,
101 ### with a little thought.
102 if test -r configure.in.in; then
104 echo "*** Creating list of subdirectories"
107 if test -r Makefile.am.in; then
108 echo "*** Creating Makefile.am"
109 if grep '\$(top_srcdir)/Makefile.am:' $makefile_am >/dev/null; then
111 $MAKE -f $makefile_wo top_srcdir=. ./Makefile.am || exit 1
117 echo "*** Creating configure.in"
118 if grep '\$(top_srcdir)/configure.in:' $makefile_am >/dev/null; then
120 $MAKE -f $makefile_wo top_srcdir=. ./configure.in || exit 1
126 echo "*** Creating aclocal.m4"
127 $ACLOCAL $ACLOCALFLAGS || exit 1
128 echo "*** Creating configure"
129 call_and_fix_autoconf
131 if egrep "^AM_CONFIG_HEADER" configure.in >/dev/null 2>&1; then
132 echo "*** Creating config.h template"
133 $AUTOHEADER || exit 1
136 echo "*** Creating Makefile templates"
139 if test -z "$UNSERMAKE"; then
140 echo "*** Postprocessing Makefile templates"
141 perl -w admin/am_edit || exit 1
144 if egrep "^cvs-local:" $makefile_am >/dev/null; then \
146 $MAKE -f $makefile_wo cvs-local top_srcdir=. || exit 1
149 echo "*** Creating date/time stamp"
153 echo " Don't forget to run ./configure"
154 echo " If you haven't done so in a while, run ./configure --help"
159 check_autotool_versions
162 ### First build all of the files necessary to do just "make"
165 if test -r configure.in.in; then
169 if test -r Makefile.am.in; then
170 if grep '\$(top_srcdir)/Makefile.am:' $makefile_am >/dev/null; then
172 $MAKE -f $makefile_wo top_srcdir=. ./Makefile.am || exit 1
178 if grep '\$(top_srcdir)/configure.in:' $makefile_am >/dev/null; then
180 $MAKE -f $makefile_wo top_srcdir=. ./configure.in || exit 1
185 $ACLOCAL $ACLOCALFLAGS
186 if egrep "^AM_CONFIG_HEADER" configure.in >/dev/null 2>&1; then
187 echo "*** Creating config.h template"
188 $AUTOHEADER || exit 1
191 if test -z "$UNSERMAKE"; then
192 echo "*** Postprocessing Makefile templates"
193 perl -w admin/am_edit || exit 1
195 call_and_fix_autoconf
197 if grep "^cvs-local:" $makefile_am >/dev/null; then
199 $MAKE -f $makefile_wo cvs-local top_srcdir=.
203 ### Then make messages
206 LIST=`find ./po -name "*.po"`
208 file2=`echo $i | sed -e "s#\.po#\.gmo#"`
209 msgfmt -o $file2 $i || touch $file2
212 if grep "^cvs-dist-local:" $makefile_am >/dev/null; then
214 $MAKE -f $makefile_wo cvs-dist-local top_srcdir=.
220 $ACLOCAL $ACLOCALFLAGS
223 AUTOMAKE_STRING=`$AUTOMAKE --version | head -n 1`
224 case $AUTOMAKE_STRING in
228 perl -w ../admin/am_edit --path=../admin
230 call_and_fix_autoconf
236 rm -f configure.in configure.in.new
238 test -f configure.files || { echo "need configure.files for configure.in"; exit 1; }
239 list=`fgrep -v "configure.in.bot" < configure.files | fgrep -v "configure.in.mid"`
241 for file in $list; do
242 echo "dnl =======================================================" >> configure.in.new
243 echo "dnl FILE: $file" >> configure.in.new
244 echo "dnl =======================================================" >> configure.in.new
245 echo "" >> configure.in.new
246 cat $file >> configure.in.new
248 echo "KDE_CREATE_SUBDIRSLIST" >> configure.in.new
249 if test -f Makefile.am.in; then
250 subdirs=`cat subdirs`
251 for dir in $subdirs; do
252 vdir=`echo $dir | sed -e 's,[-+.@],_,g'`
253 echo "AM_CONDITIONAL($vdir""_SUBDIR_included, test \"x\$$vdir""_SUBDIR_included\" = xyes)" >> configure.in.new
254 if test -f "$dir/configure.in"; then
255 echo "if test \"x\$$vdir""_SUBDIR_included\" = xyes; then " >> configure.in.new
256 echo " AC_CONFIG_SUBDIRS($dir)" >> configure.in.new
257 echo "fi" >> configure.in.new
262 echo "AC_CONFIG_FILES([ Makefile ])" >> configure.in.new
264 if test -f inst-apps; then
265 topleveldirs=`cat inst-apps`
268 for dir in `ls -1d * | sort`; do
269 if test "$dir" != "debian" && test -d $dir; then
270 topleveldirs="$topleveldirs $dir"
275 for topleveldir in $topleveldirs; do
276 if test -f $topleveldir/configure.in; then
279 if test -f $topleveldir/Makefile.am; then :; else
283 mfs=`find $topleveldir -follow -name Makefile.am -print | fgrep -v "/." | \
284 sed -e 's#\./##; s#/Makefile.am$##' | sort | sed -e 's#$#/Makefile#'`
286 echo "AC_CONFIG_FILES([ $i ])" >> configure.in.new
290 files=`cat configure.files`
291 list=`egrep '^dnl AC_OUTPUT\(.*\)' $files | sed -e "s#^.*dnl AC_OUTPUT(\(.*\))#\1#"`
292 for file in $list; do
293 echo "AC_CONFIG_FILES([ $file ])" >> configure.in.new
296 midfiles=`cat configure.files | fgrep "configure.in.mid"`
297 test -n "$midfiles" && cat $midfiles >> configure.in.new
299 echo "AC_OUTPUT" >> configure.in.new
301 if test -f configure.in.in; then
302 if head -n 2 configure.in.in | egrep "^#MIN_CONFIG\(.*\)$" > /dev/null; then
303 kde_use_qt_param=`cat configure.in.in | sed -n -e "s/#MIN_CONFIG(\(.*\))/\1/p"`
305 if head -n 2 configure.in.in | egrep "^#MIN_CONFIG" > /dev/null; then
306 line=`grep "^AM_INIT_AUTOMAKE(" configure.in.in`
307 if test -n "$line"; then
308 modulename=`echo $line | sed -e "s#AM_INIT_AUTOMAKE(\([^,]*\),.*#\1#"`
309 VERSION=`echo $line | sed -e "s#AM_INIT_AUTOMAKE([^,]*, *\([^)]*\)).*#\1#"`
311 sed -e "s#AM_INIT_AUTOMAKE([^@].*#dnl PACKAGE set before#" \
312 configure.in.new > configure.in && mv configure.in configure.in.new
315 if test -z "$VERSION" || test "$VERSION" = "@VERSION@"; then
318 if test -z "$modulename" || test "$modulename" = "@MODULENAME@"; then
320 modulename=`basename $modulename`
321 esc_VERSION=`echo $VERSION | sed -e "s#[^.0-9a-zA-Z]##g"`
322 modulename=`echo $modulename | sed -e "s#-$esc_VERSION##"`
325 if test -n "$kde_use_qt_param"; then
326 sed -e "s#^dnl KDE_USE_QT#KDE_USE_QT($kde_use_qt_param)#" \
327 configure.in.new > configure.in && mv configure.in configure.in.new
329 sed -e "s#@MODULENAME@#$modulename#" configure.in.new |
330 sed -e "s#@VERSION@#$VERSION#" > configure.in
331 botfiles=`cat configure.files | egrep "configure.in.bot"`
332 test -n "$botfiles" && cat $botfiles >> configure.in
333 cat $admindir/configure.in.bot.end >> configure.in
334 rm -f configure.in.new
339 echo "*** Creating configure.files"
341 for i in . .. ../.. ../../..; do
342 if test -x $i/admin; then admindir=$i/admin; break; fi
344 rm -f configure.files
345 touch configure.files
346 if test -f configure.in.in && head -n 2 configure.in.in | grep "^#MIN_CONFIG" > /dev/null; then
347 echo $admindir/configure.in.min >> configure.files
349 test -f configure.in.in && echo configure.in.in >> configure.files
350 # we collect files in the subdirs and do some sorting tricks, so subsubdirs come after subdirs
351 if test -f inst-apps; then
355 list="$list `find $i/ -follow -name "configure.in.in" -o -name "configure.in.bot" -o -name "configure.in.mid" | \
356 sed -e "s,/configure,/aaaconfigure," | sort | sed -e "s,/aaaconfigure,/configure,"`"
359 list=`find . -follow -name "configure.in.in" -o -name "configure.in.bot" -o -name "configure.in.mid" | \
360 sed -e "s,/configure,/aaaconfigure," | sort | sed -e "s,/aaaconfigure,/configure,"`
362 for i in $list; do if test -f $i && test `dirname $i` != "." ; then
363 echo $i >> configure.files
365 test -f configure.in.mid && echo configure.in.mid >> configure.files
366 test -f configure.in.bot && echo configure.in.bot >> configure.files
367 if test ! -s configure.files; then
368 echo "There are no files to build a configure. Please check your checkout."
375 if grep '\$(top_srcdir)/subdirs:' $makefile_am >/dev/null; then
376 # as many modules contain rules to create subdirs without any
377 # dependencies make won't create it unless there is no file.
378 # so we check if that's a dummy rule or one that works
379 rm -f subdirs.cvs.sh.$$
380 if test -f subdirs; then
381 mv subdirs subdirs.cvs.sh.$$
384 $MAKE -f $makefile_wo top_srcdir=. ./subdirs || exit 1
385 if test -f subdirs.cvs.sh.$$; then
386 if test -s subdirs; then
389 mv subdirs.cvs.sh.$$ subdirs
401 if test -f inst-apps; then
402 idirs=`cat inst-apps`
407 compilefirst=`sed -ne 's#^COMPILE_FIRST[ ]*=[ ]*##p' $makefile_am | head -n 1`
408 compilelast=`sed -ne 's#^COMPILE_LAST[ ]*=[ ]*##p' $makefile_am | head -n 1`
410 if test -f $i/Makefile.am; then
411 case " $compilefirst $compilelast " in
420 for d in $compilefirst; do
421 echo $d >> ./_SUBDIRS
425 list=`sed -ne "s#^COMPILE_BEFORE_$d""[ ]*=[ ]*##p" $makefile_am | head -n 1`
429 list=`sed -ne "s#^COMPILE_AFTER_$d""[ ]*=[ ]*##p" $makefile_am | head -n 1`
434 done ) | tsort >> ./_SUBDIRS
436 for d in $compilelast; do
437 echo $d >> ./_SUBDIRS
440 if test -r subdirs && cmp -s subdirs _SUBDIRS; then
443 test -r _SUBDIRS && mv _SUBDIRS subdirs || true
448 if test -f Makefile.am.in; then
449 compilefirst=`sed -ne 's#^COMPILE_FIRST[ ]*=[ ]*##p' $makefile_am | head -n 1`
450 compilelast=`sed -ne 's#^COMPILE_LAST[ ]*=[ ]*##p' $makefile_am | head -n 1`
454 if test -f inst-apps; then
455 idirs=`cat inst-apps`
460 case " $compilefirst $compilelast " in
466 adds=`fgrep '$(top_srcdir)/acinclude.m4:' Makefile.am.in | sed -e 's,^[^:]*: *,,; s,\$(top_srcdir)/,,g'`
467 if echo "$adds" | fgrep "*" >/dev/null ; then
468 adds=`ls -d -1 $adds 2>/dev/null`
469 fgrep -v '$(top_srcdir)/acinclude.m4:' Makefile.am.in > Makefile.am.in.adds
470 str='$(top_srcdir)/acinclude.m4:'
472 str="$str \$(top_srcdir)/$add"
474 echo $str >> Makefile.am.in.adds
476 cat Makefile.am.in > Makefile.am.in.adds
479 cat Makefile.am.in.adds | \
480 sed -e 's,^\s*\(COMPILE_BEFORE.*\),# \1,' | \
481 sed -e 's,^\s*\(COMPILE_AFTER.*\),# \1,' > Makefile.am
482 echo "SUBDIRS="'$(TOPSUBDIRS)' >> Makefile.am
483 rm Makefile.am.in.adds
489 echo "*** Creating acinclude.m4"
491 if grep '\$(top_srcdir)/acinclude.m4:' $makefile_am >/dev/null; then
494 adds=`grep '\$(top_srcdir)/acinclude.m4:' $makefile_wo | sed -e 's,^[^:]*: *,,; s,\$(top_srcdir),.,g'`
495 if echo $adds | fgrep "*" >/dev/null ; then
496 adds=`ls -d -1 $adds 2>/dev/null`
498 $MAKE -f $makefile_wo top_srcdir=. ./acinclude.m4 || exit 1
503 # if it wasn't created up to now, then we do it better
504 if test ! -f acinclude.m4; then
505 cat admin/acinclude.m4.in admin/libtool.m4.in admin/pkg.m4.in $adds > acinclude.m4
511 if test -d CVS; then :; else
512 echo "You don't have a toplevel CVS directory."
513 echo "You most certainly didn't use cvs to get these sources."
514 echo "But this function depends on cvs's information."
517 perl $admindir/cvs-clean.pl
523 for cat in $catalogs; do
524 if test "x${cat:0:7}" = "xdesktop"; then
525 msgmerge -o $cat.new $cat desktop.pot
527 msgmerge -o $cat.new $cat $PACKAGE.pot
529 if test -s $cat.new; then
530 grep -v "\"POT-Creation" $cat.new > $cat.new.2
531 grep -v "\"POT-Creation" $cat >> $cat.new.1
532 if diff $cat.new.1 $cat.new.2; then
537 rm -f $cat.new.1 $cat.new.2
544 podir=${podir:-$PWD/po}
545 files=`find . -name Makefile.am | xargs egrep -l '^messages:' `
546 dirs=`for i in $files; do echo \`dirname $i\`; done`
547 tmpname="$PWD/messages.log"
548 if test -z "$EXTRACTRC"; then EXTRACTRC=extractrc ; fi
549 if test -z "$PREPARETIPS"; then PREPARETIPS=preparetips ; fi
550 export EXTRACTRC PREPARETIPS
552 for subdir in $dirs; do
553 test -z "$VERBOSE" || echo "Making messages in $subdir"
555 if test -n "`grep -e '^messages:.*rc.cpp' Makefile.am`"; then
556 $EXTRACTRC *.rc *.ui *.kcfg > rc.cpp
558 candidates=`ls -1 *.rc *.ui *.kcfg 2>/dev/null`
559 if test -n "$candidates"; then
560 echo "$subdir has *.rc, *.ui or *.kcfg files, but not correct messages line"
563 if find . -name \*.c\* -o -name \*.h\* | xargs fgrep -s -q KAboutData ; then
564 echo -e 'i18n("_: NAME OF TRANSLATORS\\n"\n"Your names")\ni18n("_: EMAIL OF TRANSLATORS\\n"\n"Your emails")' > _translatorinfo.cpp
565 else echo " " > _translatorinfo.cpp
567 perl -e '$mes=0; while (<STDIN>) { next if (/^(if\s|else\s|endif)/); 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
569 kdepotpath=${includedir:-${KDEDIR:-`kde-config --prefix`}/include}/kde.pot
571 $MAKE -s -f _transMakefile podir=$podir EXTRACTRC="$EXTRACTRC" PREPARETIPS="$PREPARETIPS" srcdir=. \
572 XGETTEXT="${XGETTEXT:-xgettext} --foreign-user -C -ci18n -ki18n -ktr2i18n -kI18N_NOOP -kI18N_NOOP2 -kaliasLocale -x $kdepotpath" messages
574 if test "$exit_code" != 0; then
575 echo "make exit code: $exit_code"
577 ) 2>&1 | grep -v '^make\[1\]' > $tmpname
578 test -s $tmpname && { echo $subdir ; cat "$tmpname"; }
579 test -f $subdir/rc.cpp && rm -f $subdir/rc.cpp
580 rm -f $subdir/_translatorinfo.cpp
581 rm -f $subdir/_transMakefile
591 for i in `ls -1 po/*.pot 2>/dev/null | sed -e "s#po/##"`; do
592 egrep -v '^#([^:]|$)' po/$i | egrep '^.*[^ ]+.*$' | grep -v "\"POT-Creation" > po.backup/$i
593 cat po/$i > po.backup/backup_$i
594 touch -r po/$i po.backup/backup_$i
600 for i in `ls -1 po.backup/*.pot 2>/dev/null | sed -e "s#po.backup/##" | egrep -v '^backup_'`; do
601 test -f po/$i || echo "disappeared: $i"
603 for i in `ls -1 po/*.pot 2>/dev/null | sed -e "s#po/##"`; do
604 sed -e 's,^"Content-Type: text/plain; charset=CHARSET\\n"$,"Content-Type: text/plain; charset=UTF-8\\n",' po/$i > po/$i.new && mv po/$i.new po/$i
605 #msgmerge -q -o po/$i po/$i po/$i
606 egrep -v '^#([^:]|$)' po/$i | egrep '^.*[^ ]+.*$' | grep -v "\"POT-Creation" > temp.pot
607 if test -f po.backup/$i && ! cmp -s temp.pot po.backup/$i; then
608 echo "will update $i"
610 if test -f po.backup/backup_$i; then
611 test -z "$VERBOSE" || echo "I'm restoring $i"
612 mv po.backup/backup_$i po/$i
629 admindir=`echo "$0" | sed 's%[\\/][^\\/][^\\/]*$%%'`
630 test "x$admindir" = "x$0" && admindir=.
632 test "x$MAKE" = x && MAKE=make
633 makefile_am=Makefile.am
634 makefile_wo=Makefile.am.wo
635 if test -f Makefile.am.in; then
636 makefile_am=Makefile.am.in
637 makefile_wo=Makefile.am.in.wo
641 # Suck in the AUTOCONF detection code
642 . $admindir/detect-autoconf.sh
648 arg=`echo $1 | tr .- __`
650 cvs | dist | subdir_dist | configure_in | configure_files | subdirs | \
651 cvs_clean | package_merge | package_messages | Makefile_am | acinclude_m4 | extract_messages ) $arg ;;
652 configure ) call_and_fix_autoconf ;;
653 * ) echo "Usage: cvs.sh <target>"
654 echo "Target can be one of:"
655 echo " cvs cvs-clean dist"
656 echo " configure.in configure.files"
657 echo " package-merge package-messages"
659 echo "Usage: anything but $1"
663 if test -f $makefile_wo; then