homebrew-core/Formula/subversion.rb

298 lines
10 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

class Subversion < Formula
desc "Version control system designed to be a better CVS"
homepage "https://subversion.apache.org/"
license "Apache-2.0"
revision 1
stable do
url "https://www.apache.org/dyn/closer.lua?path=subversion/subversion-1.14.2.tar.bz2"
mirror "https://archive.apache.org/dist/subversion/subversion-1.14.2.tar.bz2"
sha256 "c9130e8d0b75728a66f0e7038fc77052e671830d785b5616aad53b4810d3cc28"
# Fix -flat_namespace being used on Big Sur and later.
patch do
url "https://raw.githubusercontent.com/Homebrew/formula-patches/03cf8088210822aa2c1ab544ed58ea04c897d9c4/libtool/configure-big_sur.diff"
sha256 "35acd6aebc19843f1a2b3a63e880baceb0f5278ab1ace661e57a502d9d78c93c"
end
end
bottle do
sha256 arm64_ventura: "feb2c3336172d37bd48015ae6383d643205c811136d7cfd94d5d2a1e09c21056"
sha256 arm64_monterey: "ad95b56cba0ee03647508c4763112e759e84f6a24057e4936d11fab781e3122e"
sha256 arm64_big_sur: "0864d99a6b7b2edef137c3f6116a76fc31b0aeca8c227ca094af6cdcdc8278c2"
sha256 ventura: "812c869433acff9ef2330083c3ce3728e7fbcdd7e273bc361b593b52a6ed316f"
sha256 monterey: "45b2f7ab2a1997db75e64357831a1a11de27a9a2cefec97784dd67e8e89b1a04"
sha256 big_sur: "218244b61740174700695368abb9fc8921ea74f404e1dc363ff4e49a6c21b78f"
sha256 catalina: "2307bedfc2da8c3a660cf145b723d51e809278fe212f471dea99bf3f4faee483"
sha256 x86_64_linux: "748afaa6d152ff15fa8fa664adcb748a302d4366e81b92f63d946a87bd6970e9"
end
head do
url "https://github.com/apache/subversion.git", branch: "trunk"
depends_on "autoconf" => :build
depends_on "automake" => :build
depends_on "gettext" => :build
end
depends_on "pkg-config" => :build
depends_on "python@3.10" => :build
depends_on "scons" => :build # For Serf
depends_on "swig" => :build
depends_on "apr"
depends_on "apr-util"
# build against Homebrew versions of
# gettext, lz4 and utf8proc for consistency
depends_on "gettext"
depends_on "lz4"
depends_on "openssl@1.1" # For Serf
depends_on "utf8proc"
uses_from_macos "expat"
uses_from_macos "krb5"
uses_from_macos "perl"
uses_from_macos "ruby"
uses_from_macos "sqlite"
uses_from_macos "zlib"
on_macos do
depends_on "openjdk" => :build unless MacOS.version.outdated_release?
# Prevent "-arch ppc" from being pulled in from Perl's $Config{ccflags}
patch :DATA
end
on_linux do
depends_on "libtool" => :build
depends_on "openjdk" => :build
end
resource "py3c" do
url "https://github.com/encukou/py3c/archive/v1.1.tar.gz"
sha256 "c7ffc22bc92dded0ca859db53ef3a0b466f89a9f8aad29359c9fe4ff18ebdd20"
end
resource "serf" do
url "https://www.apache.org/dyn/closer.lua?path=serf/serf-1.3.9.tar.bz2"
mirror "https://archive.apache.org/dist/serf/serf-1.3.9.tar.bz2"
sha256 "549c2d21c577a8a9c0450facb5cca809f26591f048e466552240947bdf7a87cc"
end
def install
py3c_prefix = buildpath/"py3c"
serf_prefix = libexec/"serf"
resource("py3c").unpack py3c_prefix
resource("serf").stage do
if OS.linux?
inreplace "SConstruct" do |s|
s.gsub! "env.Append(LIBPATH=['$OPENSSL\/lib'])",
"\\1\nenv.Append(CPPPATH=['$ZLIB\/include'])\nenv.Append(LIBPATH=['$ZLIB/lib'])"
end
end
inreplace "SConstruct" do |s|
s.gsub! "print 'Warning: Used unknown variables:', ', '.join(unknown.keys())",
"print('Warning: Used unknown variables:', ', '.join(unknown.keys()))"
s.gsub! "match = re.search('SERF_MAJOR_VERSION ([0-9]+).*'",
"match = re.search(b'SERF_MAJOR_VERSION ([0-9]+).*'"
s.gsub! "'SERF_MINOR_VERSION ([0-9]+).*'",
"b'SERF_MINOR_VERSION ([0-9]+).*'"
s.gsub! "'SERF_PATCH_VERSION ([0-9]+)'",
"b'SERF_PATCH_VERSION ([0-9]+)'"
s.gsub! "variables=opts,",
"variables=opts, RPATHPREFIX = '-Wl,-rpath,',"
end
# scons ignores our compiler and flags unless explicitly passed
krb5 = if OS.mac?
"/usr"
else
Formula["krb5"].opt_prefix
end
args = %W[
PREFIX=#{serf_prefix} GSSAPI=#{krb5} CC=#{ENV.cc}
CFLAGS=#{ENV.cflags} LINKFLAGS=#{ENV.ldflags}
OPENSSL=#{Formula["openssl@1.1"].opt_prefix}
APR=#{Formula["apr"].opt_prefix}
APU=#{Formula["apr-util"].opt_prefix}
]
args << "ZLIB=#{Formula["zlib"].opt_prefix}" if OS.linux?
scons = Formula["scons"].opt_bin/"scons"
system scons, *args
system scons, "install"
end
# Use existing system zlib and sqlite
zlib = if OS.mac?
"#{MacOS.sdk_path_if_needed}/usr"
else
Formula["zlib"].opt_prefix
end
sqlite = if OS.mac?
"#{MacOS.sdk_path_if_needed}/usr"
else
Formula["sqlite"].opt_prefix
end
# Use dep-provided other libraries
# Don't mess with Apache modules (since we're not sudo)
if OS.linux?
# svn can't find libserf-1.so.1 at runtime without this
ENV.append "LDFLAGS", "-Wl,-rpath=#{serf_prefix}/lib"
end
openjdk = deps.map(&:to_formula).find { |f| f.name.match? "^openjdk" }
perl = DevelopmentTools.locate("perl")
ruby = DevelopmentTools.locate("ruby")
python3 = "python3.10"
args = %W[
--prefix=#{prefix}
--disable-debug
--enable-optimize
--disable-mod-activation
--disable-plaintext-password-storage
--with-apr-util=#{Formula["apr-util"].opt_prefix}
--with-apr=#{Formula["apr"].opt_prefix}
--with-apxs=no
--with-ruby-sitedir=#{lib}/ruby
--with-py3c=#{py3c_prefix}
--with-serf=#{serf_prefix}
--with-sqlite=#{sqlite}
--with-swig=#{Formula["swig"].opt_prefix}
--with-zlib=#{zlib}
--without-apache-libexecdir
--without-berkeley-db
--without-gpg-agent
--without-jikes
PERL=#{perl}
PYTHON=#{python3}
RUBY=#{ruby}
]
if openjdk
args.unshift "--with-jdk=#{Formula["openjdk"].opt_prefix}",
"--enable-javahl"
end
# preserve compatibility with macOS 12.012.2
args.unshift "--enable-sqlite-compatibility-version=3.36.0" if MacOS.version == :monterey
inreplace "Makefile.in",
"toolsdir = @bindir@/svn-tools",
"toolsdir = @libexecdir@/svn-tools"
# regenerate configure file as we patched `build/ac-macros/swig.m4`
system "./autogen.sh" if build.head?
system "./configure", *args
system "make"
ENV.deparallelize { system "make", "install" }
bash_completion.install "tools/client-side/bash_completion" => "subversion"
system "make", "tools"
system "make", "install-tools"
system "make", "swig-py"
system "make", "install-swig-py"
(prefix/Language::Python.site_packages(python3)).install_symlink Dir["#{lib}/svn-python/*"]
# Java and Perl support don't build correctly in parallel:
# https://github.com/Homebrew/homebrew/issues/20415
if openjdk
ENV.deparallelize
system "make", "javahl"
system "make", "install-javahl"
end
perl_archlib = Utils.safe_popen_read(perl.to_s, "-MConfig", "-e", "print $Config{archlib}")
perl_core = Pathname.new(perl_archlib)/"CORE"
perl_extern_h = perl_core/"EXTERN.h"
unless perl_extern_h.exist?
# No EXTERN.h, maybe it's system perl
perl_version = Utils.safe_popen_read(perl.to_s, "--version")[/v(\d+\.\d+)(?:\.\d+)?/, 1]
perl_core = MacOS.sdk_path/"System/Library/Perl"/perl_version/"darwin-thread-multi-2level/CORE"
perl_extern_h = perl_core/"EXTERN.h"
end
onoe "'#{perl_extern_h}' does not exist" unless perl_extern_h.exist?
if OS.mac?
inreplace "Makefile" do |s|
s.change_make_var! "SWIG_PL_INCLUDES",
"$(SWIG_INCLUDES) -arch #{Hardware::CPU.arch} -g -pipe -fno-common " \
"-DPERL_DARWIN -fno-strict-aliasing -I#{HOMEBREW_PREFIX}/include -I#{perl_core}"
end
end
system "make", "swig-pl-lib"
system "make", "install-swig-pl-lib"
cd "subversion/bindings/swig/perl/native" do
system perl, "Makefile.PL", "PREFIX=#{prefix}", "INSTALLSITEMAN3DIR=#{man3}"
system "make", "install"
end
# This is only created when building against system Perl, but it isn't
# purged by Homebrew's post-install cleaner because that doesn't check
# "Library" directories. It is however pointless to keep around as it
# only contains the perllocal.pod installation file.
rm_rf prefix/"Library/Perl"
end
def caveats
<<~EOS
svntools have been installed to:
#{opt_libexec}
The perl bindings are located in various subdirectories of:
#{opt_lib}/perl5
You may need to link the Java bindings into the Java Extensions folder:
sudo mkdir -p /Library/Java/Extensions
sudo ln -s #{HOMEBREW_PREFIX}/lib/libsvnjavahl-1.dylib /Library/Java/Extensions/libsvnjavahl-1.dylib
EOS
end
test do
system bin/"svnadmin", "create", "test"
system bin/"svnadmin", "verify", "test"
system bin/"svn", "checkout", "file://#{testpath}/test", "svn-test"
platform = if OS.mac?
"darwin-thread-multi-2level"
else
"#{Hardware::CPU.arch}-#{OS.kernel_name.downcase}-thread-multi"
end
perl = DevelopmentTools.locate("perl")
perl_version = Utils.safe_popen_read(perl.to_s, "--version")[/v(\d+\.\d+(?:\.\d+)?)/, 1]
ENV["PERL5LIB"] = "#{lib}/perl5/site_perl/#{perl_version}/#{platform}"
system perl, "-e", "use SVN::Client; new SVN::Client()"
end
end
__END__
diff --git a/subversion/bindings/swig/perl/native/Makefile.PL.in b/subversion/bindings/swig/perl/native/Makefile.PL.in
index a60430b..bd9b017 100644
--- a/subversion/bindings/swig/perl/native/Makefile.PL.in
+++ b/subversion/bindings/swig/perl/native/Makefile.PL.in
@@ -76,10 +76,13 @@ my $apr_ldflags = '@SVN_APR_LIBS@'
chomp $apr_shlib_path_var;
+my $config_ccflags = $Config{ccflags};
+$config_ccflags =~ s/-arch\s+\S+//g;
+
my %config = (
ABSTRACT => 'Perl bindings for Subversion',
DEFINE => $cppflags,
- CCFLAGS => join(' ', $cflags, $Config{ccflags}),
+ CCFLAGS => join(' ', $cflags, $config_ccflags),
INC => join(' ', $includes, $cppflags,
" -I$swig_srcdir/perl/libsvn_swig_perl",
" -I$svnlib_srcdir/include",