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 # 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
695 files=`find $am_distdir \! -name \*\.ad`
696 files=`echo $files | sed 's/$am_distdir//'`
698 # Take away noprocess list
699 if test -f autodist.noprocess; then
700 files=`echo $files | sh autodist.noprocess` || exit 1
705 ad_process_file $ff $ff.tmp
706 if test -f $ff.tmp; then
708 mv -f $ff.tmp $ff || exit 1
712 ad_debug "<ad_process_tree: $1"
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.
722 # Call this before ad_process_tree().
724 # Arguments: ad_process_source_tree <directory>
726 ad_process_source_tree()
728 ad_debug ">ad_process_source_tree: $1"
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 \( \
734 -name \*\.[cC][cCpP] -o \
735 -name \*\.[cC][xX][xX] -o \
736 -name \*\.[cC][pP][pP] -o \
737 -name \*\.[cC]++ -o \
742 # Take away noprocess list
743 if test -f autodist.noprocess; then
744 files=`echo $files | sh autodist.noprocess` || exit 1
749 ad_process_source_file $ff $ff.tmp
750 if test -f $ff.tmp; then
752 mv -f $ff.tmp $ff || exit 1
756 ad_debug "<ad_process_source_tree: $1"
760 # Makes distribution sane, ala modtimes. Since we modify the distribution
761 # we need to make it sane after that.
763 # Arguments: ad_makedist_makesane
765 ad_makedist_makesane()
767 ad_debug ">ad_makedist_makesane:"
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
774 if test -f $am_distdir/aclocal.m4; then
775 touch $am_distdir/aclocal.m4
778 if test '!' -f Makefile; then
779 ad_fatal "Makefile: No such file or directory"
782 configh=`grep "^CONFIG_HEADER" Makefile | cut -d= -f2 | sed 's/^[ ]*//'`
783 touch $am_distdir/$configh.in 1>/dev/null 2>/dev/null
785 files=`find $am_distdir -name Makefile\.in`
791 if test -f $am_distdir/configure; then
792 touch $am_distdir/configure
795 if test -f $am_distdir/config.status; then
796 touch $am_distdir/config.status
799 ad_debug "<ad_makedist_makesane:"
803 # Creates distribution of the source tree. All files in the distribution
804 # will be processed and the distribution will be packaged.
806 # Arguments: ad_makedist
810 ad_debug ">ad_makedist"
812 if test '!' -f autodist.dist; then
813 ad_fatal "Autodist has not been run yet to prepare source tree"
816 if test -z $MAKE; then
817 ad_fatal "The MAKE variable is not set in autodist.conf"
820 # Get distdir from Makefile
821 if test '!' -f Makefile; then
822 ad_fatal "The source tree is not configured, run ./configure first"
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
832 if test x$opt_no_dist = xtrue; then
833 ad_fatal "The '$distribution' distribution cannot be packaged"
837 ad_run_dist_hooks "$pre_dist_hooks"
839 # Create distribution directory
840 ad_debug "Creating distribution directory $am_distdir"
841 $MAKE distdir || exit 1
842 chmod -R a+r $am_distdir
844 if test '!' -d $am_distdir; then
845 ad_fatal "Distribution directory $am_distdir not created"
848 # Run pre-process-dist-hooks
849 ad_run_dist_hooks "$pre_p_dist_hooks"
852 ad_dist_excludes "$excludes"
855 ad_dist_includes "$includes"
857 # Include specific license file if specified
858 if test "$license" != ""; then
859 cp -p $license $am_distdir/COPYING || exit 1
862 # Process noprocesses
865 # Process source files
866 ad_debug "Process distribution source tree"
867 ad_process_source_tree $am_distdir
869 # Process non-source files
870 ad_debug "Process distribution tree"
871 ad_process_tree $am_distdir
873 # Run post-process_dist-hooks
874 ad_run_dist_hooks "$post_p_dist_hooks"
876 # Make distribution sane
880 ad_debug "Packaging distribution"
881 tar chof $am_distdir.tar $am_distdir || exit 1
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
888 if test x$ad_bzip2 = xtrue; then
889 bzip2 -9 -c $am_distdir.tar > $am_distdir.tar.bz2 || exit 1
891 if test x$ad_compress = xtrue; then
892 compress -c $am_distdir.tar > $am_distdir.tar.Z || exit 1
894 if test x$ad_zip = xtrue; then
895 rm -f $am_distdir.zip
896 zip -rq $am_distdir.zip $am_distdir || exit 1
898 rm -f $am_distdir.tar
900 # Run post-dist-hooks
901 ad_run_dist_hooks "$post_dist_hooks"
905 rm -f autodist.noprocess
907 ad_debug "<ad_makedist"
911 # Handles distribution options.
913 # option has the following format in distfile:
917 # Following options are supported:
923 # Arguments: ad_handle_options <options>
927 ad_debug ">ad_handle_options: $1"
931 if test "$i" = "template"; then
934 elif test "$i" = "no-dist"; then
937 elif test "$i" = "no-inherit"; then
943 ad_debug "<ad_handle_options: $1"
949 # Arguments: ad_clear_options
953 ad_debug ">ad_clear_options"
957 ad_debug "<ad_clear_options"
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.
966 # Arguments: ad_parse_distribution <distribution name> <inherit>
968 ad_parse_distribution()
987 ad_debug ">ad_parse_distribution: $1 $2"
989 if test '!' -f $distdir/$1; then
990 ad_fatal "Distribution '$1' is not declared"
994 inhs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
995 | grep "inherit " | cut -d' ' -f2 | sort | uniq`
998 defs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
999 | grep "define " | cut -d' ' -f2 | sort | uniq`
1001 if test "$inhs" = "" && test "$defs" = ""; then
1002 ad_fatal "Distribution '$1' does not define anything"
1005 # Get undefined distdefs
1006 undefs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1007 | grep "undef " | cut -d' ' -f2 | sort | uniq`
1010 incs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1011 | grep "include " | sed 's/include / : /'`
1014 excs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1015 | grep "exclude " | cut -d' ' -f2- | sort | uniq`
1018 nops=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1019 | grep "noprocess " | cut -d' ' -f2- | sort | uniq`
1022 opts=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1023 | grep "option " | cut -d' ' -f2- | sort | uniq`
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"
1030 if test x$2 = xfalse && test x$opt_template = xtrue; then
1031 ad_fatal "Template distribution '$1' cannot be prepared or packaged"
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"
1042 # Expand distdefs from inherited distributions
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."
1050 if test '!' -f $distdir/$i; then
1051 ad_fatal "Distribution '$i' is not declared (inherited from '$1')"
1054 ad_parse_distribution $i true
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 / : /'`
1064 ad_debug "license: $license"
1065 ad_debug "licenseh: $licenseh"
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-`
1072 if test "$dname"; then
1076 # Get distribution package name (optional)
1077 dpname=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1078 | grep "package " | cut -d' ' -f2`
1080 if test "$dpname"; then
1083 package=$distribution
1086 # Get Bug-report email address (optional)
1087 bugr=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1088 | grep "bug-report " | cut -d' ' -f2-`
1090 if test "$bugr"; then
1094 ad_debug "distribution: $distribution"
1095 ad_debug "package: $package"
1096 ad_debug "bug-report: $bug_report"
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-`
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"
1120 ad_handle_options "$doptions"
1121 ad_debug "options: $doptions"
1125 inherits="$inherits $inhs"
1126 distdefs="$distdefs $defs"
1127 includes="$includes $incs"
1128 excludes="$excludes $excs"
1129 noprocess="$noprocess $nops"
1130 undistdefs="$undistdefs $undefs"
1132 ad_debug "<ad_parse_distribution: $1 $2"
1136 # Processes parsed distdefs. Removes duplicates, and undefined distdefs
1137 # from the distdefs.
1139 # Arguments: ad_process_distdefs
1141 ad_process_distdefs()
1143 ad_debug ">ad_process_distdefs"
1145 # Remove all undefined distribution defines
1146 for i in $undistdefs
1148 ad_debug "undefining $i distdef"
1149 distdefs=`echo $distdefs | sed s/$i//`
1152 rm -f autodist.tmp.defs
1154 # Remove duplicate distdefs
1157 echo $i >>autodist.tmp.defs
1159 distdefs=`sort < autodist.tmp.defs | uniq`
1160 distdefs=`echo $distdefs`
1161 rm -f autodist.tmp.defs
1163 ad_debug "distdefs=$distdefs"
1165 ad_debug "<ad_process_distdefs"
1169 # Processes for a license header change.
1171 # Arguments: ad_process_license_header <scriptfile>
1173 ad_process_license_header()
1175 ad_debug ">ad_process_license_header"
1177 # Add : separator at the end
1178 lics=`echo "$licenseh" | sed 's/$/ : /'`
1184 if test "$i" = ":" && test -z "$src"; then
1187 if test -z "$src"; then
1191 if test -z "$dst" && test "$i" != ":"; then
1194 ad_fatal "Missing argument in 'license-header $src'"
1197 ad_debug "Replacing $src license with $dst license"
1199 if test '!' -f $src; then
1200 ad_fatal "License header $src: No such file or directory"
1203 if test '!' -f $dst; then
1204 ad_fatal "License header $dst: No such file or directory"
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
1217 ad_debug "<ad_process_license_header"
1221 # Process specified noprocesses. This is called during makedist.
1223 # Arguments: ad_process_noprocess
1225 ad_process_noprocess()
1230 ad_debug ">ad_process_noprocess"
1235 ie=`echo $i | sed 's/\\//\\\\\//g'` || exit 1
1237 n="$n -e 's/$am_distdir\\/$ie//'"
1241 rm -f autodist.noprocess
1242 if test x$np = xtrue; then
1243 echo $n > autodist.noprocess || exit 1
1246 ad_debug "<ad_process_noprocess"
1250 # Process a file given as argument for the distribution.
1252 # Arguments: ad_process_file <filepath> <dest_filepath>
1261 # Process only regular files
1262 if test '!' -f $1; then
1266 ad_debug ">ad_process_file: $1 $2"
1268 f="autodist.tmp.script"
1271 # If license header is provided, replace the license header in the file.
1272 ad_process_license_header $f
1274 ad_debug "Getting #ifdef's and #ifndef's"
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`
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`
1284 ad_debug "defs in $1: $defs"
1285 ad_debug "ndefs in $1: $ndefs"
1287 # Create the script to include and exclude stuff in the file according
1288 # to the distribution defines
1291 ad_debug "processing ifdefs"
1297 if test x$d = x$i; then
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
1309 echo "/^#else !$d/,/^#endif $d/ { next; }" >> $f
1314 ad_debug "processing ifndefs"
1320 if test x$d = x$i; then
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
1332 echo "/^#else $d/,/^#endif $d/ { next; }" >> $f
1336 # Now process the file with the script
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
1344 # Execute the script
1345 cp -p $1 $2 || exit 1
1346 awk -f $f $1 > $2 || exit 1
1351 ad_debug "<ad_process_file: $1 $2"
1355 # Process a source file given as argument for the distribution.
1357 # Arguments: ad_process_source_file <filepath> <dest_filepath>
1359 ad_process_source_file()
1366 # Process only regular files
1367 if test '!' -f $1; then
1371 ad_debug ">ad_process_source_file: $1 $2"
1373 f="autodist.tmp.script"
1376 # If license header is provided, replace the license header in the file.
1377 ad_process_license_header $f
1379 ad_debug "Getting #ifdef's and #ifndef's"
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`
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`
1389 ad_debug "defs in $1: $defs"
1390 ad_debug "ndefs in $1: $ndefs"
1392 # Create the script to include and exclude stuff in the file according
1393 # to the distribution defines
1396 ad_debug "processing ifdefs"
1402 if test x$d = x$i; then
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
1414 echo "/^#else \/\* \!$d/,/^#endif \/\* $d/ { next; }" >> $f
1419 ad_debug "processing ifndefs"
1425 if test x$d = x$i; then
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
1437 echo "/^#else \/\* $d/,/^#endif \/\* $d/ { next; }" >> $f
1441 # Now process the file with the script
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
1449 # Execute the script
1450 cp -p $1 $2 || exit 1
1451 awk -f $f $1 > $2 || exit 1
1456 ad_debug "<ad_process_source_file: $1 $2"
1462 # Arguments: ad_run_hooks <hooks>
1466 ad_debug ">ad_run_hooks: $1"
1470 if test '!' -f $i; then
1471 ad_fatal "Hook script $i does not exist"
1473 sh $i "$distribution" "$dist_version" "$package" || exit 1
1476 ad_debug "<ad_run_hooks: $1"
1482 # Arguments: ad_run_dist_hooks <hooks>
1486 ad_debug ">ad_run_dist_hooks: $1"
1490 if test '!' -f $i; then
1491 ad_fatal "Dist hook script $i does not exist"
1493 sh $i "$distribution" "$dist_version" "$package" "$am_distdir" || exit 1
1496 ad_debug "<ad_run_dist_hooks: $1"
1499 ###############################################################################
1502 usage="Usage: autodist [options] [distribution] [version]"
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.
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"
1526 # Process command line arguments
1528 while test $# -gt 0; do
1533 test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
1542 if test $# -eq 0; then
1543 ad_parse_distribution $distribution false
1544 echo "Distribution: ${distribution}" 1>&2;
1546 ad_parse_distribution $1 false
1547 echo "Distribution: ${1}" 1>&2;
1550 echo "Distdefs:" 1>&2;
1583 echo "${usage}" 1>&2;
1585 echo "${help}" 1>&2;
1590 echo "@PACKAGE@ (@PACKAGE_NAME@) $ver" 1>&2;
1591 echo "Written by Pekka Riikonen" 1>&2;
1593 echo "Copyright (C) 2004 - 2005 SILC Project" 1>&2;
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;
1604 echo "${usage}" 1>&2;
1614 # Parse the requested distribution
1616 if test $# != 0; then
1617 distribution="${1}";
1618 distfile=$distribution
1621 ad_parse_distribution $distribution false
1624 if test $# != 0; then
1625 dist_version="${1}";
1628 ad_debug "Preparing source tree for configuration and compilation..."
1629 ad_debug "Preparing $distribution distribution version $dist_version"
1632 # Create the distribution defines header file
1634 if test "$DISTDEFS"; then
1635 ad_create_distdefs_h
1637 ad_fatal "DISTDEFS not defined in $distdir/autodist.conf"
1643 ad_run_hooks "$pre_hooks"
1646 # Generate the Makefile.am files from Makefile.ad files
1648 ad_make_makefile_ams
1651 # Generate the configure.ac from configure.ad file(s)
1653 ad_make_configure_ac ./configure.ad
1656 # Process all files with .ad suffix for distribution processing
1661 # Generate configure script
1666 # Generate Makefile.in files
1668 ad_make_makefile_ins
1671 # Create autodist.dist
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
1681 ad_run_hooks "$post_hooks"
1683 ad_debug "Done, now run ./configure and make."