use anyhow::Error;
use regex::Regex;
use std::{collections::BTreeSet, io};

fn parse(linker_line: &str) -> (BTreeSet<String>, BTreeSet<String>) {
    let lib_path_re = Regex::new(r#"(-Lnative=(\S+))"#).unwrap();
    let captures = lib_path_re.captures_iter(linker_line);
    let lib_paths: BTreeSet<String> = captures.map(|capture| capture[2].to_string()).collect();
    let libs_re = Regex::new(r#"(\s+-l(\S+))"#).unwrap();
    let libs_captures = libs_re.captures_iter(linker_line);
    let libs: BTreeSet<String> = libs_captures.map(|capture| capture[2].to_string()).collect();
    (lib_paths, libs)
}

pub fn extract_linkage_information() -> Result<(), Error> {
    let mut linker_text = String::new();
    io::stdin().read_line(&mut linker_text)?;
    let (lib_paths, libs) = parse(&linker_text);
    println!("library_search_paths = {:#?}", lib_paths);
    println!("additional_static_libraries = {:#?}", libs);
    Ok(())
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn test_link_parsing() {
        let (lib_paths, libs) = parse(LINKER_LINE);
        assert!(lib_paths.len() > 0);
        assert!(libs.len() > 0);
    }

    const LINKER_LINE: &'static str = r#"[1/128] mkdir -p ./exe.unstripped &&  ../../prebuilt/third_party/rust/mac-x64/bin/rustc --color=always --crate-name spinning_square ../../src/lib/ui/carnelian/examples/spinning_square.rs --crate-type bin --emit=dep-info=./spinning_square.d,link -Zdep-info-omit-d-target -C link-args=--Map="./exe.unstripped/spinning_square.map" --cfg=__rust_toolchain=\"g7iBlBv8Ea_O1W0mxabel89X_OWItx5s22pNG6Y1JQ8C\" --cfg=rust_panic=\"abort\" -L /Users/rob/projects/fuchsia/out/core.x64-release/gen/build/config/fuchsia/lib -Clinker=/Users/rob/projects/fuchsia/prebuilt/third_party/clang/mac-x64/bin/lld -Clink-arg=--sysroot=/Users/rob/projects/fuchsia/out/core.x64-release/gen/build/config/fuchsia -Clink-arg=-L/Users/rob/projects/fuchsia/out/core.x64-release/gen/build/config/fuchsia/lib -Clink-arg=-L/Users/rob/projects/fuchsia/prebuilt/third_party/clang/mac-x64/lib/clang/11.0.0/x86_64-fuchsia/lib -Clink-arg=--pack-dyn-relocs=relr -Clink-arg=-dynamic-linker=ld.so.1 -Clink-arg=--icf=all --remap-path-prefix /Users/rob/projects/fuchsia/=../../ -Copt-level=z -Cdebuginfo=2 --edition=2018 -Zallow-features= --target x86_64-fuchsia --cap-lints=warn -Wrust-2018-idioms -Dwarnings -Clink-args=-zstack-size=0x200000 -Cpanic=abort -Cforce-unwind-tables=yes -Zpanic_abort_tests -o "./exe.unstripped/spinning_square" -Ldependency=obj/garnet/examples/fidl/services -Ldependency=obj/src/lib/fidl/rust/fidl -Ldependency=obj/src/lib/zerocopy -Ldependency=host_x64 -Ldependency=obj/third_party/rust_crates -Ldependency=obj/src/lib/zircon/rust -Ldependency=obj/src/lib/fuchsia-async -Ldependency=obj/src/lib/fuchsia-system-alloc -Ldependency=obj/sdk/fidl/fuchsia.ui.input -Ldependency=obj/sdk/fidl/fuchsia.ui.input2 -Ldependency=obj/sdk/fidl/fuchsia.ui.views -Ldependency=obj/zircon/vdso/zx -Ldependency=obj/sdk/fidl/fuchsia.ui.input3 -Ldependency=obj/sdk/fidl/fuchsia.input -Ldependency=obj/src/lib/trace/rust -Ldependency=obj/src/lib/cstr -Ldependency=obj/src/lib/ui/carnelian -Ldependency=obj/sdk/fidl/fuchsia.fonts -Ldependency=obj/sdk/fidl/fuchsia.intl -Ldependency=obj/sdk/fidl/fuchsia.mem -Ldependency=obj/sdk/fidl/fuchsia.hardware.input -Ldependency=obj/sdk/fidl/fuchsia.images -Ldependency=obj/sdk/fidl/fuchsia.sysmem -Ldependency=obj/sdk/fidl/fuchsia.input.report -Ldependency=obj/sdk/fidl/fuchsia.math -Ldependency=obj/sdk/fidl/fuchsia.ui.app -Ldependency=obj/sdk/fidl/fuchsia.sys -Ldependency=obj/sdk/fidl/fuchsia.ui.gfx -Ldependency=obj/sdk/fidl/fuchsia.ui.policy -Ldependency=obj/sdk/fidl/fuchsia.ui.scenic -Ldependency=obj/sdk/fidl/fuchsia.scenic.scheduling -Ldependency=obj/src/graphics/lib/compute/mold -Ldependency=obj/src/graphics/lib/compute/surpass -Ldependency=obj/src/graphics/lib/compute/spinel-rs-sys -Ldependency=obj/src/lib/fdio/rust -Ldependency=obj/sdk/fidl/fuchsia.device -Ldependency=obj/sdk/fidl/fuchsia.device.manager -Ldependency=obj/src/lib/fuchsia-runtime -Ldependency=obj/src/lib/fuchsia-component -Ldependency=obj/garnet/lib/rust/io_util -Ldependency=obj/sdk/fidl/fuchsia.io -Ldependency=obj/sdk/fidl/fuchsia.sys2 -Ldependency=obj/sdk/fidl/fuchsia.component -Ldependency=obj/sdk/fidl/fuchsia.data -Ldependency=obj/sdk/fidl/fuchsia.io2 -Ldependency=obj/sdk/fidl/fuchsia.url -Ldependency=obj/src/lib/mapped-vmo -Ldependency=obj/src/lib/shared-buffer -Ldependency=obj/src/lib/syslog/rust -Ldependency=obj/sdk/fidl/fuchsia.logger -Ldependency=obj/src/lib/ui/fuchsia-framebuffer -Ldependency=obj/sdk/fidl/fuchsia.hardware.display -Ldependency=obj/src/lib/ui/fuchsia-scenic -Ldependency=obj/src/lib/ui/input-synthesis -Lnative=x64-shared -Lnative=obj/zircon/system/ulib/trace-provider -Lnative=obj/zircon/public/lib/async -Lnative=obj/zircon/public/lib/fit -Lnative=obj/zircon/public/lib/zx -Lnative=obj/zircon/public/lib/fidl -Lnative=obj/zircon/public/lib/fidl_base -Lnative=obj/zircon/public/lib/async-cpp -Lnative=obj/src/graphics/lib/compute/common -Lnative=obj/src/graphics/lib/compute/common/vk -Lnative=obj/src/graphics/lib/compute/hotsort/platforms/vk -Lnative=obj/src/graphics/lib/compute/spinel -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/amd/gcn3 -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/amd/gcn3/hotsort -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/arm/bifrost8 -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/arm/bifrost8/hotsort -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/intel/gen8 -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/intel/gen8/hotsort -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/nvidia/sm50 -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/nvidia/sm50/hotsort -ltrace-engine -lrust-trace-provider -ltrace-provider-with-fdio -lasync -lfit -lzx -lfdio -lfidl -lfidl_base -lasync-cpp -lasync-default -lsyslog -lcompute_common -lcompute_common_vk -lvulkan -lhotsort_vk -lspinel -lspinel_vk -lspinel_vk_find_target -lspinel_vk_spn_amd_gcn3 -lhotsort_vk_hs_amd_gcn3_u64 -lspinel_vk_spn_arm_bifrost8 -lhotsort_vk_hs_arm_bifrost8_u64 -lspinel_vk_spn_intel_gen8 -lhotsort_vk_hs_intel_gen8_u64 -lspinel_vk_spn_nvidia_sm50 -lhotsort_vk_hs_nvidia_sm35_u64 -Lnative=gen/zircon/system/ulib/fdio -Lnative=gen/zircon/system/ulib/trace-engine -Lnative=gen/zircon/system/ulib/syslog -lzircon --extern fidl_fidl_examples_echo=obj/garnet/examples/fidl/services/libfidl_fidl_examples_echo.rlib --extern fidl_fuchsia_ui_input=obj/sdk/fidl/fuchsia.ui.input/libfidl_fuchsia_ui_input.rlib --extern fidl=obj/src/lib/fidl/rust/fidl/libfidl.rlib --extern fuchsia_async=obj/src/lib/fuchsia-async/libfuchsia_async.rlib --extern fuchsia_trace=obj/src/lib/trace/rust/libfuchsia_trace.rlib --extern fuchsia_trace_provider=obj/src/lib/trace/rust/libfuchsia_trace_provider.rlib --extern carnelian=obj/src/lib/ui/carnelian/libcarnelian.rlib --extern fuchsia_scenic=obj/src/lib/ui/fuchsia-scenic/libfuchsia_scenic.rlib --extern fuchsia_zircon=obj/src/lib/zircon/rust/libfuchsia_zircon.rlib --extern anyhow=obj/third_party/rust_crates/libanyhow-7791292ca6d4cc50.rlib --extern euclid=obj/third_party/rust_crates/libeuclid-4687831aa0edfe47.rlib --extern futures=obj/third_party/rust_crates/libfutures-db6a965543caf277.rlib --extern thiserror=obj/third_party/rust_crates/libthiserror-eafe64cb9fc967f6.rlib && ../../prebuilt/third_party/clang/mac-x64/bin/llvm-objcopy --strip-sections "./exe.unstripped/spinning_square" "./spinning_square" && ../../prebuilt/tools/buildidtool/mac-x64/buildidtool -build-id-dir .build-id -stamp "./spinning_square.build-id.stamp" -entry "=./spinning_square" -entry ".debug=./exe.unstripped/spinning_square"
"#;
}
