From ec63d7d6d2f123239ba436ffcb2638f27f3b7d59 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 14 Sep 2025 00:03:03 +0900 Subject: feat: use Nix-provided glibc headers --- src/preprocess.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'src/preprocess.c') diff --git a/src/preprocess.c b/src/preprocess.c index 5e029f2..00b01dd 100644 --- a/src/preprocess.c +++ b/src/preprocess.c @@ -562,7 +562,8 @@ typedef struct { StrArray* included_files; } Preprocessor; -static TokenArray* do_preprocess(InFile* src, int depth, MacroArray* macros, StrArray* included_files); +static TokenArray* do_preprocess(InFile* src, int depth, MacroArray* macros, StrArray* included_files, + StrArray* user_include_dirs); static Preprocessor* preprocessor_new(TokenArray* pp_tokens, int include_depth, MacroArray* macros, StrArray* included_files) { @@ -744,7 +745,7 @@ static void expand_include_directive(Preprocessor* pp, const char* include_name, } TokenArray* include_pp_tokens = - do_preprocess(include_source, pp->include_depth + 1, pp->macros, pp->included_files); + do_preprocess(include_source, pp->include_depth + 1, pp->macros, pp->included_files, NULL); tokens_pop(include_pp_tokens); // pop EOF token pp->pos = insert_pp_tokens(pp, pp->pos, include_pp_tokens); } @@ -1541,23 +1542,33 @@ static char* get_ducc_include_path() { return buf; } -static TokenArray* do_preprocess(InFile* src, int depth, MacroArray* macros, StrArray* included_files) { +static TokenArray* do_preprocess(InFile* src, int depth, MacroArray* macros, StrArray* included_files, + StrArray* user_include_dirs) { TokenArray* pp_tokens = pp_tokenize(src); Preprocessor* pp = preprocessor_new(pp_tokens, depth, macros, included_files); + + // Ducc's built-in headers has highest priority. add_include_path(pp, get_ducc_include_path()); + + if (user_include_dirs) { + for (size_t i = 0; i < user_include_dirs->len; ++i) { + add_include_path(pp, user_include_dirs->data[i]); + } + } add_include_path(pp, "/usr/local/include"); add_include_path(pp, "/usr/include/x86_64-linux-gnu"); add_include_path(pp, "/usr/include"); + preprocess_preprocessing_file(pp); remove_pp_directives(pp); return pp->pp_tokens; } -TokenArray* preprocess(InFile* src, StrArray* included_files) { +TokenArray* preprocess(InFile* src, StrArray* included_files, StrArray* user_include_dirs) { MacroArray* macros = macros_new(); add_predefined_macros(macros); strings_push(included_files, src->loc.filename); - return do_preprocess(src, 0, macros, included_files); + return do_preprocess(src, 0, macros, included_files, user_include_dirs); } void print_token_to_file(FILE* out, TokenArray* pp_tokens) { -- cgit v1.2.3-70-g09d2