114 lines
3.0 KiB
Bash
Executable File
114 lines
3.0 KiB
Bash
Executable File
#!/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
|