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`); }