blob: b1e21c69bd715ca179240c4a83e423c9bad16a4e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
/*
* Mini version of cargo
*
* main.cpp
* - Entrypoint
*/
#include <iostream>
#include <cstring> // strcmp
#include "debug.h"
#include "manifest.h"
#include "helpers.h"
extern void MiniCargo_Build(const PackageManifest& manifest);
struct ProgramOptions
{
const char* directory = nullptr;
const char* outfile = nullptr;
// Directory containing build script outputs
const char* override_directory = nullptr;
const char* output_directory = nullptr;
int parse(int argc, const char* argv[]);
void usage() const;
};
int main(int argc, const char* argv[])
{
ProgramOptions opts;
if( opts.parse(argc, argv) ) {
return 1;
}
// 1. Load the Cargo.toml file from the passed directory
auto m = PackageManifest::load_from_toml( ::helpers::path(opts.directory ? opts.directory : ".") / "Cargo.toml" );
// 2. Recursively load dependency manifests
for(const auto& dep : m.dependencies())
{
throw "TODO: Deps";
}
// 3. Build dependency tree
MiniCargo_Build(m);
throw "";
return 0;
}
int ProgramOptions::parse(int argc, const char* argv[])
{
bool all_free = false;
for(int i = 1; i < argc; i++)
{
const char* arg = argv[i];
if( arg[0] != '-' || all_free )
{
// Free arguments
if( !this->directory ) {
this->directory = arg;
}
else {
}
}
else if( arg[1] != '-' )
{
// Short arguments
}
else if( arg[1] == '\0' )
{
all_free = true;
}
else
{
// Long arguments
if( ::std::strcmp(arg, "--script-overrides") == 0 ) {
if(i+1 == argc) {
::std::cerr << "Flag " << arg << " takes an argument" << ::std::endl;
return 1;
}
//this->build_script_override_dir = argv[++i];
}
else {
::std::cerr << "Unknown flag " << arg << ::std::endl;
}
}
}
if( !this->directory /*|| !this->outfile*/ )
{
usage();
exit(1);
}
return 0;
}
void ProgramOptions::usage() const
{
::std::cerr
<< "Usage: minicargo <package dir>" << ::std::endl
;
}
void Debug_Print(::std::function<void(::std::ostream& os)> cb)
{
cb(::std::cout);
::std::cout << ::std::endl;
}
|