Before we implement SDL package format for DUB

Wyatt via Digitalmars-d digitalmars-d at puremagic.com
Wed Aug 27 07:40:26 PDT 2014


On Wednesday, 27 August 2014 at 05:40:51 UTC, eles wrote:
> On Wednesday, 27 August 2014 at 01:40:41 UTC, Nick Sabalausky 
> wrote:
>> All it would do is provide many tempting and creative ways to 
>> accidentally obfuscate the package description file.
>
> I agree partially with this, this is why I am not pushing for 
> D. A declarative language seems to be more appropriate in this 
> case.
>
Ideally we wouldn't even need that, but reality is rarely so 
kind.  I suppose if we can't be sufficiently Perl-like, maybe 
Portage-like is the next best thing. :/

Thought dump:
The DUB package specification is versioned, right?  So, in the 
vein of the Package Manager Specification, for a given...let's 
call it "DUBAPI version"... provide higher-level functions that 
abstract away things that are common or things that are tricky to 
get right if you try to always do them manually.  Package them in 
modules that can be imported and use the DUBAPI version within 
the module to select version-specific behaviour.  For those of 
stern fortitude, an ugly ebuild-like thing; a...uhm, "dubuild":

DUBAPI=1;
import dub.autotools;
import dub.git;
import dub.utils : patch;

DESCRIPTION = "Plugin providing semi-solids for bread";
HOMEPAGE = "http://toa.st/spread";
LICENSE = "zlib";
PHOBOS_VERSION = "<=2.065"; // TODO: fix the failure
GIT_REPO_URI = "http://github.com/toast/spread";
GIT_BRANCH = "butter"; // Vars defined in the dub.git module
DEPEND = {">=libyeast-1.3", ">=libbread-2.2" }; // Build-time 
dependency

// Each of these phase functions overrides a default.
// If it doesn't need overridden, the default is used.
src_unpack(){
     git_fetch(GIT_BRANCH); // No argument gets master branch
     patch("files/melt_butter.patch"); // Apply our local patch
}

src_configure() {
     assert(autoreconf(), "configure failed!"); // Die if this 
fails.
}

src_install() {
     dub_install("~/toast/plugins/"); // Non-standard location
}

post_install() {
     dublog("Activate the spread plugin under Tools -> Options -> 
Plugins");
}

NOTE: I want to believe this is overkill and we'll never need to 
consider anything even resembling this route, but experience 
makes that hard.

-Wyatt


More information about the Digitalmars-d mailing list