From 3aecca7482ccadb2cd0b08e5844b3736f85ea269 Mon Sep 17 00:00:00 2001 From: gallant Date: Thu, 30 Mar 2023 11:17:09 -0500 Subject: [PATCH] we now have zip files, one step closer to ultimate greatness --- Cargo.toml | 1 + build.rs | 73 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 39 insertions(+), 35 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index af6e3b2..da0286a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ rodio = { version = "0.15.0", optional = true} [build-dependencies] ureq = "2.6.2" zip = "0.6.4" +tempfile = "3.5.0" [features] default = ["audio"] diff --git a/build.rs b/build.rs index 4924fad..dba4ca6 100644 --- a/build.rs +++ b/build.rs @@ -1,61 +1,66 @@ use std::env; -use std::path::PathBuf; use std::fs::File; use std::io::{copy, BufWriter}; use std::path::Path; +use std::path::PathBuf; +use ureq::{Agent}; use zip::ZipArchive; -use ureq::{Error, Agent, AgentBuilder}; + +use tempfile::tempdir; +enum State { + Six, + Three, +} fn main() -> Result<(), Box> { let target = env::var("TARGET")?; - if target.contains("pc-windows") { - - - - - - + if target.contains("pc-windows-gnu") { let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR")?); - - //CREATING TEMP DIR FOR DOWNLOADS - let mut temp_dir = manifest_dir.clone(); - temp_dir.push("/tmp"); - std::fs::create_dir(temp_dir.clone()); - - let url_sdl = downloadFiles(temp_dir.clone(), "https://github.com/libsdl-org/SDL/releases/download/release-2.26.4/SDL2-devel-2.26.4-mingw.zip"); - let url_ttf = downloadFiles(temp_dir.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 = downloadFiles(temp_dir.clone(), "https://github.com/libsdl-org/SDL_image/releases/download/release-2.6.3/SDL2_image-devel-2.6.3-mingw.zip"); + //CREATING TEMP DIR FOR DOWNLOADS + let temp_dir = tempdir()?; + let temp_path = temp_dir.path(); + //returns zip files + let url_sdl = download_files("https://github.com/libsdl-org/SDL/releases/download/release-2.26.4/SDL2-devel-2.26.4-mingw.zip")?; + + let url_ttf = download_files("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("https://github.com/libsdl-org/SDL_image/releases/download/release-2.6.3/SDL2_image-devel-2.6.3-mingw.zip")?; + + + //GETTING LIBRARY DIRECTORIES GIVEN THE BUILD TARGET let mut lib_dir = manifest_dir.clone(); let mut dll_dir = manifest_dir.clone(); - - - if target.contains("msvc") { - lib_dir.push("msvc"); - dll_dir.push("msvc"); - } else { - lib_dir.push("gnu-mingw"); - - dll_dir.push("gnu-mingw"); - } - - + + let mut state: State = State::Six; + 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 lolz 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 mut zip_sdl2 = ZipArchive::new(url_sdl)?; + let mut zip_ttf = ZipArchive::new(url_ttf)?; + let mut zip_image = ZipArchive::new(url_image)?; + zip_ttf.extract(&temp_path)?; + zip_image.extract(&temp_path)?; + zip_sdl2.extract(&temp_path)?; + //SEARCHES AND LINKS LIBRARIES WITH CARGO println!("cargo:rustc-link-search=all={}", lib_dir.display()); for entry in std::fs::read_dir(dll_dir).expect("Can't read DLL dir") { @@ -75,8 +80,7 @@ fn main() -> Result<(), Box> { Ok(()) } -pub fn downloadFiles>(path: P, url: &str) -> Result> -{ +pub fn download_files(url: &str) -> Result> { let agent = Agent::new(); let resp = agent.get(url).call()?; @@ -97,6 +101,5 @@ pub fn downloadFiles>(path: P, url: &str) -> Result