-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Open
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behaviorcontributor friendlyThis issue is limited in scope and/or knowledge of Zig internals.This issue is limited in scope and/or knowledge of Zig internals.zig ccZig as a drop-in C compiler featureZig as a drop-in C compiler feature
Milestone
Description
Zig Version
0.15-dev
Steps to Reproduce and Observed Behavior
I figured out why it happens. zig cc is not behaving like gcc and clang do with -isystem and -I directories.
zig cc
[m@M-TH build]$ zig cc -E -H iconv.c -isystem /home/m/static-php-cli/buildroot/include | grep iconv
. /usr/lib/zig/libc/include/generic-glibc/iconv.h
.. /usr/lib/zig/libc/include/generic-glibc/features.h
... /usr/lib/zig/libc/include/generic-glibc/features-time64.h
.... /usr/lib/zig/libc/include/x86_64-linux-gnu/bits/wordsize.h
.... /usr/lib/zig/libc/include/x86_64-linux-gnu/bits/timesize.h
..... /usr/lib/zig/libc/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/lib/zig/libc/include/generic-glibc/stdc-predef.h
... /usr/lib/zig/libc/include/generic-glibc/sys/cdefs.h
.... /usr/lib/zig/libc/include/x86_64-linux-gnu/bits/wordsize.h
.... /usr/lib/zig/libc/include/x86_64-linux-gnu/bits/long-double.h
... /usr/lib/zig/libc/include/x86_64-linux-gnu/gnu/stubs.h
.... /usr/lib/zig/libc/include/x86_64-linux-gnu/gnu/stubs-64.h
...
clang:
[m@M-TH build]$ clang -E -H iconv.c -isystem /home/m/static-php-cli/buildroot/include | grep iconv
. /home/m/static-php-cli/buildroot/include/iconv.h
.. /usr/bin/../lib/clang/19/include/stddef.h
... /usr/bin/../lib/clang/19/include/__stddef_header_macro.h
... /usr/bin/../lib/clang/19/include/__stddef_ptrdiff_t.h
... /usr/bin/../lib/clang/19/include/__stddef_size_t.h
... /usr/bin/../lib/clang/19/include/__stddef_wchar_t.h
... /usr/bin/../lib/clang/19/include/__stddef_null.h
... /usr/bin/../lib/clang/19/include/__stddef_max_align_t.h
... /usr/bin/../lib/clang/19/include/__stddef_offsetof.h
...
gcc:
[m@M-TH build]$ gcc -E -H iconv.c -isystem /home/m/static-php-cli/buildroot/include | grep iconv
. /home/m/static-php-cli/buildroot/include/iconv.h
.. /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
.. /usr/include/errno.h
... /usr/include/features.h
.... /usr/include/features-time64.h
..... /usr/include/bits/wordsize.h
..... /usr/include/bits/timesize.h
...... /usr/include/bits/wordsize.h
.... /usr/include/sys/cdefs.h
..... /usr/include/bits/wordsize.h
..... /usr/include/bits/long-double.h
.... /usr/include/gnu/stubs.h
..... /usr/include/gnu/stubs-64.h
...
But the real issue is this:
[m@M-TH build]$ zig cc -E -H iconv.c -isystem /home/m/static-php-cli/buildroot/include -I/home/m/static-php-cli/buildroot/include | grep iconv
. /usr/lib/zig/libc/include/generic-glibc/iconv.h
.. /usr/lib/zig/libc/include/generic-glibc/features.h
... /usr/lib/zig/libc/include/generic-glibc/features-time64.h
.... /usr/lib/zig/libc/include/x86_64-linux-gnu/bits/wordsize.h
.... /usr/lib/zig/libc/include/x86_64-linux-gnu/bits/timesize.h
..... /usr/lib/zig/libc/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/lib/zig/libc/include/generic-glibc/stdc-predef.h
# or
[m@M-TH build]$ zig cc -E -H iconv.c -I/home/m/static-php-cli/buildroot/include -isystem /home/m/static-php-cli/buildroot/include | grep iconv
. /usr/lib/zig/libc/include/generic-glibc/iconv.h
.. /usr/lib/zig/libc/include/generic-glibc/features.h
... /usr/lib/zig/libc/include/generic-glibc/features-time64.h
.... /usr/lib/zig/libc/include/x86_64-linux-gnu/bits/wordsize.h
.... /usr/lib/zig/libc/include/x86_64-linux-gnu/bits/timesize.h
..... /usr/lib/zig/libc/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/lib/zig/libc/include/generic-glibc/stdc-predef.h
Zig ignores the -I directory, if it is also specified as a -isystem dir.
zig cc without isystem:
[m@M-TH build]$ zig cc -E -H iconv.c -I/home/m/static-php-cli/buildroot/include | grep iconv
. /home/m/static-php-cli/buildroot/include/iconv.h
.. /usr/lib/zig/include/stddef.h
... /usr/lib/zig/include/__stddef_header_macro.h
... /usr/lib/zig/include/__stddef_ptrdiff_t.h
... /usr/lib/zig/include/__stddef_size_t.h
... /usr/lib/zig/include/__stddef_wchar_t.h
... /usr/lib/zig/include/__stddef_null.h
... /usr/lib/zig/include/__stddef_max_align_t.h
... /usr/lib/zig/include/__stddef_offsetof.h
.. /usr/lib/zig/libc/include/generic-glibc/errno.h
Since the php build unconditionally adds all our directories as isystem directories to supress warnings during extension compilation, this cannot be worked around short of patching zig.
Metadata
Metadata
Assignees
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behaviorcontributor friendlyThis issue is limited in scope and/or knowledge of Zig internals.This issue is limited in scope and/or knowledge of Zig internals.zig ccZig as a drop-in C compiler featureZig as a drop-in C compiler feature