dub
dub copied to clipboard
ImportC `dub test` failing but not with `dub build`
System information
- dub version:
DUB version 1.31.1, built on Feb 15 2023 - OS Platform and distribution: (Fedora:
Linux xps 6.1.10-200.fc37.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Feb 6 23:56:48 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux) - compiler version
DMD64 D Compiler v2.102.1
Bug Description
I have some code which makes use of D's ImportC feature in order to import some C code which is contained in source/libsnooze/clib.c. I import the C file as import libsnooze.clib but what I have noticed is that dub build will work just fine but when doing dub test I then get a linker error for two functions fdSetSet and fdSetZero within my two unittests (in souce/libsnooze/event.d.
How to reproduce?
- Clone
https://github.com/deavmi/libsnoozeusinggit clone - Run
dub build(notice it works) - Run
dub test(notice it doesn't)
Expected Behavior
I would expect the dub test --force --coverage --verbose to succeed in the same manner as dub build.
Logs
Running dub build --force --verbose:
deavmi@xps:~/Documents/Projects/libsnooze$ dub build --force --verbose
Using dub registry url 'https://code.dlang.org/'
Determined package version using GIT: libsnooze 0.1.0
Generating using build
Configuring dependent libsnooze, deps:
Starting Performing "debug" build using /usr/bin/dmd for x86_64.
Building libsnooze 0.1.0: building configuration [library]
[cwd=/home/deavmi/Documents/Projects/libsnooze] /usr/bin/dmd -lib -of../../../.dub/cache/libsnooze/0.1.0/build/library-debug-linux.posix-x86_64-dmd_v2.102.1-F64732789CC68FE534C4C0A102940EA0E55BA4E0F6841A1F974A22F75A399067/liblibsnooze.a -debug -g -w -version=Have_libsnooze -Isource/ source/libsnooze/event.d source/libsnooze/exceptions.d source/libsnooze/package.d -vcolumns
Copying target from /home/deavmi/.dub/cache/libsnooze/0.1.0/build/library-debug-linux.posix-x86_64-dmd_v2.102.1-F64732789CC68FE534C4C0A102940EA0E55BA4E0F6841A1F974A22F75A399067/liblibsnooze.a to /home/deavmi/Documents/Projects/libsnooze
deavmi@xps:~/Documents/Projects/libsnooze$
Running dub test --coverage --force --verbose:
deavmi@xps:~/Documents/Projects/libsnooze$ dub test --force --coverage --verbose
Using dub registry url 'https://code.dlang.org/'
Determined package version using GIT: libsnooze 0.1.0
Generating test runner configuration 'libsnooze-test-library' for 'library' (library).
Get module name from path: /home/deavmi/Documents/Projects/libsnooze/source/libsnooze/event.d
Get module name from path: /home/deavmi/Documents/Projects/libsnooze/source/libsnooze/exceptions.d
Excluding package.d file from test due to https://issues.dlang.org/show_bug.cgi?id=11847
Configuring dependent libsnooze, deps:
Starting Performing "unittest-cov" build using /usr/bin/dmd for x86_64.
Building libsnooze 0.1.0: building configuration [libsnooze-test-library]
[cwd=/home/deavmi/Documents/Projects/libsnooze] /usr/bin/dmd -c -of../../../.dub/cache/libsnooze/0.1.0/build/libsnooze-test-library-unittest-cov-linux.posix-x86_64-dmd_v2.102.1-A28DF1C7B1E99DD3195FD40F17C34F54F6C7E65122D1FCB423E59BE1CB5798AE/libsnooze-test-library.o -debug -cov -g -unittest -w -version=Have_libsnooze -Isource/ -I../../../.dub/cache/libsnooze/0.1.0/code/libsnooze-test-library-unittest-cov-linux.posix-x86_64-dmd_v2.102.1-ECD76A3908D04DE21FB901F53362F21EB9DD8D2C9A73BC097F47474155D73E94 ../../../.dub/cache/libsnooze/0.1.0/code/libsnooze-test-library-unittest-cov-linux.posix-x86_64-dmd_v2.102.1-ECD76A3908D04DE21FB901F53362F21EB9DD8D2C9A73BC097F47474155D73E94/dub_test_root.d source/libsnooze/event.d source/libsnooze/exceptions.d source/libsnooze/package.d -vcolumns
Linking libsnooze-test-library
[cwd=/home/deavmi/Documents/Projects/libsnooze] /usr/bin/dmd -of../../../.dub/cache/libsnooze/0.1.0/build/libsnooze-test-library-unittest-cov-linux.posix-x86_64-dmd_v2.102.1-A28DF1C7B1E99DD3195FD40F17C34F54F6C7E65122D1FCB423E59BE1CB5798AE/libsnooze-test-library ../../../.dub/cache/libsnooze/0.1.0/build/libsnooze-test-library-unittest-cov-linux.posix-x86_64-dmd_v2.102.1-A28DF1C7B1E99DD3195FD40F17C34F54F6C7E65122D1FCB423E59BE1CB5798AE/libsnooze-test-library.o -L--no-as-needed -g
/usr/bin/ld: ../../../.dub/cache/libsnooze/0.1.0/build/libsnooze-test-library-unittest-cov-linux.posix-x86_64-dmd_v2.102.1-A28DF1C7B1E99DD3195FD40F17C34F54F6C7E65122D1FCB423E59BE1CB5798AE/libsnooze-test-library.o: in function `_D9libsnooze5event5Event4waitMFS3__C7timevalZb':
/home/deavmi/Documents/Projects/libsnooze/source/libsnooze/event.d:112: undefined reference to `fdSetZero'
/usr/bin/ld: /home/deavmi/Documents/Projects/libsnooze/source/libsnooze/event.d:113: undefined reference to `fdSetSet'
collect2: error: ld returned 1 exit status
Error: linker exited with status 1
FAIL ../../../.dub/cache/libsnooze/0.1.0/build/libsnooze-test-library-unittest-cov-linux.posix-x86_64-dmd_v2.102.1-A28DF1C7B1E99DD3195FD40F17C34F54F6C7E65122D1FCB423E59BE1CB5798AE libsnooze-test-library executable
Error /usr/bin/dmd failed with exit code 1.
deavmi@xps:~/Documents/Projects/libsnooze$
The one difference I can see if -L--no-as-needed but I can't find information about that in the docs, not sure if it is what causes the discrepancy between compiler and linker behaviour when running dub under test mode.