On Thursday, 3 September 2020 at 08:22:25 UTC, glis-glis wrote:
Hi,

I have a few modules for parsing different file formats and a folder with d-scripts using these parsers to perform manipulations, extract information, ...

Until now, I just added
#!/usr/bin/env rdmd

to the d-scripts and run them that way, but I'd like to make the scripts available to my collaborators without them being required to install dmd & co, so I'll have to compile the scripts.

I usually would just write a makefile for that, but I thought I'd give DUB a go. Unfortunately, the DUB-documentation is a little thin and I cannot find a way to tell DUB "compile all the files in the scripts folder and put the binary to the bin folder". How do I do that?

Thanks!

Option 1: (recommended for multiple single file binaries)

use preBuildCommands to invoke dub or dmd for each of your scripts you need

Compatibility tip: use the special $DUB and $DC variables, see https://dub.pm/package-format-json.html#environment-variables

If built often, consider using rdmd for easy caching or make this a sub-package which you depend on which will therefore only be rebuilt in case of changes to that sub-path folder. Add a glob of "extraDependencyFiles" matching your script files to make the package rebuild on script changes.

Option 2: (recommended for multiple larger binaries)

use sub-packages and make your root package targetType: none to build all child packages, see https://dub.pm/package-format-json.html#sub-packages

root dub.sdl:
name "test"
targetType "none"
dependency ":a" version="*"
dependency ":b" version="*"
subPackage "a"
subPackage "b"

a/dub.sdl:
name "a"
targetType "executable"

b/dub.sdl:
name "b"
targetType "executable"

$ dub build

Result:
a/test_a.exe
b/test_b.exe

Note: this only works if your package is targetType none, use targetName and targetPath to customize how the exe is called and where it's placed

Reply via email to