• Show log

    Commit

  • Hash : 085ed2c6
    Author : Patrick Steinhardt
    Date : 2019-02-25T11:35:16

    cmake: correctly detect if system provides `regcomp`
    
    We assume that if we are on Win32, Amiga OS, Solaris or SunOS,
    that the regcomp(3P) function cannot be provided by the system.
    Thus we will in these cases always include our own, bundled regex
    sources to make a regcomp implementation available. This test is
    obviously very fragile, and we have seen it fail on MSYS2/MinGW
    systems, which do in fact provide the regcomp symbol. The effect
    is that during compilation, we will use the "regex.h" header
    provided by MinGW, but use symbols provided by ourselves. This
    in fact may cause subtle memory layout issues, as the structure
    made available via MinGW doesn't match what our bundled code
    expects.
    
    There's one more problem with our regex detection: on the listed
    platforms, we will incorrectly include the bundled regex code
    even in case where the system provides regcomp_l(3), but it will
    never be used for anything.
    
    Fix the issue by improving our regcomp detection code. Instead of
    relying on a fragile listing of platforms, we can just use
    `CHECK_FUNCTION_EXISTS` instead. This will not in fact avoid the
    header-ordering problem. But we can assume that as soon as a
    system-provided "regex.h" header is provided, that
    `CHECK_FUNCTION_EXISTS` will now correctly find the desired
    symbol and thus not include our bundled regex code.
    
    (cherry picked from commit 13cb9f7a3325e71a01073647d1c23f49464f200e)