Gregory (Grisha) Trubetskoy wrote:

OK, here is the flex scoop - as the the docs point out, anything before 2.5.31 is not reentrant and I think even uses a slightly different interface so older flex won't even process the psp_parser.l file correctly.

Looking at Fedora Core 4, it still has flex 2.5.4a. (Note that 2.5.31 > 2.5.4 because 31 > 4 - I for a while had trouble seeing that for some reason), so the new flex is still not commonplace.

This is true. I took a quick survey when I was adding the --with-flex option, and 2.5.4 was the most common. Oh, and the version numbering confused me for a while as well, but the configure script does take it into account when deciding if it has the correct flex.

So until reentrant flex becomes commonplace, the solution was to include
a pre-parsed psp_parser.c so that you woudln't need flex at all to compile mod_python. Looks like this still should be the case.

The ./configure should just print a warning that if flex is not found or too old, should you need to rebuild psp_parser.c you will need to get the right version of flex.

When I added the flex detection I had not considered the case where there was *no* flex on the system... just tested for the correct version. :-(

Also, I wasn't sure how verbose to make the configure message. I just figured that people would see the WARNING and then go to the README to see what the deal was, which would have been the perfect plan... if I had actually updated the README accordingly.

I'll make the fixes to configure and the README. Is the explanation in doc-html/inst-configure.html clear or does it need to be revised as well?

Jim


See doc-html/inst-configure.html:

""" Attempts to locate flex and determine its version. If flex cannot be found in your PATH configure will fail. If the wrong version is found configure will generate a warning. You can generally ignore this warning unless you need to re-create src/psp_parser.c.

The parser used by psp (See 4.9) is written in C generated using flex. This requires a reentrant version of flex which at this time is 2.5.31. Most platforms however ship with version 2.5.4 which is not suitable, so a pre-generated copy of psp_parser.c is included with the source. If you do need to compile src/psp_parser.c you must get the correct flex version.

If the first flex binary in the path is not suitable or not the one desired you can specify an alternative location with the --with-flex option, e.g:

   $ ./configure --with-flex=/usr/local/bin/flex

"""

I'll copy this into the README as well.

In 3.1.x the path to flex was hard coded to /usr/local/bin, which caused compilation to fail and required the user to edit the Makefile manually. Other than the detection of the flex path, the behaviour is the same as 3.1.x. The previous warning about needing the correct flex version was just a comment in the Makefile. Any suggestions on how to make this clearer are welcome.

Reply via email to