#!/bin/csh -f # # Make the dependencies for Makefiles (unix Makefile and/or VMS descrip.mms). # make_make [-u] [-v] [-f filename] [-d filename] files # -u : create unix Makefile (default) # -v : create vms descrip.mms # -d : vms filename is $filename (default: descrip.mms) # -f : unix filename is $filename (default: Makefile) # # Take the arguments, replace their suffices (e.g. .o, .obj) by .c, # and look for (local) include files. These are # then converted into dependency lines, and put at the BOTTOM of the # makefile, following a line consisting of "#START_DEPEND" - note that # all lines following this in the old Makefile are deleted. # # An argument following a -D specifies the directory where an include file # is to be found, e.g. -D ../inc.h # # An argument following a -O specifies an include file to omit from the # Makefile # set descrip=descrip.mms set makefile=Makefile # while ("$1" =~ -*) if ("$1" == "-d" || "$1" == "-f") then if ("$2" == "") then echo You need a filename with the $1 flag exit 1 endif if ("$1" == "-d") then set descrip=$2 else set makefile=$2 endif shift else if ($1 == -u) then set unix else if ($1 == -v) then set vms else echo Unknown flag $1 endif shift end if($?unix == 0 && $?vms == 0) then set unix endif # set dirs=() set files=() set omitted=() unset dir unset omit cp /dev/null make_deps_ # foreach fil ( $* ) if($fil == -D) then # next file is dir/include.h set dir continue endif if($fil == -O) then # next file is inc.h to be omitted set omit continue endif if($?dir) then # this file is dir/include.h unset dir set dirs = ($dirs $fil:h) set files = ($files $fil:t) continue endif if($?omit) then # this file is to be omitted unset omit set omitted = ($omitted -e /$fil/d) echo "Omitting $fil from Makefile[s]" continue endif # # Regular file to have its include files found # grep '^#[ ]*include[ ]*"' $fil:r.c /dev/null | \ sort | \ sed -e '1,$s/\.c/._OBJ_/' \ -e '1,$s/://' \ -e '1,$s/#[ ]*include[ ]*[^"]/ : /' \ -e '1,$s/"//' \ -e '1,$s/".*//' \ >> make_deps_ end # # Delete all mention of -O files # if($#omitted > 0) then sed $omitted make_deps_ > make_deps2_ rm make_deps_ else mv make_deps_ make_deps2_ endif # # Now for each -D file, change the dependency to the correct directory # set i=$#files while($i) sed -e "s#$files[$i]#$dirs[$i]/$files[$i]#g" make_deps2_ > \ make_deps_ mv make_deps_ make_deps2_ @ i-- end # # Convert dependencies to proper form, and append to makefiles # if($?unix) then sed -e '/^#START_DEPEND/,$d' $makefile > make_temp_ echo "#START_DEPEND" >> make_temp_ mv make_temp_ $makefile sed -e "s/_OBJ_/o/" make_deps2_ >> $makefile endif if($?vms) then sed -e '/^#START_DEPEND/,$d' $descrip > make_temp_ echo "#START_DEPEND" >> make_temp_ mv make_temp_ $descrip sed -e "s#\.\./#\[-\]#" -e "s/_OBJ_/obj/" make_deps2_ >> $descrip endif # foreach f ( make_deps_ make_deps2_ ) if(-e $f) rm $f end