www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Dub and gitsubmodules

reply Sebastiaan Koppe <mail skoppe.eu> writes:
Does anyone know a reliable way of having a dub package that 
contains git submodules and is to be used as a dependency?

I am looking for a way to ensure the submodules are initialised 
before a build.
Nov 04 2019
parent reply user5678 <user5678 1234.de> writes:
On Monday, 4 November 2019 at 13:37:47 UTC, Sebastiaan Koppe 
wrote:
 Does anyone know a reliable way of having a dub package that 
 contains git submodules and is to be used as a dependency?

 I am looking for a way to ensure the submodules are initialised 
 before a build.
You can use the "preGenerateCommands" to launch the adequate git commands. The submodule needs to be indicated using the "path" property : "preGenerateCommands" : ["git submodule update --init --recursive"], "dependencies" : { "theGitSubModule" : { "path" : "./theGitSubModulePath" }, I have done this before and while it worked I had to "dub build" twice because the project needed to be read a second time to discover new source files generated by the commands. There's a PR that is supposed to fix that: https://github.com/dlang/dub/pull/1708 But more likely at some point git submodules will be supported natively.
Nov 05 2019
parent reply Andre Pany <andre s-e-a-p.de> writes:
On Tuesday, 5 November 2019 at 19:26:54 UTC, user5678 wrote:
 On Monday, 4 November 2019 at 13:37:47 UTC, Sebastiaan Koppe 
 wrote:
 Does anyone know a reliable way of having a dub package that 
 contains git submodules and is to be used as a dependency?

 I am looking for a way to ensure the submodules are 
 initialised before a build.
You can use the "preGenerateCommands" to launch the adequate git commands. The submodule needs to be indicated using the "path" property : "preGenerateCommands" : ["git submodule update --init --recursive"], "dependencies" : { "theGitSubModule" : { "path" : "./theGitSubModulePath" }, I have done this before and while it worked I had to "dub build" twice because the project needed to be read a second time to discover new source files generated by the commands. There's a PR that is supposed to fix that: https://github.com/dlang/dub/pull/1708 But more likely at some point git submodules will be supported natively.
I noticed 1 thing with preGenerateCommands. They are executed "every time" even if nothing has to be rebuild. The preBuildCommands are executed only if there is a build needed. The mentioned pr only takes care about the preGenerateCommands but not preBuildCommands. Kind regards Andre
Nov 05 2019
parent reply user5678 <user5678 1234.de> writes:
On Tuesday, 5 November 2019 at 20:28:49 UTC, Andre Pany wrote:
 On Tuesday, 5 November 2019 at 19:26:54 UTC, user5678 wrote:
 On Monday, 4 November 2019 at 13:37:47 UTC, Sebastiaan Koppe 
 wrote:
 Does anyone know a reliable way of having a dub package that 
 contains git submodules and is to be used as a dependency?

 I am looking for a way to ensure the submodules are 
 initialised before a build.
You can use the "preGenerateCommands" to launch the adequate git commands. The submodule needs to be indicated using the "path" property : "preGenerateCommands" : ["git submodule update --init --recursive"], "dependencies" : { "theGitSubModule" : { "path" : "./theGitSubModulePath" }, I have done this before and while it worked I had to "dub build" twice because the project needed to be read a second time to discover new source files generated by the commands. There's a PR that is supposed to fix that: https://github.com/dlang/dub/pull/1708 But more likely at some point git submodules will be supported natively.
I noticed 1 thing with preGenerateCommands. They are executed "every time" even if nothing has to be rebuild. The preBuildCommands are executed only if there is a build needed.
I didn't know that but I think this is necessary, isn't it ? If the command creates or update a few D sources then how would DUB knows that everything is up-to-date ? (in an ideal world, were the double dub build would not be necessary). For the purpose of pulling one can obviously optimize using more complex commands in a script. In my case I used the date of the last pull so that finally the submodule got pulled only once per day. The command is still executed but you save the useless web request.
 The mentioned pr only takes care about the preGenerateCommands 
 but not preBuildCommands.

 Kind regards
 Andre
Nov 05 2019
parent Sebastiaan Koppe <mail skoppe.eu> writes:
Thanks for the replies!
Nov 06 2019