Makefile   [plain text]


#
# xbs-compatible wrapper Makefile for SpamAssassin
#

PROJECT=SpamAssassin

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=SpamAssassin

AMAVIS_DIR=/private/var/amavis
VIRUS_MAILS_DIR=/private/var/virusmails
ETCDIR=/private/etc
ETC_SPAMA_DIR=/private/etc/mail/spamassassin
ETC_CLAMAV_DIR=/private/etc/spam/clamav
SHAREDIR=/usr/share/man
SETUPEXTRASDIR=SetupExtras
SASCRIPTSDIR=/System/Library/ServerSetup/SetupExtras
PERL_VER=`perl -V:version | sed -n -e "s/[^0-9.]*\([0-9.]*\).*/\1/p"`

STRIP=/usr/bin/strip

# Clam Antivirus config
#

CLAMAV_CONFIG= \
	--prefix=/ \
	--exec-prefix=/usr \
	--bindir=/usr/bin \
	--sbindir=/usr/sbin \
	--libexecdir=/usr/libexec \
	--datadir=/usr/share/clamav \
	--sysconfdir=/private/etc/spam/clamav \
	--sharedstatedir=/user/share/clamav/com \
	--localstatedir=/private/var/clamav \
	--libdir=/usr/lib \
	--includedir=/usr/share/clamav/include \
	--oldincludedir=/usr/share/clamav/include \
	--infodir=/usr/share/clamav/info \
	--mandir=/usr/share/man \
	--enable-milter \
	--with-dbdir=/private/var/clamav \
	--disable-shared \
	--with-user=0 \
	--with-group=0 \
	--enable-static

# Perl Modules
#

MODULES = Archive-Tar-1.08 Archive-Zip-1.10 Compress-Zlib-1.33 Convert-TNEF-0.17 \
		Digest-HMAC-1.01 Digest-SHA1-2.10 HTML-Parser-3.36 HTML-Tagset-3.03 \
		IO-stringy-2.109 Mail-Audit-2.1 Mail-POP3Client-2.16 Mail-SPF-Query-1.996 \
		MailTools-1.62 Net-DNS-0.47 Net-Ping-2.31 Net-Server-0.87 Unix-Syslog-0.99 \
		MIME-tools-5.411 URI-1.30
# URI-1.30 razor-agents-2.40

WITH_CCCDLFLAGS = Convert-UUlib-1.03

# DB_File-1.808 - fails with
#  ld: /usr/local/BerkeleyDB/lib/libdb.a(env_open.o) has local relocation entries in non-writable section (__TEXT,__text)
# razor-agents-2.40
#  BEGIN failed--compilation aborted at blib/script/razor-client line 21.

# These includes provide the proper paths to system utilities
#

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

default:: make_sa make_modules make_clamav

install :: make_clamav_install make_amavisd_install make_sa_install make_modules_install

install_debug :: make_sasl_install make_imap_install

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

make_sa :
	$(SILENT) $(ECHO) "-------------- Spam Assassin --------------"
	$(SILENT) ($(CD) "$(SRCROOT)/SpamAssassin" && perl Makefile.PL PREFIX=/ DESTDIR=$(DSTROOT))
	$(SILENT) ($(CD) "$(SRCROOT)/SpamAssassin" && make)

make_clamav :
	$(SILENT) $(ECHO) "-------------- Clam AV --------------"
	$(SILENT) ($(CD) "$(SRCROOT)/clamav" && /usr/bin/gnutar -xzpf clamav-0.70-rc.tar.gz)
	$(SILENT) ($(CD) "$(SRCROOT)/clamav/clamav" && ./configure $(CLAMAV_CONFIG))
	$(SILENT) ($(CD) "$(SRCROOT)/clamav/clamav" && make)

make_clamav_install :  $(DSTROOT)$(ETCDIR) $(DSTROOT)$(ETC_CLAMAV_DIR)
	$(SILENT) $(ECHO) "-------------- Clam AV --------------"
	$(SILENT) ($(CD) "$(SRCROOT)/clamav" && /usr/bin/gnutar -xzpf clamav-0.70-rc.tar.gz)
	$(SILENT) if [ -e "$(SRCROOT)/clamav/clamav/Makefile" ]; then\
		$(SILENT) ($(CD) "$(SRCROOT)/clamav/clamav" && make distclean) \
	fi
	$(SILENT) ($(CD) "$(SRCROOT)/clamav/clamav" && ./configure $(CLAMAV_CONFIG) CFLAGS="$(RC_CFLAGS)")
	$(SILENT) ($(CD) "$(SRCROOT)/clamav/clamav" && make "DESTDIR=$(SRCROOT)/Extra/dest" install)
	$(SILENT) ($(CD) "$(SRCROOT)/Extra/dest" && $(CP) -rpf * "$(DSTROOT)")
	$(SILENT) ($(CD) "$(SRCROOT)/Extra/etc" && $(CP) -rpf *.conf "$(DSTROOT)$(ETC_CLAMAV_DIR)/")
	$(SILENT) ($(CD) "$(DSTROOT)" && /usr/sbin/chown -R root:wheel *)
	$(SILENT) (/usr/sbin/chown -R clamav:clamav "$(DSTROOT)$(ETC_CLAMAV_DIR)")
	$(SILENT) ($(RM) -rf "$(SRCROOT)/clamav/clamav")
	$(SILENT) ($(RM) -rf "$(SRCROOT)/Extra/dest/usr")
	$(SILENT) ($(RM) -rf "$(SRCROOT)/Extra/dest/private")

make_amavisd_install : $(DSTROOT)$(AMAVIS_DIR) $(DSTROOT)$(VIRUS_MAILS_DIR)
	$(SILENT) $(ECHO) "-------------- Amavisd --------------"
	$(SILENT) ($(CP) "$(SRCROOT)/amavisd/amavisd.conf" "$(DSTROOT)/private/etc/")
	$(SILENT) (/usr/sbin/chown root "$(DSTROOT)/private/etc/amavisd.conf")
	$(SILENT) (/bin/chmod 644 "$(DSTROOT)/private/etc/amavisd.conf")
	$(SILENT) ($(CP) "$(SRCROOT)/amavisd/amavisd" "$(DSTROOT)/usr/bin/")
	$(SILENT) (/usr/sbin/chown root "$(DSTROOT)/usr/bin/amavisd")
	$(SILENT) (/bin/chmod 755 "$(DSTROOT)/usr/bin/amavisd")
	$(SILENT) (/usr/sbin/chown -R clamav:clamav "$(DSTROOT)$(AMAVIS_DIR)")
	$(SILENT) (/bin/chmod 750 "$(DSTROOT)$(AMAVIS_DIR)")
	$(SILENT) (/usr/sbin/chown -R clamav:clamav "$(DSTROOT)$(VIRUS_MAILS_DIR)")
	$(SILENT) (/bin/chmod 750 "$(DSTROOT)$(VIRUS_MAILS_DIR)")
	$(SILENT) (/bin/echo "\n" > "$(DSTROOT)$(AMAVIS_DIR)/whitelist_sender")
	$(SILENT) (/usr/sbin/chown -R clamav:clamav "$(DSTROOT)$(AMAVIS_DIR)/whitelist_sender")
	$(SILENT) (/bin/chmod 644 "$(DSTROOT)$(AMAVIS_DIR)/whitelist_sender")
	$(SILENT) ($(CP) "$(SRCROOT)/Extra/usr/share/man/man8/"* "$(DSTROOT)/usr/share/man/man8/")

make_sa_install : $(DSTROOT)$(SHAREDIR) $(DSTROOT)$(ETCDIR) $(DSTROOT)$(ETC_SPAMA_DIR)
	$(SILENT) $(ECHO) "-------------- Spam Assassin --------------"
	$(SILENT) ($(CD) "$(SRCROOT)/SpamAssassin" && perl Makefile.PL PREFIX=/ DESTDIR=$(DSTROOT))
	$(SILENT) ($(CD) "$(SRCROOT)/SpamAssassin" && make CFLAGS="$(RC_CFLAGS)" install)
	$(SILENT) ($(CD) "$(DSTROOT)/etc" && $(CP) -rpf * $(DSTROOT)$(ETCDIR))
	$(SILENT) ($(CD) "$(DSTROOT)" && $(RM) -rf "$(DSTROOT)/etc")
	$(SILENT) ($(CD) "$(DSTROOT)/man" && $(CP) -rpf * "$(DSTROOT)$(SHAREDIR)")
	$(SILENT) ($(CD) "$(DSTROOT)" && $(RM) -rf "$(DSTROOT)/man")
	$(SILENT) if [ -d "$(DSTROOT)/lib/perl5/site_perl/" ]; then\
		$(SILENT) ($(CD) "$(DSTROOT)/lib/perl5/site_perl/" && $(CP) -rpf * "$(DSTROOT)/System/Library/Perl/"); \
	fi
	$(SILENT) if [ -d "$(DSTROOT)/lib" ]; then\
		$(SILENT) ($(CD) "$(DSTROOT)" && $(RM) -rf "$(DSTROOT)/lib"); \
	fi
	$(SILENT) if [ -d "$(DSTROOT)/Library/Perl" ]; then\
		$(SILENT) ($(CD) "$(DSTROOT)/Library/Perl/" && $(CP) -rpf * "$(DSTROOT)/System/Library/Perl/"); \
	fi
	$(SILENT) if [ -d "$(DSTROOT)/Library/Perl" ]; then\
		$(SILENT) ($(CD) "$(DSTROOT)" && $(RM) -rf "$(DSTROOT)/Library"); \
	fi
	$(SILENT) ($(STRIP) -S $(DSTROOT)/usr/bin/spamd)
	$(SILENT) ($(STRIP) -S $(DSTROOT)/usr/bin/spamc)
	$(SILENT) ($(CD) "$(SRCROOT)/SpamAssassin" && make clean)
	$(SILENT) ($(CD) "$(SRCROOT)" && $(RM) ./SpamAssassin/Makefile.old)
	$(SILENT) ($(CP) "$(SRCROOT)/Extra/etc/mail/spamassassin/local.cf" "$(DSTROOT)$(ETC_SPAMA_DIR)")
	$(SILENT) $(ECHO) "---- Building Spam Assassin complete."

make_modules :
	$(SILENT) $(ECHO) "-------------- Perl Modules ---------------"
	for perl_mod in $(MODULES); \
	do \
		$(CD) "$(SRCROOT)/Perl/$$perl_mod" && perl Makefile.PL PREFIX=/ DESTDIR=$(DSTROOT) || exit 1; \
	done

make_modules_install :
	$(SILENT) $(ECHO) "-------------- Perl Modules ---------------"
	$(SILENT) $(ECHO) "Perl Version: $(PERL_VER)"
	for perl_mod in $(MODULES); \
	do \
		$(CD) "$(SRCROOT)/Perl/$$perl_mod" && perl Makefile.PL PREFIX=/ && make DESTDIR=$(DSTROOT) CFLAGS="$(RC_CFLAGS)" OTHERLDFLAGS="$(RC_CFLAGS)" install || exit 1; \
	done
	for perl_mod in $(MODULES); \
	do \
		$(CD) "$(SRCROOT)/Perl/$$perl_mod" && make distclean || exit 1; \
	done
	for perl_mod in $(WITH_CCCDLFLAGS); \
	do \
		$(CD) "$(SRCROOT)/Perl/$$perl_mod" && perl Makefile.PL PREFIX=/ && make DESTDIR=$(DSTROOT) CCCDLFLAGS="$(RC_CFLAGS)" OTHERLDFLAGS="$(RC_CFLAGS)" install || exit 1; \
	done
	for perl_mod in $(WITH_CCCDLFLAGS); \
	do \
		$(CD) "$(SRCROOT)/Perl/$$perl_mod" && make distclean || exit 1; \
	done
	$(SILENT) if [ -d "$(DSTROOT)/lib/perl5/site_perl/" ]; then\
		$(SILENT) ($(CD) "$(DSTROOT)/lib/perl5/site_perl/" && $(CP) -rpf * "$(DSTROOT)/System/Library/Perl/"); \
	fi
	$(SILENT) if [ -d "$(DSTROOT)/lib" ]; then\
		$(SILENT) ($(CD) "$(DSTROOT)" && $(RM) -rf "$(DSTROOT)/lib"); \
	fi
	$(SILENT) if [ -d "$(DSTROOT)/Library/Perl" ]; then\
		$(SILENT) ($(CD) "$(DSTROOT)/Library/Perl/" && $(CP) -rpf * "$(DSTROOT)/System/Library/Perl/"); \
	fi
	$(SILENT) if [ -d "$(DSTROOT)/Library/Perl" ]; then\
		$(SILENT) ($(CD) "$(DSTROOT)" && $(RM) -rf "$(DSTROOT)/Library"); \
	fi
	$(SILENT) ($(CD) "$(DSTROOT)/man" && $(CP) -rpf * $(DSTROOT)$(SHAREDIR))
	$(SILENT) ($(CD) "$(DSTROOT)" && $(RM) -rf "$(DSTROOT)/man")
	$(SILENT) ($(CP) -rpf "$(DSTROOT)/System/Library/Perl/Archive" "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/System/Library/Perl/Archive")
	$(SILENT) ($(CP) -rpf "$(DSTROOT)/System/Library/Perl/Convert" "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/System/Library/Perl/Convert")
	$(SILENT) ($(CP) -rpf "$(DSTROOT)/System/Library/Perl/Digest" "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/System/Library/Perl/Digest")
	$(SILENT) ($(CP) -rpf "$(DSTROOT)/System/Library/Perl/HTML" "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/System/Library/Perl/HTML")
	$(SILENT) ($(CP) -rpf "$(DSTROOT)/System/Library/Perl/IO" "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/System/Library/Perl/IO")
	$(SILENT) ($(CP) -rpf "$(DSTROOT)/System/Library/Perl/Mail" "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/System/Library/Perl/Mail")
	$(SILENT) ($(CP) -rpf "$(DSTROOT)/System/Library/Perl/Net" "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/System/Library/Perl/Net")
	$(SILENT) ($(CP) -rpf "$(DSTROOT)/System/Library/Perl/auto" "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/System/Library/Perl/auto")
	$(SILENT) ($(CP) -rpf "$(DSTROOT)/System/Library/Perl/MIME" "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/System/Library/Perl/MIME")
	$(SILENT) ($(CP) -rpf "$(DSTROOT)/System/Library/Perl/URI" "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/System/Library/Perl/URI")
	$(SILENT) ($(CP) -rpf "$(DSTROOT)/System/Library/Perl/URI.pm" "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/System/Library/Perl/URI.pm")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/Digest/SHA1/SHA1.bundle")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/HTML/Parser/Parser.bundle")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/Net/DNS/DNS.bundle")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/Compress/Zlib/Zlib.bundle")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/Convert/UUlib/UUlib.bundle")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/Unix/Syslog/Syslog.bundle")
	$(SILENT) ($(ECHO) "bii" >> "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/Digest/SHA1/SHA1.bs")
	$(SILENT) ($(ECHO) "bii" >> "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/Convert/UUlib/UUlib.bs")
	$(SILENT) ($(ECHO) "bii" >> "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/HTML/Parser/Parser.bs")
	$(SILENT) ($(ECHO) "bii" >> "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/Net/DNS/DNS.bs")
	$(SILENT) ($(ECHO) "bii" >> "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/Compress/Zlib/Zlib.bs")
	$(SILENT) ($(ECHO) "bii" >> "$(DSTROOT)/System/Library/Perl/$(PERL_VER)/darwin-thread-multi-2level/auto/Unix/Syslog/Syslog.bs")
	$(SILENT) ($(CD) "$(DSTROOT)" && /usr/bin/chgrp -R wheel *)
	$(SILENT) ($(STRIP) -S "$(DSTROOT)/usr/bin/clamdscan")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)/usr/bin/clamscan")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)/usr/bin/freshclam")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)/usr/bin/sigtool")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/usr/lib/libclamav.a")
	$(SILENT) ($(RM) -rf "$(DSTROOT)/usr/lib/libclamav.la")
	$(SILENT) ($(STRIP) -S "$(DSTROOT)/usr/sbin/clamd")
	$(SILENT) (/bin/chmod 755 "$(DSTROOT)/private/var/clamav")
	$(SILENT) (/bin/chmod 644 "$(DSTROOT)/private/var/clamav/daily.cvd")
	$(SILENT) (/bin/chmod 644 "$(DSTROOT)/private/var/clamav/main.cvd")
	$(SILENT) ($(RM) -rf "$(SRCROOT)/clamav")
	$(SILENT) $(ECHO) "---- Building Perl Modules complete."

.PHONY: clean installhdrs installsrc build install 

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

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

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

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

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

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

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