www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - nginx module bindings

reply Shammah Chancellor <anonymous coward.com> writes:
Hello DForum!

I wanted to attempt to write an nginx module in Dlang.  However, the 
first step of generating some bindings is proving to be a pain on 
linux.   Htod is windows only, and the other projects either generate 
incomprehensible modules, or are way out of date (it seems).

Any pointers, or pre-existing bindings for nginx modules would be appreciated.

-Shammah
Apr 17 2015
next sibling parent reply "Meta" <jared771 gmail.com> writes:
On Saturday, 18 April 2015 at 02:03:40 UTC, Shammah Chancellor 
wrote:
 Hello DForum!

 I wanted to attempt to write an nginx module in Dlang.  
 However, the first step of generating some bindings is proving 
 to be a pain on linux.   Htod is windows only, and the other 
 projects either generate incomprehensible modules, or are way 
 out of date (it seems).

 Any pointers, or pre-existing bindings for nginx modules would 
 be appreciated.

 -Shammah
Have you tried dstep? https://github.com/jacob-carlborg/dstep
Apr 17 2015
parent reply Shammah Chancellor <anonymous coward.com> writes:
On 2015-04-18 02:24:52 +0000, Meta said:

 On Saturday, 18 April 2015 at 02:03:40 UTC, Shammah Chancellor wrote:
 Hello DForum!
 
 I wanted to attempt to write an nginx module in Dlang.  However, the 
 first step of generating some bindings is proving to be a pain on 
 linux.   Htod is windows only, and the other projects either generate 
 incomprehensible modules, or are way out of date (it seems).
 
 Any pointers, or pre-existing bindings for nginx modules would be appreciated.
 
 -Shammah
Have you tried dstep? https://github.com/jacob-carlborg/dstep
I did try to compile it, but it started pulling in tango 1.0 and whatnot -- I figured it was not up to date. Is this wrong? -Shammah
Apr 17 2015
next sibling parent reply ketmar <ketmar ketmar.no-ip.org> writes:
On Fri, 17 Apr 2015 22:50:28 -0700, Shammah Chancellor wrote:

 Have you tried dstep?
=20
 https://github.com/jacob-carlborg/dstep
=20 I did try to compile it, but it started pulling in tango 1.0 and whatnot -- I figured it was not up to date. Is this wrong?
it will not compile with 2.067, only with 2.066. dunno if it really works though, as built dstep segfaults when i'm trying=20 to convert anything. the only thing i can see is CLI help.=
Apr 17 2015
parent reply "Shammah Chancellor" <anonymous coward.org> writes:
On Saturday, 18 April 2015 at 06:34:34 UTC, ketmar wrote:
 On Fri, 17 Apr 2015 22:50:28 -0700, Shammah Chancellor wrote:

 Have you tried dstep?
 
 https://github.com/jacob-carlborg/dstep
I did try to compile it, but it started pulling in tango 1.0 and whatnot -- I figured it was not up to date. Is this wrong?
it will not compile with 2.067, only with 2.066. dunno if it really works though, as built dstep segfaults when i'm trying to convert anything. the only thing i can see is CLI help.
Yeah, I am at an impasse. It either segfaults or spits out lots of errors about not being able to find headers despite adding all the -I paths.
Apr 18 2015
parent reply Jacob Carlborg <doob me.com> writes:
On 2015-04-18 09:33, Shammah Chancellor wrote:

 Yeah, I am at an impasse.  It either segfaults or spits out lots
 of errors about not being able to find headers despite adding all
 the -I paths.
Which headers are it complaining about? -- /Jacob Carlborg
Apr 18 2015
parent reply "Shammah Chancellor" <anonymous coward.org> writes:
On Saturday, 18 April 2015 at 08:17:15 UTC, Jacob Carlborg wrote:
 On 2015-04-18 09:33, Shammah Chancellor wrote:

 Yeah, I am at an impasse.  It either segfaults or spits out 
 lots
 of errors about not being able to find headers despite adding 
 all
 the -I paths.
Which headers are it complaining about?
Here is the command I was running.
 dstep -I~/nginx-build/nginx-1.6.2/objs/ngx_auto_headers.h 
 -I../../src/os/unix/ -I ../../src/core -I ../../src/event 
 -I~/d/llvm/tools/clang/lib/Headers/ ngx_conf_file.h
File(10B2B20F0, "")warning: ../../src/event: 'linker' input unused [-Wunused-command-line-argument] File(10B2B20F0, "")warning: ../../src/core: 'linker' input unused [-Wunused-command-line-argument] File(10B2B20F0, "")/usr/include/module.map:1:25: warning: unknown attribute 'extern_c' [-Wignored-attributes] File(10B2B20F0, "")/usr/include/module.map:36:14: error: header 'float.h' not found File(10B2B20F0, "")/usr/include/module.map:81:14: error: header 'stdarg.h' not found File(10B2B20F0, "")/usr/include/module.map:113:14: error: header 'tgmath.h' not found File(10B2B20F0, "")/usr/include/module.map:1561:21: warning: unknown attribute 'extern_c' [-Wignored-attributes] File(10B2B20F0, "")/usr/include/module.map:1577:26: warning: unknown attribute 'extern_c' [-Wignored-attributes] File(10B2B20F0, "")/usr/include/module.map:1602:23: warning: unknown attribute 'extern_c' [-Wignored-attributes] File(10B2B20F0, "")/usr/include/module.map:1635:23: warning: unknown attribute 'extern_c' [-Wignored-attributes] File(10B2B20F0, "")/usr/include/module.map:1662:22: warning: unknown attribute 'extern_c' [-Wignored-attributes] File(10B2B20F0, "")./ngx_config.h:12:10: fatal error: 'ngx_auto_headers.h' file not found
Apr 18 2015
parent reply Jacob Carlborg <doob me.com> writes:
On 2015-04-18 17:25, Shammah Chancellor wrote:

 File(10B2B20F0, "")/usr/include/module.map:36:14: error: header
 'float.h' not found
 File(10B2B20F0, "")/usr/include/module.map:81:14: error: header
 'stdarg.h' not found
 File(10B2B20F0, "")/usr/include/module.map:113:14: error: header
 'tgmath.h' not found
These three are Clang built-in headers. They're shipped with Clang and need to be place in the standard include paths or explicitly added using the -I flag. See the information about libclang [1]. This is fixed in master, the files are shipped with DStep now. Although, I may not have included all, I have mostly added them as I need.
 File(10B2B20F0, "")./ngx_config.h:12:10: fatal error:
 'ngx_auto_headers.h' file not found
I'm not sure about this but it could be an related to how these headers are used. DStep is built to generate bindings from one file at a time. That might not always be compatible with the build system a library uses. For example, some headers could be generated in a build step. I've seen some headers using types without including a single header, that still works since another header will include this one plus the other headers that are needed. Please read the limitations at the bottom of the documentation [2] to see if any of those apply in your case. BTW, I updated the code so it can be built with DMD 2.067.0. I'm just waiting for the Travis build to pass before merging it to master. [1] https://github.com/jacob-carlborg/dstep#libclang [2] https://github.com/jacob-carlborg/dstep#limitationsknown-issues -- /Jacob Carlborg
Apr 18 2015
parent reply Shammah Chancellor <anonymous coward.com> writes:
On 2015-04-18 19:15:09 +0000, Jacob Carlborg said:

 On 2015-04-18 17:25, Shammah Chancellor wrote:
 
 File(10B2B20F0, "")/usr/include/module.map:36:14: error: header
 'float.h' not found
 File(10B2B20F0, "")/usr/include/module.map:81:14: error: header
 'stdarg.h' not found
 File(10B2B20F0, "")/usr/include/module.map:113:14: error: header
 'tgmath.h' not found
These three are Clang built-in headers. They're shipped with Clang and need to be place in the standard include paths or explicitly added using the -I flag. See the information about libclang [1]. This is fixed in master, the files are shipped with DStep now. Although, I may not have included all, I have mostly added them as I need.
 File(10B2B20F0, "")./ngx_config.h:12:10: fatal error:
 'ngx_auto_headers.h' file not found
I'm not sure about this but it could be an related to how these headers are used. DStep is built to generate bindings from one file at a time. That might not always be compatible with the build system a library uses. For example, some headers could be generated in a build step. I've seen some headers using types without including a single header, that still works since another header will include this one plus the other headers that are needed. Please read the limitations at the bottom of the documentation [2] to see if any of those apply in your case. BTW, I updated the code so it can be built with DMD 2.067.0. I'm just waiting for the Travis build to pass before merging it to master. [1] https://github.com/jacob-carlborg/dstep#libclang [2] https://github.com/jacob-carlborg/dstep#limitationsknown-issues
I included the -I flag for the location of those included headers. It seems as if maybe it is not including anything. With that said, I am using clan release_34, because I cannot build 32 on MacOS X. -Shammah
Apr 18 2015
parent Jacob Carlborg <doob me.com> writes:
On 2015-04-19 01:03, Shammah Chancellor wrote:

 I included the -I flag for the location of those included headers.  It
 seems as if maybe it is not including anything.   With that said, I am
 using clan release_34, because I cannot build 32 on MacOS X.
Is there a build script you can inspect to see if it does anything magic? These [1] are the versions that are tested by Travis on OS X. You can always download pre-compiled versions of libclang here [2]. libclang can be placed in any of the standard search paths or in the same directory as the binary. [1] https://github.com/jacob-carlborg/dstep/blob/master/test.d#L321-L327 [2] http://llvm.org/releases/index.html -- /Jacob Carlborg
Apr 19 2015
prev sibling parent Jacob Carlborg <doob me.com> writes:
On 2015-04-18 07:50, Shammah Chancellor wrote:

 I did try to compile it, but it started pulling in tango 1.0 and whatnot
 -- I figured it was not up to date.  Is this wrong?
It's up to date and is working. It builds with DMD 2.066.1 and the test suite passes. Pre-compiled binaries are available here [1] for Linux, OS X and FreeBSD. I noticed the binaries are a bit outdated but it shouldn't be that bad. Please report any issues you encounter to [2]. [1] https://github.com/jacob-carlborg/dstep/releases/latest [2] https://github.com/jacob-carlborg/dstep/issues -- /Jacob Carlborg
Apr 18 2015
prev sibling parent "w0rp" <devw0rp gmail.com> writes:
On Saturday, 18 April 2015 at 02:03:40 UTC, Shammah Chancellor 
wrote:
 Hello DForum!

 I wanted to attempt to write an nginx module in Dlang.  
 However, the first step of generating some bindings is proving 
 to be a pain on linux.   Htod is windows only, and the other 
 projects either generate incomprehensible modules, or are way 
 out of date (it seems).

 Any pointers, or pre-existing bindings for nginx modules would 
 be appreciated.

 -Shammah
You might have to create the bindings yourself, if you do, please put them on GitHub and in a DUB package so others can benefit from them. I have been creating bindings for the Pebble SDK recently, and during my time working on that, I have come up with a process for creating the C bindings. 1. Apply dstep to the headers. Remove any parts from the header files which it won't accept. 2. Open the .d files and the .h files, and compare the two. 3. Implement whatever dstep missed out. dstep doesn't get you 100% of the way there, but it's a lot better than starting from nothing. I also have spent hours and hours working on the Pebble SDK headers recently, but that's only because I have been obsessed with translating all of the documentation to DDoc comments.
Apr 18 2015