mcap/check_targets.jai
Musa Mahmood 03f23f7122 [0.1.16] Ctrl-C copies the selected capture's image, Ctrl-Shift-C its full path
The selected capture is the one outlined in the grid and shown in the Capture window. Its image is
copied as the Capture window shows it, decoded on a thread of its own and put on the clipboard as
screen captures are (Windows only so far); its path is copied as the system writes paths. Both are
actions in [hotkeys] (copy_image, copy_path), which do not act while typing in the search box.
Settings files at the current version get their default bindings at the next start; the comment
saying to raise APP_USER_SETTINGS_VERSION for a new action had it backwards.
2026-10-13 07:36:52 +01:00

72 lines
2.6 KiB
Plaintext

// Type-checks src/App.jai for another OS without producing or linking a binary, to catch errors
// in code your machine does not build:
//
// jai check_targets.jai - linux (from any OS)
// jai check_targets.jai - macos (from a Mac only: the Objective_C module runs code at compile time)
//
// The constants below stand in for the ones first.jai generates; keep their names in step.
#run,stallable {
set_build_options_dc(.{do_output = false});
args := get_build_options().compile_time_command_line;
target := Operating_System_Tag.LINUX;
cpu := CPU_Tag.X64;
if array_find(args, "macos") { target = .MACOS; cpu = .ARM64; }
options := get_build_options();
options.os_target = target;
options.cpu_target = cpu;
options.output_type = .NO_OUTPUT;
options.backend = .LLVM;
options.output_executable_name = "check";
options.output_path = ".build";
// rpmalloc (modules/Default_Allocator) also runs at compile time, with the target's OS layer,
// which crashes on another OS. A check for another OS uses Jai's own allocator instead, through a
// module of the same name ahead of modules/ (with the thread_idle the app calls, doing nothing).
if target != OS {
jai_modules := trim_right(options.import_path[options.import_path.count - 1], "/");
shim := tprint("%/.build/check_modules", get_working_directory());
make_directory_if_it_does_not_exist(tprint("%/Default_Allocator", shim), recursive = true);
write_entire_file(tprint("%/Default_Allocator/module.jai", shim), tprint(#string SHIM
// Written by check_targets.jai: Jai's own allocator, for type-checking another OS.
#load "%/Default_Allocator/module.jai";
thread_idle :: () {}
SHIM, jai_modules));
paths: [..] string;
array_add(*paths, shim);
array_add(*paths, ..options.import_path);
options.import_path = paths;
}
w := compiler_create_workspace("check");
set_build_options(options, w);
compiler_begin_intercept(w);
add_build_file("src/App.jai", w);
add_build_string(#string S
APP_NAME :: "mcap";
APP_FOLDER_NAME :: "mcap";
GIT_BRANCH :: "check";
GIT_HASH :: "-";
VERSION :: "0.1.16";
BUILD_DATE :: "-";
DEBUG :: true;
COMPILE_TESTS :: true;
COMPILE_ARGS :: "";
NO_CRASH_DIALOG :: false;
S, w);
while true {
message := compiler_wait_for_message();
if message.kind == .COMPLETE {
m := cast(*Message_Complete) message;
log("% check: %", target, m.error_code);
break;
}
}
compiler_end_intercept(w);
}
#import "Basic";
#import "Compiler";
#import "File";
#import "String";