rust-vl.spec 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923
  1. %bcond_with bootstrap
  2. %bcond_with test
  3. %bcond_with newrpm
  4. %bcond_without clang
  5. %bcond_without bundled_libgit2
  6. %bcond_without bundled_libssh2
  7. # Some sub-packages are versioned independently of the rust compiler and runtime itself.
  8. # Also beware that if any of these are not changed in a version bump, then the release
  9. # number should still increase, not be reset to 1!
  10. %global rustc_version 1.51.0
  11. %global cargo_version %{rustc_version}
  12. %global rustfmt_version %{rustc_version}
  13. %global rls_version %{rustc_version}
  14. %global clippy_version %{rustc_version}
  15. # The channel can be stable, beta, or nightly
  16. %{!?channel: %global channel stable}
  17. # Only x86_64 and i686 are Tier 1 platforms at this time.
  18. # https://forge.rust-lang.org/platform-support.html
  19. %global rust_arches x86_64 i686
  20. # To bootstrap from scratch, set the channel and date from src/stage0.txt
  21. # e.g. 1.10.0 wants rustc: 1.9.0-2016-05-24
  22. # or nightly wants some beta-YYYY-MM-DD
  23. %global bootstrap_rust 1.50.0
  24. %global bootstrap_cargo 1.50.0
  25. %global bootstrap_channel %{bootstrap_rust}
  26. # Only the specified arches will use bootstrap binaries.
  27. %if %{with bootstrap}
  28. %global bootstrap_arches %%{rust_arches}
  29. %endif
  30. # We generally don't want llvm-static present at all, since llvm-config will
  31. # make us link statically. But we can opt in, e.g. to aid LLVM rebases.
  32. # FIXME: LLVM 3.9 prefers shared linking now! Which is good, but next time we
  33. # *want* static we'll have to force it with "llvm-config --link-static".
  34. # See also https://github.com/rust-lang/rust/issues/36854
  35. # The new rustbuild accepts `--enable-llvm-link-shared`, else links static.
  36. %bcond_with llvm_static
  37. # We can also choose to just use Rust's bundled LLVM, in case the system LLVM
  38. # is insufficient. Rust currently requires LLVM 3.7+.
  39. %bcond_with bundled_llvm
  40. # LLDB only works on some architectures
  41. %ifarch %{arm} aarch64 %{ix86} x86_64
  42. # LLDB isn't available everywhere...
  43. %bcond_without lldb
  44. %else
  45. %bcond_with lldb
  46. %endif
  47. Summary: The Rust Programming Language
  48. Name: rust
  49. Version: %{rustc_version}
  50. Release: 2%{?_dist_release}
  51. Group: programming
  52. Vendor: Project Vine
  53. Distribution: Vine Linux
  54. License: (ASL 2.0 or MIT) and (BSD and ISC and MIT)
  55. # ^ written as: (rust itself) and (bundled libraries)
  56. URL: https://www.rust-lang.org
  57. ExclusiveArch: %{rust_arches}
  58. %if "%{channel}" == "stable"
  59. %global rustc_package rustc-%{version}-src
  60. %else
  61. %global rustc_package rustc-%{channel}-src
  62. %endif
  63. Source0: https://static.rust-lang.org/dist/%{rustc_package}.tar.gz
  64. # https://github.com/rust-lang/rust/commit/c7d9bffe76477a2f79c468b07e5eaf82525eea99
  65. Patch0: rust-HWASan-support.patch
  66. # https://github.com/rust-lang/rust/commit/55f345f32505c2095966a5dc46c4ae3290dbf7a1
  67. Patch1: rust-llvm12.patch
  68. # Get the Rust triple for any arch.
  69. %{lua: function rust_triple(arch)
  70. local abi = "gnu"
  71. if arch == "armv7hl" then
  72. arch = "armv7"
  73. abi = "gnueabihf"
  74. elseif arch == "ppc64" then
  75. arch = "powerpc64"
  76. elseif arch == "ppc64le" then
  77. arch = "powerpc64le"
  78. end
  79. return arch.."-unknown-linux-"..abi
  80. end}
  81. %global rust_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))}
  82. %if %defined bootstrap_arches
  83. # For each bootstrap arch, add an additional binary Source.
  84. # Also define bootstrap_source just for the current target.
  85. %{lua: do
  86. local bootstrap_arches = {}
  87. for arch in string.gmatch(rpm.expand("%{bootstrap_arches}"), "%S+") do
  88. table.insert(bootstrap_arches, arch)
  89. end
  90. local base = rpm.expand("https://static.rust-lang.org/dist"
  91. .."/rust-%{bootstrap_channel}")
  92. local target_arch = rpm.expand("%{_target_cpu}")
  93. for i, arch in ipairs(bootstrap_arches) do
  94. print(string.format("Source%d: %s-%s.tar.gz\n",
  95. i, base, rust_triple(arch)))
  96. if arch == target_arch then
  97. rpm.define("bootstrap_source "..i)
  98. end
  99. end
  100. end}
  101. %endif
  102. %ifarch %{bootstrap_arches}
  103. %global bootstrap_root rust-%{bootstrap_channel}-%{rust_triple}
  104. %global local_rust_root %{_builddir}/%{bootstrap_root}/usr
  105. Provides: bundled(%{name}-bootstrap) = %{bootstrap_rust}
  106. %else
  107. BuildRequires: cargo >= %{bootstrap_cargo}
  108. BuildRequires: %{name} >= %{bootstrap_rust}
  109. BuildConflicts: %{name} > %{version}
  110. %global local_rust_root %{_prefix}
  111. %endif
  112. BuildRequires: cmake
  113. BuildRequires: make
  114. %if %{with clang}
  115. BuildRequires: clang
  116. BuildRequires: lld
  117. %else
  118. BuildRequires: gcc
  119. BuildRequires: gcc-c++
  120. %endif
  121. %if %{without bundled_libgit2}
  122. BuildRequires: libgit2-devel
  123. %endif
  124. %if %{without bundled_libssh2}
  125. BuildRequires: libssh2-devel
  126. %endif
  127. BuildRequires: ncurses-devel
  128. BuildRequires: openssl-devel
  129. BuildRequires: zlib-devel
  130. BuildRequires: python3
  131. BuildRequires: python3-rpm-macros
  132. BuildRequires: curl
  133. BuildRequires: curl-devel
  134. BuildRequires: xz-devel
  135. %if %{with bundled_llvm}
  136. BuildRequires: cmake
  137. BuildRequires: git
  138. Provides: bundled(llvm) = 6.0
  139. %else
  140. BuildRequires: cmake
  141. %if %defined llvm
  142. %global llvm_root %{_libdir}/%{llvm}
  143. %else
  144. %global llvm llvm
  145. %global llvm_root %{_prefix}
  146. %global llvm_has_filecheck 1
  147. %endif
  148. BuildRequires: %{llvm}-devel >= 11.0.0
  149. %if %{with llvm_static}
  150. BuildRequires: %{llvm}-static
  151. BuildRequires: libffi-devel
  152. %else
  153. BuildConflicts: %{llvm}-static
  154. %endif
  155. %endif
  156. # make check needs "ps" for src/test/run-pass/wait-forked-but-failed-child.rs
  157. BuildRequires: procps
  158. # debuginfo-gdb tests need gdb
  159. BuildRequires: gdb
  160. # TODO: work on unbundling these!
  161. Provides: bundled(jquery) = 2.1.4
  162. Provides: bundled(miniz) = 1.14
  163. # Virtual provides for folks who attempt "dnf install rustc"
  164. Provides: rustc = %{version}-%{release}
  165. Provides: rustc%{?_isa} = %{version}-%{release}
  166. # Always require our exact standard library
  167. Requires: %{name}-std-static%{?_isa} = %{version}-%{release}
  168. # The C compiler is needed at runtime just for linking. Someday rustc might
  169. # invoke the linker directly, and then we'll only need binutils.
  170. # https://github.com/rust-lang/rust/issues/11937
  171. Requires: /usr/bin/cc
  172. # ALL Rust libraries are private, because they don't keep an ABI.
  173. %global _privatelibs lib(.*-[[:xdigit:]]{16}*|rustc.*)[.]so.*
  174. %global __provides_exclude ^(%{_privatelibs})$
  175. %global __requires_exclude ^(%{_privatelibs})$
  176. %global __provides_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
  177. %global __requires_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
  178. %if !%{with newrpm}
  179. # eu-strip is very eager by default, so we have to limit it to -g, only debugging symbols.
  180. %global _find_debuginfo_opts -g
  181. %undefine _include_minidebuginfo
  182. %else
  183. # Newer find-debuginfo.sh supports --keep-section, which is preferable. rhbz1465997
  184. %global _find_debuginfo_opts --keep-section .rustc
  185. %endif
  186. %if !%{with newrpm}
  187. Obsoletes: rust-debuginfo < %{version}-%{release}
  188. %else
  189. %ifnarch x86_64
  190. Obsoletes: rust-debuginfo < %{version}-%{release}
  191. %endif
  192. %endif
  193. # Use hardening ldflags.
  194. %global rustflags -Clink-arg=-Wl,-z,relro,-z,now
  195. %if %{without bundled_llvm} && "%{llvm_root}" != "%{_prefix}"
  196. # https://github.com/rust-lang/rust/issues/40717
  197. %global library_path $(%{llvm_root}/bin/llvm-config --libdir)
  198. %endif
  199. %description
  200. Rust is a systems programming language that runs blazingly fast, prevents
  201. segfaults, and guarantees thread safety.
  202. This package includes the Rust compiler and documentation generator.
  203. %package std-static
  204. Summary: Standard library for Rust
  205. Group: programming
  206. %description std-static
  207. This package includes the standard libraries for building applications
  208. written in Rust.
  209. %package debugger-common
  210. Summary: Common debugger pretty printers for Rust
  211. Group: programming
  212. BuildArch: noarch
  213. %description debugger-common
  214. This package includes the common functionality for %{name}-gdb and %{name}-lldb.
  215. %package gdb
  216. Summary: GDB pretty printers for Rust
  217. Group: programming
  218. BuildArch: noarch
  219. Requires: gdb
  220. Requires: %{name}-debugger-common = %{version}-%{release}
  221. %description gdb
  222. This package includes the rust-gdb script, which allows easier debugging of Rust
  223. programs.
  224. %if %{with lldb}
  225. %package lldb
  226. Summary: LLDB pretty printers for Rust
  227. Group: programming
  228. # It could be noarch, but lldb has limited availability
  229. #BuildArch: noarch
  230. Requires: lldb
  231. Requires: python3-lldb
  232. Requires: %{name}-debugger-common = %{version}-%{release}
  233. %description lldb
  234. This package includes the rust-lldb script, which allows easier debugging of Rust
  235. programs.
  236. %endif
  237. %package doc
  238. Summary: Documentation for Rust
  239. Group: documentation
  240. # NOT BuildArch: noarch
  241. # Note, while docs are mostly noarch, some things do vary by target_arch.
  242. # Koji will fail the build in rpmdiff if two architectures build a noarch
  243. # subpackage differently, so instead we have to keep its arch.
  244. %description doc
  245. This package includes HTML documentation for the Rust programming language and
  246. its standard library.
  247. %package -n cargo
  248. Summary: Rust's package manager and build tool
  249. Version: %{cargo_version}
  250. Group: programming
  251. # For tests:
  252. BuildRequires: git
  253. # Cargo is not much use without Rust
  254. Requires: rust
  255. %description -n cargo
  256. Cargo is a tool that allows Rust projects to declare their various dependencies
  257. and ensure that you'll always get a repeatable build.
  258. %package -n cargo-doc
  259. Summary: Documentation for Cargo
  260. Version: %{cargo_version}
  261. Group: programming
  262. BuildArch: noarch
  263. # Cargo no longer builds its own documentation
  264. # https://github.com/rust-lang/cargo/pull/4904
  265. Requires: rust-doc = %{rustc_version}-%{release}
  266. %description -n cargo-doc
  267. This package includes HTML documentation for Cargo.
  268. %package -n rustfmt
  269. Summary: Tool to find and fix Rust formatting issues
  270. Version: %{rustfmt_version}
  271. Group: programming
  272. Requires: cargo
  273. Obsoletes: rustfmt-preview < 1.0.0
  274. %description -n rustfmt
  275. A tool for formatting Rust code according to style guidelines.
  276. %package -n rls
  277. Summary: Rust Language Server for IDE integration
  278. Version: %{rls_version}
  279. Group: programming
  280. Requires: rust-analysis
  281. # /usr/bin/rls is dynamically linked against internal rustc libs
  282. Requires: %{name} = %{rustc_version}-%{release}
  283. Obsoletes: rls-preview < 1.0.0
  284. %description -n rls
  285. The Rust Language Server provides a server that runs in the background,
  286. providing IDEs, editors, and other tools with information about Rust programs.
  287. It supports functionality such as 'goto definition', symbol search,
  288. reformatting, and code completion, and enables renaming and refactorings.
  289. %package -n clippy
  290. Summary: Lints to catch common mistakes and improve your Rust code
  291. Version: %{clippy_version}
  292. Group: programming
  293. License: MPLv2.0
  294. Requires: cargo
  295. # /usr/bin/clippy-driver is dynamically linked against internal rustc libs
  296. Requires: %{name} = %{rustc_version}-%{release}
  297. Obsoletes: clippy-preview < 1.0.0
  298. %description -n clippy
  299. A collection of lints to catch common mistakes and improve your Rust code.
  300. %package src
  301. Summary: Sources for the Rust standard library
  302. Group: programming
  303. BuildArch: noarch
  304. %description src
  305. This package includes source files for the Rust standard library. It may be
  306. useful as a reference for code completion tools in various editors.
  307. %package analysis
  308. Summary: Compiler analysis data for the Rust standard library
  309. Group: programming
  310. Requires: rust-std-static = %{rustc_version}-%{release}
  311. %description analysis
  312. This package contains analysis data files produced with rustc's -Zsave-analysis
  313. feature for the Rust standard library. The RLS (Rust Language Server) uses this
  314. data to provide information about the Rust standard library.
  315. %package miri
  316. Summary: An interpreter for Rust's mid-level intermediate representation
  317. Group: programming
  318. Requires: rust = %{rustc_version}-%{release}
  319. %description miri
  320. An experimental interpreter for Rust's mid-level intermediate representation
  321. (MIR). It can run binaries and test suites of cargo projects and detect certain
  322. classes of undefined behavior.
  323. %if %{with newrpm}
  324. # debuginfo is available on x86_64 only
  325. %ifarch x86_64
  326. %debug_package
  327. %endif
  328. %endif
  329. %prep
  330. %ifarch %{bootstrap_arches}
  331. %setup -q -n %{bootstrap_root} -T -b %{bootstrap_source}
  332. ./install.sh --components=cargo,rustc,rust-std-%{rust_triple} \
  333. --prefix=%{local_rust_root} --disable-ldconfig
  334. test -f '%{local_rust_root}/bin/cargo'
  335. test -f '%{local_rust_root}/bin/rustc'
  336. %endif
  337. %setup -q -n %{rustc_package}
  338. %autopatch -p1
  339. sed -i.try-py3 -e '/try python2.7/i try python3 "$@"' ./configure
  340. %if %without bundled_llvm
  341. rm -rf src/llvm-project/
  342. mkdir -p src/llvm-project/libunwind/
  343. %endif
  344. # We never enable emscripten.
  345. rm -rf src/llvm-emscripten/
  346. # Remove other unused vendored libraries
  347. #rm -rf vendor/curl-sys/curl/
  348. rm -rf vendor/jemalloc-sys/jemalloc/
  349. rm -rf vendor/libz-sys/src/zlib/
  350. rm -rf vendor/lzma-sys/xz-*/
  351. rm -rf vendor/openssl-src/openssl/
  352. %if %{without bundled_libgit2}
  353. rm -rf vendor/libgit2-sys/libgit2/
  354. %endif
  355. %if %{without bundled_libssh2}
  356. rm -rf vendor/libssh2-sys/libssh2/
  357. %endif
  358. # This only affects the transient rust-installer, but let it use our dynamic xz-libs
  359. sed -i.lzma -e '/LZMA_API_STATIC/d' src/bootstrap/tool.rs
  360. # rename bundled license for packaging
  361. if [ -e vendor/backtrace-sys/src/libbacktrace/LICENSE ]; then
  362. cp -a vendor/backtrace-sys/src/libbacktrace/LICENSE{,-libbacktrace}
  363. fi
  364. %if %{with bundled_llvm} && 0%{?epel}
  365. mkdir -p cmake-bin
  366. ln -s /usr/bin/cmake cmake-bin/cmake
  367. %global cmake_path $PWD/cmake-bin
  368. %endif
  369. %if %{without bundled_llvm} && %{with llvm_static}
  370. # Static linking to distro LLVM needs to add -lffi
  371. # https://github.com/rust-lang/rust/issues/34486
  372. sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \
  373. src/librustc_llvm/lib.rs
  374. %endif
  375. # The configure macro will modify some autoconf-related files, which upsets
  376. # cargo when it tries to verify checksums in those files. If we just truncate
  377. # that file list, cargo won't have anything to complain about.
  378. find vendor -name .cargo-checksum.json \
  379. -exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+'
  380. %build
  381. %if %{without bundled_libgit2}
  382. export LIBGIT2_SYS_USE_PKG_CONFIG=1
  383. %endif
  384. %if %{without bundled_libssh2}
  385. export LIBSSH2_SYS_USE_PKG_CONFIG=1
  386. %endif
  387. %{?cmake_path:export PATH=%{cmake_path}:$PATH}
  388. %{?library_path:export LIBRARY_PATH="%{library_path}"}
  389. %{?rustflags:export RUSTFLAGS="%{rustflags}"}
  390. # We're going to override --libdir when configuring to get rustlib into a
  391. # common path, but we'll fix the shared libraries during install.
  392. %global common_libdir %{_prefix}/lib
  393. %global rustlibdir %{common_libdir}/rustlib
  394. %ifarch x86_64
  395. %if %{with newrpm}
  396. %define enable_debuginfo --debuginfo-level=0 --debuginfo-level-std=2
  397. %else
  398. %define enable_debuginfo --debuginfo-level=0
  399. %global debug_package %{nil}
  400. %endif
  401. %else
  402. %define enable_debuginfo --debuginfo-level=0
  403. %global debug_package %{nil}
  404. %endif
  405. # Some builders have relatively little memory for their CPU count.
  406. # At least 2GB per CPU is a good rule of thumb for building rustc.
  407. ncpus=$(/usr/bin/getconf _NPROCESSORS_ONLN)
  408. max_cpus=$(( ($(LANG=C free -g | awk '/^Mem:/{print $2}') + 1) / 2 ))
  409. if [ "$max_cpus" -ge 1 -a "$max_cpus" -lt "$ncpus" ]; then
  410. ncpus="$max_cpus"
  411. fi
  412. %if %{with clang}
  413. export CC=clang
  414. export CXX=clang++
  415. export LDFLAGS="$LDFLAGS -fuse-ld=lld"
  416. export RUSTFLAGS="$RUSTFLAGS -C linker=clang -C link-arg=-fuse-ld=lld"
  417. %endif
  418. # workaround for https://github.com/rust-lang/rust/issues/69953
  419. # --set rust.deny-warnings=false
  420. %configure \
  421. --disable-option-checking \
  422. --libdir=%{common_libdir} \
  423. --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \
  424. --enable-local-rust --local-rust-root=%{local_rust_root} \
  425. %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \
  426. %{!?llvm_has_filecheck: --disable-codegen-tests} \
  427. %{!?with_llvm_static: --enable-llvm-link-shared } } \
  428. --disable-rpath \
  429. %{enable_debuginfo} \
  430. --enable-extended \
  431. --enable-vendor \
  432. --enable-verbose-tests \
  433. --set rust.codegen-units-std=1 \
  434. --release-channel=%{channel} \
  435. --set rust.deny-warnings=false \
  436. %{nil}
  437. RUST_BACKTRACE=1 %{__python3} ./x.py build -j "$ncpus" --stage 2
  438. %{__python3} ./x.py doc --stage 2
  439. %install
  440. rm -rf %{buildroot}
  441. %{?cmake_path:export PATH=%{cmake_path}:$PATH}
  442. %{?library_path:export LIBRARY_PATH="%{library_path}"}
  443. %{?rustflags:export RUSTFLAGS="%{rustflags}"}
  444. %if %{with clang}
  445. export CC=clang
  446. export CXX=clang++
  447. export RUSTFLAGS="$RUSTFLAGS -C linker=clang -C link-arg=-fuse-ld=lld"
  448. %endif
  449. DESTDIR=%{buildroot} ./x.py install
  450. #DESTDIR=%{buildroot} ./x.py install src
  451. # Make sure the shared libraries are in the proper libdir
  452. %if "%{_libdir}" != "%{common_libdir}"
  453. mkdir -p %{buildroot}%{_libdir}
  454. find %{buildroot}%{common_libdir} -maxdepth 1 -type f -name '*.so' \
  455. -exec mv -v -t %{buildroot}%{_libdir} '{}' '+'
  456. %endif
  457. # The shared libraries should be executable for debuginfo extraction.
  458. find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \
  459. -exec chmod -v +x '{}' '+'
  460. # The libdir libraries are identical to those under rustlib/. It's easier on
  461. # library loading if we keep them in libdir, but we do need them in rustlib/
  462. # to support dynamic linking for compiler plugins, so we'll symlink.
  463. (cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" &&
  464. find ../../../../%{_lib} -maxdepth 1 -name '*.so' |
  465. while read lib; do
  466. if [ -f "${lib##*/}" ]; then
  467. # make sure they're actually identical!
  468. cmp "$lib" "${lib##*/}"
  469. ln -v -f -s -t . "$lib"
  470. fi
  471. done)
  472. # Remove installer artifacts (manifests, uninstall scripts, etc.)
  473. find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+'
  474. # Remove backup files from %%configure munging
  475. find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+'
  476. # https://fedoraproject.org/wiki/Changes/Make_ambiguous_python_shebangs_error
  477. # We don't actually need to ship any of those python scripts in rust-src anyway.
  478. find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+'
  479. # FIXME: __os_install_post will strip the rlibs
  480. # -- should we find a way to preserve debuginfo?
  481. # Remove unwanted documentation files (we already package them)
  482. # Remove unwanted documentation files (we already package them)
  483. rm -f %{buildroot}%{_docdir}/%{name}/README.md
  484. rm -f %{buildroot}%{_docdir}/%{name}/COPYRIGHT
  485. rm -f %{buildroot}%{_docdir}/%{name}/LICENSE
  486. rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-APACHE
  487. rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-MIT
  488. rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-THIRD-PARTY
  489. rm -f %{buildroot}%{_docdir}/%{name}/*.old
  490. # Sanitize the HTML documentation
  491. find %{buildroot}%{_docdir}/%{name}/html -empty -delete
  492. find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+'
  493. # Create the path for crate-devel packages
  494. mkdir -p %{buildroot}%{_datadir}/cargo/registry
  495. # Cargo no longer builds its own documentation
  496. # https://github.com/rust-lang/cargo/pull/4904
  497. mkdir -p %{buildroot}%{_docdir}/cargo
  498. ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html
  499. %if %{without lldb}
  500. rm -f %{buildroot}%{_bindir}/rust-lldb
  501. rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py*
  502. rm -f %{buildroot}%{rustlibdir}/etc/lldb_commands
  503. %endif
  504. %if %{with bundled_llvm}
  505. rm -rf %{buildroot}/home
  506. %endif
  507. # We don't want Rust copies of LLVM tools (rust-lld, rust-llvm-dwp)
  508. rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll*
  509. %check
  510. %if %{with test}
  511. %{?cmake_path:export PATH=%{cmake_path}:$PATH}
  512. %{?library_path:export LIBRARY_PATH="%{library_path}"}
  513. %{?rustflags:export RUSTFLAGS="%{rustflags}"}
  514. %if %{with clang}
  515. export CC=clang
  516. export CXX=clang++
  517. export LD=ld.lld
  518. export RUSTFLAGS="$RUSTFLAGS -C linker=ld.lld -C link-arg=-fuse-ld=lld"
  519. %endif
  520. # The results are not stable on koji, so mask errors and just log it.
  521. %{__python3} ./x.py test --no-fail-fast || :
  522. %{__python3} ./x.py test --no-fail-fast cargo || :
  523. %{__python3} ./x.py test --no-fail-fast clippy || :
  524. %{__python3} ./x.py test --no-fail-fast rls || :
  525. %{__python3} ./x.py test --no-fail-fast rustfmt || :
  526. %endif
  527. %files
  528. %license COPYRIGHT LICENSE-APACHE LICENSE-MIT
  529. #license src/libbacktrace/LICENSE-libbacktrace
  530. %doc README.md
  531. %{_bindir}/rustc
  532. %{_bindir}/rustdoc
  533. %{_libdir}/*.so
  534. %{_mandir}/man1/rustc.1*
  535. %{_mandir}/man1/rustdoc.1*
  536. %dir %{rustlibdir}
  537. %dir %{rustlibdir}/%{rust_triple}
  538. %dir %{rustlibdir}/%{rust_triple}/lib
  539. %{rustlibdir}/%{rust_triple}/lib/*.so
  540. %files std-static
  541. %dir %{rustlibdir}
  542. %dir %{rustlibdir}/%{rust_triple}
  543. %dir %{rustlibdir}/%{rust_triple}/lib
  544. %{rustlibdir}/%{rust_triple}/lib/*.rlib
  545. %files debugger-common
  546. %dir %{rustlibdir}
  547. %dir %{rustlibdir}/etc
  548. %{rustlibdir}/etc/rust_types.py*
  549. %files gdb
  550. %{_bindir}/rust-gdb
  551. %{rustlibdir}/etc/gdb_*.py*
  552. %exclude %{_bindir}/rust-gdbgui
  553. %if %with lldb
  554. %files lldb
  555. %{_bindir}/rust-lldb
  556. %{rustlibdir}/etc/lldb_*.py*
  557. %{rustlibdir}/etc/lldb_commands
  558. %endif
  559. %files doc
  560. %docdir %{_docdir}/%{name}
  561. %dir %{_docdir}/%{name}
  562. %dir %{_docdir}/%{name}/html
  563. %{_docdir}/%{name}/html/*/
  564. %{_docdir}/%{name}/html/*.html
  565. %{_docdir}/%{name}/html/*.css
  566. %{_docdir}/%{name}/html/*.js
  567. %{_docdir}/%{name}/html/*.png
  568. %{_docdir}/%{name}/html/*.svg
  569. %{_docdir}/%{name}/html/*.woff
  570. %license %{_docdir}/%{name}/html/*.txt
  571. %license %{_docdir}/%{name}/html/*.md
  572. %files -n cargo
  573. %license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY
  574. %doc src/tools/cargo/README.md
  575. %{_bindir}/cargo
  576. %{_libexecdir}/cargo*
  577. %{_mandir}/man1/cargo*.1*
  578. %dir %{_sysconfdir}/bash_completion.d
  579. %{_sysconfdir}/bash_completion.d/cargo
  580. %dir %{_datadir}/zsh
  581. %dir %{_datadir}/zsh/site-functions
  582. %{_datadir}/zsh/site-functions/_cargo
  583. %dir %{_datadir}/cargo
  584. %dir %{_datadir}/cargo/registry
  585. %files -n cargo-doc
  586. %docdir %{_docdir}/cargo
  587. %dir %{_docdir}/cargo
  588. %{_docdir}/cargo/html
  589. %files -n rustfmt
  590. %{_bindir}/rustfmt
  591. %{_bindir}/cargo-fmt
  592. %doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md
  593. %license src/tools/rustfmt/LICENSE-{APACHE,MIT}
  594. %files -n rls
  595. %{_bindir}/rls
  596. %doc src/tools/rls/{README.md,COPYRIGHT,debugging.md}
  597. %license src/tools/rls/LICENSE-{APACHE,MIT}
  598. %files -n clippy
  599. %{_bindir}/cargo-clippy
  600. %{_bindir}/clippy-driver
  601. %doc src/tools/clippy/{README.md,CHANGELOG.md}
  602. %license src/tools/clippy/LICENSE*
  603. %files src
  604. %dir %{rustlibdir}
  605. %{rustlibdir}/src
  606. %files analysis
  607. %{_bindir}/rust-analyzer
  608. %{rustlibdir}/%{rust_triple}/analysis/
  609. %files miri
  610. %{_bindir}/miri
  611. %{_bindir}/cargo-miri
  612. %changelog
  613. * Sun Apr 18 2021 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.51.0-2
  614. - rebuilt with llvm-12.
  615. * Tue Mar 30 2021 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.51.0-1
  616. - new upstream release.
  617. * Sun Feb 21 2021 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.50.0-1
  618. - new upstream release.
  619. * Wed Jan 27 2021 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.49.0-1
  620. - new upstream release.
  621. * Sat Dec 12 2020 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.48.0-1
  622. - new upstream release.
  623. * Fri Oct 16 2020 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.47.0-1
  624. - new upstream release.
  625. * Thu Sep 24 2020 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.46.0-1
  626. - new upstream release.
  627. * Thu Mar 26 2020 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.42.0-1
  628. - new upstream release.
  629. - separated debuginfo.
  630. * Sun Dec 22 2019 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.40.0-1
  631. - new upstream release.
  632. * Sat Sep 28 2019 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.38.0-1
  633. - new upstream release.
  634. - erased "-preview" from the name of subpackages.
  635. * Wed Dec 05 2018 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.30.1-1
  636. - new upstream release.
  637. - dropped Patch1.
  638. - added subpackages cargo, cargo-doc, rustformat-preview, rls-preview, clippy-preview and rust-analysis.
  639. * Fri Jan 05 2018 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.23.0-1
  640. - Update to 1.23.0 (stable).
  641. * Tue Jan 02 2018 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> - 1.23.0-0.beta1
  642. - initial build for Vine Linux.
  643. - Update to 1.23.0-beta.
  644. - built a bootstrap rpm.
  645. * Thu Nov 23 2017 Josh Stone <jistone@redhat.com> - 1.22.1-1
  646. - Update to 1.22.1.
  647. * Thu Oct 12 2017 Josh Stone <jistone@redhat.com> - 1.21.0-1
  648. - Update to 1.21.0.
  649. * Mon Sep 11 2017 Josh Stone <jistone@redhat.com> - 1.20.0-2
  650. - ABI fixes for ppc64 and s390x.
  651. * Thu Aug 31 2017 Josh Stone <jistone@redhat.com> - 1.20.0-1
  652. - Update to 1.20.0.
  653. - Add a rust-src subpackage.
  654. * Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.19.0-4
  655. - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
  656. * Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.19.0-3
  657. - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
  658. * Mon Jul 24 2017 Josh Stone <jistone@redhat.com> - 1.19.0-2
  659. - Use find-debuginfo.sh --keep-section .rustc
  660. * Thu Jul 20 2017 Josh Stone <jistone@redhat.com> - 1.19.0-1
  661. - Update to 1.19.0.
  662. * Thu Jun 08 2017 Josh Stone <jistone@redhat.com> - 1.18.0-1
  663. - Update to 1.18.0.
  664. * Mon May 08 2017 Josh Stone <jistone@redhat.com> - 1.17.0-2
  665. - Move shared libraries back to libdir and symlink in rustlib
  666. * Thu Apr 27 2017 Josh Stone <jistone@redhat.com> - 1.17.0-1
  667. - Update to 1.17.0.
  668. * Mon Mar 20 2017 Josh Stone <jistone@redhat.com> - 1.16.0-3
  669. - Make rust-lldb arch-specific to deal with lldb deps
  670. * Fri Mar 17 2017 Josh Stone <jistone@redhat.com> - 1.16.0-2
  671. - Limit rust-lldb arches
  672. * Thu Mar 16 2017 Josh Stone <jistone@redhat.com> - 1.16.0-1
  673. - Update to 1.16.0.
  674. - Use rustbuild instead of the old makefiles.
  675. - Update bootstrapping to include rust-std and cargo.
  676. - Add a rust-lldb subpackage.
  677. * Thu Feb 09 2017 Josh Stone <jistone@redhat.com> - 1.15.1-1
  678. - Update to 1.15.1.
  679. - Require rust-rpm-macros for new crate packaging.
  680. - Keep shared libraries under rustlib/, only debug-stripped.
  681. - Merge and clean up conditionals for epel7.
  682. * Fri Dec 23 2016 Josh Stone <jistone@redhat.com> - 1.14.0-2
  683. - Rebuild without bootstrap binaries.
  684. * Thu Dec 22 2016 Josh Stone <jistone@redhat.com> - 1.14.0-1
  685. - Update to 1.14.0.
  686. - Rewrite bootstrap logic to target specific arches.
  687. - Bootstrap ppc64, ppc64le, s390x. (thanks to Sinny Kumari for testing!)
  688. * Thu Nov 10 2016 Josh Stone <jistone@redhat.com> - 1.13.0-1
  689. - Update to 1.13.0.
  690. - Use hardening flags for linking.
  691. - Split the standard library into its own package
  692. - Centralize rustlib/ under /usr/lib/ for multilib integration.
  693. * Thu Oct 20 2016 Josh Stone <jistone@redhat.com> - 1.12.1-1
  694. - Update to 1.12.1.
  695. * Fri Oct 14 2016 Josh Stone <jistone@redhat.com> - 1.12.0-7
  696. - Rebuild with LLVM 3.9.
  697. - Add ncurses-devel for llvm-config's -ltinfo.
  698. * Thu Oct 13 2016 Josh Stone <jistone@redhat.com> - 1.12.0-6
  699. - Rebuild with llvm-static, preparing for 3.9
  700. * Fri Oct 07 2016 Josh Stone <jistone@redhat.com> - 1.12.0-5
  701. - Rebuild with fixed eu-strip (rhbz1380961)
  702. * Fri Oct 07 2016 Josh Stone <jistone@redhat.com> - 1.12.0-4
  703. - Rebuild without bootstrap binaries.
  704. * Thu Oct 06 2016 Josh Stone <jistone@redhat.com> - 1.12.0-3
  705. - Bootstrap aarch64.
  706. - Use jemalloc's MALLOC_CONF to work around #36944.
  707. - Apply pr36933 to really disable armv7hl NEON.
  708. * Sat Oct 01 2016 Josh Stone <jistone@redhat.com> - 1.12.0-2
  709. - Protect .rustc from rpm stripping.
  710. * Fri Sep 30 2016 Josh Stone <jistone@redhat.com> - 1.12.0-1
  711. - Update to 1.12.0.
  712. - Always use --local-rust-root, even for bootstrap binaries.
  713. - Remove the rebuild conditional - the build system now figures it out.
  714. - Let minidebuginfo do its thing, since metadata is no longer a note.
  715. - Let rust build its own compiler-rt builtins again.
  716. * Sat Sep 03 2016 Josh Stone <jistone@redhat.com> - 1.11.0-3
  717. - Rebuild without bootstrap binaries.
  718. * Fri Sep 02 2016 Josh Stone <jistone@redhat.com> - 1.11.0-2
  719. - Bootstrap armv7hl, with backported no-neon patch.
  720. * Wed Aug 24 2016 Josh Stone <jistone@redhat.com> - 1.11.0-1
  721. - Update to 1.11.0.
  722. - Drop the backported patches.
  723. - Patch get-stage0.py to trust existing bootstrap binaries.
  724. - Use libclang_rt.builtins from compiler-rt, dodging llvm-static issues.
  725. - Use --local-rust-root to make sure the right bootstrap is used.
  726. * Sat Aug 13 2016 Josh Stone <jistone@redhat.com> 1.10.0-4
  727. - Rebuild without bootstrap binaries.
  728. * Fri Aug 12 2016 Josh Stone <jistone@redhat.com> - 1.10.0-3
  729. - Initial import into Fedora (#1356907), bootstrapped
  730. - Format license text as suggested in review.
  731. - Note how the tests already run in parallel.
  732. - Undefine _include_minidebuginfo, because it duplicates ".note.rustc".
  733. - Don't let checks fail the whole build.
  734. - Note that -doc can't be noarch, as rpmdiff doesn't allow variations.
  735. * Tue Jul 26 2016 Josh Stone <jistone@redhat.com> - 1.10.0-2
  736. - Update -doc directory ownership, and mark its licenses.
  737. - Package and declare licenses for libbacktrace and hoedown.
  738. - Set bootstrap_base as a global.
  739. - Explicitly require python2.
  740. * Thu Jul 14 2016 Josh Stone <jistone@fedoraproject.org> - 1.10.0-1
  741. - Initial package, bootstrapped