Hello community,

here is the log from the commit of package rust for openSUSE:Factory checked in 
at 2019-09-23 11:58:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rust (Old)
 and      /work/SRC/openSUSE:Factory/.rust.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rust"

Mon Sep 23 11:58:46 2019 rev:42 rq:730225 version:1.37.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/rust/rust.changes        2019-09-02 
13:19:09.665377230 +0200
+++ /work/SRC/openSUSE:Factory/.rust.new.7948/rust.changes      2019-09-23 
11:59:07.709987417 +0200
@@ -1,0 +2,8 @@
+Tue Sep 10 18:11:30 UTC 2019 - feder...@suse.com
+
+- Use gcc7 on all of SLE12, since the embedded LLVM wants at least gcc 5.1.
+
+- Add rust-61206-assume-tarball-llvm-is-fresh.patch - Upstream fix to make
+  LLVM not be rebuilt during the installation phase.
+
+-------------------------------------------------------------------

New:
----
  rust-61206-assume-tarball-llvm-is-fresh.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rust.spec ++++++
--- /var/tmp/diff_new_pack.HavWg0/_old  2019-09-23 11:59:25.981984400 +0200
+++ /var/tmp/diff_new_pack.HavWg0/_new  2019-09-23 11:59:25.981984400 +0200
@@ -82,8 +82,23 @@
 %define codegen_units --set rust.codegen-units=0
 %define debug_info --enable-debuginfo --disable-debuginfo-only-std 
--enable-debuginfo-tools --disable-debuginfo-lines
 %endif
-# Use hardening ldflags.
+
+%if 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120500
+# Use hardening ldflags, plus link path for gcc7's libstdc++
+%global gcc_arch %{_arch}
+%ifarch %{ix86}
+# This is where gcc7 puts things in 32-bit x86.
+%global gcc_arch i586
+%endif
+%ifarch ppc64le
+# This is where gcc7 puts things in ppc64le.
+%global gcc_arch powerpc64le
+%endif
+%global rustflags -Clink-arg=-Wl,-z,relro,-z,now 
-L%{_libdir}/gcc/%{gcc_arch}-suse-linux/7
+%else
+# Use hardening ldflags
 %global rustflags -Clink-arg=-Wl,-z,relro,-z,now
+%endif
 
 # Exclude implicitly-scanned Provides, especially the libLLVM.so ones:
 %global __provides_exclude_from ^%{rustlibdir}/.*$
@@ -107,6 +122,8 @@
 Source108:      
%{dl_url}/rust-%{version_bootstrap}-powerpc-unknown-linux-gnu.tar.xz
 # PATCH-FIX-OPENSUSE: edit src/librustc_llvm/build.rs to ignore GCC 
incompatible flag
 Patch0:         ignore-Wstring-conversion.patch
+# PATCH-FIX-UPSTREAM: Fix bug with timestamps which caused LLVM to rebuild - 
https://github.com/rust-lang/rust/issues/61206
+Patch1:         rust-61206-assume-tarball-llvm-is-fresh.patch
 BuildRequires:  ccache
 # Leap 42 to 42.3, SLE12 SP1, SP2
 %if 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120200
@@ -118,7 +135,13 @@
 %endif
 BuildRequires:  curl
 BuildRequires:  fdupes
+# In all of SLE12, the default gcc is 4.8.  Rust's LLVM wants 5.1 at least.
+# So, we'll just use gcc7.
+%if 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120500
+BuildRequires:  gcc7-c++
+%else
 BuildRequires:  gcc-c++
+%endif
 BuildRequires:  git
 BuildRequires:  pkgconfig
 BuildRequires:  procps
@@ -127,7 +150,7 @@
 # The following requires must mirror:
 # LIBGIT2_SYS_USE_PKG_CONFIG &&
 # LIBSSH2_SYS_USE_PKG_CONFIG
-%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 
120400
+%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 
120500
 BuildRequires:  pkgconfig(libgit2) >= 0.23
 BuildRequires:  pkgconfig(libssh2) >= 1.4.3
 %endif
@@ -352,6 +375,7 @@
 %setup -q -n rustc-%{version}-src
 
 %patch0 -p1
+%patch1 -p1
 
 # use python3
 sed -i -e "1s|#!.*|#!%{_bindir}/python3|" x.py
@@ -427,14 +451,19 @@
 # If the environments between build and install and different,
 # everything will be rebuilt during installation!
 export RUSTFLAGS="%{rustflags}"
+%if 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120500
+export CC=gcc-7
+export CXX=g++-7
+%endif
 # Cargo use system libs if not bootstrapping
 # restircted only to libgit due to version changes causing with cargo rpm deps
-%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 
120400
+%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 
120500
 export LIBGIT2_SYS_USE_PKG_CONFIG=1
 export LIBSSH2_SYS_USE_PKG_CONFIG=1
 %endif
 # eliminate complain from RPMlint
 export CPPFLAGS="%{optflags}"
+export DESTDIR=%{buildroot}
 # END EXPORTS
 
 ./x.py build -v
@@ -448,18 +477,23 @@
 # If the environments between build and install and different,
 # everything will be rebuilt during installation!
 export RUSTFLAGS="%{rustflags}"
+%if 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120500
+export CC=gcc-7
+export CXX=g++-7
+%endif
 # Cargo use system libs if not bootstrapping
 # restircted only to libgit due to version changes causing with cargo rpm deps
-%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 
120400
+%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 
120500
 export LIBGIT2_SYS_USE_PKG_CONFIG=1
 export LIBSSH2_SYS_USE_PKG_CONFIG=1
 %endif
 # eliminate complain from RPMlint
 export CPPFLAGS="%{optflags}"
+export DESTDIR=%{buildroot}
 # END EXPORTS
 
-DESTDIR=%{buildroot} ./x.py install
-DESTDIR=%{buildroot} ./x.py install src
+./x.py install
+./x.py install src
 
 # Remove executable permission from HTML documentation
 # to prevent RPMLINT errors.
@@ -501,6 +535,9 @@
 # There should be nothing here at all
 rm -rf %{buildroot}%{_sysconfdir}
 
+# Remove llvm installation
+rm -rf %{buildroot}/home
+
 %post   -p /sbin/ldconfig
 %postun -p /sbin/ldconfig
 

++++++ rust-61206-assume-tarball-llvm-is-fresh.patch ++++++
commit 53fe76479aab03b1fbe5b7184f45484886f769b1
Author: Josh Stone <jist...@redhat.com>
Date:   Wed Sep 4 16:02:31 2019 -0700

    Assume non-git LLVM is fresh if the stamp file exists
    
    Rustbuild usually writes the LLVM submodule commit in a stamp file, so
    we can avoid rebuilding it unnecessarily. However, for builds from a
    source tarball (non-git), we were assuming a rebuild is always needed.
    This can cause a lot of extra work if any environment like `CFLAGS`
    changed between steps like build and install, which are often separate
    in distro builds.
    
    Now we also write an empty stamp file if the git commit is unknown, and
    its presence is trusted to indicate that no rebuild is needed. An info
    message reports that this is happening, along with the stamp file path
    that can be deleted to force a rebuild anyway.

diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs
index f02def3e1b0..7bf9ea2688f 100644
--- a/src/bootstrap/native.rs
+++ b/src/bootstrap/native.rs
@@ -81,26 +81,29 @@ impl Step for Llvm {
             (info, "src/llvm-project/llvm", builder.llvm_out(target), 
dir.join("bin"))
         };
 
-        if !llvm_info.is_git() {
-            println!(
-                "git could not determine the LLVM submodule commit hash. \
-                Assuming that an LLVM build is necessary.",
-            );
-        }
-
         let build_llvm_config = llvm_config_ret_dir
             .join(exe("llvm-config", &*builder.config.build));
         let done_stamp = out_dir.join("llvm-finished-building");
 
-        if let Some(llvm_commit) = llvm_info.sha() {
-            if done_stamp.exists() {
+        if done_stamp.exists() {
+            if let Some(llvm_commit) = llvm_info.sha() {
                 let done_contents = t!(fs::read(&done_stamp));
 
                 // If LLVM was already built previously and the submodule's 
commit didn't change
                 // from the previous build, then no action is required.
                 if done_contents == llvm_commit.as_bytes() {
-                    return build_llvm_config
+                    return build_llvm_config;
                 }
+            } else {
+                builder.info(
+                    "Could not determine the LLVM submodule commit hash. \
+                     Assuming that an LLVM rebuild is not necessary.",
+                );
+                builder.info(&format!(
+                    "To force LLVM to rebuild, remove the file `{}`",
+                    done_stamp.display()
+                ));
+                return build_llvm_config;
             }
         }
 
@@ -303,9 +306,7 @@ impl Step for Llvm {
 
         cfg.build();
 
-        if let Some(llvm_commit) = llvm_info.sha() {
-            t!(fs::write(&done_stamp, llvm_commit));
-        }
+        t!(fs::write(&done_stamp, llvm_info.sha().unwrap_or("")));
 
         build_llvm_config
     }

Reply via email to