https://bugs.winehq.org/show_bug.cgi?id=43971
Bug ID: 43971 Summary: Wine 2.20 Bcrypt compilation fails under older linux systems while Wine 2.0.3 compiles fine Product: Wine Version: 2.20 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: bcrypt Assignee: wine-bugs@winehq.org Reporter: vfrederix@gmail.com Distribution: ---
LOG:
make[1]: Entering directory `/home/frd/Software_Packages/source_compile/wine/builds/wine-2.20/dlls/bcrypt' gcc -c -o bcrypt_main.o bcrypt_main.c -I. -I../../include -D__WINESRC__ -D_REENTRANT -fPIC -Wall -pipe \ -fno-strict-aliasing -Wdeclaration-after-statement -Wempty-body -Wignored-qualifiers \ -Wstrict-prototypes -Wtype-limits -Wunused-but-set-parameter -Wvla -Wwrite-strings -Wpointer-arith \ -Wlogical-op -gdwarf-2 -gstrict-dwarf -fno-omit-frame-pointer -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 bcrypt_main.c:830:1: error: ‘key’ defined as wrong kind of tag { ^ make[1]: *** [bcrypt_main.o] Error 1 make[1]: Leaving directory `/home/frd/Software_Packages/source_compile/wine/builds/wine-2.20/dlls/bcrypt' make: *** [dlls/bcrypt] Error 2
GCC version: 4.8.1
Configure output:
configure: libgnutls development files too old, bcrypt encryption won't be supported.
So why is bcrypt compilling ?
https://bugs.winehq.org/show_bug.cgi?id=43971
Kol kol@MV8660.spb.edu changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |kol@MV8660.spb.edu
--- Comment #1 from Kol kol@MV8660.spb.edu --- I see this bug when compiling latest versions of Wine and Wine-staging by GCC 4.8.1. I think that for some reasons the compiler refuses "key" as the name of a struct type. My workaround is to rename all instances of "struct key" to "struct key_type" in the file "bcrypt_main.c".
https://bugs.winehq.org/show_bug.cgi?id=43971
Hans Leidekker hans@meelstraat.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |Zenitur@yandex.ru
--- Comment #2 from Hans Leidekker hans@meelstraat.net --- *** Bug 44205 has been marked as a duplicate of this bug. ***
https://bugs.winehq.org/show_bug.cgi?id=43971
--- Comment #3 from Hans Leidekker hans@meelstraat.net --- Where and how is 'key' defined on your system? FWIW, I don't see this if I compile bcrypt with GCC 4.8.4 on Debian 9.
https://bugs.winehq.org/show_bug.cgi?id=43971
--- Comment #4 from Ken Sharp imwellcushtymelike@gmail.com --- What distro are you using? And what version are those packages?
I can compile way, way further back with Ubuntu 16.04 and GCC 5.4.
https://bugs.winehq.org/show_bug.cgi?id=43971
--- Comment #5 from Zhenya Zenitur@yandex.ru --- Hello Wine developers! I'd prepared a VirtualBox image file with this case. This is a SUSE Enterprise 11 installed. Just unpack it using "xz -d SLE_11_SP4.vdi.xz" command, then run it! The default file-roller doesn't unpack it on my OS. Root password is "sourceengine2".
cd /usr/src/packages/SPECS rpmbuild -ba wine.spec
Download link: https://yadi.sk/d/AxWNQd1W3Pmtso
https://bugs.winehq.org/show_bug.cgi?id=43971
--- Comment #6 from Kol kol@MV8660.spb.edu --- This is not a Wine bug nor a compiler bug, but is an incompatibility between recent Wine versions and old version of GnuTLS. On my very old system equipped with GnuTLS 2.4.2 in the file <gnutls/gnutls.h> in the definition of type "gnutls_retr_st" there is a union member
union key { ... } key;
which is in contradiction with "struct key" in "bcrypt_main.c". In newer versions of GnuTLS this union type becomes nameless:
union { ... } key;
So the solution is or to upgrade GnuTLS, or simply to replace the string "union key" with "union" in the file "/usr/include/gnutls/gnutls.h".
https://bugs.winehq.org/show_bug.cgi?id=43971
--- Comment #7 from Zhenya Zenitur@yandex.ru --- It's really GnuTLS 2.4.1 in my SLES 11. Thank you, Kol!
In my build log (attached in dublicate bug) there is a configure output string:
configure: libgnutls 64-bit development files too old, bcrypt encryption won't be supported.
So, old GnuTLS isn't using by Wine anyway.
https://bugs.winehq.org/show_bug.cgi?id=43971
--- Comment #8 from Kol kol@MV8660.spb.edu --- Yes, but the file "dlls/bcrypt/bcrypt_main.c" from the Wine source includes the header file "/usr/include/gnutls/gnutls.h" with the contradictory definition unconditionally, even when old GnuTLS is not really used.
https://bugs.winehq.org/show_bug.cgi?id=43971
--- Comment #9 from Hans Leidekker hans@meelstraat.net --- Created attachment 59986 --> https://bugs.winehq.org/attachment.cgi?id=59986 proposed fix
Thanks for clearing that up. This patch should fix your build.
https://bugs.winehq.org/show_bug.cgi?id=43971
Hans Leidekker hans@meelstraat.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Fixed by SHA1| |60c31439287179c4a1414b63578 | |97bec8c387450 Resolution|--- |FIXED Status|UNCONFIRMED |RESOLVED
--- Comment #10 from Hans Leidekker hans@meelstraat.net --- Fix committed as 60c31439287179c4a1414b6357897bec8c387450.
https://bugs.winehq.org/show_bug.cgi?id=43971
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #11 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 3.0-rc4.
https://bugs.winehq.org/show_bug.cgi?id=43971
--- Comment #12 from Zhenya Zenitur@yandex.ru --- Confirmed, now it compiles: https://build.opensuse.org/package/show/home:linux4humans:wine-staging/wine
https://bugs.winehq.org/show_bug.cgi?id=43971
--- Comment #13 from Zhenya Zenitur@yandex.ru --- P.S. Some warnings when compile Wine 3.2 using my VM image:
gcc-4.8 -m64 -c -o schannel_gnutls.o schannel_gnutls.c -I. -I../../include -D__WINESRC__ -D_REENTRANT -fPIC -Wall -pipe \ -fno-strict-aliasing -Wdeclaration-after-statement -Wempty-body -Wignored-qualifiers \ -Wstrict-prototypes -Wtype-limits -Wunused-but-set-parameter -Wvla -Wwrite-strings -Wpointer-arith \ -Wlogical-op -gdwarf-2 -gstrict-dwarf -DLDAP_DEPRECATED=1 -O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 schannel_gnutls.c: In function ‘schannel_get_cipher_algid’: schannel_gnutls.c:309:5: warning: case value ‘92’ not in enumerated type ‘gnutls_cipher_algorithm_t’ [-Wswitch] case GNUTLS_CIPHER_AES_192_CBC: return CALG_AES_192; ^ schannel_gnutls.c:308:5: warning: case value ‘93’ not in enumerated type ‘gnutls_cipher_algorithm_t’ [-Wswitch] case GNUTLS_CIPHER_AES_128_GCM: return CALG_AES_128; ^ schannel_gnutls.c:310:5: warning: case value ‘94’ not in enumerated type ‘gnutls_cipher_algorithm_t’ [-Wswitch] case GNUTLS_CIPHER_AES_256_GCM: ^ schannel_gnutls.c: In function ‘schannel_get_mac_algid’: schannel_gnutls.c:336:9: warning: case value ‘93’ not in enumerated type ‘gnutls_cipher_algorithm_t’ [-Wswitch] case GNUTLS_CIPHER_AES_128_GCM: return CALG_SHA_256; ^ schannel_gnutls.c:337:9: warning: case value ‘94’ not in enumerated type ‘gnutls_cipher_algorithm_t’ [-Wswitch] case GNUTLS_CIPHER_AES_256_GCM: return CALG_SHA_384; ^ schannel_gnutls.c:331:5: warning: case value ‘200’ not in enumerated type ‘gnutls_mac_algorithm_t’ [-Wswitch] case GNUTLS_MAC_AEAD: ^ schannel_gnutls.c: In function ‘schan_imp_get_key_signature_algorithm’: schannel_gnutls.c:412:5: warning: case value ‘12’ not in enumerated type ‘gnutls_kx_algorithm_t’ [-Wswitch] case GNUTLS_KX_ECDHE_RSA: return CALG_RSA_SIGN; ^ schannel_gnutls.c:413:5: warning: case value ‘13’ not in enumerated type ‘gnutls_kx_algorithm_t’ [-Wswitch] case GNUTLS_KX_ECDHE_ECDSA: return CALG_ECDSA; ^
https://bugs.winehq.org/show_bug.cgi?id=43971
--- Comment #14 from Zhenya Zenitur@yandex.ru --- Hello again! Thank you for a fix of this bug. I see that Wine 3.0 is successfully compiling on my SLES 11.
I see that libGnuTLS 2.4 supports bcrypt, but it was error when Wine trying to use it. #6 says that "key" variable is already defined in libGnuTLS 2.4 headers but isn't defined in 2.6 and later.
Can you add a condition for < 2.6? Somethink like "if libGnuTLS < 2.6 then define key2, else define key"?