Sam James <[email protected]> writes:

> 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.
>>
>> 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.
>>
>> 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]>
>> ---
>>  eclass/sysroot.eclass | 16 +++++++++++++++-
>>  1 file changed, 15 insertions(+), 1 deletion(-)
>>
>> I was quite surprised to find that winepath itself runs under Wine. I don't
>> like that much and thought it was reasonable to convert these particular 
>> paths
>> by hand.
>>
>> I also realised that libgcc is important here after finding that zstd.exe 
>> would
>> not run without it in the WINEPATH.
>>
>> diff --git a/eclass/sysroot.eclass b/eclass/sysroot.eclass
>> index 0fae642bf593c..3d710f4917419 100644
>> --- a/eclass/sysroot.eclass
>> +++ b/eclass/sysroot.eclass
>> @@ -80,7 +80,21 @@ 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
>> +
>> +            # UNIX paths can work, but programs will not expect this in 
>> %PATH%.
>> +            local 
>> winepath="Z:${LIBGCC};Z:${MYEROOT}/bin;Z:${MYEROOT}/usr/bin;Z:${MYEROOT}/$(get_libdir);Z:${MYEROOT}/usr/$(get_libdir)"
>> +
>> +            # Assume that Wine can do its own CPU emulation.
>> +            install -m0755 /dev/stdin "${SCRIPT}" <<-EOF || die
>
> (What about my '-' question?)

(Sorry, missed the answer!)

>
>> +                    #!/bin/sh
>> +                    SANDBOX_ON=0 LD_PRELOAD= 
>> WINEPATH="\${WINEPATH}\${WINEPATH+;};${winepath//\//\\}" exec wine "\${@}"
>
> shellcheck sez:
> SC3060 (warning): In POSIX sh, string replacement is undefined.
>
>> +            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