| 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() |