X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=devtools%2Fcheck-symbol-change.sh;h=ed2178e36e9e02a6db5d7f153459f66a9b3f9f4a;hb=fba5af82adc8aad741e206161800fcb94a133ab7;hp=9952a8d664556c65f2a27f57de6214c2c86d4c66;hpb=4bec48184e33893a9530a451e5a053d723a88769;p=dpdk.git diff --git a/devtools/check-symbol-change.sh b/devtools/check-symbol-change.sh index 9952a8d664..ed2178e36e 100755 --- a/devtools/check-symbol-change.sh +++ b/devtools/check-symbol-change.sh @@ -4,10 +4,10 @@ build_map_changes() { - local fname=$1 - local mapdb=$2 + local fname="$1" + local mapdb="$2" - cat $fname | awk ' + cat "$fname" | awk ' # Initialize our variables BEGIN {map="";sym="";ar="";sec=""; in_sec=0; in_map=0} @@ -17,22 +17,21 @@ build_map_changes() # map files are altered, and all section/symbol names # appearing between a triggering of this rule and the # next trigger of this rule are associated with this file - /[-+] a\/.*\.map/ {map=$2; in_map=1} + /[-+] [ab]\/.*\.map/ {map=$2; in_map=1; next} - # Same pattern as above, only it matches on anything that - # does not end in 'map', indicating we have left the map chunk. - # When we hit this, turn off the in_map variable, which - # supresses the subordonate rules below - /[-+] a\/.*\.^(map)/ {in_map=0} + # The previous rule catches all .map files, anything else + # indicates we left the map chunk. + /[-+] [ab]\// {in_map=0} - # Triggering this rule, which starts a line with a + and ends it + # Triggering this rule, which starts a line and ends it # with a { identifies a versioned section. The section name is # the rest of the line with the + and { symbols remvoed. # Triggering this rule sets in_sec to 1, which actives the # symbol rule below - /+.*{/ {gsub("+",""); + /^.*{/ { + gsub("+", ""); if (in_map == 1) { - sec=$1; in_sec=1; + sec=$(NF-1); in_sec=1; } } @@ -71,16 +70,16 @@ build_map_changes() print map " " sym " unknown del" } } - }' > ./$mapdb + }' > "$mapdb" - sort -u $mapdb > ./$mapdb.2 - mv -f $mapdb.2 $mapdb + sort -u "$mapdb" > "$mapdb.2" + mv -f "$mapdb.2" "$mapdb" } check_for_rule_violations() { - local mapdb=$1 + local mapdb="$1" local mname local symname local secname @@ -89,14 +88,14 @@ check_for_rule_violations() while read mname symname secname ar do - if [ "$ar" == "add" ] + if [ "$ar" = "add" ] then - if [ "$secname" == "unknown" ] + if [ "$secname" = "unknown" ] then # Just inform the user of this occurrence, but # don't flag it as an error - echo -n "INFO: symbol $syname is added but " + echo -n "INFO: symbol $symname is added but " echo -n "patch has insuficient context " echo -n "to determine the section name " echo -n "please ensure the version is " @@ -104,26 +103,52 @@ check_for_rule_violations() continue fi - if [ "$secname" != "EXPERIMENTAL" ] + oldsecname=$(sed -n \ + "s#$mname $symname \(.*\) del#\1#p" "$mapdb") + + # A symbol can not enter a non experimental + # section directly + if [ -z "$oldsecname" ] then - # Symbols that are getting added in a section - # other than the experimental section - # to be moving from an already supported - # section or its a violation - grep -q \ - "$mname $symname [^EXPERIMENTAL] del" $mapdb - if [ $? -ne 0 ] + if [ "$secname" = 'EXPERIMENTAL' ] then + echo -n "INFO: symbol $symname has " + echo -n "been added to the " + echo -n "EXPERIMENTAL section of the " + echo "version map" + continue + else echo -n "ERROR: symbol $symname " - echo -n "is added in a section " - echo -n "other than the EXPERIMENTAL " + echo -n "is added in the $secname " + echo -n "section, but is expected to " + echo -n "be added in the EXPERIMENTAL " echo "section of the version map" ret=1 + continue fi fi + + # This symbol is moving inside a section, nothing to do + if [ "$oldsecname" = "$secname" ] + then + continue + fi + + # This symbol is moving between two sections (the + # original section is not experimental). + # This can be legit, just warn. + if [ "$oldsecname" != 'EXPERIMENTAL' ] + then + echo -n "INFO: symbol $symname is being " + echo -n "moved from $oldsecname to $secname. " + echo -n "Ensure that it has gone through the " + echo "deprecation process" + continue + fi else - if [ "$secname" != "EXPERIMENTAL" ] + if ! grep -q "$mname $symname .* add" "$mapdb" && \ + [ "$secname" != "EXPERIMENTAL" ] then # Just inform users that non-experimenal # symbols need to go through a deprecation @@ -133,27 +158,26 @@ check_for_rule_violations() echo "gone through the deprecation process" fi fi - done < $mapdb + done < "$mapdb" return $ret } trap clean_and_exit_on_sig EXIT -mapfile=`mktemp mapdb.XXXXXX` +mapfile=`mktemp -t dpdk.mapdb.XXXXXX` patch=$1 exit_code=1 clean_and_exit_on_sig() { - rm -f $mapfile + rm -f "$mapfile" exit $exit_code } -build_map_changes $patch $mapfile -check_for_rule_violations $mapfile +build_map_changes "$patch" "$mapfile" +check_for_rule_violations "$mapfile" exit_code=$? - -rm -f $mapfile +rm -f "$mapfile" exit $exit_code