gpp (conditional compilation)

Discussion in 'Python' started by maxwell@ldc.upenn.edu, May 2, 2007.

  1. Guest

    I'm trying to use the gpp utility (Gnu points to http://en.nothingisreal.com/wiki/GPP)
    to do conditional compilation in Python, and I'm running into a
    problem: the same '#' character introduces Python comments and is used
    by default to introduce #ifdef etc. lines.

    Here's an example of what I'm trying to do:

    #ifdef DEBUG
    stderr.write("variable is...") #details of msg omitted
    #endif

    I'm using the following args to gpp:
    +s \" \" \" +s \' \' \' +c \\\# \\n -n
    The result is that the #ifdef and #endif lines get treated as
    comments, rather than instructions to gpp to keep or omit the lines in
    between.

    I tried just omitting the +c arg, but then I get msgs at the end of
    each file saying
    Input ended while scanning a comment/string
    apparently because I use apostrophes inside comments, and gpp thinks
    those are unterminated strings.

    I can think of some work-arounds, like "don't use apostrophes inside
    comments", or "don't use single-quoted strings (or define them for
    gpp)" or "use a different char for the first char of a gpp macro".
    But I'd rather not...

    Does anyone have a set of gpp args that plays well with Python? (Or
    makefiles, where I presume the same problem comes up.)

    Mike Maxwell
    CASL/ U MD
     
    , May 2, 2007
    #1
    1. Advertising

  2. Guest

    On Wed, May 02, 2007 at 10:37:40AM -0700, wrote:
    > I'm trying to use the gpp utility (Gnu points to http://en.nothingisreal.com/wiki/GPP)
    > to do conditional compilation in Python, and I'm running into a
    > problem: the same '#' character introduces Python comments and is used
    > by default to introduce #ifdef etc. lines.


    The hacks you'll need to wrap gpp in to get it to work will make your
    head spin.

    I'm not sure what brought you to gpp, but if you're looking for a basic
    macro-processing language suitable for the kinds of tasks the C
    preprocessor performs, I would recommend M4. GNU has an implementation
    of the language, and it's actually quite widely used as the basis for
    the GNU autotools suite. It is incredibly flexible (enough so that its
    learning curve is a bit steep, but not too bad), but that flexibility
    enables it to work with just about any underlying language.

    Dustin
     
    , May 2, 2007
    #2
    1. Advertising

  3. Duncan Booth Guest

    "" <> wrote:

    > I'm trying to use the gpp utility (Gnu points to
    > http://en.nothingisreal.com/wiki/GPP) to do conditional compilation in
    > Python, and I'm running into a problem: the same '#' character
    > introduces Python comments and is used by default to introduce #ifdef
    > etc. lines.
    >
    > Here's an example of what I'm trying to do:
    >
    > #ifdef DEBUG
    > stderr.write("variable is...") #details of msg omitted
    > #endif
    >


    Why do you want conditional compilation. Is there anything wrong with:

    if __debug__:
    stderr.write("variable is...") #details of msg omitted

    If you run Python with the -O command line option the code protected by the
    if statement will be optimised out.

    For most other purposes where you might use conditional compilation just
    adding 'if' statements to execute at runtime (or try/except) will do the
    same purpose:

    if sys.platform=='win32':
    def foo():
    ... something ...
    else:
    def foo():
    .... something different ...
     
    Duncan Booth, May 2, 2007
    #3
  4. John Nagle Guest

    wrote:
    > I'm trying to use the gpp utility (Gnu points to http://en.nothingisreal.com/wiki/GPP)
    > to do conditional compilation in Python, and I'm running into a
    > problem: the same '#' character introduces Python comments and is used
    > by default to introduce #ifdef etc. lines.


    Just use an "if" statement. The Python interpreter is so slow
    it won't matter.

    John Nagle
     
    John Nagle, May 2, 2007
    #4
  5. Guest

    (replying to myself because I got four good replies)

    Wow! That was fast! OK, I'll try out these ideas, and many thanks!

    Mike Maxwell
     
    , May 2, 2007
    #5
  6. In article <Xns9924BED31AD3Aduncanbooth@127.0.0.1>,
    Duncan Booth <> wrote:
    >"" <> wrote:
    >
    >> I'm trying to use the gpp utility (Gnu points to
    >> http://en.nothingisreal.com/wiki/GPP) to do conditional compilation in
    >> Python, and I'm running into a problem: the same '#' character
    >> introduces Python comments and is used by default to introduce #ifdef
    >> etc. lines.
    >>
    >> Here's an example of what I'm trying to do:
    >>
    >> #ifdef DEBUG
    >> stderr.write("variable is...") #details of msg omitted
    >> #endif
    >>

    >
    >Why do you want conditional compilation. Is there anything wrong with:
    >
    > if __debug__:
    > stderr.write("variable is...") #details of msg omitted
    >
    >If you run Python with the -O command line option the code protected by the
    >if statement will be optimised out.
    >
    >For most other purposes where you might use conditional compilation just
    >adding 'if' statements to execute at runtime (or try/except) will do the
    >same purpose:
    >
    >if sys.platform=='win32':
    > def foo():
    > ... something ...
    >else:
    > def foo():
    > .... something different ...


    I want to reinforce this. Yes, it is possible to pre-process Python
    source, it's even been done before, and I'm sympathetic to the
    suggestion that m4's more appropriate than gpp.

    However, Duncan and others who've followed up are right: you can
    live without this stuff. In fact, those who think they need condi-
    tional compilation with Python are, with very few exceptions, simply
    mistaken. The urge to transform Python source this way almost always
    is a symptom of unfamiliarity with Python potential and good style.

    It's not just that Python can do without conditional compilation;
    Python offers *better* means to achieve the same goals.
     
    Cameron Laird, May 2, 2007
    #6
  7. En Wed, 02 May 2007 14:37:40 -0300,
    <> escribió:

    > I'm trying to use the gpp utility (Gnu points to
    > http://en.nothingisreal.com/wiki/GPP)
    > to do conditional compilation in Python, and I'm running into a
    > problem: the same '#' character introduces Python comments and is used
    > by default to introduce #ifdef etc. lines.
    >
    > Here's an example of what I'm trying to do:
    >
    > #ifdef DEBUG
    > stderr.write("variable is...") #details of msg omitted
    > #endif


    In addition to all previous comments, I just want to menction the
    existence of Tools/Scripts/ifdef.py, included in every Python install; it
    can process #if #ifdef #else etc.

    --
    Gabriel Genellina
     
    Gabriel Genellina, May 3, 2007
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Rolf Hemmerling
    Replies:
    2
    Views:
    574
    Nils Petter Vaskinn
    Nov 18, 2003
  2. Rolf Hemmerling
    Replies:
    0
    Views:
    675
    Rolf Hemmerling
    Nov 19, 2003
  3. Robert Bralic
    Replies:
    4
    Views:
    3,068
  4. Compilator GPP

    , Jun 16, 2006, in forum: C++
    Replies:
    3
    Views:
    571
    Victor Bazarov
    Jun 22, 2006
  5. Replies:
    2
    Views:
    289
Loading...

Share This Page