`zig id` command

master
Andrew Kelley 2018-09-09 23:58:52 -04:00
parent 173fc842c4
commit c0bdcc7417
No known key found for this signature in database
GPG Key ID: 4E7CD66038A4D47C
3 changed files with 60 additions and 60 deletions

View File

@ -377,7 +377,6 @@ static Error write_manifest_file(CacheHash *ch) {
buf_appendf(&contents, "%" ZIG_PRI_u64 " %" ZIG_PRI_u64 " %s %s\n",
chf->mtime.sec, chf->mtime.nsec, encoded_digest, buf_ptr(chf->path));
}
fprintf(stderr, "overwrite with\n%s\n", buf_ptr(&contents));
if ((err = os_file_overwrite(ch->manifest_file, &contents)))
return err;

View File

@ -25,6 +25,7 @@ static int usage(const char *arg0) {
" build-lib [source] create library from source or object files\n"
" build-obj [source] create object from source or assembly\n"
" builtin show the source code of that @import(\"builtin\")\n"
" id print the base64-encoded compiler id\n"
" run [source] create executable and run immediately\n"
" translate-c [source] convert c code to zig code\n"
" targets list available compilation targets\n"
@ -257,6 +258,55 @@ static void add_package(CodeGen *g, CliPkg *cli_pkg, PackageTableEntry *pkg) {
}
}
static Buf saved_compiler_id = BUF_INIT;
static Error get_compiler_id(Buf **result) {
if (saved_compiler_id.list.length != 0) {
*result = &saved_compiler_id;
return ErrorNone;
}
Error err;
Buf app_data_dir = BUF_INIT;
if ((err = os_get_app_data_dir(&app_data_dir, "zig")))
return err;
Buf *stage1_dir = buf_alloc();
os_path_join(&app_data_dir, buf_create_from_str("stage1"), stage1_dir);
Buf *manifest_dir = buf_alloc();
os_path_join(stage1_dir, buf_create_from_str("exe"), manifest_dir);
if ((err = os_make_path(manifest_dir)))
return err;
CacheHash cache_hash;
CacheHash *ch = &cache_hash;
cache_init(ch, manifest_dir);
Buf self_exe_path = BUF_INIT;
if ((err = os_self_exe_path(&self_exe_path)))
return err;
cache_file(ch, &self_exe_path);
buf_resize(&saved_compiler_id, 0);
if ((err = cache_hit(ch, &saved_compiler_id)))
return err;
if (buf_len(&saved_compiler_id) != 0) {
*result = &saved_compiler_id;
return ErrorNone;
}
ZigList<Buf *> lib_paths = {};
if ((err = os_self_exe_shared_libs(lib_paths)))
return err;
for (size_t i = 0; i < lib_paths.length; i += 1) {
Buf *lib_path = lib_paths.at(i);
if ((err = cache_add_file(ch, lib_path)))
return err;
}
if ((err = cache_final(ch, &saved_compiler_id)))
return err;
*result = &saved_compiler_id;
return ErrorNone;
}
int main(int argc, char **argv) {
if (argc == 2 && strcmp(argv[1], "BUILD_INFO") == 0) {
printf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
@ -271,64 +321,15 @@ int main(int argc, char **argv) {
return 0;
}
if (argc == 2 && strcmp(argv[1], "TEST") == 0) {
if (argc == 2 && strcmp(argv[1], "id") == 0) {
Error err;
Buf app_data_dir = BUF_INIT;
if ((err = os_get_app_data_dir(&app_data_dir, "zig"))) {
fprintf(stderr, "get app dir: %s\n", err_str(err));
return 1;
Buf *compiler_id;
if ((err = get_compiler_id(&compiler_id))) {
fprintf(stderr, "Unable to determine compiler id: %s\n", err_str(err));
return EXIT_FAILURE;
}
Buf *stage1_dir = buf_alloc();
os_path_join(&app_data_dir, buf_create_from_str("stage1"), stage1_dir);
Buf *manifest_dir = buf_alloc();
os_path_join(stage1_dir, buf_create_from_str("exe"), manifest_dir);
if ((err = os_make_path(manifest_dir))) {
fprintf(stderr, "make path: %s\n", err_str(err));
return 1;
}
CacheHash cache_hash;
CacheHash *ch = &cache_hash;
cache_init(ch, manifest_dir);
Buf self_exe_path = BUF_INIT;
if ((err = os_self_exe_path(&self_exe_path))) {
fprintf(stderr, "self exe path: %s\n", err_str(err));
return 1;
}
cache_file(ch, &self_exe_path);
Buf exe_digest = BUF_INIT;
buf_resize(&exe_digest, 0);
if ((err = cache_hit(ch, &exe_digest))) {
fprintf(stderr, "cache hit error: %s\n", err_str(err));
return 1;
}
if (buf_len(&exe_digest) != 0) {
fprintf(stderr, "cache hit: %s\n", buf_ptr(&exe_digest));
return 0;
}
fprintf(stderr, "cache miss\n");
ZigList<Buf *> lib_paths = {};
if ((err = os_self_exe_shared_libs(lib_paths))) {
fprintf(stderr, "finding out shared libs: %s\n", err_str(err));
return 1;
}
for (size_t i = 0; i < lib_paths.length; i += 1) {
Buf *lib_path = lib_paths.at(i);
if ((err = cache_add_file(ch, lib_path))) {
fprintf(stderr, "cache add file %s: %s", buf_ptr(lib_path), err_str(err));
return 1;
}
}
if ((err = cache_final(ch, &exe_digest))) {
fprintf(stderr, "final: %s\n", err_str(err));
return 1;
}
fprintf(stderr, "computed2: %s\n", buf_ptr(&exe_digest));
return 0;
printf("%s\n", buf_ptr(compiler_id));
return EXIT_SUCCESS;
}
os_init();

View File

@ -1813,9 +1813,9 @@ Error os_file_read_all(OsFile file, Buf *contents) {
for (;;) {
size_t amt = buf_len(contents) - index;
if (amt < 512) {
buf_resize(contents, buf_len(contents) + 512);
amt += 512;
if (amt < 4096) {
buf_resize(contents, buf_len(contents) + (4096 - amt));
amt = buf_len(contents) - index;
}
if ((err = os_file_read(file, buf_ptr(contents) + index, &amt)))