Skip to content

Commit 3f8604a

Browse files
committed
try to vendor ruby
1 parent 43a2cb8 commit 3f8604a

File tree

3 files changed

+63
-38
lines changed

3 files changed

+63
-38
lines changed

appveyor.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ build_script:
141141
- cmd: |
142142
"%PYTHON%/python.exe" -m pip install --upgrade pip
143143
"%PYTHON%/python.exe" -m pip install --upgrade setuptools
144-
"%PYTHON%/python.exe" -m pip wheel --wheel-dir=%cd%\dist . --verbose
144+
set "CI_BUILD=True" && "%PYTHON%/python.exe" -m pip wheel --wheel-dir=%cd%\dist . --verbose
145145
146146
before_test:
147147
- ps: |

setup.py

+58-35
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
def main():
1414
os.chdir(os.path.dirname(os.path.abspath(__file__)))
1515

16-
# These are needed for source fetching
16+
CI_BUILD = os.environ.get("CI_BUILD", "False")
17+
is_CI_build = True if CI_BUILD == "True" else False
1718
cmake_source_dir = "opencv"
1819
minimum_supported_numpy = "1.13.1"
1920
build_contrib = get_build_env_var_by_name("contrib")
20-
# headless flag to skip GUI deps if needed
2121
build_headless = get_build_env_var_by_name("headless")
2222

2323
if sys.version_info[:2] >= (3, 6):
@@ -30,11 +30,16 @@ def main():
3030
numpy_version = "numpy>=%s" % minimum_supported_numpy
3131

3232
python_version = cmaker.CMaker.get_python_version()
33-
python_lib_path = cmaker.CMaker.get_python_library(python_version).replace('\\', '/')
34-
python_include_dir = cmaker.CMaker.get_python_include_dir(python_version).replace('\\', '/')
33+
python_lib_path = cmaker.CMaker.get_python_library(python_version).replace(
34+
"\\", "/"
35+
)
36+
python_include_dir = cmaker.CMaker.get_python_include_dir(python_version).replace(
37+
"\\", "/"
38+
)
3539

3640
if os.path.exists(".git"):
3741
import pip._internal.vcs.git as git
42+
3843
g = git.Git() # NOTE: pip API's are internal, this has to be refactored
3944

4045
g.run_command(["submodule", "sync"])
@@ -47,7 +52,9 @@ def main():
4752
["submodule", "update", "--init", "--recursive", "opencv_contrib"]
4853
)
4954

50-
package_version, build_contrib, build_headless = get_opencv_version(build_contrib, build_headless)
55+
package_version, build_contrib, build_headless = get_opencv_version(
56+
build_contrib, build_headless
57+
)
5158

5259
# https://stackoverflow.com/questions/1405913/python-32bit-or-64bit-mode
5360
x64 = sys.maxsize > 2 ** 32
@@ -86,7 +93,10 @@ def main():
8693
# In Windows, in python/X.Y/<arch>/; in Linux, in just python/X.Y/.
8794
# Naming conventions vary so widely between versions and OSes
8895
# had to give up on checking them.
89-
["python/cv2[^/]*%(ext)s" % {"ext": re.escape(sysconfig.get_config_var("EXT_SUFFIX"))}],
96+
[
97+
"python/cv2[^/]*%(ext)s"
98+
% {"ext": re.escape(sysconfig.get_config_var("EXT_SUFFIX"))}
99+
],
90100
"cv2.data": [ # OPENCV_OTHER_INSTALL_PATH
91101
("etc" if os.name == "nt" else "share/opencv4") + r"/haarcascades/.*\.xml"
92102
],
@@ -96,12 +106,14 @@ def main():
96106
# Raw paths relative to sourcetree root.
97107
files_outside_package_dir = {"cv2": ["LICENSE.txt", "LICENSE-3RD-PARTY.txt"]}
98108

109+
ci_cmake_generator = (
110+
["-G", "Visual Studio 14" + (" Win64" if x64 else "")]
111+
if os.name == "nt"
112+
else ["-G", "Unix Makefiles"]
113+
)
114+
99115
cmake_args = (
100-
(
101-
["-G", "Visual Studio 14" + (" Win64" if x64 else "")]
102-
if os.name == "nt"
103-
else ["-G", "Unix Makefiles"] # don't make CMake try (and fail) Ninja first
104-
)
116+
(ci_cmake_generator if is_CI_build else [])
105117
+ [
106118
# skbuild inserts PYTHON_* vars. That doesn't satisfy opencv build scripts in case of Py3
107119
"-DPYTHON3_EXECUTABLE=%s" % sys.executable,
@@ -131,33 +143,40 @@ def main():
131143
)
132144
)
133145

134-
# OS-specific components
135-
if sys.platform.startswith('linux') and not build_headless:
136-
cmake_args.append("-DWITH_QT=4")
137-
138-
if sys.platform == 'darwin' and not build_headless:
139-
cmake_args.append("-DWITH_QT=5")
140-
rearrange_cmake_output_data["cv2.qt.plugins.platforms"] = [
141-
(r"lib/qt/plugins/platforms/libqcocoa\.dylib")
142-
]
143-
144146
if build_headless:
145147
# it seems that cocoa cannot be disabled so on macOS the package is not truly headless
146148
cmake_args.append("-DWITH_WIN32UI=OFF")
147149
cmake_args.append("-DWITH_QT=OFF")
148-
cmake_args.append(
149-
"-DWITH_MSMF=OFF"
150-
) # see: https://github.com/skvark/opencv-python/issues/263
150+
cmake_args.append("-DWITH_GTK=OFF")
151+
if is_CI_build:
152+
cmake_args.append(
153+
"-DWITH_MSMF=OFF"
154+
) # see: https://github.com/skvark/opencv-python/issues/263
155+
156+
# OS-specific components during CI builds
157+
if is_CI_build:
158+
if sys.platform.startswith("linux") and not build_headless:
159+
cmake_args.append("-DWITH_QT=4")
151160

152-
if sys.platform.startswith("linux"):
153-
cmake_args.append("-DWITH_V4L=ON")
154-
cmake_args.append("-DWITH_LAPACK=ON")
155-
cmake_args.append("-DENABLE_PRECOMPILED_HEADERS=OFF")
161+
if sys.platform == "darwin" and not build_headless:
162+
cmake_args.append("-DWITH_QT=5")
163+
164+
if sys.platform.startswith("linux"):
165+
cmake_args.append("-DWITH_V4L=ON")
166+
cmake_args.append("-DWITH_LAPACK=ON")
167+
cmake_args.append("-DENABLE_PRECOMPILED_HEADERS=OFF")
156168

157169
if sys.platform.startswith("linux") and not x64 and "bdist_wheel" in sys.argv:
158170
subprocess.check_call("patch -p0 < patches/patchOpenEXR", shell=True)
159171

160-
if sys.platform == "darwin" and "bdist_wheel" in sys.argv:
172+
if (
173+
sys.platform == "darwin"
174+
and "bdist_wheel" in sys.argv
175+
and ("WITH_QT=5" in sys.argv or "WITH_QT=5" in cmake_args)
176+
):
177+
rearrange_cmake_output_data["cv2.qt.plugins.platforms"] = [
178+
(r"lib/qt/plugins/platforms/libqcocoa\.dylib")
179+
]
161180
subprocess.check_call("patch -p1 < patches/patchQtPlugins", shell=True)
162181

163182
# works via side effect
@@ -357,22 +376,25 @@ def _classify_installed_files_override(
357376
cmake_install_dir=cmake_install_reldir,
358377
)
359378

379+
360380
def get_opencv_version(contrib, headless):
361381
# cv2/version.py should be generated by running find_version.py
362382
version = {}
363383
here = os.path.abspath(os.path.dirname(__file__))
364384
version_file = os.path.join(here, "cv2", "version.py")
365385

366-
if not os.path.exists(version_file):
367-
old_args = sys.argv.copy()
368-
sys.argv = ['', str(contrib), str(headless)]
369-
runpy.run_path("find_version.py", run_name="__main__")
370-
sys.argv = old_args
386+
# generate a fresh version.py always when Git repository exists
387+
if os.path.exists(".git"):
388+
old_args = sys.argv.copy()
389+
sys.argv = ["", str(contrib), str(headless)]
390+
runpy.run_path("find_version.py", run_name="__main__")
391+
sys.argv = old_args
371392

372393
with open(version_file) as fp:
373394
exec(fp.read(), version)
374395

375-
return version['opencv_version'], version['contrib'], version['headless']
396+
return version["opencv_version"], version["contrib"], version["headless"]
397+
376398

377399
def get_build_env_var_by_name(flag_name):
378400
flag_set = False
@@ -390,6 +412,7 @@ def get_build_env_var_by_name(flag_name):
390412

391413
return flag_set
392414

415+
393416
# This creates a list which is empty but returns a length of 1.
394417
# Should make the wheel a binary distribution and platlib compliant.
395418
class EmptyListWithLength(list):

travis_config.sh

+4-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ function bdist_wheel_cmd {
1414
# copied from multibuild's common_utils.sh
1515
# add osx deployment target so it doesnt default to 10.6
1616
local abs_wheelhouse=$1
17-
pip wheel --wheel-dir="$PWD/dist" . --verbose $BDIST_PARAMS
17+
CI_BUILD=1 pip wheel --wheel-dir="$PWD/dist" . --verbose $BDIST_PARAMS
1818
cp dist/*.whl $abs_wheelhouse
1919
if [ -n "$USE_CCACHE" -a -z "$BREW_BOOTSTRAP_MODE" ]; then ccache -s; fi
2020
}
@@ -89,9 +89,11 @@ function pre_build {
8989

9090
local CACHE_STAGE; (echo "$TRAVIS_BUILD_STAGE_NAME" | grep -qiF "final") || CACHE_STAGE=1
9191

92+
export HOMEBREW_FORCE_VENDOR_RUBY=1
93+
brew update
94+
9295
#after the cache stage, all bottles and Homebrew metadata should be already cached locally
9396
if [ -n "$CACHE_STAGE" ]; then
94-
brew update
9597
generate_ffmpeg_formula
9698
brew_add_local_bottles
9799
fi

0 commit comments

Comments
 (0)