diff --git a/Cargo.toml b/Cargo.toml index 0da45e8..e68858b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ rodio = { version = "0.15.0", optional = true} [build-dependencies] ureq = {version = "2.6.2", features = ["native-tls"]} native-tls = "0.2.7" -zip = "0.6.4" +zip-extract = "0.1.2" tempfile = "3.5.0" [features] diff --git a/SDL2-devel-2.26.4-mingw.zip b/SDL2-devel-2.26.4-mingw.zip deleted file mode 100644 index 2b33503..0000000 Binary files a/SDL2-devel-2.26.4-mingw.zip and /dev/null differ diff --git a/SDL2_image-devel-2.6.3-mingw.zip b/SDL2_image-devel-2.6.3-mingw.zip deleted file mode 100644 index bf06701..0000000 Binary files a/SDL2_image-devel-2.6.3-mingw.zip and /dev/null differ diff --git a/SDL2_ttf-devel-2.20.2-mingw.zip b/SDL2_ttf-devel-2.20.2-mingw.zip deleted file mode 100644 index 558dcb6..0000000 Binary files a/SDL2_ttf-devel-2.20.2-mingw.zip and /dev/null differ diff --git a/build.rs b/build.rs index dc91a82..101e08a 100644 --- a/build.rs +++ b/build.rs @@ -1,78 +1,70 @@ -use std::env; -use std::fs::File; -use std::io::{copy, BufWriter, Read}; -use std::path::Path; -use std::path::PathBuf; -use ureq::{AgentBuilder}; -use zip::{ZipArchive, read::ZipFile}; -use std::sync::Arc; use native_tls; +use std::env; +use std::fs::{File, OpenOptions}; +use std::io::{copy, BufWriter}; +use std::path::{Path, PathBuf}; +use std::sync::Arc; +use ureq::AgentBuilder; +use zip_extract::extract; use tempfile::tempdir; - -enum State { - Six, - Three, -} fn main() -> Result<(), Box> { let target = env::var("TARGET")?; if target.contains("pc-windows-gnu") { let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR")?); - - //CREATING TEMP DIR FOR DOWNLOADS - let temp_dir = tempdir()?; - let temp_path = temp_dir.path(); - //returns zip files - let url_sdl = download_files(temp_path.clone(),"https://github.com/libsdl-org/SDL/releases/download/release-2.26.4/SDL2-devel-2.26.4-mingw.zip")?; - - let url_ttf = download_files(temp_path.clone(),"https://github.com/libsdl-org/SDL_ttf/releases/download/release-2.20.2/SDL2_ttf-devel-2.20.2-mingw.zip")?; - - let url_image = download_files(temp_path.clone(),"https://github.com/libsdl-org/SDL_image/releases/download/release-2.6.3/SDL2_image-devel-2.6.3-mingw.zip")?; - + let temp = tempdir()?; + let temp_dir = temp.path(); //GETTING LIBRARY DIRECTORIES GIVEN THE BUILD TARGET let mut lib_dir = manifest_dir.clone(); let mut dll_dir = manifest_dir.clone(); - - let mut state: State = State::Six; + + let mut zip_extract = manifest_dir.clone(); + zip_extract.push("gnu-mingw"); lib_dir.push("gnu-mingw"); dll_dir.push("gnu-mingw"); - lib_dir.push("lib"); - dll_dir.push("dll"); - if target.contains("x86_64") { - lib_dir.push("64"); - dll_dir.push("64"); - } else { - state = State::Three; - lib_dir.push("32"); - dll_dir.push("32"); - } - //could only error if dir already exists so no need to handle error - std::fs::create_dir_all(&lib_dir); - std::fs::create_dir_all(&dll_dir); - - //NOW THAT WE HAVE THE OUTPUT DIRECTORIES, WE NEED TO EXTRACT THE ZIP FILES INTO THE - //CORRECT DIRECTORIES - let zip_vec = vec![ZipArchive::new(&url_sdl)?,ZipArchive::new(&url_ttf)?,ZipArchive::new(&url_image)?]; let mut part = String::new(); - - let mut lib_folders:Vec = Vec::new(); - match state{ - State::Six => { - part = "x86_64".to_string(); - }, - State::Three => { - part = "i686".to_string(); - }, + if target.contains("x86_64") { + part += "x86_64-w64-mingw32"; + lib_dir.push("x86_64-w64-mingw32"); + dll_dir.push("x86_64-w64-mingw32"); + } else { + part += "x86_64-w64-mingw32"; + lib_dir.push("i686-w64-mingw32"); + dll_dir.push("i686-w64-mingw32"); } - let map_thing = zip_vec.into_iter(); + lib_dir.push("lib"); + dll_dir.push("bin"); + println!("DEBUG: Managed Dirs!"); - let mut lib_folder = lib_folders.get_mut(0).unwrap(); - let mut vuf = vec![0; lib_folder.size() as usize]; - let buf = vuf.as_mut_slice(); - lib_folder.read(buf); + if !zip_extract.exists() { + std::fs::create_dir_all(&zip_extract)?; + } + + println!("DEBUG: Created Dirs!"); + + if !lib_dir.exists() { + //NOW THAT WE HAVE THE OUTPUT DIRECTORIES, WE NEED TO EXTRACT THE ZIP FILES INTO THE + //CORRECT DIRECTORIES + //returns zip files + let url_sdl = download_files(temp_dir,"https://github.com/libsdl-org/SDL/releases/download/release-2.26.4/SDL2-devel-2.26.4-mingw.zip")?; + url_sdl.sync_all()?; + let url_ttf = download_files(temp_dir,"https://github.com/libsdl-org/SDL_ttf/releases/download/release-2.20.2/SDL2_ttf-devel-2.20.2-mingw.zip")?; + url_ttf.sync_all()?; + let url_image = download_files(temp_dir,"https://github.com/libsdl-org/SDL_image/releases/download/release-2.6.3/SDL2_image-devel-2.6.3-mingw.zip")?; + url_image.sync_all()?; + + println!("DEBUG: Downloaded Files!"); + + let zip_vec = vec![&url_sdl, &url_ttf, &url_image]; + for file in zip_vec { + extract(file, &zip_extract, true)?; + println!("DEBUG: Extracted 'a' File"); + } + temp.close()?; + } //SEARCHES AND LINKS LIBRARIES WITH CARGO println!("cargo:rustc-link-search=all={}", lib_dir.display()); @@ -90,17 +82,11 @@ fn main() -> Result<(), Box> { } } } - url_image.sync_all()?; - url_ttf.sync_all()?; - url_sdl.sync_all()?; } Ok(()) } -pub fn download_files>( - path: P, - url: &str -) -> Result> { +pub fn download_files(path: &Path,url: &str) -> Result> { let agent = AgentBuilder::new() .tls_connector(Arc::new(native_tls::TlsConnector::new()?)) .build(); @@ -117,9 +103,14 @@ pub fn download_files>( .trim_matches('"'); // Create a new File object to store the downloaded zip file - let mut path_buf = path.as_ref().to_path_buf(); - path_buf.push(file_name); - let file = File::create(path_buf)?; + + let mut path = path.to_path_buf(); + path.push(&file_name); + let file = OpenOptions::new() + .read(true) + .write(true) + .create(true) + .open(&path)?; // Use a BufWriter to efficiently write the contents of the response to the file let mut writer = BufWriter::new(file);