// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

use failure::{Error, ResultExt};
use sdk::{strip_tool_path, TargetOptions};
use std::path::PathBuf;
use std::process::Command;
use std::time::Duration;
use uname::uname;

#[allow(dead_code)]
pub fn duration_as_milliseconds(duration: &Duration) -> u64 {
    let subsec_ms: u64 = u64::from(duration.subsec_nanos()) / 1_000_000;
    duration.as_secs() * 1000 + subsec_ms
}

pub fn is_mac() -> bool {
    uname().unwrap().sysname == "Darwin"
}

pub fn strip_binary(binary: &PathBuf, target_options: &TargetOptions) -> Result<PathBuf, Error> {
    let file_name = binary.file_name().unwrap();
    let new_file_name = file_name.to_string_lossy().into_owned() + "_stripped";
    let target_path = binary.parent().unwrap().join(new_file_name);
    let strip_result = Command::new(strip_tool_path(target_options)?)
        .arg("-strip-all")
        .arg(binary)
        .arg(&target_path)
        .status()
        .context("strip command failed to start")?;

    if !strip_result.success() {
        bail!("strip failed with error {:?}", strip_result);
    }

    Ok(target_path)
}
