[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: making two subpackages with files in exactly the same place
- From: Jeff Johnson <jbj redhat com>
- To: rpm-list redhat com
- Subject: Re: making two subpackages with files in exactly the same place
- Date: Tue, 30 Jul 2002 09:07:55 -0400
On Tue, Jul 30, 2002 at 01:08:33PM +0200, Arkadiusz Miskiewicz wrote:
>
> Hi,
>
> This is suggestion of feature for rpm 4.1.
>
> I have XFree86.src.rpm which contains whole xfree (including normal ati drivers)
> and separate ati.2 drivers (from gatos project).
>
> I want to build two subpackages:
> XFree86-driver-ati (original ati drivers from xfree)
> XFree86-driver-ati.2 (new ati drivers from gatos.sf.net)
>
> Now the problem is that in both packages different files
> must be placed in exactly the same place for example:
> /usr/X11R6/lib/modules/drivers/r128_drv.o. Of course
> both packages will Obsolete each other. (I can't
> build ati.2 drivers from separate spec file because xfree
> sources are needed and also I thing that would be overkill).
Problem understood.
>
> afaik this is not possible even in rpm 4.1 so I'm suggesting
> support for something like %root(number) or %root(/blah). For
> example original driver is installed at
> $RPM_BUILD_ROOT/usr/X11R6/lib/modules/drivers/r128_drv.o
> while gatos driver at
> $RPM_BUILD_ROOT/gatos/usr/X11R6/lib/modules/drivers/r128_drv.o
> and then in files section:
>
> %files driver-ati
> %{_libdir}/modules/drivers/r128/r128_drv.o
>
> (1)
> %files driver-ati.2
> %root(1) /gatos/%{_libdir}/modules/drivers/r128/r128_drv.o
>
> or
>
> (2)
> %files driver-ati.2
> %root(/gatos) %{_libdir}/modules/drivers/r128/r128_drv.o
>
> or
>
> (3)
> %files driver-ati.2
> %root(/gatos) /gatos/%{_libdir}/modules/drivers/r128/r128_drv.o
>
Hmmm, how about (4):
Name: driber-ati.1
BuildRoot: %{_tmppath}/driver-ati.1
%package -n driver-ati.2
BuildRoot: %{_tmppath}/driver-ati.2
where %files sections have an (assumed, maybe overridable with -r )
per-subpackage BuildRoot prefix attribute.
Permitting a per-subpackage %{buildroot} as attribute avoids the need for
additional syntax to strip the leading part of the path of a shadow
install (i.e. $RPM_BUILD_ROOT} tree entirely.
OTOH, assembling a package from components in multiple build roots
is not possible with (4). I'm not sure that's a missing (ahem) feature.
Scheme (4) also generalizes (when the time comes to permit noarch sub-packages)
by adding per-subpackage %prep/%build/%install scripts, and might even permit
nested spec file builds, i.e. the Right Thing Happens if another spec
file is simply included, all sections would map to per-subpackage sections.
The trick will be passing in sufficient info so that a single %build/%install
scriptlet can figger where to install files if subpackage build sections are
simply concatenated, something like:
%install
# generated by rpm
RPM_BUILD_ROOT=%{_tmppath}/driver-ati.1-root
RPM_BUILD_DIR=%{_builddir}/driver-ati.1
cd $RPM_BUILD_DIR
# included from included specfile and/or per-subpackage scriptlet
<%install scriptlet for driver-ati.1>
# generated by rpm
RPM_BUILD_ROOT=%{_tmppath}/driver-ati.2-root
RPM_BUILD_DIR=%{_builddir}/driver-ati.2
cd $RPM_BUILD_DIR
# included from included specfile and/or per-subpackage scriptlet
<%install scriptlet for driver-ati.2>
Hmmm, I think I might even be able to get a %{_target_cpu} expansion
on the path for, say, a kernel or glibc per-arch subpackage build.
>
> %root(number) - strip ,,number'' of dirs beginning from root
> directory in fileURL (this can be problematic
> in case of %root(2) //////bla/bla.txt and I think
> that any number of ,,/'' should be treated as one
> dir)
> %root(/gatos) - in case (2) this means: add ,,/gatos'' to diskURL
> (at beginning)
> - in case (3) this means: strip out ,,/gatos'' from
> beginning of fileURL.
>
> Jeff, what do you think? For me (1) is best.
>
Iff best == easiest :-)
> Also I need suggestion how to transfer information about %root
> thing from parseForRoot() to addFile() - new field in
> struct FileList_s (ie. int rootLevel for (1)) ?
Whatever works, you can't possibly do more damage to the build code than
what's there already :-(.
I'd add a const char * pkg->buildRootURL (just like spec->buildRootURL),
and prefer (if non-NULL) the pkg over the spec buildRootURL. Changing
processBinaryFile() is where the choice between pkg->buildRootURL
vs fl->buildRootURL would be needed.
Otherwise, if you do wish to run explicit prefix's as file attribute,
making fl->buildRootURL an array is the easiest alternative. Equivalently,
wiring a Spec pointer (which has the subpackage Package list) would
permit access to the data without duplicating buildRootURL into a
FileList.
FYI, the build code is (almost certainly,) gonna be entirely rewritten
in rpm-4.2. One of the first items on the agenda is to rip out myftw
in favor of rpmio/fts.c. Note that fts(3) supports a multi-rooted
file tree walk, unlike ftw(3).
>
> ps. I'm preparing patch doing this for rpm 4.0.4 but I don't know
> which method I should choose.
I love patches :-)
73 de Jeff
--
Jeff Johnson ARS N3NPQ
jbj@redhat.com (jbj@jbj.org)
Chapel Hill, NC
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[]