DPDK patches and discussions
 help / color / mirror / Atom feed
From: Adrien Mazarguil <adrien.mazarguil@6wind.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v2 1/4] scripts: add auto-config-h.sh
Date: Sat, 21 Feb 2015 05:16:11 +0100	[thread overview]
Message-ID: <1424492174-27072-2-git-send-email-adrien.mazarguil@6wind.com> (raw)
In-Reply-To: <1424492174-27072-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

  reply	other threads:[~2015-02-21  4:16 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 ` [dpdk-dev] [PATCH 1/2] scripts: add auto-config-h.sh Adrien Mazarguil
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   ` Adrien Mazarguil [this message]
2015-02-25 13:52   ` [dpdk-dev] [PATCH v3 0/3] " 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=1424492174-27072-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).