Search in sources :

Example 1 with Arguments

use of org.metaborg.util.cmd.Arguments in project spoofax by metaborg.

the class LanguageSpecBuilder method generateSourcesBuilderInput.

private GenerateSourcesBuilder.Input generateSourcesBuilderInput(LanguageSpecBuildInput input) throws FileSystemException, MetaborgException {
    final ISpoofaxLanguageSpec languageSpec = input.languageSpec();
    final ISpoofaxLanguageSpecConfig config = languageSpec.config();
    final FileObject baseLoc = input.languageSpec().location();
    final SpoofaxLangSpecCommonPaths paths = new SpoofaxLangSpecCommonPaths(baseLoc);
    final FileObject buildInfoLoc = paths.plutoBuildInfoDir();
    final SpoofaxContext context = new SpoofaxContext(baseLoc, buildInfoLoc);
    // SDF
    final Boolean sdfEnabled = config.sdfEnabled();
    final String sdfModule = config.sdfName();
    final FileObject sdfFileCandidate;
    final SdfVersion sdfVersion = config.sdfVersion();
    final Sdf2tableVersion sdf2tableVersion = config.sdf2tableVersion();
    switch(sdfVersion) {
        case sdf2:
            final Iterable<FileObject> sdfRoots = languagePathService.sourcePaths(input.project(), SpoofaxConstants.LANG_SDF_NAME);
            sdfFileCandidate = paths.findSyntaxMainFile(sdfRoots, sdfModule);
            break;
        case sdf3:
            sdfFileCandidate = paths.syntaxSrcGenMainFile(sdfModule);
            break;
        default:
            throw new MetaborgException("Unknown SDF version: " + sdfVersion);
    }
    @Nullable final File sdfFile;
    if (sdfFileCandidate != null && sdfFileCandidate.exists()) {
        sdfFile = resourceService.localPath(sdfFileCandidate);
    } else {
        sdfFile = null;
    }
    @Nullable final File sdfExternalDef;
    final String sdfExternalDefStr = config.sdfExternalDef();
    if (sdfExternalDefStr != null) {
        final FileObject sdfExternalDefLoc = resourceService.resolve(sdfExternalDefStr);
        if (!sdfExternalDefLoc.exists()) {
            throw new MetaborgException("External SDF definition at " + sdfExternalDefLoc + " does not exist");
        }
        sdfExternalDef = resourceService.localFile(sdfExternalDefLoc);
    } else {
        sdfExternalDef = null;
    }
    final Iterable<FileObject> sdfIncludePaths = languagePathService.sourceAndIncludePaths(languageSpec, SpoofaxConstants.LANG_SDF_NAME);
    final FileObject packSdfIncludesReplicateDir = paths.replicateDir().resolveFile("pack-sdf-includes");
    packSdfIncludesReplicateDir.delete(new AllFileSelector());
    final List<File> packSdfIncludePaths = Lists.newArrayList();
    for (FileObject path : sdfIncludePaths) {
        if (!path.exists()) {
            continue;
        }
        packSdfIncludePaths.add(resourceService.localFile(path, packSdfIncludesReplicateDir));
    }
    final Arguments packSdfArgs = config.sdfArgs();
    // SDF completions
    final String sdfCompletionModule = config.sdfName() + "-completion-insertions";
    @Nullable final File sdfCompletionFile;
    FileObject sdfCompletionFileCandidate = null;
    if (sdf2tableVersion == Sdf2tableVersion.c) {
        sdfCompletionFileCandidate = paths.syntaxCompletionMainFile(sdfCompletionModule);
    } else if (sdf2tableVersion == Sdf2tableVersion.java || sdf2tableVersion == Sdf2tableVersion.dynamic) {
        sdfCompletionFileCandidate = paths.syntaxCompletionMainFileNormalized(sdfCompletionModule);
    }
    boolean dataDependent = config.dataDependent();
    if (sdfCompletionFileCandidate != null && sdfCompletionFileCandidate.exists()) {
        sdfCompletionFile = resourceService.localPath(sdfCompletionFileCandidate);
    } else {
        sdfCompletionFile = null;
    }
    // Meta-SDF
    final Iterable<FileObject> sdfRoots = languagePathService.sourcePaths(input.project(), SpoofaxConstants.LANG_SDF_NAME);
    final String sdfMetaModule = config.metaSdfName();
    final FileObject sdfMetaFileCandidate = paths.findSyntaxMainFile(sdfRoots, sdfMetaModule);
    @Nullable final File sdfMetaFile;
    if (sdfMetaFileCandidate != null && sdfMetaFileCandidate.exists()) {
        sdfMetaFile = resourceService.localPath(sdfMetaFileCandidate);
    } else {
        sdfMetaFile = null;
    }
    // Stratego
    final String strModule = config.strategoName();
    final Iterable<FileObject> strRoots = languagePathService.sourcePaths(input.project(), SpoofaxConstants.LANG_STRATEGO_NAME);
    final FileObject strFileCandidate = paths.findStrMainFile(strRoots, strModule);
    @Nullable final File strFile;
    if (strFileCandidate != null && strFileCandidate.exists()) {
        strFile = resourceService.localPath(strFileCandidate);
    } else {
        strFile = null;
    }
    final String strStratPkg = paths.strJavaTransPkg(config.identifier().id);
    final String strJavaStratPkg = paths.strJavaStratPkg(config.identifier().id);
    final FileObject strJavaStratFileCandidate = paths.strMainJavaStratFile(config.identifier().id);
    @Nullable final File strJavaStratFile;
    if (strJavaStratFileCandidate.exists()) {
        strJavaStratFile = resourceService.localPath(strJavaStratFileCandidate);
    } else {
        strJavaStratFile = null;
    }
    final StrategoFormat strFormat = config.strFormat();
    @Nullable final File strExternalJar;
    final String strExternalJarStr = config.strExternalJar();
    if (strExternalJarStr != null) {
        final FileObject strExternalJarLoc = resourceService.resolve(strExternalJarStr);
        if (!strExternalJarLoc.exists()) {
            throw new MetaborgException("External Stratego JAR at " + strExternalJarLoc + " does not exist");
        }
        strExternalJar = resourceService.localFile(strExternalJarLoc);
    } else {
        strExternalJar = null;
    }
    final String strExternalJarFlags = config.strExternalJarFlags();
    final Iterable<FileObject> strIncludePaths = languagePathService.sourceAndIncludePaths(languageSpec, SpoofaxConstants.LANG_STRATEGO_NAME);
    final FileObject strjIncludesReplicateDir = paths.replicateDir().resolveFile("strj-includes");
    strjIncludesReplicateDir.delete(new AllFileSelector());
    final List<File> strjIncludeDirs = Lists.newArrayList();
    final List<File> strjIncludeFiles = Lists.newArrayList();
    for (FileObject path : strIncludePaths) {
        if (!path.exists()) {
            continue;
        }
        if (path.isFolder()) {
            strjIncludeDirs.add(resourceService.localFile(path, strjIncludesReplicateDir));
        }
        if (path.isFile()) {
            strjIncludeFiles.add(resourceService.localFile(path, strjIncludesReplicateDir));
        }
    }
    final Arguments strjArgs = config.strArgs();
    return new GenerateSourcesBuilder.Input(context, config.identifier().id, config.sourceDeps(), sdfEnabled, sdfModule, sdfFile, sdfVersion, sdf2tableVersion, dataDependent, sdfExternalDef, packSdfIncludePaths, packSdfArgs, sdfCompletionModule, sdfCompletionFile, sdfMetaModule, sdfMetaFile, strFile, strStratPkg, strJavaStratPkg, strJavaStratFile, strFormat, strExternalJar, strExternalJarFlags, strjIncludeDirs, strjIncludeFiles, strjArgs);
}
Also used : StrategoFormat(org.metaborg.spoofax.meta.core.config.StrategoFormat) ISpoofaxLanguageSpecConfig(org.metaborg.spoofax.meta.core.config.ISpoofaxLanguageSpecConfig) MetaborgException(org.metaborg.core.MetaborgException) Arguments(org.metaborg.util.cmd.Arguments) BuildInput(org.metaborg.core.build.BuildInput) ISpoofaxLanguageSpec(org.metaborg.spoofax.meta.core.project.ISpoofaxLanguageSpec) SdfVersion(org.metaborg.spoofax.meta.core.config.SdfVersion) SpoofaxContext(org.metaborg.spoofax.meta.core.pluto.SpoofaxContext) AllFileSelector(org.apache.commons.vfs2.AllFileSelector) Sdf2tableVersion(org.metaborg.core.config.Sdf2tableVersion) FileObject(org.apache.commons.vfs2.FileObject) File(java.io.File) Nullable(javax.annotation.Nullable)

Example 2 with Arguments

use of org.metaborg.util.cmd.Arguments in project spoofax by metaborg.

the class SpoofaxLanguageSpecConfig method strArgs.

@Override
public Arguments strArgs() {
    @Nullable final List<String> values = config.getList(String.class, PROP_STR_ARGS);
    final Arguments arguments = new Arguments();
    if (values != null) {
        for (String value : values) {
            arguments.add(value);
        }
    }
    return arguments;
}
Also used : Arguments(org.metaborg.util.cmd.Arguments) Nullable(javax.annotation.Nullable)

Example 3 with Arguments

use of org.metaborg.util.cmd.Arguments in project spoofax by metaborg.

the class GenerateSourcesBuilder method build.

@Override
public None build(GenerateSourcesBuilder.Input input) throws IOException {
    final File srcGenSigDir = toFile(paths.syntaxSrcGenSignatureDir());
    final File srcGenSyntaxDir = toFile(paths.syntaxSrcGenDir());
    final File srcGenSyntaxCompletionDir = toFile(paths.syntaxCompletionSrcGenDir());
    final File srcGenPpDir = toFile(paths.syntaxSrcGenPpDir());
    final File targetMetaborgDir = toFile(paths.targetMetaborgDir());
    // SDF
    @Nullable final Origin parenthesizeOrigin;
    @Nullable final Origin javaParenthesizeOrigin;
    @Nullable final Origin sigOrigin;
    if (input.sdfModule != null && input.sdfEnabled) {
        final String sdfModule = input.sdfModule;
        final File sdfFile = input.sdfFile;
        // new parse table generator
        if (input.sdf2tableVersion == Sdf2tableVersion.java || input.sdf2tableVersion == Sdf2tableVersion.dynamic || input.sdf2tableVersion == Sdf2tableVersion.incremental) {
            // Get JSGLR parse table from the normalized SDF aterm
            final boolean dynamicGeneration = (input.sdf2tableVersion == Sdf2tableVersion.dynamic || input.sdf2tableVersion == Sdf2tableVersion.incremental);
            final boolean dataDependent = input.dataDependent;
            final File srcNormDir = toFile(paths.syntaxNormDir());
            final File tableFile = FileUtils.getFile(targetMetaborgDir, "sdf.tbl");
            final File contextualGrammarFile = FileUtils.getFile(targetMetaborgDir, "ctxgrammar.aterm");
            final File persistedTableFile = FileUtils.getFile(targetMetaborgDir, "table.bin");
            final File sdfNormFile = FileUtils.getFile(srcNormDir, "permissive-norm.aterm");
            final List<String> paths = Lists.newLinkedList();
            paths.add(srcGenSyntaxDir.getAbsolutePath());
            for (LanguageIdentifier langId : input.sourceDeps) {
                ILanguageImpl lang = context.languageService().getImpl(langId);
                for (final ILanguageComponent component : lang.components()) {
                    ILanguageComponentConfig config = component.config();
                    Collection<IExportConfig> exports = config.exports();
                    for (IExportConfig exportConfig : exports) {
                        exportConfig.accept(new IExportVisitor() {

                            @Override
                            public void visit(LangDirExport export) {
                                if (export.language.equals(SpoofaxConstants.LANG_ATERM_NAME)) {
                                    try {
                                        paths.add(toFileReplicate(component.location().resolveFile(export.directory)).getAbsolutePath());
                                    } catch (FileSystemException e) {
                                        System.out.println("Failed to locate path");
                                        e.printStackTrace();
                                    }
                                }
                            }

                            @Override
                            public void visit(LangFileExport export) {
                            // Ignore file exports
                            }

                            @Override
                            public void visit(ResourceExport export) {
                            // Ignore resource exports
                            }
                        });
                    }
                }
            }
            final Origin sdf2TableJavaOrigin = Sdf2Table.origin(new Sdf2Table.Input(context, sdfNormFile, tableFile, persistedTableFile, contextualGrammarFile, paths, dynamicGeneration, dataDependent));
            requireBuild(sdf2TableJavaOrigin);
            // New parenthesizer
            final File parenthesizerFile = FileUtils.getFile(srcGenPpDir, sdfModule + "-parenthesize.str");
            javaParenthesizeOrigin = Sdf2Parenthesize.origin(new Sdf2Parenthesize.Input(context, persistedTableFile, parenthesizerFile, sdfModule));
            parenthesizeOrigin = null;
            sigOrigin = null;
        } else {
            // Get the SDF def file, either from existing external def, or by running pack SDF on the grammar
            // specification.
            @Nullable final File packSdfFile;
            @Nullable final Origin packSdfOrigin;
            if (input.sdfExternalDef != null) {
                packSdfFile = input.sdfExternalDef;
                packSdfOrigin = null;
            } else if (sdfFile != null) {
                require(sdfFile, FileExistsStamper.instance);
                if (!sdfFile.exists()) {
                    throw new IOException("Main SDF file at " + sdfFile + " does not exist");
                }
                packSdfFile = FileUtils.getFile(srcGenSyntaxDir, sdfModule + ".def");
                packSdfOrigin = PackSdf.origin(new PackSdf.Input(context, sdfModule, sdfFile, packSdfFile, input.packSdfIncludePaths, input.packSdfArgs, null));
            } else {
                packSdfFile = null;
                packSdfOrigin = null;
            }
            if (packSdfFile != null) {
                // file.
                if (input.sdfExternalDef != null || input.sdfVersion == SdfVersion.sdf2) {
                    final File rtgFile = FileUtils.getFile(srcGenSigDir, sdfModule + ".rtg");
                    final Origin rtgOrigin = Sdf2Rtg.origin(new Sdf2Rtg.Input(context, packSdfFile, rtgFile, sdfModule, packSdfOrigin));
                    final File sigFile = FileUtils.getFile(srcGenSigDir, sdfModule + ".str");
                    final String sigModule = "signatures/" + sdfModule;
                    sigOrigin = Rtg2Sig.origin(new Rtg2Sig.Input(context, rtgFile, sigFile, sigModule, rtgOrigin));
                } else {
                    sigOrigin = null;
                }
                // Get Stratego parenthesizer file, from the SDF def file.
                final File parenthesizeFile = FileUtils.getFile(srcGenPpDir, sdfModule + "-parenthesize.str");
                final String parenthesizeModule = "pp/" + sdfModule + "-parenthesize";
                parenthesizeOrigin = Sdf2ParenthesizeLegacy.origin(new Sdf2ParenthesizeLegacy.Input(context, packSdfFile, parenthesizeFile, sdfModule, parenthesizeModule, packSdfOrigin));
                // Get SDF permissive def file, from the SDF def file.
                final File permissiveDefFile = FileUtils.getFile(srcGenSyntaxDir, sdfModule + "-permissive.def");
                final Origin permissiveDefOrigin = MakePermissive.origin(new MakePermissive.Input(context, packSdfFile, permissiveDefFile, sdfModule, packSdfOrigin));
                // Get JSGLR parse table, from the SDF permissive def file.
                final File tableFile = FileUtils.getFile(targetMetaborgDir, "sdf.tbl");
                final Origin sdf2TableOrigin = Sdf2TableLegacy.origin(new Sdf2TableLegacy.Input(context, permissiveDefFile, tableFile, sdfModule, permissiveDefOrigin));
                requireBuild(sdf2TableOrigin);
                javaParenthesizeOrigin = null;
            } else {
                javaParenthesizeOrigin = null;
                parenthesizeOrigin = null;
                sigOrigin = null;
            }
        }
    } else {
        javaParenthesizeOrigin = null;
        parenthesizeOrigin = null;
        sigOrigin = null;
    }
    // SDF completions
    final Origin sdfCompletionOrigin;
    if (input.sdfCompletionFile != null && input.sdfEnabled) {
        final String sdfCompletionsModule = input.sdfCompletionModule;
        final File sdfCompletionsFile = input.sdfCompletionFile;
        if (input.sdf2tableVersion == Sdf2tableVersion.java || input.sdf2tableVersion == Sdf2tableVersion.dynamic || input.sdf2tableVersion == Sdf2tableVersion.incremental) {
            // Get JSGLR parse table, from the normalized SDF aterm
            final boolean dynamicGeneration = (input.sdf2tableVersion == Sdf2tableVersion.dynamic || input.sdf2tableVersion == Sdf2tableVersion.incremental);
            final boolean dataDependent = input.dataDependent;
            final List<String> paths = Lists.newLinkedList();
            paths.add(srcGenSyntaxDir.getAbsolutePath());
            for (LanguageIdentifier langId : input.sourceDeps) {
                ILanguageImpl lang = context.languageService().getImpl(langId);
                for (final ILanguageComponent component : lang.components()) {
                    ILanguageComponentConfig config = component.config();
                    Collection<IExportConfig> exports = config.exports();
                    for (IExportConfig exportConfig : exports) {
                        exportConfig.accept(new IExportVisitor() {

                            @Override
                            public void visit(LangDirExport export) {
                                if (export.language.equals(SpoofaxConstants.LANG_ATERM_NAME)) {
                                    try {
                                        paths.add(toFileReplicate(component.location().resolveFile(export.directory)).getAbsolutePath());
                                    } catch (FileSystemException e) {
                                        System.out.println("Failed to locate path");
                                        e.printStackTrace();
                                    }
                                }
                            }

                            @Override
                            public void visit(LangFileExport export) {
                            // Ignore file exports
                            }

                            @Override
                            public void visit(ResourceExport export) {
                            // Ignore resource exports
                            }
                        });
                    }
                }
            }
            final File tableFile = FileUtils.getFile(targetMetaborgDir, "sdf-completions.tbl");
            sdfCompletionOrigin = Sdf2Table.origin(new Sdf2Table.Input(context, sdfCompletionsFile, tableFile, null, null, paths, dynamicGeneration, dataDependent));
            requireBuild(sdfCompletionOrigin);
        } else {
            // Get the SDF def file, either from existing external def, or by running pack SDF on the grammar
            // specification.
            @Nullable final File packSdfCompletionsFile;
            @Nullable final Origin packSdfCompletionsOrigin;
            if (sdfCompletionsFile != null) {
                require(sdfCompletionsFile, FileExistsStamper.instance);
                if (!sdfCompletionsFile.exists()) {
                    throw new IOException("Main SDF completions file at " + sdfCompletionsFile + " does not exist");
                }
                packSdfCompletionsFile = FileUtils.getFile(srcGenSyntaxCompletionDir, sdfCompletionsModule + ".def");
                packSdfCompletionsOrigin = PackSdf.origin(new PackSdf.Input(context, sdfCompletionsModule, sdfCompletionsFile, packSdfCompletionsFile, input.packSdfIncludePaths, input.packSdfArgs, null));
            } else {
                packSdfCompletionsFile = null;
                packSdfCompletionsOrigin = null;
            }
            if (packSdfCompletionsFile != null) {
                // Get SDF permissive def file, from the SDF def file.
                final File permissiveCompletionsDefFile = FileUtils.getFile(srcGenSyntaxCompletionDir, sdfCompletionsModule + "-permissive.def");
                final Origin permissiveCompletionsDefOrigin = MakePermissive.origin(new MakePermissive.Input(context, packSdfCompletionsFile, permissiveCompletionsDefFile, sdfCompletionsModule, packSdfCompletionsOrigin));
                // Get JSGLR parse table, from the SDF permissive def file.
                final File completionsTableFile = FileUtils.getFile(targetMetaborgDir, "sdf-completions.tbl");
                sdfCompletionOrigin = Sdf2TableLegacy.origin(new Sdf2TableLegacy.Input(context, permissiveCompletionsDefFile, completionsTableFile, "completion/" + sdfCompletionsModule, permissiveCompletionsDefOrigin));
                requireBuild(sdfCompletionOrigin);
            } else {
                sdfCompletionOrigin = null;
            }
        }
    } else {
        sdfCompletionOrigin = null;
    }
    // SDF meta-module for creating a Stratego concrete syntax extension parse table
    final File sdfMetaFile = input.sdfMetaFile;
    final Origin sdfMetaOrigin;
    if (sdfMetaFile != null) {
        require(sdfMetaFile, FileExistsStamper.instance);
        if (!sdfMetaFile.exists()) {
            throw new IOException("Main meta-SDF file at " + sdfMetaFile + " does not exist");
        }
        final String sdfMetaModule = input.sdfMetaModule;
        final BuildRequest<PrepareNativeBundle.Input, OutputTransient<PrepareNativeBundle.Output>, PrepareNativeBundle, SpoofaxBuilderFactory<PrepareNativeBundle.Input, OutputTransient<PrepareNativeBundle.Output>, PrepareNativeBundle>> nativeBundleRequest = PrepareNativeBundle.request(new PrepareNativeBundle.Input(context));
        final File strategoMixFile = requireBuild(nativeBundleRequest).val().strategoMixFile;
        final Origin strategoMixOrigin = Origin.from(nativeBundleRequest);
        final Arguments packSdfMetaArgs = new Arguments(input.packSdfArgs);
        packSdfMetaArgs.addFile("-Idef", strategoMixFile);
        final File packSdfFile = FileUtils.getFile(srcGenSyntaxDir, sdfMetaModule + ".def");
        final Origin packSdfOrigin = PackSdf.origin(new PackSdf.Input(context, sdfMetaModule, sdfMetaFile, packSdfFile, input.packSdfIncludePaths, packSdfMetaArgs, strategoMixOrigin));
        final File permissiveDefFile = FileUtils.getFile(srcGenSyntaxDir, sdfMetaModule + "-permissive.def");
        final Origin permissiveDefOrigin = MakePermissive.origin(new MakePermissive.Input(context, packSdfFile, permissiveDefFile, sdfMetaModule, packSdfOrigin));
        final File transDir = toFile(paths.transDir());
        final File tableFile = FileUtils.getFile(transDir, sdfMetaModule + ".tbl");
        sdfMetaOrigin = Sdf2TableLegacy.origin(new Sdf2TableLegacy.Input(context, permissiveDefFile, tableFile, sdfMetaModule, permissiveDefOrigin));
        requireBuild(sdfMetaOrigin);
    } else {
        sdfMetaOrigin = null;
    }
    // Stratego
    final File strFile = input.strFile;
    if (strFile != null) {
        require(strFile, FileExistsStamper.instance);
        if (!strFile.exists()) {
            throw new IOException("Main Stratego file at " + strFile + " does not exist");
        }
        boolean buildStrJavaStrat = input.strJavaStratPackage != null && input.strJavaStratFile != null;
        if (buildStrJavaStrat) {
            require(input.strJavaStratFile, FileExistsStamper.instance);
            if (!input.strJavaStratFile.exists()) {
                throw new IOException("Main Stratego Java strategies file at " + input.strJavaStratFile + " does not exist");
            }
        }
        final Arguments extraArgs = new Arguments();
        extraArgs.addAll(input.strjArgs);
        final File outputFile;
        final File depPath;
        if (input.strFormat == StrategoFormat.ctree) {
            outputFile = FileUtils.getFile(targetMetaborgDir, "stratego.ctree");
            depPath = outputFile;
            extraArgs.add("-F");
        } else {
            depPath = toFile(paths.strSrcGenJavaTransDir(input.languageId));
            outputFile = FileUtils.getFile(depPath, "Main.java");
            extraArgs.add("-la", "java-front");
            if (buildStrJavaStrat) {
                extraArgs.add("-la", input.strJavaStratPackage);
            }
        }
        if (input.strExternalJarFlags != null) {
            extraArgs.addLine(input.strExternalJarFlags);
        }
        // @formatter:off
        final Origin origin;
        if (input.sdf2tableVersion == Sdf2tableVersion.java || input.sdf2tableVersion == Sdf2tableVersion.dynamic) {
            origin = Origin.Builder().add(sigOrigin).add(sdfCompletionOrigin).add(sdfMetaOrigin).add(javaParenthesizeOrigin).get();
        } else {
            origin = Origin.Builder().add(parenthesizeOrigin).add(sigOrigin).add(sdfCompletionOrigin).add(sdfMetaOrigin).get();
        }
        // @formatter:on
        final File cacheDir = toFile(paths.strCacheDir());
        final Strj.Input strjInput = new Strj.Input(context, strFile, outputFile, depPath, input.strJavaPackage, true, true, input.strjIncludeDirs, input.strjIncludeFiles, Lists.newArrayList(), cacheDir, extraArgs, origin);
        final Origin strjOrigin = Strj.origin(strjInput);
        requireBuild(strjOrigin);
        // Typesmart
        final File typesmartExportedFile = toFile(paths.strTypesmartExportedFile());
        final Typesmart.Input typesmartInput = new Typesmart.Input(context, input.strFile, input.strjIncludeDirs, typesmartExportedFile, origin);
        final Origin typesmartOrigin = Typesmart.origin(typesmartInput);
        requireBuild(typesmartOrigin);
    }
    return None.val;
}
Also used : Origin(build.pluto.dependency.Origin) MakePermissive(org.metaborg.spoofax.meta.core.pluto.build.MakePermissive) OutputTransient(build.pluto.output.OutputTransient) IExportConfig(org.metaborg.core.config.IExportConfig) Sdf2Table(org.metaborg.spoofax.meta.core.pluto.build.Sdf2Table) FileSystemException(org.apache.commons.vfs2.FileSystemException) SpoofaxInput(org.metaborg.spoofax.meta.core.pluto.SpoofaxInput) Typesmart(org.metaborg.spoofax.meta.core.pluto.build.Typesmart) IExportVisitor(org.metaborg.core.config.IExportVisitor) LangDirExport(org.metaborg.core.config.LangDirExport) Sdf2Rtg(org.metaborg.spoofax.meta.core.pluto.build.Sdf2Rtg) Strj(org.metaborg.spoofax.meta.core.pluto.build.Strj) ILanguageComponentConfig(org.metaborg.core.config.ILanguageComponentConfig) LangFileExport(org.metaborg.core.config.LangFileExport) PackSdf(org.metaborg.spoofax.meta.core.pluto.build.PackSdf) PrepareNativeBundle(org.metaborg.spoofax.meta.core.pluto.build.misc.PrepareNativeBundle) Arguments(org.metaborg.util.cmd.Arguments) IOException(java.io.IOException) LanguageIdentifier(org.metaborg.core.language.LanguageIdentifier) ILanguageImpl(org.metaborg.core.language.ILanguageImpl) ResourceExport(org.metaborg.core.config.ResourceExport) Sdf2TableLegacy(org.metaborg.spoofax.meta.core.pluto.build.Sdf2TableLegacy) SpoofaxBuilderFactory(org.metaborg.spoofax.meta.core.pluto.SpoofaxBuilderFactory) ILanguageComponent(org.metaborg.core.language.ILanguageComponent) File(java.io.File) Nullable(javax.annotation.Nullable)

Example 4 with Arguments

use of org.metaborg.util.cmd.Arguments in project spoofax by metaborg.

the class PackSdf method build.

@Override
public OutputPersisted<File> build(Input input) throws IOException {
    require(input.inputFile);
    if (input.origin != null) {
        requireBuild(input.origin);
    }
    final Arguments args = new Arguments();
    args.addAll(input.extraArgs);
    for (File path : input.includePaths) {
        require(path, FileExistsStamper.instance);
        if (!path.exists()) {
            continue;
        }
        if (FilenameUtils.isExtension(path.getName(), "def")) {
            args.addFile("-Idef", path);
        } else {
            /*
                 * HACK: for full incremental soundness, a require on the directory is needed here, since new files can
                 * be added to the path, which influence pack-sdf. However, since the Spoofax build generates new files
                 * into some of these directories, that would cause the requirement to always be inconsistent, always
                 * triggering a rebuild. This is why we omit the requirement.
                 * 
                 * seba: This could be solved using a customary stamper that only tracks files matching some naming
                 * convention.
                 */
            args.addFile("-I", path);
        }
    }
    // @formatter:off
    final Arguments arguments = new Arguments().addFile("-i", input.inputFile).addFile("-o", input.outputFile).addAll(args);
    final ExecutionResult result = new StrategoExecutor().withToolsContext().withStrategy(main_pack_sdf_0_0.instance).withTracker(newResourceTracker(Pattern.quote("  including ") + ".*")).withName("pack-sdf").executeCLI(arguments);
    // @formatter:on
    provide(input.outputFile);
    for (File required : extractRequiredPaths(result.errLog)) {
        require(required);
    }
    setState(State.finished(result.success));
    return OutputPersisted.of(input.outputFile);
}
Also used : Arguments(org.metaborg.util.cmd.Arguments) ExecutionResult(org.metaborg.spoofax.meta.core.pluto.util.StrategoExecutor.ExecutionResult) File(java.io.File) StrategoExecutor(org.metaborg.spoofax.meta.core.pluto.util.StrategoExecutor)

Example 5 with Arguments

use of org.metaborg.util.cmd.Arguments in project spoofax by metaborg.

the class Sdf2Rtg method build.

@Override
public OutputPersisted<File> build(Input input) throws IOException {
    requireBuild(input.origin);
    if (SpoofaxContext.BETTER_STAMPERS) {
        require(input.inputFile, new Sdf2RtgStamper(input.context));
    } else {
        require(input.inputFile);
    }
    // @formatter:off
    final Arguments arguments = new Arguments().addFile("-i", input.inputFile).add("-m", input.module).addFile("-o", input.outputFile).add("--ignore-missing-cons");
    final ExecutionResult result = new StrategoExecutor().withToolsContext().withStrategy(main_sdf2rtg_0_0.instance).withTracker(newResourceTracker(Pattern.quote("Invoking native tool") + ".*")).withName("sdf2rtg").executeCLI(arguments);
    // @formatter:on
    provide(input.outputFile);
    setState(State.finished(result.success));
    return OutputPersisted.of(input.outputFile);
}
Also used : Sdf2RtgStamper(org.metaborg.spoofax.meta.core.pluto.stamp.Sdf2RtgStamper) Arguments(org.metaborg.util.cmd.Arguments) ExecutionResult(org.metaborg.spoofax.meta.core.pluto.util.StrategoExecutor.ExecutionResult) StrategoExecutor(org.metaborg.spoofax.meta.core.pluto.util.StrategoExecutor)

Aggregations

Arguments (org.metaborg.util.cmd.Arguments)10 StrategoExecutor (org.metaborg.spoofax.meta.core.pluto.util.StrategoExecutor)6 ExecutionResult (org.metaborg.spoofax.meta.core.pluto.util.StrategoExecutor.ExecutionResult)6 File (java.io.File)4 Nullable (javax.annotation.Nullable)3 Origin (build.pluto.dependency.Origin)1 OutputTransient (build.pluto.output.OutputTransient)1 IOException (java.io.IOException)1 Path (java.nio.file.Path)1 AllFileSelector (org.apache.commons.vfs2.AllFileSelector)1 FileObject (org.apache.commons.vfs2.FileObject)1 FileSystemException (org.apache.commons.vfs2.FileSystemException)1 MetaborgException (org.metaborg.core.MetaborgException)1 BuildInput (org.metaborg.core.build.BuildInput)1 IExportConfig (org.metaborg.core.config.IExportConfig)1 IExportVisitor (org.metaborg.core.config.IExportVisitor)1 ILanguageComponentConfig (org.metaborg.core.config.ILanguageComponentConfig)1 LangDirExport (org.metaborg.core.config.LangDirExport)1 LangFileExport (org.metaborg.core.config.LangFileExport)1 ResourceExport (org.metaborg.core.config.ResourceExport)1