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

数据库系统

开发平台:

Unix_Linux

  1. #-------------------------------------------------------------------------
  2. #
  3. # Makefile--
  4. #   Makefile for the postgres backend (and the postmaster)
  5. #
  6. # Copyright (c) 1994, Regents of the University of California
  7. #
  8. # Functional notes:
  9. #
  10. #   Parallel make:  
  11. #
  12. #     This make file is set up so that you can do a parallel make (with 
  13. #     the --jobs option of make) and make multiple subdirectories at 
  14. #     once.  
  15. #
  16. #     However, the subdirectory make files are not so careful.
  17. #     Normally, the --jobs option would get passed down to those
  18. #     subdirectory makes, like any other make option, and they would
  19. #     fail.  But there's a trick: Put a value (max number of
  20. #     processes) on the --jobs option, e.g. --jobs=4.  Now, due to a
  21. #     special feature of make, the --jobs option will not get passed
  22. #     to the subdirectory makes.  (make does this because if you only
  23. #     want 4 tasks running, then splitting the subdirectory makes into
  24. #     multiple tasks would violate your wishes).
  25. #
  26. #
  27. #
  28. # Implementation notes:
  29. #
  30. #   We don't use $(LD) for linking.  We use $(CC) instead.  This is because
  31. #   the $(CC) program apparently can do linking too, and it has certain
  32. #   thinks like default options and search paths for libraries set up for 
  33. #   it that the more primitive $(LD) doesn't have.
  34. #
  35. #
  36. # IDENTIFICATION
  37. #    $Header: /usr/local/cvsroot/pgsql/src/backend/Makefile,v 1.38 1999/03/07 23:05:56 tgl Exp $
  38. #
  39. #-------------------------------------------------------------------------
  40. SRCDIR = ..
  41. include ../Makefile.global
  42. DIRS = access bootstrap catalog commands executor lib libpq 
  43. main parser nodes optimizer port postmaster regex rewrite 
  44. storage tcop utils
  45. ifdef TIOGA
  46. DIRS += tioga
  47. endif
  48. OBJS = $(DIRS:%=%/SUBSYS.o)
  49. # kerberos flags
  50. ifdef KRBVERS
  51. CFLAGS+= $(KRBFLAGS)
  52. LDFLAGS+= $(KRBLIBS)
  53. endif
  54. ifeq ($(MAKE_DLL), true)
  55. DLLOBJS=$(OBJS)
  56. DLLOBJS+= ../utils/version.o
  57. DLLLIBS= -L/usr/local/lib -lcygipc -lcrypt -lcygwin -lkernel32
  58. postgres.def: $(DLLOBJS)
  59. $(DLLTOOL) --export-all --output-def $@ $(DLLOBJS)
  60. libpostgres.a: $(DLLOBJS) ../utils/dllinit.o postgres.def
  61. $(DLLTOOL) --dllname postgres.exe --def postgres.def --output-lib $@
  62. endif
  63. all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source 
  64. global1.description local1_template1.description
  65. ifneq ($(PORTNAME), win)
  66. postgres: fmgr.h $(OBJS) ../utils/version.o
  67. $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS)
  68. else
  69. postgres: $(DLLOBJS) ../utils/dllinit.o postgres.def libpostgres.a
  70. dlltool --dllname $@$(X) --output-exp $@.exp --def postgres.def
  71. gcc -g -o $@$(X) -Wl,--base-file,$@.base $@.exp $(DLLOBJS) $(DLLLIBS)
  72. dlltool --dllname $@$(X) --base-file $@.base --output-exp $@.exp --def postgres.def
  73. gcc -g -o $@$(X) $@.exp $(DLLOBJS) $(DLLLIBS)
  74. rm $@.exp $@.base
  75. endif
  76. #.PHONY: postgres
  77. $(OBJS): $(DIRS:%=%.dir)
  78. $(DIRS:%=%.dir):
  79. $(MAKE) -C $(subst .dir,,$@) all 
  80. ../utils/version.o:
  81. $(MAKE) -C ../utils version.o
  82. ../utils/dllinit.c:
  83. $(MAKE) -C ../utils dllinit.o
  84. global1.bki.source local1_template1.bki.source 
  85. global1.description local1_template1.description: catalog/$@
  86. cp catalog/$@ .
  87. catalog/global1.bki.source catalog/local1_template1.bki.source 
  88. catalog/global1.description catalog/local1_template1.description:
  89. $(MAKE) -C catalog $@
  90. # The postgres.o target is needed by the rule in Makefile.global that
  91. # creates the exports file when MAKE_EXPORTS = true.
  92. postgres.o: $(OBJS)
  93. $(CC) -r -o postgres.o $(OBJS) $(LDFLAGS)
  94. ############################################################################
  95. # The following targets are specified in make commands that appear in the
  96. # make files in our subdirectories.
  97. parse.h: parser/parse.h
  98. $(MAKE) -C parser parse.h
  99. cp parser/parse.h .
  100. fmgr.h:
  101. $(MAKE) -C utils fmgr.h
  102. cp utils/fmgr.h .
  103. #############################################################################
  104. clean:
  105. rm -f postgres$(X) $(POSTGRES_IMP) fmgr.h parse.h 
  106.     global1.bki.source local1_template1.bki.source 
  107.     global1.description local1_template1.description
  108. ifeq ($(PORTNAME), win)
  109. ifeq ($(MAKE_DLL), true)
  110. rm -f postgres.dll postgres.def libpostgres.a
  111. endif
  112. endif
  113. for i in $(DIRS); do $(MAKE) -C $$i clean; done
  114. .DEFAULT:
  115. for i in $(DIRS); do $(MAKE) -C $$i $@; done
  116. #############################################################################
  117. #
  118. # Installation.
  119. #
  120. # Install the backend program (postgres) to the binary directory and 
  121. # make a link as "postmaster".  Install the bki files, templates, and sample
  122. # files to the library directory.  Install exported headers to the include
  123. # directory (these headers are the minimal ones needed to build loadable
  124. # backend extensions).
  125. #
  126. # (History:  Before Release 2, make install generated a bki.source file
  127. # and then used build parameters to convert it to a bki file, then installed
  128. # that bki file in the /files subdirectory of the default data directory.
  129. # Initdb then used the bki file to generate the database catalog classes.
  130. # That had to change because (1) there can be more than one database system,
  131. # and (2) the parameters of a database system should be set at initdb time,
  132. # not at postgres build time.
  133. .PHONY: install install-bin install-lib install-headers
  134. install: $(LIBDIR) $(BINDIR) $(HEADERDIR) postgres $(POSTGRES_IMP) 
  135.          install-bin install-lib install-headers
  136. install-bin: $(BINDIR) postgres$(X) $(POSTGRES_IMP)
  137. $(INSTALL) $(INSTL_EXE_OPTS) postgres$(X) $(BINDIR)/postgres$(X)
  138. @rm -f $(BINDIR)/postmaster
  139. ln -s postgres$(X) $(BINDIR)/postmaster
  140. ifeq ($(MAKE_EXPORTS), true)
  141. $(INSTALL) $(INSTLOPTS) $(POSTGRES_IMP) $(LIBDIR)/$(POSTGRES_IMP)
  142. endif
  143. ifeq ($(PORTNAME), win)
  144. ifeq ($(MAKE_DLL), true)
  145. # $(INSTALL) $(INSTLOPTS) postgres.dll $(BINDIR)/postgres.dll
  146. $(INSTALL) $(INSTLOPTS) libpostgres.a $(LIBDIR)/libpostgres.a
  147. endif
  148. endif
  149. install-lib: $(LIBDIR) 
  150.          global1.bki.source local1_template1.bki.source 
  151.          global1.description local1_template1.description 
  152.          libpq/pg_hba.conf.sample optimizer/geqo/pg_geqo.sample
  153. $(INSTALL) $(INSTLOPTS) global1.bki.source 
  154.   $(LIBDIR)/global1.bki.source
  155. $(INSTALL) $(INSTLOPTS) global1.description 
  156.   $(LIBDIR)/global1.description
  157. $(INSTALL) $(INSTLOPTS) local1_template1.bki.source 
  158.   $(LIBDIR)/local1_template1.bki.source
  159. $(INSTALL) $(INSTLOPTS) local1_template1.description 
  160.   $(LIBDIR)/local1_template1.description
  161. $(INSTALL) $(INSTLOPTS) libpq/pg_hba.conf.sample 
  162.   $(LIBDIR)/pg_hba.conf.sample
  163. $(INSTALL) $(INSTLOPTS) optimizer/geqo/pg_geqo.sample 
  164.   $(LIBDIR)/pg_geqo.sample
  165. install-headers: fmgr.h $(SRCDIR)/include/config.h
  166. @if [ ! -d $(HEADERDIR) ]; then mkdir $(HEADERDIR); fi
  167. @if [ ! -d $(HEADERDIR)/port ]; then mkdir $(HEADERDIR)/port; fi
  168. @if [ ! -d $(HEADERDIR)/port/$(PORTNAME) ]; 
  169. then mkdir $(HEADERDIR)/port/$(PORTNAME); fi
  170. @if [ ! -d $(HEADERDIR)/lib ]; 
  171. then mkdir $(HEADERDIR)/lib; fi
  172. @if [ ! -d $(HEADERDIR)/libpq ]; 
  173. then mkdir $(HEADERDIR)/libpq; fi
  174. @if [ ! -d $(HEADERDIR)/utils ]; 
  175. then mkdir $(HEADERDIR)/utils; fi
  176. @if [ ! -d $(HEADERDIR)/access ]; 
  177. then mkdir $(HEADERDIR)/access; fi
  178. @if [ ! -d $(HEADERDIR)/executor ]; 
  179. then mkdir $(HEADERDIR)/executor; fi
  180. @if [ ! -d $(HEADERDIR)/commands ]; 
  181. then mkdir $(HEADERDIR)/commands; fi
  182. $(INSTALL) $(INSTLOPTS) fmgr.h 
  183.           $(HEADERDIR)/fmgr.h
  184. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/os.h 
  185.           $(HEADERDIR)/os.h
  186. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/config.h 
  187.           $(HEADERDIR)/config.h
  188. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/c.h 
  189.           $(HEADERDIR)/c.h
  190. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/postgres.h 
  191.           $(HEADERDIR)/postgres.h
  192. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/postgres_ext.h 
  193.           $(HEADERDIR)/postgres_ext.h
  194. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/libpq/pqcomm.h 
  195.           $(HEADERDIR)/libpq/pqcomm.h
  196. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/libpq/libpq-fs.h 
  197.           $(HEADERDIR)/libpq/libpq-fs.h
  198. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/lib/dllist.h 
  199.           $(HEADERDIR)/lib/dllist.h
  200. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/geo_decls.h 
  201.           $(HEADERDIR)/utils/geo_decls.h
  202. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/elog.h 
  203.           $(HEADERDIR)/utils/elog.h
  204. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/palloc.h 
  205.           $(HEADERDIR)/utils/palloc.h
  206. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/mcxt.h 
  207.           $(HEADERDIR)/utils/mcxt.h
  208. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/access/attnum.h 
  209.           $(HEADERDIR)/access/attnum.h
  210. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/executor/spi.h 
  211.           $(HEADERDIR)/executor/spi.h
  212. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/commands/trigger.h 
  213.           $(HEADERDIR)/commands/trigger.h
  214. ifeq ($(PORTNAME), hpux)
  215. # is this still necessary?
  216. $(INSTALL) $(INSTLOPTS) $(SRCDIR)/backend/port/hpux/fixade.h 
  217.           $(HEADERDIR)/port/hpux/fixade.h
  218. endif
  219. $(BINDIR):
  220. mkdir $@
  221. $(LIBDIR):
  222. mkdir $@
  223. $(HEADERDIR):
  224. mkdir $@
  225. #############################################################################
  226. #
  227. # Support for code development.
  228. #
  229. # Use target "quick" to build "postgres" when you know all the subsystems 
  230. # are up to date.  It saves the time of doing all the submakes.
  231. .PHONY: quick
  232. quick: $(OBJS)
  233. $(CC) -o postgres $(OBJS) $(LDFLAGS)
  234. #
  235. # Build the file, "./ID", used by the "gid" (grep-for-identifier) tool
  236. #
  237. IDFILE= ID
  238. .PHONY: $(IDFILE)
  239. $(IDFILE):
  240. ./makeID 
  241. #
  242. # Special rule to generate cpp'd version of a .c file.  This is
  243. # especially useful given all the hellish macro processing going on.
  244. # The cpp'd version has a .C suffix.  To create foo.C from foo.c, just
  245. # type
  246. # make foo.C
  247. #
  248. %.cpp: %.c
  249. $(CC) -E $(CFLAGS) $(<:.C=.c) | cat -s | cb | tr -s '12*' '12' 
  250.     > $(@F)