# +----------------------------------------------------------------------+
# | Aubit 4gl Language Compiler Version $.0                              |
# +----------------------------------------------------------------------+
# | Copyright (c) 2000-1 Aubit Development Team (See Credits file)       |
# +----------------------------------------------------------------------+
# | This program is free software; you can redistribute it and/or modify |
# | it under the terms of one of the following licenses:                 |
# |                                                                      |
# |  A) the GNU General Public License as published by the Free Software |
# |     Foundation; either version 2 of the License, or (at your option) |
# |     any later version.                                               |
# |                                                                      |
# |  B) the Aubit License as published by the Aubit Development Team and |
# |     included in the distribution in the file: LICENSE                |
# |                                                                      |
# | This program is distributed in the hope that it will be useful,      |
# | but WITHOUT ANY WARRANTY; without even the implied warranty of       |
# | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        |
# | GNU General Public License for more details.                         |
# |                                                                      |
# | You should have received a copy of both licenses referred to here.   |
# | If you did not, or have any questions about Aubit licensing, please  |
# | contact afalout@ihug.co.nz                                           |
# +----------------------------------------------------------------------+

#
# $Id: Makefile,v 1.50 2009/01/25 10:56:37 mikeaubury Exp $
#

ROOT    =../..

#All stuff common to more then one Aubit compiler make file is there:
include ${ROOT}/incl/Makefile-common

## ==================================================================
##                              Options
## ==================================================================

#> 1) Why -laubit4gl ?
#Its needed for the pop_.. and push_... stuff - on some platforms this is
#detected and linked properly, on some others - you need this to get the link
#to work...
#FIXME-in that case, it should be linked in conditionally:
ifneq "${COMSPEC}" ""
	LIBAUBIT4GL=-L${LIBROOT} -l${AUBITLIBFULL}
endif

ifeq "${TARGET_OS}" "solaris"
	LIBAUBIT4GL=-L${LIBROOT} -l${AUBITLIBFULL}
endif

SHARED=${SO_LDFLAGS}
PGEXTRA=


ifeq "${TARGET_OS}" "darwin"
SHARED=-bundle
PGEXTRA=-lpq `pg_config --libs` -L${LIBROOT} -laubit4gl
PGLIBS=-L${ECPG_LIBDIR} ${ECPG_LFLAGS} -lecpg -lecpg_compat -lpgtypes 
else
PGLIBS=-L${ECPG_LIBDIR} ${ECPG_LFLAGS} -lecpg -lecpg_compat -lpgtypes
endif



#Define default components to build
ifneq "$(ESQL)" "no"
	ALL	+=	${PLUGINDIR}/libESQL_INFORMIX${SO_EXT}
endif
ifneq "${Q_ESQLC}" "no"
	ALL	+=	${PLUGINDIR}/libESQL_QUERIX${SO_EXT}
endif
ifneq "$(II_SYSTEM)" ""
	ALL	+=	${PLUGINDIR}/libESQL_INGRES${SO_EXT}
endif
ifneq "${PG_ESQLC}" "no"
 	ALL	+=	${PLUGINDIR}/libESQL_POSTGRES${SO_EXT}
endif
ifneq "${SAPDB_ESQLC}" "no"
    ALL	+=	${PLUGINDIR}/libESQL_SAP${SO_EXT}
endif

ifneq "${COMSPEC}" ""
#Windows
	QUERIX_IFLAGS=-I"${QUERIXDIR}/include"
	QUERIX_LFLAGS=-L"${QUERIXDIR}/lib"
    QUERIX_LIBS="${QUERIXDIR}/lib/libesql.lib" "${QUERIXDIR}/lib/libesql.lib" \
				"${QUERIXDIR}/lib/libfgl.lib"
	#"${QUERIXDIR}/lib/libsqlc.lib"
	#"${QUERIXDIR}/bin/libfgl.dll"
else
#UNIX
	INGRES_IFLAGS=${shell cat "${INGRES_INST_PATH}/ingres/files/abflnk.opt"}
	INGRES_LFLAGS=
	INGRES_LIBS=
	QUERIX_IFLAGS=-I${QUERIXDIR}/incl
	QUERIX_LFLAGS=-L${QUERIXDIR}/lib


# Why do we need this ? 
    #STATIC=-static



    QUERIX_LIBS=-lesql
endif
ifeq "${TARGET_OS}" "solaris"
	STATIC=
endif

ifdef COMSPEC
	#Should be OK now:
    #FIXME!!!!! I'm using variable named TMP somewhere!!!!
	#TMP			=/cygdrive/d/DOCUME~1/ADMINI~1/LOCALS~1/Temp
    #PWD			=
    #export TMP
    #export PWD

#from Mikes Makefile.cygwin:
	CFLAGS		:=-g -D_REENTRANT -DIFX_THREAD -I${ROOT}/incl ${CFLAGS} 
	ESQL		=esql -g 
	ESQL_FLAGS	=-thread
	LDFLAGS		=
	#IFX_CSDK_DIR=/CSDK
	INFORMIXDIR_CSDK	=${INFORMIXDIR_UNQUOTED}${IFX_CSDK_DIR}
	IFX_WIN_LIBS="${INFORMIXDIR_CSDK}\bin\isqlt09a.dll"  "${INFORMIXDIR_CSDK}\bin\igl4n304.dll" \
		"${INFORMIXDIR_CSDK}\bin\iglxn304.dll"  "${INFORMIXDIR_CSDK}\bin\igo4n304.dll"
endif

ifneq "${COMSPEC}" ""
	PGLIBS				:=$(shell echo "${PGLIBS}" | tr '\\' '/')
	ECPG_INCDIR			:=$(shell echo "${ECPG_INCDIR}" | tr '\\' '/')
	ECPG_IFLAGS			:=$(shell echo "${ECPG_IFLAGS}" | tr '\\' '/')
	LIBPQ_FE_H_IFLAGS	:=$(shell echo "${LIBPQ_FE_H_IFLAGS}" | tr '\\' '/')
endif

## ==================================================================
##                              Targets
## ==================================================================

all: ${ALL}
	@echo "Done: ${ALL}"

###################
libESQL_INFORMIX${SO_EXT}: ${PLUGINDIR}/libESQL_INFORMIX${SO_EXT}
${PLUGINDIR}/libESQL_INFORMIX${SO_EXT}: helper_funcs_informix.o
ifneq "${COMSPEC}" ""
#Windows
	$(CC) $(LDFLAGS) -g -mms-bitfields -shared -Wl,--export-all-symbols \
		$^ ${IFX_WIN_LIBS} ${LIBAUBIT4GL} -o $@
else
#Unix:
	 ${CC}  ${SO_LDFLAGS} ${CFLAGS} ${STATIC} -g ${SHARED} $^ -o $@ ${LIBAUBIT4GL}   -L${INFORMIXDIR}/lib -L${INFORMIXDIR}/lib/esql `esql -libs`
#Solaris:
#	libtool --mode=link gcc -shared helper_funcs.o -o libESQL_INFORMIX.so \ 
#		-L$INFORMIXDIR/lib -L$INFORMIXDIR/lib/esql  `esql -libs`
#	cp *.so .
endif

###################
libESQL_POSTGRES${SO_EXT}: ${PLUGINDIR}/libESQL_POSTGRES${SO_EXT}
${PLUGINDIR}/libESQL_POSTGRES${SO_EXT}: helper_funcs_postgresql.o postgres.o
	${CC} ${CFLAGS} ${STATIC} -g ${SHARED} $^ -o $@ ${PGLIBS} ${LIBAUBIT4GL} ${PGEXTRA}
# -Bstatic
#gcc: file path prefix "static" never used

###################
libESQL_SAP${SO_EXT}: ${PLUGINDIR}/libESQL_SAP${SO_EXT}
${PLUGINDIR}/libESQL_SAP${SO_EXT}: helper_funcs_sap.o
	${CC} ${STATIC} -g ${SHARED} $^ -o $@ ${LIBAUBIT4GL}

###################
libESQL_QUERIX${SO_EXT}: ${PLUGINDIR}/libESQL_QUERIX${SO_EXT}
${PLUGINDIR}/libESQL_QUERIX${SO_EXT}: helper_funcs_querix.o
	${CC} ${STATIC} -g ${SHARED} $^ -o $@ ${LIBAUBIT4GL} ${QUERIX_LFLAGS} ${QUERIX_LIBS}

###################
libESQL_INGRES${SO_EXT}: ${PLUGINDIR}/libESQL_INGRES${SO_EXT}
${PLUGINDIR}/libESQL_INGRES${SO_EXT}: helper_funcs_ingres.o
	${CC} ${STATIC} -g ${SHARED} $^ -o $@ ${LIBAUBIT4GL} ${INGRES_LFLAGS} ${INGRES_LIBS}

###################
libESQL_INFOFLEX${SO_EXT}: ${PLUGINDIR}/libESQL_INFOFLEX${SO_EXT}
INFOFLEX: ${PLUGINDIR}/libESQL_INFOFLEX${SO_EXT}
${PLUGINDIR}/libESQL_INFOFLEX${SO_EXT}: helper_funcs_infoflex.o
	${CC} ${STATIC} -g ${SHARED} $^ -o $@ ${LIBAUBIT4GL} ${INFOFLEX_LFLAGS} ${INFOFLEX_LIBS}

## ==================================================================
##                              Sub-targets
## ==================================================================

###################
#Infromix ESQL/C compiler
helper_funcs_informix.o: helper_funcs.ec
ifneq "${COMSPEC}" ""
#Windows:
#WARNING: Querix also has esqlc, and Informix esql invokes esqlc to compile .ec
#WARNING: esql will strip all quotes, and invoke esqlc with un-quoted paths
#that may contain spaces. If you get message "Input file name has invalid suffix ''"
#that is probably what happened. You must double-quote it ('"..."')
	export INFORMIXDIR=${INFORMIXDIR_UNQUOTED} ; \
		$(ESQL) -nln -dcmdl $(ESQL_FLAGS) -DDIALECT_INFORMIX -I'"${INFORMIXDIR_CSDK}/incl"' -e $<
	$(CC) $(CFLAGS) -DDIALECT_INFORMIX -I"${INFORMIXDIR_CSDK}/incl/esql" \
		-I"${INFORMIXDIR_CSDK}/incl" -c $(basename $<).c -o $@
	-@rm $(basename $<).c $(basename $<).c_*
else
#UNIX:
	export INFORMIXC=${INFORMIXC};  ${IFMX_ESQLC} ${PIC} ${CFLAGS}  -nln -G -static -DDIALECT_INFORMIX -g -c -o $@ $^ -I${ROOT}/incl \
		-I"${INFORMIXDIR}/incl" 
#solaris:
#	esql -e helper_funcs.ec -I.. -I/home/aubit4gl/aubit4glsrc/incl
#	libtool --mode=compile gcc ${PIC} -I$INFORMIXDIR/incl/esql -I.. \ 
#		-I/home/aubit4gl/aubit4glsrc/incl  helper_funcs.c -c -o helper_funcs.o
endif

###################
#PostgreSQL ESQL/C compiler
helper_funcs_postgresql.o: helper_funcs.ec
	${PG_ESQLC} -C INFORMIX -t $^
	${CC} ${CFLAGS} -DPG_ESQLC_V3=$(PG_ESQLC_V3) -DDIALECT_POSTGRES ${CFLAGS} -I$(ECPG_INCDIR) ${ECPG_IFLAGS} ${LIBPQ_FE_H_IFLAGS} -I${ROOT}/incl `${ROOT}/bin/aubit-config PG_COPTS` -g -c -o $@ helper_funcs.c 

postgres.o: postgres.ec
	${PG_ESQLC} -C INFORMIX -t $^
	${CC} ${CFLAGS} -DPG_ESQLC_V3=$(PG_ESQLC_V3) -DDIALECT_POSTGRES ${CFLAGS} -I$(ECPG_INCDIR) ${ECPG_IFLAGS} ${LIBPQ_FE_H_IFLAGS} -I${ROOT}/incl `${ROOT}/bin/aubit-config PG_COPTS` -g -c -o $@ postgres.c 

###################
#SAP ESQL/C compiler
helper_funcs_sap.o: helper_funcs.ec
#cpc will allways add .cpc extension to any source files specified, so we have to 
#make a copy and add .cpc extension
#As -H nocheck apparently does not work in 7.5 I had to manually rename declarations
#inside #ifdef-s so that cpc would not complain:
	cat $^ | sed -e 's/decimal \*infx\;/char dummy\[256\]\;/g' \
		-e 's/decimal \*x\;/char dummy\[256\]\;/g' > $^.cpc
#Had to disable syntax check of EXEC SQL statements, because SAP EC pre-compiler
#does not take in account #ifdef's, and then fail on syntax specific to
#another ESQL/C
#check nocheck   ::  -H nocheck              (default: -H check)
#      syntax    ::  -H syntax
#		-c = precompile only (translate to C - do not invoke C compiler)
	${SAPDB_ESQLC} -H nocheck $^ -I${ROOT}/incl -o $@ -DDIALECT_SAP ${SAPDB_INCDIR}
	rm $^.cpc


###################
#Querix ESQL/C compiler
helper_funcs_querix.o: helper_funcs.ec
#must remove .c file or .ec will not get recompiled
 	#rm helper_funcs.c
#need quotes because of the path on Windows
	"${Q_ESQLC}" $^
	${CC} ${CFLAGS} -DDIALECT_QUERIX -g -c -o $@ helper_funcs.c -I${ROOT}/incl ${QUERIX_IFLAGS}
#-DNEWERA
	rm helper_funcs.c

###################
#INGRES ESQL/C compiler
helper_funcs_ingres.o: helper_ingres.ec
#helper_funcs_ingres.o: helper_funcs.ec
	. ${INGRES_INST_PATH}/.ingIIbash; $(INGRES_ESQLC) $^
	. ${INGRES_INST_PATH}/.ingIIbash; \
		${CC} ${CFLAGS} -DDIALECT_INGRES -g -c -o $@ $(basename $<).c -I${ROOT}/incl ${INGRES_IFLAGS}
	rm $(basename $<).c

####################
#Infoflex
helper_funcs_infoflex.o: helper_funcs_infoflex.ec
	esqlpp helper_funcs_infoflex.ec
	sqlcc ${CFLAGS} -DDIALECT_INFOFLEX -g -c -o $@ helper_funcs_infoflex.c -I${ROOT}/incl
	
show:
	@echo "INFORMIXDIR=${INFORMIXDIR}"
	@echo "INFORMIXDIR_UNQUOTED=${INFORMIXDIR_UNQUOTED}"

	
## ==================================================================
##                              Clean
## ==================================================================

clean:
	${RM} -f *.o *.c ${ALL} *.cpc *.bak *.ec.w2 *.ec.w3 *.ec.pcl \
		helper_funcs.ec.cpc helper_ingres.c



# =============================== EOF ===============================
