3 # Author: Pekka Riikonen <priikone@silcnet.org>
5 # Copyright (C) 2005 Pekka Riikonen
8 # Redistribution and use in source and binary forms, with or without
9 # modification, are permitted provided that the following conditions are
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
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.
33 ###############################################################################
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.
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+"$@"}'='"$@"'
45 DUALCASE=1; export DUALCASE # for MKS sh
47 # Support unset when possible.
48 if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
54 # Work around bugs in pre-3.0 UWIN ksh.
55 $as_unset ENV MAIL MAILPATH
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 \
66 if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
67 eval $as_var=C; export $as_var
74 ###############################################################################
77 # Packaging and compressing
83 # Distribution subdirectory
87 # This current distribution
89 distfile=$distribution
94 # All inherited distributions in this distribution
97 # All distribution defines for this distribution
100 # All distribution undefines for this distribution
103 # All distribution options
126 # Distribution license and license header
130 # Whether to output ad_debug information
136 ###############################################################################
138 if test -f "$distdir/autodist.conf"; then
139 . $distdir/autodist.conf
145 ###############################################################################
149 # Print out debug information if debugging is enabled. To enable debugging
150 # set the global variable "debug" to true value.
152 # Arguments: ad_debug <ad_debug string>
156 if test x$debug = xtrue; then
164 # Prints out error message and exits the script.
166 # Arguments: ad_fatal <error message>
171 echo autodist: error: $1
177 # Prints out warning message
179 # Arguments: ad_warning <warning message>
184 echo autodist: warning: $1
189 # Initializes the Autodist environment, creates default distribution
190 # directory, and default distribution.
192 # Arguments: ad_initialize
196 ad_debug ">ad_initialize"
198 # Create default distdir
199 if test '!' -f $distdir; then
203 # Create Autodist configuration file
204 if test -f @AUTODISTDIR@/autodist.conf; then
205 cp -p @AUTODISTDIR@/autodist.conf $distdir
208 # Create default distribution
209 if test -f @AUTODISTDIR@/default; then
210 cp -p @AUTODISTDIR@/default $distdir
213 ad_debug "<ad_initialize"
217 # Creates the distdefs header file including defined distdefs
219 # Arguments: ad_create_distdefs_h
221 ad_create_distdefs_h()
223 ad_debug ">ad_create_distdefs_h"
229 Automatically generated by Autodist $ver. Do not edit.
231 Generated: `date` by `whoami`
232 Distribution: $distribution
236 #ifndef _`echo $DP`_DISTDEFS_H
237 #define _`echo $DP`_DISTDEFS_H
243 echo "#define $i 1" >>$fname
248 #endif /* _`echo $DP`_DISTDEFS_H */
250 ad_debug "<ad_create_distdefs_h"
254 # Creates the main configure script for the distribution. This runs
255 # the aclocal, autoheader and autoconf tools.
257 # Arguments: ad_make_configure
261 local run_autoconf=false
263 ad_debug ">ad_make_configure"
267 if test "$ACLOCAL"; then
268 ad_debug "Running aclocal"
269 if test x$debug = xtrue; then
272 $ACLOCAL 1>/dev/null 2>/dev/null
274 if test $? != 0; then
275 ad_fatal "aclocal failed"
279 if test "$AUTOCONF"; then
280 ad_debug "Running autoconf"
282 if test $? != 0; then
283 ad_fatal "autoconf failed"
288 if test "$AUTOHEADER"; then
289 ad_debug "Running autoheader"
291 if test $? != 0; then
292 ad_fatal "autoheader failed"
296 if test "$LIBTOOLIZE"; then
297 ad_debug "Running libtoolize"
299 if test $? != 0; then
300 ad_fatal "libtoolize failed"
304 if test x$run_autoconf = xtrue; then
305 if test '!' -f configure; then
306 ad_fatal "creating configure script failed"
310 ad_debug "<ad_make_configure"
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.
318 # Arguments: ad_make_configure_ac <configure_ac_source>
320 ad_make_configure_ac()
324 ad_debug ">ad_make_configure_ac: $1"
326 if test '!' -f $1; then
327 ad_fatal "The configure file '$1' does not exist"
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"
337 rm -f configure.ac configure.ad.cfs
339 cfs=`find . -name configure\*\.ad`
342 if test "x$i" = "x$1"; then
345 ad_debug "including $i"
346 cat $i >> configure.ad.cfs
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"
357 # Header for configure.ac
358 fname="configure.tmp.ac"
360 # Automatically generated by Autodist $ver. Do not edit.
361 # To make changes edit the configure.ad file in the source tree.
363 # Source: configure.ad
364 # Generated: `date` by `whoami`
365 # Distribution: $distribution
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
380 sed -e "/AD_INIT/s//AC_INIT([$distribution], [$dist_version], [$bug_report], [$package])/" $fname > $fname.tmp
382 # Process for distribution
384 ad_process_file $fname.tmp $fname
386 # Remove any trailing backslashes
387 if test -f "$fname"; then
388 sed -e :a -e '/\\$/N; s/[ ]*\\\n//; ta' < $fname > configure.ac
390 cp -p $fname.tmp configure.ac
392 rm -f $fname $fname.tmp
394 ad_debug "<ad_make_configure_ac: $1"
398 # Creates the Makefile.in files by running the automake tool.
400 # Arguments: ad_make_makefile_ins
402 ad_make_makefile_ins()
404 ad_debug ">ad_make_makefile_ins"
406 if test "$AUTOMAKE"; then
407 ad_debug "Running automake"
409 if test $? != 0; then
410 ad_fatal "automake failed"
414 ad_debug "<ad_make_makefile_ins"
418 # Creates the Makefile.am files from the Makefile.ad files in the
419 # source tree. This runs the distribution specific processing for the
422 # Arguments: ad_make_makefile_ams
424 ad_make_makefile_ams()
426 ad_debug ">ad_make_makefile_ams"
428 files=`find . -name Makefile\.ad`
431 fname=`echo $ff | sed s/\.ad//`
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.
439 # Generated: `date` by `whoami`
440 # Distribution: $distribution
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
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
459 ad_debug "<ad_make_makefile_ams"
463 # Processes all files with .ad suffix, with exception of configure*.ad
464 # and Makefile.ad files, for distribution from the source tree.
466 # Arguments: ad_process_ads
470 ad_debug ">ad_process_ads"
472 files=`find . -name \*\.ad \! -name configure\*\.ad \! -name Makefile\.ad`
475 fname=`echo $i | sed s/\.ad//`
479 # Automatically generated by Autodist $ver. Do not edit.
480 # To make changes edit the $i file in the source tree.
483 # Generated: `date` by `whoami`
484 # Distribution: $distribution
489 # Run the distribution processing for this file
490 ad_debug "Processing $i to be $fname"
491 ad_process_file $i $fname
494 ad_debug "<ad_process_ads"
498 # Includes files specified in the distribution for inclusion. Used when
499 # creating the distribution for packaging.
501 # include has the following format in distfile:
503 # include <path> [<dest path>]
505 # If only source path, which may be file, directory or regular expression,
506 # is specified the path will be same in distribution. If the destination
507 # path is specified that will be the new name and/or new location of the
508 # source path. This, in effect, is a cp utility with ability to create
509 # directories if they do not exist.
511 # Arguments: ad_dist_includes <includeslist> <recursive>
517 ad_debug ">ad_dist_includes: $1 $2"
519 # By default do not expand pathnames
522 # Add : separator at the end
523 incs="`echo "$1" | sed 's/$/ : /'`"
529 if test "$i" = ":" && test -z "$src"; then
532 if test -z "$src"; then
536 if test -z "$dst" && test "$i" != ":"; then
542 ad_debug "Including $src into $dst"
544 if test -f "$src"; then
547 if test "$src" = "$dst"; then
548 # Add to same location
549 d=`echo $src | sed 's,/[^/]*$,,'`
550 if test "$d" != "$src" && test "$d" != "." && \
551 test '!' -d $am_distdir/$d; then
552 mkdir -p $am_distdir/$d || exit 1
555 # Add to different location
556 check=`echo "$dst" | sed 's/?//; s/*//; s/\[//; s/\]//'`
557 if test "$check" != "$dst"; then
558 ad_fatal "Invalid destination in 'include $src $dst'"
561 d=`echo $dst | sed 's,/[^/]*$,,'`
562 if test "$d" != "$dst" && test "$d" != "." && \
563 test '!' -d $am_distdir/$d; then
564 mkdir -p $am_distdir/$d || exit 1
568 cp -p $src $am_distdir/$d || exit 1
570 elif test -d "$src"; then
573 if test "$src" = "$dst"; then
574 # Add to same location
575 d=`echo $src | sed 's,/[^/]*$,,'`
576 ds=`echo $src | sed 's/\/$//'`
577 if test "$ds" = "$d"; then
578 d=`echo $d | sed 's,/[^/]*$,,'`
580 if test '!' -d $am_distdir/$d && test "$ds" != "$d"; then
581 mkdir -p $am_distdir/$d || exit 1
584 cp -pR $src $am_distdir/$d || exit 1
586 # Add to different location
587 check=`echo "$dst" | sed 's/?//; s/*//; s/\[//; s/\]//'`
588 if test "$check" != "$dst"; then
589 ad_fatal "Invalid destination in 'include $src $dst'"
592 d=`echo $dst | sed 's,/[^/]*$,,'`
593 ds=`echo $dst | sed 's/\/$//'`
594 if test "$ds" = "$d"; then
595 d=`echo $d | sed 's,/[^/]*$,,'`
597 if test '!' -d $am_distdir/$d && test "$dst" != "$d"; then
598 mkdir -p $am_distdir/$d || exit 1
601 cp -pR $src $am_distdir/$dst || exit 1
604 elif test x$2 != xtrue; then
605 # We assume regular expression in filename
606 check=`echo "$src" | sed 's/?//; s/*//; s/\[//; s/\]//'`
607 if test "$check" == "$src"; then
608 if test '!' -a $src; then
609 ad_fatal "Including $src: No such file or directory"
616 # Recursively call this function with expanded pathnames. The
617 # reason why we don't let sh by default expand pathnames is that
618 # the include's destination is optional. If sh expands by default
619 # we don't know the destination. For this reason, we handle the
620 # expansion here ourselves.
622 # If src and dst are same, then expand the pathname as we'll copy
623 # matches to their own locations.
624 if test "$src" = "$dst"; then
625 # Expand pathnames, and format to our include format
627 srcs=`echo $src | sed -e 's/ / : /g' -e 's/^/ : /'` || exit 1
630 # Destination is new, and it has to be a directory.
631 check=`echo "$dst" | sed 's/?//; s/*//; s/\[//; s/\]//'`
632 if test "$check" != "$dst"; then
633 ad_fatal "Invalid destination in 'include $src $dst'"
636 # Make sure dst has / at the end, as this must be a directory
637 dst=`echo $dst | sed 's/\/$//; s/$/\//'`
640 dste=`echo $dst | sed 's/\\//\\\\\//g'` || exit 1
642 # Expand pathnames, and format to our include format
644 srcs=`echo $src | sed -e "s/ / $dste : /g" \
645 -e 's/^/ : /' -e "s/$/ $dste/"` || exit 1
649 # Include recursively
650 ad_dist_includes "$srcs" true
652 elif test '!' -a $src; then
653 ad_fatal "Including $src: No such file or directory"
662 ad_debug "<ad_dist_includes: $1 $2"
666 # Excludes files specified in the distribution for exclusion. Used when
667 # creating the distribution for packaging.
669 # exclude has the following format in distfile:
673 # The path may be file, directory or regular expression.
675 # Arguments: ad_dist_includes <excludelist>
679 ad_debug ">ad_dist_excludes: $1"
683 ad_debug "Excluding $i"
684 rm -rf $am_distdir/$i
687 ad_debug "<ad_dist_excludes: $1"
691 # Processes the entire tree for distribution. This inspects files other
692 # than source and header files, with exception of any file with .ad
693 # suffix, and performs distribution processing for the file. The original
694 # file is replaced with the processed file. This function is used when
695 # creating the distribution for packaging.
697 # Arguments: ad_process_tree <directory>
701 ad_debug ">ad_process_tree: $1"
703 # We take all files, other than *.ad, including source files, in case
704 # they use the non-C-compiler-friendly format of distdefs, which is
707 files=`find $am_distdir \! -name \*\.ad`
708 files=`echo $files | sed 's/$am_distdir//'`
710 # Take away noprocess list
711 if test -f autodist.noprocess; then
712 files=`echo $files | sh autodist.noprocess` || exit 1
717 ad_process_file $ff $ff.tmp
718 if test -f $ff.tmp; then
720 mv -f $ff.tmp $ff || exit 1
724 ad_debug "<ad_process_tree: $1"
728 # Processes the entire source tree for distribution. This inspects files
729 # in the source tree, with exception of any file with .ad suffix, and
730 # performs distribution processing for the file. The original file is
731 # replaced with the processed file. This function is used when creating
732 # the distribution for packaging.
734 # Call this before ad_process_tree().
736 # Arguments: ad_process_source_tree <directory>
738 ad_process_source_tree()
740 ad_debug ">ad_process_source_tree: $1"
742 # We take only C/C++ files since they use the C compiler friendly
743 # version of distdefs. Other files are not assumed to use them.
744 files=`find $am_distdir \! -name \*\.ad \( \
746 -name \*\.[cC][cCpP] -o \
747 -name \*\.[cC][xX][xX] -o \
748 -name \*\.[cC][pP][pP] -o \
749 -name \*\.[cC]++ -o \
754 # Take away noprocess list
755 if test -f autodist.noprocess; then
756 files=`echo $files | sh autodist.noprocess` || exit 1
761 ad_process_source_file $ff $ff.tmp
762 if test -f $ff.tmp; then
764 mv -f $ff.tmp $ff || exit 1
768 ad_debug "<ad_process_source_tree: $1"
772 # Makes distribution sane, ala modtimes. Since we modify the distribution
773 # we need to make it sane after that.
775 # Arguments: ad_makedist_makesane
777 ad_makedist_makesane()
779 ad_debug ">ad_makedist_makesane:"
781 # DO NOT change these order unless you know what you are doing.
782 if test -f $am_distdir/configure.ac; then
783 touch $am_distdir/configure.ac
786 if test -f $am_distdir/aclocal.m4; then
787 touch $am_distdir/aclocal.m4
790 if test '!' -f Makefile; then
791 ad_fatal "Makefile: No such file or directory"
794 configh=`grep "^CONFIG_HEADER" Makefile | cut -d= -f2 | sed 's/^[ ]*//'`
795 touch $am_distdir/$configh.in 1>/dev/null 2>/dev/null
797 files=`find $am_distdir -name Makefile\.in`
803 if test -f $am_distdir/configure; then
804 touch $am_distdir/configure
807 if test -f $am_distdir/config.status; then
808 touch $am_distdir/config.status
811 ad_debug "<ad_makedist_makesane:"
815 # Creates distribution of the source tree. All files in the distribution
816 # will be processed and the distribution will be packaged.
818 # Arguments: ad_makedist
822 ad_debug ">ad_makedist"
824 if test '!' -f autodist.dist; then
825 ad_fatal "Autodist has not been run yet to prepare source tree"
828 if test -z $MAKE; then
829 ad_fatal "The MAKE variable is not set in autodist.conf"
832 # Get distdir from Makefile
833 if test '!' -f Makefile; then
834 ad_fatal "The source tree is not configured, run ./configure first"
837 # Parse the requested distribution
838 distribution=`grep "dist:" < autodist.dist | cut -d: -f2` || exit 1
839 dist_version=`grep "ver:" < autodist.dist | cut -d: -f2` || exit 1
840 am_distdir=`grep "distdir:" < autodist.dist | cut -d: -f2` || exit 1
841 ad_parse_distribution $distribution false
844 if test x$opt_no_dist = xtrue; then
845 ad_fatal "The '$distribution' distribution cannot be packaged"
849 ad_run_dist_hooks "$pre_dist_hooks"
851 # Create distribution directory
852 ad_debug "Creating distribution directory $am_distdir"
853 $MAKE distdir || exit 1
854 chmod -R a+r $am_distdir
856 if test '!' -d $am_distdir; then
857 ad_fatal "Distribution directory $am_distdir not created"
860 # Run pre-process-dist-hooks
861 ad_run_dist_hooks "$pre_p_dist_hooks"
864 ad_dist_excludes "$excludes"
867 ad_dist_includes "$includes"
869 # Include specific license file if specified
870 if test "$license" != ""; then
871 cp -p $license $am_distdir/COPYING || exit 1
874 # Process noprocesses
877 # Process source files
878 ad_debug "Process distribution source tree"
879 ad_process_source_tree $am_distdir
881 # Process non-source files
882 ad_debug "Process distribution tree"
883 ad_process_tree $am_distdir
885 # Run post-process_dist-hooks
886 ad_run_dist_hooks "$post_p_dist_hooks"
888 # Make distribution sane
892 ad_debug "Packaging distribution"
893 tar chof $am_distdir.tar $am_distdir || exit 1
896 ad_debug "Compressing distribution package"
897 if test x$ad_gzip = xtrue; then
898 gzip -9 -c $am_distdir.tar > $am_distdir.tar.gz || exit 1
900 if test x$ad_bzip2 = xtrue; then
901 bzip2 -9 -c $am_distdir.tar > $am_distdir.tar.bz2 || exit 1
903 if test x$ad_compress = xtrue; then
904 compress -c $am_distdir.tar > $am_distdir.tar.Z || exit 1
906 if test x$ad_zip = xtrue; then
907 rm -f $am_distdir.zip
908 zip -rq $am_distdir.zip $am_distdir || exit 1
910 rm -f $am_distdir.tar
912 # Run post-dist-hooks
913 ad_run_dist_hooks "$post_dist_hooks"
917 rm -f autodist.noprocess
919 ad_debug "<ad_makedist"
923 # Handles distribution options.
925 # option has the following format in distfile:
929 # Following options are supported:
935 # Arguments: ad_handle_options <options>
939 ad_debug ">ad_handle_options: $1"
943 if test "$i" = "template"; then
946 elif test "$i" = "no-dist"; then
949 elif test "$i" = "no-inherit"; then
955 ad_debug "<ad_handle_options: $1"
961 # Arguments: ad_clear_options
965 ad_debug ">ad_clear_options"
969 ad_debug "<ad_clear_options"
973 # Parses the distribution. Gets all distribution defines from the
974 # distribution. This also expands all inherited distributions recursively
975 # to get all inherited distribution defines. From inherited distributions
976 # their name and package name is not inherited.
978 # Arguments: ad_parse_distribution <distribution name> <inherit>
980 ad_parse_distribution()
999 ad_debug ">ad_parse_distribution: $1 $2"
1001 if test '!' -f $distdir/$1; then
1002 ad_fatal "Distribution '$1' is not declared"
1006 inhs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1007 | grep "inherit " | cut -d' ' -f2 | sort | uniq`
1010 defs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1011 | grep "define " | cut -d' ' -f2 | sort | uniq`
1013 if test "$inhs" = "" && test "$defs" = ""; then
1014 ad_fatal "Distribution '$1' does not define anything"
1017 # Get undefined distdefs
1018 undefs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1019 | grep "undef " | cut -d' ' -f2 | sort | uniq`
1022 incs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1023 | grep "include " | sed 's/include / : /'`
1026 excs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1027 | grep "exclude " | cut -d' ' -f2- | sort | uniq`
1030 nops=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1031 | grep "noprocess " | cut -d' ' -f2- | sort | uniq`
1034 opts=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1035 | grep "option " | cut -d' ' -f2- | sort | uniq`
1038 ad_handle_options "$opts"
1039 if test x$2 = xtrue && test x$opt_no_inherit = xtrue; then
1040 ad_fatal "Distribution '$1' cannot be inherited"
1042 if test x$2 = xfalse && test x$opt_template = xtrue; then
1043 ad_fatal "Template distribution '$1' cannot be prepared or packaged"
1046 ad_debug "inherits: $inhs"
1047 ad_debug "distdefs: $defs"
1048 ad_debug "includes: $incs"
1049 ad_debug "excludes: $excs"
1050 ad_debug "noprocess: $nops"
1051 ad_debug "undistdefs: $undefs"
1052 ad_debug "options: $opts"
1054 # Expand distdefs from inherited distributions
1057 if test x$1 = x$i; then
1058 ad_fatal "Infinite recursion detected. Fix the '$distdir/$1' \
1059 distribution to not have 'inherit $i' declared."
1062 if test '!' -f $distdir/$i; then
1063 ad_fatal "Distribution '$i' is not declared (inherited from '$1')"
1066 ad_parse_distribution $i true
1071 license=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1072 | grep "license " | cut -d' ' -f2`
1073 licenseh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1074 | grep "license-header " | sed 's/license-header / : /'`
1076 ad_debug "license: $license"
1077 ad_debug "licenseh: $licenseh"
1079 if test x$2 = xfalse; then
1080 # Get distribution name
1081 dname=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1082 | grep "name " | cut -d' ' -f2-`
1084 if test "$dname"; then
1088 # Get distribution package name (optional)
1089 dpname=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1090 | grep "package " | cut -d' ' -f2`
1092 if test "$dpname"; then
1095 package=$distribution
1098 # Get Bug-report email address (optional)
1099 bugr=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1100 | grep "bug-report " | cut -d' ' -f2-`
1102 if test "$bugr"; then
1106 ad_debug "distribution: $distribution"
1107 ad_debug "package: $package"
1108 ad_debug "bug-report: $bug_report"
1110 # Get hooks (optional)
1111 prh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1112 | grep "pre-hook " | cut -d' ' -f2-`
1113 poh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1114 | grep "post-hook " | cut -d' ' -f2-`
1115 prdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1116 | grep "pre-dist-hook " | cut -d' ' -f2-`
1117 podh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1118 | grep "post-dist-hook " | cut -d' ' -f2-`
1119 prpdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1120 | grep "pre-process-dist-hook " | cut -d' ' -f2-`
1121 popdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1122 | grep "post-process-dist-hook " | cut -d' ' -f2-`
1124 pre_hooks="$pre_hooks $prh"
1125 post_hooks="$post_hooks $poh"
1126 pre_dist_hooks="$pre_dist_hooks $prdh"
1127 post_dist_hooks="$post_dist_hooks $podh"
1128 pre_p_dist_hooks="$pre_p_dist_hooks $prpdh"
1129 post_p_dist_hooks="$post_p_dist_hooks $popdh"
1130 doptions="$doptions $opts"
1132 ad_handle_options "$doptions"
1133 ad_debug "options: $doptions"
1137 inherits="$inherits $inhs"
1138 distdefs="$distdefs $defs"
1139 includes="$includes $incs"
1140 excludes="$excludes $excs"
1141 noprocess="$noprocess $nops"
1142 undistdefs="$undistdefs $undefs"
1144 ad_debug "<ad_parse_distribution: $1 $2"
1148 # Processes parsed distdefs. Removes duplicates, and undefined distdefs
1149 # from the distdefs.
1151 # Arguments: ad_process_distdefs
1153 ad_process_distdefs()
1155 ad_debug ">ad_process_distdefs"
1157 # Remove all undefined distribution defines
1158 for i in $undistdefs
1160 ad_debug "undefining $i distdef"
1161 distdefs=`echo $distdefs | sed s/$i//`
1164 rm -f autodist.tmp.defs
1166 # Remove duplicate distdefs
1169 echo $i >>autodist.tmp.defs
1171 distdefs=`sort < autodist.tmp.defs | uniq`
1172 distdefs=`echo $distdefs`
1173 rm -f autodist.tmp.defs
1175 ad_debug "distdefs=$distdefs"
1177 ad_debug "<ad_process_distdefs"
1181 # Processes for a license header change.
1183 # Arguments: ad_process_license_header <scriptfile>
1185 ad_process_license_header()
1187 ad_debug ">ad_process_license_header"
1189 # Add : separator at the end
1190 lics=`echo "$licenseh" | sed 's/$/ : /'`
1196 if test "$i" = ":" && test -z "$src"; then
1199 if test -z "$src"; then
1203 if test -z "$dst" && test "$i" != ":"; then
1206 ad_fatal "Missing argument in 'license-header $src'"
1209 ad_debug "Replacing $src license with $dst license"
1211 if test '!' -f $src; then
1212 ad_fatal "License header $src: No such file or directory"
1215 if test '!' -f $dst; then
1216 ad_fatal "License header $dst: No such file or directory"
1219 # Awk script to replace the license header
1220 fl=`sed q $src | sed 's/\\//\\\\\//g' > autodist.lsrc` || exit 1
1221 ll=`sed -n '$p' $src | sed 's/\\//\\\\\//g' > autodist.ldst` || exit 1
1222 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
1223 rm -f autodist.lsrc autodist.ldst
1229 ad_debug "<ad_process_license_header"
1233 # Process specified noprocesses. This is called during makedist.
1235 # Arguments: ad_process_noprocess
1237 ad_process_noprocess()
1242 ad_debug ">ad_process_noprocess"
1247 ie=`echo $i | sed 's/\\//\\\\\//g'` || exit 1
1249 n="$n -e 's/$am_distdir\\/$ie//'"
1253 rm -f autodist.noprocess
1254 if test x$np = xtrue; then
1255 echo $n > autodist.noprocess || exit 1
1258 ad_debug "<ad_process_noprocess"
1262 # Process a file given as argument for the distribution.
1264 # Arguments: ad_process_file <filepath> <dest_filepath>
1273 # Process only regular files
1274 if test '!' -f $1; then
1278 ad_debug ">ad_process_file: $1 $2"
1280 f="autodist.tmp.script"
1283 # If license header is provided, replace the license header in the file.
1284 ad_process_license_header $f
1286 ad_debug "Getting #ifdef's and #ifndef's"
1288 # Get defined distribution defines
1289 defs=`awk "/^#ifdef "$DP"_DIST_|^#else "$DP"_DIST_/ { print; }" \
1290 $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
1292 # Get explicitly not-defined distribution defines
1293 ndefs=`awk "/^#ifndef "$DP"_DIST_|^#else !"$DP"_DIST_/ { print; }" \
1294 $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq`
1296 ad_debug "defs in $1: $defs"
1297 ad_debug "ndefs in $1: $ndefs"
1299 # Create the script to include and exclude stuff in the file according
1300 # to the distribution defines
1303 ad_debug "processing ifdefs"
1309 if test x$d = x$i; then
1315 # If distribution define was not found exclude those lines from the file.
1316 # This also handles the #ifdef's #else (ie. #ifndef) branch.
1317 if test x$found = xfalse; then
1318 ad_debug "ifdef $d will be excluded (it is NOT defined)"
1319 echo "/^#ifdef $d/,/^#else !$d|^#endif $d/ { next; }" >> $f
1321 echo "/^#else !$d/,/^#endif $d/ { next; }" >> $f
1326 ad_debug "processing ifndefs"
1332 if test x$d = x$i; then
1338 # If distribution define was found exclude those lines from the file.
1339 # This also handles the #ifndef's #else (ie. #ifdef) branch.
1340 if test x$found = xtrue; then
1341 ad_debug "ifndef $d will be excluded (it IS defined)"
1342 echo "/^#ifndef $d/,/^#else $d|^#endif $d/ { next; }" >> $f
1344 echo "/^#else $d/,/^#endif $d/ { next; }" >> $f
1348 # Now process the file with the script
1351 # Those distdef lines that remain in the file are removed to make
1352 # the appearance prettier
1353 echo "/^#ifdef "$DP"_DIST_|^#endif "$DP"_DIST_|^#else "$DP"_DIST_|^#else !"$DP"_DIST_|^#ifndef "$DP"_DIST_/ { next; }" >> $f
1354 echo "{ print; }" >> $f
1356 # Execute the script
1357 cp -p $1 $2 || exit 1
1358 awk -f $f $1 > $2 || exit 1
1363 ad_debug "<ad_process_file: $1 $2"
1367 # Process a source file given as argument for the distribution.
1369 # Arguments: ad_process_source_file <filepath> <dest_filepath>
1371 ad_process_source_file()
1378 # Process only regular files
1379 if test '!' -f $1; then
1383 ad_debug ">ad_process_source_file: $1 $2"
1385 f="autodist.tmp.script"
1388 # If license header is provided, replace the license header in the file.
1389 ad_process_license_header $f
1391 ad_debug "Getting #ifdef's and #ifndef's"
1393 # Get defined distribution defines
1394 defs=`awk '/^#ifdef SILC_DIST_|^#else \/\* SILC_DIST_/ { print; }' \
1395 $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
1397 # Get explicitly not-defined distribution defines
1398 ndefs=`awk '/^#ifndef SILC_DIST_|^#else \/\* \!SILC_DIST_/ { print; }' \
1399 $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq`
1401 ad_debug "defs in $1: $defs"
1402 ad_debug "ndefs in $1: $ndefs"
1404 # Create the script to include and exclude stuff in the file according
1405 # to the distribution defines
1408 ad_debug "processing ifdefs"
1414 if test x$d = x$i; then
1420 # If distribution define was not found exclude those lines from the file.
1421 # This also handles the #ifdef's #else (ie. #ifndef) branch.
1422 if test x$found = xfalse; then
1423 ad_debug "ifdef $d will be excluded (it is NOT defined)"
1424 echo "/^#ifdef $d/,/^#else \/\* \!$d|^#endif \/\* $d/ { next; }" >> $f
1426 echo "/^#else \/\* \!$d/,/^#endif \/\* $d/ { next; }" >> $f
1431 ad_debug "processing ifndefs"
1437 if test x$d = x$i; then
1443 # If distribution define was found exclude those lines from the file.
1444 # This also handles the #ifndef's #else (ie. #ifdef) branch.
1445 if test x$found = xtrue; then
1446 ad_debug "ifndef $d will be excluded (it IS defined)"
1447 echo "/^#ifndef $d/,/^#else \/\* $d|^#endif \/\* $d/ { next; }" >> $f
1449 echo "/^#else \/\* $d/,/^#endif \/\* $d/ { next; }" >> $f
1453 # Now process the file with the script
1456 # Those distdef lines that remain in the file are removed to make
1457 # the appearance prettier
1458 echo "/^#ifdef SILC_DIST_|^#endif \/\* SILC_DIST_|^#else \/\* SILC_DIST_|^#else \/\* \!SILC_DIST_|^#ifndef SILC_DIST_/ { next; }" >> $f
1459 echo "{ print; }" >> $f
1461 # Execute the script
1462 cp -p $1 $2 || exit 1
1463 awk -f $f $1 > $2 || exit 1
1468 ad_debug "<ad_process_source_file: $1 $2"
1474 # Arguments: ad_run_hooks <hooks>
1478 ad_debug ">ad_run_hooks: $1"
1482 if test '!' -f $i; then
1483 ad_fatal "Hook script $i does not exist"
1485 sh $i "$distribution" "$dist_version" "$package" || exit 1
1488 ad_debug "<ad_run_hooks: $1"
1494 # Arguments: ad_run_dist_hooks <hooks>
1498 ad_debug ">ad_run_dist_hooks: $1"
1502 if test '!' -f $i; then
1503 ad_fatal "Dist hook script $i does not exist"
1505 sh $i "$distribution" "$dist_version" "$package" "$am_distdir" || exit 1
1508 ad_debug "<ad_run_dist_hooks: $1"
1511 ###############################################################################
1514 usage="Usage: autodist [options] [distribution] [version]"
1516 Autodist prepares source tree for configuration, compilation and
1517 distribution. Prepares the source tree from the \`autodist.ad'
1518 configuration file. Generates Automake.am files from Automake.ad
1519 files, configure.ac file from configure.ad file(s), generates the
1520 configure script by running Autoconf tool, and generates Makefile.in
1521 files by running Automake tool.
1524 -h, --help print this help, then exit
1525 -V, --version print version number, then exit
1526 -v, --verbose verbosely report processing
1527 -d, --distdir <dir> search distributions from <dir>
1528 -s, --distdefs [<dist>] print distribution defines of <dist>, then exit
1529 -i, --init initialize Autodist environment, create default
1530 distribution directory and distribution, then exit
1531 -m, --makedist create and package distribution
1532 --gzip create package compressed with gzip (default)
1533 --bzip2 create also package compressed with bzip2
1534 --compress create also package compressed with compress
1535 --zip create also package compressed with zip"
1538 # Process command line arguments
1540 while test $# -gt 0; do
1545 test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
1554 if test $# -eq 0; then
1555 ad_parse_distribution $distribution false
1556 echo "Distribution: ${distribution}" 1>&2;
1558 ad_parse_distribution $1 false
1559 echo "Distribution: ${1}" 1>&2;
1562 echo "Distdefs:" 1>&2;
1595 echo "${usage}" 1>&2;
1597 echo "${help}" 1>&2;
1602 echo "@PACKAGE@ (@PACKAGE_NAME@) $ver" 1>&2;
1603 echo "Written by Pekka Riikonen" 1>&2;
1605 echo "Copyright (C) 2004 - 2005 SILC Project" 1>&2;
1607 This is free software; see the source for copying conditions. There is NO
1608 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. " 1>&2;
1616 echo "${usage}" 1>&2;
1626 # Parse the requested distribution
1628 if test $# != 0; then
1629 distribution="${1}";
1630 distfile=$distribution
1633 ad_parse_distribution $distribution false
1636 if test $# != 0; then
1637 dist_version="${1}";
1640 ad_debug "Preparing source tree for configuration and compilation..."
1641 ad_debug "Preparing $distribution distribution version $dist_version"
1644 # Create the distribution defines header file
1646 if test "$DISTDEFS"; then
1647 ad_create_distdefs_h
1649 ad_fatal "DISTDEFS not defined in $distdir/autodist.conf"
1655 ad_run_hooks "$pre_hooks"
1658 # Generate the Makefile.am files from Makefile.ad files
1660 ad_make_makefile_ams
1663 # Generate the configure.ac from configure.ad file(s)
1665 ad_make_configure_ac ./configure.ad
1668 # Process all files with .ad suffix for distribution processing
1673 # Generate configure script
1678 # Generate Makefile.in files
1680 ad_make_makefile_ins
1683 # Create autodist.dist
1685 ad_debug "Creating autodist.dist"
1686 echo "dist:$distfile" > autodist.dist
1687 echo "ver:$dist_version" >> autodist.dist
1688 echo "distdir:$package-$dist_version" >> autodist.dist
1693 ad_run_hooks "$post_hooks"
1695 ad_debug "Done, now run ./configure and make."