diff --git a/dub.sdl b/dub.sdl new file mode 100644 index 000000000000..811cde6fb83e --- /dev/null +++ b/dub.sdl @@ -0,0 +1,50 @@ +name "dmd" +description "The DMD compiler" +authors "Walter Bright" +copyright "Copyright © 1999-2017, Digital Mars" +license "BSL-1.0" + +targetType "none" +dependency ":parser" version="*" + +subPackage { + name "root" + targetType "library" + sourcePaths "src/ddmd/root" +} + +subPackage { + name "lexer" + targetType "library" + sourcePaths + + sourceFiles \ + "src/ddmd/console.d" \ + "src/ddmd/entity.d" \ + "src/ddmd/errors.d" \ + "src/ddmd/globals.d" \ + "src/ddmd/id.d" \ + "src/ddmd/identifier.d" \ + "src/ddmd/lexer.d" \ + "src/ddmd/tokens.d" \ + "src/ddmd/utf.d" + + // stringImportPaths cannot be used because it will make Dub extremely slow + // https://github.com/dlang/dub/issues/1199 + dflags "-J$PACKAGE_DIR" + + dependency "dmd:root" version="*" +} + +subPackage { + name "parser" + targetType "library" + sourcePaths + + sourceFiles \ + "src/ddmd/astbase.d" \ + "src/ddmd/astbasevisitor.d" \ + "src/ddmd/parse.d" + + dependency "dmd:lexer" version="*" +} diff --git a/test/dub_package/.gitignore b/test/dub_package/.gitignore new file mode 100644 index 000000000000..433d26664af8 --- /dev/null +++ b/test/dub_package/.gitignore @@ -0,0 +1,5 @@ +.dub +docs.json +__dummy.html +*.o +*.obj diff --git a/test/dub_package/dub.sdl b/test/dub_package/dub.sdl new file mode 100644 index 000000000000..9b6083cbf468 --- /dev/null +++ b/test/dub_package/dub.sdl @@ -0,0 +1,5 @@ +name "dmd-dub-test" +description "Test of the DMD Dub package" +license "BSL 1.0" + +dependency "dmd" path="../../" diff --git a/test/dub_package/source/app.d b/test/dub_package/source/app.d new file mode 100644 index 000000000000..4cff4c5633c7 --- /dev/null +++ b/test/dub_package/source/app.d @@ -0,0 +1,45 @@ +// The tests in this module are highlevel and mostly indented to make sure all +// necessary modules are included in the Dub package. + +void main() +{ +} + +// lexer +unittest +{ + import ddmd.lexer; + import ddmd.tokens; + + immutable expected = [ + TOKvoid, + TOKidentifier, + TOKlparen, + TOKrparen, + TOKlcurly, + TOKrcurly + ]; + + immutable sourceCode = "void test() {} // foobar"; + scope lexer = new Lexer("test", sourceCode.ptr, 0, sourceCode.length, 0, 0); + lexer.nextToken; + + TOK[] result; + + do + { + result ~= lexer.token.value; + } while (lexer.nextToken != TOKeof); + + assert(result == expected); +} + +// parser +unittest +{ + import ddmd.astbase; + import ddmd.parse; + + scope parser = new Parser!ASTBase(null, null, false); + assert(parser !is null); +} diff --git a/travis.sh b/travis.sh index 37ba62eced17..a633f23eb868 100755 --- a/travis.sh +++ b/travis.sh @@ -54,6 +54,7 @@ rebuild() { # test druntime, phobos, dmd test() { + test_dub_package make -j$N -C ../druntime -f posix.mak MODEL=$MODEL unittest make -j$N -C ../phobos -f posix.mak MODEL=$MODEL unittest test_dmd @@ -69,6 +70,13 @@ test_dmd() { fi } +# test dub package +test_dub_package() { + pushd test/dub_package + dub test + popd +} + for proj in druntime phobos; do if [ $TRAVIS_BRANCH != master ] && [ $TRAVIS_BRANCH != stable ] && ! git ls-remote --exit-code --heads https://github.com/dlang/$proj.git $TRAVIS_BRANCH > /dev/null; then