Applied fix to Dub (Was: ImportC in a Dub project )
Carsten Schlote
carsten.schlote at gmx.net
Sun Oct 30 12:46:10 UTC 2022
It turned out, that the required changes to add support for C
files in Dub are really small. So I added a PR
(https://github.com/dlang/dub/pull/2521). There is also some
other PR (https://github.com/dlang/dub/pull/2270) releated to C
file support in Dub.
With my PR (2521) applied I can now compile my ImportC test
projects
(https://gitlab.vahanus.net:dlang/examples/importc-tests.git)
without any additional hacks. Just a current copy of DUB with the
patch and a current beta build of DMD is needed.
```
$ ../../dub/bin/dub build -v --compiler=dmd-beta -f
Using dub registry url 'https://code.dlang.org/'
Note: Failed to determine version of package importc-app at ..
Assuming ~master.
Generating using build
Configuring dependent importc-app, deps:
Starting Performing "debug" build using dmd-beta for x86_64.
Building importc-app ~master: building configuration
[application]
dmd-beta -c
-of.dub/build/application-debug-linux.posix-x86_64-dmd_v2.101.0-beta.1-38-gfabd06214e-B8D88D35889281A0F16BEA64448915871A8820982AFB76E0D5F2AD9849AF80E5/importc-app.o -debug -g -w -version=Have_importc_app -Isource/ source/app.d source/some_d_file.d source/zstd_binding.c -vcolumns
Linking importc-app
dmd-beta
-of.dub/build/application-debug-linux.posix-x86_64-dmd_v2.101.0-beta.1-38-gfabd06214e-B8D88D35889281A0F16BEA64448915871A8820982AFB76E0D5F2AD9849AF80E5/importc-app .dub/build/application-debug-linux.posix-x86_64-dmd_v2.101.0-beta.1-38-gfabd06214e-B8D88D35889281A0F16BEA64448915871A8820982AFB76E0D5F2AD9849AF80E5/importc-app.o -L--no-as-needed -L-lzstd -g
Copying target from
/home2/cschlote/build/dlang/importc-tests/dubbed/.dub/build/application-debug-linux.posix-x86_64-dmd_v2.101.0-beta.1-38-gfabd06214e-B8D88D35889281A0F16BEA64448915871A8820982AFB76E0D5F2AD9849AF80E5/importc-app to /home2/cschlote/build/dlang/importc-tests/dubbed
```
However, the maintainers of Dub seem to have different ideas
resulting into much more work to be done. Their ideas are surely
good and reasonable, but it sounds like a lot of changes needed
to be applied before we see support for direct and easy C file
support in Dub.
In the meantime (weeks, months, years?) you are forced to either
pass an explicite list of C sourcefiles in dub.json (see previous
forum posts), or use some ```preBuild/Generate``` commands to
compile your C source file(s) to object file(s) and add these
object files to other explicite list as linker input. Both ways
are ugly and cumbersome.
What we need in dub instead is that C files are just picked up
like any other D file as a valid source for the compiler. And
without any explicite lists of source files in ```dub.json```.
The C header files are intentionally left out here, because it is
bad style to have real functions in a C header. Yes, I know,
people are doing such things. It is one of the bad habbits of
C/C++. If you want to include a C header, just wrap it into a C
file, which is then picked up by Dub and passed to the D
compiler. See the mentioned example project for wrapping the ZSTD
C header. This is easy and straight forward.
I'm pretty sure that any additional code to support the simple
usecases for C header files will also be easy to implement.
So if 80% or more of the general usecases with C source/header
files in Dub can be implemented with simple and small changes
like with the PR mentioned above, we should do it now.
A better and more general implementation covering 100%+ of all
thinkable usecases and edge conditions can be done later after
having a working solution *now*, instead of discussing a *proper*
solutions for several months.
IMHO **straight-forward** and **easy** support for using C files
in Dub projects is a must for the up-coming next DMD release with
its much improved ImportC feature.
It will also help a lot when we want to promote D as a suitable
language alternative for C/C++ programmers. As long as D needs
hand-crafted binding files or other hacky workarounds instead of
just ```ìmport your.c.file;``` and a C source wrapper it will be
hard to convince them.
So I strongly recommend to add easy to use support for C files in
Dub projects **ASAP**.
More information about the Digitalmars-d-learn
mailing list