1ebfedea0SLionel Sambuc# Metrowerks Codewarrior or gcc / nlmconv for NetWare 2ebfedea0SLionel Sambuc# 3ebfedea0SLionel Sambuc 4ebfedea0SLionel Sambuc$version_header = "crypto/opensslv.h"; 5ebfedea0SLionel Sambucopen(IN, "$version_header") or die "Couldn't open $version_header: $!"; 6ebfedea0SLionel Sambucwhile (<IN>) { 7ebfedea0SLionel Sambuc if (/^#define[\s\t]+OPENSSL_VERSION_NUMBER[\s\t]+0x(\d)(\d{2})(\d{2})(\d{2})/) 8ebfedea0SLionel Sambuc { 9ebfedea0SLionel Sambuc # die "OpenSSL version detected: $1.$2.$3.$4\n"; 10ebfedea0SLionel Sambuc #$nlmvernum = "$1,$2,$3"; 11ebfedea0SLionel Sambuc $nlmvernum = "$1,".($2*10+$3).",".($4*1); 12ebfedea0SLionel Sambuc #$nlmverstr = "$1.".($2*1).".".($3*1).($4?(chr(96+$4)):""); 13ebfedea0SLionel Sambuc break; 14ebfedea0SLionel Sambuc } 15ebfedea0SLionel Sambuc} 16ebfedea0SLionel Sambucclose(IN) or die "Couldn't close $version_header: $!"; 17ebfedea0SLionel Sambuc 18ebfedea0SLionel Sambuc$readme_file = "README"; 19ebfedea0SLionel Sambucopen(IN, $readme_file) or die "Couldn't open $readme_file: $!"; 20ebfedea0SLionel Sambucwhile (<IN>) { 21ebfedea0SLionel Sambuc if (/^[\s\t]+OpenSSL[\s\t]+(\d)\.(\d{1,2})\.(\d{1,2})([a-z])(.*)/) 22ebfedea0SLionel Sambuc { 23ebfedea0SLionel Sambuc #$nlmvernum = "$1,$2,$3"; 24ebfedea0SLionel Sambuc #$nlmvernum = "$1,".($2*10+$3).",".($4*1); 25ebfedea0SLionel Sambuc $nlmverstr = "$1.$2.$3$4$5"; 26ebfedea0SLionel Sambuc } 27ebfedea0SLionel Sambuc elsif (/^[\s\t]+(Copyright \(c\) \d{4}\-\d{4} The OpenSSL Project)$/) 28ebfedea0SLionel Sambuc { 29ebfedea0SLionel Sambuc $nlmcpystr = $1; 30ebfedea0SLionel Sambuc } 31ebfedea0SLionel Sambuc break if ($nlmvernum && $nlmcpystr); 32ebfedea0SLionel Sambuc} 33ebfedea0SLionel Sambucclose(IN) or die "Couldn't close $readme_file: $!"; 34ebfedea0SLionel Sambuc 35ebfedea0SLionel Sambuc# Define stacksize here 36ebfedea0SLionel Sambuc$nlmstack = "32768"; 37ebfedea0SLionel Sambuc 38ebfedea0SLionel Sambuc# some default settings here in case we failed to find them in README 39ebfedea0SLionel Sambuc$nlmvernum = "1,0,0" if (!$nlmvernum); 40ebfedea0SLionel Sambuc$nlmverstr = "OpenSSL" if (!$nlmverstr); 41ebfedea0SLionel Sambuc$nlmcpystr = "Copyright (c) 1998-now The OpenSSL Project" if (!$nlmcpystr); 42ebfedea0SLionel Sambuc 43ebfedea0SLionel Sambuc# die "OpenSSL copyright: $nlmcpystr\nOpenSSL verstring: $nlmverstr\nOpenSSL vernumber: $nlmvernum\n"; 44ebfedea0SLionel Sambuc 45ebfedea0SLionel Sambuc# The import files and other misc imports needed to link 46ebfedea0SLionel Sambuc@misc_imports = ("GetProcessSwitchCount", "RunningProcess", 47ebfedea0SLionel Sambuc "GetSuperHighResolutionTimer"); 48ebfedea0SLionel Sambucif ($LIBC) 49ebfedea0SLionel Sambuc{ 50ebfedea0SLionel Sambuc @import_files = ("libc.imp"); 51ebfedea0SLionel Sambuc @module_files = ("libc"); 52ebfedea0SLionel Sambuc $libarch = "LIBC"; 53ebfedea0SLionel Sambuc} 54ebfedea0SLionel Sambucelse 55ebfedea0SLionel Sambuc{ 56ebfedea0SLionel Sambuc # clib build 57ebfedea0SLionel Sambuc @import_files = ("clib.imp"); 58ebfedea0SLionel Sambuc push(@import_files, "socklib.imp") if ($BSDSOCK); 59ebfedea0SLionel Sambuc @module_files = ("clib"); 60ebfedea0SLionel Sambuc # push(@misc_imports, "_rt_modu64%16", "_rt_divu64%16"); 61ebfedea0SLionel Sambuc $libarch = "CLIB"; 62ebfedea0SLionel Sambuc} 63ebfedea0SLionel Sambucif ($BSDSOCK) 64ebfedea0SLionel Sambuc{ 65ebfedea0SLionel Sambuc $libarch .= "-BSD"; 66ebfedea0SLionel Sambuc} 67ebfedea0SLionel Sambucelse 68ebfedea0SLionel Sambuc{ 69ebfedea0SLionel Sambuc $libarch .= "-WS2"; 70ebfedea0SLionel Sambuc push(@import_files, "ws2nlm.imp"); 71ebfedea0SLionel Sambuc} 72ebfedea0SLionel Sambuc 73ebfedea0SLionel Sambuc# The "IMPORTS" environment variable must be set and point to the location 74ebfedea0SLionel Sambuc# where import files (*.imp) can be found. 75ebfedea0SLionel Sambuc# Example: set IMPORTS=c:\ndk\nwsdk\imports 76ebfedea0SLionel Sambuc$import_path = $ENV{"IMPORTS"} || die ("IMPORTS environment variable not set\n"); 77ebfedea0SLionel Sambuc 78ebfedea0SLionel Sambuc 79ebfedea0SLionel Sambuc# The "PRELUDE" environment variable must be set and point to the location 80ebfedea0SLionel Sambuc# and name of the prelude source to link with ( nwpre.obj is recommended ). 81ebfedea0SLionel Sambuc# Example: set PRELUDE=c:\codewar\novell support\metrowerks support\libraries\runtime\nwpre.obj 82ebfedea0SLionel Sambuc$prelude = $ENV{"PRELUDE"} || die ("PRELUDE environment variable not set\n"); 83ebfedea0SLionel Sambuc 84ebfedea0SLionel Sambuc# The "INCLUDES" environment variable must be set and point to the location 85ebfedea0SLionel Sambuc# where import files (*.imp) can be found. 86ebfedea0SLionel Sambuc$include_path = $ENV{"INCLUDE"} || die ("INCLUDES environment variable not set\n"); 87ebfedea0SLionel Sambuc$include_path =~ s/\\/\//g; 88ebfedea0SLionel Sambuc$include_path = join(" -I", split(/;/, $include_path)); 89ebfedea0SLionel Sambuc 90ebfedea0SLionel Sambuc# check for gcc compiler 91ebfedea0SLionel Sambuc$gnuc = $ENV{"GNUC"}; 92ebfedea0SLionel Sambuc 93ebfedea0SLionel Sambuc#$ssl= "ssleay32"; 94ebfedea0SLionel Sambuc#$crypto="libeay32"; 95ebfedea0SLionel Sambuc 96ebfedea0SLionel Sambucif ($gnuc) 97ebfedea0SLionel Sambuc{ 98ebfedea0SLionel Sambuc # C compiler 99ebfedea0SLionel Sambuc $cc='gcc'; 100ebfedea0SLionel Sambuc # Linker 101ebfedea0SLionel Sambuc $link='nlmconv'; 102ebfedea0SLionel Sambuc # librarian 103ebfedea0SLionel Sambuc $mklib='ar'; 104ebfedea0SLionel Sambuc $o='/'; 105ebfedea0SLionel Sambuc # cp command 106ebfedea0SLionel Sambuc $cp='cp -af'; 107ebfedea0SLionel Sambuc # rm command 108ebfedea0SLionel Sambuc $rm='rm -f'; 109ebfedea0SLionel Sambuc # mv command 110ebfedea0SLionel Sambuc $mv='mv -f'; 111ebfedea0SLionel Sambuc # mkdir command 112ebfedea0SLionel Sambuc $mkdir='gmkdir'; 113ebfedea0SLionel Sambuc #$ranlib='ranlib'; 114ebfedea0SLionel Sambuc} 115ebfedea0SLionel Sambucelse 116ebfedea0SLionel Sambuc{ 117ebfedea0SLionel Sambuc # C compiler 118ebfedea0SLionel Sambuc $cc='mwccnlm'; 119ebfedea0SLionel Sambuc # Linker 120ebfedea0SLionel Sambuc $link='mwldnlm'; 121ebfedea0SLionel Sambuc # librarian 122ebfedea0SLionel Sambuc $mklib='mwldnlm'; 123ebfedea0SLionel Sambuc # Path separator 124ebfedea0SLionel Sambuc $o='\\'; 125ebfedea0SLionel Sambuc # cp command 126ebfedea0SLionel Sambuc $cp='copy >nul:'; 127ebfedea0SLionel Sambuc # rm command 128ebfedea0SLionel Sambuc $rm='del /f /q'; 129ebfedea0SLionel Sambuc} 130ebfedea0SLionel Sambuc 131ebfedea0SLionel Sambuc# assembler 132ebfedea0SLionel Sambucif ($nw_nasm) 133ebfedea0SLionel Sambuc{ 134ebfedea0SLionel Sambuc $asm=(`nasm -v 2>NUL` gt `nasmw -v 2>NUL`?"nasm":"nasmw"); 135ebfedea0SLionel Sambuc if ($gnuc) 136ebfedea0SLionel Sambuc { 137ebfedea0SLionel Sambuc $asm.=" -s -f elf"; 138ebfedea0SLionel Sambuc } 139ebfedea0SLionel Sambuc else 140ebfedea0SLionel Sambuc { 141ebfedea0SLionel Sambuc $asm.=" -s -f coff -d __coff__"; 142ebfedea0SLionel Sambuc } 143ebfedea0SLionel Sambuc $afile="-o "; 144ebfedea0SLionel Sambuc $asm.=" -g" if $debug; 145ebfedea0SLionel Sambuc} 146ebfedea0SLionel Sambucelsif ($nw_mwasm) 147ebfedea0SLionel Sambuc{ 148ebfedea0SLionel Sambuc $asm="mwasmnlm -maxerrors 20"; 149ebfedea0SLionel Sambuc $afile="-o "; 150ebfedea0SLionel Sambuc $asm.=" -g" if $debug; 151ebfedea0SLionel Sambuc} 152ebfedea0SLionel Sambucelsif ($nw_masm) 153ebfedea0SLionel Sambuc{ 154ebfedea0SLionel Sambuc# masm assembly settings - it should be possible to use masm but haven't 155ebfedea0SLionel Sambuc# got it working. 156ebfedea0SLionel Sambuc# $asm='ml /Cp /coff /c /Cx'; 157ebfedea0SLionel Sambuc# $asm.=" /Zi" if $debug; 158ebfedea0SLionel Sambuc# $afile='/Fo'; 159ebfedea0SLionel Sambuc die("Support for masm assembler not yet functional\n"); 160ebfedea0SLionel Sambuc} 161ebfedea0SLionel Sambucelse 162ebfedea0SLionel Sambuc{ 163ebfedea0SLionel Sambuc $asm=""; 164ebfedea0SLionel Sambuc $afile=""; 165ebfedea0SLionel Sambuc} 166ebfedea0SLionel Sambuc 167ebfedea0SLionel Sambuc 168ebfedea0SLionel Sambuc 169ebfedea0SLionel Sambucif ($gnuc) 170ebfedea0SLionel Sambuc{ 171ebfedea0SLionel Sambuc # compile flags for GNUC 172ebfedea0SLionel Sambuc # additional flags based upon debug | non-debug 173ebfedea0SLionel Sambuc if ($debug) 174ebfedea0SLionel Sambuc { 175ebfedea0SLionel Sambuc $cflags="-g -DDEBUG"; 176ebfedea0SLionel Sambuc } 177ebfedea0SLionel Sambuc else 178ebfedea0SLionel Sambuc { 179ebfedea0SLionel Sambuc $cflags="-O2"; 180ebfedea0SLionel Sambuc } 181ebfedea0SLionel Sambuc $cflags.=" -nostdinc -I$include_path \\ 182ebfedea0SLionel Sambuc -fno-builtin -fpcc-struct-return -fno-strict-aliasing \\ 183ebfedea0SLionel Sambuc -funsigned-char -Wall -Wno-unused -Wno-uninitialized"; 184ebfedea0SLionel Sambuc 185ebfedea0SLionel Sambuc # link flags 186ebfedea0SLionel Sambuc $lflags="-T"; 187ebfedea0SLionel Sambuc} 188ebfedea0SLionel Sambucelse 189ebfedea0SLionel Sambuc{ 190ebfedea0SLionel Sambuc # compile flags for CodeWarrior 191ebfedea0SLionel Sambuc # additional flags based upon debug | non-debug 192ebfedea0SLionel Sambuc if ($debug) 193ebfedea0SLionel Sambuc { 194ebfedea0SLionel Sambuc $cflags="-opt off -g -sym internal -DDEBUG"; 195ebfedea0SLionel Sambuc } 196ebfedea0SLionel Sambuc else 197ebfedea0SLionel Sambuc { 198ebfedea0SLionel Sambuc # CodeWarrior compiler has a problem with optimizations for floating 199ebfedea0SLionel Sambuc # points - no optimizations until further investigation 200ebfedea0SLionel Sambuc # $cflags="-opt all"; 201ebfedea0SLionel Sambuc } 202ebfedea0SLionel Sambuc 203ebfedea0SLionel Sambuc # NOTES: Several c files in the crypto subdirectory include headers from 204ebfedea0SLionel Sambuc # their local directories. Metrowerks wouldn't find these h files 205ebfedea0SLionel Sambuc # without adding individual include directives as compile flags 206ebfedea0SLionel Sambuc # or modifying the c files. Instead of adding individual include 207ebfedea0SLionel Sambuc # paths for each subdirectory a recursive include directive 208ebfedea0SLionel Sambuc # is used ( -ir crypto ). 209ebfedea0SLionel Sambuc # 210ebfedea0SLionel Sambuc # A similar issue exists for the engines and apps subdirectories. 211ebfedea0SLionel Sambuc # 212ebfedea0SLionel Sambuc # Turned off the "possible" warnings ( -w nopossible ). Metrowerks 213ebfedea0SLionel Sambuc # complained a lot about various stuff. May want to turn back 214ebfedea0SLionel Sambuc # on for further development. 215*0a6a1f1dSLionel Sambuc $cflags.=" -nostdinc -ir crypto -ir ssl -ir engines -ir apps -I$include_path \\ 216ebfedea0SLionel Sambuc -msgstyle gcc -align 4 -processor pentium -char unsigned \\ 217ebfedea0SLionel Sambuc -w on -w nolargeargs -w nopossible -w nounusedarg -w nounusedexpr \\ 218ebfedea0SLionel Sambuc -w noimplicitconv -relax_pointers -nosyspath -maxerrors 20"; 219ebfedea0SLionel Sambuc 220ebfedea0SLionel Sambuc # link flags 221ebfedea0SLionel Sambuc $lflags="-msgstyle gcc -zerobss -nostdlib -sym internal -commandfile"; 222ebfedea0SLionel Sambuc} 223ebfedea0SLionel Sambuc 224ebfedea0SLionel Sambuc# common defines 225ebfedea0SLionel Sambuc$cflags.=" -DL_ENDIAN -DOPENSSL_SYSNAME_NETWARE -U_WIN32"; 226ebfedea0SLionel Sambuc 227ebfedea0SLionel Sambuc# If LibC build add in NKS_LIBC define and set the entry/exit 228ebfedea0SLionel Sambuc# routines - The default entry/exit routines are for CLib and don't exist 229ebfedea0SLionel Sambuc# in LibC 230ebfedea0SLionel Sambucif ($LIBC) 231ebfedea0SLionel Sambuc{ 232ebfedea0SLionel Sambuc $cflags.=" -DNETWARE_LIBC"; 233ebfedea0SLionel Sambuc $nlmstart = "_LibCPrelude"; 234ebfedea0SLionel Sambuc $nlmexit = "_LibCPostlude"; 235ebfedea0SLionel Sambuc @nlm_flags = ("pseudopreemption", "flag_on 64"); 236ebfedea0SLionel Sambuc} 237ebfedea0SLionel Sambucelse 238ebfedea0SLionel Sambuc{ 239ebfedea0SLionel Sambuc $cflags.=" -DNETWARE_CLIB"; 240ebfedea0SLionel Sambuc $nlmstart = "_Prelude"; 241ebfedea0SLionel Sambuc $nlmexit = "_Stop"; 242ebfedea0SLionel Sambuc} 243ebfedea0SLionel Sambuc 244ebfedea0SLionel Sambuc# If BSD Socket support is requested, set a define for the compiler 245ebfedea0SLionel Sambucif ($BSDSOCK) 246ebfedea0SLionel Sambuc{ 247ebfedea0SLionel Sambuc $cflags.=" -DNETWARE_BSDSOCK"; 248ebfedea0SLionel Sambuc if (!$LIBC) 249ebfedea0SLionel Sambuc { 250ebfedea0SLionel Sambuc $cflags.=" -DNETDB_USE_INTERNET"; 251ebfedea0SLionel Sambuc } 252ebfedea0SLionel Sambuc} 253ebfedea0SLionel Sambuc 254ebfedea0SLionel Sambuc 255ebfedea0SLionel Sambuc# linking stuff 256ebfedea0SLionel Sambuc# for the output directories use the mk1mf.pl values with "_nw" appended 257ebfedea0SLionel Sambucif ($shlib) 258ebfedea0SLionel Sambuc{ 259ebfedea0SLionel Sambuc if ($LIBC) 260ebfedea0SLionel Sambuc { 261ebfedea0SLionel Sambuc $out_def.="_nw_libc_nlm"; 262ebfedea0SLionel Sambuc $tmp_def.="_nw_libc_nlm"; 263ebfedea0SLionel Sambuc $inc_def.="_nw_libc_nlm"; 264ebfedea0SLionel Sambuc } 265ebfedea0SLionel Sambuc else # NETWARE_CLIB 266ebfedea0SLionel Sambuc { 267ebfedea0SLionel Sambuc $out_def.="_nw_clib_nlm"; 268ebfedea0SLionel Sambuc $tmp_def.="_nw_clib_nlm"; 269ebfedea0SLionel Sambuc $inc_def.="_nw_clib_nlm"; 270ebfedea0SLionel Sambuc } 271ebfedea0SLionel Sambuc} 272ebfedea0SLionel Sambucelse 273ebfedea0SLionel Sambuc{ 274ebfedea0SLionel Sambuc if ($gnuc) # GNUC Tools 275ebfedea0SLionel Sambuc { 276ebfedea0SLionel Sambuc $libp=".a"; 277ebfedea0SLionel Sambuc $shlibp=".a"; 278ebfedea0SLionel Sambuc $lib_flags="-cr"; 279ebfedea0SLionel Sambuc } 280ebfedea0SLionel Sambuc else # CodeWarrior 281ebfedea0SLionel Sambuc { 282ebfedea0SLionel Sambuc $libp=".lib"; 283ebfedea0SLionel Sambuc $shlibp=".lib"; 284ebfedea0SLionel Sambuc $lib_flags="-nodefaults -type library -o"; 285ebfedea0SLionel Sambuc } 286ebfedea0SLionel Sambuc if ($LIBC) 287ebfedea0SLionel Sambuc { 288ebfedea0SLionel Sambuc $out_def.="_nw_libc"; 289ebfedea0SLionel Sambuc $tmp_def.="_nw_libc"; 290ebfedea0SLionel Sambuc $inc_def.="_nw_libc"; 291ebfedea0SLionel Sambuc } 292ebfedea0SLionel Sambuc else # NETWARE_CLIB 293ebfedea0SLionel Sambuc { 294ebfedea0SLionel Sambuc $out_def.="_nw_clib"; 295ebfedea0SLionel Sambuc $tmp_def.="_nw_clib"; 296ebfedea0SLionel Sambuc $inc_def.="_nw_clib"; 297ebfedea0SLionel Sambuc } 298ebfedea0SLionel Sambuc} 299ebfedea0SLionel Sambuc 300ebfedea0SLionel Sambuc# used by mk1mf.pl 301ebfedea0SLionel Sambuc$obj='.o'; 302ebfedea0SLionel Sambuc$ofile='-o '; 303ebfedea0SLionel Sambuc$efile=''; 304ebfedea0SLionel Sambuc$exep='.nlm'; 305ebfedea0SLionel Sambuc$ex_libs=''; 306ebfedea0SLionel Sambuc 307ebfedea0SLionel Sambucif (!$no_asm) 308ebfedea0SLionel Sambuc{ 309ebfedea0SLionel Sambuc $bn_asm_obj="\$(OBJ_D)${o}bn-nw${obj}"; 310ebfedea0SLionel Sambuc $bn_asm_src="crypto${o}bn${o}asm${o}bn-nw.asm"; 311ebfedea0SLionel Sambuc $bnco_asm_obj="\$(OBJ_D)${o}co-nw${obj}"; 312ebfedea0SLionel Sambuc $bnco_asm_src="crypto${o}bn${o}asm${o}co-nw.asm"; 313ebfedea0SLionel Sambuc $aes_asm_obj="\$(OBJ_D)${o}a-nw${obj}"; 314ebfedea0SLionel Sambuc $aes_asm_src="crypto${o}aes${o}asm${o}a-nw.asm"; 315ebfedea0SLionel Sambuc $des_enc_obj="\$(OBJ_D)${o}d-nw${obj} \$(OBJ_D)${o}y-nw${obj}"; 316ebfedea0SLionel Sambuc $des_enc_src="crypto${o}des${o}asm${o}d-nw.asm crypto${o}des${o}asm${o}y-nw.asm"; 317ebfedea0SLionel Sambuc $bf_enc_obj="\$(OBJ_D)${o}b-nw${obj}"; 318ebfedea0SLionel Sambuc $bf_enc_src="crypto${o}bf${o}asm${o}b-nw.asm"; 319ebfedea0SLionel Sambuc $cast_enc_obj="\$(OBJ_D)${o}c-nw${obj}"; 320ebfedea0SLionel Sambuc $cast_enc_src="crypto${o}cast${o}asm${o}c-nw.asm"; 321ebfedea0SLionel Sambuc $rc4_enc_obj="\$(OBJ_D)${o}r4-nw${obj}"; 322ebfedea0SLionel Sambuc $rc4_enc_src="crypto${o}rc4${o}asm${o}r4-nw.asm"; 323ebfedea0SLionel Sambuc $rc5_enc_obj="\$(OBJ_D)${o}r5-nw${obj}"; 324ebfedea0SLionel Sambuc $rc5_enc_src="crypto${o}rc5${o}asm${o}r5-nw.asm"; 325ebfedea0SLionel Sambuc $md5_asm_obj="\$(OBJ_D)${o}m5-nw${obj}"; 326ebfedea0SLionel Sambuc $md5_asm_src="crypto${o}md5${o}asm${o}m5-nw.asm"; 327ebfedea0SLionel Sambuc $sha1_asm_obj="\$(OBJ_D)${o}s1-nw${obj} \$(OBJ_D)${o}sha256-nw${obj} \$(OBJ_D)${o}sha512-nw${obj}"; 328ebfedea0SLionel Sambuc $sha1_asm_src="crypto${o}sha${o}asm${o}s1-nw.asm crypto${o}sha${o}asm${o}sha256-nw.asm crypto${o}sha${o}asm${o}sha512-nw.asm"; 329ebfedea0SLionel Sambuc $rmd160_asm_obj="\$(OBJ_D)${o}rm-nw${obj}"; 330ebfedea0SLionel Sambuc $rmd160_asm_src="crypto${o}ripemd${o}asm${o}rm-nw.asm"; 331ebfedea0SLionel Sambuc $whirlpool_asm_obj="\$(OBJ_D)${o}wp-nw${obj}"; 332ebfedea0SLionel Sambuc $whirlpool_asm_src="crypto${o}whrlpool${o}asm${o}wp-nw.asm"; 333ebfedea0SLionel Sambuc $cpuid_asm_obj="\$(OBJ_D)${o}x86cpuid-nw${obj}"; 334ebfedea0SLionel Sambuc $cpuid_asm_src="crypto${o}x86cpuid-nw.asm"; 335ebfedea0SLionel Sambuc $cflags.=" -DOPENSSL_CPUID_OBJ -DBN_ASM -DOPENSSL_BN_ASM_PART_WORDS -DMD5_ASM -DWHIRLPOOL_ASM"; 336ebfedea0SLionel Sambuc $cflags.=" -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM"; 337ebfedea0SLionel Sambuc $cflags.=" -DAES_ASM -DRMD160_ASM"; 338ebfedea0SLionel Sambuc} 339ebfedea0SLionel Sambucelse 340ebfedea0SLionel Sambuc{ 341ebfedea0SLionel Sambuc $bn_asm_obj=''; 342ebfedea0SLionel Sambuc $bn_asm_src=''; 343ebfedea0SLionel Sambuc $bnco_asm_obj=''; 344ebfedea0SLionel Sambuc $bnco_asm_src=''; 345ebfedea0SLionel Sambuc $aes_asm_obj=''; 346ebfedea0SLionel Sambuc $aes_asm_src=''; 347ebfedea0SLionel Sambuc $des_enc_obj=''; 348ebfedea0SLionel Sambuc $des_enc_src=''; 349ebfedea0SLionel Sambuc $bf_enc_obj=''; 350ebfedea0SLionel Sambuc $bf_enc_src=''; 351ebfedea0SLionel Sambuc $cast_enc_obj=''; 352ebfedea0SLionel Sambuc $cast_enc_src=''; 353ebfedea0SLionel Sambuc $rc4_enc_obj=''; 354ebfedea0SLionel Sambuc $rc4_enc_src=''; 355ebfedea0SLionel Sambuc $rc5_enc_obj=''; 356ebfedea0SLionel Sambuc $rc5_enc_src=''; 357ebfedea0SLionel Sambuc $md5_asm_obj=''; 358ebfedea0SLionel Sambuc $md5_asm_src=''; 359ebfedea0SLionel Sambuc $sha1_asm_obj=''; 360ebfedea0SLionel Sambuc $sha1_asm_src=''; 361ebfedea0SLionel Sambuc $rmd160_asm_obj=''; 362ebfedea0SLionel Sambuc $rmd160_asm_src=''; 363ebfedea0SLionel Sambuc $whirlpool_asm_obj=''; 364ebfedea0SLionel Sambuc $whirlpool_asm_src=''; 365ebfedea0SLionel Sambuc $cpuid_asm_obj=''; 366ebfedea0SLionel Sambuc $cpuid_asm_src=''; 367ebfedea0SLionel Sambuc} 368ebfedea0SLionel Sambuc 369ebfedea0SLionel Sambuc# create the *.def linker command files in \openssl\netware\ directory 370ebfedea0SLionel Sambucsub do_def_file 371ebfedea0SLionel Sambuc{ 372ebfedea0SLionel Sambuc # strip off the leading path 373ebfedea0SLionel Sambuc my($target) = bname(shift); 374ebfedea0SLionel Sambuc my($i); 375ebfedea0SLionel Sambuc 376ebfedea0SLionel Sambuc if ($target =~ /(.*).nlm/) 377ebfedea0SLionel Sambuc { 378ebfedea0SLionel Sambuc $target = $1; 379ebfedea0SLionel Sambuc } 380ebfedea0SLionel Sambuc 381ebfedea0SLionel Sambuc # special case for openssl - the mk1mf.pl defines E_EXE = openssl 382ebfedea0SLionel Sambuc if ($target =~ /E_EXE/) 383ebfedea0SLionel Sambuc { 384ebfedea0SLionel Sambuc $target =~ s/\$\(E_EXE\)/openssl/; 385ebfedea0SLionel Sambuc } 386ebfedea0SLionel Sambuc 387ebfedea0SLionel Sambuc # Note: originally tried to use full path ( \openssl\netware\$target.def ) 388ebfedea0SLionel Sambuc # Metrowerks linker choked on this with an assertion failure. bug??? 389ebfedea0SLionel Sambuc # 390ebfedea0SLionel Sambuc my($def_file) = "netware${o}$target.def"; 391ebfedea0SLionel Sambuc 392ebfedea0SLionel Sambuc open(DEF_OUT, ">$def_file") || die("unable to open file $def_file\n"); 393ebfedea0SLionel Sambuc 394ebfedea0SLionel Sambuc print( DEF_OUT "# command file generated by netware.pl for NLM target.\n" ); 395ebfedea0SLionel Sambuc print( DEF_OUT "# do not edit this file - all your changes will be lost!!\n" ); 396ebfedea0SLionel Sambuc print( DEF_OUT "#\n"); 397ebfedea0SLionel Sambuc print( DEF_OUT "DESCRIPTION \"$target ($libarch) - OpenSSL $nlmverstr\"\n"); 398ebfedea0SLionel Sambuc print( DEF_OUT "COPYRIGHT \"$nlmcpystr\"\n"); 399ebfedea0SLionel Sambuc print( DEF_OUT "VERSION $nlmvernum\n"); 400ebfedea0SLionel Sambuc print( DEF_OUT "STACK $nlmstack\n"); 401ebfedea0SLionel Sambuc print( DEF_OUT "START $nlmstart\n"); 402ebfedea0SLionel Sambuc print( DEF_OUT "EXIT $nlmexit\n"); 403ebfedea0SLionel Sambuc 404ebfedea0SLionel Sambuc # special case for openssl 405ebfedea0SLionel Sambuc if ($target eq "openssl") 406ebfedea0SLionel Sambuc { 407ebfedea0SLionel Sambuc print( DEF_OUT "SCREENNAME \"OpenSSL $nlmverstr\"\n"); 408ebfedea0SLionel Sambuc } 409ebfedea0SLionel Sambuc else 410ebfedea0SLionel Sambuc { 411ebfedea0SLionel Sambuc print( DEF_OUT "SCREENNAME \"DEFAULT\"\n"); 412ebfedea0SLionel Sambuc } 413ebfedea0SLionel Sambuc 414ebfedea0SLionel Sambuc foreach $i (@misc_imports) 415ebfedea0SLionel Sambuc { 416ebfedea0SLionel Sambuc print( DEF_OUT "IMPORT $i\n"); 417ebfedea0SLionel Sambuc } 418ebfedea0SLionel Sambuc 419ebfedea0SLionel Sambuc foreach $i (@import_files) 420ebfedea0SLionel Sambuc { 421ebfedea0SLionel Sambuc print( DEF_OUT "IMPORT \@$import_path${o}$i\n"); 422ebfedea0SLionel Sambuc } 423ebfedea0SLionel Sambuc 424ebfedea0SLionel Sambuc foreach $i (@module_files) 425ebfedea0SLionel Sambuc { 426ebfedea0SLionel Sambuc print( DEF_OUT "MODULE $i\n"); 427ebfedea0SLionel Sambuc } 428ebfedea0SLionel Sambuc 429ebfedea0SLionel Sambuc foreach $i (@nlm_flags) 430ebfedea0SLionel Sambuc { 431ebfedea0SLionel Sambuc print( DEF_OUT "$i\n"); 432ebfedea0SLionel Sambuc } 433ebfedea0SLionel Sambuc 434ebfedea0SLionel Sambuc if ($gnuc) 435ebfedea0SLionel Sambuc { 436ebfedea0SLionel Sambuc if ($target =~ /openssl/) 437ebfedea0SLionel Sambuc { 438ebfedea0SLionel Sambuc print( DEF_OUT "INPUT ${tmp_def}${o}openssl${obj}\n"); 439ebfedea0SLionel Sambuc print( DEF_OUT "INPUT ${tmp_def}${o}openssl${libp}\n"); 440ebfedea0SLionel Sambuc } 441ebfedea0SLionel Sambuc else 442ebfedea0SLionel Sambuc { 443ebfedea0SLionel Sambuc print( DEF_OUT "INPUT ${tmp_def}${o}${target}${obj}\n"); 444ebfedea0SLionel Sambuc } 445ebfedea0SLionel Sambuc print( DEF_OUT "INPUT $prelude\n"); 446ebfedea0SLionel Sambuc print( DEF_OUT "INPUT ${out_def}${o}${ssl}${libp} ${out_def}${o}${crypto}${libp}\n"); 447ebfedea0SLionel Sambuc print( DEF_OUT "OUTPUT $target.nlm\n"); 448ebfedea0SLionel Sambuc } 449ebfedea0SLionel Sambuc 450ebfedea0SLionel Sambuc close(DEF_OUT); 451ebfedea0SLionel Sambuc return($def_file); 452ebfedea0SLionel Sambuc} 453ebfedea0SLionel Sambuc 454ebfedea0SLionel Sambucsub do_lib_rule 455ebfedea0SLionel Sambuc{ 456ebfedea0SLionel Sambuc my($objs,$target,$name,$shlib)=@_; 457ebfedea0SLionel Sambuc my($ret); 458ebfedea0SLionel Sambuc 459ebfedea0SLionel Sambuc $ret.="$target: $objs\n"; 460ebfedea0SLionel Sambuc if (!$shlib) 461ebfedea0SLionel Sambuc { 462ebfedea0SLionel Sambuc $ret.="\t\@echo Building Lib: $name\n"; 463ebfedea0SLionel Sambuc $ret.="\t\$(MKLIB) $lib_flags $target $objs\n"; 464ebfedea0SLionel Sambuc $ret.="\t\@echo .\n" 465ebfedea0SLionel Sambuc } 466ebfedea0SLionel Sambuc else 467ebfedea0SLionel Sambuc { 468ebfedea0SLionel Sambuc die( "Building as NLM not currently supported!" ); 469ebfedea0SLionel Sambuc } 470ebfedea0SLionel Sambuc 471ebfedea0SLionel Sambuc $ret.="\n"; 472ebfedea0SLionel Sambuc return($ret); 473ebfedea0SLionel Sambuc} 474ebfedea0SLionel Sambuc 475ebfedea0SLionel Sambucsub do_link_rule 476ebfedea0SLionel Sambuc{ 477ebfedea0SLionel Sambuc my($target,$files,$dep_libs,$libs)=@_; 478ebfedea0SLionel Sambuc my($ret); 479ebfedea0SLionel Sambuc my($def_file) = do_def_file($target); 480ebfedea0SLionel Sambuc 481ebfedea0SLionel Sambuc $ret.="$target: $files $dep_libs\n"; 482ebfedea0SLionel Sambuc 483ebfedea0SLionel Sambuc # NOTE: When building the test nlms no screen name is given 484ebfedea0SLionel Sambuc # which causes the console screen to be used. By using the console 485ebfedea0SLionel Sambuc # screen there is no "<press any key to continue>" message which 486ebfedea0SLionel Sambuc # requires user interaction. The test script ( do_tests.pl ) needs 487ebfedea0SLionel Sambuc # to be able to run the tests without requiring user interaction. 488ebfedea0SLionel Sambuc # 489ebfedea0SLionel Sambuc # However, the sample program "openssl.nlm" is used by the tests and is 490ebfedea0SLionel Sambuc # a interactive sample so a screen is desired when not be run by the 491ebfedea0SLionel Sambuc # tests. To solve the problem, two versions of the program are built: 492ebfedea0SLionel Sambuc # openssl2 - no screen used by tests 493ebfedea0SLionel Sambuc # openssl - default screen - use for normal interactive modes 494ebfedea0SLionel Sambuc # 495ebfedea0SLionel Sambuc 496ebfedea0SLionel Sambuc # special case for openssl - the mk1mf.pl defines E_EXE = openssl 497ebfedea0SLionel Sambuc if ($target =~ /E_EXE/) 498ebfedea0SLionel Sambuc { 499ebfedea0SLionel Sambuc my($target2) = $target; 500ebfedea0SLionel Sambuc 501ebfedea0SLionel Sambuc $target2 =~ s/\(E_EXE\)/\(E_EXE\)2/; 502ebfedea0SLionel Sambuc 503ebfedea0SLionel Sambuc # openssl2 504ebfedea0SLionel Sambuc my($def_file2) = do_def_file($target2); 505ebfedea0SLionel Sambuc 506ebfedea0SLionel Sambuc if ($gnuc) 507ebfedea0SLionel Sambuc { 508ebfedea0SLionel Sambuc $ret.="\t\$(MKLIB) $lib_flags \$(TMP_D)${o}\$(E_EXE).a \$(filter-out \$(TMP_D)${o}\$(E_EXE)${obj},$files)\n"; 509ebfedea0SLionel Sambuc $ret.="\t\$(LINK) \$(LFLAGS) $def_file2\n"; 510ebfedea0SLionel Sambuc $ret.="\t\@$mv \$(E_EXE)2.nlm \$(TEST_D)\n"; 511ebfedea0SLionel Sambuc } 512ebfedea0SLionel Sambuc else 513ebfedea0SLionel Sambuc { 514ebfedea0SLionel Sambuc $ret.="\t\$(LINK) \$(LFLAGS) $def_file2 $files \"$prelude\" $libs -o $target2\n"; 515ebfedea0SLionel Sambuc } 516ebfedea0SLionel Sambuc } 517ebfedea0SLionel Sambuc if ($gnuc) 518ebfedea0SLionel Sambuc { 519ebfedea0SLionel Sambuc $ret.="\t\$(LINK) \$(LFLAGS) $def_file\n"; 520ebfedea0SLionel Sambuc $ret.="\t\@$mv \$(\@F) \$(TEST_D)\n"; 521ebfedea0SLionel Sambuc } 522ebfedea0SLionel Sambuc else 523ebfedea0SLionel Sambuc { 524ebfedea0SLionel Sambuc $ret.="\t\$(LINK) \$(LFLAGS) $def_file $files \"$prelude\" $libs -o $target\n"; 525ebfedea0SLionel Sambuc } 526ebfedea0SLionel Sambuc 527ebfedea0SLionel Sambuc $ret.="\n"; 528ebfedea0SLionel Sambuc return($ret); 529ebfedea0SLionel Sambuc 530ebfedea0SLionel Sambuc} 531ebfedea0SLionel Sambuc 532ebfedea0SLionel Sambuc1; 533