You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.9 KiB
71 lines
1.9 KiB
#!/bin/sh |
|
|
|
# Copyright 2015 The Chromium OS Authors. All rights reserved. |
|
# Use of this source code is governed by a BSD-style license that can be |
|
# found in the LICENSE file. |
|
|
|
# Generates a header file with a named constant table made up of "name", value |
|
# entries by including several build target header files and emitting the list |
|
# of defines. Use of the preprocessor is needed to recursively include all |
|
# relevant headers. |
|
|
|
set -e |
|
|
|
if [ $# -ne 1 ] && [ $# -ne 2 ]; then |
|
echo "Usage: $(basename "$0") OUTFILE" |
|
echo "Usage: $(basename "$0") CC OUTFILE" |
|
exit 1 |
|
fi |
|
|
|
if [ $# -eq 2 ]; then |
|
CC="$1" |
|
shift |
|
fi |
|
OUTFILE="$1" |
|
|
|
INCLUDES=' |
|
#include <errno.h> |
|
#include <fcntl.h> |
|
#include <linux/prctl.h> |
|
#include <linux/sched.h> |
|
#include <stddef.h> |
|
#include <signal.h> |
|
#include <sys/stat.h> |
|
#include <sys/types.h>' |
|
|
|
# Generate a dependency file which helps the build tool to see when it |
|
# should regenerate ${OUTFILE}. |
|
echo "${INCLUDES}" | ${CC} - -E -M -MF "${OUTFILE}.d.tmp" |
|
# Correct the output filename. |
|
(echo "${OUTFILE}: \\" ; sed -e 's/^-\.o://' -e 's/^-://' "${OUTFILE}.d.tmp") \ |
|
> "${OUTFILE}.d" |
|
rm "${OUTFILE}.d.tmp" |
|
|
|
# sed expression which extracts constants and converts them from: |
|
# #define AT_FDWCD foo |
|
# to: |
|
# #ifdef AT_FDCWD |
|
# { "AT_FDWCD", AT_FDCWD }, |
|
# endif |
|
SED_MULTILINE='s@#define ([[:upper:]][[:upper:]0-9_]*).*@#ifdef \1\ |
|
{ "\1", (unsigned long) \1 },\ |
|
#endif // \1@' |
|
|
|
# Passes the previous list of #includes to the C preprocessor and prints out |
|
# all #defines whose name is all-caps. Excludes a few symbols that are known |
|
# macro functions that don't evaluate to a constant. |
|
cat <<-EOF > "${OUTFILE}" |
|
/* GENERATED BY MAKEFILE */ |
|
$INCLUDES |
|
|
|
#include "libconstants.h" |
|
const struct constant_entry constant_table[] = { |
|
$(echo "$INCLUDES" | \ |
|
${CC} -dD - -E | \ |
|
grep -E '^#define [[:upper:]][[:upper:]0-9_]*(\s)+[[:alnum:]]' | \ |
|
grep -Ev '(SIGRTMAX|SIGRTMIN|SIG_|NULL)' | \ |
|
sort -u | \ |
|
sed -Ee "${SED_MULTILINE}") |
|
{ NULL, 0 }, |
|
}; |
|
EOF
|
|
|