[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: Building for windows. Again.



Yep, the commit fixes the problem. Thanks Howard!

On Fri, Nov 20, 2015 at 2:14 AM, Howard Chu <hyc@symas.com> wrote:
> Kristoffer Sjögren wrote:
>>
>> Changing CharacterSet in the build file doesn't affect the garbled path.
>>
>> I tried to use explicit GetStringChars from the JNI code but with same
>> result.
>>
>> Any pointers? I'm running short of ideas..
>
>
> Looks like we need to use UTF-8, as in ITS#7992. I've just merged that patch
> into mdb.master, see if that works better. You should use GetStringUTFChars.
>
>>
>> On Thu, Nov 19, 2015 at 11:55 PM, Kristoffer Sjögren <stoffe@gmail.com>
>> wrote:
>>>
>>> Oh, but the build file [2] have a CharacterSet element set to Unicode.
>>> Let me see if I can change this.
>>>
>>> [2]
>>> https://github.com/deephacks/lmdbjni/blob/master/lmdbjni/src/main/native-package/vs2010.vcxproj
>>>
>>> On Thu, Nov 19, 2015 at 11:45 PM, Kristoffer Sjögren <stoffe@gmail.com>
>>> wrote:
>>>>
>>>> I can see the problem now from a local test.
>>>>
>>>> Hmm i'm a bit confused. The JNI code uses GetStringUTFChars calls [1]
>>>> for all char * arguments going from Java to C, which is an array of
>>>> bytes representing the string in modified UTF-8 encoding. Is this OK?
>>>> The other option is to use GetStringChars which is unicode...
>>>>
>>>> [1]
>>>> http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html
>>>>
>>>> On Thu, Nov 19, 2015 at 10:32 PM, Howard Chu <hyc@symas.com> wrote:
>>>>>
>>>>> Kristoffer Sjögren wrote:
>>>>>>
>>>>>>
>>>>>> The py-lmdb project have a comment [1] about reusing Python.h headers
>>>>>> which seems to work for them.
>>>>>>
>>>>>> # Microsoft Visual Studio 9 ships with neither inttypes.h, stdint.h,
>>>>>> or a
>>>>>> sane
>>>>>> # definition for ssize_t, so here we add lib/win32 to the search path,
>>>>>> which
>>>>>> # contains emulation header files provided by a third party. We
>>>>>> force-include
>>>>>> # Python.h everywhere since it has a portable definition of ssize_t,
>>>>>> which
>>>>>> # inttypes.h and stdint.h lack, and to avoid having to modify the LMDB
>>>>>> source
>>>>>> # code. Advapi32 is needed for LMDB's use of Windows security APIs.
>>>>>
>>>>>
>>>>>
>>>>> Note in ITS#8067 we added an ssize_t typedef for MSVC. Also in #8069 we
>>>>> changed to explicitly use the ANSI APIs, so if you're using Unicode
>>>>> file
>>>>> paths that will certainly be garbled now.
>>>>>
>>>>>>
>>>>>> [1] https://github.com/dw/py-lmdb/blob/master/setup.py
>>>>>>
>>>>>> On Thu, Nov 19, 2015 at 10:13 PM, Kristoffer Sjögren
>>>>>> <stoffe@gmail.com>
>>>>>> wrote:
>>>>>>>
>>>>>>>
>>>>>>> The actual build command:
>>>>>>>
>>>>>>> $ cmd.exe /X /C "vcbuild /platform:x64 vs2008.vcproj release"
>>>>>>>
>>>>>>> On Thu, Nov 19, 2015 at 10:11 PM, Kristoffer Sjögren
>>>>>>> <stoffe@gmail.com>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> That's the thing, the build doesn't complain about anything missing.
>>>>>>>> But the binary seems broken because tests fail randomly.
>>>>>>>>
>>>>>>>> A user tried the generated binary on his machine and it worked but
>>>>>>>> also
>>>>>>>> said...
>>>>>>>>
>>>>>>>> "Hm, almost, the database file is no longer put to the requested
>>>>>>>> directory, and its name is totally garbled. It finds it consistently
>>>>>>>> though, and the contents are correct."
>>>>>>>>
>>>>>>>> https://github.com/deephacks/lmdbjni/issues/48
>>>>>>>>
>>>>>>>> On Thu, Nov 19, 2015 at 9:57 PM, Howard Chu <hyc@symas.com> wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Kristoffer Sjögren wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Hi
>>>>>>>>>>
>>>>>>>>>> I'm trying to build LMDB with Java/JNI bindings with Visual C++
>>>>>>>>>> Project Builder 9.00.30729 (vcbuild).
>>>>>>>>>>
>>>>>>>>>> Unfortunately, vcbuild don't ship with inttypes.h, stdint.h, or a
>>>>>>>>>> sane
>>>>>>>>>> ssize_t. So I searched around and found a few candidates [1] of
>>>>>>>>>> inttypes.h and stdint.h that seems to be working for py-lmdb.
>>>>>>>>>>
>>>>>>>>>> However, unistd.h seems broken for windows - and the python guys
>>>>>>>>>> use
>>>>>>>>>> python.h instead.
>>>>>>>>>>
>>>>>>>>>> Any ideas where I might find a good unistd.h?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I see you have one already - what is wrong with it, what
>>>>>>>>> definitions
>>>>>>>>> are
>>>>>>>>> missing?
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Cheers,
>>>>>>>>>> -Kristoffer
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> [1]
>>>>>>>>>>
>>>>>>>>>> https://github.com/deephacks/lmdbjni/tree/master/lmdbjni-win64/headers
>>>>>>>>>>
>
>
> --
>   -- Howard Chu
>   CTO, Symas Corp.           http://www.symas.com
>   Director, Highland Sun     http://highlandsun.com/hyc/
>   Chief Architect, OpenLDAP  http://www.openldap.org/project/