On Wed, Apr 13, 2016 at 3:41 AM, Puming via Digitalmars-d-announce < digitalmars-d- announce@ puremagic.com> wrote: > On Tuesday, 12 April 2016 at 07:17:05 UTC, Jon D wrote: > >> On Tuesday, 12 April 2016 at 06:22:55 UTC, Puming wrote: >> >>> On Tuesday, 12 April 2016 at 00:50:24 UTC, Jon D wrote: >>> >>>> Hi all, >>>> >>>> I've open sourced a set of command line utilities for manipulating tab-separated value files. They are complementary to traditional unix tools like cut, grep, etc. They're useful for manipulating large data files. I use them when prepping files for R and similar tools. These tools were part of my 'explore D' programming exercises. >>>> >>>> [...] >>>> >>> >>> Interesting, I have large csv files, and this lib will be useful. Can you put it onto code.dlang.org so that we could use it with dub? >>> >> >> I'd certainly like to make it available via dub, but I wasn't sure how to set it up. There are two issues. One is that the package builds multiple executables, which dub doesn't seem to support easily. More problematic is that quite a bit of the test suite is run against the executables, which I could automate using make, but didn't see how to do it with dub. >> >> If there are suggestions for setting this up in dub that'd be great. An example project doing something similar would be really helpful. >> >> --Jon >> > > Here is what I know of it, using subPackages: > > Say you have a project named myapp, and you need three executables, app1, app2, app3, they all depend on a common code base, which you name it common. > > Using dub, you can have a parent project myapp, that does nothing but is a container of the three apps and their common code. > > dub.sdl in myapp dir: > > ``` > name "myapp" > > dependency ":common" version="*" > subPackage "./common/" > > dependency ":app1" version="*" > subPackage "./app1/" > > dependency ":app2" version="*" > subPackage "./app2/" > > dependency ":app3" version="*" > subPackage "./app3/" > ``` > > the comma in dependency name ":common" is equal to "myapp:common" > > now use `dub init common` and the like to create subdirectories. > > change dub.sdl in the subdirectory common so that it becomes a library type: > > ``` > name "common" > > targetType "library" > > ``` > > change dub.sdl in myapp* subdirectories to depend on common: > > ``` > name "app1" > targetType "executable" > > dependency "myapp:common" version="*" > ``` > > note here you need to add root project name "myapp:common". > > Then you should register your whole project into the local dub repo, so that subpackages can find its dependencies when building: > > in the project root directory: > > dub add-local . > > Now you can build each executable with: > > dub build :app1 > dub build :app2 > dub build :app3 > > Unfortunately dub does not build all sub packages at once when you dub in the root directory. > > But I think there might be a better way to handle multiple executables? > > > Just tried your suggestion and it works. I just added the below to the parent project to get the apps build: void main() { import std.process : executeShell; executeShell(`dub build :app1`); executeShell(`dub build :app2`); executeShell(`dub build :app3`); }