Difference between revisions of "Testing removal of ifdef or configure checks"

(include hint from Thomas Nagy on getting CPP output for just one file)
(remove space correctly refer to gcc-E script name (not an direct gcc -E invocation))
 
Line 13: Line 13:
 
  git checkout origin/master
 
  git checkout origin/master
 
  git clean -x -f -d
 
  git clean -x -f -d
  CC="gcc -E" ./configure.developer && make -j
+
  CC="gcc-E" ./configure.developer && make -j
 
  mv bin /tmp/master-bin
 
  mv bin /tmp/master-bin
 
   
 
   
 
  git checkout newbranch
 
  git checkout newbranch
 
  git clean -x -f -d
 
  git clean -x -f -d
  CC="gcc -E" ./configure.developer && make -j
+
  CC="gcc-E" ./configure.developer && make -j
  
 
===Reading the results===
 
===Reading the results===

Latest revision as of 21:58, 14 March 2020

#ifdef removal is risky

Large-scale removal of "unused" ifdef or the configure checks that produce #defines is an important, but risky task.

It is difficult (and time consuming) to prove that the code is unused and that there is no change to the compiled output.

A script to help obtain CPP output

File:Gcc-E.py.txt is a Python script that wraps gcc -E (to get the CPP output) to attempt to solve this dilemma, so as to provide a result that can be reasoned with via tools like dirdiff

Getting the results

git checkout origin/master
git clean -x -f -d
CC="gcc-E" ./configure.developer && make -j
mv bin /tmp/master-bin

git checkout newbranch
git clean -x -f -d
CC="gcc-E" ./configure.developer && make -j

Reading the results

dirdiff /tmp/master-bin bin

or

diff -ur --ignore-matching-lines="^#" /tmp/master-bin/ bin> /tmp/diff

Getting just one file's CPP output

Thanks to waf author Thomas Nagy

WAF_CMD_FORMAT=string PYTHONHASHSEED=1 WAF_MAKE=1  ./buildtools/bin/waf -v build

Then just edit the command to add the -E (and perhaps a new output file).