Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmake: Use -idirafter instead of -isystem #777

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on Jan 21, 2023

  1. cmake: Use -idirafter instead of -isystem

    isystem dirs are searched before the regular system dirs
    this exposes an interesting include ordering problem when using
    clang + libc++, when including C++ headers like <cstdlib>
    
    cstdlib includes stdlib.h and in case of libc++, this should be coming
    from libc++ as well, which is then eventually including system stdlib.h
    
    libc++ has added a check for checking this order recently, which means
    if cstlib ends up including system stdlib.h before libc++ provided
    stdlib.h it errors out
    
    | /mnt/b/yoe/master/build/tmp/work/riscv64-yoe-linux/libcereal/1.3.2+gitAUTOINC+ebef1e9298-r0/recipe-sysroot/usr/include/c++/v1/cwchar:113:5: error: <cwchar> tried including <wchar.h> but didn't find libc++'s <wcha
    r.h> header.           This usually means that your header search paths are not configured properly.           The header search paths should contain the C++ Standard Library headers before           any C Standard
     Library, and you are probably using compiler flags that make that           not be the case.                                                                                                                         | #   error <cwchar> tried including <wchar.h> but didn't find libc++'s <wchar.h> header. \
    |     ^
    
    The reason is that include_directories with SYSTEM property adds the
    directory via -system and some of these directories point to sysroot
    e.g. OPENSSL_INCLUDE_DIR which ends up adding -isystem
    <sysroot>/usr/include and causes the system stdlib.h to included before
    libc++ stdlib.h
    
    A fix is to use -idirafter which preserved the effects of system headers
    but instead of prepending, it will append to system headers and the
    issue is addressed
    
    Signed-off-by: Khem Raj <raj.khem@gmail.com>
    kraj committed Jan 21, 2023
    Configuration menu
    Copy the full SHA
    ac70933 View commit details
    Browse the repository at this point in the history