PATH:
usr
/
lib64
/
python2.7
/
Tools
/
scripts
#! /usr/bin/env python # Selectively preprocess #ifdef / #ifndef statements. # Usage: # ifdef [-Dname] ... [-Uname] ... [file] ... # # This scans the file(s), looking for #ifdef and #ifndef preprocessor # commands that test for one of the names mentioned in the -D and -U # options. On standard output it writes a copy of the input file(s) # minus those code sections that are suppressed by the selected # combination of defined/undefined symbols. The #if(n)def/#else/#else # lines themselfs (if the #if(n)def tests for one of the mentioned # names) are removed as well. # Features: Arbitrary nesting of recognized and unrecognized # preprocesor statements works correctly. Unrecognized #if* commands # are left in place, so it will never remove too much, only too # little. It does accept whitespace around the '#' character. # Restrictions: There should be no comments or other symbols on the # #if(n)def lines. The effect of #define/#undef commands in the input # file or in included files is not taken into account. Tests using # #if and the defined() pseudo function are not recognized. The #elif # command is not recognized. Improperly nesting is not detected. # Lines that look like preprocessor commands but which are actually # part of comments or string literals will be mistaken for # preprocessor commands. import sys import getopt defs = [] undefs = [] def main(): opts, args = getopt.getopt(sys.argv[1:], 'D:U:') for o, a in opts: if o == '-D': defs.append(a) if o == '-U': undefs.append(a) if not args: args = ['-'] for filename in args: if filename == '-': process(sys.stdin, sys.stdout) else: f = open(filename, 'r') process(f, sys.stdout) f.close() def process(fpi, fpo): keywords = ('if', 'ifdef', 'ifndef', 'else', 'endif') ok = 1 stack = [] while 1: line = fpi.readline() if not line: break while line[-2:] == '\\\n': nextline = fpi.readline() if not nextline: break line = line + nextline tmp = line.strip() if tmp[:1] != '#': if ok: fpo.write(line) continue tmp = tmp[1:].strip() words = tmp.split() keyword = words[0] if keyword not in keywords: if ok: fpo.write(line) continue if keyword in ('ifdef', 'ifndef') and len(words) == 2: if keyword == 'ifdef': ko = 1 else: ko = 0 word = words[1] if word in defs: stack.append((ok, ko, word)) if not ko: ok = 0 elif word in undefs: stack.append((ok, not ko, word)) if ko: ok = 0 else: stack.append((ok, -1, word)) if ok: fpo.write(line) elif keyword == 'if': stack.append((ok, -1, '')) if ok: fpo.write(line) elif keyword == 'else' and stack: s_ok, s_ko, s_word = stack[-1] if s_ko < 0: if ok: fpo.write(line) else: s_ko = not s_ko ok = s_ok if not s_ko: ok = 0 stack[-1] = s_ok, s_ko, s_word elif keyword == 'endif' and stack: s_ok, s_ko, s_word = stack[-1] if s_ko < 0: if ok: fpo.write(line) del stack[-1] ok = s_ok else: sys.stderr.write('Unknown keyword %s\n' % keyword) if stack: sys.stderr.write('stack: %s\n' % stack) if __name__ == '__main__': main()
[+]
..
[-] setup.pyo
[edit]
[-] classfix.py
[edit]
[-] cvsfiles.pyo
[edit]
[-] fixps.pyc
[edit]
[-] fixdiv.py
[edit]
[-] ptags.pyc
[edit]
[-] pysource.pyc
[edit]
[-] h2py.py
[edit]
[-] svneol.py
[edit]
[-] win_add2path.pyc
[edit]
[-] suff.py
[edit]
[-] untabify.py
[edit]
[-] parseentities.py
[edit]
[-] objgraph.pyc
[edit]
[-] mailerdaemon.pyo
[edit]
[-] findlinksto.pyo
[edit]
[-] checkappend.py
[edit]
[-] fixps.py
[edit]
[-] untabify.pyo
[edit]
[-] setup.py
[edit]
[-] find_recursionlimit.pyc
[edit]
[-] nm2def.pyc
[edit]
[-] copytime.pyo
[edit]
[-] dutree.pyc
[edit]
[-] which.py
[edit]
[-] db2pickle.pyo
[edit]
[-] serve.pyo
[edit]
[-] svneol.pyc
[edit]
[-] lll.py
[edit]
[-] pindent.pyc
[edit]
[-] h2py.pyo
[edit]
[-] lll.pyo
[edit]
[-] analyze_dxp.py
[edit]
[-] byteyears.pyc
[edit]
[-] reindent-rst.pyo
[edit]
[-] serve.py
[edit]
[-] mkreal.py
[edit]
[-] ndiff.pyo
[edit]
[-] combinerefs.pyc
[edit]
[-] diff.pyc
[edit]
[-] fixnotice.pyo
[edit]
[-] texcheck.pyc
[edit]
[-] analyze_dxp.pyo
[edit]
[-] byext.py
[edit]
[-] dutree.py
[edit]
[-] which.pyc
[edit]
[-] texcheck.pyo
[edit]
[-] reindent.pyo
[edit]
[-] methfix.pyo
[edit]
[-] ndiff.py
[edit]
[-] texi2html.pyc
[edit]
[-] parseentities.pyc
[edit]
[-] checkpyc.pyc
[edit]
[-] hotshotmain.py
[edit]
[-] ftpmirror.pyo
[edit]
[-] fixps.pyo
[edit]
[-] redemo.pyo
[edit]
[-] fixcid.pyo
[edit]
[-] finddiv.pyo
[edit]
[-] which.pyo
[edit]
[-] redemo.py
[edit]
[-] suff.pyc
[edit]
[-] cleanfuture.py
[edit]
[-] combinerefs.py
[edit]
[-] ptags.pyo
[edit]
[-] byext.pyc
[edit]
[-] db2pickle.py
[edit]
[-] cvsfiles.py
[edit]
[-] pindent.py
[edit]
[-] diff.pyo
[edit]
[-] analyze_dxp.pyc
[edit]
[-] cleanfuture.pyo
[edit]
[-] dutree.pyo
[edit]
[-] eptags.pyo
[edit]
[-] pysource.py
[edit]
[-] reindent.pyc
[edit]
[-] google.pyc
[edit]
[-] logmerge.py
[edit]
[-] lfcr.py
[edit]
[-] finddiv.pyc
[edit]
[-] classfix.pyo
[edit]
[-] lfcr.pyo
[edit]
[-] treesync.py
[edit]
[-] hotshotmain.pyo
[edit]
[-] nm2def.py
[edit]
[-] byext.pyo
[edit]
[-] ftpmirror.py
[edit]
[-] treesync.pyc
[edit]
[-] copytime.py
[edit]
[-] finddiv.py
[edit]
[-] ifdef.py
[edit]
[-] patchcheck.pyo
[edit]
[-] objgraph.pyo
[edit]
[-] ptags.py
[edit]
[-] objgraph.py
[edit]
[-] cvsfiles.pyc
[edit]
[-] pysource.pyo
[edit]
[-] pathfix.py
[edit]
[-] linktree.pyc
[edit]
[-] eptags.py
[edit]
[-] patchcheck.py
[edit]
[-] mkreal.pyc
[edit]
[-] rgrep.pyc
[edit]
[-] google.py
[edit]
[-] win_add2path.py
[edit]
[-] texcheck.py
[edit]
[-] pathfix.pyo
[edit]
[-] gprof2html.py
[edit]
[-] pickle2db.pyc
[edit]
[-] findnocoding.pyc
[edit]
[-] nm2def.pyo
[edit]
[-] checkappend.pyo
[edit]
[-] texi2html.py
[edit]
[-] crlf.pyc
[edit]
[-] treesync.pyo
[edit]
[-] findlinksto.py
[edit]
[-] pdeps.pyc
[edit]
[-] fixheader.pyo
[edit]
[-] pdeps.pyo
[edit]
[-] findnocoding.py
[edit]
[-] setup.pyc
[edit]
[-] methfix.pyc
[edit]
[-] logmerge.pyo
[edit]
[-] reindent.py
[edit]
[-] hotshotmain.pyc
[edit]
[-] gprof2html.pyc
[edit]
[-] redemo.pyc
[edit]
[-] fixheader.py
[edit]
[-] diff.py
[edit]
[-] classfix.pyc
[edit]
[-] ftpmirror.pyc
[edit]
[-] google.pyo
[edit]
[-] db2pickle.pyc
[edit]
[-] pathfix.pyc
[edit]
[-] ifdef.pyo
[edit]
[-] xxci.pyc
[edit]
[-] rgrep.pyo
[edit]
[-] cleanfuture.pyc
[edit]
[-] reindent-rst.pyc
[edit]
[-] svneol.pyo
[edit]
[-] xxci.pyo
[edit]
[-] parseentities.pyo
[edit]
[-] md5sum.py
[edit]
[-] eptags.pyc
[edit]
[-] mailerdaemon.pyc
[edit]
[-] pickle2db.pyo
[edit]
[-] win_add2path.pyo
[edit]
[-] serve.pyc
[edit]
[-] byteyears.pyo
[edit]
[-] fixdiv.pyo
[edit]
[-] logmerge.pyc
[edit]
[-] pickle2db.py
[edit]
[-] checkpyc.pyo
[edit]
[-] fixdiv.pyc
[edit]
[-] find_recursionlimit.py
[edit]
[-] crlf.pyo
[edit]
[-] suff.pyo
[edit]
[-] lll.pyc
[edit]
[-] rgrep.py
[edit]
[-] untabify.pyc
[edit]
[-] ifdef.pyc
[edit]
[-] fixheader.pyc
[edit]
[-] fixcid.pyc
[edit]
[-] crlf.py
[edit]
[-] checkappend.pyc
[edit]
[-] xxci.py
[edit]
[-] findnocoding.pyo
[edit]
[-] mkreal.pyo
[edit]
[-] patchcheck.pyc
[edit]
[-] linktree.pyo
[edit]
[-] texi2html.pyo
[edit]
[-] fixcid.py
[edit]
[-] ndiff.pyc
[edit]
[-] md5sum.pyo
[edit]
[-] findlinksto.pyc
[edit]
[-] reindent-rst.py
[edit]
[-] linktree.py
[edit]
[-] byteyears.py
[edit]
[-] md5sum.pyc
[edit]
[-] copytime.pyc
[edit]
[-] combinerefs.pyo
[edit]
[-] fixnotice.py
[edit]
[-] pdeps.py
[edit]
[-] fixnotice.pyc
[edit]
[-] lfcr.pyc
[edit]
[-] checkpyc.py
[edit]
[-] methfix.py
[edit]
[-] pindent.pyo
[edit]
[-] mailerdaemon.py
[edit]
[-] gprof2html.pyo
[edit]
[-] h2py.pyc
[edit]
[-] find_recursionlimit.pyo
[edit]