Skip to content

Commit

Permalink
app-emulation/gallium-nine-standalone: New package
Browse files Browse the repository at this point in the history
Package-Manager: Portage-2.3.55, Repoman-2.3.12
Signed-off-by: James Le Cuirot <[email protected]>
  • Loading branch information
chewi committed Jan 13, 2019
1 parent 51d1f03 commit 98b911b
Show file tree
Hide file tree
Showing 6 changed files with 281 additions and 0 deletions.
1 change: 1 addition & 0 deletions app-emulation/gallium-nine-standalone/Manifest
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DIST gallium-nine-standalone-0_p20190113.tar.gz 58954 BLAKE2B 29be3f5501cc4463aa05216b7360e2a5a949c498dd1c3a0170d5a2f7f508c1fe3171f90f8e35bbe95530be5d6b98b70c5a99362e69d4a64615e40fbb9c8eb96a SHA512 2b2ab79b3d9f2c19967a16200cf69e7eba589d4d3d8918890b9504a5cb4895cd76000b6f3852baa738845e8508c6d67843f45d368225878d446ec6e907f75de4
28 changes: 28 additions & 0 deletions app-emulation/gallium-nine-standalone/files/flags.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
diff -Naur a/tools/cross-wine32.in b/tools/cross-wine32.in
--- a/tools/cross-wine32.in 2019-01-12 16:45:09.190471883 +0000
+++ b/tools/cross-wine32.in 2019-01-12 16:48:22.569404982 +0000
@@ -5,8 +5,8 @@
pkgconfig = '@PKG_CONFIG@'

[properties]
-c_args = ['-m32', '--no-gnu-unique']
-c_link_args = ['-m32', '-mwindows']
+c_args = @CFLAGS@ + ['-m32', '--no-gnu-unique']
+c_link_args = @LDFLAGS@ + ['-m32', '-mwindows']
needs_exe_wrapper = true

[host_machine]
diff -Naur a/tools/cross-wine64.in b/tools/cross-wine64.in
--- a/tools/cross-wine64.in 2019-01-12 16:45:09.190471883 +0000
+++ b/tools/cross-wine64.in 2019-01-12 16:48:19.865349306 +0000
@@ -5,8 +5,8 @@
pkgconfig = '@PKG_CONFIG@'

[properties]
-c_args = ['-m64', '--no-gnu-unique']
-c_link_args = ['-m64', '-mwindows']
+c_args = @CFLAGS@ + ['-m64', '--no-gnu-unique']
+c_link_args = @LDFLAGS@ + ['-m64', '-mwindows']
needs_exe_wrapper = true

[host_machine]
12 changes: 12 additions & 0 deletions app-emulation/gallium-nine-standalone/files/nine-dll-path.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
diff -Naur a/ninewinecfg/main.c b/ninewinecfg/main.c
--- a/ninewinecfg/main.c 2019-01-12 19:43:40.113737110 +0000
+++ b/ninewinecfg/main.c 2019-01-12 19:46:54.213703713 +0000
@@ -47,7 +47,7 @@
#define WINE_STAGING 1
#endif

-static const char * const fn_nine_dll = "d3d9-nine.dll";
+static const char * const fn_nine_dll = G9DLL;
static const char * const reg_path_dll_overrides = "Software\\Wine\\DllOverrides";
static const char * const reg_path_dll_redirects = "Software\\Wine\\DllRedirects";
static const char * const reg_key_d3d9 = "d3d9";
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

inherit meson multilib-minimal toolchain-funcs

DESCRIPTION="A standalone version of the WINE parts of Gallium Nine"
HOMEPAGE="https://github.com/dhewg/nine"

if [[ $PV = 9999* ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/dhewg/nine.git"
else
COMMIT="e10dd1a770c91d5ff13343c9a0186665b7df6114"
SRC_URI="https://github.com/dhewg/nine/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/nine-${COMMIT}"
KEYWORDS="-* ~amd64 ~x86"
fi

LICENSE="LGPL-2.1+"
SLOT="0"

# We don't put Wine in RDEPEND because you can also use this with
# Steam's Proton.

RDEPEND="
media-libs/mesa[d3d9,egl,${MULTILIB_USEDEP}]
x11-libs/libX11[${MULTILIB_USEDEP}]
x11-libs/libXext[${MULTILIB_USEDEP}]
x11-libs/libxcb[${MULTILIB_USEDEP}]
"

DEPEND="
${RDEPEND}
virtual/pkgconfig[${MULTILIB_USEDEP}]
virtual/wine[${MULTILIB_USEDEP}]
"

PATCHES=(
"${FILESDIR}"/flags.patch
"${FILESDIR}"/nine-dll-path.patch
)

bits() {
if [[ ${ABI} = amd64 ]]; then
echo 64
else
echo 32
fi
}

src_prepare() {
default

# Upstream includes a bootstrap.sh script with hardcoded CHOSTs to
# create the Meson cross files. We improve on that here but also
# inject CFLAGS and LDFLAGS, partly to simply respect these, and
# partly to allow d3d9-nine.dll to be loaded from a location outside
# WINEPREFIX. This avoids the need for the nine-install.sh script,
# which doesn't play well with our multi-Wine environment.
bootstrap_nine() {
local file=tools/cross-wine$(bits)
local g9dll=Z:${EPREFIX//\//\\}\\usr\\$(get_libdir)\\d3d9-nine.dll.so

# Yes, these ridiculous backslashes are needed!
g9dll=\\\\\\\\\\\"${g9dll//\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}\\\\\\\\\\\"

sed \
-e "s!@PKG_CONFIG@!$(tc-getPKG_CONFIG)!" \
-e "s!@CFLAGS@!$(_meson_env_array "${CFLAGS} -DG9DLL=${g9dll}")!" \
-e "s!@LDFLAGS@!$(_meson_env_array "${LDFLAGS}")!" \
${file}.in > ${file} || die
}

multilib_foreach_abi bootstrap_nine
}

multilib_src_configure() {
# We override bindir because otherwise the 32-bit exe is overwritten
# by the 64-bit exe and we need both of them.
local emesonargs=(
--cross-file "${S}/tools/cross-wine$(bits)"
--bindir "$(get_libdir)"
)
meson_src_configure
}

multilib_src_compile() {
meson_src_compile
}

multilib_src_install() {
meson_src_install
}

pkg_postinst() {
local bits=$(bits)

einfo "Don't remove the Z: drive from your WINEPREFIX as this relies on it."
einfo
einfo "To set up the ${bits}-bit library, launch your preferred Wine as follows:"
einfo " wine${bits/32} ${EPREFIX}/usr/$(get_libdir)/ninewinecfg.exe.so"

if use abi_x86_64 && use abi_x86_32; then
einfo
einfo "To set up the 32-bit library, launch your preferred Wine as follows:"
einfo " wine ${EPREFIX}/usr/$(ABI=x86 get_libdir)/ninewinecfg.exe.so"
fi
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

inherit meson multilib-minimal toolchain-funcs

DESCRIPTION="A standalone version of the WINE parts of Gallium Nine"
HOMEPAGE="https://github.com/dhewg/nine"

if [[ $PV = 9999* ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/dhewg/nine.git"
else
COMMIT=""
SRC_URI="https://github.com/dhewg/nine/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/nine-${COMMIT}"
KEYWORDS="-* ~amd64 ~x86"
fi

LICENSE="LGPL-2.1+"
SLOT="0"

# We don't put Wine in RDEPEND because you can also use this with
# Steam's Proton.

RDEPEND="
media-libs/mesa[d3d9,egl,${MULTILIB_USEDEP}]
x11-libs/libX11[${MULTILIB_USEDEP}]
x11-libs/libXext[${MULTILIB_USEDEP}]
x11-libs/libxcb[${MULTILIB_USEDEP}]
"

DEPEND="
${RDEPEND}
virtual/pkgconfig[${MULTILIB_USEDEP}]
virtual/wine[${MULTILIB_USEDEP}]
"

PATCHES=(
"${FILESDIR}"/flags.patch
"${FILESDIR}"/nine-dll-path.patch
)

bits() {
if [[ ${ABI} = amd64 ]]; then
echo 64
else
echo 32
fi
}

src_prepare() {
default

# Upstream includes a bootstrap.sh script with hardcoded CHOSTs to
# create the Meson cross files. We improve on that here but also
# inject CFLAGS and LDFLAGS, partly to simply respect these, and
# partly to allow d3d9-nine.dll to be loaded from a location outside
# WINEPREFIX. This avoids the need for the nine-install.sh script,
# which doesn't play well with our multi-Wine environment.
bootstrap_nine() {
local file=tools/cross-wine$(bits)
local g9dll=Z:${EPREFIX//\//\\}\\usr\\$(get_libdir)\\d3d9-nine.dll.so

# Yes, these ridiculous backslashes are needed!
g9dll=\\\\\\\\\\\"${g9dll//\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}\\\\\\\\\\\"

sed \
-e "s!@PKG_CONFIG@!$(tc-getPKG_CONFIG)!" \
-e "s!@CFLAGS@!$(_meson_env_array "${CFLAGS} -DG9DLL=${g9dll}")!" \
-e "s!@LDFLAGS@!$(_meson_env_array "${LDFLAGS}")!" \
${file}.in > ${file} || die
}

multilib_foreach_abi bootstrap_nine
}

multilib_src_configure() {
# We override bindir because otherwise the 32-bit exe is overwritten
# by the 64-bit exe and we need both of them.
local emesonargs=(
--cross-file "${S}/tools/cross-wine$(bits)"
--bindir "$(get_libdir)"
)
meson_src_configure
}

multilib_src_compile() {
meson_src_compile
}

multilib_src_install() {
meson_src_install
}

pkg_postinst() {
local bits=$(bits)

einfo "Don't remove the Z: drive from your WINEPREFIX as this relies on it."
einfo
einfo "To set up the ${bits}-bit library, launch your preferred Wine as follows:"
einfo " wine${bits/32} ${EPREFIX}/usr/$(get_libdir)/ninewinecfg.exe.so"

if use abi_x86_64 && use abi_x86_32; then
einfo
einfo "To set up the 32-bit library, launch your preferred Wine as follows:"
einfo " wine ${EPREFIX}/usr/$(ABI=x86 get_libdir)/ninewinecfg.exe.so"
fi
}
20 changes: 20 additions & 0 deletions app-emulation/gallium-nine-standalone/metadata.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>[email protected]</email>
<name>James Le Cuirot</name>
</maintainer>
<maintainer type="project">
<email>[email protected]</email>
<name>Wine</name>
</maintainer>
<longdescription>
Gallium Nine Standalone, as the name implies, is a standalone version of the WINE parts of Gallium Nine.

This decouples Gallium Nine from the WINE tree, so that it can be used with any WINE version. There is no need for any WINE patches. A stable, development, or staging WINE release is sufficient.
</longdescription>
<upstream>
<remote-id type="github">dhewg/nine</remote-id>
</upstream>
</pkgmetadata>

0 comments on commit 98b911b

Please sign in to comment.