/* * Copyright (C) 2024 olang maintainers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "cli_runner.h" #include #include #include #include #include #include #define OLANG_COMPILER_PATH "../../0c" int _compiler_exists_already_checked = 0; void _assert_compiler_exists() { { if (_compiler_exists_already_checked == 1) { return; } _compiler_exists_already_checked = 1; } FILE *file; if ((file = fopen(OLANG_COMPILER_PATH, "r"))) { fclose(file); return; } assert(false && "Compiler not found. Build the compiler before executing tests."); } void _create_tmp_file_name(char *file_name) { sprintf(file_name, "%s/olang_programXXXXXX", P_tmpdir); int fd = mkstemp(file_name); assert(fd != -1 && "Could not create a tmp file"); close(fd); } cli_result_t cli_runner_compile_file(char *src) { _assert_compiler_exists(); cli_result_t result; _create_tmp_file_name(result.binary_loc); char command[1024]; sprintf(command, "%s -o %s %s", OLANG_COMPILER_PATH, result.binary_loc, src); result.exit_code = system(command); return result; }