RFR: 8333326: Linux Alpine build fails after 8302744

David Holmes dholmes at openjdk.org
Tue Jun 4 06:43:16 UTC 2024


On Mon, 3 Jun 2024 09:02:28 GMT, Severin Gehwolf <sgehwolf at openjdk.org> wrote:

>> test/hotspot/gtest/runtime/test_cgroupSubsystem_linux.cpp line 39:
>> 
>>> 37: #ifdef MUSL_LIBC
>>> 38: #include <libgen.h> // for basename
>>> 39: #endif
>> 
>> Does glibc provide its own definition of `basename`? From what I can see on Linux `man -s 3 basename` shows:
>> 
>> SYNOPSIS
>>        #include <libgen.h>
>> ..
>>        char *basename(char *path);
>> 
>> which seems to be the same as what you now have for MUSL-C. ???
>
> Good point. The man page also has:
> 
> 
> VERSIONS
>        There are two different versions of basename() - the POSIX version  de‐
>        scribed above, and the GNU version, which one gets after
> 
>                #define _GNU_SOURCE         /* See feature_test_macros(7) */
>                #include <string.h>
> 
>        The  GNU  version  never  modifies  its argument, and returns the empty
>        string when path has a trailing slash, and in particular also  when  it
>        is "/".  There is no GNU version of dirname().
> 
>        With glibc, one gets the POSIX version of basename() when <libgen.h> is
>        included, and the GNU version otherwise.
> 
> 
> So it sounds like we use the GNU version when `glibc` is being used.

Thanks @jerboaa I obviously completely missed that. :(

But as per Thomas's comment we should be using the Posix function not glibc version. Then we would not need to specialize for Musl-C.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/19497#discussion_r1625434625


More information about the hotspot-runtime-dev mailing list