diff --git a/o/opencv-python-headless/build_info.json b/o/opencv-python-headless/build_info.json index 7380ea3f66..2d11f00a56 100644 --- a/o/opencv-python-headless/build_info.json +++ b/o/opencv-python-headless/build_info.json @@ -1,5 +1,5 @@ { - "maintainer": "akash-kaothalkar", + "maintainer": "SakshiJain0302", "package_name": "opencv-python-headless", "github_url": "https://github.com/opencv/opencv-python.git", "version": "93", @@ -17,9 +17,15 @@ "build_script": "opencv-python-headless_4.13.0.92_ubi_9.5.sh" }, "93": { - "build_script": "opencv-python-headless_5.0.0.93_ubi_9.5.sh" + "build_script": [ + "opencv-python-headless_5.0.0.93_ubi_9.5.sh", + "opencv-python-headless_ubi_10.2.sh" + ] }, "*": { - "build_script": "opencv-python-headless_5.0.0.93_ubi_9.5.sh" + "build_script": [ + "opencv-python-headless_5.0.0.93_ubi_9.5.sh", + "opencv-python-headless_ubi_10.2.sh" + ] } } diff --git a/o/opencv-python-headless/opencv-python-headless_ubi_10.2.sh b/o/opencv-python-headless/opencv-python-headless_ubi_10.2.sh new file mode 100644 index 0000000000..75198e3fad --- /dev/null +++ b/o/opencv-python-headless/opencv-python-headless_ubi_10.2.sh @@ -0,0 +1,356 @@ +#!/bin/bash -e +# ----------------------------------------------------------------------------- +# +# Package : opencv-python-headless +# Version : 5.0.0.93 +# Source repo : https://github.com/opencv/opencv-python.git +# Tested on : UBI:10.2 +# Language : Python +# Ci-Check : True +# Script License : Apache License 2.0 +# Maintainer : Sakshi Jain +# +# Disclaimer : This script has been tested in root mode on given +# platform using the mentioned version of the package. +# It may not work as expected with newer versions of the +# package and/or distribution. In such case, please +# contact "Maintainer" of this script. +# +# ----------------------------------------------------------------------------- + +set -e + +PACKAGE_NAME=opencv-python-headless +PACKAGE_VERSION=${1:-93} +# The git tag is the last dot-separated component: 5.0.0.93 -> 93 +GIT_TAG="${PACKAGE_VERSION##*.}" +PACKAGE_URL=https://github.com/opencv/opencv-python +CURRENT_DIR=$(pwd) +PACKAGE_DIR=opencv-python + +# ----------------------------------------------------------------------------- +# System dependencies +# ----------------------------------------------------------------------------- + +yum install -y python3.14 python3.14-devel python3.14-pip wget git ninja-build make cmake pkgconfig autoconf automake libtool zlib-devel freetype-devel gmp-devel openssl openssl-devel openjpeg2-devel gcc-toolset-15 gcc-toolset-15-gcc gcc-toolset-15-gcc-c++ gcc-toolset-15-gcc-gfortran gcc-toolset-15-binutils gcc-toolset-15-binutils-devel + +# ----------------------------------------------------------------------------- +# Configure GCC Toolset 15 +# UBI 10 does not provide /opt/rh/gcc-toolset-15/enable. +# ----------------------------------------------------------------------------- + +if [[ -d /opt/rh/gcc-toolset-15/root/usr/bin ]]; then + export PATH="/opt/rh/gcc-toolset-15/root/usr/bin:$PATH" + export LD_LIBRARY_PATH="/opt/rh/gcc-toolset-15/root/usr/lib64:${LD_LIBRARY_PATH:-}" +else + echo "ERROR: gcc-toolset-15 compiler directory not found" + exit 1 +fi + +export CC="$(command -v gcc)" +export CXX="$(command -v g++)" +export AR="$(command -v ar)" +export RANLIB="$(command -v ranlib)" + +export GCC="$CC" +export GXX="$CXX" + +echo "-----------------------------------------------------" +echo "Compiler configuration" +echo "-----------------------------------------------------" +echo "CC = $CC" +echo "CXX = $CXX" +echo "AR = $AR" +echo "RANLIB = $RANLIB" + +gcc --version | head -1 +g++ --version | head -1 +ar --version | head -1 +ranlib --version | head -1 + +# ----------------------------------------------------------------------------- +# Python tooling +# ----------------------------------------------------------------------------- + +python3.14 -m pip install --upgrade pip wheel +python3.14 -m pip install --no-cache-dir setuptools "numpy==2.5.0" + +python3.14 -m pip install cython pytest scikit-build build wheel cmake ninja + +# ----------------------------------------------------------------------------- +# Resolve OpenBLAS paths +# ----------------------------------------------------------------------------- + +export OpenBLAS_HOME=/usr/local/lib/python3.14/site-packages/openblas +export OpenBLAS_DIR=${OpenBLAS_HOME} +export LD_LIBRARY_PATH="${OpenBLAS_HOME}/lib:${LD_LIBRARY_PATH}" +export PKG_CONFIG_PATH="${OpenBLAS_HOME}/lib/pkgconfig:${PKG_CONFIG_PATH:-}" + +# ----------------------------------------------------------------------------- +# Build protobuf from source +# Same approach as grpc-cpp +# ----------------------------------------------------------------------------- + +echo "-----------------------------------------------------" +echo "Building protobuf from source" +echo "-----------------------------------------------------" + +cd "$CURRENT_DIR" + +if [ ! -d "protobuf" ]; then + git clone https://github.com/protocolbuffers/protobuf +fi + +cd protobuf + +git checkout v33.6 +git submodule update --init --recursive + +LIBPROTO_DIR="$(pwd)" +LIBPROTO_INSTALL="${LIBPROTO_DIR}/local/libprotobuf" + +export PROTOBUF_PREFIX="${LIBPROTO_INSTALL}" + +rm -rf build +mkdir -p build +cd build + +cmake -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_STANDARD=11 \ + -DCMAKE_CXX_STANDARD=17 \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_C_COMPILER="$CC" \ + -DCMAKE_CXX_COMPILER="$CXX" \ + -DCMAKE_AR="$AR" \ + -DCMAKE_RANLIB="$RANLIB" \ + -DCMAKE_INSTALL_PREFIX="$LIBPROTO_INSTALL" \ + -Dprotobuf_BUILD_TESTS=OFF \ + -Dprotobuf_BUILD_SHARED_LIBS=ON \ + -Dprotobuf_ABSL_PROVIDER="module" \ + -Dprotobuf_JSONCPP_PROVIDER="package" \ + -Dprotobuf_USE_EXTERNAL_GTEST=OFF \ + .. + +cmake --build . --verbose +cmake --install . + +# ----------------------------------------------------------------------------- +# Verify protobuf installation +# ----------------------------------------------------------------------------- + +PROTOC_BIN="${LIBPROTO_INSTALL}/bin/protoc" + +if [ ! -x "$PROTOC_BIN" ]; then + echo "ERROR: protoc was not installed" + exit 1 +fi + +if [ -f "${LIBPROTO_INSTALL}/lib64/libprotobuf.so" ]; then + PROTOBUF_LIB_DIR="${LIBPROTO_INSTALL}/lib64" +elif [ -f "${LIBPROTO_INSTALL}/lib/libprotobuf.so" ]; then + PROTOBUF_LIB_DIR="${LIBPROTO_INSTALL}/lib" +else + echo "ERROR: libprotobuf.so was not installed" + exit 1 +fi + +echo "-----------------------------------------------------" +echo "Protobuf installation successful" +echo "-----------------------------------------------------" +echo "protoc:" +"$PROTOC_BIN" --version +echo "PROTOBUF_PREFIX=${LIBPROTO_INSTALL}" +echo "PROTOBUF_LIB_DIR=${PROTOBUF_LIB_DIR}" + +export PATH="${LIBPROTO_INSTALL}/bin:${PATH}" +export LD_LIBRARY_PATH="${PROTOBUF_LIB_DIR}:${LD_LIBRARY_PATH}" + +export Protobuf_DIR="${PROTOBUF_LIB_DIR}/cmake/protobuf" + +if [ -d "${PROTOBUF_LIB_DIR}/cmake/absl" ]; then + export ABSL_DIR="${PROTOBUF_LIB_DIR}/cmake/absl" +fi + +# ----------------------------------------------------------------------------- +# Clone opencv-python source +# ----------------------------------------------------------------------------- + +cd "$CURRENT_DIR" + +if [ ! -d "$PACKAGE_DIR" ]; then + git clone "$PACKAGE_URL" +fi + +cd "$PACKAGE_DIR" + +git -c advice.detachedHead=false checkout "$GIT_TAG" +git submodule update --init --recursive + +# ----------------------------------------------------------------------------- +# Ensure MLAS headers are visible to the compiler +# ----------------------------------------------------------------------------- + +MLAS_DIR="$(pwd)/opencv/3rdparty/mlas" + +if [ -d "${MLAS_DIR}" ]; then + echo "Adding MLAS include locations to compiler flags:" + + ls -l "${MLAS_DIR}/lib/power" || true + ls -l "${MLAS_DIR}/include" || true + + export CFLAGS="-I${MLAS_DIR}/include -I${MLAS_DIR}/lib -I${MLAS_DIR}/lib/power ${CFLAGS:-}" + export CXXFLAGS="${CFLAGS}" + export CPPFLAGS="${CFLAGS}" +fi + +# ----------------------------------------------------------------------------- +# Patch vsx_utils.hpp for ppc64le compatibility +# ----------------------------------------------------------------------------- + +HEADER_FILE="$(pwd)/opencv/modules/core/include/opencv2/core/vsx_utils.hpp" + +if [ -f "$HEADER_FILE" ]; then + sed -i \ + '261c\#if defined(__POWER10__) || (defined(__powerpc64__) && defined(__ARCH_PWR10__))' \ + "$HEADER_FILE" + + echo "Patched vsx_utils.hpp line 261:" + sed -n '261p' "$HEADER_FILE" +fi + +# ----------------------------------------------------------------------------- +# OpenCV configuration +# ----------------------------------------------------------------------------- + +export ENABLE_HEADLESS=1 + +export CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release + -DCMAKE_C_STANDARD=11 + -DCMAKE_CXX_STANDARD=17 + -DCMAKE_CXX_STANDARD_REQUIRED=ON + -DCMAKE_C_COMPILER=${CC} + -DCMAKE_CXX_COMPILER=${CXX} + -DCMAKE_AR=${AR} + -DCMAKE_RANLIB=${RANLIB} + -DWITH_EIGEN=1 + -DBUILD_TESTS=0 + -DBUILD_DOCS=0 + -DBUILD_PERF_TESTS=0 + -DBUILD_ZLIB=0 + -DBUILD_TIFF=0 + -DBUILD_PNG=0 + -DBUILD_OPENEXR=0 + -DWITH_OPENEXR=0 + -DBUILD_OPENJPEG=0 + -DWITH_OPENJPEG=1 + -DBUILD_JASPER=0 + -DWITH_ITT=1 + -DBUILD_JPEG=0 + -DBUILD_PROTOBUF=OFF + -DBUILD_LIBPROTOBUF_FROM_SOURCES=OFF + -DPROTOBUF_UPDATE_FILES=ON + -DProtobuf_LIBRARY=${PROTOBUF_LIB_DIR}/libprotobuf.so + -DProtobuf_INCLUDE_DIR=${LIBPROTO_INSTALL}/include + -DProtobuf_PROTOC_EXECUTABLE=${PROTOC_BIN} + -DProtobuf_DIR=${PROTOBUF_LIB_DIR}/cmake/protobuf + -DCMAKE_PREFIX_PATH=${LIBPROTO_INSTALL}:${PROTOBUF_LIB_DIR} + -DBUILD_opencv_dnn=OFF + -DWITH_V4L=1 + -DWITH_OPENCL=0 + -DWITH_OPENCLAMDFFT=0 + -DWITH_OPENCLAMDBLAS=0 + -DWITH_OPENCL_D3D11_NV=0 + -DWITH_1394=0 + -DWITH_CARBON=0 + -DWITH_OPENNI=0 + -DWITH_FFMPEG=0 + -DHAVE_FFMPEG=0 + -DWITH_JASPER=0 + -DWITH_VA=0 + -DWITH_VA_INTEL=0 + -DWITH_GSTREAMER=0 + -DWITH_MATLAB=0 + -DWITH_TESSERACT=0 + -DWITH_VTK=0 + -DWITH_GTK=0 + -DWITH_QT=0 + -DWITH_GPHOTO2=0 + -DINSTALL_C_EXAMPLES=0 + -DWITH_LAPACK=0 + -DHAVE_LAPACK=0 + -DLAPACK_LAPACKE_H=${OpenBLAS_HOME}/include/lapacke.h + -DLAPACK_CBLAS_H=${OpenBLAS_HOME}/include/cblas.h + -DOPENCV_DISABLE_OPTIMIZATION=ON + -DWITH_VSX=OFF + -DENABLE_VSX=OFF + -DCPU_DISPATCH= + -DCPU_BASELINE=" + +# ----------------------------------------------------------------------------- +# NumPy include paths +# ----------------------------------------------------------------------------- + +export C_INCLUDE_PATH="$(python3.14 -c "import numpy; print(numpy.get_include())")" +export CPLUS_INCLUDE_PATH="$C_INCLUDE_PATH" + +echo "NumPy include: $C_INCLUDE_PATH" + +# ----------------------------------------------------------------------------- +# OpenCV test data +# ----------------------------------------------------------------------------- + +if [ -f "$CURRENT_DIR/$PACKAGE_DIR/tests/SampleVideo_1280x720_1mb.mp4" ]; then + ln -sf \ + "$CURRENT_DIR/$PACKAGE_DIR/tests/SampleVideo_1280x720_1mb.mp4" \ + SampleVideo_1280x720_1mb.mp4 +fi + +# ----------------------------------------------------------------------------- +# Build and install package +# ----------------------------------------------------------------------------- + +echo "-----------------------------------------------------" +echo "Building and installing ${PACKAGE_NAME}" +echo "-----------------------------------------------------" + +if ! python3.14 -m pip install . --no-build-isolation ; then + echo "------------------${PACKAGE_NAME}:install_fails-------------------------------------" + echo "${PACKAGE_URL} ${PACKAGE_NAME}" + echo "${PACKAGE_NAME} | ${PACKAGE_URL} | ${PACKAGE_VERSION} | GitHub | Fail | Install_Fails" + exit 1 +fi + +# ----------------------------------------------------------------------------- +# Build wheel +# ----------------------------------------------------------------------------- + +echo "---------------------------------------------------" +echo "Building the wheel" +echo "---------------------------------------------------" + +python3.14 setup.py bdist_wheel \ + --plat-name=linux_$(uname -m) \ + --dist-dir="$CURRENT_DIR" + +# ----------------------------------------------------------------------------- +# Test package +# ----------------------------------------------------------------------------- + +echo "---------------------------------------------------" +echo "Running tests" +echo "---------------------------------------------------" + +# Skip test_video_capture because FFmpeg is disabled. +if ! python3.14 -m pytest tests/test.py -k "not test_video_capture" -v ; then + echo "------------------${PACKAGE_NAME}:install_success_but_test_fails---------------------" + echo "${PACKAGE_URL} ${PACKAGE_NAME}" + echo "${PACKAGE_NAME} | ${PACKAGE_URL} | ${PACKAGE_VERSION} | GitHub | Fail | Install_success_but_test_Fails" + exit 2 +else + echo "------------------${PACKAGE_NAME}:install_&_test_both_success-------------------------" + echo "${PACKAGE_URL} ${PACKAGE_NAME}" + echo "${PACKAGE_NAME} | ${PACKAGE_URL} | ${PACKAGE_VERSION} | GitHub | Pass | Both_Install_and_Test_Success" + exit 0 +fi +