You could indeed have BinDeps generate the wrapper for you, using Clang. But 
that will require the user to have a full-blown development environment 
installed.

VideoIO is one project I know of that is taking multiple library versions very 
seriously.

--Tim

On Sunday, November 16, 2014 03:41:11 PM Erik Schnetter wrote:
> I see.
> 
> I was afraid that the C structs may change in between different
> versions of the library. If the structs are re-analyzed when the
> wrapper is installed, this would not be an issue.
> 
> -erik
> 
> On Sun, Nov 16, 2014 at 2:58 PM, Tim Holy <[email protected]> wrote:
> > The only person who needs to use Clang.jl is the package developer. Clang
> > writes *.jl files that save you the trouble of keyboarding all the julia
> > equivalents of the C structs. It also generates the ccall wrappers. You
> > then write your package on top of those generated files. Clang is
> > therefore only a dependency for the developer, not for the user. That
> > said, if you've already written all your types, Clang won't provide you
> > with much benefit.
> > 
> > Quite a few packages use Clang, but one I've been involved with is
> > CUDArt.jl.
> > 
> > --Tim
> > 
> > On Sunday, November 16, 2014 01:01:42 PM Erik Schnetter wrote:
> >> Thanks for all the pointers! Things are now working fine without
> >> wrapper functions but with 120 lines of immutable type declarations.
> >> Clang.jl sounds interesting, but would probably make hwloc.jl too
> >> difficult to use if it is a prerequisite. Let's see how often the
> >> structs of hwloc change with future versions.
> >> 
> >> hwloc is a portable library that determines the number of cores (and
> >> many other properties) of the local machine: see
> >> <https://github.com/eschnett/hwloc.jl>.
> >> 
> >> -erik
> >> 
> >> On Sun, Nov 16, 2014 at 12:41 PM, Jake Bolewski <[email protected]>
> > 
> > wrote:
> >> > No need to flatten if everything is immutable.  This file has some
> >> > examples
> >> > of wrapping structs of structs
> >> > https://github.com/jakebolewski/LibGit2.jl/blob/cac78b5c03531b5afbcb0ae
> >> > 042
> >> > 538dd351527752/src/types.jl#L19.>
> >> > 
> >> > On Sunday, November 16, 2014 12:33:39 PM UTC-5, Tim Holy wrote:
> >> >> AFAIK no need to flatten.
> >> >> 
> >> >> Since Isaiah didn't advertise it himself, I'll mention his Clang.jl
> >> >> package,
> >> >> which I've found to be a big help in such situations. It's just
> >> >> possible
> >> >> you
> >> >> may not need any C glue code.
> >> >> 
> >> >> --Tim
> >> >> 
> >> >> On Sunday, November 16, 2014 12:15:50 PM Erik Schnetter wrote:
> >> >> > Thanks for the pointers on immutable types.
> >> >> > 
> >> >> > Is it possible to access structs inside structs this way? That a
> >> >> > struct inside a struct, not a pointer inside a struct. Is an
> >> >> > immutable
> >> >> > type again a bits type? Or do I need to flatten the structs to make
> >> >> > this work?
> >> >> > 
> >> >> > -erik
> >> >> > 
> >> >> > On Sun, Nov 16, 2014 at 11:16 AM, Isaiah Norton
> >> >> > <[email protected]>
> >> >> 
> >> >> wrote:
> >> >> > >> The library defines some C structs that are part of the API. My
> >> >> > >> current approach uses wrapper C functions to access struct
> >> >> > >> elements.
> >> >> > >> Is there a better way?
> >> >> > > 
> >> >> > > It depends how complicated are the structs. Structs can often be
> >> >> > > reflected
> >> >> > > as Julia types, as long as isbits(TypeName) == true, and accessed
> >> >> > > with
> >> >> > > unsafe_load (see for example PyCall's definitions of PyObject_*).
> >> >> > > Some
> >> >> > > tricky spots include fixed-size arrays and unions (strictly
> >> >> > > speaking
> >> >> > > you
> >> >> > > can make an aggregate element having the maximal size in the
> >> >> > > union,
> >> >> > > and
> >> >> > > then do bitshifts manually. but there is no automatic support).
> >> >> > > 
> >> >> > > There is also the StrPack.jl package, which calculates the
> >> >> > > appropriate
> >> >> > > memory layout for a given struct and provides
> >> >> > > serialization/deserialization.>
> >> >> > > 
> >> >> > >> I thus I need to build this wrapper file as well. I created a
> >> >> > >> SimpleBuild rule for this. However, I need to know the path where
> >> >> > >> BinDeps installed (or found) the header files so that I can
> >> >> > >> compile
> >> >> > >> this file. How do I access this information?
> >> >> > > 
> >> >> > > This is going to be package-manager and build-tool specific, and I
> >> >> > > don't
> >> >> > > know if there is any abstraction/helper for includes in BinDeps
> >> >> > > yet.
> >> >> > > 
> >> >> > > On Sun, Nov 16, 2014 at 10:09 AM, Erik Schnetter
> >> >> > > <[email protected]>
> >> >> > > 
> >> >> > > wrote:
> >> >> > >> I want to wrap a library (hwloc) for Julia. This is working fine.
> >> >> > >> 
> >> >> > >> The library defines some C structs that are part of the API. My
> >> >> > >> current approach uses wrapper C functions to access struct
> >> >> > >> elements.
> >> >> > >> Is there a better way?
> >> >> > >> 
> >> >> > >> I thus I need to build this wrapper file as well. I created a
> >> >> > >> SimpleBuild rule for this. However, I need to know the path where
> >> >> > >> BinDeps installed (or found) the header files so that I can
> >> >> > >> compile
> >> >> > >> this file. How do I access this information?
> >> >> > >> 
> >> >> > >> -erik
> >> >> > >> 
> >> >> > >> --
> >> >> > >> Erik Schnetter <[email protected]>
> >> >> > >> http://www.perimeterinstitute.ca/personal/eschnetter/

Reply via email to