/[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 1698001 - (hide annotations) (download)
Thu Mar 4 14:27:35 2021 UTC (3 years, 1 month ago) by tv
File size: 24200 byte(s)
try building with bundled llvm for now
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 tv 1695231 %global rust_arches x86_64 %ix86 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 tv 1695215 %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 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 tv 1652435 %bcond_with llvm_static
38 akien 1062905
39 akien 1085562 # We can also choose to just use Rust's bundled LLVM, in case the system LLVM
40 tv 1695215 # is insufficient. Rust currently requires LLVM 9.0+.
41 tv 1698001 %bcond_without 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 tv 1695215 # Requires stable libgit2 1.1
51     %if 0%{?fedora} >= 34 || 0%{?mageia} >= 8
52 akien 1623991 %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 tv 1695215 Version: 1.50.0
84 tv 1695178 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 tv 1695215 # 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 akien 1623991 ### RHEL-specific patches below ###
106    
107     # Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949)
108 akien 1648840 Patch100: rustc-1.48.0-disable-libssh2.patch
109 akien 1623991
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 akien 1671021 Patch101: rustc-1.49.0-disable-http2.patch
113 akien 1623991
114     # kernel rh1410097 causes too-small stacks for PIE.
115     # (affects RHEL6 kernels when building for RHEL7)
116 akien 1648840 Patch102: rustc-1.48.0-no-default-pie.patch
117 akien 1623991
118    
119 akien 1076532 # 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 akien 1623991 elseif arch == "riscv64" then
130     arch = "riscv64gc"
131 akien 1076532 end
132     return arch.."-unknown-linux-"..abi
133     end}
134 pterjan 1058164
135 akien 1396907 %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 akien 1076532 %global rust_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))}
140 akien 1396907 %global target_triple %{rust_triple}
141     %endif
142 akien 1076532
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 akien 1093561 .."/rust-%{bootstrap_channel}")
153 akien 1076532 local target_arch = rpm.expand("%{_target_cpu}")
154     for i, arch in ipairs(bootstrap_arches) do
155 akien 1151630 print(string.format("Source%d: %s-%s.tar.xz\n",
156 akien 1076532 i, base, rust_triple(arch)))
157     if arch == target_arch then
158     rpm.define("bootstrap_source "..i)
159     end
160     end
161     end}
162 akien 1057871 %endif
163    
164 akien 1076532 %ifarch %{bootstrap_arches}
165 akien 1093561 %global bootstrap_root rust-%{bootstrap_channel}-%{rust_triple}
166 akien 1107392 %global local_rust_root %{_builddir}/%{bootstrap_root}/usr
167 akien 1093561 Provides: bundled(%{name}-bootstrap) = %{bootstrap_rust}
168 akien 1057871 %else
169 akien 1093561 BuildRequires: cargo >= %{bootstrap_cargo}
170 akien 1623992 %if (0%{?rhel} && 0%{?rhel} < 8) || 0%{?mageia}
171 akien 1093561 BuildRequires: %{name} >= %{bootstrap_rust}
172 akien 1357861 BuildConflicts: %{name} > %{version}
173 akien 1623991 %else
174     BuildRequires: (%{name} >= %{bootstrap_rust} with %{name} <= %{version})
175 akien 1215099 %endif
176 akien 1076532 %global local_rust_root %{_prefix}
177 akien 1057871 %endif
178    
179     BuildRequires: make
180     BuildRequires: gcc
181     BuildRequires: gcc-c++
182 akien 1151628 BuildRequires: ncurses-devel
183 akien 1057871 BuildRequires: curl
184 akien 1623991 # explicit curl-devel to avoid httpd24-curl (rhbz1540167)
185     BuildRequires: curl-devel
186 akien 1228274 BuildRequires: pkgconfig(libcurl)
187     BuildRequires: pkgconfig(liblzma)
188     BuildRequires: pkgconfig(openssl)
189     BuildRequires: pkgconfig(zlib)
190 akien 1057871
191 akien 1308362 %if %without bundled_libgit2
192 tv 1695215 BuildRequires: pkgconfig(libgit2) >= 1.1.0
193 akien 1308362 %endif
194    
195 akien 1671021 %if %{without disabled_libssh2}
196 akien 1308362 # needs libssh2_userauth_publickey_frommemory
197     BuildRequires: pkgconfig(libssh2) >= 1.6.0
198     %endif
199    
200 akien 1208625 %global python python3
201     BuildRequires: %{python}
202    
203 akien 1098716 %if %with bundled_llvm
204 akien 1193979 BuildRequires: cmake3 >= 3.4.3
205 akien 1633704 Provides: bundled(llvm) = 11.0.0
206 akien 1085562 %else
207 akien 1239841 BuildRequires: cmake >= 2.8.11
208 akien 1623991 %if 0%{?epel} == 7
209 akien 1603779 %global llvm llvm9.0
210 akien 1179950 %endif
211     %if %defined llvm
212 akien 1098716 %global llvm_root %{_libdir}/%{llvm}
213     %else
214     %global llvm llvm
215     %global llvm_root %{_prefix}
216     %endif
217 neoclust 1696478 # Restore when it will build with llvm 12
218     #BuildRequires: %{llvm}-devel >= 9.0
219     BuildRequires: llvm11.0-devel
220 akien 1062905 %if %with llvm_static
221 neoclust 1696478 BuildRequires: llvm11.0-static
222     # Restore when it will build with llvm 12
223     #BuildRequires: %{llvm}-static
224 akien 1062905 BuildRequires: libffi-devel
225     %endif
226 akien 1085562 %endif
227 akien 1062905
228 akien 1058123 # make check needs "ps" for src/test/run-pass/wait-forked-but-failed-child.rs
229 akien 1057887 BuildRequires: procps-ng
230 akien 1057871
231 akien 1093561 # debuginfo-gdb tests need gdb
232     BuildRequires: gdb
233    
234 akien 1066912 # Virtual provides for folks who attempt "dnf install rustc"
235 akien 1357861 Provides: rustc = %{version}-%{release}
236     Provides: rustc%{?_isa} = %{version}-%{release}
237 akien 1066912
238     # Always require our exact standard library
239 akien 1357861 Requires: %{name}-std-static%{?_isa} = %{version}-%{release}
240 akien 1066912
241 akien 1057871 # 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 akien 1151630 %if 0%{?mageia}
245 akien 1057871 Requires: gcc
246 akien 1151630 %else
247     Requires: /usr/bin/cc
248     %endif
249 akien 1057871
250     # ALL Rust libraries are private, because they don't keep an ABI.
251 akien 1308362 %global _privatelibs lib(.*-[[:xdigit:]]{16}*|rustc.*)[.]so.*
252 akien 1057871 %global __provides_exclude ^(%{_privatelibs})$
253     %global __requires_exclude ^(%{_privatelibs})$
254 akien 1251113 %global __provides_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
255     %global __requires_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
256 akien 1057871
257 akien 1085562 # 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 akien 1623991 # 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 akien 1151628 # Newer find-debuginfo.sh supports --keep-section, which is preferable. rhbz1465997
266     %global _find_debuginfo_opts --keep-section .rustc
267     %endif
268 akien 1085562
269 akien 1098716 # Use hardening ldflags.
270     %global rustflags -Clink-arg=-Wl,-z,relro,-z,now
271    
272 akien 1338691 %if %{without bundled_llvm}
273 akien 1370979 %if "%{llvm_root}" == "%{_prefix}" || 0%{?scl:1}
274 akien 1338691 %global llvm_has_filecheck 1
275     %endif
276 akien 1098716 %endif
277    
278 thatsamguy 494699 %description
279 akien 1057871 Rust is a systems programming language that runs blazingly fast, prevents
280     segfaults, and guarantees thread safety.
281 thatsamguy 494699
282 akien 1066912 This package includes the Rust compiler and documentation generator.
283 thatsamguy 494699
284 akien 1057871
285 akien 1066912 %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 akien 1098716 %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 akien 1239841
301 akien 1057871 %package gdb
302     Summary: GDB pretty printers for Rust
303     BuildArch: noarch
304     Requires: gdb
305 akien 1357861 Requires: %{name}-debugger-common = %{version}-%{release}
306 akien 1057871
307 akien 1098861 %description gdb
308     This package includes the rust-gdb script, which allows easier debugging of Rust
309     programs.
310 akien 1057871
311 akien 1098861
312 akien 1093561 %if %with lldb
313    
314     %package lldb
315     Summary: LLDB pretty printers for Rust
316 akien 1399021 BuildArch: noarch
317 akien 1093561 Requires: lldb
318 akien 1623991 Requires: %{python}-lldb
319 akien 1357861 Requires: %{name}-debugger-common = %{version}-%{release}
320 akien 1093561
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 shlomif 990941 %package doc
329 akien 1057871 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 thatsamguy 494699
335 shlomif 990941 %description doc
336 akien 1057871 This package includes HTML documentation for the Rust programming language and
337     its standard library.
338 thatsamguy 494699
339 akien 1057871
340 akien 1228274 %package -n cargo
341     Summary: Rust's package manager and build tool
342     %if %with bundled_libgit2
343 akien 1648840 Provides: bundled(libgit2) = 1.1.0
344 akien 1228274 %endif
345     # For tests:
346     BuildRequires: git
347     # Cargo is not much use without Rust
348     Requires: rust
349    
350 tv 1443439 # "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 akien 1228274 %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 akien 1357861 Requires: rust-doc = %{version}-%{release}
366 akien 1228274
367     %description -n cargo-doc
368     This package includes HTML documentation for Cargo.
369    
370    
371 akien 1338691 %package -n rustfmt
372 akien 1215099 Summary: Tool to find and fix Rust formatting issues
373     Requires: cargo
374    
375 akien 1338691 # The component/package was rustfmt-preview until Rust 1.31.
376     Obsoletes: rustfmt-preview < 1.0.0
377 akien 1357861 Provides: rustfmt-preview = %{version}-%{release}
378 akien 1215099
379 akien 1338691 %description -n rustfmt
380 akien 1215099 A tool for formatting Rust code according to style guidelines.
381    
382    
383 akien 1338691 %package -n rls
384 akien 1228274 Summary: Rust Language Server for IDE integration
385     %if %with bundled_libgit2
386 akien 1648840 Provides: bundled(libgit2) = 1.1.0
387 akien 1228274 %endif
388     Requires: rust-analysis
389     # /usr/bin/rls is dynamically linked against internal rustc libs
390 akien 1357861 Requires: %{name}%{?_isa} = %{version}-%{release}
391 akien 1228274
392 akien 1338691 # The component/package was rls-preview until Rust 1.31.
393     Obsoletes: rls-preview < 1.31.6
394 akien 1357861 Provides: rls-preview = %{version}-%{release}
395 akien 1338691
396     %description -n rls
397 akien 1228274 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 akien 1338691 %package -n clippy
404 akien 1308362 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 akien 1357861 Requires: %{name}%{?_isa} = %{version}-%{release}
408 akien 1308362
409 akien 1338691 # The component/package was clippy-preview until Rust 1.31.
410     Obsoletes: clippy-preview <= 0.0.212
411 akien 1357861 Provides: clippy-preview = %{version}-%{release}
412 akien 1338691
413     %description -n clippy
414 akien 1308362 A collection of lints to catch common mistakes and improve your Rust code.
415    
416    
417 akien 1151630 %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 akien 1228274 %package analysis
427     Summary: Compiler analysis data for the Rust standard library
428 akien 1357861 Requires: rust-std-static%{?_isa} = %{version}-%{release}
429 akien 1228274
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 thatsamguy 494699 %prep
437    
438 akien 1076532 %ifarch %{bootstrap_arches}
439     %setup -q -n %{bootstrap_root} -T -b %{bootstrap_source}
440 akien 1093561 ./install.sh --components=cargo,rustc,rust-std-%{rust_triple} \
441 akien 1107392 --prefix=%{local_rust_root} --disable-ldconfig
442 akien 1093561 test -f '%{local_rust_root}/bin/cargo'
443 akien 1058123 test -f '%{local_rust_root}/bin/rustc'
444     %endif
445 akien 1057871
446 akien 1076532 %setup -q -n %{rustc_package}
447 akien 1058123
448 tv 1695215 %patch1 -p1
449    
450 akien 1623991 %if %with disabled_libssh2
451     %patch100 -p1
452 akien 1208625 %endif
453    
454 akien 1623991 %if %without curl_http2
455     %patch101 -p1
456     rm -rf vendor/libnghttp2-sys/
457     %endif
458    
459     %if 0%{?rhel} && 0%{?rhel} < 8
460 akien 1648840 %patch102 -p1
461 akien 1623991 %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 akien 1085562 %if %without bundled_llvm
469 akien 1388944 rm -rf src/llvm-project/
470 akien 1648840 mkdir -p src/llvm-project/libunwind/
471 akien 1085562 %endif
472 akien 1057871
473 tv 1443439 # Remove other unused vendored libraries
474     rm -rf vendor/curl-sys/curl/
475     rm -rf vendor/jemalloc-sys/jemalloc/
476 akien 1671021 rm -rf vendor/libssh2-sys/libssh2/
477 tv 1443439 rm -rf vendor/libz-sys/src/zlib/
478 akien 1648840 rm -rf vendor/libz-sys/src/zlib-ng/
479 tv 1443439 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 akien 1623991 %if %with disabled_libssh2
487     rm -rf vendor/libssh2-sys/
488     %endif
489 tv 1443439
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 akien 1623991 %if %{with bundled_llvm} && 0%{?epel} == 7
494 akien 1093561 mkdir -p cmake-bin
495     ln -s /usr/bin/cmake3 cmake-bin/cmake
496     %global cmake_path $PWD/cmake-bin
497 akien 1085562 %endif
498    
499     %if %{without bundled_llvm} && %{with llvm_static}
500 akien 1062905 # 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 tv 1652432 compiler/rustc_llvm/src/lib.rs
504 akien 1062905 %endif
505 akien 1057871
506 akien 1130315 # 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 akien 1357861 find vendor -name .cargo-checksum.json \
510 akien 1130315 -exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+'
511 akien 1093561
512 akien 1449358 # 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 akien 1130315
516 akien 1633704 # 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 akien 1228274 %if %without bundled_libgit2
522     # convince libgit2-sys to use the distro libgit2
523 akien 1633704 %global rust_env %{rust_env} LIBGIT2_SYS_USE_PKG_CONFIG=1
524 akien 1228274 %endif
525 akien 1671021 %if %without disabled_libssh2
526 akien 1308362 # convince libssh2-sys to use the distro libssh2
527 akien 1633704 %global rust_env %{rust_env} LIBSSH2_SYS_USE_PKG_CONFIG=1
528 akien 1308362 %endif
529    
530 akien 1066912
531 akien 1633704 %build
532     export %{rust_env}
533    
534 akien 1076532 # We're going to override --libdir when configuring to get rustlib into a
535 akien 1085562 # common path, but we'll fix the shared libraries during install.
536 akien 1076532 %global common_libdir %{_prefix}/lib
537     %global rustlibdir %{common_libdir}/rustlib
538 akien 1066912
539 akien 1463214 %ifarch aarch64 %{arm} %{ix86} s390x
540 akien 1179950 # full debuginfo is exhausting memory; just do libstd for now
541     # https://github.com/rust-lang/rust/issues/45854
542 akien 1623991 %if 0%{?rhel} && 0%{?rhel} < 8
543 akien 1325525 # Older rpmbuild didn't work with partial debuginfo coverage.
544     %global debug_package %{nil}
545 tv 1443439 %define enable_debuginfo --debuginfo-level=0
546 akien 1325525 %else
547 tv 1443439 %define enable_debuginfo --debuginfo-level=0 --debuginfo-level-std=2
548 akien 1325525 %endif
549 akien 1179950 %else
550 tv 1443439 %define enable_debuginfo --debuginfo-level=2
551 akien 1179950 %endif
552    
553 akien 1399021 # 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 akien 1556084 %endif
559 akien 1399021
560 akien 1623991 # 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 1696612 # (tv) remove once reenabling llvm12:
569 tv 1696617 CONF=$(ls /usr/bin/llvm-config*)
570 tv 1696612
571 wally 1481298 %configure --disable-option-checking \
572 akien 1066912 --libdir=%{common_libdir} \
573 akien 1396907 --build=%{rust_triple} --host=%{rust_triple} --target=%{target_triple} \
574 tv 1443439 --python=%{python} \
575 akien 1215099 --local-rust-root=%{local_rust_root} \
576 akien 1338691 %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \
577     %{!?llvm_has_filecheck: --disable-codegen-tests} \
578 akien 1085562 %{!?with_llvm_static: --enable-llvm-link-shared } } \
579 tv 1696612 --llvm-config=$CONF \
580 akien 1057871 --disable-rpath \
581 akien 1179950 %{enable_debuginfo} \
582 akien 1228274 --enable-extended \
583 akien 1623398 --tools=analysis,cargo,clippy,rls,rustfmt,src \
584 akien 1093561 --enable-vendor \
585 akien 1251113 --enable-verbose-tests \
586 akien 1399021 %{?codegen_units_std} \
587 tv 1695215 --release-channel=%{channel} \
588     --release-description="%{?mageia:Mageia }%{?rhel:Red Hat }%{version}-%{release}"
589 thatsamguy 494699
590 akien 1623991 %{python} ./x.py build -j "$ncpus" --stage 2
591 akien 1633704 %{python} ./x.py doc --stage 2
592 thatsamguy 494699
593 akien 1057871
594 thatsamguy 494699 %install
595 akien 1633704 export %{rust_env}
596 thatsamguy 494699
597 akien 1208625 DESTDIR=%{buildroot} %{python} ./x.py install
598 akien 1093561
599 akien 1107389 # Make sure the shared libraries are in the proper libdir
600     %if "%{_libdir}" != "%{common_libdir}"
601     mkdir -p %{buildroot}%{_libdir}
602     find %{buildroot}%{common_libdir} -maxdepth 1 -type f -name '*.so' \
603     -exec mv -v -t %{buildroot}%{_libdir} '{}' '+'
604     %endif
605 akien 1066912
606 akien 1107389 # The shared libraries should be executable for debuginfo extraction.
607     find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \
608     -exec chmod -v +x '{}' '+'
609    
610     # The libdir libraries are identical to those under rustlib/. It's easier on
611     # library loading if we keep them in libdir, but we do need them in rustlib/
612     # to support dynamic linking for compiler plugins, so we'll symlink.
613     (cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" &&
614 akien 1208625 find ../../../../%{_lib} -maxdepth 1 -name '*.so' |
615     while read lib; do
616 akien 1449358 if [ -f "${lib##*/}" ]; then
617     # make sure they're actually identical!
618     cmp "$lib" "${lib##*/}"
619     ln -v -f -s -t . "$lib"
620     fi
621 akien 1208625 done)
622 akien 1107389
623 akien 1057871 # Remove installer artifacts (manifests, uninstall scripts, etc.)
624 akien 1085562 find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+'
625 akien 1057871
626 akien 1251113 # Remove backup files from %%configure munging
627     find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+'
628    
629 akien 1308362 # https://fedoraproject.org/wiki/Changes/Make_ambiguous_python_shebangs_error
630     # We don't actually need to ship any of those python scripts in rust-src anyway.
631     find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+'
632    
633 akien 1057871 # FIXME: __os_install_post will strip the rlibs
634     # -- should we find a way to preserve debuginfo?
635    
636     # Remove unwanted documentation files (we already package them)
637 akien 1085562 rm -f %{buildroot}%{_docdir}/%{name}/README.md
638     rm -f %{buildroot}%{_docdir}/%{name}/COPYRIGHT
639 akien 1308362 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE
640 akien 1085562 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-APACHE
641     rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-MIT
642 akien 1228274 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-THIRD-PARTY
643 akien 1215099 rm -f %{buildroot}%{_docdir}/%{name}/*.old
644 akien 1057871
645     # Sanitize the HTML documentation
646 akien 1085562 find %{buildroot}%{_docdir}/%{name}/html -empty -delete
647     find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+'
648 akien 1057871
649 akien 1228274 # Create the path for crate-devel packages
650     mkdir -p %{buildroot}%{_datadir}/cargo/registry
651    
652     # Cargo no longer builds its own documentation
653     # https://github.com/rust-lang/cargo/pull/4904
654 akien 1308362 mkdir -p %{buildroot}%{_docdir}/cargo
655     ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html
656 akien 1228274
657 akien 1093561 %if %without lldb
658     rm -f %{buildroot}%{_bindir}/rust-lldb
659 akien 1633704 rm -f %{buildroot}%{rustlibdir}/etc/lldb_*
660 akien 1093561 %endif
661 akien 1057871
662 tv 1695215 # We don't want Rust copies of LLVM tools (rust-lld, rust-llvm-dwp)
663     rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll*
664 akien 1093561
665 tv 1695215
666 akien 1057871 %check
667 akien 1633704 export %{rust_env}
668 akien 1093561
669 akien 1057871 # The results are not stable on koji, so mask errors and just log it.
670 akien 1633704 %{python} ./x.py test --no-fail-fast --stage 2 || :
671     %{python} ./x.py test --no-fail-fast --stage 2 cargo || :
672     %{python} ./x.py test --no-fail-fast --stage 2 clippy || :
673     %{python} ./x.py test --no-fail-fast --stage 2 rls || :
674     %{python} ./x.py test --no-fail-fast --stage 2 rustfmt || :
675 akien 1057871
676    
677 akien 1370979 %{?ldconfig_scriptlets}
678 akien 1085562
679    
680 thatsamguy 494699 %files
681 akien 1057871 %license COPYRIGHT LICENSE-APACHE LICENSE-MIT
682     %doc README.md
683 thatsamguy 494699 %{_bindir}/rustc
684     %{_bindir}/rustdoc
685 akien 1107389 %{_libdir}/*.so
686 akien 1057871 %{_mandir}/man1/rustc.1*
687     %{_mandir}/man1/rustdoc.1*
688 akien 1085562 %dir %{rustlibdir}
689     %dir %{rustlibdir}/%{rust_triple}
690     %dir %{rustlibdir}/%{rust_triple}/lib
691     %{rustlibdir}/%{rust_triple}/lib/*.so
692 akien 1396907 %if %defined bootstrap_build_arch
693     %dir %{rustlibdir}/%{target_triple}
694     %dir %{rustlibdir}/%{target_triple}/lib
695     %{rustlibdir}/%{target_triple}/lib/*.so
696     %endif
697 thatsamguy 494699
698 akien 1057871
699 akien 1066912 %files std-static
700     %dir %{rustlibdir}
701     %dir %{rustlibdir}/%{rust_triple}
702     %dir %{rustlibdir}/%{rust_triple}/lib
703     %{rustlibdir}/%{rust_triple}/lib/*.rlib
704 akien 1396907 %if %defined bootstrap_build_arch
705     %dir %{rustlibdir}/%{target_triple}
706     %dir %{rustlibdir}/%{target_triple}/lib
707     %{rustlibdir}/%{target_triple}/lib/*.rlib
708     %endif
709 akien 1066912
710    
711 akien 1098716 %files debugger-common
712 akien 1066912 %dir %{rustlibdir}
713     %dir %{rustlibdir}/etc
714 akien 1623991 %{rustlibdir}/etc/rust_*.py*
715 akien 1098716
716    
717     %files gdb
718     %{_bindir}/rust-gdb
719 akien 1633704 %{rustlibdir}/etc/gdb_*
720 akien 1388944 %exclude %{_bindir}/rust-gdbgui
721 akien 1057871
722    
723 akien 1093561 %if %with lldb
724     %files lldb
725     %{_bindir}/rust-lldb
726 akien 1633704 %{rustlibdir}/etc/lldb_*
727 akien 1093561 %endif
728    
729    
730 shlomif 990941 %files doc
731 akien 1098716 %docdir %{_docdir}/%{name}
732 akien 1057871 %dir %{_docdir}/%{name}
733 akien 1098716 %dir %{_docdir}/%{name}/html
734     %{_docdir}/%{name}/html/*/
735     %{_docdir}/%{name}/html/*.html
736     %{_docdir}/%{name}/html/*.css
737     %{_docdir}/%{name}/html/*.js
738 akien 1388944 %{_docdir}/%{name}/html/*.png
739 akien 1215099 %{_docdir}/%{name}/html/*.svg
740 akien 1098716 %{_docdir}/%{name}/html/*.woff
741     %license %{_docdir}/%{name}/html/*.txt
742 akien 1419248 %license %{_docdir}/%{name}/html/*.md
743 akien 1151630
744    
745 akien 1228274 %files -n cargo
746     %license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY
747     %doc src/tools/cargo/README.md
748     %{_bindir}/cargo
749 tv 1695215 %{_libexecdir}/cargo*
750 akien 1228274 %{_mandir}/man1/cargo*.1*
751     %{_sysconfdir}/bash_completion.d/cargo
752     %{_datadir}/zsh/site-functions/_cargo
753     %dir %{_datadir}/cargo
754     %dir %{_datadir}/cargo/registry
755    
756    
757     %files -n cargo-doc
758 akien 1308362 %docdir %{_docdir}/cargo
759     %dir %{_docdir}/cargo
760 akien 1228274 %{_docdir}/cargo/html
761    
762    
763 akien 1338691 %files -n rustfmt
764 akien 1215099 %{_bindir}/rustfmt
765     %{_bindir}/cargo-fmt
766     %doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md
767     %license src/tools/rustfmt/LICENSE-{APACHE,MIT}
768    
769    
770 akien 1338691 %files -n rls
771 akien 1228274 %{_bindir}/rls
772     %doc src/tools/rls/{README.md,COPYRIGHT,debugging.md}
773     %license src/tools/rls/LICENSE-{APACHE,MIT}
774    
775    
776 akien 1338691 %files -n clippy
777 akien 1308362 %{_bindir}/cargo-clippy
778     %{_bindir}/clippy-driver
779     %doc src/tools/clippy/{README.md,CHANGELOG.md}
780 akien 1338691 %license src/tools/clippy/LICENSE-{APACHE,MIT}
781 akien 1308362
782    
783 akien 1151630 %files src
784     %dir %{rustlibdir}
785     %{rustlibdir}/src
786 akien 1228274
787    
788     %files analysis
789     %{rustlibdir}/%{rust_triple}/analysis/
790 akien 1396907 %if %defined bootstrap_build_arch
791     %{rustlibdir}/%{target_triple}/analysis/
792     %endif

  ViewVC Help
Powered by ViewVC 1.1.30