From 7857bc7cbd62670b50be992ef6a3d60dac92711b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabian=20Gr=C3=BCnbichler?= Date: Thu, 9 Apr 2026 14:33:10 +0200 Subject: [PATCH] d-0026-font-awesome-as-a-crate: generate SVG data from packaged font MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit based on upstream's build.rs, which uses a bundled copy of the font that is stripped when publishing. Signed-off-by: Fabian Grünbichler Gbp-Pq: Topic prune Gbp-Pq: Name d-0026-font-awesome-as-a-crate-generate-SVG-data-from-pac.patch --- vendor/font-awesome-as-a-crate-0.3.0/build.rs | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 vendor/font-awesome-as-a-crate-0.3.0/build.rs diff --git a/vendor/font-awesome-as-a-crate-0.3.0/build.rs b/vendor/font-awesome-as-a-crate-0.3.0/build.rs new file mode 100644 index 0000000000..044ac8242e --- /dev/null +++ b/vendor/font-awesome-as-a-crate-0.3.0/build.rs @@ -0,0 +1,59 @@ +use std::{ + env, + fs::{read_dir, File}, + io::{Read, Write}, + path::Path, +}; + +fn main() { + println!("cargo:rustc-cfg=font_awesome_out_dir"); + write_fontawesome_sprite(); +} + +fn write_fontawesome_sprite() { + let dest_path = Path::new(&env::var("OUT_DIR").unwrap()).join("fontawesome.rs"); + let mut dest_file = File::create(&dest_path).unwrap(); + dest_file + .write_all(b"const fn fontawesome_svg(dir:&str,file:&str)->&'static str{match(dir.as_bytes(),file.as_bytes()){") + .expect("fontawesome fn write"); + for dirname in &["brands", "regular", "solid"] { + let dir = read_dir( + Path::new("/usr/share/nodejs/@fortawesome/fontawesome-free/svgs/").join(dirname), + ) + .expect("fontawesome directory exists"); + let mut data = String::new(); + for file in dir { + let file = file.expect("fontawesome directory access"); + data.clear(); + let filename = file + .file_name() + .into_string() + .expect("fontawesome filenames are unicode"); + if !filename.ends_with(".svg") { + continue; + } + let mut file = File::open(file.path()).expect("fontawesome file access"); + file.read_to_string(&mut data) + .expect("fontawesome file read"); + if data.is_empty() { + panic!("encountered invalid fontawesome data in {}", filename); + } + // if this assert goes off, add more hashes here and in the format! below + assert!(!data.contains("###"), "file {} breaks raw string", filename); + dest_file + .write_all( + format!( + r####"(b"{dirname}",b"{filename}")=>r###"{data}"###,"####, + data = data, + dirname = dirname, + filename = filename.replace(".svg", ""), + ) + .as_bytes(), + ) + .expect("write fontawesome file"); + } + } + dest_file + .write_all(b"_=>\"\"}}") + .expect("fontawesome fn write"); +} -- 2.30.2