File emacs.spec of Package emacs

#
# spec file for package emacs
#
# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%bcond_without  autoconf
%if 0%{?suse_version} >= 1550
%bcond_without  mailutils
%else
%bcond_with     mailutils
%endif
%bcond_without  cairo
%bcond_with     tex4pdf
%if 0%{?suse_version} >= 1550
%bcond_without  nativecomp
%else
%bcond_with     nativecomp
%endif
%if 0%{?suse_version} >= 1550 || (0%{?suse_version} >= 1500 && 0%{?sle_version} >= 150500)
%bcond_without  tree_sitter
%else
%bcond_with     tree_sitter
%endif

Name:           emacs
%if %{with autoconf}
BuildRequires:  autoconf
BuildRequires:  automake
%endif
BuildRequires:  alsa-devel
%if %{with cairo}
BuildRequires:  cairo-devel
%endif
BuildRequires:  fdupes
BuildRequires:  fontconfig-devel
BuildRequires:  fonts-config
BuildRequires:  freetype2-devel
BuildRequires:  giflib-devel
BuildRequires:  git
BuildRequires:  gpm-devel
BuildRequires:  gtk3-devel
# Used for installtion of info pages as well as to
# detect if the page info.info is part of that package
BuildRequires:  info
BuildRequires:  krb5-devel
BuildRequires:  libacl-devel
BuildRequires:  libgnutls-devel
BuildRequires:  libjpeg-devel
BuildRequires:  libotf-devel
BuildRequires:  libpng-devel
BuildRequires:  librsvg-devel
%if 0%{?suse_version} > 1310
BuildRequires:  pkgconfig(libseccomp)
%endif
BuildRequires:  libselinux-devel
BuildRequires:  libtiff-devel
BuildRequires:  libxml2-devel
%if 0%{?suse_version} > 1320
BuildRequires:  pkgconfig(jansson) >= 2.7
%endif
BuildRequires:  m17n-lib-devel
BuildRequires:  pkgconfig(libudev)
%if %{with mailutils}
BuildRequires:  mailutils
BuildRequires:  mailutils-devel
%endif
BuildRequires:  makeinfo
BuildRequires:  ncurses-devel
%if 0%{?suse_version} >= 1500
BuildRequires:  user(games)
%endif
BuildRequires:  systemd-rpm-macros
%if %{with tex4pdf}
BuildRequires:  texlive-collection-basic
BuildRequires:  texlive-collection-langcyrillic
BuildRequires:  texlive-collection-langczechslovak
BuildRequires:  texlive-collection-langpolish
BuildRequires:  texlive-lh
%endif
%if %{with tree_sitter}
BuildRequires:  pkgconfig(tree-sitter)
%endif
BuildRequires:  update-alternatives
BuildRequires:  update-desktop-files
BuildRequires:  xz
BuildRequires:  zlib-devel
BuildRequires:  pkgconfig(com_err)
BuildRequires:  pkgconfig(dbus-1)
BuildRequires:  pkgconfig(fontconfig)
%if 0%{?suse_version} < 1550
BuildRequires:  pkgconfig(gconf-2.0)
%endif
BuildRequires:  pkgconfig(gio-2.0)
BuildRequires:  pkgconfig(glib-2.0)
BuildRequires:  pkgconfig(gsettings-desktop-schemas)
%if 0%{?suse_version} > 1320
BuildRequires:  pkgconfig(harfbuzz)
%endif
BuildRequires:  pkgconfig(ice)
%if %{with tex4pdf}
BuildRequires:  tex(babel.sty)
BuildRequires:  tex(fontenc.sty)
BuildRequires:  tex(geometry.sty)
BuildRequires:  tex(german.sty)
BuildRequires:  tex(graphicx.sty)
BuildRequires:  tex(ifpdf.sty)
BuildRequires:  tex(inputenc.sty)
BuildRequires:  tex(multicol.sty)
BuildRequires:  tex(supertabular.sty)
BuildRequires:  tex(t2aenc.def)
BuildRequires:  tex(tabularx.sty)
BuildRequires:  tex(verbatim.sty)
%endif
%if 0%{?suse_version} >= 1500
BuildRequires:  pkgconfig(libacl)
%else
BuildRequires:  libacl-devel
%endif
%if 0%{?suse_version} > 1320
BuildRequires:  pkgconfig(jansson)
%endif
BuildRequires:  pkgconfig(json)
BuildRequires:  pkgconfig(lcms2)
BuildRequires:  pkgconfig(libsystemd)
BuildRequires:  pkgconfig(pango)
BuildRequires:  pkgconfig(sm)
%if 0%{?suse_version} > 1310
%ifnarch ppc
BuildRequires:  pkgconfig(webkit2gtk-4.0) >= 2.12
%endif
%endif
BuildRequires:  pkgconfig(x11)
BuildRequires:  pkgconfig(x11-xcb)
%if 0%{?suse_version} > 1310
BuildRequires:  pkgconfig(xaw3d)
%else
BuildRequires:  xaw3d-devel
%endif
BuildRequires:  pkgconfig(xcb)
BuildRequires:  pkgconfig(xfixes)
BuildRequires:  pkgconfig(xft)
BuildRequires:  pkgconfig(xinerama)
BuildRequires:  pkgconfig(xmu)
BuildRequires:  pkgconfig(xpm)
BuildRequires:  pkgconfig(xrandr)
BuildRequires:  pkgconfig(xrender)
%if 0%{?suse_version} > 1310
BuildRequires:  pkgconfig(xshmfence)
%endif
BuildRequires:  pkgconfig(xt)
BuildRequires:  pkgconfig(xxf86vm)
%if %{with nativecomp}
BuildRequires:  libgccjit0-devel
%endif
URL:            http://www.gnu.org/software/emacs/
Version:        29.0.91
Release:        0
Summary:        GNU Emacs Base Package
License:        GPL-3.0-or-later
Group:          Productivity/Text/Editors
Provides:       nxml-mode = 20041004
Obsoletes:      nxml-mode < 20041004
Provides:       epg = 1.0.0
Obsoletes:      epg < 1.0.0
Requires:       emacs-info = %{version}
Requires:       emacs_program = %{version}-%{release}
Requires:       etags
%if %{with mailutils}
Requires:       mailutils
%endif
Requires(pre):  fileutils
%if 0%{?suse_version} >= 1500
Requires(pre):  group(games)
Requires(pre):  user(games)
%endif
Source:         http://ftp.gnu.org/gnu/emacs/emacs-%{version}.tar.xz
Source2:        site-lisp.tar.bz2
Source3:        dot.gnu-emacs
Source4:        emacs-rpmlintrc
Source5:        emacs.sh
Source6:        http://ftp.gnu.org/gnu/emacs/emacs-%{version}.tar.xz.sig
# https://ftp.gnu.org/gnu/gnu-keyring.gpg
Source7:        %{name}.keyring
Source8:        emacs-27.2-pdf.tar.xz
Patch:          emacs-27.1.dif
Patch5:         emacs-24.4-ps-bdf.patch
Patch7:         emacs-24.1-ps-mule.patch
Patch12:        emacs-24.3-x11r7.patch
Patch25:        emacs-26.1-xft4x11.patch
Patch29:        emacs-27.1-Xauthority4server.patch

BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%{expand: %%global include_info %(test -s /usr/share/info/info.info* && echo 0 || echo 1)}
%{expand: %%global _exec_prefix %(type -p pkg-config &>/dev/null && pkg-config --variable prefix x11 || echo /usr/X11R6)}
%if "%_exec_prefix" == "/usr/X11R6"
%define _x11lib     %{_exec_prefix}/%{_lib}
%define _x11data    %{_exec_prefix}/lib/X11
%define _libx11     %{_x11data}
%define _x11inc     %{_exec_prefix}/include
%else
%define _x11lib     %{_libdir}
%define _x11data    %{_datadir}/X11
%define _libx11     %{_exec_prefix}/lib/X11
%define _x11inc     %{_includedir}
%endif
%if %{undefined ext_el}
%define ext_el      .gz
%endif
%define info_files auth autotype bovine calc ccmode cl dbus dired-x ebrowse ede ediff edt efaq eglot eieio eintr elisp emacs-gnutls emacs-mime emacs epa erc ert eshell eudc eww flymake forms gnus htmlfontify idlwave ido info mairix-el message mh-e modus-themes newsticker nxml-mode octave-mode org pcl-cvs pgg rcirc reftex remember sasl sc semantic ses sieve smtpmail speedbar srecode todo-mode tramp transient url use-package vhdl-mode vip viper vtable widget wisent woman

%description
Basic package for the GNU Emacs editor. Requires emacs-x11 or
emacs-nox.

%package     -n emacs-nox
Requires(post): fileutils
Requires:       emacs = %{version}-%{release}
Provides:       emacs_program = %{version}-%{release}
Summary:        GNU Emacs-nox: An Emacs Binary without X Window System Support
Group:          Productivity/Text/Editors

%description -n emacs-nox
Eight Megabytes And Constantly Swapping. Call it

emacs-nox

Love it or leave it.

%package     -n emacs-x11
Requires(post): fileutils
Requires:       emacs = %{version}-%{release}
Provides:       emacs_program = %{version}-%{release}
Requires:       efont-unicode
Requires:       ifnteuro
Requires:       xorg-x11-fonts
Requires:       xorg-x11-fonts-core
Enhances:       libX11-6
Summary:        GNU Emacs: Emacs binary with X Window System Support
Group:          Productivity/Text/Editors

%description -n emacs-x11
Call it

Emacs

Love it or leave it. This is the Emacs binary with X Window System
Support.

%package     -n emacs-el
Requires:       emacs = %{version}-%{release}
Provides:       emacs-devel = %{version}-%{release}
Summary:        Several Lisp Files for GNU Emacs
Group:          Development/Libraries/Other
BuildArch:      noarch

%description -n emacs-el
Several Lisp files not needed for running GNU Emacs. Most of these
files are pre-byte compiled and therefore not necessary.

%package     -n emacs-info
Summary:        Info files for GNU Emacs
Group:          Documentation/Other
%if 0%{?suse_version} <= 1500
Requires(post): %install_info_prereq
Requires(preun):%install_info_prereq
%endif
BuildArch:      noarch

%description -n emacs-info
This package contains all the Info files for GNU Emacs. These files can
be read online with GNU Emacs. They describe Emacs and some of its
modes.

%package     -n etags
Summary:        Generate Tag Files for Use with Emacs
Group:          Development/Tools/Navigators
Requires(post): coreutils update-alternatives
Requires(preun):coreutils update-alternatives
Provides:       ctags:/usr/bin/etags

%description -n etags
ETags generates tag files from source code in Pascal, Cobol, Ada, Perl,
LaTeX, Scheme, Emacs Lisp/Common Lisp, Postscript, Erlang, Python, Prolog,
and most assembler-like syntaxes.

%prep
%setup -q -b 2
%patch5  -p0
%patch7  -p0
%patch12 -p0
%patch25 -p0
%patch   -p0
%if %{without tex4pdf}
pushd etc/refcards/
    tar --use-compress-program=xz -xf %{S:8}
popd
%endif

%build
%if %{without autoconf}
# We don't want to run autoconf
if test configure.ac -nt aclocal.m4 -o m4/gnulib-comp.m4 -nt aclocal.m4 ; then
    sleep 1
    touch aclocal.m4
fi
if test configure.ac -nt configure -o aclocal.m4 -nt configure ; then
    sleep 1
    touch configure
fi
if test configure.ac -nt src/stamp-h.in -o aclocal.m4 -nt src/stamp-h.in ; then
    sleep 1
    touch src/stamp-h.in
fi
if test aclocal.m4 -nt lib/Makefile.in -o lib/Makefile.am -nt lib/Makefile.in -o lib/gnulib.mk -nt lib/Makefile.in ; then
    sleep 1
    touch lib/Makefile.in
fi
if test -s autogen.sh ; then
    mv autogen.sh autogen.sh.no
    ln -sf /bin/true autogen.sh
fi
%else
autoreconf -fiv -I $PWD -I $PWD/m4
%endif

  cflags ()
  {
      local flag=$1; shift
      local var=$1; shift
      test -n "${flag}" -a -n "${var}" || return
      case "${!var}" in
      *${flag}*) return
      esac
      case "$flag" in
      -Wl,*)
	  set -o noclobber
	  echo 'int main () { return 0; }' > ldtest.c
	  if ${CC:-gcc} -Werror $flag -o /dev/null -xc ldtest.c > /dev/null 2>&1 ; then
	      eval $var=\${$var:+\$$var\ }$flag
	  fi
	  set +o noclobber
	  rm -f ldtest.c
	  ;;
      *)
	  if ${CC:-gcc} -Werror $flag -S -o /dev/null -xc /dev/null > /dev/null 2>&1 ; then
	      eval $var=\${$var:+\$$var\ }$flag
	  fi
	  if ${CXX:-g++} -Werror $flag -S -o /dev/null -xc++ /dev/null > /dev/null 2>&1 ; then
	      eval $var=\${$var:+\$$var\ }$flag
	  fi
      esac
  }

VERSION=%{version}
%ifarch noarch
    SYS="--build=%{_build_cpu}-suse-%{_build_os}
"
%else
    SYS="--build=%{_target_cpu}-suse-%{_build_os}
"
%endif
 CFLAGS="${RPM_OPT_FLAGS} -D_GNU_SOURCE -DGDK_DISABLE_DEPRECATION_WARNINGS -DGLIB_DISABLE_DEPRECATION_WARNINGS"
LDFLAGS=
  cflags -pipe                   CFLAGS
  cflags -Wno-pointer-sign       CFLAGS
  cflags -Wno-unused-variable    CFLAGS
  cflags -Wno-unused-label       CFLAGS
  cflags -Wl,-O2		 LDFLAGS
%ifarch ia64
 CFLAGS=$(echo "${CFLAGS}"|sed -r 's/-O[0-9]?/-O1/g')
%endif
  SMALL="-DSYSTEM_PURESIZE_EXTRA=25000 \
	 -DSITELOAD_PURESIZE_EXTRA=10000 \
"
  LARGE="-DSYSTEM_PURESIZE_EXTRA=55000 \
	 -DSITELOAD_PURESIZE_EXTRA=10000 \
"
   SMALL= LARGE=
   LANG=POSIX; LC_CTYPE=en_US.UTF-8
export CC CFLAGS LANG LC_CTYPE LDFLAGS
 PREFIX="--prefix=%{_prefix} \
	 --mandir=%{_mandir} \
	 --infodir=%{_infodir} \
	 --datadir=%{_datadir} \
	 --localstatedir=%{_localstatedir} \
	 --sharedstatedir=%{_localstatedir}/lib \
	 --libexecdir=%{_prefix}/lib \
	 --enable-locallisppath=%{_datadir}/emacs/%{version}/site-lisp:%{_datadir}/emacs/site-lisp
"
DESKTOP="--with-x \
	 --with-xim \
	 --with-sound \
	 --with-xpm \
	 --with-jpeg \
	 --with-tiff \
	 --with-gif \
	 --with-png \
	 --with-rsvg \
	 --with-dbus \
	 --with-xft \
%if %{with tree_sitter}
	 --with-tree-sitter \
%endif
"
    GTK="${DESKTOP} \
	 --with-x-toolkit=gtk3 \
	 --with-toolkit-scroll-bars \
	 --x-includes=%{_x11inc} \
	 --x-libraries=%{_x11lib} \
	 --with-libotf \
	 --with-m17n-flt \
%if %{with cairo}
	 --with-cairo \
%endif
%if 0%{?suse_version} > 1310
%ifnarch ppc
	 --with-xwidgets \
%endif
%endif
%if %{with nativecomp}
         --with-native-compilation \
%endif
"
    X11="${DESKTOP} \
	 --with-x-toolkit=lucid \
	 --with-toolkit-scroll-bars \
	 --x-includes=%{_x11inc} \
	 --x-libraries=%{_x11lib} \
	 --without-libotf \
	 --without-m17n-flt \
"
  NOX11="--without-x \
	 --without-xim \
	 --without-sound \
	 --without-xpm \
	 --without-jpeg \
	 --without-tiff \
	 --without-gif \
	 --without-png \
	 --without-rsvg \
	 --without-dbus \
	 --without-xft \
	 --without-libotf \
	 --without-m17n-flt \
	 --without-harfbuzz \
	 --without-tree-sitter \
"
   COMP="--disable-build-details \
%if %{with mailutils}
	 --without-pop
	 --with-mailutils
%else
	 --with-pop \
%endif
	 --without-hesiod \
	 --with-gameuser=:games \
	 --with-kerberos \
	 --with-kerberos5 \
	 --with-file-notification=inotify \
	 --with-modules \
	 --enable-autodepend \
	 --with-gpm \
	 --with-file-notification=gfile \
"
if (($(getconf LONG_BIT) < 62))
then
    COMP="${COMP} --with-wide-int"
fi

##OIFS="$IFS"; IFS=.
##set -- $(gcc -dumpversion 2>/dev/null)
##(($1 > 4 || ($1 == 4 && $2 > 4))) && COMP="$COMP --enable-link-time-optimization"
##IFS="$OIFS"

CFLAGS="$CFLAGS $SMALL -DPDMP_BASE='\"emacs-nox\"'" ./configure ${COMP} ${PREFIX} ${NOX11} ${SYS} --with-dumping=pdumper
%make_build bootstrap V=1
make -C lisp/ updates compile V=1
for i in $(find site-lisp/ -name '*.el'); do
    EMACSLOADPATH='' src/emacs -batch -q --no-site -f batch-byte-compile $i
done
cp src/emacs emacs-nox
cp src/emacs.pdmp emacs-nox.pdmp
make distclean
#
CFLAGS="$CFLAGS $LARGE -DPDMP_BASE='\"emacs-x11\"'" ./configure ${COMP} ${PREFIX} ${X11} ${SYS} --with-dumping=pdumper
%make_build
cp src/emacs emacs-x11
cp src/emacs.pdmp emacs-x11.pdmp
make distclean
#
CFLAGS="$CFLAGS $LARGE -DPDMP_BASE='\"emacs-gtk\"'" ./configure ${COMP} ${PREFIX} ${GTK} ${SYS} --with-dumping=pdumper
%make_build

%if %{with tex4pdf}
#
make -C etc/refcards/
%endif

#
pushd ../site-lisp/
EMACSLOADPATH='' ../emacs-%{version}/src/emacs -batch -q --no-site -f batch-byte-compile *.el
rm -vf site-start.elc
rm -vf site-start.el.orig
popd

%install
#
PATH=/sbin:$PATH
##
VERSION=%{version}
eval $(sed -rn "/^configuration=/p" config.log)
sed -ri 's@/usr/lib/X11/fonts@/usr/share/fonts@g;s@(/usr/)local/(info|share|lib)@\1\2@;s@\$VERSION@%{version}@g;s@\$ARCH@'${configuration}'@g' doc/man/emacs.1
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_prefix}/lib/emacs/%{version}/${configuration}
install -m 0755 emacs-nox %{buildroot}%{_bindir}
install -m 0755 emacs-x11 %{buildroot}%{_bindir}
make install DESTDIR=%{buildroot} systemdunitdir=%{_userunitdir}
path_exec=$(sed -n 's/^#define PATH_EXEC "\(.*\)"/\1/p' src/epaths.h)
fingerprint=$(./emacs-nox --fingerprint)
echo $path_exec/emacs-$fingerprint.pdmp > nox.lst
install -m 644 emacs-nox.pdmp %{buildroot}$path_exec/emacs-$fingerprint.pdmp
fingerprint=$(./emacs-x11 --fingerprint)
echo $path_exec/emacs-$fingerprint.pdmp > x11.lst
install -m 644 emacs-x11.pdmp %{buildroot}$path_exec/emacs-$fingerprint.pdmp
fingerprint=$(src/emacs --fingerprint)
echo $path_exec/emacs-$fingerprint.pdmp >> x11.lst
mv %{buildroot}/usr/bin/emacs %{buildroot}/usr/bin/emacs-gtk
rm -vf %{buildroot}%{_prefix}/lib/emacs/%{version}/${configuration}/emacs.pdmp
install -p %{S:5} %{buildroot}/usr/bin/emacs
chmod 0755        %{buildroot}/usr/bin/emacs
tar cf - `find site-lisp/ -name '*.el'  -o -name '*.elc'` | \
tar -x -f - -C %{buildroot}%{_datadir}/emacs/%{version}/
mkdir -p %{buildroot}%{_docdir}/emacs
ln -sf %{_datadir}/emacs/%{version}/etc %{buildroot}%{_docdir}/emacs/doc
find %{buildroot}%{_datadir}/emacs/%{version}/ -name '*,v' -o -name '*.orig' | xargs -r rm -f
#for f in %{buildroot}%{_infodir}/* ; do
#    case "$f" in
#	*.gz)			;;
#	*/dir)	rm -f ${f}	;;
#	*)	test -e  ${f}.gz && rm ${f}.gz
#		gzip -9f ${f}
#    esac
#done
info_found=$(cd %{buildroot}%{_infodir}; echo *.gz | sed -e 's/\.info\.gz//g')
if test "$info_found" != "%info_files"
then
  echo Please update info_files >&2
  exit 1
fi
rm -vf %{buildroot}%{_infodir}/dir
#
pushd ../
mkdir -p %{buildroot}/etc/skel
install -m 0644 %{S:3} %{buildroot}/etc/skel/.gnu-emacs
mkdir -p %{buildroot}%{_datadir}/emacs/site-lisp/site-start.d
tar cf - site-lisp/ | tar xvvf - -C %{buildroot}%{_datadir}/emacs/
chmod -R a+r %{buildroot}%{_datadir}/emacs/site-lisp/
popd
(cd %{buildroot}
 find usr/share/emacs/site-lisp/ -type f	\
      \( -name site-start.el -printf "%%%%config " , \
	 -printf "/%%p\n" \)
) | sort > site-lisp.lst
#
# cleanup
#
unelc ()
{
    local elc=$1
    local elz=${elc%%.elc}.el.gz
    rm -vf $elc
    if test -n "$elz" -a -e "$elz" ; then
	gunzip "$elz"
    fi
}
unelc  %{buildroot}%{_datadir}/emacs/%{version}/site-lisp/term/func-keys.elc
unelc  %{buildroot}%{_datadir}/emacs/%{version}/site-lisp/term/gnome.elc
unelc  %{buildroot}%{_datadir}/emacs/%{version}/site-lisp/term/kvt.elc
unelc  %{buildroot}%{_datadir}/emacs/%{version}/site-lisp/term/linux.elc
unelc  %{buildroot}%{_datadir}/emacs/%{version}/site-lisp/term/locale.elc
find %{buildroot}%{_datadir}/emacs/%{version}/etc/ -name '*[a-z].[16]' | \
    xargs gzip -9f
rm -vf %{buildroot}%{_datadir}/emacs/%{version}/lisp/COPYING
ln -sf ../etc/COPYING \
       %{buildroot}%{_datadir}/emacs/%{version}/lisp/COPYING
rm -f %{buildroot}%{_datadir}/emacs/%{version}/lisp/gnus/.dir-locals.el
#
fdupes -q -r -1 %{buildroot}%{_datadir}/emacs/%{version}/etc/images/icons/ %{buildroot}%{_datadir}/icons/ |\
xargs -n 2 | while read first second; do
    case "${first}" in
    *emacs/%{version}/etc/*)
	target=$second
	file=$first
	;;
    *)  target=$first
	file=$second
    esac
    ln -sf ${file#%{buildroot}} ${target}
done
# install desktop file
test -e etc/emacs.desktop || exit 1
echo 'X-KDE-StartupNotify=false' >> etc/emacs.desktop
rm -vf %{buildroot}%{_datadir}/emacs/%{version}/etc/emacs.desktop
rm -vf %{buildroot}%{_datadir}/emacs/%{version}/etc/emacsclient.desktop
rm -vf %{buildroot}%{_datadir}/emacs/%{version}/etc/emacs-mail.desktop
rm -vf %{buildroot}%{_datadir}/emacs/%{version}/etc/emacsclient-mail.desktop
cp etc/images/icons/hicolor/32x32/apps/emacs.png $RPM_SOURCE_DIR/emacs.png
%suse_update_desktop_file -r -i emacs TextEditor Utility
%suse_update_desktop_file -r -i emacs TextEditor
%suse_update_desktop_file -r -i emacsclient TextEditor
%suse_update_desktop_file -r -i emacs-mail Email
%suse_update_desktop_file -r -i emacsclient-mail Email
mkdir -p %{buildroot}%{_sysconfdir}/alternatives
ln -sf %{_sysconfdir}/alternatives/ctags		%{buildroot}%{_bindir}/ctags
ln -sf %{_sysconfdir}/alternatives/ctags.1%{ext_man}	%{buildroot}%{_mandir}/man1/ctags.1%{ext_man}
ln -sf %{_bindir}/gnuctags				%{buildroot}%{_sysconfdir}/alternatives/ctags
ln -sf %{_mandir}/man1/gnuctags.1%{ext_man}		%{buildroot}%{_sysconfdir}/alternatives/ctags.1%{ext_man}

%pre
test -L usr/bin/emacs && rm -f usr/bin/emacs || true

%post -n emacs-nox
if test -e usr/share/emacs/site-lisp/auctex/font-latex.elc ; then
  owd=$(pwd)
  cd usr/share/emacs/site-lisp/auctex || exit 1
  emacs -batch -no-site-file -no-init-file --eval '(setq load-path (cons "." load-path)
    byte-compile-warnings nil
    TeX-lisp-directory "<none>"
    TeX-auto-global "<none>")' -f batch-byte-compile font-latex.el > /dev/null 2>&1
  cd $owd
fi

%post -n emacs-x11
if test -e usr/share/emacs/site-lisp/auctex/font-latex.elc ; then
  owd=$(pwd)
  cd usr/share/emacs/site-lisp/auctex || exit 1
  emacs -batch -no-site-file -no-init-file --eval '(setq load-path (cons "." load-path)
    byte-compile-warnings nil
    TeX-lisp-directory "<none>"
    TeX-auto-global "<none>")' -f batch-byte-compile font-latex.el > /dev/null 2>&1
  cd $owd
fi

%if 0%{?suse_version} <= 1500
%post info
for f in %info_files; do
  test "$f" = "info.info" && continue
  test -e "$f" || f="${f}.info"
  %install_info --info-dir=%{_infodir} "%{_infodir}/$f%{ext_info}"
done

%preun info
for f in %info_files; do
  test "$f" = "info.info" && continue
  test -e "$f" || f="${f}.info"
  %install_info_delete --info-dir=%{_infodir} "%{_infodir}/$f%{ext_info}"
done
%endif

%post -n etags
test -L %{_bindir}/ctags || rm -f %{_bindir}/ctags
%{_sbindir}/update-alternatives --quiet --force --install \
	  %{_bindir}/ctags			ctags	%{_bindir}/gnuctags 10 \
  --slave %{_mandir}/man1/ctags.1%{ext_man}	ctags.1	%{_mandir}/man1/gnuctags.1%{ext_man}
%{_sbindir}/update-alternatives --auto ctags

%preun -n etags
if test $1 -eq 0 ; then
    %{_sbindir}/update-alternatives --quiet --remove ctags %{_bindir}/gnuctags
fi

%files -f site-lisp.lst -n emacs
%defattr(-, root, root)
%config /etc/skel/.gnu-emacs
%{_bindir}/ebrowse
%{_bindir}/emacs
%{_bindir}/emacsclient
%{_includedir}/emacs-module.h
%dir %{_prefix}/lib/emacs/
%dir %{_prefix}/lib/emacs/%{version}/
%dir %{_prefix}/lib/emacs/%{version}/*-suse-linux*/
%{_prefix}/lib/emacs/%{version}/*-suse-linux*/hexl
%if %{without mailutils}
%{_prefix}/lib/emacs/%{version}/*-suse-linux*/movemail
%endif
%{_prefix}/lib/emacs/%{version}/*-suse-linux*/rcs2log
%if 0
%attr(04755,games,games) %{_prefix}/lib/emacs/%{version}/*-suse-linux*/update-game-score
%else
%{_prefix}/lib/emacs/%{version}/*-suse-linux*/update-game-score
%endif
%if 0%{?suse_version} > 1320
%{_userunitdir}/emacs.service
%endif
%dir %{_datadir}/doc/packages/emacs/
%{_datadir}/doc/packages/emacs/doc
%dir %{_datadir}/emacs/
%dir %{_datadir}/emacs/%{version}/
%dir %{_datadir}/emacs/%{version}/etc/
%doc %{_datadir}/emacs/%{version}/etc/AUTHORS
%doc %{_datadir}/emacs/%{version}/etc/*-NEWS
%doc %{_datadir}/emacs/%{version}/etc/COPYING
%doc %{_datadir}/emacs/%{version}/etc/DEBUG
%doc %{_datadir}/emacs/%{version}/etc/DEVEL.HUMOR
%doc %{_datadir}/emacs/%{version}/etc/DISTRIB
%{_datadir}/emacs/%{version}/etc/DOC
%doc %{_datadir}/emacs/%{version}/etc/ETAGS.EBNF
%doc %{_datadir}/emacs/%{version}/etc/ETAGS.README
%doc %{_datadir}/emacs/%{version}/etc/HELLO
%doc %{_datadir}/emacs/%{version}/etc/HISTORY
%doc %{_datadir}/emacs/%{version}/etc/JOKES
%doc %{_datadir}/emacs/%{version}/etc/MACHINES
%{_datadir}/emacs/%{version}/etc/NEWS
%doc %{_datadir}/emacs/%{version}/etc/NEWS.*
%doc %{_datadir}/emacs/%{version}/etc/NEXTSTEP
%doc %{_datadir}/emacs/%{version}/etc/PROBLEMS
%doc %{_datadir}/emacs/%{version}/etc/README
%doc %{_datadir}/emacs/%{version}/etc/TERMS
%doc %{_datadir}/emacs/%{version}/etc/TODO
%dir %{_datadir}/emacs/%{version}/etc/charsets/
%{_datadir}/emacs/%{version}/etc/charsets/*.map
%doc %{_datadir}/emacs/%{version}/etc/charsets/README
%{_datadir}/emacs/%{version}/etc/*.txt
%dir %{_datadir}/emacs/%{version}/etc/e/
%doc %{_datadir}/emacs/%{version}/etc/e/README
%{_datadir}/emacs/%{version}/etc/e/eterm-color
%{_datadir}/emacs/%{version}/etc/e/eterm-color.ti
%{_datadir}/emacs/%{version}/etc/e/eterm-direct
%{_datadir}/emacs/%{version}/etc/edt-user.el
%{_datadir}/emacs/%{version}/etc/emacs-buffer.gdb
%{_datadir}/emacs/%{version}/etc/emacs.icon
%{_datadir}/emacs/%{version}/etc/emacs.metainfo.xml
%{_datadir}/emacs/%{version}/etc/emacs.service
%{_datadir}/emacs/%{version}/etc/emacs_lldb.py
%dir %{_datadir}/emacs/%{version}/etc/forms/
%doc %{_datadir}/emacs/%{version}/etc/forms/README
%{_datadir}/emacs/%{version}/etc/forms/*.dat
%{_datadir}/emacs/%{version}/etc/forms/*.el
%{_datadir}/emacs/%{version}/etc/future-bug
%dir %{_datadir}/emacs/%{version}/etc/gnus/
%{_datadir}/emacs/%{version}/etc/gnus/gnus-setup.ast
%{_datadir}/emacs/%{version}/etc/gnus/news-server.ast
%dir %{_datadir}/emacs/%{version}/etc/images/
%doc %{_datadir}/emacs/%{version}/etc/images/README
%{_datadir}/emacs/%{version}/etc/images/*.bmp
%{_datadir}/emacs/%{version}/etc/images/*.pbm
%{_datadir}/emacs/%{version}/etc/images/*.xpm
%{_datadir}/emacs/%{version}/etc/images/*.png
%{_datadir}/emacs/%{version}/etc/images/*.svg
%dir %{_datadir}/emacs/%{version}/etc/images/custom/
%doc %{_datadir}/emacs/%{version}/etc/images/custom/README
%{_datadir}/emacs/%{version}/etc/images/custom/*.pbm
%{_datadir}/emacs/%{version}/etc/images/custom/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/ezimage/
%doc %{_datadir}/emacs/%{version}/etc/images/ezimage/README
%{_datadir}/emacs/%{version}/etc/images/ezimage/*.pbm
%{_datadir}/emacs/%{version}/etc/images/ezimage/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/gnus/
%doc %{_datadir}/emacs/%{version}/etc/images/gnus/README
%{_datadir}/emacs/%{version}/etc/images/gnus/*.pbm
%{_datadir}/emacs/%{version}/etc/images/gnus/*.xbm
%{_datadir}/emacs/%{version}/etc/images/gnus/*.xpm
%{_datadir}/emacs/%{version}/etc/images/gnus/*.png
%{_datadir}/emacs/%{version}/etc/images/gnus/*.svg
%dir %{_datadir}/emacs/%{version}/etc/images/gud/
%doc %{_datadir}/emacs/%{version}/etc/images/gud/README
%{_datadir}/emacs/%{version}/etc/images/gud/*.pbm
%{_datadir}/emacs/%{version}/etc/images/gud/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/icons/
%doc %{_datadir}/emacs/%{version}/etc/images/icons/README
%{_datadir}/emacs/%{version}/etc/images/icons/allout-widgets/
%{_datadir}/emacs/%{version}/etc/images/icons/hicolor/
%dir %{_datadir}/emacs/%{version}/etc/images/low-color/
%doc %{_datadir}/emacs/%{version}/etc/images/low-color/README
%{_datadir}/emacs/%{version}/etc/images/low-color/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/mail/
%doc %{_datadir}/emacs/%{version}/etc/images/mail/README
%{_datadir}/emacs/%{version}/etc/images/mail/*.pbm
%{_datadir}/emacs/%{version}/etc/images/mail/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/mpc/
%doc %{_datadir}/emacs/%{version}/etc/images/mpc/README
%{_datadir}/emacs/%{version}/etc/images/mpc/*.pbm
%{_datadir}/emacs/%{version}/etc/images/mpc/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/newsticker/
%doc %{_datadir}/emacs/%{version}/etc/images/newsticker/README
%{_datadir}/emacs/%{version}/etc/images/newsticker/rss-feed.*
%{_datadir}/emacs/%{version}/etc/images/newsticker/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/smilies/
%doc %{_datadir}/emacs/%{version}/etc/images/smilies/README
%{_datadir}/emacs/%{version}/etc/images/smilies/*.pbm
%{_datadir}/emacs/%{version}/etc/images/smilies/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/smilies/grayscale/
%doc %{_datadir}/emacs/%{version}/etc/images/smilies/grayscale/README
%{_datadir}/emacs/%{version}/etc/images/smilies/grayscale/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/smilies/medium/
%doc %{_datadir}/emacs/%{version}/etc/images/smilies/medium/README
%{_datadir}/emacs/%{version}/etc/images/smilies/medium/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/tabs/
%doc %{_datadir}/emacs/%{version}/etc/images/tabs/README
%{_datadir}/emacs/%{version}/etc/images/tabs/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/tree-widget/
%dir %{_datadir}/emacs/%{version}/etc/images/tree-widget/default/
%doc %{_datadir}/emacs/%{version}/etc/images/tree-widget/default/README
%{_datadir}/emacs/%{version}/etc/images/tree-widget/default/*.png
%{_datadir}/emacs/%{version}/etc/images/tree-widget/default/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/images/tree-widget/folder/
%doc %{_datadir}/emacs/%{version}/etc/images/tree-widget/folder/README
%{_datadir}/emacs/%{version}/etc/images/tree-widget/folder/*.png
%{_datadir}/emacs/%{version}/etc/images/tree-widget/folder/*.xpm
%dir %{_datadir}/emacs/%{version}/etc/nxml/
%doc %{_datadir}/emacs/%{version}/etc/nxml/README
%{_datadir}/emacs/%{version}/etc/nxml/*.xml
%{_datadir}/emacs/%{version}/etc/*.ps
%{_datadir}/emacs/%{version}/etc/*.xml
%dir %{_datadir}/emacs/%{version}/etc/org/
%doc %{_datadir}/emacs/%{version}/etc/org/README
%{_datadir}/emacs/%{version}/etc/org/*.xml
%dir %{_datadir}/emacs/%{version}/etc/org/csl
%doc %{_datadir}/emacs/%{version}/etc/org/csl/README
%{_datadir}/emacs/%{version}/etc/org/csl/*.csl
%{_datadir}/emacs/%{version}/etc/org/csl/*.xml
%{_datadir}/emacs/%{version}/etc/package-keyring.gpg
%{_datadir}/emacs/%{version}/etc/publicsuffix.txt.gz
%dir %{_datadir}/emacs/%{version}/etc/refcards/
%{_datadir}/emacs/%{version}/etc/refcards/Makefile
%doc %{_datadir}/emacs/%{version}/etc/refcards/README
%doc %{_datadir}/emacs/%{version}/etc/refcards/*.pdf
%doc %{_datadir}/emacs/%{version}/etc/refcards/*.tex
%doc %{_datadir}/emacs/%{version}/etc/refcards/*.eps
%doc %{_datadir}/emacs/%{version}/etc/refcards/*.sty
%dir %{_datadir}/emacs/%{version}/etc/schema/
%doc %{_datadir}/emacs/%{version}/etc/schema/README
%{_datadir}/emacs/%{version}/etc/schema/*.rnc
%{_datadir}/emacs/%{version}/etc/schema/*.xml
%{_datadir}/emacs/%{version}/etc/ses-example.ses
%{_datadir}/emacs/%{version}/etc/spook.lines
%dir %{_datadir}/emacs/%{version}/etc/srecode/
%{_datadir}/emacs/%{version}/etc/srecode/*.srt
%dir %{_datadir}/emacs/%{version}/etc/themes/
%{_datadir}/emacs/%{version}/etc/themes/*.el
%dir %{_datadir}/emacs/%{version}/etc/tutorials/
%{_datadir}/emacs/%{version}/etc/tutorials/TUTORIAL
%{_datadir}/emacs/%{version}/etc/tutorials/TUTORIAL.*
%{_datadir}/emacs/%{version}/etc/w32-feature.el
%{_datadir}/emacs/%{version}/etc/yow.lines
%dir %{_datadir}/emacs/%{version}/lisp/
%{_datadir}/emacs/%{version}/lisp/COPYING
%doc %{_datadir}/emacs/%{version}/lisp/README
%dir %{_datadir}/emacs/%{version}/lisp/calc/
%dir %{_datadir}/emacs/%{version}/lisp/calendar/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/ede/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/analyze/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/bovine/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/decorate/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/symref/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/wisent/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/srecode/
%dir %{_datadir}/emacs/%{version}/lisp/emacs-lisp/
%dir %{_datadir}/emacs/%{version}/lisp/emulation/
%dir %{_datadir}/emacs/%{version}/lisp/erc/
%dir %{_datadir}/emacs/%{version}/lisp/eshell/
%dir %{_datadir}/emacs/%{version}/lisp/gnus/
%dir %{_datadir}/emacs/%{version}/lisp/image/
%dir %{_datadir}/emacs/%{version}/lisp/international/
%dir %{_datadir}/emacs/%{version}/lisp/language/
%dir %{_datadir}/emacs/%{version}/lisp/leim/
%dir %{_datadir}/emacs/%{version}/lisp/leim/ja-dic/
%dir %{_datadir}/emacs/%{version}/lisp/leim/quail/
%dir %{_datadir}/emacs/%{version}/lisp/mail/
%dir %{_datadir}/emacs/%{version}/lisp/mh-e/
%dir %{_datadir}/emacs/%{version}/lisp/net/
%dir %{_datadir}/emacs/%{version}/lisp/nxml/
%dir %{_datadir}/emacs/%{version}/lisp/obsolete/
%dir %{_datadir}/emacs/%{version}/lisp/org/
%dir %{_datadir}/emacs/%{version}/lisp/play/
%dir %{_datadir}/emacs/%{version}/lisp/progmodes/
%dir %{_datadir}/emacs/%{version}/lisp/term/
%doc %{_datadir}/emacs/%{version}/lisp/term/README
%dir %{_datadir}/emacs/%{version}/lisp/textmodes/
%dir %{_datadir}/emacs/%{version}/lisp/use-package/
%dir %{_datadir}/emacs/%{version}/lisp/url/
%dir %{_datadir}/emacs/%{version}/lisp/vc/
%dir %{_datadir}/emacs/%{version}/site-lisp/
%dir %{_datadir}/emacs/%{version}/site-lisp/term/
%{_datadir}/emacs/%{version}/lisp/*.el
%{_datadir}/emacs/%{version}/lisp/*.elc
%{_datadir}/emacs/%{version}/lisp/*/*.el
%{_datadir}/emacs/%{version}/lisp/*/*.elc
%{_datadir}/emacs/%{version}/lisp/*/*/*.elc
%{_datadir}/emacs/%{version}/lisp/*/*/*/*.elc
%{_datadir}/emacs/%{version}/site-lisp/*.el
%{_datadir}/emacs/%{version}/site-lisp/*/*.el
%dir %{_datadir}/emacs/site-lisp/
%dir %{_datadir}/emacs/site-lisp/site-start.d/
%{_mandir}/man1/*.1%{ext_man}
%exclude %{_mandir}/man1/*tags.1%{ext_man}
%dir %attr(775,games,games) %{_localstatedir}/games/emacs
%attr(660,games,games) %{_localstatedir}/games/emacs/snake-scores
%attr(660,games,games) %{_localstatedir}/games/emacs/tetris-scores

%files       -n emacs-nox -f nox.lst
%defattr(-, root, root)
%{_bindir}/emacs-nox
%dir %{_prefix}/lib/emacs/
%dir %{_prefix}/lib/emacs/%{version}/
%dir %{_prefix}/lib/emacs/%{version}/*-suse-linux*/

%files       -n emacs-x11 -f x11.lst
%defattr(-, root, root)
%{_bindir}/emacs-x11
%{_bindir}/emacs-gtk
%if 0%{suse_version} < 1320
%dir %{_datadir}/metainfo/
%endif
%dir %{_prefix}/lib/emacs/
%dir %{_prefix}/lib/emacs/%{version}/
%dir %{_prefix}/lib/emacs/%{version}/*-suse-linux*/
%if %{with nativecomp}
%{_prefix}/lib/emacs/%{version}/native-lisp
%endif
%{_datadir}/metainfo/emacs.metainfo.xml
%{_datadir}/applications/emacs.desktop
%{_datadir}/applications/emacsclient.desktop
%{_datadir}/applications/emacs-mail.desktop
%{_datadir}/applications/emacsclient-mail.desktop
%{_datadir}/icons/hicolor/*/apps/emacs.png
%{_datadir}/icons/hicolor/*/apps/emacs.ico
%{_datadir}/icons/hicolor/*/apps/emacs.svg
%{_datadir}/icons/hicolor/scalable/mimetypes/*.svg
%{_datadir}/pixmaps/emacs.png

%files       -n emacs-info
%defattr(-, root, root)
%doc %{_infodir}/*%{ext_info}
%if 0%{?include_info} == 0
%exclude %{_infodir}/info.info%{ext_info}
%endif

%files       -n emacs-el
%defattr(-, root, root)
%dir %{_datadir}/emacs/
%dir %{_datadir}/emacs/%{version}/
%dir %{_datadir}/emacs/%{version}/lisp/
%dir %{_datadir}/emacs/%{version}/lisp/calc/
%dir %{_datadir}/emacs/%{version}/lisp/calendar/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/ede/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/analyze/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/bovine/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/decorate/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/symref/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/semantic/wisent/
%dir %{_datadir}/emacs/%{version}/lisp/cedet/srecode/
%dir %{_datadir}/emacs/%{version}/lisp/emacs-lisp/
%dir %{_datadir}/emacs/%{version}/lisp/emulation/
%dir %{_datadir}/emacs/%{version}/lisp/erc/
%dir %{_datadir}/emacs/%{version}/lisp/eshell/
%dir %{_datadir}/emacs/%{version}/lisp/gnus/
%dir %{_datadir}/emacs/%{version}/lisp/image/
%dir %{_datadir}/emacs/%{version}/lisp/international/
%dir %{_datadir}/emacs/%{version}/lisp/language/
%dir %{_datadir}/emacs/%{version}/lisp/leim/
%dir %{_datadir}/emacs/%{version}/lisp/leim/ja-dic/
%dir %{_datadir}/emacs/%{version}/lisp/leim/quail/
%dir %{_datadir}/emacs/%{version}/lisp/mail/
%dir %{_datadir}/emacs/%{version}/lisp/mh-e/
%dir %{_datadir}/emacs/%{version}/lisp/net/
%dir %{_datadir}/emacs/%{version}/lisp/nxml/
%dir %{_datadir}/emacs/%{version}/lisp/obsolete/
%dir %{_datadir}/emacs/%{version}/lisp/org/
%dir %{_datadir}/emacs/%{version}/lisp/play/
%dir %{_datadir}/emacs/%{version}/lisp/progmodes/
%dir %{_datadir}/emacs/%{version}/lisp/term/
%dir %{_datadir}/emacs/%{version}/lisp/textmodes/
%dir %{_datadir}/emacs/%{version}/lisp/use-package/
%dir %{_datadir}/emacs/%{version}/lisp/url/
%dir %{_datadir}/emacs/%{version}/lisp/vc/
%{_datadir}/emacs/%{version}/lisp/*.el.gz
%{_datadir}/emacs/%{version}/lisp/*/*.el.gz
%{_datadir}/emacs/%{version}/lisp/*/*/*.el.gz
%{_datadir}/emacs/%{version}/lisp/*/*/*/*.el.gz

%files -n etags
%defattr(-,root,root)
%doc etc/ETAGS.EBNF
%doc etc/ETAGS.README
%{_bindir}/etags
%{_bindir}/gnuctags
%{_mandir}/man1/etags.1%{ext_man}
%{_mandir}/man1/gnuctags.1%{ext_man}
%ghost %{_bindir}/ctags
%ghost %{_sysconfdir}/alternatives/ctags
%ghost %{_mandir}/man1/ctags.1%{ext_man}
%ghost %{_sysconfdir}/alternatives/ctags.1%{ext_man}

%changelog
openSUSE Build Service is sponsored by