/[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 1891745 - (hide annotations) (download)
Fri Sep 23 08:40:48 2022 UTC (19 months ago) by akien
File size: 35081 byte(s)
Add Patch3 missed in previous commit (SILENT)
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 1840420 %global rust_arches x86_64 i686 armv7hl aarch64 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 1769757 # To bootstrap from scratch, set the channel and date from src/stage0.json
14 akien 1848765 # e.g. 1.59.0 wants rustc: 1.58.0-2022-01-13
15 akien 1057871 # or nightly wants some beta-YYYY-MM-DD
16 akien 1891744 %global bootstrap_version 1.63.0
17     %global bootstrap_channel 1.63.0
18     %global bootstrap_date 2022-08-11
19 akien 1057871
20 akien 1076532 # Only the specified arches will use bootstrap binaries.
21 akien 1848765 # NOTE: Those binaries used to be uploaded with every new release, but that was
22     # a waste of lookaside cache space when they're most often unused.
23     # Run "spectool -g rust.spec" after changing this and then "fedpkg upload" to
24 akien 1848766 # add them to sources. Remember to remove them again after the bootstrap build!
25 akien 1848902 #global bootstrap_arches %%{rust_arches}
26 akien 1076532
27 akien 1396907 # To bootstrap a compiler for a Tier 2 platform, we first need to build a
28     # compiler for a Tier 1 platform that targets the Tier 2 platform, then use
29     # the resulting compiler in a second build. Set bootstrap_build_arch to the
30     # Tier 1 arch for the first build, leave it undefined for the second build.
31 akien 1397010 %bcond_with bootstrap_i586
32 akien 1396907 %if %with bootstrap_i586
33     %ifarch i586
34     %global bootstrap_build_arch i686
35     %endif
36     %endif
37    
38 akien 1732055 # Define a space-separated list of targets to ship rust-std-static-$triple for
39     # cross-compilation. The packages are noarch, but they're not fully
40     # reproducible between hosts, so only x86_64 actually builds it.
41     %ifarch x86_64
42 akien 1789601 %if 0%{?fedora} || 0%{?mageia} >= 9
43 akien 1769757 %global mingw_targets i686-pc-windows-gnu x86_64-pc-windows-gnu
44 akien 1732055 %endif
45 akien 1789601 %if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?mageia} >= 9
46 akien 1769757 %global wasm_targets wasm32-unknown-unknown wasm32-wasi
47 akien 1732055 %endif
48 akien 1769757 %endif
49 akien 1732055
50 akien 1766230 # We need CRT files for *-wasi targets, at least as new as the commit in
51     # src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh
52 akien 1861388 # (updated per https://github.com/rust-lang/rust/pull/96907)
53 akien 1769757 %global wasi_libc_url https://github.com/WebAssembly/wasi-libc
54 akien 1861388 %global wasi_libc_commit 9886d3d6200fcc3726329966860fc058707406cd
55 akien 1769757 %global wasi_libc_name wasi-libc-%{wasi_libc_commit}
56     %global wasi_libc_source %{wasi_libc_url}/archive/%{wasi_libc_commit}/%{wasi_libc_name}.tar.gz
57     %global wasi_libc_dir %{_builddir}/%{wasi_libc_name}
58 akien 1766230
59 akien 1215099 # Using llvm-static may be helpful as an opt-in, e.g. to aid LLVM rebases.
60 tv 1652435 %bcond_with llvm_static
61 akien 1062905
62 akien 1085562 # We can also choose to just use Rust's bundled LLVM, in case the system LLVM
63 akien 1769757 # is insufficient. Rust currently requires LLVM 12.0+.
64     %global min_llvm_version 12.0.0
65 akien 1891744 %global bundled_llvm_version 14.0.6
66 akien 1708017 %bcond_with bundled_llvm
67 akien 1449358 # (akien) Hacks below are needed on mga's buildsystem when we have to rebootstrap llvm.
68 akien 1623991 ## Bundled LLVM has underlinking issues:
69     #%%global _disable_ld_no_undefined 1
70     #%%ifarch %%{arm} %%ix86
71     ## Decrease debuginfo verbosity to reduce memory consumption during final library linking
72     #%%global optflags %%(echo %%{optflags} | sed 's/-g /-g1 /')
73     #%%endif
74    
75 akien 1861388 # Requires stable libgit2 1.4, and not the next minor soname change.
76 akien 1848766 # This needs to be consistent with the bindings in vendor/libgit2-sys.
77 akien 1861388 %global min_libgit2_version 1.4.0
78     %global next_libgit2_version 1.5.0~
79     %global bundled_libgit2_version 1.4.2
80     %if 0%{?fedora} >= 99 || 0%{?mageia} >= 99
81 akien 1623991 %bcond_with bundled_libgit2
82 akien 1085562 %else
83 akien 1623991 %bcond_without bundled_libgit2
84 akien 1085562 %endif
85 akien 1076532
86 akien 1769757 # needs libssh2_userauth_publickey_frommemory
87     %global min_libssh2_version 1.6.0
88 akien 1308362 %if 0%{?rhel}
89 akien 1623991 # Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949)
90     %bcond_without disabled_libssh2
91 akien 1308362 %else
92 akien 1623991 %bcond_with disabled_libssh2
93 akien 1308362 %endif
94    
95 akien 1623991 %if 0%{?rhel} && 0%{?rhel} < 8
96     %bcond_with curl_http2
97     %else
98     %bcond_without curl_http2
99     %endif
100    
101 akien 1093561 # LLDB isn't available everywhere...
102 akien 1623991 %if 0%{?rhel} && 0%{?rhel} < 8
103     %bcond_with lldb
104     %else
105 akien 1098716 %bcond_without lldb
106     %endif
107 akien 1085562
108 akien 1449358 %if 0%{?mageia}
109     # (akien) Added by tv in mga8/rust 1.37.0.
110     %global _python_bytecompile_extra 0
111     %endif
112    
113 akien 1057871 Name: rust
114 akien 1891744 Version: 1.64.0
115     Release: %mkrel 1
116 akien 1057871 Summary: The Rust Programming Language
117 akien 1085562 %if 0%{?mageia}
118 akien 1076533 Group: Development/Other
119 akien 1085562 %endif
120 akien 1228274 License: (ASL 2.0 or MIT) and (BSD and MIT)
121 akien 1057871 # ^ written as: (rust itself) and (bundled libraries)
122     URL: https://www.rust-lang.org
123 akien 1846412 ExclusiveArch: %{rust_arches} i586
124 akien 1057871
125     %if "%{channel}" == "stable"
126 akien 1357861 %global rustc_package rustc-%{version}-src
127 akien 1057871 %else
128 akien 1085562 %global rustc_package rustc-%{channel}-src
129 akien 1057871 %endif
130 akien 1130315 Source0: https://static.rust-lang.org/dist/%{rustc_package}.tar.xz
131 akien 1766230 Source1: %{wasi_libc_source}
132     # Sources for bootstrap_arches are inserted by lua below
133 akien 1057871
134 akien 1732055 # By default, rust tries to use "rust-lld" as a linker for WebAssembly.
135 akien 1769757 Patch1: 0001-Use-lld-provided-by-system-for-wasm.patch
136 akien 1732055
137 akien 1861388 # Set a substitute-path in rust-gdb for standard library sources.
138     Patch2: rustc-1.61.0-rust-gdb-substitute-path.patch
139 akien 1789601
140 akien 1891745 # https://github.com/rust-lang/rust/pull/102076
141     Patch3: 0001-rustc_transmute-fix-big-endian-discriminants.patch
142    
143 akien 1709688 # (akien) Those tests fail on armv7 - on Fedora too, and jistone ignores them
144     # https://github.com/rust-lang/rust/issues/83453
145     Patch11: rustc-1.50.0-allow_fail-armv7-instruction_set.patch
146 akien 1708248
147 akien 1623991 ### RHEL-specific patches below ###
148    
149 akien 1861388 # Simple rpm macros for rust-toolset (as opposed to full rust-packaging)
150     Source100: macros.rust-toolset
151    
152 akien 1623991 # Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949)
153 akien 1789601 Patch100: rustc-1.59.0-disable-libssh2.patch
154 akien 1623991
155     # libcurl on RHEL7 doesn't have http2, but since cargo requests it, curl-sys
156     # will try to build it statically -- instead we turn off the feature.
157 akien 1884616 Patch101: rustc-1.63.0-disable-http2.patch
158 akien 1623991
159     # kernel rh1410097 causes too-small stacks for PIE.
160     # (affects RHEL6 kernels when building for RHEL7)
161 akien 1891744 Patch102: rustc-1.64.0-no-default-pie.patch
162 akien 1623991
163    
164 akien 1076532 # Get the Rust triple for any arch.
165     %{lua: function rust_triple(arch)
166     local abi = "gnu"
167     if arch == "armv7hl" then
168     arch = "armv7"
169     abi = "gnueabihf"
170     elseif arch == "ppc64" then
171     arch = "powerpc64"
172     elseif arch == "ppc64le" then
173     arch = "powerpc64le"
174 akien 1623991 elseif arch == "riscv64" then
175     arch = "riscv64gc"
176 akien 1076532 end
177     return arch.."-unknown-linux-"..abi
178     end}
179 pterjan 1058164
180 akien 1396907 %if %defined bootstrap_build_arch
181     %global rust_triple %{lua: print(rust_triple(rpm.expand("%{bootstrap_build_arch}")))}
182     %global target_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))}
183     %else
184 akien 1076532 %global rust_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))}
185 akien 1396907 %global target_triple %{rust_triple}
186     %endif
187 akien 1076532
188     %if %defined bootstrap_arches
189     # For each bootstrap arch, add an additional binary Source.
190     # Also define bootstrap_source just for the current target.
191     %{lua: do
192     local bootstrap_arches = {}
193     for arch in string.gmatch(rpm.expand("%{bootstrap_arches}"), "%S+") do
194     table.insert(bootstrap_arches, arch)
195     end
196 akien 1848765 local base = rpm.expand("https://static.rust-lang.org/dist/%{bootstrap_date}")
197     local channel = rpm.expand("%{bootstrap_channel}")
198 akien 1076532 local target_arch = rpm.expand("%{_target_cpu}")
199     for i, arch in ipairs(bootstrap_arches) do
200 akien 1861388 i = 1000 + i * 3
201 akien 1848765 local suffix = channel.."-"..rust_triple(arch)
202     print(string.format("Source%d: %s/cargo-%s.tar.xz\n", i, base, suffix))
203     print(string.format("Source%d: %s/rustc-%s.tar.xz\n", i+1, base, suffix))
204     print(string.format("Source%d: %s/rust-std-%s.tar.xz\n", i+2, base, suffix))
205 akien 1076532 if arch == target_arch then
206 akien 1848765 rpm.define("bootstrap_source_cargo "..i)
207     rpm.define("bootstrap_source_rustc "..i+1)
208     rpm.define("bootstrap_source_std "..i+2)
209     rpm.define("bootstrap_suffix "..suffix)
210 akien 1076532 end
211     end
212     end}
213 akien 1057871 %endif
214    
215 akien 1076532 %ifarch %{bootstrap_arches}
216 akien 1848765 %global local_rust_root %{_builddir}/rust-%{bootstrap_suffix}
217     Provides: bundled(%{name}-bootstrap) = %{bootstrap_version}
218 akien 1057871 %else
219 akien 1848765 BuildRequires: cargo >= %{bootstrap_version}
220 akien 1623992 %if (0%{?rhel} && 0%{?rhel} < 8) || 0%{?mageia}
221 akien 1848765 BuildRequires: %{name} >= %{bootstrap_version}
222 akien 1357861 BuildConflicts: %{name} > %{version}
223 akien 1623991 %else
224 akien 1848765 BuildRequires: (%{name} >= %{bootstrap_version} with %{name} <= %{version})
225 akien 1215099 %endif
226 akien 1076532 %global local_rust_root %{_prefix}
227 akien 1057871 %endif
228    
229     BuildRequires: make
230     BuildRequires: gcc
231     BuildRequires: gcc-c++
232 akien 1151628 BuildRequires: ncurses-devel
233 akien 1623991 # explicit curl-devel to avoid httpd24-curl (rhbz1540167)
234     BuildRequires: curl-devel
235 akien 1228274 BuildRequires: pkgconfig(libcurl)
236     BuildRequires: pkgconfig(liblzma)
237     BuildRequires: pkgconfig(openssl)
238     BuildRequires: pkgconfig(zlib)
239 akien 1057871
240 akien 1766230 %if %{without bundled_libgit2}
241 akien 1769757 BuildRequires: pkgconfig(libgit2) >= %{min_libgit2_version}
242 akien 1789601 BuildRequires: pkgconfig(libgit2) < %{next_libgit2_version}
243 akien 1308362 %endif
244    
245 akien 1671021 %if %{without disabled_libssh2}
246 akien 1769757 BuildRequires: pkgconfig(libssh2) >= %{min_libssh2_version}
247 akien 1308362 %endif
248    
249 akien 1769757 %if 0%{?rhel} == 8
250     BuildRequires: platform-python
251     %else
252     BuildRequires: python3
253     %endif
254     BuildRequires: python3-rpm-macros
255 akien 1208625
256 akien 1098716 %if %with bundled_llvm
257 akien 1724501 BuildRequires: cmake3 >= 3.13.4
258 akien 1753622 BuildRequires: ninja-build
259 akien 1769757 Provides: bundled(llvm) = %{bundled_llvm_version}
260 akien 1085562 %else
261 akien 1239841 BuildRequires: cmake >= 2.8.11
262 akien 1848768 %if 0%{?epel} == 7
263 akien 1769757 %global llvm llvm13
264 akien 1710263 %endif
265 akien 1179950 %if %defined llvm
266 akien 1848768 %if 0%{?mageia}
267     %global llvm_root %{_prefix}/lib/%{llvm}
268     %else
269 akien 1098716 %global llvm_root %{_libdir}/%{llvm}
270 akien 1848768 %endif
271 akien 1098716 %else
272     %global llvm llvm
273     %global llvm_root %{_prefix}
274     %endif
275 akien 1769757 BuildRequires: %{llvm}-devel >= %{min_llvm_version}
276 akien 1062905 %if %with llvm_static
277 akien 1708017 BuildRequires: %{llvm}-static
278 akien 1062905 BuildRequires: libffi-devel
279     %endif
280 akien 1085562 %endif
281 akien 1062905
282 akien 1769757 # make check needs "ps" for src/test/ui/wait-forked-but-failed-child.rs
283 akien 1057887 BuildRequires: procps-ng
284 akien 1057871
285 akien 1093561 # debuginfo-gdb tests need gdb
286     BuildRequires: gdb
287    
288 akien 1883518 # For src/test/run-make/static-pie
289     %if 0%{?mageia}
290     BuildRequires: glibc-static-devel
291     %else
292     BuildRequires: glibc-static
293     %endif
294    
295 akien 1066912 # Virtual provides for folks who attempt "dnf install rustc"
296 akien 1357861 Provides: rustc = %{version}-%{release}
297     Provides: rustc%{?_isa} = %{version}-%{release}
298 akien 1066912
299     # Always require our exact standard library
300 akien 1357861 Requires: %{name}-std-static%{?_isa} = %{version}-%{release}
301 akien 1066912
302 akien 1057871 # The C compiler is needed at runtime just for linking. Someday rustc might
303     # invoke the linker directly, and then we'll only need binutils.
304     # https://github.com/rust-lang/rust/issues/11937
305 akien 1151630 %if 0%{?mageia}
306 akien 1057871 Requires: gcc
307 akien 1151630 %else
308     Requires: /usr/bin/cc
309     %endif
310 akien 1057871
311 akien 1732055 %if 0%{?epel} == 7
312     %global devtoolset_name devtoolset-9
313 akien 1769757 BuildRequires: %{devtoolset_name}-binutils
314 akien 1732055 BuildRequires: %{devtoolset_name}-gcc
315     BuildRequires: %{devtoolset_name}-gcc-c++
316 akien 1769757 %global devtoolset_bindir /opt/rh/%{devtoolset_name}/root/usr/bin
317     %global __cc %{devtoolset_bindir}/gcc
318     %global __cxx %{devtoolset_bindir}/g++
319     %global __ar %{devtoolset_bindir}/ar
320     %global __ranlib %{devtoolset_bindir}/ranlib
321     %global __strip %{devtoolset_bindir}/strip
322     %else
323     %global __ranlib %{_bindir}/ranlib
324 akien 1732055 %endif
325    
326 akien 1057871 # ALL Rust libraries are private, because they don't keep an ABI.
327 akien 1308362 %global _privatelibs lib(.*-[[:xdigit:]]{16}*|rustc.*)[.]so.*
328 akien 1057871 %global __provides_exclude ^(%{_privatelibs})$
329     %global __requires_exclude ^(%{_privatelibs})$
330 akien 1251113 %global __provides_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
331     %global __requires_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
332 akien 1057871
333 akien 1085562 # While we don't want to encourage dynamic linking to Rust shared libraries, as
334     # there's no stable ABI, we still need the unallocated metadata (.rustc) to
335 akien 1623991 # support custom-derive plugins like #[proc_macro_derive(Foo)].
336 akien 1732055 %if 0%{?rhel} && 0%{?rhel} < 8
337 akien 1623991 # eu-strip is very eager by default, so we have to limit it to -g, only debugging symbols.
338     %global _find_debuginfo_opts -g
339     %undefine _include_minidebuginfo
340     %else
341 akien 1151628 # Newer find-debuginfo.sh supports --keep-section, which is preferable. rhbz1465997
342     %global _find_debuginfo_opts --keep-section .rustc
343     %endif
344 akien 1085562
345 akien 1338691 %if %{without bundled_llvm}
346 akien 1370979 %if "%{llvm_root}" == "%{_prefix}" || 0%{?scl:1}
347 akien 1338691 %global llvm_has_filecheck 1
348     %endif
349 akien 1098716 %endif
350    
351 akien 1732055 # We're going to override --libdir when configuring to get rustlib into a
352     # common path, but we'll fix the shared libraries during install.
353     %global common_libdir %{_prefix}/lib
354     %global rustlibdir %{common_libdir}/rustlib
355    
356 akien 1769757 %if %defined mingw_targets
357     BuildRequires: mingw32-filesystem >= 95
358     BuildRequires: mingw64-filesystem >= 95
359 akien 1846418 BuildRequires: mingw32-crt
360 akien 1848766 BuildRequires: mingw64-crt
361 akien 1769757 BuildRequires: mingw32-gcc
362     BuildRequires: mingw64-gcc
363 akien 1846418 BuildRequires: mingw32-winpthreads-static
364 akien 1848766 BuildRequires: mingw64-winpthreads-static
365 akien 1769757 %endif
366    
367     %if %defined wasm_targets
368 akien 1766230 BuildRequires: clang
369 akien 1846418 BuildRequires: lld
370 akien 1732055 # brp-strip-static-archive breaks the archive index for wasm
371     %global __os_install_post \
372     %__os_install_post \
373 akien 1846418 find '%{buildroot}%{rustlibdir}'/wasm*/lib -type f -regex '.*\\.\\(a\\|rlib\\)' -print -exec '%{llvm_root}/bin/llvm-ranlib' '{}' ';' \
374 akien 1732055 %{nil}
375     %endif
376    
377 thatsamguy 494699 %description
378 akien 1057871 Rust is a systems programming language that runs blazingly fast, prevents
379     segfaults, and guarantees thread safety.
380 thatsamguy 494699
381 akien 1066912 This package includes the Rust compiler and documentation generator.
382 thatsamguy 494699
383 akien 1057871
384 akien 1066912 %package std-static
385     Summary: Standard library for Rust
386 akien 1769757 Requires: %{name} = %{version}-%{release}
387     Requires: glibc-devel%{?_isa} >= 2.11
388 akien 1066912
389     %description std-static
390     This package includes the standard libraries for building applications
391     written in Rust.
392    
393 akien 1769757 %if %defined mingw_targets
394 akien 1732055 %{lua: do
395 akien 1769757 for triple in string.gmatch(rpm.expand("%{mingw_targets}"), "%S+") do
396 akien 1732055 local subs = {
397     triple = triple,
398 akien 1769757 name = rpm.expand("%{name}"),
399 akien 1766230 verrel = rpm.expand("%{version}-%{release}"),
400 akien 1769757 mingw = string.find(rpm.expand("%{ix86}"), string.sub(triple, 1, 4)) and "mingw32" or "mingw64",
401     }
402     local s = string.gsub([[
403    
404     %package std-static-{{triple}}
405     Summary: Standard library for Rust {{triple}}
406     BuildArch: noarch
407     Provides: {{mingw}}-rust = {{verrel}}
408     Provides: {{mingw}}-rustc = {{verrel}}
409     Requires: {{mingw}}-crt
410     Requires: {{mingw}}-gcc
411     Requires: {{mingw}}-winpthreads-static
412     Requires: {{name}} = {{verrel}}
413    
414     %description std-static-{{triple}}
415     This package includes the standard libraries for building applications
416     written in Rust for the MinGW target {{triple}}.
417    
418     ]], "{{(%w+)}}", subs)
419     print(s)
420     end
421     end}
422     %endif
423    
424     %if %defined wasm_targets
425     %{lua: do
426     for triple in string.gmatch(rpm.expand("%{wasm_targets}"), "%S+") do
427     local subs = {
428     triple = triple,
429     name = rpm.expand("%{name}"),
430     verrel = rpm.expand("%{version}-%{release}"),
431 akien 1766230 wasi = string.find(triple, "-wasi") and 1 or 0,
432 akien 1732055 }
433     local s = string.gsub([[
434 akien 1766230
435 akien 1732055 %package std-static-{{triple}}
436 akien 1769757 Summary: Standard library for Rust {{triple}}
437 akien 1732055 BuildArch: noarch
438 akien 1769757 Requires: {{name}} = {{verrel}}
439 akien 1766230 Requires: lld >= 8.0
440     %if {{wasi}}
441     Provides: bundled(wasi-libc)
442     %endif
443 akien 1066912
444 akien 1732055 %description std-static-{{triple}}
445     This package includes the standard libraries for building applications
446 akien 1769757 written in Rust for the WebAssembly target {{triple}}.
447 akien 1766230
448 akien 1732055 ]], "{{(%w+)}}", subs)
449     print(s)
450     end
451     end}
452     %endif
453    
454    
455 akien 1098716 %package debugger-common
456     Summary: Common debugger pretty printers for Rust
457     BuildArch: noarch
458    
459     %description debugger-common
460     This package includes the common functionality for %{name}-gdb and %{name}-lldb.
461    
462 akien 1239841
463 akien 1057871 %package gdb
464     Summary: GDB pretty printers for Rust
465     BuildArch: noarch
466     Requires: gdb
467 akien 1357861 Requires: %{name}-debugger-common = %{version}-%{release}
468 akien 1057871
469 akien 1098861 %description gdb
470     This package includes the rust-gdb script, which allows easier debugging of Rust
471     programs.
472 akien 1057871
473 akien 1098861
474 akien 1093561 %if %with lldb
475    
476     %package lldb
477     Summary: LLDB pretty printers for Rust
478 akien 1399021 BuildArch: noarch
479 akien 1093561 Requires: lldb
480 akien 1769757 Requires: python3-lldb
481 akien 1357861 Requires: %{name}-debugger-common = %{version}-%{release}
482 akien 1093561
483     %description lldb
484     This package includes the rust-lldb script, which allows easier debugging of Rust
485     programs.
486    
487     %endif
488    
489    
490 shlomif 990941 %package doc
491 akien 1057871 Summary: Documentation for Rust
492     # NOT BuildArch: noarch
493     # Note, while docs are mostly noarch, some things do vary by target_arch.
494     # Koji will fail the build in rpmdiff if two architectures build a noarch
495     # subpackage differently, so instead we have to keep its arch.
496 thatsamguy 494699
497 shlomif 990941 %description doc
498 akien 1057871 This package includes HTML documentation for the Rust programming language and
499     its standard library.
500 thatsamguy 494699
501 akien 1057871
502 akien 1228274 %package -n cargo
503     Summary: Rust's package manager and build tool
504     %if %with bundled_libgit2
505 akien 1769757 Provides: bundled(libgit2) = %{bundled_libgit2_version}
506 akien 1228274 %endif
507     # For tests:
508 akien 1769757 BuildRequires: git-core
509 akien 1228274 # Cargo is not much use without Rust
510 akien 1769757 Requires: %{name}
511 akien 1228274
512 tv 1443439 # "cargo vendor" is a builtin command starting with 1.37. The Obsoletes and
513     # Provides are mostly relevant to RHEL, but harmless to have on Fedora/etc. too
514     Obsoletes: cargo-vendor <= 0.1.23
515     Provides: cargo-vendor = %{version}-%{release}
516    
517 akien 1228274 %description -n cargo
518     Cargo is a tool that allows Rust projects to declare their various dependencies
519     and ensure that you'll always get a repeatable build.
520    
521    
522     %package -n cargo-doc
523     Summary: Documentation for Cargo
524     BuildArch: noarch
525     # Cargo no longer builds its own documentation
526     # https://github.com/rust-lang/cargo/pull/4904
527 akien 1769757 Requires: %{name}-doc = %{version}-%{release}
528 akien 1228274
529     %description -n cargo-doc
530     This package includes HTML documentation for Cargo.
531    
532    
533 akien 1338691 %package -n rustfmt
534 akien 1215099 Summary: Tool to find and fix Rust formatting issues
535     Requires: cargo
536    
537 akien 1338691 # The component/package was rustfmt-preview until Rust 1.31.
538     Obsoletes: rustfmt-preview < 1.0.0
539 akien 1357861 Provides: rustfmt-preview = %{version}-%{release}
540 akien 1215099
541 akien 1338691 %description -n rustfmt
542 akien 1215099 A tool for formatting Rust code according to style guidelines.
543    
544    
545 akien 1338691 %package -n rls
546 akien 1891744 Summary: Rust Language Server for IDE integration (deprecated)
547 akien 1228274 %if %with bundled_libgit2
548 akien 1769757 Provides: bundled(libgit2) = %{bundled_libgit2_version}
549 akien 1228274 %endif
550 akien 1769757 Requires: %{name}-analysis
551 akien 1228274 # /usr/bin/rls is dynamically linked against internal rustc libs
552 akien 1357861 Requires: %{name}%{?_isa} = %{version}-%{release}
553 akien 1228274
554 akien 1338691 # The component/package was rls-preview until Rust 1.31.
555     Obsoletes: rls-preview < 1.31.6
556 akien 1357861 Provides: rls-preview = %{version}-%{release}
557 akien 1338691
558     %description -n rls
559 akien 1228274 The Rust Language Server provides a server that runs in the background,
560     providing IDEs, editors, and other tools with information about Rust programs.
561 akien 1891744 RLS is being deprecated in favor of rust-analyzer, and may be removed in the future.
562     https://blog.rust-lang.org/2022/07/01/RLS-deprecation.html
563 akien 1228274
564    
565 akien 1891744 %package analyzer
566     Summary: Rust implementation of the Language Server Protocol
567    
568     %description analyzer
569     rust-analyzer is an implementation of Language Server Protocol for the Rust
570     programming language. It provides features like completion and goto definition
571     for many code editors, including VS Code, Emacs and Vim.
572    
573    
574 akien 1338691 %package -n clippy
575 akien 1308362 Summary: Lints to catch common mistakes and improve your Rust code
576     Requires: cargo
577     # /usr/bin/clippy-driver is dynamically linked against internal rustc libs
578 akien 1357861 Requires: %{name}%{?_isa} = %{version}-%{release}
579 akien 1308362
580 akien 1338691 # The component/package was clippy-preview until Rust 1.31.
581     Obsoletes: clippy-preview <= 0.0.212
582 akien 1357861 Provides: clippy-preview = %{version}-%{release}
583 akien 1338691
584     %description -n clippy
585 akien 1308362 A collection of lints to catch common mistakes and improve your Rust code.
586    
587    
588 akien 1151630 %package src
589     Summary: Sources for the Rust standard library
590     BuildArch: noarch
591    
592     %description src
593     This package includes source files for the Rust standard library. It may be
594     useful as a reference for code completion tools in various editors.
595    
596    
597 akien 1228274 %package analysis
598     Summary: Compiler analysis data for the Rust standard library
599 akien 1769757 Requires: %{name}-std-static%{?_isa} = %{version}-%{release}
600 akien 1228274
601     %description analysis
602     This package contains analysis data files produced with rustc's -Zsave-analysis
603     feature for the Rust standard library. The RLS (Rust Language Server) uses this
604     data to provide information about the Rust standard library.
605    
606    
607 akien 1861388 %if 0%{?rhel} && 0%{?rhel} >= 8
608    
609     %package toolset
610     Summary: Rust Toolset
611     Requires: rust%{?_isa} = %{version}-%{release}
612     Requires: cargo%{?_isa} = %{version}-%{release}
613    
614     %description toolset
615     This is the metapackage for Rust Toolset, bringing in the Rust compiler,
616     the Cargo package manager, and a few convenience macros for rpm builds.
617    
618     %endif
619    
620    
621 thatsamguy 494699 %prep
622    
623 akien 1076532 %ifarch %{bootstrap_arches}
624 akien 1848765 rm -rf %{local_rust_root}
625     %setup -q -n cargo-%{bootstrap_suffix} -T -b %{bootstrap_source_cargo}
626     ./install.sh --prefix=%{local_rust_root} --disable-ldconfig
627     %setup -q -n rustc-%{bootstrap_suffix} -T -b %{bootstrap_source_rustc}
628     ./install.sh --prefix=%{local_rust_root} --disable-ldconfig
629     %setup -q -n rust-std-%{bootstrap_suffix} -T -b %{bootstrap_source_std}
630     ./install.sh --prefix=%{local_rust_root} --disable-ldconfig
631 akien 1093561 test -f '%{local_rust_root}/bin/cargo'
632 akien 1058123 test -f '%{local_rust_root}/bin/rustc'
633     %endif
634 akien 1057871
635 akien 1769757 %if %defined wasm_targets
636     %setup -q -n %{wasi_libc_name} -T -b 1
637 akien 1766230 %endif
638    
639 akien 1076532 %setup -q -n %{rustc_package}
640 akien 1058123
641 tv 1695215 %patch1 -p1
642 akien 1789601 %patch2 -p1
643 akien 1891744 %patch3 -p1
644 tv 1695215
645 akien 1709688 %patch11 -p1
646    
647 akien 1623991 %if %with disabled_libssh2
648     %patch100 -p1
649 akien 1208625 %endif
650    
651 akien 1623991 %if %without curl_http2
652     %patch101 -p1
653     rm -rf vendor/libnghttp2-sys/
654     %endif
655    
656     %if 0%{?rhel} && 0%{?rhel} < 8
657 akien 1648840 %patch102 -p1
658 akien 1623991 %endif
659    
660 akien 1769757 # Use our explicit python3 first
661     sed -i.try-python -e '/^try python3 /i try "%{__python3}" "$@"' ./configure
662 akien 1623991
663 akien 1861388 # Set a substitute-path in rust-gdb for standard library sources.
664     sed -i.rust-src -e "s#@BUILDDIR@#$PWD#" ./src/etc/rust-gdb
665    
666 akien 1085562 %if %without bundled_llvm
667 akien 1388944 rm -rf src/llvm-project/
668 akien 1648840 mkdir -p src/llvm-project/libunwind/
669 akien 1085562 %endif
670 akien 1057871
671 tv 1443439 # Remove other unused vendored libraries
672     rm -rf vendor/curl-sys/curl/
673 akien 1861388 rm -rf vendor/*jemalloc-sys*/jemalloc/
674     rm -rf vendor/libmimalloc-sys/c_src/mimalloc/
675 akien 1671021 rm -rf vendor/libssh2-sys/libssh2/
676 tv 1443439 rm -rf vendor/libz-sys/src/zlib/
677 akien 1648840 rm -rf vendor/libz-sys/src/zlib-ng/
678 tv 1443439 rm -rf vendor/lzma-sys/xz-*/
679     rm -rf vendor/openssl-src/openssl/
680    
681     %if %without bundled_libgit2
682     rm -rf vendor/libgit2-sys/libgit2/
683     %endif
684    
685 akien 1623991 %if %with disabled_libssh2
686     rm -rf vendor/libssh2-sys/
687     %endif
688 tv 1443439
689     # This only affects the transient rust-installer, but let it use our dynamic xz-libs
690     sed -i.lzma -e '/LZMA_API_STATIC/d' src/bootstrap/tool.rs
691    
692 akien 1623991 %if %{with bundled_llvm} && 0%{?epel} == 7
693 akien 1093561 mkdir -p cmake-bin
694     ln -s /usr/bin/cmake3 cmake-bin/cmake
695     %global cmake_path $PWD/cmake-bin
696 akien 1085562 %endif
697    
698     %if %{without bundled_llvm} && %{with llvm_static}
699 akien 1062905 # Static linking to distro LLVM needs to add -lffi
700     # https://github.com/rust-lang/rust/issues/34486
701     sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \
702 tv 1652432 compiler/rustc_llvm/src/lib.rs
703 akien 1062905 %endif
704 akien 1057871
705 akien 1130315 # The configure macro will modify some autoconf-related files, which upsets
706     # cargo when it tries to verify checksums in those files. If we just truncate
707     # that file list, cargo won't have anything to complain about.
708 akien 1357861 find vendor -name .cargo-checksum.json \
709 akien 1130315 -exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+'
710 akien 1093561
711 akien 1449358 # Sometimes Rust sources start with #![...] attributes, and "smart" editors think
712     # it's a shebang and make them executable. Then brp-mangle-shebangs gets upset...
713     find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+'
714 akien 1130315
715 akien 1633704 # Set up shared environment variables for build/install/check
716 akien 1769757 %global rust_env %{?rustflags:RUSTFLAGS="%{rustflags}"}
717 akien 1633704 %if 0%{?cmake_path:1}
718 akien 1769757 %global rust_env %{?rust_env} PATH="%{cmake_path}:$PATH"
719 akien 1633704 %endif
720 akien 1671021 %if %without disabled_libssh2
721 akien 1308362 # convince libssh2-sys to use the distro libssh2
722 akien 1769757 %global rust_env %{?rust_env} LIBSSH2_SYS_USE_PKG_CONFIG=1
723 akien 1308362 %endif
724 akien 1769757 %global export_rust_env %{?rust_env:export %{rust_env}}
725 akien 1308362
726 akien 1066912
727 akien 1633704 %build
728 akien 1769757 %{export_rust_env}
729 akien 1633704
730 akien 1463214 %ifarch aarch64 %{arm} %{ix86} s390x
731 akien 1179950 # full debuginfo is exhausting memory; just do libstd for now
732     # https://github.com/rust-lang/rust/issues/45854
733 akien 1623991 %if 0%{?rhel} && 0%{?rhel} < 8
734 akien 1325525 # Older rpmbuild didn't work with partial debuginfo coverage.
735     %global debug_package %{nil}
736 tv 1443439 %define enable_debuginfo --debuginfo-level=0
737 akien 1325525 %else
738 tv 1443439 %define enable_debuginfo --debuginfo-level=0 --debuginfo-level-std=2
739 akien 1325525 %endif
740 akien 1179950 %else
741 tv 1443439 %define enable_debuginfo --debuginfo-level=2
742 akien 1179950 %endif
743    
744 akien 1623991 # Some builders have relatively little memory for their CPU count.
745     # At least 2GB per CPU is a good rule of thumb for building rustc.
746     ncpus=$(/usr/bin/getconf _NPROCESSORS_ONLN)
747     max_cpus=$(( ($(free -g | awk '/^Mem:/{print $2}') + 1) / 2 ))
748     if [ "$max_cpus" -ge 1 -a "$max_cpus" -lt "$ncpus" ]; then
749     ncpus="$max_cpus"
750     fi
751    
752 akien 1769757 %if %defined mingw_targets
753 akien 1766230 %{lua: do
754 akien 1769757 local cfg = ""
755     for triple in string.gmatch(rpm.expand("%{mingw_targets}"), "%S+") do
756     local subs = {
757     triple = triple,
758     mingw = string.find(rpm.expand("%{ix86}"), string.sub(triple, 1, 4)) and "mingw32" or "mingw64",
759     }
760 akien 1848766 local s = string.gsub([[
761 akien 1769757 --set target.{{triple}}.linker=%{{{mingw}}_cc}
762     --set target.{{triple}}.cc=%{{{mingw}}_cc}
763     --set target.{{triple}}.ar=%{{{mingw}}_ar}
764     --set target.{{triple}}.ranlib=%{{{mingw}}_ranlib}
765 akien 1848766 ]], "{{(%w+)}}", subs)
766 akien 1769757 cfg = cfg .. " " .. s
767     end
768 akien 1848766 cfg = string.gsub(cfg, "%s+", " ")
769 akien 1769757 rpm.define("mingw_target_config " .. cfg)
770     end}
771     %endif
772    
773     %if %defined wasm_targets
774 akien 1861388 %make_build --quiet -C %{wasi_libc_dir} CC=clang AR=llvm-ar NM=llvm-nm
775 akien 1769757 %{lua: do
776 akien 1766230 local wasi_root = rpm.expand("%{wasi_libc_dir}") .. "/sysroot"
777 akien 1769757 local cfg = ""
778     for triple in string.gmatch(rpm.expand("%{wasm_targets}"), "%S+") do
779 akien 1766230 if string.find(triple, "-wasi") then
780 akien 1769757 cfg = cfg .. " --set target." .. triple .. ".wasi-root=" .. wasi_root
781 akien 1766230 end
782     end
783 akien 1769757 rpm.define("wasm_target_config "..cfg)
784 akien 1766230 end}
785     %endif
786    
787 wally 1481298 %configure --disable-option-checking \
788 akien 1066912 --libdir=%{common_libdir} \
789 akien 1396907 --build=%{rust_triple} --host=%{rust_triple} --target=%{target_triple} \
790 akien 1848766 --set target.%{target_triple}.linker=%{__cc} \
791     --set target.%{target_triple}.cc=%{__cc} \
792     --set target.%{target_triple}.cxx=%{__cxx} \
793     --set target.%{target_triple}.ar=%{__ar} \
794     --set target.%{target_triple}.ranlib=%{__ranlib} \
795 akien 1769757 %{?mingw_target_config} \
796     %{?wasm_target_config} \
797     --python=%{__python3} \
798 akien 1215099 --local-rust-root=%{local_rust_root} \
799 akien 1848766 --set build.rustfmt=/bin/true \
800 akien 1338691 %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \
801     %{!?llvm_has_filecheck: --disable-codegen-tests} \
802 akien 1085562 %{!?with_llvm_static: --enable-llvm-link-shared } } \
803 akien 1861388 --disable-llvm-static-stdcpp \
804 akien 1057871 --disable-rpath \
805 akien 1179950 %{enable_debuginfo} \
806 akien 1732055 --set rust.codegen-units-std=1 \
807 akien 1228274 --enable-extended \
808 akien 1891744 --tools=analysis,cargo,clippy,rls,rust-analyzer,rustfmt,src \
809 akien 1093561 --enable-vendor \
810 akien 1251113 --enable-verbose-tests \
811 akien 1753612 --dist-compression-formats=gz \
812 tv 1695215 --release-channel=%{channel} \
813 akien 1732055 --release-description="%{?mageia:Mageia }%{?fedora:Fedora }%{?rhel:Red Hat }%{version}-%{release}"
814 thatsamguy 494699
815 akien 1769757 %{__python3} ./x.py build -j "$ncpus" --stage 2
816     %{__python3} ./x.py doc --stage 2
817 thatsamguy 494699
818 akien 1769757 for triple in %{?mingw_targets} %{?wasm_targets}; do
819     %{__python3} ./x.py build --stage 2 --target=$triple std
820 akien 1732055 done
821 akien 1057871
822 thatsamguy 494699 %install
823 akien 1769757 %{export_rust_env}
824 thatsamguy 494699
825 akien 1769757 DESTDIR=%{buildroot} %{__python3} ./x.py install
826 akien 1093561
827 akien 1769757 for triple in %{?mingw_targets} %{?wasm_targets}; do
828     DESTDIR=%{buildroot} %{__python3} ./x.py install --target=$triple std
829 akien 1732055 done
830    
831 akien 1740984 # These are transient files used by x.py dist and install
832     rm -rf ./build/dist/ ./build/tmp/
833    
834 akien 1107389 # Make sure the shared libraries are in the proper libdir
835     %if "%{_libdir}" != "%{common_libdir}"
836     mkdir -p %{buildroot}%{_libdir}
837     find %{buildroot}%{common_libdir} -maxdepth 1 -type f -name '*.so' \
838     -exec mv -v -t %{buildroot}%{_libdir} '{}' '+'
839     %endif
840 akien 1066912
841 akien 1107389 # The shared libraries should be executable for debuginfo extraction.
842     find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \
843     -exec chmod -v +x '{}' '+'
844    
845     # The libdir libraries are identical to those under rustlib/. It's easier on
846     # library loading if we keep them in libdir, but we do need them in rustlib/
847     # to support dynamic linking for compiler plugins, so we'll symlink.
848 akien 1891744 find %{buildroot}%{rustlibdir}/%{rust_triple}/lib/ -maxdepth 1 -type f -name '*.so' |
849     while read lib; do
850     lib2="%{buildroot}%{_libdir}/${lib##*/}"
851     if [ -f "$lib2" ]; then
852     # make sure they're actually identical!
853     cmp "$lib" "$lib2"
854     ln -v -f -r -s -T "$lib2" "$lib"
855     fi
856     done
857 akien 1107389
858 akien 1057871 # Remove installer artifacts (manifests, uninstall scripts, etc.)
859 akien 1085562 find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+'
860 akien 1057871
861 akien 1251113 # Remove backup files from %%configure munging
862     find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+'
863    
864 akien 1308362 # https://fedoraproject.org/wiki/Changes/Make_ambiguous_python_shebangs_error
865     # We don't actually need to ship any of those python scripts in rust-src anyway.
866     find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+'
867    
868 akien 1057871 # FIXME: __os_install_post will strip the rlibs
869     # -- should we find a way to preserve debuginfo?
870    
871     # Remove unwanted documentation files (we already package them)
872 akien 1085562 rm -f %{buildroot}%{_docdir}/%{name}/README.md
873     rm -f %{buildroot}%{_docdir}/%{name}/COPYRIGHT
874 akien 1308362 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE
875 akien 1085562 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-APACHE
876     rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-MIT
877 akien 1228274 rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-THIRD-PARTY
878 akien 1215099 rm -f %{buildroot}%{_docdir}/%{name}/*.old
879 akien 1057871
880     # Sanitize the HTML documentation
881 akien 1085562 find %{buildroot}%{_docdir}/%{name}/html -empty -delete
882     find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+'
883 akien 1057871
884 akien 1228274 # Create the path for crate-devel packages
885     mkdir -p %{buildroot}%{_datadir}/cargo/registry
886    
887     # Cargo no longer builds its own documentation
888     # https://github.com/rust-lang/cargo/pull/4904
889 akien 1308362 mkdir -p %{buildroot}%{_docdir}/cargo
890     ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html
891 akien 1228274
892 akien 1093561 %if %without lldb
893     rm -f %{buildroot}%{_bindir}/rust-lldb
894 akien 1633704 rm -f %{buildroot}%{rustlibdir}/etc/lldb_*
895 akien 1093561 %endif
896 akien 1057871
897 tv 1695215 # We don't want Rust copies of LLVM tools (rust-lld, rust-llvm-dwp)
898     rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll*
899 akien 1093561
900 akien 1861388 %if 0%{?rhel} && 0%{?rhel} >= 8
901     # This allows users to build packages using Rust Toolset.
902     %{__install} -D -m 644 %{S:100} %{buildroot}%{rpmmacrodir}/macros.rust-toolset
903     %endif
904 tv 1695215
905 akien 1861388
906 akien 1057871 %check
907 akien 1769757 %{export_rust_env}
908 akien 1093561
909 akien 1766230 # Sanity-check the installed binaries, debuginfo-stripped and all.
910     %{buildroot}%{_bindir}/cargo new build/hello-world
911     env RUSTC=%{buildroot}%{_bindir}/rustc \
912     LD_LIBRARY_PATH="%{buildroot}%{_libdir}:$LD_LIBRARY_PATH" \
913     %{buildroot}%{_bindir}/cargo run --manifest-path build/hello-world/Cargo.toml
914    
915 akien 1846418 # Try a build sanity-check for other targets
916     for triple in %{?mingw_targets} %{?wasm_targets}; do
917     env RUSTC=%{buildroot}%{_bindir}/rustc \
918     LD_LIBRARY_PATH="%{buildroot}%{_libdir}:$LD_LIBRARY_PATH" \
919     %{buildroot}%{_bindir}/cargo build --manifest-path build/hello-world/Cargo.toml --target=$triple
920 akien 1848766 done
921 akien 1846418
922 akien 1057871 # The results are not stable on koji, so mask errors and just log it.
923 akien 1740984 # Some of the larger test artifacts are manually cleaned to save space.
924 akien 1769757 %{__python3} ./x.py test --no-fail-fast --stage 2 || :
925 akien 1740984 rm -rf "./build/%{rust_triple}/test/"
926    
927 akien 1769757 %{__python3} ./x.py test --no-fail-fast --stage 2 cargo || :
928 akien 1740984 rm -rf "./build/%{rust_triple}/stage2-tools/%{rust_triple}/cit/"
929    
930 akien 1769757 %{__python3} ./x.py test --no-fail-fast --stage 2 clippy || :
931    
932 akien 1753612 env RLS_TEST_WAIT_FOR_AGES=1 \
933 akien 1769757 %{__python3} ./x.py test --no-fail-fast --stage 2 rls || :
934 akien 1753612
935 akien 1891744 %{__python3} ./x.py test --no-fail-fast --stage 2 rust-analyzer || :
936    
937 akien 1769757 %{__python3} ./x.py test --no-fail-fast --stage 2 rustfmt || :
938 akien 1753612
939 akien 1057871
940 akien 1370979 %{?ldconfig_scriptlets}
941 akien 1085562
942    
943 thatsamguy 494699 %files
944 akien 1057871 %license COPYRIGHT LICENSE-APACHE LICENSE-MIT
945     %doc README.md
946 thatsamguy 494699 %{_bindir}/rustc
947     %{_bindir}/rustdoc
948 akien 1107389 %{_libdir}/*.so
949 akien 1891744 %{_libexecdir}/rust-analyzer-proc-macro-srv
950 akien 1057871 %{_mandir}/man1/rustc.1*
951     %{_mandir}/man1/rustdoc.1*
952 akien 1085562 %dir %{rustlibdir}
953     %dir %{rustlibdir}/%{rust_triple}
954     %dir %{rustlibdir}/%{rust_triple}/lib
955     %{rustlibdir}/%{rust_triple}/lib/*.so
956 akien 1396907 %if %defined bootstrap_build_arch
957     %dir %{rustlibdir}/%{target_triple}
958     %dir %{rustlibdir}/%{target_triple}/lib
959     %{rustlibdir}/%{target_triple}/lib/*.so
960     %endif
961 thatsamguy 494699
962 akien 1057871
963 akien 1066912 %files std-static
964     %dir %{rustlibdir}
965     %dir %{rustlibdir}/%{rust_triple}
966     %dir %{rustlibdir}/%{rust_triple}/lib
967     %{rustlibdir}/%{rust_triple}/lib/*.rlib
968 akien 1396907 %if %defined bootstrap_build_arch
969     %dir %{rustlibdir}/%{target_triple}
970     %dir %{rustlibdir}/%{target_triple}/lib
971     %{rustlibdir}/%{target_triple}/lib/*.rlib
972     %endif
973 akien 1066912
974    
975 akien 1769757 %if %defined mingw_targets
976 akien 1732055 %{lua: do
977 akien 1769757 for triple in string.gmatch(rpm.expand("%{mingw_targets}"), "%S+") do
978 akien 1732055 local subs = {
979     triple = triple,
980     rustlibdir = rpm.expand("%{rustlibdir}"),
981 akien 1769757 }
982     local s = string.gsub([[
983    
984     %files std-static-{{triple}}
985     %dir {{rustlibdir}}
986     %dir {{rustlibdir}}/{{triple}}
987     %dir {{rustlibdir}}/{{triple}}/lib
988     {{rustlibdir}}/{{triple}}/lib/*.rlib
989     {{rustlibdir}}/{{triple}}/lib/rs*.o
990     %exclude {{rustlibdir}}/{{triple}}/lib/*.dll
991     %exclude {{rustlibdir}}/{{triple}}/lib/*.dll.a
992     %exclude {{rustlibdir}}/{{triple}}/lib/self-contained
993    
994     ]], "{{(%w+)}}", subs)
995     print(s)
996     end
997     end}
998     %endif
999    
1000    
1001     %if %defined wasm_targets
1002     %{lua: do
1003     for triple in string.gmatch(rpm.expand("%{wasm_targets}"), "%S+") do
1004     local subs = {
1005     triple = triple,
1006     rustlibdir = rpm.expand("%{rustlibdir}"),
1007 akien 1766230 wasi = string.find(triple, "-wasi") and 1 or 0,
1008 akien 1732055 }
1009     local s = string.gsub([[
1010 akien 1766230
1011 akien 1732055 %files std-static-{{triple}}
1012     %dir {{rustlibdir}}
1013     %dir {{rustlibdir}}/{{triple}}
1014     %dir {{rustlibdir}}/{{triple}}/lib
1015     {{rustlibdir}}/{{triple}}/lib/*.rlib
1016 akien 1766230 %if {{wasi}}
1017     %dir {{rustlibdir}}/{{triple}}/lib/self-contained
1018     {{rustlibdir}}/{{triple}}/lib/self-contained/crt*.o
1019 akien 1769757 {{rustlibdir}}/{{triple}}/lib/self-contained/libc.a
1020 akien 1766230 %endif
1021    
1022 akien 1732055 ]], "{{(%w+)}}", subs)
1023     print(s)
1024     end
1025     end}
1026     %endif
1027    
1028    
1029 akien 1098716 %files debugger-common
1030 akien 1066912 %dir %{rustlibdir}
1031     %dir %{rustlibdir}/etc
1032 akien 1623991 %{rustlibdir}/etc/rust_*.py*
1033 akien 1098716
1034    
1035     %files gdb
1036     %{_bindir}/rust-gdb
1037 akien 1633704 %{rustlibdir}/etc/gdb_*
1038 akien 1388944 %exclude %{_bindir}/rust-gdbgui
1039 akien 1057871
1040    
1041 akien 1093561 %if %with lldb
1042     %files lldb
1043     %{_bindir}/rust-lldb
1044 akien 1633704 %{rustlibdir}/etc/lldb_*
1045 akien 1093561 %endif
1046    
1047    
1048 shlomif 990941 %files doc
1049 akien 1098716 %docdir %{_docdir}/%{name}
1050 akien 1057871 %dir %{_docdir}/%{name}
1051 akien 1098716 %dir %{_docdir}/%{name}/html
1052     %{_docdir}/%{name}/html/*/
1053     %{_docdir}/%{name}/html/*.html
1054     %{_docdir}/%{name}/html/*.css
1055     %{_docdir}/%{name}/html/*.js
1056 akien 1388944 %{_docdir}/%{name}/html/*.png
1057 akien 1215099 %{_docdir}/%{name}/html/*.svg
1058 akien 1724501 %{_docdir}/%{name}/html/*.woff2
1059 akien 1098716 %license %{_docdir}/%{name}/html/*.txt
1060 akien 1419248 %license %{_docdir}/%{name}/html/*.md
1061 akien 1151630
1062    
1063 akien 1228274 %files -n cargo
1064     %license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY
1065     %doc src/tools/cargo/README.md
1066     %{_bindir}/cargo
1067 tv 1695215 %{_libexecdir}/cargo*
1068 akien 1228274 %{_mandir}/man1/cargo*.1*
1069     %{_sysconfdir}/bash_completion.d/cargo
1070     %{_datadir}/zsh/site-functions/_cargo
1071     %dir %{_datadir}/cargo
1072     %dir %{_datadir}/cargo/registry
1073    
1074    
1075     %files -n cargo-doc
1076 akien 1308362 %docdir %{_docdir}/cargo
1077     %dir %{_docdir}/cargo
1078 akien 1228274 %{_docdir}/cargo/html
1079    
1080    
1081 akien 1338691 %files -n rustfmt
1082 akien 1215099 %{_bindir}/rustfmt
1083     %{_bindir}/cargo-fmt
1084     %doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md
1085     %license src/tools/rustfmt/LICENSE-{APACHE,MIT}
1086    
1087    
1088 akien 1338691 %files -n rls
1089 akien 1228274 %{_bindir}/rls
1090     %doc src/tools/rls/{README.md,COPYRIGHT,debugging.md}
1091     %license src/tools/rls/LICENSE-{APACHE,MIT}
1092    
1093    
1094 akien 1891744 %files analyzer
1095     %{_bindir}/rust-analyzer
1096     %doc src/tools/rust-analyzer/README.md
1097     %license src/tools/rust-analyzer/LICENSE-{APACHE,MIT}
1098    
1099    
1100 akien 1338691 %files -n clippy
1101 akien 1308362 %{_bindir}/cargo-clippy
1102     %{_bindir}/clippy-driver
1103     %doc src/tools/clippy/{README.md,CHANGELOG.md}
1104 akien 1338691 %license src/tools/clippy/LICENSE-{APACHE,MIT}
1105 akien 1308362
1106    
1107 akien 1151630 %files src
1108     %dir %{rustlibdir}
1109     %{rustlibdir}/src
1110 akien 1228274
1111    
1112     %files analysis
1113     %{rustlibdir}/%{rust_triple}/analysis/
1114 akien 1396907 %if %defined bootstrap_build_arch
1115     %{rustlibdir}/%{target_triple}/analysis/
1116     %endif
1117 akien 1861388
1118    
1119     %if 0%{?rhel} && 0%{?rhel} >= 8
1120     %files toolset
1121     %{rpmmacrodir}/macros.rust-toolset
1122     %endif

  ViewVC Help
Powered by ViewVC 1.1.30