James Le Cuirot <[email protected]> writes:

> We do not support installing Wine for other architectures, so we assume
> that Wine can do its own CPU emulation.

This has been on my mind for a while as something I'd love to try :)

>
> The sandbox cannot handle Wine and emits a warning even if you allow all
> writes, so it needs to be disabled.
>
> Unlike Linux shared libraries, Windows DLLs are placed in bin rather
> than lib, so we need to include that in WINEPATH. lib has been included
> too, just in case.
>
> binfmt_misc supports Windows binaries, but there is no point in
> supporting that combination here, as Wine would need to be installed
> locally regardless. This cannot be extended into a container like it can
> with QEMU.

"locally" here means inside the sysroot?

>
> This has been tested with i686-w64-mingw32 from crossdev against
> dev-vcs/git[iconv] after dropping the iconv cross patch.
>
> Signed-off-by: James Le Cuirot <[email protected]>
> ---

Looks ok but see if wine maintainers have input.

>  eclass/sysroot.eclass | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/eclass/sysroot.eclass b/eclass/sysroot.eclass
> index 0fae642bf593c..dbb0103f6e0e4 100644
> --- a/eclass/sysroot.eclass
> +++ b/eclass/sysroot.eclass
> @@ -80,7 +80,18 @@ sysroot_make_run_prefixed() {
>               fi
>       fi
>  
> -     if [[ ${QEMU_ARCH} == $(qemu_arch "${CBUILD}") ]]; then
> +     if [[ ${CHOST} = *-mingw32 ]]; then
> +             if ! type -P wine >/dev/null; then
> +                     einfo "Wine not found. Continuing without ${SCRIPT##*/} 
> wrapper."
> +                     return 1
> +             fi
> +
> +             # Assume that Wine can do its own CPU emulation.
> +             install -m0755 /dev/stdin "${SCRIPT}" <<-EOF || die

Does - not work instead of /dev/stdin?

> +                     #!/bin/sh
> +                     SANDBOX_ON=0 LD_PRELOAD= 
> WINEPATH="\${WINEPATH}\${WINEPATH+;}${MYEROOT}/bin;${MYEROOT}/usr/bin;${MYEROOT}/$(get_libdir);${MYEROOT}/usr/$(get_libdir)"
>  exec wine "\${@}"

Ah, Wine delimits with ;?

> +             EOF
> +     elif [[ ${QEMU_ARCH} == $(qemu_arch "${CBUILD}") ]]; then
>               # glibc: ld.so is a symlink, ldd is a binary.
>               # musl: ld.so doesn't exist, ldd is a symlink.
>               local DLINKER candidate

Attachment: signature.asc
Description: PGP signature

Reply via email to