# *************************************************************
#	d2ada: Lambda-delta to Ada, code generation
# *************************************************************
#***********************************
# (C) Copyright 1993; dit/upm
#  Distributed under the conditions stated in the
#  TOPO General Public License (see file LICENSE)
#***********************************
# $Id: makefile,v 3.14 1995/01/11 12:07:16 lotos Exp $
#***********************************

TOOL=	d2ada
TRGT=	$(TRG_D2ADA) $(TRG_D2ADA_B)
INST=	inst-d2ada inst-d2ada_b inst-kaos inst-split

#ADACPL=	NONE
#ADARTS=	sequence parallel

INCDIRS= -I$(EPSINC) -I$(TOPOINC)
LIBDIRS= -L$(EPSLIB) -L$(TOPOLIB)
CFLAGS= $(CF_DBX) $(INCDIRS)
CLIBS= -ldtok -lalga

DESC=	$(DSC_ADALNG)	$(DSC_D2ADA) $(DSC_D2ADA_B)
HDRS=	$(HDR_ADALNG)	$(HDR_D2ADA) $(HDR_D2ADA_B)
CODE=			$(COD_D2ADA) $(COD_D2ADA_B) $(COD_KAOS)
OBJS=			$(OBJ_D2ADA) $(OBJ_D2ADA_B)

DSC_ADALNG=	adalng.desc
HDR_ADALNG=	adalng.hh

DSC_D2ADA=	d2ada.desc
HDR_D2ADA=	d2ada.hh
COD_D2ADA=	d2ada.c
OBJ_D2ADA=	d2ada.o
TRG_D2ADA=	d2ada

DSC_D2ADA_B=	d2ada_b.desc
HDR_D2ADA_B=	d2ada_b.hh
COD_D2ADA_B=	d2ada_b.c
OBJ_D2ADA_B=	d2ada_b.o
TRG_D2ADA_B=	d2ada_b

COD_KAOS=	kaos.a kaos_b.a sequence_s.a parallel_s.a

all:	d2ada d2ada_b

d2ada:	$(OBJ_D2ADA)
	$(CC) $(CFLAGS) $(LIBDIRS) -o $@ $(OBJ_D2ADA) $(CLIBS)

D2ADA_HH=	$(TOPOINC)/dtok.hh $(HDR_ADALNG) d2ada.hh

d2ada.o:	$(D2ADA_HH)

d2ada_b:	$(OBJ_D2ADA_B)
	$(CC) $(CFLAGS) $(LIBDIRS) -o $@ $(OBJ_D2ADA_B) $(CLIBS)

D2ADA_B_HH=	$(TOPOINC)/dtok.hh $(HDR_ADALNG) d2ada_b.hh

d2ada_b.o:	$(D2ADA_B_HH)

install:	$(INST)
	touch $@

inst-d2ada:	d2ada
	cp d2ada $(TOPOBIN)
	chmod a+x $(TOPOBIN)/d2ada
	touch $@

inst-d2ada_b:	d2ada_b
	cp d2ada_b $(TOPOBIN)
	chmod a+x $(TOPOBIN)/d2ada_b
	touch $@

inst-kaos::	$(COD_KAOS)
	if test "$(ADACPL)" = ""; then exit 1; fi
	if test "$(ADARTS)" = ""; then exit 1; fi
	for cpl in $(ADACPL); do	\
	  case "$$cpl" in		\
	    "")				\
	      exit 1;;			\
	    *)				\
	      ;;			\
	  esac;				\
	done
	for rts in $(ADARTS); do	\
	  case "$$rts" in		\
	    sequence|parallel)		\
	      ;;			\
	    *)				\
	      exit 1;;			\
	  esac;				\
	done

inst-kaos::	$(COD_KAOS)
	if test ! -d $(TOPOLIB)/kaos; then			\
	  (set -x;						\
	   mkdir $(TOPOLIB)/kaos;				\
	   chmod a+xr $(TOPOLIB)/kaos;				\
	  );							\
	fi
	for rts in $(ADARTS); do				\
	  if test ! -d $(TOPOLIB)/kaos/$$rts; then		\
	    (set -x;						\
	     mkdir $(TOPOLIB)/kaos/$$rts;			\
	     chmod a+xr $(TOPOLIB)/kaos/$$rts;			\
	    );							\
	  fi;							\
	  for src in kaos.a kaos_b.a $${rts}_s.a kaos.make; do	\
	    (set -x;						\
	     cp $$src $(TOPOLIB)/kaos/$$rts;			\
	     chmod a+r $(TOPOLIB)/kaos/$$rts/$$src;		\
	    );							\
	  done;							\
	done

inst-kaos::	$(COD_KAOS)
	for cpl in $(ADACPL); do				\
	  if test "$$cpl" = "NONE"; then continue; fi;		\
	  for rts in $(ADARTS); do				\
	    param="ADARTS=$$rts ADACPL=$$cpl";			\
	    (set -x;						\
	     cd $(TOPOLIB)/kaos/$$rts;				\
	     $(MAKE) $(MFLAGS) -f kaos.make clean $$param;	\
	     $(MAKE) $(MFLAGS) -f kaos.make make $$param;	\
	     $(MAKE) $(MFLAGS) -f kaos.make freeze $$param;	\
	    );							\
	    if test $$HOSTTYPE = 'sun'; then			\
	      (set -x;						\
	       chmod -R a+Xr $(TOPOLIB)/kaos/$$rts;		\
	      );						\
	    else						\
	      (set -x;						\
	       chmod a+r $(TOPOLIB)/kaos/$$rts;			\
	      );						\
	    fi;							\
	  done;							\
	done
	@for cpl in $(ADACPL); do				\
	   if test "$(ADACPL)" != "NONE"; then exit 0; fi;	\
	 done;							\
	 echo "=> no Ada compiler available!!!" 1>&2;		\
	 for rts in $(ADARTS); do				\
	   echo -n "=> $$rts: " 1>&2;				\
	   echo "sources are at $(TOPOLIB)/kaos/$$rts" 1>&2;	\
	 done;							\
	 echo -n "=> they must be compiled manually" 1>&2;	\
	 echo " (see kaos.make)" 1>&2

inst-kaos::	$(COD_KAOS)
	touch $@

inst-split:	split.awk
	cp split.awk $(TOPOLIB)
	chmod a+r $(TOPOLIB)/split.awk
	touch $@

clean::
	-rm -f $(TRGT)
	-rm -f $(OBJS)
	-rm -f $(INST)
	-rm -f *~ core

#------------------------------------------------------------------
