Blame view

RIOT/dist/tools/genconfigheader/genconfigheader.sh 2.14 KB
a752c7ab   elopes   add first test an...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
  #!/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" -o "$(uname -s)" = "FreeBSD" ]; 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}"
  
  [ -n "${LTOFLAGS}" ] && echo "/* LTOFLAGS=${LTOFLAGS} */" >> "${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