summaryrefslogtreecommitdiff
path: root/libre/qt5-webkit/PKGBUILD
blob: 171ecb2bc1dd74150349949ebd47e5c265e0649c (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
# Maintainer (aur): Fabio 'Lolix' Loli <fabio.loli@disroot.org>
# Contributor: Zen Wen <zen.8841@gmail.com>
# Contributor: Felix Yan <felixonmars@archlinux.org>
# Contributor: Antonio Rojas <arojas@archlinux.org>
# Contributor: Andrea Scarpino <andrea@archlinux.org>
# Maintainer: Parabola Hackers <dev@lists.parabola.nu>
# Contributor: bill-auger <bill-auger@programmer.net>


# parabola changes and rationale:
# - blacklist rescue for webengine clients which support webkit
# - pin to strongly-coupled dependency versions

# NOTE: for each qt5-base N.N.N release, re-build as a chain - build order:
#         (qt5-base-N.N.N) <- qt5-webkit <- python-pyqt5 <- qutebrowser


pkgname=qt5-webkit
_pkgver=5.212.0-alpha4
pkgver=${_pkgver/-/}
pkgrel=22
pkgrel+=.parabola1
arch=(x86_64 aarch64)
arch+=(armv7h i686)
url="https://github.com/qtwebkit/qtwebkit"
license=(GPL3 LGPL3 FDL custom)
pkgdesc="Classes for a WebKit2 based implementation and a new QML API"
source=("https://github.com/qtwebkit/qtwebkit/releases/download/qtwebkit-$_pkgver/qtwebkit-${_pkgver}.tar.xz"
        "https://src.fedoraproject.org/rpms/qt5-qtwebkit/raw/rawhide/f/qtwebkit-cstdint.patch"
         icu68.patch
         glib-2.68.patch
         qt5-webkit-python-3.9.patch
         qt5-webkit-bison-3.7.patch)
depends=(qt5-location qt5-sensors qt5-webchannel libwebp libxcomposite gst-plugins-base hyphen woff2

         # namcap implicit depends
         glibc gcc-libs glib2 zlib libx11 sqlite gst-plugins-base-libs libjpeg-turbo icu libpng gstreamer libxml2
         qt5-base qt5-declarative)
         # libxslt
makedepends=(cmake ruby gperf python qt5-doc qt5-tools)
optdepends=('gst-plugins-good: Webm codec support')
options=(!lto)
[[ "${CARCH}" == armv7h ]] && options+=(!debug) # reduce memory usage for armv7h
sha256sums=('9ca126da9273664dd23a3ccd0c9bebceb7bb534bddd743db31caf6a5a6d4a9e6'
            '4c71c958eae45cae65c9f002024eb1369d06029b668e595158138ff7971e64f1'
            '0b40ed924f03ff6081af610bb0ee01560b7bd1fb68f8af02053304a01d4ccdf0'
            '4969dd03e482155e2490b50307dada81dda7bbc9e5398e3a53c20bc474f7c04e'
            '6e0cee08e4fa57b04752e80817f33562f48aa42608a3a620930b6040259b4932'
            '34f37b53ee0bc31c63ce85ebd1ae95543a8ba28483e387b20efd50574bd813be')


## dependency tweaks ##

# FIXME: Could NOT find Sqlite (missing: SQLITE_LIBRARIES)
[[ "${CARCH}" == armv7h ]] && makedepends+=( 'pkgconf<=2.1.0' ) # dustbin 2024-01-31


_version_constraint() # (dep_pkgname [precision])
{
  Log() { [[ "${FUNCNAME[2]}" == package ]] && echo "$@" >&2 || : ; }


  local dep_pkgname=$1
  declare -i req_precision=$2
  local full_version=$(pacman -S --print-format='%v' ${dep_pkgname} 2> /dev/null | tail -n 1)
  local n_dots=$(tmp=${full_version%-*} ; tmp=${tmp//[^\.]} ; echo "${#tmp}" ;)
  local def_precision=$(( n_dots + 1 ))
  local is_prec_valid=$(( req_precision > 0 && req_precision <= def_precision ))
  local precision=$((( is_prec_valid )) && echo ${req_precision} || echo ${def_precision})
  local pkgver_rx='[0-9A-Za-z_]+'
  pkgver_rx=$(sed 's|\]|\+]|' <<<${pkgver_rx}) # according to the wiki, '+' is not allowed,
                                               # but some pkgver have it (eg: 5.15.10+kde+r130)
  local subver_rx='\.'${pkgver_rx}
  local pkgrel_rx='[0-9]+'
  local garbage_rx='[^0-9].*'
  local capture_rx=${pkgver_rx}
  for (( n_dots=1 ; n_dots < precision ; ++n_dots )) ; do capture_rx+=${subver_rx} ; done ;
  local version pkgrel has_dot_char version_min version_max constraint_string
  declare -i subver subver_inc pkgrel_inc

  if   [[ "${full_version}" =~ ^(${capture_rx})(${subver_rx})*-(${pkgrel_rx}).*$ ]]
  then version=${BASH_REMATCH[1]} # pkgver cut to the requested precision
       #unused=${BASH_REMATCH[2]} # discarded pkgver segments
       pkgrel=${BASH_REMATCH[3]}  # pkgrel with non-numerics right-trimmed
       has_dot_char=$([[ "${version}" =~ \. ]] ; echo $(( ! $? )) ; )
       subver=$(sed "s|${garbage_rx}||" <<<${version##*.}) # right-trim from any non-numeric
       version=$( (( has_dot_char )) && echo ${version%.*}.${subver} || echo ${subver} )
       subver_inc=$(( subver + 1 ))
       pkgrel_inc=$(( pkgrel + 1 ))
       version_min=$(   (( ! is_prec_valid    )) && echo ${full_version%-*}-${pkgrel} || \
                                                    echo ${version}                      )
       version_max=$( ( (( ! is_prec_valid    )) && echo ${full_version%-*}-${pkgrel_inc} ) || \
                      ( [[ "${version}" =~ \. ]] && echo ${version%.*}.${subver_inc}      ) || \
                                                    echo ${subver_inc}                         )
       constraint_string="${dep_pkgname}>=${version_min} ${dep_pkgname}<${version_max}"

       Log "Applied version constraint: '${constraint_string}'"
  else Log "ERROR: in _version_constraint() parsing: dep_pkgname='${dep_pkgname}' full_version='${full_version}'"
       exit 1
  fi

  unset -f Log

  echo -n "${constraint_string}"
}


prepare() {
  cd "qtwebkit-${_pkgver}"
  patch -p0 -i ../icu68.patch # Fix build with ICU 68.x
  patch -p1 -i ../glib-2.68.patch # https://github.com/qtwebkit/qtwebkit/issues/1057
  patch -p1 -i ../qt5-webkit-python-3.9.patch # Fix build with python 3.9
  patch -p1 -i ../qt5-webkit-bison-3.7.patch # Fix build with bison 3.7
  patch -p1 -i ../qtwebkit-cstdint.patch # gcc 11.1
}

build() {
  local make_opts=()

  # reduce memory usage for armv7h
  if   [[ "${CARCH}" == armv7h ]]
  then export CXXFLAGS="${CXXFLAGS} -fuse-ld=bfd"
       export LDFLAGS+=' -Wl,--no-keep-memory -Wl,--reduce-memory-overheads'
       make_opts=( '--' '-j4')
  fi

  cmake -B build -S "qtwebkit-${_pkgver}" -Wno-dev \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DCMAKE_CXX_FLAGS="${CXXFLAGS} -DNDEBUG" \
    -DPORT=Qt \
    -DENABLE_XSLT=OFF \
    -DENABLE_TOOLS=OFF
  cmake --build build ${make_opts[*]}

# disabling XSLT to build https://github.com/qtwebkit/qtwebkit/issues/1097
}

package() {
  # pin to strongly-coupled dependency versions
  depends+=( libicudata.so                     \
             $(_version_constraint qt5-base 3) )
  depends+=(libicuuc.so libicui18n.so)
  DESTDIR="${pkgdir}" cmake --install build

  # install 'qt5-base' licenses
  install -d "$pkgdir"/usr/share/licenses
  ln -s /usr/share/licenses/qt5-base "$pkgdir"/usr/share/licenses/${pkgname}
}