Magellan Linux

Contents of /trunk/extras/rust/rust-1.71.0-r1.smage2

Parent Directory Parent Directory | Revision Log Revision Log


Revision 33569 - (show annotations) (download)
Mon Aug 7 09:42:50 2023 UTC (9 months, 3 weeks ago) by niro
File size: 14950 byte(s)
-ver bump to 1.71.0-r1
1 # $Id$
2
3 PNAME="rust"
4 PVER="1.71.0"
5 PBUILD="r1"
6
7 SPLIT_PACKAGES="rust cargo clippy rustfmt rust-analyzer rust-gdb rust-lldb rust-src"
8 PCAT="dev-lang"
9
10 DESCRIPTION="Systems programming language focused on safety, speed and concurrency."
11 HOMEPAGE="https://www.rust-lang.org/"
12
13 # enable bootstrap of rust with prebuild binary rust
14 # 0=no, 1=yes
15 BOOTSTRAP=1
16
17 # building the html docs
18 # 0=no, 1=yes
19 ENABLE_DOCS=0
20
21 if [[ ${ENABLE_DOCS} = 1 ]]
22 then
23 SPLIT_PACKAGES+=" rust-docs cargo-docs"
24 fi
25
26 # provided rust pver
27 RUST_PVER="${PVER}"
28 # provided pver of cargo, see src/tools/cargo/Cargo.toml
29 CARGO_PVER="0.72.0"
30 # provided pver of rls, see src/tools/rustfmt/Cargo.toml
31 RUSTFMT_PVER="1.5.2"
32 # provided pver of rls, see src/tools/rust-analyzer/Cargo.toml
33 ANALYZER_PVER="${PVER}"
34 # provided pver of clippy, see src/tools/clippy/Cargo.toml
35 CLIPPY_PVER="0.1.71"
36
37 # required pver of llvm and gcc
38 GCC_PVER="13.1.0"
39 LLVM_PVER="15.0.7"
40
41 COMMON_DEPEND=">= net-misc/curl-8
42 >= dev-libs/openssl-3.1
43 >= sys-libs/zlib-1.2
44 >= net-libs/libssh2-1.11"
45
46 RUST_DEPEND=">= sys-libs/llvm-libs-${LLVM_PVER}
47 >= sys-libs/libstdc++-${GCC_PVER}"
48
49 CARGO_DEPEND="${COMMON_DEPEND}"
50
51 RUSTFMT_DEPEND=">= virtual/glibc
52 >= sys-libs/libgcc-${GCC_PVER}"
53
54 ANALYZER_DEPEND="${COMMON_DEPEND}"
55
56 RUSTGDB_DEPEND=">= sys-dev/gdb-13
57 >= dev-lang/python3-3.11"
58
59 RUSTLLDB_DEPEND=">= sys-dev/lldb-${LLVM_PVER}
60 >= dev-lang/python3-3.11"
61
62 SRC_DEPEND=""
63
64 if [[ ${ENABLE_DOCS} = 1 ]]
65 then
66 # both cargo and rust
67 DOCS_DEPEND=""
68 fi
69
70 SDEPEND=">= sys-dev/llvm-${LLVM_PVER}
71 >= sys-dev/clang-${LLVM_PVER}
72 >= dev-lang/perl-5.36
73 >= dev-lang/python3-3.11
74 >= dev-libs/libffi-3.4
75 >= dev-libs/jemalloc-5.3
76 >= dev-util/cmake-3.26
77 >= dev-util/ninja-1.11
78 ${RUST_DEPEND}
79 ${CARGO_DEPEND}
80 ${RUSTFMT_DEPEND}
81 ${ANALYZER_DEPEND}
82 ${RUSTGDB_DEPEND}
83 ${RUSTLLDB_DEPEND}
84 ${SRC_DEPEND}
85 ${DOCS_DEPEND}"
86
87 if [[ ${BOOTSTRAP} = 0 ]]
88 then
89 # see src/stage0.txt
90 SDEPEND+="
91 >= dev-lang/rust-1.70
92 >= dev-lang/cargo-0.70"
93 fi
94
95 SRCFILE="${PNAME}c-${PVER}-src.tar.gz"
96 SRCDIR="${BUILDDIR}/${PNAME}c-${PVER}-src"
97
98 msetfeature "!check"
99 sminclude python3 mtools
100
101 SRC_URI=(
102 https://static.rust-lang.org/dist/${SRCFILE}
103 mirror://${PNAME}/${SRCFILE}
104 mirror://${PNAME}/${PNAME}-1.71.1-0001-bootstrap-Change-libexec-dir.patch
105 mirror://${PNAME}/${PNAME}-1.71.1-0001-cargo-Change-libexec-dir.patch
106 mirror://${PNAME}/${PNAME}-1.71.1-0003-compiler-Change-LLVM-targets.patch
107 mirror://${PNAME}/${PNAME}-1.71.1-0005-bootstrap-Unbreak-building-Rust-1.71.1-with-1.71.0.patch
108 )
109
110 UP2SEPERATOR="\/"
111 UP2DATE="updatecmd https://github.com/rust-lang/rust/releases | highesttarball gz"
112
113 if [[ ${BOOTSTRAP} = 1 ]]
114 then
115 # see src/stage0.txt
116 RUSTBIN_PVER="1.70.0"
117 RUSTBIN_DATE="2023-06-01"
118 RUSTBIN_SRCFILE_x86_64="rustc-${RUSTBIN_PVER}-x86_64-unknown-linux-gnu.tar.xz"
119 RUSTBIN_SRCFILE_x86="rustc-${RUSTBIN_PVER}-i686-unknown-linux-gnu.tar.xz"
120 RUSTBIN_SRCFILE="$(marchsrcfile RUSTBIN_SRCFILE)"
121 RUSTSTD_SRCFILE_x86_64="rust-std-${RUSTBIN_PVER}-x86_64-unknown-linux-gnu.tar.xz"
122 RUSTSTD_SRCFILE_x86="rust-std-${RUSTBIN_PVER}-i686-unknown-linux-gnu.tar.xz"
123 RUSTSTD_SRCFILE="$(marchsrcfile RUSTSTD_SRCFILE)"
124 CARGOBIN_SRCFILE_x86_64="cargo-${RUSTBIN_PVER}-x86_64-unknown-linux-gnu.tar.xz"
125 CARGOBIN_SRCFILE_x86="cargo-${RUSTBIN_PVER}-i686-unknown-linux-gnu.tar.xz"
126 CARGOBIN_SRCFILE="$(marchsrcfile CARGOBIN_SRCFILE)"
127
128 SRC_URI+=(
129 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTBIN_SRCFILE_x86_64}
130 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTBIN_SRCFILE_x86}
131 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTSTD_SRCFILE_x86_64}
132 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${RUSTSTD_SRCFILE_x86}
133 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${CARGOBIN_SRCFILE_x86_64}
134 https://static.rust-lang.org/dist/${RUSTBIN_DATE}/${CARGOBIN_SRCFILE_x86}
135 )
136 fi
137
138 split_info_rust()
139 {
140 DESCRIPTION="Systems programming language focused on safety, speed and concurrency."
141 DEPEND="${RUST_DEPEND}"
142 }
143
144 split_info_cargo()
145 {
146 DESCRIPTION="Rust's package manager and build tool."
147 DEPEND="== dev-lang/rust-${RUST_PVER}
148 ${CARGO_DEPEND}"
149 PCAT="dev-util"
150 PVER="${CARGO_PVER}"
151 }
152
153 split_info_clippy()
154 {
155 DESCRIPTION="Lints to catch common mistakes and improve your Rust code."
156 DEPEND="== dev-util/cargo-${CARGO_PVER}
157 ${CLIPPY_DEPEND}"
158 PCAT="dev-util"
159 PVER="${CLIPPY_PVER}"
160 }
161
162 split_info_rustfmt()
163 {
164 DESCRIPTION="Tool to find and fix Rust formatting issues."
165 DEPEND="== dev-lang/rust-${RUST_PVER}
166 == dev-util/cargo-${CARGO_PVER}
167 ${RUSTFMT_DEPEND}"
168 PCAT="dev-util"
169 PVER="${RUSTFMT_PVER}"
170 }
171
172 split_info_rust-analyzer()
173 {
174 DESCRIPTION="Rust Language Server for IDE integration."
175 DEPEND="== dev-lang/rust-${RUST_PVER}
176 ${ANALYZER_DEPEND}"
177 PCAT="dev-util"
178 PVER="${ANALYZER_PVER}"
179 }
180
181 split_info_rust-gdb()
182 {
183 DESCRIPTION="GDB pretty printers for Rust."
184 DEPEND="== dev-lang/rust-${RUST_PVER}
185 ${RUSTGDB_DEPEND}"
186 PCAT="dev-util"
187 }
188
189 split_info_rust-lldb()
190 {
191 DESCRIPTION="LLDB pretty printers for Rust."
192 DEPEND="== dev-lang/rust-${RUST_PVER}
193 ${RUSTLLDB_DEPEND}"
194 PCAT="dev-util"
195 }
196
197 split_info_rust-src()
198 {
199 DESCRIPTION="Rust standard library sources."
200 DEPEND="${SRC_DEPEND}"
201 }
202
203 split_info_rust-docs()
204 {
205 DESCRIPTION="HTML documentation for the Rust programming language."
206 DEPEND="${DOCS_DEPEND}"
207 }
208
209 split_info_cargo-docs()
210 {
211 DESCRIPTION="HTML documentation for Cargo."
212 DEPEND="== dev-lang/rust-docs-${PVER}
213 ${DOCS_DEPEND}"
214 }
215
216 src_prepare()
217 {
218 munpack ${SRCFILE} || die
219
220 # fix libexecdir
221 cd ${SRCDIR}/src/tools/cargo
222 mpatch ${PNAME}-1.71.1-0001-cargo-Change-libexec-dir.patch || die
223 cd ${SRCDIR}
224 mpatch ${PNAME}-1.71.1-0001-bootstrap-Change-libexec-dir.patch || die
225 # use target*-pc-linux-gnu instead of target*-unknown-linux-gnu to match autotools
226 mpatch ${PNAME}-1.71.1-0003-compiler-Change-LLVM-targets.patch || die
227 # ftbfs
228 mpatch ${PNAME}-1.71.1-0005-bootstrap-Unbreak-building-Rust-1.71.1-with-1.71.0.patch || die
229
230 if [[ ${BOOTSTRAP} = 1 ]]
231 then
232 install -d ${SRCDIR}/build/cache/${RUSTBIN_DATE} || die
233 ln -snf ${SOURCEDIR}/${PNAME}/${RUSTBIN_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die
234 ln -snf ${SOURCEDIR}/${PNAME}/${RUSTSTD_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die
235 ln -snf ${SOURCEDIR}/${PNAME}/${CARGOBIN_SRCFILE} ${SRCDIR}/build/cache/${RUSTBIN_DATE}/ || die
236 fi
237 }
238
239 src_compile()
240 {
241 cd ${SRCDIR}
242
243 local myARCH
244 local myRUSTHOST
245 myARCH="${ARCH}"
246 [[ ${ARCH} = i*86 ]] && myARCH="i686"
247 myRUSTCHOST="${myARCH}-unknown-linux-gnu"
248
249 # create a custom build config
250 cat <<- EOF > ${SRCDIR}/config.toml
251 changelog-seen = 2
252
253 [llvm]
254 # prefer shared libraries
255 link-shared = true
256
257 [build]
258 EOF
259 # support multilib on x86_64
260 if [[ ${ARCH} = x86_64 ]]
261 then
262 cat <<- EOF >> ${SRCDIR}/config.toml
263 target = [ "${myRUSTCHOST}", "i686-unknown-linux-gnu" ]
264 EOF
265 else
266 cat <<- EOF >> ${SRCDIR}/config.toml
267 target = [ "${myRUSTCHOST}" ]
268 EOF
269 fi
270 if [[ ${BOOTSTRAP} = 0 ]]
271 then
272 # use local rust if no bootstrap was requested
273 cat <<- EOF >> ${SRCDIR}/config.toml
274 cargo = "/usr/bin/cargo"
275 rustc = "/usr/bin/rustc"
276 rustfmt = "/usr/bin/rustfmt"
277 EOF
278 fi
279 cat <<- EOF >> ${SRCDIR}/config.toml
280 # do not query new deps online
281 locked-deps = true
282
283 # use the source code shipped in the tarball for the deps
284 vendor = true
285
286 submodules = false
287 python = "${MAGE_PYTHON_EXEC}"
288
289 # build cargo, clippy and co to too
290 extended = true
291
292 # extended tools to build
293 tools = [
294 "cargo",
295 "clippy",
296 "rustdoc",
297 "rustfmt",
298 "rust-analyzer-proc-macro-srv",
299 "analysis",
300 "src",
301 "rust-demangler",
302 "rust-analyzer",
303 ]
304 # build sanitizer runtime
305 sanitizers = true
306 # build profiler runtime
307 profiler = true
308
309 EOF
310 if [[ ${ENABLE_DOCS} = 1 ]]
311 then
312 cat <<- EOF >> ${SRCDIR}/config.toml
313 # build cargo and rustc html doc
314 docs = true
315 EOF
316 else
317 cat <<- EOF >> ${SRCDIR}/config.toml
318 # save some time and space
319 docs = false
320 EOF
321 fi
322 cat <<- EOF >> ${SRCDIR}/config.toml
323
324 [install]
325 prefix = "/usr"
326 libdir = "$(mlibdir)"
327 docdir = "share/doc/${PNAME}-${PVER}"
328 mandir = "share/man"
329
330 [rust]
331 channel = "stable"
332 description = "Magellan-Linux ${PNAME}-${PVER}-${PBUILD}"
333 rpath = false
334 # disable codegen tests
335 codegen-tests = false
336 # print backtrace on internal compiler errors during bootstrap
337 backtrace-on-ice = true
338 # map debuginfo paths to `/rust/$sha/...`.
339 remap-debuginfo = true
340 jemalloc = true
341 # Work around https://github.com/rust-lang/rust/issues/51650
342 deny-warnings = false
343
344 [target.${myRUSTCHOST}]
345 cc = "/usr/bin/gcc"
346 cxx = "/usr/bin/g++"
347 ar = "/usr/bin/gcc-ar"
348 ranlib = "/usr/bin/gcc-ranlib"
349 llvm-config = "/usr/bin/llvm-config"
350
351 EOF
352 # honor multilib gcc setups
353 if [[ ${ARCH} = x86_64 ]]
354 then
355 cat <<- EOF >> ${SRCDIR}/config.toml
356 [target.i686-unknown-linux-gnu]
357 cc = "/usr/bin/gcc"
358 cxx = "/usr/bin/g++"
359 ar = "/usr/bin/gcc-ar"
360 ranlib = "/usr/bin/gcc-ranlib"
361 llvm-config = "/usr/bin/llvm-config"
362 EOF
363 fi
364
365 ## missing llvm link deps
366 #export RUSTFLAGS="$RUSTFLAGS -C link-args=-lffi"
367 ${MAGE_PYTHON_EXEC} ./x.py build --verbose || die
368 }
369
370 src_install_rust()
371 {
372 cd ${SRCDIR}
373 DESTDIR=${BINDIR} ${MAGE_PYTHON_EXEC} ./x.py install || die
374
375 # remove unnecessary files
376 mdelete /usr/bin/*.old || die
377 mdelete /usr/$(mlibdir)/rustlib/components || die
378 mdelete /usr/$(mlibdir)/rustlib/manifest-* || die
379 mdelete /usr/$(mlibdir)/rustlib/rust-installer-version || die
380 mdelete /usr/$(mlibdir)/rustlib/install.log || die
381 mdelete /usr/$(mlibdir)/rustlib/uninstall.sh || die
382
383 # overwrite duplicate solibs with symlinks to safe space
384 local myARCH
385 local myRUSTHOST
386 myARCH="${ARCH}"
387 [[ ${ARCH} = i*86 ]] && myARCH="i686"
388 myRUSTCHOST="${myARCH}-unknown-linux-gnu"
389 local i
390 for i in ${BINDIR}/usr/$(mlibdir)/rustlib/${myRUSTCHOST}/lib/*.so
391 do
392 mlink rustlib/${myRUSTCHOST}/lib/$(basename ${i}) /usr/$(mlibdir)/ || die
393 done
394
395 # create missing 32-bit links on multilib systems
396 if [[ ${ARCH} = x86_64 ]]
397 then
398 minstalldir /usr/$(MABI=m32 mlibdir) || die
399 for i in ${BINDIR}/usr/$(mlibdir)/rustlib/i686-unknown-linux-gnu/lib/*.so
400 do
401 mlink rustlib/i686-unknown-linux-gnu/lib/$(basename ${i}) /usr/$(MABI=m32 mlibdir)/ || die
402 done
403 fi
404
405 # move split packages out of the way
406 install -dv ${BUILDDIR}/rust-split-packages || die
407
408 # rust-analyzer
409 install -dv ${BUILDDIR}/rust-split-packages/rust-analyzer/usr/bin || die
410 mv -v ${BINDIR}/usr/bin/rust-analyzer ${BUILDDIR}/rust-split-packages/rust-analyzer/usr/bin/ || die
411
412 # rustfmt
413 install -dv ${BUILDDIR}/rust-split-packages/fmt/usr/bin || die
414 mv -v ${BINDIR}/usr/bin/cargo-fmt ${BUILDDIR}/rust-split-packages/fmt/usr/bin/ || die
415 mv -v ${BINDIR}/usr/bin/rustfmt ${BUILDDIR}/rust-split-packages/fmt/usr/bin/ || die
416
417 # cargo
418 install -dv ${BUILDDIR}/rust-split-packages/cargo/usr/bin || die
419 # mv -v ${BINDIR}/etc ${BUILDDIR}/rust-split-packages/cargo/ || die
420 mv -v ${BINDIR}/usr/bin/cargo ${BUILDDIR}/rust-split-packages/cargo/usr/bin/ || die
421 install -dv ${BUILDDIR}/rust-split-packages/cargo/usr/share/man/man1 || die
422 mv -v ${BINDIR}/usr/share/man/man1/cargo*.1 ${BUILDDIR}/rust-split-packages/cargo/usr/share/man/man1/ || die
423 install -dv ${BUILDDIR}/rust-split-packages/cargo/usr/share/zsh/site-functions || die
424 mv -v ${BINDIR}/usr/share/zsh/site-functions/_cargo ${BUILDDIR}/rust-split-packages/cargo/usr/share/zsh/site-functions/ || die
425
426 # clippy
427 install -dv ${BUILDDIR}/rust-split-packages/clippy/usr/bin || die
428 mv -v ${BINDIR}/usr/bin/cargo-clippy ${BUILDDIR}/rust-split-packages/clippy/usr/bin/ || die
429 mv -v ${BINDIR}/usr/bin/clippy-driver ${BUILDDIR}/rust-split-packages/clippy/usr/bin/ || die
430
431 # rust-gdb
432 install -dv ${BUILDDIR}/rust-split-packages/rust-gdb/usr/bin || die
433 mv -v ${BINDIR}/usr/bin/rust-gdb* ${BUILDDIR}/rust-split-packages/rust-gdb/usr/bin/ || die
434 install -dv ${BUILDDIR}/rust-split-packages/rust-gdb/usr/$(mlibdir)/rustlib/etc || die
435 mv -v ${BINDIR}/usr/$(mlibdir)/rustlib/etc/gdb_* ${BUILDDIR}/rust-split-packages/rust-gdb/usr/$(mlibdir)/rustlib/etc/ || die
436
437 # rust-lldb
438 install -dv ${BUILDDIR}/rust-split-packages/rust-lldb/usr/bin || die
439 mv -v ${BINDIR}/usr/bin/rust-lldb ${BUILDDIR}/rust-split-packages/rust-lldb/usr/bin/ || die
440 install -dv ${BUILDDIR}/rust-split-packages/rust-lldb/usr/$(mlibdir)/rustlib/etc || die
441 mv -v ${BINDIR}/usr/$(mlibdir)/rustlib/etc/lldb_* ${BUILDDIR}/rust-split-packages/rust-lldb/usr/$(mlibdir)/rustlib/etc/ || die
442
443 # rust-src
444 install -dv ${BUILDDIR}/rust-split-packages/rust-src/usr/$(mlibdir)/rustlib || die
445 mv -v ${BINDIR}/usr/$(mlibdir)/rustlib/src ${BUILDDIR}/rust-split-packages/rust-src/usr/$(mlibdir)/rustlib/ || die
446
447 if [[ ${ENABLE_DOCS} = 1 ]]
448 then
449 # cargo-docs
450 # move cargo first, then the rest of the documentation
451 install -dv ${BUILDDIR}/rust-split-packages/cargo-docs/usr/share/doc/${PNAME}-${PVER}/html || die
452 mv -v ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/html/cargo ${BUILDDIR}/rust-split-packages/cargo-docs/usr/share/doc/${PNAME}-${PVER}/html/ || die
453
454 # rust-docs
455 install -dv ${BUILDDIR}/rust-split-packages/rust-docs/usr/share/doc/${PNAME}-${PVER} || die
456 mv -v ${BINDIR}/usr/share/doc/${PNAME}-${PVER}/html ${BUILDDIR}/rust-split-packages/rust-docs/usr/share/doc/${PNAME}-${PVER}/ || die
457 fi
458
459 minstalldocs COPYRIGHT LICENSE-* ChangeLog README* || die
460 }
461
462 src_install_cargo()
463 {
464 install -d ${BINDIR} || die
465 mv ${BUILDDIR}/rust-split-packages/cargo/* ${BINDIR}/ || die
466 local docsubdir="src/tools/cargo"
467 minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die
468 }
469
470 src_install_clippy()
471 {
472 install -d ${BINDIR} || die
473 mv ${BUILDDIR}/rust-split-packages/clippy/* ${BINDIR}/ || die
474 local docsubdir="src/tools/clippy"
475 minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die
476 }
477
478 src_install_rustfmt()
479 {
480 install -d ${BINDIR} || die
481 mv ${BUILDDIR}/rust-split-packages/fmt/* ${BINDIR}/ || die
482 local docsubdir="src/tools/rustfmt"
483 minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die
484 }
485
486 src_install_rust-analyzer()
487 {
488 install -d ${BINDIR} || die
489 mv ${BUILDDIR}/rust-split-packages/rust-analyzer/* ${BINDIR}/ || die
490 local docsubdir="src/tools/rust-analyzer"
491 minstalldocs ${docsubdir}/COPYRIGHT* ${docsubdir}/CHANGELOG* ${docsubdir}/LICENSE* ${docsubdir}/README* || die
492 }
493
494 src_install_rust-gdb()
495 {
496 install -d ${BINDIR} || die
497 mv ${BUILDDIR}/rust-split-packages/rust-gdb/* ${BINDIR}/ || die
498 }
499
500 src_install_rust-lldb()
501 {
502 install -d ${BINDIR} || die
503 mv ${BUILDDIR}/rust-split-packages/rust-lldb/* ${BINDIR}/ || die
504 }
505
506 src_install_rust-src()
507 {
508 install -d ${BINDIR} || die
509 mv ${BUILDDIR}/rust-split-packages/rust-src/* ${BINDIR}/ || die
510 }
511
512 src_install_rust-docs()
513 {
514 install -d ${BINDIR} || die
515 mv ${BUILDDIR}/rust-split-packages/rust-docs/* ${BINDIR}/ || die
516 }
517
518 src_install_cargo-docs()
519 {
520 install -d ${BINDIR} || die
521 mv ${BUILDDIR}/rust-split-packages/cargo-docs/* ${BINDIR}/ || die
522 }