building: moved line-count into start.script

This commit is contained in:
nakst 2022-03-19 18:14:59 +00:00
parent 3bc928b7dc
commit a60344e9bb
5 changed files with 69 additions and 66 deletions

View File

@ -470,6 +470,7 @@ EXTERNAL_STUB(ExternalPersistWrite);
// TODO Functions only available in the POSIX subsystem:
EXTERNAL_STUB(ExternalConsoleGetLine);
EXTERNAL_STUB(ExternalConsoleWriteStdout);
EXTERNAL_STUB(ExternalConsoleWriteStderr);
EXTERNAL_STUB(ExternalSystemShellExecute);
EXTERNAL_STUB(ExternalSystemShellExecuteWithWorkingDirectory);
EXTERNAL_STUB(ExternalSystemShellEvaluate);

View File

@ -859,30 +859,6 @@ void FixReplacedFieldName(const char *oldName, const char *newName) {
CallSystem("unlink bin/errors.tmp");
}
void LineCountFile(const char *folder, const char *name) {
int lineCountBefore = 0;
{
CallSystem("paste -sd+ bin/count.tmp | bc > bin/count2.tmp");
FILE *f = fopen("bin/count2.tmp", "rb");
char buffer[16] = {};
fread(buffer, 1, sizeof(buffer), f);
fclose(f);
lineCountBefore = atoi(buffer);
}
CallSystemF("awk 'NF' \"%s%s\" | wc -l >> bin/count.tmp", folder, name);
{
CallSystem("paste -sd+ bin/count.tmp | bc > bin/count2.tmp");
FILE *f = fopen("bin/count2.tmp", "rb");
char buffer[16] = {};
fread(buffer, 1, sizeof(buffer), f);
fclose(f);
printf("%5d %s%s\n", atoi(buffer) - lineCountBefore, folder, name);
}
}
void AddressToLine(const char *symbolFile) {
char buffer[4096];
sprintf(buffer, "echo %s > bin/all_symbol_files.dat", symbolFile);
@ -1359,44 +1335,6 @@ void DoCommand(const char *l) {
}
printf("Created " ColorHighlight "bin/essence.iso" ColorNormal ".\n");
} else if (0 == strcmp(l, "line-count")) {
FILE *f = fopen("bin/count.tmp", "wb");
fprintf(f, "0");
fclose(f);
LineCountFile("", "start.sh");
const char *folders[] = {
"desktop/", "boot/x86/", "drivers/", "kernel/",
"apps/", "apps/file_manager/", "shared/", "util/",
"arch/", "arch/x86_32/", "arch/x86_64/",
};
for (uintptr_t i = 0; i < sizeof(folders) / sizeof(folders[0]); i++) {
const char *folder = folders[i];
DIR *directory = opendir(folder);
struct dirent *entry;
while ((entry = readdir(directory))) {
if (0 == strcmp(entry->d_name, "nanosvg.h")) continue;
if (0 == strcmp(entry->d_name, "hsluv.h")) continue;
if (0 == strcmp(entry->d_name, "stb_ds.h")) continue;
if (0 == strcmp(entry->d_name, "stb_image.h")) continue;
if (0 == strcmp(entry->d_name, "stb_sprintf.h")) continue;
if (0 == strcmp(entry->d_name, "stb_truetype.h")) continue;
if (entry->d_type != DT_REG) continue;
LineCountFile(folder, entry->d_name);
}
closedir(directory);
}
printf("\nTotal line count:" ColorHighlight "\n");
CallSystem("paste -sd+ bin/count.tmp | bc");
unlink("bin/count.tmp");
unlink("bin/count2.tmp");
printf(ColorNormal);
} else if (0 == memcmp(l, "a2l ", 4)) {
AddressToLine(l + 3);
} else if (0 == strcmp(l, "build-port") || 0 == memcmp(l, "build-port ", 11)) {

View File

@ -771,6 +771,7 @@ char baseModuleSource[] = {
"str ConsoleGetLine() #extcall;"
"void ConsoleWriteStdout(str x) #extcall;"
"void ConsoleWriteStderr(str x) #extcall;"
"err[str] SystemGetEnvironmentVariable(str name) #extcall;"
"err[void] SystemSetEnvironmentVariable(str name, str value) #extcall;"
"bool SystemShellExecute(str x) #extcall;" // Returns true on success.
@ -791,6 +792,7 @@ int ExternalTextMonospaced(ExecutionContext *context, Value *returnValue);
int ExternalTextPlain(ExecutionContext *context, Value *returnValue);
int ExternalConsoleGetLine(ExecutionContext *context, Value *returnValue);
int ExternalConsoleWriteStdout(ExecutionContext *context, Value *returnValue);
int ExternalConsoleWriteStderr(ExecutionContext *context, Value *returnValue);
int ExternalStringSlice(ExecutionContext *context, Value *returnValue);
int ExternalCharacterToByte(ExecutionContext *context, Value *returnValue);
int ExternalSystemShellExecute(ExecutionContext *context, Value *returnValue);
@ -836,6 +838,7 @@ ExternalFunction externalFunctions[] = {
{ .cName = "TextPlain", .callback = ExternalTextPlain },
{ .cName = "ConsoleGetLine", .callback = ExternalConsoleGetLine },
{ .cName = "ConsoleWriteStdout", .callback = ExternalConsoleWriteStdout },
{ .cName = "ConsoleWriteStderr", .callback = ExternalConsoleWriteStderr },
{ .cName = "StringSlice", .callback = ExternalStringSlice },
{ .cName = "CharacterToByte", .callback = ExternalCharacterToByte },
{ .cName = "SystemShellExecute", .callback = ExternalSystemShellExecute },
@ -7069,6 +7072,13 @@ int ExternalConsoleWriteStdout(ExecutionContext *context, Value *returnValue) {
return EXTCALL_NO_RETURN;
}
int ExternalConsoleWriteStderr(ExecutionContext *context, Value *returnValue) {
(void) returnValue;
STACK_POP_STRING(entryText, entryBytes);
fprintf(stderr, "%.*s", (int) entryBytes, (char *) entryText);
return EXTCALL_NO_RETURN;
}
int ExternalLogOpenGroup(ExecutionContext *context, Value *returnValue) {
(void) returnValue;
if (context->c->stackPointer < 1) return -1;

View File

@ -108,6 +108,60 @@ void Setup(bool forAutomation) {
}
}
void DoCommand(str command) {
if command == "line-count" {
int count = 0;
int countKernel = 0;
int countDesktop = 0;
int countApps = 0;
int countBoot = 0;
int countDrivers = 0;
int countHelp = 0;
int countShared = 0;
int countArch = 0;
int countOther = 0;
str[] files = DirectoryEnumerateRecursively("."):assert();
for str file in files {
bool ignore = file == "tags" || StringStartsWith(file, "bin/") || StringStartsWith(file, "cross/") || StringStartsWith(file, ".")
|| StringStartsWith(file, "old/") || StringStartsWith(file, "root/") || StringStartsWith(file, "ports/")
|| file == "util/hsluv.h" || file == "util/luigi.h" || file == "util/stb_ds.h" || file == "util/script.c"
|| file == "util/nanosvg.h" || file == "util/stb_truetype.h" || file == "res/Keyboard Layouts/index.ini";
bool isSourceFile = StringEndsWith(file, ".c") || StringEndsWith(file, ".cpp") || StringEndsWith(file, ".h")
|| StringEndsWith(file, ".header") || StringEndsWith(file, ".ini") || StringEndsWith(file, ".ld")
|| StringEndsWith(file, ".md") || StringEndsWith(file, ".s") || StringEndsWith(file, ".script") || StringEndsWith(file, ".sh");
if !ignore && isSourceFile {
int c = StringSplitByCharacter(FileReadAll(file):assert(), "\n", false):len();
count += c;
if StringStartsWith(file, "kernel/") countKernel += c;
else if StringStartsWith(file, "desktop/") countDesktop += c;
else if StringStartsWith(file, "apps/") countApps += c;
else if StringStartsWith(file, "boot/") countBoot += c;
else if StringStartsWith(file, "drivers/") countDrivers += c;
else if StringStartsWith(file, "help/") countHelp += c;
else if StringStartsWith(file, "shared/") countShared += c;
else if StringStartsWith(file, "arch/") countArch += c;
else countOther += c;
}
}
Log("Total line count: %TextColorHighlight()%%count%");
Log("- Kernel: %TextColorHighlight()%%countKernel%");
Log("- Desktop: %TextColorHighlight()%%countDesktop%");
Log("- Apps: %TextColorHighlight()%%countApps%");
Log("- Boot: %TextColorHighlight()%%countBoot%");
Log("- Drivers: %TextColorHighlight()%%countDrivers%");
Log("- Help: %TextColorHighlight()%%countHelp%");
Log("- Shared: %TextColorHighlight()%%countShared%");
Log("- Arch: %TextColorHighlight()%%countArch%");
Log("- Other: %TextColorHighlight()%%countOther%");
} else {
SystemShellExecute("bin/build %command%");
}
}
void Start() {
Setup(false);
PathDelete("bin/dependencies.ini");
@ -121,9 +175,9 @@ void Start() {
bool running = true;
while running {
ConsoleWriteStdout("\n> %TextColorHighlight()%");
ConsoleWriteStderr("\n> %TextColorHighlight()%");
str command = StringTrim(ConsoleGetLine());
ConsoleWriteStdout(TextPlain());
ConsoleWriteStderr(TextPlain());
if command == "" {
command = previousCommand;
@ -133,12 +187,12 @@ void Start() {
if command == "exit" || command == "x" || command == "quit" || command == "q" {
running = false;
} else {
SystemShellExecute("bin/build %command%");
DoCommand(command);
previousCommand = command;
}
}
} else {
SystemShellExecute("bin/build %options%");
DoCommand(options);
}
}