summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: d0353c776fd79a05a6a6cc2f5c7649148df5cd29 (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
# Maintainer: Menci <huanghaorui301@gmail.com>
pkgname=curl-http3-msquic
pkgver=7.86.0
pkgrel=1
pkgdesc="An URL retrieval utility and library - compiled with HTTP/3 support (with msquic) - binary is called curl3"
arch=('x86_64' 'aarch64')
url="https://curl.haxx.se"
license=('MIT')
depends=('ca-certificates' 'zlib' 'libpsl' 'libnghttp2'
         'libidn2' 'libidn2.so')
makedepends=('git' 'cmake')
conflicts=('curl-http3')
provides=('curl-http3')
source=(
	"https://curl.haxx.se/download/curl-$pkgver.tar.gz"{,.asc}
	00-msh3-static.patch
	01-msquic-openssl-enable-md4.patch
	02-curl-msquic-static.patch
)
sha512sums=('b2d30b4d145a3621862a0f5e6378b5099ba92f4be6e92f4e070ec1299fc5eacba851bf993efd613b366fb81642f3f5cccb6e02adcd472dccc9c5e65c1a51812c'
            'SKIP'
            '849bfeee56ba53ffa3e8ee73df858688848fe350f91a3e8fca2726e5d0b4050def8b64668d8dbb12052cf81a70542f4a6f5faa89b1b91ea24eb64f88383724f0'
            '7a7f31b53fe1b4e7fd0c905e8078b7859ab0b408e08ea0efdead2cedcf0b64e2e49e82c9723b5cd128f0e564a8e9723bd51154c6489609c63a93a023d6f131c8'
            '544fc1c667f89323f0a071e002770b85ffd441c0dedb782c6e5d3b1348a646f5fb1d2fa2db8db584fe9d508888231d5c481a07282689ef20c857c98edcf58eaa')
validpgpkeys=('27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2') # Daniel Stenberg

_msh3_ref=d8b3e7d131be5a9bec2ef60a362e2a639d09b790

prepare() {
  # Patch curl
  patch -Np1 -d "curl-${pkgver}" -i "${srcdir}"/02-curl-msquic-static.patch

  # Fetch msh3 source code
  mkdir msh3 && cd msh3
  git init
  git remote add origin https://github.com/nibanks/msh3
  git fetch --depth 1 origin ${_msh3_ref}
  git checkout FETCH_HEAD
  git submodule update --init --recursive --recommend-shallow --progress
  cd ..

  # Patch msh3
  patch -Np1 -d msh3 -i "${srcdir}"/00-msh3-static.patch
  patch -Np1 -d msh3/msquic -i "${srcdir}"/01-msquic-openssl-enable-md4.patch
}

build() {
  mkdir "${srcdir}"/build-{msh3,curl}

  unset CFLAGS
  unset CXXFLAGS
  unset LDFLAGS

  # Build static msh3
  cd "${srcdir}/build-msh3"
  cmake -G 'Unix Makefiles' -DBUILD_SHARED_LIBS=OFF -DQUIC_BUILD_SHARED=OFF -DCMAKE_INSTALL_PREFIX=./target "${srcdir}/msh3"
  make
  # Install msh3 headers and static libraries
  ## All static libraries including dependencies are installed to prefix "build-msh3/target"
  make install
  find ~+ -regextype posix-extended -regex '^.*\.a$' -exec cp {} ./target/lib/ \;

  # Build curl
  cd "${srcdir}/curl-${pkgver}"
  autoreconf -fi
  cd "${srcdir}/build-curl"
  ## Arch Linux build flags + msh3
  "${srcdir}/curl-${pkgver}"/configure \
    LDFLAGS="-Wl,-rpath,/usr/local/lib" \
    --with-msh3="${srcdir}/build-msh3/target" \
    --with-openssl \
    --enable-alt-svc \
    --prefix=/usr \
    --mandir=/usr/share/man \
    --disable-ldap \
    --disable-ldaps \
    --disable-manual \
    --disable-shared \
    --enable-ipv6 \
    --enable-threaded-resolver \
    --with-random=/dev/urandom \
    --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt
  make
}

package() {
  cd "${srcdir}/build-curl"

  make DESTDIR="${pkgdir}" install
  make DESTDIR="${pkgdir}" install -C scripts

  # License
  install -Dt "${pkgdir}/usr/share/licenses/${pkgname}" -m644 "${srcdir}/curl-${pkgver}"/COPYING
  cd ..

  # Rename curl to avoid conflicts
  mv "${pkgdir}/usr/bin/curl" "${pkgdir}/usr/bin/curl3"
  mv "${pkgdir}/usr/bin/curl-config" "${pkgdir}/usr/bin/curl-config3"

  # Remove stuff that would conflict with core/curl
  rm -rf "${pkgdir}/usr/lib" "${pkgdir}/usr/share" "${pkgdir}/usr/include"
}