diff --git a/Cargo.toml b/Cargo.toml index 23c8fa5..1f9b9a9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,5 +10,8 @@ build = "build.rs" [dependencies.png-sys] path = "png-sys" +[dependencies] +libc = "0.1.5" + [build-dependencies.gcc] git = "https://github.com/alexcrichton/gcc-rs" diff --git a/build.rs b/build.rs index 771eb9b..017f8e7 100644 --- a/build.rs +++ b/build.rs @@ -1,9 +1,6 @@ -#![feature(os, path)] - extern crate gcc; -use std::default::Default; -use std::os; +use std::env; use std::path::PathBuf; fn main() { @@ -11,10 +8,10 @@ fn main() { cfg.file("src/shim.c"); - let src_dir = PathBuf::new(&os::getenv("CARGO_MANIFEST_DIR").unwrap()).join("png-sys/libpng-1.6.16"); + let src_dir = PathBuf::from(&env::var("CARGO_MANIFEST_DIR").unwrap()).join("png-sys/libpng-1.6.16"); cfg.include(&src_dir); - let dep_dir = PathBuf::new(&os::getenv("DEP_PNG_ROOT").unwrap()); + let dep_dir = PathBuf::from(&env::var("DEP_PNG_ROOT").unwrap()); cfg.include(&dep_dir); cfg.compile("libpngshim.a") diff --git a/png-sys/Cargo.toml b/png-sys/Cargo.toml index 1fd8a82..308a106 100644 --- a/png-sys/Cargo.toml +++ b/png-sys/Cargo.toml @@ -8,5 +8,5 @@ links = "png" build = "build.rs" [lib] -name = "png-sys" +name = "png_sys" path = "lib.rs" diff --git a/png-sys/build.rs b/png-sys/build.rs index 079dd66..8b6c0fd 100644 --- a/png-sys/build.rs +++ b/png-sys/build.rs @@ -1,36 +1,36 @@ -#![feature(collections, io, os, path)] +use std::env; +use std::path::PathBuf; -use std::old_io::Command; -use std::old_io::process::InheritFd; -use std::os; +use std::process::Command; +use std::process::Stdio; fn main() { - let target = os::getenv("TARGET").unwrap(); - let is_android = target.find_str("android").is_some(); + let target = env::var("TARGET").unwrap(); + let is_android = target.find("android").is_some(); if is_android { let cc = format!("{}-gcc", target); let ar = format!("{}-ar", target); - os::setenv("CC", cc); - os::setenv("AR", ar); + env::set_var("CC", &cc); + env::set_var("AR", &ar); } - let cfg = Path::new(os::getenv("CARGO_MANIFEST_DIR").unwrap()).join("libpng-1.6.16/configure"); - let dst = Path::new(os::getenv("OUT_DIR").unwrap()); + let cfg = PathBuf::from(&env::var("CARGO_MANIFEST_DIR").unwrap()).join("libpng-1.6.16/configure"); + let dst = PathBuf::from(&env::var("OUT_DIR").unwrap()); - os::setenv("CFLAGS", "-fPIC -O3"); + env::set_var("CFLAGS", "-fPIC -O3"); let mut cmd = Command::new(cfg); cmd.arg("--with-libpng-prefix=RUST_"); if is_android { cmd.arg("--host=arm-linux-gnueabi"); } - cmd.cwd(&dst); + cmd.current_dir(&dst); run(&mut cmd); let mut cmd = Command::new("make"); cmd.arg("-j4"); - cmd.cwd(&dst); + cmd.current_dir(&dst); run(&mut cmd); println!("cargo:root={}", dst.display()); @@ -39,8 +39,8 @@ fn main() { fn run(cmd: &mut Command) { println!("running: {:?}", cmd); - assert!(cmd.stdout(InheritFd(1)) - .stderr(InheritFd(2)) + assert!(cmd.stdout(Stdio::inherit()) + .stderr(Stdio::inherit()) .status() .unwrap() .success()); diff --git a/src/lib.rs b/src/lib.rs index b491191..01c45fd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,16 +10,15 @@ #![crate_name = "png"] #![crate_type = "rlib"] -#![feature(core, io, libc, path)] - extern crate libc; use libc::{c_int, size_t}; -use std::mem; +use std::error::Error; use std::fs::File; use std::io::{Read, Write}; use std::iter::repeat; -use std::path::AsPath; +use std::mem; +use std::path::Path; use std::ptr; use std::slice; @@ -61,12 +60,12 @@ pub extern fn read_data(png_ptr: *mut ffi::png_struct, data: *mut u8, length: si let buf = slice::from_raw_parts_mut(data, len); let end_pos = std::cmp::min(image_data.data.len()-image_data.offset, len); let src = &image_data.data[image_data.offset..image_data.offset+end_pos]; - ptr::copy(buf.as_mut_ptr(), src.as_ptr(), src.len()); + ptr::copy(src.as_ptr(), buf.as_mut_ptr(), src.len()); image_data.offset += end_pos; } } -pub fn load_png(path: P) -> Result { +pub fn load_png>(path: P) -> Result { let mut reader = match File::open(path) { Ok(r) => r, Err(e) => return Err(format!("could not open file: {}", e.description())), @@ -191,7 +190,7 @@ pub extern fn flush_data(png_ptr: *mut ffi::png_struct) { } } -pub fn store_png(img: &mut Image, path: P) -> Result<(),String> { +pub fn store_png>(img: &mut Image, path: P) -> Result<(),String> { let mut file = match File::create(path) { Ok(f) => f, Err(e) => return Err(format!("{}", e)) @@ -247,13 +246,14 @@ pub fn store_png(img: &mut Image, path: P) -> Result<(),String> { #[cfg(test)] mod test { - extern crate test; + use std::error::Error; use std::fs::File; use std::io::Read; use std::iter::repeat; + use std::path::PathBuf; - use super::{ffi, load_png, load_png_from_memory, store_png, Image}; - use super::PixelsByColorType::{RGB8, RGBA8, K8, KA8}; + use super::{ffi, load_png, store_png, Image}; + use super::PixelsByColorType::{RGB8, RGBA8}; #[test] fn test_valid_png() { @@ -272,7 +272,7 @@ mod test { } fn load_rgba8(file: &'static str, w: u32, h: u32) { - match load_png(&Path::new(file)) { + match load_png(&PathBuf::from(file)) { Err(m) => panic!(m), Ok(image) => { assert_eq!(image.width, w); @@ -299,49 +299,51 @@ mod test { load_rgba8("test/gray.png", 100, 100); } - fn bench_file_from_memory(b: &mut test::Bencher, file: &'static str, - w: u32, h: u32, c: &'static str) { - let mut reader = match File::open(file) { - Ok(r) => r, - Err(e) => panic!("could not open '{}': {}", file, e.description()) - }; - let mut buf = vec![]; - match reader.read_to_end(&mut buf) { - Ok(_) => (), - Err(e) => panic!(e) - } - b.bench_n(1, |b| b.iter(|| { - match load_png_from_memory(buf.as_slice()) { - Err(m) => panic!(m), - Ok(image) => { - let color_type = match image.pixels { - K8(_) => "K8", - KA8(_) => "KA8", - RGB8(_) => "RGB8", - RGBA8(_) => "RGBA8", - }; - assert_eq!(color_type, c); - assert_eq!(image.width, w); - assert_eq!(image.height, h); - } - } - })); - } - - #[bench] - fn test_load_perf_screenshot(b: &mut test::Bencher) { - bench_file_from_memory(b, "test/servo-screenshot.png", 831, 624, "RGBA8"); - } - - #[bench] - fn test_load_perf_dino(b: &mut test::Bencher) { - bench_file_from_memory(b, "test/mozilla-dinosaur-head-logo.png", 1300, 929, "RGBA8"); - } - - #[bench] - fn test_load_perf_rust(b: &mut test::Bencher) { - bench_file_from_memory(b, "test/rust-huge-logo.png", 4000, 4000, "RGBA8"); - } + // // test::Bencher is unstable in beta, so these are commented out for the time being. + // + // fn bench_file_from_memory(b: &mut test::Bencher, file: &'static str, + // w: u32, h: u32, c: &'static str) { + // let mut reader = match File::open(file) { + // Ok(r) => r, + // Err(e) => panic!("could not open '{}': {}", file, e.description()) + // }; + // let mut buf = vec![]; + // match reader.read_to_end(&mut buf) { + // Ok(_) => (), + // Err(e) => panic!(e) + // } + // b.bench_n(1, |b| b.iter(|| { + // match load_png_from_memory(buf.as_slice()) { + // Err(m) => panic!(m), + // Ok(image) => { + // let color_type = match image.pixels { + // K8(_) => "K8", + // KA8(_) => "KA8", + // RGB8(_) => "RGB8", + // RGBA8(_) => "RGBA8", + // }; + // assert_eq!(color_type, c); + // assert_eq!(image.width, w); + // assert_eq!(image.height, h); + // } + // } + // })); + // } + // + // #[bench] + // fn test_load_perf_screenshot(b: &mut test::Bencher) { + // bench_file_from_memory(b, "test/servo-screenshot.png", 831, 624, "RGBA8"); + // } + // + // #[bench] + // fn test_load_perf_dino(b: &mut test::Bencher) { + // bench_file_from_memory(b, "test/mozilla-dinosaur-head-logo.png", 1300, 929, "RGBA8"); + // } + // + // #[bench] + // fn test_load_perf_rust(b: &mut test::Bencher) { + // bench_file_from_memory(b, "test/rust-huge-logo.png", 4000, 4000, "RGBA8"); + // } #[test] fn test_store() { @@ -350,7 +352,7 @@ mod test { height: 10, pixels: RGB8(repeat(100).take(10 * 10 * 3).collect()), }; - let res = store_png(&mut img, &Path::new("test/store.png")); + let res = store_png(&mut img, &PathBuf::from("test/store.png")); assert!(res.is_ok()); } }