/[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 1708017 - (show annotations) (download)
Mon Mar 22 21:54:31 2021 UTC (3 years, 1 month ago) by akien
File size: 24081 byte(s)
Remove previous hacks, retry build against system llvm11.0
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_with 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 # (akien) Temporarily use llvm11.0 as llvm 12 is not supported until rust 1.52
209 %if 0%{?mageia} == 9
210 %global llvm llvm11.0
211 %endif
212 %if 0%{?epel} == 7
213 %global llvm llvm9.0
214 %endif
215 %if %defined llvm
216 %global llvm_root %{_libdir}/%{llvm}
217 %else
218 %global llvm llvm
219 %global llvm_root %{_prefix}
220 %endif
221 BuildRequires: %{llvm}-devel >= 9.0
222 %if %with llvm_static
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 %configure --disable-option-checking \
569 --libdir=%{common_libdir} \
570 --build=%{rust_triple} --host=%{rust_triple} --target=%{target_triple} \
571 --python=%{python} \
572 --local-rust-root=%{local_rust_root} \
573 %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \
574 %{!?llvm_has_filecheck: --disable-codegen-tests} \
575 %{!?with_llvm_static: --enable-llvm-link-shared } } \
576 --disable-rpath \
577 %{enable_debuginfo} \
578 --enable-extended \
579 --tools=analysis,cargo,clippy,rls,rustfmt,src \
580 --enable-vendor \
581 --enable-verbose-tests \
582 %{?codegen_units_std} \
583 --release-channel=%{channel} \
584 --release-description="%{?mageia:Mageia }%{?rhel:Red Hat }%{version}-%{release}"
585
586 %{python} ./x.py build -j "$ncpus" --stage 2
587 %{python} ./x.py doc --stage 2
588
589
590 %install
591 export %{rust_env}
592
593 DESTDIR=%{buildroot} %{python} ./x.py install
594
595 # Make sure the shared libraries are in the proper libdir
596 %if "%{_libdir}" != "%{common_libdir}"
597 mkdir -p %{buildroot}%{_libdir}
598 find %{buildroot}%{common_libdir} -maxdepth 1 -type f -name '*.so' \
599 -exec mv -v -t %{buildroot}%{_libdir} '{}' '+'
600 %endif
601
602 # The shared libraries should be executable for debuginfo extraction.
603 find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \
604 -exec chmod -v +x '{}' '+'
605
606 # The libdir libraries are identical to those under rustlib/. It's easier on
607 # library loading if we keep them in libdir, but we do need them in rustlib/
608 # to support dynamic linking for compiler plugins, so we'll symlink.
609 (cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" &&
610 find ../../../../%{_lib} -maxdepth 1 -name '*.so' |
611 while read lib; do
612 if [ -f "${lib##*/}" ]; then
613 # make sure they're actually identical!
614 cmp "$lib" "${lib##*/}"
615 ln -v -f -s -t . "$lib"
616 fi
617 done)
618
619 # Remove installer artifacts (manifests, uninstall scripts, etc.)
620 find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+'
621
622 # Remove backup files from %%configure munging
623 find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+'
624
625 # https://fedoraproject.org/wiki/Changes/Make_ambiguous_python_shebangs_error
626 # We don't actually need to ship any of those python scripts in rust-src anyway.
627 find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+'
628
629 # FIXME: __os_install_post will strip the rlibs
630 # -- should we find a way to preserve debuginfo?
631
632 # Remove unwanted documentation files (we already package them)
633 rm -f %{buildroot}%{_docdir}/%{name}/README.md
634 rm -f %{buildroot}%{_docdir}/%{name}/COPYRIGHT
635 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE
636 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-APACHE
637 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-MIT
638 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-THIRD-PARTY
639 rm -f %{buildroot}%{_docdir}/%{name}/*.old
640
641 # Sanitize the HTML documentation
642 find %{buildroot}%{_docdir}/%{name}/html -empty -delete
643 find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+'
644
645 # Create the path for crate-devel packages
646 mkdir -p %{buildroot}%{_datadir}/cargo/registry
647
648 # Cargo no longer builds its own documentation
649 # https://github.com/rust-lang/cargo/pull/4904
650 mkdir -p %{buildroot}%{_docdir}/cargo
651 ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html
652
653 %if %without lldb
654 rm -f %{buildroot}%{_bindir}/rust-lldb
655 rm -f %{buildroot}%{rustlibdir}/etc/lldb_*
656 %endif
657
658 # We don't want Rust copies of LLVM tools (rust-lld, rust-llvm-dwp)
659 rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll*
660
661
662 %check
663 export %{rust_env}
664
665 # The results are not stable on koji, so mask errors and just log it.
666 %{python} ./x.py test --no-fail-fast --stage 2 || :
667 %{python} ./x.py test --no-fail-fast --stage 2 cargo || :
668 %{python} ./x.py test --no-fail-fast --stage 2 clippy || :
669 %{python} ./x.py test --no-fail-fast --stage 2 rls || :
670 %{python} ./x.py test --no-fail-fast --stage 2 rustfmt || :
671
672
673 %{?ldconfig_scriptlets}
674
675
676 %files
677 %license COPYRIGHT LICENSE-APACHE LICENSE-MIT
678 %doc README.md
679 %{_bindir}/rustc
680 %{_bindir}/rustdoc
681 %{_libdir}/*.so
682 %{_mandir}/man1/rustc.1*
683 %{_mandir}/man1/rustdoc.1*
684 %dir %{rustlibdir}
685 %dir %{rustlibdir}/%{rust_triple}
686 %dir %{rustlibdir}/%{rust_triple}/lib
687 %{rustlibdir}/%{rust_triple}/lib/*.so
688 %if %defined bootstrap_build_arch
689 %dir %{rustlibdir}/%{target_triple}
690 %dir %{rustlibdir}/%{target_triple}/lib
691 %{rustlibdir}/%{target_triple}/lib/*.so
692 %endif
693
694
695 %files std-static
696 %dir %{rustlibdir}
697 %dir %{rustlibdir}/%{rust_triple}
698 %dir %{rustlibdir}/%{rust_triple}/lib
699 %{rustlibdir}/%{rust_triple}/lib/*.rlib
700 %if %defined bootstrap_build_arch
701 %dir %{rustlibdir}/%{target_triple}
702 %dir %{rustlibdir}/%{target_triple}/lib
703 %{rustlibdir}/%{target_triple}/lib/*.rlib
704 %endif
705
706
707 %files debugger-common
708 %dir %{rustlibdir}
709 %dir %{rustlibdir}/etc
710 %{rustlibdir}/etc/rust_*.py*
711
712
713 %files gdb
714 %{_bindir}/rust-gdb
715 %{rustlibdir}/etc/gdb_*
716 %exclude %{_bindir}/rust-gdbgui
717
718
719 %if %with lldb
720 %files lldb
721 %{_bindir}/rust-lldb
722 %{rustlibdir}/etc/lldb_*
723 %endif
724
725
726 %files doc
727 %docdir %{_docdir}/%{name}
728 %dir %{_docdir}/%{name}
729 %dir %{_docdir}/%{name}/html
730 %{_docdir}/%{name}/html/*/
731 %{_docdir}/%{name}/html/*.html
732 %{_docdir}/%{name}/html/*.css
733 %{_docdir}/%{name}/html/*.js
734 %{_docdir}/%{name}/html/*.png
735 %{_docdir}/%{name}/html/*.svg
736 %{_docdir}/%{name}/html/*.woff
737 %license %{_docdir}/%{name}/html/*.txt
738 %license %{_docdir}/%{name}/html/*.md
739
740
741 %files -n cargo
742 %license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY
743 %doc src/tools/cargo/README.md
744 %{_bindir}/cargo
745 %{_libexecdir}/cargo*
746 %{_mandir}/man1/cargo*.1*
747 %{_sysconfdir}/bash_completion.d/cargo
748 %{_datadir}/zsh/site-functions/_cargo
749 %dir %{_datadir}/cargo
750 %dir %{_datadir}/cargo/registry
751
752
753 %files -n cargo-doc
754 %docdir %{_docdir}/cargo
755 %dir %{_docdir}/cargo
756 %{_docdir}/cargo/html
757
758
759 %files -n rustfmt
760 %{_bindir}/rustfmt
761 %{_bindir}/cargo-fmt
762 %doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md
763 %license src/tools/rustfmt/LICENSE-{APACHE,MIT}
764
765
766 %files -n rls
767 %{_bindir}/rls
768 %doc src/tools/rls/{README.md,COPYRIGHT,debugging.md}
769 %license src/tools/rls/LICENSE-{APACHE,MIT}
770
771
772 %files -n clippy
773 %{_bindir}/cargo-clippy
774 %{_bindir}/clippy-driver
775 %doc src/tools/clippy/{README.md,CHANGELOG.md}
776 %license src/tools/clippy/LICENSE-{APACHE,MIT}
777
778
779 %files src
780 %dir %{rustlibdir}
781 %{rustlibdir}/src
782
783
784 %files analysis
785 %{rustlibdir}/%{rust_triple}/analysis/
786 %if %defined bootstrap_build_arch
787 %{rustlibdir}/%{target_triple}/analysis/
788 %endif

  ViewVC Help
Powered by ViewVC 1.1.30