Dear All,
I am a contributor to the WCE port of stunnel, using intensively openssl.
I have recently completed the port of stunnel v434 to WCE platform,
and needed a refreshed version of openssl for that target.

I have recompiled openssl v100a with MS EVC4 sp4 free compiler, MS WCE420 SDK and essemer/wcecompat 1.2 library, and fixed many compilation issues (mostly undefined symbols, a few inexistant routines, some libs missing at link time).


I DID NOT fix any "operational" issue, ie execution-time issue.
My code is basically a PORTING effort, not at all a rewrite or enriching effort. In particular I have a special concern to have wce code as close as possible as win32 code.


Please find enclosed my patch in "diff -ur orig patched" format.

SUMMARY of fixes for compilation issues :

 ./apps/apps.c:
strings.h is not relevant in WCE environment.

 ./apps/apps.h
FD_SET must include proper cast for WCE, as for win32.
NOTA: this cast should be corrected in the future to UNIT_PTR,
instead of "unsigned int", as it is defined like this in the MS SDK.

 ./crypto/bio/bss_dgram.c
get_current_time NEEDED a WCE code,
as _ftime DOES NOT exist in WCE420 SDK.
Nota: one day my code should go in wcecompat (I have to discuss with Maurice Kalinowski about that, and about the replacement of wccompat 1.2 by mauricek or alike version).

 ./crypto/bio/bss_fd.c
some functions ARE missing definition for WCE.

BIO *BIO_new_fd(int fd,int close_flag)
int BIO_fd_non_fatal_error(int err)
int BIO_fd_should_retry(int i)
BIO_METHOD *BIO_s_fd(void)

By default I put a stub.
Is it sufficient ? at least it works with stunnel.

 ./crypto/cryptlib.c
"raise" DOES NOT exist in WCE environment.
Nota: In win32 _exit(3) is redundant with raise(sigabrt),
because raise implies exit(3), dixit MS doc.

 ./crypto/dso/dso_win32.c
len=0 just put to AVOID a warning of the compiler
because this variable is NOT used in CE code.

 ./crypto/o_str.c
strings.h is not relevant in WCE environment.

./crypto/opensslconf.h : no need of any explanation, automatically generated file.

 ./e_os.h
"winsock2/ws2tcp" includes ARE needed in WCE environment.

EACCES symbol must be defined in WCE: fix would have to be included in wcecompat stream one day.

 ./engines/ccgost/gost_lcl.h
Missing type "off_t"

 ./engines/e_capi.c
In WCE SDK, only UNICODE version of some Crypt function exist.
But openssl explicitely uses ANSI fucntions.
So I offer some code for this :
CryptEnumProvidersA
CryptAcquireContextA
CryptSignHashA

These ARE NOT STUB, but code really doing something.

 ./Makefile
automatically generated, some lines changed due to change in VC-32.pl

 ./ssl/d1_lib.c
get_current_time needed to be defined with "real code", not stub.
Nota: This code is a DUPLICATE of bss_dgram.c code :
same function get_current_time, same code.


 ./util/pl/VC-32.pl
VERY IMPORTANT : strangely the link process was supposed to link with winsock 1 lib ! It is a big error as all openssl code is using winsock2, which is much more bsd compliant than winsock1. So the linkage must be done with ws2.lib (which is for WCE what ws2_32.lib is for win32).

crypt32.lib IS ALSO MANDATORY now in WCE port, as in win32.


NOTE : I would also suggest to modify the INSTALL.WCE file just to mention EVC4 and wcecompat 1.2 instead of evc3 and wcecompat 1.1, and also the fact that out32dll path is now out32dll_$(TARGETCPU)

NOTE 2 : just in case it may help, precompiled (patched) versions of openssl v100a and stunnel v434 for ARMV4 processors/WCE420 platform,
are available at http://delaage.pierre.free.fr.
The result works fine for HTC WM6 smartphones, and should work for WM5 phones.

Thank you very much for your work.
Yours sincerely,

Pierre Delaage


diff -ur orig/apps/apps.c patched/apps/apps.c
--- orig/apps/apps.c    2010-09-25 16:45:29.563877500 +0200
+++ patched/apps/apps.c 2010-09-26 07:12:44.368479500 +0200
@@ -118,7 +118,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(NETWARE_CLIB)
+#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(OPENSSL_SYSNAME_WINCE) && 
!defined(NETWARE_CLIB) //pdelaage 20100926
 #include <strings.h>
 #endif
 #include <sys/types.h>
diff -ur orig/apps/apps.h patched/apps/apps.h
--- orig/apps/apps.h    2009-10-31 14:34:19.000000000 +0100
+++ patched/apps/apps.h 2010-09-26 07:13:54.676479500 +0200
@@ -202,8 +202,9 @@
 #  endif
 #endif
 
-#ifdef OPENSSL_SYSNAME_WIN32
-#  define openssl_fdset(a,b) FD_SET((unsigned int)a, b)
+// pdelaage 20100926 #ifdef OPENSSL_SYSNAME_WIN32
+#if defined(OPENSSL_SYSNAME_WIN32) || defined(OPENSSL_SYSNAME_WINCE)
+#  define openssl_fdset(a,b) FD_SET((unsigned int)a, b) // pdelaage uint 
should be UINT_PTR !
 #else
 #  define openssl_fdset(a,b) FD_SET(a, b)
 #endif
diff -ur orig/crypto/bio/bss_dgram.c patched/crypto/bio/bss_dgram.c
--- orig/crypto/bio/bss_dgram.c 2010-01-07 11:44:21.000000000 +0100
+++ patched/crypto/bio/bss_dgram.c      2010-09-24 22:28:07.948264500 +0200
@@ -815,10 +815,43 @@
 static void get_current_time(struct timeval *t)
        {
 #ifdef OPENSSL_SYS_WIN32
+
+#ifndef OPENSSL_SYSNAME_WINCE
        struct _timeb tb;
        _ftime(&tb);
        t->tv_sec = (long)tb.time;
        t->tv_usec = (long)tb.millitm * 1000;
+#else
+
+SYSTEMTIME stmToday_l, stm19700101_l;
+FILETIME ftmToday_l, ftm19700101_l;
+ULARGE_INTEGER uliToday_l, uli19700101_l, uliElapsed_l;
+
+stm19700101_l.wYear = 1970;
+stm19700101_l.wMonth= 1;
+stm19700101_l.wDay= 1;
+stm19700101_l.wHour =0;
+stm19700101_l.wMinute = 0;
+stm19700101_l.wSecond =0;
+stm19700101_l.wMilliseconds = 0;
+
+GetLocalTime(&stmToday_l);
+
+SystemTimeToFileTime(&stm19700101_l, &ftm19700101_l);
+SystemTimeToFileTime(&stmToday_l, &ftmToday_l);
+
+uli19700101_l.u.LowPart  = ftm19700101_l.dwLowDateTime;
+uli19700101_l.u.HighPart = ftm19700101_l.dwHighDateTime;
+
+uliToday_l.u.LowPart  = ftmToday_l.dwLowDateTime;
+uliToday_l.u.HighPart = ftmToday_l.dwHighDateTime;
+
+
+uliElapsed_l.QuadPart = uliToday_l.QuadPart - uli19700101_l.QuadPart;
+
+       t->tv_sec  = (long)  (uliElapsed_l.QuadPart / 10000000);
+       t->tv_usec = (long) ((uliElapsed_l.QuadPart % 10000000) / 10);
+#endif
 #elif defined(OPENSSL_SYS_VMS)
        struct timeb tb;
        ftime(&tb);
diff -ur orig/crypto/bio/bss_fd.c patched/crypto/bio/bss_fd.c
--- orig/crypto/bio/bss_fd.c    2006-02-13 00:11:30.000000000 +0100
+++ patched/crypto/bio/bss_fd.c 2010-09-26 19:10:45.733132000 +0200
@@ -66,6 +66,27 @@
  * One can argue that one should implement dummy placeholder for
  * BIO_s_fd here...
  */
+ 
+ // pdelaage 20100926: yes it is necessary for WinCE
+ 
+ BIO *BIO_new_fd(int fd,int close_flag)
+ {
+ return NULL;
+ }
+ int BIO_fd_non_fatal_error(int err)
+ {
+ return 0;
+ }
+ int BIO_fd_should_retry(int i)
+ {
+ return 0;
+ }
+
+ BIO_METHOD *BIO_s_fd(void)
+ {
+ return NULL;
+}
+
 #else
 /*
  * As for unconditional usage of "UPLINK" interface in this module.
Seulement dans patched/crypto: buildinf.h
diff -ur orig/crypto/cryptlib.c patched/crypto/cryptlib.c
--- orig/crypto/cryptlib.c      2010-04-10 16:13:12.000000000 +0200
+++ patched/crypto/cryptlib.c   2010-09-26 19:21:40.872841000 +0200
@@ -889,8 +889,11 @@
        abort();
 #else
        /* Win32 abort() customarily shows a dialog, but we just did that... */
+#ifndef _WIN32_WCE // added by pdelaage 20100926
        raise(SIGABRT);
-       _exit(3);
+#else
+#endif
+       _exit(3);// pdelaage : redundant for win32 with raise(sigabrt)
 #endif
        }
 
diff -ur orig/crypto/dso/dso_win32.c patched/crypto/dso/dso_win32.c
--- orig/crypto/dso/dso_win32.c 2009-07-15 13:01:40.000000000 +0200
+++ patched/crypto/dso/dso_win32.c      2010-09-26 19:19:53.537914000 +0200
@@ -690,6 +690,7 @@
        CLOSETOOLHELP32SNAPSHOT  close_snap;
        MODULE32 module_first, module_next;
        int len;
+       len = 0;// pdelaage 20100926 WCE: to avoid blocking warning at 
compilation
  
        if (addr == NULL)
                {
diff -ur orig/crypto/o_str.c patched/crypto/o_str.c
--- orig/crypto/o_str.c 2009-06-01 14:14:15.000000000 +0200
+++ patched/crypto/o_str.c      2010-09-24 07:49:12.422290000 +0200
@@ -60,9 +60,12 @@
 #include <e_os.h>
 #include "o_str.h"
 
+// pdelaage added WINCE on 20100924
+
 #if !defined(OPENSSL_IMPLEMENTS_strncasecmp) && \
-    !defined(OPENSSL_SYSNAME_WIN32) && \
-    !defined(NETWARE_CLIB)
+!defined(OPENSSL_SYSNAME_WIN32) && \
+!defined(OPENSSL_SYSNAME_WINCE) && \
+!defined(NETWARE_CLIB) 
 # include <strings.h>
 #endif
 
diff -ur orig/crypto/opensslconf.h patched/crypto/opensslconf.h
--- orig/crypto/opensslconf.h   2010-06-01 15:38:55.000000000 +0200
+++ patched/crypto/opensslconf.h        2010-09-27 22:48:49.068491000 +0200
@@ -2,6 +2,9 @@
 /* WARNING: Generated automatically from opensslconf.h.in by Configure. */
 
 /* OpenSSL was configured with the following options: */
+#ifndef OPENSSL_SYSNAME_WINCE
+# define OPENSSL_SYSNAME_WINCE
+#endif
 #ifndef OPENSSL_DOING_MAKEDEPEND
 
 
@@ -29,8 +32,8 @@
 
 #endif /* OPENSSL_DOING_MAKEDEPEND */
 
-#ifndef OPENSSL_NO_DYNAMIC_ENGINE
-# define OPENSSL_NO_DYNAMIC_ENGINE
+#ifndef OPENSSL_THREADS
+# define OPENSSL_THREADS
 #endif
 
 /* The OPENSSL_NO_* macros are also defined as NO_* if the application
@@ -77,6 +80,7 @@
 #define OPENSSL_UNISTD <unistd.h>
 
 #undef OPENSSL_EXPORT_VAR_AS_FUNCTION
+#define OPENSSL_EXPORT_VAR_AS_FUNCTION
 
 #if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
 #define IDEA_INT unsigned int
@@ -121,7 +125,7 @@
 
 #if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
 #define CONFIG_HEADER_BN_H
-#undef BN_LLONG
+#define BN_LLONG
 
 /* Should we define BN_DIV2W here? */
 
@@ -135,7 +139,7 @@
 #define CONFIG_HEADER_RC4_LOCL_H
 /* if this is defined data[i] is used instead of *data, this is a %20
  * speedup on x86 */
-#undef RC4_INDEX
+#define RC4_INDEX
 #endif
 
 #if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
Seulement dans patched/crypto: opensslconf.h.bak
diff -ur orig/e_os.h patched/e_os.h
--- orig/e_os.h 2010-05-31 15:18:08.000000000 +0200
+++ patched/e_os.h      2010-09-27 22:48:07.101450500 +0200
@@ -271,7 +271,8 @@
        */
 #      define _WIN32_WINNT 0x0400
 #    endif
-#    if !defined(OPENSSL_NO_SOCK) && defined(_WIN32_WINNT)
+
+#    if !defined(OPENSSL_NO_SOCK) && ( defined(_WIN32_WINNT) ||     
defined(_WIN32_WCE)) // pdelaage added wce
        /*
         * Just like defining _WIN32_WINNT including winsock2.h implies
         * certain "discipline" for maintaining [broad] binary compatibility.
@@ -283,10 +284,19 @@
 #      include <ws2tcpip.h>
        /* yes, they have to be #included prior to <windows.h> */
 #    endif
+
 #    include <windows.h>
 #    include <stdio.h>
 #    include <stddef.h>
 #    include <errno.h>
+
+#ifdef _WIN32_WCE
+#ifndef EACCES
+#define EACCES 13 // pdelaage 20100925, to be added in weccompat (but errno.h 
disappeared from mauricek port, probably because of sdk 6 usage, I use sdk 420)
+// needed for apps.c compilation
+#endif
+#endif
+
 #    include <string.h>
 #    ifdef _WIN64
 #      define strlen(s) _strlen31(s)
@@ -338,6 +348,7 @@
 
 #  ifdef OPENSSL_SYS_WINCE
 #    define OPENSSL_NO_POSIX_IO
+
 #  endif
 
 #  define ssize_t long
diff -ur orig/engines/ccgost/gost_lcl.h patched/engines/ccgost/gost_lcl.h
--- orig/engines/ccgost/gost_lcl.h      2009-06-16 18:39:20.000000000 +0200
+++ patched/engines/ccgost/gost_lcl.h   2010-09-26 19:13:02.261503000 +0200
@@ -18,6 +18,11 @@
 #include <openssl/ec.h>
 #include "gost89.h"
 #include "gosthash.h"
+
+#  ifdef OPENSSL_SYS_WINCE
+typedef long off_t;// pdelaage 20100926 EMERGENCY added : to be removed with 
mauricek wcecompat 
+#  endif
+
 /* Control commands */
 #define GOST_PARAM_CRYPT_PARAMS 0
 #define GOST_PARAM_MAX 0
diff -ur orig/engines/e_capi.c patched/engines/e_capi.c
--- orig/engines/e_capi.c       2010-03-15 23:29:20.000000000 +0100
+++ patched/engines/e_capi.c    2010-09-26 18:55:21.314759500 +0200
@@ -110,6 +110,89 @@
 #include "e_capi_err.h"
 #include "e_capi_err.c"
 
+#ifdef OPENSSL_SYSNAME_WINCE // pdelaage20100926 : to move to wcecomapt one day
+
+BOOL WINAPI CryptEnumProvidersA(
+  DWORD dwIndex, 
+  DWORD *pdwReserved,
+  DWORD dwFlags,
+  DWORD *pdwProvType, 
+  LPSTR pszProvName,
+  DWORD *pcbProvName
+)
+{
+BOOL cr_l = FALSE;
+
+DWORD cbProvNameW = 0;
+LPWSTR pszProvNameW = NULL;
+
+if (pszProvName == NULL)
+{ // get length for future buffer
+cr_l = CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, NULL, 
pcbProvName);
+}
+else // len here is reliable
+{
+cbProvNameW = (*pcbProvName) * sizeof(WCHAR);
+pszProvNameW = (LPWSTR) malloc(cbProvNameW);
+cr_l = CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, 
pszProvNameW, &cbProvNameW);
+
+// convert back to Ascii
+  WideCharToMultiByte(CP_ACP, 0, pszProvNameW, -1, pszProvName, *pcbProvName, 
NULL, NULL);
+ 
+free(pszProvNameW);
+}
+
+return(cr_l);
+}
+
+BOOL WINAPI CryptAcquireContextA(
+  HCRYPTPROV *phProv,
+  LPCSTR pszContainer,
+  LPCSTR pszProvider,
+  DWORD dwProvType,
+  DWORD dwFlags
+)
+{
+BOOL cr_l = FALSE;
+LPWSTR pszContainerW = NULL;
+LPWSTR pszProviderW = NULL;
+size_t aLen;
+
+
+if (pszContainer && (aLen=strlen(pszContainer)))  
+{
+pszContainerW = (LPWSTR) malloc( (1+aLen) * sizeof(WCHAR) );
+MultiByteToWideChar(CP_ACP, 0, pszContainer, -1, pszContainerW, (int) ((1+ 
aLen)*sizeof(WCHAR)) );
+}
+
+if (pszProvider  && (aLen=strlen(pszProvider)))
+{
+pszProviderW  = (LPWSTR) malloc( (1+aLen) * sizeof(WCHAR) );
+MultiByteToWideChar(CP_ACP, 0, pszProvider, -1, pszProviderW,   (int) ((1+ 
aLen)*sizeof(WCHAR)) );
+}   
+
+cr_l = CryptAcquireContextW(phProv, pszContainerW, pszProviderW, dwProvType, 
dwFlags);
+
+if (pszContainerW) free(pszContainerW);
+if (pszProviderW)  free(pszProviderW);
+
+return(cr_l);
+}
+
+BOOL WINAPI CryptSignHashA(
+  HCRYPTHASH hHash,     
+  DWORD dwKeySpec,      
+  LPCSTR sDescription, // ascii version
+  DWORD dwFlags,        
+  BYTE *pbSignature,    
+  DWORD *pdwSigLen      
+)
+{
+return(CryptSignHashW(hHash, dwKeySpec, NULL, dwFlags, pbSignature, 
pdwSigLen));
+}
+
+#endif
+
 
 static const char *engine_capi_id = "capi";
 static const char *engine_capi_name = "CryptoAPI ENGINE";
Seulement dans patched: inc32
diff -ur orig/Makefile patched/Makefile
--- orig/Makefile       2010-06-01 15:38:55.000000000 +0200
+++ patched/Makefile    2010-09-27 22:48:49.031384000 +0200
@@ -12,9 +12,9 @@
 SHLIB_MAJOR=1
 SHLIB_MINOR=0.0
 SHLIB_EXT=
-PLATFORM=dist
-OPTIONS= no-gmp no-jpake no-krb5 no-md2 no-rc5 no-rfc3779 no-shared no-store 
no-zlib no-zlib-dynamic static-engine
-CONFIGURE_ARGS=dist
+PLATFORM=VC-CE
+OPTIONS= no-gmp no-jpake no-krb5 no-md2 no-rc5 no-rfc3779 no-shared no-store 
no-zlib no-zlib-dynamic
+CONFIGURE_ARGS=VC-CE
 SHLIB_TARGET=
 
 # HERE indicates where this Makefile lives.  This can be used to indicate
@@ -59,17 +59,17 @@
 # equal 4.
 # PKCS1_CHECK - pkcs1 tests.
 
-CC= cc
-CFLAG= -O
+CC= clarm.exe
+CFLAG= -DOPENSSL_THREADS  -DDSO_WIN32 
 DEPFLAG= -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 
-DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE
 PEX_LIBS= 
 EX_LIBS= 
 EXE_EXT= 
 ARFLAGS= 
 AR= ar $(ARFLAGS) r
-RANLIB= /usr/bin/ranlib
+RANLIB= true
 NM= nm
-PERL= /usr/bin/perl
+PERL= perl
 TAR= tar
 TARFLAGS= --no-recursion
 MAKEDEPPROG=makedepend
@@ -101,7 +101,7 @@
 RMD160_ASM_OBJ= 
 WP_ASM_OBJ= wp_block.o
 CMLL_ENC= camellia.o cmll_misc.o cmll_cbc.o
-PERLASM_SCHEME= 
+PERLASM_SCHEME= void
 
 # KRB5 stuff
 KRB5_INCLUDES=
Seulement dans patched: Makefile.bak
Seulement dans patched: MINFO
Seulement dans patched/ms: ce.mak
Seulement dans patched/ms: cedll.mak
Seulement dans patched/ms: libeay32.def
Seulement dans patched/ms: nt.mak
Seulement dans patched/ms: ntdll.mak
Seulement dans patched/ms: ssleay32.def
Seulement dans patched/ms: version32.rc
Seulement dans patched: mywcebuild.bat
Seulement dans patched: out32dll_ARMV4
diff -ur orig/ssl/d1_lib.c patched/ssl/d1_lib.c
--- orig/ssl/d1_lib.c   2010-04-06 14:29:21.000000000 +0200
+++ patched/ssl/d1_lib.c        2010-09-26 19:02:39.881416000 +0200
@@ -362,13 +362,47 @@
        return dtls1_retransmit_buffered_messages(s);
        }
 
-static void get_current_time(struct timeval *t)
+static void get_current_time(struct timeval *t) // pdelaage : this code is a 
DUPLICATE of bss_dgram same name routine !
 {
 #ifdef OPENSSL_SYS_WIN32
+       
+#ifndef OPENSSL_SYSNAME_WINCE // pdelaage: one day create a port of ftime in 
wcecompat, with the code below
        struct _timeb tb;
        _ftime(&tb);
        t->tv_sec = (long)tb.time;
        t->tv_usec = (long)tb.millitm * 1000;
+#else
+
+SYSTEMTIME stmToday_l, stm19700101_l;
+FILETIME ftmToday_l, ftm19700101_l;
+ULARGE_INTEGER uliToday_l, uli19700101_l, uliElapsed_l;
+
+stm19700101_l.wYear = 1970;
+stm19700101_l.wMonth= 1;
+stm19700101_l.wDay= 1;
+stm19700101_l.wHour =0;
+stm19700101_l.wMinute = 0;
+stm19700101_l.wSecond =0;
+stm19700101_l.wMilliseconds = 0;
+
+GetLocalTime(&stmToday_l);
+
+SystemTimeToFileTime(&stm19700101_l, &ftm19700101_l);
+SystemTimeToFileTime(&stmToday_l, &ftmToday_l);
+
+uli19700101_l.u.LowPart  = ftm19700101_l.dwLowDateTime;
+uli19700101_l.u.HighPart = ftm19700101_l.dwHighDateTime;
+
+uliToday_l.u.LowPart  = ftmToday_l.dwLowDateTime;
+uliToday_l.u.HighPart = ftmToday_l.dwHighDateTime;
+
+
+uliElapsed_l.QuadPart = uliToday_l.QuadPart - uli19700101_l.QuadPart;
+
+       t->tv_sec  = (long)  (uliElapsed_l.QuadPart / 10000000);
+       t->tv_usec = (long) ((uliElapsed_l.QuadPart % 10000000) / 10);
+#endif
+       
 #elif defined(OPENSSL_SYS_VMS)
        struct timeb tb;
        ftime(&tb);
Seulement dans patched: tmp32dll_ARMV4
diff -ur orig/util/pl/VC-32.pl patched/util/pl/VC-32.pl
--- orig/util/pl/VC-32.pl       2010-06-01 08:03:20.000000000 +0200
+++ patched/util/pl/VC-32.pl    2010-09-25 08:16:00.934486000 +0200
@@ -152,11 +152,14 @@
 $efile="/out:";
 $exep='.exe';
 if ($no_sock)          { $ex_libs=''; }
-elsif ($FLAVOR =~ /CE/)        { $ex_libs='winsock.lib'; }
+# pdelaage ws2 is also necessary for wce420 and above elsif ($FLAVOR =~ /CE/)  
{ $ex_libs='winsock.lib'; }
+elsif ($FLAVOR =~ /CE/)        { $ex_libs='ws2.lib'; }
 else                   { $ex_libs='ws2_32.lib'; }
 
 if ($FLAVOR =~ /CE/)
        {
+       $ex_libs.=' crypt32.lib'; # pdelaage
+
        $ex_libs.=' $(WCECOMPAT)/lib/wcecompatex.lib'   if 
(defined($ENV{'WCECOMPAT'}));
        $ex_libs.=' $(PORTSDK_LIBPATH)/portlib.lib'     if 
(defined($ENV{'PORTSDK_LIBPATH'}));
        $ex_libs.=' /nodefaultlib:oldnames.lib coredll.lib corelibc.lib' if 
($ENV{'TARGETCPU'} eq "X86");

Reply via email to