X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fautodist%2Fautodist.in;h=e3b67b7ab99f1de45ce67145c682c9549283b7de;hp=27e6c22247dc15ee1b04c3fd2a7ad71919c88bfa;hb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;hpb=c257b555225193e54d85daf541d29578b3c93882 diff --git a/apps/autodist/autodist.in b/apps/autodist/autodist.in index 27e6c222..e3b67b7a 100755 --- a/apps/autodist/autodist.in +++ b/apps/autodist/autodist.in @@ -2,7 +2,7 @@ # # Author: Pekka Riikonen # -# Copyright (C) 2005 Pekka Riikonen +# Copyright (C) 2005 - 2007 Pekka Riikonen # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -30,6 +30,47 @@ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # +############################################################################### +# Shell compatibility + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + # Despite of this, we have managed to segfault some zsh's. + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + + ############################################################################### # Global variables @@ -60,7 +101,7 @@ distdefs= undistdefs= # All distribution options -options= +doptions= opt_template=false opt_no_dist=false opt_no_inherit=false @@ -74,11 +115,13 @@ excludes= # All noprocesses noprocess= -# All pre, post pre-dist and post-dist hooks +# All hooks pre_hooks= post_hooks= pre_dist_hooks= post_dist_hooks= +pre_p_dist_hooks= +post_p_dist_hooks= # Distribution license and license header license= @@ -86,6 +129,7 @@ licenseh= # Whether to output ad_debug information debug=false +nolog=false # Autodist version ver=@VERSION@ @@ -125,6 +169,7 @@ ad_debug() ad_fatal() { set -f + ad_log "error: $1" echo autodist: error: $1 set +f exit 1 @@ -138,10 +183,39 @@ ad_fatal() ad_warning() { set -f + ad_log "warning: $1" echo autodist: warning: $1 set +f } +# +# Opens a log file. +# +# Arguments: ad_log_open +# +ad_log_open() +{ + rm -rf $1 + exec 5> $1 + + cat >&5 << EOF +This file contains messages produced by the Autodist $ver. + +EOF +} + +# +# Prints to an open log file +# +# Arguments: ad_log +# +ad_log() +{ + if test x$nolog = xfalse; then + echo "$1" >&5 + fi +} + # # Initializes the Autodist environment, creates default distribution # directory, and default distribution. @@ -150,11 +224,11 @@ ad_warning() # ad_initialize() { - ad_debug ">ad_initialize" + ad_debug "Initializing Autodist environment" # Create default distdir if test '!' -f $distdir; then - mkdir -p $distdir + mkdir -p -- $distdir fi # Create Autodist configuration file @@ -167,7 +241,7 @@ ad_initialize() cp -p @AUTODISTDIR@/default $distdir fi - ad_debug "ad_create_distdefs_h" + ad_debug "Creating distdef header file" fname=$DISTDEFS rm -f $fname - echo "/*" > $fname - echo " Automatically generated by Autodist $ver. Do not edit." >> $fname - echo >> $fname - echo " Generated: `date` by `whoami`" >> $fname - echo " Distribution: $distribution" >> $fname - echo " License: $license" >> $fname - echo "*/" >> $fname - echo >> $fname - echo "#ifndef _"$DP"_DISTDEFS_H" >> $fname - echo "#define _"$DP"_DISTDEFS_H" >> $fname - echo >> $fname + cat > $fname <>$fname done - echo >> $fname - echo "#endif /* _"$DP"_DISTDEFS_H */" >> $fname + cat >> $fname <ad_make_configure" local run_autoconf=false + ad_debug "Starting configure creation" + rm -f configure if test "$ACLOCAL"; then ad_debug "Running aclocal" - $ACLOCAL 1>/dev/null 2>/dev/null + if test x$debug = xtrue; then + $ACLOCAL + else + $ACLOCAL 1>/dev/null 2>/dev/null + fi if test $? != 0; then ad_fatal "aclocal failed" fi @@ -256,7 +339,7 @@ ad_make_configure() fi fi - ad_debug "ad_make_configure_ac: $1" + local check + + ad_debug "Starting creating configure.ac: $1" + + ad_log "" + ad_log "Following configure.ad files were processed into configure.ac:" + ad_log "--------------------------------------------------------------" if test '!' -f $1; then ad_fatal "The configure file '$1' does not exist" fi - local check="`cat $1 | sed 's/^[ ]*//' | grep -v "^#" | grep -e "AD_INIT"`" + check="`sed 's/^[ ]*//' < $1 | grep -v "^#" | grep -e "AD_INIT"`" if test -z $check; then rm -f configure.ad.cfs rm -f $fname $fname.tmp @@ -283,18 +372,21 @@ ad_make_configure_ac() rm -f configure.ac configure.ad.cfs - cfs=`find . -name configure\*\.ad` + cfs=`find . -type f -name configure\*\.ad` for i in $cfs do if test "x$i" = "x$1"; then continue fi + ad_debug "including $i" + ad_log " $i" + cat $i >> configure.ad.cfs done if test -f configure.ad.cfs; then - local check="`cat $1 | sed 's/^[ ]*//' | grep -v "^#" | grep -e "AD_INCLUDE_CONFIGURE"`" + check="`sed 's/^[ ]*//' < $1 | grep -v "^#" | grep -e "AD_INCLUDE_CONFIGURE"`" if test -z $check; then rm -f configure.ad.cfs ad_warning "configure.ad fragments found but 'AD_INCLUDE_CONFIGURE' is not set" @@ -303,40 +395,48 @@ ad_make_configure_ac() # Header for configure.ac fname="configure.tmp.ac" - echo "# Automatically generated by Autodist $ver. Do not edit." > $fname - echo "# To make changes edit the $i file in the source tree." >> $fname - echo >> $fname - echo "# Source: $i" >> $fname - echo "# Generated: `date` by `whoami`" >> $fname - echo "# Distribution: $distribution" >> $fname - echo "# License: $license" >> $fname - echo >> $fname + cat > $fname < $fname.tmp - sed -e "/AD_INCLUDE_CONFIGURE/s///" $fname.tmp >> $fname + sed '/^AD_INCLUDE_CONFIGURE/ r configure.ad.cfs' $1 > $fname.tmp + sed -e "/^AD_INCLUDE_CONFIGURE/d" $fname.tmp >> $fname rm -f configure.ad.cfs $fname.tmp else - cat $1 >> $fname.tmp + cat $1 >> $fname fi # Process AD_INIT sed -e "/AD_INIT/s//AC_INIT([$distribution], [$dist_version], [$bug_report], [$package])/" $fname > $fname.tmp + # Remove AD_DISABLE_DEPENDENCIES + sed -e "/^AD_DISABLE_DEPENDENCIES/d" $fname.tmp > $fname + # Process for distribution - rm -f $fname - ad_process_file $fname.tmp $fname + rm -f $fname.tmp + ad_process_file $fname $fname.tmp false # Remove any trailing backslashes - if test -f "$fname"; then - cat $fname | sed -e :a -e '/\\$/N; s/\\\n//; ta' > configure.ac + if test -f "$fname.tmp"; then + sed -e :a -e '/\\$/N; s/[ ]*\\\n//; ta' < $fname.tmp > configure.ac else - cp -p $fname.tmp configure.ac + cp -p $fname configure.ac fi rm -f $fname $fname.tmp - ad_debug "ad_make_makefile_ins" + ad_debug "Starting creating Makefile.in files" if test "$AUTOMAKE"; then ad_debug "Running automake" @@ -356,7 +456,7 @@ ad_make_makefile_ins() fi fi - ad_debug "ad_make_makefile_ams" + ad_debug "Starting creating Makefile.am files" + + ad_log "" + ad_log "Following Makefile.ad files were processed into Makefile.am files:" + ad_log "------------------------------------------------------------------" - files=`find . -name Makefile\.ad` + files=`find . -type f -name Makefile\.ad` for ff in $files do + ad_log " $ff" fname=`echo $ff | sed s/\.ad//` + ad_make_makefile_am $ff $fname.am + done + ad_log "" - # Header for the Makefile.am - echo "# Automatically generated by Autodist $ver from Makefile.ad. Do not edit." > $fname.am - echo "# To make changes edit the $ff file in the source tree." >> $fname.am - echo >> $fname.am - echo "# Source: $ff" >> $fname.am - echo "# Generated: `date` by `whoami`" >> $fname.am - echo "# Distribution: $distribution" >> $fname.am - echo "# License: $license" >> $fname.am - echo >> $fname.am - - # Run the distribution processing for this Makefile.ad - ad_debug "Processing $ff to be $fname.am" - ad_process_file $ff $fname.tmp - - # Remove any trailing backslashes - if test -f "$fname.tmp"; then - cat $fname.tmp | sed -e :a -e '/\\$/N; s/\\\n//; ta' >> $fname.am - else - cat $ff >> $fname.am - fi + ad_debug "Ending creating Makefile.am files" +} - rm -f $fname.tmp - done +# +# Creates Makefile.am file from the Makefile.ad file. +# +# Arguments: ad_make_makefile_am +# +ad_make_makefile_am() +{ + local am_deps=true + local f=$1 + local fname=$2 + + # Disable dependencies if requested + dc=`sed 's/^[ ]*//' < configure.ad | grep -v "^#" \ + | grep "AD_DISABLE_DEPENDENCIES"` + if test "$dc" = "AD_DISABLE_DEPENDENCIES"; then + am_deps=false + fi + + # Header for the Makefile.am + cat > $fname <> $fname + else + cat $f >> $fname + fi + + # Enable dependencies if requested + if test x$am_deps = xtrue; then + # Get list of configure.ad's to get them into deps also + cfs=`find . -type f -name configure\*\.ad` + cfs=`echo $cfs | sed 's/\.\///g'` + + cat >> $fname <ad_process_ads" + ad_debug "Starting processing .ad files" + + ad_log "" + ad_log "Following .ad files were processed:" + ad_log "-----------------------------------" - files=`find . -name \*\.ad \! -name configure\*\.ad \! -name Makefile\.ad` + files=`find . -type f -name \*\.ad \! -name configure\*\.ad \! -name Makefile\.ad` for i in $files do fname=`echo $i | sed s/\.ad//` + orig=$i - # Header - echo "# Automatically generated by Autodist $ver. Do not edit." > $fname - echo "# To make changes edit the $i file in the source tree." >> $fname - echo >> $fname - echo "# Source: $i" >> $fname - echo "# Generated: `date` by `whoami`" >> $fname - echo "# Distribution: $distribution" >> $fname - echo "# License: $license" >> $fname - echo >> $fname + ad_debug "Processing $i to be $fname" + ad_log " $i into $fname" # Run the distribution processing for this file - ad_debug "Processing $i to be $fname" - ad_process_file $i $fname + ad_process_file $i $fname false + + if test '!' -f "$fname"; then + cp -p $orig $fname || exit 1 + fi done + ad_log "" - ad_debug " +# Arguments: ad_dist_includes # ad_dist_includes() { - ad_debug ">ad_dist_includes: $1 $2" + local incs + + ad_debug "Starting running includes: $1 $2" + + if test x$3 = xtrue; then + ad_log "" + ad_log "Following files and directories were included in distribution:" + ad_log "--------------------------------------------------------------" + fi # By default do not expand pathnames set -f # Add : separator at the end - local incs="`echo "$1" | sed 's/$/ : /'`" + incs="`echo "$1" | sed 's/$/ : /'`" src= dst= @@ -488,7 +643,7 @@ ad_dist_includes() d=`echo $src | sed 's,/[^/]*$,,'` if test "$d" != "$src" && test "$d" != "." && \ test '!' -d $am_distdir/$d; then - mkdir -p $am_distdir/$d || exit 1 + mkdir -p -- $am_distdir/$d || exit 1 fi else # Add to different location @@ -500,10 +655,13 @@ ad_dist_includes() d=`echo $dst | sed 's,/[^/]*$,,'` if test "$d" != "$dst" && test "$d" != "." && \ test '!' -d $am_distdir/$d; then - mkdir -p $am_distdir/$d || exit 1 + mkdir -p -- $am_distdir/$d || exit 1 fi fi + if test x$3 = xtrue; then + ad_log " $src into $am_distdir/$d" + fi cp -p $src $am_distdir/$d || exit 1 elif test -d "$src"; then @@ -511,16 +669,22 @@ ad_dist_includes() if test "$src" = "$dst"; then # Add to same location - d=`echo $src | sed 's,/[^/]*$,,'` - ds=`echo $src | sed 's/\/$//'` - if test "$ds" = "$d"; then + d=`echo $src | sed 's,/[^/]*$,,'` + ds=`echo $src | sed 's/\/$//'` + if test "$ds" = "$d"; then d=`echo $d | sed 's,/[^/]*$,,'` - fi - if test '!' -d $am_distdir/$d && test "$ds" != "$d"; then - mkdir -p $am_distdir/$d || exit 1 - fi + fi + if test "$ds" = "$d"; then + d="" + fi + if test '!' -d $am_distdir/$d && test "$ds" != "$d"; then + mkdir -p -- $am_distdir/$d || exit 1 + fi - cp -pR $src $am_distdir/$d || exit 1 + if test x$3 = xtrue; then + ad_log " $src into $am_distdir/$d" + fi + cp -pR $src $am_distdir/$d || exit 1 else # Add to different location check=`echo "$dst" | sed 's/?//; s/*//; s/\[//; s/\]//'` @@ -534,9 +698,12 @@ ad_dist_includes() d=`echo $d | sed 's,/[^/]*$,,'` fi if test '!' -d $am_distdir/$d && test "$dst" != "$d"; then - mkdir -p $am_distdir/$d || exit 1 + mkdir -p -- $am_distdir/$d || exit 1 fi + if test x$3 = xtrue; then + ad_log " $src into $am_distdir/$dst" + fi cp -pR $src $am_distdir/$dst || exit 1 fi @@ -553,7 +720,7 @@ ad_dist_includes() fi # Recursively call this function with expanded pathnames. The - # reason why we don't let sh by default expand patnames is that + # reason why we don't let sh by default expand pathnames is that # the include's destination is optional. If sh expands by default # we don't know the destination. For this reason, we handle the # expansion here ourselves. @@ -596,9 +763,13 @@ ad_dist_includes() dst= done + if test x$3 = xtrue; then + ad_log "" + fi + set +f - ad_debug " +# Arguments: ad_dist_includes # ad_dist_excludes() { - ad_debug ">ad_dist_excludes: $1" + ad_debug "Starting running excludes: $1" + + if test x$2 = xtrue; then + ad_log "" + ad_log "Following files and directories were excluded from distribution:" + ad_log "----------------------------------------------------------------" + fi + cur=`pwd` + cd $am_distdir || exit 1 for i in $1 do ad_debug "Excluding $i" - rm -rf $am_distdir/$i + if test x$2 = xtrue; then + ad_log " $i" + fi + rm -rf $i done + cd $cur || exit 1 + + if test x$2 = xtrue; then + ad_log "" + fi - ad_debug "ad_process_tree: $1" - - # We take all files, other than *.ad, including source files, in case - # they use the non-C-compiler-friendly format of distdefs, which is - # possible. - - files=`find $am_distdir \! -name \*\.ad` + ad_debug "Starting processing non-source files: $1" + + # Take files, except source and .ad files. + files=`find $am_distdir -type f \! -name \*\.ad \( \ + \! -name \*\.[cC] -a \ + \! -name \*\.[cC][cCpP] -a \ + \! -name \*\.[cC][xX][xX] -a \ + \! -name \*\.[cC][pP][pP] -a \ + \! -name \*\.[cC]++ -a \ + \! -name \*\.m -a \ + \! -name \*\.mm -o \ + \! -name \*\.M -o \ + \! -name \*\.S -o \ + \! -name \*\.[hH] -a \ + \! -name \*\.hh -a \ + \! -name \*\.[cC]\.in -a \ + \! -name \*\.[cC][cCpP]\.in -a \ + \! -name \*\.[cC][xX][xX]\.in -a \ + \! -name \*\.[cC][pP][pP]\.in -a \ + \! -name \*\.[cC]++\.in -a \ + \! -name \*\.m\.in -a \ + \! -name \*\.[hH]\.in -a \ + \! -name \*\.hh\.in \)` files=`echo $files | sed 's/$am_distdir//'` - # Take away noprocess list - if test -f autodist.noprocess; then - files=`echo $files | sh autodist.noprocess` || exit 1 - fi - for ff in $files do - ad_process_file $ff $ff.tmp + ad_process_file $ff $ff.tmp true if test -f $ff.tmp; then rm -f $ff || exit 1 mv -f $ff.tmp $ff || exit 1 fi done - ad_debug "ad_process_source_tree: $1" + ad_debug "Starting processing source files: $1" - # We take only C/C++ files since they use the C compiler friendly - # version of distdefs. Other files are not assumed to use them. - files=`find $am_distdir \! -name \*\.ad \( \ + # We take only C/C++ (and other files that are run through traditional + # preprocessor) files since they use the C compiler friendly version + # of distdefs. Other files are not assumed to use them. + files=`find $am_distdir -type f \! -name \*\.ad \( \ -name \*\.[cC] -o \ -name \*\.[cC][cCpP] -o \ -name \*\.[cC][xX][xX] -o \ -name \*\.[cC][pP][pP] -o \ -name \*\.[cC]++ -o \ -name \*\.m -o \ + -name \*\.mm -o \ + -name \*\.M -o \ + -name \*\.S -o \ -name \*\.[hH] -o \ - -name \*\.hh \)` - - # Take away noprocess list - if test -f autodist.noprocess; then - files=`echo $files | sh autodist.noprocess` || exit 1 - fi + -name \*\.hh -o \ + -name \*\.[cC]\.in -o \ + -name \*\.[cC][cCpP]\.in -o \ + -name \*\.[cC][xX][xX]\.in -o \ + -name \*\.[cC][pP][pP]\.in -o \ + -name \*\.[cC]++\.in -o \ + -name \*\.m\.in -o \ + -name \*\.[hH]\.in -o \ + -name \*\.hh\.in \)` for ff in $files do - ad_process_source_file $ff $ff.tmp + ad_process_source_file $ff $ff.tmp true if test -f $ff.tmp; then rm -f $ff || exit 1 mv -f $ff.tmp $ff || exit 1 fi done - ad_debug " +# +ad_remove_dependencies() +{ + ad_debug "Removing dependencies" + + ams=`find $1 -type f -name Makefile\.\*` + for i in $ams + do + sed -e "/^# S_AD_ENABLE_DEPENDENCIES/,/^# E_AD_ENABLE_DEPENDENCIES/d" $i > $i.tmp + mv $i.tmp $i + done } # @@ -715,7 +937,7 @@ ad_process_source_tree() # ad_makedist_makesane() { - ad_debug ">ad_makedist_makesane:" + ad_debug "Making distribution file modtimes sane" # DO NOT change these order unless you know what you are doing. if test -f $am_distdir/configure.ac; then @@ -730,10 +952,10 @@ ad_makedist_makesane() ad_fatal "Makefile: No such file or directory" fi - configh=`grep "^CONFIG_HEADER" Makefile | cut -d= -f2 | sed 's/^[ \t]//'` + configh=`grep "^CONFIG_HEADER" Makefile | cut -d= -f2 | sed 's/^[ ]*//'` touch $am_distdir/$configh.in 1>/dev/null 2>/dev/null - files=`find $am_distdir -name Makefile\.in` + files=`find $am_distdir -type f -name Makefile\.in` for i in $files do touch $i @@ -747,7 +969,7 @@ ad_makedist_makesane() touch $am_distdir/config.status fi - ad_debug "ad_makedist" + ad_log_open "makedist.log" + ad_debug "Starting distribution creation" + + ad_log "Created distribution" + ad_log "--------------------" + ad_log "" if test '!' -f autodist.dist; then ad_fatal "Autodist has not been run yet to prepare source tree" @@ -774,16 +1001,23 @@ ad_makedist() fi # Parse the requested distribution - distribution=`cat autodist.dist | grep "dist:" | cut -d: -f2` - dist_version=`cat autodist.dist | grep "ver:" | cut -d: -f2` + distribution=`grep "dist:" < autodist.dist | cut -d: -f2` || exit 1 + dist_version=`grep "ver:" < autodist.dist | cut -d: -f2` || exit 1 + am_distdir=`grep "distdir:" < autodist.dist | cut -d: -f2` || exit 1 + params=`grep "params:" < autodist.dist | cut -d: -f2` || exit 1 ad_parse_distribution $distribution false + ad_log " Distribution: $distribution $dist_version" + ad_log " Destination directory: $am_distdir" + ad_log "" ad_process_distdefs - am_distdir="$package-$dist_version" if test x$opt_no_dist = xtrue; then ad_fatal "The '$distribution' distribution cannot be packaged" fi + # Run pre-dist-hooks + ad_run_dist_hooks "$pre_dist_hooks" "$params" + # Create distribution directory ad_debug "Creating distribution directory $am_distdir" $MAKE distdir || exit 1 @@ -793,22 +1027,34 @@ ad_makedist() ad_fatal "Distribution directory $am_distdir not created" fi - # Run pre-dist-hooks - ad_run_dist_hooks "$pre_dist_hooks" + # Run pre-process-dist-hooks + ad_run_dist_hooks "$pre_p_dist_hooks" "$params" # Run excludes - ad_dist_excludes "$excludes" + ad_dist_excludes "$excludes" true # Run includes - ad_dist_includes "$includes" + ad_dist_includes "$includes" false true # Include specific license file if specified if test "$license" != ""; then + ad_log "" + ad_log "License file in distribution:" + ad_log "-----------------------------" + ad_log " $license into $am_distdir/COPYING" + ad_log "" cp -p $license $am_distdir/COPYING || exit 1 fi - # Process noprocesses - ad_process_noprocess + # Remove dependencies + ad_remove_dependencies $am_distdir + + # Process noprocesses, first pass + ad_process_noprocess true + + ad_log "" + ad_log "Following files were not re-licensed:" + ad_log "-------------------------------------" # Process source files ad_debug "Process distribution source tree" @@ -818,8 +1064,13 @@ ad_makedist() ad_debug "Process distribution tree" ad_process_tree $am_distdir - # Run post-dist-hooks - ad_run_dist_hooks "$post_dist_hooks" + ad_log "" + + # Process noprocesses, second pass + ad_process_noprocess false + + # Run post-process_dist-hooks + ad_run_dist_hooks "$post_p_dist_hooks" "$params" # Make distribution sane ad_makedist_makesane @@ -831,25 +1082,33 @@ ad_makedist() # Compress ad_debug "Compressing distribution package" if test x$ad_gzip = xtrue; then + ad_debug "Compressing distribution package $am_distdir.tar.gz" gzip -9 -c $am_distdir.tar > $am_distdir.tar.gz || exit 1 fi if test x$ad_bzip2 = xtrue; then + ad_debug "Compressing distribution package $am_distdir.tar.bz2" bzip2 -9 -c $am_distdir.tar > $am_distdir.tar.bz2 || exit 1 fi if test x$ad_compress = xtrue; then + ad_debug "Compressing distribution package $am_distdir.tar.Z" compress -c $am_distdir.tar > $am_distdir.tar.Z || exit 1 fi if test x$ad_zip = xtrue; then rm -f $am_distdir.zip + ad_debug "Compressing distribution package $am_distdir.zip" zip -rq $am_distdir.zip $am_distdir || exit 1 fi rm -f $am_distdir.tar + # Run post-dist-hooks + ad_run_dist_hooks "$post_dist_hooks" "$params" + # Cleanup rm -rf $am_distdir - rm -f autodist.noprocess - ad_debug "ad_handle_options: $1" + ad_debug "Handling options: $1" for i in $1 do @@ -884,8 +1143,6 @@ ad_handle_options() continue fi done - - ad_debug "ad_clear_options" opt_template=false opt_no_dist=false opt_no_inherit=false - ad_debug "ad_parse_distribution: $1 $2" + local inhs + local defs + local undefs + local incs + local excs + local nops + local opts + local dname + local dpname + local bugr + local prh + local poh + local prdh + local podh + local prpdh + local popdh + + ad_debug "Starting parsing distribution: $1 $2" if test '!' -f $distdir/$1; then ad_fatal "Distribution '$1' is not declared" fi + # Get and enforce prereq version + prereq=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ + | grep "prereq " | cut -d' ' -f2- | sort | uniq` + if test '!' -z $prereq; then + if test "$ver" \< "$prereq"; then + ad_fatal "Autodist $prereq or newer is required for distribution $1" + fi + fi + # Get inherited - local inhs=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + inhs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "inherit " | cut -d' ' -f2 | sort | uniq` # Get distdefs - local defs=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + defs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "define " | cut -d' ' -f2 | sort | uniq` if test "$inhs" = "" && test "$defs" = ""; then @@ -931,23 +1212,23 @@ ad_parse_distribution() fi # Get undefined distdefs - local undefs=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + undefs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "undef " | cut -d' ' -f2 | sort | uniq` # Get includes - local incs=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + incs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "include " | sed 's/include / : /'` # Get excludes - local excs=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + excs=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "exclude " | cut -d' ' -f2- | sort | uniq` # Get noprocesses - local nops=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + nops=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "noprocess " | cut -d' ' -f2- | sort | uniq` # Get options - local opts=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + opts=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "option " | cut -d' ' -f2- | sort | uniq` # Check options @@ -959,13 +1240,13 @@ ad_parse_distribution() ad_fatal "Template distribution '$1' cannot be prepared or packaged" fi - ad_debug "inherits=$inhs" - ad_debug "distdefs=$defs" - ad_debug "includes=$incs" - ad_debug "excludes=$excs" - ad_debug "noprocess=$nops" - ad_debug "undistdefs=$undefs" - ad_debug "options=$opts" + ad_debug "inherits: $inhs" + ad_debug "distdefs: $defs" + ad_debug "includes: $incs" + ad_debug "excludes: $excs" + ad_debug "noprocess: $nops" + ad_debug "undistdefs: $undefs" + ad_debug "options: $opts" # Expand distdefs from inherited distributions for i in $inhs @@ -984,17 +1265,27 @@ ad_parse_distribution() done # Get license - license=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + license=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "license " | cut -d' ' -f2` - licenseh=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + licenseh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "license-header " | sed 's/license-header / : /'` - ad_debug "license=$license" - ad_debug "licenseh=$licenseh" + ad_debug "license: $license" + ad_debug "licenseh: $licenseh" if test x$2 = xfalse; then + # Take rest of the stuff from top distribution + + # We take precedence on defined and undefined distdefs. Remove + # undefined distdefs if we have defined them. + for d in $defs + do + ad_debug "defining undefined $d distdef" + undistdefs=`echo $undistdefs | sed s/$d//g` + done + # Get distribution name - local dname=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + dname=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "name " | cut -d' ' -f2-` if test "$dname"; then @@ -1002,7 +1293,7 @@ ad_parse_distribution() fi # Get distribution package name (optional) - local dpname=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + dpname=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "package " | cut -d' ' -f2` if test "$dpname"; then @@ -1012,35 +1303,41 @@ ad_parse_distribution() fi # Get Bug-report email address (optional) - local bugr=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + bugr=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "bug-report " | cut -d' ' -f2-` if test "$bugr"; then bug_report=$bugr fi - ad_debug "distribution=$distribution" - ad_debug "package=$package" - ad_debug "bug-report=$bug_report" + ad_debug "distribution: $distribution" + ad_debug "package: $package" + ad_debug "bug-report: $bug_report" # Get hooks (optional) - local prh=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + prh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "pre-hook " | cut -d' ' -f2-` - local poh=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ + poh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ | grep "post-hook " | cut -d' ' -f2-` - local prdh=`cat $distdir/$1 | sed 's/^[ ]*//' | grep -v "^#" \ - | grep "pre-dist-hook " | sed 's/^[ ]*//' | cut -d' ' -f2-` - local podh=`cat $distdir/$1 | grep -v "^#" \ - | grep "post-dist-hook " | sed 's/^[ ]*//' | cut -d' ' -f2-` + prdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ + | grep "pre-dist-hook " | cut -d' ' -f2-` + podh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ + | grep "post-dist-hook " | cut -d' ' -f2-` + prpdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ + | grep "pre-process-dist-hook " | cut -d' ' -f2-` + popdh=`sed 's/^[ ]*//' < $distdir/$1 | grep -v "^#" \ + | grep "post-process-dist-hook " | cut -d' ' -f2-` pre_hooks="$pre_hooks $prh" post_hooks="$post_hooks $poh" pre_dist_hooks="$pre_dist_hooks $prdh" post_dist_hooks="$post_dist_hooks $podh" - options="$options $opts" + pre_p_dist_hooks="$pre_p_dist_hooks $prpdh" + post_p_dist_hooks="$post_p_dist_hooks $popdh" + doptions="$doptions $opts" - ad_handle_options "$options" - ad_debug "options=$options" + ad_handle_options "$doptions" + ad_debug "options: $doptions" fi # Return to caller @@ -1051,7 +1348,7 @@ ad_parse_distribution() noprocess="$noprocess $nops" undistdefs="$undistdefs $undefs" - ad_debug "ad_process_distdefs" + ad_debug "Starting processing distdefs" + + ad_log "" + ad_log "Following distdefs were processed:" + ad_log "----------------------------------" # Remove all undefined distribution defines for i in $undistdefs do ad_debug "undefining $i distdef" - distdefs=`echo $distdefs | sed s/$i//` + distdefs=`echo $distdefs | sed s/$i//g` done - rm -f autodist.tmp.defs autodist.pre.hooks autodist.post.hooks - rm -f autodist.pre.dist.hooks autodist.post.dist.hooks + rm -f autodist.tmp.defs # Remove duplicate distdefs for i in $distdefs do echo $i >>autodist.tmp.defs done - distdefs=`cat autodist.tmp.defs | sort | uniq` + distdefs=`sort < autodist.tmp.defs | uniq` distdefs=`echo $distdefs` rm -f autodist.tmp.defs + # Log + for i in $distdefs + do + ad_log " $i" + done + ad_log "" + ad_debug "distdefs=$distdefs" - ad_debug " +# Arguments: ad_process_license_header # ad_process_license_header() { - ad_debug ">ad_process_license_header" + ad_debug "Starting license header processing" # Add : separator at the end lics=`echo "$licenseh" | sed 's/$/ : /'` @@ -1130,79 +1437,120 @@ ad_process_license_header() # Awk script to replace the license header fl=`sed q $src | sed 's/\\//\\\\\//g' > autodist.lsrc` || exit 1 ll=`sed -n '$p' $src | sed 's/\\//\\\\\//g' > autodist.ldst` || exit 1 - 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 + 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 rm -f autodist.lsrc autodist.ldst src= dst= done - ad_debug " +# +# If is true this excludes and if false this includes. # ad_process_noprocess() { - ad_debug ">ad_process_noprocess" - local np=false + ad_debug "Starting running noprocesses" - local n="sed " + set -f - for i in $noprocess - do - # Escape - ie=`echo $i | sed 's/\\//\\\\\//g'` || exit 1 + cur=`pwd` - n="$n -e 's/$am_distdir\\/$ie//'" - np=true - done + if test x$1 = xtrue; then + ad_log "" + ad_log "Following files and directories were not processed:" + ad_log "---------------------------------------------------" - rm -f autodist.noprocess - if test x$np = xtrue; then - echo $n > autodist.noprocess || exit 1 + f="$cur/autodist__noprocess" + rm -rf $f + mkdir -p -- $f || exit 1 + + # First, include them to new location with correct directory structure. + old_am_distdir="$am_distdir" + cd $am_distdir || exit 1 + am_distdir="$f" + nops=" $noprocess" + nops=`echo $nops | sed -e 's/ / : /g' -e 's/^/ : /'` || exit 1 + ad_dist_includes "$nops" false false + am_distdir="$old_am_distdir" + + # Then, remove from distdir (they are in temp dir now) + for i in $noprocess + do + ad_log " $i" + rm -rf $i + done + cd $cur || exit 1 + + ad_log "" + else + # Copy from the temp dir back to distdir + cd autodist__noprocess || exit 1 + old_am_distdir="$am_distdir" + am_distdir="$cur/$old_am_distdir" + nops=" $noprocess" + nops=`echo $nops | sed -e 's/ / : /g' -e 's/^/ : /'` || exit 1 + + ad_dist_includes "$nops" false false + + am_distdir="$old_am_distdir" + cd $cur || exit 1 + rm -rf autodist__noprocess fi - ad_debug " +# Arguments: ad_process_file # ad_process_file() { local found=false + local f + local defs + local ndefs # Process only regular files if test '!' -f $1; then return fi - ad_debug ">ad_process_file: $1 $2" + ad_debug "Starting processing file: $1 $2" - local f="autodist.tmp.script" + f="autodist.tmp.script" rm -f $f # If license header is provided, replace the license header in the file. - ad_process_license_header $f - - ad_debug "Getting #ifdef's and #ifndef's" + if test x$3 = xtrue; then + ad_process_license_header $f $1 + fi # Get defined distribution defines - local defs=`awk "/^#ifdef "$DP"_DIST_|^#else "$DP"_DIST_/ { print; }" \ + defs=`awk "/^#ifdef "$DP"_DIST_|^#else "$DP"_DIST_/ { print; }" \ $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq` # Get explicitly not-defined distribution defines - local ndefs=`awk "/^#ifndef "$DP"_DIST_|^#else !"$DP"_DIST_/ { print; }" \ + ndefs=`awk "/^#ifndef "$DP"_DIST_|^#else !"$DP"_DIST_/ { print; }" \ $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq` - ad_debug "defs=$defs" - ad_debug "ndefs=$ndefs" + ad_debug "defs in $1: $defs" + ad_debug "ndefs in $1: $ndefs" # Create the script to include and exclude stuff in the file according # to the distribution defines @@ -1224,9 +1572,9 @@ ad_process_file() # This also handles the #ifdef's #else (ie. #ifndef) branch. if test x$found = xfalse; then ad_debug "ifdef $d will be excluded (it is NOT defined)" - echo "/^#ifdef $d/,/^#else !$d|^#endif $d/ { next; }" >> $f + echo "/^#ifdef $d$/,/^#else !$d$|^#endif $d$/ { next; }" >> $f else - echo "/^#else !$d/,/^#endif $d/ { next; }" >> $f + echo "/^#else !$d$/,/^#endif $d$/ { next; }" >> $f fi done @@ -1247,9 +1595,9 @@ ad_process_file() # This also handles the #ifndef's #else (ie. #ifdef) branch. if test x$found = xtrue; then ad_debug "ifndef $d will be excluded (it IS defined)" - echo "/^#ifndef $d/,/^#else $d|^#endif $d/ { next; }" >> $f + echo "/^#ifndef $d$/,/^#else $d$|^#endif $d$/ { next; }" >> $f else - echo "/^#else $d/,/^#endif $d/ { next; }" >> $f + echo "/^#else $d$/,/^#endif $d$/ { next; }" >> $f fi done @@ -1268,42 +1616,52 @@ ad_process_file() rm -f $f - ad_debug " +# Arguments: ad_process_source_file # ad_process_source_file() { local found=false + local f + local defs + local ndefs # Process only regular files if test '!' -f $1; then return fi - ad_debug ">ad_process_source_file: $1 $2" + ad_debug "Starting processing source file: $1 $2" - local f="autodist.tmp.script" + f="autodist.tmp.script" rm -f $f # If license header is provided, replace the license header in the file. - ad_process_license_header $f - - ad_debug "Getting #ifdef's and #ifndef's" + if test x$3 = xtrue; then + ad_process_license_header $f $1 + fi # Get defined distribution defines - local defs=`awk '/^#ifdef SILC_DIST_|^#else \/\* SILC_DIST_/ { print; }' \ + defs=`awk '/^#ifdef SILC_DIST_|^#else \/\* SILC_DIST_/ { print; }' \ $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq` # Get explicitly not-defined distribution defines - local ndefs=`awk '/^#ifndef SILC_DIST_|^#else \/\* \!SILC_DIST_/ { print; }' \ + ndefs=`awk '/^#ifndef SILC_DIST_|^#else \/\* \!SILC_DIST_/ { print; }' \ $1 |cut -d'*' -f2 |cut -d' ' -f2 | cut -d'!' -f2 | sort | uniq` - ad_debug "defs=$defs ndefs=$ndefs" + ad_debug "defs in $1: $defs" + ad_debug "ndefs in $1: $ndefs" # Create the script to include and exclude stuff in the file according # to the distribution defines @@ -1325,9 +1683,9 @@ ad_process_source_file() # This also handles the #ifdef's #else (ie. #ifndef) branch. if test x$found = xfalse; then ad_debug "ifdef $d will be excluded (it is NOT defined)" - echo "/^#ifdef $d/,/^#else \/\* \!$d|^#endif \/\* $d/ { next; }" >> $f + echo "/^#ifdef $d$/,/^#else \/\* \!$d |^#endif \/\* $d / { next; }" >> $f else - echo "/^#else \/\* \!$d/,/^#endif \/\* $d/ { next; }" >> $f + echo "/^#else \/\* \!$d /,/^#endif \/\* $d / { next; }" >> $f fi done @@ -1348,9 +1706,9 @@ ad_process_source_file() # This also handles the #ifndef's #else (ie. #ifdef) branch. if test x$found = xtrue; then ad_debug "ifndef $d will be excluded (it IS defined)" - echo "/^#ifndef $d/,/^#else \/\* $d|^#endif \/\* $d/ { next; }" >> $f + echo "/^#ifndef $d$/,/^#else \/\* $d |^#endif \/\* $d / { next; }" >> $f else - echo "/^#else \/\* $d/,/^#endif \/\* $d/ { next; }" >> $f + echo "/^#else \/\* $d /,/^#endif \/\* $d / { next; }" >> $f fi done @@ -1369,60 +1727,132 @@ ad_process_source_file() rm -f $f - ad_debug " +# +ad_process() +{ + ad_debug "Starting process: $1 $2 $3" + + nolog=true + + if test '!' -f autodist.dist; then + ad_fatal "Autodist has not been run yet to prepare source tree" + fi + + # Parse distribution + distribution=`grep "dist:" < autodist.dist | cut -d: -f2` || exit 1 + dist_version=`grep "ver:" < autodist.dist | cut -d: -f2` || exit 1 + ad_parse_distribution $distribution false + ad_process_distdefs + + # Process file + case "$1" in + makefile) + if test -z $3; then + ad_fatal "File type $1 requires argument" + fi + ad_make_makefile_am $2 $3 + exit 0;; + + configure) + ad_make_configure_ac $2 + exit 0;; + + non-source) + if test -z $3; then + ad_fatal "File type $1 requires argument" + fi + ad_process_file $2 $3 false + exit 0;; + + source) + if test -z $3; then + ad_fatal "File type $1 requires argument" + fi + ad_process_source_file $2 $3 false + exit 0;; + + *) + ad_fatal "Unknown file type: $1"; + ;; + esac } # # Run hooks # -# Arguments: ad_run_hooks +# Arguments: ad_run_hooks # ad_run_hooks() { - ad_debug ">ad_run_hooks: $1" + ad_debug "Running hooks: $1" + + ad_log "" + ad_log "Hooks executed:" + ad_log "--------------" for i in $1 do if test '!' -f $i; then ad_fatal "Hook script $i does not exist" fi - sh $i $distribution $dist_version $package || exit 1 + ad_log " sh $i \"$distribution\" \"$dist_version\" \"$package\" \"$2\"" + sh $i "$distribution" "$dist_version" "$package" "$2" || exit 1 done + ad_log "" - ad_debug " +# Arguments: ad_run_dist_hooks # ad_run_dist_hooks() { - ad_debug ">ad_run_dist_hooks: $1" + ad_debug "Starting running distributions hooks: $1" + + ad_log "" + ad_log "Distribution hooks executed:" + ad_log "----------------------------" for i in $1 do if test '!' -f $i; then ad_fatal "Dist hook script $i does not exist" fi - sh $i $distribution $dist_version $package $am_distdir || exit 1 + + ad_log " sh $i \"$distribution\" \"$dist_version\" \"$package\" \"$am_distdir\" \"$2\"" + sh $i "$distribution" "$dist_version" "$package" "$am_distdir" "$2" || exit 1 done + ad_log "" - ad_debug "&2; - echo "${distdefs}"; + for i in $distdefs + do + echo "$i"; + done exit 0;; -i | --init) ad_initialize; exit 0;; + -p | --process) + shift; + if test $# -ge 2; then + ad_process $1 $2 $3 + else + echo "${usage}" 1>&2; + fi + exit 0;; + -m | --makedist) ad_makedist exit 0;; @@ -1506,7 +1952,7 @@ while test $# -gt 0; do echo "@PACKAGE@ (@PACKAGE_NAME@) $ver" 1>&2; echo "Written by Pekka Riikonen" 1>&2; echo 1>&2; - echo "Copyright (C) 2004 - 2005 SILC Project" 1>&2; + echo "Copyright (C) 2004 - 2007 SILC Project" 1>&2; echo "\ This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. " 1>&2; @@ -1526,6 +1972,13 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. " 1> esac done +# Open log file +ad_log_open "autodist.log" + +ad_log "Processing source tree for compilation and configuration" +ad_log "--------------------------------------------------------" +ad_log "" + # # Parse the requested distribution # @@ -1534,13 +1987,18 @@ if test $# != 0; then distfile=$distribution shift fi + ad_parse_distribution $distribution false -ad_process_distdefs if test $# != 0; then dist_version="${1}"; fi +ad_log " Distribution: $distribution $dist_version" +ad_log "" + +ad_process_distdefs + ad_debug "Preparing source tree for configuration and compilation..." ad_debug "Preparing $distribution distribution version $dist_version" @@ -1553,10 +2011,15 @@ else ad_fatal "DISTDEFS not defined in $distdir/autodist.conf" fi +# Get extra parameters from command line +if test $# != 0; then + shift +fi + # # Run pre-hooks # -ad_run_hooks "$pre_hooks" +ad_run_hooks "$pre_hooks" "$@" # # Generate the Makefile.am files from Makefile.ad files @@ -1568,6 +2031,11 @@ ad_make_makefile_ams # ad_make_configure_ac ./configure.ad +# +# Process all files with .ad suffix for distribution processing +# +ad_process_ads + # # Generate configure script # @@ -1578,23 +2046,21 @@ ad_make_configure # ad_make_makefile_ins -# -# Process all files with .ad suffix for distribution processing -# -ad_process_ads - # # Create autodist.dist # ad_debug "Creating autodist.dist" echo "dist:$distfile" > autodist.dist echo "ver:$dist_version" >> autodist.dist -echo "$package-$dist_version" >> autodist.dist +echo "distdir:$package-$dist_version" >> autodist.dist +echo "params:$@" >> autodist.dist # # Run post-hooks # -ad_run_hooks "$post_hooks" +ad_run_hooks "$post_hooks" "$@" +ad_log "Source tree processed successfully." ad_debug "Done, now run ./configure and make." + exit 0