summaryrefslogtreecommitdiff
path: root/autoconf/scripts/makemake.sh
diff options
context:
space:
mode:
Diffstat (limited to 'autoconf/scripts/makemake.sh')
-rwxr-xr-xautoconf/scripts/makemake.sh113
1 files changed, 113 insertions, 0 deletions
diff --git a/autoconf/scripts/makemake.sh b/autoconf/scripts/makemake.sh
new file mode 100755
index 0000000..3eca6c6
--- /dev/null
+++ b/autoconf/scripts/makemake.sh
@@ -0,0 +1,113 @@
+#!/bin/sh
+#
+# Generate Makefile dependencies inclusion and module target file "depend.mk~"
+# by scanning the directory "src" for files ending in ".c" and ".d", and for
+# subdirectories not starting with "_".
+#
+# Modules live inside subdirectories called [^_]* - i.e. a directory "foo" will
+# have a rule created which links all code inside it to "foo.o".
+#
+# The directory "src/include" is never scanned; neither are CVS or SVN
+# directories.
+#
+
+outlist=$1
+outlink=$2
+
+FIND=find
+GREP=grep
+which gfind 2>/dev/null | grep /gfind >/dev/null && FIND=gfind
+which ggrep 2>/dev/null | grep /ggrep >/dev/null && GREP=ggrep
+
+echo '# Automatically generated file listings' > $outlist
+echo '#' >> $outlist
+echo "# Creation time: `date`" >> $outlist
+echo >> $outlist
+
+echo '# Automatically generated module linking rules' > $outlink
+echo '#' >> $outlink
+echo "# Creation time: `date`" >> $outlink
+echo >> $outlink
+
+echo -n "Scanning for source files: "
+
+allsrc=`$FIND src -type f -name "*.c" -print`
+allobj=`echo $allsrc | tr ' ' '\n' | sed 's/\.c$/.o/'`
+alldep=`echo $allsrc | tr ' ' '\n' | sed 's/\.c$/.d/'`
+
+echo `echo $allsrc | wc -w | tr -d ' '` found
+
+echo -n "Scanning for modules: "
+
+modules=`$FIND src -type d -print \
+ | $GREP -v '^src$' \
+ | $GREP -v '/_' \
+ | $GREP -v '^src/include' \
+ | $GREP -v 'CVS' \
+ | $GREP -v '.svn' \
+ | while read DIR; do \
+ CONTENT=\$(/bin/ls -d \$DIR/* \
+ | $GREP -v '.po$' \
+ | $GREP -v '.gmo$' \
+ | $GREP -v '.mo$' \
+ | $GREP -v '.h$' \
+ | sed -n '$p'); \
+ [ -n "\$CONTENT" ] || continue; \
+ echo \$DIR; \
+ done
+ `
+
+echo up to `echo $modules | wc -w | tr -d ' '` found
+
+echo "Writing module linking rules"
+
+echo -n [
+for i in $modules; do echo -n ' '; done
+echo -n -e ']\r['
+
+for i in $modules; do
+ echo -n '.'
+ allobj="$allobj $i.o"
+ deps=""
+ for j in $i/*.c; do
+ [ -f $j ] || continue
+ newobj=`echo $j | sed -e 's@\.c$@.o@'`
+ deps="$deps $newobj"
+ done
+ for j in $i/*; do
+ [ -d "$j" ] || continue
+ [ `basename $j` = "CVS" ] && continue
+ [ `basename $j` = ".svn" ] && continue
+ CONTENT=`/bin/ls -d $j/* \
+ | $GREP -v '.po$' \
+ | $GREP -v '.gmo$' \
+ | $GREP -v '.mo$' \
+ | $GREP -v '.h$' \
+ | sed -n '$p'`
+ [ -n "$CONTENT" ] || continue
+ deps="$deps $j.o"
+ done
+ [ -n "$deps" ] || continue
+ echo "$i.o: $deps" >> $outlink
+ echo ' $(LD) $(LDFLAGS) -o $@' "$deps" >> $outlink
+ echo >> $outlink
+done
+
+echo ']'
+
+echo "Listing source, object and dependency files"
+
+echo -n "allsrc = " >> $outlist
+echo $allsrc | sed 's,src/nls/cat-id-tbl.c,,' | sed -e 's/ / \\!/g'\
+| tr '!' '\n' >> $outlist
+echo >> $outlist
+echo -n "allobj = " >> $outlist
+echo $allobj | sed -e 's/ / \\!/g' | tr '!' '\n' >> $outlist
+echo >> $outlist
+echo -n "alldep = " >> $outlist
+echo $alldep | sed -e 's/ / \\!/g' | tr '!' '\n' >> $outlist
+
+echo >> $outlist
+echo >> $outlink
+
+# EOF