|
@@ -13,6 +13,7 @@ namespace Usm {
|
|
|
INVALID_PACKAGE,
|
|
|
INVALID_PATH_BASE,
|
|
|
INVALID_FILE_PATH,
|
|
|
+ INVALID_FLAG
|
|
|
}
|
|
|
|
|
|
public class Manifest {
|
|
@@ -23,6 +24,7 @@ namespace Usm {
|
|
|
public Dictionary<ResourceRef, ManifestFile> provides { get; set; }
|
|
|
public Dependencies dependencies { get; set; }
|
|
|
public Executables executables { get; set; }
|
|
|
+ public Vector<ManifestFlag> flags { get; set; }
|
|
|
|
|
|
public string? markdown_path { get; set; }
|
|
|
public string? url { get; set; }
|
|
@@ -141,17 +143,22 @@ namespace Usm {
|
|
|
return proc;
|
|
|
}
|
|
|
|
|
|
- public Subprocess? run_install(string build_path, string install_path, InstallType type, SubprocessFlags flags) throws Error {
|
|
|
+ public Subprocess? run_install(string build_path, string install_path, Paths paths, InstallType type, SubprocessFlags flags) throws Error {
|
|
|
if(executables.install == null) {
|
|
|
return null;
|
|
|
}
|
|
|
var path = Path.build_filename(Environment.get_current_dir(), executables.install);
|
|
|
+
|
|
|
+ // Override destination environment variable
|
|
|
+ var new_paths = paths.clone();
|
|
|
+ new_paths.destination = install_path;
|
|
|
+ new_paths.set_envs();
|
|
|
var proc = new Subprocess.newv(new string[] { path, build_path, install_path, type.to_string() }, flags);
|
|
|
return proc;
|
|
|
}
|
|
|
|
|
|
public Subprocess? run_post_install(string build_path, InstallType type, SubprocessFlags flags) throws Error {
|
|
|
- if(executables.install == null) {
|
|
|
+ if(executables.post_install == null) {
|
|
|
return null;
|
|
|
}
|
|
|
var path = Path.build_filename(Environment.get_current_dir(), executables.post_install);
|
|
@@ -212,7 +219,7 @@ namespace Usm {
|
|
|
default:
|
|
|
assert_not_reached();
|
|
|
}
|
|
|
- var src = File.new_build_filename(build_path, resource.value.path);
|
|
|
+ var src = File.new_build_filename(base_path, resource.value.path);
|
|
|
var dest = File.new_for_path(path);
|
|
|
|
|
|
if(!src.query_exists()) {
|
|
@@ -346,4 +353,31 @@ namespace Usm {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public enum ManifestFlag {
|
|
|
+ BUILD_IN_SOURCE_TREE,
|
|
|
+ SET_MANIFEST_PROPERTY_ENVS;
|
|
|
+
|
|
|
+ public string to_string() {
|
|
|
+ switch (this) {
|
|
|
+ case ManifestFlag.BUILD_IN_SOURCE_TREE:
|
|
|
+ return "buildInSourceTree";
|
|
|
+ case ManifestFlag.SET_MANIFEST_PROPERTY_ENVS:
|
|
|
+ return "setManifestPropertyEnvs";
|
|
|
+ default:
|
|
|
+ assert_not_reached();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static ManifestFlag from_string(string str) throws ManifestError {
|
|
|
+ switch (str) {
|
|
|
+ case "buildInSourceTree":
|
|
|
+ return ManifestFlag.BUILD_IN_SOURCE_TREE;
|
|
|
+ case "setManifestPropertyEnvs":
|
|
|
+ return ManifestFlag.SET_MANIFEST_PROPERTY_ENVS;
|
|
|
+ default:
|
|
|
+ throw new ManifestError.INVALID_FLAG(@"Unknown flag \"$str\".");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|