A question regarding reading CPP definitions from a C header

Hi all, Let's say I want to #include a C header file in my Haskell library just to read some macro definitions. The C header file also contains some C code. Is there a way to load only macro definitions and not C code in #include declarations in Haskell? What I'm trying to do is I'm linking my library against this C library but I want to support different versions of this C library, so I want to read it's version from one of it's header files. The problem is the header file contains some C code and makes my Haskell source code mixed with C source before compilation. Any suggestions would be appreciated, Thanks, --- Ömer Sinan Ağacan http://osa1.net

If you use cpphs as a library, there is an API called runCpphsReturningSymTab. Thence you can throw away the actual pre-preprocessed result text, keep only the symbol table, and lookup whatever macros you wish to find their values. I suggest you make this into a little code-generator, to produce a Haskell module containing the values you need. On 5 Oct 2013, at 21:37, Ömer Sinan Ağacan wrote:
Hi all,
Let's say I want to #include a C header file in my Haskell library just to read some macro definitions. The C header file also contains some C code. Is there a way to load only macro definitions and not C code in #include declarations in Haskell?
What I'm trying to do is I'm linking my library against this C library but I want to support different versions of this C library, so I want to read it's version from one of it's header files. The problem is the header file contains some C code and makes my Haskell source code mixed with C source before compilation.
Any suggestions would be appreciated,

Thanks for your answer, looks like this is my only option to do this.
Can you provide some information about what does parameters of
runCpphsReturningSymTab stands for? I made several attempts but
couldn't get any useful return value.
For example, I have no idea what does third parameter does. Also,
second parameter.
Thanks,
---
Ömer Sinan Ağacan
http://osa1.net
2013/10/7 Malcolm Wallace
If you use cpphs as a library, there is an API called runCpphsReturningSymTab. Thence you can throw away the actual pre-preprocessed result text, keep only the symbol table, and lookup whatever macros you wish to find their values. I suggest you make this into a little code-generator, to produce a Haskell module containing the values you need.
On 5 Oct 2013, at 21:37, Ömer Sinan Ağacan wrote:
Hi all,
Let's say I want to #include a C header file in my Haskell library just to read some macro definitions. The C header file also contains some C code. Is there a way to load only macro definitions and not C code in #include declarations in Haskell?
What I'm trying to do is I'm linking my library against this C library but I want to support different versions of this C library, so I want to read it's version from one of it's header files. The problem is the header file contains some C code and makes my Haskell source code mixed with C source before compilation.
Any suggestions would be appreciated,

Have you looked into using hsc2hs? If I understand your problem, it's
designed exactly to solve it.
--
Carl
On Mon, Oct 7, 2013 at 12:20 PM, Ömer Sinan Ağacan
Thanks for your answer, looks like this is my only option to do this.
Can you provide some information about what does parameters of runCpphsReturningSymTab stands for? I made several attempts but couldn't get any useful return value.
For example, I have no idea what does third parameter does. Also, second parameter.
Thanks,
--- Ömer Sinan Ağacan http://osa1.net
If you use cpphs as a library, there is an API called runCpphsReturningSymTab. Thence you can throw away the actual
2013/10/7 Malcolm Wallace
: pre-preprocessed result text, keep only the symbol table, and lookup whatever macros you wish to find their values. I suggest you make this into a little code-generator, to produce a Haskell module containing the values you need. On 5 Oct 2013, at 21:37, Ömer Sinan Ağacan wrote:
Hi all,
Let's say I want to #include a C header file in my Haskell library just to read some macro definitions. The C header file also contains some C code. Is there a way to load only macro definitions and not C code in #include declarations in Haskell?
What I'm trying to do is I'm linking my library against this C library but I want to support different versions of this C library, so I want to read it's version from one of it's header files. The problem is the header file contains some C code and makes my Haskell source code mixed with C source before compilation.
Any suggestions would be appreciated,
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

Carl, thank you very much. This is exactly what I was looking for, and
it solved my problem in 5 minutes.
What's awesome is that when Cabal finds a .hsc file it automatically
calls this tool. Great.
Thanks again.
---
Ömer Sinan Ağacan
http://osa1.net
2013/10/8 Carl Howells
Have you looked into using hsc2hs? If I understand your problem, it's designed exactly to solve it.
-- Carl
On Mon, Oct 7, 2013 at 12:20 PM, Ömer Sinan Ağacan
wrote: Thanks for your answer, looks like this is my only option to do this.
Can you provide some information about what does parameters of runCpphsReturningSymTab stands for? I made several attempts but couldn't get any useful return value.
For example, I have no idea what does third parameter does. Also, second parameter.
Thanks,
--- Ömer Sinan Ağacan http://osa1.net
2013/10/7 Malcolm Wallace
: If you use cpphs as a library, there is an API called runCpphsReturningSymTab. Thence you can throw away the actual pre-preprocessed result text, keep only the symbol table, and lookup whatever macros you wish to find their values. I suggest you make this into a little code-generator, to produce a Haskell module containing the values you need.
On 5 Oct 2013, at 21:37, Ömer Sinan Ağacan wrote:
Hi all,
Let's say I want to #include a C header file in my Haskell library just to read some macro definitions. The C header file also contains some C code. Is there a way to load only macro definitions and not C code in #include declarations in Haskell?
What I'm trying to do is I'm linking my library against this C library but I want to support different versions of this C library, so I want to read it's version from one of it's header files. The problem is the header file contains some C code and makes my Haskell source code mixed with C source before compilation.
Any suggestions would be appreciated,
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (3)
-
Carl Howells
-
Malcolm Wallace
-
Ömer Sinan Ağacan