Skip to content

Commit bc75185

Browse files
committed
Improve local projects' deps resolving. Update win version file description.
1 parent c529433 commit bc75185

10 files changed

Lines changed: 59 additions & 23 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ project(cppan_client C CXX)
4444
if (NOT DEFINED VERSION_MAJOR)
4545
set(VERSION_MAJOR 0)
4646
set(VERSION_MINOR 2)
47-
set(VERSION_PATCH 0)
47+
set(VERSION_PATCH 1)
4848
endif()
4949

5050
# Output directory settings

src/common/http.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ bool isUrl(const String &s)
342342
s.find("https://") == 0 ||
343343
s.find("ftp://") == 0 ||
344344
s.find("git://") == 0 ||
345+
s.find("ssh://") == 0 ||
345346
0
346347
)
347348
{
@@ -356,8 +357,9 @@ bool isValidSourceUrl(const String &url)
356357
return false;
357358
if (!isUrl(url))
358359
return false;
359-
if (url.find_first_of(R"b('"`\|;$ !@#^*()<>[],)b") != url.npos)
360+
if (url.find_first_of(R"bbb('"`\|;$ !#^*()<>[],)bbb") != url.npos)
360361
return false;
362+
// remove? will fail: ssh://name:[email protected]
361363
if (std::count(url.begin(), url.end(), ':') > 1)
362364
return false;
363365
if (url.find("&&") != url.npos)

src/common/package_store.cpp

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,30 @@ void PackageStore::process(const path &p, Config &root)
104104
// so we assign them to d.second
105105
auto i = packages.find(d.second);
106106
if (i == packages.end())
107-
throw std::runtime_error("Cannot find match for " + d.second.target_name);
108-
bool ido = d.second.flags[pfIncludeDirectoriesOnly] | i->first.flags[pfIncludeDirectoriesOnly]; // remove?
107+
{
108+
// for pretty error message
109+
auto dep = d.second;
110+
dep.createNames();
111+
112+
// we try to resolve again
113+
::resolve_dependencies({ d });
114+
115+
auto irp = resolved_packages.find(d.second);
116+
if (irp == resolved_packages.end())
117+
throw std::runtime_error(c.first.target_name + ": cannot find match for " + dep.target_name);
118+
119+
i = packages.find(irp->second);
120+
if (i == packages.end())
121+
{
122+
throw std::logic_error("resolved package does not exist in packages var! " +
123+
c.first.target_name + ": cannot find match for " + dep.target_name);
124+
}
125+
}
126+
bool ido = d.second.flags[pfIncludeDirectoriesOnly] | i->first.flags[pfIncludeDirectoriesOnly];
127+
bool pvt = d.second.flags[pfPrivateDependency] | i->first.flags[pfPrivateDependency];
109128
d.second.flags = i->first.flags;
110129
d.second.flags.set(pfIncludeDirectoriesOnly, ido);
130+
d.second.flags.set(pfPrivateDependency, pvt);
111131
}
112132
}
113133

@@ -175,7 +195,7 @@ void PackageStore::resolve_dependencies(const Config &c)
175195
if (i != resolved_packages.end())
176196
{
177197
// but still insert as a dependency
178-
packages[c.pkg].dependencies.insert({ i->ppath.toString(), *i });
198+
packages[c.pkg].dependencies.insert({ i->second.ppath.toString(), i->second });
179199
continue;
180200
}
181201

src/common/package_store.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
struct Config;
3434
class ProjectPath;
3535

36-
struct PackageStore
36+
class PackageStore
3737
{
3838
public:
3939
struct PackageConfig
@@ -81,7 +81,7 @@ struct PackageStore
8181
PackageConfigs packages;
8282
std::set<std::unique_ptr<Config>> config_store;
8383

84-
std::set<Package> resolved_packages;
84+
std::map<Package, Package> resolved_packages;
8585
std::map<ProjectPath, path> local_packages;
8686

8787
bool processing = false;
@@ -91,7 +91,7 @@ struct PackageStore
9191
void write_index() const;
9292
void check_deps_changed();
9393

94-
friend struct Resolver;
94+
friend class Resolver;
9595
};
9696

9797
extern PackageStore rd;

src/common/project.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -677,19 +677,19 @@ void Project::load(const yaml &root)
677677

678678
// deps
679679
{
680-
auto read_version = [](auto &dependency, const auto &node)
680+
auto read_version = [](auto &dependency, const String &v)
681681
{
682682
if (!dependency.flags[pfLocalProject])
683683
{
684-
dependency.version = node.template as<String>();
684+
dependency.version = v;
685685
return;
686686
}
687687

688688
if (rd.has_local_package(dependency.ppath))
689689
dependency.version = Version(LOCAL_VERSION_NAME);
690690
else
691691
{
692-
auto nppath = dependency.ppath / node.template as<String>();
692+
auto nppath = dependency.ppath / v;
693693
if (rd.has_local_package(nppath))
694694
{
695695
dependency.ppath = nppath;
@@ -713,6 +713,13 @@ void Project::load(const yaml &root)
713713
dependency.ppath = this->relative_name_to_absolute(d["name"].template as<String>());
714714
if (d["package"].IsDefined())
715715
dependency.ppath = this->relative_name_to_absolute(d["package"].template as<String>());
716+
if (dependency.ppath.empty() && d.size() == 1)
717+
{
718+
dependency.ppath = this->relative_name_to_absolute(d.begin()->first.template as<String>());
719+
if (dependency.ppath.is_loc())
720+
dependency.flags.set(pfLocalProject);
721+
read_version(dependency, d.begin()->second.template as<String>());
722+
}
716723
if (d["local"].IsDefined() && allow_local_dependencies)
717724
{
718725
// WARNING!
@@ -753,14 +760,14 @@ void Project::load(const yaml &root)
753760

754761
// version will be read for local project
755762
// even 2nd arg is not valid
756-
read_version(dependency, d["version"]);
763+
read_version(dependency, d["version"].template as<String>());
757764
}
758765

759766
if (d.IsMap())
760767
{
761768
// read other map fields
762769
if (d["version"].IsDefined())
763-
read_version(dependency, d["version"]);
770+
read_version(dependency, d["version"].template as<String>());
764771
if (d["ref"].IsDefined())
765772
dependency.reference = d["ref"].template as<String>();
766773
if (d["reference"].IsDefined())
@@ -796,7 +803,7 @@ void Project::load(const yaml &root)
796803
dependency.flags.set(pfLocalProject);
797804

798805
if (d.second.IsScalar())
799-
read_version(dependency, d.second);
806+
read_version(dependency, d.second.template as<String>());
800807
else if (d.second.IsMap())
801808
{
802809
read_single_dep(deps, d.second, dependency);
@@ -811,11 +818,9 @@ void Project::load(const yaml &root)
811818
deps[dependency.ppath.toString()] = dependency;
812819
};
813820

814-
Packages dependencies_private;
815-
816821
auto extract_deps = [&dall, this, &get_dep, &read_single_dep](const auto &str, auto &deps)
817822
{
818-
auto &priv = dall[str];
823+
auto priv = dall[str];
819824
if (!priv.IsDefined())
820825
return;
821826
if (priv.IsMap())
@@ -833,6 +838,7 @@ void Project::load(const yaml &root)
833838
}
834839
};
835840

841+
Packages dependencies_private;
836842
extract_deps("private", dependencies_private);
837843
extract_deps("public", dependencies);
838844

src/common/resolver.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,16 @@ void Resolver::resolve_dependencies(const Packages &dependencies)
9595

9696
// mark packages as resolved
9797
for (auto &d : deps)
98-
rd.resolved_packages.insert(d.second);
98+
{
99+
for (auto &dl : download_dependencies_)
100+
{
101+
if (d.second.ppath == dl.second.ppath && dl.second.flags[pfDirectDependency])
102+
{
103+
rd.resolved_packages[d.second] = dl.second;
104+
break;
105+
}
106+
}
107+
}
99108

100109
// other related stuff
101110
read_configs();

src/common/resolver.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#include "dependency.h"
3131
#include "package_store.h"
3232

33-
struct Resolver
33+
class Resolver
3434
{
3535
public:
3636
using Dependencies = DownloadDependency::Dependencies;

src/inserts/branch.rc.in

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ BEGIN
77
BLOCK "040904b0"
88
BEGIN
99
//VALUE "CompanyName", "TODO: <Company name>"
10-
// TODO: replace with file name? or something meaningfull?
11-
VALUE "FileDescription", "@config@ " @PACKAGE_BUILD_CONFIG@
10+
VALUE "FileDescription", PACKAGE_NAME_LAST " - @config@ - " @PACKAGE_BUILD_CONFIG@
1211
VALUE "FileVersion", "@PACKAGE_VERSION@"
1312
//VALUE "InternalName", "@PACKAGE@"
1413
VALUE "LegalCopyright", "Powered by C++ Archive Network"

src/inserts/version.rc.in

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ BEGIN
77
BLOCK "040904b0"
88
BEGIN
99
//VALUE "CompanyName", "TODO: <Company name>"
10-
// TODO: replace with file name? or something meaningfull?
11-
VALUE "FileDescription", "@config@ " @PACKAGE_BUILD_CONFIG@
10+
VALUE "FileDescription", PACKAGE_NAME_LAST " - @config@ - " @PACKAGE_BUILD_CONFIG@
1211
VALUE "FileVersion", "@PACKAGE_VERSION_MAJOR@.@PACKAGE_VERSION_MINOR@.@PACKAGE_VERSION_PATCH@"
1312
//VALUE "InternalName", "@PACKAGE@"
1413
VALUE "LegalCopyright", "Powered by C++ Archive Network"

src/printers/cmake.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,6 +1335,7 @@ endif()
13351335
ctx.increaseIndent();
13361336
ctx.addLine("PRIVATE PACKAGE=\"" + d.ppath.toString() + "\"");
13371337
ctx.addLine("PRIVATE PACKAGE_NAME=\"" + d.ppath.toString() + "\"");
1338+
ctx.addLine("PRIVATE PACKAGE_NAME_LAST=\"" + d.ppath.back() + "\"");
13381339
ctx.addLine("PRIVATE PACKAGE_VERSION=\"" + d.version.toString() + "\"");
13391340
ctx.addLine("PRIVATE PACKAGE_STRING=\"${this}\"");
13401341
ctx.addLine("PRIVATE PACKAGE_BUILD_CONFIG=\"$<CONFIG>\"");

0 commit comments

Comments
 (0)