@@ -0,0 +1,79 @@ | |||
{ | |||
"version": 1, | |||
"packages": { | |||
"range-v3": { | |||
"0.10.0": { | |||
"git": { | |||
"url": "https://github.com/ericniebler/range-v3.git", | |||
"ref": "0.10.0", | |||
"auto-lib": "Niebler/range-v3" | |||
}, | |||
"depends": {} | |||
} | |||
}, | |||
"spdlog": { | |||
"1.4.2": { | |||
"git": { | |||
"url": "https://github.com/gabime/spdlog.git", | |||
"ref": "v1.4.2", | |||
"auto-lib": "spdlog/spdlog" | |||
}, | |||
"depends": {} | |||
} | |||
}, | |||
"nlohmann-json": { | |||
"3.7.1": { | |||
"git": { | |||
"url": "https://github.com/vector-of-bool/json.git", | |||
"ref": "dds/3.7.1" | |||
}, | |||
"depends": {} | |||
} | |||
}, | |||
"ms-wil": { | |||
"2019.11.10": { | |||
"git": { | |||
"url": "https://github.com/vector-of-bool/wil.git", | |||
"ref": "dds/2019.11.10" | |||
}, | |||
"depends": {} | |||
} | |||
}, | |||
"neo-buffer": { | |||
"0.1.0": { | |||
"git": { | |||
"url": "https://github.com/vector-of-bool/neo-buffer.git", | |||
"ref": "0.1.0" | |||
}, | |||
"depends": {} | |||
} | |||
}, | |||
"neo-sqlite3": { | |||
"0.2.2": { | |||
"git": { | |||
"url": "https://github.com/vector-of-bool/neo-sqlite3.git", | |||
"ref": "0.2.2" | |||
}, | |||
"depends": {} | |||
} | |||
}, | |||
"semver": { | |||
"0.2.1": { | |||
"git": { | |||
"url": "https://github.com/vector-of-bool/semver.git", | |||
"ref": "0.2.1" | |||
}, | |||
"depends": {} | |||
} | |||
}, | |||
"pubgrub": { | |||
"0.1.2": { | |||
"git": { | |||
"url": "https://github.com/vector-of-bool/pubgrub.git", | |||
"ref": "0.1.2" | |||
}, | |||
"depends": {} | |||
} | |||
} | |||
} | |||
} |
@@ -1,4 +1,3 @@ | |||
Remote-Package: range-v3 0.9.1; git url=https://github.com/ericniebler/range-v3.git ref=0.9.1 auto=Niebler/range-v3 | |||
Remote-Package: range-v3 0.10.0; git url=https://github.com/ericniebler/range-v3.git ref=0.10.0 auto=Niebler/range-v3 | |||
Remote-Package: spdlog 1.4.2; git url=https://github.com/gabime/spdlog.git ref=v1.4.2 auto=spdlog/spdlog | |||
@@ -483,11 +483,6 @@ struct cli_build { | |||
catalog_path_flag cat_path{cmd}; | |||
repo_path_flag repo_path{cmd}; | |||
args::Flag do_download_deps{cmd, | |||
"download-deps", | |||
"Download any missing dependencies from the catalog", | |||
{"download-deps"}}; | |||
args::Flag no_tests{cmd, "no-tests", "Do not build and run tests", {"no-tests"}}; | |||
args::Flag no_apps{cmd, "no-apps", "Do not compile and link applications", {"no-apps"}}; | |||
args::Flag no_warnings{cmd, "no-warings", "Disable build warnings", {"no-warnings"}}; | |||
@@ -531,104 +526,30 @@ struct cli_build { | |||
if (lm_index) { | |||
params.existing_lm_index = lm_index.Get(); | |||
} else { | |||
// Download and build dependencies | |||
// Build the dependencies | |||
auto cat = cat_path.open(); | |||
auto solved_deps = cat.solve_requirements(man.dependencies); | |||
params.dep_sdists = dds::repository::with_repository( // | |||
this->repo_path.Get(), | |||
dds::repo_flags::read | dds::repo_flags::create_if_absent, | |||
[&](dds::repository repo) { return repo.solve(man.dependencies); }); | |||
} | |||
dds::build(params, man); | |||
return 0; | |||
} | |||
}; | |||
/* | |||
######## ######## ######## ###### | |||
## ## ## ## ## ## ## | |||
## ## ## ## ## ## | |||
## ## ###### ######## ###### | |||
## ## ## ## ## | |||
## ## ## ## ## ## | |||
######## ######## ## ###### | |||
*/ | |||
struct cli_deps { | |||
cli_base& base; | |||
args::Command cmd{base.cmd_group, "deps", "Obtain/inspect/build deps for the project"}; | |||
common_flags _flags{cmd}; | |||
common_project_flags project{cmd}; | |||
args::Group deps_group{cmd, "Subcommands"}; | |||
dds::package_manifest load_package_manifest() { | |||
return dds::package_manifest::load_from_file(project.root.Get() / "package.dds"); | |||
} | |||
struct { | |||
cli_deps& parent; | |||
args::Command cmd{parent.deps_group, "ls", "List project dependencies"}; | |||
common_flags _common{cmd}; | |||
int run() { | |||
const auto man = parent.load_package_manifest(); | |||
for (const auto& dep : man.dependencies) { | |||
std::cout << dep.name << " " << dep.versions << '\n'; | |||
} | |||
return 0; | |||
} | |||
} ls{*this}; | |||
struct { | |||
cli_deps& parent; | |||
args::Command cmd{parent.deps_group, | |||
"get", | |||
"Ensure we have local copies of the project dependencies"}; | |||
common_flags _common{cmd}; | |||
repo_path_flag repo_where{cmd}; | |||
catalog_path_flag catalog_path{cmd}; | |||
int run() { | |||
auto man = parent.load_package_manifest(); | |||
auto catalog = catalog_path.open(); | |||
bool failed = false; | |||
auto solved_deps = catalog.solve_requirements(man.dependencies); | |||
dds::repository::with_repository( // | |||
repo_where.Get(), | |||
dds::repo_flags::write_lock | dds::repo_flags::create_if_absent, | |||
[&](dds::repository repo) { | |||
// Download dependencies | |||
for (const dds::package_id& pk : solved_deps) { | |||
auto exists = !!repo.find(pk); | |||
if (!exists) { | |||
spdlog::info("Pull remote: {}", pk.to_string()); | |||
auto opt_pkg = catalog.get(pk); | |||
if (opt_pkg) { | |||
auto tsd = dds::get_package_sdist(*opt_pkg); | |||
repo.add_sdist(tsd.sdist, dds::if_exists::ignore); | |||
} else { | |||
spdlog::error("No remote listing for {}", pk.to_string()); | |||
failed = true; | |||
} | |||
} else { | |||
spdlog::info("Okay: {}", pk.to_string()); | |||
spdlog::info("Download dependency: {}", pk.to_string()); | |||
auto opt_pkg = cat.get(pk); | |||
assert(opt_pkg); | |||
auto tsd = dds::get_package_sdist(*opt_pkg); | |||
repo.add_sdist(tsd.sdist, dds::if_exists::throw_exc); | |||
} | |||
} | |||
return repo.solve(man.dependencies); | |||
}); | |||
if (failed) { | |||
return 1; | |||
} | |||
return 0; | |||
} | |||
} get{*this}; | |||
int run() { | |||
if (ls.cmd) { | |||
return ls.run(); | |||
} else if (get.cmd) { | |||
return get.run(); | |||
} | |||
std::terminate(); | |||
dds::build(params, man); | |||
return 0; | |||
} | |||
}; | |||
@@ -655,7 +576,6 @@ int main(int argc, char** argv) { | |||
cli_build build{cli}; | |||
cli_sdist sdist{cli}; | |||
cli_repo repo{cli}; | |||
cli_deps deps{cli}; | |||
cli_catalog catalog{cli}; | |||
try { | |||
parser.ParseCLI(argc, argv); | |||
@@ -680,8 +600,6 @@ int main(int argc, char** argv) { | |||
return sdist.run(); | |||
} else if (repo.cmd) { | |||
return repo.run(); | |||
} else if (deps.cmd) { | |||
return deps.run(); | |||
} else if (catalog.cmd) { | |||
return catalog.run(); | |||
} else { |
@@ -95,6 +95,7 @@ void repository::add_sdist(const sdist& sd, if_exists ife_action) { | |||
fs::remove_all(sd_dest); | |||
} | |||
fs::rename(tmp_copy, sd_dest); | |||
_sdists.insert(sdist::from_directory(sd_dest)); | |||
spdlog::info("Source distribution '{}' successfully exported", sd.manifest.pkg_id.to_string()); | |||
} | |||
@@ -69,17 +69,6 @@ class DDS: | |||
def project_dir_arg(self) -> str: | |||
return f'--project-dir={self.source_root}' | |||
def deps_ls(self) -> subprocess.CompletedProcess: | |||
return self.run(['deps', 'ls']) | |||
def deps_get(self) -> subprocess.CompletedProcess: | |||
return self.run([ | |||
'deps', | |||
'get', | |||
f'--catalog={self.catalog_path}', | |||
self.repo_dir_arg, | |||
]) | |||
def deps_build(self, *, | |||
toolchain: str = None) -> subprocess.CompletedProcess: | |||
return self.run([ | |||
@@ -101,12 +90,13 @@ class DDS: | |||
return self.run([ | |||
'build', | |||
f'--out={self.build_dir}', | |||
f'--toolchain={toolchain or self.default_builtin_toolchain}', | |||
f'--catalog={self.catalog_path}', | |||
f'--repo-dir={self.repo_dir}', | |||
['--no-tests'] if not tests else [], | |||
['--no-apps'] if not apps else [], | |||
['--no-warnings'] if not warnings else [], | |||
['--export'] if export else [], | |||
f'--toolchain={toolchain or self.default_builtin_toolchain}', | |||
f'--repo-dir={self.repo_dir}', | |||
self.project_dir_arg, | |||
]) | |||
@@ -9,23 +9,17 @@ dds_conf = dds_fixture_conf( | |||
) | |||
@dds_conf | |||
def test_ls(dds: DDS): | |||
dds.run(['deps', 'ls']) | |||
@dds_conf | |||
def test_deps_build(dds: DDS): | |||
dds.catalog_import(dds.source_root / 'catalog.json') | |||
assert not dds.repo_dir.exists() | |||
dds.deps_get() | |||
assert dds.repo_dir.exists(), '`deps get` did not generate a repo directory' | |||
dds.build() | |||
assert dds.repo_dir.exists(), '`Building` did not generate a repo directory' | |||
@dds_fixture_conf_1('use-remote') | |||
def test_use_nlohmann_json_remote(dds: DDS): | |||
dds.catalog_import(dds.source_root / 'catalog.json') | |||
dds.deps_get() | |||
dds.build(apps=True) | |||
app_exe = dds.build_dir / f'app{dds.exe_suffix}' |
@@ -5,7 +5,6 @@ from dds_ci import proc | |||
def test_get_build_use_spdlog(dds: DDS): | |||
dds.catalog_import(dds.source_root / 'catalog.json') | |||
dds.deps_get() | |||
tc_fname = 'gcc.tc.dds' if 'gcc' in dds.default_builtin_toolchain else 'msvc.tc.dds' | |||
tc = str(dds.test_dir / tc_fname) | |||
dds.build(toolchain=tc, apps=True) |
@@ -98,8 +98,8 @@ def main(argv: Sequence[str]) -> int: | |||
else: | |||
assert False, 'impossible' | |||
ci_repo_dir = paths.BUILD_DIR / '_ci-repo' | |||
if not opts.skip_deps: | |||
ci_repo_dir = paths.BUILD_DIR / '_ci-repo' | |||
if ci_repo_dir.exists(): | |||
shutil.rmtree(ci_repo_dir) | |||
self_deps_get(paths.PREBUILT_DDS, ci_repo_dir) | |||
@@ -112,10 +112,18 @@ def main(argv: Sequence[str]) -> int: | |||
dds_flags=['--warnings', '--tests', '--apps']) | |||
print('Main build PASSED!') | |||
cat_path = paths.BUILD_DIR / 'catalog.db' | |||
proc.check_run([ | |||
paths.CUR_BUILT_DDS, | |||
'catalog', | |||
'import', | |||
('--catalog', cat_path), | |||
('--json', paths.PROJECT_ROOT / 'catalog.json'), | |||
]) | |||
self_build( | |||
paths.CUR_BUILT_DDS, | |||
toolchain=opts.toolchain, | |||
dds_flags=[f'--repo-dir={ci_repo_dir}']) | |||
dds_flags=[f'--repo-dir={ci_repo_dir}', f'--catalog={cat_path}']) | |||
print('Bootstrap test PASSED!') | |||
return pytest.main([ |