Makefile   [plain text]


#
# xbs-compatible wrapper Makefile for cyrus imap
#

PROJECT=CyrusIMAP
VERSION=2.3.7

SHELL := /bin/sh

# Sane defaults, which are typically overridden on the command line.
SRCROOT=
OBJROOT=$(SRCROOT)
SYMROOT=$(OBJROOT)
DSTROOT=/usr/local
RC_ARCHS=
CFLAGS=-Os $(RC_CFLAGS)

# Configuration values we customize
#

PROJECT_NAME=cyrus_imap
SW_VERS=`sw_vers | grep BuildVersion | sed 's/^.*://'`

OPEN_SRC_INFO_SRC_DIR=/CyrusIMAP.OpenSourceInfo
OPEN_SRC_VERS_DST_DIR=/usr/local/OpenSourceVersions
OPEN_SRC_LICS_DST_DIR=/usr/local/OpenSourceLicenses

SETUP_EXTRAS_SRC_DIR=CyrusIMAP.SetupExtras
SETUP_EXTRAS_DST_DIR=/System/Library/ServerSetup/SetupExtras
MIGRATION_EXTRAS_DST_DIR=/System/Library/ServerSetup/MigrationExtras

LAUNCHD_SRC_DIR=/CyrusIMAP.LaunchDaemons
LAUNCHD_DST_DIR=/System/Library/LaunchDaemons

CONFIG_SRC_DIR=/CyrusIMAP.Config
CONFIG_DST_DIR=/private/etc

BIN_DST_DIR=/usr/bin/cyrus/bin
TEST_DST_DIR=/usr/bin/cyrus/test
SIEVE_DST_DIR=/usr/bin/cyrus/sieve
TOOLS_DST_DIR=/usr/bin/cyrus/tools
ADMIN_DST_DIR=/usr/bin/cyrus/admin
MAN_DST_DIR=/usr/share/man

STRIP=/usr/bin/strip

LIB_PERL=/System/Library/Perl/
PERL_VER=`perl -V:version | sed -n -e "s/[^0-9.]*\([0-9.]*\).*/\1/p"`

CYRUS_TOOLS= dohash mkimap mupdate-loadgen.pl not-mkdep rehash \
			 translatesieve undohash upgradesieve
LOCAL_DIRS= System bin include lib share usr
CYRUS_BINS= arbitron chk_cyrus ctl_cyrusdb ctl_deliver ctl_mboxlist \
			cvt_cyrusdb cyr_expire cyrdump cyrus-notifyd cyrus-quota \
			deliver fud idled imapd ipurge lmtpd make_md5 master mbexamine \
			mbpath mupdate pop3d pop3proxyd proxyd reconstruct sievec smmapd \
			squatter sync_client sync_reset sync_server timsieved tls_prune \
			cyr_dbtool unexpunge

CYRUS_CONFIG = \
	--build=powerpc-apple-netbsd \
	--with-bdb-libdir=/usr/local/BerkeleyDB/lib \
	--with-bdb-incdir=/usr/local/BerkeleyDB/include \
	--with-sasl=/usr \
	--with-mboxlist-db=berkeley \
	--with-seen-db=skiplist \
	--with-subs-db=flat \
	--with-openssl=/usr \
	--with-auth=krb \
	--enable-gssapi \
	--disable-krb4 \
	--with-com_err \
	--with-extraident="OS X Server 10.5:$(SW_VERS)" \
	--enable-murder \
	--enable-replication \
	--enable-idled \
	--with-service-path=$(BIN_DST_DIR) \
	--with-pidfile=/var/run/cyrus-master.pid \
	--with-cyrus-user=_cyrus \
	--mandir=/usr/share/man \
	--without-snmp \
	BI_RC_CFLAGS="$(CFLAGS)"

# These includes provide the proper paths to system utilities
#

include $(MAKEFILEPATH)/pb_makefiles/platform.make
include $(MAKEFILEPATH)/pb_makefiles/commands-$(OS).make

default:: make_imap

install :: make_imap_install clean_src strip_imap_binaries

install_debug :: make_imap_install

make_imap : configure_imap build_imap

make_imap_clean : clean_imap configure_imap build_imap

make_imap_install : configure_imap build_imap install_imap

make_imap_clean_install : clean_imap configure_imap build_imap install_imap

build_all : configure_imap build_imap

build_install : build_all install_imap

clean : clean_src

installhdrs :
	$(SILENT) $(ECHO) "No headers to install"

installsrc :
	[ ! -d $(SRCROOT)/$(PROJECT) ] && mkdir -p $(SRCROOT)/$(PROJECT)
	tar cf - . | (cd $(SRCROOT) ; tar xfp -)
	find $(SRCROOT) -type d -name CVS -print0 | xargs -0 rm -rf

clean_src :
	$(SILENT) if [ -e "$(SRCROOT)/$(PROJECT_NAME)/Makefile" ]; then\
		$(SILENT) ($(CD) "$(SRCROOT)/$(PROJECT_NAME)" && make distclean)\
	fi

configure_imap :
	$(SILENT) $(ECHO) "-------------- $(PROJECT_NAME) -------------- configure_imap"
	$(SILENT) $(ECHO) "Configuring $(PROJECT_NAME)..."
	$(SILENT) if [ ! -e "$(SRCROOT)/$(PROJECT_NAME)/Makefile" ]; then\
		$(SILENT) ($(CD) "$(SRCROOT)/$(PROJECT_NAME)" && ./configure $(CYRUS_CONFIG))\
	fi
	$(SILENT) $(ECHO) "---- Configuring $(PROJECT_NAME) complete."

clean_imap_src : 
	$(SILENT) $(ECHO) "Cleaning $(PROJECT_NAME)..."
	$(SILENT) $(ECHO) "-------------- $(PROJECT_NAME) --------------"
	$(SILENT) if [ -e "$(SRCROOT)/$(PROJECT_NAME)/Makefile" ]; then\
		$(SILENT) ($(CD) "$(SRCROOT)/$(PROJECT_NAME)" && make distclean)\
	fi
	$(SILENT) $(ECHO) "Cleaning $(PROJECT_NAME) complete."

build_imap :
	$(SILENT) $(ECHO) "-------------- $(PROJECT_NAME) -------------- build_imap"
	$(SILENT) $(ECHO) "Configuring $(PROJECT_NAME)..."
	$(SILENT) if [ ! -e "$(SRCROOT)/$(PROJECT_NAME)/Makefile" ]; then\
		$(SILENT) ($(CD) "$(SRCROOT)/$(PROJECT_NAME)" && ./configure $(CYRUS_CONFIG))\
	fi
	$(SILENT) ($(CD) "$(SRCROOT)/$(PROJECT_NAME)" && make DESTDIR="$(DSTROOT)" depend)
	$(SILENT) ($(CD) "$(SRCROOT)/$(PROJECT_NAME)" && make DESTDIR="$(DSTROOT)" all)
	$(SILENT) ($(CD) "$(SRCROOT)/$(PROJECT_NAME)" && make DESTDIR="$(DSTROOT)" install)
	$(SILENT) $(ECHO) "---- Building $(PROJECT_NAME) complete."

install_imap : $(DSTROOT)$(LIB_PERL)
	$(SILENT) $(ECHO) "-------------- $(PROJECT_NAME) --------------"
	$(SILENT) $(ECHO) "Installing $(PROJECT_NAME)..."

	$(SILENT) ($(CD) "$(SRCROOT)/$(PROJECT_NAME)" && make install DESTDIR="$(DSTROOT)")
	$(SILENT) if [ -d "$(DSTROOT)/usr/local/lib/perl5/site_perl" ]; then\
		$(SILENT) ($(CD) "$(DSTROOT)/usr/local/lib/perl5/site_perl/" && $(CP) -rpf * "$(DSTROOT)$(LIB_PERL)$(PERL_VER)")\
	fi

	# Cyrus admin app
	$(SILENT) install -d -m 755 $(DSTROOT)/$(ADMIN_DST_DIR)
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/usr/bin/cyradm" "$(DSTROOT)/$(ADMIN_DST_DIR)/"

	# Install man pages
	$(SILENT) install -d -m 755 $(DSTROOT)/$(MAN_DST_DIR)
	$(SILENT) ($(CD) "$(DSTROOT)/usr/local/share/man" && $(CP) -r * "$(DSTROOT)/$(MAN_DST_DIR)/")

	# Renaming man pages
	$(SILENT) ($(MV) "$(DSTROOT)/$(MAN_DST_DIR)/man8/master.8" "$(DSTROOT)/$(MAN_DST_DIR)/man8/cyrus-master.8")
	$(SILENT) ($(MV) "$(DSTROOT)/$(BIN_DST_DIR)/notifyd" "$(DSTROOT)/$(BIN_DST_DIR)/cyrus-notifyd")
	$(SILENT) ($(MV) "$(DSTROOT)/$(MAN_DST_DIR)/man8/notifyd.8" "$(DSTROOT)/$(MAN_DST_DIR)/man8/cyrus-notifyd.8")
	$(SILENT) ($(MV) "$(DSTROOT)/$(BIN_DST_DIR)/quota" "$(DSTROOT)/$(BIN_DST_DIR)/cyrus-quota")
	$(SILENT) ($(MV) "$(DSTROOT)/$(MAN_DST_DIR)/man8/quota.8" "$(DSTROOT)/$(MAN_DST_DIR)/man8/cyrus-quota.8")

	# Install sieve apps
	$(SILENT) install -d -m 755 $(DSTROOT)/$(SIEVE_DST_DIR)
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/bin/sieveshell" "$(DSTROOT)/$(SIEVE_DST_DIR)"
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/bin/installsieve" "$(DSTROOT)/$(SIEVE_DST_DIR)"

	# Install test apps
	$(SILENT) install -d -m 755 $(DSTROOT)/$(TEST_DST_DIR)
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/bin/imtest" "$(DSTROOT)/$(TEST_DST_DIR)"
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/bin/lmtptest" "$(DSTROOT)/$(TEST_DST_DIR)"
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/bin/mupdatetest" "$(DSTROOT)/$(TEST_DST_DIR)"
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/bin/nntptest" "$(DSTROOT)/$(TEST_DST_DIR)"
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/bin/pop3test" "$(DSTROOT)/$(TEST_DST_DIR)"
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/bin/sivtest" "$(DSTROOT)/$(TEST_DST_DIR)"
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/bin/smtptest" "$(DSTROOT)/$(TEST_DST_DIR)"
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/bin/synctest" "$(DSTROOT)/$(TEST_DST_DIR)"

	# Creating tools directories
	$(SILENT) install -d -m 755 $(DSTROOT)/$(TOOLS_DST_DIR)
	$(SILENT) install -m 0755 "$(DSTROOT)/usr/local/bin/sieveshell" "$(DSTROOT)/$(TOOLS_DST_DIR)"
	for file in $(CYRUS_TOOLS); \
	do \
		$(SILENT) install -m 755 "$(SRCROOT)/$(PROJECT_NAME)/tools/$$file" "$(DSTROOT)$(TOOLS_DST_DIR)" ; \
	done

	# Setup & Migration Extras
	$(SILENT) install -d -m 0755 $(DSTROOT)/$(SETUP_EXTRAS_DST_DIR)
	$(SILENT) install -d -m 0755 $(DSTROOT)/$(MIGRATION_EXTRAS_DST_DIR)
	$(SILENT) install -m 0755 "$(SRCROOT)/$(SETUP_EXTRAS_SRC_DIR)/cyrus" "$(DSTROOT)/$(SETUP_EXTRAS_DST_DIR)"
	$(SILENT) install -m 0755 "$(SRCROOT)/$(SETUP_EXTRAS_SRC_DIR)/migrate_cyrus_db" "$(DSTROOT)/$(MIGRATION_EXTRAS_DST_DIR)/61_migrate_cyrus_db"
	$(SILENT) install -m 0755 "$(SRCROOT)/$(SETUP_EXTRAS_SRC_DIR)/upgrade_cyrus_opts" "$(DSTROOT)/$(MIGRATION_EXTRAS_DST_DIR)/62_upgrade_cyrus_opts"
	$(SILENT) install -m 0755 "$(SRCROOT)/$(SETUP_EXTRAS_SRC_DIR)/migrate_pan_db" "$(DSTROOT)/$(TOOLS_DST_DIR)/migrate_pan_db"

	# Config Files
	$(SILENT) install -d -m 755 $(DSTROOT)/$(CONFIG_DST_DIR)
	$(SILENT) install -m 0640 "$(SRCROOT)/$(CONFIG_SRC_DIR)/cyrus.conf.default" "$(DSTROOT)/$(CONFIG_DST_DIR)/cyrus.conf.default"
	$(SILENT) install -m 0640 "$(SRCROOT)/$(CONFIG_SRC_DIR)/imapd.conf.default" "$(DSTROOT)/$(CONFIG_DST_DIR)/imapd.conf.default"

	# Launchd plist
	$(SILENT) install -d -m 755 "$(DSTROOT)/$(LAUNCHD_DST_DIR)"
	$(SILENT) install -m 0444 "$(SRCROOT)/$(LAUNCHD_SRC_DIR)/edu.cmu.andrew.cyrus.master.plist" "$(DSTROOT)/$(LAUNCHD_DST_DIR)"

	# Open Source Info
	$(SILENT) install -d -m 755 "$(DSTROOT)/$(OPEN_SRC_VERS_DST_DIR)"
	$(SILENT) install -d -m 755 "$(DSTROOT)/$(OPEN_SRC_LICS_DST_DIR)"
	$(SILENT) install -m 0444 "$(SRCROOT)/$(OPEN_SRC_INFO_SRC_DIR)/CyrusIMAP.plist" "$(DSTROOT)/$(OPEN_SRC_VERS_DST_DIR)"
	$(SILENT) install -m 0444 "$(SRCROOT)/$(OPEN_SRC_INFO_SRC_DIR)/CyrusIMAP.txt" "$(DSTROOT)/$(OPEN_SRC_LICS_DST_DIR)"

	$(SILENT) $(ECHO) "---- Installing $(PROJECT_NAME) complete."

strip_imap_binaries:
	$(SILENT) ($(RM) -rf $(DSTROOT)/usr/bin/cyrus/include/cyrus/strhash.o)
	$(SILENT) ($(RM) -rf $(DSTROOT)/usr/bin/cyrus/lib)
	$(SILENT) ($(STRIP) -S $(DSTROOT)$(LIB_PERL)$(PERL_VER)/darwin-thread-multi-2level/auto/Cyrus/IMAP/IMAP.bundle)
	$(SILENT) ($(STRIP) -S $(DSTROOT)$(LIB_PERL)$(PERL_VER)/darwin-thread-multi-2level/auto/Cyrus/SIEVE/managesieve/managesieve.bundle)
	$(SILENT) (/bin/echo "$(PROJECT)$(VERSION)" >> $(DSTROOT)$(LIB_PERL)$(PERL_VER)/darwin-thread-multi-2level/auto/Cyrus/IMAP/IMAP.bs)
	$(SILENT) (/bin/echo "$(PROJECT)$(VERSION)" >> $(DSTROOT)$(LIB_PERL)$(PERL_VER)/darwin-thread-multi-2level/auto/Cyrus/SIEVE/managesieve/managesieve.bs)
	for local_dir in $(LOCAL_DIRS); \
	do \
		$(SILENT) if [ -d "$(DSTROOT)/usr/local/$$local_dir" ]; then \
			$(SILENT) ($(RM) -rf "$(DSTROOT)/usr/local/$$local_dir") \
		fi \
	done

	for cyrus_bin in $(CYRUS_BINS); \
	do \
		$(SILENT) if [ -e "$(DSTROOT)$(BIN_DST_DIR)/$$cyrus_bin" ]; then \
			$(SILENT) ($(STRIP) -S "$(DSTROOT)$(BIN_DST_DIR)/$$cyrus_bin") \
		fi \
	done
	$(SILENT) ($(STRIP) -S "$(DSTROOT)$(BIN_DST_DIR)/proxyd")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)$(BIN_DST_DIR)/pop3proxyd")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)$(BIN_DST_DIR)/lmtpproxyd")

.PHONY: clean installhdrs installsrc build install 

$(DSTROOT) :
	$(SILENT) $(MKDIRS) $@

$(DSTROOT)$(LIB_PERL) :
	$(SILENT) $(MKDIRS) $@