Makefile.shlib
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:9k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. #-------------------------------------------------------------------------
  2. #
  3. # Makefile.shlib
  4. #    Common rules for building shared libraries
  5. #
  6. # Copyright (c) 1998, Regents of the University of California
  7. #
  8. # IDENTIFICATION
  9. #    $Header: /usr/local/cvsroot/pgsql/src/Makefile.shlib,v 1.12.2.3 1999/07/30 04:13:44 scrappy Exp $
  10. #
  11. #-------------------------------------------------------------------------
  12. # This file should be included by any Postgres module Makefile that wants
  13. # to build a shared library (if possible for the current platform).
  14. # A static library is also built from the same object files.
  15. # RESTRICTION: only one library can be built per makefile...
  16. # Before including this file, the module Makefile must define these variables:
  17. # NAME Name of library to build (no suffix nor "lib" prefix)
  18. # SO_MAJOR_VERSION Major version number to use for shared library
  19. # SO_MINOR_VERSION Minor version number to use for shared library
  20. # OBJS List of object files to include in library
  21. # SHLIB_LINK If shared library relies on other libraries, additional
  22. # stuff to put in its link command
  23. # (If you want a patchlevel, include it in SO_MINOR_VERSION, eg, "6.2".)
  24. #
  25. # The module Makefile must also include $(SRCDIR)/Makefile.global before
  26. # including this file (Makefile.global sets PORTNAME and other needed symbols).
  27. #
  28. # The first rule in this file is a rule for "all", which causes both the
  29. # static and shared libraries to be built (as well as all the object files).
  30. # If you have other files that need to be made before building object files
  31. # and libraries, put another rule for "all" before you include this file.
  32. #
  33. # Your install rule should look like
  34. #
  35. # install: install-headers install-lib $(install-shlib-dep)
  36. #
  37. # where install-headers is only needed if you have header files to install
  38. # (and, of course, it has to be provided by your makefile).  The rules
  39. # install-lib and install-shlib are provided by this makefile --- they
  40. # automatically install the plain and shared libraries into $(LIBDIR).
  41. # install-shlib-dep is a variable that expands to install-shlib if the
  42. # shared library needs to be installed, empty if not.
  43. #
  44. # Got that?  Look at src/interfaces/libpq/Makefile.in for an example.
  45. # shlib and install-shlib-dep default to empty, and stay that way if we're
  46. # on a platform where we don't know how to build a shared library.
  47. shlib := 
  48. install-shlib-dep :=
  49. # For each platform we support shlibs on, set shlib and install-shlib-dep,
  50. # and update flags as needed to build a shared lib.  Note we depend on
  51. # Makefile.global (or really Makefile.port) to supply DLSUFFIX and other
  52. # symbols.
  53. # Try to keep the sections in some kind of order, folks...
  54. ifeq ($(PORTNAME), aix)
  55.   install-shlib-dep := install-shlib
  56.   shlib := lib$(NAME)$(DLSUFFIX)
  57.   SHLIB_LINK += -lc
  58. endif
  59. ifeq ($(PORTNAME), bsd)
  60.   ifdef BSD_SHLIB
  61.     install-shlib-dep := install-shlib
  62.     shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  63.     ifdef ELF_SYSTEM
  64.       LDFLAGS_SL := -x -Bshareable -soname $(shlib)
  65.     else
  66.       LDFLAGS_SL := -x -Bshareable -Bforcearchive
  67.     endif
  68.     CFLAGS += $(CFLAGS_SL)
  69.   endif
  70. endif
  71. ifeq ($(PORTNAME), bsdi)
  72.   ifdef BSD_SHLIB
  73.     ifeq ($(DLSUFFIX), .so)
  74.       install-shlib-dep := install-shlib
  75.       shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  76.       LDFLAGS_SL += -shared
  77.       CFLAGS += $(CFLAGS_SL)
  78.     endif
  79.     ifeq ($(DLSUFFIX), .o)
  80.       install-shlib-dep := install-shlib
  81.       shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  82.       LD := shlicc
  83.       LDFLAGS_SL   += -O -r
  84.       CFLAGS += $(CFLAGS_SL)
  85.     endif
  86.   endif
  87. endif
  88. ifeq ($(PORTNAME), freebsd)
  89.   ifdef BSD_SHLIB
  90.     install-shlib-dep := install-shlib
  91.     ifdef ELF_SYSTEM
  92.       shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
  93.       LDFLAGS_SL := -x -shared -soname $(shlib)
  94.     else
  95.       shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  96.       LDFLAGS_SL := -x -Bshareable -Bforcearchive
  97.     endif
  98.     CFLAGS += $(CFLAGS_SL)
  99.   endif
  100. endif
  101. ifeq ($(PORTNAME), hpux)
  102.   install-shlib-dep := install-shlib
  103. # HPUX doesn't believe in version numbers for shlibs
  104.   shlib := lib$(NAME)$(DLSUFFIX)
  105.   LDFLAGS_SL := -b
  106.   CFLAGS += $(CFLAGS_SL)
  107. endif
  108. ifeq ($(PORTNAME), irix5)
  109.   install-shlib-dep := install-shlib
  110.   shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  111.   LDFLAGS_SL := -shared
  112.   CFLAGS += $(CFLAGS_SL)
  113. endif
  114. ifeq ($(PORTNAME), linux)
  115.   install-shlib-dep := install-shlib
  116.   shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  117.   LDFLAGS_SL := -Bdynamic -shared -soname $(shlib)
  118.   LDFLAGS_ODBC := -Bsymbolic -lc -lm
  119.   SHLIB_LINK += -lc
  120.   CFLAGS += $(CFLAGS_SL)
  121. endif
  122. ifeq ($(PORTNAME), solaris_i386)
  123.   install-shlib-dep := install-shlib
  124.   shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  125.   LDFLAGS_SL := -G
  126.   SHLIB_LINK += -ldl -lsocket -lresolv -lnsl -lm -lc
  127.   CFLAGS += $(CFLAGS_SL)
  128. endif
  129. ifeq ($(PORTNAME), solaris_sparc)
  130.   install-shlib-dep := install-shlib
  131.   shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  132.   LDFLAGS_SL := -G
  133.   SHLIB_LINK += -ldl -lsocket -lresolv -lnsl -lm -lc
  134.   CFLAGS += $(CFLAGS_SL)
  135. endif
  136. ifeq ($(PORTNAME), alpha)
  137.   install-shlib-dep := install-shlib
  138.   shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  139.   LDFLAGS_SL += -shared -expect_unresolved '*'
  140. endif
  141. ifeq ($(PORTNAME), svr4)
  142.   install-shlib-dep := install-shlib
  143.   shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  144.   LDFLAGS_SL := -G
  145.   CFLAGS += $(CFLAGS_SL)
  146. endif
  147. ifeq ($(PORTNAME), univel)
  148.   install-shlib-dep := install-shlib
  149.   shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  150.   LDFLAGS_SL := -G -z text
  151.   CFLAGS += $(CFLAGS_SL)
  152.   ifeq ($(CXX), CC)
  153.     CXXFLAGS += -Xw
  154.     COMPILE.cc = $(CXX) $(CXXFLAGS:ll,alloca=ll) $(CPPFLAGS) $(TARGET_ARCH) -c
  155.   endif
  156. endif
  157. ifeq ($(PORTNAME), unixware)
  158.   install-shlib-dep := install-shlib
  159.   shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
  160.   LDFLAGS_SL := -G -z text
  161.   CFLAGS += $(CFLAGS_SL)
  162.   ifeq ($(CXX), CC)
  163.     CXXFLAGS += -Xw
  164.     COMPILE.cc = $(CXX) $(CXXFLAGS:ll,alloca=ll) $(CPPFLAGS) $(TARGET_ARCH) -c
  165.   endif
  166. endif
  167. ifeq ($(PORTNAME), win)
  168.   install-shlib-dep := install-shlib
  169.   shlib := $(NAME)$(DLSUFFIX)
  170. endif
  171. # Default target definition.  Note shlib is empty if not building a shlib.
  172. all: lib$(NAME).a $(shlib)
  173. # Rules to build regular and shared libraries
  174. ifneq ($(PORTNAME), win)
  175. lib$(NAME).a: $(OBJS)
  176. ifdef MK_NO_LORDER
  177. $(AR) $(AROPT) $@ $(OBJS) 
  178. else
  179. $(AR) $(AROPT) $@ `lorder $(OBJS) | tsort`
  180. endif
  181. $(RANLIB) $@
  182. endif
  183. ifneq ($(shlib),)
  184. ifneq ($(PORTNAME), win)
  185. ifneq ($(PORTNAME), aix)
  186. # Normal case
  187. $(shlib): $(OBJS)
  188. $(LD) $(LDFLAGS_SL) -o $@ $(OBJS) $(SHLIB_LINK)
  189. if [ "$(shlib)" != "lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)" ]; then 
  190. rm -f lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION); 
  191. $(LN_S) $(shlib) lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION); 
  192. fi
  193. if [ "$(shlib)" != "lib$(NAME)$(DLSUFFIX)" ]; then 
  194. rm -f lib$(NAME)$(DLSUFFIX); 
  195. $(LN_S) $(shlib) lib$(NAME)$(DLSUFFIX); 
  196. fi
  197. else
  198. # AIX case
  199. $(shlib): lib$(NAME).a
  200. $(MKLDEXPORT) lib$(NAME).a $(LIBDIR) > lib$(NAME)$(EXPSUFF)
  201. $(LD) -H512 -bM:SRE -bI:$(SRCDIR)/backend/$(POSTGRES_IMP) -bE:lib$(NAME)$(EXPSUFF) -o $@ $< $(LDFLAGS) $(SHLIB_LINK)
  202. endif
  203. else
  204. # WIN case
  205. $(shlib) lib$(NAME).a: $(OBJS) $(SRCDIR)/utils/dllinit.o
  206. $(DLLTOOL) --export-all --output-def $(NAME).def $(OBJS)
  207. $(DLLWRAP) -o $(shlib) --dllname $(shlib) --def $(NAME).def $(OBJS) $(SRCDIR)/utils/dllinit.o $(DLLINIT) $(SHLIB_LINK)
  208. $(DLLTOOL) --dllname $(shlib) --def $(NAME).def --output-lib lib$(NAME).a
  209. $(SRCDIR)/utils/dllinit.o: $(SRCDIR)/utils/dllinit.c
  210. $(MAKE) -C $(SRCDIR)/utils dllinit.o
  211. endif
  212. endif
  213. # Rules to install regular and shared libraries
  214. .PHONY: all install-lib install-shlib
  215. install-lib: lib$(NAME).a
  216. $(INSTALL) $(INSTL_LIB_OPTS) lib$(NAME).a $(LIBDIR)/lib$(NAME).a
  217. install-shlib: $(shlib)
  218. $(INSTALL) $(INSTL_SHLIB_OPTS) $(shlib) $(LIBDIR)/$(shlib)
  219. ifneq ($(PORTNAME), win)
  220. if [ "$(shlib)" != "lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)" ]; then 
  221. cd $(LIBDIR); 
  222. rm -f lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION); 
  223. $(LN_S) $(shlib) lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION); 
  224. fi
  225. if [ "$(shlib)" != "lib$(NAME)$(DLSUFFIX)" ]; then 
  226. cd $(LIBDIR); 
  227. rm -f lib$(NAME)$(DLSUFFIX); 
  228. $(LN_S) $(shlib) lib$(NAME)$(DLSUFFIX); 
  229. fi
  230. endif
  231. # Rule to delete shared library during "make clean"
  232. .PHONY: clean-shlib
  233. clean-shlib:
  234. rm -f $(shlib) lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION) lib$(NAME)$(DLSUFFIX)