diff --git a/cutekit/builder.py b/cutekit/builder.py index a21c01f..464ad69 100644 --- a/cutekit/builder.py +++ b/cutekit/builder.py @@ -203,8 +203,10 @@ def build( all = False shell.mkdir(target.builddir) ninjaPath = os.path.join(target.builddir, "build.ninja") - with open(ninjaPath, "w") as f: - gen(f, target, registry) + + if not os.path.exists(ninjaPath): + with open(ninjaPath, "w") as f: + gen(f, target, registry) if components is None: all = True @@ -228,10 +230,9 @@ def build( ) outs = list(map(lambda p: str(p.path), products)) - if all: - shell.exec("ninja", "-f", ninjaPath) - else: - shell.exec("ninja", "-f", ninjaPath, *outs) + + shell.exec("ninja", "-f", ninjaPath, *(outs if not all else [])) + return products diff --git a/cutekit/model.py b/cutekit/model.py index 6cd5a3f..63647dd 100644 --- a/cutekit/model.py +++ b/cutekit/model.py @@ -71,7 +71,7 @@ class Manifest(DataClassJsonMixin): """ Return the directory of the manifest """ - return os.path.dirname(self.path) + return os.path.relpath(os.path.dirname(self.path), Path.cwd()) def subpath(self, path) -> Path: return Path(self.dirname()) / path @@ -121,19 +121,18 @@ class Project(Manifest): @staticmethod def ensure() -> "Project": + """ + Ensure that a project exists in the current directory or any parent directory + and chdir to the root of the project. + """ project = Project.topmost() if project is None: raise RuntimeError( "No project found in this directory or any parent directory" ) + os.chdir(project.dirname()) return project - def chdir(self): - """ - Change the current working directory to the root of the project - """ - os.chdir(self.dirname()) - @staticmethod def at(path: Path) -> Optional["Project"]: projectManifest = Manifest.tryLoad(path / "project")