No header for "other" .ad files.
[autodist.git] / apps / autodist / autodist.in
1 #!/bin/sh
2 #
3 # Author: Pekka Riikonen <priikone@silcnet.org>
4 #
5 # Copyright (C) 2005 Pekka Riikonen
6 # All rights reserved.
7 #
8 # Redistribution and use in source and binary forms, with or without
9 # modification, are permitted provided that the following conditions are
10 # met:
11 #
12 #   1. Redistributions of source code must retain the above copyright
13 #      notice, this list of conditions and the following disclaimer.
14 #   2. Redistributions in binary form must reproduce the above copyright
15 #      notice, this list of conditions and the following disclaimer in the
16 #      documentation and/or other materials provided with the distribution.
17 #   3. The name of the author may not be used to endorse or promote
18 #      products derived from this software without specific prior written
19 #      permission.
20 #
21 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
24 # NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
26 # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #
32
33 ###############################################################################
34 # Shell compatibility
35
36 # Be Bourne compatible
37 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
38   # Despite of this, we have managed to segfault some zsh's.
39   emulate sh
40   NULLCMD=:
41   # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
42   # is contrary to our usage.  Disable this feature.
43   alias -g '${1+"$@"}'='"$@"'
44 fi
45 DUALCASE=1; export DUALCASE # for MKS sh
46
47 # Support unset when possible.
48 if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
49   as_unset=unset
50 else
51   as_unset=false
52 fi
53
54 # Work around bugs in pre-3.0 UWIN ksh.
55 $as_unset ENV MAIL MAILPATH
56 PS1='$ '
57 PS2='> '
58 PS4='+ '
59
60 # NLS nuisances.
61 for as_var in \
62   LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
63   LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
64   LC_TELEPHONE LC_TIME
65 do
66   if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
67     eval $as_var=C; export $as_var
68   else
69     $as_unset $as_var
70   fi
71 done
72
73
74 ###############################################################################
75 # Global variables
76
77 # Packaging and compressing
78 ad_gzip=true
79 ad_bzip2=false
80 ad_compress=false
81 ad_zip=false
82
83 # Distribution subdirectory
84 distdir="distdir"
85 am_distdir=
86
87 # This current distribution
88 distribution=default
89 distfile=$distribution
90 dist_version=0.0
91 package=
92 bug_report=
93
94 # All inherited distributions in this distribution
95 inherits=
96
97 # All distribution defines for this distribution
98 distdefs=
99
100 # All distribution undefines for this distribution
101 undistdefs=
102
103 # All distribution options
104 doptions=
105 opt_template=false
106 opt_no_dist=false
107 opt_no_inherit=false
108
109 # All includes
110 includes=
111
112 # All excludes
113 excludes=
114
115 # All noprocesses
116 noprocess=
117
118 # All hooks
119 pre_hooks=
120 post_hooks=
121 pre_dist_hooks=
122 post_dist_hooks=
123 pre_p_dist_hooks=
124 post_p_dist_hooks=
125
126 # Distribution license and license header
127 license=
128 licenseh=
129
130 # Whether to output ad_debug information
131 debug=false
132
133 # Autodist version
134 ver=@VERSION@
135
136 ###############################################################################
137 # Configuration file
138 if test -f "$distdir/autodist.conf"; then
139   . $distdir/autodist.conf
140 fi
141
142 DP=$DISTPREFIX
143
144
145 ###############################################################################
146 # Functions
147
148 #
149 # Print out debug information if debugging is enabled.  To enable debugging
150 # set the global variable "debug" to true value.
151 #
152 # Arguments: ad_debug <ad_debug string>
153 #
154 ad_debug()
155 {
156   if test x$debug = xtrue; then
157     set -f
158     echo autodist: $1
159     set +f
160   fi
161 }
162
163 #
164 # Prints out error message and exits the script.
165 #
166 # Arguments: ad_fatal <error message>
167 #
168 ad_fatal()
169 {
170   set -f
171   echo autodist: error: $1
172   set +f
173   exit 1
174 }
175
176 #
177 # Prints out warning message
178 #
179 # Arguments: ad_warning <warning message>
180 #
181 ad_warning()
182 {
183   set -f
184   echo autodist: warning: $1
185   set +f
186 }
187
188 #
189 # Initializes the Autodist environment, creates default distribution
190 # directory, and default distribution.
191 #
192 # Arguments: ad_initialize
193 #
194 ad_initialize()
195 {
196   ad_debug ">ad_initialize"
197
198   # Create default distdir
199   if test '!' -f $distdir; then
200     mkdir -p $distdir
201   fi
202
203   # Create Autodist configuration file
204   if test -f @AUTODISTDIR@/autodist.conf; then
205     cp -p @AUTODISTDIR@/autodist.conf $distdir
206   fi
207
208   # Create default distribution
209   if test -f @AUTODISTDIR@/default; then
210     cp -p @AUTODISTDIR@/default $distdir
211   fi
212
213   ad_debug "<ad_initialize"
214 }
215
216 #
217 # Creates the distdefs header file including defined distdefs
218 #
219 # Arguments: ad_create_distdefs_h
220 #
221 ad_create_distdefs_h()
222 {
223   ad_debug ">ad_create_distdefs_h"
224
225   fname=$DISTDEFS
226   rm -f $fname
227   cat > $fname <<EOF
228 /*
229   Automatically generated by Autodist $ver.  Do not edit.
230
231   Generated: `date` by `whoami`
232   Distribution: $distribution
233   License: $license
234 */
235
236 #ifndef _`echo $DP`_DISTDEFS_H
237 #define _`echo $DP`_DISTDEFS_H
238
239 EOF
240
241   for i in $distdefs
242   do
243     echo "#define $i 1" >>$fname
244   done
245
246   cat >> $fname <<EOF
247
248 #endif /* _`echo $DP`_DISTDEFS_H */
249 EOF
250   ad_debug "<ad_create_distdefs_h"
251 }
252
253 #
254 # Creates the main configure script for the distribution.  This runs
255 # the aclocal, autoheader and autoconf tools.
256 #
257 # Arguments: ad_make_configure
258 #
259 ad_make_configure()
260 {
261   local run_autoconf=false
262
263   ad_debug ">ad_make_configure"
264
265   rm -f configure
266
267   if test "$ACLOCAL"; then
268     ad_debug "Running aclocal"
269     if test x$debug = xtrue; then
270       $ACLOCAL
271     else
272       $ACLOCAL 1>/dev/null 2>/dev/null
273     fi
274     if test $? != 0; then
275       ad_fatal "aclocal failed"
276     fi
277   fi
278
279   if test "$AUTOCONF"; then
280     ad_debug "Running autoconf"
281     $AUTOCONF
282     if test $? != 0; then
283       ad_fatal "autoconf failed"
284     fi
285     run_autoconf=true
286   fi
287
288   if test "$AUTOHEADER"; then
289     ad_debug "Running autoheader"
290     $AUTOHEADER
291     if test $? != 0; then
292       ad_fatal "autoheader failed"
293     fi
294   fi
295
296   if test "$LIBTOOLIZE"; then
297     ad_debug "Running libtoolize"
298     $LIBTOOLIZE
299     if test $? != 0; then
300       ad_fatal "libtoolize failed"
301     fi
302   fi
303
304   if test x$run_autoconf = xtrue; then
305     if test '!' -f configure; then
306       ad_fatal "creating configure script failed"
307     fi
308   fi
309
310   ad_debug "<ad_make_configure"
311 }
312
313 #
314 # Creates the configure.ac script from the configure.ad fragments in
315 # the source tree.  Takes the source configure file as argument which
316 # is used to create the actual configure.ac.
317 #
318 # Arguments: ad_make_configure_ac <configure_ac_source>
319 #
320 ad_make_configure_ac()
321 {
322   local check
323
324   ad_debug ">ad_make_configure_ac: $1"
325
326   if test '!' -f $1; then
327     ad_fatal "The configure file '$1' does not exist"
328   fi
329
330   check="`sed 's/^[     ]*//' < $1 | grep -v "^#" | grep -e "AD_INIT"`"
331   if test -z $check; then
332     rm -f configure.ad.cfs
333     rm -f $fname $fname.tmp
334     ad_fatal "The 'AD_INIT' macro has not been set in configure.ac"
335   fi
336
337   rm -f configure.ac configure.ad.cfs
338
339   cfs=`find . -name configure\*\.ad`
340   for i in $cfs
341   do
342     if test "x$i" = "x$1"; then
343       continue
344     fi
345     ad_debug "including $i"
346     cat $i >> configure.ad.cfs
347   done
348
349   if test -f configure.ad.cfs; then
350     check="`sed 's/^[   ]*//' < $1 | grep -v "^#" | grep -e "AD_INCLUDE_CONFIGURE"`"
351     if test -z $check; then
352       rm -f configure.ad.cfs
353       ad_warning "configure.ad fragments found but 'AD_INCLUDE_CONFIGURE' is not set"
354     fi
355   fi
356
357   # Header for configure.ac
358   fname="configure.tmp.ac"
359   cat > $fname <<EOF
360 # Automatically generated by Autodist $ver.  Do not edit.
361 # To make changes edit the configure.ad file in the source tree.
362
363 # Source: configure.ad
364 # Generated: `date` by `whoami`
365 # Distribution: $distribution
366 # License: $license
367
368 EOF
369
370   ad_debug "creating configure.ac"
371   if test -f configure.ad.cfs; then
372     sed '/AD_INCLUDE_CONFIGURE/ r configure.ad.cfs' $1 > $fname.tmp
373     sed -e "/AD_INCLUDE_CONFIGURE/s///" $fname.tmp >> $fname
374     rm -f configure.ad.cfs $fname.tmp
375   else
376     cat $1 >> $fname.tmp
377   fi
378
379   # Process AD_INIT
380   sed -e "/AD_INIT/s//AC_INIT([$distribution], [$dist_version], [$bug_report], [$package])/" $fname > $fname.tmp
381
382   # Process for distribution
383   rm -f $fname
384   ad_process_file $fname.tmp $fname
385
386   # Remove any trailing backslashes
387   if test -f "$fname"; then
388     sed -e :a -e '/\\$/N; s/[   ]*\\\n//; ta' < $fname > configure.ac
389   else
390     cp -p $fname.tmp configure.ac
391   fi
392   rm -f $fname $fname.tmp
393
394   ad_debug "<ad_make_configure_ac: $1"
395 }
396
397 #
398 # Creates the Makefile.in files by running the automake tool.
399 #
400 # Arguments: ad_make_makefile_ins
401 #
402 ad_make_makefile_ins()
403 {
404   ad_debug ">ad_make_makefile_ins"
405
406   if test "$AUTOMAKE"; then
407     ad_debug "Running automake"
408     $AUTOMAKE
409     if test $? != 0; then
410       ad_fatal "automake failed"
411     fi
412   fi
413
414   ad_debug "<ad_make_makefile_ins"
415 }
416
417 #
418 # Creates the Makefile.am files from the Makefile.ad files in the
419 # source tree.  This runs the distribution specific processing for the
420 # Makefile.ad files.
421 #
422 # Arguments: ad_make_makefile_ams
423 #
424 ad_make_makefile_ams()
425 {
426   ad_debug ">ad_make_makefile_ams"
427
428   files=`find . -name Makefile\.ad`
429   for ff in $files
430   do
431     fname=`echo $ff | sed s/\.ad//`
432
433     # Header for the Makefile.am
434   cat > $fname.am <<EOF
435 # Automatically generated by Autodist $ver from Makefile.ad.  Do not edit.
436 # To make changes edit the $ff file in the source tree.
437
438 # Source: $ff
439 # Generated: `date` by `whoami`
440 # Distribution: $distribution
441 # License: $license
442
443 EOF
444
445     # Run the distribution processing for this Makefile.ad
446     ad_debug "Processing $ff to be $fname.am"
447     ad_process_file $ff $fname.tmp
448
449     # Remove any trailing backslashes
450     if test -f "$fname.tmp"; then
451       sed -e :a -e '/\\$/N; s/[         ]*\\\n//; ta' < $fname.tmp >> $fname.am
452     else
453       cat $ff >> $fname.am
454     fi
455
456     rm -f $fname.tmp
457   done
458
459   ad_debug "<ad_make_makefile_ams"
460 }
461
462 #
463 # Processes all files with .ad suffix, with exception of configure*.ad
464 # and Makefile.ad files, for distribution from the source tree.
465 #
466 # Arguments: ad_process_ads
467 #
468 ad_process_ads()
469 {
470   ad_debug ">ad_process_ads"
471
472   files=`find . -name \*\.ad \! -name configure\*\.ad \! -name Makefile\.ad`
473   for i in $files
474   do
475     fname=`echo $i | sed s/\.ad//`
476
477     # Run the distribution processing for this file
478     ad_debug "Processing $i to be $fname"
479     ad_process_file $i $fname
480   done
481
482   ad_debug "<ad_process_ads"
483 }
484
485 #
486 # Includes files specified in the distribution for inclusion.  Used when
487 # creating the distribution for packaging.
488 #
489 # include has the following format in distfile:
490 #
491 #   include <path> [<dest path>]
492 #
493 # If only source path, which may be file, directory or regular expression,
494 # is specified the path will be same in distribution.  If the destination
495 # path is specified that will be the new name and/or new location of the
496 # source path.  This, in effect, is a cp utility with ability to create
497 # directories if they do not exist.
498 #
499 # Arguments: ad_dist_includes <includeslist> <recursive>
500 #
501 ad_dist_includes()
502 {
503   local incs
504
505   ad_debug ">ad_dist_includes: $1 $2"
506
507   # By default do not expand pathnames
508   set -f
509
510   # Add : separator at the end
511   incs="`echo "$1" | sed 's/$/ : /'`"
512
513   src=
514   dst=
515   for i in $incs
516   do
517     if test "$i" = ":" && test -z "$src"; then
518       continue
519     fi
520     if test -z "$src"; then
521       src=$i
522       continue
523     fi
524     if test -z "$dst" && test "$i" != ":"; then
525       dst=$i
526     else
527       dst=$src
528     fi
529
530     ad_debug "Including $src into $dst"
531
532     if test -f "$src"; then
533       # Add file
534
535       if test "$src" = "$dst"; then
536         # Add to same location
537         d=`echo $src | sed 's,/[^/]*$,,'`
538         if test "$d" != "$src" && test "$d" != "." && \
539            test '!' -d $am_distdir/$d; then
540           mkdir -p $am_distdir/$d || exit 1
541         fi
542       else
543         # Add to different location
544         check=`echo "$dst" | sed 's/?//; s/*//; s/\[//; s/\]//'`
545         if test "$check" != "$dst"; then
546           ad_fatal "Invalid destination in 'include $src $dst'"
547         fi
548
549         d=`echo $dst | sed 's,/[^/]*$,,'`
550         if test "$d" != "$dst" && test "$d" != "." && \
551            test '!' -d $am_distdir/$d; then
552           mkdir -p $am_distdir/$d || exit 1
553         fi
554       fi
555
556       cp -p $src $am_distdir/$d || exit 1
557
558     elif test -d "$src"; then
559       # Add directory
560
561       if test "$src" = "$dst"; then
562         # Add to same location
563         d=`echo $src | sed 's,/[^/]*$,,'`
564         ds=`echo $src | sed 's/\/$//'`
565         if test "$ds" = "$d"; then
566           d=`echo $d | sed 's,/[^/]*$,,'`
567         fi
568         if test '!' -d $am_distdir/$d && test "$ds" != "$d"; then
569           mkdir -p $am_distdir/$d || exit 1
570         fi
571
572         cp -pR $src $am_distdir/$d || exit 1
573       else
574         # Add to different location
575         check=`echo "$dst" | sed 's/?//; s/*//; s/\[//; s/\]//'`
576         if test "$check" != "$dst"; then
577           ad_fatal "Invalid destination in 'include $src $dst'"
578         fi
579
580         d=`echo $dst | sed 's,/[^/]*$,,'`
581         ds=`echo $dst | sed 's/\/$//'`
582         if test "$ds" = "$d"; then
583           d=`echo $d | sed 's,/[^/]*$,,'`
584         fi
585         if test '!' -d $am_distdir/$d && test "$dst" != "$d"; then
586           mkdir -p $am_distdir/$d || exit 1
587         fi
588
589         cp -pR $src $am_distdir/$dst || exit 1
590       fi
591
592     elif test x$2 != xtrue; then
593       # We assume regular expression in filename
594       check=`echo "$src" | sed 's/?//; s/*//; s/\[//; s/\]//'`
595       if test "$check" == "$src"; then
596         if test '!' -a $src; then
597           ad_fatal "Including $src: No such file or directory"
598         fi
599         src=
600         dst=
601         continue
602       fi
603
604       # Recursively call this function with expanded pathnames.  The
605       # reason why we don't let sh by default expand pathnames is that
606       # the include's destination is optional.  If sh expands by default
607       # we don't know the destination.  For this reason, we handle the
608       # expansion here ourselves.
609
610       # If src and dst are same, then expand the pathname as we'll copy
611       # matches to their own locations.
612       if test "$src" = "$dst"; then
613         # Expand pathnames, and format to our include format
614         set +f
615         srcs=`echo $src | sed -e 's/ / : /g' -e 's/^/ : /'` || exit 1
616         set -f
617       else
618         # Destination is new, and it has to be a directory.
619         check=`echo "$dst" | sed 's/?//; s/*//; s/\[//; s/\]//'`
620         if test "$check" != "$dst"; then
621           ad_fatal "Invalid destination in 'include $src $dst'"
622         fi
623
624         # Make sure dst has / at the end, as this must be a directory
625         dst=`echo $dst | sed 's/\/$//; s/$/\//'`
626
627         # Escape dst for sed
628         dste=`echo $dst | sed 's/\\//\\\\\//g'` || exit 1
629
630         # Expand pathnames, and format to our include format
631         set +f
632         srcs=`echo $src | sed -e "s/ / $dste : /g" \
633           -e 's/^/ : /' -e "s/$/ $dste/"` || exit 1
634         set -f
635       fi
636
637       # Include recursively
638       ad_dist_includes "$srcs" true
639
640     elif test '!' -a $src; then
641       ad_fatal "Including $src: No such file or directory"
642     fi
643
644     src=
645     dst=
646   done
647
648   set +f
649
650   ad_debug "<ad_dist_includes: $1 $2"
651 }
652
653 #
654 # Excludes files specified in the distribution for exclusion.  Used when
655 # creating the distribution for packaging.
656 #
657 # exclude has the following format in distfile:
658 #
659 #  exclude <path>
660 #
661 # The path may be file, directory or regular expression.
662 #
663 # Arguments: ad_dist_includes <excludelist>
664 #
665 ad_dist_excludes()
666 {
667   ad_debug ">ad_dist_excludes: $1"
668
669   for i in $1
670   do
671     ad_debug "Excluding $i"
672     rm -rf $am_distdir/$i
673   done
674
675   ad_debug "<ad_dist_excludes: $1"
676 }
677
678 #
679 # Processes the entire tree for distribution.  This inspects files other
680 # than source and header files, with exception of any file with .ad
681 # suffix, and performs distribution processing for the file.  The original
682 # file is replaced with the processed file.  This function is used when
683 # creating the distribution for packaging.
684 #
685 # Arguments: ad_process_tree <directory>
686 #
687 ad_process_tree()
688 {
689   ad_debug ">ad_process_tree: $1"
690
691   # We take all files, other than *.ad, including source files, in case
692   # they use the non-C-compiler-friendly format of distdefs, which is
693   # possible.
694
695   files=`find $am_distdir \! -name \*\.ad`
696   files=`echo $files | sed 's/$am_distdir//'`
697
698   # Take away noprocess list
699   if test -f autodist.noprocess; then
700     files=`echo $files | sh autodist.noprocess` || exit 1
701   fi
702
703   for ff in $files
704   do
705     ad_process_file $ff $ff.tmp
706     if test -f $ff.tmp; then
707       rm -f $ff || exit 1
708       mv -f $ff.tmp $ff || exit 1
709     fi
710   done
711
712   ad_debug "<ad_process_tree: $1"
713 }
714
715 #
716 # Processes the entire source tree for distribution.  This inspects files
717 # in the source tree, with exception of any file with .ad suffix, and
718 # performs distribution processing for the file.  The original file is
719 # replaced with the processed file.  This function is used when creating
720 # the distribution for packaging.
721 #
722 # Call this before ad_process_tree().
723 #
724 # Arguments: ad_process_source_tree <directory>
725 #
726 ad_process_source_tree()
727 {
728   ad_debug ">ad_process_source_tree: $1"
729
730   # We take only C/C++ files since they use the C compiler friendly
731   # version of distdefs.  Other files are not assumed to use them.
732   files=`find $am_distdir \! -name \*\.ad \( \
733         -name \*\.[cC] -o \
734         -name \*\.[cC][cCpP] -o \
735         -name \*\.[cC][xX][xX] -o \
736         -name \*\.[cC][pP][pP] -o \
737         -name \*\.[cC]++ -o \
738         -name \*\.m -o \
739         -name \*\.[hH] -o \
740         -name \*\.hh \)`
741
742   # Take away noprocess list
743   if test -f autodist.noprocess; then
744     files=`echo $files | sh autodist.noprocess` || exit 1
745   fi
746
747   for ff in $files
748   do
749     ad_process_source_file $ff $ff.tmp
750     if test -f $ff.tmp; then
751       rm -f $ff || exit 1
752       mv -f $ff.tmp $ff || exit 1
753     fi
754   done
755
756   ad_debug "<ad_process_source_tree: $1"
757 }
758
759 #
760 # Makes distribution sane, ala modtimes.  Since we modify the distribution
761 # we need to make it sane after that.
762 #
763 # Arguments: ad_makedist_makesane
764 #
765 ad_makedist_makesane()
766 {
767   ad_debug ">ad_makedist_makesane:"
768
769   # DO NOT change these order unless you know what you are doing.
770   if test -f $am_distdir/configure.ac; then
771     touch $am_distdir/configure.ac
772   fi
773
774   if test -f $am_distdir/aclocal.m4; then
775     touch $am_distdir/aclocal.m4
776   fi
777
778   if test '!' -f Makefile; then
779     ad_fatal "Makefile: No such file or directory"
780   fi
781
782   configh=`grep "^CONFIG_HEADER" Makefile | cut -d= -f2 | sed 's/^[     ]*//'`
783   touch $am_distdir/$configh.in 1>/dev/null 2>/dev/null
784
785   files=`find $am_distdir -name Makefile\.in`
786   for i in $files
787   do
788     touch $i
789   done
790
791   if test -f $am_distdir/configure; then
792     touch $am_distdir/configure
793   fi
794
795   if test -f $am_distdir/config.status; then
796     touch $am_distdir/config.status
797   fi
798
799   ad_debug "<ad_makedist_makesane:"
800 }
801
802 #
803 # Creates distribution of the source tree.  All files in the distribution
804 # will be processed and the distribution will be packaged.
805 #
806 # Arguments: ad_makedist
807 #
808 ad_makedist()
809 {
810   ad_debug ">ad_makedist"
811
812   if test '!' -f autodist.dist; then
813     ad_fatal "Autodist has not been run yet to prepare source tree"
814   fi
815
816   if test -z $MAKE; then
817     ad_fatal "The MAKE variable is not set in autodist.conf"
818   fi
819
820   # Get distdir from Makefile
821   if test '!' -f Makefile; then
822     ad_fatal "The source tree is not configured, run ./configure first"
823   fi
824
825   # Parse the requested distribution
826   distribution=`grep "dist:" < autodist.dist | cut -d: -f2` || exit 1
827   dist_version=`grep "ver:" < autodist.dist | cut -d: -f2` || exit 1
828   am_distdir=`grep "distdir:" < autodist.dist | cut -d: -f2` || exit 1
829   ad_parse_distribution $distribution false
830   ad_process_distdefs
831
832   if test x$opt_no_dist = xtrue; then
833     ad_fatal "The '$distribution' distribution cannot be packaged"
834   fi
835
836   # Run pre-dist-hooks
837   ad_run_dist_hooks "$pre_dist_hooks"
838
839   # Create distribution directory
840   ad_debug "Creating distribution directory $am_distdir"
841   $MAKE distdir || exit 1
842   chmod -R a+r $am_distdir
843
844   if test '!' -d $am_distdir; then
845     ad_fatal "Distribution directory $am_distdir not created"
846   fi
847
848   # Run pre-process-dist-hooks
849   ad_run_dist_hooks "$pre_p_dist_hooks"
850
851   # Run excludes
852   ad_dist_excludes "$excludes"
853
854   # Run includes
855   ad_dist_includes "$includes"
856
857   # Include specific license file if specified
858   if test "$license" != ""; then
859     cp -p $license $am_distdir/COPYING || exit 1
860   fi
861
862   # Process noprocesses
863   ad_process_noprocess
864
865   # Process source files
866   ad_debug "Process distribution source tree"
867   ad_process_source_tree $am_distdir
868
869   # Process non-source files
870   ad_debug "Process distribution tree"
871   ad_process_tree $am_distdir
872
873   # Run post-process_dist-hooks
874   ad_run_dist_hooks "$post_p_dist_hooks"
875
876   # Make distribution sane
877   ad_makedist_makesane
878
879   # Package
880   ad_debug "Packaging distribution"
881   tar chof $am_distdir.tar $am_distdir || exit 1
882
883   # Compress
884   ad_debug "Compressing distribution package"
885   if test x$ad_gzip = xtrue; then
886     gzip -9 -c $am_distdir.tar > $am_distdir.tar.gz || exit 1
887   fi
888   if test x$ad_bzip2 = xtrue; then
889     bzip2 -9 -c $am_distdir.tar > $am_distdir.tar.bz2 || exit 1
890   fi
891   if test x$ad_compress = xtrue; then
892     compress -c $am_distdir.tar > $am_distdir.tar.Z || exit 1
893   fi
894   if test x$ad_zip = xtrue; then
895     rm -f $am_distdir.zip
896     zip -rq $am_distdir.zip $am_distdir || exit 1
897   fi
898   rm -f $am_distdir.tar
899
900   # Run post-dist-hooks
901   ad_run_dist_hooks "$post_dist_hooks"
902
903   # Cleanup
904   rm -rf $am_distdir
905   rm -f autodist.noprocess
906
907   ad_debug "<ad_makedist"
908 }
909
910 #
911 # Handles distribution options.
912 #
913 # option has the following format in distfile:
914 #
915 #   option <option>
916 #
917 # Following options are supported:
918 #
919 #   template
920 #   no-dist
921 #   no-inherit
922 #
923 # Arguments: ad_handle_options <options>
924 #
925 ad_handle_options()
926 {
927   ad_debug ">ad_handle_options: $1"
928
929   for i in $1
930   do
931     if test "$i" = "template"; then
932       opt_template=true
933       continue
934     elif test "$i" = "no-dist"; then
935       opt_no_dist=true
936       continue
937     elif test "$i" = "no-inherit"; then
938       opt_no_inherit=true
939       continue
940     fi
941   done
942
943   ad_debug "<ad_handle_options: $1"
944 }
945
946 #
947 # Clears set options
948 #
949 # Arguments: ad_clear_options
950 #
951 ad_clear_options()
952 {
953   ad_debug ">ad_clear_options"
954   opt_template=false
955   opt_no_dist=false
956   opt_no_inherit=false
957   ad_debug "<ad_clear_options"
958 }
959
960 #
961 # Parses the distribution.  Gets all distribution defines from the
962 # distribution.  This also expands all inherited distributions recursively
963 # to get all inherited distribution defines.  From inherited distributions
964 # their name and package name is not inherited.
965 #
966 # Arguments: ad_parse_distribution <distribution name> <inherit>
967 #
968 ad_parse_distribution()
969 {
970   local inhs
971   local defs
972   local undefs
973   local incs
974   local excs
975   local nops
976   local opts
977   local dname
978   local dpname
979   local bugr
980   local prh
981   local poh
982   local prdh
983   local podh
984   local prpdh
985   local popdh
986
987   ad_debug ">ad_parse_distribution: $1 $2"
988
989   if test '!' -f $distdir/$1; then
990     ad_fatal "Distribution '$1' is not declared"
991   fi
992
993   # Get inherited
994   inhs=`sed 's/^[       ]*//' < $distdir/$1 | grep -v "^#" \
995     | grep "inherit " | cut -d' ' -f2 | sort | uniq`
996
997   # Get distdefs
998   defs=`sed 's/^[       ]*//' < $distdir/$1 | grep -v "^#" \
999    | grep "define " | cut -d' ' -f2 | sort | uniq`
1000
1001   if test "$inhs" = "" && test "$defs" = ""; then
1002     ad_fatal "Distribution '$1' does not define anything"
1003   fi
1004
1005   # Get undefined distdefs
1006   undefs=`sed 's/^[     ]*//' < $distdir/$1 | grep -v "^#" \
1007    | grep "undef " | cut -d' ' -f2 | sort | uniq`
1008
1009   # Get includes
1010   incs=`sed 's/^[       ]*//' < $distdir/$1 | grep -v "^#" \
1011     | grep "include " | sed 's/include / : /'`
1012
1013   # Get excludes
1014   excs=`sed 's/^[       ]*//' < $distdir/$1 | grep -v "^#" \
1015     | grep "exclude " | cut -d' ' -f2- | sort | uniq`
1016
1017   # Get noprocesses
1018   nops=`sed 's/^[       ]*//' < $distdir/$1 | grep -v "^#" \
1019     | grep "noprocess " | cut -d' ' -f2- | sort | uniq`
1020
1021   # Get options
1022   opts=`sed 's/^[       ]*//' < $distdir/$1 | grep -v "^#" \
1023     | grep "option " | cut -d' ' -f2- | sort | uniq`
1024
1025   # Check options
1026   ad_handle_options "$opts"
1027   if test x$2 = xtrue && test x$opt_no_inherit = xtrue; then
1028     ad_fatal "Distribution '$1' cannot be inherited"
1029   fi
1030   if test x$2 = xfalse && test x$opt_template = xtrue; then
1031     ad_fatal "Template distribution '$1' cannot be prepared or packaged"
1032   fi
1033
1034   ad_debug "inherits: $inhs"
1035   ad_debug "distdefs: $defs"
1036   ad_debug "includes: $incs"
1037   ad_debug "excludes: $excs"
1038   ad_debug "noprocess: $nops"
1039   ad_debug "undistdefs: $undefs"
1040   ad_debug "options: $opts"
1041
1042   # Expand distdefs from inherited distributions
1043   for i in $inhs
1044   do
1045     if test x$1 = x$i; then
1046       ad_fatal "Infinite recursion detected.  Fix the '$distdir/$1' \
1047             distribution to not have 'inherit $i' declared."
1048     fi
1049
1050     if test '!' -f $distdir/$i; then
1051       ad_fatal "Distribution '$i' is not declared (inherited from '$1')"
1052     fi
1053
1054     ad_parse_distribution $i true
1055     ad_clear_options
1056   done
1057
1058   # Get license
1059   license=`sed 's/^[    ]*//' < $distdir/$1 | grep -v "^#" \
1060     | grep "license " | cut -d' ' -f2`
1061   licenseh=`sed 's/^[   ]*//' < $distdir/$1 | grep -v "^#" \
1062     | grep "license-header " | sed 's/license-header / : /'`
1063
1064   ad_debug "license: $license"
1065   ad_debug "licenseh: $licenseh"
1066
1067   if test x$2 = xfalse; then
1068     # Get distribution name
1069     dname=`sed 's/^[    ]*//' < $distdir/$1 | grep -v "^#" \
1070       | grep "name " | cut -d' ' -f2-`
1071
1072     if test "$dname"; then
1073       distribution=$dname
1074     fi
1075
1076     # Get distribution package name (optional)
1077     dpname=`sed 's/^[   ]*//' < $distdir/$1 | grep -v "^#" \
1078      | grep "package " | cut -d' ' -f2`
1079
1080     if test "$dpname"; then
1081       package=$dpname
1082     else
1083       package=$distribution
1084     fi
1085
1086     # Get Bug-report email address (optional)
1087     bugr=`sed 's/^[     ]*//' < $distdir/$1 | grep -v "^#" \
1088      | grep "bug-report " | cut -d' ' -f2-`
1089
1090     if test "$bugr"; then
1091       bug_report=$bugr
1092     fi
1093
1094     ad_debug "distribution: $distribution"
1095     ad_debug "package: $package"
1096     ad_debug "bug-report: $bug_report"
1097
1098     # Get hooks (optional)
1099     prh=`sed 's/^[      ]*//' < $distdir/$1 | grep -v "^#" \
1100      | grep "pre-hook " | cut -d' ' -f2-`
1101     poh=`sed 's/^[      ]*//' < $distdir/$1 | grep -v "^#" \
1102      | grep "post-hook " | cut -d' ' -f2-`
1103     prdh=`sed 's/^[     ]*//' < $distdir/$1 | grep -v "^#" \
1104      | grep "pre-dist-hook " | cut -d' ' -f2-`
1105     podh=`sed 's/^[     ]*//' < $distdir/$1 | grep -v "^#" \
1106      | grep "post-dist-hook " | cut -d' ' -f2-`
1107     prpdh=`sed 's/^[    ]*//' < $distdir/$1 | grep -v "^#" \
1108      | grep "pre-process-dist-hook " | cut -d' ' -f2-`
1109     popdh=`sed 's/^[    ]*//' < $distdir/$1 | grep -v "^#" \
1110      | grep "post-process-dist-hook " | cut -d' ' -f2-`
1111
1112     pre_hooks="$pre_hooks $prh"
1113     post_hooks="$post_hooks $poh"
1114     pre_dist_hooks="$pre_dist_hooks $prdh"
1115     post_dist_hooks="$post_dist_hooks $podh"
1116     pre_p_dist_hooks="$pre_p_dist_hooks $prpdh"
1117     post_p_dist_hooks="$post_p_dist_hooks $popdh"
1118     doptions="$doptions $opts"
1119
1120     ad_handle_options "$doptions"
1121     ad_debug "options: $doptions"
1122   fi
1123
1124   # Return to caller
1125   inherits="$inherits $inhs"
1126   distdefs="$distdefs $defs"
1127   includes="$includes $incs"
1128   excludes="$excludes $excs"
1129   noprocess="$noprocess $nops"
1130   undistdefs="$undistdefs $undefs"
1131
1132   ad_debug "<ad_parse_distribution: $1 $2"
1133 }
1134
1135 #
1136 # Processes parsed distdefs.  Removes duplicates, and undefined distdefs
1137 # from the distdefs.
1138 #
1139 # Arguments: ad_process_distdefs
1140 #
1141 ad_process_distdefs()
1142 {
1143   ad_debug ">ad_process_distdefs"
1144
1145   # Remove all undefined distribution defines
1146   for i in $undistdefs
1147   do
1148     ad_debug "undefining $i distdef"
1149     distdefs=`echo $distdefs | sed s/$i//`
1150   done
1151
1152   rm -f autodist.tmp.defs
1153
1154   # Remove duplicate distdefs
1155   for i in $distdefs
1156   do
1157     echo $i >>autodist.tmp.defs
1158   done
1159   distdefs=`sort < autodist.tmp.defs | uniq`
1160   distdefs=`echo $distdefs`
1161   rm -f autodist.tmp.defs
1162
1163   ad_debug "distdefs=$distdefs"
1164
1165   ad_debug "<ad_process_distdefs"
1166 }
1167
1168 #
1169 # Processes for a license header change.
1170 #
1171 # Arguments: ad_process_license_header <scriptfile>
1172 #
1173 ad_process_license_header()
1174 {
1175   ad_debug ">ad_process_license_header"
1176
1177   # Add : separator at the end
1178   lics=`echo "$licenseh" | sed 's/$/ : /'`
1179
1180   src=
1181   dst=
1182   for i in $lics
1183   do
1184     if test "$i" = ":" && test -z "$src"; then
1185       continue
1186     fi
1187     if test -z "$src"; then
1188       src=$i
1189       continue
1190     fi
1191     if test -z "$dst" && test "$i" != ":"; then
1192       dst=$i
1193     else
1194       ad_fatal "Missing argument in 'license-header $src'"
1195     fi
1196
1197     ad_debug "Replacing $src license with $dst license"
1198
1199     if test '!' -f $src; then
1200       ad_fatal "License header $src: No such file or directory"
1201     fi
1202
1203     if test '!' -f $dst; then
1204       ad_fatal "License header $dst: No such file or directory"
1205     fi
1206
1207     # Awk script to replace the license header
1208     fl=`sed q $src | sed 's/\\//\\\\\//g' > autodist.lsrc` || exit 1
1209     ll=`sed -n '$p' $src | sed 's/\\//\\\\\//g' > autodist.ldst` || exit 1
1210     echo "/`cat autodist.lsrc`/,/`cat autodist.ldst`/ { FILE1=\"$src\"; FILE2=\"$dst\"; getline F1 < FILE1; getline F2 < FILE2; if (F1) sub(F1, F2); else { F1=\"\$\"; sub(F1, F2); } }" >> $1
1211     rm -f autodist.lsrc autodist.ldst
1212
1213     src=
1214     dst=
1215   done
1216
1217   ad_debug "<ad_process_license_header"
1218 }
1219
1220 #
1221 # Process specified noprocesses.  This is called during makedist.
1222 #
1223 # Arguments: ad_process_noprocess
1224 #
1225 ad_process_noprocess()
1226 {
1227   local np=false
1228   local n="sed "
1229
1230   ad_debug ">ad_process_noprocess"
1231
1232   for i in $noprocess
1233   do
1234     # Escape
1235     ie=`echo $i | sed 's/\\//\\\\\//g'` || exit 1
1236
1237     n="$n -e 's/$am_distdir\\/$ie//'"
1238     np=true
1239   done
1240
1241   rm -f autodist.noprocess
1242   if test x$np = xtrue; then
1243     echo $n > autodist.noprocess || exit 1
1244   fi
1245
1246   ad_debug "<ad_process_noprocess"
1247 }
1248
1249 #
1250 # Process a file given as argument for the distribution.
1251 #
1252 # Arguments: ad_process_file <filepath> <dest_filepath>
1253 #
1254 ad_process_file()
1255 {
1256   local found=false
1257   local f
1258   local defs
1259   local ndefs
1260
1261   # Process only regular files
1262   if test '!' -f $1; then
1263     return
1264   fi
1265
1266   ad_debug ">ad_process_file: $1 $2"
1267
1268   f="autodist.tmp.script"
1269   rm -f $f
1270
1271   # If license header is provided, replace the license header in the file.
1272   ad_process_license_header $f
1273
1274   ad_debug "Getting #ifdef's and #ifndef's"
1275
1276   # Get defined distribution defines
1277   defs=`awk "/^#ifdef "$DP"_DIST_|^#else "$DP"_DIST_/ { print; }" \
1278     $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
1279
1280   # Get explicitly not-defined distribution defines
1281   ndefs=`awk "/^#ifndef "$DP"_DIST_|^#else !"$DP"_DIST_/ { print; }" \
1282     $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq`
1283
1284   ad_debug "defs in $1: $defs"
1285   ad_debug "ndefs in $1: $ndefs"
1286
1287   # Create the script to include and exclude stuff in the file according
1288   # to the distribution defines
1289
1290   # ifdefs
1291   ad_debug "processing ifdefs"
1292   for d in $defs
1293   do
1294     found=false
1295     for i in $distdefs
1296     do
1297       if test x$d = x$i; then
1298         found=true
1299         break
1300       fi
1301     done
1302
1303     # If distribution define was not found exclude those lines from the file.
1304     # This also handles the #ifdef's #else (ie. #ifndef) branch.
1305     if test x$found = xfalse; then
1306       ad_debug "ifdef $d will be excluded (it is NOT defined)"
1307       echo "/^#ifdef $d/,/^#else !$d|^#endif $d/ { next; }" >> $f
1308     else
1309       echo "/^#else !$d/,/^#endif $d/ { next; }" >> $f
1310     fi
1311   done
1312
1313   # ifndefs
1314   ad_debug "processing ifndefs"
1315   for d in $ndefs
1316   do
1317     found=false
1318     for i in $distdefs
1319     do
1320       if test x$d = x$i; then
1321         found=true
1322         break
1323       fi
1324     done
1325
1326     # If distribution define was found exclude those lines from the file.
1327     # This also handles the #ifndef's #else (ie. #ifdef) branch.
1328     if test x$found = xtrue; then
1329       ad_debug "ifndef $d will be excluded (it IS defined)"
1330       echo "/^#ifndef $d/,/^#else $d|^#endif $d/ { next; }" >> $f
1331     else
1332       echo "/^#else $d/,/^#endif $d/ { next; }" >> $f
1333     fi
1334   done
1335
1336   # Now process the file with the script
1337   if test -f $f; then
1338
1339     # Those distdef lines that remain in the file are removed to make
1340     # the appearance prettier
1341     echo "/^#ifdef "$DP"_DIST_|^#endif "$DP"_DIST_|^#else "$DP"_DIST_|^#else !"$DP"_DIST_|^#ifndef "$DP"_DIST_/ { next; }" >> $f
1342     echo "{ print; }" >> $f
1343
1344     # Execute the script
1345     cp -p $1 $2 || exit 1
1346     awk -f $f $1 > $2 || exit 1
1347   fi
1348
1349   rm -f $f
1350
1351   ad_debug "<ad_process_file: $1 $2"
1352 }
1353
1354 #
1355 # Process a source file given as argument for the distribution.
1356 #
1357 # Arguments: ad_process_source_file <filepath> <dest_filepath>
1358 #
1359 ad_process_source_file()
1360 {
1361   local found=false
1362   local f
1363   local defs
1364   local ndefs
1365
1366   # Process only regular files
1367   if test '!' -f $1; then
1368     return
1369   fi
1370
1371   ad_debug ">ad_process_source_file: $1 $2"
1372
1373   f="autodist.tmp.script"
1374   rm -f $f
1375
1376   # If license header is provided, replace the license header in the file.
1377   ad_process_license_header $f
1378
1379   ad_debug "Getting #ifdef's and #ifndef's"
1380
1381   # Get defined distribution defines
1382   defs=`awk '/^#ifdef SILC_DIST_|^#else \/\* SILC_DIST_/ { print; }' \
1383     $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
1384
1385   # Get explicitly not-defined distribution defines
1386   ndefs=`awk '/^#ifndef SILC_DIST_|^#else \/\* \!SILC_DIST_/ { print; }' \
1387     $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq`
1388
1389   ad_debug "defs in $1: $defs"
1390   ad_debug "ndefs in $1: $ndefs"
1391
1392   # Create the script to include and exclude stuff in the file according
1393   # to the distribution defines
1394
1395   # ifdefs
1396   ad_debug "processing ifdefs"
1397   for d in $defs
1398   do
1399     found=false
1400     for i in $distdefs
1401     do
1402       if test x$d = x$i; then
1403         found=true
1404         break
1405       fi
1406     done
1407
1408     # If distribution define was not found exclude those lines from the file.
1409     # This also handles the #ifdef's #else (ie. #ifndef) branch.
1410     if test x$found = xfalse; then
1411       ad_debug "ifdef $d will be excluded (it is NOT defined)"
1412       echo "/^#ifdef $d/,/^#else \/\* \!$d|^#endif \/\* $d/ { next; }" >> $f
1413     else
1414       echo "/^#else \/\* \!$d/,/^#endif \/\* $d/ { next; }" >> $f
1415     fi
1416   done
1417
1418   # ifndefs
1419   ad_debug "processing ifndefs"
1420   for d in $ndefs
1421   do
1422     found=false
1423     for i in $distdefs
1424     do
1425       if test x$d = x$i; then
1426         found=true
1427         break
1428       fi
1429     done
1430
1431     # If distribution define was found exclude those lines from the file.
1432     # This also handles the #ifndef's #else (ie. #ifdef) branch.
1433     if test x$found = xtrue; then
1434       ad_debug "ifndef $d will be excluded (it IS defined)"
1435       echo "/^#ifndef $d/,/^#else \/\* $d|^#endif \/\* $d/ { next; }" >> $f
1436     else
1437       echo "/^#else \/\* $d/,/^#endif \/\* $d/ { next; }" >> $f
1438     fi
1439   done
1440
1441   # Now process the file with the script
1442   if test -f $f; then
1443
1444     # Those distdef lines that remain in the file are removed to make
1445     # the appearance prettier
1446     echo "/^#ifdef SILC_DIST_|^#endif \/\* SILC_DIST_|^#else \/\* SILC_DIST_|^#else \/\* \!SILC_DIST_|^#ifndef SILC_DIST_/ { next; }" >> $f
1447     echo "{ print; }" >> $f
1448
1449     # Execute the script
1450     cp -p $1 $2 || exit 1
1451     awk -f $f $1 > $2 || exit 1
1452   fi
1453
1454   rm -f $f
1455
1456   ad_debug "<ad_process_source_file: $1 $2"
1457 }
1458
1459 #
1460 # Run hooks
1461 #
1462 # Arguments: ad_run_hooks <hooks>
1463 #
1464 ad_run_hooks()
1465 {
1466   ad_debug ">ad_run_hooks: $1"
1467
1468   for i in $1
1469   do
1470     if test '!' -f $i; then
1471       ad_fatal "Hook script $i does not exist"
1472     fi
1473     sh $i "$distribution" "$dist_version" "$package" || exit 1
1474   done
1475
1476   ad_debug "<ad_run_hooks: $1"
1477 }
1478
1479 #
1480 # Run dist hooks
1481 #
1482 # Arguments: ad_run_dist_hooks <hooks>
1483 #
1484 ad_run_dist_hooks()
1485 {
1486   ad_debug ">ad_run_dist_hooks: $1"
1487
1488   for i in $1
1489   do
1490     if test '!' -f $i; then
1491       ad_fatal "Dist hook script $i does not exist"
1492     fi
1493     sh $i "$distribution" "$dist_version" "$package" "$am_distdir" || exit 1
1494   done
1495
1496   ad_debug "<ad_run_dist_hooks: $1"
1497 }
1498
1499 ###############################################################################
1500 # Autodist code
1501
1502 usage="Usage: autodist [options] [distribution] [version]"
1503 help="\
1504 Autodist prepares source tree for configuration, compilation and
1505 distribution.  Prepares the source tree from the \`autodist.ad'
1506 configuration file.  Generates Automake.am files from Automake.ad
1507 files, configure.ac file from configure.ad file(s), generates the
1508 configure script by running Autoconf tool, and generates Makefile.in
1509 files by running Automake tool.
1510
1511 Operation modes:
1512   -h, --help                print this help, then exit
1513   -V, --version             print version number, then exit
1514   -v, --verbose             verbosely report processing
1515   -d, --distdir <dir>       search distributions from <dir>
1516   -s, --distdefs [<dist>]   print distribution defines of <dist>, then exit
1517   -i, --init                initialize Autodist environment, create default
1518                             distribution directory and distribution, then exit
1519   -m, --makedist            create and package distribution
1520       --gzip                create package compressed with gzip (default)
1521       --bzip2               create also package compressed with bzip2
1522       --compress            create also package compressed with compress
1523       --zip                 create also package compressed with zip"
1524
1525 #
1526 # Process command line arguments
1527 #
1528 while test $# -gt 0; do
1529   case "${1}" in
1530
1531   -d |--distdir)
1532     shift;
1533     test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
1534     distdir="${1}";
1535     shift;;
1536
1537   --list)
1538     exit 0;;
1539
1540   -s | --distdefs)
1541     shift;
1542     if test $# -eq 0; then
1543       ad_parse_distribution $distribution false
1544       echo "Distribution: ${distribution}" 1>&2;
1545     else
1546       ad_parse_distribution $1 false
1547       echo "Distribution: ${1}" 1>&2;
1548     fi
1549     ad_process_distdefs
1550     echo "Distdefs:" 1>&2;
1551     echo "${distdefs}";
1552     exit 0;;
1553
1554   -i | --init)
1555     ad_initialize;
1556     exit 0;;
1557
1558   -m | --makedist)
1559     ad_makedist
1560     exit 0;;
1561
1562   --gzip)
1563     ad_gzip=true
1564     shift;;
1565
1566   --bzip2)
1567     ad_bzip2=true
1568     shift;;
1569
1570   --compress)
1571     ad_compress=true
1572     shift;;
1573
1574   --zip)
1575     ad_zip=true
1576     shift;;
1577
1578   -v | --verbose)
1579     debug=true
1580     shift;;
1581
1582   -h | --help | --h*)
1583     echo "${usage}" 1>&2;
1584     echo 1>&2;
1585     echo "${help}" 1>&2;
1586     echo 1>&2;
1587     exit 0;;
1588
1589   -V | --version)
1590     echo "@PACKAGE@ (@PACKAGE_NAME@) $ver" 1>&2;
1591     echo "Written by Pekka Riikonen" 1>&2;
1592     echo 1>&2;
1593     echo "Copyright (C) 2004 - 2005 SILC Project" 1>&2;
1594     echo "\
1595 This is free software; see the source for copying conditions.  There is NO
1596 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. " 1>&2;
1597     exit 0;;
1598
1599   --)
1600     shift;
1601     break;;
1602
1603   -*)
1604     echo "${usage}" 1>&2;
1605     exit 1;;
1606
1607   *)
1608     break;;
1609
1610   esac
1611 done
1612
1613 #
1614 # Parse the requested distribution
1615 #
1616 if test $# != 0; then
1617   distribution="${1}";
1618   distfile=$distribution
1619   shift
1620 fi
1621 ad_parse_distribution $distribution false
1622 ad_process_distdefs
1623
1624 if test $# != 0; then
1625   dist_version="${1}";
1626 fi
1627
1628 ad_debug "Preparing source tree for configuration and compilation..."
1629 ad_debug "Preparing $distribution distribution version $dist_version"
1630
1631 #
1632 # Create the distribution defines header file
1633 #
1634 if test "$DISTDEFS"; then
1635   ad_create_distdefs_h
1636 else
1637   ad_fatal "DISTDEFS not defined in $distdir/autodist.conf"
1638 fi
1639
1640 #
1641 # Run pre-hooks
1642 #
1643 ad_run_hooks "$pre_hooks"
1644
1645 #
1646 # Generate the Makefile.am files from Makefile.ad files
1647 #
1648 ad_make_makefile_ams
1649
1650 #
1651 # Generate the configure.ac from configure.ad file(s)
1652 #
1653 ad_make_configure_ac ./configure.ad
1654
1655 #
1656 # Process all files with .ad suffix for distribution processing
1657 #
1658 ad_process_ads
1659
1660 #
1661 # Generate configure script
1662 #
1663 ad_make_configure
1664
1665 #
1666 # Generate Makefile.in files
1667 #
1668 ad_make_makefile_ins
1669
1670 #
1671 # Create autodist.dist
1672 #
1673 ad_debug "Creating autodist.dist"
1674 echo "dist:$distfile" > autodist.dist
1675 echo "ver:$dist_version" >> autodist.dist
1676 echo "distdir:$package-$dist_version" >> autodist.dist
1677
1678 #
1679 # Run post-hooks
1680 #
1681 ad_run_hooks "$post_hooks"
1682
1683 ad_debug "Done, now run ./configure and make."
1684 exit 0