File: extract_switches.sh

package info (click to toggle)
cbmc 6.6.0-4
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 153,852 kB
  • sloc: cpp: 386,459; ansic: 114,466; java: 28,405; python: 6,003; yacc: 4,552; makefile: 4,041; lex: 2,487; xml: 2,388; sh: 2,050; perl: 557; pascal: 184; javascript: 163; ada: 36
file content (42 lines) | stat: -rwxr-xr-x 1,793 bytes parent folder | download
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
#!/usr/bin/env bash

set -e

CXX=$1
shift

# make sure we execute the remainder in the directory containing this script
cd `dirname $0`

echo "Compiling the helper file to extract the raw list of parameters from cbmc"
$CXX -E -dM -std=c++17 -I../../src ../../src/cbmc/cbmc_parse_options.cpp -o macros.c
echo CBMC_OPTIONS >> macros.c

echo "Converting the raw parameter list to the format required by autocomplete scripts"
rawstring="`$CXX -E -P -w macros.c` \"?h(help)\""
rm macros.c

#now the main bit, convert from raw format to a proper list of switches
cleanstring=`(
  #extract 2-hyphen switches, such as --foo
  #grep for '(foo)' expressions, and then use sed to remove parantheses and put '--' at the start
  (echo $rawstring | grep -o "([^)]*)" | sed "s/^.\(.*\).$/--\1/") ;
  #extract 1-hyphen switches, such as -F
  #use sed to remove all (foo) expressions, then you're left with switches and ':', so grep the colons out and then use sed to include the '-'
  (echo $rawstring | sed "s/([^)]*)//g" | grep -o "[a-zA-Z0-9?]" | sed "s/\(.*\)/-\1/")
 ) | tr '\n' ' '`

#sanity check that there is only one line of output
if [ `echo $cleanstring | wc -l | awk '{print $1}'` -ne 1 ]; then
 echo "Problem converting the parameter list to the correct format, I was expecting one line but either got 0 or >2. This is likely to be an error in this conversion script."
 exit 1;
fi

#sanity check that there are no dangerous characters
if echo $cleanstring | grep -q "[^a-zA-Z0-9? -]"; then
 echo "Problem converting the parameter list to the correct format, illegal characters detected. This is likely to be an error in this conversion script."
 exit 1;
fi

echo "Injecting the parameter list to the autocomplete file."
sed "5 s/.*/  local switches=\"$cleanstring\"/" cbmc.sh.template > cbmc.sh