Win32 Binaries?

Mauro Cicognini mcicogni at
Thu Aug 14 15:55:28 CEST 2003

Michael Ströder wrote:

> Mauro,
> thanks for your response. I'm very much interested in getting these 
> issues solved.
> Mauro Cicognini wrote:
>> I attach the old setup.cfg from PythonLDAP 2.0.0pre04 that used to 
>> work perfectly. I *had* hacked a little bit then, to make it 
>> simple to define symbols. BTW, the particular symbol I need is just 
>> "WIN32".
> Can you please post your hack?

Well, it really is functionally identical to the modifications in your 
diff that do the same thing :-)

What I added was:

if cfg.has_section('_ldap'):
    if cfg.has_option('_ldap', 'class'):
        LDAP_CLASS = eval(cfg.get('_ldap', 'class'))
        LDAP_CLASS = OpenLDAP2
    for name in LDAP_CLASS.__dict__.keys():
        if cfg.has_option('_ldap', name):
            setattr(LDAP_CLASS, name, string.split(cfg.get('_ldap', name)))
+   if cfg.has_option('_ldap', 'defines'):
+      for defname in string.split(cfg.get('_ldap', 'defines')):
+          LDAP_CLASS.defines.append((defname, None))

but I like your solution better.

>    1. There's no way (AFAIK) to simply "define" a preprocessor symbol
>>       within setup.cfg. The distutils scripts expect to have a list of
>>       one- or two-element tuples, but the parser has no way to pull
>>       those from the .cfg. Besides, the one-element tuple means to
>>       "undefine" the symbol, whereas I'd like to just "define" it
>>       without giving it a value, which is unnecessary. I managed to
>>       insert it using a crude hack within (just as I had done
>>       with the earlier version), but I do not like this solution.
> Wouldn't
> extra_compile_args = -DWIN32
> help?

As I said, I am not familiar with distutils at all. Yes, it would help, 
I only wasn't really thinking <:-)

> I can also modify to properly build the two-tuple list of 
> defines from a line (see attached diff)
> defines = WIN32

As I said, I would like this. I second your implementation.

>>    2. The "HAVE_XXX" symbol definition in is Linux-centric:
>>       since the libraries under Windows have slightly different names
>>       (for instance, "olber32" instead of just "lber"), those symbols
>>       would just not get defined. This however was simple enough to fix.
> Mainly the HAVE_LIBLDAP_R is of interest. How's the libldap_r called 
> on Windows? Additionally you can try to manually set -DHAVE_LIBLDAP_R 
> etc. in setup.cfg.

The current OpenLDAP version calls it oldap_r.lib.

>>    3. It appears that any library path under "library_dirs" for some
>>       reason gets copied over to "runtime_library_dirs", which makes no
>>       sense to me.
> No clue why David did it. I removed it and it stills builds under 
> Linux. I'd appreciate if others test it on different platforms.

I removed it too, and didn't hurt. I'm wondering too.

>>    4. The linker get called without the default libraries, and in such a
>>       way that a whole lot of symbols are found twice, so it just barfs
>>       and never links.
> Any clue how to solve that?

None whatsoever :-(

I'll work on this more next week, I'll let you know.

> My goal is to have a which is suitable to build python-ldap 
> on any platform with a platform-specific setup.cfg.

Me too. I loved the friendly binary installer I got with 2.0.0pre04 :-)

> So let's sort out the issues together. I don't have a Win32 system to 
> test a build therefore your input is highly appreciated. I've attached 
> a unified diff for Please test.

I will, more on this next week (tomorrow is a national holiday here ;-).

Thanks a lot and keep up the great work.


More information about the python-ldap mailing list