[Distutils] Help: request for assistance with PyOpenGL distribution using distutils on NT

Rene Liebscher R.Liebscher@gmx.de
Mon Sep 18 07:23:01 2000


Thomas Heller wrote:
> 
> >
> > D:\bin\lang\studio\VC98\BIN\cl.exe /c /nologo /Ox /MD /W3 /GX -Isrc
> > -ID:\bin\lang\Python\Include /Tcsrc/_glumodule.c
> > /Fobuild\temp.win32\Release\src/_glumodule.obj
> >
> > Doesn't work.  The GUI under the old BUILD.py uses:
> >
> > /nologo /MD /W3 /GX /O2 /Ob2 /I "D:\bin\lang\Python\include" /D "WIN32" /D
> > "_WINDOWS" /D "NDEBUG" /Fp"tmp\./_glu.pch" /YX /Fo"tmp\./" /Fd"tmp\./" /FD
> > /c
> >
> > and works fine.
> 
> This is not related to C/C++ problems.
> The problem is that WIN32 and _WINDOWS is not defined in the first run.
> Insert the define_macros parameter:
>            Extension("_glu",
>                 ["src/_glumodule.c"],
>                 libraries=glu_libs,
>                 library_dirs=glu_lib_dirs,
>                 define_macros=[("WIN32", None), ("_WINDOWS", None)],
>                ),
> in your setup-script and it should work.
> (This may also be necessary for other extensions).

'define_macros' only works with the latest version of distutils.

May be you should use the same include order as in the other
c-files.
(This file fails to compile.)
* _glumodule.c *******************
...
#ifdef WIN32
#include <windows.h>
#define MCALLBACK (void (__stdcall *)(void))
#define GLUCALLBACK WINAPI
#else
#define MCALLBACK
#define GLUCALLBACK
#endif

#include <GL/gl.h>
#include <GL/glu.h>
#include "Python.h"
...
**********************************

(This one compiles without problems.)
* _openglmodule.c ****************
...
#include "Python.h"
#ifdef MS_WIN32
#include <windows.h>
#endif
#include <GL/gl.h>
#include <math.h>
...
**********************************

If you include "Python.h" first and use then 
MS_WIN32 instead of WIN32, you don't need to
define WIN32 and don't get problems with 
older versions of distutils, which doesn't
handle 'define_macros'.

(There are some other occurences of WIN32 in
your file, either you replace them or you 
define WIN32 in your c-file if MS_WIN32
is defined.)


kind regards

Rene Liebscher