commit:     1954598a4b9fee10c063f6be17d07b47e7e93e4b
Author:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Wed Nov 16 03:30:33 2022 +0000
Commit:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Wed Nov 16 15:01:04 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=1954598a

app-eselect/eselect-wine: add 2.0.0, unkeyworded for testing

Complete rewrite but for notable bits:
- removes register/deregister, can auto-update without this
- no longer touch files in /usr at runtime wrt bug #632576, in this
  case it was particularly invasive doing *many* modifications to
  /usr/bin and /usr/share/man
- handle /usr/lib/wine fwiw wrt bug #657748 (installed by the
  ebuild), albeit winebuild can find the right path nowadays
- fix prefix wrt bug #717470
- give feedback when switching wrt bug #874612
- tries harder to not unexpectedly switch variant/version, and
  no longer need ebuild checks wrt bug #881035
- no longer hardcodes variants and so can support any random ones,
  i.e. an overlay can do wine-tkg or wine-myfunnyfork
- --all, --vanilla, etc.. options were removed, but can still
  perform similar actions (see `help`)
- `list` can now show selections for all variants at once
- `unset` removed, not seeing a motivation (esp if not polluting /usr)
- half+ the original size, and switches variant noticeably faster

Still experimental and subject to changes, so unkeyworded for now.
See README.rst for more notes, or the tarball's impl.rst for details.

ebuild itself needs some nonsense largely caused by being difficult
to get rid of the old eselect plus portage limitations.

Bug: https://bugs.gentoo.org/632576
Bug: https://bugs.gentoo.org/657748
Bug: https://bugs.gentoo.org/717470
Bug: https://bugs.gentoo.org/874612
Bug: https://bugs.gentoo.org/881035
Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org>

 app-eselect/eselect-wine/Manifest                  |  1 +
 app-eselect/eselect-wine/eselect-wine-2.0.0.ebuild | 88 ++++++++++++++++++++++
 2 files changed, 89 insertions(+)

diff --git a/app-eselect/eselect-wine/Manifest 
b/app-eselect/eselect-wine/Manifest
index f72d6e365f3d..36b4463cb6fa 100644
--- a/app-eselect/eselect-wine/Manifest
+++ b/app-eselect/eselect-wine/Manifest
@@ -1 +1,2 @@
 DIST eselect-wine-1.2.2.tar.gz 4712 BLAKE2B 
6ce92654cf2a5197c18bc84f8db52a11f198f81f0a8116f1986e74a1795ad475d22ff5a7cb9e9e31ce8ca813059b33cfbc52763110238cb378b15bebeb4b4271
 SHA512 
39f4d91461f72aeb07292dc7479c5cb7fc080b843bac57dec85c43d8751227e6953d32d52d4a14387d398b73120a32b79370d686c823f230dfd1d8b32ac8113a
+DIST eselect-wine-2.0.0.tar.xz 7440 BLAKE2B 
f889465985566c3cdb9035ec1eca79c506a39f6c3f05f7b20e3a2af70ab3202a6efdc2dc28468ee5b484aa037ebf034bf7ae881a5694459f37702291e8c14850
 SHA512 
7d5bf0d8abb0634adcbdcd1201eb8c69745e419dc484319e6af9446439b9595b00c6d1bb813390179e5e65843ec3a45079dd38ef7d92c1c97f86fd0aca095607

diff --git a/app-eselect/eselect-wine/eselect-wine-2.0.0.ebuild 
b/app-eselect/eselect-wine/eselect-wine-2.0.0.ebuild
new file mode 100644
index 000000000000..50b4a4c56409
--- /dev/null
+++ b/app-eselect/eselect-wine/eselect-wine-2.0.0.ebuild
@@ -0,0 +1,88 @@
+# Copyright 2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Manage active Wine slots and variants"
+HOMEPAGE="https://wiki.gentoo.org/wiki/Project:Wine";
+SRC_URI="https://dev.gentoo.org/~ionen/distfiles/${P}.tar.xz";
+#SRC_URI="https://gitweb.gentoo.org/proj/eselect-wine.git/snapshot/${P}.tar.bz2";
 # not up yet
+
+LICENSE="GPL-2+"
+SLOT="0"
+# rewrite that really needs testing so it doesn't break any bottles
+#KEYWORDS="~amd64 ~x86"
+
+RDEPEND="app-admin/eselect"
+
+pkg_pretend() {
+       # not-owned {bin,include}/wine is removed by pkg_preinst's unset, but
+       # portage currently checks collisions and errors out /before/ 
pkg_preinst
+       has_version '<app-eselect/eselect-wine-2' &&
+               has collision-protect ${FEATURES} &&
+               eerror "!Warning! may need to disable 
FEATURES=collision-protect to merge ${P}"
+}
+
+src_install() {
+       insinto /usr/share/eselect/modules
+       doins wine.eselect
+
+       keepdir /etc/eselect/wine
+
+       newenvd - 60${PN} <<-EOF
+               PATH="${EPREFIX}/etc/eselect/wine/bin"
+               MANPATH="${EPREFIX}/etc/eselect/wine/share/man"
+               XDG_DATA_DIRS="${EPREFIX}/etc/eselect/wine/share"
+       EOF
+
+       # links for building, e.g. wineasio (bug #657748)
+       dosym -r /etc/eselect/wine/wine /usr/lib/wine
+       dosym -r /etc/eselect/wine/include /usr/include/wine
+
+       # not required, but useful for e.g. binfmt that's not looking in PATH
+       # (not doing this for everything as it gets troublesome to track)
+       dosym -r /etc/eselect/wine/bin/wine /usr/bin/wine
+
+       einstalldocs
+}
+
+pkg_preinst() {
+       if has_version '<app-eselect/eselect-wine-2'; then
+               # keep copy of still-set 'active' to auto-select same slots
+               [[ ! -e ${EROOT}/etc/eselect/wine/active ]] ||
+                       cp 
"${EROOT}"/etc/eselect/wine/{active,eselect-wine-migration} || die
+
+               # managed differently, need cleanup
+               eselect wine unset --all || die
+               rm -f 
"${EROOT}"/etc/eselect/wine/{active,installed,links/{any,vanilla,staging,proton,wine}}
 || die
+               rmdir "${EROOT}"/etc/eselect/wine/links 2>/dev/null
+
+               # some rare man dirs were created by old eselect, cleanup if 
now empty
+               rmdir "${EROOT}"/usr/share/man/{de,fr,pl}.UTF-8{/man1,} 
2>/dev/null
+       fi
+
+       # lacking QA_BROKEN_SYMLINK, and rather avoid live /usr changes wrt
+       # bug #632576, nor create "owned" placeholders that will be clobbered
+       [[ -e ${EROOT}/etc/eselect/wine/bin/wine ]] ||
+               eqawarn "QA Note: broken symlinks QA is normal on first merge, 
targets created after"
+}
+
+pkg_postinst() {
+       eselect wine update --if-unset || die
+
+       rm -f "${EROOT}"/etc/eselect/wine/eselect-wine-migration || die # see 
preinst
+
+       if [[ ! ${REPLACING_VERSIONS##* } ]] ||
+               ver_test ${REPLACING_VERSIONS##* } -lt 2; then
+               elog
+               if [[ ${REPLACING_VERSIONS} ]]; then
+                       elog "Note: if seen bin/wine or include/wine collision 
messages, it is harmless"
+                       elog "${PN} changed a bit, suggest reviewing 'eselect 
wine help' (and list)."
+               fi
+               elog "Please run '. ${EROOT}/etc/profile' to update PATH in 
current shells."
+       fi
+}
+
+pkg_prerm() {
+       [[ ${REPLACED_BY_VERSION} ]] || eselect wine update --reset # no die
+}

Reply via email to