# makefile for the entire GenView application
# Author : Frederic Petrot : petrot@masi.ibp.fr

include $(TOP)/etc/$(MACHINE).mk
ALC_INC          = -I$(ALLIANCE_INCLUDE) \
                   -DMGN_H='"mgn319.h"' \
                   -DMLU_H='"mlu411.h"' \
                   -DMPU_H='"mpu402.h"' \
                   -DMLO_H='"mlo404.h"' \
                   -DMPH_H='"mph402.h"' \
                   -DMUT_H='"mut315.h"'
ALC_LIB          = -L$(ALLIANCE_LIB) \
                   -lMgn319 \
                   -lMlu411 \
                   -lMpu402 \
                   -lMcp401 \
                   -lMap402 \
                   -lMmg401 \
                   -lMcl408 \
                   -lMal404 \
                   -lMvl406 \
                   -lMel406 \
                   -lMsl608 \
                   -lMhl402 \
                   -lMlo404 \
                   -lMph402 \
                   -lMut315

LOCAL_CFLAGS     = -g -D$(MACHINE) \
                   -fwritable-strings \
                   -I$(X11_INCLUDE) \
                   -DGCC_PATH='"$(ALLIANCE_BIN)"'\
                   -DALC=$(ALLIANCE_VERSION)\
                   -DGENVIEW='"3.2"' \
                   $(ALC_INC)

#libraries to link with
LIB = -L$(X11_LIB) -lX11 $(ALC_LIB)

# override default options for compiling with LOCAL_CFLAGS too
.c.o:
	$(CC) -c $(CFLAGS) $(LOCAL_CFLAGS) $<

# graphic cache files
OBJG = g_cache.o g_user.o g_string.o g_move.o g_peek.o g_inspect.o g_rpeek.o

# graphic driver and `window manager'
OBJV = genview.o v_drv.o v_colors.o v_menu.o i_win.o v_scroll.o v_put.o\
       v_peek.o v_str.o v_boxes.o v_area.o v_clear.o v_clip.o

# process forked for ctrlc trap
OBJP = ctrlc.o

# inspect window routines
OBJI = i_rl.o i_menu.o

# trace window routines
OBJT = t_win.o t_menu.o t_rl.o

# edit window routines
OBJE = e_menu.o e_win.o e_vi_display.o e_vi_cmd.o

# setup window routines
OBJS = c_utils.o c_win.o 

# assembler and interpreter files
OBJD = d_yac.o d_lex.o d_asm.o d_tabcodes.o\
d_exec.o d_interp.o d_stdlib.o\
d_interp_fonc.o\
d_interp_sig.o d_dbx.o d_dbx_trace.o d_term.o

# message window routines
OBJM = m_menu.o m_win.o 

genview : $(OBJP) $(OBJG) $(OBJV) $(OBJI) $(OBJT) $(OBJE) $(OBJS) $(OBJD) $(OBJM) Makefile
	$(CC) -o genview $(CFLAGS) $(OBJG) $(OBJT) $(OBJE) $(OBJI) $(OBJV) $(OBJD) $(D_OBJ) $(OBJM) $(OBJS) $(LIB)
	$(CC) -o watchdog $(CFLAGS) $(OBJP) -lX11

grog_genview : grog_genview.c
	$(CC) -o grog_genview grog_genview.c $(LOCAL_CFLAGS) $(CFLAGS) $(LIB)

gcc :
	cd gcc-1.42; \
	$(MAKE) TOP=$(TOP) MACHINE=$(MACHINE)

distrib : genview gcc
	$(MV) genview watchdog ./gcc-1.42/genview_gcc ./gcc-1.42/genview_cc1 ../bin
	@$(TOUCH) distrib
	@if [ -f ../bin/INSTALLED ] ; then $(RM) ../bin/INSTALLED ; else exit 0 ; fi

ctrlc.o : ctrlc.c

g_cache.o : g_cache.c  g_visu.h g_extern.c

g_user.o : g_user.c  g_visu.h g_extern.c

g_string.o : g_string.c  g_visu.h g_extern.c v_view.h v_extern.h

g_move.o : g_move.c  g_visu.h g_extern.c

g_peek.o : g_peek.c  g_visu.h g_extern.c

g_inspect.o : g_inspect.c  g_visu.h g_extern.c

g_rpeek.o : g_rpeek.c

genview.o : genview.c g_global.c v_drv.h v_view.h g_visu.h v_menu.h v_extern.h\
e_menu.h m_mes_id.h

v_drv.o : v_drv.c g_extern.c v_extern.h v_view.h i_lines.h v_menu.h g_visu.h\
m_mes_id.h

v_colors.o : v_colors.c v_extern.h v_view.h c_menu.h

v_menu.o : v_menu.c v_menu.h v_extern.h v_view.h v_icon_def.h

v_scroll.o : v_scroll.c g_extern.c v_extern.h v_view.h v_menu.h g_visu.h\
i_lines.h

v_put.o : v_put.c g_extern.c v_extern.h v_view.h g_visu.h v_menu.h

v_boxes.o : v_boxes.c g_extern.c v_extern.h v_view.h g_visu.h v_menu.h

v_str.o : v_str.c g_extern.c v_extern.h v_view.h g_visu.h v_menu.h

v_peek.o : v_peek.c g_extern.c v_extern.h v_view.h g_visu.h v_menu.h

v_clear.o : v_clear.c v_extern.h v_menu.h v_view.h

v_area.o : v_area.c v_extern.h v_menu.h v_view.h

v_clip.o : v_clip.c

i_win.o : i_win.c i_menu.h v_extern.h v_view.h v_menu.h

i_rl.o : i_rl.c g_extern.c  v_extern.h v_view.h i_lines.h

i_menu.o : i_menu.c i_menu.h v_extern.h v_view.h v_menu.h

t_win.o : t_win.c t_menu.h v_extern.h v_view.h v_menu.h

t_rl.o : t_rl.c g_extern.c  v_extern.h v_view.h i_lines.h

t_menu.o : t_menu.c t_menu.h v_extern.h v_view.h v_menu.h

c_win.o : c_win.c c_glob.h v_extern.h v_view.h

c_utils.o : c_utils.c c_menu.h c_glob.h v_view.h v_extern.h c_struct.h

e_menu.o : e_menu.c e_menu.h

e_win.o : e_win.c m_mes_id.h

e_vi_display.o : e_vi_display.c e_edit.h v_extern.h v_view.h

e_vi_cmd.o : e_vi_cmd.c e_edit.h v_extern.h v_view.h

d_lex.o : d_asm.lex 
	$(LEX) d_asm.lex
	$(SED) -e "s/yy/asm/g" -e "s/YY/ASM/g" lex.yy.c > d_lex.c
	$(SED) -e "s/yy/asm/g" -e "s/YY/ASM/g" y.tab.h > x.tab.h
	$(MV) x.tab.h y.tab.h
	$(CC) -c $(CFLAGS) $(LOCAL_CFLAGS) d_lex.c

d_yac.o : d_asm.yac d_dbx.h
	$(YACC) $(YACCFLAGS) -d d_asm.yac
	$(SED) -e "s/yy/asm/g" -e "s/YY/ASM/g" y.tab.c > d_yac.c
	$(CC) -c $(CFLAGS) $(LOCAL_CFLAGS) d_yac.c

d_asm.o : d_asm.c d_asm.h d_dbx.h
	$(CC) -c $(CFLAGS) $(LOCAL_CFLAGS) -DFLEX_SCANNER \
		-DALC_INCLUDE='"$(ALLIANCE_INCLUDE)"' d_asm.c

d_tabcodes.o : d_tabcodes.c d_codes.h

d_interp.o : d_interp.c d_codes.h

d_interp_fonc.o : d_interp_fonc.c

d_interp_sig.o : d_interp_sig.c

d_exec.o : d_exec.c

d_stdlib.o : d_stdlib.c

d_dbx.o : d_dbx.yac d_dbx.h
	$(YACC) $(YACCFLAGS) d_dbx.yac
	$(SED) -e "s/yy/d_dbx/g" -e "s/YY/DBX/g" y.tab.c > d_dbx.c
	$(CC) -c $(CFLAGS) $(LOCAL_CFLAGS) d_dbx.c

d_dbx_trace.o : d_dbx_trace.c d_dbx.h

d_term.o : d_term.c

m_menu.o : m_menu.c m_menu.h m_mes_id.h

m_win.o : m_win.c m_menu.h m_mes_id.h
	$(CC) -DWELCOME='"GenView : Public Release 4.0"' \
		-c $(CFLAGS) $(LOCAL_CFLAGS) m_win.c

clean :
	-@$(RM) -f distrib ../bin/genview ../bin/genview_cc1 \
		../bin/genview_gcc ../bin/watchdog \
		$(OBJV) $(OBJD) $(OBJG) $(OBJT) $(OBJI) $(OBJS) $(OBJE) $(OBJM) $(OBJP)\
		d_yac.c d_lex.c y.tab.c y.tab.h lex.yy.c d_dbx.c > /dev/null 2>&1
	cd gcc-1.42; \
	$(MAKE) TOP=$(TOP) MACHINE=$(MACHINE) clean 2> /dev/null 2>&1
