1#
2# Apple wrapper Makefile for PostgreSQL
3# Copyright (c) 2009-2013 Apple Inc. All Rights Reserved.
4#
5
6# General project info for use with RC/GNUsource.make makefile
7Project         = postgresql
8UserType        = Administrator
9ToolType        = Commands
10Submission      = 97
11
12# Include common server build variables
13-include /AppleInternal/ServerTools/ServerBuildVariables.xcconfig
14
15# Variables only used by project
16
17
18ServicesDir = $(NSLIBRARYSUBDIR)/Server
19ServiceDirCustomer = $(ServicesDir)/PostgreSQL
20DocDir = $(SERVER_INSTALL_PATH_PREFIX)$(SHAREDIR)/postgresql
21DBDirCustomer = $(ServiceDirCustomer)/Data
22
23# Environment is passed to BOTH configure AND make, which can cause problems if these
24# variables are intended to help configure, but not override the result.
25Extra_CC_Flags	= -Os -g -Wall -Wno-deprecated-declarations
26# This allows extra variables to be passed _just_ to configure.
27Extra_Configure_Environment	= CFLAGS="$$RC_CFLAGS $(Extra_CC_Flags)" \
28					LDFLAGS="$$RC_CFLAGS $(Extra_CC_Flags)" \
29					LDFLAGS_EX="-mdynamic-no-pic" \
30					EXTRA_LDFLAGS_PROGRAM="-mdynamic-no-pic" \
31					LIBS="-L$(SDKROOT)/usr/lib" \
32					INCLUDES="-I$(SDKROOT)/usr/include/libxml2"
33
34# The configure flags are ordered to match current output of ./configure --help.
35# Extra indentation represents suboptions.
36Extra_Configure_Flags	= --prefix=$(SERVER_INSTALL_PATH_PREFIX)$(USRDIR) --sbindir=$(SERVER_INSTALL_PATH_PREFIX)$(LIBEXECDIR) \
37			--sysconfdir=$(SERVER_INSTALL_PATH_PREFIX)$(ETCDIR) --mandir=$(SERVER_INSTALL_PATH_PREFIX)$(MANDIR) \
38			--localstatedir=$(DBDirCustomer) \
39			--htmldir=$(DocDir) \
40			--enable-thread-safety \
41			--enable-dtrace \
42			--with-tcl \
43			--with-perl \
44			--with-python \
45			--with-gssapi \
46			--with-krb5 \
47			--with-pam \
48			--with-ldap \
49			--with-bonjour \
50			--with-openssl \
51			--with-libxml \
52			--with-libxslt \
53			--with-system-tzdata=$(SHAREDIR)/zoneinfo
54
55Extra_Make_Flags	=
56
57# Additional project info used with AEP
58AEP		= YES
59AEP_Version	= 9.2.4
60AEP_LicenseFile	= $(Sources)/COPYRIGHT
61AEP_Patches	= arches.patch pg_config_manual_h.patch \
62			radar7687126.patch radar7756388.patch radar8304089.patch \
63			initdb.patch _int_bool.c.patch prep_buildtree.patch
64AEP_LaunchdConfigs	= org.postgresql.postgres.plist com.apple.postgres.plist
65AEP_Binaries	= $(SERVER_INSTALL_PATH_PREFIX)$(USRBINDIR)/* $(SERVER_INSTALL_PATH_PREFIX)$/$(USRLIBDIR)/lib*.dylib $(SERVER_INSTALL_PATH_PREFIX)$/$(USRLIBDIR)/$(Project)/* $(SERVER_INSTALL_PATH_PREFIX)/$(USRLIBDIR)/postgresql/pgxs/src/test/regress/pg_regress
66
67Configure_Products = config.log src/include/pg_config.h
68GnuAfterInstall	= install-docs install-contrib \
69			install-macosx install-backup install-wrapper archive-strip-binaries \
70			install-postgres9.0-for-migration install-postgres9.1-for-migration cleanup-dst-root
71
72ContribTools	= hstore intarray pg_upgrade pg_upgrade_support
73
74# Local targets that must be defined before including the following
75# files to get the dependency order correct
76.PHONY: $(GnuAfterInstall)
77
78# Include common makefile targets for B&I
79include $(MAKEFILEPATH)/CoreOS/ReleaseControl/GNUSource.make
80include $(MAKEFILEPATH)/CoreOS/ReleaseControl/AEP.make
81
82# Override settings from above includes
83LAUNCHDDIR := $(SERVER_INSTALL_PATH_PREFIX)$(LAUNCHDDIR)
84BuildDirectory	= $(OBJROOT)/Build
85Install_Target	= install
86# This needs to be overridden because the project properly uses DESTDIR and
87# INSTALL_ROOT (which is included in Environment).
88Install_Flags	= DESTDIR="$(DSTROOT)"
89
90
91# Build rules
92
93# The touch is necessary to prevent unnecessary regeneration of all documentation.
94install-docs:
95	@echo "Installing documentation..."
96	$(TOUCH) -r $(Sources)/Makefile $(Sources)/configure
97	$(MAKE) -C $(BuildDirectory) $(Install_Flags) $@
98
99install-contrib:
100	@echo "Installing specific tools from contrib:"
101	for tool in $(ContribTools); do \
102		echo "...Installing $${tool}...";	\
103		$(MAKE) -C $(BuildDirectory)/contrib/$${tool} $(Install_Flags) $(Install_Target); \
104	done
105
106install-macosx:
107	@echo "Installing man pages..."
108	$(INSTALL_DIRECTORY) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/share/man/man1
109	$(INSTALL) Support/man/pltcl_delmod.1 $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/share/man/man1
110	$(INSTALL) Support/man/pltcl_listmod.1 $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/share/man/man1
111	$(INSTALL) Support/man/pltcl_loadmod.1 $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/share/man/man1
112	@echo "Installing template config files..."
113	$(INSTALL_DIRECTORY) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/Library/Preferences
114	$(INSTALL) -m 644 Support/org.postgresql.postgres.plist.dist $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/Library/Preferences/org.postgresql.postgres.plist
115	$(INSTALL) -m 644 Support/com.apple.postgres.plist.dist $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/Library/Preferences/com.apple.postgres.plist
116	@echo "Installing webapp plist files..."
117	$(INSTALL_DIRECTORY) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/private/etc/apache2/webapps
118	$(INSTALL) -m 644 Support/webapp_org.postgresql.postgres.plist.dist $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/private/etc/apache2/webapps/org.postgresql.postgres.plist
119	$(CP) -p $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/private/etc/apache2/webapps/org.postgresql.postgres.plist $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/private/etc/apache2/webapps/org.postgresql.postgres.plist.default
120	@echo "Installing initialization script..."
121	$(INSTALL_DIRECTORY) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/libexec
122	$(INSTALL) -m 755 Support/copy_postgresql_config_files.sh $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/libexec
123	@echo "Installing Extras scripts..."
124	$(INSTALL_DIRECTORY) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/System/Library/ServerSetup/CommonExtras/PostgreSQLExtras
125	$(INSTALL_DIRECTORY) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/System/Library/ServerSetup/RestoreExtras
126	$(INSTALL_DIRECTORY) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/System/Library/ServerSetup/MigrationExtras
127	$(INSTALL_DIRECTORY) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/System/Library/ServerSetup/PromotionExtras
128	$(INSTALL_SCRIPT) Support/05_PostgresRestoreExtra.pl $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/System/Library/ServerSetup/RestoreExtras
129	$(INSTALL_SCRIPT) Support/05_postgresmigrator.rb $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/System/Library/ServerSetup/MigrationExtras
130	$(INSTALL_SCRIPT) Support/58_postgres_setup.rb $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/System/Library/ServerSetup/PromotionExtras
131	@echo "Done."
132
133install-backup: install-macosx
134	@echo "Installing backup / Time Machine support..."
135	$(INSTALL_DIRECTORY) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(ETCDIR)/server_backup
136	$(INSTALL_FILE) Support/backup_restore/46-postgresql.plist $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(ETCDIR)/server_backup
137	$(INSTALL_SCRIPT) Support/backup_restore/xpg_archive_command $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/libexec
138	$(INSTALL_SCRIPT) Support/backup_restore/xpostgres $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/bin
139	$(INSTALL_SCRIPT) Support/backup_restore/xpg_ctl $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/bin
140	@echo "Done."
141
142install-wrapper:
143	@echo "Installing wrapper"
144	$(MV) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/bin/postgres $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/bin/postgres_real
145	$(SED) 's|@PATH_TEMPLATE@|$(SERVER_INSTALL_PATH_PREFIX)/usr/bin/postgres_real|' Support/postgres > Support/postgres_patched
146	$(INSTALL) -m 755 Support/postgres_patched $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/bin/postgres
147	@echo "Done."
148
149install-postgres9.0-for-migration:
150	@echo "Installing older PostgreSQL binaries to be used for migration"
151	$(MKDIR) $(SYMROOT)/Migration_9.0_to_9.2
152	$(MAKE) -C Support/Migration_9.0_to_9.2 install \
153			SRCROOT=$(SRCROOT)/Support/Migration_9.0_to_9.2 \
154			OBJROOT=$(OBJROOT)/Migration_9.0_to_9.2 \
155			SYMROOT=$(SYMROOT)/Migration_9.0_to_9.2 \
156			DSTROOT=$(DSTROOT) \
157			BuildDirectory=$(OBJROOT)/Migration_9.0_to_9.2/Build \
158			Sources=$(OBJROOT)/Migration_9.0_to_9.2/postgres \
159			CoreOSMakefiles=$(CoreOSMakefiles)
160	@echo "Done installing PostgreSQL 9.0"
161
162install-postgres9.1-for-migration:
163	@echo "Installing older PostgreSQL binaries to be used for migration"
164	$(MKDIR) $(SYMROOT)/Migration_9.1_to_9.2
165	$(MAKE) -C Support/Migration_9.1_to_9.2 install \
166			SRCROOT=$(SRCROOT)/Support/Migration_9.1_to_9.2 \
167			OBJROOT=$(OBJROOT)/Migration_9.1_to_9.2 \
168			SYMROOT=$(SYMROOT)/Migration_9.1_to_9.2 \
169			DSTROOT=$(DSTROOT) \
170			BuildDirectory=$(OBJROOT)/Migration_9.1_to_9.2/Build \
171			Sources=$(OBJROOT)/Migration_9.1_to_9.2/postgres \
172			CoreOSMakefiles=$(CoreOSMakefiles)
173	@echo "Done installing PostgreSQL 9.1"
174
175cleanup-dst-root:
176	@echo "Removing unwanted files from DSTROOT"
177	$(RM) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/lib/*.a
178	$(RM) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/lib/postgresql9.0/*.a
179	$(RM) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)/usr/lib/postgresql9.1/*.a
180	if [ -z $(SERVER_INSTALL_PATH_PREFIX) ]; then \
181		echo "We only want libraries installed, so remove everything else."; \
182		$(SILENT) $(RM) -Rf $(DSTROOT)/System; \
183		$(SILENT) $(RM) -Rf $(DSTROOT)/private; \
184		$(SILENT) $(RM) -Rf $(DSTROOT)/usr/bin; \
185		$(SILENT) $(RM) -Rf $(DSTROOT)/usr/libexec; \
186		$(SILENT) $(RM) -Rf $(DSTROOT)/usr/include; \
187		$(SILENT) $(RM) -Rf $(DSTROOT)/usr/share; \
188		$(SILENT) $(RM) -Rf $(DSTROOT)/usr/lib/postgresql9.0; \
189		$(SILENT) $(RM) -Rf $(DSTROOT)/usr/lib/postgresql9.1; \
190		$(SILENT) $(RM) -Rf $(DSTROOT)/usr/lib/postgresql/pgxs; \
191	fi
192	@echo "Done."
193