8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-24 14:03:02 +01:00
firebird-mirror/builds/posix/Makefile.in
Adriano dos Santos Fernandes 9ed0e28b09 Add Travis MacOS build, GitHub Actions MacOS/Windows build and adjust MacOS build to be (almost) relocatable.
While MacOS people seems to be ok with fixed locations for applications and libraries, this complicates a lot the (post)
build process, needing to change each id and rpaths in a very error prone process.

Relocatable binaries makes this a lot easier, but unfortunately "restricted" (chmod +s, like firebird executable)
programs cannot use @loader_path or @executable_path in its rpath.

So the solution has to make internal libraries relocatable and make rpath of firebird fixed. Also, as the ecosystem
seems to use fixed path, the id of fbclient.dylib has set to its fixed path.

Also MacOS post build makefile has adjusted to allow creation of packages for the debug build.

The MacOS build could still be improved with some scripts to build ICU (instead of done directly in the CI scripts,
but I leave that for now) and copies its files to our lib path. However situation seems to be better than before in
relation to ICU and TomMath.

Note: Linux build is not working in GitHub Actions. It segfaults when running (exiting) utilities.
I had this problem lot's of time in the past, maybe it's not completely fixed in v3.
2019-11-26 13:11:55 -03:00

767 lines
23 KiB
Makefile

#
# PROGRAM: Firebird single makefile
# MODULE: Makefile.in
# DESCRIPTION: Posix build main file
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
# You may obtain a copy of the Licence at
# http://www.gnu.org/licences/lgpl.html
#
# As a special exception this file can also be included in modules
# with other source code as long as that source code has been
# released under an Open Source Initiative certificed licence.
# More information about OSI certification can be found at:
# http://www.opensource.org
#
# This module 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 Lesser General Public Licence for more details.
#
# This module was created by members of the firebird development
# team. All individual contributions remain the Copyright (C) of
# those individuals and all rights are reserved. Contributors to
# this file are either listed below or can be obtained from a SVN
# history command.
#
# Created by: Mark O'Donohue <mark.odonohue@ludwig.edu.au>
#
# Contributor(s):
# Alex Peshkoff - created single makefile based on Mark's files
#
ROOT=$(shell cd ..; pwd)
include make.defaults
ifeq ($(CROSS_OUT), Y)
include make.crossPlatform
else
include make.platform
endif
include make.rules
include make.shared.variables
@SET_MAKE@
ifeq ($(IsDeveloper), Y)
DefaultTarget := Debug
else
DefaultTarget := Release
endif
ifeq ($(IsCross), Y)
Process := cross_process
else
Process := master_process
endif
.PHONY: master_process cross_process firebird Debug Release extern
all: firebird
firebird:
$(MAKE) TARGET=$(DefaultTarget) $(Process)
Release:
$(MAKE) TARGET=Release $(Process)
Debug:
$(MAKE) TARGET=Debug $(Process)
#----------------------------------------------------------------------------
# jrd/build_no.h contains the version and build# fields used throughout the
# program and quoted in the tools. This routine will update the build_no.h
# file with the auto update build# script file, writeBuildNum.sh. The
# writeBuildNum.sh script is autoupdated by SVN checkins.
#
.PHONY: updateCloopInterfaces updateBuildNum
IDL_ROOT=$(SRC_ROOT)/include/firebird
IDL_FILE=$(IDL_ROOT)/FirebirdInterface.idl
API_H_FILE=$(IDL_ROOT)/IdlFbInterfaces.h
API_PAS_FILE=$(SRC_ROOT)/include/gen/Firebird.pas
PAS_ROOT=$(SRC_ROOT)/misc/pascal
PASCAL_SOURCES=$(wildcard $(PAS_ROOT)/*)
TMP_FUNCS=$(TMP_ROOT)/func.pas
XPB_CONSTS=$(SRC_ROOT)/include/consts_pub.h
ERR_CONSTS=$(ROOT)/lang_helpers/gds_codes.pas
updateCloopInterfaces : $(API_H_FILE) $(API_PAS_FILE)
$(API_H_FILE): $(IDL_FILE)
$(CLOOP) $< c++ $@ IDL_FB_INTERFACES_H Firebird I
$(TMP_FUNCS): $(PASCAL_SOURCES) $(XPB_CONSTS) $(ERR_CONSTS)
cat $(PAS_ROOT)/fb_get_master_interface.pas >$(TMP_FUNCS)
awk -f $(PAS_ROOT)/Pascal.Constants.awk <$(XPB_CONSTS) >>$(TMP_FUNCS)
grep '[[:space:]]isc_' $(ERR_CONSTS) >>$(TMP_FUNCS)
$(API_PAS_FILE): $(IDL_FILE) $(PASCAL_SOURCES) $(TMP_FUNCS)
$(CLOOP) $(IDL_FILE) pascal $@ Firebird --uses SysUtils \
--interfaceFile $(PAS_ROOT)/Pascal.interface.pas \
--implementationFile $(PAS_ROOT)/Pascal.implementation.pas \
--exceptionClass FbException \
--functionsFile $(TMP_FUNCS) \
--prefix I
updateBuildNum : $(SRC_ROOT)/jrd/build_no.h $(GEN_ROOT)/Make.Version
$(SRC_ROOT)/jrd/build_no.h : $(SRC_ROOT)/misc/writeBuildNum.sh
(cd $(ROOT); ./src/misc/writeBuildNum.sh rebuildHeader)
$(GEN_ROOT)/Make.Version : $(SRC_ROOT)/misc/writeBuildNum.sh
$(SRC_ROOT)/misc/writeBuildNum.sh createMakeVersion $@
#___________________________________________________________________________
# build external software
#
extern:
$(MAKE) -C $(ROOT)/extern/btyacc
$(MAKE) -C $(ROOT)/extern/cloop TARGET=release WITH_FPC=0 BUILD_DIR=$(TMP_ROOT)/cloop OUT_DIR=$(GEN_ROOT)/$(TARGET)/cloop
ifeq ($(TOMBUILD_FLG),Y)
echo $(LIBTOOL)
$(MAKE) -C $(ROOT)/extern/libtommath -f makefile.shared LIBTOOL=$(LIBTOOL)
ifeq ($(PLATFORM),DARWIN)
install_name_tool -id "@rpath/lib/libtommath.dylib" $(TOMMATH)/.libs/libtommath.0.dylib
cp $(TOMMATH)/.libs/libtommath.0.dylib $(LIB)/libtommath.dylib
else
ln -sf $(TOMMATH_SO).$(TOMMATH_VER) $(LIB)
endif
ln -sf $(TOMMATH_SO) $(LIB)
endif
ifeq ($(STD_EDITLINE),false)
ifeq ($(EDITLINE_FLG),Y)
$(MAKE) -f $(GEN_ROOT)/Makefile.extern.editline
endif
endif
#___________________________________________________________________________
# create platform-specific export lists (version scripts) in gen
#
%.vers: $(ROOT)/builds/posix/%.vers
sh vers.sh $(firstword $@)
export_lists: $(ALLVERS)
#___________________________________________________________________________
# LibTomMath - used by cross-builds
#
.PHONY: tommath
TOMLIB=$(LIB)/libtommath.a
TOM_Objs=$(addprefix ../extern/libtommath/,$(call doObjects,$(call dirFiles,../extern/libtommath)))
tommath: $(TOMLIB)
$(TOMLIB): $(TOM_Objs)
-$(RM) $@
$(STATICLIB_LINK) $@ $^
#___________________________________________________________________________
# main build target for both debug and release builds
#
.PHONY: cross1 cross2 boot yvalve engine fbintl gpre utilities plugins rest codes ids examples cross_rest preliminaryCheck
master_process:
ln -sf $(SRC_ROOT)/include/gen/autoconfig.auto $(SRC_ROOT)/include/gen/autoconfig.h
$(MAKE) updateBuildNum
$(MAKE) export_lists
$(MAKE) extern
$(MAKE) updateCloopInterfaces
$(MAKE) preliminaryCheck
$(MAKE) boot
$(MAKE) yvalve
ifeq ($(IsDeveloper), Y)
# In developer mode we must regenerate various files in include/gen
$(MAKE) ids
endif
$(MAKE) engine
$(MAKE) fbintl
$(MAKE) utilities
# Now having ready such useful tools as gbak and isql, we may restore / create
# required databases and switch to full-featured gpre
$(MAKE) gpre
# Pay attention - after build force gpre_current to point to gpre
# even if gpre itself was not rebuilt
-$(RM) $(GPRE_CURRENT)
(cd $(BIN); $(LN) $(notdir $(GPRE)) $(notdir $(GPRE_CURRENT)))
ifeq ($(IsDeveloper), Y)
# In developer mode we must regenerate various files in include/gen
$(MAKE) codes
endif
$(MAKE) plugins
$(MAKE) examples
$(MAKE) rest
cross_process:
$(MAKE) TARGET=Native cross1
$(MAKE) CROSS_OUT=Y cross2
cross1:
ln -sf $(SRC_ROOT)/include/gen/autoconfig.auto $(SRC_ROOT)/include/gen/autoconfig.h
$(MAKE) updateBuildNum
$(MAKE) export_lists
$(MAKE) extern
$(MAKE) updateCloopInterfaces
$(MAKE) boot
$(MAKE) yvalve
ifeq ($(IsDeveloper), Y)
# In developer mode we must regenerate various files in include/gen
$(MAKE) ids
endif
$(MAKE) engine
$(MAKE) fbintl
$(MAKE) gbak isql gfix
# Now having ready such useful tools as gbak and isql, we may restore / create
# required databases and switch to full-featured gpre
$(MAKE) gpre
# Pay attention - after build force gpre_current to point to gpre
# even if gpre itself was not rebuilt
-$(RM) $(GPRE_CURRENT)
(cd $(BIN); $(LN) $(notdir $(RUN_GPRE)) $(notdir $(GPRE_CURRENT)))
$(MAKE) include_generic
$(MAKE) -f Makefile.examples -C $(GEN_ROOT)/examples/
cross2:
ln -sf $(SRC_ROOT)/include/cross/$(CROSS_CONFIG) $(SRC_ROOT)/include/gen/autoconfig.h
$(MAKE) prerequisites
$(MAKE) tommath
$(MAKE) yvalve
$(MAKE) engine
$(MAKE) fbintl
$(MAKE) utilities
$(MAKE) $(GPRE)
$(MAKE) plugins
$(MAKE) -f Makefile.plugins_examples
$(MAKE) cross_rest
#___________________________________________________________________________
# preliminary checks - make sure platform is OK to build FB
#
STD_SIZES:=$(SRC_ROOT)/misc/ods.txt
RUN_SIZES:=$(GEN_ROOT)/ods.txt
ODS_H:=$(SRC_ROOT)/jrd/ods.h
ODS_AWK:=$(SRC_ROOT)/misc/ods.awk
ODS_TEST_CPP:=$(GEN_ROOT)/odstest.cpp
ODS_TEST:=$(GEN_ROOT)/odstest$(EXEC_EXT)
preliminaryCheck: $(STD_SIZES) $(RUN_SIZES)
diff -u $^
$(RUN_SIZES): $(ODS_H) $(ODS_AWK)
awk -f $(ODS_AWK) <$(ODS_H) >$(ODS_TEST_CPP)
$(CXX) -o $(ODS_TEST) $(WCXXFLAGS) $(ODS_TEST_CPP)
$(ODS_TEST) >$(RUN_SIZES)
#___________________________________________________________________________
# static library - various common code, used in different FB projects
#
$(COMMON_LIB): $(Common_Objects)
-$(RM) $@
$(STATICLIB_LINK) $@ $^
#___________________________________________________________________________
# gpre_boot
#
boot: $(GPRE_BOOT)
$(GPRE_BOOT): $(GPRE_Boot_Objects) $(COMMON_LIB)
$(STATICEXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ -L$(LIB) $(LINK_LIBS)
-$(RM) $(GPRE_CURRENT)
(cd $(@D); $(LN) $(@F) $(notdir $(GPRE_CURRENT)))
#___________________________________________________________________________
# yValve
#
yvalve: $(LIBFIREBIRD_BASENAME)
ifneq ($(LibraryBaseName),$(LibrarySoName))
$(LIBFIREBIRD_BASENAME): $(LIBFIREBIRD_SONAME)
(cd $(LIB) && $(LN) -f $(LibrarySoName) $(LibraryBaseName) )
endif
ifneq ($(LibrarySoName),$(LibraryFullName))
$(LIBFIREBIRD_SONAME): $(LIBFIREBIRD_FULLNAME)
(cd $(LIB) && $(LN) -f $(LibraryFullName) $(LibrarySoName) )
endif
# remote redirector is statically linked in main FB library
$(LIBFIREBIRD_FULLNAME): $(YValve_Objects) $(Remote_Client_Objects) $(COMMON_LIB)
$(LINK_FIREBIRD) -o $@ $^ $(LINK_FIREBIRD_LIBS) $(call LIB_LINK_DARWIN_INSTALL_NAME,lib/libfbclient.$(SHRLIB_EXT))
#___________________________________________________________________________
# core part - jrd's engine
#
engine: $(ENGINE_SONAME)
$(ENGINE_SONAME): $(Engine_Objects) $(SVC_Objects) $(COMMON_LIB)
$(LINK_ENGINE) -o $@ $^ $(LINK_ENGINE_LIBS) $(call LIB_LINK_DARWIN_INSTALL_NAME,plugins/$(EngineSoName))
#___________________________________________________________________________
# intl support
#
fbintl: $(LIBFBINTL_SO)
$(LIBFBINTL_SO): $(INTL_Objects) $(COMMON_LIB)
$(LINK_INTL) -o $@ $^ $(LINK_INTL_LIBS) $(call LIB_LINK_DARWIN_INSTALL_NAME,intl/libfbintl.$(SHRLIB_EXT))
#___________________________________________________________________________
# full gpre
# when switching to it we also build databases needed later
#
.PHONY: databases
gpre: $(GPRE) databases
$(GPRE): $(GPRE_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
HELP_FDB = $(FIREBIRD)/help/help.fdb
SECURITY_FDB = $(FIREBIRD)/security3.fdb
SECURITY_TMP = security.tmp
databases: yachts.lnk msg.timestamp $(HELP_FDB) $(SECURITY_FDB)
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(FIREBIRD)/lib
yachts.lnk: metadata.fdb
-$(RM) $@
$(LN) $^ $@
metadata.fdb: $(RUN_ISQL) $(SRC_ROOT)/dbs/metadata.sql
-$(RM) $@
$(RUN_ISQL) -q -i $(SRC_ROOT)/dbs/metadata.sql
$(RUN_GFIX) -mode read_only $@
$(CHMOD) 0444 $@
$(HELP_FDB): help.fdb
-$(RM) $@
$(CP) $^ $@
$(CHMOD) 0444 $@
help.fdb: $(BLD_ROOT)/misc/help.gbak
$(RUN_GBAK) -MODE read_only -R $< $@
$(CHMOD) 0444 $@
$(SECURITY_FDB): security.fdb
-$(RM) $@
$(CP) $^ $@
security.fdb: $(SRC_ROOT)/dbs/security.sql
-$(RM) $@
-$(RM) $(SECURITY_TMP)
echo create database \'$(SECURITY_TMP)\'\; | $(RUN_ISQL)
$(RUN_GFIX) -write async $(SECURITY_TMP)
$(RUN_ISQL) -i $^ $(SECURITY_TMP)
$(CHMOD) a=rw $(SECURITY_TMP)
$(CP) $(SECURITY_TMP) $@
$(RUN_GFIX) -write sync $@
msg.timestamp: $(MSG_FILES)
-$(RM) msg.fdb
echo create database \'msg.fdb\'\; | $(RUN_ISQL)
$(RUN_GFIX) -write async msg.fdb
for sql in $(MSG_FILES); do (echo $$sql; $(RUN_ISQL) -i $$sql msg.fdb) || exit; done
$(TOUCH) $@
.PHONY: udfs ibutil ibudf fbudf udfsupport
udfsupport:
$(MAKE) ibutil
$(MAKE) udfs
udfs: ibudf fbudf
UDF = $(FB_BUILD)/UDF
IBUDF_SO = $(UDF)/ib_udf.$(SHRLIB_EXT)
FBUDF_SO = $(UDF)/fbudf.$(SHRLIB_EXT)
ibudf: $(IBUDF_SO)
$(IBUDF_SO): $(IBUDF_Objects)
$(call LINK_UDF,ib_udf) -o $@ $^ $(LINK_UDF_LIBS) $(call LIB_LINK_DARWIN_INSTALL_NAME,$(UDF)/ib_udf.$(SHRLIB_EXT))
fbudf: $(FBUDF_SO)
$(FBUDF_SO): $(FBUDF_Objects) $(COMMON_LIB)
$(call LINK_UDF,fbudf) -o $@ $^ $(LINK_UDF_LIBS) $(FIREBIRD_LIBRARY_LINK) $(call LIB_LINK_DARWIN_INSTALL_NAME,$(UDF)/fbudf.$(SHRLIB_EXT))
ibutil: $(LIBIBUTIL_SO)
$(LIBIBUTIL_SO): $(UTIL_Objects)
$(LINK_IB_UTIL) -o $@ $^ $(LINK_IB_UTIL_LIBS) $(call LIB_LINK_DARWIN_INSTALL_NAME,lib/libib_util.$(SHRLIB_EXT))
#___________________________________________________________________________
# most of utilities, including network server and UDFs
# qli is not here cause it needs special database (help.fdb), therefore needs gbak
#
.PHONY: firebird_server fb_lock_print fbguard fbsvcmgr fbtracemgr gbak gfix gsec gsplit gstat isql nbackup
utilities: firebird_server fb_lock_print fbguard fbsvcmgr fbtracemgr gbak gfix gsec gsplit gstat isql nbackup udfsupport
firebird_server: $(FB_DAEMON)
$(FB_DAEMON): $(Remote_Server_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
fb_lock_print: $(LOCKPRINT)
$(LOCKPRINT): $(LOCKPRINT_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
fbguard: $(FBGUARD)
$(FBGUARD): $(FBGUARD_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
fbsvcmgr: $(FBSVCMGR)
$(FBSVCMGR): $(FBSVCMGR_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
fbtracemgr: $(FBTRACEMGR)
$(FBTRACEMGR): $(FBTRACEMGR_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
gbak: $(GBAK)
$(GBAK): $(GBAK_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
gsplit: $(GSPLIT)
$(GSPLIT): $(GSPLIT_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
gfix: $(GFIX)
$(GFIX): $(GFIX_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
gsec: $(GSEC)
$(GSEC): $(GSEC_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
gstat: $(GSTAT)
$(GSTAT): $(GSTAT_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
isql: $(ISQL)
$(ISQL): $(ISQL_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LIBEDITLINE) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
nbackup: $(NBACKUP)
$(NBACKUP): $(NBACKUP_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
#___________________________________________________________________________
# plugins - some of them are required to build examples, use separate entry for them
#
.PHONY: udr legacy_user_management legacy_auth_server trace auth_debug
UDR_PLUGIN = $(call makePluginName,udr_engine)
LEGACY_USER_MANAGER = $(call makePluginName,Legacy_UserManager)
LEGACY_AUTH_SERVER = $(call makePluginName,Legacy_Auth)
SRP_USER_MANAGER = $(call makePluginName,Srp)
FBTRACE = $(call makePluginName,fbtrace)
AUTH_DEBUGGER = $(call makePluginName,Auth_Debug)
BUILD_DEBUG:=
ifeq ($(TARGET),Debug)
BUILD_DEBUG:=auth_debug
endif
plugins: udr legacy_user_management legacy_auth_server srp_user_management trace $(BUILD_DEBUG)
udr: $(UDR_PLUGIN) $(PLUGINS)/udr_engine.conf
$(PLUGINS)/udr_engine.conf: $(ROOT)/src/plugins/udr_engine/udr_engine.conf
cp $^ $@
$(UDR_PLUGIN): $(UDRENG_Objects) $(COMMON_LIB)
$(LINK_UDRENG) $(call LIB_LINK_SONAME,$(notdir $@).0) -o $@ $^ $(LINK_UDRENG_LIBS) $(FIREBIRD_LIBRARY_LINK)\
$(call LIB_LINK_DARWIN_INSTALL_NAME,plugins/libudr_engine.$(SHRLIB_EXT))
legacy_user_management: $(LEGACY_USER_MANAGER)
$(LEGACY_USER_MANAGER): $(LEGACY_USERS_MANAGE_Objects) $(COMMON_LIB)
$(LINK_PLUGIN) $(call LIB_LINK_SONAME,$(notdir $@).0) -o $@ $^ $(LINK_PLUG_LIBS) $(FIREBIRD_LIBRARY_LINK)\
$(call LIB_LINK_DARWIN_INSTALL_NAME,plugins/libLegacy_UserManager.$(SHRLIB_EXT))
legacy_auth_server: $(LEGACY_AUTH_SERVER)
$(LEGACY_AUTH_SERVER): $(LEGACY_AUTH_SERVER_Objects) $(COMMON_LIB)
$(LINK_PLUGIN) $(call LIB_LINK_SONAME,$(notdir $@).0) -o $@ $^ $(LINK_PLUG_LIBS) $(FIREBIRD_LIBRARY_LINK)\
$(call LIB_LINK_DARWIN_INSTALL_NAME,plugins/libLegacy_Auth.$(SHRLIB_EXT))
trace: $(FBTRACE)
$(FBTRACE): $(FBTRACE_UTIL_Objects) $(COMMON_LIB)
$(LINK_TRACE) -o $@ $^ $(FIREBIRD_LIBRARY_LINK) $(LINK_TRACE_LIBS) $(call LIB_LINK_DARWIN_INSTALL_NAME,plugins/libfbtrace.$(SHRLIB_EXT))
auth_debug: $(AUTH_DEBUGGER)
$(AUTH_DEBUGGER): $(AUTH_DEBUGGER_Objects) $(COMMON_LIB)
$(LINK_PLUGIN) $(call LIB_LINK_SONAME,$(notdir $@).0) -o $@ $^ $(LINK_PLUG_LIBS) $(FIREBIRD_LIBRARY_LINK)\
$(call LIB_LINK_DARWIN_INSTALL_NAME,plugins/libAuth_Debug.$(SHRLIB_EXT))
srp_user_management: $(SRP_USER_MANAGER)
$(SRP_USER_MANAGER): $(SRP_USERS_MANAGE_Objects) $(COMMON_LIB)
$(LINK_PLUGIN) $(call LIB_LINK_SONAME,$(notdir $@).0) -o $@ $^ $(LINK_PLUG_LIBS) $(FIREBIRD_LIBRARY_LINK)\
$(call LIB_LINK_DARWIN_INSTALL_NAME,plugins/libSrp.$(SHRLIB_EXT))
#___________________________________________________________________________
# codes - developers change them sometimes
#
.PHONY: gen_codes
CODES = $(BIN)/codes$(EXEC_EXT)
IDS = $(SRC_ROOT)/include/gen/ids.h
codes: gen_codes
ids: $(IDS)
gen_codes: $(CODES) msg.timestamp
$(CODES) $(SRC_ROOT)/include/gen $(LNG_ROOT)
$(CODES): $(CODES_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
$(IDS): $(SRC_ROOT)/misc/ids.m $(SRC_ROOT)/jrd/relations.h
m4 $< > $@
#___________________________________________________________________________
# all the rest we need to build
#
.PHONY: qli message_file gbak_files
FDB_FILES := $(HELP_FDB) $(ROOT)/gen/msg.fdb $(SECURITY_FDB) $(FIREBIRD)/examples/empbuild/employee.fdb
GBAK_FILES := $(FDB_FILES:.fdb=.gbak) $(FIREBIRD)/msg.gbak
GBAK_FILES := $(subst Native,$(TARGET),$(GBAK_FILES))
rest: qli message_file
cross_rest: qli gbak_files
$(MAKE) $(BUILD_FILE)
qli: $(QLI)
$(QLI): $(QLI_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
examples: include_generic
$(MAKE) -f Makefile.examples -C $(GEN_ROOT)/examples/
$(MAKE) -f Makefile.plugins_examples
message_file: $(FIREBIRD_MSG)
$(FIREBIRD_MSG): $(BUILD_FILE) msg.timestamp
$(BUILD_FILE) -d msg.fdb -f $@
$(CHMOD_6) $@
$(BUILD_FILE): $(BUILD_Objects) $(COMMON_LIB)
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
gbak_files: $(GBAK_FILES)
$(GEN_ROOT)/$(TARGET)/firebird/msg.gbak: $(ROOT)/gen/msg.gbak
cp $^ $@
#---------------------------------------------------------------------------
# This target builds the include files for distribution with the release
# Some of the files differ from the ones used internally to compile the
# software - mainly they are just flattened out to make the view simpler
# from an external point of view.
INCLUDE_DEST= $(FB_BUILD)/include
NEW_INCLUDES_SRC = $(shell find $(SRC_ROOT)/include/firebird -type f)
NEW_INCLUDES_DEST = $(patsubst $(SRC_ROOT)/include/firebird/%, $(INCLUDE_DEST)/firebird/%, $(NEW_INCLUDES_SRC))
include_generic: $(INCLUDE_DEST)/ib_util.h \
$(INCLUDE_DEST)/ibase.h \
$(NEW_INCLUDES_DEST)
# ib_util.h actually is a marker for a number of headers
# All these files are #included in ibase.h. Here we cat them all together
# and remove the embedded #includes to make it simpler for external usage.
IBASE_ExtraFiles = include/types_pub.h include/consts_pub.h dsql/sqlda_pub.h common/dsc_pub.h jrd/ibase.h jrd/inf_pub.h jrd/blr.h include/gen/iberror.h
SRC_IBASE_ExtraFiles = $(addprefix $(SRC_ROOT)/, $(IBASE_ExtraFiles))
MAKE_HEADER_Src = $(addprefix $(SRC_ROOT)/, misc/makeHeader.cpp)
MAKE_HEADER_Bin = ./makeHeader
$(INCLUDE_DEST)/ibase.h: $(SRC_IBASE_ExtraFiles)
$(STATICEXE_LINK) -o $(MAKE_HEADER_Bin) $(MAKE_HEADER_Src)
$(CP) $^ .
$(MAKE_HEADER_Bin) <ibase.h >$@
$(RM) -f ibase.h
# Copy all the other headers to the distribution directory. We use
# ib_util.h as the marker for all the files.
OtherDistribHeaders = extlib/ib_util.h \
yvalve/perf.h \
include/gen/iberror.h
SRC_OtherDistribHeaders = $(addprefix $(SRC_ROOT)/, $(OtherDistribHeaders))
$(INCLUDE_DEST)/ib_util.h : $(SRC_OtherDistribHeaders)
mkdir -p $(INCLUDE_DEST)
$(CP) $^ $(INCLUDE_DEST)/
$(INCLUDE_DEST)/firebird/%: $(SRC_ROOT)/include/firebird/%
mkdir -p $(@D)
$(CP) $< $@
#___________________________________________________________________________
# track dependencies
#
include $(ROOT)/gen/make.shared.targets
Dependencies = $(AllObjects:.o=.d)
-include $(Dependencies)
#___________________________________________________________________________
# create binary packages
#
.PHONY: install silent_install install-embedded package packages dist
install install-embedded silent_install package packages dist:
$(MAKE) -f Makefile.install $@
#___________________________________________________________________________
# various cleaning
#
.PHONY: clean clean_objects clean_dependancies clean_extern_objects clean_build \
clean_gpre_gen clean_icu clean_dbs clean_examples clean_makefiles \
clean_editline clean_all
clean: clean_objects clean_dependancies clean_extern_objects clean_build \
clean_yacc_gen clean_gpre_gen clean_dbs clean_examples clean_tommath
ifeq ($(EDITLINE_FLG),Y)
ifeq ($(STD_EDITLINE),false)
clean: clean_editline
endif
endif
clean_config clean_all: clean clean_makefiles
$(RM) $(ROOT)/configure
$(RM) $(ROOT)/aclocal.m4
$(RM) $(ROOT)/config.log
$(RM) $(ROOT)/config.status
$(RM) $(ROOT)/libtool
$(RM_R) $(ROOT)/autom4te.cache
-$(MAKE) -C $(ROOT)/extern/editline distclean
# -$(MAKE) -C $(ROOT)/extern/icu/source distclean
-$(MAKE) -C $(ROOT)/extern/btyacc distclean
clean_dbs:
$(RM) *.fdb *.FDB msg.timestamp
$(RM) yachts.lnk
# The examples are a bit different, since the makefile is included in the directory
# and not in the gen directory, deleting it means, make clean; make doesnt work correctly
# so the code below deletes all the other stuff but not the Makefile.examples MOD Nov-2007
clean_examples:
$(RM) `find $(GEN_ROOT)/examples/ -type f ! -name 'Make*'`
clean_editline:
-$(MAKE) -C $(ROOT)/extern/editline clean
#clean_icu:
# -$(MAKE) -C $(ROOT)/extern/icu/source clean
clean_tommath:
-$(MAKE) -C $(ROOT)/extern/libtommath clean
clean_objects:
$(RM) `find $(TMP_ROOT)/ -type f -name '*.o' -print`
$(RM) `find $(TMP_ROOT)/ -type f -name '*.a' -print`
$(RM) `find $(TMP_ROOT)/ -type f -name '*.cpp' -print`
$(RM) `find $(TMP_ROOT)/ -type f -name '*.pas' -print`
clean_extern_objects:
$(RM) `find $(ROOT)/extern/ -type f -name '*.lo' -print`
$(RM) `find $(ROOT)/extern/ -type f -name '*.o' -print`
# Clear out dependancies files created by the gcc compiler
# since when .o and other files are deleted the dependant
# targets need to be recalculated
clean_dependancies:
$(RM) -f `find $(TMP_ROOT)/ -type f -name '*.d' -print`
# delete only all of the files of type regular file in $FIREBIRD
# leave the directories to make dependacies work still
clean_build:
$(RM) `find $(GEN_ROOT)/*/firebird \( -type f -o -type l \) -print`
clean_makefiles:
$(RM) $(GEN_ROOT)/Make*
$(RM) $(GEN_ROOT)/make*
$(RM) `find $(GEN_ROOT)/install \( -type f -o -type l \) -print`
-$(RM) $(GEN_ROOT)/examples/Make*
$(RM) $(ROOT)/Makefile
$(RM) $(SRC_ROOT)/include/gen/autoconfig.h
clean_gpre_gen:
-$(RM) -f `find $(TMP_ROOT)/ -type f -name '*.cpp' -print`
clean_yacc_gen:
$(RM) $(ROOT)/src/dsql/parse.cpp $(ROOT)/src/dsql/dsql.tab.h
#___________________________________________________________________________
# Extra platform specific targets