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
137 ###############################################################################
139 if test -f "$distdir/autodist.conf"; then
140 . $distdir/autodist.conf
146 ###############################################################################
150 # Print out debug information if debugging is enabled. To enable debugging
151 # set the global variable "debug" to true value.
153 # Arguments: ad_debug <ad_debug string>
157 if test x$debug = xtrue; then
165 # Prints out error message and exits the script.
167 # Arguments: ad_fatal <error message>
173 echo autodist: error: $1
179 # Prints out warning message
181 # Arguments: ad_warning <warning message>
187 echo autodist: warning: $1
194 # Arguments: ad_log_open <logfile>
202 This file contains messages produced by the Autodist $ver.
208 # Prints to an open log file
214 if test x$nolog = xfalse; then
220 # Initializes the Autodist environment, creates default distribution
221 # directory, and default distribution.
223 # Arguments: ad_initialize
227 ad_debug "Initializing Autodist environment"
229 # Create default distdir
230 if test '!' -f $distdir; then
234 # Create Autodist configuration file
235 if test -f @AUTODISTDIR@/autodist.conf; then
236 cp -p @AUTODISTDIR@/autodist.conf $distdir
239 # Create default distribution
240 if test -f @AUTODISTDIR@/default; then
241 cp -p @AUTODISTDIR@/default $distdir
244 ad_debug "Autodist environment initialized"
248 # Creates the distdefs header file including defined distdefs
250 # Arguments: ad_create_distdefs_h
252 ad_create_distdefs_h()
254 ad_debug "Creating distdef header file"
260 Automatically generated by Autodist $ver. Do not edit.
262 Generated: `date` by `whoami`
263 Distribution: $distribution
267 #ifndef _`echo $DP`_DISTDEFS_H
268 #define _`echo $DP`_DISTDEFS_H
274 echo "#define $i 1" >>$fname
279 #endif /* _`echo $DP`_DISTDEFS_H */
282 ad_debug "Distdef header file created"
286 # Creates the main configure script for the distribution. This runs
287 # the aclocal, autoheader and autoconf tools.
289 # Arguments: ad_make_configure
293 local run_autoconf=false
295 ad_debug "Starting configure creation"
299 if test "$ACLOCAL"; then
300 ad_debug "Running aclocal"
301 if test x$debug = xtrue; then
304 $ACLOCAL 1>/dev/null 2>/dev/null
306 if test $? != 0; then
307 ad_fatal "aclocal failed"
311 if test "$AUTOCONF"; then
312 ad_debug "Running autoconf"
314 if test $? != 0; then
315 ad_fatal "autoconf failed"
320 if test "$AUTOHEADER"; then
321 ad_debug "Running autoheader"
323 if test $? != 0; then
324 ad_fatal "autoheader failed"
328 if test "$LIBTOOLIZE"; then
329 ad_debug "Running libtoolize"
331 if test $? != 0; then
332 ad_fatal "libtoolize failed"
336 if test x$run_autoconf = xtrue; then
337 if test '!' -f configure; then
338 ad_fatal "creating configure script failed"
342 ad_debug "Ending configure creation"
346 # Creates the configure.ac script from the configure.ad fragments in
347 # the source tree. Takes the source configure file as argument which
348 # is used to create the actual configure.ac.
350 # Arguments: ad_make_configure_ac <configure_ac_source>
352 ad_make_configure_ac()
356 ad_debug "Starting creating configure.ac: $1"
359 ad_log "Following configure.ad files were processed into configure.ac:"
360 ad_log "--------------------------------------------------------------"
362 if test '!' -f $1; then
363 ad_fatal "The configure file '$1' does not exist"
366 check="`sed 's/^[ ]*//' < $1 | grep -v "^#" | grep -e "AD_INIT"`"
367 if test -z $check; then
368 rm -f configure.ad.cfs
369 rm -f $fname $fname.tmp
370 ad_fatal "The 'AD_INIT' macro has not been set in configure.ac"
373 rm -f configure.ac configure.ad.cfs
375 cfs=`find . -type f -name configure\*\.ad`
378 if test "x$i" = "x$1"; then
382 ad_debug "including $i"
385 cat $i >> configure.ad.cfs
388 if test -f configure.ad.cfs; then
389 check="`sed 's/^[ ]*//' < $1 | grep -v "^#" | grep -e "AD_INCLUDE_CONFIGURE"`"
390 if test -z $check; then
391 rm -f configure.ad.cfs
392 ad_warning "configure.ad fragments found but 'AD_INCLUDE_CONFIGURE' is not set"
396 # Header for configure.ac
397 fname="configure.tmp.ac"
399 # Automatically generated by Autodist $ver. Do not edit.
400 # To make changes edit the configure.ad file in the source tree.
402 # Source: configure.ad
403 # Generated: `date` by `whoami`
404 # Distribution: $distribution
409 ad_debug "creating configure.ac"
410 if test -f configure.ad.cfs; then
411 sed '/^AD_INCLUDE_CONFIGURE/ r configure.ad.cfs' $1 > $fname.tmp
412 sed -e "/^AD_INCLUDE_CONFIGURE/d" $fname.tmp >> $fname
413 rm -f configure.ad.cfs $fname.tmp
419 sed -e "/AD_INIT/s//AC_INIT([$distribution], [$dist_version], [$bug_report], [$package])/" $fname > $fname.tmp
421 # Remove AD_DISABLE_DEPENDENCIES
422 sed -e "/^AD_DISABLE_DEPENDENCIES/d" $fname.tmp > $fname
424 # Process for distribution
426 ad_process_file $fname $fname.tmp false
428 # Remove any trailing backslashes
429 if test -f "$fname.tmp"; then
430 sed -e :a -e '/\\$/N; s/[ ]*\\\n//; ta' < $fname.tmp > configure.ac
432 cp -p $fname configure.ac
434 rm -f $fname $fname.tmp
436 ad_log " ./configure.ad"
439 ad_debug "Ending creating configure.ac: $1"
443 # Creates the Makefile.in files by running the automake tool.
445 # Arguments: ad_make_makefile_ins
447 ad_make_makefile_ins()
449 ad_debug "Starting creating Makefile.in files"
451 if test "$AUTOMAKE"; then
452 ad_debug "Running automake"
454 if test $? != 0; then
455 ad_fatal "automake failed"
459 ad_debug "Ending creating Makefile.in files"
463 # Creates the Makefile.am files from the Makefile.ad files in the
464 # source tree. This runs the distribution specific processing for the
467 # Arguments: ad_make_makefile_ams
469 ad_make_makefile_ams()
471 ad_debug "Starting creating Makefile.am files"
474 ad_log "Following Makefile.ad files were processed into Makefile.am files:"
475 ad_log "------------------------------------------------------------------"
477 files=`find . -type f -name Makefile\.ad`
481 fname=`echo $ff | sed s/\.ad//`
482 ad_make_makefile_am $ff $fname.am
486 ad_debug "Ending creating Makefile.am files"
490 # Creates Makefile.am file from the Makefile.ad file.
492 # Arguments: ad_make_makefile_am <src> <dst>
494 ad_make_makefile_am()
500 # Disable dependencies if requested
501 dc=`sed 's/^[ ]*//' < configure.ad | grep -v "^#" \
502 | grep "AD_DISABLE_DEPENDENCIES"`
503 if test "$dc" = "AD_DISABLE_DEPENDENCIES"; then
507 # Header for the Makefile.am
509 # Automatically generated by Autodist $ver from Makefile.ad. Do not edit.
510 # To make changes edit the $f file in the source tree.
513 # Generated: `date` by `whoami`
514 # Distribution: $distribution
519 # Run the distribution processing for this Makefile.ad
520 ad_debug "Processing $f to be $fname"
521 ad_process_file $f $fname.tmp false
523 # Remove any trailing backslashes
524 if test -f "$fname.tmp"; then
525 sed -e :a -e '/\\$/N; s/[ ]*\\\n//; ta' < $fname.tmp >> $fname
530 # Enable dependencies if requested
531 if test x$am_deps = xtrue; then
534 # S_AD_ENABLE_DEPENDENCIES
535 \$(srcdir)/Makefile.am: Makefile.ad
536 cd \$(top_srcdir) && autodist -p \$(subdir)/Makefile.ad \$(subdir)/Makefile.am && cd \$(subdir)
537 # E_AD_ENABLE_DEPENDENCIES
545 # Processes all files with .ad suffix, with exception of configure*.ad
546 # and Makefile.ad files, for distribution from the source tree.
548 # Arguments: ad_process_ads false
552 ad_debug "Starting processing .ad files"
555 ad_log "Following .ad files were processed:"
556 ad_log "-----------------------------------"
558 files=`find . -type f -name \*\.ad \! -name configure\*\.ad \! -name Makefile\.ad`
561 fname=`echo $i | sed s/\.ad//`
563 ad_debug "Processing $i to be $fname"
564 ad_log " $i into $fname"
566 # Run the distribution processing for this file
567 ad_process_file $i $fname false
568 if test -f $fname; then
569 cp -p $i $fname || exit 1
575 ad_debug "Ending processing .ad files"
579 # Includes files specified in the distribution for inclusion. Used when
580 # creating the distribution for packaging.
582 # include has the following format in distfile:
584 # include <path> [<dest path>]
586 # If only source path, which may be file, directory or regular expression,
587 # is specified the path will be same in distribution. If the destination
588 # path is specified that will be the new name and/or new location of the
589 # source path. This, in effect, is a cp utility with ability to create
590 # directories if they do not exist.
592 # Arguments: ad_dist_includes <includeslist> <recursive> <log>
598 ad_debug "Starting running includes: $1 $2"
600 if test x$3 = xtrue; then
602 ad_log "Following files and directories were included in distribution:"
603 ad_log "--------------------------------------------------------------"
606 # By default do not expand pathnames
609 # Add : separator at the end
610 incs="`echo "$1" | sed 's/$/ : /'`"
616 if test "$i" = ":" && test -z "$src"; then
619 if test -z "$src"; then
623 if test -z "$dst" && test "$i" != ":"; then
629 ad_debug "Including $src into $dst"
631 if test -f "$src"; then
634 if test "$src" = "$dst"; then
635 # Add to same location
636 d=`echo $src | sed 's,/[^/]*$,,'`
637 if test "$d" != "$src" && test "$d" != "." && \
638 test '!' -d $am_distdir/$d; then
639 mkdir -p $am_distdir/$d || exit 1
642 # Add to different location
643 check=`echo "$dst" | sed 's/?//; s/*//; s/\[//; s/\]//'`
644 if test "$check" != "$dst"; then
645 ad_fatal "Invalid destination in 'include $src $dst'"
648 d=`echo $dst | sed 's,/[^/]*$,,'`
649 if test "$d" != "$dst" && test "$d" != "." && \
650 test '!' -d $am_distdir/$d; then
651 mkdir -p $am_distdir/$d || exit 1
655 if test x$3 = xtrue; then
656 ad_log " $src into $am_distdir/$d"
658 cp -p $src $am_distdir/$d || exit 1
660 elif test -d "$src"; then
663 if test "$src" = "$dst"; then
664 # Add to same location
665 d=`echo $src | sed 's,/[^/]*$,,'`
666 ds=`echo $src | sed 's/\/$//'`
667 if test "$ds" = "$d"; then
668 d=`echo $d | sed 's,/[^/]*$,,'`
670 if test "$ds" = "$d"; then
673 if test '!' -d $am_distdir/$d && test "$ds" != "$d"; then
674 mkdir -p $am_distdir/$d || exit 1
677 if test x$3 = xtrue; then
678 ad_log " $src into $am_distdir/$d"
680 cp -pR $src $am_distdir/$d || exit 1
682 # Add to different location
683 check=`echo "$dst" | sed 's/?//; s/*//; s/\[//; s/\]//'`
684 if test "$check" != "$dst"; then
685 ad_fatal "Invalid destination in 'include $src $dst'"
688 d=`echo $dst | sed 's,/[^/]*$,,'`
689 ds=`echo $dst | sed 's/\/$//'`
690 if test "$ds" = "$d"; then
691 d=`echo $d | sed 's,/[^/]*$,,'`
693 if test '!' -d $am_distdir/$d && test "$dst" != "$d"; then
694 mkdir -p $am_distdir/$d || exit 1
697 if test x$3 = xtrue; then
698 ad_log " $src into $am_distdir/$dst"
700 cp -pR $src $am_distdir/$dst || exit 1
703 elif test x$2 != xtrue; then
704 # We assume regular expression in filename
705 check=`echo "$src" | sed 's/?//; s/*//; s/\[//; s/\]//'`
706 if test "$check" == "$src"; then
707 if test '!' -a $src; then
708 ad_fatal "Including $src: No such file or directory"
715 # Recursively call this function with expanded pathnames. The
716 # reason why we don't let sh by default expand pathnames is that
717 # the include's destination is optional. If sh expands by default
718 # we don't know the destination. For this reason, we handle the
719 # expansion here ourselves.
721 # If src and dst are same, then expand the pathname as we'll copy
722 # matches to their own locations.
723 if test "$src" = "$dst"; then
724 # Expand pathnames, and format to our include format
726 srcs=`echo $src | sed -e 's/ / : /g' -e 's/^/ : /'` || exit 1
729 # Destination is new, and it has to be a directory.
730 check=`echo "$dst" | sed 's/?//; s/*//; s/\[//; s/\]//'`
731 if test "$check" != "$dst"; then
732 ad_fatal "Invalid destination in 'include $src $dst'"
735 # Make sure dst has / at the end, as this must be a directory
736 dst=`echo $dst | sed 's/\/$//; s/$/\//'`
739 dste=`echo $dst | sed 's/\\//\\\\\//g'` || exit 1
741 # Expand pathnames, and format to our include format
743 srcs=`echo $src | sed -e "s/ / $dste : /g" \
744 -e 's/^/ : /' -e "s/$/ $dste/"` || exit 1
748 # Include recursively
749 ad_dist_includes "$srcs" true
751 elif test '!' -a $src; then
752 ad_fatal "Including $src: No such file or directory"
759 if test x$3 = xtrue; then
765 ad_debug "Ending running includes: $1 $2"
769 # Excludes files specified in the distribution for exclusion. Used when
770 # creating the distribution for packaging.
772 # exclude has the following format in distfile:
776 # The path may be file, directory or regular expression.
778 # Arguments: ad_dist_includes <excludelist> <log>
782 ad_debug "Starting running excludes: $1"
784 if test x$2 = xtrue; then
786 ad_log "Following files and directories were excluded from distribution:"
787 ad_log "----------------------------------------------------------------"
791 cd $am_distdir || exit 1
794 ad_debug "Excluding $i"
795 if test x$2 = xtrue; then
802 if test x$2 = xtrue; then
806 ad_debug "Ending running excludes: $1"
810 # Processes the entire tree for distribution. This inspects files other
811 # than source and header files, with exception of any file with .ad
812 # suffix, and performs distribution processing for the file. The original
813 # file is replaced with the processed file. This function is used when
814 # creating the distribution for packaging.
816 # Arguments: ad_process_tree <directory>
820 ad_debug "Starting processing non-source files: $1"
822 # Take files, except source and .ad files.
823 files=`find $am_distdir -type f \! -name \*\.ad \( \
824 \! -name \*\.[cC] -a \
825 \! -name \*\.[cC][cCpP] -a \
826 \! -name \*\.[cC][xX][xX] -a \
827 \! -name \*\.[cC][pP][pP] -a \
828 \! -name \*\.[cC]++ -a \
830 \! -name \*\.[hH] -a \
832 \! -name \*\.[cC]\.in -a \
833 \! -name \*\.[cC][cCpP]\.in -a \
834 \! -name \*\.[cC][xX][xX]\.in -a \
835 \! -name \*\.[cC][pP][pP]\.in -a \
836 \! -name \*\.[cC]++\.in -a \
837 \! -name \*\.m\.in -a \
838 \! -name \*\.[hH]\.in -a \
839 \! -name \*\.hh\.in \)`
840 files=`echo $files | sed 's/$am_distdir//'`
844 ad_process_file $ff $ff.tmp true
845 if test -f $ff.tmp; then
847 mv -f $ff.tmp $ff || exit 1
851 ad_debug "Ending processing non-source files: $1"
855 # Processes the entire source tree for distribution. This inspects files
856 # in the source tree, with exception of any file with .ad suffix, and
857 # performs distribution processing for the file. The original file is
858 # replaced with the processed file. This function is used when creating
859 # the distribution for packaging.
861 # Call this before ad_process_tree().
863 # Arguments: ad_process_source_tree <directory>
865 ad_process_source_tree()
867 ad_debug "Starting processing source files: $1"
869 # We take only C/C++ files since they use the C compiler friendly
870 # version of distdefs. Other files are not assumed to use them.
871 files=`find $am_distdir -type f \! -name \*\.ad \( \
873 -name \*\.[cC][cCpP] -o \
874 -name \*\.[cC][xX][xX] -o \
875 -name \*\.[cC][pP][pP] -o \
876 -name \*\.[cC]++ -o \
880 -name \*\.[cC]\.in -o \
881 -name \*\.[cC][cCpP]\.in -o \
882 -name \*\.[cC][xX][xX]\.in -o \
883 -name \*\.[cC][pP][pP]\.in -o \
884 -name \*\.[cC]++\.in -o \
886 -name \*\.[hH]\.in -o \
891 ad_process_source_file $ff $ff.tmp true
892 if test -f $ff.tmp; then
894 mv -f $ff.tmp $ff || exit 1
898 ad_debug "Ending processing source files: $1"
902 # Removes Autodist dependencies, as they cannot be delivered to distribution.
904 # Arguments: ad_remove_dependencies <distdir>
906 ad_remove_dependencies()
908 ad_debug "Removing dependencies"
910 ams=`find $1 -type f -name Makefile\.\*`
913 sed -e "/^# S_AD_ENABLE_DEPENDENCIES/,/^# E_AD_ENABLE_DEPENDENCIES/d" $i > $i.tmp
919 # Makes distribution sane, ala modtimes. Since we modify the distribution
920 # we need to make it sane after that.
922 # Arguments: ad_makedist_makesane
924 ad_makedist_makesane()
926 ad_debug "Making distribution file modtimes sane"
928 # DO NOT change these order unless you know what you are doing.
929 if test -f $am_distdir/configure.ac; then
930 touch $am_distdir/configure.ac
933 if test -f $am_distdir/aclocal.m4; then
934 touch $am_distdir/aclocal.m4
937 if test '!' -f Makefile; then
938 ad_fatal "Makefile: No such file or directory"
941 configh=`grep "^CONFIG_HEADER" Makefile | cut -d= -f2 | sed 's/^[ ]*//'`
942 touch $am_distdir/$configh.in 1>/dev/null 2>/dev/null
944 files=`find $am_distdir -type f -name Makefile\.in`
950 if test -f $am_distdir/configure; then
951 touch $am_distdir/configure
954 if test -f $am_distdir/config.status; then
955 touch $am_distdir/config.status
958 ad_debug "Distribution made sane"
962 # Creates distribution of the source tree. All files in the distribution
963 # will be processed and the distribution will be packaged.
965 # Arguments: ad_makedist
969 ad_log_open "makedist.log"
970 ad_debug "Starting distribution creation"
972 ad_log "Created distribution"
973 ad_log "--------------------"
976 if test '!' -f autodist.dist; then
977 ad_fatal "Autodist has not been run yet to prepare source tree"
980 if test -z $MAKE; then
981 ad_fatal "The MAKE variable is not set in autodist.conf"
984 # Get distdir from Makefile
985 if test '!' -f Makefile; then
986 ad_fatal "The source tree is not configured, run ./configure first"
989 # Parse the requested distribution
990 distribution=`grep "dist:" < autodist.dist | cut -d: -f2` || exit 1
991 dist_version=`grep "ver:" < autodist.dist | cut -d: -f2` || exit 1
992 am_distdir=`grep "distdir:" < autodist.dist | cut -d: -f2` || exit 1
993 ad_parse_distribution $distribution false
994 ad_log " Distribution: $distribution $dist_version"
995 ad_log " Destination directory: $am_distdir"
999 if test x$opt_no_dist = xtrue; then
1000 ad_fatal "The '$distribution' distribution cannot be packaged"
1003 # Run pre-dist-hooks
1004 ad_run_dist_hooks "$pre_dist_hooks"
1006 # Create distribution directory
1007 ad_debug "Creating distribution directory $am_distdir"
1008 $MAKE distdir || exit 1
1009 chmod -R a+r $am_distdir
1011 if test '!' -d $am_distdir; then
1012 ad_fatal "Distribution directory $am_distdir not created"
1015 # Run pre-process-dist-hooks
1016 ad_run_dist_hooks "$pre_p_dist_hooks"
1019 ad_dist_excludes "$excludes" true
1022 ad_dist_includes "$includes" false true
1024 # Include specific license file if specified
1025 if test "$license" != ""; then
1027 ad_log "License file in distribution:"
1028 ad_log "-----------------------------"
1029 ad_log " $license into $am_distdir/COPYING"
1031 cp -p $license $am_distdir/COPYING || exit 1
1034 # Remove dependencies
1035 ad_remove_dependencies $am_distdir
1037 # Process noprocesses, first pass
1038 ad_process_noprocess true
1041 ad_log "Following files were not re-licensed:"
1042 ad_log "-------------------------------------"
1044 # Process source files
1045 ad_debug "Process distribution source tree"
1046 ad_process_source_tree $am_distdir
1048 # Process non-source files
1049 ad_debug "Process distribution tree"
1050 ad_process_tree $am_distdir
1054 # Process noprocesses, second pass
1055 ad_process_noprocess false
1057 # Run post-process_dist-hooks
1058 ad_run_dist_hooks "$post_p_dist_hooks"
1060 # Make distribution sane
1061 ad_makedist_makesane
1064 ad_debug "Packaging distribution"
1065 tar chof $am_distdir.tar $am_distdir || exit 1
1068 ad_debug "Compressing distribution package"
1069 if test x$ad_gzip = xtrue; then
1070 ad_debug "Compressing distribution package $am_distdir.tar.gz"
1071 gzip -9 -c $am_distdir.tar > $am_distdir.tar.gz || exit 1
1073 if test x$ad_bzip2 = xtrue; then
1074 ad_debug "Compressing distribution package $am_distdir.tar.bz2"
1075 bzip2 -9 -c $am_distdir.tar > $am_distdir.tar.bz2 || exit 1
1077 if test x$ad_compress = xtrue; then
1078 ad_debug "Compressing distribution package $am_distdir.tar.Z"
1079 compress -c $am_distdir.tar > $am_distdir.tar.Z || exit 1
1081 if test x$ad_zip = xtrue; then
1082 rm -f $am_distdir.zip
1083 ad_debug "Compressing distribution package $am_distdir.zip"
1084 zip -rq $am_distdir.zip $am_distdir || exit 1
1086 rm -f $am_distdir.tar
1088 # Run post-dist-hooks
1089 ad_run_dist_hooks "$post_dist_hooks"
1094 ad_log "Distribution created successfully."
1096 ad_debug "Ending distribution creation"
1100 # Handles distribution options.
1102 # option has the following format in distfile:
1106 # Following options are supported:
1112 # Arguments: ad_handle_options <options>
1116 ad_debug "Handling options: $1"
1120 if test "$i" = "template"; then
1123 elif test "$i" = "no-dist"; then
1126 elif test "$i" = "no-inherit"; then
1134 # Clears set options
1136 # Arguments: ad_clear_options
1142 opt_no_inherit=false
1146 # Parses the distribution. Gets all distribution defines from the
1147 # distribution. This also expands all inherited distributions recursively
1148 # to get all inherited distribution defines. From inherited distributions
1149 # their name and package name is not inherited.
1151 # Arguments: ad_parse_distribution <distribution name> <inherit>
1153 ad_parse_distribution()
1172 ad_debug "Starting parsing distribution: $1 $2"
1174 if test '!' -f $distdir/$1; then
1175 ad_fatal "Distribution '$1' is not declared"
1179 inhs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1180 | grep "inherit " | cut -d' ' -f2 | sort | uniq`
1183 defs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1184 | grep "define " | cut -d' ' -f2 | sort | uniq`
1186 if test "$inhs" = "" && test "$defs" = ""; then
1187 ad_fatal "Distribution '$1' does not define anything"
1190 # Get undefined distdefs
1191 undefs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1192 | grep "undef " | cut -d' ' -f2 | sort | uniq`
1195 incs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1196 | grep "include " | sed 's/include / : /'`
1199 excs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1200 | grep "exclude " | cut -d' ' -f2- | sort | uniq`
1203 nops=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1204 | grep "noprocess " | cut -d' ' -f2- | sort | uniq`
1207 opts=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1208 | grep "option " | cut -d' ' -f2- | sort | uniq`
1211 ad_handle_options "$opts"
1212 if test x$2 = xtrue && test x$opt_no_inherit = xtrue; then
1213 ad_fatal "Distribution '$1' cannot be inherited"
1215 if test x$2 = xfalse && test x$opt_template = xtrue; then
1216 ad_fatal "Template distribution '$1' cannot be prepared or packaged"
1219 ad_debug "inherits: $inhs"
1220 ad_debug "distdefs: $defs"
1221 ad_debug "includes: $incs"
1222 ad_debug "excludes: $excs"
1223 ad_debug "noprocess: $nops"
1224 ad_debug "undistdefs: $undefs"
1225 ad_debug "options: $opts"
1227 # Expand distdefs from inherited distributions
1230 if test x$1 = x$i; then
1231 ad_fatal "Infinite recursion detected. Fix the '$distdir/$1' \
1232 distribution to not have 'inherit $i' declared."
1235 if test '!' -f $distdir/$i; then
1236 ad_fatal "Distribution '$i' is not declared (inherited from '$1')"
1239 ad_parse_distribution $i true
1244 license=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1245 | grep "license " | cut -d' ' -f2`
1246 licenseh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1247 | grep "license-header " | sed 's/license-header / : /'`
1249 ad_debug "license: $license"
1250 ad_debug "licenseh: $licenseh"
1252 if test x$2 = xfalse; then
1253 # Take rest of the stuff from top distribution
1255 # We take precedence on defined and undefined distdefs. Remove
1256 # undefined distdefs if we have defined them.
1259 ad_debug "defining undefined $d distdef"
1260 undistdefs=`echo $undistdefs | sed s/$d//g`
1263 # Get distribution name
1264 dname=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1265 | grep "name " | cut -d' ' -f2-`
1267 if test "$dname"; then
1271 # Get distribution package name (optional)
1272 dpname=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1273 | grep "package " | cut -d' ' -f2`
1275 if test "$dpname"; then
1278 package=$distribution
1281 # Get Bug-report email address (optional)
1282 bugr=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1283 | grep "bug-report " | cut -d' ' -f2-`
1285 if test "$bugr"; then
1289 ad_debug "distribution: $distribution"
1290 ad_debug "package: $package"
1291 ad_debug "bug-report: $bug_report"
1293 # Get hooks (optional)
1294 prh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1295 | grep "pre-hook " | cut -d' ' -f2-`
1296 poh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1297 | grep "post-hook " | cut -d' ' -f2-`
1298 prdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1299 | grep "pre-dist-hook " | cut -d' ' -f2-`
1300 podh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1301 | grep "post-dist-hook " | cut -d' ' -f2-`
1302 prpdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1303 | grep "pre-process-dist-hook " | cut -d' ' -f2-`
1304 popdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \
1305 | grep "post-process-dist-hook " | cut -d' ' -f2-`
1307 pre_hooks="$pre_hooks $prh"
1308 post_hooks="$post_hooks $poh"
1309 pre_dist_hooks="$pre_dist_hooks $prdh"
1310 post_dist_hooks="$post_dist_hooks $podh"
1311 pre_p_dist_hooks="$pre_p_dist_hooks $prpdh"
1312 post_p_dist_hooks="$post_p_dist_hooks $popdh"
1313 doptions="$doptions $opts"
1315 ad_handle_options "$doptions"
1316 ad_debug "options: $doptions"
1320 inherits="$inherits $inhs"
1321 distdefs="$distdefs $defs"
1322 includes="$includes $incs"
1323 excludes="$excludes $excs"
1324 noprocess="$noprocess $nops"
1325 undistdefs="$undistdefs $undefs"
1327 ad_debug "Ending parsing distribution: $1 $2"
1331 # Processes parsed distdefs. Removes duplicates, and undefined distdefs
1332 # from the distdefs.
1334 # Arguments: ad_process_distdefs
1336 ad_process_distdefs()
1338 ad_debug "Starting processing distdefs"
1341 ad_log "Following distdefs were processed:"
1342 ad_log "----------------------------------"
1344 # Remove all undefined distribution defines
1345 for i in $undistdefs
1347 ad_debug "undefining $i distdef"
1348 distdefs=`echo $distdefs | sed s/$i//g`
1351 rm -f autodist.tmp.defs
1353 # Remove duplicate distdefs
1356 echo $i >>autodist.tmp.defs
1358 distdefs=`sort < autodist.tmp.defs | uniq`
1359 distdefs=`echo $distdefs`
1360 rm -f autodist.tmp.defs
1369 ad_debug "distdefs=$distdefs"
1371 ad_debug "Ending processing distdefs"
1375 # Processes for a license header change.
1377 # Arguments: ad_process_license_header <scriptfile> <sourcefile>
1379 ad_process_license_header()
1381 ad_debug "Starting license header processing"
1383 # Add : separator at the end
1384 lics=`echo "$licenseh" | sed 's/$/ : /'`
1390 if test "$i" = ":" && test -z "$src"; then
1393 if test -z "$src"; then
1397 if test -z "$dst" && test "$i" != ":"; then
1400 ad_fatal "Missing argument in 'license-header $src'"
1403 ad_debug "Replacing $src license with $dst license"
1405 if test '!' -f $src; then
1406 ad_fatal "License header $src: No such file or directory"
1409 if test '!' -f $dst; then
1410 ad_fatal "License header $dst: No such file or directory"
1413 # Awk script to replace the license header
1414 fl=`sed q $src | sed 's/\\//\\\\\//g' > autodist.lsrc` || exit 1
1415 ll=`sed -n '$p' $src | sed 's/\\//\\\\\//g' > autodist.ldst` || exit 1
1416 echo "BEGIN { N=0; } /`cat autodist.lsrc`/,/`cat autodist.ldst`/ { FILE1=\"$src\"; FILE2=\"$dst\"; getline F1 < FILE1; getline F2 < FILE2; if (F1) { N=sub(F1, F2); } else { F1=\"\$\"; N=sub(F1, F2); } if (N == 0) print 0 > \"$2.norelicense\"; } END { if (N == 0) print 0 > \"$2.norelicense\"; }" >> $1
1417 rm -f autodist.lsrc autodist.ldst
1423 ad_debug "Ending license header processing"
1427 # Process specified noprocesses. This is called during makedist.
1428 # The noprocess first copies the noprocess files and dirs into a temp
1429 # directory, and then removes them from the distdir. This way they are
1430 # not processed by Autodist. After processing they are returned to their
1431 # correct locations from the temp dir. Dirty, yeah, but the way we do
1432 # this until better one comes along.
1434 # Arguments: ad_process_noprocess <process>
1436 # If <process> is true this excludes and if false this includes.
1438 ad_process_noprocess()
1440 ad_debug "Starting running noprocesses"
1446 if test x$1 = xtrue; then
1448 ad_log "Following files and directories were not processed:"
1449 ad_log "---------------------------------------------------"
1451 f="$cur/autodist__noprocess"
1453 mkdir -p $f || exit 1
1455 # First, include them to new location with correct directory structure.
1456 old_am_distdir="$am_distdir"
1457 cd $am_distdir || exit 1
1460 nops=`echo $nops | sed -e 's/ / : /g' -e 's/^/ : /'` || exit 1
1461 ad_dist_includes "$nops" false false
1462 am_distdir="$old_am_distdir"
1464 # Then, remove from distdir (they are in temp dir now)
1474 # Copy from the temp dir back to distdir
1475 cd autodist__noprocess || exit 1
1476 old_am_distdir="$am_distdir"
1477 am_distdir="$cur/$old_am_distdir"
1479 nops=`echo $nops | sed -e 's/ / : /g' -e 's/^/ : /'` || exit 1
1481 ad_dist_includes "$nops" false false
1483 am_distdir="$old_am_distdir"
1485 rm -rf autodist__noprocess
1490 ad_debug "Ending running noprocesses"
1494 # Process a file given as argument for the distribution.
1496 # Arguments: ad_process_file <filepath> <dest_filepath> <re-license>
1505 # Process only regular files
1506 if test '!' -f $1; then
1510 ad_debug "Starting processing file: $1 $2"
1512 f="autodist.tmp.script"
1515 # If license header is provided, replace the license header in the file.
1516 if test x$3 = xtrue; then
1517 ad_process_license_header $f $1
1520 # Get defined distribution defines
1521 defs=`awk "/^#ifdef "$DP"_DIST_|^#else "$DP"_DIST_/ { print; }" \
1522 $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
1524 # Get explicitly not-defined distribution defines
1525 ndefs=`awk "/^#ifndef "$DP"_DIST_|^#else !"$DP"_DIST_/ { print; }" \
1526 $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq`
1528 ad_debug "defs in $1: $defs"
1529 ad_debug "ndefs in $1: $ndefs"
1531 # Create the script to include and exclude stuff in the file according
1532 # to the distribution defines
1535 ad_debug "processing ifdefs"
1541 if test x$d = x$i; then
1547 # If distribution define was not found exclude those lines from the file.
1548 # This also handles the #ifdef's #else (ie. #ifndef) branch.
1549 if test x$found = xfalse; then
1550 ad_debug "ifdef $d will be excluded (it is NOT defined)"
1551 echo "/^#ifdef $d/,/^#else !$d|^#endif $d/ { next; }" >> $f
1553 echo "/^#else !$d/,/^#endif $d/ { next; }" >> $f
1558 ad_debug "processing ifndefs"
1564 if test x$d = x$i; then
1570 # If distribution define was found exclude those lines from the file.
1571 # This also handles the #ifndef's #else (ie. #ifdef) branch.
1572 if test x$found = xtrue; then
1573 ad_debug "ifndef $d will be excluded (it IS defined)"
1574 echo "/^#ifndef $d/,/^#else $d|^#endif $d/ { next; }" >> $f
1576 echo "/^#else $d/,/^#endif $d/ { next; }" >> $f
1580 # Now process the file with the script
1583 # Those distdef lines that remain in the file are removed to make
1584 # the appearance prettier
1585 echo "/^#ifdef "$DP"_DIST_|^#endif "$DP"_DIST_|^#else "$DP"_DIST_|^#else !"$DP"_DIST_|^#ifndef "$DP"_DIST_/ { next; }" >> $f
1586 echo "{ print; }" >> $f
1588 # Execute the script
1589 cp -p $1 $2 || exit 1
1590 awk -f $f $1 > $2 || exit 1
1595 # Log if file was not relicensed
1596 if test -f "$1.norelicense"; then
1598 rm -f $1.norelicense
1601 ad_debug "Ending processing file: $1 $2"
1605 # Process a source file given as argument for the distribution.
1607 # Arguments: ad_process_source_file <filepath> <dest_filepath> <re-license>
1609 ad_process_source_file()
1616 # Process only regular files
1617 if test '!' -f $1; then
1621 ad_debug "Starting processing source file: $1 $2"
1623 f="autodist.tmp.script"
1626 # If license header is provided, replace the license header in the file.
1627 if test x$3 = xtrue; then
1628 ad_process_license_header $f $1
1631 # Get defined distribution defines
1632 defs=`awk '/^#ifdef SILC_DIST_|^#else \/\* SILC_DIST_/ { print; }' \
1633 $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
1635 # Get explicitly not-defined distribution defines
1636 ndefs=`awk '/^#ifndef SILC_DIST_|^#else \/\* \!SILC_DIST_/ { print; }' \
1637 $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq`
1639 ad_debug "defs in $1: $defs"
1640 ad_debug "ndefs in $1: $ndefs"
1642 # Create the script to include and exclude stuff in the file according
1643 # to the distribution defines
1646 ad_debug "processing ifdefs"
1652 if test x$d = x$i; then
1658 # If distribution define was not found exclude those lines from the file.
1659 # This also handles the #ifdef's #else (ie. #ifndef) branch.
1660 if test x$found = xfalse; then
1661 ad_debug "ifdef $d will be excluded (it is NOT defined)"
1662 echo "/^#ifdef $d/,/^#else \/\* \!$d|^#endif \/\* $d/ { next; }" >> $f
1664 echo "/^#else \/\* \!$d/,/^#endif \/\* $d/ { next; }" >> $f
1669 ad_debug "processing ifndefs"
1675 if test x$d = x$i; then
1681 # If distribution define was found exclude those lines from the file.
1682 # This also handles the #ifndef's #else (ie. #ifdef) branch.
1683 if test x$found = xtrue; then
1684 ad_debug "ifndef $d will be excluded (it IS defined)"
1685 echo "/^#ifndef $d/,/^#else \/\* $d|^#endif \/\* $d/ { next; }" >> $f
1687 echo "/^#else \/\* $d/,/^#endif \/\* $d/ { next; }" >> $f
1691 # Now process the file with the script
1694 # Those distdef lines that remain in the file are removed to make
1695 # the appearance prettier
1696 echo "/^#ifdef SILC_DIST_|^#endif \/\* SILC_DIST_|^#else \/\* SILC_DIST_|^#else \/\* \!SILC_DIST_|^#ifndef SILC_DIST_/ { next; }" >> $f
1697 echo "{ print; }" >> $f
1699 # Execute the script
1700 cp -p $1 $2 || exit 1
1701 awk -f $f $1 > $2 || exit 1
1706 # Log if file was not relicensed
1707 if test -f "$1.norelicense"; then
1709 rm -f $1.norelicense
1712 ad_debug "Ending processing source file: $1 $2"
1716 # Processes a non-source file. This is the -p, --process option.
1718 # Arguments: ad_process <src> <dst>
1722 ad_debug "Starting process: $1 $2"
1726 if test '!' -f autodist.dist; then
1727 ad_fatal "Autodist has not been run yet to prepare source tree"
1730 # Parse distribution
1731 distribution=`grep "dist:" < autodist.dist | cut -d: -f2` || exit 1
1732 ad_parse_distribution $distribution false
1736 ad_make_makefile_am $1 $2
1738 ad_debug "Ending process: $1 $2"
1744 # Arguments: ad_run_hooks <hooks>
1748 ad_debug "Running hooks: $1"
1751 ad_log "Hooks executed:"
1752 ad_log "--------------"
1756 if test '!' -f $i; then
1757 ad_fatal "Hook script $i does not exist"
1759 ad_log " sh $i \"$distribution\" \"$dist_version\" \"$package\""
1760 sh $i "$distribution" "$dist_version" "$package" || exit 1
1764 ad_debug "Ending running hooks: $1"
1770 # Arguments: ad_run_dist_hooks <hooks>
1774 ad_debug "Starting running distributions hooks: $1"
1777 ad_log "Distribution hooks executed:"
1778 ad_log "----------------------------"
1782 if test '!' -f $i; then
1783 ad_fatal "Dist hook script $i does not exist"
1786 ad_log " sh $i \"$distribution\" \"$dist_version\" \"$package\" \"$am_distdir\""
1787 sh $i "$distribution" "$dist_version" "$package" "$am_distdir" || exit 1
1791 ad_debug "Ending running distribution hooks"
1794 ###############################################################################
1797 usage="Usage: autodist [options] [distribution] [version]"
1799 Autodist prepares source tree for configuration, compilation and
1800 distribution. Prepares the source tree from the \`autodist.ad'
1801 configuration file. Generates Automake.am files from Automake.ad
1802 files, configure.ac file from configure.ad file(s), generates the
1803 configure script by running Autoconf tool, and generates Makefile.in
1804 files by running Automake tool.
1807 -h, --help print this help, then exit
1808 -V, --version print version number, then exit
1809 -v, --verbose verbosely report processing
1810 -d, --distdir <dir> search distributions from <dir>
1811 -s, --distdefs [<dist>] print distribution defines of <dist>, then exit
1812 -i, --init initialize Autodist environment, create default
1813 distribution directory and distribution, then exit
1814 -p, --process <src> <dst> process file <src> into <dst> for distribution,
1815 only non-source files can be processed with -p
1816 -m, --makedist create and package distribution
1817 --gzip create package compressed with gzip (default)
1818 --bzip2 create also package compressed with bzip2
1819 --compress create also package compressed with compress
1820 --zip create also package compressed with zip"
1823 # Process command line arguments
1825 while test $# -gt 0; do
1830 test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
1839 if test $# -eq 0; then
1840 ad_parse_distribution $distribution false
1841 echo "Distribution: ${distribution}" 1>&2;
1843 ad_parse_distribution $1 false
1844 echo "Distribution: ${1}" 1>&2;
1847 echo "Distdefs:" 1>&2;
1860 if test $# -eq 2; then
1863 echo "${usage}" 1>&2;
1892 echo "${usage}" 1>&2;
1894 echo "${help}" 1>&2;
1899 echo "@PACKAGE@ (@PACKAGE_NAME@) $ver" 1>&2;
1900 echo "Written by Pekka Riikonen" 1>&2;
1902 echo "Copyright (C) 2004 - 2005 SILC Project" 1>&2;
1904 This is free software; see the source for copying conditions. There is NO
1905 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. " 1>&2;
1913 echo "${usage}" 1>&2;
1923 ad_log_open "autodist.log"
1925 ad_log "Processing source tree for compilation and configuration"
1926 ad_log "--------------------------------------------------------"
1930 # Parse the requested distribution
1932 if test $# != 0; then
1933 distribution="${1}";
1934 distfile=$distribution
1938 ad_parse_distribution $distribution false
1940 if test $# != 0; then
1941 dist_version="${1}";
1944 ad_log " Distribution: $distribution $dist_version"
1949 ad_debug "Preparing source tree for configuration and compilation..."
1950 ad_debug "Preparing $distribution distribution version $dist_version"
1953 # Create the distribution defines header file
1955 if test "$DISTDEFS"; then
1956 ad_create_distdefs_h
1958 ad_fatal "DISTDEFS not defined in $distdir/autodist.conf"
1964 ad_run_hooks "$pre_hooks"
1967 # Generate the Makefile.am files from Makefile.ad files
1969 ad_make_makefile_ams
1972 # Generate the configure.ac from configure.ad file(s)
1974 ad_make_configure_ac ./configure.ad
1977 # Process all files with .ad suffix for distribution processing
1982 # Generate configure script
1987 # Generate Makefile.in files
1989 ad_make_makefile_ins
1992 # Create autodist.dist
1994 ad_debug "Creating autodist.dist"
1995 echo "dist:$distfile" > autodist.dist
1996 echo "ver:$dist_version" >> autodist.dist
1997 echo "distdir:$package-$dist_version" >> autodist.dist
2002 ad_run_hooks "$post_hooks"
2004 ad_log "Source tree processed successfully."
2005 ad_debug "Done, now run ./configure and make."