~alpine/aports

4 3

[alpine-aports] [PATCH] community/rust: upgrade to 1.8

Marat Safin <jeizsm@gmail.com>
Details
Message ID
<20171018124500.27823-1-jeizsm@gmail.com>
Sender timestamp
1508330700
DKIM signature
missing
Download raw message
Patch: +142 -94
Signed-off-by: Marat Safin <jeizsm@gmail.com>
---
 community/rust/APKBUILD                           | 13 ++--
 community/rust/alpine-target.patch                |  8 +-
 community/rust/fix-build.patch                    | 92 +++++++++++++++++++++++
 community/rust/musl-fix-jemalloc.patch            | 61 ---------------
 community/rust/musl-fix-linux_musl_base.patch     |  8 +-
 community/rust/musl-fix-static-linking.patch      | 42 +++++++----
 community/rust/musl-support-dynamic-linking.patch | 12 ++-
 7 files changed, 142 insertions(+), 94 deletions(-)
 create mode 100644 community/rust/fix-build.patch
 delete mode 100644 community/rust/musl-fix-jemalloc.patch

diff --git a/community/rust/APKBUILD b/community/rust/APKBUILD
index 48ce4e7ffa..80f8ad0c4e 100644
--- a/community/rust/APKBUILD
+++ b/community/rust/APKBUILD
@@ -2,7 +2,7 @@
# Contributor: Shiz <hi@shiz.me>
# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
pkgname=rust
pkgver=1.17.0
pkgver=1.18.0
_llvmver=3.9
_bootver=1.16.0
pkgrel=3
@@ -29,7 +29,6 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
	musl-support-dynamic-linking.patch
	musl-fix-static-linking.patch
	musl-fix-linux_musl_base.patch
	musl-fix-jemalloc.patch
	llvm-with-ffi.patch
	static-pie.patch
	need-rpath.patch
@@ -38,6 +37,7 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
	alpine-move-py-scripts-to-share.patch
	alpine-change-rpath-to-rustlib.patch
	alpine-target.patch
	fix-build.patch
	check-rustc
	"
builddir="$srcdir/rustc-$pkgver-src"
@@ -169,11 +169,10 @@ _mv() {
	mv $@
}

sha512sums="781799b29d83b4f0f433814bd818df034526db8e7f88c2df51d3b814eacafe8098d4bbe47ace951e1943325b3267b244007cf04f1f11083645b25aeacd40ebb6  rustc-1.17.0-src.tar.gz
b0a8883e4469b60edd150c84486ab950396d757220f97bd271529576614c6c3b49456098507503832c20619d4bd74246dbc99c78116634a68a6df994793e9a94  musl-support-dynamic-linking.patch
292c1cb4f751d830f5f1300d7ef94f573f698ac51e18243d7ff0d5a47bb1729bb2cbe8fb456e7a479213df5e5fbf49e360c9439d0f5ad7126cb72d161c91566a  musl-fix-static-linking.patch
f436fddf7ab70ca5f1424081f5b75450270b200b3d997231323863e11addf76e1d65831a7ca09e3a5b7904ce828766c1f70b08326a175890298f28e5bc8646ef  musl-fix-linux_musl_base.patch
c913d04ef419b2b6d8e453f72894070f263c9292abf97114a51884d475d03ce5b032053f1676ba9364800b4b35e394f707995058530ad5e4122c60f65ddd3db7  musl-fix-jemalloc.patch
sha512sums="eff0460b647dfb3490e28d4dec4f9781d31a942f22de75d9bd1ba31591597226b6862ec5132e8b4fcdbcf6e6ffa085ca5dda7ff8260cd82388fc13e8d3b4a2eb  rustc-1.18.0-src.tar.gz
b5db9ed04eac26c6fc62cde3f19d29837a5feea68e79165c23b5b5cade2e1d193f2399d27f7622b230996da9565f78825be154574f1cd59189ded8a03a766cfb  musl-support-dynamic-linking.patch
a6071aab49a7fcd38189a73b0c49ee0808e2063b4e6531643ef154b65bae699e8b42537a9c4400bf2662169d2350ad25f1166de03438efaf9578d9422dffdd8f  musl-fix-static-linking.patch
9ebfb10abb50d74ff08d257d85257ce70ac3ce834aa95a8901808497b14acf3ea898fb197de64d13554eb5feedabe9fd04fec2cc6a7bea9b1335684bfcdcd88b  musl-fix-linux_musl_base.patch
dc6432293bd060d5e3a73f25870867654fae61995dcd919e244a2dc686b6107556deed8c59ca6002182bfeff5ebc1ca2b89c4028ab0fbfb79e65defe47c9b4b0  llvm-with-ffi.patch
5aaf6715b27b8b786740a55b91216d47985fbef3ccb0ef7e6a81696a2823671f8306143f7ecf77e66af91ef1500072524b9b4c7569508922ad5268df6080fda1  static-pie.patch
ff633f2a46c683ad698d1c09c98c06ce9ee9b8d55fa5593cdd485b439ebca3273794d29b5ff32b887be8666f52913a23af6e133c782bd0c4e2c88e306dd3a494  need-rpath.patch
diff --git a/community/rust/alpine-target.patch b/community/rust/alpine-target.patch
index e013a6bc2e..fc79b45b9a 100644
--- a/community/rust/alpine-target.patch
+++ b/community/rust/alpine-target.patch
@@ -8,7 +8,7 @@ and distribution-specific quirks instead of polluting the main musl target of

--- /dev/null
+++ b/src/librustc_back/target/i586_alpine_linux_musl.rs
@@ -0,0 +1,32 @@
@@ -0,0 +1,34 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
@@ -19,6 +19,7 @@ and distribution-specific quirks instead of polluting the main musl target of
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use LinkerFlavor;
+use target::{Target, TargetResult};
+
+pub fn target() -> TargetResult {
@@ -38,6 +39,7 @@ and distribution-specific quirks instead of polluting the main musl target of
+        target_os: "linux".to_string(),
+        target_env: "musl".to_string(),
+        target_vendor: "alpine".to_string(),
+        linker_flavor: LinkerFlavor::Gcc,
+        options: base,
+    })
+}
@@ -55,7 +57,7 @@ and distribution-specific quirks instead of polluting the main musl target of
 /// Everything `rustc` knows about how to compile for a specific target.
--- /dev/null
+++ b/src/librustc_back/target/x86_64_alpine_linux_musl.rs
@@ -0,0 +1,32 @@
@@ -0,0 +1,34 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
@@ -66,6 +68,7 @@ and distribution-specific quirks instead of polluting the main musl target of
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use LinkerFlavor;
+use target::{Target, TargetResult};
+
+pub fn target() -> TargetResult {
@@ -85,6 +88,7 @@ and distribution-specific quirks instead of polluting the main musl target of
+        target_os: "linux".to_string(),
+        target_env: "musl".to_string(),
+        target_vendor: "alpine".to_string(),
+        linker_flavor: LinkerFlavor::Gcc,
+        options: base,
+    })
+}
diff --git a/community/rust/fix-build.patch b/community/rust/fix-build.patch
new file mode 100644
index 0000000000..0a8482d731
--- /dev/null
+++ b/community/rust/fix-build.patch
@@ -0,0 +1,92 @@
diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs
index 56cbb4cecf2a..dc9dac736278 100644
--- a/src/bootstrap/flags.rs
+++ b/src/bootstrap/flags.rs
@@ -242,11 +242,18 @@ Arguments:
         let cwd = t!(env::current_dir());
         let paths = matches.free[1..].iter().map(|p| cwd.join(p)).collect::<Vec<_>>();
 
+        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
+            if fs::metadata("config.toml").is_ok() {
+                Some(PathBuf::from("config.toml"))
+            } else {
+                None
+            }
+        });
 
         // All subcommands can have an optional "Available paths" section
         if matches.opt_present("verbose") {
             let flags = Flags::parse(&["build".to_string()]);
-            let mut config = Config::default();
+            let mut config = Config::parse(&flags.build, cfg_file.clone());
             config.build = flags.build.clone();
             let mut build = Build::new(flags, config);
             metadata::build(&mut build);
@@ -307,14 +314,6 @@ Arguments:
         };
 
 
-        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
-            if fs::metadata("config.toml").is_ok() {
-                Some(PathBuf::from("config.toml"))
-            } else {
-                None
-            }
-        });
-
         let mut stage = matches.opt_str("stage").map(|j| j.parse().unwrap());
 
         if matches.opt_present("incremental") {
diff --git a/src/bootstrap/bin/main.rs b/src/bootstrap/bin/main.rs
index 5ca5ce1648f2..5ef18b89841f 100644
--- a/src/bootstrap/bin/main.rs
+++ b/src/bootstrap/bin/main.rs
@@ -26,12 +26,6 @@ use bootstrap::{Flags, Config, Build};
 fn main() {
     let args = env::args().skip(1).collect::<Vec<_>>();
     let flags = Flags::parse(&args);
-    let mut config = Config::parse(&flags.build, flags.config.clone());
-
-    // compat with `./configure` while we're still using that
-    if std::fs::metadata("config.mk").is_ok() {
-        config.update_with_config_mk();
-    }
-
+    let config = Config::parse(&flags.build, flags.config.clone());
     Build::new(flags, config).build();
 }
diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
index fd8aa320fb3d..902cd0997a8e 100644
--- a/src/bootstrap/config.rs
+++ b/src/bootstrap/config.rs
@@ -15,7 +15,7 @@
 
 use std::collections::HashMap;
 use std::env;
-use std::fs::File;
+use std::fs::{self, File};
 use std::io::prelude::*;
 use std::path::PathBuf;
 use std::process;
@@ -410,6 +410,12 @@ impl Config {
             set(&mut config.rust_dist_src, t.src_tarball);
         }
 
+
+        // compat with `./configure` while we're still using that
+        if fs::metadata("config.mk").is_ok() {
+            config.update_with_config_mk();
+        }
+
         return config
     }
 
@@ -418,7 +424,7 @@ impl Config {
     /// While we still have `./configure` this implements the ability to decode
     /// that configuration into this. This isn't exactly a full-blown makefile
     /// parser, but hey it gets the job done!
-    pub fn update_with_config_mk(&mut self) {
+    fn update_with_config_mk(&mut self) {
         let mut config = String::new();
         File::open("config.mk").unwrap().read_to_string(&mut config).unwrap();
         for line in config.lines() {
diff --git a/community/rust/musl-fix-jemalloc.patch b/community/rust/musl-fix-jemalloc.patch
deleted file mode 100644
index 345398a301..0000000000
--- a/community/rust/musl-fix-jemalloc.patch
@@ -1,61 +0,0 @@
From 536011d929ecbd1170baf34e09580e567c971f95 Mon Sep 17 00:00:00 2001
From: Shiz <hi@shiz.me>
Date: Sat, 8 Apr 2017 20:36:00 +0200
Subject: [PATCH] Fix jemalloc support for musl

Just like DragonFlyBSD, using the same symbols as the system allocator will
result in a segmentation fault at runtime due to allocator mismatches.
As such, prefix the jemalloc symbols instead.

Upstream-Issue: https://github.com/rust-lang/rust/pull/41168
---
 src/liballoc_jemalloc/build.rs |  2 +-
 src/liballoc_jemalloc/lib.rs   | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/liballoc_jemalloc/build.rs b/src/liballoc_jemalloc/build.rs
index ae040a2..f3a0eeb 100644
--- a/src/liballoc_jemalloc/build.rs
+++ b/src/liballoc_jemalloc/build.rs
@@ -138,7 +138,7 @@ fn main() {
         // should be good to go!
         cmd.arg("--with-jemalloc-prefix=je_");
         cmd.arg("--disable-tls");
-    } else if target.contains("dragonfly") {
+    } else if target.contains("dragonfly") || target.contains("musl") {
         cmd.arg("--with-jemalloc-prefix=je_");
     }
 
diff --git a/src/liballoc_jemalloc/lib.rs b/src/liballoc_jemalloc/lib.rs
index a7a67ef..83cc1ef 100644
--- a/src/liballoc_jemalloc/lib.rs
+++ b/src/liballoc_jemalloc/lib.rs
@@ -51,23 +51,23 @@ mod imp {
     // request it as unprefixing cause segfaults (mismatches in allocators).
     extern "C" {
         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
-                       target_os = "dragonfly", target_os = "windows"),
+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
                    link_name = "je_mallocx")]
         fn mallocx(size: size_t, flags: c_int) -> *mut c_void;
         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
-                       target_os = "dragonfly", target_os = "windows"),
+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
                    link_name = "je_rallocx")]
         fn rallocx(ptr: *mut c_void, size: size_t, flags: c_int) -> *mut c_void;
         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
-                       target_os = "dragonfly", target_os = "windows"),
+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
                    link_name = "je_xallocx")]
         fn xallocx(ptr: *mut c_void, size: size_t, extra: size_t, flags: c_int) -> size_t;
         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
-                       target_os = "dragonfly", target_os = "windows"),
+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
                    link_name = "je_sdallocx")]
         fn sdallocx(ptr: *mut c_void, size: size_t, flags: c_int);
         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
-                       target_os = "dragonfly", target_os = "windows"),
+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
                    link_name = "je_nallocx")]
         fn nallocx(size: size_t, flags: c_int) -> size_t;
     }
diff --git a/community/rust/musl-fix-linux_musl_base.patch b/community/rust/musl-fix-linux_musl_base.patch
index 38194290cb..f2efb065e0 100644
--- a/community/rust/musl-fix-linux_musl_base.patch
+++ b/community/rust/musl-fix-linux_musl_base.patch
@@ -12,13 +12,13 @@ See https://github.com/rust-lang/rust/pull/40113
 
-    // Make sure that the linker/gcc really don't pull in anything, including
-    // default objects, libs, etc.
-    base.pre_link_args.push("-nostdlib".to_string());
-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-nostdlib".to_string());
-
     // At least when this was tested, the linker would not add the
     // `GNU_EH_FRAME` program header to executables generated, which is required
     // when unwinding to locate the unwinding information. I'm not sure why this
     // argument is *not* necessary for normal builds, but it can't hurt!
     base.pre_link_args.push("-Wl,--eh-frame-hdr".to_string());
     base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,--eh-frame-hdr".to_string());
 
-    // There's a whole bunch of circular dependencies when dealing with MUSL
-    // unfortunately. To put this in perspective libc is statically linked to
@@ -42,8 +42,8 @@ See https://github.com/rust-lang/rust/pull/40113
-    // link everything as a group, not stripping anything out until everything
-    // is processed. The linker will still perform a pass to strip out object
-    // files but it won't do so until all objects/archives have been processed.
-    base.pre_link_args.push("-Wl,-(".to_string());
-    base.post_link_args.push("-Wl,-)".to_string());
-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,-(".to_string());
-    base.post_link_args.insert(LinkerFlavor::Gcc, vec!["-Wl,-)".to_string()]);
-
-    // When generating a statically linked executable there's generally some
-    // small setup needed which is listed in these files. These are provided by
diff --git a/community/rust/musl-fix-static-linking.patch b/community/rust/musl-fix-static-linking.patch
index 85de05e542..93fe79d15f 100644
--- a/community/rust/musl-fix-static-linking.patch
+++ b/community/rust/musl-fix-static-linking.patch
@@ -100,22 +100,20 @@ static linking is requested, instead of dynamically as before.
 
     // # Telling the linker what we're doing
 
@@ -983,11 +983,14 @@ 
         cmd.link_whole_staticlib(&l.name.as_str(), &search_path);
     }
 
-    cmd.hint_dynamic();
+    let fully_static = sess.fully_static();
+    if !fully_static {
+        cmd.hint_dynamic();
+    }
 
     for lib in others {
@@ -983,13 +983,13 @@
     let relevant_libs = sess.cstore.used_libraries().into_iter().filter(|l| {
         relevant_lib(sess, l)
     });

     let search_path = archive_search_paths(sess);
     for lib in relevant_libs {
         match lib.kind {
-            NativeLibraryKind::NativeUnknown => cmd.link_dylib(&lib.name.as_str()),
+            NativeLibraryKind::NativeUnknown => if fully_static { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
+            NativeLibraryKind::NativeUnknown => if sess.fully_static() { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
             NativeLibraryKind::NativeFramework => cmd.link_framework(&lib.name.as_str()),
             NativeLibraryKind::NativeStatic => bug!(),
             NativeLibraryKind::NativeStaticNobundle => cmd.link_staticlib(&lib.name.as_str()),
             NativeLibraryKind::NativeStatic => cmd.link_whole_staticlib(&lib.name.as_str(),
                                                                         &search_path)
         }
--- a/src/librustc_trans/back/linker.rs 
+++ b/src/librustc_trans/back/linker.rs 
@@ -127,16 +125,18 @@ static linking is requested, instead of dynamically as before.
     fn optimize(&mut self);
     fn debuginfo(&mut self);
     fn no_default_libraries(&mut self);
@@ -93,6 +93,8 @@
@@ -93,8 +93,10 @@
     fn no_whole_archives(&mut self);
     fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType);
     fn subsystem(&mut self, subsystem: &str);
     // Should have been finalize(self), but we don't support self-by-value on trait objects (yet?).
     fn finalize(&mut self) -> Command;
+    fn start_group(&mut self);
+    fn end_group(&mut self);
 }
 
 pub struct GnuLinker<'a> {
@@ -116,6 +117,9 @@ 
 pub struct GccLinker<'a> {
@@ -116,6 +117,9 @@
     fn output_filename(&mut self, path: &Path) { self.cmd.arg("-o").arg(path); }
     fn add_object(&mut self, path: &Path) { self.cmd.arg(path); }
     fn position_independent_executable(&mut self) { self.cmd.arg("-pie"); }
@@ -198,3 +198,13 @@ static linking is requested, instead of dynamically as before.
     }
 }
 
--- a/src/librustc_trans/back/linker.rs 
+++ b/src/librustc_trans/back/linker.rs 
@@ -158,6 +158,7 @@ impl<'a> GccLinker<'a> {
     }
 
     fn hint_dynamic(&mut self) {
+        if self.sess.fully_static() { return }
         if !self.takes_hints() { return }
         if self.hinted_static {
             self.linker_arg("-Bdynamic");
diff --git a/community/rust/musl-support-dynamic-linking.patch b/community/rust/musl-support-dynamic-linking.patch
index 7c4e93681b..efbbd7f0b0 100644
--- a/community/rust/musl-support-dynamic-linking.patch
+++ b/community/rust/musl-support-dynamic-linking.patch
@@ -303,10 +303,12 @@ index defbb44448..f10c7d5c83 100644
     }
 
     {
@@ -718,8 +720,10 @@ fn link_natively(sess: &Session,
                   objects, out_filename, outputs, trans);
@@ -718,12 +720,14 @@ fn link_natively(sess: &Session,
         cmd = linker.finalize();
     }
     if let Some(args) = sess.target.target.options.late_link_args.get(&flavor) {
         cmd.args(args);
     }
     cmd.args(&sess.target.target.options.late_link_args);
-    for obj in &sess.target.target.options.post_link_objects {
-        cmd.arg(root.join(obj));
+    if sess.crt_static() {
@@ -314,7 +316,9 @@ index defbb44448..f10c7d5c83 100644
+            cmd.arg(root.join(obj));
+        }
     }
     cmd.args(&sess.target.target.options.post_link_args);
     if let Some(args) = sess.target.target.options.post_link_args.get(&flavor) {
         cmd.args(args);
     }
 
diff --git a/src/libstd/build.rs b/src/libstd/build.rs
index 9504194393..dd2008c206 100644
-- 
2.14.2



---
Unsubscribe:  alpine-aports+unsubscribe@lists.alpinelinux.org
Help:         alpine-aports+help@lists.alpinelinux.org
---
Natanael Copa <ncopa@alpinelinux.org>
Details
Message ID
<20171023140116.413ec154@ncopa-macbook.copa.dup.pw>
In-Reply-To
<20171018124500.27823-1-jeizsm@gmail.com> (view parent)
Sender timestamp
1508760076
DKIM signature
missing
Download raw message
Jakub,

ok to push this? (with fixed commit message 1.8 -> 1.18)

-nc

On Wed, 18 Oct 2017 15:45:00 +0300
Marat Safin <jeizsm@gmail.com> wrote:

> Signed-off-by: Marat Safin <jeizsm@gmail.com>
> ---
>  community/rust/APKBUILD                           | 13 ++--
>  community/rust/alpine-target.patch                |  8 +-
>  community/rust/fix-build.patch                    | 92 +++++++++++++++++++++++
>  community/rust/musl-fix-jemalloc.patch            | 61 ---------------
>  community/rust/musl-fix-linux_musl_base.patch     |  8 +-
>  community/rust/musl-fix-static-linking.patch      | 42 +++++++----
>  community/rust/musl-support-dynamic-linking.patch | 12 ++-
>  7 files changed, 142 insertions(+), 94 deletions(-)
>  create mode 100644 community/rust/fix-build.patch
>  delete mode 100644 community/rust/musl-fix-jemalloc.patch
> 
> diff --git a/community/rust/APKBUILD b/community/rust/APKBUILD
> index 48ce4e7ffa..80f8ad0c4e 100644
> --- a/community/rust/APKBUILD
> +++ b/community/rust/APKBUILD
> @@ -2,7 +2,7 @@
>  # Contributor: Shiz <hi@shiz.me>
>  # Maintainer: Jakub Jirutka <jakub@jirutka.cz>
>  pkgname=rust
> -pkgver=1.17.0
> +pkgver=1.18.0
>  _llvmver=3.9
>  _bootver=1.16.0
>  pkgrel=3
> @@ -29,7 +29,6 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
>  	musl-support-dynamic-linking.patch
>  	musl-fix-static-linking.patch
>  	musl-fix-linux_musl_base.patch
> -	musl-fix-jemalloc.patch
>  	llvm-with-ffi.patch
>  	static-pie.patch
>  	need-rpath.patch
> @@ -38,6 +37,7 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
>  	alpine-move-py-scripts-to-share.patch
>  	alpine-change-rpath-to-rustlib.patch
>  	alpine-target.patch
> +	fix-build.patch
>  	check-rustc
>  	"
>  builddir="$srcdir/rustc-$pkgver-src"
> @@ -169,11 +169,10 @@ _mv() {
>  	mv $@
>  }
>  
> -sha512sums="781799b29d83b4f0f433814bd818df034526db8e7f88c2df51d3b814eacafe8098d4bbe47ace951e1943325b3267b244007cf04f1f11083645b25aeacd40ebb6  rustc-1.17.0-src.tar.gz
> -b0a8883e4469b60edd150c84486ab950396d757220f97bd271529576614c6c3b49456098507503832c20619d4bd74246dbc99c78116634a68a6df994793e9a94  musl-support-dynamic-linking.patch
> -292c1cb4f751d830f5f1300d7ef94f573f698ac51e18243d7ff0d5a47bb1729bb2cbe8fb456e7a479213df5e5fbf49e360c9439d0f5ad7126cb72d161c91566a  musl-fix-static-linking.patch
> -f436fddf7ab70ca5f1424081f5b75450270b200b3d997231323863e11addf76e1d65831a7ca09e3a5b7904ce828766c1f70b08326a175890298f28e5bc8646ef  musl-fix-linux_musl_base.patch
> -c913d04ef419b2b6d8e453f72894070f263c9292abf97114a51884d475d03ce5b032053f1676ba9364800b4b35e394f707995058530ad5e4122c60f65ddd3db7  musl-fix-jemalloc.patch
> +sha512sums="eff0460b647dfb3490e28d4dec4f9781d31a942f22de75d9bd1ba31591597226b6862ec5132e8b4fcdbcf6e6ffa085ca5dda7ff8260cd82388fc13e8d3b4a2eb  rustc-1.18.0-src.tar.gz
> +b5db9ed04eac26c6fc62cde3f19d29837a5feea68e79165c23b5b5cade2e1d193f2399d27f7622b230996da9565f78825be154574f1cd59189ded8a03a766cfb  musl-support-dynamic-linking.patch
> +a6071aab49a7fcd38189a73b0c49ee0808e2063b4e6531643ef154b65bae699e8b42537a9c4400bf2662169d2350ad25f1166de03438efaf9578d9422dffdd8f  musl-fix-static-linking.patch
> +9ebfb10abb50d74ff08d257d85257ce70ac3ce834aa95a8901808497b14acf3ea898fb197de64d13554eb5feedabe9fd04fec2cc6a7bea9b1335684bfcdcd88b  musl-fix-linux_musl_base.patch
>  dc6432293bd060d5e3a73f25870867654fae61995dcd919e244a2dc686b6107556deed8c59ca6002182bfeff5ebc1ca2b89c4028ab0fbfb79e65defe47c9b4b0  llvm-with-ffi.patch
>  5aaf6715b27b8b786740a55b91216d47985fbef3ccb0ef7e6a81696a2823671f8306143f7ecf77e66af91ef1500072524b9b4c7569508922ad5268df6080fda1  static-pie.patch
>  ff633f2a46c683ad698d1c09c98c06ce9ee9b8d55fa5593cdd485b439ebca3273794d29b5ff32b887be8666f52913a23af6e133c782bd0c4e2c88e306dd3a494  need-rpath.patch
> diff --git a/community/rust/alpine-target.patch b/community/rust/alpine-target.patch
> index e013a6bc2e..fc79b45b9a 100644
> --- a/community/rust/alpine-target.patch
> +++ b/community/rust/alpine-target.patch
> @@ -8,7 +8,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>  
>  --- /dev/null
>  +++ b/src/librustc_back/target/i586_alpine_linux_musl.rs
> -@@ -0,0 +1,32 @@
> +@@ -0,0 +1,34 @@
>  +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
>  +// file at the top-level directory of this distribution and at
>  +// http://rust-lang.org/COPYRIGHT.
> @@ -19,6 +19,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>  +// option. This file may not be copied, modified, or distributed
>  +// except according to those terms.
>  +
> ++use LinkerFlavor;
>  +use target::{Target, TargetResult};
>  +
>  +pub fn target() -> TargetResult {
> @@ -38,6 +39,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>  +        target_os: "linux".to_string(),
>  +        target_env: "musl".to_string(),
>  +        target_vendor: "alpine".to_string(),
> ++        linker_flavor: LinkerFlavor::Gcc,
>  +        options: base,
>  +    })
>  +}
> @@ -55,7 +57,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>   /// Everything `rustc` knows about how to compile for a specific target.
>  --- /dev/null
>  +++ b/src/librustc_back/target/x86_64_alpine_linux_musl.rs
> -@@ -0,0 +1,32 @@
> +@@ -0,0 +1,34 @@
>  +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
>  +// file at the top-level directory of this distribution and at
>  +// http://rust-lang.org/COPYRIGHT.
> @@ -66,6 +68,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>  +// option. This file may not be copied, modified, or distributed
>  +// except according to those terms.
>  +
> ++use LinkerFlavor;
>  +use target::{Target, TargetResult};
>  +
>  +pub fn target() -> TargetResult {
> @@ -85,6 +88,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>  +        target_os: "linux".to_string(),
>  +        target_env: "musl".to_string(),
>  +        target_vendor: "alpine".to_string(),
> ++        linker_flavor: LinkerFlavor::Gcc,
>  +        options: base,
>  +    })
>  +}
> diff --git a/community/rust/fix-build.patch b/community/rust/fix-build.patch
> new file mode 100644
> index 0000000000..0a8482d731
> --- /dev/null
> +++ b/community/rust/fix-build.patch
> @@ -0,0 +1,92 @@
> +diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs
> +index 56cbb4cecf2a..dc9dac736278 100644
> +--- a/src/bootstrap/flags.rs
> ++++ b/src/bootstrap/flags.rs
> +@@ -242,11 +242,18 @@ Arguments:
> +         let cwd = t!(env::current_dir());
> +         let paths = matches.free[1..].iter().map(|p| cwd.join(p)).collect::<Vec<_>>();
> + 
> ++        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
> ++            if fs::metadata("config.toml").is_ok() {
> ++                Some(PathBuf::from("config.toml"))
> ++            } else {
> ++                None
> ++            }
> ++        });
> + 
> +         // All subcommands can have an optional "Available paths" section
> +         if matches.opt_present("verbose") {
> +             let flags = Flags::parse(&["build".to_string()]);
> +-            let mut config = Config::default();
> ++            let mut config = Config::parse(&flags.build, cfg_file.clone());
> +             config.build = flags.build.clone();
> +             let mut build = Build::new(flags, config);
> +             metadata::build(&mut build);
> +@@ -307,14 +314,6 @@ Arguments:
> +         };
> + 
> + 
> +-        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
> +-            if fs::metadata("config.toml").is_ok() {
> +-                Some(PathBuf::from("config.toml"))
> +-            } else {
> +-                None
> +-            }
> +-        });
> +-
> +         let mut stage = matches.opt_str("stage").map(|j| j.parse().unwrap());
> + 
> +         if matches.opt_present("incremental") {
> +diff --git a/src/bootstrap/bin/main.rs b/src/bootstrap/bin/main.rs
> +index 5ca5ce1648f2..5ef18b89841f 100644
> +--- a/src/bootstrap/bin/main.rs
> ++++ b/src/bootstrap/bin/main.rs
> +@@ -26,12 +26,6 @@ use bootstrap::{Flags, Config, Build};
> + fn main() {
> +     let args = env::args().skip(1).collect::<Vec<_>>();
> +     let flags = Flags::parse(&args);
> +-    let mut config = Config::parse(&flags.build, flags.config.clone());
> +-
> +-    // compat with `./configure` while we're still using that
> +-    if std::fs::metadata("config.mk").is_ok() {
> +-        config.update_with_config_mk();
> +-    }
> +-
> ++    let config = Config::parse(&flags.build, flags.config.clone());
> +     Build::new(flags, config).build();
> + }
> +diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
> +index fd8aa320fb3d..902cd0997a8e 100644
> +--- a/src/bootstrap/config.rs
> ++++ b/src/bootstrap/config.rs
> +@@ -15,7 +15,7 @@
> + 
> + use std::collections::HashMap;
> + use std::env;
> +-use std::fs::File;
> ++use std::fs::{self, File};
> + use std::io::prelude::*;
> + use std::path::PathBuf;
> + use std::process;
> +@@ -410,6 +410,12 @@ impl Config {
> +             set(&mut config.rust_dist_src, t.src_tarball);
> +         }
> + 
> ++
> ++        // compat with `./configure` while we're still using that
> ++        if fs::metadata("config.mk").is_ok() {
> ++            config.update_with_config_mk();
> ++        }
> ++
> +         return config
> +     }
> + 
> +@@ -418,7 +424,7 @@ impl Config {
> +     /// While we still have `./configure` this implements the ability to decode
> +     /// that configuration into this. This isn't exactly a full-blown makefile
> +     /// parser, but hey it gets the job done!
> +-    pub fn update_with_config_mk(&mut self) {
> ++    fn update_with_config_mk(&mut self) {
> +         let mut config = String::new();
> +         File::open("config.mk").unwrap().read_to_string(&mut config).unwrap();
> +         for line in config.lines() {
> diff --git a/community/rust/musl-fix-jemalloc.patch b/community/rust/musl-fix-jemalloc.patch
> deleted file mode 100644
> index 345398a301..0000000000
> --- a/community/rust/musl-fix-jemalloc.patch
> +++ /dev/null
> @@ -1,61 +0,0 @@
> -From 536011d929ecbd1170baf34e09580e567c971f95 Mon Sep 17 00:00:00 2001
> -From: Shiz <hi@shiz.me>
> -Date: Sat, 8 Apr 2017 20:36:00 +0200
> -Subject: [PATCH] Fix jemalloc support for musl
> -
> -Just like DragonFlyBSD, using the same symbols as the system allocator will
> -result in a segmentation fault at runtime due to allocator mismatches.
> -As such, prefix the jemalloc symbols instead.
> -
> -Upstream-Issue: https://github.com/rust-lang/rust/pull/41168
> ----
> - src/liballoc_jemalloc/build.rs |  2 +-
> - src/liballoc_jemalloc/lib.rs   | 10 +++++-----
> - 2 files changed, 6 insertions(+), 6 deletions(-)
> -
> -diff --git a/src/liballoc_jemalloc/build.rs b/src/liballoc_jemalloc/build.rs
> -index ae040a2..f3a0eeb 100644
> ---- a/src/liballoc_jemalloc/build.rs
> -+++ b/src/liballoc_jemalloc/build.rs
> -@@ -138,7 +138,7 @@ fn main() {
> -         // should be good to go!
> -         cmd.arg("--with-jemalloc-prefix=je_");
> -         cmd.arg("--disable-tls");
> --    } else if target.contains("dragonfly") {
> -+    } else if target.contains("dragonfly") || target.contains("musl") {
> -         cmd.arg("--with-jemalloc-prefix=je_");
> -     }
> - 
> -diff --git a/src/liballoc_jemalloc/lib.rs b/src/liballoc_jemalloc/lib.rs
> -index a7a67ef..83cc1ef 100644
> ---- a/src/liballoc_jemalloc/lib.rs
> -+++ b/src/liballoc_jemalloc/lib.rs
> -@@ -51,23 +51,23 @@ mod imp {
> -     // request it as unprefixing cause segfaults (mismatches in allocators).
> -     extern "C" {
> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
> --                       target_os = "dragonfly", target_os = "windows"),
> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
> -                    link_name = "je_mallocx")]
> -         fn mallocx(size: size_t, flags: c_int) -> *mut c_void;
> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
> --                       target_os = "dragonfly", target_os = "windows"),
> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
> -                    link_name = "je_rallocx")]
> -         fn rallocx(ptr: *mut c_void, size: size_t, flags: c_int) -> *mut c_void;
> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
> --                       target_os = "dragonfly", target_os = "windows"),
> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
> -                    link_name = "je_xallocx")]
> -         fn xallocx(ptr: *mut c_void, size: size_t, extra: size_t, flags: c_int) -> size_t;
> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
> --                       target_os = "dragonfly", target_os = "windows"),
> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
> -                    link_name = "je_sdallocx")]
> -         fn sdallocx(ptr: *mut c_void, size: size_t, flags: c_int);
> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
> --                       target_os = "dragonfly", target_os = "windows"),
> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
> -                    link_name = "je_nallocx")]
> -         fn nallocx(size: size_t, flags: c_int) -> size_t;
> -     }
> diff --git a/community/rust/musl-fix-linux_musl_base.patch b/community/rust/musl-fix-linux_musl_base.patch
> index 38194290cb..f2efb065e0 100644
> --- a/community/rust/musl-fix-linux_musl_base.patch
> +++ b/community/rust/musl-fix-linux_musl_base.patch
> @@ -12,13 +12,13 @@ See https://github.com/rust-lang/rust/pull/40113
>   
>  -    // Make sure that the linker/gcc really don't pull in anything, including
>  -    // default objects, libs, etc.
> --    base.pre_link_args.push("-nostdlib".to_string());
> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-nostdlib".to_string());
>  -
>       // At least when this was tested, the linker would not add the
>       // `GNU_EH_FRAME` program header to executables generated, which is required
>       // when unwinding to locate the unwinding information. I'm not sure why this
>       // argument is *not* necessary for normal builds, but it can't hurt!
> -     base.pre_link_args.push("-Wl,--eh-frame-hdr".to_string());
> +     base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,--eh-frame-hdr".to_string());
>   
>  -    // There's a whole bunch of circular dependencies when dealing with MUSL
>  -    // unfortunately. To put this in perspective libc is statically linked to
> @@ -42,8 +42,8 @@ See https://github.com/rust-lang/rust/pull/40113
>  -    // link everything as a group, not stripping anything out until everything
>  -    // is processed. The linker will still perform a pass to strip out object
>  -    // files but it won't do so until all objects/archives have been processed.
> --    base.pre_link_args.push("-Wl,-(".to_string());
> --    base.post_link_args.push("-Wl,-)".to_string());
> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,-(".to_string());
> +-    base.post_link_args.insert(LinkerFlavor::Gcc, vec!["-Wl,-)".to_string()]);
>  -
>  -    // When generating a statically linked executable there's generally some
>  -    // small setup needed which is listed in these files. These are provided by
> diff --git a/community/rust/musl-fix-static-linking.patch b/community/rust/musl-fix-static-linking.patch
> index 85de05e542..93fe79d15f 100644
> --- a/community/rust/musl-fix-static-linking.patch
> +++ b/community/rust/musl-fix-static-linking.patch
> @@ -100,22 +100,20 @@ static linking is requested, instead of dynamically as before.
>   
>       // # Telling the linker what we're doing
>   
> -@@ -983,11 +983,14 @@ 
> -         cmd.link_whole_staticlib(&l.name.as_str(), &search_path);
> -     }
> - 
> --    cmd.hint_dynamic();
> -+    let fully_static = sess.fully_static();
> -+    if !fully_static {
> -+        cmd.hint_dynamic();
> -+    }
> - 
> -     for lib in others {
> +@@ -983,13 +983,13 @@
> +     let relevant_libs = sess.cstore.used_libraries().into_iter().filter(|l| {
> +         relevant_lib(sess, l)
> +     });
> +
> +     let search_path = archive_search_paths(sess);
> +     for lib in relevant_libs {
>           match lib.kind {
>  -            NativeLibraryKind::NativeUnknown => cmd.link_dylib(&lib.name.as_str()),
> -+            NativeLibraryKind::NativeUnknown => if fully_static { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
> ++            NativeLibraryKind::NativeUnknown => if sess.fully_static() { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
>               NativeLibraryKind::NativeFramework => cmd.link_framework(&lib.name.as_str()),
> -             NativeLibraryKind::NativeStatic => bug!(),
> +             NativeLibraryKind::NativeStaticNobundle => cmd.link_staticlib(&lib.name.as_str()),
> +             NativeLibraryKind::NativeStatic => cmd.link_whole_staticlib(&lib.name.as_str(),
> +                                                                         &search_path)
>           }
>  --- a/src/librustc_trans/back/linker.rs 
>  +++ b/src/librustc_trans/back/linker.rs 
> @@ -127,16 +125,18 @@ static linking is requested, instead of dynamically as before.
>       fn optimize(&mut self);
>       fn debuginfo(&mut self);
>       fn no_default_libraries(&mut self);
> -@@ -93,6 +93,8 @@
> +@@ -93,8 +93,10 @@
>       fn no_whole_archives(&mut self);
>       fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType);
>       fn subsystem(&mut self, subsystem: &str);
> +     // Should have been finalize(self), but we don't support self-by-value on trait objects (yet?).
> +     fn finalize(&mut self) -> Command;
>  +    fn start_group(&mut self);
>  +    fn end_group(&mut self);
>   }
>   
> - pub struct GnuLinker<'a> {
> -@@ -116,6 +117,9 @@ 
> + pub struct GccLinker<'a> {
> +@@ -116,6 +117,9 @@
>       fn output_filename(&mut self, path: &Path) { self.cmd.arg("-o").arg(path); }
>       fn add_object(&mut self, path: &Path) { self.cmd.arg(path); }
>       fn position_independent_executable(&mut self) { self.cmd.arg("-pie"); }
> @@ -198,3 +198,13 @@ static linking is requested, instead of dynamically as before.
>       }
>   }
>   
> +--- a/src/librustc_trans/back/linker.rs 
> ++++ b/src/librustc_trans/back/linker.rs 
> +@@ -158,6 +158,7 @@ impl<'a> GccLinker<'a> {
> +     }
> + 
> +     fn hint_dynamic(&mut self) {
> ++        if self.sess.fully_static() { return }
> +         if !self.takes_hints() { return }
> +         if self.hinted_static {
> +             self.linker_arg("-Bdynamic");
> diff --git a/community/rust/musl-support-dynamic-linking.patch b/community/rust/musl-support-dynamic-linking.patch
> index 7c4e93681b..efbbd7f0b0 100644
> --- a/community/rust/musl-support-dynamic-linking.patch
> +++ b/community/rust/musl-support-dynamic-linking.patch
> @@ -303,10 +303,12 @@ index defbb44448..f10c7d5c83 100644
>       }
>   
>       {
> -@@ -718,8 +720,10 @@ fn link_natively(sess: &Session,
> -                   objects, out_filename, outputs, trans);
> +@@ -718,12 +720,14 @@ fn link_natively(sess: &Session,
> +         cmd = linker.finalize();
> +     }
> +     if let Some(args) = sess.target.target.options.late_link_args.get(&flavor) {
> +         cmd.args(args);
>       }
> -     cmd.args(&sess.target.target.options.late_link_args);
>  -    for obj in &sess.target.target.options.post_link_objects {
>  -        cmd.arg(root.join(obj));
>  +    if sess.crt_static() {
> @@ -314,7 +316,9 @@ index defbb44448..f10c7d5c83 100644
>  +            cmd.arg(root.join(obj));
>  +        }
>       }
> -     cmd.args(&sess.target.target.options.post_link_args);
> +     if let Some(args) = sess.target.target.options.post_link_args.get(&flavor) {
> +         cmd.args(args);
> +     }
>   
>  diff --git a/src/libstd/build.rs b/src/libstd/build.rs
>  index 9504194393..dd2008c206 100644



---
Unsubscribe:  alpine-aports+unsubscribe@lists.alpinelinux.org
Help:         alpine-aports+help@lists.alpinelinux.org
---
Jakub Jirutka <jakub@jirutka.cz>
Details
Message ID
<FAEBA198-090D-4F57-93E6-9591F709E3DA@jirutka.cz>
In-Reply-To
<B4EAF8CB-9CA8-41D4-A8A8-FEAE511BD3DF@gmail.com> (view parent)
Sender timestamp
1508764232
DKIM signature
missing
Download raw message
Hi,

the patch is malformed, maybe due to formatting applied by email client, but raw source didn’t help either.

I very appreciate your contribution, but please have some respect to our time and don’t send patches via email. This way I have to manually extract it to a patch file, apply it, run build to verify that it really works. If I request some changes, then you would send me next email with new set of patches which I have to again manually extract, apply… and also compare with previous patches, so I can review only changes and not complete patches. This is really insane! We have much better methods in the 21st century.

Please open a pull request in https://github.com/alpinelinux/aports/pulls, there it’s automatically tested on CI, we can directly discuss changes and you can just keep adding commits in normal git way, while I can easily see changes you made. You have to just “Fork” https://github.com/alpinelinux/aports/ (as upstream) to get your own remote clone (as origin), clone it locally, create a new branch, commit changes, push it to your origin and open a PR against alpinelinux/aports@master. I we request some changes, you just commit it to your existing branch and push to origin. All of it can be done even using CLI (except creating account on GH if you don’t have one yet).

If you really don’t wanna use GitHub, please at least send me the patch in mbox format in email attachment.

Thanks,
Jakub

> On 23. Oct 2017, at 14:19, Сафин Марат <jeizsm@gmail.com> wrote:
> 
> Use this patch instead. Thanks
> ---
> community/rust/APKBUILD                           | 21 +++---
> community/rust/alpine-target.patch                |  8 +-
> community/rust/fix-build.patch                    | 92 +++++++++++++++++++++++
> community/rust/musl-fix-jemalloc.patch            | 61 ---------------
> community/rust/musl-fix-linux_musl_base.patch     |  8 +-
> community/rust/musl-fix-static-linking.patch      | 42 +++++++----
> community/rust/musl-support-dynamic-linking.patch | 12 ++-
> 7 files changed, 147 insertions(+), 97 deletions(-)
> create mode 100644 community/rust/fix-build.patch
> delete mode 100644 community/rust/musl-fix-jemalloc.patch
> 
> diff --git a/community/rust/APKBUILD b/community/rust/APKBUILD
> index 48ce4e7ffa..62f9462f9c 100644
> --- a/community/rust/APKBUILD
> +++ b/community/rust/APKBUILD
> @@ -1,11 +1,12 @@
> # Contributor: Jakub Jirutka <jakub@jirutka.cz>
> # Contributor: Shiz <hi@shiz.me>
> +# Contributor: Jeizsm <jeizsm@gmail.com>
> # Maintainer: Jakub Jirutka <jakub@jirutka.cz>
> pkgname=rust
> -pkgver=1.17.0
> +pkgver=1.18.0
> _llvmver=3.9
> -_bootver=1.16.0
> -pkgrel=3
> +_bootver=1.17.0
> +pkgrel=1
> pkgdesc="The Rust Programming Language (compiler)"
> url="http://www.rust-lang.org"
> arch="x86_64"
> @@ -29,7 +30,6 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
> 	musl-support-dynamic-linking.patch
> 	musl-fix-static-linking.patch
> 	musl-fix-linux_musl_base.patch
> -	musl-fix-jemalloc.patch
> 	llvm-with-ffi.patch
> 	static-pie.patch
> 	need-rpath.patch
> @@ -38,6 +38,7 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
> 	alpine-move-py-scripts-to-share.patch
> 	alpine-change-rpath-to-rustlib.patch
> 	alpine-target.patch
> +	fix-build.patch
> 	check-rustc
> 	"
> builddir="$srcdir/rustc-$pkgver-src"
> @@ -169,11 +170,10 @@ _mv() {
> 	mv $@
> }
> 
> -sha512sums="781799b29d83b4f0f433814bd818df034526db8e7f88c2df51d3b814eacafe8098d4bbe47ace951e1943325b3267b244007cf04f1f11083645b25aeacd40ebb6  rustc-1.17.0-src.tar.gz
> -b0a8883e4469b60edd150c84486ab950396d757220f97bd271529576614c6c3b49456098507503832c20619d4bd74246dbc99c78116634a68a6df994793e9a94  musl-support-dynamic-linking.patch
> -292c1cb4f751d830f5f1300d7ef94f573f698ac51e18243d7ff0d5a47bb1729bb2cbe8fb456e7a479213df5e5fbf49e360c9439d0f5ad7126cb72d161c91566a  musl-fix-static-linking.patch
> -f436fddf7ab70ca5f1424081f5b75450270b200b3d997231323863e11addf76e1d65831a7ca09e3a5b7904ce828766c1f70b08326a175890298f28e5bc8646ef  musl-fix-linux_musl_base.patch
> -c913d04ef419b2b6d8e453f72894070f263c9292abf97114a51884d475d03ce5b032053f1676ba9364800b4b35e394f707995058530ad5e4122c60f65ddd3db7  musl-fix-jemalloc.patch
> +sha512sums="eff0460b647dfb3490e28d4dec4f9781d31a942f22de75d9bd1ba31591597226b6862ec5132e8b4fcdbcf6e6ffa085ca5dda7ff8260cd82388fc13e8d3b4a2eb  rustc-1.18.0-src.tar.gz
> +b5db9ed04eac26c6fc62cde3f19d29837a5feea68e79165c23b5b5cade2e1d193f2399d27f7622b230996da9565f78825be154574f1cd59189ded8a03a766cfb  musl-support-dynamic-linking.patch
> +d4d39514eca638852307f470250fd12a21781e1e7944377744b7d50290d3a2ab3776fbdfccb7a9221f5da00ca694ac3a5b8c05f72c5e1a0c8711b684b16b1084  musl-fix-static-linking.patch
> +9ebfb10abb50d74ff08d257d85257ce70ac3ce834aa95a8901808497b14acf3ea898fb197de64d13554eb5feedabe9fd04fec2cc6a7bea9b1335684bfcdcd88b  musl-fix-linux_musl_base.patch
> dc6432293bd060d5e3a73f25870867654fae61995dcd919e244a2dc686b6107556deed8c59ca6002182bfeff5ebc1ca2b89c4028ab0fbfb79e65defe47c9b4b0  llvm-with-ffi.patch
> 5aaf6715b27b8b786740a55b91216d47985fbef3ccb0ef7e6a81696a2823671f8306143f7ecf77e66af91ef1500072524b9b4c7569508922ad5268df6080fda1  static-pie.patch
> ff633f2a46c683ad698d1c09c98c06ce9ee9b8d55fa5593cdd485b439ebca3273794d29b5ff32b887be8666f52913a23af6e133c782bd0c4e2c88e306dd3a494  need-rpath.patch
> @@ -181,5 +181,6 @@ d352614e7c774e181decae210140e789de7fc090327ff371981ad28a11ce51c8c01b27c1101a24bb
> b00997c65d1a451fafae8b547893c5cbf03f028d2d70f6971aa670f34c2d6fc82728c740ac4a9909fc1999925ff300e4525cfec745cb9c9521e564eb166872a2  alpine-allow-crt-static.patch
> 498f4649163974afc4f042c43cd0c15d36784031514201a2962061f288a9336c2bc9749f8d2308b8ce3656f8097b5fc5bef505f61e2a6ed422ef4153f5339d77  alpine-move-py-scripts-to-share.patch
> 8d6206f8c50856724cf7b4c1854ec82547f040358a1c7d44abeacc27a5c205a963b1fec51e58ec06c68d85bd2f68a9e6e27ebe457f39e8dd043de17758f5063f  alpine-change-rpath-to-rustlib.patch
> -aaf359dbfb8f379bef42647890e99ada4b5326c29f726edb16c51b23a5033b5e00363d2fb6d74a4f11dfbb241b21b22c578e2ec269ecd77a87cf20d3620b29a5  alpine-target.patch
> +e9935f88f959d37da9e696f2722569bc6da6ed17eddc8d496af4a2ee9a561d8e40bd7644089ee26114bb920e04ff05def18d70a6f2347545500d1a23ee96eefa  alpine-target.patch
> +5c1bcd78d2579e1aeacd4f20d849f75127111fb2f06124531af370c7afdcf9ae78d9e3952911197c02099cdedfeb2335699f98568123bdd83c7acc1ddbae7f54  fix-build.patch
> 79549055dea81379c890b495c82456ab497a9179ec6702c59e11d0748bc668f47fc3d6a69c27a0545bb87c01318631dffc69260bf2d4badc75f53cbf7fad7528  check-rustc"
> diff --git a/community/rust/alpine-target.patch b/community/rust/alpine-target.patch
> index e013a6bc2e..fc79b45b9a 100644
> --- a/community/rust/alpine-target.patch
> +++ b/community/rust/alpine-target.patch
> @@ -8,7 +8,7 @@ and distribution-specific quirks instead of polluting the main musl target of
> 
> --- /dev/null
> +++ b/src/librustc_back/target/i586_alpine_linux_musl.rs
> -@@ -0,0 +1,32 @@
> +@@ -0,0 +1,34 @@
> +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
> +// file at the top-level directory of this distribution and at
> +// http://rust-lang.org/COPYRIGHT.
> @@ -19,6 +19,7 @@ and distribution-specific quirks instead of polluting the main musl target of
> +// option. This file may not be copied, modified, or distributed
> +// except according to those terms.
> +
> ++use LinkerFlavor;
> +use target::{Target, TargetResult};
> +
> +pub fn target() -> TargetResult {
> @@ -38,6 +39,7 @@ and distribution-specific quirks instead of polluting the main musl target of
> +        target_os: "linux".to_string(),
> +        target_env: "musl".to_string(),
> +        target_vendor: "alpine".to_string(),
> ++        linker_flavor: LinkerFlavor::Gcc,
> +        options: base,
> +    })
> +}
> @@ -55,7 +57,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>  /// Everything `rustc` knows about how to compile for a specific target.
> --- /dev/null
> +++ b/src/librustc_back/target/x86_64_alpine_linux_musl.rs
> -@@ -0,0 +1,32 @@
> +@@ -0,0 +1,34 @@
> +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
> +// file at the top-level directory of this distribution and at
> +// http://rust-lang.org/COPYRIGHT.
> @@ -66,6 +68,7 @@ and distribution-specific quirks instead of polluting the main musl target of
> +// option. This file may not be copied, modified, or distributed
> +// except according to those terms.
> +
> ++use LinkerFlavor;
> +use target::{Target, TargetResult};
> +
> +pub fn target() -> TargetResult {
> @@ -85,6 +88,7 @@ and distribution-specific quirks instead of polluting the main musl target of
> +        target_os: "linux".to_string(),
> +        target_env: "musl".to_string(),
> +        target_vendor: "alpine".to_string(),
> ++        linker_flavor: LinkerFlavor::Gcc,
> +        options: base,
> +    })
> +}
> diff --git a/community/rust/fix-build.patch b/community/rust/fix-build.patch
> new file mode 100644
> index 0000000000..0a8482d731
> --- /dev/null
> +++ b/community/rust/fix-build.patch
> @@ -0,0 +1,92 @@
> +diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs
> +index 56cbb4cecf2a..dc9dac736278 100644
> +--- a/src/bootstrap/flags.rs
> ++++ b/src/bootstrap/flags.rs
> +@@ -242,11 +242,18 @@ Arguments:
> +         let cwd = t!(env::current_dir());
> +         let paths = matches.free[1..].iter().map(|p| cwd.join(p)).collect::<Vec<_>>();
> + 
> ++        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
> ++            if fs::metadata("config.toml").is_ok() {
> ++                Some(PathBuf::from("config.toml"))
> ++            } else {
> ++                None
> ++            }
> ++        });
> + 
> +         // All subcommands can have an optional "Available paths" section
> +         if matches.opt_present("verbose") {
> +             let flags = Flags::parse(&["build".to_string()]);
> +-            let mut config = Config::default();
> ++            let mut config = Config::parse(&flags.build, cfg_file.clone());
> +             config.build = flags.build.clone();
> +             let mut build = Build::new(flags, config);
> +             metadata::build(&mut build);
> +@@ -307,14 +314,6 @@ Arguments:
> +         };
> + 
> + 
> +-        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
> +-            if fs::metadata("config.toml").is_ok() {
> +-                Some(PathBuf::from("config.toml"))
> +-            } else {
> +-                None
> +-            }
> +-        });
> +-
> +         let mut stage = matches.opt_str("stage").map(|j| j.parse().unwrap());
> + 
> +         if matches.opt_present("incremental") {
> +diff --git a/src/bootstrap/bin/main.rs b/src/bootstrap/bin/main.rs
> +index 5ca5ce1648f2..5ef18b89841f 100644
> +--- a/src/bootstrap/bin/main.rs
> ++++ b/src/bootstrap/bin/main.rs
> +@@ -26,12 +26,6 @@ use bootstrap::{Flags, Config, Build};
> + fn main() {
> +     let args = env::args().skip(1).collect::<Vec<_>>();
> +     let flags = Flags::parse(&args);
> +-    let mut config = Config::parse(&flags.build, flags.config.clone());
> +-
> +-    // compat with `./configure` while we're still using that
> +-    if std::fs::metadata("config.mk").is_ok() {
> +-        config.update_with_config_mk();
> +-    }
> +-
> ++    let config = Config::parse(&flags.build, flags.config.clone());
> +     Build::new(flags, config).build();
> + }
> +diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
> +index fd8aa320fb3d..902cd0997a8e 100644
> +--- a/src/bootstrap/config.rs
> ++++ b/src/bootstrap/config.rs
> +@@ -15,7 +15,7 @@
> + 
> + use std::collections::HashMap;
> + use std::env;
> +-use std::fs::File;
> ++use std::fs::{self, File};
> + use std::io::prelude::*;
> + use std::path::PathBuf;
> + use std::process;
> +@@ -410,6 +410,12 @@ impl Config {
> +             set(&mut config.rust_dist_src, t.src_tarball);
> +         }
> + 
> ++
> ++        // compat with `./configure` while we're still using that
> ++        if fs::metadata("config.mk").is_ok() {
> ++            config.update_with_config_mk();
> ++        }
> ++
> +         return config
> +     }
> + 
> +@@ -418,7 +424,7 @@ impl Config {
> +     /// While we still have `./configure` this implements the ability to decode
> +     /// that configuration into this. This isn't exactly a full-blown makefile
> +     /// parser, but hey it gets the job done!
> +-    pub fn update_with_config_mk(&mut self) {
> ++    fn update_with_config_mk(&mut self) {
> +         let mut config = String::new();
> +         File::open("config.mk").unwrap().read_to_string(&mut config).unwrap();
> +         for line in config.lines() {
> diff --git a/community/rust/musl-fix-jemalloc.patch b/community/rust/musl-fix-jemalloc.patch
> deleted file mode 100644
> index 345398a301..0000000000
> --- a/community/rust/musl-fix-jemalloc.patch
> +++ /dev/null
> @@ -1,61 +0,0 @@
> -From 536011d929ecbd1170baf34e09580e567c971f95 Mon Sep 17 00:00:00 2001
> -From: Shiz <hi@shiz.me>
> -Date: Sat, 8 Apr 2017 20:36:00 +0200
> -Subject: [PATCH] Fix jemalloc support for musl
> -
> -Just like DragonFlyBSD, using the same symbols as the system allocator will
> -result in a segmentation fault at runtime due to allocator mismatches.
> -As such, prefix the jemalloc symbols instead.
> -
> -Upstream-Issue: https://github.com/rust-lang/rust/pull/41168
> ----
> - src/liballoc_jemalloc/build.rs |  2 +-
> - src/liballoc_jemalloc/lib.rs   | 10 +++++-----
> - 2 files changed, 6 insertions(+), 6 deletions(-)
> -
> -diff --git a/src/liballoc_jemalloc/build.rs b/src/liballoc_jemalloc/build.rs
> -index ae040a2..f3a0eeb 100644
> ---- a/src/liballoc_jemalloc/build.rs
> -+++ b/src/liballoc_jemalloc/build.rs
> -@@ -138,7 +138,7 @@ fn main() {
> -         // should be good to go!
> -         cmd.arg("--with-jemalloc-prefix=je_");
> -         cmd.arg("--disable-tls");
> --    } else if target.contains("dragonfly") {
> -+    } else if target.contains("dragonfly") || target.contains("musl") {
> -         cmd.arg("--with-jemalloc-prefix=je_");
> -     }
> - 
> -diff --git a/src/liballoc_jemalloc/lib.rs b/src/liballoc_jemalloc/lib.rs
> -index a7a67ef..83cc1ef 100644
> ---- a/src/liballoc_jemalloc/lib.rs
> -+++ b/src/liballoc_jemalloc/lib.rs
> -@@ -51,23 +51,23 @@ mod imp {
> -     // request it as unprefixing cause segfaults (mismatches in allocators).
> -     extern "C" {
> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
> --                       target_os = "dragonfly", target_os = "windows"),
> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
> -                    link_name = "je_mallocx")]
> -         fn mallocx(size: size_t, flags: c_int) -> *mut c_void;
> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
> --                       target_os = "dragonfly", target_os = "windows"),
> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
> -                    link_name = "je_rallocx")]
> -         fn rallocx(ptr: *mut c_void, size: size_t, flags: c_int) -> *mut c_void;
> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
> --                       target_os = "dragonfly", target_os = "windows"),
> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
> -                    link_name = "je_xallocx")]
> -         fn xallocx(ptr: *mut c_void, size: size_t, extra: size_t, flags: c_int) -> size_t;
> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
> --                       target_os = "dragonfly", target_os = "windows"),
> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
> -                    link_name = "je_sdallocx")]
> -         fn sdallocx(ptr: *mut c_void, size: size_t, flags: c_int);
> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
> --                       target_os = "dragonfly", target_os = "windows"),
> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
> -                    link_name = "je_nallocx")]
> -         fn nallocx(size: size_t, flags: c_int) -> size_t;
> -     }
> diff --git a/community/rust/musl-fix-linux_musl_base.patch b/community/rust/musl-fix-linux_musl_base.patch
> index 38194290cb..f2efb065e0 100644
> --- a/community/rust/musl-fix-linux_musl_base.patch
> +++ b/community/rust/musl-fix-linux_musl_base.patch
> @@ -12,13 +12,13 @@ See https://github.com/rust-lang/rust/pull/40113
> 
> -    // Make sure that the linker/gcc really don't pull in anything, including
> -    // default objects, libs, etc.
> --    base.pre_link_args.push("-nostdlib".to_string());
> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-nostdlib".to_string());
> -
>      // At least when this was tested, the linker would not add the
>      // `GNU_EH_FRAME` program header to executables generated, which is required
>      // when unwinding to locate the unwinding information. I'm not sure why this
>      // argument is *not* necessary for normal builds, but it can't hurt!
> -     base.pre_link_args.push("-Wl,--eh-frame-hdr".to_string());
> +     base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,--eh-frame-hdr".to_string());
> 
> -    // There's a whole bunch of circular dependencies when dealing with MUSL
> -    // unfortunately. To put this in perspective libc is statically linked to
> @@ -42,8 +42,8 @@ See https://github.com/rust-lang/rust/pull/40113
> -    // link everything as a group, not stripping anything out until everything
> -    // is processed. The linker will still perform a pass to strip out object
> -    // files but it won't do so until all objects/archives have been processed.
> --    base.pre_link_args.push("-Wl,-(".to_string());
> --    base.post_link_args.push("-Wl,-)".to_string());
> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,-(".to_string());
> +-    base.post_link_args.insert(LinkerFlavor::Gcc, vec!["-Wl,-)".to_string()]);
> -
> -    // When generating a statically linked executable there's generally some
> -    // small setup needed which is listed in these files. These are provided by
> diff --git a/community/rust/musl-fix-static-linking.patch b/community/rust/musl-fix-static-linking.patch
> index 85de05e542..93fe79d15f 100644
> --- a/community/rust/musl-fix-static-linking.patch
> +++ b/community/rust/musl-fix-static-linking.patch
> @@ -100,22 +100,20 @@ static linking is requested, instead of dynamically as before.
> 
>      // # Telling the linker what we're doing
> 
> -@@ -983,11 +983,14 @@ 
> -         cmd.link_whole_staticlib(&l.name.as_str(), &search_path);
> -     }
> - 
> --    cmd.hint_dynamic();
> -+    let fully_static = sess.fully_static();
> -+    if !fully_static {
> -+        cmd.hint_dynamic();
> -+    }
> - 
> -     for lib in others {
> +@@ -983,13 +983,13 @@
> +     let relevant_libs = sess.cstore.used_libraries().into_iter().filter(|l| {
> +         relevant_lib(sess, l)
> +     });
> +
> +     let search_path = archive_search_paths(sess);
> +     for lib in relevant_libs {
>          match lib.kind {
> -            NativeLibraryKind::NativeUnknown => cmd.link_dylib(&lib.name.as_str()),
> -+            NativeLibraryKind::NativeUnknown => if fully_static { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
> ++            NativeLibraryKind::NativeUnknown => if sess.fully_static() { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
>              NativeLibraryKind::NativeFramework => cmd.link_framework(&lib.name.as_str()),
> -             NativeLibraryKind::NativeStatic => bug!(),
> +             NativeLibraryKind::NativeStaticNobundle => cmd.link_staticlib(&lib.name.as_str()),
> +             NativeLibraryKind::NativeStatic => cmd.link_whole_staticlib(&lib.name.as_str(),
> +                                                                         &search_path)
>          }
> --- a/src/librustc_trans/back/linker.rs 
> +++ b/src/librustc_trans/back/linker.rs 
> @@ -127,16 +125,18 @@ static linking is requested, instead of dynamically as before.
>      fn optimize(&mut self);
>      fn debuginfo(&mut self);
>      fn no_default_libraries(&mut self);
> -@@ -93,6 +93,8 @@
> +@@ -93,8 +93,10 @@
>      fn no_whole_archives(&mut self);
>      fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType);
>      fn subsystem(&mut self, subsystem: &str);
> +     // Should have been finalize(self), but we don't support self-by-value on trait objects (yet?).
> +     fn finalize(&mut self) -> Command;
> +    fn start_group(&mut self);
> +    fn end_group(&mut self);
>  }
> 
> - pub struct GnuLinker<'a> {
> -@@ -116,6 +117,9 @@ 
> + pub struct GccLinker<'a> {
> +@@ -116,6 +117,9 @@
>      fn output_filename(&mut self, path: &Path) { self.cmd.arg("-o").arg(path); }
>      fn add_object(&mut self, path: &Path) { self.cmd.arg(path); }
>      fn position_independent_executable(&mut self) { self.cmd.arg("-pie"); }
> @@ -198,3 +198,13 @@ static linking is requested, instead of dynamically as before.
>      }
>  }
> 
> +--- a/src/librustc_trans/back/linker.rs 
> ++++ b/src/librustc_trans/back/linker.rs 
> +@@ -158,6 +158,7 @@ impl<'a> GccLinker<'a> {
> +     }
> + 
> +     fn hint_dynamic(&mut self) {
> ++        if self.sess.fully_static() { return }
> +         if !self.takes_hints() { return }
> +         if self.hinted_static {
> +             self.linker_arg("-Bdynamic");
> diff --git a/community/rust/musl-support-dynamic-linking.patch b/community/rust/musl-support-dynamic-linking.patch
> index 7c4e93681b..efbbd7f0b0 100644
> --- a/community/rust/musl-support-dynamic-linking.patch
> +++ b/community/rust/musl-support-dynamic-linking.patch
> @@ -303,10 +303,12 @@ index defbb44448..f10c7d5c83 100644
>      }
> 
>      {
> -@@ -718,8 +720,10 @@ fn link_natively(sess: &Session,
> -                   objects, out_filename, outputs, trans);
> +@@ -718,12 +720,14 @@ fn link_natively(sess: &Session,
> +         cmd = linker.finalize();
> +     }
> +     if let Some(args) = sess.target.target.options.late_link_args.get(&flavor) {
> +         cmd.args(args);
>      }
> -     cmd.args(&sess.target.target.options.late_link_args);
> -    for obj in &sess.target.target.options.post_link_objects {
> -        cmd.arg(root.join(obj));
> +    if sess.crt_static() {
> @@ -314,7 +316,9 @@ index defbb44448..f10c7d5c83 100644
> +            cmd.arg(root.join(obj));
> +        }
>      }
> -     cmd.args(&sess.target.target.options.post_link_args);
> +     if let Some(args) = sess.target.target.options.post_link_args.get(&flavor) {
> +         cmd.args(args);
> +     }
> 
> diff --git a/src/libstd/build.rs b/src/libstd/build.rs
> index 9504194393..dd2008c206 100644
> -- 
> 2.14.2
> 
>> On 23 Oct 2017, at 15:01, Natanael Copa <ncopa@alpinelinux.org> wrote:
>> 
>> Jakub,
>> 
>> ok to push this? (with fixed commit message 1.8 -> 1.18)
>> 
>> -nc
>> 
>> On Wed, 18 Oct 2017 15:45:00 +0300
>> Marat Safin <jeizsm@gmail.com> wrote:
>> 
>>> Signed-off-by: Marat Safin <jeizsm@gmail.com>
>>> ---
>>> community/rust/APKBUILD                           | 13 ++--
>>> community/rust/alpine-target.patch                |  8 +-
>>> community/rust/fix-build.patch                    | 92 +++++++++++++++++++++++
>>> community/rust/musl-fix-jemalloc.patch            | 61 ---------------
>>> community/rust/musl-fix-linux_musl_base.patch     |  8 +-
>>> community/rust/musl-fix-static-linking.patch      | 42 +++++++----
>>> community/rust/musl-support-dynamic-linking.patch | 12 ++-
>>> 7 files changed, 142 insertions(+), 94 deletions(-)
>>> create mode 100644 community/rust/fix-build.patch
>>> delete mode 100644 community/rust/musl-fix-jemalloc.patch
>>> 
>>> diff --git a/community/rust/APKBUILD b/community/rust/APKBUILD
>>> index 48ce4e7ffa..80f8ad0c4e 100644
>>> --- a/community/rust/APKBUILD
>>> +++ b/community/rust/APKBUILD
>>> @@ -2,7 +2,7 @@
>>> # Contributor: Shiz <hi@shiz.me>
>>> # Maintainer: Jakub Jirutka <jakub@jirutka.cz>
>>> pkgname=rust
>>> -pkgver=1.17.0
>>> +pkgver=1.18.0
>>> _llvmver=3.9
>>> _bootver=1.16.0
>>> pkgrel=3
>>> @@ -29,7 +29,6 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
>>> 	musl-support-dynamic-linking.patch
>>> 	musl-fix-static-linking.patch
>>> 	musl-fix-linux_musl_base.patch
>>> -	musl-fix-jemalloc.patch
>>> 	llvm-with-ffi.patch
>>> 	static-pie.patch
>>> 	need-rpath.patch
>>> @@ -38,6 +37,7 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
>>> 	alpine-move-py-scripts-to-share.patch
>>> 	alpine-change-rpath-to-rustlib.patch
>>> 	alpine-target.patch
>>> +	fix-build.patch
>>> 	check-rustc
>>> 	"
>>> builddir="$srcdir/rustc-$pkgver-src"
>>> @@ -169,11 +169,10 @@ _mv() {
>>> 	mv $@
>>> }
>>> 
>>> -sha512sums="781799b29d83b4f0f433814bd818df034526db8e7f88c2df51d3b814eacafe8098d4bbe47ace951e1943325b3267b244007cf04f1f11083645b25aeacd40ebb6  rustc-1.17.0-src.tar.gz
>>> -b0a8883e4469b60edd150c84486ab950396d757220f97bd271529576614c6c3b49456098507503832c20619d4bd74246dbc99c78116634a68a6df994793e9a94  musl-support-dynamic-linking.patch
>>> -292c1cb4f751d830f5f1300d7ef94f573f698ac51e18243d7ff0d5a47bb1729bb2cbe8fb456e7a479213df5e5fbf49e360c9439d0f5ad7126cb72d161c91566a  musl-fix-static-linking.patch
>>> -f436fddf7ab70ca5f1424081f5b75450270b200b3d997231323863e11addf76e1d65831a7ca09e3a5b7904ce828766c1f70b08326a175890298f28e5bc8646ef  musl-fix-linux_musl_base.patch
>>> -c913d04ef419b2b6d8e453f72894070f263c9292abf97114a51884d475d03ce5b032053f1676ba9364800b4b35e394f707995058530ad5e4122c60f65ddd3db7  musl-fix-jemalloc.patch
>>> +sha512sums="eff0460b647dfb3490e28d4dec4f9781d31a942f22de75d9bd1ba31591597226b6862ec5132e8b4fcdbcf6e6ffa085ca5dda7ff8260cd82388fc13e8d3b4a2eb  rustc-1.18.0-src.tar.gz
>>> +b5db9ed04eac26c6fc62cde3f19d29837a5feea68e79165c23b5b5cade2e1d193f2399d27f7622b230996da9565f78825be154574f1cd59189ded8a03a766cfb  musl-support-dynamic-linking.patch
>>> +a6071aab49a7fcd38189a73b0c49ee0808e2063b4e6531643ef154b65bae699e8b42537a9c4400bf2662169d2350ad25f1166de03438efaf9578d9422dffdd8f  musl-fix-static-linking.patch
>>> +9ebfb10abb50d74ff08d257d85257ce70ac3ce834aa95a8901808497b14acf3ea898fb197de64d13554eb5feedabe9fd04fec2cc6a7bea9b1335684bfcdcd88b  musl-fix-linux_musl_base.patch
>>> dc6432293bd060d5e3a73f25870867654fae61995dcd919e244a2dc686b6107556deed8c59ca6002182bfeff5ebc1ca2b89c4028ab0fbfb79e65defe47c9b4b0  llvm-with-ffi.patch
>>> 5aaf6715b27b8b786740a55b91216d47985fbef3ccb0ef7e6a81696a2823671f8306143f7ecf77e66af91ef1500072524b9b4c7569508922ad5268df6080fda1  static-pie.patch
>>> ff633f2a46c683ad698d1c09c98c06ce9ee9b8d55fa5593cdd485b439ebca3273794d29b5ff32b887be8666f52913a23af6e133c782bd0c4e2c88e306dd3a494  need-rpath.patch
>>> diff --git a/community/rust/alpine-target.patch b/community/rust/alpine-target.patch
>>> index e013a6bc2e..fc79b45b9a 100644
>>> --- a/community/rust/alpine-target.patch
>>> +++ b/community/rust/alpine-target.patch
>>> @@ -8,7 +8,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>> 
>>> --- /dev/null
>>> +++ b/src/librustc_back/target/i586_alpine_linux_musl.rs
>>> -@@ -0,0 +1,32 @@
>>> +@@ -0,0 +1,34 @@
>>> +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
>>> +// file at the top-level directory of this distribution and at
>>> +// http://rust-lang.org/COPYRIGHT.
>>> @@ -19,6 +19,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>> +// option. This file may not be copied, modified, or distributed
>>> +// except according to those terms.
>>> +
>>> ++use LinkerFlavor;
>>> +use target::{Target, TargetResult};
>>> +
>>> +pub fn target() -> TargetResult {
>>> @@ -38,6 +39,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>> +        target_os: "linux".to_string(),
>>> +        target_env: "musl".to_string(),
>>> +        target_vendor: "alpine".to_string(),
>>> ++        linker_flavor: LinkerFlavor::Gcc,
>>> +        options: base,
>>> +    })
>>> +}
>>> @@ -55,7 +57,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>> /// Everything `rustc` knows about how to compile for a specific target.
>>> --- /dev/null
>>> +++ b/src/librustc_back/target/x86_64_alpine_linux_musl.rs
>>> -@@ -0,0 +1,32 @@
>>> +@@ -0,0 +1,34 @@
>>> +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
>>> +// file at the top-level directory of this distribution and at
>>> +// http://rust-lang.org/COPYRIGHT.
>>> @@ -66,6 +68,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>> +// option. This file may not be copied, modified, or distributed
>>> +// except according to those terms.
>>> +
>>> ++use LinkerFlavor;
>>> +use target::{Target, TargetResult};
>>> +
>>> +pub fn target() -> TargetResult {
>>> @@ -85,6 +88,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>> +        target_os: "linux".to_string(),
>>> +        target_env: "musl".to_string(),
>>> +        target_vendor: "alpine".to_string(),
>>> ++        linker_flavor: LinkerFlavor::Gcc,
>>> +        options: base,
>>> +    })
>>> +}
>>> diff --git a/community/rust/fix-build.patch b/community/rust/fix-build.patch
>>> new file mode 100644
>>> index 0000000000..0a8482d731
>>> --- /dev/null
>>> +++ b/community/rust/fix-build.patch
>>> @@ -0,0 +1,92 @@
>>> +diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs
>>> +index 56cbb4cecf2a..dc9dac736278 100644
>>> +--- a/src/bootstrap/flags.rs
>>> ++++ b/src/bootstrap/flags.rs
>>> +@@ -242,11 +242,18 @@ Arguments:
>>> +         let cwd = t!(env::current_dir());
>>> +         let paths = matches.free[1..].iter().map(|p| cwd.join(p)).collect::<Vec<_>>();
>>> + 
>>> ++        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
>>> ++            if fs::metadata("config.toml").is_ok() {
>>> ++                Some(PathBuf::from("config.toml"))
>>> ++            } else {
>>> ++                None
>>> ++            }
>>> ++        });
>>> + 
>>> +         // All subcommands can have an optional "Available paths" section
>>> +         if matches.opt_present("verbose") {
>>> +             let flags = Flags::parse(&["build".to_string()]);
>>> +-            let mut config = Config::default();
>>> ++            let mut config = Config::parse(&flags.build, cfg_file.clone());
>>> +             config.build = flags.build.clone();
>>> +             let mut build = Build::new(flags, config);
>>> +             metadata::build(&mut build);
>>> +@@ -307,14 +314,6 @@ Arguments:
>>> +         };
>>> + 
>>> + 
>>> +-        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
>>> +-            if fs::metadata("config.toml").is_ok() {
>>> +-                Some(PathBuf::from("config.toml"))
>>> +-            } else {
>>> +-                None
>>> +-            }
>>> +-        });
>>> +-
>>> +         let mut stage = matches.opt_str("stage").map(|j| j.parse().unwrap());
>>> + 
>>> +         if matches.opt_present("incremental") {
>>> +diff --git a/src/bootstrap/bin/main.rs b/src/bootstrap/bin/main.rs
>>> +index 5ca5ce1648f2..5ef18b89841f 100644
>>> +--- a/src/bootstrap/bin/main.rs
>>> ++++ b/src/bootstrap/bin/main.rs
>>> +@@ -26,12 +26,6 @@ use bootstrap::{Flags, Config, Build};
>>> + fn main() {
>>> +     let args = env::args().skip(1).collect::<Vec<_>>();
>>> +     let flags = Flags::parse(&args);
>>> +-    let mut config = Config::parse(&flags.build, flags.config.clone());
>>> +-
>>> +-    // compat with `./configure` while we're still using that
>>> +-    if std::fs::metadata("config.mk").is_ok() {
>>> +-        config.update_with_config_mk();
>>> +-    }
>>> +-
>>> ++    let config = Config::parse(&flags.build, flags.config.clone());
>>> +     Build::new(flags, config).build();
>>> + }
>>> +diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
>>> +index fd8aa320fb3d..902cd0997a8e 100644
>>> +--- a/src/bootstrap/config.rs
>>> ++++ b/src/bootstrap/config.rs
>>> +@@ -15,7 +15,7 @@
>>> + 
>>> + use std::collections::HashMap;
>>> + use std::env;
>>> +-use std::fs::File;
>>> ++use std::fs::{self, File};
>>> + use std::io::prelude::*;
>>> + use std::path::PathBuf;
>>> + use std::process;
>>> +@@ -410,6 +410,12 @@ impl Config {
>>> +             set(&mut config.rust_dist_src, t.src_tarball);
>>> +         }
>>> + 
>>> ++
>>> ++        // compat with `./configure` while we're still using that
>>> ++        if fs::metadata("config.mk").is_ok() {
>>> ++            config.update_with_config_mk();
>>> ++        }
>>> ++
>>> +         return config
>>> +     }
>>> + 
>>> +@@ -418,7 +424,7 @@ impl Config {
>>> +     /// While we still have `./configure` this implements the ability to decode
>>> +     /// that configuration into this. This isn't exactly a full-blown makefile
>>> +     /// parser, but hey it gets the job done!
>>> +-    pub fn update_with_config_mk(&mut self) {
>>> ++    fn update_with_config_mk(&mut self) {
>>> +         let mut config = String::new();
>>> +         File::open("config.mk").unwrap().read_to_string(&mut config).unwrap();
>>> +         for line in config.lines() {
>>> diff --git a/community/rust/musl-fix-jemalloc.patch b/community/rust/musl-fix-jemalloc.patch
>>> deleted file mode 100644
>>> index 345398a301..0000000000
>>> --- a/community/rust/musl-fix-jemalloc.patch
>>> +++ /dev/null
>>> @@ -1,61 +0,0 @@
>>> -From 536011d929ecbd1170baf34e09580e567c971f95 Mon Sep 17 00:00:00 2001
>>> -From: Shiz <hi@shiz.me>
>>> -Date: Sat, 8 Apr 2017 20:36:00 +0200
>>> -Subject: [PATCH] Fix jemalloc support for musl
>>> -
>>> -Just like DragonFlyBSD, using the same symbols as the system allocator will
>>> -result in a segmentation fault at runtime due to allocator mismatches.
>>> -As such, prefix the jemalloc symbols instead.
>>> -
>>> -Upstream-Issue: https://github.com/rust-lang/rust/pull/41168
>>> ----
>>> - src/liballoc_jemalloc/build.rs |  2 +-
>>> - src/liballoc_jemalloc/lib.rs   | 10 +++++-----
>>> - 2 files changed, 6 insertions(+), 6 deletions(-)
>>> -
>>> -diff --git a/src/liballoc_jemalloc/build.rs b/src/liballoc_jemalloc/build.rs
>>> -index ae040a2..f3a0eeb 100644
>>> ---- a/src/liballoc_jemalloc/build.rs
>>> -+++ b/src/liballoc_jemalloc/build.rs
>>> -@@ -138,7 +138,7 @@ fn main() {
>>> -         // should be good to go!
>>> -         cmd.arg("--with-jemalloc-prefix=je_");
>>> -         cmd.arg("--disable-tls");
>>> --    } else if target.contains("dragonfly") {
>>> -+    } else if target.contains("dragonfly") || target.contains("musl") {
>>> -         cmd.arg("--with-jemalloc-prefix=je_");
>>> -     }
>>> - 
>>> -diff --git a/src/liballoc_jemalloc/lib.rs b/src/liballoc_jemalloc/lib.rs
>>> -index a7a67ef..83cc1ef 100644
>>> ---- a/src/liballoc_jemalloc/lib.rs
>>> -+++ b/src/liballoc_jemalloc/lib.rs
>>> -@@ -51,23 +51,23 @@ mod imp {
>>> -     // request it as unprefixing cause segfaults (mismatches in allocators).
>>> -     extern "C" {
>>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>>> --                       target_os = "dragonfly", target_os = "windows"),
>>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>>> -                    link_name = "je_mallocx")]
>>> -         fn mallocx(size: size_t, flags: c_int) -> *mut c_void;
>>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>>> --                       target_os = "dragonfly", target_os = "windows"),
>>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>>> -                    link_name = "je_rallocx")]
>>> -         fn rallocx(ptr: *mut c_void, size: size_t, flags: c_int) -> *mut c_void;
>>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>>> --                       target_os = "dragonfly", target_os = "windows"),
>>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>>> -                    link_name = "je_xallocx")]
>>> -         fn xallocx(ptr: *mut c_void, size: size_t, extra: size_t, flags: c_int) -> size_t;
>>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>>> --                       target_os = "dragonfly", target_os = "windows"),
>>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>>> -                    link_name = "je_sdallocx")]
>>> -         fn sdallocx(ptr: *mut c_void, size: size_t, flags: c_int);
>>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>>> --                       target_os = "dragonfly", target_os = "windows"),
>>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>>> -                    link_name = "je_nallocx")]
>>> -         fn nallocx(size: size_t, flags: c_int) -> size_t;
>>> -     }
>>> diff --git a/community/rust/musl-fix-linux_musl_base.patch b/community/rust/musl-fix-linux_musl_base.patch
>>> index 38194290cb..f2efb065e0 100644
>>> --- a/community/rust/musl-fix-linux_musl_base.patch
>>> +++ b/community/rust/musl-fix-linux_musl_base.patch
>>> @@ -12,13 +12,13 @@ See https://github.com/rust-lang/rust/pull/40113
>>> 
>>> -    // Make sure that the linker/gcc really don't pull in anything, including
>>> -    // default objects, libs, etc.
>>> --    base.pre_link_args.push("-nostdlib".to_string());
>>> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-nostdlib".to_string());
>>> -
>>>     // At least when this was tested, the linker would not add the
>>>     // `GNU_EH_FRAME` program header to executables generated, which is required
>>>     // when unwinding to locate the unwinding information. I'm not sure why this
>>>     // argument is *not* necessary for normal builds, but it can't hurt!
>>> -     base.pre_link_args.push("-Wl,--eh-frame-hdr".to_string());
>>> +     base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,--eh-frame-hdr".to_string());
>>> 
>>> -    // There's a whole bunch of circular dependencies when dealing with MUSL
>>> -    // unfortunately. To put this in perspective libc is statically linked to
>>> @@ -42,8 +42,8 @@ See https://github.com/rust-lang/rust/pull/40113
>>> -    // link everything as a group, not stripping anything out until everything
>>> -    // is processed. The linker will still perform a pass to strip out object
>>> -    // files but it won't do so until all objects/archives have been processed.
>>> --    base.pre_link_args.push("-Wl,-(".to_string());
>>> --    base.post_link_args.push("-Wl,-)".to_string());
>>> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,-(".to_string());
>>> +-    base.post_link_args.insert(LinkerFlavor::Gcc, vec!["-Wl,-)".to_string()]);
>>> -
>>> -    // When generating a statically linked executable there's generally some
>>> -    // small setup needed which is listed in these files. These are provided by
>>> diff --git a/community/rust/musl-fix-static-linking.patch b/community/rust/musl-fix-static-linking.patch
>>> index 85de05e542..93fe79d15f 100644
>>> --- a/community/rust/musl-fix-static-linking.patch
>>> +++ b/community/rust/musl-fix-static-linking.patch
>>> @@ -100,22 +100,20 @@ static linking is requested, instead of dynamically as before.
>>> 
>>>     // # Telling the linker what we're doing
>>> 
>>> -@@ -983,11 +983,14 @@ 
>>> -         cmd.link_whole_staticlib(&l.name.as_str(), &search_path);
>>> -     }
>>> - 
>>> --    cmd.hint_dynamic();
>>> -+    let fully_static = sess.fully_static();
>>> -+    if !fully_static {
>>> -+        cmd.hint_dynamic();
>>> -+    }
>>> - 
>>> -     for lib in others {
>>> +@@ -983,13 +983,13 @@
>>> +     let relevant_libs = sess.cstore.used_libraries().into_iter().filter(|l| {
>>> +         relevant_lib(sess, l)
>>> +     });
>>> +
>>> +     let search_path = archive_search_paths(sess);
>>> +     for lib in relevant_libs {
>>>         match lib.kind {
>>> -            NativeLibraryKind::NativeUnknown => cmd.link_dylib(&lib.name.as_str()),
>>> -+            NativeLibraryKind::NativeUnknown => if fully_static { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
>>> ++            NativeLibraryKind::NativeUnknown => if sess.fully_static() { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
>>>             NativeLibraryKind::NativeFramework => cmd.link_framework(&lib.name.as_str()),
>>> -             NativeLibraryKind::NativeStatic => bug!(),
>>> +             NativeLibraryKind::NativeStaticNobundle => cmd.link_staticlib(&lib.name.as_str()),
>>> +             NativeLibraryKind::NativeStatic => cmd.link_whole_staticlib(&lib.name.as_str(),
>>> +                                                                         &search_path)
>>>         }
>>> --- a/src/librustc_trans/back/linker.rs 
>>> +++ b/src/librustc_trans/back/linker.rs 
>>> @@ -127,16 +125,18 @@ static linking is requested, instead of dynamically as before.
>>>     fn optimize(&mut self);
>>>     fn debuginfo(&mut self);
>>>     fn no_default_libraries(&mut self);
>>> -@@ -93,6 +93,8 @@
>>> +@@ -93,8 +93,10 @@
>>>     fn no_whole_archives(&mut self);
>>>     fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType);
>>>     fn subsystem(&mut self, subsystem: &str);
>>> +     // Should have been finalize(self), but we don't support self-by-value on trait objects (yet?).
>>> +     fn finalize(&mut self) -> Command;
>>> +    fn start_group(&mut self);
>>> +    fn end_group(&mut self);
>>> }
>>> 
>>> - pub struct GnuLinker<'a> {
>>> -@@ -116,6 +117,9 @@ 
>>> + pub struct GccLinker<'a> {
>>> +@@ -116,6 +117,9 @@
>>>     fn output_filename(&mut self, path: &Path) { self.cmd.arg("-o").arg(path); }
>>>     fn add_object(&mut self, path: &Path) { self.cmd.arg(path); }
>>>     fn position_independent_executable(&mut self) { self.cmd.arg("-pie"); }
>>> @@ -198,3 +198,13 @@ static linking is requested, instead of dynamically as before.
>>>     }
>>> }
>>> 
>>> +--- a/src/librustc_trans/back/linker.rs 
>>> ++++ b/src/librustc_trans/back/linker.rs 
>>> +@@ -158,6 +158,7 @@ impl<'a> GccLinker<'a> {
>>> +     }
>>> + 
>>> +     fn hint_dynamic(&mut self) {
>>> ++        if self.sess.fully_static() { return }
>>> +         if !self.takes_hints() { return }
>>> +         if self.hinted_static {
>>> +             self.linker_arg("-Bdynamic");
>>> diff --git a/community/rust/musl-support-dynamic-linking.patch b/community/rust/musl-support-dynamic-linking.patch
>>> index 7c4e93681b..efbbd7f0b0 100644
>>> --- a/community/rust/musl-support-dynamic-linking.patch
>>> +++ b/community/rust/musl-support-dynamic-linking.patch
>>> @@ -303,10 +303,12 @@ index defbb44448..f10c7d5c83 100644
>>>     }
>>> 
>>>     {
>>> -@@ -718,8 +720,10 @@ fn link_natively(sess: &Session,
>>> -                   objects, out_filename, outputs, trans);
>>> +@@ -718,12 +720,14 @@ fn link_natively(sess: &Session,
>>> +         cmd = linker.finalize();
>>> +     }
>>> +     if let Some(args) = sess.target.target.options.late_link_args.get(&flavor) {
>>> +         cmd.args(args);
>>>     }
>>> -     cmd.args(&sess.target.target.options.late_link_args);
>>> -    for obj in &sess.target.target.options.post_link_objects {
>>> -        cmd.arg(root.join(obj));
>>> +    if sess.crt_static() {
>>> @@ -314,7 +316,9 @@ index defbb44448..f10c7d5c83 100644
>>> +            cmd.arg(root.join(obj));
>>> +        }
>>>     }
>>> -     cmd.args(&sess.target.target.options.post_link_args);
>>> +     if let Some(args) = sess.target.target.options.post_link_args.get(&flavor) {
>>> +         cmd.args(args);
>>> +     }
>>> 
>>> diff --git a/src/libstd/build.rs b/src/libstd/build.rs
>>> index 9504194393..dd2008c206 100644
>> 
> 



---
Unsubscribe:  alpine-aports+unsubscribe@lists.alpinelinux.org
Help:         alpine-aports+help@lists.alpinelinux.org
---
Сафин Марат <jeizsm@gmail.com>
Details
Message ID
<B4EAF8CB-9CA8-41D4-A8A8-FEAE511BD3DF@gmail.com>
In-Reply-To
<20171023140116.413ec154@ncopa-macbook.copa.dup.pw> (view parent)
Sender timestamp
1508761151
DKIM signature
missing
Download raw message
Patch: +147 -97
Use this patch instead. Thanks
---
 community/rust/APKBUILD                           | 21 +++---
 community/rust/alpine-target.patch                |  8 +-
 community/rust/fix-build.patch                    | 92 +++++++++++++++++++++++
 community/rust/musl-fix-jemalloc.patch            | 61 ---------------
 community/rust/musl-fix-linux_musl_base.patch     |  8 +-
 community/rust/musl-fix-static-linking.patch      | 42 +++++++----
 community/rust/musl-support-dynamic-linking.patch | 12 ++-
 7 files changed, 147 insertions(+), 97 deletions(-)
 create mode 100644 community/rust/fix-build.patch
 delete mode 100644 community/rust/musl-fix-jemalloc.patch

diff --git a/community/rust/APKBUILD b/community/rust/APKBUILD
index 48ce4e7ffa..62f9462f9c 100644
--- a/community/rust/APKBUILD
+++ b/community/rust/APKBUILD
@@ -1,11 +1,12 @@
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Contributor: Shiz <hi@shiz.me>
# Contributor: Jeizsm <jeizsm@gmail.com>
# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
pkgname=rust
pkgver=1.17.0
pkgver=1.18.0
_llvmver=3.9
_bootver=1.16.0
pkgrel=3
_bootver=1.17.0
pkgrel=1
pkgdesc="The Rust Programming Language (compiler)"
url="http://www.rust-lang.org"
arch="x86_64"
@@ -29,7 +30,6 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
	musl-support-dynamic-linking.patch
	musl-fix-static-linking.patch
	musl-fix-linux_musl_base.patch
	musl-fix-jemalloc.patch
	llvm-with-ffi.patch
	static-pie.patch
	need-rpath.patch
@@ -38,6 +38,7 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
	alpine-move-py-scripts-to-share.patch
	alpine-change-rpath-to-rustlib.patch
	alpine-target.patch
	fix-build.patch
	check-rustc
	"
builddir="$srcdir/rustc-$pkgver-src"
@@ -169,11 +170,10 @@ _mv() {
	mv $@
}

sha512sums="781799b29d83b4f0f433814bd818df034526db8e7f88c2df51d3b814eacafe8098d4bbe47ace951e1943325b3267b244007cf04f1f11083645b25aeacd40ebb6  rustc-1.17.0-src.tar.gz
b0a8883e4469b60edd150c84486ab950396d757220f97bd271529576614c6c3b49456098507503832c20619d4bd74246dbc99c78116634a68a6df994793e9a94  musl-support-dynamic-linking.patch
292c1cb4f751d830f5f1300d7ef94f573f698ac51e18243d7ff0d5a47bb1729bb2cbe8fb456e7a479213df5e5fbf49e360c9439d0f5ad7126cb72d161c91566a  musl-fix-static-linking.patch
f436fddf7ab70ca5f1424081f5b75450270b200b3d997231323863e11addf76e1d65831a7ca09e3a5b7904ce828766c1f70b08326a175890298f28e5bc8646ef  musl-fix-linux_musl_base.patch
c913d04ef419b2b6d8e453f72894070f263c9292abf97114a51884d475d03ce5b032053f1676ba9364800b4b35e394f707995058530ad5e4122c60f65ddd3db7  musl-fix-jemalloc.patch
sha512sums="eff0460b647dfb3490e28d4dec4f9781d31a942f22de75d9bd1ba31591597226b6862ec5132e8b4fcdbcf6e6ffa085ca5dda7ff8260cd82388fc13e8d3b4a2eb  rustc-1.18.0-src.tar.gz
b5db9ed04eac26c6fc62cde3f19d29837a5feea68e79165c23b5b5cade2e1d193f2399d27f7622b230996da9565f78825be154574f1cd59189ded8a03a766cfb  musl-support-dynamic-linking.patch
d4d39514eca638852307f470250fd12a21781e1e7944377744b7d50290d3a2ab3776fbdfccb7a9221f5da00ca694ac3a5b8c05f72c5e1a0c8711b684b16b1084  musl-fix-static-linking.patch
9ebfb10abb50d74ff08d257d85257ce70ac3ce834aa95a8901808497b14acf3ea898fb197de64d13554eb5feedabe9fd04fec2cc6a7bea9b1335684bfcdcd88b  musl-fix-linux_musl_base.patch
dc6432293bd060d5e3a73f25870867654fae61995dcd919e244a2dc686b6107556deed8c59ca6002182bfeff5ebc1ca2b89c4028ab0fbfb79e65defe47c9b4b0  llvm-with-ffi.patch
5aaf6715b27b8b786740a55b91216d47985fbef3ccb0ef7e6a81696a2823671f8306143f7ecf77e66af91ef1500072524b9b4c7569508922ad5268df6080fda1  static-pie.patch
ff633f2a46c683ad698d1c09c98c06ce9ee9b8d55fa5593cdd485b439ebca3273794d29b5ff32b887be8666f52913a23af6e133c782bd0c4e2c88e306dd3a494  need-rpath.patch
@@ -181,5 +181,6 @@ d352614e7c774e181decae210140e789de7fc090327ff371981ad28a11ce51c8c01b27c1101a24bb
b00997c65d1a451fafae8b547893c5cbf03f028d2d70f6971aa670f34c2d6fc82728c740ac4a9909fc1999925ff300e4525cfec745cb9c9521e564eb166872a2  alpine-allow-crt-static.patch
498f4649163974afc4f042c43cd0c15d36784031514201a2962061f288a9336c2bc9749f8d2308b8ce3656f8097b5fc5bef505f61e2a6ed422ef4153f5339d77  alpine-move-py-scripts-to-share.patch
8d6206f8c50856724cf7b4c1854ec82547f040358a1c7d44abeacc27a5c205a963b1fec51e58ec06c68d85bd2f68a9e6e27ebe457f39e8dd043de17758f5063f  alpine-change-rpath-to-rustlib.patch
aaf359dbfb8f379bef42647890e99ada4b5326c29f726edb16c51b23a5033b5e00363d2fb6d74a4f11dfbb241b21b22c578e2ec269ecd77a87cf20d3620b29a5  alpine-target.patch
e9935f88f959d37da9e696f2722569bc6da6ed17eddc8d496af4a2ee9a561d8e40bd7644089ee26114bb920e04ff05def18d70a6f2347545500d1a23ee96eefa  alpine-target.patch
5c1bcd78d2579e1aeacd4f20d849f75127111fb2f06124531af370c7afdcf9ae78d9e3952911197c02099cdedfeb2335699f98568123bdd83c7acc1ddbae7f54  fix-build.patch
79549055dea81379c890b495c82456ab497a9179ec6702c59e11d0748bc668f47fc3d6a69c27a0545bb87c01318631dffc69260bf2d4badc75f53cbf7fad7528  check-rustc"
diff --git a/community/rust/alpine-target.patch b/community/rust/alpine-target.patch
index e013a6bc2e..fc79b45b9a 100644
--- a/community/rust/alpine-target.patch
+++ b/community/rust/alpine-target.patch
@@ -8,7 +8,7 @@ and distribution-specific quirks instead of polluting the main musl target of

--- /dev/null
+++ b/src/librustc_back/target/i586_alpine_linux_musl.rs
@@ -0,0 +1,32 @@
@@ -0,0 +1,34 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
@@ -19,6 +19,7 @@ and distribution-specific quirks instead of polluting the main musl target of
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use LinkerFlavor;
+use target::{Target, TargetResult};
+
+pub fn target() -> TargetResult {
@@ -38,6 +39,7 @@ and distribution-specific quirks instead of polluting the main musl target of
+        target_os: "linux".to_string(),
+        target_env: "musl".to_string(),
+        target_vendor: "alpine".to_string(),
+        linker_flavor: LinkerFlavor::Gcc,
+        options: base,
+    })
+}
@@ -55,7 +57,7 @@ and distribution-specific quirks instead of polluting the main musl target of
 /// Everything `rustc` knows about how to compile for a specific target.
--- /dev/null
+++ b/src/librustc_back/target/x86_64_alpine_linux_musl.rs
@@ -0,0 +1,32 @@
@@ -0,0 +1,34 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
@@ -66,6 +68,7 @@ and distribution-specific quirks instead of polluting the main musl target of
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use LinkerFlavor;
+use target::{Target, TargetResult};
+
+pub fn target() -> TargetResult {
@@ -85,6 +88,7 @@ and distribution-specific quirks instead of polluting the main musl target of
+        target_os: "linux".to_string(),
+        target_env: "musl".to_string(),
+        target_vendor: "alpine".to_string(),
+        linker_flavor: LinkerFlavor::Gcc,
+        options: base,
+    })
+}
diff --git a/community/rust/fix-build.patch b/community/rust/fix-build.patch
new file mode 100644
index 0000000000..0a8482d731
--- /dev/null
+++ b/community/rust/fix-build.patch
@@ -0,0 +1,92 @@
diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs
index 56cbb4cecf2a..dc9dac736278 100644
--- a/src/bootstrap/flags.rs
+++ b/src/bootstrap/flags.rs
@@ -242,11 +242,18 @@ Arguments:
         let cwd = t!(env::current_dir());
         let paths = matches.free[1..].iter().map(|p| cwd.join(p)).collect::<Vec<_>>();
 
+        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
+            if fs::metadata("config.toml").is_ok() {
+                Some(PathBuf::from("config.toml"))
+            } else {
+                None
+            }
+        });
 
         // All subcommands can have an optional "Available paths" section
         if matches.opt_present("verbose") {
             let flags = Flags::parse(&["build".to_string()]);
-            let mut config = Config::default();
+            let mut config = Config::parse(&flags.build, cfg_file.clone());
             config.build = flags.build.clone();
             let mut build = Build::new(flags, config);
             metadata::build(&mut build);
@@ -307,14 +314,6 @@ Arguments:
         };
 
 
-        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
-            if fs::metadata("config.toml").is_ok() {
-                Some(PathBuf::from("config.toml"))
-            } else {
-                None
-            }
-        });
-
         let mut stage = matches.opt_str("stage").map(|j| j.parse().unwrap());
 
         if matches.opt_present("incremental") {
diff --git a/src/bootstrap/bin/main.rs b/src/bootstrap/bin/main.rs
index 5ca5ce1648f2..5ef18b89841f 100644
--- a/src/bootstrap/bin/main.rs
+++ b/src/bootstrap/bin/main.rs
@@ -26,12 +26,6 @@ use bootstrap::{Flags, Config, Build};
 fn main() {
     let args = env::args().skip(1).collect::<Vec<_>>();
     let flags = Flags::parse(&args);
-    let mut config = Config::parse(&flags.build, flags.config.clone());
-
-    // compat with `./configure` while we're still using that
-    if std::fs::metadata("config.mk").is_ok() {
-        config.update_with_config_mk();
-    }
-
+    let config = Config::parse(&flags.build, flags.config.clone());
     Build::new(flags, config).build();
 }
diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
index fd8aa320fb3d..902cd0997a8e 100644
--- a/src/bootstrap/config.rs
+++ b/src/bootstrap/config.rs
@@ -15,7 +15,7 @@
 
 use std::collections::HashMap;
 use std::env;
-use std::fs::File;
+use std::fs::{self, File};
 use std::io::prelude::*;
 use std::path::PathBuf;
 use std::process;
@@ -410,6 +410,12 @@ impl Config {
             set(&mut config.rust_dist_src, t.src_tarball);
         }
 
+
+        // compat with `./configure` while we're still using that
+        if fs::metadata("config.mk").is_ok() {
+            config.update_with_config_mk();
+        }
+
         return config
     }
 
@@ -418,7 +424,7 @@ impl Config {
     /// While we still have `./configure` this implements the ability to decode
     /// that configuration into this. This isn't exactly a full-blown makefile
     /// parser, but hey it gets the job done!
-    pub fn update_with_config_mk(&mut self) {
+    fn update_with_config_mk(&mut self) {
         let mut config = String::new();
         File::open("config.mk").unwrap().read_to_string(&mut config).unwrap();
         for line in config.lines() {
diff --git a/community/rust/musl-fix-jemalloc.patch b/community/rust/musl-fix-jemalloc.patch
deleted file mode 100644
index 345398a301..0000000000
--- a/community/rust/musl-fix-jemalloc.patch
@@ -1,61 +0,0 @@
From 536011d929ecbd1170baf34e09580e567c971f95 Mon Sep 17 00:00:00 2001
From: Shiz <hi@shiz.me>
Date: Sat, 8 Apr 2017 20:36:00 +0200
Subject: [PATCH] Fix jemalloc support for musl

Just like DragonFlyBSD, using the same symbols as the system allocator will
result in a segmentation fault at runtime due to allocator mismatches.
As such, prefix the jemalloc symbols instead.

Upstream-Issue: https://github.com/rust-lang/rust/pull/41168
---
 src/liballoc_jemalloc/build.rs |  2 +-
 src/liballoc_jemalloc/lib.rs   | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/liballoc_jemalloc/build.rs b/src/liballoc_jemalloc/build.rs
index ae040a2..f3a0eeb 100644
--- a/src/liballoc_jemalloc/build.rs
+++ b/src/liballoc_jemalloc/build.rs
@@ -138,7 +138,7 @@ fn main() {
         // should be good to go!
         cmd.arg("--with-jemalloc-prefix=je_");
         cmd.arg("--disable-tls");
-    } else if target.contains("dragonfly") {
+    } else if target.contains("dragonfly") || target.contains("musl") {
         cmd.arg("--with-jemalloc-prefix=je_");
     }
 
diff --git a/src/liballoc_jemalloc/lib.rs b/src/liballoc_jemalloc/lib.rs
index a7a67ef..83cc1ef 100644
--- a/src/liballoc_jemalloc/lib.rs
+++ b/src/liballoc_jemalloc/lib.rs
@@ -51,23 +51,23 @@ mod imp {
     // request it as unprefixing cause segfaults (mismatches in allocators).
     extern "C" {
         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
-                       target_os = "dragonfly", target_os = "windows"),
+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
                    link_name = "je_mallocx")]
         fn mallocx(size: size_t, flags: c_int) -> *mut c_void;
         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
-                       target_os = "dragonfly", target_os = "windows"),
+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
                    link_name = "je_rallocx")]
         fn rallocx(ptr: *mut c_void, size: size_t, flags: c_int) -> *mut c_void;
         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
-                       target_os = "dragonfly", target_os = "windows"),
+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
                    link_name = "je_xallocx")]
         fn xallocx(ptr: *mut c_void, size: size_t, extra: size_t, flags: c_int) -> size_t;
         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
-                       target_os = "dragonfly", target_os = "windows"),
+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
                    link_name = "je_sdallocx")]
         fn sdallocx(ptr: *mut c_void, size: size_t, flags: c_int);
         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
-                       target_os = "dragonfly", target_os = "windows"),
+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
                    link_name = "je_nallocx")]
         fn nallocx(size: size_t, flags: c_int) -> size_t;
     }
diff --git a/community/rust/musl-fix-linux_musl_base.patch b/community/rust/musl-fix-linux_musl_base.patch
index 38194290cb..f2efb065e0 100644
--- a/community/rust/musl-fix-linux_musl_base.patch
+++ b/community/rust/musl-fix-linux_musl_base.patch
@@ -12,13 +12,13 @@ See https://github.com/rust-lang/rust/pull/40113
 
-    // Make sure that the linker/gcc really don't pull in anything, including
-    // default objects, libs, etc.
-    base.pre_link_args.push("-nostdlib".to_string());
-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-nostdlib".to_string());
-
     // At least when this was tested, the linker would not add the
     // `GNU_EH_FRAME` program header to executables generated, which is required
     // when unwinding to locate the unwinding information. I'm not sure why this
     // argument is *not* necessary for normal builds, but it can't hurt!
     base.pre_link_args.push("-Wl,--eh-frame-hdr".to_string());
     base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,--eh-frame-hdr".to_string());
 
-    // There's a whole bunch of circular dependencies when dealing with MUSL
-    // unfortunately. To put this in perspective libc is statically linked to
@@ -42,8 +42,8 @@ See https://github.com/rust-lang/rust/pull/40113
-    // link everything as a group, not stripping anything out until everything
-    // is processed. The linker will still perform a pass to strip out object
-    // files but it won't do so until all objects/archives have been processed.
-    base.pre_link_args.push("-Wl,-(".to_string());
-    base.post_link_args.push("-Wl,-)".to_string());
-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,-(".to_string());
-    base.post_link_args.insert(LinkerFlavor::Gcc, vec!["-Wl,-)".to_string()]);
-
-    // When generating a statically linked executable there's generally some
-    // small setup needed which is listed in these files. These are provided by
diff --git a/community/rust/musl-fix-static-linking.patch b/community/rust/musl-fix-static-linking.patch
index 85de05e542..93fe79d15f 100644
--- a/community/rust/musl-fix-static-linking.patch
+++ b/community/rust/musl-fix-static-linking.patch
@@ -100,22 +100,20 @@ static linking is requested, instead of dynamically as before.
 
     // # Telling the linker what we're doing
 
@@ -983,11 +983,14 @@ 
         cmd.link_whole_staticlib(&l.name.as_str(), &search_path);
     }
 
-    cmd.hint_dynamic();
+    let fully_static = sess.fully_static();
+    if !fully_static {
+        cmd.hint_dynamic();
+    }
 
     for lib in others {
@@ -983,13 +983,13 @@
     let relevant_libs = sess.cstore.used_libraries().into_iter().filter(|l| {
         relevant_lib(sess, l)
     });

     let search_path = archive_search_paths(sess);
     for lib in relevant_libs {
         match lib.kind {
-            NativeLibraryKind::NativeUnknown => cmd.link_dylib(&lib.name.as_str()),
+            NativeLibraryKind::NativeUnknown => if fully_static { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
+            NativeLibraryKind::NativeUnknown => if sess.fully_static() { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
             NativeLibraryKind::NativeFramework => cmd.link_framework(&lib.name.as_str()),
             NativeLibraryKind::NativeStatic => bug!(),
             NativeLibraryKind::NativeStaticNobundle => cmd.link_staticlib(&lib.name.as_str()),
             NativeLibraryKind::NativeStatic => cmd.link_whole_staticlib(&lib.name.as_str(),
                                                                         &search_path)
         }
--- a/src/librustc_trans/back/linker.rs 
+++ b/src/librustc_trans/back/linker.rs 
@@ -127,16 +125,18 @@ static linking is requested, instead of dynamically as before.
     fn optimize(&mut self);
     fn debuginfo(&mut self);
     fn no_default_libraries(&mut self);
@@ -93,6 +93,8 @@
@@ -93,8 +93,10 @@
     fn no_whole_archives(&mut self);
     fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType);
     fn subsystem(&mut self, subsystem: &str);
     // Should have been finalize(self), but we don't support self-by-value on trait objects (yet?).
     fn finalize(&mut self) -> Command;
+    fn start_group(&mut self);
+    fn end_group(&mut self);
 }
 
 pub struct GnuLinker<'a> {
@@ -116,6 +117,9 @@ 
 pub struct GccLinker<'a> {
@@ -116,6 +117,9 @@
     fn output_filename(&mut self, path: &Path) { self.cmd.arg("-o").arg(path); }
     fn add_object(&mut self, path: &Path) { self.cmd.arg(path); }
     fn position_independent_executable(&mut self) { self.cmd.arg("-pie"); }
@@ -198,3 +198,13 @@ static linking is requested, instead of dynamically as before.
     }
 }
 
--- a/src/librustc_trans/back/linker.rs 
+++ b/src/librustc_trans/back/linker.rs 
@@ -158,6 +158,7 @@ impl<'a> GccLinker<'a> {
     }
 
     fn hint_dynamic(&mut self) {
+        if self.sess.fully_static() { return }
         if !self.takes_hints() { return }
         if self.hinted_static {
             self.linker_arg("-Bdynamic");
diff --git a/community/rust/musl-support-dynamic-linking.patch b/community/rust/musl-support-dynamic-linking.patch
index 7c4e93681b..efbbd7f0b0 100644
--- a/community/rust/musl-support-dynamic-linking.patch
+++ b/community/rust/musl-support-dynamic-linking.patch
@@ -303,10 +303,12 @@ index defbb44448..f10c7d5c83 100644
     }
 
     {
@@ -718,8 +720,10 @@ fn link_natively(sess: &Session,
                   objects, out_filename, outputs, trans);
@@ -718,12 +720,14 @@ fn link_natively(sess: &Session,
         cmd = linker.finalize();
     }
     if let Some(args) = sess.target.target.options.late_link_args.get(&flavor) {
         cmd.args(args);
     }
     cmd.args(&sess.target.target.options.late_link_args);
-    for obj in &sess.target.target.options.post_link_objects {
-        cmd.arg(root.join(obj));
+    if sess.crt_static() {
@@ -314,7 +316,9 @@ index defbb44448..f10c7d5c83 100644
+            cmd.arg(root.join(obj));
+        }
     }
     cmd.args(&sess.target.target.options.post_link_args);
     if let Some(args) = sess.target.target.options.post_link_args.get(&flavor) {
         cmd.args(args);
     }
 
diff --git a/src/libstd/build.rs b/src/libstd/build.rs
index 9504194393..dd2008c206 100644
-- 
2.14.2

> On 23 Oct 2017, at 15:01, Natanael Copa <ncopa@alpinelinux.org> wrote:
> 
> Jakub,
> 
> ok to push this? (with fixed commit message 1.8 -> 1.18)
> 
> -nc
> 
> On Wed, 18 Oct 2017 15:45:00 +0300
> Marat Safin <jeizsm@gmail.com> wrote:
> 
>> Signed-off-by: Marat Safin <jeizsm@gmail.com>
>> ---
>> community/rust/APKBUILD                           | 13 ++--
>> community/rust/alpine-target.patch                |  8 +-
>> community/rust/fix-build.patch                    | 92 +++++++++++++++++++++++
>> community/rust/musl-fix-jemalloc.patch            | 61 ---------------
>> community/rust/musl-fix-linux_musl_base.patch     |  8 +-
>> community/rust/musl-fix-static-linking.patch      | 42 +++++++----
>> community/rust/musl-support-dynamic-linking.patch | 12 ++-
>> 7 files changed, 142 insertions(+), 94 deletions(-)
>> create mode 100644 community/rust/fix-build.patch
>> delete mode 100644 community/rust/musl-fix-jemalloc.patch
>> 
>> diff --git a/community/rust/APKBUILD b/community/rust/APKBUILD
>> index 48ce4e7ffa..80f8ad0c4e 100644
>> --- a/community/rust/APKBUILD
>> +++ b/community/rust/APKBUILD
>> @@ -2,7 +2,7 @@
>> # Contributor: Shiz <hi@shiz.me>
>> # Maintainer: Jakub Jirutka <jakub@jirutka.cz>
>> pkgname=rust
>> -pkgver=1.17.0
>> +pkgver=1.18.0
>> _llvmver=3.9
>> _bootver=1.16.0
>> pkgrel=3
>> @@ -29,7 +29,6 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
>> 	musl-support-dynamic-linking.patch
>> 	musl-fix-static-linking.patch
>> 	musl-fix-linux_musl_base.patch
>> -	musl-fix-jemalloc.patch
>> 	llvm-with-ffi.patch
>> 	static-pie.patch
>> 	need-rpath.patch
>> @@ -38,6 +37,7 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
>> 	alpine-move-py-scripts-to-share.patch
>> 	alpine-change-rpath-to-rustlib.patch
>> 	alpine-target.patch
>> +	fix-build.patch
>> 	check-rustc
>> 	"
>> builddir="$srcdir/rustc-$pkgver-src"
>> @@ -169,11 +169,10 @@ _mv() {
>> 	mv $@
>> }
>> 
>> -sha512sums="781799b29d83b4f0f433814bd818df034526db8e7f88c2df51d3b814eacafe8098d4bbe47ace951e1943325b3267b244007cf04f1f11083645b25aeacd40ebb6  rustc-1.17.0-src.tar.gz
>> -b0a8883e4469b60edd150c84486ab950396d757220f97bd271529576614c6c3b49456098507503832c20619d4bd74246dbc99c78116634a68a6df994793e9a94  musl-support-dynamic-linking.patch
>> -292c1cb4f751d830f5f1300d7ef94f573f698ac51e18243d7ff0d5a47bb1729bb2cbe8fb456e7a479213df5e5fbf49e360c9439d0f5ad7126cb72d161c91566a  musl-fix-static-linking.patch
>> -f436fddf7ab70ca5f1424081f5b75450270b200b3d997231323863e11addf76e1d65831a7ca09e3a5b7904ce828766c1f70b08326a175890298f28e5bc8646ef  musl-fix-linux_musl_base.patch
>> -c913d04ef419b2b6d8e453f72894070f263c9292abf97114a51884d475d03ce5b032053f1676ba9364800b4b35e394f707995058530ad5e4122c60f65ddd3db7  musl-fix-jemalloc.patch
>> +sha512sums="eff0460b647dfb3490e28d4dec4f9781d31a942f22de75d9bd1ba31591597226b6862ec5132e8b4fcdbcf6e6ffa085ca5dda7ff8260cd82388fc13e8d3b4a2eb  rustc-1.18.0-src.tar.gz
>> +b5db9ed04eac26c6fc62cde3f19d29837a5feea68e79165c23b5b5cade2e1d193f2399d27f7622b230996da9565f78825be154574f1cd59189ded8a03a766cfb  musl-support-dynamic-linking.patch
>> +a6071aab49a7fcd38189a73b0c49ee0808e2063b4e6531643ef154b65bae699e8b42537a9c4400bf2662169d2350ad25f1166de03438efaf9578d9422dffdd8f  musl-fix-static-linking.patch
>> +9ebfb10abb50d74ff08d257d85257ce70ac3ce834aa95a8901808497b14acf3ea898fb197de64d13554eb5feedabe9fd04fec2cc6a7bea9b1335684bfcdcd88b  musl-fix-linux_musl_base.patch
>> dc6432293bd060d5e3a73f25870867654fae61995dcd919e244a2dc686b6107556deed8c59ca6002182bfeff5ebc1ca2b89c4028ab0fbfb79e65defe47c9b4b0  llvm-with-ffi.patch
>> 5aaf6715b27b8b786740a55b91216d47985fbef3ccb0ef7e6a81696a2823671f8306143f7ecf77e66af91ef1500072524b9b4c7569508922ad5268df6080fda1  static-pie.patch
>> ff633f2a46c683ad698d1c09c98c06ce9ee9b8d55fa5593cdd485b439ebca3273794d29b5ff32b887be8666f52913a23af6e133c782bd0c4e2c88e306dd3a494  need-rpath.patch
>> diff --git a/community/rust/alpine-target.patch b/community/rust/alpine-target.patch
>> index e013a6bc2e..fc79b45b9a 100644
>> --- a/community/rust/alpine-target.patch
>> +++ b/community/rust/alpine-target.patch
>> @@ -8,7 +8,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>> 
>> --- /dev/null
>> +++ b/src/librustc_back/target/i586_alpine_linux_musl.rs
>> -@@ -0,0 +1,32 @@
>> +@@ -0,0 +1,34 @@
>> +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
>> +// file at the top-level directory of this distribution and at
>> +// http://rust-lang.org/COPYRIGHT.
>> @@ -19,6 +19,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>> +// option. This file may not be copied, modified, or distributed
>> +// except according to those terms.
>> +
>> ++use LinkerFlavor;
>> +use target::{Target, TargetResult};
>> +
>> +pub fn target() -> TargetResult {
>> @@ -38,6 +39,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>> +        target_os: "linux".to_string(),
>> +        target_env: "musl".to_string(),
>> +        target_vendor: "alpine".to_string(),
>> ++        linker_flavor: LinkerFlavor::Gcc,
>> +        options: base,
>> +    })
>> +}
>> @@ -55,7 +57,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>  /// Everything `rustc` knows about how to compile for a specific target.
>> --- /dev/null
>> +++ b/src/librustc_back/target/x86_64_alpine_linux_musl.rs
>> -@@ -0,0 +1,32 @@
>> +@@ -0,0 +1,34 @@
>> +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
>> +// file at the top-level directory of this distribution and at
>> +// http://rust-lang.org/COPYRIGHT.
>> @@ -66,6 +68,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>> +// option. This file may not be copied, modified, or distributed
>> +// except according to those terms.
>> +
>> ++use LinkerFlavor;
>> +use target::{Target, TargetResult};
>> +
>> +pub fn target() -> TargetResult {
>> @@ -85,6 +88,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>> +        target_os: "linux".to_string(),
>> +        target_env: "musl".to_string(),
>> +        target_vendor: "alpine".to_string(),
>> ++        linker_flavor: LinkerFlavor::Gcc,
>> +        options: base,
>> +    })
>> +}
>> diff --git a/community/rust/fix-build.patch b/community/rust/fix-build.patch
>> new file mode 100644
>> index 0000000000..0a8482d731
>> --- /dev/null
>> +++ b/community/rust/fix-build.patch
>> @@ -0,0 +1,92 @@
>> +diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs
>> +index 56cbb4cecf2a..dc9dac736278 100644
>> +--- a/src/bootstrap/flags.rs
>> ++++ b/src/bootstrap/flags.rs
>> +@@ -242,11 +242,18 @@ Arguments:
>> +         let cwd = t!(env::current_dir());
>> +         let paths = matches.free[1..].iter().map(|p| cwd.join(p)).collect::<Vec<_>>();
>> + 
>> ++        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
>> ++            if fs::metadata("config.toml").is_ok() {
>> ++                Some(PathBuf::from("config.toml"))
>> ++            } else {
>> ++                None
>> ++            }
>> ++        });
>> + 
>> +         // All subcommands can have an optional "Available paths" section
>> +         if matches.opt_present("verbose") {
>> +             let flags = Flags::parse(&["build".to_string()]);
>> +-            let mut config = Config::default();
>> ++            let mut config = Config::parse(&flags.build, cfg_file.clone());
>> +             config.build = flags.build.clone();
>> +             let mut build = Build::new(flags, config);
>> +             metadata::build(&mut build);
>> +@@ -307,14 +314,6 @@ Arguments:
>> +         };
>> + 
>> + 
>> +-        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
>> +-            if fs::metadata("config.toml").is_ok() {
>> +-                Some(PathBuf::from("config.toml"))
>> +-            } else {
>> +-                None
>> +-            }
>> +-        });
>> +-
>> +         let mut stage = matches.opt_str("stage").map(|j| j.parse().unwrap());
>> + 
>> +         if matches.opt_present("incremental") {
>> +diff --git a/src/bootstrap/bin/main.rs b/src/bootstrap/bin/main.rs
>> +index 5ca5ce1648f2..5ef18b89841f 100644
>> +--- a/src/bootstrap/bin/main.rs
>> ++++ b/src/bootstrap/bin/main.rs
>> +@@ -26,12 +26,6 @@ use bootstrap::{Flags, Config, Build};
>> + fn main() {
>> +     let args = env::args().skip(1).collect::<Vec<_>>();
>> +     let flags = Flags::parse(&args);
>> +-    let mut config = Config::parse(&flags.build, flags.config.clone());
>> +-
>> +-    // compat with `./configure` while we're still using that
>> +-    if std::fs::metadata("config.mk").is_ok() {
>> +-        config.update_with_config_mk();
>> +-    }
>> +-
>> ++    let config = Config::parse(&flags.build, flags.config.clone());
>> +     Build::new(flags, config).build();
>> + }
>> +diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
>> +index fd8aa320fb3d..902cd0997a8e 100644
>> +--- a/src/bootstrap/config.rs
>> ++++ b/src/bootstrap/config.rs
>> +@@ -15,7 +15,7 @@
>> + 
>> + use std::collections::HashMap;
>> + use std::env;
>> +-use std::fs::File;
>> ++use std::fs::{self, File};
>> + use std::io::prelude::*;
>> + use std::path::PathBuf;
>> + use std::process;
>> +@@ -410,6 +410,12 @@ impl Config {
>> +             set(&mut config.rust_dist_src, t.src_tarball);
>> +         }
>> + 
>> ++
>> ++        // compat with `./configure` while we're still using that
>> ++        if fs::metadata("config.mk").is_ok() {
>> ++            config.update_with_config_mk();
>> ++        }
>> ++
>> +         return config
>> +     }
>> + 
>> +@@ -418,7 +424,7 @@ impl Config {
>> +     /// While we still have `./configure` this implements the ability to decode
>> +     /// that configuration into this. This isn't exactly a full-blown makefile
>> +     /// parser, but hey it gets the job done!
>> +-    pub fn update_with_config_mk(&mut self) {
>> ++    fn update_with_config_mk(&mut self) {
>> +         let mut config = String::new();
>> +         File::open("config.mk").unwrap().read_to_string(&mut config).unwrap();
>> +         for line in config.lines() {
>> diff --git a/community/rust/musl-fix-jemalloc.patch b/community/rust/musl-fix-jemalloc.patch
>> deleted file mode 100644
>> index 345398a301..0000000000
>> --- a/community/rust/musl-fix-jemalloc.patch
>> +++ /dev/null
>> @@ -1,61 +0,0 @@
>> -From 536011d929ecbd1170baf34e09580e567c971f95 Mon Sep 17 00:00:00 2001
>> -From: Shiz <hi@shiz.me>
>> -Date: Sat, 8 Apr 2017 20:36:00 +0200
>> -Subject: [PATCH] Fix jemalloc support for musl
>> -
>> -Just like DragonFlyBSD, using the same symbols as the system allocator will
>> -result in a segmentation fault at runtime due to allocator mismatches.
>> -As such, prefix the jemalloc symbols instead.
>> -
>> -Upstream-Issue: https://github.com/rust-lang/rust/pull/41168
>> ----
>> - src/liballoc_jemalloc/build.rs |  2 +-
>> - src/liballoc_jemalloc/lib.rs   | 10 +++++-----
>> - 2 files changed, 6 insertions(+), 6 deletions(-)
>> -
>> -diff --git a/src/liballoc_jemalloc/build.rs b/src/liballoc_jemalloc/build.rs
>> -index ae040a2..f3a0eeb 100644
>> ---- a/src/liballoc_jemalloc/build.rs
>> -+++ b/src/liballoc_jemalloc/build.rs
>> -@@ -138,7 +138,7 @@ fn main() {
>> -         // should be good to go!
>> -         cmd.arg("--with-jemalloc-prefix=je_");
>> -         cmd.arg("--disable-tls");
>> --    } else if target.contains("dragonfly") {
>> -+    } else if target.contains("dragonfly") || target.contains("musl") {
>> -         cmd.arg("--with-jemalloc-prefix=je_");
>> -     }
>> - 
>> -diff --git a/src/liballoc_jemalloc/lib.rs b/src/liballoc_jemalloc/lib.rs
>> -index a7a67ef..83cc1ef 100644
>> ---- a/src/liballoc_jemalloc/lib.rs
>> -+++ b/src/liballoc_jemalloc/lib.rs
>> -@@ -51,23 +51,23 @@ mod imp {
>> -     // request it as unprefixing cause segfaults (mismatches in allocators).
>> -     extern "C" {
>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>> --                       target_os = "dragonfly", target_os = "windows"),
>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>> -                    link_name = "je_mallocx")]
>> -         fn mallocx(size: size_t, flags: c_int) -> *mut c_void;
>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>> --                       target_os = "dragonfly", target_os = "windows"),
>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>> -                    link_name = "je_rallocx")]
>> -         fn rallocx(ptr: *mut c_void, size: size_t, flags: c_int) -> *mut c_void;
>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>> --                       target_os = "dragonfly", target_os = "windows"),
>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>> -                    link_name = "je_xallocx")]
>> -         fn xallocx(ptr: *mut c_void, size: size_t, extra: size_t, flags: c_int) -> size_t;
>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>> --                       target_os = "dragonfly", target_os = "windows"),
>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>> -                    link_name = "je_sdallocx")]
>> -         fn sdallocx(ptr: *mut c_void, size: size_t, flags: c_int);
>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>> --                       target_os = "dragonfly", target_os = "windows"),
>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>> -                    link_name = "je_nallocx")]
>> -         fn nallocx(size: size_t, flags: c_int) -> size_t;
>> -     }
>> diff --git a/community/rust/musl-fix-linux_musl_base.patch b/community/rust/musl-fix-linux_musl_base.patch
>> index 38194290cb..f2efb065e0 100644
>> --- a/community/rust/musl-fix-linux_musl_base.patch
>> +++ b/community/rust/musl-fix-linux_musl_base.patch
>> @@ -12,13 +12,13 @@ See https://github.com/rust-lang/rust/pull/40113
>> 
>> -    // Make sure that the linker/gcc really don't pull in anything, including
>> -    // default objects, libs, etc.
>> --    base.pre_link_args.push("-nostdlib".to_string());
>> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-nostdlib".to_string());
>> -
>>      // At least when this was tested, the linker would not add the
>>      // `GNU_EH_FRAME` program header to executables generated, which is required
>>      // when unwinding to locate the unwinding information. I'm not sure why this
>>      // argument is *not* necessary for normal builds, but it can't hurt!
>> -     base.pre_link_args.push("-Wl,--eh-frame-hdr".to_string());
>> +     base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,--eh-frame-hdr".to_string());
>> 
>> -    // There's a whole bunch of circular dependencies when dealing with MUSL
>> -    // unfortunately. To put this in perspective libc is statically linked to
>> @@ -42,8 +42,8 @@ See https://github.com/rust-lang/rust/pull/40113
>> -    // link everything as a group, not stripping anything out until everything
>> -    // is processed. The linker will still perform a pass to strip out object
>> -    // files but it won't do so until all objects/archives have been processed.
>> --    base.pre_link_args.push("-Wl,-(".to_string());
>> --    base.post_link_args.push("-Wl,-)".to_string());
>> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,-(".to_string());
>> +-    base.post_link_args.insert(LinkerFlavor::Gcc, vec!["-Wl,-)".to_string()]);
>> -
>> -    // When generating a statically linked executable there's generally some
>> -    // small setup needed which is listed in these files. These are provided by
>> diff --git a/community/rust/musl-fix-static-linking.patch b/community/rust/musl-fix-static-linking.patch
>> index 85de05e542..93fe79d15f 100644
>> --- a/community/rust/musl-fix-static-linking.patch
>> +++ b/community/rust/musl-fix-static-linking.patch
>> @@ -100,22 +100,20 @@ static linking is requested, instead of dynamically as before.
>> 
>>      // # Telling the linker what we're doing
>> 
>> -@@ -983,11 +983,14 @@ 
>> -         cmd.link_whole_staticlib(&l.name.as_str(), &search_path);
>> -     }
>> - 
>> --    cmd.hint_dynamic();
>> -+    let fully_static = sess.fully_static();
>> -+    if !fully_static {
>> -+        cmd.hint_dynamic();
>> -+    }
>> - 
>> -     for lib in others {
>> +@@ -983,13 +983,13 @@
>> +     let relevant_libs = sess.cstore.used_libraries().into_iter().filter(|l| {
>> +         relevant_lib(sess, l)
>> +     });
>> +
>> +     let search_path = archive_search_paths(sess);
>> +     for lib in relevant_libs {
>>          match lib.kind {
>> -            NativeLibraryKind::NativeUnknown => cmd.link_dylib(&lib.name.as_str()),
>> -+            NativeLibraryKind::NativeUnknown => if fully_static { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
>> ++            NativeLibraryKind::NativeUnknown => if sess.fully_static() { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
>>              NativeLibraryKind::NativeFramework => cmd.link_framework(&lib.name.as_str()),
>> -             NativeLibraryKind::NativeStatic => bug!(),
>> +             NativeLibraryKind::NativeStaticNobundle => cmd.link_staticlib(&lib.name.as_str()),
>> +             NativeLibraryKind::NativeStatic => cmd.link_whole_staticlib(&lib.name.as_str(),
>> +                                                                         &search_path)
>>          }
>> --- a/src/librustc_trans/back/linker.rs 
>> +++ b/src/librustc_trans/back/linker.rs 
>> @@ -127,16 +125,18 @@ static linking is requested, instead of dynamically as before.
>>      fn optimize(&mut self);
>>      fn debuginfo(&mut self);
>>      fn no_default_libraries(&mut self);
>> -@@ -93,6 +93,8 @@
>> +@@ -93,8 +93,10 @@
>>      fn no_whole_archives(&mut self);
>>      fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType);
>>      fn subsystem(&mut self, subsystem: &str);
>> +     // Should have been finalize(self), but we don't support self-by-value on trait objects (yet?).
>> +     fn finalize(&mut self) -> Command;
>> +    fn start_group(&mut self);
>> +    fn end_group(&mut self);
>>  }
>> 
>> - pub struct GnuLinker<'a> {
>> -@@ -116,6 +117,9 @@ 
>> + pub struct GccLinker<'a> {
>> +@@ -116,6 +117,9 @@
>>      fn output_filename(&mut self, path: &Path) { self.cmd.arg("-o").arg(path); }
>>      fn add_object(&mut self, path: &Path) { self.cmd.arg(path); }
>>      fn position_independent_executable(&mut self) { self.cmd.arg("-pie"); }
>> @@ -198,3 +198,13 @@ static linking is requested, instead of dynamically as before.
>>      }
>>  }
>> 
>> +--- a/src/librustc_trans/back/linker.rs 
>> ++++ b/src/librustc_trans/back/linker.rs 
>> +@@ -158,6 +158,7 @@ impl<'a> GccLinker<'a> {
>> +     }
>> + 
>> +     fn hint_dynamic(&mut self) {
>> ++        if self.sess.fully_static() { return }
>> +         if !self.takes_hints() { return }
>> +         if self.hinted_static {
>> +             self.linker_arg("-Bdynamic");
>> diff --git a/community/rust/musl-support-dynamic-linking.patch b/community/rust/musl-support-dynamic-linking.patch
>> index 7c4e93681b..efbbd7f0b0 100644
>> --- a/community/rust/musl-support-dynamic-linking.patch
>> +++ b/community/rust/musl-support-dynamic-linking.patch
>> @@ -303,10 +303,12 @@ index defbb44448..f10c7d5c83 100644
>>      }
>> 
>>      {
>> -@@ -718,8 +720,10 @@ fn link_natively(sess: &Session,
>> -                   objects, out_filename, outputs, trans);
>> +@@ -718,12 +720,14 @@ fn link_natively(sess: &Session,
>> +         cmd = linker.finalize();
>> +     }
>> +     if let Some(args) = sess.target.target.options.late_link_args.get(&flavor) {
>> +         cmd.args(args);
>>      }
>> -     cmd.args(&sess.target.target.options.late_link_args);
>> -    for obj in &sess.target.target.options.post_link_objects {
>> -        cmd.arg(root.join(obj));
>> +    if sess.crt_static() {
>> @@ -314,7 +316,9 @@ index defbb44448..f10c7d5c83 100644
>> +            cmd.arg(root.join(obj));
>> +        }
>>      }
>> -     cmd.args(&sess.target.target.options.post_link_args);
>> +     if let Some(args) = sess.target.target.options.post_link_args.get(&flavor) {
>> +         cmd.args(args);
>> +     }
>> 
>> diff --git a/src/libstd/build.rs b/src/libstd/build.rs
>> index 9504194393..dd2008c206 100644
> 



---
Unsubscribe:  alpine-aports+unsubscribe@lists.alpinelinux.org
Help:         alpine-aports+help@lists.alpinelinux.org
---
Сафин Марат <jeizsm@gmail.com>
Details
Message ID
<CC545119-A707-40C8-AC5C-FCE7851726BB@gmail.com>
In-Reply-To
<FAEBA198-090D-4F57-93E6-9591F709E3DA@jirutka.cz> (view parent)
Sender timestamp
1508764995
DKIM signature
missing
Download raw message
I'm sorry I didn't know about github mirror. I will open pull request there. Thanks
> On 23 Oct 2017, at 16:10, Jakub Jirutka <jakub@jirutka.cz> wrote:
> 
> Hi,
> 
> the patch is malformed, maybe due to formatting applied by email client, but raw source didn’t help either.
> 
> I very appreciate your contribution, but please have some respect to our time and don’t send patches via email. This way I have to manually extract it to a patch file, apply it, run build to verify that it really works. If I request some changes, then you would send me next email with new set of patches which I have to again manually extract, apply… and also compare with previous patches, so I can review only changes and not complete patches. This is really insane! We have much better methods in the 21st century.
> 
> Please open a pull request in https://github.com/alpinelinux/aports/pulls, there it’s automatically tested on CI, we can directly discuss changes and you can just keep adding commits in normal git way, while I can easily see changes you made. You have to just “Fork” https://github.com/alpinelinux/aports/ (as upstream) to get your own remote clone (as origin), clone it locally, create a new branch, commit changes, push it to your origin and open a PR against alpinelinux/aports@master. I we request some changes, you just commit it to your existing branch and push to origin. All of it can be done even using CLI (except creating account on GH if you don’t have one yet).
> 
> If you really don’t wanna use GitHub, please at least send me the patch in mbox format in email attachment.
> 
> Thanks,
> Jakub
> 
>> On 23. Oct 2017, at 14:19, Сафин Марат <jeizsm@gmail.com> wrote:
>> 
>> Use this patch instead. Thanks
>> ---
>> community/rust/APKBUILD                           | 21 +++---
>> community/rust/alpine-target.patch                |  8 +-
>> community/rust/fix-build.patch                    | 92 +++++++++++++++++++++++
>> community/rust/musl-fix-jemalloc.patch            | 61 ---------------
>> community/rust/musl-fix-linux_musl_base.patch     |  8 +-
>> community/rust/musl-fix-static-linking.patch      | 42 +++++++----
>> community/rust/musl-support-dynamic-linking.patch | 12 ++-
>> 7 files changed, 147 insertions(+), 97 deletions(-)
>> create mode 100644 community/rust/fix-build.patch
>> delete mode 100644 community/rust/musl-fix-jemalloc.patch
>> 
>> diff --git a/community/rust/APKBUILD b/community/rust/APKBUILD
>> index 48ce4e7ffa..62f9462f9c 100644
>> --- a/community/rust/APKBUILD
>> +++ b/community/rust/APKBUILD
>> @@ -1,11 +1,12 @@
>> # Contributor: Jakub Jirutka <jakub@jirutka.cz>
>> # Contributor: Shiz <hi@shiz.me>
>> +# Contributor: Jeizsm <jeizsm@gmail.com>
>> # Maintainer: Jakub Jirutka <jakub@jirutka.cz>
>> pkgname=rust
>> -pkgver=1.17.0
>> +pkgver=1.18.0
>> _llvmver=3.9
>> -_bootver=1.16.0
>> -pkgrel=3
>> +_bootver=1.17.0
>> +pkgrel=1
>> pkgdesc="The Rust Programming Language (compiler)"
>> url="http://www.rust-lang.org"
>> arch="x86_64"
>> @@ -29,7 +30,6 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
>> 	musl-support-dynamic-linking.patch
>> 	musl-fix-static-linking.patch
>> 	musl-fix-linux_musl_base.patch
>> -	musl-fix-jemalloc.patch
>> 	llvm-with-ffi.patch
>> 	static-pie.patch
>> 	need-rpath.patch
>> @@ -38,6 +38,7 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
>> 	alpine-move-py-scripts-to-share.patch
>> 	alpine-change-rpath-to-rustlib.patch
>> 	alpine-target.patch
>> +	fix-build.patch
>> 	check-rustc
>> 	"
>> builddir="$srcdir/rustc-$pkgver-src"
>> @@ -169,11 +170,10 @@ _mv() {
>> 	mv $@
>> }
>> 
>> -sha512sums="781799b29d83b4f0f433814bd818df034526db8e7f88c2df51d3b814eacafe8098d4bbe47ace951e1943325b3267b244007cf04f1f11083645b25aeacd40ebb6  rustc-1.17.0-src.tar.gz
>> -b0a8883e4469b60edd150c84486ab950396d757220f97bd271529576614c6c3b49456098507503832c20619d4bd74246dbc99c78116634a68a6df994793e9a94  musl-support-dynamic-linking.patch
>> -292c1cb4f751d830f5f1300d7ef94f573f698ac51e18243d7ff0d5a47bb1729bb2cbe8fb456e7a479213df5e5fbf49e360c9439d0f5ad7126cb72d161c91566a  musl-fix-static-linking.patch
>> -f436fddf7ab70ca5f1424081f5b75450270b200b3d997231323863e11addf76e1d65831a7ca09e3a5b7904ce828766c1f70b08326a175890298f28e5bc8646ef  musl-fix-linux_musl_base.patch
>> -c913d04ef419b2b6d8e453f72894070f263c9292abf97114a51884d475d03ce5b032053f1676ba9364800b4b35e394f707995058530ad5e4122c60f65ddd3db7  musl-fix-jemalloc.patch
>> +sha512sums="eff0460b647dfb3490e28d4dec4f9781d31a942f22de75d9bd1ba31591597226b6862ec5132e8b4fcdbcf6e6ffa085ca5dda7ff8260cd82388fc13e8d3b4a2eb  rustc-1.18.0-src.tar.gz
>> +b5db9ed04eac26c6fc62cde3f19d29837a5feea68e79165c23b5b5cade2e1d193f2399d27f7622b230996da9565f78825be154574f1cd59189ded8a03a766cfb  musl-support-dynamic-linking.patch
>> +d4d39514eca638852307f470250fd12a21781e1e7944377744b7d50290d3a2ab3776fbdfccb7a9221f5da00ca694ac3a5b8c05f72c5e1a0c8711b684b16b1084  musl-fix-static-linking.patch
>> +9ebfb10abb50d74ff08d257d85257ce70ac3ce834aa95a8901808497b14acf3ea898fb197de64d13554eb5feedabe9fd04fec2cc6a7bea9b1335684bfcdcd88b  musl-fix-linux_musl_base.patch
>> dc6432293bd060d5e3a73f25870867654fae61995dcd919e244a2dc686b6107556deed8c59ca6002182bfeff5ebc1ca2b89c4028ab0fbfb79e65defe47c9b4b0  llvm-with-ffi.patch
>> 5aaf6715b27b8b786740a55b91216d47985fbef3ccb0ef7e6a81696a2823671f8306143f7ecf77e66af91ef1500072524b9b4c7569508922ad5268df6080fda1  static-pie.patch
>> ff633f2a46c683ad698d1c09c98c06ce9ee9b8d55fa5593cdd485b439ebca3273794d29b5ff32b887be8666f52913a23af6e133c782bd0c4e2c88e306dd3a494  need-rpath.patch
>> @@ -181,5 +181,6 @@ d352614e7c774e181decae210140e789de7fc090327ff371981ad28a11ce51c8c01b27c1101a24bb
>> b00997c65d1a451fafae8b547893c5cbf03f028d2d70f6971aa670f34c2d6fc82728c740ac4a9909fc1999925ff300e4525cfec745cb9c9521e564eb166872a2  alpine-allow-crt-static.patch
>> 498f4649163974afc4f042c43cd0c15d36784031514201a2962061f288a9336c2bc9749f8d2308b8ce3656f8097b5fc5bef505f61e2a6ed422ef4153f5339d77  alpine-move-py-scripts-to-share.patch
>> 8d6206f8c50856724cf7b4c1854ec82547f040358a1c7d44abeacc27a5c205a963b1fec51e58ec06c68d85bd2f68a9e6e27ebe457f39e8dd043de17758f5063f  alpine-change-rpath-to-rustlib.patch
>> -aaf359dbfb8f379bef42647890e99ada4b5326c29f726edb16c51b23a5033b5e00363d2fb6d74a4f11dfbb241b21b22c578e2ec269ecd77a87cf20d3620b29a5  alpine-target.patch
>> +e9935f88f959d37da9e696f2722569bc6da6ed17eddc8d496af4a2ee9a561d8e40bd7644089ee26114bb920e04ff05def18d70a6f2347545500d1a23ee96eefa  alpine-target.patch
>> +5c1bcd78d2579e1aeacd4f20d849f75127111fb2f06124531af370c7afdcf9ae78d9e3952911197c02099cdedfeb2335699f98568123bdd83c7acc1ddbae7f54  fix-build.patch
>> 79549055dea81379c890b495c82456ab497a9179ec6702c59e11d0748bc668f47fc3d6a69c27a0545bb87c01318631dffc69260bf2d4badc75f53cbf7fad7528  check-rustc"
>> diff --git a/community/rust/alpine-target.patch b/community/rust/alpine-target.patch
>> index e013a6bc2e..fc79b45b9a 100644
>> --- a/community/rust/alpine-target.patch
>> +++ b/community/rust/alpine-target.patch
>> @@ -8,7 +8,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>> 
>> --- /dev/null
>> +++ b/src/librustc_back/target/i586_alpine_linux_musl.rs
>> -@@ -0,0 +1,32 @@
>> +@@ -0,0 +1,34 @@
>> +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
>> +// file at the top-level directory of this distribution and at
>> +// http://rust-lang.org/COPYRIGHT.
>> @@ -19,6 +19,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>> +// option. This file may not be copied, modified, or distributed
>> +// except according to those terms.
>> +
>> ++use LinkerFlavor;
>> +use target::{Target, TargetResult};
>> +
>> +pub fn target() -> TargetResult {
>> @@ -38,6 +39,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>> +        target_os: "linux".to_string(),
>> +        target_env: "musl".to_string(),
>> +        target_vendor: "alpine".to_string(),
>> ++        linker_flavor: LinkerFlavor::Gcc,
>> +        options: base,
>> +    })
>> +}
>> @@ -55,7 +57,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>> /// Everything `rustc` knows about how to compile for a specific target.
>> --- /dev/null
>> +++ b/src/librustc_back/target/x86_64_alpine_linux_musl.rs
>> -@@ -0,0 +1,32 @@
>> +@@ -0,0 +1,34 @@
>> +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
>> +// file at the top-level directory of this distribution and at
>> +// http://rust-lang.org/COPYRIGHT.
>> @@ -66,6 +68,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>> +// option. This file may not be copied, modified, or distributed
>> +// except according to those terms.
>> +
>> ++use LinkerFlavor;
>> +use target::{Target, TargetResult};
>> +
>> +pub fn target() -> TargetResult {
>> @@ -85,6 +88,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>> +        target_os: "linux".to_string(),
>> +        target_env: "musl".to_string(),
>> +        target_vendor: "alpine".to_string(),
>> ++        linker_flavor: LinkerFlavor::Gcc,
>> +        options: base,
>> +    })
>> +}
>> diff --git a/community/rust/fix-build.patch b/community/rust/fix-build.patch
>> new file mode 100644
>> index 0000000000..0a8482d731
>> --- /dev/null
>> +++ b/community/rust/fix-build.patch
>> @@ -0,0 +1,92 @@
>> +diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs
>> +index 56cbb4cecf2a..dc9dac736278 100644
>> +--- a/src/bootstrap/flags.rs
>> ++++ b/src/bootstrap/flags.rs
>> +@@ -242,11 +242,18 @@ Arguments:
>> +         let cwd = t!(env::current_dir());
>> +         let paths = matches.free[1..].iter().map(|p| cwd.join(p)).collect::<Vec<_>>();
>> + 
>> ++        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
>> ++            if fs::metadata("config.toml").is_ok() {
>> ++                Some(PathBuf::from("config.toml"))
>> ++            } else {
>> ++                None
>> ++            }
>> ++        });
>> + 
>> +         // All subcommands can have an optional "Available paths" section
>> +         if matches.opt_present("verbose") {
>> +             let flags = Flags::parse(&["build".to_string()]);
>> +-            let mut config = Config::default();
>> ++            let mut config = Config::parse(&flags.build, cfg_file.clone());
>> +             config.build = flags.build.clone();
>> +             let mut build = Build::new(flags, config);
>> +             metadata::build(&mut build);
>> +@@ -307,14 +314,6 @@ Arguments:
>> +         };
>> + 
>> + 
>> +-        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
>> +-            if fs::metadata("config.toml").is_ok() {
>> +-                Some(PathBuf::from("config.toml"))
>> +-            } else {
>> +-                None
>> +-            }
>> +-        });
>> +-
>> +         let mut stage = matches.opt_str("stage").map(|j| j.parse().unwrap());
>> + 
>> +         if matches.opt_present("incremental") {
>> +diff --git a/src/bootstrap/bin/main.rs b/src/bootstrap/bin/main.rs
>> +index 5ca5ce1648f2..5ef18b89841f 100644
>> +--- a/src/bootstrap/bin/main.rs
>> ++++ b/src/bootstrap/bin/main.rs
>> +@@ -26,12 +26,6 @@ use bootstrap::{Flags, Config, Build};
>> + fn main() {
>> +     let args = env::args().skip(1).collect::<Vec<_>>();
>> +     let flags = Flags::parse(&args);
>> +-    let mut config = Config::parse(&flags.build, flags.config.clone());
>> +-
>> +-    // compat with `./configure` while we're still using that
>> +-    if std::fs::metadata("config.mk").is_ok() {
>> +-        config.update_with_config_mk();
>> +-    }
>> +-
>> ++    let config = Config::parse(&flags.build, flags.config.clone());
>> +     Build::new(flags, config).build();
>> + }
>> +diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
>> +index fd8aa320fb3d..902cd0997a8e 100644
>> +--- a/src/bootstrap/config.rs
>> ++++ b/src/bootstrap/config.rs
>> +@@ -15,7 +15,7 @@
>> + 
>> + use std::collections::HashMap;
>> + use std::env;
>> +-use std::fs::File;
>> ++use std::fs::{self, File};
>> + use std::io::prelude::*;
>> + use std::path::PathBuf;
>> + use std::process;
>> +@@ -410,6 +410,12 @@ impl Config {
>> +             set(&mut config.rust_dist_src, t.src_tarball);
>> +         }
>> + 
>> ++
>> ++        // compat with `./configure` while we're still using that
>> ++        if fs::metadata("config.mk").is_ok() {
>> ++            config.update_with_config_mk();
>> ++        }
>> ++
>> +         return config
>> +     }
>> + 
>> +@@ -418,7 +424,7 @@ impl Config {
>> +     /// While we still have `./configure` this implements the ability to decode
>> +     /// that configuration into this. This isn't exactly a full-blown makefile
>> +     /// parser, but hey it gets the job done!
>> +-    pub fn update_with_config_mk(&mut self) {
>> ++    fn update_with_config_mk(&mut self) {
>> +         let mut config = String::new();
>> +         File::open("config.mk").unwrap().read_to_string(&mut config).unwrap();
>> +         for line in config.lines() {
>> diff --git a/community/rust/musl-fix-jemalloc.patch b/community/rust/musl-fix-jemalloc.patch
>> deleted file mode 100644
>> index 345398a301..0000000000
>> --- a/community/rust/musl-fix-jemalloc.patch
>> +++ /dev/null
>> @@ -1,61 +0,0 @@
>> -From 536011d929ecbd1170baf34e09580e567c971f95 Mon Sep 17 00:00:00 2001
>> -From: Shiz <hi@shiz.me>
>> -Date: Sat, 8 Apr 2017 20:36:00 +0200
>> -Subject: [PATCH] Fix jemalloc support for musl
>> -
>> -Just like DragonFlyBSD, using the same symbols as the system allocator will
>> -result in a segmentation fault at runtime due to allocator mismatches.
>> -As such, prefix the jemalloc symbols instead.
>> -
>> -Upstream-Issue: https://github.com/rust-lang/rust/pull/41168
>> ----
>> - src/liballoc_jemalloc/build.rs |  2 +-
>> - src/liballoc_jemalloc/lib.rs   | 10 +++++-----
>> - 2 files changed, 6 insertions(+), 6 deletions(-)
>> -
>> -diff --git a/src/liballoc_jemalloc/build.rs b/src/liballoc_jemalloc/build.rs
>> -index ae040a2..f3a0eeb 100644
>> ---- a/src/liballoc_jemalloc/build.rs
>> -+++ b/src/liballoc_jemalloc/build.rs
>> -@@ -138,7 +138,7 @@ fn main() {
>> -         // should be good to go!
>> -         cmd.arg("--with-jemalloc-prefix=je_");
>> -         cmd.arg("--disable-tls");
>> --    } else if target.contains("dragonfly") {
>> -+    } else if target.contains("dragonfly") || target.contains("musl") {
>> -         cmd.arg("--with-jemalloc-prefix=je_");
>> -     }
>> - 
>> -diff --git a/src/liballoc_jemalloc/lib.rs b/src/liballoc_jemalloc/lib.rs
>> -index a7a67ef..83cc1ef 100644
>> ---- a/src/liballoc_jemalloc/lib.rs
>> -+++ b/src/liballoc_jemalloc/lib.rs
>> -@@ -51,23 +51,23 @@ mod imp {
>> -     // request it as unprefixing cause segfaults (mismatches in allocators).
>> -     extern "C" {
>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>> --                       target_os = "dragonfly", target_os = "windows"),
>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>> -                    link_name = "je_mallocx")]
>> -         fn mallocx(size: size_t, flags: c_int) -> *mut c_void;
>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>> --                       target_os = "dragonfly", target_os = "windows"),
>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>> -                    link_name = "je_rallocx")]
>> -         fn rallocx(ptr: *mut c_void, size: size_t, flags: c_int) -> *mut c_void;
>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>> --                       target_os = "dragonfly", target_os = "windows"),
>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>> -                    link_name = "je_xallocx")]
>> -         fn xallocx(ptr: *mut c_void, size: size_t, extra: size_t, flags: c_int) -> size_t;
>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>> --                       target_os = "dragonfly", target_os = "windows"),
>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>> -                    link_name = "je_sdallocx")]
>> -         fn sdallocx(ptr: *mut c_void, size: size_t, flags: c_int);
>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>> --                       target_os = "dragonfly", target_os = "windows"),
>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>> -                    link_name = "je_nallocx")]
>> -         fn nallocx(size: size_t, flags: c_int) -> size_t;
>> -     }
>> diff --git a/community/rust/musl-fix-linux_musl_base.patch b/community/rust/musl-fix-linux_musl_base.patch
>> index 38194290cb..f2efb065e0 100644
>> --- a/community/rust/musl-fix-linux_musl_base.patch
>> +++ b/community/rust/musl-fix-linux_musl_base.patch
>> @@ -12,13 +12,13 @@ See https://github.com/rust-lang/rust/pull/40113
>> 
>> -    // Make sure that the linker/gcc really don't pull in anything, including
>> -    // default objects, libs, etc.
>> --    base.pre_link_args.push("-nostdlib".to_string());
>> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-nostdlib".to_string());
>> -
>>     // At least when this was tested, the linker would not add the
>>     // `GNU_EH_FRAME` program header to executables generated, which is required
>>     // when unwinding to locate the unwinding information. I'm not sure why this
>>     // argument is *not* necessary for normal builds, but it can't hurt!
>> -     base.pre_link_args.push("-Wl,--eh-frame-hdr".to_string());
>> +     base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,--eh-frame-hdr".to_string());
>> 
>> -    // There's a whole bunch of circular dependencies when dealing with MUSL
>> -    // unfortunately. To put this in perspective libc is statically linked to
>> @@ -42,8 +42,8 @@ See https://github.com/rust-lang/rust/pull/40113
>> -    // link everything as a group, not stripping anything out until everything
>> -    // is processed. The linker will still perform a pass to strip out object
>> -    // files but it won't do so until all objects/archives have been processed.
>> --    base.pre_link_args.push("-Wl,-(".to_string());
>> --    base.post_link_args.push("-Wl,-)".to_string());
>> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,-(".to_string());
>> +-    base.post_link_args.insert(LinkerFlavor::Gcc, vec!["-Wl,-)".to_string()]);
>> -
>> -    // When generating a statically linked executable there's generally some
>> -    // small setup needed which is listed in these files. These are provided by
>> diff --git a/community/rust/musl-fix-static-linking.patch b/community/rust/musl-fix-static-linking.patch
>> index 85de05e542..93fe79d15f 100644
>> --- a/community/rust/musl-fix-static-linking.patch
>> +++ b/community/rust/musl-fix-static-linking.patch
>> @@ -100,22 +100,20 @@ static linking is requested, instead of dynamically as before.
>> 
>>     // # Telling the linker what we're doing
>> 
>> -@@ -983,11 +983,14 @@ 
>> -         cmd.link_whole_staticlib(&l.name.as_str(), &search_path);
>> -     }
>> - 
>> --    cmd.hint_dynamic();
>> -+    let fully_static = sess.fully_static();
>> -+    if !fully_static {
>> -+        cmd.hint_dynamic();
>> -+    }
>> - 
>> -     for lib in others {
>> +@@ -983,13 +983,13 @@
>> +     let relevant_libs = sess.cstore.used_libraries().into_iter().filter(|l| {
>> +         relevant_lib(sess, l)
>> +     });
>> +
>> +     let search_path = archive_search_paths(sess);
>> +     for lib in relevant_libs {
>>         match lib.kind {
>> -            NativeLibraryKind::NativeUnknown => cmd.link_dylib(&lib.name.as_str()),
>> -+            NativeLibraryKind::NativeUnknown => if fully_static { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
>> ++            NativeLibraryKind::NativeUnknown => if sess.fully_static() { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
>>             NativeLibraryKind::NativeFramework => cmd.link_framework(&lib.name.as_str()),
>> -             NativeLibraryKind::NativeStatic => bug!(),
>> +             NativeLibraryKind::NativeStaticNobundle => cmd.link_staticlib(&lib.name.as_str()),
>> +             NativeLibraryKind::NativeStatic => cmd.link_whole_staticlib(&lib.name.as_str(),
>> +                                                                         &search_path)
>>         }
>> --- a/src/librustc_trans/back/linker.rs 
>> +++ b/src/librustc_trans/back/linker.rs 
>> @@ -127,16 +125,18 @@ static linking is requested, instead of dynamically as before.
>>     fn optimize(&mut self);
>>     fn debuginfo(&mut self);
>>     fn no_default_libraries(&mut self);
>> -@@ -93,6 +93,8 @@
>> +@@ -93,8 +93,10 @@
>>     fn no_whole_archives(&mut self);
>>     fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType);
>>     fn subsystem(&mut self, subsystem: &str);
>> +     // Should have been finalize(self), but we don't support self-by-value on trait objects (yet?).
>> +     fn finalize(&mut self) -> Command;
>> +    fn start_group(&mut self);
>> +    fn end_group(&mut self);
>> }
>> 
>> - pub struct GnuLinker<'a> {
>> -@@ -116,6 +117,9 @@ 
>> + pub struct GccLinker<'a> {
>> +@@ -116,6 +117,9 @@
>>     fn output_filename(&mut self, path: &Path) { self.cmd.arg("-o").arg(path); }
>>     fn add_object(&mut self, path: &Path) { self.cmd.arg(path); }
>>     fn position_independent_executable(&mut self) { self.cmd.arg("-pie"); }
>> @@ -198,3 +198,13 @@ static linking is requested, instead of dynamically as before.
>>     }
>> }
>> 
>> +--- a/src/librustc_trans/back/linker.rs 
>> ++++ b/src/librustc_trans/back/linker.rs 
>> +@@ -158,6 +158,7 @@ impl<'a> GccLinker<'a> {
>> +     }
>> + 
>> +     fn hint_dynamic(&mut self) {
>> ++        if self.sess.fully_static() { return }
>> +         if !self.takes_hints() { return }
>> +         if self.hinted_static {
>> +             self.linker_arg("-Bdynamic");
>> diff --git a/community/rust/musl-support-dynamic-linking.patch b/community/rust/musl-support-dynamic-linking.patch
>> index 7c4e93681b..efbbd7f0b0 100644
>> --- a/community/rust/musl-support-dynamic-linking.patch
>> +++ b/community/rust/musl-support-dynamic-linking.patch
>> @@ -303,10 +303,12 @@ index defbb44448..f10c7d5c83 100644
>>     }
>> 
>>     {
>> -@@ -718,8 +720,10 @@ fn link_natively(sess: &Session,
>> -                   objects, out_filename, outputs, trans);
>> +@@ -718,12 +720,14 @@ fn link_natively(sess: &Session,
>> +         cmd = linker.finalize();
>> +     }
>> +     if let Some(args) = sess.target.target.options.late_link_args.get(&flavor) {
>> +         cmd.args(args);
>>     }
>> -     cmd.args(&sess.target.target.options.late_link_args);
>> -    for obj in &sess.target.target.options.post_link_objects {
>> -        cmd.arg(root.join(obj));
>> +    if sess.crt_static() {
>> @@ -314,7 +316,9 @@ index defbb44448..f10c7d5c83 100644
>> +            cmd.arg(root.join(obj));
>> +        }
>>     }
>> -     cmd.args(&sess.target.target.options.post_link_args);
>> +     if let Some(args) = sess.target.target.options.post_link_args.get(&flavor) {
>> +         cmd.args(args);
>> +     }
>> 
>> diff --git a/src/libstd/build.rs b/src/libstd/build.rs
>> index 9504194393..dd2008c206 100644
>> -- 
>> 2.14.2
>> 
>>> On 23 Oct 2017, at 15:01, Natanael Copa <ncopa@alpinelinux.org> wrote:
>>> 
>>> Jakub,
>>> 
>>> ok to push this? (with fixed commit message 1.8 -> 1.18)
>>> 
>>> -nc
>>> 
>>> On Wed, 18 Oct 2017 15:45:00 +0300
>>> Marat Safin <jeizsm@gmail.com> wrote:
>>> 
>>>> Signed-off-by: Marat Safin <jeizsm@gmail.com>
>>>> ---
>>>> community/rust/APKBUILD                           | 13 ++--
>>>> community/rust/alpine-target.patch                |  8 +-
>>>> community/rust/fix-build.patch                    | 92 +++++++++++++++++++++++
>>>> community/rust/musl-fix-jemalloc.patch            | 61 ---------------
>>>> community/rust/musl-fix-linux_musl_base.patch     |  8 +-
>>>> community/rust/musl-fix-static-linking.patch      | 42 +++++++----
>>>> community/rust/musl-support-dynamic-linking.patch | 12 ++-
>>>> 7 files changed, 142 insertions(+), 94 deletions(-)
>>>> create mode 100644 community/rust/fix-build.patch
>>>> delete mode 100644 community/rust/musl-fix-jemalloc.patch
>>>> 
>>>> diff --git a/community/rust/APKBUILD b/community/rust/APKBUILD
>>>> index 48ce4e7ffa..80f8ad0c4e 100644
>>>> --- a/community/rust/APKBUILD
>>>> +++ b/community/rust/APKBUILD
>>>> @@ -2,7 +2,7 @@
>>>> # Contributor: Shiz <hi@shiz.me>
>>>> # Maintainer: Jakub Jirutka <jakub@jirutka.cz>
>>>> pkgname=rust
>>>> -pkgver=1.17.0
>>>> +pkgver=1.18.0
>>>> _llvmver=3.9
>>>> _bootver=1.16.0
>>>> pkgrel=3
>>>> @@ -29,7 +29,6 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
>>>> 	musl-support-dynamic-linking.patch
>>>> 	musl-fix-static-linking.patch
>>>> 	musl-fix-linux_musl_base.patch
>>>> -	musl-fix-jemalloc.patch
>>>> 	llvm-with-ffi.patch
>>>> 	static-pie.patch
>>>> 	need-rpath.patch
>>>> @@ -38,6 +37,7 @@ source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
>>>> 	alpine-move-py-scripts-to-share.patch
>>>> 	alpine-change-rpath-to-rustlib.patch
>>>> 	alpine-target.patch
>>>> +	fix-build.patch
>>>> 	check-rustc
>>>> 	"
>>>> builddir="$srcdir/rustc-$pkgver-src"
>>>> @@ -169,11 +169,10 @@ _mv() {
>>>> 	mv $@
>>>> }
>>>> 
>>>> -sha512sums="781799b29d83b4f0f433814bd818df034526db8e7f88c2df51d3b814eacafe8098d4bbe47ace951e1943325b3267b244007cf04f1f11083645b25aeacd40ebb6  rustc-1.17.0-src.tar.gz
>>>> -b0a8883e4469b60edd150c84486ab950396d757220f97bd271529576614c6c3b49456098507503832c20619d4bd74246dbc99c78116634a68a6df994793e9a94  musl-support-dynamic-linking.patch
>>>> -292c1cb4f751d830f5f1300d7ef94f573f698ac51e18243d7ff0d5a47bb1729bb2cbe8fb456e7a479213df5e5fbf49e360c9439d0f5ad7126cb72d161c91566a  musl-fix-static-linking.patch
>>>> -f436fddf7ab70ca5f1424081f5b75450270b200b3d997231323863e11addf76e1d65831a7ca09e3a5b7904ce828766c1f70b08326a175890298f28e5bc8646ef  musl-fix-linux_musl_base.patch
>>>> -c913d04ef419b2b6d8e453f72894070f263c9292abf97114a51884d475d03ce5b032053f1676ba9364800b4b35e394f707995058530ad5e4122c60f65ddd3db7  musl-fix-jemalloc.patch
>>>> +sha512sums="eff0460b647dfb3490e28d4dec4f9781d31a942f22de75d9bd1ba31591597226b6862ec5132e8b4fcdbcf6e6ffa085ca5dda7ff8260cd82388fc13e8d3b4a2eb  rustc-1.18.0-src.tar.gz
>>>> +b5db9ed04eac26c6fc62cde3f19d29837a5feea68e79165c23b5b5cade2e1d193f2399d27f7622b230996da9565f78825be154574f1cd59189ded8a03a766cfb  musl-support-dynamic-linking.patch
>>>> +a6071aab49a7fcd38189a73b0c49ee0808e2063b4e6531643ef154b65bae699e8b42537a9c4400bf2662169d2350ad25f1166de03438efaf9578d9422dffdd8f  musl-fix-static-linking.patch
>>>> +9ebfb10abb50d74ff08d257d85257ce70ac3ce834aa95a8901808497b14acf3ea898fb197de64d13554eb5feedabe9fd04fec2cc6a7bea9b1335684bfcdcd88b  musl-fix-linux_musl_base.patch
>>>> dc6432293bd060d5e3a73f25870867654fae61995dcd919e244a2dc686b6107556deed8c59ca6002182bfeff5ebc1ca2b89c4028ab0fbfb79e65defe47c9b4b0  llvm-with-ffi.patch
>>>> 5aaf6715b27b8b786740a55b91216d47985fbef3ccb0ef7e6a81696a2823671f8306143f7ecf77e66af91ef1500072524b9b4c7569508922ad5268df6080fda1  static-pie.patch
>>>> ff633f2a46c683ad698d1c09c98c06ce9ee9b8d55fa5593cdd485b439ebca3273794d29b5ff32b887be8666f52913a23af6e133c782bd0c4e2c88e306dd3a494  need-rpath.patch
>>>> diff --git a/community/rust/alpine-target.patch b/community/rust/alpine-target.patch
>>>> index e013a6bc2e..fc79b45b9a 100644
>>>> --- a/community/rust/alpine-target.patch
>>>> +++ b/community/rust/alpine-target.patch
>>>> @@ -8,7 +8,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>>> 
>>>> --- /dev/null
>>>> +++ b/src/librustc_back/target/i586_alpine_linux_musl.rs
>>>> -@@ -0,0 +1,32 @@
>>>> +@@ -0,0 +1,34 @@
>>>> +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
>>>> +// file at the top-level directory of this distribution and at
>>>> +// http://rust-lang.org/COPYRIGHT.
>>>> @@ -19,6 +19,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>>> +// option. This file may not be copied, modified, or distributed
>>>> +// except according to those terms.
>>>> +
>>>> ++use LinkerFlavor;
>>>> +use target::{Target, TargetResult};
>>>> +
>>>> +pub fn target() -> TargetResult {
>>>> @@ -38,6 +39,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>>> +        target_os: "linux".to_string(),
>>>> +        target_env: "musl".to_string(),
>>>> +        target_vendor: "alpine".to_string(),
>>>> ++        linker_flavor: LinkerFlavor::Gcc,
>>>> +        options: base,
>>>> +    })
>>>> +}
>>>> @@ -55,7 +57,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>>> /// Everything `rustc` knows about how to compile for a specific target.
>>>> --- /dev/null
>>>> +++ b/src/librustc_back/target/x86_64_alpine_linux_musl.rs
>>>> -@@ -0,0 +1,32 @@
>>>> +@@ -0,0 +1,34 @@
>>>> +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
>>>> +// file at the top-level directory of this distribution and at
>>>> +// http://rust-lang.org/COPYRIGHT.
>>>> @@ -66,6 +68,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>>> +// option. This file may not be copied, modified, or distributed
>>>> +// except according to those terms.
>>>> +
>>>> ++use LinkerFlavor;
>>>> +use target::{Target, TargetResult};
>>>> +
>>>> +pub fn target() -> TargetResult {
>>>> @@ -85,6 +88,7 @@ and distribution-specific quirks instead of polluting the main musl target of
>>>> +        target_os: "linux".to_string(),
>>>> +        target_env: "musl".to_string(),
>>>> +        target_vendor: "alpine".to_string(),
>>>> ++        linker_flavor: LinkerFlavor::Gcc,
>>>> +        options: base,
>>>> +    })
>>>> +}
>>>> diff --git a/community/rust/fix-build.patch b/community/rust/fix-build.patch
>>>> new file mode 100644
>>>> index 0000000000..0a8482d731
>>>> --- /dev/null
>>>> +++ b/community/rust/fix-build.patch
>>>> @@ -0,0 +1,92 @@
>>>> +diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs
>>>> +index 56cbb4cecf2a..dc9dac736278 100644
>>>> +--- a/src/bootstrap/flags.rs
>>>> ++++ b/src/bootstrap/flags.rs
>>>> +@@ -242,11 +242,18 @@ Arguments:
>>>> +         let cwd = t!(env::current_dir());
>>>> +         let paths = matches.free[1..].iter().map(|p| cwd.join(p)).collect::<Vec<_>>();
>>>> + 
>>>> ++        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
>>>> ++            if fs::metadata("config.toml").is_ok() {
>>>> ++                Some(PathBuf::from("config.toml"))
>>>> ++            } else {
>>>> ++                None
>>>> ++            }
>>>> ++        });
>>>> + 
>>>> +         // All subcommands can have an optional "Available paths" section
>>>> +         if matches.opt_present("verbose") {
>>>> +             let flags = Flags::parse(&["build".to_string()]);
>>>> +-            let mut config = Config::default();
>>>> ++            let mut config = Config::parse(&flags.build, cfg_file.clone());
>>>> +             config.build = flags.build.clone();
>>>> +             let mut build = Build::new(flags, config);
>>>> +             metadata::build(&mut build);
>>>> +@@ -307,14 +314,6 @@ Arguments:
>>>> +         };
>>>> + 
>>>> + 
>>>> +-        let cfg_file = matches.opt_str("config").map(PathBuf::from).or_else(|| {
>>>> +-            if fs::metadata("config.toml").is_ok() {
>>>> +-                Some(PathBuf::from("config.toml"))
>>>> +-            } else {
>>>> +-                None
>>>> +-            }
>>>> +-        });
>>>> +-
>>>> +         let mut stage = matches.opt_str("stage").map(|j| j.parse().unwrap());
>>>> + 
>>>> +         if matches.opt_present("incremental") {
>>>> +diff --git a/src/bootstrap/bin/main.rs b/src/bootstrap/bin/main.rs
>>>> +index 5ca5ce1648f2..5ef18b89841f 100644
>>>> +--- a/src/bootstrap/bin/main.rs
>>>> ++++ b/src/bootstrap/bin/main.rs
>>>> +@@ -26,12 +26,6 @@ use bootstrap::{Flags, Config, Build};
>>>> + fn main() {
>>>> +     let args = env::args().skip(1).collect::<Vec<_>>();
>>>> +     let flags = Flags::parse(&args);
>>>> +-    let mut config = Config::parse(&flags.build, flags.config.clone());
>>>> +-
>>>> +-    // compat with `./configure` while we're still using that
>>>> +-    if std::fs::metadata("config.mk").is_ok() {
>>>> +-        config.update_with_config_mk();
>>>> +-    }
>>>> +-
>>>> ++    let config = Config::parse(&flags.build, flags.config.clone());
>>>> +     Build::new(flags, config).build();
>>>> + }
>>>> +diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
>>>> +index fd8aa320fb3d..902cd0997a8e 100644
>>>> +--- a/src/bootstrap/config.rs
>>>> ++++ b/src/bootstrap/config.rs
>>>> +@@ -15,7 +15,7 @@
>>>> + 
>>>> + use std::collections::HashMap;
>>>> + use std::env;
>>>> +-use std::fs::File;
>>>> ++use std::fs::{self, File};
>>>> + use std::io::prelude::*;
>>>> + use std::path::PathBuf;
>>>> + use std::process;
>>>> +@@ -410,6 +410,12 @@ impl Config {
>>>> +             set(&mut config.rust_dist_src, t.src_tarball);
>>>> +         }
>>>> + 
>>>> ++
>>>> ++        // compat with `./configure` while we're still using that
>>>> ++        if fs::metadata("config.mk").is_ok() {
>>>> ++            config.update_with_config_mk();
>>>> ++        }
>>>> ++
>>>> +         return config
>>>> +     }
>>>> + 
>>>> +@@ -418,7 +424,7 @@ impl Config {
>>>> +     /// While we still have `./configure` this implements the ability to decode
>>>> +     /// that configuration into this. This isn't exactly a full-blown makefile
>>>> +     /// parser, but hey it gets the job done!
>>>> +-    pub fn update_with_config_mk(&mut self) {
>>>> ++    fn update_with_config_mk(&mut self) {
>>>> +         let mut config = String::new();
>>>> +         File::open("config.mk").unwrap().read_to_string(&mut config).unwrap();
>>>> +         for line in config.lines() {
>>>> diff --git a/community/rust/musl-fix-jemalloc.patch b/community/rust/musl-fix-jemalloc.patch
>>>> deleted file mode 100644
>>>> index 345398a301..0000000000
>>>> --- a/community/rust/musl-fix-jemalloc.patch
>>>> +++ /dev/null
>>>> @@ -1,61 +0,0 @@
>>>> -From 536011d929ecbd1170baf34e09580e567c971f95 Mon Sep 17 00:00:00 2001
>>>> -From: Shiz <hi@shiz.me>
>>>> -Date: Sat, 8 Apr 2017 20:36:00 +0200
>>>> -Subject: [PATCH] Fix jemalloc support for musl
>>>> -
>>>> -Just like DragonFlyBSD, using the same symbols as the system allocator will
>>>> -result in a segmentation fault at runtime due to allocator mismatches.
>>>> -As such, prefix the jemalloc symbols instead.
>>>> -
>>>> -Upstream-Issue: https://github.com/rust-lang/rust/pull/41168
>>>> ----
>>>> - src/liballoc_jemalloc/build.rs |  2 +-
>>>> - src/liballoc_jemalloc/lib.rs   | 10 +++++-----
>>>> - 2 files changed, 6 insertions(+), 6 deletions(-)
>>>> -
>>>> -diff --git a/src/liballoc_jemalloc/build.rs b/src/liballoc_jemalloc/build.rs
>>>> -index ae040a2..f3a0eeb 100644
>>>> ---- a/src/liballoc_jemalloc/build.rs
>>>> -+++ b/src/liballoc_jemalloc/build.rs
>>>> -@@ -138,7 +138,7 @@ fn main() {
>>>> -         // should be good to go!
>>>> -         cmd.arg("--with-jemalloc-prefix=je_");
>>>> -         cmd.arg("--disable-tls");
>>>> --    } else if target.contains("dragonfly") {
>>>> -+    } else if target.contains("dragonfly") || target.contains("musl") {
>>>> -         cmd.arg("--with-jemalloc-prefix=je_");
>>>> -     }
>>>> - 
>>>> -diff --git a/src/liballoc_jemalloc/lib.rs b/src/liballoc_jemalloc/lib.rs
>>>> -index a7a67ef..83cc1ef 100644
>>>> ---- a/src/liballoc_jemalloc/lib.rs
>>>> -+++ b/src/liballoc_jemalloc/lib.rs
>>>> -@@ -51,23 +51,23 @@ mod imp {
>>>> -     // request it as unprefixing cause segfaults (mismatches in allocators).
>>>> -     extern "C" {
>>>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>>>> --                       target_os = "dragonfly", target_os = "windows"),
>>>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>>>> -                    link_name = "je_mallocx")]
>>>> -         fn mallocx(size: size_t, flags: c_int) -> *mut c_void;
>>>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>>>> --                       target_os = "dragonfly", target_os = "windows"),
>>>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>>>> -                    link_name = "je_rallocx")]
>>>> -         fn rallocx(ptr: *mut c_void, size: size_t, flags: c_int) -> *mut c_void;
>>>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>>>> --                       target_os = "dragonfly", target_os = "windows"),
>>>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>>>> -                    link_name = "je_xallocx")]
>>>> -         fn xallocx(ptr: *mut c_void, size: size_t, extra: size_t, flags: c_int) -> size_t;
>>>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>>>> --                       target_os = "dragonfly", target_os = "windows"),
>>>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>>>> -                    link_name = "je_sdallocx")]
>>>> -         fn sdallocx(ptr: *mut c_void, size: size_t, flags: c_int);
>>>> -         #[cfg_attr(any(target_os = "macos", target_os = "android", target_os = "ios",
>>>> --                       target_os = "dragonfly", target_os = "windows"),
>>>> -+                       target_os = "dragonfly", target_os = "windows", target_env = "musl"),
>>>> -                    link_name = "je_nallocx")]
>>>> -         fn nallocx(size: size_t, flags: c_int) -> size_t;
>>>> -     }
>>>> diff --git a/community/rust/musl-fix-linux_musl_base.patch b/community/rust/musl-fix-linux_musl_base.patch
>>>> index 38194290cb..f2efb065e0 100644
>>>> --- a/community/rust/musl-fix-linux_musl_base.patch
>>>> +++ b/community/rust/musl-fix-linux_musl_base.patch
>>>> @@ -12,13 +12,13 @@ See https://github.com/rust-lang/rust/pull/40113
>>>> 
>>>> -    // Make sure that the linker/gcc really don't pull in anything, including
>>>> -    // default objects, libs, etc.
>>>> --    base.pre_link_args.push("-nostdlib".to_string());
>>>> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-nostdlib".to_string());
>>>> -
>>>>    // At least when this was tested, the linker would not add the
>>>>    // `GNU_EH_FRAME` program header to executables generated, which is required
>>>>    // when unwinding to locate the unwinding information. I'm not sure why this
>>>>    // argument is *not* necessary for normal builds, but it can't hurt!
>>>> -     base.pre_link_args.push("-Wl,--eh-frame-hdr".to_string());
>>>> +     base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,--eh-frame-hdr".to_string());
>>>> 
>>>> -    // There's a whole bunch of circular dependencies when dealing with MUSL
>>>> -    // unfortunately. To put this in perspective libc is statically linked to
>>>> @@ -42,8 +42,8 @@ See https://github.com/rust-lang/rust/pull/40113
>>>> -    // link everything as a group, not stripping anything out until everything
>>>> -    // is processed. The linker will still perform a pass to strip out object
>>>> -    // files but it won't do so until all objects/archives have been processed.
>>>> --    base.pre_link_args.push("-Wl,-(".to_string());
>>>> --    base.post_link_args.push("-Wl,-)".to_string());
>>>> +-    base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,-(".to_string());
>>>> +-    base.post_link_args.insert(LinkerFlavor::Gcc, vec!["-Wl,-)".to_string()]);
>>>> -
>>>> -    // When generating a statically linked executable there's generally some
>>>> -    // small setup needed which is listed in these files. These are provided by
>>>> diff --git a/community/rust/musl-fix-static-linking.patch b/community/rust/musl-fix-static-linking.patch
>>>> index 85de05e542..93fe79d15f 100644
>>>> --- a/community/rust/musl-fix-static-linking.patch
>>>> +++ b/community/rust/musl-fix-static-linking.patch
>>>> @@ -100,22 +100,20 @@ static linking is requested, instead of dynamically as before.
>>>> 
>>>>    // # Telling the linker what we're doing
>>>> 
>>>> -@@ -983,11 +983,14 @@ 
>>>> -         cmd.link_whole_staticlib(&l.name.as_str(), &search_path);
>>>> -     }
>>>> - 
>>>> --    cmd.hint_dynamic();
>>>> -+    let fully_static = sess.fully_static();
>>>> -+    if !fully_static {
>>>> -+        cmd.hint_dynamic();
>>>> -+    }
>>>> - 
>>>> -     for lib in others {
>>>> +@@ -983,13 +983,13 @@
>>>> +     let relevant_libs = sess.cstore.used_libraries().into_iter().filter(|l| {
>>>> +         relevant_lib(sess, l)
>>>> +     });
>>>> +
>>>> +     let search_path = archive_search_paths(sess);
>>>> +     for lib in relevant_libs {
>>>>        match lib.kind {
>>>> -            NativeLibraryKind::NativeUnknown => cmd.link_dylib(&lib.name.as_str()),
>>>> -+            NativeLibraryKind::NativeUnknown => if fully_static { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
>>>> ++            NativeLibraryKind::NativeUnknown => if sess.fully_static() { cmd.link_staticlib(&lib.name.as_str()) } else { cmd.link_dylib(&lib.name.as_str()) },
>>>>            NativeLibraryKind::NativeFramework => cmd.link_framework(&lib.name.as_str()),
>>>> -             NativeLibraryKind::NativeStatic => bug!(),
>>>> +             NativeLibraryKind::NativeStaticNobundle => cmd.link_staticlib(&lib.name.as_str()),
>>>> +             NativeLibraryKind::NativeStatic => cmd.link_whole_staticlib(&lib.name.as_str(),
>>>> +                                                                         &search_path)
>>>>        }
>>>> --- a/src/librustc_trans/back/linker.rs 
>>>> +++ b/src/librustc_trans/back/linker.rs 
>>>> @@ -127,16 +125,18 @@ static linking is requested, instead of dynamically as before.
>>>>    fn optimize(&mut self);
>>>>    fn debuginfo(&mut self);
>>>>    fn no_default_libraries(&mut self);
>>>> -@@ -93,6 +93,8 @@
>>>> +@@ -93,8 +93,10 @@
>>>>    fn no_whole_archives(&mut self);
>>>>    fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType);
>>>>    fn subsystem(&mut self, subsystem: &str);
>>>> +     // Should have been finalize(self), but we don't support self-by-value on trait objects (yet?).
>>>> +     fn finalize(&mut self) -> Command;
>>>> +    fn start_group(&mut self);
>>>> +    fn end_group(&mut self);
>>>> }
>>>> 
>>>> - pub struct GnuLinker<'a> {
>>>> -@@ -116,6 +117,9 @@ 
>>>> + pub struct GccLinker<'a> {
>>>> +@@ -116,6 +117,9 @@
>>>>    fn output_filename(&mut self, path: &Path) { self.cmd.arg("-o").arg(path); }
>>>>    fn add_object(&mut self, path: &Path) { self.cmd.arg(path); }
>>>>    fn position_independent_executable(&mut self) { self.cmd.arg("-pie"); }
>>>> @@ -198,3 +198,13 @@ static linking is requested, instead of dynamically as before.
>>>>    }
>>>> }
>>>> 
>>>> +--- a/src/librustc_trans/back/linker.rs 
>>>> ++++ b/src/librustc_trans/back/linker.rs 
>>>> +@@ -158,6 +158,7 @@ impl<'a> GccLinker<'a> {
>>>> +     }
>>>> + 
>>>> +     fn hint_dynamic(&mut self) {
>>>> ++        if self.sess.fully_static() { return }
>>>> +         if !self.takes_hints() { return }
>>>> +         if self.hinted_static {
>>>> +             self.linker_arg("-Bdynamic");
>>>> diff --git a/community/rust/musl-support-dynamic-linking.patch b/community/rust/musl-support-dynamic-linking.patch
>>>> index 7c4e93681b..efbbd7f0b0 100644
>>>> --- a/community/rust/musl-support-dynamic-linking.patch
>>>> +++ b/community/rust/musl-support-dynamic-linking.patch
>>>> @@ -303,10 +303,12 @@ index defbb44448..f10c7d5c83 100644
>>>>    }
>>>> 
>>>>    {
>>>> -@@ -718,8 +720,10 @@ fn link_natively(sess: &Session,
>>>> -                   objects, out_filename, outputs, trans);
>>>> +@@ -718,12 +720,14 @@ fn link_natively(sess: &Session,
>>>> +         cmd = linker.finalize();
>>>> +     }
>>>> +     if let Some(args) = sess.target.target.options.late_link_args.get(&flavor) {
>>>> +         cmd.args(args);
>>>>    }
>>>> -     cmd.args(&sess.target.target.options.late_link_args);
>>>> -    for obj in &sess.target.target.options.post_link_objects {
>>>> -        cmd.arg(root.join(obj));
>>>> +    if sess.crt_static() {
>>>> @@ -314,7 +316,9 @@ index defbb44448..f10c7d5c83 100644
>>>> +            cmd.arg(root.join(obj));
>>>> +        }
>>>>    }
>>>> -     cmd.args(&sess.target.target.options.post_link_args);
>>>> +     if let Some(args) = sess.target.target.options.post_link_args.get(&flavor) {
>>>> +         cmd.args(args);
>>>> +     }
>>>> 
>>>> diff --git a/src/libstd/build.rs b/src/libstd/build.rs
>>>> index 9504194393..dd2008c206 100644
>>> 
>> 
> 



---
Unsubscribe:  alpine-aports+unsubscribe@lists.alpinelinux.org
Help:         alpine-aports+help@lists.alpinelinux.org
---
Reply to thread Export thread (mbox)