# # xbs-compatible wrapper Makefile for dovecot # # WARNING: B&I overrides the perms, owner, and group for everything # under /Library; see Project = dovecot DELIVERABLE = dovecot PROJECT_VERSION = $(Project)-2.2.5 PigeonholeProject = $(Project)-pigeonhole PIGEONHOLE_VERSION = $(Project)-2.2-pigeonhole-0.4.1 # Configuration values we customize # PROJECT_CONF_DIR = $(Project).Config PROJECT_SETUP_DIR = $(Project).SetupExtras DOVECOT_PUSH_NOTIFY = $(Project).push-notify TOOL_DIR = $(Project).Tools TOOLS = cyrus_to_$(Project) skview skquery DATA_DIR = /Library/Server/Mail/Data CONFIG_DIR = /Library/Server/Mail/Config/ PROMO_DIR = $(SERVER_INSTALL_PATH_PREFIX)$(NSLIBRARYDIR)/ServerSetup/PromotionExtras LIBEXEC_DIR = $(SERVER_INSTALL_PATH_PREFIX)$(LIBEXECDIR)/$(DELIVERABLE) SRC_PROMO_SCRIPT = service_promotion.pl DST_PROMO_SCRIPT = 65-mail_services_access.pl # Include common server build variables -include /AppleInternal/ServerTools/ServerBuildVariables.xcconfig # Environment is passed to BOTH configure AND make, which can cause problems if these # variables are intended to help configure, but not override the result. Environment = MAKEOBJDIR="$(BuildDirectory)" \ INSTALL_ROOT="$(DSTROOT)" \ TMPDIR="$(TMPDIR)" TEMPDIR="$(TMPDIR)" # This allows extra variables to be passed _just_ to configure. Extra_Configure_Environment = \ EXTRA_CFLAGS="-Dopenlog=xs_syslog_openlog -Dsyslog=xs_syslog -Dvsyslog=xs_vsyslog -Dsetlogmask=xs_syslog_setlogmask -Dcloselog=xs_syslog_closelog" \ LDFLAGS="$(LDFLAGS) -export-dynamic -F/System/Library/PrivateFrameworks -framework CoreDaemon" # The following were experiments used to avoid having to copy the sources into place. # They didn't work. # EXTRA_CFLAGS="-Wcomment $(addprefix -I,$(shell find $(Sources)/$(Project)/src/lib* -type d -print) $(Sources)/$(Project)/src/deliver $(Sources)/$(Project)/src/mail-common) -Wformat-y2k" # EXTRA_LDFLAGS_PROGRAM="-mdynamic-no-pic" Make_Flags = -j ProjectConfig = $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(USRLIBDIR)/$(DELIVERABLE)/$(Project)-config Common_Configure_Flags = \ --prefix=$(SERVER_INSTALL_PATH_PREFIX)$(USRDIR) \ --sbindir=$(SERVER_INSTALL_PATH_PREFIX)$(USRSBINDIR) \ --libexecdir=$(SERVER_INSTALL_PATH_PREFIX)$(LIBEXECDIR) \ --sysconfdir=$(CONFIG_DIR) \ --datarootdir=$(SERVER_INSTALL_PATH_PREFIX)$(SHAREDIR) \ --localstatedir=$(SERVER_INSTALL_PATH_PREFIX)/var/$(DELIVERABLE) \ --disable-dependency-tracking \ --disable-static Project_Configure_Flags = \ --with-rundir=/var/run/$(DELIVERABLE) \ --with-moduledir=$(SERVER_INSTALL_PATH_PREFIX)$(USRLIBDIR)/$(DELIVERABLE) \ --with-ssl=openssl \ --with-gssapi=yes Pigeonhole_Configure_Flags = \ --with-dovecot=../$(Project) # Include common makefile targets for B&I include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make XCODEBUILD = $(USRBINDIR)/xcodebuild # Override settings from above includes BuildDirectory = $(OBJROOT)/Build Install_Target = install TMPDIR = $(OBJROOT)/Build/tmp # This needs to be overridden because the project properly uses DESTDIR and # INSTALL_ROOT (which is included in Environment). Install_Flags = DESTDIR="$(DSTROOT)" # Typically defined in GNUSource.make; duplicated here to effect similar functionality. Sources = $(SRCROOT) Configure = ./configure ConfigureProject = $(Configure) ConfigurePigeonhole = $(Configure) ProjectConfigStamp = $(BuildDirectory)/$(Project)/configure-stamp PigeonholeConfigStamp = $(BuildDirectory)/$(PigeonholeProject)/configure-stamp .PHONY: build_dovecot build_pigeonhole build_daemon build_tools .PHONY: archive-strip-binaries install-extras install-man install-startup-files .PHONY: install-open-source-files default : clean configure_dovecot build_dovecot install :: build_dovecot build_pigeonhole \ build_daemon build_tools archive-strip-binaries \ install-extras install-man install-startup-files install-no-clean :: build_dovecot build_pigeonhole $(BuildDirectory)/$(Project)/$(Configure): $(_v) cd "$(BuildDirectory)/$(Project)" && autoconf $(ProjectConfigStamp) : @echo "***** Configuring $(Project), version $(PROJECT_VERSION)" $(_v) $(MKDIR) $(BuildDirectory)/$(Project) $(TMPDIR) $(_v) $(CP) $(Sources)/$(Project) $(BuildDirectory) $(_v) cd $(BuildDirectory)/$(Project) && $(Environment) $(Extra_Configure_Environment) $(ConfigureProject) $(Common_Configure_Flags) $(Project_Configure_Flags) $(_v) touch $@ @echo "***** Configuring $(Project) complete." $(PigeonholeConfigStamp) : $(ProjectConfig) @echo "***** Configuring $(PigeonholeProject): Version: $(PIGEONHOLE_VERSION)" $(_v) $(MKDIR) $(BuildDirectory)/$(PigeonholeProject) $(_v) $(CP) $(Sources)/$(PigeonholeProject) $(BuildDirectory) $(_v) cd $(BuildDirectory)/$(PigeonholeProject) && $(Environment) $(Extra_Configure_Environment) $(ConfigurePigeonhole) $(Common_Configure_Flags) $(Pigeonhole_Configure_Flags) $(_v) touch $@ @echo "***** Configuring $(PigeonholeProject) complete." build_dovecot : $(ProjectConfigStamp) $(TMPDIR) @echo "***** Building $(Project)" @echo "***** creating MIG API files " $(_v) cd $(BuildDirectory)/$(Project)/src/auth && mig -v /usr/local/include/opendirectory/DSlibinfoMIG.defs @echo "***** creating MIG API files complete" $(_v) $(MAKE) -C $(BuildDirectory)/$(Project) $(Make_Flags) $(Install_Flags) $(Install_Target) $(_v) $(MV) "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(USRSBINDIR)/$(DELIVERABLE)" "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(USRSBINDIR)/$(DELIVERABLE)d" @echo "***** Building $(Project) complete." $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(USRLIBDIR)/$(DELIVERABLE)/$(Project)-config: $(_v) $(MAKE) build_dovecot build_pigeonhole : $(PigeonholeConfigStamp) $(ProjectConfig) @echo "***** Building $(PigeonholeProject)" $(_v) $(MAKE) -C $(BuildDirectory)/$(PigeonholeProject) $(Make_Flags) $(Install_Flags) $(Install_Target) $(_v) $(CP) $(BuildDirectory)/$(PigeonholeProject)/src/plugins/lda-sieve/.libs/lib90_sieve_plugin.so* \ $(SYMROOT) @echo "***** Building $(PigeonholeProject) complete." build_daemon : $(ProjectConfig) @echo "***** Building $(DOVECOT_PUSH_NOTIFY)" $(_v) cd "$(SRCROOT)/$(DOVECOT_PUSH_NOTIFY)/daemon" \ && $(XCODEBUILD) $(Install_Target) \ SRCROOT="$(SRCROOT)/$(DOVECOT_PUSH_NOTIFY)/daemon" \ OBJROOT=$(OBJROOT) \ SYMROOT=$(SYMROOT) \ DSTROOT="$(DSTROOT)" \ RC_CFLAGS="$(RC_CFLAGS)" \ RC_ARCHS="$(RC_ARCHS)" @echo "***** Building $(DOVECOT_PUSH_NOTIFY) complete." build_tools : for tool in $(TOOLS); \ do \ echo "***** Building $$tool"; \ $(_v) cd "$(SRCROOT)/$(TOOL_DIR)/$$tool" \ && $(XCODEBUILD) $(Install_Target) \ SRCROOT="$(SRCROOT)/$(TOOL_DIR)/$$tool" \ OBJROOT=$(OBJROOT) \ SYMROOT=$(SYMROOT) \ DSTROOT="$(DSTROOT)" \ RC_CFLAGS="$(RC_CFLAGS)" \ RC_ARCHS="$(RC_ARCHS)" \ || exit $$?; \ echo "***** Building $$tool complete."; \ done # Custom configuration: # # lib_cleanup : @echo "***** Cleaning up files not intended for installation" $(_v) $(RMDIR) $(SYMROOT)/usr/include $(_v) $(RMDIR) $(DSTROOT)/usr/include $(_v) $(RMDIR) "$(SYMROOT)$(RUNDIR)" $(_v) $(RMDIR) "$(DSTROOT)$(RUNDIR)" @echo "***** Cleaning up complete." archive-strip-binaries: $(SYMROOT) @echo "***** Archiving, dSYMing and stripping binaries..." $(_v) $(FIND) $(OBJROOT) -name '*.dSYM' -exec $(CP) {} $(SYMROOT) \; $(_v) for file in $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(USRBINDIR)/* $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(USRSBINDIR)/* $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(LIBEXECDIR)/$(DELIVERABLE)/*;\ do \ if test -L $${file}; then \ echo "Skipping symlink $${file}"; \ continue; \ fi; \ echo "Processing $${file##*/} (from $${file})"; \ if [ ! -e "$(SYMROOT)/$${file##*/}" ]; then \ echo " $(CP) $${file} $(SYMROOT)"; \ $(CP) $${file} $(SYMROOT); \ fi; \ if [ -e "$(SYMROOT)/$${file##*/}.dSYM" ]; then \ echo "...odd, dSYM already exists."; \ else \ echo " $(DSYMUTIL) --out=$(SYMROOT)/$${file##*/}.dSYM $${file}";\ $(DSYMUTIL) --out=$(SYMROOT)/$${file##*/}.dSYM $${file};\ fi; \ $(STRIP) -S $${file}; \ done $(_v) for file in $$( $(FIND) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(USRLIBDIR)/$(DELIVERABLE) -type f \( -name '*.so' -o -name '*.dylib' \) );\ do \ if test -L $${file}; then \ echo "Skipping symlink $${file}"; \ continue; \ fi; \ echo "Processing $${file##*/} (from $${file})"; \ if [ ! -e "$(SYMROOT)/$${file##*/}" ]; then \ echo " $(CP) $${file} $(SYMROOT)"; \ $(CP) $${file} $(SYMROOT); \ fi; \ if [ -e "$(SYMROOT)/$${file##*/}.dSYM" ]; then \ echo "...dSYM already copied."; \ else \ echo " $(DSYMUTIL) --out=$(SYMROOT)/$${file##*/}.dSYM $${file}";\ $(DSYMUTIL) --out=$(SYMROOT)/$${file##*/}.dSYM $${file};\ fi; \ $(STRIP) -rx $${file}; \ done @echo "***** Archiving, dSYMing and stripping binaries complete." install-strip : @echo "***** Stripping language libraries..." @echo "***** Stripping language libraries complete." install-open-source-files: @echo "***** Installing open source configuration files..." $(_v) $(INSTALL_DIRECTORY) $(DSTROOT)$(USRDIR)/local/OpenSourceVersions $(_v) $(INSTALL_DIRECTORY) $(DSTROOT)$(USRDIR)/local/OpenSourceLicenses $(_v) $(INSTALL_FILE) "$(SRCROOT)/dovecot.OpenSourceInfo/$(DELIVERABLE).plist" \ "$(DSTROOT)$(USRDIR)/local/OpenSourceVersions" $(_v) $(INSTALL_FILE) "$(SRCROOT)/dovecot.OpenSourceInfo/$(DELIVERABLE).txt" \ "$(DSTROOT)$(USRDIR)/local/OpenSourceLicenses" @echo "***** Installing open source configuration files complete." install-extras : install-open-source-files lib_cleanup @echo "***** Installing extras..." $(_v) if [ ! -d "$(DSTROOT)$(CONFIG_DIR)" ]; then \ echo "$(MKDIR) $(DSTROOT)$(CONFIG_DIR)"; \ $(MKDIR) "$(DSTROOT)$(CONFIG_DIR)"; \ fi #$(_v) if [ -e "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(ETCDIR)" -a "$(ETCDIR)" != "/etc" ]; then \ # echo "$(MV) $(DSTROOT)/etc/* $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(ETCDIR)"; \ # $(MV) "$(DSTROOT)/etc/*" "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(ETCDIR)"; \ # echo "$(RMDIR) $(DSTROOT)/etc"; \ # $(RMDIR) "$(DSTROOT)/etc"; \ #fi $(_v) $(INSTALL_DIRECTORY) "$(DSTROOT)$(CONFIG_DIR)/$(DELIVERABLE)" \ "$(DSTROOT)$(CONFIG_DIR)/$(DELIVERABLE)/conf.d" \ "$(DSTROOT)$(CONFIG_DIR)/$(DELIVERABLE)/example-config" \ "$(DSTROOT)$(CONFIG_DIR)/$(DELIVERABLE)/example-config/conf.d" \ "$(DSTROOT)$(CONFIG_DIR)/$(DELIVERABLE)/default" \ "$(DSTROOT)$(CONFIG_DIR)/$(DELIVERABLE)/default/conf.d" $(_v) $(INSTALL_FILE) $(BuildDirectory)/$(Project)/doc/example-config/*.conf* \ "$(DSTROOT)$(CONFIG_DIR)/$(DELIVERABLE)/example-config" $(_v) $(INSTALL_FILE) $(BuildDirectory)/$(Project)/doc/example-config/conf.d/*.conf* \ "$(DSTROOT)$(CONFIG_DIR)/$(DELIVERABLE)/example-config/conf.d" $(_v) $(INSTALL_FILE) $(SRCROOT)/$(PROJECT_CONF_DIR)/*.conf* \ "$(DSTROOT)$(CONFIG_DIR)/$(DELIVERABLE)/default" $(_v) $(INSTALL_FILE) $(SRCROOT)/$(PROJECT_CONF_DIR)/conf.d/*.conf* \ "$(DSTROOT)$(CONFIG_DIR)/$(DELIVERABLE)/default/conf.d" # promotion script $(_v) $(INSTALL_DIRECTORY) "$(DSTROOT)$(PROMO_DIR)" $(_v) $(INSTALL_SCRIPT) "$(SRCROOT)/$(PROJECT_SETUP_DIR)/$(SRC_PROMO_SCRIPT)" "$(DSTROOT)$(PROMO_DIR)/$(DST_PROMO_SCRIPT)" $(_v) $(CHMOD) 0755 "$(DSTROOT)$(PROMO_DIR)/$(DST_PROMO_SCRIPT)" # quota error/warning scripts $(_v) $(INSTALL_SCRIPT) "$(SRCROOT)/$(PROJECT_SETUP_DIR)/quota-warning.sh" "$(DSTROOT)$(LIBEXEC_DIR)/quota-warning.sh" $(_v) $(INSTALL_SCRIPT) "$(SRCROOT)/$(PROJECT_SETUP_DIR)/quota-exceeded.sh" "$(DSTROOT)$(LIBEXEC_DIR)/quota-exceeded.sh" #$(_v) $(CHMOD) u+w $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(LIBEXECDIR)/$(DELIVERABLE)/quota-*.sh $(_v) $(CHOWN) root:mail "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(LIBEXECDIR)/$(DELIVERABLE)/deliver" $(_v) $(CHMOD) 0750 "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(LIBEXECDIR)/$(DELIVERABLE)/deliver" $(_v) $(INSTALL_SCRIPT) "$(SRCROOT)/$(TOOL_DIR)/update-fts-index.pl" \ "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(LIBEXECDIR)/$(DELIVERABLE)/update-fts-index.pl" $(_v) $(INSTALL_SCRIPT) "$(SRCROOT)/$(TOOL_DIR)/mail_preflight" \ "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(LIBEXECDIR)/$(DELIVERABLE)/mail_preflight" @echo "***** Installing extras complete." install-man : @echo "***** Installing man pages..." $(_v) perl -p -i -e '$$pass = 1 if /FILES/; s/dovecot/dovecotd/g unless $$pass;' "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(SHAREDIR)/man/man1/dovecot.1" $(_v) (cd "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(SHAREDIR)/man" && $(MKDIR) -p man8 && $(LN) -s ../man1/dovecot.1 man8/dovecotd.8) @echo "***** Installing man pages complete." install-startup-files : @echo "***** Installing Startup Item..." $(_v) $(INSTALL_DIRECTORY) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(NSLIBRARYDIR)/LaunchDaemons $(_v) $(INSTALL_FILE) \ $(SRCROOT)/dovecot.LaunchDaemons/org.dovecot.$(DELIVERABLE)d.plist \ $(SRCROOT)/dovecot.LaunchDaemons/org.dovecot.fts.update.plist \ $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(NSLIBRARYDIR)/LaunchDaemons # move config files under SERVER_INSTALL_PATH_PREFIX $(_v) $(INSTALL_DIRECTORY) $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(ETCDIR) $(_v) $(MV) $(DSTROOT)$(CONFIG_DIR)/dovecot $(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(ETCDIR) $(_v) $(RMDIR) $(DSTROOT)/Library # set server root path to launchd bins $(_v) /usr/libexec/PlistBuddy -c 'Set :ProgramArguments:0 \ $(SERVER_INSTALL_PATH_PREFIX)/usr/libexec/dovecot/mail_preflight' \ "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(NSLIBRARYDIR)/LaunchDaemons/org.dovecot.dovecotd.plist" $(_v) /usr/libexec/PlistBuddy -c 'Set :ProgramArguments:1 \ $(SERVER_INSTALL_PATH_PREFIX)/usr/sbin/dovecotd' \ "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(NSLIBRARYDIR)/LaunchDaemons/org.dovecot.dovecotd.plist" $(_v) /usr/libexec/PlistBuddy -c 'Set :Program \ $(SERVER_INSTALL_PATH_PREFIX)/usr/libexec/dovecot/update-fts-index.pl' \ "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(NSLIBRARYDIR)/LaunchDaemons/org.dovecot.fts.update.plist" $(_v) /usr/libexec/PlistBuddy -c 'Set :ProgramArguments:0 \ $(SERVER_INSTALL_PATH_PREFIX)/usr/libexec/dovecot/update-fts-index.pl' \ "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(NSLIBRARYDIR)/LaunchDaemons/org.dovecot.fts.update.plist" $(_v) /usr/libexec/PlistBuddy -c 'Set :Program \ $(SERVER_INSTALL_PATH_PREFIX)/usr/sbin/push_notify' \ "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(NSLIBRARYDIR)/LaunchDaemons/com.apple.push_notify.plist" $(_v) /usr/libexec/PlistBuddy -c 'Set :ProgramArguments:0 \ $(SERVER_INSTALL_PATH_PREFIX)/usr/sbin/push_notify' \ "$(DSTROOT)$(SERVER_INSTALL_PATH_PREFIX)$(NSLIBRARYDIR)/LaunchDaemons/com.apple.push_notify.plist" @echo "***** Installing Startup Item complete." $(DSTROOT) $(TMPDIR) : $(_v) if [ ! -d $@ ]; then \ $(MKDIR) $@; \ fi