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"
1238 cd $am_distdir || exit 1
1242 ie=`echo $i | sed 's/\\//\\\\\//g'` || exit 1
1244 n="$n -e 's/$am_distdir\\/$ie //'"
1249 rm -f autodist.noprocess
1250 if test x$np = xtrue; then
1251 echo $n > autodist.noprocess || exit 1
1254 ad_debug "<ad_process_noprocess"
1258 # Process a file given as argument for the distribution.
1260 # Arguments: ad_process_file <filepath> <dest_filepath>
1269 # Process only regular files
1270 if test '!' -f $1; then
1274 ad_debug ">ad_process_file: $1 $2"
1276 f="autodist.tmp.script"
1279 # If license header is provided, replace the license header in the file.
1280 ad_process_license_header $f
1282 ad_debug "Getting #ifdef's and #ifndef's"
1284 # Get defined distribution defines
1285 defs=`awk "/^#ifdef "$DP"_DIST_|^#else "$DP"_DIST_/ { print; }" \
1286 $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
1288 # Get explicitly not-defined distribution defines
1289 ndefs=`awk "/^#ifndef "$DP"_DIST_|^#else !"$DP"_DIST_/ { print; }" \
1290 $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq`
1292 ad_debug "defs in $1: $defs"
1293 ad_debug "ndefs in $1: $ndefs"
1295 # Create the script to include and exclude stuff in the file according
1296 # to the distribution defines
1299 ad_debug "processing ifdefs"
1305 if test x$d = x$i; then
1311 # If distribution define was not found exclude those lines from the file.
1312 # This also handles the #ifdef's #else (ie. #ifndef) branch.
1313 if test x$found = xfalse; then
1314 ad_debug "ifdef $d will be excluded (it is NOT defined)"
1315 echo "/^#ifdef $d/,/^#else !$d|^#endif $d/ { next; }" >> $f
1317 echo "/^#else !$d/,/^#endif $d/ { next; }" >> $f
1322 ad_debug "processing ifndefs"
1328 if test x$d = x$i; then
1334 # If distribution define was found exclude those lines from the file.
1335 # This also handles the #ifndef's #else (ie. #ifdef) branch.
1336 if test x$found = xtrue; then
1337 ad_debug "ifndef $d will be excluded (it IS defined)"
1338 echo "/^#ifndef $d/,/^#else $d|^#endif $d/ { next; }" >> $f
1340 echo "/^#else $d/,/^#endif $d/ { next; }" >> $f
1344 # Now process the file with the script
1347 # Those distdef lines that remain in the file are removed to make
1348 # the appearance prettier
1349 echo "/^#ifdef "$DP"_DIST_|^#endif "$DP"_DIST_|^#else "$DP"_DIST_|^#else !"$DP"_DIST_|^#ifndef "$DP"_DIST_/ { next; }" >> $f
1350 echo "{ print; }" >> $f
1352 # Execute the script
1353 cp -p $1 $2 || exit 1
1354 awk -f $f $1 > $2 || exit 1
1359 ad_debug "<ad_process_file: $1 $2"
1363 # Process a source file given as argument for the distribution.
1365 # Arguments: ad_process_source_file <filepath> <dest_filepath>
1367 ad_process_source_file()
1374 # Process only regular files
1375 if test '!' -f $1; then
1379 ad_debug ">ad_process_source_file: $1 $2"
1381 f="autodist.tmp.script"
1384 # If license header is provided, replace the license header in the file.
1385 ad_process_license_header $f
1387 ad_debug "Getting #ifdef's and #ifndef's"
1389 # Get defined distribution defines
1390 defs=`awk '/^#ifdef SILC_DIST_|^#else \/\* SILC_DIST_/ { print; }' \
1391 $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
1393 # Get explicitly not-defined distribution defines
1394 ndefs=`awk '/^#ifndef SILC_DIST_|^#else \/\* \!SILC_DIST_/ { print; }' \
1395 $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq`
1397 ad_debug "defs in $1: $defs"
1398 ad_debug "ndefs in $1: $ndefs"
1400 # Create the script to include and exclude stuff in the file according
1401 # to the distribution defines
1404 ad_debug "processing ifdefs"
1410 if test x$d = x$i; then
1416 # If distribution define was not found exclude those lines from the file.
1417 # This also handles the #ifdef's #else (ie. #ifndef) branch.
1418 if test x$found = xfalse; then
1419 ad_debug "ifdef $d will be excluded (it is NOT defined)"
1420 echo "/^#ifdef $d/,/^#else \/\* \!$d|^#endif \/\* $d/ { next; }" >> $f
1422 echo "/^#else \/\* \!$d/,/^#endif \/\* $d/ { next; }" >> $f
1427 ad_debug "processing ifndefs"
1433 if test x$d = x$i; then
1439 # If distribution define was found exclude those lines from the file.
1440 # This also handles the #ifndef's #else (ie. #ifdef) branch.
1441 if test x$found = xtrue; then
1442 ad_debug "ifndef $d will be excluded (it IS defined)"
1443 echo "/^#ifndef $d/,/^#else \/\* $d|^#endif \/\* $d/ { next; }" >> $f
1445 echo "/^#else \/\* $d/,/^#endif \/\* $d/ { next; }" >> $f
1449 # Now process the file with the script
1452 # Those distdef lines that remain in the file are removed to make
1453 # the appearance prettier
1454 echo "/^#ifdef SILC_DIST_|^#endif \/\* SILC_DIST_|^#else \/\* SILC_DIST_|^#else \/\* \!SILC_DIST_|^#ifndef SILC_DIST_/ { next; }" >> $f
1455 echo "{ print; }" >> $f
1457 # Execute the script
1458 cp -p $1 $2 || exit 1
1459 awk -f $f $1 > $2 || exit 1
1464 ad_debug "<ad_process_source_file: $1 $2"
1470 # Arguments: ad_run_hooks <hooks>
1474 ad_debug ">ad_run_hooks: $1"
1478 if test '!' -f $i; then
1479 ad_fatal "Hook script $i does not exist"
1481 sh $i "$distribution" "$dist_version" "$package" || exit 1
1484 ad_debug "<ad_run_hooks: $1"
1490 # Arguments: ad_run_dist_hooks <hooks>
1494 ad_debug ">ad_run_dist_hooks: $1"
1498 if test '!' -f $i; then
1499 ad_fatal "Dist hook script $i does not exist"
1501 sh $i "$distribution" "$dist_version" "$package" "$am_distdir" || exit 1
1504 ad_debug "<ad_run_dist_hooks: $1"
1507 ###############################################################################
1510 usage="Usage: autodist [options] [distribution] [version]"
1512 Autodist prepares source tree for configuration, compilation and
1513 distribution. Prepares the source tree from the \`autodist.ad'
1514 configuration file. Generates Automake.am files from Automake.ad
1515 files, configure.ac file from configure.ad file(s), generates the
1516 configure script by running Autoconf tool, and generates Makefile.in
1517 files by running Automake tool.
1520 -h, --help print this help, then exit
1521 -V, --version print version number, then exit
1522 -v, --verbose verbosely report processing
1523 -d, --distdir <dir> search distributions from <dir>
1524 -s, --distdefs [<dist>] print distribution defines of <dist>, then exit
1525 -i, --init initialize Autodist environment, create default
1526 distribution directory and distribution, then exit
1527 -m, --makedist create and package distribution
1528 --gzip create package compressed with gzip (default)
1529 --bzip2 create also package compressed with bzip2
1530 --compress create also package compressed with compress
1531 --zip create also package compressed with zip"
1534 # Process command line arguments
1536 while test $# -gt 0; do
1541 test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
1550 if test $# -eq 0; then
1551 ad_parse_distribution $distribution false
1552 echo "Distribution: ${distribution}" 1>&2;
1554 ad_parse_distribution $1 false
1555 echo "Distribution: ${1}" 1>&2;
1558 echo "Distdefs:" 1>&2;
1591 echo "${usage}" 1>&2;
1593 echo "${help}" 1>&2;
1598 echo "@PACKAGE@ (@PACKAGE_NAME@) $ver" 1>&2;
1599 echo "Written by Pekka Riikonen" 1>&2;
1601 echo "Copyright (C) 2004 - 2005 SILC Project" 1>&2;
1603 This is free software; see the source for copying conditions. There is NO
1604 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. " 1>&2;
1612 echo "${usage}" 1>&2;
1622 # Parse the requested distribution
1624 if test $# != 0; then
1625 distribution="${1}";
1626 distfile=$distribution
1629 ad_parse_distribution $distribution false
1632 if test $# != 0; then
1633 dist_version="${1}";
1636 ad_debug "Preparing source tree for configuration and compilation..."
1637 ad_debug "Preparing $distribution distribution version $dist_version"
1640 # Create the distribution defines header file
1642 if test "$DISTDEFS"; then
1643 ad_create_distdefs_h
1645 ad_fatal "DISTDEFS not defined in $distdir/autodist.conf"
1651 ad_run_hooks "$pre_hooks"
1654 # Generate the Makefile.am files from Makefile.ad files
1656 ad_make_makefile_ams
1659 # Generate the configure.ac from configure.ad file(s)
1661 ad_make_configure_ac ./configure.ad
1664 # Process all files with .ad suffix for distribution processing
1669 # Generate configure script
1674 # Generate Makefile.in files
1676 ad_make_makefile_ins
1679 # Create autodist.dist
1681 ad_debug "Creating autodist.dist"
1682 echo "dist:$distfile" > autodist.dist
1683 echo "ver:$dist_version" >> autodist.dist
1684 echo "distdir:$package-$dist_version" >> autodist.dist
1689 ad_run_hooks "$post_hooks"
1691 ad_debug "Done, now run ./configure and make."