diff options
| author | Tom Lane | 1998-10-19 00:00:51 +0000 |
|---|---|---|
| committer | Tom Lane | 1998-10-19 00:00:51 +0000 |
| commit | 6d98d3737ab2fc6883c42885b128d4ace281db6d (patch) | |
| tree | 89fea790967065175f0b59ba1dc5ee1a091cf450 /src/Makefile.shlib | |
| parent | 6e13e0c68454939d1a3a91ece610b5af29a7d100 (diff) | |
Centralized shared-library build knowledge in a new file,
src/Makefile.shlib. Updated all the makefiles that try to build shlibs
to include that file instead of having duplicate (and mostly incomplete)
copies of shared-library options. It works on HPUX, a lot better than it
did before in fact, but there's a chance I broke some other platforms.
At least now you only have to fix one place not six...
Diffstat (limited to 'src/Makefile.shlib')
| -rw-r--r-- | src/Makefile.shlib | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/src/Makefile.shlib b/src/Makefile.shlib new file mode 100644 index 00000000000..d1557f0128b --- /dev/null +++ b/src/Makefile.shlib @@ -0,0 +1,180 @@ +#------------------------------------------------------------------------- +# +# Makefile.shlib +# Common rules for building shared libraries +# +# Copyright (c) 1998, Regents of the University of California +# +# IDENTIFICATION +# $Header: /cvsroot/pgsql/src/Makefile.shlib,v 1.1 1998/10/19 00:00:40 tgl Exp $ +# +#------------------------------------------------------------------------- + +# This file should be included by any Postgres module Makefile that wants +# to build a shared library (if possible for the current platform). +# A static library is also built from the same object files. +# RESTRICTION: only one library can be built per makefile... + +# Before including this file, the module Makefile must define these variables: +# NAME Name of library to build (no suffix nor "lib" prefix) +# SO_MAJOR_VERSION Major version number to use for shared library +# SO_MINOR_VERSION Minor version number to use for shared library +# OBJS List of object files to include in library +# SHLIB_LINK If shared library relies on other libraries, additional +# stuff to put in its link command +# (If you want a patchlevel, include it in SO_MINOR_VERSION, eg, "6.2".) +# +# The module Makefile must also include $(SRCDIR)/Makefile.global before +# including this file (Makefile.global sets PORTNAME and other needed symbols). +# +# The first rule in this file is a rule for "all", which causes both the +# static and shared libraries to be built (as well as all the object files). +# If you have other files that need to be made before building object files +# and libraries, put another rule for "all" before you include this file. +# +# Your install rule should look like +# +# install: install-headers install-lib $(install-shlib-dep) +# +# where install-headers is only needed if you have header files to install +# (and, of course, it has to be provided by your makefile). The rules +# install-lib and install-shlib are provided by this makefile --- they +# automatically install the plain and shared libraries into $(LIBDIR). +# install-shlib-dep is a variable that expands to install-shlib if the +# shared library needs to be installed, empty if not. +# +# Got that? Look at src/interfaces/libpq/Makefile.in for an example. + + +# shlib and install-shlib-dep default to empty, and stay that way if we're +# on a platform where we don't know how to build a shared library. +shlib := +install-shlib-dep := + +# For each platform we support shlibs on, set shlib and install-shlib-dep, +# and update flags as needed to build a shared lib. Note we depend on +# Makefile.global (or really Makefile.port) to supply DLSUFFIX and other +# symbols. + +ifeq ($(PORTNAME), bsd) + ifdef BSD_SHLIB + install-shlib-dep := install-shlib + shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) + LDFLAGS_SL := -x -Bshareable -Bforcearchive + CFLAGS += $(CFLAGS_SL) + endif +endif + +ifeq ($(PORTNAME), bsdi) + ifdef BSD_SHLIB + ifeq ($(DLSUFFIX), .so) + install-shlib-dep := install-shlib + shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) + LDFLAGS_SL += -shared + CFLAGS += $(CFLAGS_SL) + endif + ifeq ($(DLSUFFIX), .o) + install-shlib-dep := install-shlib + shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) + LD := shlicc + LDFLAGS_SL += -O -r + CFLAGS += $(CFLAGS_SL) + endif + endif +endif + +ifeq ($(PORTNAME), hpux) + install-shlib-dep := install-shlib +# HPUX doesn't believe in version numbers for shlibs + shlib := lib$(NAME)$(DLSUFFIX) + LDFLAGS_SL := -b + CFLAGS += $(CFLAGS_SL) +endif + +ifeq ($(PORTNAME), linux) + install-shlib-dep := install-shlib + shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) + LDFLAGS_SL := -shared -soname $(shlib) + CFLAGS += $(CFLAGS_SL) +endif + +ifeq ($(PORTNAME), solaris_i386) + install-shlib-dep := install-shlib + shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) + LDFLAGS_SL := -G + CFLAGS += $(CFLAGS_SL) +endif + +ifeq ($(PORTNAME), solaris_sparc) + install-shlib-dep := install-shlib + shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) + LDFLAGS_SL := -G + CFLAGS += $(CFLAGS_SL) +endif + +ifeq ($(PORTNAME), svr4) + install-shlib-dep := install-shlib + shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) + LDFLAGS_SL := -G + CFLAGS += $(CFLAGS_SL) +endif + +ifeq ($(PORTNAME), univel) + install-shlib-dep := install-shlib + shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) + LDFLAGS_SL := -G -z text + CFLAGS += $(CFLAGS_SL) + ifeq ($(CXX), CC) + CXXFLAGS += -Xw + COMPILE.cc = $(CXX) $(CXXFLAGS:ll,alloca=ll) $(CPPFLAGS) $(TARGET_ARCH) -c + endif +endif + +ifeq ($(PORTNAME), unixware) + install-shlib-dep := install-shlib + shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION) + LDFLAGS_SL := -G -z text + CFLAGS += $(CFLAGS_SL) + ifeq ($(CXX), CC) + CXXFLAGS += -Xw + COMPILE.cc = $(CXX) $(CXXFLAGS:ll,alloca=ll) $(CPPFLAGS) $(TARGET_ARCH) -c + endif +endif + + +# Default target definition. Note shlib is empty if not building a shlib. + +all: lib$(NAME).a $(shlib) + +# Rules to build regular and shared libraries + +lib$(NAME).a: $(OBJS) +ifdef MK_NO_LORDER + $(AR) $(AROPT) $@ $(OBJS) +else + $(AR) $(AROPT) $@ `lorder $(OBJS) | tsort` +endif + $(RANLIB) $@ + +$(shlib): $(OBJS) + $(LD) $(LDFLAGS_SL) -o $@ $(OBJS) $(SHLIB_LINK) + +# Rules to install regular and shared libraries + +.PHONY: all install-lib install-shlib + +install-lib: lib$(NAME).a + $(INSTALL) $(INSTL_LIB_OPTS) lib$(NAME).a $(LIBDIR)/lib$(NAME).a + +install-shlib: $(shlib) + $(INSTALL) $(INSTL_SHLIB_OPTS) $(shlib) $(LIBDIR)/$(shlib) + if [ "$(shlib)" != "lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)" ]; then \ + cd $(LIBDIR); \ + rm -f lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION); \ + $(LN_S) $(shlib) lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION); \ + fi + if [ "$(shlib)" != "lib$(NAME)$(DLSUFFIX)" ]; then \ + cd $(LIBDIR); \ + rm -f lib$(NAME)$(DLSUFFIX); \ + $(LN_S) $(shlib) lib$(NAME)$(DLSUFFIX); \ + fi |
