http://packetstormsecurity.org/UNIX/admin/xscreensaver-3.31.tar.gz
[xscreensaver] / xscreensaver.spec
1 %define name            xscreensaver
2 %define version         3.31
3 %define release         1
4 %define serial          1
5 %define x11_prefix      /usr/X11R6
6 %define gnome_prefix    /usr
7 %define kde_prefix      /usr
8
9 %define gnome_datadir   %{gnome_prefix}/share
10 %define gnome_ccdir     %{gnome_datadir}/control-center/Desktop
11 %define gnome_paneldir  %{gnome_datadir}/gnome/apps/Settings/Desktop
12 %define gnome_icondir   %{gnome_datadir}/pixmaps
13
14 # By default, builds the basic, non-GL package.
15 # To build both the basic and GL-add-on packages:
16 #   rpm --define "USE_GL yes" ...
17 # or uncomment the following line.
18 # %define       USE_GL          yes
19
20 Summary:        X screen saver and locker
21 Name:           %{name}
22 Version:        %{version}
23 Release:        %{release}
24 Serial:         %{serial}
25 Group:          Amusements/Graphics
26 Copyright:      BSD
27 URL:            http://www.jwz.org/xscreensaver
28 Vendor:         Jamie Zawinski <jwz@jwz.org>
29 Source:         %{name}-%{version}.tar.gz
30 Buildroot:      %{_tmppath}/%{name}-%{version}-root
31
32 %description
33 A modular screen saver and locker for the X Window System.
34 Highly customizable: allows the use of any program that
35 can draw on the root window as a display mode.
36 More than 120 display modes are included in this package.
37 %{?USE_GL:See also the xscreensaver-gl package, which}
38 %{?USE_GL:includes optional OpenGL display modes.}
39
40 %{?USE_GL:%package gl}
41 %{?USE_GL:Group:        Amusements/Graphics}
42 %{?USE_GL:Requires:     xscreensaver = %{version}}
43 %{?USE_GL:Summary:      A set of GL screensavers}
44 %{?USE_GL:%description gl}
45 %{?USE_GL:The xscreensaver-gl package contains even more screensavers for your}
46 %{?USE_GL:mind-numbing, ambition-eroding, time-wasting, hypnotized viewing}
47 %{?USE_GL:pleasure. These screensavers require OpenGL or Mesa support.}
48 %{?USE_GL: }
49 %{?USE_GL:Install the xscreensaver-gl package if you need more screensavers}
50 %{?USE_GL:for use with the X Window System and you have OpenGL or Mesa}
51 %{?USE_GL:installed.}
52
53 %prep
54 %setup -q
55
56 %build
57 RPMOPTS=""
58
59 # Is this really needed?  If so, why?
60 # %ifarch alpha
61 #  RPMOPTS="$RPMOPTS --without-xshm-ext"
62 # %endif
63
64 # On Solaris, build without PAM and with Shadow.
65 # On other systems, build with PAM and without Shadow.
66 #
67 %ifos solaris
68  RPMOPTS="$RPMOPTS --without-pam"
69 %else
70  RPMOPTS="$RPMOPTS --with-pam --without-shadow"
71 %endif
72
73 %{?USE_GL:RPMOPTS="$RPMOPTS --with-gl"}
74 %{!?USE_GL:RPMOPTS="$RPMOPTS --without-gl"}
75
76 CFLAGS="$RPM_OPT_FLAGS" \
77  ./configure --prefix=%{x11_prefix} \
78              --enable-subdir=../lib/xscreensaver \
79              --without-setuid-hacks \
80              $RPMOPTS
81
82 make
83
84 %install
85
86 # Most xscreensaver executables go in the X bin directory (/usr/X11R6/bin/)
87 # but some of them (e.g., the control panel capplet) go in the GNOME bin
88 # directory instead (/usr/bin/).
89 #
90 mkdir -p $RPM_BUILD_ROOT%{gnome_prefix}/bin
91 mkdir -p $RPM_BUILD_ROOT%{gnome_ccdir}
92 mkdir -p $RPM_BUILD_ROOT%{gnome_paneldir}
93
94 # Likewise for KDE: the .kss file goes in the KDE bin directory (/usr/bin/).
95 #
96 export KDEDIR=%{kde_prefix}
97 mkdir -p $RPM_BUILD_ROOT$KDEDIR/bin
98
99 # This is a directory that "make install" won't make as needed
100 # (since Linux uses /etc/pam.d/* and Solaris uses /etc/pam.conf).
101 #
102 mkdir -p $RPM_BUILD_ROOT/etc/pam.d
103
104 make  install_prefix=$RPM_BUILD_ROOT \
105       AD_DIR=%{x11_prefix}/lib/X11/app-defaults \
106       GNOME_BINDIR=%{gnome_prefix}/bin \
107       install-strip
108
109 # Make a pair of lists, of the GL and non-GL executables.
110 # Do this by parsing the output of a dummy run of "make install"
111 # in the driver/, hacks/ and hacks/glx/ directories.
112 #
113 list_files() {
114   make -s install_prefix=$RPM_BUILD_ROOT INSTALL=true           \
115           GNOME_BINDIR=%{gnome_prefix}/bin                      \
116           "$@"                                                  |
117     sed -n -e 's@.* /\([^ ]*\)$@/\1@p'                          |
118     sed    -e "s@^$RPM_BUILD_ROOT@@"                            \
119            -e "s@/bin/\.\./@/@"                                 |
120     sed    -e 's@\(.*/man/.*\)@\1\*@'                           |
121     sort
122 }
123
124 ( cd hacks ; list_files install ; \
125   cd ../driver; list_files install-program ) \
126    > $RPM_BUILD_DIR/xscreensaver-%{version}/exes-non-gl
127 ( cd hacks/glx ; list_files install ) \
128    > $RPM_BUILD_DIR/xscreensaver-%{version}/exes-gl
129
130
131 # This line is redundant, except that it causes the "xscreensaver"
132 # executable to be installed unstripped (while all others are stripped.)
133 # You should install it this way so that jwz gets useful bug reports.
134 #
135 install -m 4755 driver/xscreensaver $RPM_BUILD_ROOT%{x11_prefix}/bin
136
137 # Even if we weren't compiled with PAM support, make sure to include
138 # the PAM module file in the RPM anyway, just in case.
139 #
140 ( cd driver ;
141   make install_prefix=$RPM_BUILD_ROOT PAM_DIR=/etc/pam.d install-pam )
142
143 # Make sure all files are readable by all, and writable only by owner.
144 #
145 chmod -R a+r,u+w,og-w $RPM_BUILD_ROOT
146
147
148 # This is a tricky part...
149 #
150 # xscreensaver installs several files that are also installed by the
151 # "control-center" RPM.  The versions from xscreensaver are better,
152 # and so should override control-center.  But, the way RPM works,
153 # if the xscreensaver RPM contained those files, the end user would
154 # have to "--force" to make the xscreensaver RPM install.  That's
155 # not something people are used to doing, so that's Bad.
156 #
157 # So instead, we rename the files so that they don't conflict with
158 # the control center.  Then we have a "%post" script that creates
159 # symbolic links to our files.
160
161 CCDIR=$RPM_BUILD_ROOT%{gnome_ccdir}
162 PADIR=$RPM_BUILD_ROOT%{gnome_paneldir}
163 CADIR=$RPM_BUILD_ROOT%{gnome_prefix}/bin
164 DESKF=screensaver-properties.desktop
165 CAPLT=screensaver-properties-capplet
166
167 if [ -f $CCDIR/$DESKF ]; then
168   mv $CCDIR/$DESKF $CCDIR/x$DESKF
169   mv $PADIR/$DESKF $PADIR/x$DESKF
170   mv $CADIR/$CAPLT $CADIR/x$CAPLT
171 fi
172
173 %post
174 # This part runs on the end user's system, when the RPM is installed.
175 # (See comment above, at end of "%install" section.)
176
177 verbose=0
178
179 overwrite_links() {
180   dir="$1"
181   oname="$2"
182   nname="$3"
183
184   # only do this if the file we're making a link *to* exists
185   # (i.e., was present in this rpm.)
186   #
187   if [ -f "$dir/$nname" ]; then
188
189     # backup or delete the old version, if any.
190     #
191     existed=0
192     if [ -f "$dir/$oname" ]; then
193       existed=1
194       if [ -f "$dir/$oname.rpmsave" ]; then
195         rm -f "$dir/$oname"
196         if [ $verbose -gt 1 ]; then
197           echo "$dir/$oname.rpmsave already exists"  >&2
198         fi
199       else
200         mv "$dir/$oname" "$dir/$oname.rpmsave"
201         if [ $verbose -gt 1 ]; then
202           echo "saved $dir/$oname as $oname.rpmsave" >&2
203         fi
204       fi
205     fi
206
207     # install a relative symlink to the new name.
208     #
209     ln -s "$nname" "$dir/$oname"
210     if [ $verbose -ge 1 ]; then
211       if [ $existed = 1 ] ; then
212         echo "replaced $dir/$oname" >&2
213       else
214         echo "created $dir/$oname"  >&2
215       fi
216     fi
217   fi
218 }
219
220 CCDIR=%{gnome_ccdir}
221 PADIR=%{gnome_paneldir}
222 CADIR=%{gnome_prefix}/bin
223 DESKF=screensaver-properties.desktop
224 CAPLT=screensaver-properties-capplet
225
226 overwrite_links $CCDIR $DESKF x$DESKF
227 overwrite_links $PADIR $DESKF x$DESKF
228 overwrite_links $CADIR $CAPLT x$CAPLT
229
230
231 %clean
232 if [ -d $RPM_BUILD_ROOT    ]; then rm -r $RPM_BUILD_ROOT    ; fi
233 if [ -d $RPM_BUILD_ROOT-gl ]; then rm -r $RPM_BUILD_ROOT-gl ; fi
234
235 %files -f exes-non-gl
236 %defattr(-,root,root)
237
238 # Files for the "xscreensaver" package:
239 #
240 %doc                README README.debugging
241 %dir                %{x11_prefix}/lib/xscreensaver
242 %config             %{x11_prefix}/lib/X11/app-defaults/*
243                     %{x11_prefix}/man/man1/xscreensaver*
244                     /etc/pam.d/*
245
246 %config(missingok)  %{kde_prefix}/bin/*.kss
247
248 %config(missingok)  %{gnome_prefix}/bin/*-capplet
249 %config(missingok)  %{gnome_ccdir}/*.desktop
250 %config(missingok)  %{gnome_paneldir}/*.desktop
251 %config(missingok)  %{gnome_icondir}/*
252
253 # Files for the "xscreensaver-gl" package:
254 #
255 %{?USE_GL:%files -f exes-gl gl}