Unify VC-32.pl and VC-CE.pl scripts and update INSTALL.W32.
[openssl.git] / util / mk1mf.pl
index 51ffe07cfcb079ceae92a60e546e4aaf46d51a20..ca130b5d06ad0d4d83dd29c4d0edfa0ebe030494 100755 (executable)
@@ -18,33 +18,31 @@ while(<IN>) {
 }
 close(IN);
 
 }
 close(IN);
 
-die "Makefile.ssl is not the toplevel Makefile!\n" if $ssl_version eq "";
+die "Makefile is not the toplevel Makefile!\n" if $ssl_version eq "";
 
 $infile="MINFO";
 
 %ops=(
        "VC-WIN32",   "Microsoft Visual C++ [4-6] - Windows NT or 9X",
 
 $infile="MINFO";
 
 %ops=(
        "VC-WIN32",   "Microsoft Visual C++ [4-6] - Windows NT or 9X",
+       "VC-WIN64I",  "Microsoft C/C++ - Win64/IA-64",
+       "VC-WIN64A",  "Microsoft C/C++ - Win64/x64",
        "VC-CE",   "Microsoft eMbedded Visual C++ 3.0 - Windows CE ONLY",
        "VC-NT",   "Microsoft Visual C++ [4-6] - Windows NT ONLY",
        "VC-CE",   "Microsoft eMbedded Visual C++ 3.0 - Windows CE ONLY",
        "VC-NT",   "Microsoft Visual C++ [4-6] - Windows NT ONLY",
-       "VC-W31-16",  "Microsoft Visual C++ 1.52 - Windows 3.1 - 286",
-       "VC-WIN16",   "Alias for VC-W31-32",
-       "VC-W31-32",  "Microsoft Visual C++ 1.52 - Windows 3.1 - 386+",
-       "VC-MSDOS","Microsoft Visual C++ 1.52 - MSDOS",
        "Mingw32", "GNU C++ - Windows NT or 9x",
        "Mingw32-files", "Create files with DOS copy ...",
        "BC-NT",   "Borland C++ 4.5 - Windows NT",
        "Mingw32", "GNU C++ - Windows NT or 9x",
        "Mingw32-files", "Create files with DOS copy ...",
        "BC-NT",   "Borland C++ 4.5 - Windows NT",
-       "BC-W31",  "Borland C++ 4.5 - Windows 3.1 - PROBABLY NOT WORKING",
-       "BC-MSDOS","Borland C++ 4.5 - MSDOS",
        "linux-elf","Linux elf",
        "ultrix-mips","DEC mips ultrix",
        "FreeBSD","FreeBSD distribution",
        "OS2-EMX", "EMX GCC OS/2",
        "linux-elf","Linux elf",
        "ultrix-mips","DEC mips ultrix",
        "FreeBSD","FreeBSD distribution",
        "OS2-EMX", "EMX GCC OS/2",
-       "netware-clib", "CodeWarrior for NetWare - CLib",
-       "netware-libc", "CodeWarrior for NetWare - LibC",
+       "netware-clib", "CodeWarrior for NetWare - CLib - with WinSock Sockets",
+       "netware-libc", "CodeWarrior for NetWare - LibC - with WinSock Sockets",
+       "netware-libc-bsdsock", "CodeWarrior for NetWare - LibC - with BSD Sockets",
        "default","cc under unix",
        );
 
 $platform="";
        "default","cc under unix",
        );
 
 $platform="";
+my $xcflags="";
 foreach (@ARGV)
        {
        if (!&read_options && !defined($ops{$_}))
 foreach (@ARGV)
        {
        if (!&read_options && !defined($ops{$_}))
@@ -120,36 +118,16 @@ $bin_dir=(defined($VARS{'BIN'}))?$VARS{'BIN'}:'';
 
 # $bin_dir.=$o causes a core dump on my sparc :-(
 
 
 # $bin_dir.=$o causes a core dump on my sparc :-(
 
+
 $NT=0;
 
 push(@INC,"util/pl","pl");
 $NT=0;
 
 push(@INC,"util/pl","pl");
-if ($platform eq "VC-MSDOS")
-       {
-       $asmbits=16;
-       $msdos=1;
-       require 'VC-16.pl';
-       }
-elsif ($platform eq "VC-W31-16")
-       {
-       $asmbits=16;
-       $msdos=1; $win16=1;
-       require 'VC-16.pl';
-       }
-elsif (($platform eq "VC-W31-32") || ($platform eq "VC-WIN16"))
+if (($platform =~ /VC-(.+)/))
        {
        {
-       $asmbits=32;
-       $msdos=1; $win16=1;
-       require 'VC-16.pl';
-       }
-elsif (($platform eq "VC-WIN32") || ($platform eq "VC-NT"))
-       {
-       $NT = 1 if $platform eq "VC-NT";
+       $FLAVOR=$1;
+       $NT = 1 if $1 eq "NT";
        require 'VC-32.pl';
        }
        require 'VC-32.pl';
        }
-elsif ($platform eq "VC-CE")
-       {
-       require 'VC-CE.pl';
-       }
 elsif ($platform eq "Mingw32")
        {
        require 'Mingw32.pl';
 elsif ($platform eq "Mingw32")
        {
        require 'Mingw32.pl';
@@ -163,23 +141,6 @@ elsif ($platform eq "BC-NT")
        $bc=1;
        require 'BC-32.pl';
        }
        $bc=1;
        require 'BC-32.pl';
        }
-elsif ($platform eq "BC-W31")
-       {
-       $bc=1;
-       $msdos=1; $w16=1;
-       require 'BC-16.pl';
-       }
-elsif ($platform eq "BC-Q16")
-       {
-       $msdos=1; $w16=1; $shlib=0; $qw=1;
-       require 'BC-16.pl';
-       }
-elsif ($platform eq "BC-MSDOS")
-       {
-       $asmbits=16;
-       $msdos=1;
-       require 'BC-16.pl';
-       }
 elsif ($platform eq "FreeBSD")
        {
        require 'unix.pl';
 elsif ($platform eq "FreeBSD")
        {
        require 'unix.pl';
@@ -202,9 +163,11 @@ elsif ($platform eq "OS2-EMX")
        $wc=1;
        require 'OS2-EMX.pl';
        }
        $wc=1;
        require 'OS2-EMX.pl';
        }
-elsif (($platform eq "netware-clib") || ($platform eq "netware-libc"))
+elsif (($platform eq "netware-clib") || ($platform eq "netware-libc") ||
+       ($platform eq "netware-libc-bsdsock"))
        {
        {
-   $LIBC=1 if $platform eq "netware-libc";
+       $LIBC=1 if $platform eq "netware-libc" || $platform eq "netware-libc-bsdsock";
+       $BSDSOCK=1 if $platform eq "netware-libc-bsdsock";
        require 'netware.pl';
        }
 else
        require 'netware.pl';
        }
 else
@@ -221,6 +184,8 @@ $inc_dir=(defined($VARS{'INC'}))?$VARS{'INC'}:$inc_def;
 
 $bin_dir=$bin_dir.$o unless ((substr($bin_dir,-1,1) eq $o) || ($bin_dir eq ''));
 
 
 $bin_dir=$bin_dir.$o unless ((substr($bin_dir,-1,1) eq $o) || ($bin_dir eq ''));
 
+$cflags= "$xcflags$cflags" if $xcflags ne "";
+
 $cflags.=" -DOPENSSL_NO_IDEA" if $no_idea;
 $cflags.=" -DOPENSSL_NO_AES"  if $no_aes;
 $cflags.=" -DOPENSSL_NO_RC2"  if $no_rc2;
 $cflags.=" -DOPENSSL_NO_IDEA" if $no_idea;
 $cflags.=" -DOPENSSL_NO_AES"  if $no_aes;
 $cflags.=" -DOPENSSL_NO_RC2"  if $no_rc2;
@@ -274,6 +239,63 @@ $link="$bin_dir$link" if ($link !~ /^\$/);
 
 $INSTALLTOP =~ s|/|$o|g;
 
 
 $INSTALLTOP =~ s|/|$o|g;
 
+#############################################
+# We parse in input file and 'store' info for later printing.
+open(IN,"<$infile") || die "unable to open $infile:$!\n";
+$_=<IN>;
+for (;;)
+       {
+       chop;
+
+       ($key,$val)=/^([^=]+)=(.*)/;
+       if ($key eq "RELATIVE_DIRECTORY")
+               {
+               if ($lib ne "")
+                       {
+                       $uc=$lib;
+                       $uc =~ s/^lib(.*)\.a/$1/;
+                       $uc =~ tr/a-z/A-Z/;
+                       $lib_nam{$uc}=$uc;
+                       $lib_obj{$uc}.=$libobj." ";
+                       }
+               last if ($val eq "FINISHED");
+               $lib="";
+               $libobj="";
+               $dir=$val;
+               }
+
+       if ($key eq "KRB5_INCLUDES")
+               { $cflags .= " $val";}
+
+       if ($key eq "LIBKRB5")
+               { $ex_libs .= " $val";}
+
+       if ($key eq "TEST")
+               { $test.=&var_add($dir,$val); }
+
+       if (($key eq "PROGS") || ($key eq "E_OBJ"))
+               { $e_exe.=&var_add($dir,$val); }
+
+       if ($key eq "LIB")
+               {
+               $lib=$val;
+               $lib =~ s/^.*\/([^\/]+)$/$1/;
+               }
+
+       if ($key eq "EXHEADER")
+               { $exheader.=&var_add($dir,$val); }
+
+       if ($key eq "HEADER")
+               { $header.=&var_add($dir,$val); }
+
+       if ($key eq "LIBOBJ")
+               { $libobj=&var_add($dir,$val); }
+
+       if (!($_=<IN>))
+               { $_="RELATIVE_DIRECTORY=FINISHED\n"; }
+       }
+close(IN);
+
 $defs= <<"EOF";
 # This makefile has been automatically generated from the OpenSSL distribution.
 # This single makefile will build the complete OpenSSL distribution and
 $defs= <<"EOF";
 # This makefile has been automatically generated from the OpenSSL distribution.
 # This single makefile will build the complete OpenSSL distribution and
@@ -492,57 +514,6 @@ printf OUT "  #define DATE \"%s\"\n", scalar gmtime();
 printf OUT "#endif\n";
 close(OUT);
 
 printf OUT "#endif\n";
 close(OUT);
 
-#############################################
-# We parse in input file and 'store' info for later printing.
-open(IN,"<$infile") || die "unable to open $infile:$!\n";
-$_=<IN>;
-for (;;)
-       {
-       chop;
-
-       ($key,$val)=/^([^=]+)=(.*)/;
-       if ($key eq "RELATIVE_DIRECTORY")
-               {
-               if ($lib ne "")
-                       {
-                       $uc=$lib;
-                       $uc =~ s/^lib(.*)\.a/$1/;
-                       $uc =~ tr/a-z/A-Z/;
-                       $lib_nam{$uc}=$uc;
-                       $lib_obj{$uc}.=$libobj." ";
-                       }
-               last if ($val eq "FINISHED");
-               $lib="";
-               $libobj="";
-               $dir=$val;
-               }
-
-       if ($key eq "TEST")
-               { $test.=&var_add($dir,$val); }
-
-       if (($key eq "PROGS") || ($key eq "E_OBJ"))
-               { $e_exe.=&var_add($dir,$val); }
-
-       if ($key eq "LIB")
-               {
-               $lib=$val;
-               $lib =~ s/^.*\/([^\/]+)$/$1/;
-               }
-
-       if ($key eq "EXHEADER")
-               { $exheader.=&var_add($dir,$val); }
-
-       if ($key eq "HEADER")
-               { $header.=&var_add($dir,$val); }
-
-       if ($key eq "LIBOBJ")
-               { $libobj=&var_add($dir,$val); }
-
-       if (!($_=<IN>))
-               { $_="RELATIVE_DIRECTORY=FINISHED\n"; }
-       }
-close(IN);
-
 # Strip of trailing ' '
 foreach (keys %lib_obj) { $lib_obj{$_}=&clean_up_ws($lib_obj{$_}); }
 $test=&clean_up_ws($test);
 # Strip of trailing ' '
 foreach (keys %lib_obj) { $lib_obj{$_}=&clean_up_ws($lib_obj{$_}); }
 $test=&clean_up_ws($test);
@@ -665,7 +636,7 @@ if ($platform eq "linux-elf") {
     print <<"EOF";
 # Generate perlasm output files
 %.cpp:
     print <<"EOF";
 # Generate perlasm output files
 %.cpp:
-       (cd \$(\@D)/..; PERL=perl make -f Makefile.ssl asm/\$(\@F))
+       (cd \$(\@D)/..; PERL=perl make -f Makefile asm/\$(\@F))
 EOF
 }
 print "###################################################################\n";
 EOF
 }
 print "###################################################################\n";
@@ -969,7 +940,7 @@ sub read_options
                "debug" => \$debug,
                "profile" => \$profile,
                "shlib" => \$shlib,
                "debug" => \$debug,
                "profile" => \$profile,
                "shlib" => \$shlib,
-               "dll" => \$dll,
+               "dll" => \$shlib,
                "shared" => 0,
                "no-gmp" => 0,
                "no-shared" => 0,
                "shared" => 0,
                "no-gmp" => 0,
                "no-shared" => 0,
@@ -991,6 +962,11 @@ sub read_options
                                }
                        }
                }
                                }
                        }
                }
+       elsif (/^enable-zlib$/) { $xcflags = "-DZLIB $xcflags"; }
+       elsif (/^enable-zlib-dynamic$/)
+               {
+               $xcflags = "-DZLIB_SHARED -DZLIB $xcflags";
+               }
        # There are also enable-xxx options which correspond to
        # the no-xxx. Since the scalars are enabled by default
        # these can be ignored.
        # There are also enable-xxx options which correspond to
        # the no-xxx. Since the scalars are enabled by default
        # these can be ignored.
@@ -1002,6 +978,22 @@ sub read_options
                        {return 1;}
                return 0;
                }
                        {return 1;}
                return 0;
                }
+       elsif (/^--with-krb5-flavor=(.*)$/)
+               {
+               my $krb5_flavor = $1;
+               if ($krb5_flavor =~ /^force-[Hh]eimdal$/)
+                       {
+                       $xcflags="-DKRB5_HEIMDAL $xcflags";
+                       }
+               elsif ($krb5_flavor =~ /^MIT/i)
+                       {
+                       $xcflags="-DKRB5_MIT $xcflags";
+                       if ($krb5_flavor =~ /^MIT[._-]*1[._-]*[01]/i)
+                               {
+                               $xcflags="-DKRB5_MIT_OLD11 $xcflags"
+                               }
+                       }
+               }
        elsif (/^([^=]*)=(.*)$/){ $VARS{$1}=$2; }
        elsif (/^-[lL].*$/)     { $l_flags.="$_ "; }
        elsif ((!/^-help/) && (!/^-h/) && (!/^-\?/) && /^-.*$/)
        elsif (/^([^=]*)=(.*)$/){ $VARS{$1}=$2; }
        elsif (/^-[lL].*$/)     { $l_flags.="$_ "; }
        elsif ((!/^-help/) && (!/^-h/) && (!/^-\?/) && /^-.*$/)