# +----------------------------------------------------------------------+ # | Aubit 4gl Language Compiler Version $.0 lib makefile | # +----------------------------------------------------------------------+ # | 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.19 2010/01/14 09:12:09 mikeaubury Exp $ # ROOT =../../.. #All stuff common to more then one Aubit compiler make file is there: include ${ROOT}/incl/Makefile-common ## ================================================================== ## Options ## ================================================================== #FIXME: why do we need fcompile headers and RPC lib includes here? #-I${LIBROOT}/compilers/fcompile C_LOCAL_IFLAGS =-I.. -I/usr/local/include CFLAGS +=${C_LOCAL_IFLAGS} CFLAGS_NOREDUND =$(CFLAGS:%-Wredundant-decls=%) CFLAGS_NOSTRICTPROTO =$(CFLAGS:%-Wstrict-prototypes=%) LCLINT_CFLAGS =${C_IFLAGS} ${C_LOCAL_IFLAGS} OBJECTS =sql.o sqlex.o array.o sqlstates.o LINK_ALL =-L/usr/local/lib #LD_RUN_PATH =${INFORMIXDIR}/lib/esql CFLAGS_SQLITE = -DSQLITEODBC -DHAVE_LIBVERSION=1 \ -DWITHOUT_DRIVERMGR ${CFLAGS_NOREDUND} -DHAVE_LOCALECONV=1 \ -L${SQLITE_LDPATH} -L${SQLITE_LDPATH2} -I${ROOT}/tools/odbctest/incl -I. #SQLITE_ODBC_VER #SQLITE_ODBC_LIBNAME_SHARED #SQLITE_ODBC_LIBNAME_STATIC ifeq "${PGODBC_LIBNAME}" "" PGODBC_LIBNAME=odbcpsql endif ifneq "${COMSPEC}" "" #Windows only LINKLIBS =-L${LIBROOT} -l${AUBITLIBFULL} #On Windows we renamed .dll/.def files in original distribution #(adding 'lib' prefix) and copied them to /cygwin/lib directory: #WARNING: paths for MinGW GCC MUST use forward slash - NOT backslash!!! CYGWIN_PATH_WIN :=$(shell cygpath -m "${CYGWIN_PATH_WIN}") SQLITE_LDPATH :=$(shell cygpath -m "${SQLITE_LDPATH}") SQLITE_LDPATH2 :=$(shell cygpath -m "${SQLITE_LDPATH2}") #SQLITE_LINKLIBS =-L${CYGWIN_PATH_WIN}/lib -L${SQLITE_LDPATH} SQLITE_LINKLIBS =-L${SQLITE_LDPATH} -L${SQLITE_LDPATH2} CFLAGS_SQLITE +=-DDLL_EXPORT -DPIC -DMEMORY_DEBUG=2 else CFLAGS_SQLITE +=-DHAVE_USLEEP=1 #-L/usr/local/lib -L/usr/lib endif ALL =iodbc unixodbc ifxodbc pgodbc sapodbc sqlite ifeq "${SQLITE_ODBC}" "1" ALL +=sqliteodbc endif .PHONY : ${ALL} clean all allodbc odbc32 #sqlite.static ifeq "${TARGET_OS}" "darwin" SQLITE_FLAGS=-L/opt/local/lib else SQLITE_FLAGS=-Wl,-call_shared -Wl,--dll-verbose endif ## ================================================================== ## Targets ## ================================================================== all : @echo "Must specify target (because clean is not working.)" @echo "Targets: ${ALL} odbc32 allodbc " #sqlite.static" allodbc: ${ALL} #we MUST always clean first, because we don't know for which libs where #current object compiled, if they exists. iodbc: clean_iodbc ${PLUGINDIR}/libSQL_iodbc${SO_EXT} @echo "iODBC target compiled successfully" unixodbc: clean_unixodbc ${PLUGINDIR}/libSQL_unixodbc${SO_EXT} @echo "unixODBC target compiled successfully" ifxodbc: clean_ifxodbc ${PLUGINDIR}/libSQL_ifxodbc${SO_EXT} @echo "Informix ODBC target compiled successfully" pgodbc: clean_pgodbc ${PLUGINDIR}/libSQL_pgodbc${SO_EXT} @echo "PostgreSQL ODBC target compiled successfully" sapodbc: clean_sapodbc ${PLUGINDIR}/libSQL_sapodbc${SO_EXT} @echo "SAP DB ODBC target compiled successfully" sqliteodbc: clean_sqliteodbc ${PLUGINDIR}/libSQL_sqliteodbc${SO_EXT} @echo "SQLite ODBC target compiled successfully" sqlite: clean_sqlite ${PLUGINDIR}/libSQL_sqlite${SO_EXT} @echo "SQLite native Aubit plug-in compiled successfully" sqlite.static: clean_sqliteS ${PLUGINDIR}/libSQL_sqliteS${SO_EXT} @echo "SQLite native Aubit plug-in (static link) compiled successfully" sqlite3: clean_sqlite3 ${PLUGINDIR}/libSQL_sqlite3${SO_EXT} @echo "SQLite3 native Aubit plug-in compiled successfully" sqlite3.static: clean_sqlite3S ${PLUGINDIR}/libSQL_sqlite3S${SO_EXT} @echo "SQLite3 native Aubit plug-in (static link) compiled successfully" ################################ #Aubit ODBC plug-in code linked with Microsoft Windows ODBC manager library odbc32: clean_odbc32 ${OBJECTS} ${PLUGINDIR}/libSQL_odbc32${SO_EXT} ${PLUGINDIR}/libSQL_odbc32${SO_EXT} : ${OBJECTS} ${LD} ${SO_LDFLAGS} -o $@ $^ ${LINKLIBS} -lodbc32 @echo "Windows ODBC target compiled successfully" ################################ #Aubit ODBC plug-in code linked with iODBC ODBC manager library ${PLUGINDIR}/libSQL_iodbc${SO_EXT}: CFLAGS:=-DIODBC ${IODBC_INCLUDE} ${IODBC_LFLAGS} ${CFLAGS_NOREDUND} ${PLUGINDIR}/libSQL_iodbc${SO_EXT}: ${OBJECTS} ${LD} ${SO_LDFLAGS} $^ -o $@ ${IODBC_LIBS} ${IODBC_LFLAGS} ${LINK_ALL} ################################ #Aubit ODBC plug-in code linked with unixODBC ODBC manager library ${PLUGINDIR}/libSQL_unixodbc${SO_EXT}: CFLAGS:=-DUNIXODBC ${UNIXODBC_LFLAGS} ${UNIXODBC_INCLUDE} ${CFLAGS} ${PLUGINDIR}/libSQL_unixodbc${SO_EXT}: ${OBJECTS} ${LD} ${SO_LDFLAGS} $^ -o $@ ${UNIXODBC_LIBS} ${UNIXODBC_LFLAGS} ${LINK_ALL} ################################ #Aubit ODBC plug-in code linked with (Informix) ODBC driver library, for use without ODBC manager ${PLUGINDIR}/libSQL_ifxodbc${SO_EXT}: CFLAGS:=-DIFXODBC -I${INFORMIXDIR} -I${INFORMIXDIR}/incl/cli -L${INFORMIXDIR}/lib/cli -L${INFORMIXDIR}/lib/esql ${CFLAGS_NOSTRICTPROTO} ${PLUGINDIR}/libSQL_ifxodbc${SO_EXT}: ${OBJECTS} ${LD} ${SO_LDFLAGS} $^ -o $@ -lifcli -lifdmr -L${INFORMIXDIR}/lib/cli -L${INFORMIXDIR}/lib/esql ${LINK_ALL} ################################ #Aubit ODBC plug-in code linked with (PG) ODBC driver library, for use without ODBC manager ${PLUGINDIR}/libSQL_pgodbc${SO_EXT}: CFLAGS:=-DPGODBC -DSQLHDBC=HDBC -DINCLUDEDATASOURCES ${PGODBC_INCLUDE} ${PGODBC_LFLAGS} ${CFLAGS_NOREDUND} ${PLUGINDIR}/libSQL_pgodbc${SO_EXT}: ${OBJECTS} ${LD} ${SO_LDFLAGS} $^ -o $@ -l${PGODBC_LIBNAME} ${PGODBC_LFLAGS} ${LINK_ALL} ################################ #Aubit ODBC plug-in code linked with (SAPDB) ODBC driver library, for use without ODBC manager ${PLUGINDIR}/libSQL_sapodbc${SO_EXT}: CFLAGS:=-DSAPODBC ${SAPODBC_INCLUDE} ${SAPODBC_LFLAGS} ${CFLAGS_NOREDUND} ${PLUGINDIR}/libSQL_sapodbc${SO_EXT}: ${OBJECTS} ${LD} ${SO_LDFLAGS} $^ -o $@ ${SAPDB_ODBC_ADDLIBS} -lsqlod ${SAPODBC_LFLAGS} ${LINK_ALL} ############################### #Aubit ODBC plug-in linked with SQLite ODBC driver for use without ODBC manager #${LIBROOT}/libSQL_sqliteodbc${SO_EXT}: CFLAGS:=-DSQLITEODBC ${CFLAGS_NOREDUND} -I${ROOT}/tools/odbctest/incl ${PLUGINDIR}/libSQL_sqliteodbc${SO_EXT}: CFLAGS:=-I${ROOT}/tools/odbctest/incl ${CFLAGS_SQLITE} ${PLUGINDIR}/libSQL_sqliteodbc${SO_EXT}: ${OBJECTS} ${LD} ${SO_LDFLAGS} $^ -o $@ -L${SQLITE_ODBC_LIBDIR} ${LINK_ALL} -l${SQLITE_ODBC_LIBNAME_SHARED} ############################### #SQLite plug-in dynamically linked with SQLite library/engine: #This plug-in consists of 1) Aubit ODBC plug-in code 2) SQLiteODBC code we have #a private copy of in Aubit CVS, and 3) SQLite engine library ${PLUGINDIR}/libSQL_sqlite${SO_EXT}: CFLAGS:=${CFLAGS_SQLITE} -DSQLITE_DIRECT ${PLUGINDIR}/libSQL_sqlite${SO_EXT}: ${OBJECTS} sqliteodbc.o ${LD} ${SO_LDFLAGS} $^ -o $@ ${SQLITE_LINKLIBS} ${LINK_ALL} -l${SQLITE_LIBNAME} ${LINKLIBS} ################################ #Same as above, but with SQLite VERSION 3 libSQL_sqlite3${SO_EXT}: ${PLUGINDIR}/libSQL_sqlite3${SO_EXT} ${PLUGINDIR}/libSQL_sqlite3${SO_EXT}: CFLAGS:=${CFLAGS_SQLITE} -DSQLITE_DIRECT ${PLUGINDIR}/libSQL_sqlite3${SO_EXT}: ${OBJECTS} sqlite3odbc.o ${LD} ${SO_LDFLAGS} $^ -o $@ ${SQLITE_LINKLIBS} ${SQLITE_FLAGS} ${LINK_ALL} -l${SQLITE_LIBNAME} ${LINKLIBS} > link.log 2>&1 ifneq "${COMSPEC}" "" @echo "Should NOT be empty: '`cygcheck $@ | grep -v libSQL_ | grep ${SQLITE_LIBNAME}.dll`'" endif #The above target on windows will produce statically linked dll anyway #Failed to link dynamically, despite forcing linker with -Wl,-call_shared : #attempt to open D:/msys/1.0/local/lib/libsqlite3.dll.a failed #attempt to open D:/msys/1.0/local/lib/sqlite3.dll.a failed #attempt to open D:/msys/1.0/local/lib/libsqlite3.a succeeded # #But when I hide libsqlite3.a (mv libsqlite3.a libsqlite3.a-hide) # #attempt to open D:/msys/1.0/local/lib/libsqlite3.dll.a failed #attempt to open D:/msys/1.0/local/lib/sqlite3.dll.a failed #attempt to open D:/msys/1.0/local/lib/libsqlite3.a failed #attempt to open D:/msys/1.0/local/lib/libsqlite3.dll succeeded # #Conclusion: .a ALLWAYS has priority over .dll - the only way to link against #.dll is to have dll.a or NOT to have .a # #SQLite on Windows produces .dll .a and .la - and NOT dll.a #Unless I go and remove .a, or modify SQLite makefile to produce .dll.a, #(or ask GCC people why are they happily linking with .dll when there is no .a) #there is not much I can do... ############################### #Same as libSQL_sqlite but statically linked with SQLite library/engine: #NOTE: no static SQLite library supplied for Windows in version 2.x ${PLUGINDIR}/libSQL_sqliteS${SO_EXT}: CFLAGS:=${CFLAGS_SQLITE} -DSQLITE_DIRECT ${PLUGINDIR}/libSQL_sqliteS${SO_EXT}: ${OBJECTS} sqliteodbc.o ${LD} ${SO_LDFLAGS} -Wl,-static $^ -o $@ -L${SQLITE_LDPATH} -L${SQLITE_LDPATH2} \ ${SQLITE_LINKLIBS} -l${SQLITE_LIBNAME} ${LINKLIBS} ############################### #Same as above, but linked with SQLite VERSION 3 #WARNING: order is EXTREMELY important for static linking on Windows! libSQL_sqlite3S${SO_EXT}: ${PLUGINDIR}/libSQL_sqlite3S${SO_EXT} ${PLUGINDIR}/libSQL_sqlite3S${SO_EXT}: CFLAGS:=${CFLAGS_SQLITE} -DSQLITE_DIRECT ${PLUGINDIR}/libSQL_sqlite3S${SO_EXT}: ${OBJECTS} sqlite3odbc.o ${LD} ${SO_LDFLAGS} $^ ${SQLITE_LINKLIBS} ${LINKLIBS} -L${SQLITE_LDPATH} -L${SQLITE_LDPATH2} -o $@ \ ${LINKLIBS} -Wl,-static -l${SQLITE_LIBNAME} ifneq "${COMSPEC}" "" @echo "Should be empty: '`cygcheck $@ | grep ${SQLITE_LIBNAME}.dll`'" endif ## ================================================================== ## Clean ## ================================================================== cleanish: ${RM} *.o *.bak *.base *.dll *.def *.exp *.a clean_ifxodbc: cleanish ${RM} ${PLUGINDIR}/libSQL_ifxodbc${SO_EXT} clean_iodbc: cleanish ${RM} ${PLUGINDIR}/libSQL_iodbc${SO_EXT} clean_odbc32: cleanish ${RM} ${PLUGINDIR}/libSQL_odbc32${SO_EXT} clean_pgodbc: cleanish ${RM} ${PLUGINDIR}/libSQL_pgodbc${SO_EXT} clean_sapodbc: cleanish ${RM} ${PLUGINDIR}/libSQL_sapodbc${SO_EXT} clean_sqlite: cleanish ${RM} ${PLUGINDIR}/libSQL_sqlite${SO_EXT} clean_sqlite3: cleanish ${RM} ${PLUGINDIR}/libSQL_sqlite3${SO_EXT} clean_sqlite3S: cleanish ${RM} ${PLUGINDIR}/libSQL_sqlite3S${SO_EXT} clean_sqliteS: cleanish ${RM} ${PLUGINDIR}/libSQL_sqliteS${SO_EXT} clean_sqliteodbc: cleanish ${RM} ${PLUGINDIR}/libSQL_sqliteodbc${SO_EXT} clean_unixodbc: cleanish ${RM} ${PLUGINDIR}/libSQL_unixodbc${SO_EXT} clean: cleanish ${RM} ${PLUGINDIR}/libSQL_ifxodbc${SO_EXT} ${RM} ${PLUGINDIR}/libSQL_iodbc${SO_EXT} ${RM} ${PLUGINDIR}/libSQL_odbc32${SO_EXT} ${RM} ${PLUGINDIR}/libSQL_pgodbc${SO_EXT} ${RM} ${PLUGINDIR}/libSQL_sapodbc${SO_EXT} ${RM} ${PLUGINDIR}/libSQL_sqlite${SO_EXT} ${RM} ${PLUGINDIR}/libSQL_sqlite3${SO_EXT} ${RM} ${PLUGINDIR}/libSQL_sqlite3S${SO_EXT} ${RM} ${PLUGINDIR}/libSQL_sqliteS${SO_EXT} ${RM} ${PLUGINDIR}/libSQL_sqliteodbc${SO_EXT} ${RM} ${PLUGINDIR}/libSQL_unixodbc${SO_EXT} ## ----------------------------- EOF -------------------------------