Package: release.debian.org Severity: normal Tags: moreinfo X-Debbugs-Cc: pkg-gnustep-maintain...@lists.alioth.debian.org User: release.debian....@packages.debian.org Usertags: transition
We at the GNUstep team would like to make the GNUstep libraries multiarch-capable. It has not been done until now mostly because for a long time I've been neglecting this due to my initially negative attitude towards the MultiArch effort (I thought it was useful only for proprietary software). Admitting my mistake, I should add that we actually need this now in order to reproduce some arch-specific bugs and to make the packages cross-buildable. Needless to say, MultiArch is a nice feature to have both for developers and users. To support GNUstep frameworks (shared libraries in disguise that are installed in /usr/lib/GNUstep/Frameworks with symlinks in /usr/lib and /usr/include) and also some proper libraries like gnustep-sqlclient which install bundles (dynamically loadable modules) in /usr/lib/GNUstep/Bundles, we need to move the whole GNUstep System Library directory from /usr/lib/GNUstep to /usr/lib/${DEB_HOST_MULTIARCH}/GNUstep. Also, because at least gnustep-base and gnustep-corebase have arch-specific headers, for consistency we'll install all headers in /usr/include/${DEB_HOST_MULTIARCH}/GNUstep. (Not only for consistency, GNUSTEP_SYSTEM_HEADERS must be defined to one directory only so there's no other easy way.) The new package gnustep-multiarch (M-A: same) from src:gnustep-make will provide the symlinks from /usr/lib/${DEB_HOST_MULTIARCH}/GNUstep to arch-indep directories in /usr/share. The only packages which need non-trivial changes are gnustep-make and gnustep-base (gnustep-make must pass through NEW for the new gnustep-multiarch package, hence the moreinfo tag). The following preparations and tests have been made so far: 1. I rebuilt the GNUstep world with multiarch-based gnustep-make and gnustep-base, identifying packages which FTBFS (list below) and fixing all of them in the process. 2. I installed the multiarch-based GNUstep core packages on an unstable system and can confirm my initial suspicion: packages that provide a single executable (these are most packages ending with ".app") will continue to work properly. Packages which have bundles (gworkspace, gnumail, to name a few) will be broken until they are rebuilt for the new layout. 3. I installed some more complex packages that I've rebuilt for the new layout and can confirm they work. 4. I tried building GNUstep software as a mortal user and can confirm that it works; the various GNUSTEP_ variables are properly expanded and sourcing GNUstep.sh (required for building/using software in the USER domain) also works. 5. I cross-built the GNUstep world on amd64 for armhf, discovering 11 FTCBFS bugs in the process (all fixed locally). 6. I tested the non-GNUstep packages that could be affected by this change (openvpn-auth-ldap and meson) and they both build fine. This is the list of packages which FTBFS with the new layout: Level 1: gnustep-base Level 2: dbuskit gnustep-corebase gnustep-gui gnustep-netclasses gnustep-performance pantomime rsskit sbjson sope universal-detector Level 3: camera.app cenon.app charmap.app gnustep-sqlclient gomoku.app gorm.app grr.app lynkeos.app paje.app sogo systempreferences.app unar Level 4: gnustep-dl2 gworkspace Level 5: addresses-for-gnustep steptalk Level 6: adun.app agenda.app gnumail Except for gnustep-base, fixes are trivial (like updating .install files or replacing some hard-coded path in debian/rules). I realize this is not the best moment for such a transition, but there are a few reasons why we would like to carry it out during the trixie development cycle: * For some multi-binary packages, I made the grave mistake to put the symlinks from /usr/lib/GNUstep to /usr/share/GNUstep in the arch:all package. Lintian did not complain, and at that time I thought it was a good thing for a symlink that is always going to be the same across architectures to be put in the arch:all package if the arch:any package depends on it. JFTR, other maintainers did the same (e.g., sogo). With the new layout these are lintian errors and of course it will make the packages unusable on any other arch except amd64. Fixing these bugs through this transition will allow us to do it without Breaks+Replaces and it'll be guaranteed there will no problems when upgrading. * For forky we are planning a more complex transition that will require sourceful uploads of every package and we don't want to combine two major changes within one release. That could possibly complicate issues when upgrading from forky to forky+1 and will be more stressful for our users (and for us, but let's ignore that). * Currently, we don't have a way to track universal-detector for classic GNUstep library transitions and ensure it's always binNMUed before unar. It'll be done now via a virtual package that libgnustep-base-dev will provide. Sure, this can be done at any time, but it would mean that we won't be able to track universal-detector for this transition. * Trixie will be a better release with this change. (That's not a serious reason and looks like it's written by a PR agent. I just thought that a bullet list with three items is too short so I made it up.) This is a non-blocking transition -- packages will be able to migrate as soon as the core packages migrate. That's bad in our case because neither you nor we want to disrupt testing. So I would suggest to put an explicit block hint when the transition starts: block gnustep-make That'll be enough to keep the whole stack in unstable, I think. All packages, when rebuilt, will gain a dependency on the virtual package gnustep-layout-multiarch provided by gnustep-multiarch. There are some packages which don't use dh_gnustep so won't have the dependency (I exclude those which will require a sourceful upload and thus will be fixed during the transition): universal-detector unar These are fine to migrate as they have nothing to do with the GNUstep layout. batmon.app fortunate.app pikopixel.app terminal.app These will work if they migrate but for extra safety I think it's better to upload them now with fixes to use dh_gnustep. Here is a proposed plan of action: 1. You approve the transition for trixie. 2. We upload gnustep-make to experimental, and after it's ACCEPTed we upload the core packages (-base, -gui, -back) to experimental so that maintainers outside our team can reproduce the bugs and test the proposed patches. 3. We file all FTBFS bugs with severity:important, tagged pending for packages under our umbrella and patch for the others. 4. We remove the moreinfo tag. 5. We wait for your confirmed tag for the upload to unstable and then we raise the severity of the FTBFS bugs. 6. We start with the sourceful uploads in the right order. 7. We coordinate with you which packages to binNMU and when, and when to remove the block hint. Here is a proposed ben file: title = "gnustep-multiarch"; is_affected = .depends ~ /libgnustep-base1.30/ | .source ~ /universal-detector/; is_good = .depends ~ /(gnustep-layout-multiarch|gnustep-base-abi-1.30)/ | .static-built-using ~ /universal-detector (= 1.1-6)/; is_bad = !.depends ~ /(gnustep-layout-multiarch|gnustep-base-abi-1.30)/ | !.static-built-using ~ /universal-detector (= 1.1-6)/; Thanks for reading so far.