#!/bin/sh # Port of Slackware's emacs.build # # Copyright 2006 Lasse Collin (aka Larzhu) # Copyright 2007 Carlos Corbacho # # 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. PKGNAM=emacs VERSION=${VERSION:-22.1} BUILD=${BUILD:-1} . /etc/pkghelpers pkghelpers_env export CFLAGS=$SLKCFLAGS export LDFLAGS="-s" # Emacs 22.1 permissions fix export LOGNAME="root" PKG=$TMP/package-$PKGNAM PKG_INFO=$TMP/package-$PKGNAM-info PKG_LEIM=$TMP/package-$PKGNAM-leim PKG_LISP=$TMP/package-$PKGNAM-lisp PKG_MISC=$TMP/package-$PKGNAM-misc PKG_NOX=$TMP/package-$PKGNAM-nox umask 0022 rm -rf $PKG $PKG_INFO $PKG_LEIM $PKG_LISP $PKG_MISC $PKG_NOX cd $TMP rm -rf $PKGNAM-$VERSION tar xzvf $CWD/$PKGNAM-$VERSION.tar.gz cd $PKGNAM-$VERSION # Make sure ownerships and permissions are sane: chown -R root:root . find . -perm 664 -exec chmod 644 {} \; find . -perm 600 -exec chmod 644 {} \; find . -perm 444 -exec chmod 644 {} \; find . -perm 400 -exec chmod 644 {} \; find . -perm 440 -exec chmod 644 {} \; find . -perm 777 -exec chmod 755 {} \; find . -perm 775 -exec chmod 755 {} \; find . -perm 511 -exec chmod 755 {} \; find . -perm 711 -exec chmod 755 {} \; find . -perm 555 -exec chmod 755 {} \; # Save some docs: mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION cp -a BUGS FTP INSTALL README $PKG/usr/doc/$PKGNAM-$VERSION chmod 644 $PKG/usr/doc/$PKGNAM-$VERSION/* ( cd $PKG/usr/doc/$PKGNAM-$VERSION ; ln -sf /usr/share/$PKGNAM/$VERSION/etc . ) # Build a version of emacs that is not linked to the X11 libraries: ./configure \ --prefix=/usr \ --libdir=/usr/lib$LIBDIRSUFFIX \ --mandir=/usr/man \ --infodir=/usr/info \ --with-x=no \ --with-pop \ --build=$ARCH-$DISTRO-linux make -j12 || exit 1 make install DESTDIR=$PKG || exit 1 ( cd $PKG/usr/bin ; mv $PKGNAM-$VERSION $PKGNAM-$VERSION-no-x11 ) # OK, now we start over building the full X11 emacs: ./configure \ --prefix=/usr \ --libdir=/usr/lib$LIBDIRSUFFIX \ --mandir=/usr/man \ --infodir=/usr/info \ --with-x11 \ --with-x-toolkit \ --with-pop \ --build=$ARCH-$DISTRO-linux make -j12 || exit 1 make install DESTDIR=$PKG || exit 1 ( cd $PKG/usr/bin ; mv $PKGNAM-$VERSION $PKGNAM-$VERSION-with-x11 ; rm -f $PKGNAM ) # This avoids a collision with Exuberant Ctags... mv $PKG/usr/bin/ctags $PKG/usr/bin/ctags-emacs mv $PKG/usr/man/man1/ctags.1 $PKG/usr/man/man1/ctags-emacs.1 ###################################################################### # Split into 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 cat $CWD/slack-desc.$PKGNAM-info > $PKG_INFO/install/slack-desc # emacs-leim: mkdir -p $PKG_LEIM/usr/share/$PKGNAM/$VERSION $PKG_LEIM/install mv $PKG/usr/share/$PKGNAM/$VERSION/leim $PKG_LEIM/usr/share/$PKGNAM/$VERSION cat $CWD/slack-desc.$PKGNAM-leim > $PKG_LEIM/install/slack-desc # emacs-lisp mkdir -p $PKG_LISP/usr/share/$PKGNAM/$VERSION $PKG_LISP/install # We cp instead of mv and remove the rest of the duplicates later. cp -a $PKG/usr/share/$PKGNAM/$VERSION/lisp $PKG_LISP/usr/share/$PKGNAM/$VERSION find $PKG_LISP \! -type d \! -name "*.el.gz" | xargs rm -f cat $CWD/slack-desc.$PKGNAM-lisp > $PKG_LISP/install/slack-desc # emacs-misc: mkdir -p $PKG_MISC/usr/share/$PKGNAM/$VERSION $PKG_MISC/install mv $PKG/usr/share/$PKGNAM/$VERSION/etc $PKG_MISC/usr/share/$PKGNAM/$VERSION mkdir -p $PKG/usr/share/$PKGNAM/$VERSION/etc mv $PKG_MISC/usr/share/$PKGNAM/$VERSION/etc/DOC-$VERSION.* $PKG/usr/share/$PKGNAM/$VERSION/etc cat $CWD/slack-desc.$PKGNAM-misc > $PKG_MISC/install/slack-desc # emacs-nox: mkdir -p $PKG_NOX/usr/bin $PKG_NOX/install mv $PKG/usr/bin/$PKGNAM-$VERSION-no-x11 $PKG_NOX/usr/bin ln -s $PKGNAM-$VERSION-no-x11 $PKG_NOX/usr/bin/$PKGNAM mkdir -p $PKG_NOX/usr/share/$PKGNAM/$VERSION/etc/ mv $PKG/usr/share/$PKGNAM/$VERSION/etc/DOC-$VERSION.1 $PKG_NOX/usr/share/$PKGNAM/$VERSION/etc cat $CWD/slack-desc.$PKGNAM-nox > $PKG_NOX/install/slack-desc # emacs mkdir -p $PKG/install ln -s $PKGNAM-$VERSION-with-x11 $PKG/usr/bin/$PKGNAM mkdir -p $PKG/usr/share/$PKGNAM/$VERSION/leim $PKG/install cat $CWD/slack-desc.$PKGNAM > $PKG/install/slack-desc # This will attempt to handle the Exuberant Ctags situation gracefully... cat $CWD/doinst.sh-$PKGNAM > $PKG/install/doinst.sh ###################################################################### # # From Slackware's find-el-orphans.sh # # 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.gz files are now also as .elc so this # the for-loop below might be unneeded. --Larhzu for file in `find usr/share/$PKGNAM -name "*.el.gz"` ; do [ ! -e "`echo ${file} | sed s/".gz"//`c" ] && echo "$file" done # OK, now out with the term .el.gz files: find usr/share/$PKGNAM/$VERSION/lisp/term -name "*.el.gz" # Next, the user-supplied list: echo usr/share/$PKGNAM/$VERSION/lisp/abbrevlist.el.gz echo usr/share/$PKGNAM/$VERSION/lisp/bindings.el.gz echo usr/share/$PKGNAM/$VERSION/lisp/cdl.el.gz echo usr/share/$PKGNAM/$VERSION/lisp/$PKGNAM-lisp/cl-specs.el.gz echo usr/share/$PKGNAM/$VERSION/lisp/emulation/edt-lk201.el.gz echo usr/share/$PKGNAM/$VERSION/lisp/emulation/edt-vt100.el.gz echo usr/share/$PKGNAM/$VERSION/lisp/foldout.el.gz echo usr/share/$PKGNAM/$VERSION/lisp/gnus/nnlistserv.el.gz echo usr/share/$PKGNAM/$VERSION/lisp/international/iso-transl.el.gz echo usr/share/$PKGNAM/$VERSION/lisp/mail/rmailmsc.el.gz #echo usr/share/$PKGNAM/$VERSION/lisp/mail/rnews.el.gz #echo usr/share/$PKGNAM/$VERSION/lisp/mail/sc.el.gz echo usr/share/$PKGNAM/$VERSION/lisp/misc.el.gz echo usr/share/$PKGNAM/$VERSION/lisp/vt-control.el.gz #echo usr/share/$PKGNAM/$VERSION/lisp/x-apollo.el.gz ) | 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 ###################################################################### # Make the packages: cd $PKG pkghelpers_fixup pkghelpers_makepkg cd $PKG_INFO PKGNAM=emacs-info pkghelpers_fixup pkghelpers_makepkg cd $PKG_LEIM PKGNAM=emacs-leim pkghelpers_fixup pkghelpers_makepkg cd $PKG_LISP PKGNAM=emacs-lisp pkghelpers_fixup pkghelpers_makepkg cd $PKG_MISC PKGNAM=emacs-misc pkghelpers_fixup pkghelpers_makepkg cd $PKG_NOX PKGNAM=emacs-nox pkghelpers_fixup pkghelpers_makepkg