-Name: xscreensaver
-Summary: X screen saver and locker
-Vendor: Jamie Zawinski <jwz@jwz.org>
-Version: 3.17
-Release: 1
-URL: http://www.jwz.org/xscreensaver/
-Source: xscreensaver-%{version}.tar.gz
-Copyright: BSD
-Group: X11/Utilities
-Buildroot: /var/tmp/xscreensaver-root
+%define name xscreensaver
+%define version 4.02
+%define release 1
+%define serial 1
+%define x11_prefix /usr/X11R6
+%define gnome_prefix /usr
+%define kde_prefix /usr
+
+%define gnome_datadir %{gnome_prefix}/share
+%define gnome_ccdir_1 %{gnome_datadir}/control-center/Desktop
+%define gnome_ccdir_2 %{gnome_datadir}/control-center/capplets
+%define gnome_paneldir %{gnome_datadir}/gnome/apps/Settings/Desktop
+%define gnome_icondir %{gnome_datadir}/pixmaps
+
+# By default, builds the basic, non-GL package.
+# To build both the basic and GL-add-on packages:
+# rpm --define "USE_GL yes" ...
+# or uncomment the following line.
+# %define USE_GL yes
+
+Summary: X screen saver and locker
+Name: %{name}
+Version: %{version}
+Release: %{release}
+Serial: %{serial}
+Group: Amusements/Graphics
+Copyright: BSD
+URL: http://www.jwz.org/xscreensaver
+Vendor: Jamie Zawinski <jwz@jwz.org>
+Source: %{name}-%{version}.tar.gz
+Buildroot: %{_tmppath}/%{name}-%{version}-root
+
+# This package really should be made to depend on
+# control-center >= 1.4.0.2 -OR- control-center >= 1.5.12
+# but there's no way to express that.
%description
A modular screen saver and locker for the X Window System.
Highly customizable: allows the use of any program that
can draw on the root window as a display mode.
-More than 100 display modes are included in this package.
+More than 140 display modes are included in this package.
+%{?USE_GL:See also the xscreensaver-gl package, which}
+%{?USE_GL:includes optional OpenGL display modes.}
+
+%{?USE_GL:%package gl}
+%{?USE_GL:Group: Amusements/Graphics}
+%{?USE_GL:Requires: xscreensaver = %{version}}
+%{?USE_GL:Summary: A set of GL screensavers}
+%{?USE_GL:%description gl}
+%{?USE_GL:The xscreensaver-gl package contains even more screensavers for your}
+%{?USE_GL:mind-numbing, ambition-eroding, time-wasting, hypnotized viewing}
+%{?USE_GL:pleasure. These screensavers require OpenGL or Mesa support.}
+%{?USE_GL: }
+%{?USE_GL:Install the xscreensaver-gl package if you need more screensavers}
+%{?USE_GL:for use with the X Window System and you have OpenGL or Mesa}
+%{?USE_GL:installed.}
%prep
-
%setup -q
%build
+RPMOPTS=""
+
+# Is this really needed? If so, why?
+# %ifarch alpha
+# RPMOPTS="$RPMOPTS --without-xshm-ext"
+# %endif
+
+# On Solaris, build without PAM and with Shadow.
+# On other systems, build with PAM and without Shadow.
+#
+%ifos solaris
+ RPMOPTS="$RPMOPTS --without-pam"
+%else
+ RPMOPTS="$RPMOPTS --with-pam --without-shadow"
+%endif
+
+%{?USE_GL:RPMOPTS="$RPMOPTS --with-gl"}
+%{!?USE_GL:RPMOPTS="$RPMOPTS --without-gl"}
+
+CFLAGS="$RPM_OPT_FLAGS" \
+ ./configure --prefix=%{x11_prefix} \
+ --with-setuid-hacks \
+ $RPMOPTS
-./configure --prefix=/usr/X11R6 \
- --enable-subdir=/usr/X11R6/lib/xscreensaver
-make all
+make
%install
-# This is the only directory that "make install" won't make as needed
+# Most xscreensaver executables go in the X bin directory (/usr/X11R6/bin/)
+# but some of them (e.g., the control panel capplet) go in the GNOME bin
+# directory instead (/usr/bin/).
+#
+mkdir -p $RPM_BUILD_ROOT%{gnome_prefix}/bin
+mkdir -p $RPM_BUILD_ROOT%{gnome_ccdir_1}
+mkdir -p $RPM_BUILD_ROOT%{gnome_ccdir_2}
+mkdir -p $RPM_BUILD_ROOT%{gnome_paneldir}
+
+# Likewise for KDE: the .kss file goes in the KDE bin directory (/usr/bin/).
+#
+export KDEDIR=%{kde_prefix}
+mkdir -p $RPM_BUILD_ROOT$KDEDIR/bin
+
+# This is a directory that "make install" won't make as needed
# (since Linux uses /etc/pam.d/* and Solaris uses /etc/pam.conf).
#
mkdir -p $RPM_BUILD_ROOT/etc/pam.d
-make prefix=$RPM_BUILD_ROOT/usr/X11R6 \
- AD_DIR=$RPM_BUILD_ROOT/usr/X11R6/lib/X11/app-defaults \
- HACKDIR=$RPM_BUILD_ROOT/usr/X11R6/lib/xscreensaver \
- PAM_DIR=$RPM_BUILD_ROOT/etc/pam.d \
- install-strip
+make install_prefix=$RPM_BUILD_ROOT \
+ AD_DIR=%{x11_prefix}/lib/X11/app-defaults \
+ GNOME_BINDIR=%{gnome_prefix}/bin \
+ install-strip
+
+# Make a pair of lists, of the GL and non-GL executables.
+# Do this by parsing the output of a dummy run of "make install"
+# in the driver/, hacks/ and hacks/glx/ directories.
+#
+list_files() {
+ make -s install_prefix=$RPM_BUILD_ROOT INSTALL=true \
+ GNOME_BINDIR=%{gnome_prefix}/bin \
+ "$@" |
+ sed -n -e 's@.* /\([^ ]*\)$@/\1@p' |
+ sed -e "s@^$RPM_BUILD_ROOT@@" \
+ -e "s@/bin/\.\./@/@" |
+ sed -e 's@\(.*/man/.*\)@\1\*@' |
+ sort
+}
+
+( cd hacks ; list_files install ; \
+ cd ../driver; list_files install-program install-scripts ) \
+ > $RPM_BUILD_DIR/xscreensaver-%{version}/exes-non-gl
+( cd hacks/glx ; list_files install ) \
+ | grep -v man1/xscreensaver-gl-helper \
+ > $RPM_BUILD_DIR/xscreensaver-%{version}/exes-gl
+
# This line is redundant, except that it causes the "xscreensaver"
# executable to be installed unstripped (while all others are stripped.)
# You should install it this way so that jwz gets useful bug reports.
#
-install -m 4755 driver/xscreensaver $RPM_BUILD_ROOT/usr/X11R6/bin
+install -m 4755 driver/xscreensaver $RPM_BUILD_ROOT%{x11_prefix}/bin
# Even if we weren't compiled with PAM support, make sure to include
# the PAM module file in the RPM anyway, just in case.
#
-( cd driver; make PAM_DIR=$RPM_BUILD_ROOT/etc/pam.d install-pam )
-
-# If we built multiple versions of xscreensaver-demo (because multiple
-# toolkits were available) then install them all.
-#
-( cd driver;
- exes=`echo xscreensaver-demo-*`
- count=`echo $exes | wc -w`
- if [ $count -gt 1 ]; then
- for exe in $exes; do
- install -c -s $exe $RPM_BUILD_ROOT/usr/X11R6/bin
- done
- cd $RPM_BUILD_ROOT/usr/X11R6/bin
- if [ -x xscreensaver-demo-Xaw3d ]; then target=Xaw3d; fi
- if [ -x xscreensaver-demo-Xaw ]; then target=Xaw; fi
- if [ -x xscreensaver-demo-Gtk ]; then target=Gtk; fi
- if [ -x xscreensaver-demo-Xm ]; then target=Xm; fi
- rm -f xscreensaver-demo
- ln -s xscreensaver-demo-$target xscreensaver-demo
- fi
- )
-
-
-# This is for wmconfig, a tool that generates init files for window managers.
-#
-mkdir -p $RPM_BUILD_ROOT/etc/X11/wmconfig
-cat > $RPM_BUILD_ROOT/etc/X11/wmconfig/xscreensaver <<EOF
-xscreensaver name "xscreensaver (1min timeout)"
-xscreensaver description "xscreensaver"
-xscreensaver group "Amusements/Screen Savers"
-xscreensaver exec "xscreensaver -timeout 1 -cycle 1 &"
-EOF
-
-# This is for the GNOME desktop:
-#
-mkdir -p "$RPM_BUILD_ROOT/usr/share/apps/Amusements/Screen Savers"
-cat > "$RPM_BUILD_ROOT/usr/share/apps/Amusements/Screen Savers/xscreensaver.desktop" <<EOF
-[Desktop Entry]
-Name=xscreensaver (1min timeout)
-Description=xscreensaver
-Exec=xscreensaver -timeout 1 -cycle 1
-EOF
+( cd driver ;
+ make install_prefix=$RPM_BUILD_ROOT PAM_DIR=/etc/pam.d install-pam )
# Make sure all files are readable by all, and writable only by owner.
#
chmod -R a+r,u+w,og-w $RPM_BUILD_ROOT
+%post
+# This part runs on the end user's system, when the RPM is installed.
+
+pids=`pidof xscreensaver`
+if [ -n "$pids" ]; then
+ echo "sending SIGHUP to running xscreensaver ($pids)..." >&2
+ kill -HUP $pids
+fi
+
%clean
-rm -rf $RPM_BUILD_ROOT
+if [ -d $RPM_BUILD_ROOT ]; then rm -r $RPM_BUILD_ROOT ; fi
+if [ -d $RPM_BUILD_ROOT-gl ]; then rm -r $RPM_BUILD_ROOT-gl ; fi
-%files
+%files -f exes-non-gl
%defattr(-,root,root)
+# Files for the "xscreensaver" package:
+#
%doc README README.debugging
- /usr/X11R6/bin/*
- /usr/X11R6/lib/xscreensaver/*
-%config /usr/X11R6/lib/X11/app-defaults/*
- /usr/X11R6/man/man1/*
+%dir %{x11_prefix}/lib/xscreensaver
+%config %{x11_prefix}/lib/X11/app-defaults/*
+ %{x11_prefix}/man/man1/xscreensaver*
/etc/pam.d/*
-%config(missingok) /etc/X11/wmconfig/*
-%config(missingok) "/usr/share/apps/Amusements/Screen Savers/*"
+
+%config(missingok) %{kde_prefix}/bin/*.kss
+
+%config(missingok) %{gnome_prefix}/bin/*-capplet
+%config(missingok) %{gnome_ccdir_1}/*.desktop
+%config(missingok) %{gnome_ccdir_2}/*.desktop
+%config(missingok) %{gnome_paneldir}/*.desktop
+%config(missingok) %{gnome_icondir}/*
+
+# Files for the "xscreensaver-gl" package:
+#
+%{?USE_GL:%files -f exes-gl gl}