openssl: add universal option

Closes Homebrew/homebrew#28448.
This commit is contained in:
Jack Nagel 2014-05-15 23:45:42 -05:00
parent f89a7813fd
commit 93b2785a64

View file

@ -12,33 +12,85 @@ class Openssl < Formula
sha1 "f12f352e67e5b131c1935040f8d2ca24107ebfca" => :lion
end
depends_on "makedepend" => :build if MacOS.prefer_64_bit?
option :universal
depends_on "makedepend" => :build
keg_only :provided_by_osx,
"The OpenSSL provided by OS X is too old for some software."
def install
args = %W[./Configure
--prefix=#{prefix}
--openssldir=#{openssldir}
zlib-dynamic
shared
enable-cms
]
def arch_args
{
:x86_64 => %w[darwin64-x86_64-cc enable-ec_nistp-64_gcc_128],
:i386 => %w[darwin-i386-cc],
}
end
if MacOS.prefer_64_bit?
args << "darwin64-x86_64-cc" << "enable-ec_nistp_64_gcc_128"
def configure_args; %W[
--prefix=#{prefix}
--openssldir=#{openssldir}
zlib-dynamic
shared
enable-cms
]
end
def install
if build.universal?
ENV.permit_arch_flags
archs = Hardware::CPU.universal_archs
elsif MacOS.prefer_64_bit?
archs = [Hardware::CPU.arch_64_bit]
else
args << "darwin-i386-cc"
archs = [Hardware::CPU.arch_32_bit]
end
system "perl", *args
dirs = []
archs.each do |arch|
if build.universal?
dir = "build-#{arch}"
dirs << dir
mkdir dir
mkdir "#{dir}/engines"
system "make", "clean"
end
ENV.deparallelize
system "perl", "./Configure", *(configure_args + arch_args[arch])
system "make", "depend"
system "make"
system "make", "test"
if build.universal?
cp Dir["*.?.?.?.dylib", "*.a", "apps/openssl"], dir
cp Dir["engines/**/*.dylib"], "#{dir}/engines"
end
end
ENV.deparallelize
system "make", "depend" if MacOS.prefer_64_bit?
system "make"
system "make", "test"
system "make", "install", "MANDIR=#{man}", "MANSUFFIX=ssl"
if build.universal?
%w[libcrypto libssl].each do |libname|
system "lipo", "-create", "#{dirs.first}/#{libname}.1.0.0.dylib",
"#{dirs.last}/#{libname}.1.0.0.dylib",
"-output", "#{lib}/#{libname}.1.0.0.dylib"
system "lipo", "-create", "#{dirs.first}/#{libname}.a",
"#{dirs.last}/#{libname}.a",
"-output", "#{lib}/#{libname}.a"
end
Dir.glob("#{dirs.first}/engines/*.dylib") do |engine|
libname = File.basename(engine)
system "lipo", "-create", "#{dirs.first}/engines/#{libname}",
"#{dirs.last}/engines/#{libname}",
"-output", "#{lib}/engines/#{libname}"
end
system "lipo", "-create", "#{dirs.first}/openssl",
"#{dirs.last}/openssl",
"-output", "#{bin}/openssl"
end
end
def openssldir