1109998Smarkm#!/usr/local/bin/perl
2109998Smarkm#
3109998Smarkm# OS2-EMX.pl - for EMX GCC on OS/2
4109998Smarkm#
5109998Smarkm
6127128Snectar$o='/';
7127128Snectar$cp='cp';
8109998Smarkm$rm='rm -f';
9109998Smarkm
10127128Snectar$preamble = "SHELL=sh\n";
11127128Snectar
12109998Smarkm# C compiler stuff
13109998Smarkm
14109998Smarkm$cc='gcc';
15109998Smarkm$cflags="-DL_ENDIAN -O3 -fomit-frame-pointer -m486 -Zmtd -Wall ";
16109998Smarkm$cflags.="-Zomf " if $shlib;
17109998Smarkm$shl_cflag="-Zdll";
18109998Smarkm
19109998Smarkmif ($debug) {
20109998Smarkm	$cflags.="-g ";
21109998Smarkm}
22109998Smarkm
23109998Smarkm$obj=$shlib ? '.obj' : '.o';
24109998Smarkm$ofile='-o ';
25109998Smarkm
26109998Smarkm# EXE linking stuff
27109998Smarkm$link='${CC}';
28109998Smarkm$lflags='${CFLAGS} -Zbsd-signals -s';
29109998Smarkm$efile='-o ';
30109998Smarkm$exep='.exe';
31109998Smarkm$ex_libs="-lsocket";
32109998Smarkm
33109998Smarkm# static library stuff
34109998Smarkm$mklib='ar r';
35109998Smarkm$mlflags='';
36109998Smarkm$ranlib="ar s";
37109998Smarkm$plib='';
38109998Smarkm$libp=$shlib ? ".lib" : ".a";
39109998Smarkm$shlibp=$shlib ? ".dll" : ".a";
40109998Smarkm$lfile='';
41109998Smarkm
42109998Smarkm$asm=$shlib ? 'as -Zomf' : 'as';
43109998Smarkm$afile='-o ';
44109998Smarkm$bn_asm_obj="";
45109998Smarkm$bn_asm_src="";
46109998Smarkm$des_enc_obj="";
47109998Smarkm$des_enc_src="";
48109998Smarkm$bf_enc_obj="";
49109998Smarkm$bf_enc_src="";
50109998Smarkm
51160814Ssimonif (!$no_asm)
52109998Smarkm	{
53127128Snectar	$bn_asm_obj="crypto/bn/asm/bn-os2$obj crypto/bn/asm/co-os2$obj";
54127128Snectar	$bn_asm_src="crypto/bn/asm/bn-os2.asm crypto/bn/asm/co-os2.asm";
55127128Snectar	$des_enc_obj="crypto/des/asm/d-os2$obj crypto/des/asm/y-os2$obj";
56127128Snectar	$des_enc_src="crypto/des/asm/d-os2.asm crypto/des/asm/y-os2.asm";
57127128Snectar	$bf_enc_obj="crypto/bf/asm/b-os2$obj";
58127128Snectar	$bf_enc_src="crypto/bf/asm/b-os2.asm";
59127128Snectar	$cast_enc_obj="crypto/cast/asm/c-os2$obj";
60127128Snectar	$cast_enc_src="crypto/cast/asm/c-os2.asm";
61127128Snectar	$rc4_enc_obj="crypto/rc4/asm/r4-os2$obj";
62127128Snectar	$rc4_enc_src="crypto/rc4/asm/r4-os2.asm";
63127128Snectar	$rc5_enc_obj="crypto/rc5/asm/r5-os2$obj";
64127128Snectar	$rc5_enc_src="crypto/rc5/asm/r5-os2.asm";
65127128Snectar	$md5_asm_obj="crypto/md5/asm/m5-os2$obj";
66127128Snectar	$md5_asm_src="crypto/md5/asm/m5-os2.asm";
67127128Snectar	$sha1_asm_obj="crypto/sha/asm/s1-os2$obj";
68127128Snectar	$sha1_asm_src="crypto/sha/asm/s1-os2.asm";
69127128Snectar	$rmd160_asm_obj="crypto/ripemd/asm/rm-os2$obj";
70127128Snectar	$rmd160_asm_src="crypto/ripemd/asm/rm-os2.asm";
71160814Ssimon	$cflags.=" -DBN_ASM -DMD5_ASM -DSHA1_ASM -DOPENSSL_BN_ASM_PART_WORDS";
72109998Smarkm	}
73109998Smarkm
74109998Smarkmif ($shlib)
75109998Smarkm	{
76109998Smarkm	$mlflags.=" $lflags -Zdll";
77109998Smarkm	$lib_cflag=" -D_DLL";
78109998Smarkm	$out_def="out_dll";
79109998Smarkm	$tmp_def="tmp_dll";
80109998Smarkm	}
81109998Smarkm
82109998Smarkmsub do_lib_rule
83109998Smarkm	{
84109998Smarkm	local($obj,$target,$name,$shlib)=@_;
85109998Smarkm	local($ret,$_,$Name);
86109998Smarkm
87109998Smarkm	$target =~ s/\//$o/g if $o ne '/';
88109998Smarkm	$target="$target";
89109998Smarkm	($Name=$name) =~ tr/a-z/A-Z/;
90109998Smarkm
91109998Smarkm	$ret.="$target: \$(${Name}OBJ)\n";
92109998Smarkm	if (!$shlib)
93109998Smarkm		{
94109998Smarkm		$ret.="\t\$(RM) $target\n";
95109998Smarkm		$ret.="\t\$(MKLIB) $target \$(${Name}OBJ)\n";
96109998Smarkm		$ret.="\t\$(RANLIB) $target\n\n";
97109998Smarkm		}
98109998Smarkm	else
99109998Smarkm		{
100109998Smarkm		local($ex)=($target =~ /O_SSL/)?' $(L_CRYPTO)':'';
101109998Smarkm		$ex.=' -lsocket';
102296279Sjkim		$ret.="\t\$(LINK_CMD) \$(SHLIB_CFLAGS) \$(MLFLAGS) $efile$target \$(SHLIB_EX_OBJ) \$(${Name}OBJ) $ex os2/${Name}.def\n";
103109998Smarkm		$ret.="\temximp -o $out_def/$name.a os2/${Name}.def\n";
104109998Smarkm		$ret.="\temximp -o $out_def/$name.lib os2/${Name}.def\n\n";
105109998Smarkm		}
106109998Smarkm	}
107109998Smarkm
108109998Smarkmsub do_link_rule
109109998Smarkm	{
110160814Ssimon	local($target,$files,$dep_libs,$libs)=@_;
111109998Smarkm	local($ret,$_);
112109998Smarkm
113109998Smarkm	$file =~ s/\//$o/g if $o ne '/';
114109998Smarkm	$n=&bname($target);
115109998Smarkm	$ret.="$target: $files $dep_libs\n";
116296279Sjkim	$ret.="\t\$(LINK_CMD) ${efile}$target \$(CFLAG) \$(LFLAGS) $files $libs\n\n";
117109998Smarkm	return($ret);
118109998Smarkm	}
119109998Smarkm
120109998Smarkm1;
121