rpms/xscreensaver/devel update-xscreensaver-hacks, NONE, 1.1 xscreensaver.spec, 1.43, 1.44

Mamoru Tasaka (mtasaka) fedora-extras-commits at redhat.com
Sun Sep 2 15:24:46 UTC 2007


Author: mtasaka

Update of /cvs/extras/rpms/xscreensaver/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv30252

Modified Files:
	xscreensaver.spec 
Added Files:
	update-xscreensaver-hacks 
Log Message:
* Sun Sep  2 2007 Mamoru Tasaka <mtasaka at ioa.s.u-tokyo.ac.jp> - 1:5.03-2
- Try to make XScreenSaver.ad modular



--- NEW FILE update-xscreensaver-hacks ---
#!/bin/bash

_SYSCONFDIR=${sysconfdir:-/etc}
_PREFIX=${prefix:-/usr}
_DATADIR=${datadir:-${_PREFIX}/share}

ADDIR=${ADDIR:-${install_prefix}${_SYSCONFDIR}/xscreensaver}
CONFDIR=${CONFDIR:-${install_prefix}${_DATADIR}/xscreensaver/hacks.conf.d}
ADFILE=${ADFILE:-$ADDIR/XScreenSaver.ad}

fix_hackconf ()
{
	if [ ! -s $1 ] ; then
		echo "$1 is empty" &>2
		echo ""
		return 1
	fi

	tmpconf=`mktemp /tmp/hackconf.XXXXXXXX`
	tmpconf_1=`mktemp /tmp/hackconf.XXXXXXXX`
	tmpconf_2=`mktemp /tmp/hackconf.XXXXXXXX`
	tmpconf_3=`mktemp /tmp/hackconf.XXXXXXXX`
	sed -n -e '$p' $1 > $tmpconf_1
	sed -e '$d' $1 > $tmpconf_2
	for file in $tmpconf_1 $tmpconf_2 ; do
		if ( [ -s $file ] && grep -q '\\n\(\|\\\)[^\\].*$' $file ) ; then
			rm -f $tmpconf $tmpconf_1 $tmpconf_2 $tmpconf_3
			echo ""
			echo "ignoring $1" >&2
			return 1
		fi
	done
	if ! grep -q '\\n[^\\]*$' $tmpconf_1 ; then
		sed -i -e 's|\(^.*$\)|\1\\n\\|' $tmpconf_1
	fi
	sed -i -e 's|\\n$|\\n\\|' $tmpconf_1
	while [ -s $tmpconf_2 ] ; do
		sed -n -e '1p' $tmpconf_2 > $tmpconf_3
		sed -i -e '1d' $tmpconf_2
		if grep -q '\\..*$' $tmpconf_3 ; then
			rm -f $tmpconf $tmpconf_1 $tmpconf_2 $tmpconf_3
			echo ""
			echo "ignoring $1" >&2
			return 1
		fi
		if ! grep -q '\\$' $tmpconf_3 ; then
			sed -i -e 's|\(^.*$\)|\1\\|' $tmpconf_3
		fi
		cat $tmpconf_3 >> $tmpconf
	done
	cat $tmpconf_1 >> $tmpconf
	rm -f $tmpconf_1 $tmpconf_2 $tmpconf_3
	echo $tmpconf
	return 0
	
}

for suffix in header tail ; do
	if [ ! -r $ADDIR/XScreenSaver.ad.$suffix ] ; then
		echo "$ADDIR/XScreenSaver.ad.$suffix missing"
		exit 1
	fi
done

tmpfile=`mktemp /tmp/XScreenSaver.ad.XXXXXXXX`
cat $ADDIR/XScreenSaver.ad.header > $tmpfile

for hackconf in $CONFDIR/*.conf ; do
	hackconf_fixed=`fix_hackconf $hackconf`
	if [ -n "$hackconf_fixed" ] ; then
		cat $hackconf >> $tmpfile
		rm -f $hackconf_fixed
	fi
done
sed -i -e '$s|\\n\\$|\\n|' $tmpfile

cat $ADDIR/XScreenSaver.ad.tail >> $tmpfile
install -c -p -m 644 $tmpfile $ADFILE
rm -f $tmpfile




Index: xscreensaver.spec
===================================================================
RCS file: /cvs/extras/rpms/xscreensaver/devel/xscreensaver.spec,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- xscreensaver.spec	28 Aug 2007 19:18:51 -0000	1.43
+++ xscreensaver.spec	2 Sep 2007 15:24:14 -0000	1.44
@@ -2,7 +2,7 @@
 
 %define version       5.03
 %define beta_ver      %{nil}
-%define fedora_rel    1
+%define fedora_rel    2
 
 %define extrarel      %{nil}
 
@@ -16,6 +16,7 @@
 %define autoconf_ver  2.53
 
 %define update_po     1
+%define modular_conf  1
 
 Buildroot:       %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
@@ -28,6 +29,7 @@
 Group:           Amusements/Graphics
 URL:             http://www.jwz.org/xscreensaver/
 Source0:         http://www.jwz.org/xscreensaver/xscreensaver-%{version}%{?beta_ver}.tar.gz
+Source10:        update-xscreensaver-hacks
 Patch1:          xscreensaver-5.00b5-sanitize-hacks.patch
 Patch21:         xscreensaver-5.03-webcollage-default-nonet.patch
 Patch40:         xscreensaver-5.02-pidnumber-write_long.patch
@@ -272,6 +274,64 @@
 
 make %{?_smp_mflags}
 
+%if %{modular_conf}
+# Make XScreenSavar.ad modular
+CONFD=xscreensaver
+rm -rf $CONFD
+mkdir $CONFD
+
+# preserve the original adfile
+cp -p driver/XScreenSaver.ad $CONFD
+
+# First split XScreenSaver.ad into 3 parts
+cat driver/XScreenSaver.ad | \
+   sed -n -e '1,/\*programs/p' > $CONFD/XScreenSaver.ad.header
+cat driver/XScreenSaver.ad | sed -e '1,/\*programs/d' | \
+   sed -n -e '1,/\\n$/p' > $CONFD/XScreenSaver.ad.hacks
+cat driver/XScreenSaver.ad | sed -e '1,/\\n$/d' > $CONFD/XScreenSaver.ad.tail
+
+# Seperate XScreenSaver.ad.hacks into each hacks
+cd $CONFD
+mkdir hacks.conf.d ; cp -p XScreenSaver.ad.hacks hacks.conf.d/ ; cd hacks.conf.d
+
+while [ -s XScreenSaver.ad.hacks ] ; do
+# cut hacks file by \n
+   sed -n -e '1,1p' XScreenSaver.ad.hacks > .tmp
+   if grep -q '\\n[\\]*$' .tmp ; then
+      sed -i -e '1d' XScreenSaver.ad.hacks
+   else
+      sed -n -e '1,/\\n[\\]*$/p' XScreenSaver.ad.hacks > .tmp
+      sed -i -e '1,/\\n[\\]*$/d' XScreenSaver.ad.hacks
+   fi
+
+# name modular hack conf
+   set +x
+   cp -p .tmp .tmp.2
+   modname='\'
+   while ( echo $modname | grep -q '\\' ) ; do
+      sed -n -e '1,1p' .tmp.2 | sed -e \
+         's|^[-]*[ \t][ \t]*\([a-zA-Z][a-zA-Z-]*:[ \t][ \t]*\)*\("[^"][^"]*"[ \t][ \t]*\)*||' | \
+         sed -e 's|[ \t].*$||' > .mod.name
+      modname=`cat .mod.name`
+      sed -i -e '1,1d' .tmp.2
+   done
+   N=1
+   Filen=$modname.conf
+   while [ -f $Filen ] ; do
+      N=$((N+1))
+      Filen=$modname-$N.conf
+   done
+   sed -e 's|\\n$|\\n\\|' .tmp > $Filen
+   echo "   created: $Filen"
+
+# clean up
+   rm -f .tmp* .mod.name
+
+done
+set -x
+cd ../..
+%endif
+
 %install
 archdir=`./config.guess`
 cd $archdir
@@ -323,6 +383,57 @@
 (  cd hacks/glx ; list_files install ) >  $dd/gl-extras.files
 (  cd driver    ; list_files install ) >  $dd/base.files
 
+%if %{modular_conf}
+# install update script
+install -cpm 755 %{SOURCE10} $RPM_BUILD_ROOT%{_bindir}
+echo "%{_bindir}/update-xscreensaver-hacks" >> $dd/base.files
+
+# make hack conf modular
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/xscreensaver
+mkdir -p $RPM_BUILD_ROOT%{_datadir}/xscreensaver/hacks.conf.d
+cp -p xscreensaver/XScreenSaver.ad* \
+   $RPM_BUILD_ROOT%{_sysconfdir}/xscreensaver
+cp -p xscreensaver/hacks.conf.d/*.conf \
+   $RPM_BUILD_ROOT%{_datadir}/xscreensaver/hacks.conf.d/
+
+for adfile in xscreensaver/XScreenSaver.ad.* ; do
+   filen=`basename $adfile`
+   echo "%%config(noreplace) %{_sysconfdir}/xscreensaver/$filen" >> $dd/base.files
+done
+echo -n "%%verify(not size md5 mtime) " >> $dd/base.files
+echo "%%config(noreplace) %{_sysconfdir}/xscreensaver/XScreenSaver.ad" >> \
+   $dd/base.files
+
+# check symlink
+rm -f $RPM_BUILD_ROOT%{_datadir}/X11/app-defaults/XScreenSaver
+
+pushd $RPM_BUILD_ROOT%{_datadir}/X11/app-defaults
+pushd ../../../..
+if [ ! $(pwd) == $RPM_BUILD_ROOT ] ; then
+   echo "Possibly symlink broken"
+   exit 1
+fi
+popd
+popd
+
+ln -sf ../../../..%{_sysconfdir}/xscreensaver/XScreenSaver.ad \
+   $RPM_BUILD_ROOT%{_datadir}/X11/app-defaults/XScreenSaver
+
+set +x
+for conf in xscreensaver/hacks.conf.d/*.conf ; do
+   modname=`basename $conf | sed -e 's|.conf||' | sed -e 's|-.*||'`
+   if grep -q -i $modname $dd/extras.files ; then
+        hackfile=$dd/extras.files
+   else
+        hackfile=$dd/gl-extras.files
+   fi
+   echo "%{_datadir}/xscreensaver/hacks.conf.d/`basename $conf`" >> $hackfile
+   echo -n " Added: %{_datadir}/xscreensaver/hacks.conf.d/`basename $conf`"
+   echo " >> `basename $hackfile`"
+done
+set -x
+%endif
+
 # add documents
 pushd $dd &> /dev/null
 for f in README* ; do
@@ -332,7 +443,7 @@
 
 # add directory
 pushd $RPM_BUILD_ROOT
-for dir in `find .%{_prefix} -type d | grep xscreensaver` ; do
+for dir in `find . -type d | grep xscreensaver` ; do
    echo "%%dir ${dir#.}" >> $dd/base.files
 done
 popd
@@ -414,6 +525,16 @@
 %clean
 rm -rf ${RPM_BUILD_ROOT}
 
+%if %{modular_conf}
+%post extras
+%{_bindir}/update-xscreensaver-hacks
+exit 0
+
+%post gl-extras
+%{_bindir}/update-xscreensaver-hacks
+exit 0
+%endif
+
 %files
 %defattr(-,root,root,-)
 
@@ -433,6 +554,9 @@
 %defattr(-,root,root,-)
 
 %changelog
+* Sun Sep  2 2007 Mamoru Tasaka <mtasaka at ioa.s.u-tokyo.ac.jp> - 1:5.03-2
+- Try to make XScreenSaver.ad modular
+
 * Wed Aug 29 2007 Mamoru Tasaka <mtasaka at ioa.s.u-tokyo.ac.jp> - 1:5.03-1
 - Update to 5.03
 




More information about the fedora-extras-commits mailing list