8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-23 10:43:03 +01:00
firebird-mirror/builds/posix/Makefile.in.firebird

668 lines
21 KiB
Makefile
Raw Normal View History

# 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 CVS
# history command.
#
# Created by: Mark O'Donohue <mark.odonohue@ludwig.edu.au>
#
# Contributor(s):
#
#
2002-10-02 14:43:16 +02:00
# $Id: Makefile.in.firebird,v 1.9 2002-10-02 12:43:15 eku Exp $
#
ROOT=..
include $(ROOT)/gen/make.platform
include $(ROOT)/gen/make.rules
include $(ROOT)/gen/make.defaults
include $(ROOT)/gen/make.shared.variables
@SET_MAKE@
ISC_USER= sysdba
ISC_PASSWORD= masterkey
#LD_LIBRARY_PATH=/home/odonohue/src/firebird2/gen/firebird/lib:/usr/lib
TEST_PATH = @FIREBIRD_BUILD_DIR@
LD_LIBRARY_PATH=$(RealFirebirdPath)/lib
#export ISC_USER
#export ISC_PASSWORD
#export INTERBASE
export FIREBIRD
export DYLD_FRAMEWORK_PATH
export LD_LIBRARY_PATH
######################################################################
########### Build process overview #################################
#
# Firebird2 has brought with it a new build process. This extended
# comment should help explain that process. Keep in mind there are
# a number of artifacts left in the makefiles from the previous build
# processes.
#
# The build process starts by building a bootstrap version of gpre.
# This is possible because of a special version of gpre_meta.cpp,
# gpre_meta_boot.cpp. It is a copy of the gpre_meta.epp file with all
# the embeded commands removed. There are pregenerated copy of the
# codes.h and related files in the source tree. These are used for the
# entire build process. In the future we should check for the ability
# to regenerate codes.h and friends (ie, a working FB install) and only
# use the static files as a last resort.
#
# The bootstrap version of gpre (gpre_boot) is used to build all the
# engine files, except security.bin. security.epp requires the security
# database which is not available at this time. The code in jrd/alt.cpp
# that references the functions in security.bin has been #ifdef'ed out.
# During this phase of the build process the limited version of alt.bin
# is used. The full version of alt.bin is compiled later in the build
# process after the security database is available. After the
# (hopefully pending) redesign of FB security the security database
# dependancies should go away.
#
# The engine objects are placed in the jrd_static.a archive. This archive
# contains all the objects needed to create statically linked programs.
# A fully functional version of gpre, gpre_static, is then generated
# using jrd_static.a. I choose to statically link the few utilities
# required to build FB to avoid possible shared library symbol conflicts.
#
# All of the aforementioned work is done in the
# first phase of the compilation. I called it the first phase because
# none of the work (except codes.h and friends) requires database access.
# Phase 2 builds all the tools necessary to compile the rest of FB. Those
# tools are gbak and the gds.so shared library.
#
# The .epp files in gbak require the yachts.lnk database. But the only
# thing the database is used for is the metadata, so an empty database
# will do the job. The create_db program is a small c API utility that
# creates an empty database. This utility is statically linked.
# Once there is an empty database gbak_static is built. gbak_static is
# used later on in the compilation process to restore build databases.
#
# After gbak_static is built the gds.so library is built. This library is
# still missing the security functionality. Note there is a dependancy
# between gbak_static and gds.so because the shared library contains the
# PYXIS code, which needs the forms.gdb database restored from forms.gbak.
#
# Now we are on phase 3, building the actual DB tools. This is as expected.
# We build all tools and link them against the shared library, including
# gpre, gbak, and the fully functional gds.so.
#
# John Belardo ~ July 2001
#
# In the tradition of makefiles, they have evolved even further. But most of
# the above is still applies. There now tends to be a Makefile for each
# target rather than the more traditional Makefile per directory model.
# This was needed to enable super to build corrently. But it also allowed
# some of the boot build process to be done simpler as well.
# MOD 28-July-2002
#
########### And now on with the show............
#################################################################
#__________________________________________________________________________
#
# This is the main target for the make. The targets are
# firebird_embedded and firebird_server. Or as they used to be known
# firebird_classic and firebird_super.
# (The .PHONY: stuff just means it's a fake target, and make wont go searching
# for a real file or directory - but there are a lot of them here
# MOD 28-July-2002)
.PHONY: all firebird firebird_boot firebird_basic
.PHONY: firebird_embedded firebird_server classic_programs super_programs
.PHONY: firebird_super firebird_classic
# The main targets, firebird_embedded and firebird_server
firebird : firebird_embedded
firebird_embedded: firebird_basic classic_targets
firebird_server: firebird_basic super_targets
# To help those remember to 'older' forms
firebird_classic: firebird_embedded
firebird_super: firebird_server
# In building embedded/server version some targets are common, mainly the
# boot kit, isc4.gdb database and messages files. Boot builds a number of
# static programs gpre_static gbak_static isql_static though an involved
# process. These are used to compile the rest of the source, as it saves
# some complications particularly for super in needing to start the server
# that you are currently building. MOD 28-July-2002
firebird_basic: firebird_boot basic_targets
firebird_boot: updateBuildNum boot_phase1 boot_phase2
#----------------------------------------------------------------------------
# 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 CVS checkins.
#
.PHONY: updateBuildNum
updateBuildNum : jrd/build_no.h
jrd/build_no.h : misc/writeBuildNum.sh
(cd ..; ./src/misc/writeBuildNum.sh rebuildHeader)
#---------------------------------------------------------------------------
# Phase1: make a gpre_static from scratch so we can parse .e and .epp files
# to build the rest of the system. It goes in two bits make a real simple
# gpre_boot one and use that to build a gpre_static one.
#
# gpre_static has a fair bit more in it and we have now actually built most
# of the libraries. With gpre_static we now have enough to build gbak and
# start restoring databases.
#
# if $(BIN)/gpre_static exists then phase1 is complete. phase1 does not then
# rebuild automatically gpre_static if some of it's dependancies change. We
# only need on gpre_static to boot after we have one we don't care.
# (If you really want to rebuild it you need to remove the executable file
# $(BIN)/gpre_static).
#
.PHONY: boot_phase1 boot_phase1_build
.PHONY: libfbcommon libfbstatic gpre_boot gpre_static
boot_phase1: $(GPRE_STATIC)
$(GPRE_STATIC):
$(MAKE) boot_phase1_build
boot_phase1_build: libfbcommon gpre_boot libfbstatic gpre_static @MANAGER_PROCESS_TARGET@
libfbcommon:
$(MAKE) -f $(MAKE_ROOT)/Makefile.libfbcommon $@
gpre_boot:
$(MAKE) -f $(MAKE_ROOT)/Makefile.boot.gpre $@
libfbstatic:
$(MAKE) -f $(MAKE_ROOT)/Makefile.libfbstatic $@
gpre_static:
$(MAKE) -f $(MAKE_ROOT)/Makefile.static.gpre $@
# The lock manager for classic (embedded)
lock_mgr :
$(MAKE) -f $(MAKE_ROOT)/Makefile.embed.lockmgr $@
#--------------------------------------------------------------------------
#Phase2: We can now start build some of the static utilities needed to build
# an empty database (lock manager and create_db). Then we rebuild all the
# items we have built in the static library into a dynamic library.
# (It's probably possible to directly build the dynamic library - but thats
# for another day). We still don't have the security database stuff.
#
# Phase2 is complete with the building of an isc4.gdb user store database
# in order to do that isql and gdef tools need to be built without security
# to do that a special alt_boot.o is inserted into the shared library.
# Again once isc4.gdb is built then were not too worried about the components
# (in fact some of them have to be rebuilt again to incorperate the security
# module)
#
.PHONY: create_db empty_db gbak_static isql_static refDatabases
boot_phase2 : $(ISC_GDB)
$(ISC_GDB):
$(MAKE) boot_phase2_build
boot_phase2_build: create_db empty_db gbak_static isql_static
create_db:
$(MAKE) -f $(MAKE_ROOT)/Makefile.embed.util $@
gbak_static: @MANAGER_PROCESS_TARGET@
$(MAKE) -f $(MAKE_ROOT)/Makefile.static.gbak $@
isql_static:
$(MAKE) -f $(MAKE_ROOT)/Makefile.static.isql $@
empty_db :
$(MAKE) -f $(MAKE_ROOT)/Makefile.refDatabases $@
ref_databases : gbak_static
$(MAKE) -f $(MAKE_ROOT)/Makefile.refDatabases $@
isc4.gdb: gdef isql # build the security database
$(MAKE) -C utilities $@
#--------------------------------------------------------------------------
#Phase3: Now we start building the tools we are actually going to use
# against the shared library.
# an empty database (lock manager and create_db). Then we rebuild all the
# items we have built in the static library into a dynamic library.
# (It's probably possible to directly build the dynamic library - but thats
# for another day). We still don't have the security database stuff.
#
# Notes:
# mainly we need gdef and isql to be able to build isc4.gdb. I wonder
# if we could reduce the tricky dependancy by restoring the isc4.gdb database
# earlier, then perhaps we could build the jrdlib in one step and include
# the security bits and pieces.
.PHONY: ref_databases msgs msgs_intl intl extlib includes
basic_targets: ref_databases msgs msgs_intl intl extlib includes examples \
otherfiles
msgs: # messages file for user $(FIREBIRD)/firebird.msg
$(MAKE) -f $(MAKE_ROOT)/Makefile.msgs $@
msgs_intl: # international version of msgs file
$(MAKE) -f $(MAKE_ROOT)/Makefile.msgs $@
intl: # international lang components $(FIREBIRD)/intl/
$(MAKE) -f $(MAKE_ROOT)/Makefile.intl
extlib: # external programs than can be called
$(MAKE) -f $(MAKE_ROOT)/Makefile.extlib
# distribution header include files
includes: include_generic
# examples still need a good makefile to ship with them
examples:
# $(MAKE) -C ../gen/v5_examples -f $(MAKE_ROOT)/Makefile.v5_examples
# $(MAKE) -f $(MAKE_ROOT)/Makefile.v5_examples
otherfiles: misc_files script_files
#_ Embedded Firebird Targets (Classic)_______________________________________
.PHONY: libfbembed inet_server embed_gfix embed_gbak embed_isql
.PHONY: embed_gpre embed_util
classic_targets: libfbembed inet_server embed_gfix embed_gbak embed_isql \
2002-10-02 14:43:16 +02:00
embed_gpre embed_util embed_gdef
libfbembed:
$(MAKE) -f $(MAKE_ROOT)/Makefile.libfbembed $@
inet_server:
$(MAKE) -f $(MAKE_ROOT)/Makefile.inet_server
embed_gfix:
$(MAKE) -f $(MAKE_ROOT)/Makefile.embed.gfix
embed_gbak:
$(MAKE) -f $(MAKE_ROOT)/Makefile.embed.gbak
embed_isql:
$(MAKE) -f $(MAKE_ROOT)/Makefile.embed.isql
embed_gpre:
$(MAKE) -f $(MAKE_ROOT)/Makefile.embed.gpre
embed_util:
$(MAKE) -f $(MAKE_ROOT)/Makefile.embed.util
embed_gdef:
$(MAKE) -f $(MAKE_ROOT)/Makefile.embed.gdef
embed_qli:
$(MAKE) -f $(MAKE_ROOT)/Makefile.embed.qli
#_ Firebird Server Targets (super and super client)__________________________
.PHONY: libfbserver fbserver
.PHONY: libfbclient client_gfix client_gbak client_isql client_gpre client_util
super_targets: libfbserver fbserver libfbclient client_gfix client_gbak \
2002-10-02 14:43:16 +02:00
client_isql client_gpre client_util client_gdef
libfbserver:
$(MAKE) -f $(MAKE_ROOT)/Makefile.libfbserver $@
fbserver:
$(MAKE) -f $(MAKE_ROOT)/Makefile.fbserver $@
libfbclient:
$(MAKE) -f $(MAKE_ROOT)/Makefile.libfbclient $@
client_gfix:
$(MAKE) -f $(MAKE_ROOT)/Makefile.client.gfix
client_gbak:
$(MAKE) -f $(MAKE_ROOT)/Makefile.client.gbak
client_gpre:
$(MAKE) -f $(MAKE_ROOT)/Makefile.client.gpre
client_isql:
$(MAKE) -f $(MAKE_ROOT)/Makefile.client.gbak
client_util:
$(MAKE) -f $(MAKE_ROOT)/Makefile.client.util
client_gdef:
$(MAKE) -f $(MAKE_ROOT)/Makefile.client.gdef
#sysdba_user gstat: # add sysdba user and build gstat program
# $(MAKE) -C utilities $@
#---------------------------------------------------------------------------
# This target builds the include files for disttribution 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= $(FIREBIRD)/include
include_generic: $(INCLUDE_DEST)/ib_util.h \
$(INCLUDE_DEST)/gds.h \
$(INCLUDE_DEST)/ibase.h
# ib_util.h actually is a marker for a number of headers
# All these files are #includes in gds.h here we cat them all together
# and remove the embedded #includes to make it simpler for external usage.
GDS_ExtraFiles = misc/gds_header.txt include/fb_types.h \
jrd/ibase.h jrd/blr.h include/gen/iberror.h \
jrd/gdsold.h include/gen/codes.h
SRC_GDS_ExtraFiles = $(addprefix $(SRC_ROOT)/, $(GDS_ExtraFiles))
$(INCLUDE_DEST)/gds.h: $(SRC_GDS_ExtraFiles)
$(CAT) $^ \
| grep -v '^#include "../jrd/blr.h"' \
| grep -v '^#include "fb_types.h"' \
| grep -v '^#include "gen/iberror.h"' \
| grep -v '^#include "iberror.h"' \
| grep -v '^#include "gen/codes.h"' > $@
IBASE_ExtraFiles = jrd/blr.h include/gen/iberror.h
SRC_IBASE_ExtraFiles = $(addprefix $(SRC_ROOT)/, $(IBASE_ExtraFiles))
$(INCLUDE_DEST)/ibase.h: $(SRC_IBASE_ExtraFiles)
$(CAT) $^ \
| grep -v '^#include "../jrd/blr.h"' \
| grep -v '^#include "fb_types.h"' \
| grep -v '^#include "gen/iberror.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 \
jrd/perf.h \
jrd/blr.h \
include/gen/iberror.h
SRC_OtherDistribHeaders = $(addprefix $(SRC_ROOT)/, $(OtherDistribHeaders))
$(INCLUDE_DEST)/ib_util.h : $(SRC_OtherDistribHeaders)
$(CP) $^ $(INCLUDE_DEST)/
# There are also gds*f and gds*ada header files around if someone
# wants them. You might need to hunt around in the old cvs tree for them.
#___________________________________________________________________________
# When the msgs.gdb dataabse has changed with new messages a number of header
# files need to be regenerated. This is the target to do it. These new
# header files (placed in include/gen) then need to be committed since they
# are not generally rebuilt from scratch
rebuild_codes :
$(MAKE) -C jrd $@
#___________________________________________________________________________
# Install generic files.
CLASSIC_MiscFiles = firebird.xinetd
SUPER_MiscFiles = firebird.init.d.generic firebird.init.d.mandrake README
INSTALL_MiscFiles = $(addprefix $(FIREBIRD)/misc/, $(CLASSIC_MiscFiles))
#INSTALL_MiscFiles = $(addprefix $(FIREBIRD)/misc/, $(SUPER_MiscFiles))
misc_files : $(INSTALL_MiscFiles)
$(FIREBIRD)/misc/% :: $(SRC_ROOT)/install/misc/%
$(CP) $^ $@
#___________________________________________________________________________
#
CLASSIC_ScriptFiles = CSchangeRunUser.sh CSrestoreRootRunUser.sh changeDBAPassword.sh
SUPER_ScriptFiles = SSchangeRunUser.sh SSrestoreRootRunUser.sh changeDBAPassword.sh
INSTALL_ScriptFiles = $(addprefix $(BIN)/, $(CLASSIC_ScriptFiles))
#INSTALL_ScriptFiles = $(addprefix $(BIN)/, $(SUPER_ScriptFiles))
script_files : $(INSTALL_ScriptFiles)
$(BIN)/% :: $(SRC_ROOT)/install/classic/%
$(CP) $^ $@
chmod ugo=rx $@
$(BIN)/% :: $(SRC_ROOT)/install/super/%
$(CP) $^ $@
chmod ugo=rx $@
$(BIN)/% :: $(SRC_ROOT)/install/misc/%
$(CP) $^ $@
chmod ugo=rx $@
# Just a note that some of the script files (xinetd/firebird etc) need to h
# have their paths changed in their shell scripts.
#___________________________________________________________________________
#
.PHONY: install
install:
$(MAKE) -C install $@
packages:
$(MAKE) -C install $@
installclassic:
$(SRC_ROOT)/install/classic/CSpreinstall.sh
# $(SRC_ROOT)/install/classic/CSinstall.sh
# $(SRC_ROOT)/install/classic/CSpostinstall.sh
dist:
$(MAKE) -C install $@
#___________________________________________________________________________
# This one needs some more work.
clean: clean_objs clean_libs clean_exes clean_dbs clean_dependancies clean_build
clean_objs:
-echo $(GDSLIB_Objects) | xargs rm -f
-echo $(GDSLIB_SharedObjects) | xargs rm -f
clean_libs:
-rm $(GDSLIB_LA)
-rm $(JRD_BOOT)
clean_exes:
-rm -f $(BIN)/*
# -rm $(Executables)
clean_dbs:
-rm -f refDatabases/*\.gdb
# Clear out dependancies files created by the gcc compiler
# since when .o and other files are deleted the dependant
# targets need to be recalculated
# MOD 10-July-2002
clean_dependancies:
rm -f `find $(GEN_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
# MOD 11-July-2002
clean_build:
rm -f `find $(GEN_ROOT)/firebird -type f -print`
# rm -f $(GDSLIB_OBJECTS) $(GDSLIB_PHASE3_OBJECTS)
darwin_installer_common: force
$(QUIET_ECHO) "Building Firebird Installer..."
mkdir -p $(OBJS)/firebird/installer_tmp
$(MV) $(OBJS)/firebird/Firebird.framework $(OBJS)/firebird/installer_tmp
$(CP) $(SOURCE)/sandbox/bellardo/darwin/makefile \
$(OBJS)/firebird/installer_tmp
ln -s $(OBJS)/firebird/bellardo/darwin \
$(OBJS)/firebird/installer_tmp/files
ln -s ../.. $(OBJS)/firebird/installer_tmp/source
$(CD) $(OBJS)/firebird/installer_tmp && $(MAKE) install_package
$(RM) -rf $(OBJS)/firebird/installer_tmp
-$(RM) -rf $(OBJS)/firebird/Firebird.framework
darwin_installer: darwin_installer_common darwin_framework
super_darwin_installer: darwin_installer_common ss_darwin_framework
darwin_framework: force
$(QUIET_ECHO) "Building Classic Firebird Framework..."
$(RM) -rf $(OBJS)/firebird/Firebird2.framework
$(MAKE) -f $(SOURCE)/sandbox/bellardo/darwin/FirebirdFramework.make \
framework
ss_darwin_framework: force
$(QUIET_ECHO) "Building Super Server Firebird Framework..."
$(RM) -rf $(OBJS)/firebird/Firebird.framework
$(MAKE) -f $(SOURCE)/sandbox/bellardo/darwin/FirebirdFramework.make \
super_framework
#____________________________________________________________________________
# The installations need to find a better and possibly linux
# specific home. The tar installs should probably work with
# other unix type of systems.
# I have seperated super and classic out since I needed different
# files in each case.
miscFiles: force
$(QUIET_ECHO) "Building miscellaneous install files..."
mkdir -p $(OBJS)/firebird/misc
-$(CP) $(SOURCE)/makefiles/install.unix $(OBJS)/firebird/install
-$(CP) $(SOURCE)/makefiles/servers.isc $(OBJS)/firebird
-$(CP) $(SOURCE)/makefiles/inetd.conf.unx $(OBJS)/firebird/inetd.conf.isc
-$(CP) $(SOURCE)/makefiles/services.isc $(OBJS)/firebird
-$(CP) $(SOURCE)/makefiles/sys.conf.isc $(OBJS)/firebird
-$(CP) $(SOURCE)/sandbox/skywalker/install/misc/firebird.xinetd $(OBJS)/firebird/misc
superMiscFiles: force
$(QUIET_ECHO) "Building miscellaneous install files..."
$(CP) source/$(SYSTEM)/install source/interbase
-$(CP) source/$(SYSTEM)/servers.isc source/interbase
$(CP) source/$(SYSTEM)/inetd.conf.isc source/interbase
$(CP) source/$(SYSTEM)/original/services.isc source/interbase
-$(CP) source/$(SYSTEM)/sys.conf.isc source/interbase
mkdir -p source/interbase/misc
$(CP) firebird/skywalker/install/misc/firebird.init.d.* source/interbase/misc
#install: force
# $(MAKE) -f firebird/skywalker/install/Makefile install
runclassicinstall: force
$(MAKE) -f firebird/skywalker/install/Makefile runclassicinstall
classicpackages: force
$(MAKE) -f firebird/skywalker/install/Makefile classicpackages
classictarfile: force
$(MAKE) -f firebird/skywalker/install/Makefile classictarfile
classicrpmfile: force
$(MAKE) -f firebird/skywalker/install/Makefile classicrpmfile
superpackages: force
$(MAKE) -f firebird/skywalker/install/Makefile superpackages
supertarfile: force
$(MAKE) -f firebird/skywalker/install/Makefile supertarfile
superrpmfile: force
$(MAKE) -f firebird/skywalker/install/Makefile superrpmfile