mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-24 14:03:02 +01:00
9ed0e28b09
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.
767 lines
23 KiB
Makefile
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
|