#! /bin/sh
# mainmake : make makefile for main module
#
if [ $# -lt 4 ]
then
  echo usage: makemod [-v] [-n] module_name actual_path sourcetree_path
  echo "                         makefile_name [definitionfile_name]"
  exit 2
fi
#
verbose="false"
recurse="true"
#
for i
do
  case $i in
  -v ) verbose="true"
       shift
       ;;
  -n ) recurse="false"
       shift
       ;;
  esac
done
if [ $# -lt 4 ]
then
  echo usage: makemod [-v] [-n] module_name actual_path sourcetree_path
  echo "                         makefile_name [definitionfile_name]"
  exit 2
fi
curdir=`pwd`
# make some tempory files
libtempfile=lib$$.tmp
rulestempfile=rules$$.tmp
deptempfile=dep$$.tmp
maketempfile=make$$.tmp
#set some variables
module=$1
makefilename=$4
#see if there is a definition file to insert
if [ $# -eq 5 ]
then
   if [ -r $5 ]
   then
      deffile=$5
      usedef="true"
      if [ $verbose = true ]
      then
         echo "Macro definition file: "$deffile
      fi
   else
      echo "Could not find or open Macro definition file: "$5
      exit 2
   fi
else
   usedef="false"
   deffile=""
fi
# now we can set trap
trap "rm -f $maketempfile $rulestempfile $deptempfile $libtempfile; cd $curdir;exit 2" 0 1 2 3 4 15
# now set some path related variables
actpath=`cd $2;pwd;cd $curdir`
sourcepath=`cd $3;pwd;cd $curdir`
# check to see that actpath is a child of source tree path
if [ `echo $actpath | grep '^'$sourcepath` = "" ]
then
   echo "actual path "$actpath" is not a sub-directory of source tree path "\
$sourcepath
   exit 2
else
   if [ $actpath = $sourcepath ]
   then
      relpath='.'
   else
      relpath=`echo $actpath|sed 's@^'$sourcepath'/@@'`
   fi
fi
cd $actpath
#define name of source directory
modsrc=`echo '$(SRC)/'$relpath`
rm -f $libtempfile $rulestempfile $deptempfile $maketempfile
if [ $verbose = true ]
then
   echo "making lib tempory file: "$libtempfile
   echo "making rules tempory file: "$rulestempfile
   echo "making dependency tempory file: "$deptempfile
   echo "making makefile tempory file: "$maketempfile
fi
echo "# "$module" makefile" > $maketempfile
# if macro definition file has been specified insert it into makefile
if [ $usedef = "true" ]
then
   cat $deffile >> $maketempfile
   echo "#" >> $maketempfile
fi
echo "# "$module" library rules" > $libtempfile
echo 'OBJS_'$module'= \' >> $libtempfile
echo "# "$module" source file rules" > $rulestempfile
echo "# "$module" dependency file" > $deptempfile
for f in `/bin/ls *.f *.c *.src`
do
   filename=`echo $f | sed 's/\..*//' `
   ext=`echo $f | sed 's/.*\.\([^.]*\)$/\1/'`
   if [ $verbose = true ]
   then
      echo "processing file: "$filename "with extension: "$ext
   fi
   case $ext in
   src )
      echo '	$(LIB)/'$filename'.o \' >> $libtempfile
      echo '$(LIB)/'$filename'.o : '$modsrc/$filename'.src' >> $rulestempfile
      echo '	$(FLX) '$modsrc/$filename'.src' >> $rulestempfile
      echo '	$(FC2) '$filename'.f' >> $rulestempfile
      echo '	mv '$filename'.o $(LIB)' >> $rulestempfile
      echo '	$(REMOVE_F) '$filename'.f' >> $rulestempfile
      echo "#" >> $rulestempfile
      echo "#" >> $deptempfile
      if [ $recurse = "true" ]
      then
          findinc $f $deptempfile $filename'.o'
      else
          findinc -n $f $deptempfile $filename'.o'
      fi
      echo "#" >> $deptempfile
      ;;
   f )
      echo '	$(LIB)/'$module'.a('$filename.o') \' >> $libtempfile
      echo '$(LIB)/'$filename'.o : '$modsrc/$filename'.f' >> $rulestempfile
      echo '	$(F77) -n '$modsrc/$filename'.f' >> $rulestempfile
      echo '	mv '$filename'.o $(LIB)' >> $rulestempfile
      echo "#" >> $rulestempfile
      echo "#" >> $deptempfile
      if [ $recurse = "true" ]
      then
          findinc $f $deptempfile $filename'.o'
      else
          findinc -n $f $deptempfile $filename'.o'
      fi
      ;;
   c )
      echo '	$(LIB)/'$module'.a('$filename'.o) \' >> $libtempfile
      echo '$(LIB)/'$filename'.o : '$modsrc/$filename'.c' >> $rulestempfile
      echo '	$(CC) -c '$modsrc/$filename'.c' >> $rulestempfile
      echo '	mv '$filename'.o $(LIB)' >> $rulestempfile
      echo "#" >> $rulestempfile
      if [ $recurse = "true" ]
      then
          findinc $f $deptempfile $filename'.o'
      else
          findinc -n $f $deptempfile $filename'.o'
      fi
      echo "#" >> $deptempfile
      ;;
   esac
done
#
# finish library part:
#remove trailing backslash
#
sed '$s@ \\$@@' $libtempfile >> $maketempfile
echo "#" >> $maketempfile
echo '$(LIB)/stamp : $(OBJS_'$module')' >> $maketempfile
echo '	touch $(LIB)/stamp' >> $maketempfile
echo '	@echo '$module' COMPLETED' >> $maketempfile
#
# now source rules part
#
echo "#" >> $maketempfile
cat $rulestempfile >> $maketempfile
echo "#" >> $maketempfile
#
#finish dependency files.
#  first sed command replaces $environmentvar with $(env...) for
#  makefile.
#  the second command inserts path to source file using macro
#sed -e 's@\$\([a-z0-9][a-z0-9]*\)/@\$(\1)/@' \
#    -e 's@^[^#]@\'$modsrc'/&@' $deptempfile >> $maketempfile
sed -e 's@\$\([a-z0-9][a-z0-9]*\)/@\$(\1)/@' \
    -e 's@^[^#]@\$(LIB)/&@' $deptempfile >> $maketempfile
#echo "#" >> $maketempfile
if [ `pwd` != $curdir ]
then
   mv $maketempfile $curdir
fi
if [ $verbose = true ]
then
   echo making $makefilename
fi
# now clean up
if [ $verbose = true ]
then
   echo "cleaning up"
fi
rm -f $rulestempfile $deptempfile $libtempfile
cd $curdir
mv $maketempfile $makefilename
if [ $verbose = true ]
then
   echo "done"
fi
