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//`
477 # Run the distribution processing for this file
478 ad_debug "Processing $i to be $fname"
479 ad_process_file $i $fname
482 ad_debug "<ad_process_ads"
486 # Includes files specified in the distribution for inclusion. Used when
487 # creating the distribution for packaging.
489 # include has the following format in distfile:
491 # include <path> [<dest path>]
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.
499 # Arguments: ad_dist_includes <includeslist> <recursive>
505 ad_debug ">ad_dist_includes: $1 $2"
507 # By default do not expand pathnames
510 # Add : separator at the end
511 incs="`echo "$1" | sed 's/$/ : /'`"
517 if test "$i" = ":" && test -z "$src"; then
520 if test -z "$src"; then
524 if test -z "$dst" && test "$i" != ":"; then
530 ad_debug "Including $src into $dst"
532 if test -f "$src"; then
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
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'"
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
556 cp -p $src $am_distdir/$d || exit 1
558 elif test -d "$src"; then
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,/[^/]*$,,'`
568 if test '!' -d $am_distdir/$d && test "$ds" != "$d"; then
569 mkdir -p $am_distdir/$d || exit 1
572 cp -pR $src $am_distdir/$d || exit 1
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'"
580 d=`echo $dst | sed 's,/[^/]*$,,'`
581 ds=`echo $dst | sed 's/\/$//'`
582 if test "$ds" = "$d"; then
583 d=`echo $d | sed 's,/[^/]*$,,'`
585 if test '!' -d $am_distdir/$d && test "$dst" != "$d"; then
586 mkdir -p $am_distdir/$d || exit 1
589 cp -pR $src $am_distdir/$dst || exit 1
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"
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.
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
615 srcs=`echo $src | sed -e 's/ / : /g' -e 's/^/ : /'` || exit 1
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'"
624 # Make sure dst has / at the end, as this must be a directory
625 dst=`echo $dst | sed 's/\/$//; s/$/\//'`
628 dste=`echo $dst | sed 's/\\//\\\\\//g'` || exit 1
630 # Expand pathnames, and format to our include format
632 srcs=`echo $src | sed -e "s/ / $dste : /g" \
633 -e 's/^/ : /' -e "s/$/ $dste/"` || exit 1
637 # Include recursively
638 ad_dist_includes "$srcs" true
640 elif test '!' -a $src; then
641 ad_fatal "Including $src: No such file or directory"
650 ad_debug "<ad_dist_includes: $1 $2"
654 # Excludes files specified in the distribution for exclusion. Used when
655 # creating the distribution for packaging.
657 # exclude has the following format in distfile:
661 # The path may be file, directory or regular expression.
663 # Arguments: ad_dist_includes <excludelist>
667 ad_debug ">ad_dist_excludes: $1"
671 ad_debug "Excluding $i"
672 rm -rf $am_distdir/$i
675 ad_debug "<ad_dist_excludes: $1"
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.
685 # Arguments: ad_process_tree <directory>
689 ad_debug ">ad_process_tree: $1"
691 # Take files, except source and .ad files.
692 files=`find $am_distdir \! -name \*\.ad \( \
693 \! -name \*\.[cC] -a \
694 \! -name \*\.[cC][cCpP] -a \
695 \! -name \*\.[cC][xX][xX] -a \
696 \! -name \*\.[cC][pP][pP] -a \
697 \! -name \*\.[cC]++ -a \
699 \! -name \*\.[hH] -a \
701 files=`echo $files | sed 's/$am_distdir//'`
703 # Take away noprocess list
704 if test -f autodist.noprocess; then
705 files=`echo $files | sh autodist.noprocess` || exit 1
710 ad_process_file $ff $ff.tmp
711 if test -f $ff.tmp; then
713 mv -f $ff.tmp $ff || exit 1
717 ad_debug "<ad_process_tree: $1"
721 # Processes the entire source tree for distribution. This inspects files
722 # in the source tree, with exception of any file with .ad suffix, and
723 # performs distribution processing for the file. The original file is
724 # replaced with the processed file. This function is used when creating
725 # the distribution for packaging.
727 # Call this before ad_process_tree().
729 # Arguments: ad_process_source_tree <directory>
731 ad_process_source_tree()
733 ad_debug ">ad_process_source_tree: $1"
735 # We take only C/C++ files since they use the C compiler friendly
736 # version of distdefs. Other files are not assumed to use them.
737 files=`find $am_distdir \! -name \*\.ad \( \
739 -name \*\.[cC][cCpP] -o \
740 -name \*\.[cC][xX][xX] -o \
741 -name \*\.[cC][pP][pP] -o \
742 -name \*\.[cC]++ -o \
747 # Take away noprocess list
748 if test -f autodist.noprocess; then
749 files=`echo $files | sh autodist.noprocess` || exit 1
754 ad_process_source_file $ff $ff.tmp
755 if test -f $ff.tmp; then
757 mv -f $ff.tmp $ff || exit 1
761 ad_debug "<ad_process_source_tree: $1"
765 # Makes distribution sane, ala modtimes. Since we modify the distribution
766 # we need to make it sane after that.
768 # Arguments: ad_makedist_makesane
770 ad_makedist_makesane()
772 ad_debug ">ad_makedist_makesane:"
774 # DO NOT change these order unless you know what you are doing.
775 if test -f $am_distdir/configure.ac; then
776 touch $am_distdir/configure.ac
779 if test -f $am_distdir/aclocal.m4; then
780 touch $am_distdir/aclocal.m4
783 if test '!' -f Makefile; then
784 ad_fatal "Makefile: No such file or directory"
787 configh=`grep "^CONFIG_HEADER" Makefile | cut -d= -f2 | sed 's/^[ ]*//'`
788 touch $am_distdir/$configh.in 1>/dev/null 2>/dev/null
790 files=`find $am_distdir -name Makefile\.in`
796 if test -f $am_distdir/configure; then
797 touch $am_distdir/configure
800 if test -f $am_distdir/config.status; then
801 touch $am_distdir/config.status
804 ad_debug "<ad_makedist_makesane:"
808 # Creates distribution of the source tree. All files in the distribution
809 # will be processed and the distribution will be packaged.
811 # Arguments: ad_makedist
815 ad_debug ">ad_makedist"
817 if test '!' -f autodist.dist; then
818 ad_fatal "Autodist has not been run yet to prepare source tree"
821 if test -z $MAKE; then
822 ad_fatal "The MAKE variable is not set in autodist.conf"
825 # Get distdir from Makefile
826 if test '!' -f Makefile; then
827 ad_fatal "The source tree is not configured, run ./configure first"
830 # Parse the requested distribution
831 distribution=`grep "dist:" < autodist.dist | cut -d: -f2` || exit 1
832 dist_version=`grep "ver:" < autodist.dist | cut -d: -f2` || exit 1
833 am_distdir=`grep "distdir:" < autodist.dist | cut -d: -f2` || exit 1
834 ad_parse_distribution $distribution false
837 if test x$opt_no_dist = xtrue; then
838 ad_fatal "The '$distribution' distribution cannot be packaged"
842 ad_run_dist_hooks "$pre_dist_hooks"
844 # Create distribution directory
845 ad_debug "Creating distribution directory $am_distdir"
846 $MAKE distdir || exit 1
847 chmod -R a+r $am_distdir
849 if test '!' -d $am_distdir; then
850 ad_fatal "Distribution directory $am_distdir not created"
853 # Run pre-process-dist-hooks
854 ad_run_dist_hooks "$pre_p_dist_hooks"
857 ad_dist_excludes "$excludes"
860 ad_dist_includes "$includes"
862 # Include specific license file if specified
863 if test "$license" != ""; then
864 cp -p $license $am_distdir/COPYING || exit 1
867 # Process noprocesses
870 # Process source files
871 ad_debug "Process distribution source tree"
872 ad_process_source_tree $am_distdir
874 # Process non-source files
875 ad_debug "Process distribution tree"
876 ad_process_tree $am_distdir
878 # Run post-process_dist-hooks
879 ad_run_dist_hooks "$post_p_dist_hooks"
881 # Make distribution sane
885 ad_debug "Packaging distribution"
886 tar chof $am_distdir.tar $am_distdir || exit 1
889 ad_debug "Compressing distribution package"
890 if test x$ad_gzip = xtrue; then
891 gzip -9 -c $am_distdir.tar > $am_distdir.tar.gz || exit 1
893 if test x$ad_bzip2 = xtrue; then
894 bzip2 -9 -c $am_distdir.tar > $am_distdir.tar.bz2 || exit 1
896 if test x$ad_compress = xtrue; then
897 compress -c $am_distdir.tar > $am_distdir.tar.Z || exit 1
899 if test x$ad_zip = xtrue; then
900 rm -f $am_distdir.zip
901 zip -rq $am_distdir.zip $am_distdir || exit 1
903 rm -f $am_distdir.tar
905 # Run post-dist-hooks
906 ad_run_dist_hooks "$post_dist_hooks"
910 rm -f autodist.noprocess
912 ad_debug "<ad_makedist"
916 # Handles distribution options.
918 # option has the following format in distfile:
922 # Following options are supported:
928 # Arguments: ad_handle_options <options>
932 ad_debug ">ad_handle_options: $1"
936 if test "$i" = "template"; then
939 elif test "$i" = "no-dist"; then
942 elif test "$i" = "no-inherit"; then
948 ad_debug "<ad_handle_options: $1"
954 # Arguments: ad_clear_options
958 ad_debug ">ad_clear_options"
962 ad_debug "<ad_clear_options"
966 # Parses the distribution. Gets all distribution defines from the
967 # distribution. This also expands all inherited distributions recursively
968 # to get all inherited distribution defines. From inherited distributions
969 # their name and package name is not inherited.
971 # Arguments: ad_parse_distribution <distribution name> <inherit>
973 ad_parse_distribution()
992 ad_debug ">ad_parse_distribution: $1 $2"
994 if test '!' -f $distdir/$1; then
995 ad_fatal "Distribution '$1' is not declared"
999 inhs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1000 | grep "inherit " | cut -d' ' -f2 | sort | uniq`
1003 defs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1004 | grep "define " | cut -d' ' -f2 | sort | uniq`
1006 if test "$inhs" = "" && test "$defs" = ""; then
1007 ad_fatal "Distribution '$1' does not define anything"
1010 # Get undefined distdefs
1011 undefs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1012 | grep "undef " | cut -d' ' -f2 | sort | uniq`
1015 incs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1016 | grep "include " | sed 's/include / : /'`
1019 excs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1020 | grep "exclude " | cut -d' ' -f2- | sort | uniq`
1023 nops=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1024 | grep "noprocess " | cut -d' ' -f2- | sort | uniq`
1027 opts=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1028 | grep "option " | cut -d' ' -f2- | sort | uniq`
1031 ad_handle_options "$opts"
1032 if test x$2 = xtrue && test x$opt_no_inherit = xtrue; then
1033 ad_fatal "Distribution '$1' cannot be inherited"
1035 if test x$2 = xfalse && test x$opt_template = xtrue; then
1036 ad_fatal "Template distribution '$1' cannot be prepared or packaged"
1039 ad_debug "inherits: $inhs"
1040 ad_debug "distdefs: $defs"
1041 ad_debug "includes: $incs"
1042 ad_debug "excludes: $excs"
1043 ad_debug "noprocess: $nops"
1044 ad_debug "undistdefs: $undefs"
1045 ad_debug "options: $opts"
1047 # Expand distdefs from inherited distributions
1050 if test x$1 = x$i; then
1051 ad_fatal "Infinite recursion detected. Fix the '$distdir/$1' \
1052 distribution to not have 'inherit $i' declared."
1055 if test '!' -f $distdir/$i; then
1056 ad_fatal "Distribution '$i' is not declared (inherited from '$1')"
1059 ad_parse_distribution $i true
1064 license=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1065 | grep "license " | cut -d' ' -f2`
1066 licenseh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1067 | grep "license-header " | sed 's/license-header / : /'`
1069 ad_debug "license: $license"
1070 ad_debug "licenseh: $licenseh"
1072 if test x$2 = xfalse; then
1073 # Get distribution name
1074 dname=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1075 | grep "name " | cut -d' ' -f2-`
1077 if test "$dname"; then
1081 # Get distribution package name (optional)
1082 dpname=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1083 | grep "package " | cut -d' ' -f2`
1085 if test "$dpname"; then
1088 package=$distribution
1091 # Get Bug-report email address (optional)
1092 bugr=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1093 | grep "bug-report " | cut -d' ' -f2-`
1095 if test "$bugr"; then
1099 ad_debug "distribution: $distribution"
1100 ad_debug "package: $package"
1101 ad_debug "bug-report: $bug_report"
1103 # Get hooks (optional)
1104 prh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1105 | grep "pre-hook " | cut -d' ' -f2-`
1106 poh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1107 | grep "post-hook " | cut -d' ' -f2-`
1108 prdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1109 | grep "pre-dist-hook " | cut -d' ' -f2-`
1110 podh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1111 | grep "post-dist-hook " | cut -d' ' -f2-`
1112 prpdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1113 | grep "pre-process-dist-hook " | cut -d' ' -f2-`
1114 popdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1115 | grep "post-process-dist-hook " | cut -d' ' -f2-`
1117 pre_hooks="$pre_hooks $prh"
1118 post_hooks="$post_hooks $poh"
1119 pre_dist_hooks="$pre_dist_hooks $prdh"
1120 post_dist_hooks="$post_dist_hooks $podh"
1121 pre_p_dist_hooks="$pre_p_dist_hooks $prpdh"
1122 post_p_dist_hooks="$post_p_dist_hooks $popdh"
1123 doptions="$doptions $opts"
1125 ad_handle_options "$doptions"
1126 ad_debug "options: $doptions"
1130 inherits="$inherits $inhs"
1131 distdefs="$distdefs $defs"
1132 includes="$includes $incs"
1133 excludes="$excludes $excs"
1134 noprocess="$noprocess $nops"
1135 undistdefs="$undistdefs $undefs"
1137 ad_debug "<ad_parse_distribution: $1 $2"
1141 # Processes parsed distdefs. Removes duplicates, and undefined distdefs
1142 # from the distdefs.
1144 # Arguments: ad_process_distdefs
1146 ad_process_distdefs()
1148 ad_debug ">ad_process_distdefs"
1150 # Remove all undefined distribution defines
1151 for i in $undistdefs
1153 ad_debug "undefining $i distdef"
1154 distdefs=`echo $distdefs | sed s/$i//`
1157 rm -f autodist.tmp.defs
1159 # Remove duplicate distdefs
1162 echo $i >>autodist.tmp.defs
1164 distdefs=`sort < autodist.tmp.defs | uniq`
1165 distdefs=`echo $distdefs`
1166 rm -f autodist.tmp.defs
1168 ad_debug "distdefs=$distdefs"
1170 ad_debug "<ad_process_distdefs"
1174 # Processes for a license header change.
1176 # Arguments: ad_process_license_header <scriptfile>
1178 ad_process_license_header()
1180 ad_debug ">ad_process_license_header"
1182 # Add : separator at the end
1183 lics=`echo "$licenseh" | sed 's/$/ : /'`
1189 if test "$i" = ":" && test -z "$src"; then
1192 if test -z "$src"; then
1196 if test -z "$dst" && test "$i" != ":"; then
1199 ad_fatal "Missing argument in 'license-header $src'"
1202 ad_debug "Replacing $src license with $dst license"
1204 if test '!' -f $src; then
1205 ad_fatal "License header $src: No such file or directory"
1208 if test '!' -f $dst; then
1209 ad_fatal "License header $dst: No such file or directory"
1212 # Awk script to replace the license header
1213 fl=`sed q $src | sed 's/\\//\\\\\//g' > autodist.lsrc` || exit 1
1214 ll=`sed -n '$p' $src | sed 's/\\//\\\\\//g' > autodist.ldst` || exit 1
1215 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
1216 rm -f autodist.lsrc autodist.ldst
1222 ad_debug "<ad_process_license_header"
1226 # Process specified noprocesses. This is called during makedist.
1228 # Arguments: ad_process_noprocess
1230 ad_process_noprocess()
1235 ad_debug ">ad_process_noprocess"
1240 ie=`echo $i | sed 's/\\//\\\\\//g'` || exit 1
1242 n="$n -e 's/$am_distdir\\/$ie//'"
1246 rm -f autodist.noprocess
1247 if test x$np = xtrue; then
1248 echo $n > autodist.noprocess || exit 1
1251 ad_debug "<ad_process_noprocess"
1255 # Process a file given as argument for the distribution.
1257 # Arguments: ad_process_file <filepath> <dest_filepath>
1266 # Process only regular files
1267 if test '!' -f $1; then
1271 ad_debug ">ad_process_file: $1 $2"
1273 f="autodist.tmp.script"
1276 # If license header is provided, replace the license header in the file.
1277 ad_process_license_header $f
1279 ad_debug "Getting #ifdef's and #ifndef's"
1281 # Get defined distribution defines
1282 defs=`awk "/^#ifdef "$DP"_DIST_|^#else "$DP"_DIST_/ { print; }" \
1283 $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
1285 # Get explicitly not-defined distribution defines
1286 ndefs=`awk "/^#ifndef "$DP"_DIST_|^#else !"$DP"_DIST_/ { print; }" \
1287 $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq`
1289 ad_debug "defs in $1: $defs"
1290 ad_debug "ndefs in $1: $ndefs"
1292 # Create the script to include and exclude stuff in the file according
1293 # to the distribution defines
1296 ad_debug "processing ifdefs"
1302 if test x$d = x$i; then
1308 # If distribution define was not found exclude those lines from the file.
1309 # This also handles the #ifdef's #else (ie. #ifndef) branch.
1310 if test x$found = xfalse; then
1311 ad_debug "ifdef $d will be excluded (it is NOT defined)"
1312 echo "/^#ifdef $d/,/^#else !$d|^#endif $d/ { next; }" >> $f
1314 echo "/^#else !$d/,/^#endif $d/ { next; }" >> $f
1319 ad_debug "processing ifndefs"
1325 if test x$d = x$i; then
1331 # If distribution define was found exclude those lines from the file.
1332 # This also handles the #ifndef's #else (ie. #ifdef) branch.
1333 if test x$found = xtrue; then
1334 ad_debug "ifndef $d will be excluded (it IS defined)"
1335 echo "/^#ifndef $d/,/^#else $d|^#endif $d/ { next; }" >> $f
1337 echo "/^#else $d/,/^#endif $d/ { next; }" >> $f
1341 # Now process the file with the script
1344 # Those distdef lines that remain in the file are removed to make
1345 # the appearance prettier
1346 echo "/^#ifdef "$DP"_DIST_|^#endif "$DP"_DIST_|^#else "$DP"_DIST_|^#else !"$DP"_DIST_|^#ifndef "$DP"_DIST_/ { next; }" >> $f
1347 echo "{ print; }" >> $f
1349 # Execute the script
1350 cp -p $1 $2 || exit 1
1351 awk -f $f $1 > $2 || exit 1
1356 ad_debug "<ad_process_file: $1 $2"
1360 # Process a source file given as argument for the distribution.
1362 # Arguments: ad_process_source_file <filepath> <dest_filepath>
1364 ad_process_source_file()
1371 # Process only regular files
1372 if test '!' -f $1; then
1376 ad_debug ">ad_process_source_file: $1 $2"
1378 f="autodist.tmp.script"
1381 # If license header is provided, replace the license header in the file.
1382 ad_process_license_header $f
1384 ad_debug "Getting #ifdef's and #ifndef's"
1386 # Get defined distribution defines
1387 defs=`awk '/^#ifdef SILC_DIST_|^#else \/\* SILC_DIST_/ { print; }' \
1388 $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
1390 # Get explicitly not-defined distribution defines
1391 ndefs=`awk '/^#ifndef SILC_DIST_|^#else \/\* \!SILC_DIST_/ { print; }' \
1392 $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq`
1394 ad_debug "defs in $1: $defs"
1395 ad_debug "ndefs in $1: $ndefs"
1397 # Create the script to include and exclude stuff in the file according
1398 # to the distribution defines
1401 ad_debug "processing ifdefs"
1407 if test x$d = x$i; then
1413 # If distribution define was not found exclude those lines from the file.
1414 # This also handles the #ifdef's #else (ie. #ifndef) branch.
1415 if test x$found = xfalse; then
1416 ad_debug "ifdef $d will be excluded (it is NOT defined)"
1417 echo "/^#ifdef $d/,/^#else \/\* \!$d|^#endif \/\* $d/ { next; }" >> $f
1419 echo "/^#else \/\* \!$d/,/^#endif \/\* $d/ { next; }" >> $f
1424 ad_debug "processing ifndefs"
1430 if test x$d = x$i; then
1436 # If distribution define was found exclude those lines from the file.
1437 # This also handles the #ifndef's #else (ie. #ifdef) branch.
1438 if test x$found = xtrue; then
1439 ad_debug "ifndef $d will be excluded (it IS defined)"
1440 echo "/^#ifndef $d/,/^#else \/\* $d|^#endif \/\* $d/ { next; }" >> $f
1442 echo "/^#else \/\* $d/,/^#endif \/\* $d/ { next; }" >> $f
1446 # Now process the file with the script
1449 # Those distdef lines that remain in the file are removed to make
1450 # the appearance prettier
1451 echo "/^#ifdef SILC_DIST_|^#endif \/\* SILC_DIST_|^#else \/\* SILC_DIST_|^#else \/\* \!SILC_DIST_|^#ifndef SILC_DIST_/ { next; }" >> $f
1452 echo "{ print; }" >> $f
1454 # Execute the script
1455 cp -p $1 $2 || exit 1
1456 awk -f $f $1 > $2 || exit 1
1461 ad_debug "<ad_process_source_file: $1 $2"
1467 # Arguments: ad_run_hooks <hooks>
1471 ad_debug ">ad_run_hooks: $1"
1475 if test '!' -f $i; then
1476 ad_fatal "Hook script $i does not exist"
1478 sh $i "$distribution" "$dist_version" "$package" || exit 1
1481 ad_debug "<ad_run_hooks: $1"
1487 # Arguments: ad_run_dist_hooks <hooks>
1491 ad_debug ">ad_run_dist_hooks: $1"
1495 if test '!' -f $i; then
1496 ad_fatal "Dist hook script $i does not exist"
1498 sh $i "$distribution" "$dist_version" "$package" "$am_distdir" || exit 1
1501 ad_debug "<ad_run_dist_hooks: $1"
1504 ###############################################################################
1507 usage="Usage: autodist [options] [distribution] [version]"
1509 Autodist prepares source tree for configuration, compilation and
1510 distribution. Prepares the source tree from the \`autodist.ad'
1511 configuration file. Generates Automake.am files from Automake.ad
1512 files, configure.ac file from configure.ad file(s), generates the
1513 configure script by running Autoconf tool, and generates Makefile.in
1514 files by running Automake tool.
1517 -h, --help print this help, then exit
1518 -V, --version print version number, then exit
1519 -v, --verbose verbosely report processing
1520 -d, --distdir <dir> search distributions from <dir>
1521 -s, --distdefs [<dist>] print distribution defines of <dist>, then exit
1522 -i, --init initialize Autodist environment, create default
1523 distribution directory and distribution, then exit
1524 -m, --makedist create and package distribution
1525 --gzip create package compressed with gzip (default)
1526 --bzip2 create also package compressed with bzip2
1527 --compress create also package compressed with compress
1528 --zip create also package compressed with zip"
1531 # Process command line arguments
1533 while test $# -gt 0; do
1538 test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
1547 if test $# -eq 0; then
1548 ad_parse_distribution $distribution false
1549 echo "Distribution: ${distribution}" 1>&2;
1551 ad_parse_distribution $1 false
1552 echo "Distribution: ${1}" 1>&2;
1555 echo "Distdefs:" 1>&2;
1588 echo "${usage}" 1>&2;
1590 echo "${help}" 1>&2;
1595 echo "@PACKAGE@ (@PACKAGE_NAME@) $ver" 1>&2;
1596 echo "Written by Pekka Riikonen" 1>&2;
1598 echo "Copyright (C) 2004 - 2005 SILC Project" 1>&2;
1600 This is free software; see the source for copying conditions. There is NO
1601 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. " 1>&2;
1609 echo "${usage}" 1>&2;
1619 # Parse the requested distribution
1621 if test $# != 0; then
1622 distribution="${1}";
1623 distfile=$distribution
1626 ad_parse_distribution $distribution false
1629 if test $# != 0; then
1630 dist_version="${1}";
1633 ad_debug "Preparing source tree for configuration and compilation..."
1634 ad_debug "Preparing $distribution distribution version $dist_version"
1637 # Create the distribution defines header file
1639 if test "$DISTDEFS"; then
1640 ad_create_distdefs_h
1642 ad_fatal "DISTDEFS not defined in $distdir/autodist.conf"
1648 ad_run_hooks "$pre_hooks"
1651 # Generate the Makefile.am files from Makefile.ad files
1653 ad_make_makefile_ams
1656 # Generate the configure.ac from configure.ad file(s)
1658 ad_make_configure_ac ./configure.ad
1661 # Process all files with .ad suffix for distribution processing
1666 # Generate configure script
1671 # Generate Makefile.in files
1673 ad_make_makefile_ins
1676 # Create autodist.dist
1678 ad_debug "Creating autodist.dist"
1679 echo "dist:$distfile" > autodist.dist
1680 echo "ver:$dist_version" >> autodist.dist
1681 echo "distdir:$package-$dist_version" >> autodist.dist
1686 ad_run_hooks "$post_hooks"
1688 ad_debug "Done, now run ./configure and make."