
#######################################
# 
# makedep 2.22
#
#######################################
#
# $TARGET - target
# $SRC    - sources
# $DEPFILE- Makefile for dependency
# $CPP	  - Y/y : C++ for yacc/lex
# $LEX_YACC_CPP - Y/y : Always C++ for yacc/lex
# $CLEANFILE - file waar te cleanen troep staat
# $HDRFILE - file met welke header files we te maken hebben
#
#######################################

echo "MakeDep 2.22"
echo

if [ ! -r Makefile ]
then
  echo "No Makefile to process"
  exit
fi

#######################################

echo "Making dependencies for target:"
echo "	$TARGET"
echo "With sources:"
for i in $SRC
do 
  echo "	$i"
done
#echo

#######################################

FILES=`find .`

NET=0
if [ "$LEX_YACC_CPP" = "" ]; then
  LEX_YACC_CPP="GENERIC"
elif [ "$LEX_YACC_CPP" = "y" ]; then
  LEX_YACC_CPP="Y"
fi

if [ "$CPP" = "y" ]; then
  CPP="Y"
fi

HEADERS=""
SRC1=""
for h in $SRC
do
  E=`echo $h | .simplemake/makeExtension`
  if [ "$E" = "h" -o "$E" = "hxx" -o "$E" = "hpp" ]; then
    HEADERS="$HEADERS $h"
  else
    SRC1="$SRC1 $h"
  fi
done
SRC=$SRC1
echo $HEADERS >>$HDRFILE

if [ "$LEX_YACC_CPP" = "GENERIC" ]; then
  for l in $SRC
  do
    E=`echo $l .simplemake/makeExtension`
    if [ "$E" = "cxx" -o "$E" = "cpp" -o "$E" = "cc" ]; then
      LEX_YACC_CPP="Y"
    fi
  done
fi
if [ "$LEX_YACC_CPP" = "GENERIC" ]; then
  LEX_YACC_CPP="N"
fi

OBJ=""
CXX=""
for i in $SRC 
do

  LH1=""
  if [ -r $i ]; then
    LH=`.simplemake/makeIncludes $FILES <$i`
  else
    LH=""
  fi
  echo "collecting headerfiles..."
  while [ "$LH1" != "$LH" ]
  do
    LOCALHEADERS=""
    for h in $LH
    do
      LOCALHEADERS="$LOCALHEADERS $h"
    done
    echo "  $LOCALHEADERS"
    LH1="$LH"
    echo >/tmp/makedep.$$.lh
    for h in $LH 
    do
      echo $h >>/tmp/makedep.$$.lh
    done
    for h in $LH
    do
      if [ -r $h ]; then
        .simplemake/makeIncludes $FILES <$h >>/tmp/makedep.$$.lh
      fi
    done
    LH=`cat /tmp/makedep.$$.lh | sort | uniq`
  done
  #echo "  $LH"
  echo >/tmp/makedep.$$.lh
  for h in $HEADERS $LH
  do
    echo $h >>/tmp/makedep.$$.lh
  done
  LH=`cat /tmp/makedep.$$.lh | sort | uniq`
  rm -f /tmp/makedep.$$.lh
  LOCALHEADERS=""
  for h in $LH
  do
    LOCALHEADERS="$LOCALHEADERS $h"
  done
  echo $LOCALHEADERS

  E=`echo $i | .simplemake/makeExtension`
  P=`echo $i | sed -e s/[.]$E$//`

  if [ "$E" = "lex" -o "$E" = "l" ]
  then
    O=$P.lex.o
    echo "	@rm -f $O" >>$CLEANFILE
  else
    if [ "$E" = "yacc" -o "$E" = "yac" -o "$E" = "y" ]
    then
      O=$P.yacc.o
      echo "	@rm -f $O" >>$CLEANFILE
    else
      if [ "$E" = "net" ]; then
        O="$P.net"
      else 
        if [ "$E" = "a" -o "$E" = "so" -o "$E" = "sl" ]; then
          O=$i
        else 
          O=$P.o
          echo "	@rm -f $O" >>$CLEANFILE
        fi
      fi
    fi
  fi

  OBJ="$OBJ $O"

  ALREADY_DONE=`grep \^$O Makefile`

  if [ ! "$ALREADY_DONE" ]
  then

    echo "" >>Makefile.dep

    if [ "$E" = "lex" -o "$E" = "l" ]
    then
      if [ "$CPP" = "Y" ]; then
        if [ "$LEX_YACC_CPP" = "Y" ]; then
          C=$P.lex.cxx
        else 
          C=$P.lex.c
        fi
      else
        C=$P.lex.c
      fi
      echo "	@rm -f $C" >>$CLEANFILE
      echo "$C: $i $LOCALHEADERS" >>Makefile.dep
      echo "	\$(LEX) $i;mv lex.yy.c $C" >>Makefile.dep
      echo "$O: $C $LOCALHEADERS" >>Makefile.dep
      if [ "$LEX_YACC_CPP" = "Y" ]; then
        echo "	\$(CXX) -c \$(INCLUDE) \$(CFLAGS) $C" >>Makefile.dep
      else 
        echo "	\$(CC) -c \$(INCLUDE) \$(CFLAGS) $C" >>Makefile.dep
      fi
    else 
      if [ "$E" = "yac" -o "$E" = "yacc" -o "$E" = "y" ]
      then
        if [ "$CPP" = "Y" ]; then
          if [ "$LEX_YACC_CPP" = "Y" ]; then
            C="$P.yacc.cxx"
          else
            C="$P.yacc.c"
          fi
        else 
          C="$P.yacc.c"
        fi
        H="$P.yacc.h"
	OUT="$P.yacc.out"
        echo "	@rm -f $C $H $OUT" >>$CLEANFILE
        echo "$C: $i $LOCALHEADERS" >>Makefile.dep
        echo "	\$(YACC) $i;mv y.tab.c $C; mv y.tab.h $H; \\" >>Makefile.dep
	echo "	if [ -r y.output ]; then mv y.output $OUT; fi" >>Makefile.dep
	echo "$O: $C $LOCALHEADERS" >>Makefile.dep
        if [ "$LEX_YACC_CPP" = "Y" ]; then
	  echo "	\$(CXX) -c \$(INCLUDE) \$(CFLAGS) $C" >>Makefile.dep
        else
	  echo "	\$(CC) -c \$(INCLUDE) \$(CFLAGS) $C" >>Makefile.dep
        fi
      else
        if [ "$E" = "c" ]
        then
          echo "$O: $i $LOCALHEADERS" >>Makefile.dep
          echo "	\$(CC) -c \$(INCLUDE) \$(CFLAGS) $i" >>Makefile.dep
        else
          if [ "$E" = "cxx" -o "$E" = "cpp" -o "$E" = "cc" ]
          then
            echo "$O: $i $LOCALHEADERS" >>Makefile.dep
            echo "	\$(CXX) -c \$(INCLUDE) \$(CFLAGS) $i" >>Makefile.dep
            CXX="1"
          else
            if [ "$E" = "h" -o "$E" = "hxx" -o "$E" = "hpp" ]
            then
              echo "#depends on $i" >>Makefile.dep
            else
              if [ "$E" = "net" ]; then
                 NET=1
              else 
                echo "Unknown file extension '$E', no dependency info generated"
              fi
            fi
          fi
        fi
      fi
    fi
  fi

done

echo "" >>Makefile.dep
echo "$TARGET: $OBJ" >>Makefile.dep

E=`echo $TARGET | .simplemake/makeExtension`
if [ ! "$E" ]
then
  if [ $NET = 1 ]; then
    echo "	\$(GENNET) $OBJ $TARGET" >>Makefile.dep
  else 
    if [ "$CXX" ]
    then 
      echo "	\$(CXX) -o $TARGET \$(LDFLAGS) $OBJ \$(LIBS)" >>Makefile.dep
    else
      echo "	\$(CC) -o $TARGET \$(LDFLAGS) $OBJ \$(LIBS)" >>Makefile.dep
    fi
  fi
else
  if [ "$E" = "a" ]
  then
    echo "	\$(AR) $TARGET $OBJ" >>Makefile.dep
  elif [ "$E" = "so" -o "$E" = "sl" ]; then
    echo "	\$(SL) $TARGET $OBJ \$(SHL_LIBS)" >>Makefile.dep
  else
    echo "Unknown target type '$E', can't make dependency"
  fi
fi

########################################
echo

mv Makefile.dep $DEPFILE

