quetz-mod_python-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeff Robbins" <je...@livedata.com>
Subject Re: mod_python 3.3.0-dev-20061109 tests on Win32
Date Wed, 15 Nov 2006 15:35:35 GMT
There are a number of build warnings on Win32 that I have been looking at. 
While some are no doubt windows-specific, some look to be generic C 
programming errors.   Is there a goal of getting to a warning-free build?

Two changes to mod_python.h remove a number of the warnings.  The first 
change is for Win32, and involves having the right flavor of DL_IMPORT in 
play.  DL_IMPORT is a deprecated pyport.h macro (from python) that lets 
users of DLL functions get the correct external declaration while 
implementors of these functions get the correct internal declaration.

The second change is to fix the declaration of  mp_release_interpreter which 
is a void, not a void *.  I doubt this matters but it is an error. 
APR_DECLARE_OPTIONAL_FN(void, mp_release_interpreter, ());

The remaining build warnings are attached in a txt file for anyone who 
cares.  I assume many are innocuous, but there are things like 
python_filter() and python_input_filter() using different types for their 
readbytes argument that I don't understand.  Why should these two functions 
declare this arg differently?

- Jeff
----- Original Message ----- 
From: "Graham Dumpleton" <grahamd@dscpl.com.au>
To: "Jeff Robbins" <jeffr@livedata.com>
Cc: <python-dev@httpd.apache.org>
Sent: Tuesday, November 14, 2006 6:03 PM
Subject: Re: mod_python 3.3.0-dev-20061109 tests on Win32


> Jeff, can you download:
>
> 
> http://svn.apache.org/viewvc/httpd/mod_python/trunk/dist/setup.py.in?revision=475037
>
> and use it in place of dist/setup.py.in and use build_installer.bat to
> confirm that it autodetects the APR lib versions okay.
>
> Also, can you send us the mod_python.vcproj file you modified to add
> finfoobject.c so we can include it back in mod_python source code.
>
> Thanks.
>
> Graham
>
> Jeff Robbins wrote ..
>> Nicolas,
>>
>> I downloaded the stock 2.2.3 binary build.  To get setup.py to link, I
>> had to edit this:
>>
>>         if winbuild:
>>             libraries = ['libhttpd', 'libapr-1', 'libaprutil-1', 
>> 'ws2_32']
>>
>> (added the -1 to libapr and libaprutil)
>>
>> The resultant build produced _psp.pyd and also a mod_python_so.pyd which
>> I renamed mod_python.so and it ran.
>>
>> Does this sound right?
>>
>> - Jeff
>>   ----- Original Message ----- 
>>   From: Nicolas Lehuen
>>   To: Graham Dumpleton
>>   Cc: python-dev@httpd.apache.org
>>   Sent: Sunday, November 12, 2006 21:04
>>   Subject: Re: mod_python 3.3.0-dev-20061109 tests on Win32
>>
>>
>>   Indeed, the APACHESRC variable has a slightly misleading name, since
>> it doesn't need the full blown source installation. When building 
>> mod_python
>> I'm using a stock Win32 Apache 2.0 or 2.2 binary build downloaded from
>> http://httpd.apache.org/, not a source distribution. It may or may not
>> work with a source distribution, but I'm positive it does with a binary
>> one, so Jeff, you should definitely try it this way.
>>
>>   Regards,
>>   Nicolas
>>
>>
>>   2006/11/13, Graham Dumpleton <grahamd@dscpl.com.au>:
>>     Jeff Robbins wrote ..
>>     > Graham,
>>     >
>>     > These instructions are not sufficient.  The apache environment I
>> have on
>>     > windows has include files in <apachesr>/include but also in
>>     > <apachesrc>/srclib/apr/include, 
>> <apachesrc>/srclib/apr-iconv/include,
>> and
>>     > <apachesrc>/srclib/apr-util/include
>>     >
>>     > Setting the APACHESRC environmental per the instructions only finds
>> the
>>     > includes in $APACHESRC/include but not the apr files like apr.h in
>> the
>>     > error
>>     > I posted.  In the vcproj file, I had to tell the IDE in some dialog
>> where
>>     > to
>>     > find these include files.  Is there some other environmental or is
>> there
>>     > some copy phase in the build on Linux that gets all the include 
>> files
>> into
>>     > $APACHESRC/include?
>>
>>     All this suggests you are setting APACHESRC to where the original 
>> source
>> code
>>     for Apache resides. Can you see if there is a distinct area where the
>> include
>>     files are installed into along with Apache binaries, modules, config
>> etc. I'm
>>     not a Windows person, but do you have a \Apache2 directory with an
>> include
>>     directory under that. If so, set APACHESRC to \Apache2. If not, then
>> will have
>>     to hope Nicolas is reading email at the moment and comment and he is
>> the
>>     one who normally builds the Win32 binary releases for us.
>>
>>     > Where is apr.h on your machine?
>>
>>     In the single include directory along with ap_*.h header files etc
>> where Apache
>>     was installed into.
>>
>>     Graham
>>
>>     > ----- Original Message -----
>>     > From: "Graham Dumpleton" <grahamd@dscpl.com.au>
>>     > To: < python-dev@httpd.apache.org>
>>     > Sent: Sunday, November 12, 2006 20:18
>>     > Subject: Re: mod_python 3.3.0-dev-20061109 tests on Win32
>>     >
>>     >
>>     > > Try follow these instructions:
>>     > >
>>     > > 
>> http://www.modpython.org/pipermail/mod_python/2006-September/022092.html
>>     > >
>>     > > If these are correct, they probably should be put in the source
>> code
>>     > if
>>     > > they
>>     > > aren't already.
>>     > >
>>     > > Graham
>>     > >
>>     > > Jeff Robbins wrote ..
>>     > >> re: building on Win32
>>     > >>
>>     > >> I tried using setup.py but even once I set APACHESRC it still
>> couldn't
>>     > >> find
>>     > >> the apr* include directories.  I set ext_modules = [PSPModule]
>> alone
>>     > and
>>     > >> it
>>     > >> built _psp.pyd no problem!
>>     > >>
>>     > >>
>>     > >> C:\work\mod_python-3.3.0-dev-20061109\dist>python setup.py build
>>     > >> running build
>>     > >> running build_py
>>     > >> running build_ext
>>     > >> building 'mod_python_so' extension
>>     > >> C:\Program Files\Microsoft Visual Studio .NET 
>> 2003\Vc7\bin\cl.exe
>> /c
>>     > >> /nologo
>>     > >> /Ox
>>     > >>  /MD /W3 /GX
>>     > >> /DNDEBUG -DWIN32 -DNDEBUG -D_WINDOWS -IC:\work\mod_python- 
>> 3.3.0-dev
>>     > 
>>  >> -20061109\src\include -IC:\work\httpd-2.2.3\include -IC:\Python24\include
>>     > >> -IC:\P
>>     > >> ython24\PC 
>> /TcC:\work\mod_python-3.3.0-dev-20061109\src\mod_python.c
>>     > >> /FoC:\work\
>>     > >> mod_python-3.3.0-dev-20061109\src\mod_python.obj
>>     > >> mod_python.c
>>     > >> c:\work\httpd-2.2.3\include\ap_config.h(25) : fatal error C1083:
>> Cannot
>>     > >> open
>>     > >> inc
>>     > >> lude file: 'apr.h': No such file or directory
>>     > >> error: command '"C:\Program Files\Microsoft Visual Studio .NET
>>     > >> 2003\Vc7\bin\cl.e
>>     > >> xe"' failed with exit status 2
>>     > >>
>>     > >>
>>     > >> ----- Original Message -----
>>     > >> From: "Graham Dumpleton" <grahamd@dscpl.com.au>
>>     > >> To: "Jeff Robbins" < jeffr@livedata.com>
>>     > >> Cc: "python-dev list" <python-dev@httpd.apache.org>
>>     > >> Sent: Saturday, November 11, 2006 20:18
>>     > >> Subject: Re: mod_python 3.3.0-dev-20061109 tests on Win32
>>     > >>
>>     > >>
>>     > >> >
>>     > >> > On 12/11/2006, at 12:31 AM, Jeff Robbins wrote:
>>     > >> >
>>     > >> >> 3 problems found on Win32:
>>     > >> >>
>>     > >> >>
>>     > >> >> 1) _psp didn't build and I don't know how to build it
>>     > >> >
>>     > >> > How are you trying to build mod_python in the first place?
Are
>> you
>>     > >> > using
>>     > >> > dist/build_installer.bat or using VisualStudio project file.
>> The
>>     > >> > latter
>>     > >> > isn't
>>     > >> > really used any longer and isn't tested. We know that it 
>> doesn't
>> list
>>     > >> the
>>     > >> > finfoobject.c file for a start.
>>     > >> >
>>     > >> >> 2) In the 'Testing PythonImport' test, the path separators
>> in the
>>     > two
>>     > >> >> paths being compared are different (no doubt due to Win32
>> backslash
>>     > >> vs
>>     > >> >> forward slash issues)
>>     > >> >>
>>     > >> >> the tests.py code does this:
>>     > >> >>    directory = os.path.dirname(__file__)
>>     > >> >>    assert( sys.path.count(directory) == 1)
>>     > >> >>
>>     > >> >> os.path.dirname(__file__) is 'C:\\work\\mod_python-3.3.0-
>>     > >> >> dev-20061109\\test\\htdocs'
>>     > >> >>
>>     > >> >> yet sys.path has this in it 
>> 'C:/work/mod_python-3.3.0-dev-20061109/
>>     > >> >> test\\\\htdocs'
>>     > >> >>
>>     > >> >> so the assert fails since the first string can't be found
in
>> sys.path
>>     > >> >> (count == 0)
>>     > >> >
>>     > >> > If in test/test.py you change:
>>     > >> >
>>     > >> >         c = Container(PythonPath("[r'%s']+sys.path" % 
>> DOCUMENT_ROOT),
>>     > >> >
>>     > >> > to:
>>     > >> >
>>     > >> >         c = Container(PythonPath("[r'%s']+sys.path" %
>>     > >> > os.path.normpath(DOCUMENT_ROOT)),
>>     > >> >
>>     > >> > does it pass?
>>     > >> >
>>     > >> >> 3) in test_interpreter_per_directory() the code does this:
>>     > >> >>        rsp = self.vhost_get("test_interpreter_per_directory",
>> '/
>>     > >> >> subdir/foo.py').upper()
>>     > >> >>
>>     > >> >> interpreter+'SUBDIR/' is 
>> 'C:/WORK/MOD_PYTHON-3.3.0-DEV-20061109/
>>     > >> >> TEST/HTDOCS/SUBDIR/'
>>     > >> >> rsp is 'C:/WORK/MOD_PYTHON- 3.3.0-DEV-20061109/TEST/HTDOCS/'
>>     > >> >>
>>     > >> >> I don't understand the tests.py code but it looks like
in the
>>     > >> >> interpreter() code
>>     > >> >> def interpreter(req):
>>     > >> >>    if req.phase == "PythonFixupHandler":
>>     > >> >>        if req.filename[-1] != '/' and 
>> os.path.isdir(req.filename):
>>     > >> >>            req.write(req.interpreter )
>>     > >> >>            return apache.DONE
>>     > >> >>        return apache.OK
>>     > >> >>    else:
>>     > >> >>        req.write(req.interpreter)
>>     > >> >>        return apache.DONE
>>     > >> >>
>>     > >> >> perhaps the req.filename 
>> 'C:/work/mod_python-3.3.0-dev-20061109/
>>     > >> >> test/htdocs/subdir' is supposed to pass the os.path.isdir()
>>     > >> >> test...but
>>     > >> >> it doesn't.  There is no 'subdir' folder under htdocs
so  on
>> Win32,
>>     > >> >> os.path.isdir() returns False.  Maybe this is an os 
>> dependency?
>>     > >> >
>>     > >> > The 'subdir' directory exists in the tarball. Any chance you
>>     > >> > accidentally
>>     > >> > deleted
>>     > >> > it somehow? Can you in a fresh directory unpack the tarball,
>> verify
>>     > >> that
>>     > >> > the
>>     > >> > directory exists and then rebuild and retest?
>>     > >> >
>>     > >> > Graham
>>     > >> >
>>     > >> >
>>     > >
> 

Mime
View raw message