Skip to content

Commit f10d667

Browse files
committed
Improve linux build. Improve inputs. Database cleanups. Fix LinkDirectories additions.
1 parent f59b54a commit f10d667

34 files changed

Lines changed: 305 additions & 227 deletions

src/sw/builder/command.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ struct SW_BUILDER_API CommandSequence : Command
280280
template <class C = Command, class ... Args>
281281
std::shared_ptr<C> addCommand(Args && ... args)
282282
{
283-
auto c = std::make_shared<C>(swctx, std::forward<Args>(args)...);
283+
auto c = std::make_shared<C>(getContext(), std::forward<Args>(args)...);
284284
commands.push_back(c);
285285
return c;
286286
}

src/sw/builder/execution_plan_serialization_boost.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ SERIALIZATION_SPLIT_END
6262

6363
#define SERIALIZATION_TYPE ::sw::builder::Command::Argument
6464
SERIALIZATION_BEGIN_UNIFIED
65-
ar & a.toString();
65+
ar & v.toString();
6666
SERIALIZATION_UNIFIED_END
6767

6868
////////////////////////////////////////

src/sw/client/command/build.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,15 +237,18 @@ static void applySettingsFromFile(sw::TargetSettings &s, const path &fn)
237237
sw::TargetSettings createSettings(const sw::SwContext &swctx)
238238
{
239239
auto s = swctx.getHostSettings();
240-
s["host"] = swctx.getHostSettings();
240+
//s["host"] = swctx.getHostSettings();
241241
return s;
242242
}
243243

244244
std::vector<sw::TargetSettings> createSettings(const sw::SwBuild &b)
245245
{
246246
auto initial_settings = createSettings(b.getContext());
247247
if (!host_settings_file.empty())
248+
{
249+
SW_UNIMPLEMENTED;
248250
applySettingsFromFile(initial_settings["host"].getSettings(), host_settings_file);
251+
}
249252

250253
std::vector<sw::TargetSettings> settings;
251254
settings.push_back(initial_settings);

src/sw/client/command/commands.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@
2424
#include <sw/core/sw_context.h>
2525
#include <sw/manager/package_data.h>
2626

27+
namespace sw
28+
{
29+
30+
struct StorageWithPackagesDatabase;
31+
32+
}
33+
2734
#define SUBCOMMAND_DECL(n) void cli_##n()
2835
#define SUBCOMMAND_DECL2(n) void cli_##n(sw::SwContext &swctx)
2936
#define SUBCOMMAND(n, d) SUBCOMMAND_DECL(n); SUBCOMMAND_DECL2(n);
@@ -40,5 +47,7 @@ std::pair<sw::SourceDirMap, const sw::Input &> fetch(sw::SwContext &);
4047
sw::PackageDescriptionMap getPackages(const sw::SwBuild &, const sw::SourceDirMap & = {});
4148
sw::TargetSettings createSettings(const sw::SwContext &);
4249
std::vector<sw::TargetSettings> createSettings(const sw::SwBuild &);
43-
std::unique_ptr<sw::SwBuild> setBuildArgsAndCreateBuildAndPrepare(sw::SwContext &, const Strings &build_args);
50+
std::unique_ptr<sw::SwBuild> setBuildArgsAndCreateBuildAndPrepare(sw::SwContext &, const Strings &inputs);
4451
std::unique_ptr<sw::SwBuild> createBuildAndPrepare(sw::SwContext &);
52+
std::map<sw::PackagePath, sw::VersionSet> getMatchingPackages(const sw::StorageWithPackagesDatabase &, const sw::UnresolvedPackage &);
53+
sw::PackageIdSet getMatchingPackagesSet(const sw::StorageWithPackagesDatabase &, const sw::UnresolvedPackage &);

src/sw/client/command/list.cpp

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,67 @@
2121
#include <sw/manager/database.h>
2222
#include <sw/manager/storage.h>
2323

24+
#include <primitives/log.h>
25+
DECLARE_STATIC_LOGGER(logger, "list");
26+
2427
static ::cl::opt<String> list_arg(::cl::Positional, ::cl::desc("Package regex to list"), ::cl::init("."), ::cl::sub(subcommand_list));
2528

29+
std::map<sw::PackagePath, sw::VersionSet> getMatchingPackages(const sw::StorageWithPackagesDatabase &s, const sw::UnresolvedPackage &u)
30+
{
31+
auto &db = s.getPackagesDatabase();
32+
33+
auto ppaths = db.getMatchingPackages(u.getPath().toString());
34+
if (ppaths.empty())
35+
return {};
36+
37+
std::map<sw::PackagePath, sw::VersionSet> r;
38+
for (auto &ppath : ppaths)
39+
{
40+
auto v1 = db.getVersionsForPackage(ppath);
41+
for (auto &v : v1)
42+
{
43+
if (u.getRange().hasVersion(v))
44+
r[ppath].insert(v);
45+
}
46+
}
47+
return r;
48+
}
49+
50+
sw::PackageIdSet getMatchingPackagesSet(const sw::StorageWithPackagesDatabase &s, const sw::UnresolvedPackage &u)
51+
{
52+
sw::PackageIdSet p;
53+
for (auto &[ppath, versions] : getMatchingPackages(s, u))
54+
{
55+
for (auto &v : versions)
56+
p.emplace(ppath, v);
57+
}
58+
return p;
59+
}
60+
2661
SUBCOMMAND_DECL(list)
2762
{
2863
auto swctx = createSwContext();
2964
auto rs = swctx->getRemoteStorages();
3065
if (rs.empty())
3166
throw SW_RUNTIME_ERROR("No remote storages found");
3267

33-
static_cast<sw::StorageWithPackagesDatabase&>(*rs.front()).getPackagesDatabase().listPackages(list_arg);
68+
auto &s = static_cast<sw::StorageWithPackagesDatabase &>(*rs.front());
69+
70+
auto r = getMatchingPackages(s, list_arg);
71+
if (r.empty())
72+
{
73+
LOG_INFO(logger, "nothing found");
74+
return;
75+
}
76+
77+
for (auto &[ppath, versions] : r)
78+
{
79+
String out = ppath.toString();
80+
out += " (";
81+
for (auto &v : versions)
82+
out += v.toString() + ", ";
83+
out.resize(out.size() - 2);
84+
out += ")";
85+
LOG_INFO(logger, out);
86+
}
3487
}

src/sw/client/command/override.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ void override_package_perform(sw::SwContext &swctx, const sw::PackagePath &prefi
3636
{
3737
auto b = swctx.createBuild();
3838
sw::InputWithSettings i(swctx.addInput(fs::current_path()));
39-
b->addInput(i);
4039
auto ts = b->getContext().getHostSettings();
4140
ts["driver"]["dry-run"] = "true";
4241
i.addSettings(ts);
42+
b->addInput(i);
4343
b->load();
4444

4545
// one prepare step will find sources
@@ -108,7 +108,7 @@ SUBCOMMAND_DECL(override)
108108
if (prefix.empty())
109109
throw SW_RUNTIME_ERROR("Empty prefix");
110110

111-
if (!delete_overridden_package)
111+
if (delete_overridden_package)
112112
{
113113
auto swctx = createSwContext();
114114
sw::PackageId pkg{ prefix };

src/sw/client/command/remove.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,22 @@
1818

1919
#include "commands.h"
2020

21+
#include <sw/manager/storage.h>
22+
23+
#include <primitives/log.h>
24+
DECLARE_STATIC_LOGGER(logger, "remove");
25+
2126
static ::cl::list<String> remove_arg(::cl::Positional, ::cl::desc("package to remove"), ::cl::sub(subcommand_remove));
2227

2328
SUBCOMMAND_DECL(remove)
2429
{
2530
auto swctx = createSwContext();
2631
for (auto &a : remove_arg)
2732
{
28-
sw::LocalPackage p(swctx->getLocalStorage(), a);
29-
//sdb.removeInstalledPackage(p); // TODO: remove from db
30-
fs::remove_all(p.getDir());
33+
for (auto &p : getMatchingPackagesSet(swctx->getLocalStorage(), a))
34+
{
35+
LOG_INFO(logger, "Removing " << p.toString());
36+
swctx->getLocalStorage().remove(sw::LocalPackage(swctx->getLocalStorage(), p));
37+
}
3138
}
3239
}

src/sw/client/command/uri.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,11 @@ extern String gUploadPrefix;
3939
static ::cl::list<String> uri_args(::cl::Positional, ::cl::desc("sw uri arguments"), ::cl::sub(subcommand_uri));
4040

4141
#define F_ARGS sw::SwContext &swctx, sw::LocalStorage &sdb, const sw::LocalPackage &p
42+
#ifdef _MSC_VER
4243
#define F(n, ...) static void n(F_ARGS, __VA_ARGS__)
44+
#else
45+
#define F(n, ...) static void n(F_ARGS, ##__VA_ARGS__)
46+
#endif
4347

4448
F(open_dir, const path &d)
4549
{
@@ -187,15 +191,25 @@ static void dispatcher()
187191
auto &sdb = swctx->getLocalStorage();
188192
sw::LocalPackage p(sdb, id);
189193

194+
#ifdef _MSC_VER
190195
#define URI_CMD2(x, f, ...) \
191-
if (uri_args[0] == "sw:"## #x) \
196+
if (uri_args[0] == "sw:" #x) \
192197
{ \
193198
f(*swctx, sdb, p, __VA_ARGS__); \
194199
return; \
195200
}
196-
197201
#define URI_CMD(x, ...) \
198202
URI_CMD2(x, x, __VA_ARGS__)
203+
#else
204+
#define URI_CMD2(x, f, ...) \
205+
if (uri_args[0] == "sw:" #x) \
206+
{ \
207+
f(*swctx, sdb, p, ##__VA_ARGS__); \
208+
return; \
209+
}
210+
#define URI_CMD(x, ...) \
211+
URI_CMD2(x, x, ##__VA_ARGS__)
212+
#endif
199213

200214
URI_CMD2(sdir, open_dir, p.getDirSrc2());
201215
URI_CMD2(bdir, open_dir, p.getDirObj());

src/sw/client/generator/vs/project_emitter.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ namespace sw
2626
{
2727

2828
struct BuildSettings;
29-
struct Version;
3029

3130
}
3231

src/sw/client/generator/vs/vs.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@
3535
#include <boost/uuid/uuid_io.hpp>
3636
#include <nlohmann/json.hpp>
3737
#include <primitives/http.h>
38+
#ifdef _WIN32
3839
#include <primitives/win32helpers.h>
40+
#endif
3941

4042
#include <sstream>
4143
#include <stack>
@@ -233,7 +235,7 @@ void VSGenerator::generate(const SwBuild &b)
233235
const Strings tables1 = { "CL", "Link" };
234236
const Strings tables2 = { "LIB", "MASM", "RC" };
235237
auto ts = getVsToolset(version);
236-
auto dl = [](auto &ts, auto &tbl)
238+
auto dl = [](const auto &ts, const auto &tbl)
237239
{
238240
for (auto &t : tbl)
239241
{
@@ -428,7 +430,9 @@ void Solution::emit(const VSGenerator &g) const
428430
write_file_if_different(g.sln_root / fn, ctx.getText());
429431
auto lnk = current_thread_path() / fn;
430432
lnk += ".lnk";
433+
#ifdef _WIN32
431434
::create_link(g.sln_root / fn, lnk, "SW link");
435+
#endif
432436

433437
for (auto &[n, p] : projects)
434438
p.emit(g);

0 commit comments

Comments
 (0)