summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: f76f9422b401dc248cf60d00a7792fd7e7b4d5d2 (plain)
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
# Maintainer: Robert Zhou <meep dot aur at meepzh dot com>

pkgname=openrv-git
pkgver=3.0.0.r430.94f9412
pkgrel=1
pkgdesc="aka Open RV, an image and sequence viewer for VFX and animation artists"
arch=('x86_64')
url='https://github.com/AcademySoftwareFoundation/OpenRV'
license=('Apache' 'custom')
depends=('alsa-lib' 'libaio' 'mesa' 'tk' 'tcsh' 'opencl-icd-loader' 'glu' 'nss'
         'libxcomposite' 'libxcursor' 'xcb-util-keysyms' 'libxrandr' 'libva'
         'xcb-util-wm' 'xcb-util-renderutil' 'libxkbcommon-x11' 'libvdpau' 'libxtst'
         'libva' 'xcb-util-keysyms' 'libnsl' 'xcb-util-image' 'libcups' 'libpulse')
makedepends=('cmake>=3.24' 'git' 'opencl-headers' 'nasm' 'python-pip' 'meson'
             'openssl-1.1' 'patchelf')
provides=('openrv')
options=(!strip)
source=('git+https://github.com/AcademySoftwareFoundation/OpenRV.git'
        'git+https://github.com/shotgunsoftware/openrv-WFObj.git'
        'git+https://github.com/shotgunsoftware/openrv-pub.git'
        'git+https://github.com/shotgunsoftware/openrv-oiio.git'
        'ffmpeg.patch'
        'ocio.patch'
        'ocio.h.patch'
        'ocio_install_yaml-cpp.patch'
        'ocio_yaml-cpp.patch'
        'oiio.patch'
        'externalpackages.patch'
        'glew-lib64.patch'
        'jpegturbo-lib64.patch'
        'pyside6.patch'
        'pyside6_build_main.patch')
b2sums=('SKIP'
        'SKIP'
        'SKIP'
        'SKIP'
        '006aafc6da23e045967968ffdfbe905436e05f66957e951917bcfc9aca9f515f9fcc2935884d7629ccaf1061ef64531356a2c89b07cad19fdc7f0bba8a7cd123'
        '95f6cff1b9026ad1b9bdd9845c7fc646dcff5b78728bff312605e9d3b0ee0616defd89e9125f9784d8aa532047b67339f4d6a3a984ece819790d10ba06f8d605'
        'c9ef45dfec9f5566fd9f6ab387907b73bb500ea1627f183cc5bbff6b9fb8419d67faa018c39f8f1f78d6164976a313b83842e584873069d17cefa40cdcdb4c22'
        'f5d463d66fadff1d8d9fc7fadd04f5b723bc24a5530dce916e881e812d5e5d701bcbfbcaff6331ef94612028a82b3275fb309dfee292d12800ba4118ddd8c6eb'
        'de1b4b59c5bfac9a9c9196a2775f83185c8d7901c6e9910408481bd0f057b5e9dc7d8b9cef31743a3a394881775f4959d4a991b22a9ea65a0bbedf2e3945fbaa'
        '4d6b004ae837a636bdaf3c97ca0e67feab3c9792548f9d515ff6cef8ee854d716703174aa4349905b9ed078a28ebc4a6f41166f855e3d4068d7b9de4555ebdb9'
        '83132f08eacfa5684d7adbcba60981e53e908025a31b6e39196a13a74a543d346fdcdbc95eb339bfc2c149c100ead760e7d0609afb275481d30a6c190782e8bb'
        'ab830c1bcae5a35a3c3efc7f09776837a5b0b3d53cb7a42db5fad052635e848a79013617c97abdba2ce51fd41a593f8dde216e52e73e0bc3a7f4e608a22d165b'
        '31ae9ab03451ac06771ae3d07d6b07ce86ea38494bea9d25c49940493a2a7e38db5267a5c4043a9811590ca236d3c9735376f4ab2c529b4565c33e57ee2b6448'
        '7eb73c1463fc59ad122cc6dcec795530f1331d754f7c9e1ed849d7b41d1bfe85fa6c84b2ffa1cfcdca247ee13d04b5d89a6d4d7e08c8f40cf39b9a3dc4cd1b52'
        '6ba80a7830666c4b7c79e51647bb71548324aa06c4785e7f806c5ab98105ebc18e7db218cc2a77b38865f54a6bd54c5b45f46fd1b1aaef5202a1c4967f6247fd')

pkgver() {
  cd OpenRV
  ! cmake . >/dev/null 2>&1
  ! cmakelistsver=$(! cmake --system-information |
      awk -F= '$1~/RV_MAJOR_VERSION:STRING/{MAJOR=$2; next} \
                  /RV_MINOR_VERSION:STRING/{MINOR=$2; next} \
                  /RV_REVISION_NUMBER:STRING/{print MAJOR "." MINOR "." $2}')
  git clean -f -d >/dev/null 2>&1
  printf "%s.r%s.%s" $cmakelistsver "$(git rev-list --count HEAD)" "$(git rev-parse --short=7 HEAD)"
}

prepare() {
  cd OpenRV

  git submodule init
  git config submodule.src/lib/files/WFObj.url "$srcdir/openrv-WFObj"
  git config submodule.src/pub.url "$srcdir/openrv-pub"
  git config submodule.src/lib/oiio.url "$srcdir/openrv-oiio"
  git -c protocol.file.allow=always submodule update

  # Use lib instead of lib64
  find cmake -type f -exec sed -i "s/lib64/lib/g" {} \;
  sed -i "s/lib64/lib/g" src/build/make_openssl.py
  sed -i "s/lib64/lib/g" src/build/make_python.py
  sed -i '/-rpath/a\ \ \ \ \ \ \ \ configure_args.append("--libdir=lib")' src/build/make_openssl.py
  patch --forward --strip=1 --input="$srcdir/glew-lib64.patch"
  patch --forward --strip=1 --input="$srcdir/jpegturbo-lib64.patch"

  # Fix build errors that occur on Arch
  patch --forward --strip=1 --input="$srcdir/ffmpeg.patch"  # Use the same version of ffmpeg from the Arch-provided ffmpeg and fix build errors
  patch --forward --strip=1 --input="$srcdir/ocio.patch"  # Include cstdint, force yaml-cpp static library build
  patch --forward --strip=1 --input="$srcdir/oiio.patch"  # Update OIIO version to fix build errors and force matching fmt build
  patch --forward --strip=1 --input="$srcdir/pyside6.patch"  # Force usage of OpenRV's Python installation for shiboken
  sed -i 's/HAVE_MREMAP 1/HAVE_MREMAP 0/g' src/pub/nedmalloc/malloc.c.h
  sed -i 's/s->pcrc_32_tab = get_crc_table()/s->pcrc_32_tab = (const unsigned long *)get_crc_table()/g' src/pub/minizip/unzip.c
  sed -i 's/char\* tagList = \&/char\* tagList = \(char\*\)\&/g' src/pub/FTGL/FTVectoriser.cpp
  sed -i 's/"--enable-shared",/"--enable-shared", "ax_cv_c_float_words_bigendian=no",/' src/build/make_python.py
  sed -i /aja.cmake/d cmake/dependencies/CMakeLists.txt  # Requires libajantv2, which is hardware-specific and requires an update in the AUR
  echo " " > src/plugins/output/AJADevices/CMakeLists.txt
  sed -i '/TwkGLFMesa/d' src/lib/graphics/CMakeLists.txt  # Requires OSMesa, only available through legacy support in mesa-amber
  sed -i '/(MovieRV)/d' src/lib/image/CMakeLists.txt  # Software-based MovieRV uses TwkGLFMesa
  sed -i '/rvio_sw/d' src/bin/imgtools/CMakeLists.txt  # rvio_sw uses MovieRV

  # Options
  # sed -i '/(NON_FREE_ENCODERS_TO_DISABLE/a "nvenc"' cmake/dependencies/ffmpeg.cmake  # Uncomment if not using nvidia
  # sed -i '/"aac"/d' cmake/dependencies/ffmpeg.cmake  # Re-enable non-free aac in ffmpeg

  # Update rvcmds.sh
  sed -i 's/pip install --user/pip install/' rvcmds.sh  # Install to venv
  sed -i -E 's/alias (\w+)="(.+)"/\1() { \2; };/' rvcmds.sh  # Convert aliases to PKGBUILD-callable functions
  sed -i 's,\\"${CMAKE_GENERATOR}\\","${CMAKE_GENERATOR}",' rvcmds.sh
  # Pass CMake defines to rvcmds.sh:
  # * Use latest dependencies in CY2024 and FFmpeg 7
  # * Copy cherry-picks from Arch-provided ffmpeg
  sed -i "s/{WIN_PERL};/{WIN_PERL} -DRV_FFMPEG=7 "'"'"-DRV_FFMPEG_PATCH_COMMAND_STEP=git cherry-pick -n bcfbf2bac8f9eeeedc407b40596f5c7aaa0d5b47 d0facac679faf45d3356dff2e2cb382580d7a521"'"'";/" rvcmds.sh
  sed -i 's/--target ;/--target $1;/' rvcmds.sh
  sed -i 's/ctest /ctest --exclude-regex ".*(ALSASafe|io_oiio).*" /' rvcmds.sh  # ALSASafe uses Rv::Option, removed OpenVDB from OIIO
  # sed -i 's/--parallel=8/--parallel=1/' rvcmds.sh  # May help with debugging
}

build() {
  cd OpenRV
  # export CMAKE_GENERATOR="Unix Makefiles"  # Uncomment to not use Ninja
  python -m venv .
  source bin/activate

  # Check for a suitable Qt installation, currently mirroring the rvcmds script
  local qt_arch="gcc_64"
  local qt_version="6.5.3"
  local qt_home=$(find ~/Qt*/6.5* -maxdepth 4 -type d -path "*/$qt_arch" | sort -V | tail -n 1)
  if [ -z "$qt_home" ]; then
    qt_home=$(find "$srcdir/Qt/$qt_version" -maxdepth 4 -type d -path "*/$qt_arch" | sort -V | tail -n 1)
  fi
  if [ -z "$qt_home" ]; then
    # If not, use aqtinstall to download it, mirroring the official OpenRV Dockerfiles
    # Thank you michimussato for the suggestion!
    if ! pip show aqtinstall &> /dev/null; then
      pip install aqtinstall
    fi
    local qt_modules="debug_info qt3d qt5compat qtcharts qtconnectivity qtdatavis3d qtgrpc qthttpserver \
                      qtimageformats qtlanguageserver qtlocation qtlottie qtmultimedia qtnetworkauth qtpdf \
                      qtpositioning qtquick3d qtquick3dphysics qtquickeffectmaker qtquicktimeline \
                      qtremoteobjects qtscxml qtsensors qtserialbus qtserialport qtshadertools qtspeech \
                      qtvirtualkeyboard qtwaylandcompositor qtwebchannel qtwebengine qtwebsockets qtwebview"
    local qt_archives="icu qtbase qtdeclarative qtsvg qttools qttranslations qtwayland"
    python -m aqt install-qt linux desktop $qt_version $qt_arch -O "$srcdir/Qt" \
      -m ${qt_modules} \
      --archives ${qt_archives}
    qt_home="$srcdir/Qt/$qt_version/$qt_arch"
  fi

  QT_HOME="$qt_home" source rvcmds.sh
  CMAKE_POLICY_VERSION_MINIMUM=3.5 QT_HOME="$qt_home" rvbootstrap
}

check() {
  cd OpenRV
  source rvcmds.sh
  rvtest
}

package() {
  cd OpenRV
  install -Dm644 "LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
  mkdir -p "$pkgdir/opt/openrv"
  export RV_INST="$pkgdir/opt/openrv"
  source rvcmds.sh
  rvinst
}