libobs/util: Make sure includes are from current file dir
When the #include directive in in the C lexer preprocessor is encountered, the files being included need to be relative to the directory of the file that the include was used in.
This commit is contained in:
parent
2fa7ef5807
commit
45a2fa0e1a
@ -602,6 +602,24 @@ static inline void cf_adderror_unexpected_eof(struct cf_preprocessor *pp,
|
|||||||
NULL, NULL, NULL);
|
NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void insert_path(struct cf_preprocessor *pp,
|
||||||
|
struct dstr *str_file)
|
||||||
|
{
|
||||||
|
const char *file;
|
||||||
|
const char *slash;
|
||||||
|
|
||||||
|
if (pp && pp->lex && pp->lex->file) {
|
||||||
|
file = pp->lex->file;
|
||||||
|
slash = strrchr(file, '/');
|
||||||
|
if (slash) {
|
||||||
|
struct dstr path = {0};
|
||||||
|
dstr_ncopy(&path, file, slash - file + 1);
|
||||||
|
dstr_insert_dstr(str_file, 0, &path);
|
||||||
|
dstr_free(&path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void cf_include_file(struct cf_preprocessor *pp,
|
static void cf_include_file(struct cf_preprocessor *pp,
|
||||||
const struct cf_token *file_token)
|
const struct cf_token *file_token)
|
||||||
{
|
{
|
||||||
@ -615,6 +633,7 @@ static void cf_include_file(struct cf_preprocessor *pp,
|
|||||||
dstr_init(&str_file);
|
dstr_init(&str_file);
|
||||||
dstr_copy_strref(&str_file, &file_token->str);
|
dstr_copy_strref(&str_file, &file_token->str);
|
||||||
dstr_mid(&str_file, &str_file, 1, str_file.len-2);
|
dstr_mid(&str_file, &str_file, 1, str_file.len-2);
|
||||||
|
insert_path(pp, &str_file);
|
||||||
|
|
||||||
/* if dependency already exists, run preprocessor on it */
|
/* if dependency already exists, run preprocessor on it */
|
||||||
for (i = 0; i < pp->dependencies.num; i++) {
|
for (i = 0; i < pp->dependencies.num; i++) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user