Browse Source
make: Place most configuration macros in a separate file instead of on the command linepr/spi.typo


6 changed files with 131 additions and 21 deletions
@ -0,0 +1,14 @@
|
||||
genconfigheader.sh |
||||
------------------ |
||||
|
||||
Usage: `genconfigheader.sh <output_header_file> [CFLAGS]` |
||||
|
||||
Generate a build configuration header from CFLAGS arguments |
||||
|
||||
- Arguments on the form `-Dmacro_name=macro_value` will be converted to |
||||
the form `#define macro_name macro_value` |
||||
- Arguments given on the form `-Dmacro_name` will be converted to the form `#define macro_name 1` |
||||
- The output file will be overwritten if it already exists _and_ the new output file's contents differs from the old file. |
||||
|
||||
By not replacing the output file on every run, make can still use the file |
||||
modification times for dependency calculations. |
@ -0,0 +1,84 @@
|
||||
#!/bin/sh |
||||
|
||||
# |
||||
# Copyright (C) 2016 Eistec AB |
||||
# |
||||
# This file is subject to the terms and conditions of the GNU Lesser General |
||||
# Public License v2.1. See the file LICENSE in the top level directory for more |
||||
# details. |
||||
# |
||||
|
||||
DEBUG=0 |
||||
if [ "${QUIET}" != "1" ]; then |
||||
DEBUG=1 |
||||
fi |
||||
|
||||
if [ $# -lt 1 ]; then |
||||
echo "Usage: $0 <output.h> [CFLAGS]..." |
||||
echo "Extract all macros from CFLAGS and generate a header file" |
||||
exit 1 |
||||
fi |
||||
OUTPUTFILE="$1" |
||||
shift |
||||
|
||||
MD5SUM=md5sum |
||||
if [ "$(uname -s)" = "Darwin" ]; then |
||||
MD5SUM=md5 -r |
||||
fi |
||||
|
||||
# atomically update the file |
||||
TMPFILE= |
||||
trap '[ -n "${TMPFILE}" ] && rm -f "${TMPFILE}"' EXIT |
||||
# Create temporary output file |
||||
TMPFILE=$(mktemp ${OUTPUTFILE}.XXXXXX) |
||||
|
||||
if [ -z "${TMPFILE}" ]; then |
||||
echo "Error creating temporary file, aborting" |
||||
exit 1 |
||||
fi |
||||
|
||||
# exit on any errors below this line |
||||
set -e |
||||
|
||||
echo "/* DO NOT edit this file, your changes will be overwritten and won't take any effect! */" > "${TMPFILE}" |
||||
echo "/* Generated from CFLAGS: $@ */" >> "${TMPFILE}" |
||||
for arg in "$@"; do |
||||
case ${arg} in |
||||
-D*) |
||||
# Strip leading -D |
||||
d=${arg#-D} |
||||
if [ -z "${d##*=*}" ]; then |
||||
# key=value pairs |
||||
key=${d%%=*} |
||||
value=${d#*=} |
||||
echo "#define $key $value" >> "${TMPFILE}" |
||||
else |
||||
# simple #define |
||||
echo "#define $d 1" >> "${TMPFILE}" |
||||
fi |
||||
;; |
||||
-U*) |
||||
# Strip leading -U |
||||
d=${arg#-U} |
||||
echo "#undef $d" >> "${TMPFILE}" |
||||
;; |
||||
*) |
||||
continue |
||||
;; |
||||
esac |
||||
done |
||||
|
||||
# Only replace old file if the new file differs. This allows make to check the |
||||
# date of the config header for dependency calculations. |
||||
NEWMD5=$(${MD5SUM} ${TMPFILE} | cut -c -32) |
||||
OLDMD5=$(${MD5SUM} ${OUTPUTFILE} 2>/dev/null | cut -c -32) |
||||
if [ "${NEWMD5}" != "${OLDMD5}" ]; then |
||||
if [ "${DEBUG}" -eq 1 ]; then echo "Replacing ${OUTPUTFILE} (${NEWMD5} != ${OLDMD5})"; fi |
||||
# Set mode according to umask |
||||
chmod +rw "${TMPFILE}" |
||||
mv -f "${TMPFILE}" "${OUTPUTFILE}" |
||||
else |
||||
if [ "${DEBUG}" -eq 1 ]; then echo "Keeping old ${OUTPUTFILE}"; fi |
||||
fi |
||||
|
||||
# $TMPFILE will be deleted by the EXIT trap above if it still exists when we exit |
Loading…
Reference in new issue