source: trunk/Taper/admin/cvs.sh@ 5399

Last change on this file since 5399 was 4307, checked in by merck, 20 years ago
new project
File size: 16.5 KB
Line 
1#! /bin/sh
2#
3# cvs.sh
4#
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.
8
9call_and_fix_autoconf()
10{
11 $AUTOCONF || exit 1
12 if test -r configure.in.in ; then
13 perl -pi -e "print \"if test \\\"x\\\$with_fast_perl\\\" = \\\"xyes\\\"; then\
14 \\n perl -i.bak \\\$ac_aux_dir/conf.change.pl \\\$CONFIG_STATUS\
15 \\\\\\n || mv \\\$CONFIG_STATUS.bak \\\$CONFIG_STATUS\
16 \\n rm -f \\\$CONFIG_STATUS.bak\\nfi\
17 \\n\" if /^\\s*chmod\\s+.*\\+x\\s+.*CONFIG_STATUS/; s,^#line.*LINENO.*\$,/* \$& */, ;" configure
18 fi
19}
20
21strip_makefile()
22{
23 if test -f $makefile_wo; then :; else
24 perl -e '$in=0; while ( <> ) { $in = 1 if ($_=~ m/^if /); print $_ unless ($in); $in = 0 if ($_ =~ m/^endif/); }' < Makefile.am.in > $makefile_wo
25 fi
26}
27
28check_autotool_versions()
29{
30AUTOCONF_VERSION=`$AUTOCONF --version | head -n 1`
31case $AUTOCONF_VERSION in
32 Autoconf*2.5* | autoconf*2.5* ) : ;;
33 "" )
34 echo "*** AUTOCONF NOT FOUND!."
35 echo "*** KDE requires autoconf 2.52, 2.53 or 2.54"
36 exit 1
37 ;;
38 * )
39 echo "*** YOU'RE USING $AUTOCONF_VERSION."
40 echo "*** KDE requires autoconf 2.52, 2.53 or 2.54"
41 exit 1
42 ;;
43esac
44
45AUTOHEADER_VERSION=`$AUTOHEADER --version | head -n 1`
46case $AUTOHEADER_VERSION in
47 Autoconf*2.5* | autoheader*2.5* ) : ;;
48 "" )
49 echo "*** AUTOHEADER NOT FOUND!."
50 echo "*** KDE requires autoheader 2.52 or 2.53 (part of autoconf)"
51 exit 1
52 ;;
53 * )
54 echo "*** YOU'RE USING $AUTOHEADER_VERSION."
55 echo "*** KDE requires autoheader 2.52 or 2.53 (part of autoconf)"
56 exit 1
57 ;;
58esac
59
60AUTOMAKE_STRING=`$AUTOMAKE --version | head -n 1`
61case $AUTOMAKE_STRING in
62 automake*1.5d* | automake*1.5* | automake*1.5-* )
63 echo "*** YOU'RE USING $AUTOMAKE_STRING."
64 echo "*** KDE requires automake 1.6.1 or newer"
65 exit 1
66 ;;
67 automake*1.6.* | automake*1.7* | automake*1.8.* ) : ;;
68 "" )
69 echo "*** AUTOMAKE NOT FOUND!."
70 echo "*** KDE requires automake 1.6.1 or newer"
71 exit 1
72 ;;
73 unsermake* ) :
74 echo "*** YOU'RE USING UNSERMAKE."
75 echo "*** GOOD LUCK!! :)"
76 ;;
77 * )
78 echo "*** YOU'RE USING $AUTOMAKE_STRING."
79 echo "*** KDE requires automake 1.6"
80 exit 1
81 ;;
82esac
83}
84
85cvs()
86{
87check_autotool_versions
88
89### Produce acinclude.m4
90if grep '\$(top_srcdir)/acinclude.m4:' $makefile_am >/dev/null; then
91 echo "*** Creating acinclude.m4"
92 rm -f acinclude.m4 configure.files
93
94 strip_makefile
95 $MAKE -f $makefile_wo top_srcdir=. ./acinclude.m4
96fi
97
98### Make new subdirs and configure.in.
99### The make calls could be optimized away here,
100### with a little thought.
101if test -r configure.in.in; then
102 rm -f configure.in
103 echo "*** Creating list of subdirectories"
104 create_subdirs
105
106 if test -r Makefile.am.in; then
107 echo "*** Creating Makefile.am"
108 if grep '\$(top_srcdir)/Makefile.am:' $makefile_am >/dev/null; then
109 strip_makefile
110 $MAKE -f $makefile_wo top_srcdir=. ./Makefile.am || exit 1
111 else
112 Makefile_am
113 fi
114 fi
115 echo "*** Creating configure.in"
116 configure_files
117 strip_makefile
118 $MAKE -f $makefile_wo top_srcdir=. ./configure.in || exit 1
119fi
120
121echo "*** Creating aclocal.m4"
122$ACLOCAL || exit 1
123echo "*** Creating configure"
124call_and_fix_autoconf
125
126if egrep "^AM_CONFIG_HEADER" configure.in >/dev/null 2>&1; then
127 echo "*** Creating config.h template"
128 $AUTOHEADER || exit 1
129fi
130
131echo "*** Creating Makefile templates"
132$AUTOMAKE || exit 1
133if test -z "$UNSERMAKE"; then
134 echo "*** Postprocessing Makefile templates"
135 perl -w admin/am_edit || exit 1
136fi
137
138if egrep "^cvs-local:" $makefile_am >/dev/null; then \
139 strip_makefile
140 $MAKE -f $makefile_wo cvs-local top_srcdir=. || exit 1
141fi
142
143echo "*** Creating date/time stamp"
144touch stamp-h.in
145
146echo "*** Finished"
147echo " Don't forget to run ./configure"
148echo " If you haven't done so in a while, run ./configure --help"
149}
150
151dist()
152{
153check_autotool_versions
154
155###
156### First build all of the files necessary to do just "make"
157###
158if grep '\$(top_srcdir)/acinclude.m4:' $makefile_am >/dev/null; then
159 strip_makefile
160 $MAKE -f $makefile_wo top_srcdir=. ./acinclude.m4
161fi
162if test -r configure.in.in; then
163 create_subdirs
164 Makefile_am
165 configure_files
166 strip_makefile
167 $MAKE -f $makefile_wo top_srcdir=. ./configure.in
168fi
169$ACLOCAL
170$AUTOHEADER
171$AUTOMAKE --foreign --include-deps
172perl -w admin/am_edit
173call_and_fix_autoconf
174touch stamp-h.in
175if grep "^cvs-local:" $makefile_am >/dev/null; then
176 strip_makefile
177 $MAKE -f $makefile_wo cvs-local top_srcdir=.
178fi
179
180###
181### Then make messages
182###
183if test -d po; then
184 LIST=`find ./po -name "*.po"`
185 for i in $LIST; do
186 file2=`echo $i | sed -e "s#\.po#\.gmo#"`
187 msgfmt -o $file2 $i || touch $file2
188 done
189fi
190if grep "^cvs-dist-local:" $makefile_am >/dev/null; then
191 strip_makefile
192 $MAKE -f $makefile_wo cvs-dist-local top_srcdir=.
193fi
194}
195
196subdir_dist()
197{
198$ACLOCAL
199$AUTOHEADER
200$AUTOMAKE
201perl -w ../admin/am_edit
202call_and_fix_autoconf
203touch stamp-h.in
204}
205
206configure_in()
207{
208rm -f configure.in configure.in.new
209kde_use_qt_param=
210test -f configure.files || { echo "need configure.files for configure.in"; exit 1; }
211cat `fgrep -v "configure.in.bot" < configure.files | fgrep -v "configure.in.mid"` > configure.in.new
212echo "KDE_CREATE_SUBDIRSLIST" >> configure.in.new
213if test -f Makefile.am.in; then
214 subdirs=`cat subdirs`
215 for dir in $subdirs; do
216 dir=`echo $dir | sed -e "s,[-+.],_,g"`
217 echo "AM_CONDITIONAL($dir""_SUBDIR_included, test \"x\$$dir""_SUBDIR_included\" = xyes)" >> configure.in.new
218 done
219fi
220
221echo "AC_CONFIG_FILES([ Makefile ])" >> configure.in.new
222if test -n "$UNSERMAKE"; then
223 echo "AC_CONFIG_FILES([ Makefile.rules ])" >> configure.in.new
224 echo "AC_CONFIG_FILES([ Makefile.calls ])" >> configure.in.new
225fi
226
227if test -f inst-apps; then
228 topleveldirs=`cat inst-apps`
229else
230 topleveldirs=
231 for dir in `ls -1d * | sort`; do
232 if test "$dir" != "debian" && test -d $dir; then
233 topleveldirs="$topleveldirs $dir"
234 fi
235 done
236fi
237
238for topleveldir in $topleveldirs; do
239 if test -f $topleveldir/configure.in; then
240 continue
241 fi
242 if test -f $topleveldir/Makefile.am; then :; else
243 continue
244 fi
245
246 mfs=`find $topleveldir -name Makefile.am -print | fgrep -v "/." | \
247 sed -e 's#\./##; s#/Makefile.am$##' | sort | sed -e 's#$#/Makefile#'`
248 for i in $mfs; do
249 echo "AC_CONFIG_FILES([ $i ])" >> configure.in.new
250 if test -n "$UNSERMAKE"; then
251 echo "AC_CONFIG_FILES([ $i.rules ])" >> configure.in.new
252 echo "AC_CONFIG_FILES([ $i.calls ])" >> configure.in.new
253 fi
254 done
255done
256
257files=`cat configure.files`
258list=`egrep '^dnl AC_OUTPUT\(.*\)' $files | sed -e "s#^.*dnl AC_OUTPUT(\(.*\))#\1#"`
259for file in $list; do
260 echo "AC_CONFIG_FILES([ $file ])" >> configure.in.new
261done
262
263if test -n "$UNSERMAKE"; then
264 echo "AC_CONFIG_FILES([ MakeVars ])" >> configure.in.new
265fi
266
267midfiles=`cat configure.files | fgrep "configure.in.mid"`
268test -n "$midfiles" && cat $midfiles >> configure.in.new
269
270echo "AC_OUTPUT" >> configure.in.new
271modulename=
272if test -f configure.in.in; then
273 if head -n 2 configure.in.in | egrep "^#MIN_CONFIG\(.*\)$" > /dev/null; then
274 kde_use_qt_param=`cat configure.in.in | sed -n -e "s/#MIN_CONFIG(\(.*\))/\1/p"`
275 fi
276 if head -n 2 configure.in.in | egrep "^#MIN_CONFIG" > /dev/null; then
277 line=`grep "^AM_INIT_AUTOMAKE(" configure.in.in`
278 if test -n "$line"; then
279 modulename=`echo $line | sed -e "s#AM_INIT_AUTOMAKE(\([^,]*\),.*#\1#"`
280 VERSION=`echo $line | sed -e "s#AM_INIT_AUTOMAKE([^,]*, *\([^)]*\)).*#\1#"`
281 fi
282 sed -e "s#AM_INIT_AUTOMAKE([^@].*#dnl PACKAGE set before#" \
283 configure.in.new > configure.in && mv configure.in configure.in.new
284 fi
285fi
286if test -z "$VERSION" || test "$VERSION" = "@VERSION@"; then
287 VERSION="\"3.1.0\""
288fi
289if test -z "$modulename" || test "$modulename" = "@MODULENAME@"; then
290 modulename=`pwd`;
291 modulename=`basename $modulename`
292 esc_VERSION=`echo $VERSION | sed -e "s#[^.0-9a-zA-Z]##g"`
293 modulename=`echo $modulename | sed -e "s#-$esc_VERSION##"`
294
295fi
296if test -n "$kde_use_qt_param"; then
297 sed -e "s#^dnl KDE_USE_QT#KDE_USE_QT($kde_use_qt_param)#" \
298 configure.in.new > configure.in && mv configure.in configure.in.new
299fi
300sed -e "s#@MODULENAME@#$modulename#" configure.in.new |
301 sed -e "s#@VERSION@#$VERSION#" > configure.in
302botfiles=`cat configure.files | egrep "configure.in.bot"`
303test -n "$botfiles" && cat $botfiles >> configure.in
304cat $admindir/configure.in.bot.end >> configure.in
305rm -f configure.in.new
306}
307
308configure_files()
309{
310admindir=NO
311for i in . .. ../.. ../../..; do
312 if test -x $i/admin; then admindir=$i/admin; break; fi
313done
314rm -f configure.files
315touch configure.files
316if test -f configure.in.in && head -n 2 configure.in.in | grep "^#MIN_CONFIG" > /dev/null; then
317 echo $admindir/configure.in.min >> configure.files
318fi
319test -f configure.in.in && echo configure.in.in >> configure.files
320# we collect files in the subdirs and do some sorting tricks, so subsubdirs come after subdirs
321if test -f inst-apps; then
322 inst=`cat inst-apps`
323 list=""
324 for i in $inst; do
325 list="$list `find $i/ -name "configure.in.in" -o -name "configure.in.bot" -o -name "configure.in.mid" | \
326 sed -e "s,/configure,/aaaconfigure," | sort | sed -e "s,/aaaconfigure,/configure,"`"
327 done
328else
329 list=`find . -name "configure.in.in" -o -name "configure.in.bot" -o -name "configure.in.mid" | \
330 sed -e "s,/configure,/aaaconfigure," | sort | sed -e "s,/aaaconfigure,/configure,"`
331fi
332for i in $list; do if test -f $i && test `dirname $i` != "." ; then
333 echo $i >> configure.files
334fi; done
335test -f configure.in.mid && echo configure.in.mid >> configure.files
336test -f configure.in.bot && echo configure.in.bot >> configure.files
337}
338
339create_subdirs()
340{
341if grep '\$(top_srcdir)/subdirs:' $makefile_am >/dev/null; then
342 # as many modules contain rules to create subdirs without any
343 # dependencies make won't create it unless there is no file.
344 # so we check if that's a dummy rule or one that works
345 rm -f subdirs.cvs.sh.$$
346 if test -f subdirs; then
347 mv subdirs subdirs.cvs.sh.$$
348 fi
349 strip_makefile
350 $MAKE -f $makefile_wo top_srcdir=. ./subdirs || exit 1
351 if test -f subdirs.cvs.sh.$$; then
352 if test -s subdirs; then
353 rm subdirs.cvs.sh.$$
354 else
355 mv subdirs.cvs.sh.$$ subdirs
356 fi
357 fi
358else
359 subdirs
360fi
361}
362
363subdirs()
364{
365dirs=
366idirs=
367if test -f inst-apps; then
368 idirs=`cat inst-apps`
369else
370 idirs=`ls -1 | sort`
371fi
372
373compilefirst=`sed -ne 's#^COMPILE_FIRST[ ]*=[ ]*##p' $makefile_am | head -n 1`
374compilelast=`sed -ne 's#^COMPILE_LAST[ ]*=[ ]*##p' $makefile_am | head -n 1`
375for i in $idirs; do
376 if test -f $i/Makefile.am; then
377 case " $compilefirst $compilelast " in
378 *" $i "*) ;;
379 *) dirs="$dirs $i"
380 esac
381 fi
382done
383
384: > ./_SUBDIRS
385
386for d in $compilefirst; do
387 echo $d >> ./_SUBDIRS
388done
389
390(for d in $dirs; do
391 list=`sed -ne "s#^COMPILE_BEFORE_$d""[ ]*=[ ]*##p" $makefile_am | head -n 1`
392 for s in $list; do
393 echo $s $d
394 done
395 list=`sed -ne "s#^COMPILE_AFTER_$d""[ ]*=[ ]*##p" $makefile_am | head -n 1`
396 for s in $list; do
397 echo $d $s
398 done
399 echo $d $d
400done ) | tsort >> ./_SUBDIRS
401
402for d in $compilelast; do
403 echo $d >> ./_SUBDIRS
404done
405
406if test -r subdirs && cmp -s subdirs _SUBDIRS; then
407 rm -f _SUBDIRS
408fi
409test -r _SUBDIRS && mv _SUBDIRS subdirs || true
410}
411
412Makefile_am()
413{
414if test -f Makefile.am.in; then
415 compilefirst=`sed -ne 's#^COMPILE_FIRST[ ]*=[ ]*##p' $makefile_am | head -n 1`
416 compilelast=`sed -ne 's#^COMPILE_LAST[ ]*=[ ]*##p' $makefile_am | head -n 1`
417
418 idirs=
419 dirs=
420 if test -f inst-apps; then
421 idirs=`cat inst-apps`
422 else
423 idirs=`cat subdirs`
424 fi
425 for i in $idirs; do
426 case " $compilefirst $compilelast " in
427 *" $i "*) ;;
428 *) dirs="$dirs $i"
429 esac
430 done
431
432 if test -n "$UNSERMAKE"; then
433 cp Makefile.am.in Makefile.am
434 chmod u+w Makefile.am
435 topsubdirs=
436 for i in $compilefirst $dirs $compilelast; do
437 vari=`echo $i | sed -e "s,[-+],_,g"`
438 echo "if $vari""_SUBDIR_included" >> Makefile.am
439 echo "$vari""_SUBDIR=$i" >> Makefile.am
440 echo "endif" >> Makefile.am
441 topsubdirs="$topsubdirs \$($vari""_SUBDIR)"
442 done
443 echo "SUBDIRS=$topsubdirs" >> Makefile.am
444 else
445 cat Makefile.am.in | \
446 sed -e 's,^\s*\(COMPILE_BEFORE.*\),# \1,' | \
447 sed -e 's,^\s*\(COMPILE_AFTER.*\),# \1,' > Makefile.am
448 echo "SUBDIRS="'$(TOPSUBDIRS)' >> Makefile.am
449 fi
450fi
451}
452
453cvs_clean()
454{
455if test -d CVS; then :; else
456 echo "You don't have a toplevel CVS directory."
457 echo "You most certainly didn't use cvs to get these sources."
458 echo "But this function depends on cvs's information."
459 exit 1
460fi
461perl $admindir/cvs-clean.pl
462}
463
464package_merge()
465{
466catalogs=$POFILES
467for cat in $catalogs; do
468 msgmerge -o $cat.new $cat $PACKAGE.pot
469 if test -s $cat.new; then
470 grep -v "\"POT-Creation" $cat.new > $cat.new.2
471 grep -v "\"POT-Creation" $cat >> $cat.new.1
472 if diff $cat.new.1 $cat.new.2; then
473 rm $cat.new
474 else
475 mv $cat.new $cat
476 fi
477 rm -f $cat.new.1 $cat.new.2
478 fi
479done
480}
481
482package_messages()
483{
484rm -rf po.backup
485mkdir po.backup
486
487for i in `ls -1 po/*.pot 2>/dev/null | sed -e "s#po/##"`; do
488 egrep -v '^#([^:]|$)' po/$i | egrep '^.*[^ ]+.*$' | grep -v "\"POT-Creation" > po.backup/$i
489 cp po/$i po.backup/backup_$i
490 touch -r po/$i po.backup/backup_$i
491 rm po/$i
492done
493
494podir=${podir:-$PWD/po}
495files=`find . -name Makefile.am | xargs egrep -l '^messages:' `
496dirs=`for i in $files; do echo \`dirname $i\`; done`
497tmpname="$PWD/messages.log"
498if test -z "$EXTRACTRC"; then EXTRACTRC=extractrc ; fi
499if test -z "$PREPARETIPS"; then PREPARETIPS=preparetips ; fi
500export EXTRACTRC PREPARETIPS
501
502for subdir in $dirs; do
503 test -z "$VERBOSE" || echo "Making messages in $subdir"
504 (cd $subdir
505 if test -n "`grep -e '^messages:.*rc.cpp' Makefile.am`"; then
506 $EXTRACTRC *.rc *.ui > rc.cpp
507 else
508 candidates=`ls -1 *.rc *.ui 2>/dev/null`
509 if test -n "$candidates"; then
510 echo "$subdir has *.rc or *.ui files, but not correct messages line"
511 fi
512 fi
513 if test -n "`grep -r KAboutData *.c* *.C* 2>/dev/null`"; then
514 echo -e 'i18n("_: NAME OF TRANSLATORS\\n"\n"Your names")\ni18n("_: EMAIL OF TRANSLATORS\\n"\n"Your emails")' > _translatorinfo.cpp
515 else echo " " > _translatorinfo.cpp
516 fi
517 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
518
519 $MAKE -s -f _transMakefile podir=$podir EXTRACTRC="$EXTRACTRC" PREPARETIPS="$PREPARETIPS" \
520 XGETTEXT="${XGETTEXT:-xgettext} -C -ki18n -ktr2i18n -kI18N_NOOP -ktranslate -kaliasLocale -x ${includedir:-${KDEDIR:-/usr/local/kde}/include}/kde.pot" \
521 messages
522 exit_code=$?
523 if test "$exit_code" != 0; then
524 echo "make exit code: $exit_code"
525 fi
526 ) 2>&1 | grep -v '^make\[1\]' > $tmpname
527 test -s $tmpname && { echo $subdir ; cat "$tmpname"; }
528 test -f $subdir/rc.cpp && rm -f $subdir/rc.cpp
529 rm -f $subdir/_translatorinfo.cpp
530 rm -f $subdir/_transMakefile
531done
532rm -f $tmpname
533for i in `ls -1 po.backup/*.pot 2>/dev/null | sed -e "s#po.backup/##" | egrep -v '^backup_'`; do
534 test -f po/$i || echo "disappeared: $i"
535done
536for i in `ls -1 po/*.pot 2>/dev/null | sed -e "s#po/##"`; do
537 msgmerge -q -o po/$i po/$i po/$i
538 egrep -v '^#([^:]|$)' po/$i | egrep '^.*[^ ]+.*$' | grep -v "\"POT-Creation" > temp.pot
539 if test -f po.backup/$i && test -n "`diff temp.pot po.backup/$i`"; then
540 echo "will update $i"
541 msgmerge -q po.backup/backup_$i po/$i > temp.pot
542 mv temp.pot po/$i
543 else
544 if test -f po.backup/backup_$i; then
545 test -z "$VERBOSE" || echo "I'm restoring $i"
546 mv po.backup/backup_$i po/$i
547 rm po.backup/$i
548 else
549 echo "will add $i"
550 fi
551 fi
552done
553rm -f temp.pot
554rm -rf po.backup
555}
556
557unset CDPATH
558admindir=`echo "$0" | sed 's%[\\/][^\\/][^\\/]*$%%'`
559test "x$admindir" = "x$0" && admindir=.
560
561test "x$MAKE" = x && MAKE=make
562makefile_am=Makefile.am
563makefile_wo=Makefile.am
564if test -f Makefile.am.in; then
565 makefile_am=Makefile.am.in
566 makefile_wo=Makefile.am.in.wo
567fi
568
569# Suck in the AUTOCONF detection code
570. $admindir/detect-autoconf.sh
571
572###
573### Main
574###
575
576arg=`echo $1 | tr '\-.' __`
577case $arg in
578 cvs | dist | subdir_dist | configure_in | configure_files | subdirs | \
579 cvs_clean | package_merge | package_messages | Makefile_am ) $arg ;;
580 configure ) call_and_fix_autoconf ;;
581 * ) echo "Usage: cvs.sh <target>"
582 echo "Target can be one of:"
583 echo " cvs cvs-clean dist"
584 echo " configure.in configure.files"
585 echo " package-merge package-messages"
586 echo ""
587 echo "Usage: anything but $1"
588 exit 1 ;;
589esac
590
591if test -f Makefile.am.in.wo; then
592 rm Makefile.am.in.wo
593fi
594
595exit 0
Note: See TracBrowser for help on using the repository browser.