homebrew-core/Formula/duck.rb

178 lines
6.6 KiB
Ruby

class Duck < Formula
desc "Command-line interface for Cyberduck (a multi-protocol file transfer tool)"
homepage "https://duck.sh/"
url "https://dist.duck.sh/duck-src-8.5.3.38959.tar.gz"
sha256 "a0c04ed874fb07eb1062b142c3aaa1190adc0789503b82e4898681e6eaedab3c"
license "GPL-3.0-only"
head "https://github.com/iterate-ch/cyberduck.git", branch: "master"
livecheck do
url "https://dist.duck.sh/"
regex(/href=.*?duck-src[._-]v?(\d+(?:\.\d+)+)\.t/i)
end
bottle do
sha256 cellar: :any, arm64_ventura: "2b1cf5a5612efd2645f9c2ca56a0537de96b057e6eed0c0b7c704e94cec9f903"
sha256 cellar: :any, arm64_monterey: "b0561c0e6809a09f2d156c80e31fa942379b86b53de0b68284b1f61ac79a0122"
sha256 cellar: :any, arm64_big_sur: "67b993b1f224b119ae3edd9068f31a63006a9c9179b2e4ddeee8faaf331296c7"
sha256 cellar: :any, ventura: "dab4145b64fd4194374dd708767d5a35898432df42e641a528d577c736ac9942"
sha256 cellar: :any, monterey: "95ddea4573bb8536e2f11881e848d2fff7fa792a01821cda370e3d4804e91cdd"
sha256 cellar: :any, big_sur: "e5385dc323c7709be62943f7bd7f8664948f7b47be3902815779eb2bb75cec70"
sha256 x86_64_linux: "5c896f55405ba4026e6d667e2495effc6d12bf2a5d633b8c644fb04c5f94d024"
end
depends_on "ant" => :build
depends_on "maven" => :build
depends_on "pkg-config" => :build
depends_on xcode: ["13.1", :build]
depends_on "openjdk"
uses_from_macos "libffi", since: :monterey # Uses `FFI_BAD_ARGTYPE`.
uses_from_macos "zlib"
on_linux do
depends_on "alsa-lib"
depends_on "freetype"
depends_on "libx11"
depends_on "libxext"
depends_on "libxi"
depends_on "libxrender"
depends_on "libxtst"
end
resource "jna" do
url "https://github.com/java-native-access/jna/archive/refs/tags/5.12.1.tar.gz"
sha256 "2046655137ecd7f03e57a14bbe05e14d8299440604f993cef171c449daa3789c"
end
resource "rococoa" do
url "https://github.com/iterate-ch/rococoa/archive/refs/tags/0.9.1.tar.gz"
sha256 "62c3c36331846384aeadd6014c33a30ad0aaff7d121b775204dc65cb3f00f97b"
end
resource "JavaNativeFoundation" do
url "https://github.com/apple/openjdk/archive/refs/tags/iTunesOpenJDK-1014.0.2.12.1.tar.gz"
sha256 "e8556a73ea36c75953078dfc1bafc9960e64593bc01e733bc772d2e6b519fd4a"
end
def install
# Consider creating a formula for this if other formulae need the same library
resource("jna").stage do
os = if OS.mac?
inreplace "native/Makefile" do |s|
libffi_libdir = if MacOS.version >= :monterey
MacOS.sdk_path/"usr/lib"
else
Formula["libffi"].opt_lib
end
# Add linker flags for libffi because Makefile call to pkg-config doesn't seem to work properly.
s.change_make_var! "LIBS", "-L#{libffi_libdir} -lffi"
library_var = s.get_make_var("LIBRARY")
# Force shared library to have dylib extension on macOS instead of jnilib
s.change_make_var! "LIBRARY", library_var.sub("JNISFX", "LIBSFX")
end
"mac"
else
OS.kernel_name
end
# Don't include directory with JNA headers in zip archive. If we don't do this, they will be deleted
# and the zip archive has to be extracted to get them. TODO: ask upstream to provide an option to
# disable the zip file generation entirely.
inreplace "build.xml",
"<zipfileset dir=\"build/headers\" prefix=\"build-package-${os.prefix}-${jni.version}/headers\" />",
""
system "ant", "-Dbuild.os.name=#{os}",
"-Dbuild.os.arch=#{Hardware::CPU.arch}",
"-Ddynlink.native=true",
"-DCC=#{ENV.cc}",
"native-build-package"
cd "build" do
ENV.deparallelize
ENV["JAVA_HOME"] = Language::Java.java_home(Formula["openjdk"].version.major.to_s)
inreplace "build.sh" do |s|
# Fix zip error on macOS because libjnidispatch.dylib is not in file list
s.gsub! "libjnidispatch.so", "libjnidispatch.so libjnidispatch.dylib" if OS.mac?
# Fix relative path in build script, which is designed to be run out extracted zip archive
s.gsub! "cd native", "cd ../native"
end
system "sh", "build.sh"
buildpath.install shared_library("libjnidispatch")
end
end
resource("JavaNativeFoundation").stage do
next unless OS.mac?
cd "apple/JavaNativeFoundation" do
xcodebuild "VALID_ARCHS=#{Hardware::CPU.arch}", "-project", "JavaNativeFoundation.xcodeproj"
buildpath.install "build/Release/JavaNativeFoundation.framework"
end
end
resource("rococoa").stage do
next unless OS.mac?
cd "rococoa/rococoa-core" do
xcodebuild "VALID_ARCHS=#{Hardware::CPU.arch}", "-project", "rococoa.xcodeproj"
buildpath.install shared_library("build/Release/librococoa")
end
end
os = if OS.mac?
xcconfig = buildpath/"Overrides.xcconfig"
xcconfig.write <<~EOS
OTHER_LDFLAGS = -headerpad_max_install_names
VALID_ARCHS=#{Hardware::CPU.arch}
EOS
ENV["XCODE_XCCONFIG_FILE"] = xcconfig
"osx"
else
OS.kernel_name.downcase
end
revision = version.to_s.rpartition(".").last
system "mvn", "-DskipTests", "-Dgit.commitsCount=#{revision}",
"--projects", "cli/#{os}", "--also-make", "verify"
libdir, bindir = if OS.mac?
%w[Contents/Frameworks Contents/MacOS]
else
%w[lib/app bin]
end.map { |dir| libexec/dir }
if OS.mac?
libexec.install Dir["cli/osx/target/duck.bundle/*"]
# Remove the `*.tbd` files. They're not needed, and they cause codesigning issues.
buildpath.glob("JavaNativeFoundation.framework/**/JavaNativeFoundation.tbd").map(&:unlink)
rm_rf libdir/"JavaNativeFoundation.framework"
libdir.install buildpath/"JavaNativeFoundation.framework"
rm libdir/shared_library("librococoa")
libdir.install buildpath/shared_library("librococoa")
# Replace runtime with already installed dependency
rm_r libexec/"Contents/PlugIns/Runtime.jre"
ln_s Formula["openjdk"].libexec/"openjdk.jdk", libexec/"Contents/PlugIns/Runtime.jre"
else
libexec.install Dir["cli/linux/target/release/duck/*"]
end
rm libdir/shared_library("libjnidispatch")
libdir.install buildpath/shared_library("libjnidispatch")
bin.install_symlink "#{bindir}/duck" => "duck"
end
test do
system "#{bin}/duck", "--download", "https://ftp.gnu.org/gnu/wget/wget-1.19.4.tar.gz", testpath/"test"
assert_equal (testpath/"test").sha256, "93fb96b0f48a20ff5be0d9d9d3c4a986b469cb853131f9d5fe4cc9cecbc8b5b5"
end
end