summaryrefslogtreecommitdiff
path: root/emacs/Makefile
blob: 166f482c28bd94a64ff892f5192df96c458eb866 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# 
# Copyright (C) David Kuehling <dvdkhlng TA gmx TOD de>
#
# License GPLv2 or later.  NO WARRANTY.
#
# OpenWRT package for the complete GNU Emacs editor

include $(TOPDIR)/rules.mk

PKG_NAME:=emacs
PKG_VERSION:=23.2
PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=ftp://ftp.fu-berlin.de/pub/gnu/emacs/ \
	@GNU/emacs/

PKG_MD5SUM:=b6691852dae0bc142b3c12749f6b7ade
PKG_INSTALL:=1
PKG_FIXUP:=libtool

PKG_BUILD_DEPENDS:= emacs/host libtool/host

include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/package.mk

define Package/emacs/Default
  SUBMENU:=Emacs
  SECTION:=utils
  CATEGORY:=Utilities
  TITLE:=The GNU Emacs Editor a.k.a. \"Emacs OS\"
  URL:=http://www.gnu.org/software/emacs/
#  SUBMENU:=Editors
endef

define Package/emacs/Default/description
GNU Emacs is an extensible, customizable text editor  and more. 
At its core is an interpreter for Emacs Lisp, a dialect of the 
Lisp programming language with extensions to support text editing.
endef

define Package/emacs
$(call Package/emacs/Default)
  DEPENDS:=+libncurses +emacs-data
  TITLE+= (executable)
endef

define Package/emacs/description
$(call Package/emacs/Default/description)
 This package contains the Emacs executable files
endef

define Package/emacs-data
$(call Package/emacs/Default)
  TITLE+= (compiled lisp)
endef

define Package/emacs-data/description
$(call Package/emacs/Default/description)
 This package contains the compiled Lisp files needed to run Emacs.
endef

define Package/emacs-ja-dic
$(call Package/emacs/Default)
  TITLE+= (japanese input dictionary)
  DEPENDS:=+emacs
endef

define Package/emacs-ja-dic/description
$(call Package/emacs/Default/description)
 This package contains the japanese dictionary used to input japanese Kanji 
 via Hiragana->Kanji conversion (\'set-input-method japanese\').  This
 dictionary is huge, so huge that emacs won\'t be able to load it on systems
 with 32MB or fewer RAM.
endef

define Package/emacs-el
$(call Package/emacs/Default)
  TITLE+= (lisp source)
endef

define Package/emacs-el/description
$(call Package/emacs/Default/description)
 This package contains the Lisp source files of Emacs that can queried via
 C-h f in case provided documentation of an Emacs function is insufficient.
endef

EMACS_STRIPTEASE_ARGS = \
	--without-x \
	--without-xpm \
	--without-jpeg \
	--without-gif \
	--without-png \
	--without-rsvg \
	--without-xft \
	--without-libotf \
	--without-dbus \
	--without-gconf 

HOST_CONFIGURE_ARGS += $(EMACS_STRIPTEASE_ARGS)
CONFIGURE_ARGS += $(EMACS_STRIPTEASE_ARGS)
MAKE_FLAGS += "LD=$(TARGET_CROSS)gcc" 

## Don't try that: lowering PURESIZE makes Emacs' RAM usage explode!  Maybe
## something about Elisp garbage collection!?
#TARGET_CPPFLAGS += -DPURESIZE=16

## Keep emacs build system from doing all kinds nasty tricks that won't work
## (well) with openwrt and uclibc.  Especially keep it from attempting to
## manually configure crt* startup file linking.  We won't be able to 'dump'
## during cross-compile anyway.  Dumping inside the target system seems not
## possible due to lack of RAM.  Note that we also need to sanitize the
## Makefile using 'sed' below.
TARGET_CPPFLAGS += -DCANNOT_DUMP -DNO_REMAP -DORDINARY_LINK

define Build/Prepare
	$(call Build/Prepare/Default)
endef

define Host/Configure
	$(call Host/Configure/Default)
endef

## On the host, we only compile and install minimum Emacs components used for
## bootstrapping
define Host/Compile
	export LD_LIBRARY_PATH=$(STAGING_DIR_HOST)/lib; \
	$(call Host/Compile/Default)
endef

define Host/Install
	$(call Host/Install/Default)
	$(INSTALL_BIN) $(HOST_BUILD_DIR)/lib-src/make-docfile $(STAGING_DIR_HOST)/bin/emacs-make-docfile
	$(INSTALL_BIN) $(HOST_BUILD_DIR)/src/prefix-args $(STAGING_DIR_HOST)/bin/emacs-prefix-args
endef

define Build/Configure
	$(call Build/Configure/Default)
endef

define Build/Compile
	$(call Build/Compile/Default, -C lib-src -o test-distrib)
	ln -sf $(STAGING_DIR_HOST)/bin/emacs-make-docfile $(PKG_BUILD_DIR)/lib-src/make-docfile
	ln -sf $(STAGING_DIR_HOST)/bin/emacs-prefix-args $(PKG_BUILD_DIR)/src/prefix-args
	sed -ie 's;\(TEMACS_LDFLAGS\|STARTFILES\) =.*;\1 =;' $(PKG_BUILD_DIR)/src/Makefile
#	sed -ie 's; /usr/lib/crt[^ ]\+; $(TOOLCHAIN_DIR)/usr/lib/crt;g' $(PKG_BUILD_DIR)/src/Makefile
	sed -ie 's; /usr/lib/crt[^ ]\+; ;g' $(PKG_BUILD_DIR)/src/Makefile
	sed -ie 's;\(#.*PATH_DUMPLOADSEARCH\).*$$$$;\1 PATH_LOADSEARCH;' $(PKG_BUILD_DIR)/src/epaths.h
	$(call Build/Compile/Default, -C src -o lib-src -o prefix-args -o ../lib-src/make-docfile temacs ../etc/DOC)
	cp -v $(PKG_BUILD_DIR)/src/temacs $(PKG_BUILD_DIR)/src/emacs
	$(call Build/Compile/Default, -C lisp EMACS=$(STAGING_DIR_HOST)/bin/emacs)
	$(call Build/Compile/Default, -C leim BUILT-EMACS=$(STAGING_DIR_HOST)/bin/emacs)
endef

define Build/Install
	sed -ie 's;./src/emacs\( --version\);$(STAGING_DIR_HOST)/bin/emacs \1;g' \
		$(PKG_BUILD_DIR)/Makefile
	$(call Build/Install/Default,install-arch-indep install-arch-dep install-leim INSTALL_STRIP=-s "MFLAGS=-o test-distrib")
	$(INSTALL_DATA) ./files/site-start.el $(PKG_INSTALL_DIR)/usr/share/emacs/$(PKG_VERSION)/site-lisp
endef

define Package/emacs/install
	$(INSTALL_DIR) $(1)/usr
	cp -r $(PKG_INSTALL_DIR)/usr/{bin,lib} $(1)/usr
endef

define Package/emacs-data/install
	$(INSTALL_DIR) $(1)/
	(cd $(PKG_INSTALL_DIR)/ && \
	  tar -cf - --exclude "*.el.gz" \
		--exclude "images" \
		--exclude "refcards" \
		--exclude "schema" \
		--exclude "NEWS*" \
		--exclude "ja-dic" \
		usr/share) \
	    | (cd $(1)/ && tar -xvf -)
endef

define Package/emacs-ja-dic/install
	$(INSTALL_DIR) $(1)/usr
	(cd $(PKG_INSTALL_DIR)/usr && tar -cf - \
	    --exclude "*.el.gz" share/emacs/$(PKG_VERSION)/leim/ja-dic) \
		| (cd $(1)/usr && tar -xvf -)
endef

define Package/emacs-el/install
	$(INSTALL_DIR) $(1)/usr
	(cd $(PKG_INSTALL_DIR)/usr && find share -name "*.el.gz" \
	  | tar -cf - -T - --exclude "ja-dic" ) \
	 | (cd $(1)/usr && tar -xvf -)
endef


$(eval $(call HostBuild))
$(eval $(call BuildPackage,emacs))
$(eval $(call BuildPackage,emacs-data))
$(eval $(call BuildPackage,emacs-ja-dic))
$(eval $(call BuildPackage,emacs-el))


# The following comments configure the Emacs editor.  Just ignore them.
# Local Variables:
# compile-command: "make -C ~/h/src/qi/openwrt-xburst package/emacs/compile -j2 V=99"
# End: