Since glibc 2.28, sys/types.h no longer includes sys/sysmacros.h which
defines the major and minor macros. Some BSDs don't have
sys/sysmacros.h, so sbase has been conditionally including
sys/sysmacros.h on glibc since 99c78763[0].

However, in the upcoming musl release, it too will remove the
sys/sysmacros.h include from sys/types.h[1]. To continue building with
musl, glibc, and on other operating systems, we have a few options:

1. Invert the ifdef by conditionally *omitting* the sysmacros.h
include on systems that don't have it rather than including it only on
glibc. I know this includes at least OpenBSD. Does anyone know of any
others?

2. Add a make variable to control whether sysmacros.h is included.
Users on systems without sysmacros.h will have to modify this variable
in config.mk or the make command-line.

3. Add a configure test to check the availability of sysmacros.h. This
would be the first such configure test in sbase, and I'm sure some of
you would disapprove. Personally, I wouldn't be happy with this option
either, but it does seem to be the only reliable way to automatically
determine whether sysmacros.h needs to be included.

Unfortunately there no longer seems to be any way to write a program
using major/minor that doesn't involve conditional inclusion and/or
configure tests. Right now I'm leaning towards option 2 by adding -D
HAVE_SYSMACROS_H to CFLAGS in config.mk, and guarding the sysmacros.h
include by ifdefs.

If anybody has a nice solution to this problem, please let me know.

[0] 
https://git.suckless.org/sbase/commit/99c787631013bacf71c27dcac16d5a55b82be1c2.html
[1] 
http://git.musl-libc.org/cgit/musl/commit/?id=a31a30a0076c284133c0f4dfa32b8b37883ac930

Reply via email to