PKGBUILD 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. # Maintainer (arch): Antonio Rojas <arojas@archlinux.org>
  2. # Contributor: Ray Rashif <schiv@archlinux.org>
  3. # Contributor: Tobias Powalowski <tpowa@archlinux.org>
  4. # Contributor: André Silva <emulatorman@hyperbola.info>
  5. # Contributor: Márcio Silva <coadde@hyperbola.info>
  6. # Maintainer: Omar Vega Ramos <ovruni@gnu.org.pe>
  7. # Contributor: grizzlyuser <grizzlyuser@protonmail.com>
  8. # Contributor: bill-auger <bill-auger@programmer.net>
  9. # parabola changes and rationale:
  10. # - remove support for non-free/patent-encumbered algorithms and graphics
  11. # (SIFT and SURF algorithms, "lena" images, CUDA)
  12. pkgbase=opencv
  13. pkgname=(opencv opencv-samples python-opencv opencv-cuda)
  14. pkgname=( ${pkgname[*]/opencv-cuda/} ) # non-free
  15. pkgver=4.7.0
  16. pkgrel=2
  17. _pkgver_i686=4.5.5
  18. _pkgrel_i686=4.0
  19. [[ "${CARCH}" == i686 ]] && eval "pkgver=\$_pkgver_${CARCH}" # our different arches do not
  20. [[ "${CARCH}" == i686 ]] && eval "pkgrel=\$_pkgrel_${CARCH}" # always roll at the same speed
  21. pkgrel+=.parabola1
  22. pkgdesc='Open Source Computer Vision Library'
  23. pkgdesc="${pkgdesc/Open Source/}"
  24. arch=(x86_64)
  25. arch+=(armv7h i686)
  26. license=(BSD3)
  27. url='https://opencv.org/'
  28. depends=(tbb openexr gst-plugins-base libdc1394 cblas lapack libgphoto2 openjpeg2 ffmpeg protobuf)
  29. makedepends=(cmake python-numpy python-setuptools mesa eigen hdf5 lapacke qt5-base vtk glew ant java-environment pugixml openmpi cudnn fmt)
  30. makedepends=( ${makedepends[*]/cudnn/} ) # non-free
  31. makedepends+=( openblas ) # undefined reference to `cblas_{c,d,s,z}gemm'
  32. # makedepends+=( openblas-lapack ) # undefined reference to `cblas_{c,d,s,z}gemm'
  33. optdepends=('opencv-samples: samples'
  34. 'vtk: for the viz module'
  35. 'glew: for the viz module'
  36. 'qt5-base: for the HighGUI module'
  37. 'hdf5: for the HDF5 module'
  38. 'opencl-icd-loader: For coding with OpenCL'
  39. 'java-runtime: Java interface')
  40. source=(https://github.com/opencv/opencv/archive/$pkgver/$pkgname-$pkgver.tar.gz
  41. https://github.com/opencv/opencv_contrib/archive/$pkgver/opencv_contrib-$pkgver.tar.gz
  42. vtk9.patch)
  43. mksource=(${source[*]})
  44. source=(https://repo.parabola.nu/other/${pkgname}-libre/${pkgname}-libre-${pkgver}.tar.gz{,.sig})
  45. sha256sums=('8df0079cdbe179748a18d44731af62a245a45ebf5085223dc03133954c662973'
  46. '42df840cf9055e59d0e22c249cfb19f04743e1bdad113d31b1573d3934d62584'
  47. 'f35a2d4ea0d6212c7798659e59eda2cb0b5bc858360f7ce9c696c77d3029668e')
  48. mksha256sums=(${sha256sums[*]})
  49. sha256sums=('6e4b340fd60328e304065bd57d7cc4c41e954d8d4ef3a18b090ef5e898240512'
  50. SKIP)
  51. validpgpkeys=('3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40') # bill-auger
  52. mksource() {
  53. ## opencv ##
  54. cd "$srcdir/$pkgname-$pkgver"
  55. # remove lena.png and lena.jpg images
  56. rm -v $(find . -iname '*lena*')
  57. ## opencv_contrib ##
  58. cd "${srcdir}"/opencv_contrib-${pkgver}
  59. # remove SIFT and SURF algorithms
  60. rm -rv modules/xfeatures2d
  61. # remove CUDA modules
  62. rm -rv modules/cuda*
  63. }
  64. build() {
  65. # SSE{2,3} is not available for armv7h or i686 (ARM has 'NEON' instead)
  66. local per_arch_options=''
  67. case "$CARCH" in
  68. armv7h|i686) per_arch_options='-DCPU_BASELINE_DISABLE=SSE,SSE2' ;;
  69. x86_64 ) per_arch_options='-DCPU_BASELINE_DISABLE=SSE3 -DCPU_BASELINE_REQUIRE=SSE2' ;;
  70. esac
  71. export JAVA_HOME="/usr/lib/jvm/default"
  72. # cmake's FindLAPACK doesn't add cblas to LAPACK_LIBRARIES, so we need to specify them manually
  73. _opts="-DWITH_OPENCL=ON \
  74. -DWITH_OPENGL=ON \
  75. -DWITH_TBB=ON \
  76. -DWITH_VULKAN=ON \
  77. -DWITH_QT=ON \
  78. -DBUILD_WITH_DEBUG_INFO=OFF \
  79. -DBUILD_TESTS=OFF \
  80. -DBUILD_PERF_TESTS=OFF \
  81. -DBUILD_EXAMPLES=ON \
  82. -DBUILD_PROTOBUF=OFF \
  83. -DPROTOBUF_UPDATE_FILES=ON \
  84. -DINSTALL_C_EXAMPLES=ON \
  85. -DINSTALL_PYTHON_EXAMPLES=ON \
  86. -DCMAKE_INSTALL_PREFIX=/usr \
  87. -DCPU_BASELINE_DISABLE=SSE3 \
  88. -DCPU_BASELINE_REQUIRE=SSE2 \
  89. -DOPENCV_EXTRA_MODULES_PATH=$srcdir/opencv_contrib-$pkgver/modules \
  90. -DOPENCV_SKIP_PYTHON_LOADER=ON \
  91. -DLAPACK_LIBRARIES=/usr/lib/liblapack.so;/usr/lib/libblas.so;/usr/lib/libcblas.so \
  92. -DLAPACK_CBLAS_H=/usr/include/cblas.h \
  93. -DLAPACK_LAPACKE_H=/usr/include/lapacke.h \
  94. -DOPENCV_GENERATE_PKGCONFIG=ON \
  95. -DOPENCV_ENABLE_NONFREE=ON \
  96. -DOPENCV_JNI_INSTALL_PATH=lib \
  97. -DOPENCV_GENERATE_SETUPVARS=OFF \
  98. -DEIGEN_INCLUDE_PATH=/usr/include/eigen3"
  99. _opts="${_opts/-DCPU_BASELINE_*/} ${per_arch_options}" # per-arch options
  100. _opts="${_opts/-DOPENCV_ENABLE_NONFREE=ON/-DOPENCV_ENABLE_NONFREE=OFF}" # non-free
  101. _opts+=" -DCMAKE_EXE_LINKER_FLAGS=-lcblas" # undefined reference to `cblas_sgemm'
  102. cmake -B build -S $pkgname-$pkgver $_opts
  103. cmake --build build
  104. # 'build-cuda' recipe deleted (non-free)
  105. }
  106. package_opencv() {
  107. DESTDIR="$pkgdir" cmake --install build
  108. # install license file
  109. install -Dm644 $pkgbase-$pkgver/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname
  110. # separate samples package
  111. mv "$pkgdir"/usr/share/opencv4/samples "$srcdir"
  112. # Add java symlinks expected by some binary blobs
  113. ln -sr "$pkgdir"/usr/share/java/{opencv4/opencv-${pkgver//./},opencv}.jar
  114. ln -sr "$pkgdir"/usr/lib/{libopencv_java${pkgver//./},libopencv_java}.so
  115. # Split Python bindings
  116. rm -r "$pkgdir"/usr/lib/python3*
  117. }
  118. package_opencv-samples() {
  119. pkgdesc+=' (samples)'
  120. depends=(opencv)
  121. unset optdepends
  122. mkdir -p "$pkgdir"/usr/share/opencv4
  123. mv samples "$pkgdir"/usr/share/opencv4
  124. # install license file
  125. install -Dm644 $pkgbase-$pkgver/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname
  126. }
  127. package_python-opencv() {
  128. pkgdesc='Python bindings for OpenCV'
  129. depends=(python-numpy opencv vtk glew qt5-base hdf5 jsoncpp openmpi pugixml fmt)
  130. unset optdepends
  131. DESTDIR="$pkgdir" cmake --install build/modules/python3
  132. # install license file
  133. install -Dm644 $pkgbase-$pkgver/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname
  134. }
  135. # package_opencv-cuda() deleted (non-free)