use clap::Parser;
use platforms::Platform;
use std::collections::HashMap;
use std::path::PathBuf;
impl Args {
pub(crate) fn get() -> Self {
let mut args = crate::cli::Args::parse();
if !(args.build_c || args.build_dotnet || args.build_java) {
args.build_c = true;
args.build_dotnet = true;
args.build_java = true;
}
args
}
}
use crate::backend::dotnet::TargetFramework;
use serde::Deserialize;
#[derive(Deserialize)]
pub(crate) struct EnabledLanguages {
pub(crate) cpp: bool,
pub(crate) dotnet: bool,
pub(crate) java: bool,
}
#[derive(Deserialize)]
pub(crate) struct PackageOptions {
targets: HashMap<String, EnabledLanguages>,
}
impl PackageOptions {
pub(crate) fn package_dotnet(&self, platform: &Platform) -> bool {
self.targets
.get(platform.target_triple)
.map(|x| x.dotnet)
.unwrap_or(false)
}
pub(crate) fn package_cpp(&self, platform: &Platform) -> bool {
self.targets
.get(platform.target_triple)
.map(|x| x.cpp)
.unwrap_or(false)
}
pub(crate) fn package_java(&self, platform: &Platform) -> bool {
self.targets
.get(platform.target_triple)
.map(|x| x.java)
.unwrap_or(false)
}
}
#[derive(Parser)]
#[command(author, version, about, long_about = None)]
pub(crate) struct Args {
#[arg(long = "c", default_value_t = false)]
pub(crate) build_c: bool,
#[arg(long = "dotnet", default_value_t = false)]
pub(crate) build_dotnet: bool,
#[arg(long = "java", default_value_t = false)]
pub(crate) build_java: bool,
#[arg(long = "artifact-dir", short = 'a')]
pub(crate) artifact_dir: Option<PathBuf>,
#[arg(long = "target", short = 'r')]
pub(crate) target_triple: Option<String>,
#[arg(value_enum, short = 't', long = "target-dotnet-framework", default_value_t = TargetFramework::NetStandard2_0)]
pub(crate) target_framework: TargetFramework,
#[arg(long = "doxygen", default_value_t = false)]
pub(crate) generate_doxygen: bool,
#[arg(long = "no-tests", default_value_t = false)]
pub(crate) no_tests: bool,
#[arg(long = "package", short = 'k')]
pub(crate) package_dir: Option<PathBuf>,
#[arg(long = "options", short = 'o')]
pub(crate) package_options: Option<PathBuf>,
#[arg(short = 'f', long = "extra-files")]
pub(crate) extra_files: Vec<PathBuf>,
}