#!/bin/sh # Building requires fakedestdir. It should be in PATH. # Build and install GNU emacs for Slackware. # Before starting, you might want to reduce dependancies in the # .tgz packages by doing this (no, you really don't want to do this): # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #removepkg xaw3d #rm /usr/lib/libjpeg.so #rm /usr/lib/libpng.so #rm /usr/lib/libtiff.so #rm /usr/lib/libungif.so # and then replace these things after the build. VERSION=21.4 ARCH=${ARCH:-x86_64} BUILD=1 PKGFORMAT=tgz TMP=${TMP:-/tmp} case "$ARCH" in i386) SLKCFLAGS="-O2 -march=i386 -mcpu=i686" ;; i486) SLKCFLAGS="-O2 -march=i486 -mcpu=i686" ;; s390) SLKCFLAGS="-O2" ;; powerpc) SLKCFLAGS="-O2" ;; x86_64) SLKCFLAGS="-O2 -fPIC"; LIBDIRSUFFIX="64" ;; esac export CFLAGS=$SLKCFLAGS export LDFLAGS="-s" set -e CWD=`pwd` PKG=$TMP/package-emacs PKG_INFO=$TMP/package-emacs-info PKG_LEIM=$TMP/package-emacs-leim PKG_LISP=$TMP/package-emacs-lisp PKG_MISC=$TMP/package-emacs-misc PKG_NOX=$TMP/package-emacs-nox umask 0022 rm -rf $PKG $PKG_INFO $PKG_LEIM $PKG_LISP $PKG_MISC $PKG_NOX cd $TMP rm -rf emacs-$VERSION tar xjvf $CWD/emacs-$VERSION.tar.bz2 tar xjvf $CWD/leim-$VERSION.tar.bz2 cd emacs-$VERSION # Fix AltGr problem in X11 build. http://bugs.gentoo.org/show_bug.cgi?id=66508 zcat $CWD/emacs.xorg.patch.gz | patch -p1 # Save some docs: mkdir -p $PKG/usr/doc/emacs-$VERSION cp -a BUGS FTP INSTALL README $PKG/usr/doc/emacs-$VERSION chmod 644 $PKG/usr/doc/emacs-$VERSION/* ( cd $PKG/usr/doc/emacs-$VERSION ; ln -sf /usr/share/emacs/$VERSION/etc . ) # Add x86_64 support - thanks gentoo zcat $CWD/emacs-21.3-amd64-from-gentoo.diff.gz | patch -p1 --verbose # Build a version of emacs that is not linked to the X11 libraries: ./configure $ARCH-slackware-linux \ --prefix=/usr \ --libdir=/usr/lib$LIBDIRSUFFIX \ --with-x=no \ --with-pop make fakedestdir "$PKG" install ( cd $PKG/usr/bin ; mv emacs-$VERSION emacs-$VERSION-no-x11 ) # OK, now we start over building the full X11 emacs: ./configure $ARCH-slackware-linux \ --prefix=/usr \ --libdir=/usr/lib$LIBDIRSUFFIX \ --with-x11 \ --with-x-toolkit \ --with-pop make fakedestdir "$PKG" install ( cd $PKG/usr/bin ; mv emacs-$VERSION emacs-$VERSION-with-x11 ; rm -f emacs ) ###################################################################### # Split into a separate packages: # emacs-info: mkdir -p $PKG_INFO/usr $PKG_INFO/install mv $PKG/usr/info $PKG_INFO/usr rm $PKG_INFO/usr/info/dir gzip -9 $PKG_INFO/usr/info/* cat $CWD/slack-desc.emacs-info > $PKG_INFO/install/slack-desc # emacs-leim: mkdir -p $PKG_LEIM/usr/share/emacs/$VERSION $PKG_LEIM/install mv $PKG/usr/share/emacs/$VERSION/leim $PKG_LEIM/usr/share/emacs/$VERSION cat $CWD/slack-desc.emacs-leim > $PKG_LEIM/install/slack-desc # emacs-lisp mkdir -p $PKG_LISP/usr/share/emacs/$VERSION $PKG_LISP/install # We cp instead of mv and remove the rest of the duplicates later. cp -a $PKG/usr/share/emacs/$VERSION/lisp $PKG_LISP/usr/share/emacs/$VERSION find $PKG_LISP \! -type d \! -name "*.el" | xargs rm -f cat $CWD/slack-desc.emacs-lisp > $PKG_LISP/install/slack-desc # emacs-misc: mkdir -p $PKG_MISC/usr/share/emacs/$VERSION $PKG_MISC/install mv $PKG/usr/share/emacs/$VERSION/etc $PKG_MISC/usr/share/emacs/$VERSION mkdir -p $PKG/usr/share/emacs/$VERSION/etc mv $PKG_MISC/usr/share/emacs/$VERSION/etc/DOC-$VERSION.* $PKG/usr/share/emacs/$VERSION/etc cat $CWD/slack-desc.emacs-misc > $PKG_MISC/install/slack-desc # emacs-nox: mkdir -p $PKG_NOX/usr/bin $PKG_NOX/usr/libexec/emacs/21.4/$ARCH-slackware-linux $PKG_NOX/install mv $PKG/usr/bin/emacs-$VERSION-no-x11 $PKG_NOX/usr/bin ln -s emacs-$VERSION-no-x11 $PKG_NOX/usr/bin/emacs cp -a lib-src/fns-$VERSION.1.el $PKG_NOX/usr/libexec/emacs/21.4/$ARCH-slackware-linux cat $CWD/slack-desc.emacs-nox > $PKG_NOX/install/slack-desc # emacs-withx: mkdir -p $PKG/usr/bin $PKG/usr/libexec/emacs/21.4/$ARCH-slackware-linux $PKG/install ln -s emacs-$VERSION-with-x11 $PKG/usr/bin/emacs cp -a lib-src/fns-$VERSION.2.el $PKG/usr/libexec/emacs/21.4/$ARCH-slackware-linux mkdir -p $PKG/usr/share/emacs/$VERSION/leim $PKG/install gzip -9r $PKG/usr/man rm -f $PKG/usr/share/emacs/$VERSION/etc/DOC-$VERSION.2 ln -s DOC-$VERSION.1 $PKG/usr/share/emacs/$VERSION/etc/DOC-$VERSION.2 cat $CWD/slack-desc.emacs > $PKG/install/slack-desc ###################################################################### # This script emits a list of all the .el files for which # there is no corresponding .elc file, as well as all the # terminal related .el files, and other special .el files # suggested by Emacs users over the years. # # These should always be installed. ( cd $PKG # Seems that all .el files are now also as .elc so this # the for-loop below might be unneeded. --Larhzu for file in `find usr/share/emacs -name "*.el"` ; do [ ! -e "${file}c" ] && echo "$file" done # OK, now out with the term .el files: find usr/share/emacs/$VERSION/lisp/term -name "*.el" # Next, the user-supplied list: echo usr/share/emacs/$VERSION/lisp/abbrevlist.el echo usr/share/emacs/$VERSION/lisp/bindings.el echo usr/share/emacs/$VERSION/lisp/cdl.el echo usr/share/emacs/$VERSION/lisp/emacs-lisp/cl-specs.el echo usr/share/emacs/$VERSION/lisp/emulation/edt-lk201.el echo usr/share/emacs/$VERSION/lisp/emulation/edt-vt100.el echo usr/share/emacs/$VERSION/lisp/foldout.el echo usr/share/emacs/$VERSION/lisp/gnus/nnlistserv.el echo usr/share/emacs/$VERSION/lisp/international/iso-transl.el echo usr/share/emacs/$VERSION/lisp/mail/rmailmsc.el #echo usr/share/emacs/$VERSION/lisp/mail/rnews.el #echo usr/share/emacs/$VERSION/lisp/mail/sc.el echo usr/share/emacs/$VERSION/lisp/misc.el echo usr/share/emacs/$VERSION/lisp/vt-control.el #echo usr/share/emacs/$VERSION/lisp/x-apollo.el ) | sort -u | ( cd $PKG_LISP ; xargs rm -f ) # Then remove the duplicates: ( cd $PKG_LISP ; find usr -type f > filelist.tmp ) ( cd $PKG find usr -type f > filelist.tmp sort filelist.tmp $PKG_LISP/filelist.tmp | uniq -d | xargs rm -f ) rm -r $PKG/filelist.tmp $PKG_LISP/filelist.tmp ###################################################################### # Slackware-specific stuff: chown -R root:root $PKG $PKG_INFO $PKG_LEIM $PKG_LISP $PKG_MISC $PKG_NOX $PKG_X find $PKG $PKG_INFO $PKG_LEIM $PKG_LISP $PKG_MISC $PKG_NOX -perm +0111 -print0 | xargs -0r chmod 0755 find $PKG $PKG_INFO $PKG_LEIM $PKG_LISP $PKG_MISC $PKG_NOX \! -perm +0111 -print0 | xargs -0r chmod 0644 chgrp -R bin $PKG/usr/bin $PKG_NOX/usr/bin $PKG_X/usr/bin # Make the packages: cd $PKG makepkg -c n -l y ../emacs-$VERSION-$ARCH-$BUILD.$PKGFORMAT cd $PKG_INFO makepkg -c n -l y ../emacs-info-$VERSION-$ARCH-$BUILD.$PKGFORMAT cd $PKG_LEIM makepkg -c n -l y ../emacs-leim-$VERSION-$ARCH-$BUILD.$PKGFORMAT cd $PKG_LISP makepkg -c n -l y ../emacs-lisp-$VERSION-$ARCH-$BUILD.$PKGFORMAT cd $PKG_MISC makepkg -c n -l y ../emacs-misc-$VERSION-$ARCH-$BUILD.$PKGFORMAT cd $PKG_NOX makepkg -c n -l y ../emacs-nox-$VERSION-$ARCH-$BUILD.$PKGFORMAT