Re: [PATCH] Make openssl 1.0.1 compilable on MinGW
Hi Linda, OpenSSL compiles perfectly with/on the target mingw64 - there is however a minor issue (and fix) that isn't (yet) committed in the official repo. See RT #3454 on http://rt.openssl.org/Ticket/Display.html?id=3454 for an issue when compiling with the enable-ec_nistp_64_gcc_128 flag Hope this helps, Peter Mosmans On 10-08-2014 21:40, Linda Zhang wrote: Hi Support and Gisle, Support wrote: Have you tried running the 'regular' commands ? Perl Configure mingw make depend make make report As far as I know these always work on msys - there is no need to run the ms/mingw32.bat script. To get the shared libraries you need to add the shared flag to Configure, eg. perl Configure mingw shared Hope this helps, Thank you for help. I've tried your commands and it works well, generating the same file names as VC-WIN32 does, for example ssleay32.dll instead of libssl32.dll from ms\mingw32.bat but it's undocumented for shared library. (perl Configure mingw shared) Indeed, OpenSSL is poor documented. I've been using OpenSSL since 0.9.8. The only way suggested compiling on MinGW is ms\mingw32.bat, and this command generates shared libraries by default, and the shared parameter is not documented at all. Later, OpenSSL goes to 1.0.0, and the way to compile on MinGW switched to MSYS, but I can't find this important change from CHANGELOG at all. Also ./configure doesn't generate shared libraries by default, you must add shared parameter manually, but the parameter is also not documented at all. Now I suggest to document it in INSTALL.W32 file, GNU C (MinGW/MSYS) section as below: GNU C (MinGW/MSYS) - ... * Compile OpenSSL: - $ ./config + $ ./config shared [...] $ make [...] $ make test This will create the library and binaries in root source directory and openssl.exe application in apps directory. + Do not run ms\mingw32.bat to compile OpenSSL 1.x. It's only for legacy + OpenSSL 0.9.x, (and will be removed in future releases?) It is also possible to cross-compile it on Linux by configuring with './Configure --cross-compile-prefix=i386-mingw32- mingw ...'. 'make test' is naturally not applicable then. ... -- After then, it will be clear enough to everyone who compiles OpenSSL on MinGW. Besides, I found a target mingw64 in Configure file, but not documented in INSTALL.W64. Could anyone test the target if it's available? Gisle wrote: OpenSSL (on Windows at least) is close to the package from hell. Someone here remember gettext? For example; a little error like this in crypto/threads/th-lock.c: 89: void CRYPTO_thread_cleanup(void); ... 108: #ifdef OPENSSL_SYS_WIN32 ... 127: static void CRYPTO_thread_cleanup(void) ... (a 'static' following a 'non-static' function). Shit like that has gone unnoticed for years because that particular combo has not been compiled by many users/compilers. I'm not sure why. But the code-path for Solaris and Irix are correct. One would assume Windows was much more popular than those dinosaurs. Go figure! Also, OpenSSL is poor coded. To avoid winsock2.h and windows.h conflict problem, we should unify the order of header files in a good standard, but not evading the problem by adding a ridiculous macro. What to do if OpenSSL will use a feature LEAN_AND_MEANed by the macro in the future? Of course the ultimate source of the problem comes from M$ who defined a ridiculous order of header files. By normal design, winsock2.h should be included by windows.h, but M$ made it vice versa. If every contributer writes CHANGELOG and documents their code, the project will be better. Regards, Linda Zhang Hi , Building in MSYS by ./config and make works, but I can't find libeay32.dll and libssl32.dll when compilation finishes. So, I build openssl with command line ms\mingw32.bat. It seems there must be something wrong that it didn't pass CFLAGS configured by perl Configure mingw to gcc. Instead, the ms\mingw32.bat uses CFLAGS defined in util/pl/Mingw32.pl. Of course there is no -DWIN32_LEAN_AND_MEAN. After applying another patch in the attachment to the original openssl 1.0.1i, ms\mingw32.bat works without error. Maybe we should fix something of mingw building scripts? Regards, Linda Zhang 发件人: Gisle Vanem 发送时间: 2014-08-10 19:45:04 收件人: openssl-dev@openssl.org; lind...@qq.com 抄送: 主题: Re: [PATCH] Make openssl 1.0.1 compilable on MinGW Linda Zhang lind...@qq.com wrote: 2. There is a conflict of the order of winsock2.h and windows.h in some source files so that the compiler shows error messages: #error ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead. mingw32-make: *** [tmp\t1_lib.o] Error 1 The bug is introduced by the include of windows.h in the file crypto/rand/rand.h and finally raised by the inappropriate include order in some
[PATCH] Make openssl 1.0.1 compilable on MinGW
Hello, OpenSSL 1.0.1 can't be compiled on MinGW because of 2 bugs: 1. There is a bad configuration of output format of asm files. 2. There is a conflict of the order of winsock2.h and windows.h in some source files so that the compiler shows error messages: #error ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead. mingw32-make: *** [tmp\t1_lib.o] Error 1 The bug is introduced by the include of windows.h in the file crypto/rand/rand.h and finally raised by the inappropriate include order in some source files. Attached patch applies to: OpenSSL 1.0.1i Files affected: apps/apps.c crypto/rand/randtest.c ssl/ssl_ciph.c ssl/ssl_sess.c ssl/t1_lib.c util/pl/Mingw32.pl Regards, Linda Zhang a.patch Description: Binary data
Re: [PATCH] Make openssl 1.0.1 compilable on MinGW
Linda Zhang lind...@qq.com wrote: 2. There is a conflict of the order of winsock2.h and windows.h in some source files so that the compiler shows error messages: #error ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead. mingw32-make: *** [tmp\t1_lib.o] Error 1 The bug is introduced by the include of windows.h in the file crypto/rand/rand.h and finally raised by the inappropriate include order in some source files. Are you sure '-DWIN32_LEAN_AND_MEAN' is in your CFLAGS? (it should be AFAICR). Adding this would ensure winsock.h is *not* included in windows.h. IMHO it would be cleaner to do this and make sure winsock2.h + ws2tcpip.h gets included explicitly. --gv __ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majord...@openssl.org
Re: Re: [PATCH] Make openssl 1.0.1 compilable on MinGW
Hi Gisle, Building in MSYS by ./config and make works, but I can't find libeay32.dll and libssl32.dll when compilation finishes. So, I build openssl with command line ms\mingw32.bat. It seems there must be something wrong that it didn't pass CFLAGS configured by perl Configure mingw to gcc. Instead, the ms\mingw32.bat uses CFLAGS defined in util/pl/Mingw32.pl. Of course there is no -DWIN32_LEAN_AND_MEAN. After applying another patch in the attachment to the original openssl 1.0.1i, ms\mingw32.bat works without error. Maybe we should fix something of mingw building scripts? Regards, Linda Zhang 发件人: Gisle Vanem 发送时间: 2014-08-10 19:45:04 收件人: openssl-dev@openssl.org; lind...@qq.com 抄送: 主题: Re: [PATCH] Make openssl 1.0.1 compilable on MinGW Linda Zhang lind...@qq.com wrote: 2. There is a conflict of the order of winsock2.h and windows.h in some source files so that the compiler shows error messages: #error ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead. mingw32-make: *** [tmp\t1_lib.o] Error 1 The bug is introduced by the include of windows.h in the file crypto/rand/rand.h and finally raised by the inappropriate include order in some source files. Are you sure '-DWIN32_LEAN_AND_MEAN' is in your CFLAGS? (it should be AFAICR). Adding this would ensure winsock.h is *not* included in windows.h. IMHO it would be cleaner to do this and make sure winsock2.h + ws2tcpip.h gets included explicitly. --gv b.patch Description: Binary data
Re: [PATCH] Make openssl 1.0.1 compilable on MinGW
Hi Linda, Have you tried running the 'regular' commands ? Perl Configure mingw make depend make make report As far as I know these always work on msys - there is no need to run the ms/mingw32.bat script. To get the shared libraries you need to add the shared flag to Configure, eg. perl Configure mingw shared Hope this helps, Peter Mosmans On 10-08-2014 15:39, Linda Zhang wrote: Hi Gisle, Building in MSYS by ./config and make works, but I can't find libeay32.dll and libssl32.dll when compilation finishes. So, I build openssl with command line ms\mingw32.bat. It seems there must be something wrong that it didn't pass CFLAGS configured by perl Configure mingw to gcc. Instead, the ms\mingw32.bat uses CFLAGS defined in util/pl/Mingw32.pl. Of course there is no -DWIN32_LEAN_AND_MEAN. After applying another patch in the attachment to the original openssl 1.0.1i, ms\mingw32.bat works without error. Maybe we should fix something of mingw building scripts? Regards, Linda Zhang 发件人: Gisle Vanem 发送时间: 2014-08-10 19:45:04 收件人: openssl-dev@openssl.org; lind...@qq.com 抄送: 主题: Re: [PATCH] Make openssl 1.0.1 compilable on MinGW Linda Zhang lind...@qq.com wrote: 2. There is a conflict of the order of winsock2.h and windows.h in some source files so that the compiler shows error messages: #error ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead. mingw32-make: *** [tmp\t1_lib.o] Error 1 The bug is introduced by the include of windows.h in the file crypto/rand/rand.h and finally raised by the inappropriate include order in some source files. Are you sure '-DWIN32_LEAN_AND_MEAN' is in your CFLAGS? (it should be AFAICR). Adding this would ensure winsock.h is *not* included in windows.h. IMHO it would be cleaner to do this and make sure winsock2.h + ws2tcpip.h gets included explicitly. --gv __ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majord...@openssl.org
Re: Re: [PATCH] Make openssl 1.0.1 compilable on MinGW
Linda Zhang lind...@qq.com wrote: So, I build openssl with command line ms\mingw32.bat. It seems there must be something wrong that it didn't pass CFLAGS configured by perl Configure mingw to gcc. OpenSSL (on Windows at least) is close to the package from hell. Someone here remember gettext? For example; a little error like this in crypto/threads/th-lock.c: 89: void CRYPTO_thread_cleanup(void); ... 108: #ifdef OPENSSL_SYS_WIN32 ... 127: static void CRYPTO_thread_cleanup(void) ... (a 'static' following a 'non-static' function). Shit like that has gone unnoticed for years because that particular combo has not been compiled by many users/compilers. I'm not sure why. But the code-path for Solaris and Irix are correct. One would assume Windows was much more popular than those dinosaurs. Go figure! --gv __ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majord...@openssl.org
Re: Re: [PATCH] Make openssl 1.0.1 compilable on MinGW
Hi Gisle I contribute to the openssl-testing group by providing regular results of compilation/test for various platforms (Linux Ubuntu 32b i386, Linux Raspberry ARM, Windows 7 32b i386, may be OpenBSD Raspberry ARM in the future) Could someone communicate on the - must have (pre requisite for official release) - could have (can fail for official release) combinatory of Configure options for most common / supported - operating system Linux / OpenBSD, Windows xx - processor hardward ARM, Intel, Spark, etc Would be of great help for all of use to focus on real needs, this work is not fun at all.. Thanks Didier CRUETTE Le 10.08.2014 18:32, Gisle Vanem a écrit : Linda Zhang lind...@qq.com wrote: So, I build openssl with command line ms\mingw32.bat. It seems there must be something wrong that it didn't pass CFLAGS configured by perl Configure mingw to gcc. OpenSSL (on Windows at least) is close to the package from hell. Someone here remember gettext? For example; a little error like this in crypto/threads/th-lock.c: 89: void CRYPTO_thread_cleanup(void); ... 108: #ifdef OPENSSL_SYS_WIN32 ... 127: static void CRYPTO_thread_cleanup(void) ... (a 'static' following a 'non-static' function). Shit like that has gone unnoticed for years because that particular combo has not been compiled by many users/compilers. I'm not sure why. But the code-path for Solaris and Irix are correct. One would assume Windows was much more popular than those dinosaurs. Go figure! --gv __ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majord...@openssl.org __ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majord...@openssl.org
Re: Re: [PATCH] Make openssl 1.0.1 compilable on MinGW
Hi Support and Gisle, Support wrote: Have you tried running the 'regular' commands ? Perl Configure mingw make depend make make report As far as I know these always work on msys - there is no need to run the ms/mingw32.bat script. To get the shared libraries you need to add the shared flag to Configure, eg. perl Configure mingw shared Hope this helps, Thank you for help. I've tried your commands and it works well, generating the same file names as VC-WIN32 does, for example ssleay32.dll instead of libssl32.dll from ms\mingw32.bat but it's undocumented for shared library. (perl Configure mingw shared) Indeed, OpenSSL is poor documented. I've been using OpenSSL since 0.9.8. The only way suggested compiling on MinGW is ms\mingw32.bat, and this command generates shared libraries by default, and the shared parameter is not documented at all. Later, OpenSSL goes to 1.0.0, and the way to compile on MinGW switched to MSYS, but I can't find this important change from CHANGELOG at all. Also ./configure doesn't generate shared libraries by default, you must add shared parameter manually, but the parameter is also not documented at all. Now I suggest to document it in INSTALL.W32 file, GNU C (MinGW/MSYS) section as below: GNU C (MinGW/MSYS) - ... * Compile OpenSSL: - $ ./config + $ ./config shared [...] $ make [...] $ make test This will create the library and binaries in root source directory and openssl.exe application in apps directory. + Do not run ms\mingw32.bat to compile OpenSSL 1.x. It's only for legacy + OpenSSL 0.9.x, (and will be removed in future releases?) It is also possible to cross-compile it on Linux by configuring with './Configure --cross-compile-prefix=i386-mingw32- mingw ...'. 'make test' is naturally not applicable then. ... -- After then, it will be clear enough to everyone who compiles OpenSSL on MinGW. Besides, I found a target mingw64 in Configure file, but not documented in INSTALL.W64. Could anyone test the target if it's available? Gisle wrote: OpenSSL (on Windows at least) is close to the package from hell. Someone here remember gettext? For example; a little error like this in crypto/threads/th-lock.c: 89: void CRYPTO_thread_cleanup(void); ... 108: #ifdef OPENSSL_SYS_WIN32 ... 127: static void CRYPTO_thread_cleanup(void) ... (a 'static' following a 'non-static' function). Shit like that has gone unnoticed for years because that particular combo has not been compiled by many users/compilers. I'm not sure why. But the code-path for Solaris and Irix are correct. One would assume Windows was much more popular than those dinosaurs. Go figure! Also, OpenSSL is poor coded. To avoid winsock2.h and windows.h conflict problem, we should unify the order of header files in a good standard, but not evading the problem by adding a ridiculous macro. What to do if OpenSSL will use a feature LEAN_AND_MEANed by the macro in the future? Of course the ultimate source of the problem comes from M$ who defined a ridiculous order of header files. By normal design, winsock2.h should be included by windows.h, but M$ made it vice versa. If every contributer writes CHANGELOG and documents their code, the project will be better. Regards, Linda Zhang Hi , Building in MSYS by ./config and make works, but I can't find libeay32.dll and libssl32.dll when compilation finishes. So, I build openssl with command line ms\mingw32.bat. It seems there must be something wrong that it didn't pass CFLAGS configured by perl Configure mingw to gcc. Instead, the ms\mingw32.bat uses CFLAGS defined in util/pl/Mingw32.pl. Of course there is no -DWIN32_LEAN_AND_MEAN. After applying another patch in the attachment to the original openssl 1.0.1i, ms\mingw32.bat works without error. Maybe we should fix something of mingw building scripts? Regards, Linda Zhang 发件人: Gisle Vanem 发送时间: 2014-08-10 19:45:04 收件人: openssl-dev@openssl.org; lind...@qq.com 抄送: 主题: Re: [PATCH] Make openssl 1.0.1 compilable on MinGW Linda Zhang lind...@qq.com wrote: 2. There is a conflict of the order of winsock2.h and windows.h in some source files so that the compiler shows error messages: #error ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead. mingw32-make: *** [tmp\t1_lib.o] Error 1 The bug is introduced by the include of windows.h in the file crypto/rand/rand.h and finally raised by the inappropriate include order in some source files. Are you sure '-DWIN32_LEAN_AND_MEAN' is in your CFLAGS? (it should be AFAICR). Adding this would ensure winsock.h is *not* included in windows.h. IMHO it would be cleaner to do this and make sure winsock2.h + ws2tcpip.h gets included explicitly. --gv :��IϮ��r�m (Z+�7�zZ)���1���x��hW^��^��%�� ��jם.+-1�ځ��j:+v���h�
Re: [PATCH] Make openssl 1.0.1 compilable on MinGW
Hi In a previous post, I have seen that ms/mingw32 is deprecated (is removed from main snapshot) I confirm that perl Configure mingw make depend make make test is ok for openssl-SNAP-20140808 on windows 7 Regards Didier CRUETTE Le 10.08.2014 17:09, Support a écrit : Hi Linda, Have you tried running the 'regular' commands ? Perl Configure mingw make depend make make report As far as I know these always work on msys - there is no need to run the ms/mingw32.bat script. To get the shared libraries you need to add the shared flag to Configure, eg. perl Configure mingw shared Hope this helps, Peter Mosmans On 10-08-2014 15:39, Linda Zhang wrote: Hi Gisle, Building in MSYS by ./config and make works, but I can't find libeay32.dll and libssl32.dll when compilation finishes. So, I build openssl with command line ms\mingw32.bat. It seems there must be something wrong that it didn't pass CFLAGS configured by perl Configure mingw to gcc. Instead, the ms\mingw32.bat uses CFLAGS defined in util/pl/Mingw32.pl. Of course there is no -DWIN32_LEAN_AND_MEAN. After applying another patch in the attachment to the original openssl 1.0.1i, ms\mingw32.bat works without error. Maybe we should fix something of mingw building scripts? Regards, Linda Zhang 发件人: Gisle Vanem 发送时间: 2014-08-10 19:45:04 收件人: openssl-dev@openssl.org; lind...@qq.com 抄送: 主题: Re: [PATCH] Make openssl 1.0.1 compilable on MinGW Linda Zhang lind...@qq.com wrote: 2. There is a conflict of the order of winsock2.h and windows.h in some source files so that the compiler shows error messages: #error ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead. mingw32-make: *** [tmp\t1_lib.o] Error 1 The bug is introduced by the include of windows.h in the file crypto/rand/rand.h and finally raised by the inappropriate include order in some source files. Are you sure '-DWIN32_LEAN_AND_MEAN' is in your CFLAGS? (it should be AFAICR). Adding this would ensure winsock.h is *not* included in windows.h. IMHO it would be cleaner to do this and make sure winsock2.h + ws2tcpip.h gets included explicitly. --gv __ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majord...@openssl.org __ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majord...@openssl.org