mirror of
				https://github.com/slint-ui/slint.git
				synced 2025-10-31 12:04:33 +00:00 
			
		
		
		
	 bcb2953f00
			
		
	
	
		bcb2953f00
		
	
	
	
	
		
			
			This is a hacky approach, but does help a lot with the tedious fixes. See https://rust-lang.github.io/rust-clippy/master/index.html#/unnecessary_map_or ``` __CARGO_FIX_YOLO=1 cargo clippy --fix --all-targets --workspace --exclude gstreamer-player --exclude i-slint-backend-linuxkms --exclude uefi-demo --exclude ffmpeg -- -A clippy::all -W clippy::unnecessary_map_or cargo fmt --all ```
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // Copyright © SixtyFPS GmbH <info@slint.dev>
 | |
| // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
 | |
| 
 | |
| use std::io::{BufWriter, Write};
 | |
| use std::path::{Path, PathBuf};
 | |
| 
 | |
| fn main() -> std::io::Result<()> {
 | |
|     println!("cargo:rustc-check-cfg=cfg(slint_debug_property)");
 | |
| 
 | |
|     let cargo_manifest_dir = PathBuf::from(std::env::var_os("CARGO_MANIFEST_DIR").unwrap());
 | |
|     let library_dir = PathBuf::from("widgets");
 | |
| 
 | |
|     println!("cargo:rerun-if-changed={}", library_dir.display());
 | |
| 
 | |
|     let output_file_path = Path::new(&std::env::var_os("OUT_DIR").unwrap())
 | |
|         .join(Path::new("included_library").with_extension("rs"));
 | |
| 
 | |
|     let mut file = BufWriter::new(std::fs::File::create(&output_file_path)?);
 | |
|     write!(
 | |
|         file,
 | |
|         r#"
 | |
| fn widget_library() -> &'static [(&'static str, &'static BuiltinDirectory<'static>)] {{
 | |
|     &[
 | |
| "#
 | |
|     )?;
 | |
| 
 | |
|     for style in cargo_manifest_dir.join(&library_dir).read_dir()?.filter_map(Result::ok) {
 | |
|         if !style.file_type().is_ok_and(|f| f.is_dir()) {
 | |
|             continue;
 | |
|         }
 | |
|         let path = style.path();
 | |
|         writeln!(
 | |
|             file,
 | |
|             "(\"{}\", &[{}]),",
 | |
|             path.file_name().unwrap().to_string_lossy(),
 | |
|             process_style(&cargo_manifest_dir, &path)?
 | |
|         )?;
 | |
|     }
 | |
| 
 | |
|     writeln!(file, "]\n}}")?;
 | |
| 
 | |
|     println!("cargo:rustc-env=SLINT_WIDGETS_LIBRARY={}", output_file_path.display());
 | |
| 
 | |
|     Ok(())
 | |
| }
 | |
| 
 | |
| fn process_style(cargo_manifest_dir: &Path, path: &Path) -> std::io::Result<String> {
 | |
|     let library_files: Vec<PathBuf> = cargo_manifest_dir
 | |
|         .join(path)
 | |
|         .read_dir()?
 | |
|         .filter_map(Result::ok)
 | |
|         .filter(|entry| {
 | |
|             entry.file_type().is_ok_and(|f| !f.is_dir())
 | |
|                 && entry
 | |
|                     .path()
 | |
|                     .extension()
 | |
|                     .map(|ext| {
 | |
|                         ext == std::ffi::OsStr::new("slint")
 | |
|                             || ext == std::ffi::OsStr::new("60")
 | |
|                             || ext == std::ffi::OsStr::new("svg")
 | |
|                             || ext == std::ffi::OsStr::new("svgz")
 | |
|                     })
 | |
|                     .unwrap_or_default()
 | |
|         })
 | |
|         .map(|entry| entry.path())
 | |
|         .collect();
 | |
| 
 | |
|     Ok(library_files
 | |
|         .iter()
 | |
|         .map(|file| {
 | |
|             format!(
 | |
|                 "&BuiltinFile {{path: r#\"{}\"# , contents: include_bytes!(concat!(env!(\"CARGO_MANIFEST_DIR\"), r#\"/{}\"#))}}",
 | |
|                 file.file_name().unwrap().to_string_lossy(),
 | |
|                 file.strip_prefix(cargo_manifest_dir).unwrap().display()
 | |
|             )
 | |
|         })
 | |
|         .collect::<Vec<_>>()
 | |
|         .join(","))
 | |
| }
 |