#! /bin/sh
# makemod: make makefile for a module except main
#
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"
#
# No ranlib for System V [sgi, cray, hpux] (see Makefiles)
#
# Fix for automount sites; replace pwd with ampwd fxn
#
ampwd () {
  pwd | sed -e 's;/tmp_mnt;;'
  }
#
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=`ampwd`
# 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;ampwd;cd $curdir`
sourcepath=`cd $3;ampwd;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)/'$module'.a('$filename.o') \' >> $libtempfile
      echo '$(LIB)/'$module'.a('$filename'.o)  : '$modsrc/$filename'.src' >> $rulestempfile
      if [ $relpath = "gamint/gamess" ]
      then
        echo '	$(GMS) '$modsrc/$filename' ' >> $rulestempfile
      else
        echo '	$(FLX) '$modsrc/$filename'.src' >> $rulestempfile
        echo '	$(FC2) '$filename'.f' >> $rulestempfile
      fi
      echo '	$(AR_COMMAND) $(LIB)/'$module'.a '$filename'.o' >> $rulestempfile
      echo '	$(REMOVE_F) '$filename'.f' >> $rulestempfile
      echo '	$(REMOVE_O) '$filename'.o' >> $rulestempfile
      echo "#" >> $rulestempfile
      echo "#" >> $deptempfile
      if [ $recurse = "true" ]
      then
          findinc $f $deptempfile $module'.a('$filename'.o)'
      else
          findinc -n $f $deptempfile $module'.a('$filename'.o)'
      fi
      echo "#" >> $deptempfile
      ;;
   f )
      echo '	$(LIB)/'$module'.a('$filename.o') \' >> $libtempfile
      echo '$(LIB)/'$module'.a('$filename'.o)  : '$modsrc/$filename'.f' >> $rulestempfile
      echo '	$(F77) -n '$modsrc/$filename'.f' >> $rulestempfile
      echo '	$(AR_COMMAND) $(LIB)/'$module'.a '$filename'.o' >> $rulestempfile
      echo '	rm '$filename'.o' >> $rulestempfile
      echo "#" >> $rulestempfile
      echo "#" >> $deptempfile
      if [ $recurse = "true" ]
      then
          findinc $f $deptempfile $module'.a('$filename'.o)'
      else
          findinc -n $f $deptempfile $module'.a('$filename'.o)'
      fi
      ;;
   c )
      echo '	$(LIB)/'$module'.a('$filename'.o) \' >> $libtempfile
      echo '$(LIB)/'$module'.a('$filename'.o)  : '$modsrc/$filename'.c' >> $rulestempfile
      echo '	$(CC) -c '$modsrc/$filename'.c' >> $rulestempfile
      echo '	$(AR_COMMAND) $(LIB)/'$module'.a '$filename'.o' >> $rulestempfile
      echo '	rm '$filename'.o' >> $rulestempfile
      echo "#" >> $rulestempfile
      if [ $recurse = "true" ]
      then
          findinc $f $deptempfile $module'.a('$filename'.o)'
      else
          findinc -n $f $deptempfile $module'.a('$filename'.o)'
      fi
      echo "#" >> $deptempfile
      ;;
   f2c )
      echo '	$(LIB)/'$module'.a('$filename'.o) \' >> $libtempfile
      echo '	$(LIB)/'$module'.a('$filename'c.o) \' >> $libtempfile
      echo '$(LIB)/'$module'.a('$filename'.o)  : '$modsrc/$filename'.f2c' >> $rulestempfile
      echo '$(LIB)/'$module'.a('$filename'c.o)  : '$modsrc/$filename'.f2c' >> $rulestempfile
      echo '	-ln -s '$modsrc/$filename'.f2c '$filename'.c'  >> $rulestempfile
      echo '	mkf2c -l30  '$modsrc/$filename'.f2c '$filename'.s' >> $rulestempfile
      echo '	$(CC) -c '$filename'.c' >> $rulestempfile
      echo '	$(AS) -o '$filename'c.o' $filename'.s' >> $rulestempfile
      echo '	rm '$filename'.s '$filename'.c' >> $rulestempfile
      echo '	$(AR_COMMAND) $(LIB)/'$module'.a '$filename'c.o '$filename'.o' >> $rulestempfile
      echo '	rm '$filename'c.o '$filename'.o' >> $rulestempfile
      echo "#" >> $rulestempfile
      if [ $recurse = "true" ]
      then
          findinc $f $deptempfile $module'.a('$filename'.o)'
      else
          findinc -n $f $deptempfile $module'.a('$filename'.o)'
      fi
      echo "#" >> $deptempfile
      ;;
   s )
      echo '	$(LIB)/'$module'.a('$filename.o') \' >> $libtempfile
      echo '$(LIB)/'$module'.a('$filename'.o)  : '$modsrc/$filename'.s' >> $rulestempfile
      echo '	$(AS) -o '$filename'.o '$modsrc/$filename'.s' \
               >> $rulestempfile
      echo '	$(AR_COMMAND) $(LIB)/'$module'.a '$filename'.o' >> $rulestempfile
      echo '	rm '$filename'.o' >> $rulestempfile
      echo "#" >> $rulestempfile
      ;;
   esac
done
#
# finish library part:
#remove trailing backslash
#
sed '$s@ \\$@@' $libtempfile >> $maketempfile
echo "#" >> $maketempfile
echo '$(LIB)/'$module'.a : $(OBJS_'$module')' >> $maketempfile
echo '	$(RANLIB) $(LIB)/'$module'.a' >> $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 [ `ampwd` != $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
