-
-
Notifications
You must be signed in to change notification settings - Fork 12.4k
/
opencv.rb
165 lines (145 loc) · 5.71 KB
/
opencv.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
class Opencv < Formula
desc "Open source computer vision library"
homepage "https://opencv.org/"
url "https://github.com/opencv/opencv/archive/refs/tags/4.8.0.tar.gz"
sha256 "cbf47ecc336d2bff36b0dcd7d6c179a9bb59e805136af6b9670ca944aef889bd"
license "Apache-2.0"
livecheck do
url :stable
regex(/^v?(\d+(?:\.\d+)+)$/i)
end
bottle do
sha256 arm64_ventura: "c866186a249cf729b1938c9705121ed841059493ec4c51076a9f1a6a40840cee"
sha256 arm64_monterey: "c1be6c733ec5b206760822e0fa536a6351a629483492e4d6f28b91f337d155eb"
sha256 arm64_big_sur: "ef6881355dd2971e8e3dd2ccda26ef419fc25515ff63be98ca1e53fc4e818ef6"
sha256 ventura: "29f0ffb2b94b302b9ef48bb6ea75fbe3cc3eb51f47e65002b88d91c03230c842"
sha256 monterey: "55c6aa357d832b512454764c7374f1dd4365da7a7206ce5299952cb84d5a0998"
sha256 big_sur: "694dc025a5ac2cfa5ee2e09c95122567b2aaf49f6d20dde7001b8449208d3e4b"
sha256 x86_64_linux: "918364097dd0c9dcf418766431a8c658e9f8c8ba646bdb296fa2d084bb658363"
end
depends_on "cmake" => :build
depends_on "pkg-config" => :build
depends_on "ceres-solver"
depends_on "eigen"
depends_on "ffmpeg"
depends_on "glog"
depends_on "harfbuzz"
depends_on "jpeg-turbo"
depends_on "libpng"
depends_on "libtiff"
depends_on "numpy"
depends_on "openblas"
depends_on "openexr"
depends_on "openjpeg"
depends_on "protobuf"
depends_on "python@3.11"
depends_on "tbb"
depends_on "vtk"
depends_on "webp"
uses_from_macos "zlib"
fails_with gcc: "5" # ffmpeg is compiled with GCC
resource "contrib" do
url "https://github.com/opencv/opencv_contrib/archive/refs/tags/4.8.0.tar.gz"
sha256 "b4aef0f25a22edcd7305df830fa926ca304ea9db65de6ccd02f6cfa5f3357dbb"
end
def python3
"python3.11"
end
def install
resource("contrib").stage buildpath/"opencv_contrib"
# Avoid Accelerate.framework
ENV["OpenBLAS_HOME"] = Formula["openblas"].opt_prefix
# Reset PYTHONPATH, workaround for https://github.com/Homebrew/homebrew-science/pull/4885
ENV.delete("PYTHONPATH")
# Remove bundled libraries to make sure formula dependencies are used
libdirs = %w[ffmpeg libjasper libjpeg libjpeg-turbo libpng libtiff libwebp openexr openjpeg protobuf tbb zlib]
libdirs.each { |l| (buildpath/"3rdparty"/l).rmtree }
args = %W[
-DCMAKE_CXX_STANDARD=11
-DCMAKE_OSX_DEPLOYMENT_TARGET=
-DBUILD_JASPER=OFF
-DBUILD_JPEG=OFF
-DBUILD_OPENEXR=OFF
-DBUILD_OPENJPEG=OFF
-DBUILD_PERF_TESTS=OFF
-DBUILD_PNG=OFF
-DBUILD_PROTOBUF=OFF
-DBUILD_TBB=OFF
-DBUILD_TESTS=OFF
-DBUILD_TIFF=OFF
-DBUILD_WEBP=OFF
-DBUILD_ZLIB=OFF
-DBUILD_opencv_hdf=OFF
-DBUILD_opencv_java=OFF
-DBUILD_opencv_text=ON
-DOPENCV_ENABLE_NONFREE=ON
-DOPENCV_EXTRA_MODULES_PATH=#{buildpath}/opencv_contrib/modules
-DOPENCV_GENERATE_PKGCONFIG=ON
-DPROTOBUF_UPDATE_FILES=ON
-DWITH_1394=OFF
-DWITH_CUDA=OFF
-DWITH_EIGEN=ON
-DWITH_FFMPEG=ON
-DWITH_GPHOTO2=OFF
-DWITH_GSTREAMER=OFF
-DWITH_JASPER=OFF
-DWITH_OPENEXR=ON
-DWITH_OPENGL=OFF
-DWITH_QT=OFF
-DWITH_TBB=ON
-DWITH_VTK=ON
-DBUILD_opencv_python2=OFF
-DBUILD_opencv_python3=ON
-DPYTHON3_EXECUTABLE=#{which(python3)}
]
args += [
"-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON", # https://github.com/protocolbuffers/protobuf/issues/12292
"-Dprotobuf_MODULE_COMPATIBLE=ON", # https://github.com/protocolbuffers/protobuf/issues/1931
]
# Disable precompiled headers and force opencv to use brewed libraries on Linux
if OS.linux?
args += %W[
-DENABLE_PRECOMPILED_HEADERS=OFF
-DJPEG_LIBRARY=#{Formula["jpeg-turbo"].opt_lib}/libjpeg.so
-DOpenBLAS_LIB=#{Formula["openblas"].opt_lib}/libopenblas.so
-DOPENEXR_ILMIMF_LIBRARY=#{Formula["openexr"].opt_lib}/libIlmImf.so
-DOPENEXR_ILMTHREAD_LIBRARY=#{Formula["openexr"].opt_lib}/libIlmThread.so
-DPNG_LIBRARY=#{Formula["libpng"].opt_lib}/libpng.so
-DPROTOBUF_LIBRARY=#{Formula["protobuf"].opt_lib}/libprotobuf.so
-DTIFF_LIBRARY=#{Formula["libtiff"].opt_lib}/libtiff.so
-DWITH_V4L=OFF
-DZLIB_LIBRARY=#{Formula["zlib"].opt_lib}/libz.so
]
end
# Ref: https://github.com/opencv/opencv/wiki/CPU-optimizations-build-options
ENV.runtime_cpu_detection
if Hardware::CPU.intel? && build.bottle?
cpu_baseline = MacOS.version.requires_sse42? ? "SSE4_2" : "SSSE3"
args += %W[-DCPU_BASELINE=#{cpu_baseline} -DCPU_BASELINE_REQUIRE=#{cpu_baseline}]
end
system "cmake", "-S", ".", "-B", "build_shared", *args, *std_cmake_args
inreplace "build_shared/modules/core/version_string.inc", "#{Superenv.shims_path}/", ""
system "cmake", "--build", "build_shared"
system "cmake", "--install", "build_shared"
system "cmake", "-S", ".", "-B", "build_static", *args, *std_cmake_args, "-DBUILD_SHARED_LIBS=OFF"
inreplace "build_static/modules/core/version_string.inc", "#{Superenv.shims_path}/", ""
system "cmake", "--build", "build_static"
lib.install buildpath.glob("build_static/{lib,3rdparty/**}/*.a")
# Prevent dependents from using fragile Cellar paths
inreplace lib/"pkgconfig/opencv#{version.major}.pc", prefix, opt_prefix
end
test do
(testpath/"test.cpp").write <<~EOS
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
std::cout << CV_VERSION << std::endl;
return 0;
}
EOS
system ENV.cxx, "-std=c++11", "test.cpp", "-I#{include}/opencv4", "-o", "test"
assert_equal shell_output("./test").strip, version.to_s
output = shell_output("#{python3} -c 'import cv2; print(cv2.__version__)'")
assert_equal version.to_s, output.chomp
end
end