Comments (5)
I'd like to also request this feature.
Why do we need it?
For example, I'm trying to create openSSL library binding to some scripting language using FFI.
CastXML is really helpful in getting all types informations and functions declaration.
The problem is that big part of openSSL interface is defined by macros.
The simplest example is defines, tons of them:
# define EVP_PKEY_OP_PARAMGEN (1<<1)
# define EVP_PKEY_OP_KEYGEN (1<<2)
....
# define EVP_PKEY_OP_TYPE_SIG \
(EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \
| EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX)
Many function names are auto-generated.
So, you read documentation that tells you to call function foo(), but it is not in list,
generated from XML. Or you have to pass some constant to known function...
You have to inspect headers and blame library authors
who use macros. But the reality is such that it is too common to use preprocessor.
I understand that there is not much we can do about it, but some attempt to extract
at least constants would be nice.
from castxml.
One may run castxml -E -dD src.cpp
or castxml -E -dM src.cpp
to see preprocessor definitions, but they don't go in the xml output.
Currently the only option for generating xml output is --castxml-gccxml
that is intended to produce output close to that of our predecessor, gccxml
. The gccxml output does not include anything about preprocessor definitions. If we were to start adding information that gccxml did not provide then we would need to introduce a new output option to request such an alternative format. That is beyond our goals at this stage of the project, but discussion for future directions is still worthwhile.
The generated xml is declarative and unordered. Preprocessor definitions change while processing a translation unit. At what point should they be considered? What kind of definitions are of interest?
from castxml.
Right. Well, the goal is to automate the generation of bindings, and some headers are riddled with preprocessor directives.
from castxml.
Please provide a concrete example of what you have in mind.
from castxml.
I'm also using CastXML (through the library pycstruct) to read a header file that defines a C struct for a shared memory interface to hardware. The C struct has several bitfields to save space in the struct, but in order to access those fields one must manually copy the #define statements to the python environment that I am using, or find some other solution.
from castxml.
Related Issues (20)
- generate xml description for C++ header file HOT 1
- llvm/clang 14 reports using clauses separately HOT 8
- Trying to run CastXML on C++ project HOT 2
- arm64v8 rounding intrinsics not activated under --castxml-cc-gnu g++ HOT 1
- Help: Can I get access to default member initializer? HOT 5
- Wrapping ITK modules for ARM architecture fails at CastXML step HOT 3
- 0.5 release series for post-0.4 features HOT 7
- CastXML 0.5.0 tests fail on 32-bit architectures HOT 4
- Tests are failing with LLVM/CLANG-15 HOT 1
- CastXML tests fail with LLVM/Clang 16
- Skipping methods containing rvalue reference parameters HOT 2
- Generating unnecessary syntax HOT 1
- 0.6.0: Many tests fail HOT 2
- Different behaviour on linux and windows HOT 3
- gcc-13.2.0 unknown type name '_Float32' HOT 9
- Building against LLVM/Clang 18.x fails using MSVC
- arm64 ubuntu make failed. cannot find -ltinfo: No such file or directory HOT 2
- GCC 13 vector header include
- mangled key in GCC/MSVC style HOT 6
- Definition for __float80 with GCC, C++20, amd64 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from castxml.