From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wi0-f175.google.com (mail-wi0-f175.google.com [209.85.212.175]) by dpdk.org (Postfix) with ESMTP id D9CED9A94 for ; Wed, 25 Feb 2015 14:52:23 +0100 (CET) Received: by mail-wi0-f175.google.com with SMTP id r20so33563998wiv.2 for ; Wed, 25 Feb 2015 05:52:23 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=nQ8JaP+ZcETY1/uFlKLSOwbc99S+thXBSEtg1o1kqbQ=; b=JFsHFdLvF2TPorpZMZYuHdDOmIwVIJcW72D2uAZ6aqwFE26qHUCIQbaF44AiXbwwia NzqpMWxIQKgJ4B1e5gqouBONMaDmiCpmm2RKCFvOEBHT3ZGEsNA6FCgMJvJafdctgoDj V/vbT7wlckpffUsGogDDzv7loNGMavZddpKeRnUkLIYgiCHL7lbgOFdo1Vlk7ddaGvOV NxJF6c1Y5VB8qW+VUQBLkjQ8PtaYR4iTgJ+Xq2j0cp6bAvfVts8tp0ev3gY39N/Df3SA jispDrOb7mcJOfwMMudAzXTvK742sYZ3v4wWmJoltadgjUAqx+lNc/hL49maXHXdhLTH hfzA== X-Gm-Message-State: ALoCoQm3FGceYAcJXPHnANU6V9QiNebnlXYQrUq+5S+7bVf5r5ZWJgqjLzX/97BYBUhDYyZv+QUO X-Received: by 10.180.97.226 with SMTP id ed2mr39530298wib.4.1424872343694; Wed, 25 Feb 2015 05:52:23 -0800 (PST) Received: from 6wind.com (6wind.net2.nerim.net. [213.41.180.237]) by mx.google.com with ESMTPSA id ch6sm64928386wjc.3.2015.02.25.05.52.22 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Wed, 25 Feb 2015 05:52:23 -0800 (PST) From: Adrien Mazarguil To: dev@dpdk.org Date: Wed, 25 Feb 2015 14:52:04 +0100 Message-Id: <1424872326-17930-2-git-send-email-adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1424872326-17930-1-git-send-email-adrien.mazarguil@6wind.com> References: <1424492174-27072-1-git-send-email-adrien.mazarguil@6wind.com> <1424872326-17930-1-git-send-email-adrien.mazarguil@6wind.com> Subject: [dpdk-dev] [PATCH v3 1/3] scripts: check features to generate configuration header X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Feb 2015 13:52:24 -0000 This script looks for types, macros and functions in header files using compilation options found in the environment (CC, CFLAGS, CPPFLAGS) to define feature macros in a generated header. Useful in combination with external headers that do not provide such macros. Signed-off-by: Adrien Mazarguil --- MAINTAINERS | 1 + scripts/auto-config-h.sh | 136 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100755 scripts/auto-config-h.sh diff --git a/MAINTAINERS b/MAINTAINERS index 349ad2b..631e8ea 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -45,6 +45,7 @@ F: Makefile F: config/ F: mk/ F: pkg/ +F: scripts/auto-config-h.sh F: scripts/depdirs-rule.sh F: scripts/gen-build-mk.sh F: scripts/gen-config-h.sh diff --git a/scripts/auto-config-h.sh b/scripts/auto-config-h.sh new file mode 100755 index 0000000..4356d7e --- /dev/null +++ b/scripts/auto-config-h.sh @@ -0,0 +1,136 @@ +#!/bin/sh +# +# BSD LICENSE +# +# Copyright 2014-2015 6WIND S.A. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of 6WIND S.A. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Crude script to detect whether particular types, macros and functions are +# defined by trying to compile a file with a given header. Can be used to +# perform cross-platform checks since the resulting object file is not +# executed. +# +# Set VERBOSE=1 in the environment to display compiler output and errors. +# +# CC, CPPFLAGS, CFLAGS, EXTRA_CPPFLAGS and EXTRA_CFLAGS are taken from the +# environment. +# +# AUTO_CONFIG_CFLAGS may append additional CFLAGS without modifying the +# above variables. + +file=${1:?output file name required (config.h)} +macro=${2:?output macro name required (HAVE_*)} +include=${3:?include name required (foo.h)} +type=${4:?object type required (define, enum, type, field, func)} +name=${5:?define/type/function name required} + +: ${CC:=cc} + +temp=/tmp/${0##*/}.$$.c + +case $type in +define) + code="\ +#ifndef $name +#error $name not defined +#endif +" + ;; +enum) + code="\ +long test____ = $name; +" + ;; +type) + code="\ +$name test____; +" + ;; +field) + code="\ +void test____(void) +{ + ${name%%.*} test_____; + + (void)test_____.${name#*.}; +} +" + ;; +func) + code="\ +void (*test____)() = (void (*)())$name; +" + ;; +*) + unset error + : ${error:?unknown object type \"$type\"} + exit +esac + +if [ "${VERBOSE}" = 1 ] +then + err=2 + out=1 + eol=' +' +else + exec 3> /dev/null || + exit + err=3 + out=3 + eol=' ' +fi && +printf 'Looking for %s %s in %s.%s' \ + "${name}" "${type}" "${include}" "${eol}" && +printf "\ +#include <%s> + +%s +" "$include" "$code" > "${temp}" && +if ${CC} ${CPPFLAGS} ${EXTRA_CPPFLAGS} ${CFLAGS} ${EXTRA_CFLAGS} \ + ${AUTO_CONFIG_CFLAGS} \ + -c -o /dev/null "${temp}" 1>&${out} 2>&${err} +then + rm -f "${temp}" + printf "\ +#ifndef %s +#define %s 1 +#endif /* %s */ + +" "${macro}" "${macro}" "${macro}" >> "${file}" && + printf 'Defining %s.\n' "${macro}" +else + rm -f "${temp}" + printf "\ +/* %s is not defined. */ + +" "${macro}" >> "${file}" && + printf 'Not defining %s.\n' "${macro}" +fi + +exit -- 2.1.0