Cross Distro Spec Files



Sorry for breaking the thread, but I just subscribed.

I have been working on a patch to jhbuild that will let it build
packages that will be suitable for a tester to use and test the CVS
version of gnome without having to compile the whole thing themselves.
That is my main goal with this.  I'm not trying to make packages that a
distributor would want to distribute or that people would want to use to
get their main version of Gnome.

I have already successfully made all of the packages that are in the
meta-gnome-desktop build of gnome-2.12 in jhbuild (all 120 of them) and
installed these packages on a clean, non-development install of FC4.  It
wasn't entirely without issues, but it's getting better.

These packages are not what I would call 'good' packages, but they are
good in that they let us provide RPMs to testers that they can use to
just start testing gnome with a minimum amount of hassle.  Our testers
shouldn't have to know that you have to copy mozilla headers around in
order to build e-d-s.  They shouldn't have to deal with every little
build failure.

All of the packages install their files into the /opt/gnome2 directory.
All of the files are owned by root and everyone has full permissions to
all of the files (chmod -R 777 /opt/gnome2).  The permissions can be
improved by not allowing write access to a whole lot of things (maybe
everything?) but I haven't put much thought into that stuff yet.  All of
the packages are named 'CvsModuleName-jhbuild' so they shouldn't collide
with packages from distributors.  The SPEC file itself doesn't do any
building at all.  Basically, jhbuild goes through all of its normal
steps (checkout, configure, make) and when it runs 'make install' I have
set up the DESTDIR environment variable to whatever the user passed to
jhbuild with the --output switch.  So, the package gets installed
to /tmp/buildroot for example.  Once jhbuild is done running make
install, a script that I have written runs.  It looks in
the /tmp/buildroot directory, creates a list of all of the files (not
including files in /var/scrollkeeper or HAL's hotplug.d script as it
doesn't respect --prefix) and puts this list of files into %files.
Then, depending on whether or not files were installed to certain
places, different %post and %postun scripts will be put into the SPEC
file.  Dependency information is created by referencing jhbuild's
moduleset.  These dependencies are probably more strictly BuildRequires,
but something is better than nothing.  I then run rpmbuild and it
basically just sucks up the files into the RPM.  Once the RPM is built I
clear out the DESTDIR environment variable and run 'make install' a
second time so that the files will get installed to /opt/gnome2 on the
building box so that later modules will find the libraries and things
they need.

I have attached the file that I have added to jhbuild, place it in
jhbuild/jhbuild/commands/ if you want to try it out.  There are some
other changes that you will have to make to actually start building
packages.  I have a .rpmmacros file that changes the %_topdir to be in
my home directory so I can build packages as a normal user.  There are
probably other things that you would have to do, but I haven't figured
it out yet.  I have also attached an abbreviated SPEC file that is
created.  I chose to include the gnome-panel one because it has a bunch
of dependencies and post scripts.  I cut out a bunch of the files in the
middle of the list so that the file isn't all that large.

It should be fairly easy to port this over to create non-RPM packages,
but I'm not too familiar with how .debs are built.  I really think that
this will improve the testing of Gnome once everything runs smoothly.
My ultimate goal is to make everything yum-mable or apt-get-able so that
testers can get the most recent version of Gnome from CVS every day and
the only hassle is downloading 120-odd packages.  We'll see how it goes.

-- Mark Drago

Attachment: buildpackages.py
Description: application/python

Summary: The gnome-panel package built from Gnome CVS
Name: gnome-panel-jhbuild
Version: 2005.08.11
Release: 1
Group: User Interface/Desktops
License: SeeModuleDocumentation
BuildRoot: /home/mdrago/test
Requires: scrollkeeper-jhbuild
Requires: libgnomeui-jhbuild
Requires: gnome-desktop-jhbuild
Requires: libwnck-jhbuild
Requires: evolution-data-server-jhbuild
Requires: gnome-menus-jhbuild
Requires: gnome-vfs-jhbuild
Requires: libglade-jhbuild
Requires: gnome-doc-utils-jhbuild


%description
This is the gnome-panel module built from CVS.

#%install
#cd gnome-panel
#rm -fr %{buildroot}

#make install DESTDIR=$RPM_BUILD_ROOT

%files
%defattr(-, root, root)
%attr(777, root, root) /opt/gnome2/bin/gnome-desktop-item-edit
%attr(777, root, root) /opt/gnome2/bin/panel-test-applets
%attr(777, root, root) /opt/gnome2/bin/gnome-panel
%attr(777, root, root) /opt/gnome2/libexec/wnck-applet
%attr(777, root, root) /opt/gnome2/libexec/fish-applet-2
%attr(777, root, root) /opt/gnome2/libexec/clock-applet
%attr(777, root, root) /opt/gnome2/libexec/notification-area-applet
%attr(777, root, root) /opt/gnome2/lib/libpanel-applet-2.so.0
%attr(777, root, root) /opt/gnome2/lib/libpanel-applet-2.la
%attr(777, root, root) /opt/gnome2/lib/libpanel-applet-2.so
%attr(777, root, root) /opt/gnome2/lib/libpanel-applet-2.so.0.1.7
%attr(777, root, root) /opt/gnome2/lib/pkgconfig/libpanelapplet-2.0.pc
%attr(777, root, root) /opt/gnome2/lib/bonobo/servers/GNOME_Panel.server
%attr(777, root, root) /opt/gnome2/lib/bonobo/servers/GNOME_NotificationAreaApplet.server
%attr(777, root, root) /opt/gnome2/lib/bonobo/servers/GNOME_ClockApplet_Factory.server
%attr(777, root, root) /opt/gnome2/lib/bonobo/servers/GNOME_Wncklet_Factory.server
%attr(777, root, root) /opt/gnome2/lib/bonobo/servers/GNOME_FishApplet_Factory.server
%attr(777, root, root) /opt/gnome2/man/man1/gnome-panel.1
%attr(777, root, root) /opt/gnome2/share/gnome-panelrc
....
%attr(777, root, root) /opt/gnome2/share/idl/gnome-panel-2.0/GNOME_Panel.idl
%attr(777, root, root) /opt/gnome2/etc/gconf/schemas/fish.schemas
%attr(777, root, root) /opt/gnome2/etc/gconf/schemas/panel-general.schemas
%attr(777, root, root) /opt/gnome2/etc/gconf/schemas/clock.schemas
%attr(777, root, root) /opt/gnome2/etc/gconf/schemas/panel-toplevel.schemas
%attr(777, root, root) /opt/gnome2/etc/gconf/schemas/panel-default-setup.entries
%attr(777, root, root) /opt/gnome2/etc/gconf/schemas/workspace-switcher.schemas
%attr(777, root, root) /opt/gnome2/etc/gconf/schemas/window-list.schemas
%attr(777, root, root) /opt/gnome2/etc/gconf/schemas/panel-global.schemas
%attr(777, root, root) /opt/gnome2/etc/gconf/schemas/panel-object.schemas
%attr(777, root, root) /opt/gnome2/etc/gconf/schemas/panel-compatibility.schemas
%attr(777, root, root) /opt/gnome2/include/panel-2.0/panel-applet-gconf.h
%attr(777, root, root) /opt/gnome2/include/panel-2.0/panel-applet.h
%attr(777, root, root) /opt/gnome2/include/panel-2.0/panel-applet-enums.h
%attr(777, root, root) /opt/gnome2/include/panel-2.0/GNOME_Panel.h

%post
/opt/gnome2/bin/scrollkeeper-update -p /opt/gnome2/var/lib/scrollkeeper
chmod -R 777 /opt/gnome2/var/lib/scrollkeeper

export GCONF_CONFIG_SOURCE='xml::/opt/gnome2/etc/gconf/gconf.xml.defaults' 
mkdir -p $GCONF_CONFIG_SOURCE 
SCHEMAS="fish.schemas panel-general.schemas clock.schemas panel-toplevel.schemas panel-default-setup.entries workspace-switcher.schemas window-list.schemas panel-global.schemas panel-object.schemas panel-compatibility.schemas" 
for S in $SCHEMAS; do 
  gconftool-2 --makefile-install-rule /opt/gnome2/etc/gconf/schemas/$S > /dev/null 
done
chmod -R 777 $GCONF_CONFIG_SOURCE

for dir in 'hicolor'; do 
  if test -d "$dir"; then 
    touch --no-create /opt/gnome2/share/icons/$dir 
    /opt/gnome2/bin/gtk-update-icon-cache --quiet $dir 
    chmod -R 777 $dir/index.theme 
  fi 
done

%postun
/opt/gnome2/bin/scrollkeeper-update -p /opt/gnome2/var/lib/scrollkeeper
chmod -R 777 /opt/gnome2/var/lib/scrollkeeper

for dir in 'hicolor'; do 
  if test -d "$dir"; then 
    touch --no-create /opt/gnome2/share/icons/$dir 
    /opt/gnome2/bin/gtk-update-icon-cache --quiet $dir 
    chmod -R 777 $dir/index.theme 
  fi 
done

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]