dds::builder bd; | dds::builder bd; | ||||
dds::sdist_build_params sdist_params; | dds::sdist_build_params sdist_params; | ||||
auto all_file_deps | |||||
= deps_files.Get() // | |||||
auto all_file_deps = deps_files.Get() // | |||||
| ranges::views::transform([&](auto dep_fpath) { | | ranges::views::transform([&](auto dep_fpath) { | ||||
spdlog::info("Reading deps from {}", dep_fpath.string()); | |||||
return dds::package_manifest::load_from_file(dep_fpath).dependencies; | |||||
}) | |||||
spdlog::info("Reading deps from {}", dep_fpath.string()); | |||||
return dds::dependency_manifest::from_file(dep_fpath).dependencies; | |||||
}) | |||||
| ranges::actions::join; | | ranges::actions::join; | ||||
auto cmd_deps = ranges::views::transform(deps.Get(), [&](auto dep_str) { | auto cmd_deps = ranges::views::transform(deps.Get(), [&](auto dep_str) { | ||||
assert(sdist_ptr); | assert(sdist_ptr); | ||||
dds::sdist_build_params deps_params; | dds::sdist_build_params deps_params; | ||||
deps_params.subdir = sdist_ptr->manifest.pkg_id.to_string(); | deps_params.subdir = sdist_ptr->manifest.pkg_id.to_string(); | ||||
spdlog::info("Dependency: {}", sdist_ptr->manifest.pkg_id.to_string()); | |||||
bd.add(*sdist_ptr, deps_params); | bd.add(*sdist_ptr, deps_params); | ||||
} | } | ||||
}); | }); |
str)); | str)); | ||||
} | } | ||||
} | } | ||||
dependency_manifest dependency_manifest::from_file(path_ref fpath) { | |||||
auto kvs = lm::parse_file(fpath); | |||||
dependency_manifest ret; | |||||
lm::read( | |||||
fmt::format("Reading dependencies from '{}'", fpath.string()), | |||||
kvs, | |||||
[&](auto, auto key, auto val) { | |||||
if (key == "Depends") { | |||||
ret.dependencies.push_back(dependency::parse_depends_string(val)); | |||||
return true; | |||||
} | |||||
return false; | |||||
}, | |||||
lm::reject_unknown()); | |||||
return ret; | |||||
} |
#pragma once | #pragma once | ||||
#include <dds/build/plan/full.hpp> | |||||
#include <dds/util/fs.hpp> | |||||
#include <pubgrub/interval.hpp> | #include <pubgrub/interval.hpp> | ||||
#include <semver/range.hpp> | #include <semver/range.hpp> | ||||
static dependency parse_depends_string(std::string_view str); | static dependency parse_depends_string(std::string_view str); | ||||
}; | }; | ||||
/** | |||||
* Represents a dependency listing file, which is a subset of a package manifest | |||||
*/ | |||||
struct dependency_manifest { | |||||
std::vector<dependency> dependencies; | |||||
static dependency_manifest from_file(path_ref where); | |||||
}; | |||||
} // namespace dds | } // namespace dds |
#include "./dist.hpp" | #include "./dist.hpp" | ||||
#include <dds/library/library.hpp> | |||||
#include <dds/temp.hpp> | #include <dds/temp.hpp> | ||||
#include <dds/util/fs.hpp> | #include <dds/util/fs.hpp> | ||||
return self.run([ | return self.run([ | ||||
'build-deps', | 'build-deps', | ||||
f'--toolchain={toolchain or self.default_builtin_toolchain}', | f'--toolchain={toolchain or self.default_builtin_toolchain}', | ||||
f'--catalog={self.catalog_path}', | |||||
f'--repo-dir={self.repo_dir}', | f'--repo-dir={self.repo_dir}', | ||||
f'--out={self.deps_build_dir}', | f'--out={self.deps_build_dir}', | ||||
f'--lmi-path={self.lmi_path}', | f'--lmi-path={self.lmi_path}', |
{ | |||||
"version": 1, | |||||
"packages": { | |||||
"neo-sqlite3": { | |||||
"0.1.0": { | |||||
"git": { | |||||
"url": "https://github.com/vector-of-bool/neo-sqlite3.git", | |||||
"ref": "0.1.0" | |||||
}, | |||||
"depends": {} | |||||
}, | |||||
"0.2.2": { | |||||
"git": { | |||||
"url": "https://github.com/vector-of-bool/neo-sqlite3.git", | |||||
"ref": "0.2.2" | |||||
}, | |||||
"depends": {} | |||||
} | |||||
} | |||||
} | |||||
} |
Name: dummy | |||||
Version: 0.0.0 | |||||
Depends: neo-sqlite3 +0.0.0 | Depends: neo-sqlite3 +0.0.0 |
from tests import dds, DDS | from tests import dds, DDS | ||||
def test_build_deps(dds: DDS): | |||||
def test_build_deps_from_file(dds: DDS): | |||||
assert not dds.deps_build_dir.is_dir() | assert not dds.deps_build_dir.is_dir() | ||||
dds.catalog_import(dds.source_root / 'catalog.json') | |||||
dds.build_deps(['-d', 'deps.dds']) | dds.build_deps(['-d', 'deps.dds']) | ||||
assert dds.deps_build_dir.is_dir() | |||||
assert (dds.deps_build_dir / 'neo-sqlite3@0.1.0').is_dir() | |||||
def test_build_deps_from_cmd(dds: DDS): | |||||
assert not dds.deps_build_dir.is_dir() | |||||
dds.catalog_import(dds.source_root / 'catalog.json') | |||||
dds.build_deps(['neo-sqlite3 =0.1.0']) | |||||
assert (dds.deps_build_dir / 'neo-sqlite3@0.1.0').is_dir() | |||||
def test_multiple_deps(dds: DDS): | |||||
assert not dds.deps_build_dir.is_dir() | |||||
dds.catalog_import(dds.source_root / 'catalog.json') | |||||
dds.build_deps(['neo-sqlite3 ^0.1.0', 'neo-sqlite3 ~0.2.0']) | |||||
assert (dds.deps_build_dir / 'neo-sqlite3@0.2.2').is_dir() |