mirror of https://github.com/acidanthera/audk.git
CryptoPkg/OpensslLib: Add new Perl script for file list generation.
OpenSSL-1.1.0xx configure mechanism was updated with new configdata. This patch update process_file.sh script to new Perl-based script for auto generation of file list and openssl config file (opensslconf.h). This only needs to be done once by a developer when updating to a new version of OpenSSL (or changing options, etc.). Normal users do not need to do this, since the results are already stored in the EDK2 git repository. Cc: Ting Ye <ting.ye@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Gary Lin <glin@suse.com> Cc: Ronald Cron <ronald.cron@arm.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: David Woodhouse <dwmw2@infradead.org> Signed-off-by: Qin Long <qin.long@intel.com> Reviewed-by: Ting Ye <ting.ye@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
58ce70f7ed
commit
da9676f89c
|
@ -0,0 +1,223 @@
|
|||
#!/usr/bin/perl -w
|
||||
#
|
||||
# This script runs the OpenSSL Configure script, then processes the
|
||||
# resulting file list into our local OpensslLib[Crypto].inf and also
|
||||
# takes a copy of opensslconf.h.
|
||||
#
|
||||
# This only needs to be done once by a developer when updating to a
|
||||
# new version of OpenSSL (or changing options, etc.). Normal users
|
||||
# do not need to do this, since the results are stored in the EDK2
|
||||
# git repository for them.
|
||||
#
|
||||
use strict;
|
||||
use Cwd;
|
||||
use File::Copy;
|
||||
|
||||
#
|
||||
# Find the openssl directory name for use lib. We have to do this
|
||||
# inside of BEGIN. The variables we create here, however, don't seem
|
||||
# to be available to the main script, so we have to repeat the
|
||||
# exercise.
|
||||
#
|
||||
my $inf_file;
|
||||
my $OPENSSL_PATH;
|
||||
my @inf;
|
||||
|
||||
BEGIN {
|
||||
$inf_file = "OpensslLib.inf";
|
||||
|
||||
# Read the contents of the inf file
|
||||
open( FD, "<" . $inf_file ) ||
|
||||
die "Cannot open \"" . $inf_file . "\"!";
|
||||
@inf = (<FD>);
|
||||
close(FD) ||
|
||||
die "Cannot close \"" . $inf_file . "\"!";
|
||||
|
||||
foreach (@inf) {
|
||||
if (/DEFINE\s+OPENSSL_PATH\s*=\s*([a-z]+)/) {
|
||||
|
||||
# We need to run Configure before we can include its result...
|
||||
$OPENSSL_PATH = $1;
|
||||
|
||||
my $basedir = getcwd();
|
||||
|
||||
chdir($OPENSSL_PATH) ||
|
||||
die "Cannot change to OpenSSL directory \"" . $OPENSSL_PATH . "\"";
|
||||
|
||||
# Configure UEFI
|
||||
system(
|
||||
"./Configure",
|
||||
"UEFI",
|
||||
"no-afalgeng",
|
||||
"no-asm",
|
||||
"no-async",
|
||||
"no-autoalginit",
|
||||
"no-autoerrinit",
|
||||
"no-bf",
|
||||
"no-blake2",
|
||||
"no-camellia",
|
||||
"no-capieng",
|
||||
"no-cast",
|
||||
"no-chacha",
|
||||
"no-cms",
|
||||
"no-ct",
|
||||
"no-deprecated",
|
||||
"no-dgram",
|
||||
"no-dsa",
|
||||
"no-dynamic-engine",
|
||||
"no-ec",
|
||||
"no-ec2m",
|
||||
"no-engine",
|
||||
"no-err",
|
||||
"no-filenames",
|
||||
"no-gost",
|
||||
"no-hw",
|
||||
"no-idea",
|
||||
"no-mdc2",
|
||||
"no-pic",
|
||||
"no-ocb",
|
||||
"no-poly1305",
|
||||
"no-posix-io",
|
||||
"no-rc2",
|
||||
"no-rfc3779",
|
||||
"no-rmd160",
|
||||
"no-scrypt",
|
||||
"no-seed",
|
||||
"no-sock",
|
||||
"no-srp",
|
||||
"no-ssl",
|
||||
"no-stdio",
|
||||
"no-threads",
|
||||
"no-ts",
|
||||
"no-ui",
|
||||
"no-whirlpool"
|
||||
) == 0 ||
|
||||
die "OpenSSL Configure failed!\n";
|
||||
|
||||
# Generate opensslconf.h per config data
|
||||
system(
|
||||
"perl -I. -Mconfigdata util/dofile.pl " .
|
||||
"include/openssl/opensslconf.h.in " .
|
||||
"> include/openssl/opensslconf.h"
|
||||
) == 0 ||
|
||||
die "Failed to generate opensslconf.h!\n";
|
||||
|
||||
chdir($basedir) ||
|
||||
die "Cannot change to base directory \"" . $basedir . "\"";
|
||||
|
||||
push @INC, $1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Retrieve file lists from OpenSSL configdata
|
||||
#
|
||||
use configdata qw/%unified_info/;
|
||||
|
||||
my @cryptofilelist = ();
|
||||
my @sslfilelist = ();
|
||||
foreach my $product ((@{$unified_info{libraries}},
|
||||
@{$unified_info{engines}})) {
|
||||
foreach my $o (@{$unified_info{sources}->{$product}}) {
|
||||
foreach my $s (@{$unified_info{sources}->{$o}}) {
|
||||
next if ($unified_info{generate}->{$s});
|
||||
next if $s =~ "crypto/bio/b_print.c";
|
||||
if ($product =~ "libssl") {
|
||||
push @sslfilelist, ' $(OPENSSL_PATH)/' . $s . "\r\n";
|
||||
next;
|
||||
}
|
||||
push @cryptofilelist, ' $(OPENSSL_PATH)/' . $s . "\r\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Update OpensslLib.inf with autogenerated file list
|
||||
#
|
||||
my @new_inf = ();
|
||||
my $subbing = 0;
|
||||
print "\n--> Updating OpensslLib.inf ... ";
|
||||
foreach (@inf) {
|
||||
if ( $_ =~ "# Autogenerated files list starts here" ) {
|
||||
push @new_inf, $_, @cryptofilelist, @sslfilelist;
|
||||
$subbing = 1;
|
||||
next;
|
||||
}
|
||||
if ( $_ =~ "# Autogenerated files list ends here" ) {
|
||||
push @new_inf, $_;
|
||||
$subbing = 0;
|
||||
next;
|
||||
}
|
||||
|
||||
push @new_inf, $_
|
||||
unless ($subbing);
|
||||
}
|
||||
|
||||
my $new_inf_file = $inf_file . ".new";
|
||||
open( FD, ">" . $new_inf_file ) ||
|
||||
die $new_inf_file;
|
||||
print( FD @new_inf ) ||
|
||||
die $new_inf_file;
|
||||
close(FD) ||
|
||||
die $new_inf_file;
|
||||
rename( $new_inf_file, $inf_file ) ||
|
||||
die "rename $inf_file";
|
||||
print "Done!";
|
||||
|
||||
#
|
||||
# Update OpensslLibCrypto.inf with auto-generated file list (no libssl)
|
||||
#
|
||||
$inf_file = "OpensslLibCrypto.inf";
|
||||
|
||||
# Read the contents of the inf file
|
||||
@inf = ();
|
||||
@new_inf = ();
|
||||
open( FD, "<" . $inf_file ) ||
|
||||
die "Cannot open \"" . $inf_file . "\"!";
|
||||
@inf = (<FD>);
|
||||
close(FD) ||
|
||||
die "Cannot close \"" . $inf_file . "\"!";
|
||||
|
||||
$subbing = 0;
|
||||
print "\n--> Updating OpensslLibCrypto.inf ... ";
|
||||
foreach (@inf) {
|
||||
if ( $_ =~ "# Autogenerated files list starts here" ) {
|
||||
push @new_inf, $_, @cryptofilelist;
|
||||
$subbing = 1;
|
||||
next;
|
||||
}
|
||||
if ( $_ =~ "# Autogenerated files list ends here" ) {
|
||||
push @new_inf, $_;
|
||||
$subbing = 0;
|
||||
next;
|
||||
}
|
||||
|
||||
push @new_inf, $_
|
||||
unless ($subbing);
|
||||
}
|
||||
|
||||
$new_inf_file = $inf_file . ".new";
|
||||
open( FD, ">" . $new_inf_file ) ||
|
||||
die $new_inf_file;
|
||||
print( FD @new_inf ) ||
|
||||
die $new_inf_file;
|
||||
close(FD) ||
|
||||
die $new_inf_file;
|
||||
rename( $new_inf_file, $inf_file ) ||
|
||||
die "rename $inf_file";
|
||||
print "Done!";
|
||||
|
||||
#
|
||||
# Copy opensslconf.h generated from OpenSSL Configuration
|
||||
#
|
||||
print "\n--> Duplicating opensslconf.h into Include/openssl ... ";
|
||||
copy($OPENSSL_PATH . "/include/openssl/opensslconf.h",
|
||||
$OPENSSL_PATH . "/../../../Include/openssl/") ||
|
||||
die "Cannot copy opensslconf.h!";
|
||||
print "Done!\n";
|
||||
|
||||
print "\nProcessing Files Done!\n";
|
||||
|
||||
exit(0);
|
|
@ -1,110 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# This script runs the OpenSSL Configure script, then processes the resulting
|
||||
# file list into our local OpensslLib.inf and OpensslLibCrypto.inf, and also
|
||||
# takes a copy of opensslconf.h.
|
||||
#
|
||||
# This only needs to be done once by a developer when updating to a
|
||||
# new version of OpenSSL (or changing options, etc.). Normal users
|
||||
# do not need to do this, since the results are stored in the EDK2
|
||||
# git repository for them.
|
||||
|
||||
OPENSSL_PATH=$(sed -n '/DEFINE OPENSSL_PATH/{s/.* \(openssl-[0-9.]*[a-z]*\)[[:space:]]*/\1/ p}' OpensslLib.inf)
|
||||
OPENSSL_CRYPTO_PATH=$(sed -n '/DEFINE OPENSSL_PATH/{s/.* \(openssl-[0-9.]*[a-z]*\)[[:space:]]*/\1/ p}' OpensslLibCrypto.inf)
|
||||
|
||||
if [ "$OPENSSL_PATH" != "$OPENSSL_CRYPTO_PATH" ]; then
|
||||
echo "OPENSSL_PATH diverges between OpensslLib.inf and OpensslLibCrypto.inf"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! cd "${OPENSSL_PATH}" ; then
|
||||
echo "Cannot change to OpenSSL directory \"${OPENSSL_PATH}\""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
./Configure UEFI \
|
||||
no-asm \
|
||||
no-bf \
|
||||
no-camellia \
|
||||
no-capieng \
|
||||
no-cast \
|
||||
no-cms \
|
||||
no-deprecated \
|
||||
no-dgram \
|
||||
no-dsa \
|
||||
no-dynamic-engine \
|
||||
no-ec \
|
||||
no-ecdh \
|
||||
no-ecdsa \
|
||||
no-engine \
|
||||
no-engines \
|
||||
no-err \
|
||||
no-filenames \
|
||||
no-fp-api \
|
||||
no-hw \
|
||||
no-idea \
|
||||
no-jpake \
|
||||
no-krb5 \
|
||||
no-locking \
|
||||
no-mdc2 \
|
||||
no-posix-io \
|
||||
no-rc2 \
|
||||
no-rcs \
|
||||
no-rfc3779 \
|
||||
no-ripemd \
|
||||
no-scrypt \
|
||||
no-sct \
|
||||
no-seed \
|
||||
no-sha0 \
|
||||
no-sock \
|
||||
no-srp \
|
||||
no-ssl \
|
||||
no-stdio \
|
||||
no-threads \
|
||||
no-ts \
|
||||
no-ui \
|
||||
no-whirlpool \
|
||||
|| exit 1
|
||||
|
||||
make files
|
||||
cd -
|
||||
|
||||
function filelist ()
|
||||
{
|
||||
SSL_SELECT="$1"
|
||||
|
||||
echo '1,/# Autogenerated files list starts here/p'
|
||||
echo '/# Autogenerated files list ends here/,$p'
|
||||
echo '/# Autogenerated files list starts here/a\'
|
||||
|
||||
while read LINE; do
|
||||
case "$LINE" in
|
||||
RELATIVE_DIRECTORY=*)
|
||||
eval "$LINE"
|
||||
;;
|
||||
LIBSRC=*)
|
||||
LIBSRC=$(echo "$LINE" | sed s/^LIBSRC=//)
|
||||
if [ "$RELATIVE_DIRECTORY" != "ssl" ] ||
|
||||
[ "$SSL_SELECT" = "crypto-and-ssl" ]; then
|
||||
for FILE in $LIBSRC; do
|
||||
if [ "$FILE" != "b_print.c" ]; then
|
||||
echo -e ' $(OPENSSL_PATH)/'$RELATIVE_DIRECTORY/$FILE\\r\\
|
||||
fi
|
||||
done
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
echo -e \\r
|
||||
}
|
||||
|
||||
filelist crypto-and-ssl < "${OPENSSL_PATH}/MINFO" \
|
||||
| sed -n -f - -i OpensslLib.inf
|
||||
|
||||
filelist crypto-only < "${OPENSSL_PATH}/MINFO" \
|
||||
| sed -n -f - -i OpensslLibCrypto.inf
|
||||
|
||||
# We can tell Windows users to put this back manually if they can't run
|
||||
# Configure. For now, until the git repository is fixed to store things
|
||||
# sanely, also convert to DOS line-endings
|
||||
unix2dos -n "${OPENSSL_PATH}/crypto/opensslconf.h" opensslconf.h
|
Loading…
Reference in New Issue