<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">[resend; forgot to copy list]</div><br class=""><div class=""><div style="font-family: HelveticaNeue;" class=""><blockquote type="cite" class=""><div class="">On Sep 6, 2016, at 4:27 PM, Daniel Dunbar <<a href="mailto:daniel_dunbar@apple.com" class="">daniel_dunbar@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><blockquote type="cite" class=""><div class=""><br class="Apple-interchange-newline">On Sep 6, 2016, at 1:36 PM, Paul Cantrell <<a href="mailto:cantrell@pobox.com" class="">cantrell@pobox.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="font-family: Helvetica; font-size: 12px;"><blockquote type="cite" class=""><div class=""><br class="Apple-interchange-newline">On Aug 29, 2016, at 11:10 AM, Daniel Dunbar <<a href="mailto:daniel_dunbar@apple.com" class="">daniel_dunbar@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="font-family: HelveticaNeue; font-size: 13px;"><blockquote type="cite" class=""><div class=""><br class="Apple-interchange-newline">On Aug 29, 2016, at 9:00 AM, Paul Cantrell <<a href="mailto:cantrell@pobox.com" class="">cantrell@pobox.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><blockquote type="cite" class="">On Aug 29, 2016, at 12:07 AM, Daniel Dunbar <<a href="mailto:daniel_dunbar@apple.com" class="">daniel_dunbar@apple.com</a>> wrote:<br class=""><br class="">I completely agree with your original email, and agree the target-access control proposal amounts to a variant of #2.<br class=""><br class="">We definitely need a per-target dependency solution, and if we got one that included some kind of solution for managing the duplicate declaration, that would solve the con you list with #2. That might suggest that one approach here is to add it the list of reasons we should do a per-target dependency proposal.<br class=""><br class="">…<br class=""></blockquote><blockquote type="cite" class=""><br class=""></blockquote><blockquote type="cite" class="">My leaning here is towards trying to figure out a good approach for #2 first, and see where that leaves us<br class=""></blockquote><br class=""></div><div class="">I’m not up on all the discussion, but that certainly seems to me like the right direction.</div></div></div></blockquote></div></div></blockquote><div class=""><br class=""></div><div class="">One way to remove the redundant declarations from #2:</div><div class=""><br class=""></div><div class="">(1) Allow virtual targets that have no corresponding source directory, but declare external dependencies.</div><div class=""><br class=""></div><div class="">(2) Allow other targets to depend on virtual targets.</div></div></div></blockquote><div class=""><br class=""></div>This works, but would it be obvious to newcomers? It feels more like a hack rather than something we would explicitly want to be the definitive model for solving the sharing problem.</div><div class=""><br class=""></div><div class="">I do think that allowing such kinds of targets is something that may make sense, I'm just not sure it is the right answer to the redundant declaration.</div></div></blockquote><br class=""></div><div style="font-family: HelveticaNeue;" class="">It feels like the a natural solution to me. I mean, it is the first one that came to mind….</div><div style="font-family: HelveticaNeue;" class=""><br class=""></div><div style="font-family: HelveticaNeue;" class="">In particular, this syntax, likely to be copied around and posted on Stack Overflow more than once, strikes me as reasonably self-explanatory even if you don’t know how it generalizes to arbitrary virtual targets:</div><div style="font-family: HelveticaNeue;" class=""><br class=""></div><div style="font-family: HelveticaNeue;" class=""><div class=""><div class="" style="font-family: Helvetica; font-size: 12px;"><div class=""><div class=""><div class=""><div class=""><font face="HelveticaNeue" class=""> targets: [</font></div><div class=""><font face="HelveticaNeue" class=""> Target(</font></div><div class=""><font face="HelveticaNeue" class=""> name: "Tests”,</font></div><div class=""><font face="HelveticaNeue" class=""> dependencies: [</font></div><div class=""><font face="HelveticaNeue" class=""> .Package(url: "<a href="https://github.com/Quick/Quick" class="">https://github.com/Quick/Quick</a>", majorVersion: 0)</font></div><div class=""><font face="HelveticaNeue" class=""> ])</font></div><div class=""><span class="" style="font-family: HelveticaNeue;"> ],</span></div></div></div></div></div></div><div class=""><div class=""><div class="" style="font-family: Helvetica; font-size: 12px;"><div class=""><div class=""><div class=""><div class=""><span class="" style="font-family: HelveticaNeue;"><br class=""></span></div></div></div></div></div></div></div></div><div style="font-family: HelveticaNeue;" class="">One small thing that might help with newcomer friendliness: allow (or require?) virtual targets to have a “group” arg instead of “name:”</div><div style="font-family: HelveticaNeue;" class=""><br class=""></div><div style="font-family: HelveticaNeue;" class=""><div class=""><div class="" style="font-family: Helvetica; font-size: 12px;"><div class=""><div class=""><div class=""><div class=""><font face="HelveticaNeue" class=""> targets: [</font></div><div class=""><font face="HelveticaNeue" class=""> Target(</font></div><div class=""><font face="HelveticaNeue" class=""> group: "Tests”,</font></div><div class=""><font face="HelveticaNeue" class=""> dependencies: [</font></div><div class=""><font face="HelveticaNeue" class=""> .Package(url: "<a href="https://github.com/Quick/Quick" class="">https://github.com/Quick/Quick</a>", majorVersion: 0)</font></div><div class=""><font face="HelveticaNeue" class=""> ])</font></div><div class=""><span class="" style="font-family: HelveticaNeue;"> ],</span></div></div></div></div></div></div><div class=""><div class=""><div class="" style="font-family: Helvetica; font-size: 12px;"><div class=""><div class=""><div class=""><div class=""><span class="" style="font-family: HelveticaNeue;"><br class=""></span></div><div class=""><span class="" style="font-family: HelveticaNeue;">That does feel a bit hackish to me, though. I’d rather the package manifest have as few constructs and as few twists as possible.</span></div><div class=""><span class="" style="font-family: HelveticaNeue;"><br class=""></span></div></div></div></div></div></div></div></div><div class="" style="font-family: HelveticaNeue;">Cheers, P</div></div><div class="" style="font-family: HelveticaNeue;"><br class=""></div></body></html>