1
0
mirror of git://projects.qi-hardware.com/openwrt-packages.git synced 2024-11-16 19:53:09 +02:00
openwrt-packages/emacs/Makefile
David Kühling ed5db4233c emacs: enable second-stage "compilation" (i.e. dumping) via qemu
cuts startup time of emacs down to a few seconds
2011-06-26 10:46:33 +02:00

243 lines
7.2 KiB
Makefile

#
# 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:=5
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_BUILD_PARALLEL:=1
HOST_BUILD_PARALLEL:=1
PKG_FIXUP:=libtool
PKG_REMOVE_FILES:=
PKG_BUILD_DEPENDS:= emacs/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
DUMP_EMACS=1
EMACS_STRIPTEASE_ARGS = \
--without-x \
--without-xpm \
--without-jpeg \
--without-gif \
--without-png \
--without-rsvg \
--without-xft \
--without-libotf \
--without-dbus \
--without-gconf \
--without-gpm \
--without-sound
HOST_CONFIGURE_ARGS += $(EMACS_STRIPTEASE_ARGS)
CONFIGURE_ARGS += $(EMACS_STRIPTEASE_ARGS)
## Don't try that: lowering PURESIZE makes Emacs' RAM usage explode! Maybe
## something about Elisp garbage collection!?
#TARGET_CPPFLAGS += -DPURESIZE=16
# sed-script to apply to src/Makefile of emacs sources. more commands
# appended below
EMACS_MAKEFILE_SED = ;
# sed-script to apply to src/epaths.h, commands appended below
EMACS_EPATHS_SED = ;
## when DUMP_EMACS is unset, we 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.
ifeq ($(DUMP_EMACS),)
MAKE_FLAGS += "LD=$(TARGET_CROSS)gcc"
TARGET_CPPFLAGS += -DCANNOT_DUMP -DNO_REMAP -DORDINARY_LINK
EMACS_MAKEFILE_SED += ; s;\(TEMACS_LDFLAGS\|STARTFILES\) =.*;\1 =;
EMACS_MAKEFILE_SED += ; s; /usr/lib/crt[^ ]\+; ;g
EMACS_EPATHS_SED += ; s;\(\#.*PATH_DUMPLOADSEARCH\).*$$$$;\1 PATH_LOADSEARCH;
define emacs_perform_dump
$(CP) $(PKG_BUILD_DIR)/src/temacs $(PKG_BUILD_DIR)/src/emacs
endef
else
MAKE_FLAGS += LD="$(TARGET_CROSS)gcc -nostdlib"
TARGET_CPPFLAGS +=
# warning: on backfile it'd be $(TOOLCHAIN_DIR)/usr/lib
EMACS_MAKEFILE_SED += ; s; /usr/lib/crt\([^ ]\+\); $(TOOLCHAIN_DIR)/lib/crt\1;g
PKG_BUILD_DEPENDS += +qemu-host/host
define emacs_perform_dump
$(SED) \
's/(member (nth 3 command-line-args) .("dump" "bootstrap"))/t/g' \
$(PKG_BUILD_DIR)/lisp/loadup.el
cd $(PKG_BUILD_DIR)/src && \
$(STAGING_DIR_HOST)/bin/qemu-$(ARCH) -E LD_LIBRARY_PATH=$(STAGING_DIR_ROOT)/usr/lib/ \
-L $(STAGING_DIR_ROOT) -E LC_ALL=C ./temacs -batch -l loadup
endef
endif
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) '$(EMACS_MAKEFILE_SED)' $(PKG_BUILD_DIR)/src/Makefile
$(SED) '$(EMACS_EPATHS_SED)' $(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)
$(call emacs_perform_dump)
$(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="" "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: