From d3034e5a2b10d398f2ad576cec538a3fc62742d3 Mon Sep 17 00:00:00 2001 From: ILyoan Date: Thu, 20 Dec 2012 18:26:27 +0900 Subject: [PATCH 1/4] arrange core::os::consts --- src/libcore/os.rs | 68 +++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/src/libcore/os.rs b/src/libcore/os.rs index b5e0983a420d1..4a2b12bf6a75c 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -355,13 +355,7 @@ fn dup2(src: c_int, dst: c_int) -> c_int { pub fn dll_filename(base: &str) -> ~str { - return pre() + str::from_slice(base) + dll_suffix(); - - #[cfg(unix)] - fn pre() -> ~str { ~"lib" } - - #[cfg(windows)] - fn pre() -> ~str { ~"" } + return dll_prefix() + str::from_slice(base) + dll_suffix(); } @@ -856,33 +850,49 @@ pub fn family() -> ~str { ~"unix" } #[cfg(windows)] pub fn family() -> ~str { ~"windows" } + -#[cfg(target_os = "macos")] mod consts { - pub fn sysname() -> ~str { ~"macos" } - pub fn exe_suffix() -> ~str { ~"" } - pub fn dll_suffix() -> ~str { ~".dylib" } -} -#[cfg(target_os = "freebsd")] -mod consts { - pub fn sysname() -> ~str { ~"freebsd" } - pub fn exe_suffix() -> ~str { ~"" } - pub fn dll_suffix() -> ~str { ~".so" } -} + #[cfg(target_os = "macos")] + use os::consts::macos::*; -#[cfg(target_os = "linux")] -mod consts { - pub fn sysname() -> ~str { ~"linux" } - pub fn exe_suffix() -> ~str { ~"" } - pub fn dll_suffix() -> ~str { ~".so" } -} + #[cfg(target_os = "freebsd")] + use os::consts::freebsd::*; -#[cfg(target_os = "win32")] -mod consts { - pub fn sysname() -> ~str { ~"win32" } - pub fn exe_suffix() -> ~str { ~".exe" } - pub fn dll_suffix() -> ~str { ~".dll" } + #[cfg(target_os = "linux")] + use os::consts::linux::*; + + #[cfg(target_os = "win32")] + use os::consts::win32::*; + + pub mod macos { + pub fn sysname() -> ~str { ~"macos" } + pub fn dll_prefix() -> ~str { ~"lib" } + pub fn dll_suffix() -> ~str { ~".dylib" } + pub fn exe_suffix() -> ~str { ~"" } + } + + pub mod freebsd { + pub fn sysname() -> ~str { ~"freebsd" } + pub fn dll_prefix() -> ~str { ~"lib" } + pub fn dll_suffix() -> ~str { ~".so" } + pub fn exe_suffix() -> ~str { ~"" } + } + + pub mod linux { + pub fn sysname() -> ~str { ~"linux" } + pub fn dll_prefix() -> ~str { ~"lib" } + pub fn dll_suffix() -> ~str { ~".so" } + pub fn exe_suffix() -> ~str { ~"" } + } + + pub mod win32 { + pub fn sysname() -> ~str { ~"win32" } + pub fn dll_prefix() -> ~str { ~"" } + pub fn dll_suffix() -> ~str { ~".dll" } + pub fn exe_suffix() -> ~str { ~".exe" } + } } #[cfg(target_arch = "x86")] From 0a7b730bbe1b0b4853743b46404ffc0145f8ccbf Mon Sep 17 00:00:00 2001 From: ILyoan Date: Thu, 20 Dec 2012 19:15:06 +0900 Subject: [PATCH 2/4] use core::os::consts instead of hard coded contant value --- src/librustc/metadata/loader.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/librustc/metadata/loader.rs b/src/librustc/metadata/loader.rs index 5901e58aeb190..4bab50a6da470 100644 --- a/src/librustc/metadata/loader.rs +++ b/src/librustc/metadata/loader.rs @@ -18,6 +18,7 @@ use lib::llvm::{False, llvm, mk_object_file, mk_section_iter}; use metadata::filesearch::FileSearch; use io::WriterUtil; use syntax::parse::token::ident_interner; +use core::os::consts::{macos, freebsd, linux, win32}; export os; export os_macos, os_win32, os_linux, os_freebsd; @@ -67,10 +68,14 @@ fn find_library_crate(cx: ctxt) -> Option<{ident: ~str, data: @~[u8]}> { fn libname(cx: ctxt) -> {prefix: ~str, suffix: ~str} { if cx.static { return {prefix: ~"lib", suffix: ~".rlib"}; } match cx.os { - os_win32 => return {prefix: ~"", suffix: ~".dll"}, - os_macos => return {prefix: ~"lib", suffix: ~".dylib"}, - os_linux => return {prefix: ~"lib", suffix: ~".so"}, - os_freebsd => return {prefix: ~"lib", suffix: ~".so"} + os_win32 => return {prefix: win32::dll_prefix(), + suffix: win32::dll_suffix()}, + os_macos => return {prefix: macos::dll_prefix(), + suffix: macos::dll_suffix()}, + os_linux => return {prefix: linux::dll_prefix(), + suffix: linux::dll_suffix()}, + os_freebsd => return {prefix: freebsd::dll_prefix(), + suffix: freebsd::dll_suffix()} } } From df6345aee420fc2757ed67717662b01e2473b383 Mon Sep 17 00:00:00 2001 From: ILyoan Date: Thu, 20 Dec 2012 19:15:59 +0900 Subject: [PATCH 3/4] generate output dll name based on target os --- src/librustc/back/link.rs | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index 52b94b76fe614..1073821e58a6a 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -26,6 +26,7 @@ use lib::llvm::{ModuleRef, mk_pass_manager, mk_target_data, True, False, use metadata::filesearch; use syntax::ast_map::{path, path_mod, path_name}; use io::{Writer, WriterUtil}; +use os::consts::{macos, freebsd, linux, win32}; enum output_type { output_type_none, @@ -631,6 +632,21 @@ fn mangle_internal_name_by_seq(ccx: @crate_ctxt, flav: ~str) -> ~str { return fmt!("%s_%u", flav, (ccx.names)(flav).repr); } + +fn output_dll_filename(os: session::os, lm: &link_meta) -> ~str { + let libname = fmt!("%s-%s-%s", lm.name, lm.extras_hash, lm.vers); + match os { + session::os_macos => + macos::dll_prefix() + libname + macos::dll_suffix(), + session::os_freebsd => + freebsd::dll_prefix() + libname + macos::dll_suffix(), + session::os_linux => + freebsd::dll_prefix() + libname + macos::dll_suffix(), + session::os_win32 => + win32::dll_prefix() + libname + win32::dll_suffix(), + } +} + // If the user wants an exe generated we need to invoke // cc to link the object file with some libs fn link_binary(sess: Session, @@ -648,10 +664,9 @@ fn link_binary(sess: Session, } let output = if sess.building_library { - let long_libname = - os::dll_filename(fmt!("%s-%s-%s", - lm.name, lm.extras_hash, lm.vers)); - debug!("link_meta.name: %s", lm.name); + let long_libname = output_dll_filename(sess.targ_cfg.os, &lm); + + debug!("link_meta.name: %s", lm.name); debug!("long_libname: %s", long_libname); debug!("out_filename: %s", out_filename.to_str()); debug!("dirname(out_filename): %s", out_filename.dir_path().to_str()); From 96180b2ba679b9b9692897f91ef03a3e94db06aa Mon Sep 17 00:00:00 2001 From: ILyoan Date: Thu, 20 Dec 2012 19:19:41 +0900 Subject: [PATCH 4/4] formatting --- src/libcore/os.rs | 4 ++-- src/librustc/back/link.rs | 5 ++--- src/librustc/metadata/loader.rs | 6 +++--- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 4a2b12bf6a75c..b7f0327ec5da9 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -850,7 +850,7 @@ pub fn family() -> ~str { ~"unix" } #[cfg(windows)] pub fn family() -> ~str { ~"windows" } - + mod consts { @@ -886,7 +886,7 @@ mod consts { pub fn dll_suffix() -> ~str { ~".so" } pub fn exe_suffix() -> ~str { ~"" } } - + pub mod win32 { pub fn sysname() -> ~str { ~"win32" } pub fn dll_prefix() -> ~str { ~"" } diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index 1073821e58a6a..0110f9745825d 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -642,7 +642,7 @@ fn output_dll_filename(os: session::os, lm: &link_meta) -> ~str { freebsd::dll_prefix() + libname + macos::dll_suffix(), session::os_linux => freebsd::dll_prefix() + libname + macos::dll_suffix(), - session::os_win32 => + session::os_win32 => win32::dll_prefix() + libname + win32::dll_suffix(), } } @@ -665,8 +665,7 @@ fn link_binary(sess: Session, let output = if sess.building_library { let long_libname = output_dll_filename(sess.targ_cfg.os, &lm); - - debug!("link_meta.name: %s", lm.name); + debug!("link_meta.name: %s", lm.name); debug!("long_libname: %s", long_libname); debug!("out_filename: %s", out_filename.to_str()); debug!("dirname(out_filename): %s", out_filename.dir_path().to_str()); diff --git a/src/librustc/metadata/loader.rs b/src/librustc/metadata/loader.rs index 4bab50a6da470..5d2af4a37fe7b 100644 --- a/src/librustc/metadata/loader.rs +++ b/src/librustc/metadata/loader.rs @@ -68,13 +68,13 @@ fn find_library_crate(cx: ctxt) -> Option<{ident: ~str, data: @~[u8]}> { fn libname(cx: ctxt) -> {prefix: ~str, suffix: ~str} { if cx.static { return {prefix: ~"lib", suffix: ~".rlib"}; } match cx.os { - os_win32 => return {prefix: win32::dll_prefix(), + os_win32 => return {prefix: win32::dll_prefix(), suffix: win32::dll_suffix()}, os_macos => return {prefix: macos::dll_prefix(), suffix: macos::dll_suffix()}, - os_linux => return {prefix: linux::dll_prefix(), + os_linux => return {prefix: linux::dll_prefix(), suffix: linux::dll_suffix()}, - os_freebsd => return {prefix: freebsd::dll_prefix(), + os_freebsd => return {prefix: freebsd::dll_prefix(), suffix: freebsd::dll_suffix()} } }