android / ndk

The Android Native Development Kit
2.02k stars 258 forks source link

unpacking NDK r18 on Windows -- duplicate headers #806

Open alexcohn opened 6 years ago

alexcohn commented 6 years ago

Description

I noticed that some headers under sysroot are missing in Windows version. Digging deeper, I find that the root cause is that there are files in Linux version with clashing names on Windows filesystem (which does not allow mixed letter case).

I don't have a specific error case at hand (luckily!), but I am afraid this should at the very least be documented somewhere.

Here is the full list of affected headers:

sysroot/usr/include/linux/netfilter/xt_CONNMARK.h
sysroot/usr/include/linux/netfilter/xt_DSCP.h
sysroot/usr/include/linux/netfilter/xt_MARK.h
sysroot/usr/include/linux/netfilter/xt_RATEEST.h
sysroot/usr/include/linux/netfilter/xt_TCPMSS.h
sysroot/usr/include/linux/netfilter_ipv4/ipt_ECN.h
sysroot/usr/include/linux/netfilter_ipv4/ipt_TTL.h
sysroot/usr/include/linux/netfilter_ipv6/ip6t_HL.h

Some of these headers are synomyms, like linux/netfilter/xt_CONNMARK.h, which does nothing but #include <linux/netfilter/xt_connmark.h>. Others could be easily merged together, like linux/netfilter/xt_DSCP.h wich has #include <linux/netfilter/xt_dscp.h> and adds some more definitions. But some are mutually exclusive, like linux/netfilter_ipv6/ip6t_HL.h and linux/netfilter_ipv6/ip6t_hl.h: they both are wrapped with #ifndef _IP6T_HL_H.

Note that on Windows 10 April 2018 Update, it's now possible to set up the relevant folders as case sensitive, by running (as Admin)

fsutil file setCaseSensitiveInfo %NDK_ROOT%\sysroot\usr\include\linux\netfilter enable
fsutil file setCaseSensitiveInfo %NDK_ROOT%\sysroot\usr\include\linux\netfilter_ipv4 enable
fsutil file setCaseSensitiveInfo %NDK_ROOT%\sysroot\usr\include\linux\netfilter_ipv6 enable

Environment Details

DanAlbert commented 6 years ago

But some are mutually exclusive, like linux/netfilter_ipv6/ip6t_HL.h and linux/netfilter_ipv6/ip6t_hl.h: they both are wrapped with #ifndef _IP6T_HL_H.

From an email thread with gregkh, sounds like this isn't intentional.

Note that on Windows 10 April 2018 Update, it's now possible to set up the relevant folders as case sensitive, by running (as Admin)

That's cool, I hadn't heard of that. It's unfortunate that admin is needed though. Might be worth investigating.

DanAlbert commented 4 years ago

@enh-google Do you know if anything ever came from that thread? Was someone looking in to cleaning up the kernel headers?

enh-google commented 4 years ago

upstream is currently unchanged:

$ grep -r IP6T_HL_H
include/uapi/linux/netfilter_ipv6/ip6t_hl.h:#ifndef _IP6T_HL_H
include/uapi/linux/netfilter_ipv6/ip6t_hl.h:#define _IP6T_HL_H
include/uapi/linux/netfilter_ipv6/ip6t_HL.h:#ifndef _IP6T_HL_H
include/uapi/linux/netfilter_ipv6/ip6t_HL.h:#define _IP6T_HL_H

i'll try to get round sending a change upstream...

enh-google commented 4 years ago

(i've pinged the internal thread for a specific suggestion from the kernel maintainers, since this seems like a bikeshed nightmare!)