File cargo.spec of Package cargo
#
# spec file for package cargo
#
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2016 Michal Vyskocil, michal.vyskocil@opensuse.org
# Copyright (c) 2016 Kristoffer Gronlund, kgronlund@suse.com
# Copyright (c) 2017 Luke Jones, luke.nukem.jones@gmail.com
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%global bootstrap_version 0.25.0
%global bootstrap_rustc_version 1.24.0
%global current_rustc_version 1.24.0
%bcond_with cargo_bootstrap
%global rust_arch %{_arch}
%global abi gnu
%ifarch armv7hl
%global rust_arch armv7
%global abi gnueabihf
%endif
%ifarch armv6hl
%global rust_arch arm
%global abi gnueabihf
%endif
%ifarch ppc64
%global rust_arch powerpc64
%endif
%ifarch ppc64le
%global rust_arch powerpc64le
%endif
# Must restrict the x86 build to i686 since i586 is currently unsupported
%ifarch %ix86
%global rust_arch i686
%endif
%global rust_triple %{rust_arch}-unknown-linux-%{abi}
Name: cargo
Version: 0.24.0
Release: 0
Summary: The Rust package manager
License: MIT OR Apache-2.0
Group: Development/Languages/Other
Url: https://github.com/rust-lang/cargo
Source0: cargo-%{version}.tar.gz
Source1: vendor.tar.xz
Patch0: update-config-guess.patch
BuildRequires: cmake
BuildRequires: curl
BuildRequires: git
BuildRequires: pkgconfig
BuildRequires: pkgconfig(libcrypto)
BuildRequires: pkgconfig(libcurl)
BuildRequires: pkgconfig(libgit2) >= 0.23
BuildRequires: pkgconfig(libssh)
BuildRequires: pkgconfig(libssh_threads)
BuildRequires: pkgconfig(libssl)
BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(zlib)
Requires: rust
Conflicts: cargo-bootstrap
Conflicts: otherproviders(cargo)
BuildRoot: %{_tmppath}/%{name}-%{version}-build
ExclusiveArch: x86_64 %{arm} aarch64 ppc64 ppc64le s390x
%ifarch %ix86
ExclusiveArch: i586 i686
BuildArch: i686
%endif
# There are no successful builds for less than TW or Leap 42.2, so bootstrap
# until such time that there is.
%if %{with cargo_bootstrap}
BuildRequires: cargo-bootstrap = %{bootstrap_version}
BuildRequires: rust-std-bootstrap = %{bootstrap_rustc_version}
BuildRequires: rustc-bootstrap = %{bootstrap_rustc_version}
%else
BuildRequires: cargo <= %{version}
BuildRequires: rust <= %{current_rustc_version}
BuildRequires: rust-std <= %{current_rustc_version}
%endif
%description
Cargo downloads your Rust project’s dependencies and compiles your project.
%prep
%setup -q -n cargo-%{version}
%setup -q -D -T -a 1 -n cargo-%{version}
%patch0 -p1
mkdir cargo-home
cat >cargo-home/config <<EOF
[source.crates-io]
registry = 'https://github.com/rust-lang/crates.io-index'
replace-with = 'vendored-sources'
[source.vendored-sources]
directory = './vendor'
EOF
%build
# This should eventually migrate to distro policy
# Enable optimization, debuginfo, and link hardening.
export RUSTFLAGS="-Copt-level=3 -Cdebuginfo=2 -Clink-arg=-Wl,-z,relro,-z,now"
export LIBGIT2_SYS_USE_PKG_CONFIG=1
export CARGO_HOME=`pwd`/cargo-home/
cargo build --target=%{rust_triple} --release %{?_smp_mflags}
%install
mkdir build
export CARGO_HOME=`pwd`/cargo-home/
cargo install --root %{buildroot}%{_prefix}
rm %{buildroot}%{_prefix}/.crates.toml
mkdir -p %{buildroot}%{_mandir}/man1
install -Dm0644 src/etc/man/cargo*.1 %{buildroot}%{_mandir}/man1/
install -Dm0644 src/etc/cargo.bashcomp.sh %{buildroot}%{_sysconfdir}/bash_completion.d/cargo.sh
install -Dm0644 src/etc/_cargo %{buildroot}%{_sysconfdir}/zsh/site-functions/_cargo
%files
%defattr(-,root,root)
%doc LICENSE-APACHE LICENSE-MIT README.md
%{_bindir}/cargo
%{_mandir}/man1/*
%config %{_sysconfdir}/bash_completion.d/cargo.sh
%dir %{_sysconfdir}/zsh
%dir %{_sysconfdir}/zsh/site-functions
%config %{_sysconfdir}/zsh/site-functions/_cargo
%changelog