# /*------------------------------------------------------------\
# |                                                             |
# | Tool   :                 Library VBL104                     |
# |                                                             |
# | File   :                    Makefile                        |
# |                                                             |
# | Author :                 Jacomme Ludovic                    |
# |                                                             |
# | Date   :                    07.04.95                        |
# |                                                             |
# \------------------------------------------------------------*/

GCC_WERROR =

include $(ALLIANCE_TOP)/etc/$(ALLIANCE_OS).mk
include $(ALLIANCE_TOP)/etc/libraries.mk
include local.mk

# /*------------------------------------------------------------\
# |                                                             |
# |                            Variables                        |
# |                                                             |
# \------------------------------------------------------------*/

LOCAL_CFLAGS = $(CFLAGS) -g -D$(ALLIANCE_OS) -DVBL_DEBUG

# /*------------------------------------------------------------\
# |                                                             |
# |                             Include                         |
# |                                                             |
# \------------------------------------------------------------*/

LOCAL_INCLUDE = -I$(LOCAL_TARGET_INC) -I$(ALLIANCE_INCLUDE)

# /*------------------------------------------------------------\
# |                                                             |
# |                             Library                         |
# |                                                             |
# \------------------------------------------------------------*/

LOCAL_LIB = -L$(LOCAL_TARGET_LIB) \
            -L$(ALLIANCE_LIB) \
             -lVbl104 \
             $(VBH_L) \
             $(MUT_L) \
             $(VEX_L) \
             $(AUT_L)

# /*------------------------------------------------------------\
# |                                                             |
# |                             Define                          |
# |                                                             |
# \------------------------------------------------------------*/

LOCAL_MBK_DEFINE = -DMUT_H='"$(MUT_H)"' \
                   -DAUT_H='"$(AUT_H)"' \
                   -DVEX_H='"$(VEX_H)"'

LOCAL_VBH_DEFINE = -DVBH_H='"$(VBH_H)"' \
                   -DVBL_H='"$(VBL_H)"'

LOCAL_DEFINE = $(LOCAL_MBK_DEFINE) $(LOCAL_VBH_DEFINE)

LOCAL_HEADER = $(LOCAL_INCLUDE) $(LOCAL_DEFINE)

LOCAL_VBL_LIB    = libVbl104.a
LOCAL_VBL_INC    = vbl104.h
LOCAL_VBL_TST    = vbltest

# /*------------------------------------------------------------\
# |                                                             |
# |                             Object                          |
# |                                                             |
# \------------------------------------------------------------*/

LOCAL_VBL_OBJ = vbl_bcompyac.o vbl_bcomplex.o \
                vbl_bspec.o vbl_util.o vbl_parse.o

LOCAL_TST_OBJ = main.o

LOCAL_OBJ = $(LOCAL_VBL_OBJ)

.c.o:
	$(CC) -c $(LOCAL_CFLAGS) $(LOCAL_HEADER) $<

# /*------------------------------------------------------------\
# |                                                             |
# |                         Library Vbl                         |
# |                                                             |
# \------------------------------------------------------------*/

all : distrib

distrib : $(LOCAL_TARGET_LIB)/$(LOCAL_VBL_LIB) \
          $(LOCAL_TARGET_INC)/$(LOCAL_VBL_INC)

force : $(LOCAL_TARGET_LIB)/$(LOCAL_VBL_LIB) \
        $(LOCAL_TARGET_INC)/$(LOCAL_VBL_INC) \
        $(LOCAL_TST_OBJ)
	$(CC) -o $(LOCAL_TARGET_BIN)/$(LOCAL_VBL_TST) $(LOCAL_TST_OBJ) $(LOCAL_LIB)

test : $(LOCAL_TARGET_LIB)/$(LOCAL_VBL_LIB) \
       $(LOCAL_TARGET_INC)/$(LOCAL_VBL_INC) \
       $(LOCAL_TARGET_BIN)/$(LOCAL_VBL_TST)

$(LOCAL_TARGET_LIB)/$(LOCAL_VBL_LIB) : $(LOCAL_OBJ)
	$(AR) $(ARFLAGS) $(LOCAL_TARGET_LIB)/$(LOCAL_VBL_LIB) $(LOCAL_VBL_OBJ)
	$(RANLIB) $(LOCAL_TARGET_LIB)/$(LOCAL_VBL_LIB)

$(LOCAL_TARGET_INC)/$(LOCAL_VBL_INC) : $(LOCAL_VBL_INC)
	$(CP) $(LOCAL_VBL_INC) $(LOCAL_TARGET_INC)/$(LOCAL_VBL_INC)

# /*------------------------------------------------------------\
# |                                                             |
# |                             Vbl                             |
# |                                                             |
# \------------------------------------------------------------*/


vbl_util.o      : vbl_util.c vbl_utype.h vbl_util.h
vbl_bcomplex.o  : vbl_bcomplex.c
vbl_bcompyac.o  : vbl_bcompyac.c

vbl_bcomplex.c : vbl_bcomp.lex vbl_bcompyac.c vbl_bedef.h vbl_blex.h
	$(LEX) vbl_bcomp.lex
	$(SED) -e 's/YY/VBL_Y_/g' -e 's/yy/vbl_y_/g' lex.yy.c > vbl_bcomplex.c
	$(RM) lex.yy.c

vbl_bcompyac.c : vbl_bcomp.yac vbl_utype.h vbl_byacc.h vbl_bedef.h
	$(YACC) $(YACCFLAGS) -d vbl_bcomp.yac
	$(SED) -e 's/YY/VBL_Y_/g' -e 's/yy/vbl_y_/g' y.tab.c > vbl_bcompyac.c
	$(RM) y.tab.c
	$(SED) -e 's/YY/VBL_Y_/g' -e 's/yy/vbl_y_/g' y.tab.h > vbl_bcompyac.h
	$(RM) y.tab.h

# /*------------------------------------------------------------\
# |                                                             |
# |                              Clean                          |
# |                                                             |
# \------------------------------------------------------------*/

realclean : clean
	$(RM) -f $(LOCAL_TARGET_LIB)/$(LOCAL_VBL_LIB) \
                 $(LOCAL_TARGET_INC)/$(LOCAL_VBL_INC) 

# /*------------------------------------------------------------\
# |                                                             |
# |                          Clean Object                       |
# |                                                             |
# \------------------------------------------------------------*/

clean :
	$(RM) -f $(LOCAL_OBJ) \
                vbl_bcompyac.c vbl_bcomplex.c vbl_bcompyac.h

# /*------------------------------------------------------------\
# |                                                             |
# |                            Test                             |
# |                                                             |
# \------------------------------------------------------------*/

$(LOCAL_TARGET_BIN)/$(LOCAL_VBL_TST) : $(LOCAL_TST_OBJ) \
     $(LOCAL_TARGET_LIB)/$(LOCAL_VBL_LIB)
	$(CC) -o $(LOCAL_TARGET_BIN)/$(LOCAL_VBL_TST) $(LOCAL_TST_OBJ) $(LOCAL_LIB)

