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

Sharing a script between two "Multi-Arch: foreign" packages



Hi all,

is there a way for two different, arch-specific packages (from the same
source package) to share an identical file (script)?


This works for "Multi-Arch: same" packages:

$ dpkg -S /usr/share/doc/libwine/changelog.Debian.gz
libwine:i386, libwine:amd64: /usr/share/doc/libwine/changelog.Debian.gz


But if I try [1] the same for two different packages I end up with only
one package being the owner:

$ dpkg -S /usr/lib/wine/wineserver
wine32:i386: /usr/lib/wine/wineserver


Instead of [fictious output following]:

$ dpkg -S /usr/lib/wine/wineserver
wine32:i386, wine64:amd64: /usr/lib/wine/wineserver



Background:

See #932201.

In src:wine we have two M-A: foreign packages:
 pkg:wine64 (built on some 64-bit architectures)
 pkg:wine32 (built on some 32-bit architectures)

Both build and install a "wineserver" binary, which we install as
/usr/lib/wine/wineserver32 or wineserver64.  We call that binary from a
script [2] /usr/lib/wine/wineserver which currently is in pkg:wine
(arch:all), which is only "recommended" [3] by pkg:wine32 or pkg:wine64.

Since the wineserver{32|64} file is not found by the Wine code, these
filenames are broken without our wineserver script.  So I'd like to move
that script to pkg:wine32 and pkg:wine64.


Thanks and greets
jre


[1] I get both wine32 and wine64 to install with these breaks/replaces:

Package: wine32
Architecture: any-i386 any-powerpc armel armhf
Multi-Arch: foreign
Breaks:
 wine64VERSION (<< ${binary:Version})
Replaces:
 wine64VERSION

Package: wine64
Architecture: amd64 arm64
Multi-Arch: foreign
Breaks:
 wine32VERSION (<< ${binary:Version})
Replaces:
 wine32VERSION

... but then the "shared" wineserver script is only owned by one
package.  Without this unversioned "replaces" dpkg refuses to overwrite
the (identical) script

[2] There are also unrelated reasons for having this script.  Otherwise
I'd dpkg-divert the 32-bit wineserver in favor of the 64-bit one, which
would perfectly match the way Wine works (Wine uses the 32-bit
wineserver only for pure 32-bit installations, but the 64-bit server for
mixed and 64-bit installations).
I could dpkg-divert the script, but that looks like a workaround, not a
solution, to me.


[3] pkg:wine already "depends" on pkg:wine32|wine64, so to avoid a
circular dependency I can't also "depend" the other way round.
The only solution here would be to make a separate arch:all
pkg:wineserver which only has the wineserver script, and let pkg:wine32
and pkg:wine64 "depend" on that.  While this would be a clean solution,
it seems to be excessive to ship only one small wrapper script in a
separate package.

Thanks and greets
jre


Reply to: