upgpkg: maxima 5.46.0-9 (sbcl rebuild)
[arch-packages.git] / rust / trunk / PKGBUILD
blobf52a8e02b0f1c0072f117616cf625db683fce83e
1 # Maintainer: Johannes Löthberg <johannes@kyriasis.com>
2 # Maintainer: Jan Alexander Steffens (heftig) <heftig@archlinux.org>
3 # Contributor: Alexander F Rødseth <xyproto@archlinux.org>
4 # Contributor: Daniel Micay <danielmicay@gmail.com>
5 # Contributor: userwithuid <userwithuid@gmail.com>
7 pkgbase=rust
8 pkgname=(
9   rust
10   lib32-rust-libs
11   rust-musl
12   rust-wasm
13   rust-src
15 epoch=1
16 pkgver=1.68.2
17 pkgrel=1
18 pkgdesc="Systems programming language focused on safety, speed and concurrency"
19 url=https://www.rust-lang.org/
20 arch=(x86_64)
21 license=(MIT Apache)
22 options=(
23   !debug
24   !emptydirs
25   !lto
26   !strip
28 depends=(
29   curl
30   gcc
31   gcc-libs
32   libssh2
33   llvm-libs
35 makedepends=(
36   cmake
37   lib32-gcc-libs
38   libffi
39   lld
40   llvm
41   musl
42   ninja
43   perl
44   python
45   rust
46   wasi-libc
48 checkdepends=(
49   gdb
50   procps-ng
52 source=(
53   "https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz"{,.asc}
54   0001-cargo-Change-libexec-dir.patch
55   0001-bootstrap-Change-libexec-dir.patch
56   0002-compiler-Change-LLVM-targets.patch
57   0003-compiler-Use-wasm-ld-for-wasm-targets.patch
59 b2sums=('acc31c33a4b9ed7af2866007b995a8be074fc87d31ee20540b4caa926277e5f7982c8cecd16f25d6e4fa4986f1181a30f5c0260ec6b9cf6260c742b2a94c1581'
60         'SKIP'
61         'dce1c2340b172753b9d56dcc9d401e4cd9c66d64721c97e256974c18f17b0489e65e3732ef4e15538ea6e07c34f1269775a51c0c7c72e63a62f41ff258ce9ec2'
62         '01dee52ef899c0545cde37b5e1ba3ecfd5def3785145ed9f440df12945885311b63ff974294c1efed65b25b01bdb5cea37d7830e8d9775daefec8c1bcd3e159b'
63         '66c5cf262c4b865cdcc238d88aad4aa46e0861de0b4e20b5e86f7f1c312f7a40df0f9477fbc494949a99f51e9eb93537c072270e9bd20dfa79eb5cbe0d850e0f'
64         '9f3f911088a22101f8966dc16a1ecc65da5facaad5c169d9464e721aa452dd45968d359a5b35ae74ff23bd98d44c60cb04c0b8bc89e10fb99549c1670371c902')
65 validpgpkeys=(108F66205EAEB0AAA8DD5E1C85AB96E6FA1BE5FE  # Rust Language (Tag and Release Signing Key) <rust-key@rust-lang.org>
66               474E22316ABF4785A88C6E8EA2C794A986419D8A) # Tom Stellard <tstellar@redhat.com>
68 prepare() {
69   cd rustc-$pkgver-src
71   # Patch bootstrap and cargo so credential helpers
72   # are in /usr/lib instead of /usr/libexec
73   patch -d src/tools/cargo -Np1 < ../0001-cargo-Change-libexec-dir.patch
74   patch -Np1 -i ../0001-bootstrap-Change-libexec-dir.patch
76   # Use our *-pc-linux-gnu targets, making LTO with clang simpler
77   patch -Np1 -i ../0002-compiler-Change-LLVM-targets.patch
79   # Use our wasm-ld
80   patch -Np1 -i ../0003-compiler-Use-wasm-ld-for-wasm-targets.patch
82   cat >config.toml <<END
83 changelog-seen = 2
84 profile = "user"
86 [llvm]
87 link-shared = true
89 [build]
90 target = [
91   "x86_64-unknown-linux-gnu",
92   "i686-unknown-linux-gnu",
93   "x86_64-unknown-linux-musl",
94   "wasm32-unknown-unknown",
95   "wasm32-wasi",
97 cargo = "/usr/bin/cargo"
98 rustc = "/usr/bin/rustc"
99 rustfmt = "/usr/bin/rustfmt"
100 locked-deps = true
101 vendor = true
102 tools = [
103   "cargo",
104   "rls",
105   "clippy",
106   "rustfmt",
107   "analysis",
108   "src",
109   "rust-demangler",
111 sanitizers = true
112 profiler = true
114 # Generating docs fails with the wasm32-* targets
115 docs = false
117 [install]
118 prefix = "/usr"
120 [rust]
121 debuginfo-level-std = 2
122 channel = "stable"
123 description = "Arch Linux $pkgbase $epoch:$pkgver-$pkgrel"
124 rpath = false
125 backtrace-on-ice = true
126 remap-debuginfo = true
127 jemalloc = true
129 # LLVM crashes when passing an object through ThinLTO twice.  This is triggered
130 # when using rust code in cross-language LTO if libstd was built using ThinLTO.
131 # http://blog.llvm.org/2019/09/closing-gap-cross-language-lto-between.html
132 # https://github.com/rust-lang/rust/issues/54872
133 codegen-units-std = 1
135 # musl target produces warnings
136 deny-warnings = false
138 [dist]
139 compression-formats = ["gz"]
141 [target.x86_64-unknown-linux-gnu]
142 cc = "/usr/bin/gcc"
143 cxx = "/usr/bin/g++"
144 ar = "/usr/bin/gcc-ar"
145 ranlib = "/usr/bin/gcc-ranlib"
146 llvm-config = "/usr/bin/llvm-config"
148 [target.i686-unknown-linux-gnu]
149 cc = "/usr/bin/gcc"
150 cxx = "/usr/bin/g++"
151 ar = "/usr/bin/gcc-ar"
152 ranlib = "/usr/bin/gcc-ranlib"
154 [target.x86_64-unknown-linux-musl]
155 sanitizers = false
156 musl-root = "/usr/lib/musl"
158 [target.wasm32-unknown-unknown]
159 sanitizers = false
160 profiler = false
162 [target.wasm32-wasi]
163 sanitizers = false
164 profiler = false
165 wasi-root = "/usr/share/wasi-sysroot"
169 _pick() {
170   local p="$1" f d; shift
171   for f; do
172     d="$srcdir/$p/$f"
173     mkdir -p "$(dirname "$d")"
174     mv "$f" "$d"
175     rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")"
176   done
179 build() {
180   cd rustc-$pkgver-src
182   export RUST_BACKTRACE=1
184   DESTDIR="$srcdir/dest-rust" python ./x.py install -j "$(nproc)"
186   cd ../dest-rust
188   # delete unnecessary files, e.g. files only used for the uninstall script
189   rm usr/lib/rustlib/{components,install.log,rust-installer-version,uninstall.sh}
190   rm usr/lib/rustlib/manifest-*
192   # rustbuild always installs copies of the shared libraries to /usr/lib,
193   # overwrite them with symlinks to the per-architecture versions
194   mkdir -p usr/lib32
195   ln -srft usr/lib   usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/*.so
196   ln -srft usr/lib32 usr/lib/rustlib/i686-unknown-linux-gnu/lib/*.so
198   mkdir -p usr/share/bash-completion
199   mv etc/bash_completion.d usr/share/bash-completion/completions
201   mkdir -p usr/share/licenses/rust
202   mv -t usr/share/licenses/rust usr/share/doc/rust/{COPYRIGHT,LICENSE*}
204   _pick dest-i686 usr/lib/rustlib/i686-unknown-linux-gnu usr/lib32
205   _pick dest-musl usr/lib/rustlib/x86_64-unknown-linux-musl
206   _pick dest-wasm usr/lib/rustlib/wasm32-*
207   _pick dest-src  usr/lib/rustlib/src
210 package_rust() {
211   optdepends=(
212     'gdb: rust-gdb script'
213     'lldb: rust-lldb script'
214   )
215   provides=(
216     cargo
217     rustfmt
218   )
219   conflicts=(
220     cargo
221     'rust-docs<1:1.56.1-3'
222     rustfmt
223   )
224   replaces=(
225     cargo
226     cargo-tree
227     'rust-docs<1:1.56.1-3'
228     rustfmt
229   )
231   cp -a dest-rust/* "$pkgdir"
234 package_lib32-rust-libs() {
235   pkgdesc="32-bit target and libraries for Rust"
236   depends=(
237     lib32-gcc-libs
238     rust
239   )
240   provides=(lib32-rust)
241   conflicts=(lib32-rust)
242   replaces=(lib32-rust)
244   cp -a dest-i686/* "$pkgdir"
246   mkdir -p "$pkgdir/usr/share/licenses"
247   ln -s rust "$pkgdir/usr/share/licenses/$pkgname"
250 package_rust-musl() {
251   pkgdesc="Musl target for Rust"
252   depends=(rust)
254   cp -a dest-musl/* "$pkgdir"
256   mkdir -p "$pkgdir/usr/share/licenses"
257   ln -s rust "$pkgdir/usr/share/licenses/$pkgname"
260 package_rust-wasm() {
261   pkgdesc="WebAssembly targets for Rust"
262   depends=(
263     lld
264     rust
265   )
267   cp -a dest-wasm/* "$pkgdir"
269   mkdir -p "$pkgdir/usr/share/licenses"
270   ln -s rust "$pkgdir/usr/share/licenses/$pkgname"
273 package_rust-src() {
274   pkgdesc="Source code for the Rust standard library"
275   depends=(rust)
277   cp -a dest-src/* "$pkgdir"
279   mkdir -p "$pkgdir/usr/share/licenses"
280   ln -s rust "$pkgdir/usr/share/licenses/$pkgname"
283 # vim:set ts=2 sw=2 et: