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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.30