From: Adrien Mazarguil <adrien.mazarguil@6wind.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH 1/2] scripts: add auto-config-h.sh
Date: Thu, 29 Jan 2015 16:20:45 +0100 [thread overview]
Message-ID: <1422544846-10697-2-git-send-email-adrien.mazarguil@6wind.com> (raw)
In-Reply-To: <1422544846-10697-1-git-send-email-adrien.mazarguil@6wind.com>
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 <adrien.mazarguil@6wind.com>
---
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
next prev parent reply other threads:[~2015-01-29 15:21 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-29 15:20 [dpdk-dev] [PATCH 0/2] Mellanox ConnectX-3 PMD Adrien Mazarguil
2015-01-29 15:20 ` Adrien Mazarguil [this message]
2015-01-29 15:20 ` [dpdk-dev] [PATCH 2/2] mlx4: new poll mode driver Adrien Mazarguil
2015-01-29 15:37 ` Stephen Hemminger
2015-01-29 15:45 ` Adrien Mazarguil
2015-02-21 4:16 ` [dpdk-dev] [PATCH v2 0/4] Mellanox ConnectX-3 PMD Adrien Mazarguil
2015-02-21 4:16 ` [dpdk-dev] [PATCH v2 1/4] scripts: add auto-config-h.sh Adrien Mazarguil
2015-02-25 13:52 ` [dpdk-dev] [PATCH v3 0/3] Mellanox ConnectX-3 PMD Adrien Mazarguil
2015-02-25 13:52 ` [dpdk-dev] [PATCH v3 1/3] scripts: check features to generate configuration header Adrien Mazarguil
2015-02-25 13:52 ` [dpdk-dev] [PATCH v3 2/3] mlx4: new poll mode driver Adrien Mazarguil
2015-02-25 13:52 ` [dpdk-dev] [PATCH v3 3/3] doc: add librte_pmd_mlx4 documentation Adrien Mazarguil
2015-03-02 17:45 ` Butler, Siobhan A
2015-02-25 15:13 ` [dpdk-dev] [PATCH v3 0/3] Mellanox ConnectX-3 PMD Thomas Monjalon
2015-02-26 11:51 ` Gleb Natapov
2015-02-26 13:36 ` Thomas Monjalon
2015-02-26 13:49 ` Gleb Natapov
2015-02-26 14:18 ` Adrien Mazarguil
2015-02-26 15:03 ` Gleb Natapov
2015-02-27 18:38 ` Adrien Mazarguil
2015-03-01 11:07 ` Gleb Natapov
2015-02-21 4:17 ` [dpdk-dev] [PATCH v2 2/4] mlx4: new poll mode driver Adrien Mazarguil
2015-02-21 4:17 ` [dpdk-dev] [PATCH v2 3/4] maintainers: claim responsibility for mlx4 PMD Adrien Mazarguil
2015-02-21 4:17 ` [dpdk-dev] [PATCH v2 4/4] doc: add librte_pmd_mlx4 documentation Adrien Mazarguil
2015-03-01 11:15 ` [dpdk-dev] [PATCH 0/2] Mellanox ConnectX-3 PMD Keunhong Lee
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1422544846-10697-2-git-send-email-adrien.mazarguil@6wind.com \
--to=adrien.mazarguil@6wind.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).