From patchwork Wed Oct 1 09:15:19 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddhesh Poyarekar X-Patchwork-Id: 395472 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 600901400E0 for ; Wed, 1 Oct 2014 19:15:42 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:cc:subject:message-id:references :mime-version:content-type:in-reply-to; q=dns; s=default; b=vwEW aAbFA6zHQZ+XzCLO1kaYQL3TlAaTSeXzhvV8BlsysTYmCWn/nIxexuhprspqcUem 7zbQeC7jIC2JoKPs321eYEnuKgRYXbSoV22+ww0YiZWU45cYG46wLQvMhgvEbyH8 aknY4SdaRhrqZoNFfQ/99yBxPlCDVj7tF9PYSmY= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:cc:subject:message-id:references :mime-version:content-type:in-reply-to; s=default; bh=giY2s92d/q dVWa6fSGrQvOxEi4E=; b=pb8HLvhdLMSvcy63QpBGK+KQwaULEO+0ULFLsGkBTW ak9goJKtmheNo0YRcbvdrmygqh8BQzzAb8dz+WmnJbexdpaDe4zzo4HlnnFRAgLz +PJWXgfET/mc0l0nPjUllqyi21nKIqr6fUo+lQXYVT1WEdTgmNcfb1C/YPhloHQN U= Received: (qmail 4291 invoked by alias); 1 Oct 2014 09:15:33 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 4276 invoked by uid 89); 1 Oct 2014 09:15:31 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.7 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Date: Wed, 1 Oct 2014 14:45:19 +0530 From: Siddhesh Poyarekar To: Florian Weimer Cc: libc-alpha@sourceware.org, roland@hack.frob.com Subject: [PATCH 1/4 v1.1] Remove Wundef warnings for specification macros Message-ID: <20141001091518.GK2217@spoyarek.pnq.redhat.com> References: <1411122007-1461-1-git-send-email-siddhesh@redhat.com> <1411122007-1461-2-git-send-email-siddhesh@redhat.com> <54216E2E.5010807@redhat.com> <20140923144609.GF1716@spoyarek.pnq.redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20140923144609.GF1716@spoyarek.pnq.redhat.com> User-Agent: Mutt/1.5.22.1-rc1 (2013-10-16) Hi, Here's an updated version of this patch based on Florian's feedback. Tested on x86_64. Siddhesh commit 01f70b23d014d27898be8fa3d7a216c671007365 Author: Siddhesh Poyarekar Date: Wed Oct 1 14:34:08 2014 +0530 Remove Wundef warnings for specification macros This patch adds a file conf.list that is used to generate macros to determine if a macro is defined as set, unset or not defined. gen-conf.awk processes this file and generates a header (confdefs-defs.h) with these macros. A new header confdefs.h includes this generated header and defines accessor macros for the generated macros. Tested on x86_64. * posix/Makefile (before-compile): Add confdefs-defs.h. ($(objpfx)confdefs-defs.h): New target. * posix/conf.list: New file. * posix/confdefs.h: New file. * posix/confstr.c: Include confdefs.h. (confstr): Use CONF_IS_* macros. * posix/posix-envs.def: Include confdefs.h. Use CONF_IS_* macros. * scripts/gen-conf.awk: New file. diff --git a/posix/Makefile b/posix/Makefile index e6b69b4..bdf6e73 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -99,7 +99,7 @@ others := getconf install-bin := getconf install-others-programs := $(inst_libexecdir)/getconf -before-compile += testcases.h ptestcases.h +before-compile += testcases.h ptestcases.h confdefs-defs.h # So they get cleaned up. generated += $(addprefix wordexp-test-result, 1 2 3 4 5 6 7 8 9 10) \ @@ -325,3 +325,8 @@ $(objpfx)getconf.speclist: getconf-speclist.c posix-envs.def # be built both makes it available for eyeball inspection and avoids the # surprise of things that look like compilation being done by 'make install'. others: $(objpfx)getconf.speclist + +$(objpfx)confdefs-defs.h: conf.list Makefile $(..)scripts/gen-conf.awk + $(make-target-directory) + $(AWK) -f $(..)scripts/gen-conf.awk $< > $@.tmp + mv -f $@.tmp $@ diff --git a/posix/conf.list b/posix/conf.list new file mode 100644 index 0000000..3470895 --- /dev/null +++ b/posix/conf.list @@ -0,0 +1,22 @@ +# Configuration variables identified by getconf. The heading of each section +# is of the format TYPE:PREFIX with the opening curly brace on the same line. +# TYPE can either be SYSCONF, PATHCONF, CONFSTR or SPEC. Variable names are +# put one on each line with a curly brace on its own line ending the section. + +SPEC:POSIX { + V6_ILP32_OFF32 + V6_ILP32_OFFBIG + V6_LP64_OFF64 + V6_LPBIG_OFFBIG + V7_ILP32_OFF32 + V7_ILP32_OFFBIG + V7_LP64_OFF64 + V7_LPBIG_OFFBIG +} + +SPEC:XBS5 { + ILP32_OFF32 + ILP32_OFFBIG + LP64_OFF64 + LPBIG_OFFBIG +} diff --git a/posix/confdefs.h b/posix/confdefs.h new file mode 100644 index 0000000..64f0e03 --- /dev/null +++ b/posix/confdefs.h @@ -0,0 +1,15 @@ +#ifndef __CONFDEFS_H__ +#define __CONFDEFS_H__ + +#include + +#define CONF_DEF_UNDEFINED 1 +#define CONF_DEF_DEFINED_SET 2 +#define CONF_DEF_DEFINED_UNSET 3 + +#define CONF_IS_DEFINED_SET(conf) (conf##_DEF == CONF_DEF_DEFINED_SET) +#define CONF_IS_DEFINED_UNSET(conf) (conf##_DEF == CONF_DEF_DEFINED_UNSET) +#define CONF_IS_UNDEFINED(conf) (conf##_DEF == CONF_DEF_UNDEFINED) +#define CONF_IS_DEFINED(conf) (conf##_DEF != CONF_DEF_UNDEFINED) + +#endif diff --git a/posix/confstr.c b/posix/confstr.c index a2a1bf2..1accfee 100644 --- a/posix/confstr.c +++ b/posix/confstr.c @@ -21,6 +21,7 @@ #include #include #include "../version.h" +#include "confdefs.h" /* If BUF is not NULL and LEN > 0, fill in at most LEN - 1 bytes of BUF with the value corresponding to NAME and zero-terminate BUF. @@ -100,9 +101,9 @@ confstr (name, buf, len) case _CS_POSIX_V6_ILP32_OFF32_CFLAGS: case _CS_POSIX_V7_ILP32_OFF32_CFLAGS: #ifdef __ILP32_OFF32_CFLAGS -# if _POSIX_V7_ILP32_OFF32 == -1 +# if CONF_IS_DEFINED_UNSET (_POSIX_V7_ILP32_OFF32) # error "__ILP32_OFF32_CFLAGS should not be defined" -# elif !defined _POSIX_V7_ILP32_OFF32 +# elif CONF_IS_UNDEFINED (_POSIX_V7_ILP32_OFF32) if (__sysconf (_SC_V7_ILP32_OFF32) < 0) break; # endif @@ -115,9 +116,9 @@ confstr (name, buf, len) case _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS: case _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS: #ifdef __ILP32_OFFBIG_CFLAGS -# if _POSIX_V7_ILP32_OFFBIG == -1 +# if CONF_IS_DEFINED_UNSET (_POSIX_V7_ILP32_OFFBIG) # error "__ILP32_OFFBIG_CFLAGS should not be defined" -# elif !defined _POSIX_V7_ILP32_OFFBIG +# elif CONF_IS_UNDEFINED (_POSIX_V7_ILP32_OFFBIG) if (__sysconf (_SC_V7_ILP32_OFFBIG) < 0) break; # endif @@ -130,9 +131,9 @@ confstr (name, buf, len) case _CS_POSIX_V6_LP64_OFF64_CFLAGS: case _CS_POSIX_V7_LP64_OFF64_CFLAGS: #ifdef __LP64_OFF64_CFLAGS -# if _POSIX_V7_LP64_OFF64 == -1 +# if CONF_IS_DEFINED_UNSET (_POSIX_V7_LP64_OFF64) # error "__LP64_OFF64_CFLAGS should not be defined" -# elif !defined _POSIX_V7_LP64_OFF64 +# elif CONF_IS_UNDEFINED (_POSIX_V7_LP64_OFF64) if (__sysconf (_SC_V7_LP64_OFF64) < 0) break; # endif @@ -145,9 +146,9 @@ confstr (name, buf, len) case _CS_POSIX_V6_ILP32_OFF32_LDFLAGS: case _CS_POSIX_V7_ILP32_OFF32_LDFLAGS: #ifdef __ILP32_OFF32_LDFLAGS -# if _POSIX_V7_ILP32_OFF32 == -1 +# if CONF_IS_DEFINED_UNSET (_POSIX_V7_ILP32_OFF32 ) # error "__ILP32_OFF32_LDFLAGS should not be defined" -# elif !defined _POSIX_V7_ILP32_OFF32 +# elif CONF_IS_UNDEFINED (_POSIX_V7_ILP32_OFF32) if (__sysconf (_SC_V7_ILP32_OFF32) < 0) break; # endif @@ -160,9 +161,9 @@ confstr (name, buf, len) case _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS: case _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS: #ifdef __ILP32_OFFBIG_LDFLAGS -# if _POSIX_V7_ILP32_OFFBIG == -1 +# if CONF_IS_DEFINED_UNSET (_POSIX_V7_ILP32_OFFBIG) # error "__ILP32_OFFBIG_LDFLAGS should not be defined" -# elif !defined _POSIX_V7_ILP32_OFFBIG +# elif CONF_IS_UNDEFINED (_POSIX_V7_ILP32_OFFBIG) if (__sysconf (_SC_V7_ILP32_OFFBIG) < 0) break; # endif @@ -175,9 +176,9 @@ confstr (name, buf, len) case _CS_POSIX_V6_LP64_OFF64_LDFLAGS: case _CS_POSIX_V7_LP64_OFF64_LDFLAGS: #ifdef __LP64_OFF64_LDFLAGS -# if _POSIX_V7_LP64_OFF64 == -1 +# if CONF_IS_DEFINED_UNSET (_POSIX_V7_LP64_OFF64) # error "__LP64_OFF64_LDFLAGS should not be defined" -# elif !defined _POSIX_V7_LP64_OFF64 +# elif CONF_IS_UNDEFINED (_POSIX_V7_LP64_OFF64) if (__sysconf (_SC_V7_LP64_OFF64) < 0) break; # endif @@ -188,7 +189,8 @@ confstr (name, buf, len) case _CS_LFS_CFLAGS: case _CS_LFS_LINTFLAGS: -#if _POSIX_V6_ILP32_OFF32 == 1 && _POSIX_V6_ILP32_OFFBIG == 1 +#if (CONF_IS_DEFINED_SET (_POSIX_V6_ILP32_OFF32) \ + && CONF_IS_DEFINED_SET (_POSIX_V6_ILP32_OFFBIG)) # define __LFS_CFLAGS "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" /* Signal that we want the new ABI. */ string = __LFS_CFLAGS; diff --git a/posix/posix-envs.def b/posix/posix-envs.def index 05043e9..9047d0c 100644 --- a/posix/posix-envs.def +++ b/posix/posix-envs.def @@ -42,35 +42,37 @@ defined. These are called with arguments V5, V6, V7 before and after the relevant groups of environments. */ +#include "confdefs.h" + START_ENV_GROUP (V7) -#if _POSIX_V7_ILP32_OFF32 > 0 +#if CONF_IS_DEFINED_SET (_POSIX_V7_ILP32_OFF32) KNOWN_PRESENT_ENVIRONMENT (V7, POSIX_V7, ILP32_OFF32) -#elif defined _POSIX_V7_ILP32_OFF32 +#elif CONF_IS_DEFINED (_POSIX_V7_ILP32_OFF32) KNOWN_ABSENT_ENVIRONMENT (V7, POSIX_V7, ILP32_OFF32) #else UNKNOWN_ENVIRONMENT (V7, POSIX_V7, ILP32_OFF32) #endif -#if _POSIX_V7_ILP32_OFFBIG > 0 +#if CONF_IS_DEFINED_SET (_POSIX_V7_ILP32_OFFBIG) KNOWN_PRESENT_ENVIRONMENT (V7, POSIX_V7, ILP32_OFFBIG) -#elif defined _POSIX_V7_ILP32_OFFBIG +#elif CONF_IS_DEFINED (_POSIX_V7_ILP32_OFFBIG) KNOWN_ABSENT_ENVIRONMENT (V7, POSIX_V7, ILP32_OFFBIG) #else UNKNOWN_ENVIRONMENT (V7, POSIX_V7, ILP32_OFFBIG) #endif -#if _POSIX_V7_LP64_OFF64 > 0 +#if CONF_IS_DEFINED_SET (_POSIX_V7_LP64_OFF64) KNOWN_PRESENT_ENVIRONMENT (V7, POSIX_V7, LP64_OFF64) -#elif defined _POSIX_V7_LP64_OFF64 +#elif CONF_IS_DEFINED (_POSIX_V7_LP64_OFF64) KNOWN_ABSENT_ENVIRONMENT (V7, POSIX_V7, LP64_OFF64) #else UNKNOWN_ENVIRONMENT (V7, POSIX_V7, LP64_OFF64) #endif -#if _POSIX_V7_LPBIG_OFFBIG > 0 +#if CONF_IS_DEFINED_SET (_POSIX_V7_LPBIG_OFFBIG) KNOWN_PRESENT_ENVIRONMENT (V7, POSIX_V7, LPBIG_OFFBIG) -#elif defined _POSIX_V7_LPBIG_OFFBIG +#elif CONF_IS_DEFINED (_POSIX_V7_LPBIG_OFFBIG) KNOWN_ABSENT_ENVIRONMENT (V7, POSIX_V7, LPBIG_OFFBIG) #else UNKNOWN_ENVIRONMENT (V7, POSIX_V7, LPBIG_OFFBIG) @@ -80,33 +82,33 @@ END_ENV_GROUP (V7) START_ENV_GROUP (V6) -#if _POSIX_V6_ILP32_OFF32 > 0 +#if CONF_IS_DEFINED_SET (_POSIX_V6_ILP32_OFF32) KNOWN_PRESENT_ENVIRONMENT (V6, POSIX_V6, ILP32_OFF32) -#elif defined _POSIX_V6_ILP32_OFF32 +#elif CONF_IS_DEFINED (_POSIX_V6_ILP32_OFF32) KNOWN_ABSENT_ENVIRONMENT (V6, POSIX_V6, ILP32_OFF32) #else UNKNOWN_ENVIRONMENT (V6, POSIX_V6, ILP32_OFF32) #endif -#if _POSIX_V6_ILP32_OFFBIG > 0 +#if CONF_IS_DEFINED_SET (_POSIX_V6_ILP32_OFFBIG) KNOWN_PRESENT_ENVIRONMENT (V6, POSIX_V6, ILP32_OFFBIG) -#elif defined _POSIX_V6_ILP32_OFFBIG +#elif CONF_IS_DEFINED (_POSIX_V6_ILP32_OFFBIG) KNOWN_ABSENT_ENVIRONMENT (V6, POSIX_V6, ILP32_OFFBIG) #else UNKNOWN_ENVIRONMENT (V6, POSIX_V6, ILP32_OFFBIG) #endif -#if _POSIX_V6_LP64_OFF64 > 0 +#if CONF_IS_DEFINED_SET (_POSIX_V6_LP64_OFF64) KNOWN_PRESENT_ENVIRONMENT (V6, POSIX_V6, LP64_OFF64) -#elif defined _POSIX_V6_LP64_OFF64 +#elif CONF_IS_DEFINED (_POSIX_V6_LP64_OFF64) KNOWN_ABSENT_ENVIRONMENT (V6, POSIX_V6, LP64_OFF64) #else UNKNOWN_ENVIRONMENT (V6, POSIX_V6, LP64_OFF64) #endif -#if _POSIX_V6_LPBIG_OFFBIG > 0 +#if CONF_IS_DEFINED_SET (_POSIX_V6_LPBIG_OFFBIG) KNOWN_PRESENT_ENVIRONMENT (V6, POSIX_V6, LPBIG_OFFBIG) -#elif defined _POSIX_V6_LPBIG_OFFBIG +#elif CONF_IS_DEFINED (_POSIX_V6_LPBIG_OFFBIG) KNOWN_ABSENT_ENVIRONMENT (V6, POSIX_V6, LPBIG_OFFBIG) #else UNKNOWN_ENVIRONMENT (V6, POSIX_V6, LPBIG_OFFBIG) @@ -116,33 +118,33 @@ END_ENV_GROUP (V6) START_ENV_GROUP (V5) -#if _XBS5_ILP32_OFF32 > 0 +#if CONF_IS_DEFINED_SET (_XBS5_ILP32_OFF32) KNOWN_PRESENT_ENVIRONMENT (XBS5, XBS5, ILP32_OFF32) -#elif defined _XBS5_ILP32_OFF32 +#elif CONF_IS_DEFINED (_XBS5_ILP32_OFF32) KNOWN_ABSENT_ENVIRONMENT (XBS5, XBS5, ILP32_OFF32) #else UNKNOWN_ENVIRONMENT (XBS5, XBS5, ILP32_OFF32) #endif -#if _XBS5_ILP32_OFFBIG > 0 +#if CONF_IS_DEFINED_SET (_XBS5_ILP32_OFFBIG) KNOWN_PRESENT_ENVIRONMENT (XBS5, XBS5, ILP32_OFFBIG) -#elif defined _XBS5_ILP32_OFFBIG +#elif CONF_IS_DEFINED (_XBS5_ILP32_OFFBIG) KNOWN_ABSENT_ENVIRONMENT (XBS5, XBS5, ILP32_OFFBIG) #else UNKNOWN_ENVIRONMENT (XBS5, XBS5, ILP32_OFFBIG) #endif -#if _XBS5_LP64_OFF64 > 0 +#if CONF_IS_DEFINED_SET (_XBS5_LP64_OFF64) KNOWN_PRESENT_ENVIRONMENT (XBS5, XBS5, LP64_OFF64) -#elif defined _XBS5_LP64_OFF64 +#elif CONF_IS_DEFINED (_XBS5_LP64_OFF64) KNOWN_ABSENT_ENVIRONMENT (XBS5, XBS5, LP64_OFF64) #else UNKNOWN_ENVIRONMENT (XBS5, XBS5, LP64_OFF64) #endif -#if _XBS5_LPBIG_OFFBIG > 0 +#if CONF_IS_DEFINED_SET (_XBS5_LPBIG_OFFBIG) KNOWN_PRESENT_ENVIRONMENT (XBS5, XBS5, LPBIG_OFFBIG) -#elif defined _XBS5_LPBIG_OFFBIG +#elif CONF_IS_DEFINED (_XBS5_LPBIG_OFFBIG) KNOWN_ABSENT_ENVIRONMENT (XBS5, XBS5, LPBIG_OFFBIG) #else UNKNOWN_ENVIRONMENT (XBS5, XBS5, LPBIG_OFFBIG) diff --git a/scripts/gen-conf.awk b/scripts/gen-conf.awk new file mode 100644 index 0000000..45a4d44 --- /dev/null +++ b/scripts/gen-conf.awk @@ -0,0 +1,63 @@ +# Generate confdefs-defs.h with definitions for {CONF}_DEF for each +# configuration variable that getconf or sysconf may use. Currently it is +# equipped only to generate such macros for specification macros and for +# SYSCONF macros in the _POSIX namespace. + +BEGIN { + PROCINFO["sorted_in"] = "@val_type_asc" + prefix = "" +} + +$1 ~ /^#/ || $0 ~ /^\s*$/ { + next +} + +# Begin a new prefix. +$2 == "{" { + split ($1, arr, ":") + type = arr[1] + prefix = arr[2] + next +} + +$1 == "}" { + prefix = "" + type = "" + next +} + +{ + if (prefix == "" && type == "" && sc_prefix == "") { + print "Syntax error" > "/dev/stderr" + exit 1 + } + + # The prefix and variable names are indices and the value indicates what type + # of variable it is. The possible options are: + # CONFSTR: A configuration string + # SYSCONF: A numeric value + # SPEC: A specification + conf[prefix][$1] = type +} + +ENDFILE { + print "/* Autogenerated by gen-conf.awk. */\n" + + # Generate macros that specify if a sysconf macro is defined and/or set. + for (p in conf) { + for (c in conf[p]) { + printf "#ifndef _%s_%s\n", p, c + printf "# define _%s_%s_DEF CONF_DEF_UNDEFINED\n", p, c + # CONFSTR have string values and they are not set or unset. + if (conf[p][c] != "CONFSTR") { + printf "#else\n" + printf "# if _%s_%s > 0\n", p, c + printf "# define _%s_%s_DEF CONF_DEF_DEFINED_SET\n", p, c + printf "# else\n" + printf "# define _%s_%s_DEF CONF_DEF_DEFINED_UNSET\n", p, c + printf "# endif\n" + } + printf "#endif\n\n" + } + } +}