Correctly take into account potential position of cargo command in y.sh
This commit is contained in:
parent
2e52b08800
commit
ec94074817
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::ffi::OsStr;
|
use std::ffi::OsStr;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
fn args() -> Result<Option<Vec<String>>, String> {
|
fn args() -> Result<Option<Vec<String>>, String> {
|
||||||
// We skip the binary and the "cargo" option.
|
// We skip the binary and the "cargo" option.
|
||||||
@ -42,18 +43,31 @@ pub fn run() -> Result<(), String> {
|
|||||||
// We first need to go to the original location to ensure that the config setup will go as
|
// We first need to go to the original location to ensure that the config setup will go as
|
||||||
// expected.
|
// expected.
|
||||||
let current_dir = std::env::current_dir()
|
let current_dir = std::env::current_dir()
|
||||||
|
.and_then(|path| path.canonicalize())
|
||||||
.map_err(|error| format!("Failed to get current directory path: {:?}", error))?;
|
.map_err(|error| format!("Failed to get current directory path: {:?}", error))?;
|
||||||
let current_exe = std::env::current_exe()
|
let current_exe = std::env::current_exe()
|
||||||
|
.and_then(|path| path.canonicalize())
|
||||||
.map_err(|error| format!("Failed to get current exe path: {:?}", error))?;
|
.map_err(|error| format!("Failed to get current exe path: {:?}", error))?;
|
||||||
let parent_dir = match current_exe.parent() {
|
let mut parent_dir = current_exe
|
||||||
Some(parent) => parent,
|
.components()
|
||||||
None => {
|
.map(|comp| comp.as_os_str())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
// We run this script from "build_system/target/release/y", so we need to remove these elements.
|
||||||
|
for to_remove in &["y", "release", "target", "build_system"] {
|
||||||
|
if parent_dir
|
||||||
|
.last()
|
||||||
|
.map(|part| part == to_remove)
|
||||||
|
.unwrap_or(false)
|
||||||
|
{
|
||||||
|
parent_dir.pop();
|
||||||
|
} else {
|
||||||
return Err(format!(
|
return Err(format!(
|
||||||
"Cannot get parent of current executable path `{}`",
|
"Build script not executed from `build_system/target/release/y` (in path {})",
|
||||||
current_exe.display()
|
current_exe.display(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
let parent_dir = PathBuf::from(parent_dir.join(&OsStr::new("/")));
|
||||||
std::env::set_current_dir(&parent_dir).map_err(|error| {
|
std::env::set_current_dir(&parent_dir).map_err(|error| {
|
||||||
format!(
|
format!(
|
||||||
"Failed to go to `{}` folder: {:?}",
|
"Failed to go to `{}` folder: {:?}",
|
||||||
|
6
y.sh
6
y.sh
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
echo "[BUILD] build system" 1>&2
|
echo "[BUILD] build system" 1>&2
|
||||||
cd build_system
|
pushd $(dirname "$0")/build_system > /dev/null
|
||||||
cargo build --release
|
cargo build --release
|
||||||
cd ..
|
popd > /dev/null
|
||||||
./build_system/target/release/y $@
|
$(dirname "$0")/build_system/target/release/y $@
|
||||||
|
Loading…
Reference in New Issue
Block a user