default features: make musl usable without feature test macros
authorRich Felker <dalias@aerifal.cx>
Sat, 8 Sep 2012 03:13:55 +0000 (23:13 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 8 Sep 2012 03:13:55 +0000 (23:13 -0400)
the old behavior of exposing nothing except plain ISO C can be
obtained by defining __STRICT_ANSI__ or using a compiler option (such
as -std=c99) that predefines it. the new default featureset is POSIX
with XSI plus _BSD_SOURCE. any explicit feature test macros will
inhibit the default.

installation docs have also been updated to reflect this change.

48 files changed:
INSTALL
include/aio.h
include/assert.h
include/ctype.h
include/dirent.h
include/dlfcn.h
include/endian.h
include/fcntl.h
include/features.h
include/fnmatch.h
include/ftw.h
include/glob.h
include/grp.h
include/limits.h
include/locale.h
include/math.h
include/net/if.h
include/netdb.h
include/netinet/tcp.h
include/pwd.h
include/sched.h
include/search.h
include/setjmp.h
include/signal.h
include/stdio.h
include/stdlib.h
include/string.h
include/sys/ipc.h
include/sys/mman.h
include/sys/resource.h
include/sys/sem.h
include/sys/sendfile.h
include/sys/shm.h
include/sys/stat.h
include/sys/statfs.h
include/sys/statvfs.h
include/sys/time.h
include/sys/types.h
include/sys/uio.h
include/sys/utsname.h
include/sys/wait.h
include/syslog.h
include/termios.h
include/time.h
include/ucontext.h
include/unistd.h
include/wchar.h
include/wctype.h

diff --git a/INSTALL b/INSTALL
index 720c94ea3f4727a4770ded997fee5308233b22a9..5c923ee59df8e55696e177c7b266da28f206ab14 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -76,14 +76,9 @@ musl-gcc hello.c
 ./a.out
 
 To configure autoconf-based program to compile and link against musl,
-you may wish to use:
+set the CC variable to musl-gcc when running configure, as in:
 
-CC="musl-gcc -D_GNU_SOURCE" ./configure ...
-
-Correctly-written build systems should not need -D_GNU_SOURCE as part
-of $CC, but many programs do not use feature-test macros correctly and
-simply assume the compiler will automatically give them the kitchen
-sink, so the above command is an easy workaround.
+CC=musl-gcc ./configure ...
 
 You will probably also want to use --prefix when building libraries to
 ensure that they are installed under the musl prefix and not in the
@@ -140,9 +135,3 @@ dynamic linker (program interpreter) is /lib/ld-musl-$ARCH.so.1. If
 you're using static linking only, you might instead check the symbols
 and look for anything suspicious that would indicate your old glibc or
 uClibc was used.
-
-When building programs against musl, you may still want to ensure the
-appropriate feature test macros get defined, as in:
-
-CC="gcc -D_GNU_SOURCE" ./configure ...
-
index 3e351348c79e4d32c7ca18b5702f79a86da75f1d..d9330ebeb9662b39f3940669817b5e5fecb69250 100644 (file)
@@ -5,12 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
-
+#include <features.h>
 #include <signal.h>
 #include <time.h>
 
index 30a43d68fae741b6a8b05cd4451da70f984e4fba..b0dc692cd23a9475fcd96c67dc742e74686e976b 100644 (file)
@@ -1,11 +1,6 @@
-#undef assert
+#include <features.h>
 
-#if __STDC_VERSION__ >= 201112L
-#elif defined(__GNUC__)
-#define _Noreturn __attribute__((__noreturn__))
-#else
-#define _Noreturn
-#endif
+#undef assert
 
 #ifdef NDEBUG
 #define        assert(x) (void)0
index 8ceaa9f9565b4d785789fb86422dc45c96c19872..8f0d16872e7a788827564c606867a0e2927d92fd 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 int   isalnum(int);
 int   isalpha(int);
 int   isblank(int);
index b6261595a7420a0fc0b0cfbd29af00c0cf08d282..726067f6afa49f4c856e6647e346b2a011c134fa 100644 (file)
@@ -5,11 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #define __NEED_ino_t
 #define __NEED_off_t
index 53871ee033fad18c493e21e472daee3d0697eae7..46c4e18555710eae3dde6fdc9f87f407cc0dc071 100644 (file)
@@ -5,11 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #define RTLD_LAZY   1
 #define RTLD_NOW    2
index 528cef31cb04be6f37549c5a096e1103c275ec64..1bd444518ab5febecb6cec6e2e7693c29359d082 100644 (file)
@@ -1,9 +1,7 @@
 #ifndef _ENDIAN_H
 #define _ENDIAN_H
 
-#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
-#define __inline inline
-#endif
+#include <features.h>
 
 #define __LITTLE_ENDIAN 1234
 #define __BIG_ENDIAN 4321
index 87ecf59b055d122fcad96b911c5d004eb73a5eb4..4123d01dc98e426c4561e9807559fd8d2cb308cf 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_off_t
 #define __NEED_pid_t
 #define __NEED_mode_t
index 851afb66a73fabe3c43e4955176244cc4c20dea0..a7919f3762b5eecd078fed148c9d376580543fa7 100644 (file)
@@ -1 +1,28 @@
-#warning "features.h is bogus"
+#ifndef _FEATURES_H
+#define _FEATURES_H
+
+#if !defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) \
+ && !defined(_XOPEN_SOURCE) && !defined(_GNU_SOURCE) \
+ && !defined(_BSD_SOURCE) && !defined(__STRICT_ANSI__)
+#define _BSD_SOURCE 1
+#define _XOPEN_SOURCE 700
+#endif
+
+#if __STDC_VERSION__ >= 199901L
+#define __restrict restrict
+#elif !defined(__GNUC__)
+#define __restrict
+#endif
+
+#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
+#define __inline inline
+#endif
+
+#if __STDC_VERSION__ >= 201112L
+#elif defined(__GNUC__)
+#define _Noreturn __attribute__((__noreturn__))
+#else
+#define _Noreturn
+#endif
+
+#endif
index 0731e236a8f785f6be037b4a6f896619eec51529..72345b8b32de9571b5b3c15b35ab8d7689bf31b1 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define        FNM_PATHNAME 0x1
 #define        FNM_NOESCAPE 0x2
 #define        FNM_PERIOD   0x4
index e7e8fdee53b17e2b581cfdf52ac987238947444f..f5eb9f67b029c14f56e8717fc9a4aaea1d4ee297 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 /* Normally we do not nest header includes. However useless bloat
  * like ftw may be treated as a special case. Otherwise we would
  * have to deal with duplicating all the stat.h mess. */
index c49a2dea33491ab9eb16c8f79123917c3abc6314..9fbbaa65ea2042447992ac1e1c567e2ba479e147 100644 (file)
@@ -5,11 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #define __NEED_size_t
 
index 0a55c62b6ff46861cee35e02293ed1d33360b3d0..030d7f8203c0fedf9f6c645258d8a20cd163ac62 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_size_t
 #define __NEED_gid_t
 
index e354ee73204c6eb31371bcf77ed5ddb8febc18af..e12618af8ea13bcadb55c08de8f00282c6936de5 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _LIMITS_H
 #define _LIMITS_H
 
+#include <features.h>
+
 /* Most limits are system-specific */
 
 #include <bits/limits.h>
index 9da47269e042a0483e323a86c926a1f941d0d81f..c6cc1ec75ebda3caf03533c8f211d8e135f4c012 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #undef NULL
 #ifdef __cplusplus
 #define NULL 0
index f808be626040dcb7098a8357f0da9b1884fd9750..906914011d7c09e948559488446c50847f2b03ce 100644 (file)
@@ -5,9 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
-#define __inline inline
-#endif
+#include <features.h>
 
 #define __NEED_float_t
 #define __NEED_double_t
index e862c7c75532aeacc29072706a67afd93c659d59..5813976e1097ecf46def427ec2fe1b23b104348d 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define IF_NAMESIZE 16
 
 struct if_nameindex
index d915d9d501329777edd216f538fbe1619f4544ed..ff691e0a9990d47fb60659227c6c887454b14c58 100644 (file)
@@ -5,11 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 #define __NEED_size_t
index 797ce688c1b392ccaf600e138e61430784547d5c..5049dd915d5341acaf7c9bf7f282b8ccc1b96ccb 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _NETINET_TCP_H
 #define _NETINET_TCP_H
 
+#include <features.h>
+
 #define TCP_NODELAY 1
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 #include <sys/types.h>
index 37ca520894b5c7ebdfdc2742e04af4212dcbc40d..91fe426fe3205227d7576cb3a06b4bd6c4da008c 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_size_t
 #define __NEED_uid_t
 #define __NEED_gid_t
index e411c92b84d30b06663eef7b63f80ed8ce3a2fc9..9062772b4a4b7d442244e6355a0748a1fc6c3e03 100644 (file)
@@ -4,6 +4,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_struct_timespec
 #define __NEED_pid_t
 #define __NEED_time_t
index 680eee75a15583a054e79fc7056ad62f3d9a906e..ebfe08a22756020eeaae7f004108c0789b31ae8f 100644 (file)
@@ -5,12 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
-
+#include <features.h>
 
 #define __NEED_size_t
 #include <bits/alltypes.h>
index e5877b4468f90f4c39efa1d959451f12534cdf7d..abc74234b636c0809dee18fa085231096923c7ee 100644 (file)
@@ -5,12 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 201112L
-#elif defined(__GNUC__)
-#define _Noreturn __attribute__((__noreturn__))
-#else
-#define _Noreturn
-#endif
+#include <features.h>
 
 #include <bits/setjmp.h>
 
index e0dae19215951aa19188bffbdea0731c9cfa4884..1014440d45d4ba159a3424b901cbba636e9d75c8 100644 (file)
@@ -5,11 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
  || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
index 7d3130e2c8dc00328944b132cfde3c252f34de7e..9a2093763505dc9bbd6444dd86229a629ca6b8a1 100644 (file)
@@ -5,11 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #define __NEED_FILE
 #define __NEED_va_list
index 86cf017165440824f719b7508fe3971f6274a05d..f7c5971965c269c574764110592dacb7414da578 100644 (file)
@@ -5,18 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
-
-#if __STDC_VERSION__ >= 201112L
-#elif defined(__GNUC__)
-#define _Noreturn __attribute__((__noreturn__))
-#else
-#define _Noreturn
-#endif
+#include <features.h>
 
 #undef NULL
 #ifdef __cplusplus
index f96f71ee0b5731fcc869bf00efca589efc8c4c95..5587c8805319807e7d962fd53a11541417c4f7fd 100644 (file)
@@ -5,11 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #undef NULL
 #ifdef __cplusplus
index 8e2f71725c8c614bcc0ccd4f37e06b1601d9040a..3f896b8cd40608975d319d7abfe28b0ae62bcb80 100644 (file)
@@ -4,6 +4,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_uid_t
 #define __NEED_gid_t
 #define __NEED_mode_t
index 5cfafbedda0cf8a3a3446ea31019bbffc929f52c..0fa32e6a0aaa8d69295ca4f7465d7e55a59e3764 100644 (file)
@@ -4,6 +4,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_mode_t
 #define __NEED_size_t
 #define __NEED_off_t
index bf59d1c84ac30fb736022cd40a72662937529d0d..9536ba35149b1863bf068c2049374ab55bc2cd3d 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_id_t
 #define __NEED_time_t
 #define __NEED_struct_timeval
index add3f1c8dc6638d772d95232c1e3a1dafbb05f29..cc3a3e63217fd7e9ee3eb556b80c4322ab7f02da 100644 (file)
@@ -4,6 +4,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_size_t
 #define __NEED_pid_t
 #define __NEED_time_t
index 1f2b5231fcea6a4bc0abf8fe5e28050d652cb9a8..e7570d8e5c4f0226c88321b8d7cafb5071ec8391 100644 (file)
@@ -5,6 +5,7 @@
 extern "C" {
 #endif
 
+#include <features.h>
 #include <unistd.h>
 
 ssize_t sendfile(int, int, off_t *, size_t);
index 34117cc850fc15fc6f630c1976bfb8db7483d653..ce3029f545367974cc17ce5c819950caadae2d16 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_time_t
 #define __NEED_size_t
 #define __NEED_pid_t
index e16a9682b6c3b837367e1689bf7d736725ac05f9..c63c6b8b6f72dcd651de61dba650837ac5def922 100644 (file)
@@ -4,11 +4,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #define __NEED_dev_t
 #define __NEED_ino_t
index a5a4db9cf712f40e5d95ba8f52b2a233425ec1a4..d8128a25894c2b647fbd4f673efa927e58737511 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #include <sys/statvfs.h>
 
 typedef struct {
index be41c287d532fc9e3c41b31ec2cdc085c59dc1e0..e0839ecac3266a40f3fcd33bc059fa77038a6e1e 100644 (file)
@@ -5,11 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #define __NEED_fsblkcnt_t
 #define __NEED_fsfilcnt_t
index bf026432b339810b4212fb7c1a0e7f12e6198ded..a0ed8e0fc183314aa68c5a78a164fc5204c99141 100644 (file)
@@ -4,11 +4,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #include <sys/select.h>
 
index f5b648794ff1a3bc8e3c7a8fa745bac1cf9832c0..7378b60bcbbd4ddd9ecb152a396b396ccc44bd7e 100644 (file)
@@ -4,6 +4,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_ino_t
 #define __NEED_dev_t
 #define __NEED_uid_t
index 7a75a5420deba26960f6ddff47ec5c3fae64ead7..624ff4225492437a83b60a58231228374937cbae 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_size_t
 #define __NEED_ssize_t
 #define __NEED_struct_iovec
index 4c36960ff89a70a10189ed54eed7ce067aa83a2d..6b9ea970970dff0571d88111b58c5ecea86d8d12 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 struct utsname
 {
        char sysname[65];
index 5e3012bac34a375c8929b3b8843e4093ff4891ab..8bcac8a3b2b072536bcc606ef3c54aa4f2bdb3b8 100644 (file)
@@ -4,6 +4,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #include <signal.h>
 
 #define __NEED_pid_t
index c0fde1125b053e2ea30bc6bd70c9ecbeedf6c5bd..a9468d4d43cc4ffc9cfeb5758eccd9bba6acfeba 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define LOG_EMERG   0
 #define LOG_ALERT   1
 #define LOG_CRIT    2
index 1041759b3461c8c860201de8803a93e260270f0e..d73c780d41a4270f1665658b6c4f7d62b792780a 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_pid_t
 
 #include <bits/alltypes.h>
index f24789e42d68789fdb73dbcf22ab8397434058ba..2f4c74f73ecccc6a1bd2674aff39a3b0b5ef65a1 100644 (file)
@@ -5,11 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #undef NULL
 #ifdef __cplusplus
index 1121761626b65c41977e51473991273abb0670fe..28d04ea88a109a156d03e1ffcb71b0179ab5169d 100644 (file)
@@ -4,6 +4,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #include <signal.h>
 
 #ifdef _GNU_SOURCE
index 20ba6ccbf94be32cf2444a5099b2c0a77f72a88a..b5206a61e2a05a634218db9d7613610606ae08ff 100644 (file)
@@ -5,18 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
-
-#if __STDC_VERSION__ >= 201112L
-#elif defined(__GNUC__)
-#define _Noreturn __attribute__((__noreturn__))
-#else
-#define _Noreturn
-#endif
+#include <features.h>
 
 #define STDIN_FILENO  0
 #define STDOUT_FILENO 1
index b1c6b7fac44c96100467a57c72f9e6fd367dfdaf..35706c7ff7abaf796d047ae13a315a5165105a1e 100644 (file)
@@ -5,11 +5,7 @@
 extern "C" {
 #endif
 
-#if __STDC_VERSION__ >= 199901L
-#define __restrict restrict
-#elif !defined(__GNUC__)
-#define __restrict
-#endif
+#include <features.h>
 
 #define __NEED_FILE
 #define __NEED_va_list
index f7be2cb03849f735b4bcbac5ae4e050da3b96e7f..abc7d36ffd79ba755048903f90c0f8336ca8180b 100644 (file)
@@ -5,6 +5,8 @@
 extern "C" {
 #endif
 
+#include <features.h>
+
 #define __NEED_wint_t
 #define __NEED_wctrans_t
 #define __NEED_wctype_t