From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wg0-f45.google.com (mail-wg0-f45.google.com [74.125.82.45]) by dpdk.org (Postfix) with ESMTP id A908BB7B1 for ; Sat, 21 Feb 2015 05:16:39 +0100 (CET) Received: by mail-wg0-f45.google.com with SMTP id k14so16505459wgh.4 for ; Fri, 20 Feb 2015 20:16:39 -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:cc:subject:date:message-id:in-reply-to :references; bh=uQWdp2DofpUm7HWQngbv1tVqyjuBCy0HQI++9/n223I=; b=ivWwi9NeMTWr2T7PHCeBQbmyk3jt/H3FHRCKMc/m0nf1h/5MHvUGBTtJx2yqM2xIRr 6Pr9ijoLqHfPndQlKZB2My2Kva/PajbT768Gng0P+ur7otyEghNO3SCnIcEXnDD0pWUb fW45+1fDQkYWK0/bPPdvxoJj8BpnmADUMx5vwOZrdDWavHy+GdsCr2s96IJ85tsqONrU HtWdPBm1A1BAD/k1/5c4ZwQl5VVDNYyxsBkHNMhEebcuVd3sO7VAwf+pGXmyu0dfTYZR nmAr2UO+KxeBr0ApCOy1nC8s84GVM+igqCYWLjEDu96MPXomj3I85oDiXhCKBV5KC8Qk 26Vg== X-Gm-Message-State: ALoCoQlEsnqA1tUFhGrDpRqcXagF9qs0g2nhvuMGCNgv9KN8+viNNd672MiMoRSOeaWcUC05MhEr X-Received: by 10.180.211.101 with SMTP id nb5mr862772wic.37.1424492199583; Fri, 20 Feb 2015 20:16:39 -0800 (PST) Received: from 6wind.com (6wind.net2.nerim.net. [213.41.180.237]) by mx.google.com with ESMTPSA id fo8sm5251944wib.14.2015.02.20.20.16.38 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 20 Feb 2015 20:16:38 -0800 (PST) From: Adrien Mazarguil To: dev@dpdk.org Date: Sat, 21 Feb 2015 05:16:11 +0100 Message-Id: <1424492174-27072-2-git-send-email-adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1424492174-27072-1-git-send-email-adrien.mazarguil@6wind.com> References: <1422544846-10697-1-git-send-email-adrien.mazarguil@6wind.com> <1424492174-27072-1-git-send-email-adrien.mazarguil@6wind.com> Subject: [dpdk-dev] [PATCH v2 1/4] scripts: add auto-config-h.sh 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: Sat, 21 Feb 2015 04:16:39 -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 --- scripts/auto-config-h.sh | 137 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100755 scripts/auto-config-h.sh diff --git a/scripts/auto-config-h.sh b/scripts/auto-config-h.sh new file mode 100755 index 0000000..d897e80 --- /dev/null +++ b/scripts/auto-config-h.sh @@ -0,0 +1,137 @@ +#!/bin/sh +# +# BSD LICENSE +# +# Copyright(c) 2014-2015 6WIND S.A. +# All rights reserved. +# +# 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