OSDN Git Service

Initial revision
[kita/kita.git] / admin / cvs.sh
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
9 call_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/;" configure
18   fi
19 }
20
21 strip_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
28 check_autotool_versions()
29 {
30 AUTOCONF_VERSION=`$AUTOCONF --version | head -1`
31 case $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     ;;
43 esac
44  
45 AUTOHEADER_VERSION=`$AUTOHEADER --version | head -1`
46 case $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     ;;
58 esac
59
60 AUTOMAKE_STRING=`$AUTOMAKE --version | head -1`
61 case $AUTOMAKE_STRING in
62   automake*1.5d* )
63     echo "*** YOU'RE USING $AUTOMAKE_STRING."
64     echo "*** KDE requires automake 1.5"
65     exit 1
66     ;;
67   automake*1.5* | automake*1.5-* | automake*1.6.* | automake*1.7* ) : ;;
68   "" )
69     echo "*** AUTOMAKE NOT FOUND!."
70     echo "*** KDE requires automake 1.5"
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.5"
80     exit 1
81     ;;
82 esac
83 }
84
85 cvs()
86 {
87 check_autotool_versions
88  
89 ### Produce acinclude.m4
90 if 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
96 fi
97
98 ### Make new subdirs and configure.in.
99 ### The make calls could be optimized away here,
100 ### with a little thought.
101 if test -r configure.in.in; then
102   rm -f subdirs configure.in
103   echo "*** Creating list of subdirectories"
104   subdirs
105   echo "*** Creating configure.in"
106   configure_files
107   strip_makefile
108   $MAKE -f $makefile_wo top_srcdir=. ./configure.in || exit 1
109 fi
110
111 echo "*** Creating aclocal.m4"
112 $ACLOCAL || exit 1
113 echo "*** Creating configure"
114 call_and_fix_autoconf
115
116 if egrep "^AM_CONFIG_HEADER" configure.in >/dev/null 2>&1; then
117   echo "*** Creating config.h template"
118   $AUTOHEADER || exit 1
119 fi
120
121 echo "*** Creating Makefile templates"
122 $AUTOMAKE || exit 1
123 if test -z "$UNSERMAKE"; then
124   echo "*** Postprocessing Makefile templates"
125   perl -w admin/am_edit || exit 1
126 fi
127
128 if egrep "^cvs-local:" $makefile_am >/dev/null; then \
129   strip_makefile
130   $MAKE -f $makefile_wo cvs-local top_srcdir=. || exit 1
131 fi
132
133 echo "*** Creating date/time stamp"
134 touch stamp-h.in
135
136 echo "*** Finished"
137 echo "    Don't forget to run ./configure"
138 echo "    If you haven't done so in a while, run ./configure --help"
139 }
140
141 dist()
142 {
143 check_autotool_versions
144
145 ###
146 ### First build all of the files necessary to do just "make"
147 ###
148 if grep '\$(top_srcdir)/acinclude.m4:' $makefile_am >/dev/null; then
149   strip_makefile
150   $MAKE -f $makefile_wo top_srcdir=. ./acinclude.m4
151 fi
152 if test -r configure.in.in; then
153   subdirs
154   configure_files
155   strip_makefile
156   $MAKE -f $makefile_wo top_srcdir=. ./configure.in
157 fi
158 $ACLOCAL
159 $AUTOHEADER
160 $AUTOMAKE --foreign --include-deps
161 perl -w admin/am_edit
162 call_and_fix_autoconf
163 touch stamp-h.in
164 if grep "^cvs-local:" $makefile_am >/dev/null; then
165   strip_makefile
166   $MAKE -f $makefile_wo cvs-local top_srcdir=.
167 fi
168
169 ###
170 ### Then make messages
171 ###
172 if test -d po; then
173  LIST=`find ./po -name "*.po"`
174  for i in $LIST; do
175   file2=`echo $i | sed -e "s#\.po#\.gmo#"`
176   msgfmt -o $file2 $i || touch $file2
177  done
178 fi
179 if grep "^cvs-dist-local:" $makefile_am >/dev/null; then
180   strip_makefile
181   $MAKE -f $makefile_wo cvs-dist-local top_srcdir=.
182 fi
183 }
184
185 subdir_dist()
186 {
187 $ACLOCAL
188 $AUTOHEADER
189 $AUTOMAKE --foreign --include-deps
190 perl -w ../admin/am_edit
191 call_and_fix_autoconf
192 }
193
194 configure_in()
195 {
196 rm -f configure.in configure.in.new
197 kde_use_qt_param=
198 test -f configure.files || { echo "need configure.files for configure.in"; exit 1; }
199 cat `egrep -v "configure.in.bot" < configure.files` > configure.in.new
200 echo "KDE_CREATE_SUBDIRSLIST" >> configure.in.new
201 if test -f Makefile.am.in; then
202   subdirs=`cat subdirs`
203   for dir in $subdirs; do
204     dir=`echo $dir | sed -e "s,[-+.],_,g"`
205     echo "AM_CONDITIONAL($dir""_SUBDIR_included, test \"x\$$dir""_SUBDIR_included\" = xyes)" >> configure.in.new
206   done
207 fi
208 # echo "AC_OUTPUT( \\" >> configure.in.new
209 mfs=`find . -type d -print | fgrep -v "/." | \
210      sed -e "s#\./##" -e "/^debian/d" | sort`
211 for i in $mfs; do
212   topleveldir=`echo $i| sed -e "s#/.*##"`
213   if test -f $topleveldir/configure.in; then
214         continue
215   fi
216   if test -f $i/Makefile.am; then :; else
217         continue
218   fi
219   if test -s inst-apps; then
220     if grep "\"^$topleveldir\"" inst-apps > /dev/null 2>&1; then
221         continue
222     fi
223   fi
224   if test "$i" = "."; then
225      echo "AC_CONFIG_FILES([ Makefile ])" >> configure.in.new
226   else
227      echo "AC_CONFIG_FILES([ $i/Makefile ])" >> configure.in.new
228   fi
229   if test -n "$UNSERMAKE"; then
230       if test "$i" = "."; then
231         echo "AC_CONFIG_FILES([ Makefile.rules ])" >> configure.in.new
232       else
233         echo "AC_CONFIG_FILES([ $i/Makefile.rules ])" >> configure.in.new
234       fi
235   fi
236 done
237 egrep '^dnl AC_OUTPUT\(.*\)' `cat configure.files` | sed -e "s#^.*dnl AC_OUTPUT(\(.*\))#AC_CONFIG_FILES([ \1 ])#" >> configure.in.new
238 if test -n "$UNSERMAKE"; then
239   echo "AC_CONFIG_FILES([ MakeVars ])" >> configure.in.new
240 fi
241 echo "AC_OUTPUT" >> configure.in.new
242 modulename=
243 if test -f configure.in.in; then
244    if head -2 configure.in.in | egrep "^#MIN_CONFIG\(.*\)$" > /dev/null; then
245       kde_use_qt_param=`cat configure.in.in | sed -n -e "s/#MIN_CONFIG(\(.*\))/\1/p"`
246    fi
247    if head -2 configure.in.in | egrep "^#MIN_CONFIG" > /dev/null; then
248       line=`grep "^AM_INIT_AUTOMAKE(" configure.in.in`
249       if test -n "$line"; then
250           modulename=`echo $line | sed -e "s#AM_INIT_AUTOMAKE(\([^,]*\),.*#\1#"`
251           VERSION=`echo $line | sed -e "s#AM_INIT_AUTOMAKE([^,]*, *\([^)]*\)).*#\1#"`
252       fi
253       sed -e "s#AM_INIT_AUTOMAKE([^@].*#dnl PACKAGE set before#" \
254           configure.in.new > configure.in && mv configure.in configure.in.new
255    fi
256 fi
257 if test -z "$VERSION" || test "$VERSION" = "@VERSION@"; then
258      VERSION="\"3.0.9\""
259 fi
260 if test -z "$modulename" || test "$modulename" = "@MODULENAME@"; then
261    modulename=`pwd`; 
262    modulename=`basename $modulename`
263    esc_VERSION=`echo $VERSION | sed -e "s#[^.0-9a-zA-Z]##g"`
264    modulename=`echo $modulename | sed -e "s#-$esc_VERSION##"`   
265
266 fi
267 if test -n "$kde_use_qt_param"; then
268       sed -e "s#^dnl KDE_USE_QT#KDE_USE_QT($kde_use_qt_param)#" \
269         configure.in.new > configure.in && mv configure.in configure.in.new
270 fi
271 sed -e "s#@MODULENAME@#$modulename#" configure.in.new |
272         sed -e "s#@VERSION@#$VERSION#" > configure.in
273 botfiles=`cat configure.files | egrep "configure.in.bot"`
274 test -n "$botfiles" && cat $botfiles >> configure.in
275 cat $admindir/configure.in.bot.end >> configure.in
276 rm -f configure.in.new
277 }
278
279 configure_files()
280 {
281 admindir=NO
282 for i in . .. ../.. ../../..; do
283   if test -x $i/admin; then admindir=$i/admin; break; fi
284 done
285 rm -f configure.files
286 touch configure.files
287 if test -f configure.in.in && head -2 configure.in.in | grep "^#MIN_CONFIG" > /dev/null; then
288         echo $admindir/configure.in.min >> configure.files
289 fi
290 test -f configure.in.in && echo configure.in.in >> configure.files
291 list=`find . -name "configure.in.in" -o -name "configure.in.bot" | sort`
292 for i in $list; do if test -f $i && test `dirname $i` != "." ; then
293   echo $i >> configure.files
294 fi; done
295 test -f configure.in.mid && echo configure.in.mid >> configure.files
296 test -f configure.in.bot && echo configure.in.bot >> configure.files
297 }
298
299 subdirs()
300 {
301 dirs=
302 compilefirst=`sed -ne 's#^COMPILE_FIRST[ ]*=[ ]*##p' $makefile_am | head -1`
303 compilelast=`sed -ne 's#^COMPILE_LAST[ ]*=[ ]*##p' $makefile_am | head -1`
304 for i in `ls -1`; do
305     if test -f $i/Makefile.am; then
306        case " $compilefirst $compilelast " in
307          *" $i "*) ;;
308          *) dirs="$dirs $i"
309        esac
310     fi
311 done
312
313 : > ./_SUBDIRS
314
315 for d in $compilefirst; do
316    echo $d >> ./_SUBDIRS
317 done
318
319 (for d in $dirs; do 
320    list=`sed -ne "s#^COMPILE_BEFORE_$d""[ ]*=[ ]*##p" $makefile_am | head -1`
321    for s in $list; do
322       echo $s $d
323    done
324    list=`sed -ne "s#^COMPILE_AFTER_$d""[ ]*=[ ]*##p" $makefile_am | head -1`
325    for s in $list; do
326       echo $d $s
327    done
328    echo $d $d
329 done ) | tsort >> ./_SUBDIRS
330
331 for d in $compilelast; do
332    echo $d >> ./_SUBDIRS
333 done
334
335 if test -f Makefile.am.in; then
336   cp Makefile.am.in Makefile.am
337   if test -n "$UNSERMAKE"; then
338     topsubdirs=
339     for i in $compilefirst $dirs $compilelast; do
340        vari=`echo $i | sed -e "s,[-+],_,g"`
341        echo "if $vari""_SUBDIR_included" >> Makefile.am
342        echo "$vari""_SUBDIR=$i" >> Makefile.am
343        echo "endif" >> Makefile.am
344        topsubdirs="$topsubdirs \$($vari""_SUBDIR)"
345     done
346     echo "SUBDIRS=$topsubdirs" >> Makefile.am
347   else
348     echo "SUBDIRS="'$(TOPSUBDIRS)' >> Makefile.am
349   fi
350 fi
351 if test -r subdirs && diff subdirs _SUBDIRS > /dev/null; then
352   rm -f _SUBDIRS
353 fi
354 test -r _SUBDIRS && mv _SUBDIRS subdirs || true
355 }
356
357 cvs_clean()
358 {
359 if test -d CVS; then :; else
360   echo "You don't have a toplevel CVS directory."
361   echo "You most certainly didn't use cvs to get these sources."
362   echo "But this function depends on cvs's information."
363   exit 1
364 fi
365 perl $admindir/cvs-clean.pl
366 }
367
368 package_merge()
369 {
370 catalogs=$POFILES
371 for cat in $catalogs; do
372   msgmerge -o $cat.new $cat $PACKAGE.pot
373   if test -s $cat.new; then
374     grep -v "\"POT-Creation" $cat.new > $cat.new.2
375     grep -v "\"POT-Creation" $cat >> $cat.new.1
376     if diff $cat.new.1 $cat.new.2; then
377         rm $cat.new
378     else
379         mv $cat.new $cat
380     fi
381     rm -f $cat.new.1 $cat.new.2
382   fi
383 done
384 }
385
386 package_messages()
387 {
388 rm -rf po.backup
389 mkdir po.backup
390
391 for i in `ls -1 po/*.pot 2>/dev/null | sed -e "s#po/##"`; do
392   egrep -v '^#([^:]|$)' po/$i | egrep '^.*[^ ]+.*$' | grep -v "\"POT-Creation" > po.backup/$i
393   cp po/$i po.backup/backup_$i
394   touch -r po/$i po.backup/backup_$i
395   rm po/$i
396 done
397
398 podir=${podir:-$PWD/po}
399 files=`find . -name Makefile.am | xargs egrep -l '^messages:' `
400 dirs=`for i in $files; do echo \`dirname $i\`; done`
401 tmpname="$PWD/messages.log"
402 if test -z "$EXTRACTRC"; then EXTRACTRC=extractrc ; fi
403 if test -z "$PREPARETIPS"; then PREPARETIPS=preparetips ; fi
404 export EXTRACTRC PREPARETIPS
405
406 for subdir in $dirs; do
407   test -z "$VERBOSE" || echo "Making messages in $subdir"
408   (cd $subdir
409    if test -n "`grep -e '^messages:.*rc.cpp' Makefile.am`"; then
410         $EXTRACTRC *.rc *.ui > rc.cpp
411    else
412         candidates=`ls -1 *.rc *.ui 2>/dev/null`
413         if test -n "$candidates"; then
414             echo "$subdir has *.rc or *.ui files, but not correct messages line"
415         fi
416    fi
417    if test -n "`grep -r KAboutData *.c* *.C* 2>/dev/null`"; then
418         echo -e 'i18n("_: NAME OF TRANSLATORS\\n"\n"Your names")\ni18n("_: EMAIL OF TRANSLATORS\\n"\n"Your emails")' > _translatorinfo.cpp
419    else echo " " > _translatorinfo.cpp
420    fi
421    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
422
423    $MAKE -s -f _transMakefile podir=$podir EXTRACTRC="$EXTRACTRC" PREPARETIPS="$PREPARETIPS" \
424         XGETTEXT="${XGETTEXT:-xgettext} -C -ki18n -ktr2i18n -kI18N_NOOP -ktranslate -kaliasLocale -x ${includedir:-$KDEDIR/include}/kde.pot" \
425         messages 
426    ) 2>&1 | grep -v '^make\[1\]' > $tmpname
427    test -s $tmpname && { echo $subdir ; cat "$tmpname"; }
428    test -f $subdir/rc.cpp && rm -f $subdir/rc.cpp
429    rm -f $subdir/_translatorinfo.cpp
430    rm -f $subdir/_transMakefile
431 done
432 rm -f $tmpname
433 for i in `ls -1 po.backup/*.pot 2>/dev/null | sed -e "s#po.backup/##" | egrep -v '^backup_'`; do
434   test -f po/$i || echo "disappeared: $i"
435 done
436 for i in `ls -1 po/*.pot 2>/dev/null | sed -e "s#po/##"`; do
437    msgmerge -q -o po/$i po/$i po/$i
438    egrep -v '^#([^:]|$)' po/$i | egrep '^.*[^ ]+.*$' | grep -v "\"POT-Creation" > temp.pot
439   if test -f po.backup/$i && test -n "`diff temp.pot po.backup/$i`"; then
440         echo "will update $i"
441         msgmerge -q po.backup/backup_$i po/$i > temp.pot
442         mv temp.pot po/$i
443   else
444     if test -f po.backup/backup_$i; then
445       test -z "$VERBOSE" || echo "I'm restoring $i"
446       mv po.backup/backup_$i po/$i
447       rm po.backup/$i
448     else
449       echo "will add $i"
450     fi
451   fi
452 done
453 rm -f temp.pot
454 rm -rf po.backup
455 }
456
457 admindir=`echo "$0" | sed 's%[\\/][^\\/][^\\/]*$%%'`
458 test "x$admindir" = "x$0" && admindir=.
459
460 test "x$MAKE" = x && MAKE=make
461 makefile_am=Makefile.am
462 makefile_wo=Makefile.am
463 if test -f Makefile.am.in; then
464   makefile_am=Makefile.am.in
465   makefile_wo=Makefile.am.in.wo
466 fi
467
468 # Suck in the AUTOCONF detection code
469 . $admindir/detect-autoconf.sh
470
471 ###
472 ### Main
473 ###
474
475 arg=`echo $1 | tr '\-.' __`
476 case $arg in
477   cvs | dist | subdir_dist | configure_in | configure_files | subdirs | \
478   cvs_clean | package_merge | package_messages ) $arg ;;
479   * ) echo "Usage: cvs.sh <target>"
480       echo "Target can be one of:"
481       echo "    cvs cvs-clean dist"
482       echo "    configure.in configure.files"
483       echo "    package-merge package-messages"
484       echo ""
485       echo "Usage: anything but $1"
486       exit 1 ;;
487 esac
488
489 if test -f Makefile.am.in.wo; then
490   rm Makefile.am.in.wo
491 fi
492
493 exit 0