#
#       Makefile for pcmp (CPascal KIT) on WINDOWS XP/NT and UNIX systems
#
#
SRC_DIR	=	.
PASSRC	=	$(SRC_DIR)/
PAS_ENV	=	$(SRC_DIR)/
OBJ_DIR	=	.
INC_DIR	=	.
LIB_DIR	=	.
BIN_DIR	=	.
ENV_DIR	=	.
#
CCFLAGS	=	-O2
PAFLAGS	=	-t5 -O2 -kc -sysc
LIFLAGS	=	-t0 -O2 -kc
LDFLAGS	=	-L$(LIB_DIR) -kc
#
#
PAS	=	cpas
CC	=	gcc
#
# List of the standard library C sources
#
CCSRC	=	$(SRC_DIR)/cpas__crtl.c\
		$(SRC_DIR)/cpas__signal.c
#
# List of the standard library C-Pascal sources
#
PASRC	=	$(SRC_DIR)/cpas__std.pas\
		$(SRC_DIR)/cpas__dir.pas\
		$(SRC_DIR)/cpas__error.pas\
		$(SRC_DIR)/cpas__rtl_msg.pas\
		$(SRC_DIR)/cpas__string.pas\
		$(SRC_DIR)/cpas__physic.pas\
		$(SRC_DIR)/cpas__iipow.pas\
		$(SRC_DIR)/cpas__lipow.pas\
		$(SRC_DIR)/cpas__ifpow.pas\
		$(SRC_DIR)/cpas__igpow.pas\
		$(SRC_DIR)/cpas__iostr.pas\
		$(SRC_DIR)/cpas__ionum.pas\
		$(SRC_DIR)/cpas__iolgnum.pas\
		$(SRC_DIR)/cpas__ioenm.pas\
		$(SRC_DIR)/cpas__timstr.pas\
		$(SRC_DIR)/cpas__timcht.pas\
		$(SRC_DIR)/cpas__setope.pas\
		$(SRC_DIR)/cpas__random.pas\
		$(SRC_DIR)/cpas__hyp_f.pas\
		$(SRC_DIR)/cpas__hyp_g.pas\
		$(SRC_DIR)/cpas_b__lst.pas\
		$(SRC_DIR)/cpas_b__err.pas\
		$(SRC_DIR)/cpas_b__src.pas\
		$(SRC_DIR)/cpas_b__vls.pas\
		$(SRC_DIR)/cpas_b__vsr.pas\
		$(SRC_DIR)/cpas_d__sdir1.pas\
		$(SRC_DIR)/cpas_d__sdir2.pas
#
# List of object to build from the C sources
#
CCOBJ	=	$(OBJ_DIR)/cpas__crtl.o\
		$(OBJ_DIR)/cpas__signal.o
#
# List of object to build from the Pascal sources
#
PAOBJ	=	$(OBJ_DIR)/cpas__std.o\
		$(OBJ_DIR)/cpas__dir.o\
		$(OBJ_DIR)/cpas__error.o\
		$(OBJ_DIR)/cpas__rtl_msg.o\
		$(OBJ_DIR)/cpas__string.o\
		$(OBJ_DIR)/cpas__physic.o\
		$(OBJ_DIR)/cpas__iipow.o\
		$(OBJ_DIR)/cpas__lipow.o\
		$(OBJ_DIR)/cpas__ifpow.o\
		$(OBJ_DIR)/cpas__igpow.o\
		$(OBJ_DIR)/cpas__iostr.o\
		$(OBJ_DIR)/cpas__ionum.o\
		$(OBJ_DIR)/cpas__iolgnum.o\
		$(OBJ_DIR)/cpas__ioenm.o\
		$(OBJ_DIR)/cpas__timstr.o\
		$(OBJ_DIR)/cpas__timcht.o\
		$(OBJ_DIR)/cpas__setope.o\
		$(OBJ_DIR)/cpas__random.o\
		$(OBJ_DIR)/cpas__hyp_f.o\
		$(OBJ_DIR)/cpas__hyp_g.o\
		$(OBJ_DIR)/cpas_b__lst.o\
		$(OBJ_DIR)/cpas_b__err.o\
		$(OBJ_DIR)/cpas_b__src.o\
		$(OBJ_DIR)/cpas_b__vls.o\
		$(OBJ_DIR)/cpas_b__vsr.o\
		$(OBJ_DIR)/cpas_d__sdir1.o\
		$(OBJ_DIR)/cpas_d__sdir2.o
#
OBJS	=	$(CCOBJ) $(PAOBJ)
#
#
#
EXEC	=	$(BIN_DIR)/test_check_env \
		$(BIN_DIR)/test_cp2b \
		$(BIN_DIR)/test_es_arg \
		$(BIN_DIR)/test_es_run \
		$(BIN_DIR)/test_exa_msg \
		$(BIN_DIR)/test_fpe \
		$(BIN_DIR)/test_incl_msg \
		$(BIN_DIR)/test_std_files \
		$(BIN_DIR)/gen_msgfile \
		$(BIN_DIR)/cpsh \
		$(ENV_DIR)/cpsh.err
#
#
CMPSRC	=	$(SRC_DIR)/pcmp_ident.pas \
		$(SRC_DIR)/pcmp_basdef.pas \
		$(SRC_DIR)/pcmp_insymb.pas \
		$(SRC_DIR)/pcmp_envinh.pas \
		$(SRC_DIR)/pcmp_lgt.pas \
		$(SRC_DIR)/pcmp_dump.pas \
		$(SRC_DIR)/pcmp_expr.pas \
		$(SRC_DIR)/pcmp_comp.pas \
		$(SRC_DIR)/pcmp_genc.pas \
		$(SRC_DIR)/pcmp_main.pas
#
CMPINCL	=	$(SRC_DIR)/pcmp_type_env.pas \
		$(SRC_DIR)/pcmp_global_def.pas \
		$(SRC_DIR)/pcmp_global_ref.pas \
		$(SRC_DIR)/pcmp_external_proc.pas
#
CMPLOBJ	=	$(OBJ_DIR)/pcmp_ident.o \
		$(OBJ_DIR)/pcmp_basdef.o \
		$(OBJ_DIR)/pcmp_insymb.o \
		$(OBJ_DIR)/pcmp_envinh.o \
		$(OBJ_DIR)/pcmp_lgt.o \
		$(OBJ_DIR)/pcmp_dump.o \
		$(OBJ_DIR)/pcmp_expr.o \
		$(OBJ_DIR)/pcmp_comp.o \
		$(OBJ_DIR)/pcmp_genc.o
#
#
all:	$(LIB_DIR)/libcpas.a $(EXEC) $(BIN_DIR)/pcmp $(BIN_DIR)/cpas $(ENV_DIR)/cpas_cmp.err
#
#
#
clean:
	rm $(OBJS) $(SRC_DIR)/cpas__rtl_msg.pas \
	$(LIB_DIR)/libcpas.a $(EXEC) \
	$(OBJ_DIR)/pcmp_lib.a $(CMPLOBJ) \
	$(ENV_DIR)/cpas_cmp.err

#
# Build the libcpas.a library
#
$(LIB_DIR)/libcpas.a:$(OBJS)
	ar -r $@ $(OBJS)
#
# Compile C Sources of CPAS library
#
$(OBJ_DIR)/cpas__crtl.o:	$(SRC_DIR)/cpas__crtl.c
	$(PAS) $(PAFLAGS) -c $<
#
$(OBJ_DIR)/cpas__signal.o:	$(SRC_DIR)/cpas__signal.c
	$(PAS) $(PAFLAGS) -c $<
#
# Compile Pascal Sources of CPAS library
#
$(OBJ_DIR)/cpas__std.o:	$(SRC_DIR)/cpas__std.pas $(SRC_DIR)/cpas__ccdef.pas $(SRC_DIR)/cpas__stddef.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__dir.o:	$(SRC_DIR)/cpas__dir.pas $(SRC_DIR)/cpas__ccdef.pas $(SRC_DIR)/cpas__stddef.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__error.o:	$(SRC_DIR)/cpas__error.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__rtl_msg.o:	$(SRC_DIR)/cpas__rtl_msg.pas
	$(PAS) $(LIFLAGS) -c $<
# The next is used to generate the source just use above.
$(SRC_DIR)/cpas__rtl_msg.pas:	$(SRC_DIR)/gen_cpas_incl_msg.pas $(SRC_DIR)/cpas_rtl_err.dat
	$(PAS) $(PAFLAGS) $(LDFLAGS) $< -o gen_cpas_incl_msg
	$(SRC_DIR)/gen_cpas_incl_msg $(SRC_DIR)/cpas_rtl_err.dat $@ PAS__GET_RTL_MSG
#
$(OBJ_DIR)/cpas__string.o:	$(SRC_DIR)/cpas__string.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__physic.o:	$(SRC_DIR)/cpas__physic.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__iipow.o:	$(SRC_DIR)/cpas__iipow.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__lipow.o:	$(SRC_DIR)/cpas__lipow.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__ifpow.o:	$(SRC_DIR)/cpas__ifpow.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__igpow.o:	$(SRC_DIR)/cpas__igpow.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__iostr.o:	$(SRC_DIR)/cpas__iostr.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__ionum.o:	$(SRC_DIR)/cpas__ionum.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__iolgnum.o:	$(SRC_DIR)/cpas__iolgnum.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__ioenm.o:	$(SRC_DIR)/cpas__ioenm.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__timstr.o:	$(SRC_DIR)/cpas__timstr.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__timcht.o:	$(SRC_DIR)/cpas__timcht.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__setope.o:	$(SRC_DIR)/cpas__setope.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__random.o:	$(SRC_DIR)/cpas__random.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__hyp_f.o:	$(SRC_DIR)/cpas__hyp_f.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas__hyp_g.o:	$(SRC_DIR)/cpas__hyp_g.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas_b__lst.o:	$(SRC_DIR)/cpas_b__lst.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas_b__err.o:	$(SRC_DIR)/cpas_b__err.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas_b__src.o:	$(SRC_DIR)/cpas_b__src.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas_b__vls.o:	$(SRC_DIR)/cpas_b__vls.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas_b__vsr.o:	$(SRC_DIR)/cpas_b__vsr.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas_d__sdir1.o:	$(SRC_DIR)/cpas_d__sdir1.pas
	$(PAS) $(LIFLAGS) -c $<
#
$(OBJ_DIR)/cpas_d__sdir2.o:	$(SRC_DIR)/cpas_d__sdir2.pas
	$(PAS) $(LIFLAGS) -c $<
#
#	Compile some small test programs
#
$(BIN_DIR)/test_check_env:	$(SRC_DIR)/test_check_env.pas $(LIB_DIR)/libcpas.a
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(LIB_DIR)/libcpas.a
#
$(BIN_DIR)/test_cp2b:	$(SRC_DIR)/test_cp2b.pas $(LIB_DIR)/libcpas.a
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(LIB_DIR)/libcpas.a
#
$(BIN_DIR)/test_es_arg:	$(SRC_DIR)/test_es_arg.pas $(LIB_DIR)/libcpas.a
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(LIB_DIR)/libcpas.a
#
$(BIN_DIR)/test_es_run:	$(SRC_DIR)/test_es_run.pas $(LIB_DIR)/libcpas.a
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(LIB_DIR)/libcpas.a
#
$(BIN_DIR)/test_exa_msg:	$(SRC_DIR)/test_exa_msg.pas $(LIB_DIR)/libcpas.a
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(LIB_DIR)/libcpas.a
#
$(BIN_DIR)/test_fpe:	$(SRC_DIR)/test_fpe.pas $(LIB_DIR)/libcpas.a
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(LIB_DIR)/libcpas.a
#
$(BIN_DIR)/test_incl_msg:	$(SRC_DIR)/test_incl_msg.pas $(LIB_DIR)/libcpas.a
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(LIB_DIR)/libcpas.a
#
$(BIN_DIR)/test_std_files:	$(SRC_DIR)/test_std_files.pas $(LIB_DIR)/libcpas.a
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(LIB_DIR)/libcpas.a
#
#	Compile some utilty program
#
$(BIN_DIR)/gen_msgfile:	$(SRC_DIR)/gen_msgfile.pas $(LIB_DIR)/libcpas.a
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(LIB_DIR)/libcpas.a
#
#		$(OBJ_DIR)/pcmp_
#	Compile the CPAS SHELL cpsh Program
#
$(BIN_DIR)/cpsh:	$(SRC_DIR)/cpsh_shell.pas \
			$(SRC_DIR)/cpas_shell_base.pas \
			$(SRC_DIR)/cpas_shell_base_env.pas \
			$(LIB_DIR)/libcpas.a \
			$(SRC_DIR)/cpas_system_name_init.cpas
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(LIB_DIR)/libcpas.a
#
$(ENV_DIR)/cpsh.err:	$(SRC_DIR)/cpsh_err.dat $(BIN_DIR)/gen_msgfile
	$(BIN_DIR)/gen_msgfile $< $@
#
#
# Compile the PCMP Compiler
#
$(BIN_DIR)/pcmp: $(SRC_DIR)/pcmp_main.pas $(SRC_DIR)/pcmp_lib.a  $(CMPINCL) $(LIB_DIR)/libcpas.a $(SRC_DIR)/cpas_system_name_init.cpas
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(SRC_DIR)/pcmp_lib.a $(LIB_DIR)/libcpas.a
#
$(SRC_DIR)/pcmp_lib.a:	$(CMPLOBJ)
	ar -r $@ $(CMPLOBJ)
#
$(OBJ_DIR)/pcmp_basdef.o:	$(SRC_DIR)/pcmp_basdef.pas $(CMPINCL)
	$(PAS) $(PAFLAGS) -c $< 
#
$(OBJ_DIR)/pcmp_insymb.o:	$(SRC_DIR)/pcmp_insymb.pas $(CMPINCL)
	$(PAS) $(PAFLAGS) -c $< 
#
$(OBJ_DIR)/pcmp_envinh.o:	$(SRC_DIR)/pcmp_envinh.pas $(CMPINCL)
	$(PAS) $(PAFLAGS) -c $< 
#
$(OBJ_DIR)/pcmp_lgt.o:	$(SRC_DIR)/pcmp_lgt.pas $(CMPINCL)
	$(PAS) $(PAFLAGS) -c $< 
#
$(OBJ_DIR)/pcmp_dump.o:	$(SRC_DIR)/pcmp_dump.pas $(CMPINCL)
	$(PAS) $(PAFLAGS) -c $< 
#
$(OBJ_DIR)/pcmp_expr.o:	$(SRC_DIR)/pcmp_expr.pas $(CMPINCL)
	$(PAS) $(PAFLAGS) -c $< 
#
$(OBJ_DIR)/pcmp_comp.o:	$(SRC_DIR)/pcmp_comp.pas $(CMPINCL)
	$(PAS) $(PAFLAGS) -c $< 
#
$(OBJ_DIR)/pcmp_ident.o:	$(SRC_DIR)/pcmp_ident.pas $(CMPINCL)
	$(PAS) $(PAFLAGS) -c $< 
#
$(OBJ_DIR)/pcmp_genc.o:	$(SRC_DIR)/pcmp_genc.pas $(CMPINCL)
	$(PAS) $(PAFLAGS) -c $<
#
$(ENV_DIR)/cpas_cmp.err:	$(SRC_DIR)/pcmp_err.dat $(BIN_DIR)/gen_msgfile
	$(BIN_DIR)/gen_msgfile $< $@
#
#
#
# Compile the CPAS Dispatcher
#
$(BIN_DIR)/cpas:	$(SRC_DIR)/cpas-dispatcher.pas $(LIB_DIR)/libcpas.a $(SRC_DIR)/cpas_system_name_init.cpas
	$(PAS) $(PAFLAGS) $(LDFLAGS) -o $@ $< $(LIB_DIR)/libcpas.a

#
