summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: ded11cf533409d3a77d497c3a4fc6e9891ad2762 (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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# Maintainer mattf <matheusfillipeag@gmail.com>

pkgname=curl-impersonate-chrome
pkgver=r120.7717c22
_gitname=curl-impersonate
pkgrel=1
pkgdesc="A special compilation of curl that makes it impersonate Chrome"
url="https://github.com/lwthiker/curl-impersonate"
license=('MIT')
arch=('x86_64')
md5sums=('SKIP')
makedepends=(git gcc cmake go ninja unzip zlib autoconf automake libtool patch)
depends=(nss)
provides=(curl-impersonate-chrome)

# WORKAROUND The default /etc/makepkg.conf shipped by arch comes with -Werror=format which can't be 
# overriden otherwise and wont let boringssl compile
options=("!buildflags")

BROTLI_VERSION=1.0.9
BROTLI_URL="https://github.com/google/brotli/archive/refs/tags/v${BROTLI_VERSION}.tar.gz"
BROTLI_VERSION="brotli-${BROTLI_VERSION}"
BORING_SSL_COMMIT=3a667d10e94186fd503966f5638e134fe9fb4080
BORING_SSL_URL="https://github.com/google/boringssl/archive/${BORING_SSL_COMMIT}.zip"
BORING_SSL_DIR="boringssl-${BORING_SSL_COMMIT}"
NGHTTP2_VERSION=nghttp2-1.46.0
NGHTTP2_URL=https://github.com/nghttp2/nghttp2/releases/download/v1.46.0/nghttp2-1.46.0.tar.bz2
CURL_VERSION=curl-7.81.0
CURL_URL="https://curl.se/download/${CURL_VERSION}.tar.xz"

source=(
  "git+$url"
  "boringssl.zip::${BORING_SSL_URL}"
  "${NGHTTP2_VERSION}.tar.bz2::${NGHTTP2_URL}"
  "${CURL_VERSION}.tar.xz::${CURL_URL}"
  "${BROTLI_VERSION}.tar.gz::${BROTLI_URL}"
)
md5sums=('SKIP'
         'afaf515861012f435653fab96cae2a5f'
         'de2aaa48ae0bf9713da3a9bfc3f1629f'
         '41954fa09f879fccb57d88be23fe8606'
         'c2274f0c7af8470ad514637c35bcee7d')

browser_dir=${_gitname}/chrome


pkgver() {
  cd ${_gitname}
  printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}

build_brotli() {
  cd ${srcdir}
  cd ${BROTLI_VERSION}
  mkdir -p build
  cd build
  cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./installed ..
  cmake --build . --config Release --target install
}

patch_boringssl () {
  cd ${srcdir}
  cp ${browser_dir}/patches/boringssl-*.patch ${BORING_SSL_DIR}
  cd ${BORING_SSL_DIR}
  for p in $(ls boringssl-*.patch); do patch -p1 < $p; done
}

build_boringssl () {
  cd ${srcdir}
  cd ${BORING_SSL_DIR}
  mkdir -p build 
  cd build
  cmake -DCMAKE_POSITION_INDEPENDENT_CODE=on -GNinja ..
  ninja
  cd ${srcdir}
  mkdir -p ${BORING_SSL_DIR}/build/lib
  ln -sf ../crypto/libcrypto.a ${BORING_SSL_DIR}/build/lib/libcrypto.a
  ln -sf ../ssl/libssl.a ${BORING_SSL_DIR}/build/lib/libssl.a
  cp -R ${BORING_SSL_DIR}/include ${BORING_SSL_DIR}/build
}

patch_nghttp2 () {
  cd ${srcdir}
  cp ${browser_dir}/patches/libnghttp2-*.patch ${NGHTTP2_VERSION}/
  cd ${NGHTTP2_VERSION}
  for p in $(ls libnghttp2-*.patch); do patch -p1 < $p; done
  autoreconf -i 
  automake 
  autoconf
}

build_nghttp2 () {
  cd ${srcdir}
  cd ${NGHTTP2_VERSION}
  ./configure --with-pic --prefix ${srcdir}/${NGHTTP2_VERSION}/build
  make
  make install
}

patch_curl () {
  cd ${srcdir}
  cp ${browser_dir}/patches/curl-*.patch ${CURL_VERSION}/
  cd ${CURL_VERSION}
  for p in $(ls curl-*.patch); do patch -p1 < $p; done
  autoreconf -fi
}

build_curl () {
  cd ${srcdir}
  cd ${CURL_VERSION}
  ./configure \
    --prefix=${srcdir}/${CURL_VERSION}/install \
    --enable-static \
    --disable-shared \
    --with-openssl=${srcdir}/${BORING_SSL_DIR}/build \
    --with-nghttp2=${srcdir}/${NGHTTP2_VERSION}/build \
    --with-brotli=${srcdir}${BROTLI_VERSION}/build/installed \
    LIBS="-pthread" \
    CFLAGS="-I${srcdir}/${BORING_SSL_DIR}/build \
    -I${srcdir}/${NGHTTP2_VERSION}/build" \
    USE_CURL_SSLKEYLOGFILE=true
  make
  make install
  mkdir -p out
  cp install/bin/curl-impersonate-chrome out/curl-impersonate-chrome
  cp ${srcdir}/${browser_dir}/curl_* out/
  strip out/curl-impersonate-chrome
  chmod +x out/*
}

build_libcurl () {
  cd ${srcdir}
  cd ${CURL_VERSION}
  make clean 
  ./configure \
    --prefix=${srcdir}/${CURL_VERSION}/libinstall \
    --with-openssl=${srcdir}/${BORING_SSL_DIR}/build \
    --with-nghttp2=${srcdir}/${NGHTTP2_VERSION}/build \
    --with-brotli=${srcdir}${BROTLI_VERSION}/build/installed \
    LIBS="-pthread" \
    CFLAGS="-I${srcdir}/${BORING_SSL_DIR}/build \
    -I${srcdir}/${NGHTTP2_VERSION}/build" \
    LIBS="-pthread" \
    USE_CURL_SSLKEYLOGFILE=true
  make
  make install
  ver=$(readlink -f libinstall/lib/libcurl-impersonate-chrome.so | sed 's/.*so\.//')
  cp -d libinstall/lib/libcurl-impersonate* out/
  strip "out/libcurl-impersonate-chrome.so.$ver"
}

prepare () {
  patch_boringssl
  patch_nghttp2
  patch_curl
}

build () {
  build_brotli
  build_boringssl
  build_nghttp2
  build_curl
  build_libcurl
}

package () {
  mkdir -p "${pkgdir}/usr/lib/"

  cd ${CURL_VERSION}
  ver=$(readlink -f libinstall/lib/libcurl-impersonate-chrome.so | sed 's/.*so\.//')
  major=$(echo -n $ver | cut -d'.' -f1)
  cd out/

  install -Dm755 curl-impersonate-chrome "${pkgdir}/usr/bin/${pkgname}"
  install -Dm755 curl_* "${pkgdir}/usr/bin/"
  install -Dm755 libcurl-impersonate-chrome.so.$ver "${pkgdir}/usr/lib/libcurl-impersonate-chrome.so.$ver"

  cd "${pkgdir}/usr/lib/"
  ln -s "libcurl-impersonate-chrome.so.$ver" "libcurl-impersonate-chrome.so.$major"
  ln -s "libcurl-impersonate-chrome.so.$ver" "libcurl-impersonate-chrome.so"
}