On 2006.10.20 at 12:05:11 +0400, Victor B. Wagner wrote: > Second problem with cross build is that make does certificate > rehash, using freshly compiled c_rehash program. It doesn't lead to make > failure, but it would be nice to be able to redefine c_rehash as well, > and use one from host system OpenSSL during build stage (of course, for > cross-builds only).
More detailed problem with c_rehash under Win32: I. Running make rehash in Win32/msys environment using ActiveState perl 1. msys shell pwd command without -W option outputs path which looks like /h/src/openssl, which confuses ActiveState Perl. It understands only h:/src/openssl. 2. ActiveState perl doesn't consider util/opensslwrap.sh executable and reports 'openssl' command not found. Really opensslwrap script is not needed under win32, because openssl.exe would always search for DLL in the directory where it resides itself, and DLLs are copied there during build process. File with .exe suffix is recongnized as executable, so passing OPENSSL="`pwd -W`/apps/openssl.exe" to c_rehash makes it work under msys+AS perl environment. But due to problem 3 it only reports a lot of "file not found" errors. 3. c_rehash uses signle quotes around filename to pass certificate name to openssl x509 -hash my ($hash, $fprint) = `"$openssl" x509 -hash -fingerprint -noout -in "$fname"`; It doesn't work with ActiveState perl (which is most widespread native Win32 perl implementation). Really, it doesn't work with any implementation of Perl which uses native Windows command interpreter to handle backtick commands. Changing single quotes there to double quotes makes command more universal. II. Running c_rehash on non-windows build platform. It only requires way to override OPENSSL variable passed to c_rehash. Something like HOST_OPENSSL=/usr/bin/openssl So, if we write make rehash target following way: rehash: rehash.time rehash.time: certs (if [ $$OSTYPE = msys ]; then \ OPENSSL=$${HOST_OPENSSL:-`pwd -W`/apps/openssl.exe};\ else\ OPENSSL=$${HOST_OPENSSL:-`pwd`/util/opensslwrap.sh};\ fi;\ OPENSSL_DEBUG_MEMORY=on; \ echo $$OPENSSL;\ export OPENSSL OPENSSL_DEBUG_MEMORY; \ $(PERL) tools/c_rehash certs) touch rehash.time and change signle quotes to double in the c_rehash functions link_hash_cert and link_hash_crl (this is a bit tricky because need to escape double quotes properly, counting all rounds of substitution which can occur), this would work in msys, and also would allow to make rehash on cross-build platform by adding HOST_OPENSSL=/usr/bin/openssl (or whereever your native openssl binary is) when doing make. ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager [EMAIL PROTECTED]