dub icon indicating copy to clipboard operation
dub copied to clipboard

ImportC `dub test` failing but not with `dub build`

Open deavmi opened this issue 2 years ago • 1 comments
trafficstars

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?

  1. Clone https://github.com/deavmi/libsnooze using git clone
  2. Run dub build (notice it works)
  3. 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$

deavmi avatar Feb 25 '23 14:02 deavmi

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.

deavmi avatar Feb 25 '23 14:02 deavmi