# # Copyright (C) David Kuehling # # 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: