Hallo.

I collected several issues you may find during the prefix move to /usr.


Contents

General rules
Files which require special care
Obsolete package
Obsolete directories
Files which should not appear in file list
Multiple directory ownership and unowned directories
libtool error /opt/gnome/lib/libfoo.la not found
Missing icon error


General rules

You can consult any core GNOME package, if you need an example of a
simple spec file.

Use as small BuildRequires as possible
Watch pc and libtool linking and add correct -devel dependencies.

Split out gtk-doc developer documentation to -doc subpackage.

Prefer %configure, which already covers many path specifiers and also
includes basic CFLAGS and CXXFLAGS.

Remove all obsolete configure options.

Prevent all force actions (e. g. rm -rf). These actions never fail and
probably will remain in the spec file years after they become obsolete.

Use %suse_update_desktop_file for all installed icons to allow in-house
translation (Factory packages only).

Do not use rm -rf $RPM_BUILD_ROOT in install, it opens a security hole.

If your patch contains new strings, ask for including to
gnome-patch-translation project.

Watch carefully, whether the Norwegian hack does not overwrite
up-to-date nb.po by outdated no.po.


Files which require special care


%{_datadir}/mime/packages/*.xml

Following scriptlets are needed:

%post
if test -x usr/bin/update-mime-database ; then
  usr/bin/update-mime-database usr/share/mime >/dev/null
fi

%postun
if test -x usr/bin/update-mime-database ; then
  usr/bin/update-mime-database usr/share/mime >/dev/null
fi


%{_datadir}/locale/*/LC_MESSAGES/*.mo
%{_datadir}/gnome/help/*

Following modification are needed:
%install
...
%find_lang foo

%files -f foo.lang
and exclude files from explicitly listed files

Where foo is %{name} or other string depending on base name.

For more base names:
%find_lang foo
%find_lang foo2 foo.lang


%{_sysconfdir}/gconf/schemas/*.schemas

Following modification are needed:

Build system requires: gconf2-devel

Preamble:
%gconf_schemas_prereq

%install
...
%find_gconf_schemas
or
%def_gconf_schemas subpackage1
%add_gconf_schemas schemas_name1
%add_gconf_schemas schemas_name2
%def_gconf_schemas subpackage2
%add_gconf_schemas schemas_name3
%add_gconf_schemas schemas_name4
%end_gconf_schemas
schemas names are without path and suffix

%pre -f %{name}.schemas_pre

%preun -f %{name}.schemas_preun

%posttrans -f %{name}.schemas_posttrans

%files -f %{name}.schemas_list
or
%files -f subpackage.schemas_list
and exclude files from explicitly listed files

In case of more -f needed for one %files:

%install
...
%find_gconf_schemas
%find_lang %{name}
cat %{name}.schemas_list %{name}.lang >%{name}.lst
...
%files -f %{name}.lst


Obsolete package
gnome-filesystem

This package will be dropped. Directories from it was moved to
filesystem or to the package, where it logically belongs. Later there
will be created compatibility package for third party packages
in /opt/gnome.


Obsolete directories

%{_datadir}/mime-info
%{_datadir}/application-registry

These directories are part of obsolete GNOME MIME Info used by GNOME1
and early GNOME2. You should covert it to shared mime info:

Consult /usr/share/mime/packages/freedesktop.org.xml. If your MIME type
is already there, delete these directories.

If not, you have to create MIME description. Call mime-info-to-mime and
the delete old contents. As an example see devhelp, gnome-pilot,...

Edit resulting xml file and attach it to the bug report to upstream
("Use Shared MIME Info instead of obsolete GNOME MIME Info"). I can send
you an automake templates for it.

%{_datadir}/gnome/apps

Part of GNOME1 menu system. Move it to %{_datadir}/applications, add
Categories entry and report to upstream.

%{_prefix}/lib/gnome-applets

Change it to --libexecdir=%{_prefix}/lib/gnome-panel, which better
fits to package name, where it technically belongs.

%{_datadir}/mime with exception of %{_datadir}/mime/packages/*.xml

These files are auto generated and created by mistake and must never
appear in file list. Use --disable-update-mimedb (if implemented) or
delete them. See "Special files which require scriptlets" above.

%{_libdir}/path/*.*a
If "path" is not listed in the *.pc or *-config file, these files are
most probably obsolete and should be removed.

%{_libdir}/executable or %{_libdir}/path/executable
These paths are bi-arch unaware and may cause bi-arch problems. If it is
not an upstream problem, you are probably missing --libexecdir.
Use --libexecdir=%{_prefix}/lib or --libexecdir=%{_prefix}/lib/%{name}
depending on installed path (choose the shortest one which does not
install executables directly to %{_prefix}/lib). For GNOME panel applets
you can use also --libexecdir=%{_prefix}/lib/gnome-panel.


Files which should not appear in file list

%{_sysconfdir}/gconf/schemas
Use %find_gconf_schemas instead of explicit listing

%{_datadir}/locale/*/LC_MESSAGES/*.mo
%{_datadir}/gnome/help/*
Use %find_lang



Multiple directory ownership and unowned directories

We are trying to avoid multiple directory ownership as much as possible.
Some directories were moved to particular packages. To fulfil directory
ownership requirement, you have to add this package to BuildRequires and
Requires. If you believe that it is not logical in your case, please
contact GNOME team or add "# FIXME: Strange directory ownership" comment
to your spec file. If you believe that your package is a good candidate
for multiple directory ownership (e. g. you provide branding or module
and not require package itself), include directory itself to ownership
and comment the reason in the spec file.


libtool error /opt/gnome/lib/libfoo.la not found

This error most probably means, that one of library providing package
was not properly recompiled with libraries in the new location. To find
the library,
grep /opt/gnome/lib/libfoo.la /usr/lib/*.la /opt/gnome/lib/*.la.


Missing icon error

If you get a missing icon error, you should most probably link icon from
%{_datadir}/icons to %{_datadir}/pixmaps. Choose 48x48, if not possible,
use largest smaller or svg file and link it to %{_datadir}/pixmaps.

mkdir $RPM_BUILD_ROOT/usr/share/pixmaps
ln -s ../icons/hicolor/48x48/apps/foo.png $RPM_BUILD_ROOT%{_datadir}/pixmaps/

In case the path begins with icons/hicolor, it's OK and this hack should
disapper once we will be sure, that all desktop menu systems are aware
of icons.

In case the path does not begin with icons/hicolor (e. g. begins by
icons/gnome, report issue as an upstream bug.

-- 
Best Regards / S pozdravem,

Stanislav Brabec
software developer
---------------------------------------------------------------------
SUSE LINUX, s. r. o.                          e-mail: [EMAIL PROTECTED]
Lihovarská 1060/12                            tel: +420 284 028 966
190 00 Praha 9                                fax: +420 284 028 951
Czech Republic                                http://www.suse.cz/

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to