1##
2# Makefile for emacs
3##
4
5Extra_CC_Flags = -Wno-pointer-sign
6Extra_LD_Flags = -Wl,-headerpad,0x1000 -Wl,-no_pie -Wl,-no_function_starts
7Extra_Configure_Flags = --without-x --without-carbon ac_cv_host=mac-apple-darwin ac_cv_func_posix_memalign=no
8
9# Project info
10Project  = emacs
11GNUVersion = 22.1
12UserType = Developer
13ToolType = Commands
14#CommonNoInstallSource = YES
15GnuAfterInstall = remove-dir install-dumpemacs cleanup install-plist install-default install-dsyms
16GnuNoBuild = YES
17# It's a GNU Source project
18include $(MAKEFILEPATH)/CoreOS/ReleaseControl/GNUSource.make
19DSYMUTIL?=dsymutil
20RSYNC?=rsync
21Environment+= SHELL="$(SRCROOT)"/pipefail.sh
22NJOBS=$(shell sysctl -n hw.activecpu)
23
24# Automatic Extract & Patch
25AEP_Project    = $(Project)
26AEP_Version    = $(GNUVersion)
27AEP_ProjVers   = $(AEP_Project)-$(AEP_Version)
28AEP_Filename   = $(AEP_ProjVers).tar.gz
29AEP_ExtractDir = $(AEP_ProjVers)
30AEP_Patches    = Apple.diff files.el.diff \
31	CVE-2007-6109.diff darwin.h.diff vcdiff.diff lread.c.diff \
32	fast-lock.el.diff python.el.diff src_Makefile.in.diff \
33	lisp_Makefile.in.diff xdisp.c.diff lib-src_update-game-score.c.diff \
34	src_fileio.c.diff src_search.c.diff lib-src_etags.c.diff \
35	src_regex.c.diff
36
37# Extract the source.
38install_source::
39	$(TAR) --exclude "*.elc" --exclude info -C "$(SRCROOT)" -zxf "$(SRCROOT)/$(AEP_Filename)"
40	$(RMDIR) "$(SRCROOT)/$(AEP_Project)"
41	$(MV) "$(SRCROOT)/$(AEP_ExtractDir)" "$(SRCROOT)/$(AEP_Project)"
42	$(CHMOD) -R go-w "$(SRCROOT)/$(Project)"
43	for patchfile in $(AEP_Patches); do \
44		cd "$(SRCROOT)/$(Project)" && patch -lp0 -F0 < "$(SRCROOT)/patches/$$patchfile" || exit 1; \
45	done
46	$(INSTALL_FILE) "$(SRCROOT)/mac.h" "$(SRCROOT)/$(AEP_Project)/src/m"
47	$(INSTALL_FILE) "$(SRCROOT)/unexmacosx.c" "$(SRCROOT)/$(AEP_Project)/src"
48	for f in $(EXTRAEL); do $(RM) "$(SRCROOT)/$$f"; done
49
50OSV = $(DSTROOT)/usr/local/OpenSourceVersions
51OSL = $(DSTROOT)/usr/local/OpenSourceLicenses
52
53EXTRAEL=	emacs/lisp/cus-load.el \
54		emacs/lisp/eshell/esh-groups.el \
55		emacs/lisp/finder-inf.el \
56		emacs/lisp/loaddefs.el \
57		emacs/lisp/mh-e/mh-loaddefs.el \
58		emacs/lisp/subdirs.el
59
60#installsrc :
61#	if test ! -d $(SRCROOT) ; then mkdir -p $(SRCROOT); fi;
62# --include to workaround .cvsignores
63#	rsync -aC --include '*.ps' --include configure --include Resources --include index.texi ./ $(SRCROOT)/
64
65remove-dir :
66	rm $(DSTROOT)/usr/share/info/dir
67
68$(OBJROOT)/bo.h:
69	printf "char bo[] = {\n" > $@
70	hexdump -ve '1/1 "0x%02x,"' < $(OBJROOT)/src/buildobj.lst >> $@
71	printf "};\n" >> $@
72
73$(OBJROOT)/runit.o: $(SRCROOT)/runit.c
74	$(CC) -c $(CFLAGS) -o $@ $^ 
75
76$(OBJROOT)/dumpemacs.o: $(OBJROOT)/bo.h $(OBJROOT)/src/version.h
77	$(CC) -I $(OBJROOT) -DkEmacsVersion=$(patsubst %,'"%"', $(GNUVersion)) $(CFLAGS) -o $@ -g -c $(SRCROOT)/dumpemacs.c
78
79$(SYMROOT)/dumpemacs: $(OBJROOT)/dumpemacs.o $(OBJROOT)/runit.o
80	$(CC) $(CFLAGS) -o $@ -g $^
81
82install-dumpemacs: $(SYMROOT)/dumpemacs
83	$(INSTALL) -s -o root -g wheel -m 555 $(SYMROOT)/dumpemacs $(DSTROOT)/usr/libexec/dumpemacs
84	$(DSYMUTIL) $(SYMROOT)/dumpemacs
85	$(INSTALL) -s -o root -g wheel -m 555 $(SYMROOT)/emacs $(DSTROOT)/usr/bin/emacs
86	$(INSTALL) -d "$(DSTROOT)"/usr/share/man/man{1,8}
87	$(INSTALL) -m 444 -o root -g wheel $(SRCROOT)/dumpemacs.8 "$(DSTROOT)"/usr/share/man/man8
88	$(INSTALL) -m 444 -o root -g wheel $(SRCROOT)/emacs-undumped.1 "$(DSTROOT)"/usr/share/man/man1
89
90build::
91	find "$(OBJROOT)" -name Makefile -exec $(SRCROOT)/fixMakefile {} \;
92	@echo "Bootstraping $(Project)..."
93	$(MKDIR) $(OBJROOT)/src/arch
94ifeq (ppc,$(filter ppc,$(RC_ARCHS)))
95	$(CC) $(CFLAGS) -c -o $(OBJROOT)/emacs-ppc.o $(SRCROOT)/emacs-ppc.c
96	$(CC) $(CFLAGS) -o $(OBJROOT)/src/arch/emacs-ppc $(OBJROOT)/emacs-ppc.o
97	lipo $(OBJROOT)/src/arch/emacs-ppc -extract_family ppc -output $(OBJROOT)/src/arch/emacs-ppc
98endif
99	ruby version.rb emacs > $(OBJROOT)/src/version.h
100	$(_v) $(MAKE) -j $(NJOBS) -C $(BuildDirectory) $(Environment) bootstrap
101	$(CP) $(OBJROOT)/src/emacs $(SYMROOT)
102	$(DSYMUTIL) $(SYMROOT)/emacs # Use current objs
103	@echo "Change default LoadPath for installed emacs-undumped"
104	$(MV) $(OBJROOT)/src/lread.o $(OBJROOT)/src/lread.o+save
105	$(MV) $(OBJROOT)/src/temacs $(OBJROOT)/src/temacs+save
106	$(RM) $(DSTROOT)/usr/bin/emacs-undumped
107	$(_v) $(MAKE) -C $(BuildDirectory)/src $(Environment) MYCPPFLAGS=-DEMACS_UNDUMPED temacs
108	$(INSTALL_FILE) $(OBJROOT)/src/temacs $(OBJROOT)/src/emacs-undumped
109	$(INSTALL_FILE) $(OBJROOT)/src/emacs-undumped $(SYMROOT)
110	$(DSYMUTIL) $(SYMROOT)/emacs-undumped
111# Don't rebuild anything else
112	$(MV) -f $(OBJROOT)/src/lread.o+save $(OBJROOT)/src/lread.o
113	$(MV) -f $(OBJROOT)/src/temacs+save $(OBJROOT)/src/temacs
114
115cleanup:			# Return sources to pristine state
116	@echo "Cleaning $(Project)..."
117	find $(SRCROOT) -type f -name '*.el[c~]' -delete
118	$(RM) -r $(SRCROOT)/emacs/info
119	$(RM) "$(DSTROOT)/usr/bin/ctags" "$(DSTROOT)/usr/share/man/man1/ctags.1"
120	$(RM) "$(DSTROOT)/usr/bin/"{b2m,ebrowse,grep-changelog,rcs-checkin}
121	$(RM) -r "$(DSTROOT)/usr/var"
122	for f in $(EXTRAEL); do $(RM) -f "$(SRCROOT)/$$f"; done
123
124install-plist:
125	$(INSTALL) -d $(OSV)
126	$(INSTALL_FILE) $(SRCROOT)/$(Project).plist $(OSV)/$(Project).plist
127	$(INSTALL) -d $(OSL)
128	$(INSTALL_FILE) $(Sources)/COPYING $(OSL)/$(Project).txt
129
130install-default:
131	$(INSTALL) -o root -g wheel -m 644 default.el "$(DSTROOT)"/usr/share/emacs/site-lisp
132	$(INSTALL) -o root -g wheel -m 644 site-start.el "$(DSTROOT)"/usr/share/emacs/site-lisp
133
134install-dsyms:
135	for f in emacsclient etags cvtmail digest-doc fakemail hexl movemail profile sorted-doc update-game-score; do \
136		$(RSYNC) -ia $(OBJROOT)/lib-src/$$f $(SYMROOT)/; \
137		$(DSYMUTIL) $(SYMROOT)/$$f; \
138	done
139
140