here is a working patch so you can create openssl/windows binaries with linux and mingw. developed and tested on debian sarge/i686 only.
> BTW, what is the exact purpose of this project? Currently I'm building "openssl" plus "opensc" plus "putty" on windows with visual c and it works fine. However I can do that only here and then and if I could get mingw cross compiling to work, instead I could do nightly builds. > If it's not "provide 100% equivalent replacement for .dll built with > Microsoft C," then why bother with --def? well, I want to add value, no decrease value by loosing compatiblity. if I understand mingw right, the result should be compatible, no drawbacks, right? but also there won't be a *.lib files, as mingw can't create them. anyway, here is the latest diff, works for me(tm). binaries not yet tested. Install is broken, as those make rules don't know about *.dll. I use these commands instead: cp apps/*.dll apps/*.exe apps/openssl.cnf apps/CA.pl /opt/openssl mkdir /opt/openssl/include mkdir /opt/openssl/include/openssl cp include/openssl/*.h /opt/openssl/include/openssl mkdir /opt/openssl/doc cp FAQ LICENSE PROBLEMS READM* STATUS NEWS /opt/openssl/doc cp doc/*.txt doc/*.gif doc/*.html /opt/openssl/doc Engines are not build. I hacked Configure to call sed on the engine/Makefile to disable them. I'm sure someone can find a nice way to do that or get them to compile. The linking code is very, very ugly. what about new names for the dlls: libcrypt-0.9.8.dll and libssl-0.9.8.dll? But also rename any file that is derived from either "ssleay32" or "libeay32" to those names, and the code will be clean again. But while openssl wants to keep those old names for the dlls, the code is prone to be ugly. Regards, Andreas
diff -udrNP openssl-0.9.8-stable-SNAP-20050703.orig/Configure openssl-0.9.8-stable-SNAP-20050703/Configure --- openssl-0.9.8-stable-SNAP-20050703.orig/Configure 2005-07-04 00:27:11.169168808 +0200 +++ openssl-0.9.8-stable-SNAP-20050703/Configure 2005-07-05 00:02:12.590136992 +0200 @@ -469,6 +469,7 @@ # MinGW "mingw", "gcc:-mno-cygwin -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall -D_WIN32_WINNT=0x333:::MINGW32:-lwsock32 -lgdi32:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts} EXPORT_VAR_AS_FN:${x86_coff_asm}:win32:cygwin-shared:-D_WINDLL -DOPENSSL_USE_APPLINK:-mno-cygwin -shared:.dll.a", +"mingwx", "i586-mingw32msvc-cc:-mno-cygwin -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall -D_WIN32_WINNT=0x333 -DOPENSSL_NO_HW:::MINGW32:-lwsock32 -lgdi32:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts} EXPORT_VAR_AS_FN:${x86_coff_asm}:win32:mingw-shared:-D_WINDLL:-mno-cygwin -shared:.dll:i586-mingw32msvc-ranlib", # UWIN "UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32", @@ -909,7 +910,7 @@ $IsMK1MF=1 if ($target eq "mingw" && $^O ne "cygwin"); -$exe_ext=".exe" if ($target eq "Cygwin" || $target eq "DJGPP" || $target eq "mingw"); +$exe_ext=".exe" if ($target eq "Cygwin" || $target eq "DJGPP" || $target eq "mingw" || $target eq "mingwx"); $exe_ext=".pm" if ($target =~ /vos/); $openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq ""); $prefix=$openssldir if $prefix eq ""; @@ -1562,7 +1563,7 @@ } # create the ms/version32.rc file if needed -if ($IsMK1MF) { +if($IsMK1MF || $target eq "mingwx") { my ($v1, $v2, $v3, $v4); if ($version_num =~ /(^[0-9a-f]{1})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i) { $v1=hex $1; @@ -1623,6 +1624,11 @@ close(OUT); } +# ugly hack to disable engines +if($target eq "mingwx") { + system("sed -e s/^LIB/XLIB/g -i engines/Makefile"); +} + print <<EOF; Configured for $target. diff -udrNP openssl-0.9.8-stable-SNAP-20050703.orig/Makefile.org openssl-0.9.8-stable-SNAP-20050703/Makefile.org --- openssl-0.9.8-stable-SNAP-20050703.orig/Makefile.org 2005-07-04 00:27:11.182166832 +0200 +++ openssl-0.9.8-stable-SNAP-20050703/Makefile.org 2005-07-04 23:33:54.666260656 +0200 @@ -496,7 +496,7 @@ @pod2man="`cd util; ./pod2mantest $(PERL)`"; \ here="`pwd`"; \ filecase=; \ - if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \ + if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" -o $(PLATFORM) = "mingwx" ]; then \ filecase=-i; \ fi; \ set -e; for i in doc/apps/*.pod; do \ diff -udrNP openssl-0.9.8-stable-SNAP-20050703.orig/Makefile.shared openssl-0.9.8-stable-SNAP-20050703/Makefile.shared --- openssl-0.9.8-stable-SNAP-20050703.orig/Makefile.shared 2005-07-04 00:27:11.182166832 +0200 +++ openssl-0.9.8-stable-SNAP-20050703/Makefile.shared 2005-07-04 23:06:13.554787984 +0200 @@ -258,6 +258,43 @@ link_app.cygwin: $(LINK_APP) +link_o.mingw: + ULIB=lib$(LIBNAME); \ + WLIB=$(LIBNAME)eay; \ + WLIB32=$(LIBNAME)eay32; \ + expr $(LIBNAME) : 'crypto' > /dev/null && WLIB="libeay" ; \ + expr $(LIBNAME) : 'crypto' > /dev/null && WLIB32="libeay32" ; \ + perl util/mkdef.pl 32 $$WLIB > ms/$$WLIB32.def && \ + i586-mingw32msvc-cc -mdll -o $$ULIB.tmp2 -Wl,--base-file,$$ULIB.tmp \ + $$ULIB.a $(LIBDEPS) $(SHLIBDEPS) && \ + rm -f $$ULIB.tmp2 && \ + i586-mingw32msvc-dlltool --dllname $$WLIB32.dll --base-file \ + $$ULIB.tmp --output-exp $$ULIB.exp --def ms/$$WLIB32.def && \ + rm -f $$ULIB.tmp && \ + i586-mingw32msvc-cc -mdll -o $$WLIB32.dll $$ULIB.exp $$ULIB.a \ + $(LIBDEPS) $(SHLIBDEPS) && rm -f $$ULIB.exp +link_a.mingw: + ULIB=lib$(LIBNAME); \ + WLIB=$(LIBNAME)eay; \ + WLIB32=$(LIBNAME)eay32; \ + expr $(LIBNAME) : 'crypto' > /dev/null && WLIB="libeay" ; \ + expr $(LIBNAME) : 'crypto' > /dev/null && WLIB32="libeay32" ; \ + rm -f apps/$$WLIB32.dll; \ + rm -f test/$$WLIB32.dll; \ + perl util/mkdef.pl 32 $$WLIB > ms/$$WLIB32.def && \ + i586-mingw32msvc-cc -mdll -o $$ULIB.tmp2 -Wl,--base-file,$$ULIB.tmp \ + $$ULIB.a $(LIBDEPS) $(SHLIBDEPS) && \ + rm -f $$ULIB.tmp2 && \ + i586-mingw32msvc-dlltool --dllname $$WLIB32.dll --base-file \ + $$ULIB.tmp --output-exp $$ULIB.exp --def ms/$$WLIB32.def && \ + rm -f $$ULIB.tmp && \ + i586-mingw32msvc-cc -mdll -o $$WLIB32.dll $$ULIB.exp $$ULIB.a \ + $(LIBDEPS) $(SHLIBDEPS) && rm -f $$ULIB.exp && \ + cp -p $$WLIB32.dll apps/ && \ + cp -p $$WLIB32.dll test/ +link_app.mingw: + $(LINK_APP) + link_o.alpha-osf1: @ if ${DETECT_GNU_LD}; then \ $(DO_GNU_SO); \ @@ -538,7 +575,7 @@ expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \ $(SYMLINK_SO) # The following lines means those specific architectures do no symlinks -symlink.cygwin symlib.alpha-osf1 symlink.tru64 symlink.tru64-rpath: +symlink.cygwin symlink.mingw symlib.alpha-osf1 symlink.tru64 symlink.tru64-rpath: # Compatibility targets link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu @@ -556,6 +593,10 @@ link_a.cygwin-shared: link_a.cygwin link_app.cygwin-shared: link_app.cygwin symlink.cygwin-shared: symlink.cygwin +link_o.mingw-shared: link_o.mingw +link_a.mingw-shared: link_a.mingw +link_app.mingw-shared: link_app.mingw +symlink.mingw-shared: symlink.mingw link_o.alpha-osf1-shared: link_o.alpha-osf1 link_a.alpha-osf1-shared: link_a.alpha-osf1 link_app.alpha-osf1-shared: link_app.alpha-osf1 diff -udrNP openssl-0.9.8-stable-SNAP-20050703.orig/util/libeay.num openssl-0.9.8-stable-SNAP-20050703/util/libeay.num --- openssl-0.9.8-stable-SNAP-20050703.orig/util/libeay.num 2005-07-04 00:27:14.653639088 +0200 +++ openssl-0.9.8-stable-SNAP-20050703/util/libeay.num 2005-07-04 22:50:07.986576664 +0200 @@ -2071,7 +2071,6 @@ UI_add_error_string 2633 EXIST::FUNCTION: KRB5_CHECKSUM_free 2634 EXIST::FUNCTION: OCSP_REQUEST_get_ext 2635 EXIST::FUNCTION: -ENGINE_load_ubsec 2636 EXIST::FUNCTION:ENGINE,STATIC_ENGINE ENGINE_register_all_digests 2637 EXIST::FUNCTION:ENGINE PKEY_USAGE_PERIOD_it 2638 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: PKEY_USAGE_PERIOD_it 2638 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: @@ -2545,7 +2544,6 @@ AES_set_encrypt_key 3024 EXIST::FUNCTION:AES OCSP_resp_count 3025 EXIST::FUNCTION: KRB5_CHECKSUM_new 3026 EXIST::FUNCTION: -ENGINE_load_cswift 3027 EXIST::FUNCTION:ENGINE,STATIC_ENGINE OCSP_onereq_get0_id 3028 EXIST::FUNCTION: ENGINE_set_default_ciphers 3029 EXIST::FUNCTION:ENGINE NOTICEREF_it 3030 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: @@ -2576,7 +2574,6 @@ i2d_EXTENDED_KEY_USAGE 3052 EXIST::FUNCTION: i2d_OCSP_SIGNATURE 3053 EXIST::FUNCTION: asn1_enc_save 3054 EXIST::FUNCTION: -ENGINE_load_nuron 3055 EXIST::FUNCTION:ENGINE,STATIC_ENGINE _ossl_old_des_pcbc_encrypt 3056 EXIST::FUNCTION:DES PKCS12_MAC_DATA_it 3057 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: PKCS12_MAC_DATA_it 3057 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: @@ -2600,7 +2597,6 @@ i2d_KRB5_CHECKSUM 3072 EXIST::FUNCTION: ENGINE_set_table_flags 3073 EXIST::FUNCTION:ENGINE AES_options 3074 EXIST::FUNCTION:AES -ENGINE_load_chil 3075 EXIST::FUNCTION:ENGINE,STATIC_ENGINE OCSP_id_cmp 3076 EXIST::FUNCTION: OCSP_BASICRESP_new 3077 EXIST::FUNCTION: OCSP_REQUEST_get_ext_by_NID 3078 EXIST::FUNCTION: @@ -2667,7 +2663,6 @@ OCSP_CRLID_it 3127 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: i2d_KRB5_AUTHENTBODY 3128 EXIST::FUNCTION: OCSP_REQUEST_get_ext_count 3129 EXIST::FUNCTION: -ENGINE_load_atalla 3130 EXIST::FUNCTION:ENGINE,STATIC_ENGINE X509_NAME_it 3131 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: X509_NAME_it 3131 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: USERNOTICE_it 3132 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: @@ -2762,8 +2757,6 @@ DES_read_password 3207 EXIST::FUNCTION:DES UI_UTIL_read_pw 3208 EXIST::FUNCTION: UI_UTIL_read_pw_string 3209 EXIST::FUNCTION: -ENGINE_load_aep 3210 EXIST::FUNCTION:ENGINE,STATIC_ENGINE -ENGINE_load_sureware 3211 EXIST::FUNCTION:ENGINE,STATIC_ENGINE OPENSSL_add_all_algorithms_noconf 3212 EXIST:!VMS:FUNCTION: OPENSSL_add_all_algo_noconf 3212 EXIST:VMS:FUNCTION: OPENSSL_add_all_algorithms_conf 3213 EXIST:!VMS:FUNCTION: @@ -2772,7 +2765,6 @@ AES_ofb128_encrypt 3215 EXIST::FUNCTION:AES AES_ctr128_encrypt 3216 EXIST::FUNCTION:AES AES_cfb128_encrypt 3217 EXIST::FUNCTION:AES -ENGINE_load_4758cca 3218 EXIST::FUNCTION:ENGINE,STATIC_ENGINE _ossl_096_des_random_seed 3219 EXIST::FUNCTION:DES EVP_aes_256_ofb 3220 EXIST::FUNCTION:AES EVP_aes_192_ofb 3221 EXIST::FUNCTION:AES @@ -3107,7 +3099,6 @@ STORE_method_set_modify_function 3530 EXIST:!VMS:FUNCTION: STORE_meth_set_modify_fn 3530 EXIST:VMS:FUNCTION: STORE_parse_attrs_next 3531 EXIST::FUNCTION: -ENGINE_load_padlock 3532 EXIST::FUNCTION:ENGINE EC_GROUP_set_curve_name 3533 EXIST::FUNCTION:EC X509_CERT_PAIR_it 3534 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: X509_CERT_PAIR_it 3534 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: