/[packages]/cauldron/rust/current/SPECS/rust.spec
ViewVC logotype

Contents of /cauldron/rust/current/SPECS/rust.spec

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1698019 - (show annotations) (download)
Thu Mar 4 14:56:22 2021 UTC (3 years, 8 months ago) by tv
File size: 24270 byte(s)
fix building with bundled llvm (SILENT)
1 # (akien) This package is synced with Fedora / Josh Stone's spec.
2 # The aim is to work with them on a rust packaging policy we could share,
3 # so that we can ensure a good packaging and share the workload.
4
5
6 # Only x86_64 and i686 are Tier 1 platforms at this time.
7 # https://doc.rust-lang.org/nightly/rustc/platform-support.html
8 %global rust_arches x86_64 %ix86 armv7hl aarch64 ppc64 ppc64le s390x
9
10 # The channel can be stable, beta, or nightly
11 %{!?channel: %global channel stable}
12
13 # To bootstrap from scratch, set the channel and date from src/stage0.txt
14 # e.g. 1.10.0 wants rustc: 1.9.0-2016-05-24
15 # or nightly wants some beta-YYYY-MM-DD
16 # Note that cargo matches the program version here, not its crate version.
17 %global bootstrap_rust 1.49.0
18 %global bootstrap_cargo 1.49.0
19 %global bootstrap_channel 1.49.0
20 %global bootstrap_date 2020-12-31
21
22 # Only the specified arches will use bootstrap binaries.
23 #global bootstrap_arches %%{rust_arches}
24
25 # To bootstrap a compiler for a Tier 2 platform, we first need to build a
26 # compiler for a Tier 1 platform that targets the Tier 2 platform, then use
27 # the resulting compiler in a second build. Set bootstrap_build_arch to the
28 # Tier 1 arch for the first build, leave it undefined for the second build.
29 %bcond_with bootstrap_i586
30 %if %with bootstrap_i586
31 %ifarch i586
32 %global bootstrap_build_arch i686
33 %endif
34 %endif
35
36 # Using llvm-static may be helpful as an opt-in, e.g. to aid LLVM rebases.
37 %bcond_with llvm_static
38
39 # We can also choose to just use Rust's bundled LLVM, in case the system LLVM
40 # is insufficient. Rust currently requires LLVM 9.0+.
41 %bcond_without bundled_llvm
42 # (akien) Hacks below are needed on mga's buildsystem when we have to rebootstrap llvm.
43 ## Bundled LLVM has underlinking issues:
44 #%%global _disable_ld_no_undefined 1
45 #%%ifarch %%{arm} %%ix86
46 ## Decrease debuginfo verbosity to reduce memory consumption during final library linking
47 #%%global optflags %%(echo %%{optflags} | sed 's/-g /-g1 /')
48 #%%endif
49
50 # Requires stable libgit2 1.1
51 %if 0%{?fedora} >= 34 || 0%{?mageia} >= 8
52 %bcond_with bundled_libgit2
53 %else
54 %bcond_without bundled_libgit2
55 %endif
56
57 %if 0%{?rhel}
58 # Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949)
59 %bcond_without disabled_libssh2
60 %else
61 %bcond_with disabled_libssh2
62 %endif
63
64 %if 0%{?rhel} && 0%{?rhel} < 8
65 %bcond_with curl_http2
66 %else
67 %bcond_without curl_http2
68 %endif
69
70 # LLDB isn't available everywhere...
71 %if 0%{?rhel} && 0%{?rhel} < 8
72 %bcond_with lldb
73 %else
74 %bcond_without lldb
75 %endif
76
77 %if 0%{?mageia}
78 # (akien) Added by tv in mga8/rust 1.37.0.
79 %global _python_bytecompile_extra 0
80 %endif
81
82 Name: rust
83 Version: 1.50.0
84 Release: %mkrel 2
85 Summary: The Rust Programming Language
86 %if 0%{?mageia}
87 Group: Development/Other
88 %endif
89 License: (ASL 2.0 or MIT) and (BSD and MIT)
90 # ^ written as: (rust itself) and (bundled libraries)
91 URL: https://www.rust-lang.org
92 ExclusiveArch: %{rust_arches}
93
94 %if "%{channel}" == "stable"
95 %global rustc_package rustc-%{version}-src
96 %else
97 %global rustc_package rustc-%{channel}-src
98 %endif
99 Source0: https://static.rust-lang.org/dist/%{rustc_package}.tar.xz
100
101 # This internal rust-abi change broke s390x -- revert for now.
102 # https://github.com/rust-lang/rust/issues/80810#issuecomment-781784032
103 Patch1: 0001-Revert-Auto-merge-of-79547.patch
104
105 ### RHEL-specific patches below ###
106
107 # Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949)
108 Patch100: rustc-1.48.0-disable-libssh2.patch
109
110 # libcurl on RHEL7 doesn't have http2, but since cargo requests it, curl-sys
111 # will try to build it statically -- instead we turn off the feature.
112 Patch101: rustc-1.49.0-disable-http2.patch
113
114 # kernel rh1410097 causes too-small stacks for PIE.
115 # (affects RHEL6 kernels when building for RHEL7)
116 Patch102: rustc-1.48.0-no-default-pie.patch
117
118
119 # Get the Rust triple for any arch.
120 %{lua: function rust_triple(arch)
121 local abi = "gnu"
122 if arch == "armv7hl" then
123 arch = "armv7"
124 abi = "gnueabihf"
125 elseif arch == "ppc64" then
126 arch = "powerpc64"
127 elseif arch == "ppc64le" then
128 arch = "powerpc64le"
129 elseif arch == "riscv64" then
130 arch = "riscv64gc"
131 end
132 return arch.."-unknown-linux-"..abi
133 end}
134
135 %if %defined bootstrap_build_arch
136 %global rust_triple %{lua: print(rust_triple(rpm.expand("%{bootstrap_build_arch}")))}
137 %global target_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))}
138 %else
139 %global rust_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))}
140 %global target_triple %{rust_triple}
141 %endif
142
143 %if %defined bootstrap_arches
144 # For each bootstrap arch, add an additional binary Source.
145 # Also define bootstrap_source just for the current target.
146 %{lua: do
147 local bootstrap_arches = {}
148 for arch in string.gmatch(rpm.expand("%{bootstrap_arches}"), "%S+") do
149 table.insert(bootstrap_arches, arch)
150 end
151 local base = rpm.expand("https://static.rust-lang.org/dist/%{bootstrap_date}"
152 .."/rust-%{bootstrap_channel}")
153 local target_arch = rpm.expand("%{_target_cpu}")
154 for i, arch in ipairs(bootstrap_arches) do
155 print(string.format("Source%d: %s-%s.tar.xz\n",
156 i, base, rust_triple(arch)))
157 if arch == target_arch then
158 rpm.define("bootstrap_source "..i)
159 end
160 end
161 end}
162 %endif
163
164 %ifarch %{bootstrap_arches}
165 %global bootstrap_root rust-%{bootstrap_channel}-%{rust_triple}
166 %global local_rust_root %{_builddir}/%{bootstrap_root}/usr
167 Provides: bundled(%{name}-bootstrap) = %{bootstrap_rust}
168 %else
169 BuildRequires: cargo >= %{bootstrap_cargo}
170 %if (0%{?rhel} && 0%{?rhel} < 8) || 0%{?mageia}
171 BuildRequires: %{name} >= %{bootstrap_rust}
172 BuildConflicts: %{name} > %{version}
173 %else
174 BuildRequires: (%{name} >= %{bootstrap_rust} with %{name} <= %{version})
175 %endif
176 %global local_rust_root %{_prefix}
177 %endif
178
179 BuildRequires: make
180 BuildRequires: gcc
181 BuildRequires: gcc-c++
182 BuildRequires: ncurses-devel
183 BuildRequires: curl
184 # explicit curl-devel to avoid httpd24-curl (rhbz1540167)
185 BuildRequires: curl-devel
186 BuildRequires: pkgconfig(libcurl)
187 BuildRequires: pkgconfig(liblzma)
188 BuildRequires: pkgconfig(openssl)
189 BuildRequires: pkgconfig(zlib)
190
191 %if %without bundled_libgit2
192 BuildRequires: pkgconfig(libgit2) >= 1.1.0
193 %endif
194
195 %if %{without disabled_libssh2}
196 # needs libssh2_userauth_publickey_frommemory
197 BuildRequires: pkgconfig(libssh2) >= 1.6.0
198 %endif
199
200 %global python python3
201 BuildRequires: %{python}
202
203 %if %with bundled_llvm
204 BuildRequires: cmake3 >= 3.4.3
205 Provides: bundled(llvm) = 11.0.0
206 %else
207 BuildRequires: cmake >= 2.8.11
208 %if 0%{?epel} == 7
209 %global llvm llvm9.0
210 %endif
211 %if %defined llvm
212 %global llvm_root %{_libdir}/%{llvm}
213 %else
214 %global llvm llvm
215 %global llvm_root %{_prefix}
216 %endif
217 # Restore when it will build with llvm 12
218 #BuildRequires: %{llvm}-devel >= 9.0
219 BuildRequires: llvm11.0-devel
220 %if %with llvm_static
221 BuildRequires: llvm11.0-static
222 # Restore when it will build with llvm 12
223 #BuildRequires: %{llvm}-static
224 BuildRequires: libffi-devel
225 %endif
226 %endif
227
228 # make check needs "ps" for src/test/run-pass/wait-forked-but-failed-child.rs
229 BuildRequires: procps-ng
230
231 # debuginfo-gdb tests need gdb
232 BuildRequires: gdb
233
234 # Virtual provides for folks who attempt "dnf install rustc"
235 Provides: rustc = %{version}-%{release}
236 Provides: rustc%{?_isa} = %{version}-%{release}
237
238 # Always require our exact standard library
239 Requires: %{name}-std-static%{?_isa} = %{version}-%{release}
240
241 # The C compiler is needed at runtime just for linking. Someday rustc might
242 # invoke the linker directly, and then we'll only need binutils.
243 # https://github.com/rust-lang/rust/issues/11937
244 %if 0%{?mageia}
245 Requires: gcc
246 %else
247 Requires: /usr/bin/cc
248 %endif
249
250 # ALL Rust libraries are private, because they don't keep an ABI.
251 %global _privatelibs lib(.*-[[:xdigit:]]{16}*|rustc.*)[.]so.*
252 %global __provides_exclude ^(%{_privatelibs})$
253 %global __requires_exclude ^(%{_privatelibs})$
254 %global __provides_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
255 %global __requires_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
256
257 # While we don't want to encourage dynamic linking to Rust shared libraries, as
258 # there's no stable ABI, we still need the unallocated metadata (.rustc) to
259 # support custom-derive plugins like #[proc_macro_derive(Foo)].
260 %if 0%{?rhel} && 0%{?rhel} < 8 || 0%{?mageia} == 7
261 # eu-strip is very eager by default, so we have to limit it to -g, only debugging symbols.
262 %global _find_debuginfo_opts -g
263 %undefine _include_minidebuginfo
264 %else
265 # Newer find-debuginfo.sh supports --keep-section, which is preferable. rhbz1465997
266 %global _find_debuginfo_opts --keep-section .rustc
267 %endif
268
269 # Use hardening ldflags.
270 %global rustflags -Clink-arg=-Wl,-z,relro,-z,now
271
272 %if %{without bundled_llvm}
273 %if "%{llvm_root}" == "%{_prefix}" || 0%{?scl:1}
274 %global llvm_has_filecheck 1
275 %endif
276 %endif
277
278 %description
279 Rust is a systems programming language that runs blazingly fast, prevents
280 segfaults, and guarantees thread safety.
281
282 This package includes the Rust compiler and documentation generator.
283
284
285 %package std-static
286 Summary: Standard library for Rust
287
288 %description std-static
289 This package includes the standard libraries for building applications
290 written in Rust.
291
292
293 %package debugger-common
294 Summary: Common debugger pretty printers for Rust
295 BuildArch: noarch
296
297 %description debugger-common
298 This package includes the common functionality for %{name}-gdb and %{name}-lldb.
299
300
301 %package gdb
302 Summary: GDB pretty printers for Rust
303 BuildArch: noarch
304 Requires: gdb
305 Requires: %{name}-debugger-common = %{version}-%{release}
306
307 %description gdb
308 This package includes the rust-gdb script, which allows easier debugging of Rust
309 programs.
310
311
312 %if %with lldb
313
314 %package lldb
315 Summary: LLDB pretty printers for Rust
316 BuildArch: noarch
317 Requires: lldb
318 Requires: %{python}-lldb
319 Requires: %{name}-debugger-common = %{version}-%{release}
320
321 %description lldb
322 This package includes the rust-lldb script, which allows easier debugging of Rust
323 programs.
324
325 %endif
326
327
328 %package doc
329 Summary: Documentation for Rust
330 # NOT BuildArch: noarch
331 # Note, while docs are mostly noarch, some things do vary by target_arch.
332 # Koji will fail the build in rpmdiff if two architectures build a noarch
333 # subpackage differently, so instead we have to keep its arch.
334
335 %description doc
336 This package includes HTML documentation for the Rust programming language and
337 its standard library.
338
339
340 %package -n cargo
341 Summary: Rust's package manager and build tool
342 %if %with bundled_libgit2
343 Provides: bundled(libgit2) = 1.1.0
344 %endif
345 # For tests:
346 BuildRequires: git
347 # Cargo is not much use without Rust
348 Requires: rust
349
350 # "cargo vendor" is a builtin command starting with 1.37. The Obsoletes and
351 # Provides are mostly relevant to RHEL, but harmless to have on Fedora/etc. too
352 Obsoletes: cargo-vendor <= 0.1.23
353 Provides: cargo-vendor = %{version}-%{release}
354
355 %description -n cargo
356 Cargo is a tool that allows Rust projects to declare their various dependencies
357 and ensure that you'll always get a repeatable build.
358
359
360 %package -n cargo-doc
361 Summary: Documentation for Cargo
362 BuildArch: noarch
363 # Cargo no longer builds its own documentation
364 # https://github.com/rust-lang/cargo/pull/4904
365 Requires: rust-doc = %{version}-%{release}
366
367 %description -n cargo-doc
368 This package includes HTML documentation for Cargo.
369
370
371 %package -n rustfmt
372 Summary: Tool to find and fix Rust formatting issues
373 Requires: cargo
374
375 # The component/package was rustfmt-preview until Rust 1.31.
376 Obsoletes: rustfmt-preview < 1.0.0
377 Provides: rustfmt-preview = %{version}-%{release}
378
379 %description -n rustfmt
380 A tool for formatting Rust code according to style guidelines.
381
382
383 %package -n rls
384 Summary: Rust Language Server for IDE integration
385 %if %with bundled_libgit2
386 Provides: bundled(libgit2) = 1.1.0
387 %endif
388 Requires: rust-analysis
389 # /usr/bin/rls is dynamically linked against internal rustc libs
390 Requires: %{name}%{?_isa} = %{version}-%{release}
391
392 # The component/package was rls-preview until Rust 1.31.
393 Obsoletes: rls-preview < 1.31.6
394 Provides: rls-preview = %{version}-%{release}
395
396 %description -n rls
397 The Rust Language Server provides a server that runs in the background,
398 providing IDEs, editors, and other tools with information about Rust programs.
399 It supports functionality such as 'goto definition', symbol search,
400 reformatting, and code completion, and enables renaming and refactorings.
401
402
403 %package -n clippy
404 Summary: Lints to catch common mistakes and improve your Rust code
405 Requires: cargo
406 # /usr/bin/clippy-driver is dynamically linked against internal rustc libs
407 Requires: %{name}%{?_isa} = %{version}-%{release}
408
409 # The component/package was clippy-preview until Rust 1.31.
410 Obsoletes: clippy-preview <= 0.0.212
411 Provides: clippy-preview = %{version}-%{release}
412
413 %description -n clippy
414 A collection of lints to catch common mistakes and improve your Rust code.
415
416
417 %package src
418 Summary: Sources for the Rust standard library
419 BuildArch: noarch
420
421 %description src
422 This package includes source files for the Rust standard library. It may be
423 useful as a reference for code completion tools in various editors.
424
425
426 %package analysis
427 Summary: Compiler analysis data for the Rust standard library
428 Requires: rust-std-static%{?_isa} = %{version}-%{release}
429
430 %description analysis
431 This package contains analysis data files produced with rustc's -Zsave-analysis
432 feature for the Rust standard library. The RLS (Rust Language Server) uses this
433 data to provide information about the Rust standard library.
434
435
436 %prep
437
438 %ifarch %{bootstrap_arches}
439 %setup -q -n %{bootstrap_root} -T -b %{bootstrap_source}
440 ./install.sh --components=cargo,rustc,rust-std-%{rust_triple} \
441 --prefix=%{local_rust_root} --disable-ldconfig
442 test -f '%{local_rust_root}/bin/cargo'
443 test -f '%{local_rust_root}/bin/rustc'
444 %endif
445
446 %setup -q -n %{rustc_package}
447
448 %patch1 -p1
449
450 %if %with disabled_libssh2
451 %patch100 -p1
452 %endif
453
454 %if %without curl_http2
455 %patch101 -p1
456 rm -rf vendor/libnghttp2-sys/
457 %endif
458
459 %if 0%{?rhel} && 0%{?rhel} < 8
460 %patch102 -p1
461 %endif
462
463 %if "%{python}" != "python3"
464 # Use our preferred python first
465 sed -i.try-python -e '/^try python3 /i try "%{python}" "$@"' ./configure
466 %endif
467
468 %if %without bundled_llvm
469 rm -rf src/llvm-project/
470 mkdir -p src/llvm-project/libunwind/
471 %endif
472
473 # Remove other unused vendored libraries
474 rm -rf vendor/curl-sys/curl/
475 rm -rf vendor/jemalloc-sys/jemalloc/
476 rm -rf vendor/libssh2-sys/libssh2/
477 rm -rf vendor/libz-sys/src/zlib/
478 rm -rf vendor/libz-sys/src/zlib-ng/
479 rm -rf vendor/lzma-sys/xz-*/
480 rm -rf vendor/openssl-src/openssl/
481
482 %if %without bundled_libgit2
483 rm -rf vendor/libgit2-sys/libgit2/
484 %endif
485
486 %if %with disabled_libssh2
487 rm -rf vendor/libssh2-sys/
488 %endif
489
490 # This only affects the transient rust-installer, but let it use our dynamic xz-libs
491 sed -i.lzma -e '/LZMA_API_STATIC/d' src/bootstrap/tool.rs
492
493 %if %{with bundled_llvm} && 0%{?epel} == 7
494 mkdir -p cmake-bin
495 ln -s /usr/bin/cmake3 cmake-bin/cmake
496 %global cmake_path $PWD/cmake-bin
497 %endif
498
499 %if %{without bundled_llvm} && %{with llvm_static}
500 # Static linking to distro LLVM needs to add -lffi
501 # https://github.com/rust-lang/rust/issues/34486
502 sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \
503 compiler/rustc_llvm/src/lib.rs
504 %endif
505
506 # The configure macro will modify some autoconf-related files, which upsets
507 # cargo when it tries to verify checksums in those files. If we just truncate
508 # that file list, cargo won't have anything to complain about.
509 find vendor -name .cargo-checksum.json \
510 -exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+'
511
512 # Sometimes Rust sources start with #![...] attributes, and "smart" editors think
513 # it's a shebang and make them executable. Then brp-mangle-shebangs gets upset...
514 find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+'
515
516 # Set up shared environment variables for build/install/check
517 %global rust_env RUSTFLAGS="%{rustflags}"
518 %if 0%{?cmake_path:1}
519 %global rust_env %{rust_env} PATH="%{cmake_path}:$PATH"
520 %endif
521 %if %without bundled_libgit2
522 # convince libgit2-sys to use the distro libgit2
523 %global rust_env %{rust_env} LIBGIT2_SYS_USE_PKG_CONFIG=1
524 %endif
525 %if %without disabled_libssh2
526 # convince libssh2-sys to use the distro libssh2
527 %global rust_env %{rust_env} LIBSSH2_SYS_USE_PKG_CONFIG=1
528 %endif
529
530
531 %build
532 export %{rust_env}
533
534 # We're going to override --libdir when configuring to get rustlib into a
535 # common path, but we'll fix the shared libraries during install.
536 %global common_libdir %{_prefix}/lib
537 %global rustlibdir %{common_libdir}/rustlib
538
539 %ifarch aarch64 %{arm} %{ix86} s390x
540 # full debuginfo is exhausting memory; just do libstd for now
541 # https://github.com/rust-lang/rust/issues/45854
542 %if 0%{?rhel} && 0%{?rhel} < 8
543 # Older rpmbuild didn't work with partial debuginfo coverage.
544 %global debug_package %{nil}
545 %define enable_debuginfo --debuginfo-level=0
546 %else
547 %define enable_debuginfo --debuginfo-level=0 --debuginfo-level-std=2
548 %endif
549 %else
550 %define enable_debuginfo --debuginfo-level=2
551 %endif
552
553 # We want the best optimization for std, but it caused problems for rpm-ostree
554 # on ppc64le to have all of the compiler_builtins in a single object:
555 # https://bugzilla.redhat.com/show_bug.cgi?id=1713090
556 %ifnarch %{power64}
557 %define codegen_units_std --set rust.codegen-units-std=1
558 %endif
559
560 # Some builders have relatively little memory for their CPU count.
561 # At least 2GB per CPU is a good rule of thumb for building rustc.
562 ncpus=$(/usr/bin/getconf _NPROCESSORS_ONLN)
563 max_cpus=$(( ($(free -g | awk '/^Mem:/{print $2}') + 1) / 2 ))
564 if [ "$max_cpus" -ge 1 -a "$max_cpus" -lt "$ncpus" ]; then
565 ncpus="$max_cpus"
566 fi
567
568 # (tv) remove once reenabling llvm12:
569 %if %{without bundled_llvm}
570 CONF=$(ls /usr/bin/llvm-config*)
571 %endif
572
573 %configure --disable-option-checking \
574 --libdir=%{common_libdir} \
575 --build=%{rust_triple} --host=%{rust_triple} --target=%{target_triple} \
576 --python=%{python} \
577 --local-rust-root=%{local_rust_root} \
578 %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \
579 %{!?llvm_has_filecheck: --disable-codegen-tests} \
580 %{!?with_llvm_static: --enable-llvm-link-shared } } \
581 %if %{without bundled_llvm}
582 --llvm-config=$CONF \
583 %endif
584 --disable-rpath \
585 %{enable_debuginfo} \
586 --enable-extended \
587 --tools=analysis,cargo,clippy,rls,rustfmt,src \
588 --enable-vendor \
589 --enable-verbose-tests \
590 %{?codegen_units_std} \
591 --release-channel=%{channel} \
592 --release-description="%{?mageia:Mageia }%{?rhel:Red Hat }%{version}-%{release}"
593
594 %{python} ./x.py build -j "$ncpus" --stage 2
595 %{python} ./x.py doc --stage 2
596
597
598 %install
599 export %{rust_env}
600
601 DESTDIR=%{buildroot} %{python} ./x.py install
602
603 # Make sure the shared libraries are in the proper libdir
604 %if "%{_libdir}" != "%{common_libdir}"
605 mkdir -p %{buildroot}%{_libdir}
606 find %{buildroot}%{common_libdir} -maxdepth 1 -type f -name '*.so' \
607 -exec mv -v -t %{buildroot}%{_libdir} '{}' '+'
608 %endif
609
610 # The shared libraries should be executable for debuginfo extraction.
611 find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \
612 -exec chmod -v +x '{}' '+'
613
614 # The libdir libraries are identical to those under rustlib/. It's easier on
615 # library loading if we keep them in libdir, but we do need them in rustlib/
616 # to support dynamic linking for compiler plugins, so we'll symlink.
617 (cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" &&
618 find ../../../../%{_lib} -maxdepth 1 -name '*.so' |
619 while read lib; do
620 if [ -f "${lib##*/}" ]; then
621 # make sure they're actually identical!
622 cmp "$lib" "${lib##*/}"
623 ln -v -f -s -t . "$lib"
624 fi
625 done)
626
627 # Remove installer artifacts (manifests, uninstall scripts, etc.)
628 find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+'
629
630 # Remove backup files from %%configure munging
631 find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+'
632
633 # https://fedoraproject.org/wiki/Changes/Make_ambiguous_python_shebangs_error
634 # We don't actually need to ship any of those python scripts in rust-src anyway.
635 find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+'
636
637 # FIXME: __os_install_post will strip the rlibs
638 # -- should we find a way to preserve debuginfo?
639
640 # Remove unwanted documentation files (we already package them)
641 rm -f %{buildroot}%{_docdir}/%{name}/README.md
642 rm -f %{buildroot}%{_docdir}/%{name}/COPYRIGHT
643 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE
644 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-APACHE
645 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-MIT
646 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-THIRD-PARTY
647 rm -f %{buildroot}%{_docdir}/%{name}/*.old
648
649 # Sanitize the HTML documentation
650 find %{buildroot}%{_docdir}/%{name}/html -empty -delete
651 find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+'
652
653 # Create the path for crate-devel packages
654 mkdir -p %{buildroot}%{_datadir}/cargo/registry
655
656 # Cargo no longer builds its own documentation
657 # https://github.com/rust-lang/cargo/pull/4904
658 mkdir -p %{buildroot}%{_docdir}/cargo
659 ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html
660
661 %if %without lldb
662 rm -f %{buildroot}%{_bindir}/rust-lldb
663 rm -f %{buildroot}%{rustlibdir}/etc/lldb_*
664 %endif
665
666 # We don't want Rust copies of LLVM tools (rust-lld, rust-llvm-dwp)
667 rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll*
668
669
670 %check
671 export %{rust_env}
672
673 # The results are not stable on koji, so mask errors and just log it.
674 %{python} ./x.py test --no-fail-fast --stage 2 || :
675 %{python} ./x.py test --no-fail-fast --stage 2 cargo || :
676 %{python} ./x.py test --no-fail-fast --stage 2 clippy || :
677 %{python} ./x.py test --no-fail-fast --stage 2 rls || :
678 %{python} ./x.py test --no-fail-fast --stage 2 rustfmt || :
679
680
681 %{?ldconfig_scriptlets}
682
683
684 %files
685 %license COPYRIGHT LICENSE-APACHE LICENSE-MIT
686 %doc README.md
687 %{_bindir}/rustc
688 %{_bindir}/rustdoc
689 %{_libdir}/*.so
690 %{_mandir}/man1/rustc.1*
691 %{_mandir}/man1/rustdoc.1*
692 %dir %{rustlibdir}
693 %dir %{rustlibdir}/%{rust_triple}
694 %dir %{rustlibdir}/%{rust_triple}/lib
695 %{rustlibdir}/%{rust_triple}/lib/*.so
696 %if %defined bootstrap_build_arch
697 %dir %{rustlibdir}/%{target_triple}
698 %dir %{rustlibdir}/%{target_triple}/lib
699 %{rustlibdir}/%{target_triple}/lib/*.so
700 %endif
701
702
703 %files std-static
704 %dir %{rustlibdir}
705 %dir %{rustlibdir}/%{rust_triple}
706 %dir %{rustlibdir}/%{rust_triple}/lib
707 %{rustlibdir}/%{rust_triple}/lib/*.rlib
708 %if %defined bootstrap_build_arch
709 %dir %{rustlibdir}/%{target_triple}
710 %dir %{rustlibdir}/%{target_triple}/lib
711 %{rustlibdir}/%{target_triple}/lib/*.rlib
712 %endif
713
714
715 %files debugger-common
716 %dir %{rustlibdir}
717 %dir %{rustlibdir}/etc
718 %{rustlibdir}/etc/rust_*.py*
719
720
721 %files gdb
722 %{_bindir}/rust-gdb
723 %{rustlibdir}/etc/gdb_*
724 %exclude %{_bindir}/rust-gdbgui
725
726
727 %if %with lldb
728 %files lldb
729 %{_bindir}/rust-lldb
730 %{rustlibdir}/etc/lldb_*
731 %endif
732
733
734 %files doc
735 %docdir %{_docdir}/%{name}
736 %dir %{_docdir}/%{name}
737 %dir %{_docdir}/%{name}/html
738 %{_docdir}/%{name}/html/*/
739 %{_docdir}/%{name}/html/*.html
740 %{_docdir}/%{name}/html/*.css
741 %{_docdir}/%{name}/html/*.js
742 %{_docdir}/%{name}/html/*.png
743 %{_docdir}/%{name}/html/*.svg
744 %{_docdir}/%{name}/html/*.woff
745 %license %{_docdir}/%{name}/html/*.txt
746 %license %{_docdir}/%{name}/html/*.md
747
748
749 %files -n cargo
750 %license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY
751 %doc src/tools/cargo/README.md
752 %{_bindir}/cargo
753 %{_libexecdir}/cargo*
754 %{_mandir}/man1/cargo*.1*
755 %{_sysconfdir}/bash_completion.d/cargo
756 %{_datadir}/zsh/site-functions/_cargo
757 %dir %{_datadir}/cargo
758 %dir %{_datadir}/cargo/registry
759
760
761 %files -n cargo-doc
762 %docdir %{_docdir}/cargo
763 %dir %{_docdir}/cargo
764 %{_docdir}/cargo/html
765
766
767 %files -n rustfmt
768 %{_bindir}/rustfmt
769 %{_bindir}/cargo-fmt
770 %doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md
771 %license src/tools/rustfmt/LICENSE-{APACHE,MIT}
772
773
774 %files -n rls
775 %{_bindir}/rls
776 %doc src/tools/rls/{README.md,COPYRIGHT,debugging.md}
777 %license src/tools/rls/LICENSE-{APACHE,MIT}
778
779
780 %files -n clippy
781 %{_bindir}/cargo-clippy
782 %{_bindir}/clippy-driver
783 %doc src/tools/clippy/{README.md,CHANGELOG.md}
784 %license src/tools/clippy/LICENSE-{APACHE,MIT}
785
786
787 %files src
788 %dir %{rustlibdir}
789 %{rustlibdir}/src
790
791
792 %files analysis
793 %{rustlibdir}/%{rust_triple}/analysis/
794 %if %defined bootstrap_build_arch
795 %{rustlibdir}/%{target_triple}/analysis/
796 %endif

  ViewVC Help
Powered by ViewVC 1.1.30