Added AD_ENABLE_DEPENDENCIES to support Autodist dependencies in
[autodist.git] / apps / autodist / autodist.in
index f45ac7ccb337fc19d1e715f7b632f83d6416e5b9..c18051dd3a6c7eb39aa038cea7e55dc368a3dd57 100755 (executable)
@@ -129,6 +129,7 @@ licenseh=
 
 # Whether to output ad_debug information
 debug=false
+nolog=false
 
 # Autodist version
 ver=@VERSION@
@@ -210,7 +211,9 @@ EOF
 #
 ad_log()
 {
-  echo "$1" >&5
+  if test x$nolog = xfalse; then
+    echo "$1" >&5
+  fi
 }
 
 #
@@ -405,8 +408,8 @@ EOF
 
   ad_debug "creating configure.ac"
   if test -f configure.ad.cfs; then
-    sed '/AD_INCLUDE_CONFIGURE/ r configure.ad.cfs' $1 > $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
@@ -415,15 +418,18 @@ EOF
   # Process AD_INIT
   sed -e "/AD_INIT/s//AC_INIT([$distribution], [$dist_version], [$bug_report], [$package])/" $fname > $fname.tmp
 
+  # Remove AD_ENABLE_DEPENDENCIES
+  sed -e "/^AD_ENABLE_DEPENDENCIES/d" $fname.tmp > $fname
+
   # Process for distribution
-  rm -f $fname
-  ad_process_file $fname.tmp $fname false
+  rm -f $fname.tmp
+  ad_process_file $fname $fname.tmp false
 
   # Remove any trailing backslashes
-  if test -f "$fname"; then
-    sed -e :a -e '/\\$/N; s/[  ]*\\\n//; ta' < $fname > 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
 
@@ -473,35 +479,66 @@ ad_make_makefile_ams()
   do
     ad_log "  $ff"
     fname=`echo $ff | sed s/\.ad//`
+    ad_make_makefile_am $ff $fname.am
+  done
+  ad_log ""
+
+  ad_debug "Ending creating Makefile.am files"
+}
 
-    # Header for the Makefile.am
-  cat > $fname.am <<EOF
+#
+# Creates Makefile.am file from the Makefile.ad file.
+#
+# Arguments: ad_make_makefile_am <src> <dst>
+#
+ad_make_makefile_am()
+{
+  local am_deps=false
+  local f=$1
+  local fname=$2
+
+  # Enable dependencies if requested
+  dc=`sed 's/^[        ]*//' < configure.ad | grep -v "^#" \
+    | grep "AD_ENABLE_DEPENDENCIES"`
+  if test "$dc" = "AD_ENABLE_DEPENDENCIES"; then
+    am_deps=true
+  fi
+
+  # Header for the Makefile.am
+  cat > $fname <<EOF
 # Automatically generated by Autodist $ver from Makefile.ad.  Do not edit.
-# To make changes edit the $ff file in the source tree.
+# To make changes edit the $f file in the source tree.
 
-# Source: $ff
+# Source: $f
 # Generated: `date` by `whoami`
 # Distribution: $distribution
 # License: $license
 
 EOF
 
-    # Run the distribution processing for this Makefile.ad
-    ad_debug "Processing $ff to be $fname.am"
-    ad_process_file $ff $fname.tmp false
+  # Run the distribution processing for this Makefile.ad
+  ad_debug "Processing $f to be $fname"
+  ad_process_file $f $fname.tmp false
 
-    # Remove any trailing backslashes
-    if test -f "$fname.tmp"; then
-      sed -e :a -e '/\\$/N; s/[        ]*\\\n//; ta' < $fname.tmp >> $fname.am
-    else
-      cat $ff >> $fname.am
-    fi
+  # Remove any trailing backslashes
+  if test -f "$fname.tmp"; then
+    sed -e :a -e '/\\$/N; s/[  ]*\\\n//; ta' < $fname.tmp >> $fname
+  else
+    cat $f >> $fname
+  fi
 
-    rm -f $fname.tmp
-  done
-  ad_log ""
+  # Enable dependencies if requested
+  if test x$am_deps = xtrue; then
+    cat >> $fname <<EOF
 
-  ad_debug "Ending creating Makefile.am files"
+# S_AD_ENABLE_DEPENDENCIES
+\$(srcdir)/Makefile.am: Makefile.ad
+       cd \$(top_srcdir) && autodist -p \$(subdir)/Makefile.ad \$(subdir)/Makefile.am && cd \$(subdir)
+# E_AD_ENABLE_DEPENDENCIES
+EOF
+  fi
+
+  rm -f $fname.tmp
 }
 
 #
@@ -861,6 +898,23 @@ ad_process_source_tree()
   ad_debug "Ending processing source files: $1"
 }
 
+#
+# Removes Autodist dependencies, as they cannot be delivered to distribution.
+#
+# Arguments: ad_remove_dependencies <distdir>
+#
+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
+}
+
 #
 # Makes distribution sane, ala modtimes.  Since we modify the distribution
 # we need to make it sane after that.
@@ -977,6 +1031,9 @@ ad_makedist()
     cp -p $license $am_distdir/COPYING || exit 1
   fi
 
+  # Remove dependencies
+  ad_remove_dependencies $am_distdir
+
   # Process noprocesses, first pass
   ad_process_noprocess true
 
@@ -1460,8 +1517,6 @@ ad_process_file()
     ad_process_license_header $f $1
   fi
 
-  ad_debug "Getting #ifdef's and #ifndef's"
-
   # Get defined distribution defines
   defs=`awk "/^#ifdef "$DP"_DIST_|^#else "$DP"_DIST_/ { print; }" \
     $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
@@ -1573,8 +1628,6 @@ ad_process_source_file()
     ad_process_license_header $f $1
   fi
 
-  ad_debug "Getting #ifdef's and #ifndef's"
-
   # Get defined distribution defines
   defs=`awk '/^#ifdef SILC_DIST_|^#else \/\* SILC_DIST_/ { print; }' \
     $1 |cut -d'*' -f2 |cut -d' ' -f2 | sort | uniq`
@@ -1659,6 +1712,32 @@ ad_process_source_file()
   ad_debug "Ending processing source file: $1 $2"
 }
 
+#
+# Processes a non-source file.  This is the -p, --process option.
+#
+# Arguments: ad_process <src> <dst>
+#
+ad_process()
+{
+  ad_debug "Starting process: $1 $2"
+
+  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
+  ad_parse_distribution $distribution false
+  ad_process_distdefs
+
+  # Process file
+  ad_make_makefile_am $1 $2
+
+  ad_debug "Ending process: $1 $2"
+}
+
 #
 # Run hooks
 #
@@ -1732,6 +1811,8 @@ Operation modes:
   -s, --distdefs [<dist>]   print distribution defines of <dist>, then exit
   -i, --init                initialize Autodist environment, create default
                             distribution directory and distribution, then exit
+  -p, --process <src> <dst> process file <src> into <dst> for distribution,
+                            only non-source files can be processed with -p
   -m, --makedist            create and package distribution
       --gzip                create package compressed with gzip (default)
       --bzip2               create also package compressed with bzip2
@@ -1774,6 +1855,15 @@ while test $# -gt 0; do
     ad_initialize;
     exit 0;;
 
+  -p | --process)
+    shift;
+    if test $# -eq 2; then
+      ad_process $1 $2
+    else
+      echo "${usage}" 1>&2;
+    fi
+    exit 0;;
+
   -m | --makedist)
     ad_makedist
     exit 0;;