Search in sources :

Example 1 with SpoofaxCommonPaths

use of org.metaborg.spoofax.core.build.SpoofaxCommonPaths in project spoofax by metaborg.

the class LanguageSpecBuilder method initialize.

public void initialize(LanguageSpecBuildInput input) throws MetaborgException {
    final SpoofaxCommonPaths paths = new SpoofaxLangSpecCommonPaths(input.languageSpec().location());
    try {
        paths.srcGenDir().createFolder();
        paths.targetMetaborgDir().createFolder();
    } catch (FileSystemException e) {
        throw new MetaborgException("Initializing directories failed", e);
    }
    for (IBuildStep buildStep : buildSteps) {
        buildStep.execute(LanguageSpecBuildPhase.initialize, input);
    }
}
Also used : FileSystemException(org.apache.commons.vfs2.FileSystemException) MetaborgException(org.metaborg.core.MetaborgException) SpoofaxCommonPaths(org.metaborg.spoofax.core.build.SpoofaxCommonPaths)

Example 2 with SpoofaxCommonPaths

use of org.metaborg.spoofax.core.build.SpoofaxCommonPaths in project spoofax by metaborg.

the class TermFactoryService method getTypesmartContext.

private TypesmartContext getTypesmartContext(ILanguageComponent component) {
    TypesmartContext context = mergedTypesmartContexts.get(component);
    if (context == null) {
        FileObject localContextFile = new SpoofaxCommonPaths(component.location()).strTypesmartExportedFile();
        context = TypesmartContext.load(localContextFile, typesmartLogger);
        try {
            for (ILanguageComponent other : dependencyService.sourceDeps(component)) {
                FileObject otherContextFile = new SpoofaxCommonPaths(other.location()).strTypesmartExportedFile();
                TypesmartContext otherContext = TypesmartContext.load(otherContextFile, typesmartLogger);
                context = context.merge(otherContext);
            }
        } catch (MissingDependencyException e) {
            typesmartLogger.error("Could not load source dependencies of " + component + " to resolve typesmart contexts.", e);
        }
        mergedTypesmartContexts.put(component, context);
    }
    return context;
}
Also used : FileObject(org.apache.commons.vfs2.FileObject) ILanguageComponent(org.metaborg.core.language.ILanguageComponent) TypesmartContext(org.spoofax.terms.typesmart.TypesmartContext) SpoofaxCommonPaths(org.metaborg.spoofax.core.build.SpoofaxCommonPaths) MissingDependencyException(org.metaborg.core.build.dependency.MissingDependencyException)

Example 3 with SpoofaxCommonPaths

use of org.metaborg.spoofax.core.build.SpoofaxCommonPaths in project spoofax by metaborg.

the class LanguageSpecBuilder method clean.

public void clean(LanguageSpecBuildInput input) throws MetaborgException {
    final FileObject location = input.languageSpec().location();
    logger.debug("Cleaning {}", location);
    final SpoofaxCommonPaths paths = new SpoofaxLangSpecCommonPaths(location);
    cleanAndLog(paths.srcGenDir());
    cleanAndLog(paths.targetDir());
    try {
        final String path = path(input);
        plutoClean(path);
    } catch (IOException e) {
        throw new MetaborgException("Cleaning Pluto file attributes failed", e);
    }
    for (IBuildStep buildStep : buildSteps) {
        buildStep.execute(LanguageSpecBuildPhase.clean, input);
    }
}
Also used : MetaborgException(org.metaborg.core.MetaborgException) FileObject(org.apache.commons.vfs2.FileObject) IOException(java.io.IOException) SpoofaxCommonPaths(org.metaborg.spoofax.core.build.SpoofaxCommonPaths)

Example 4 with SpoofaxCommonPaths

use of org.metaborg.spoofax.core.build.SpoofaxCommonPaths in project spoofax by metaborg.

the class LanguageSpecBuilder method compile.

public void compile(LanguageSpecBuildInput input) throws MetaborgException {
    logger.debug("Running pre-Java build for {}", input.languageSpec().location());
    initPluto();
    try {
        final String path = path(input);
        plutoBuild(GenerateSourcesBuilder.request(generateSourcesBuilderInput(input)), path);
    } catch (RequiredBuilderFailed e) {
        if (e.getMessage().contains("no rebuild of failing builder")) {
            throw new MetaborgException(failingRebuildMessage, e);
        } else {
            throw new MetaborgException();
        }
    } catch (RuntimeException e) {
        throw e;
    } catch (Throwable e) {
        throw new MetaborgException(e);
    }
    final SpoofaxCommonPaths paths = new SpoofaxLangSpecCommonPaths(input.languageSpec().location());
    // HACK: compile the main ESV file to make sure that packed.esv file is always available.
    final Iterable<FileObject> esvRoots = languagePathService.sourcePaths(input.project(), SpoofaxConstants.LANG_ESV_NAME);
    final FileObject mainEsvFile = paths.findEsvMainFile(esvRoots);
    try {
        if (mainEsvFile != null && mainEsvFile.exists()) {
            logger.info("Compiling Main ESV file {}", mainEsvFile);
            // @formatter:off
            final BuildInput buildInput = new BuildInputBuilder(input.languageSpec()).addSource(mainEsvFile).addTransformGoal(new CompileGoal()).withMessagePrinter(new StreamMessagePrinter(sourceTextService, false, true, logger)).build(dependencyService, languagePathService);
            // @formatter:on
            final ISpoofaxBuildOutput result = runner.build(buildInput, null, null).schedule().block().result();
            if (!result.success()) {
                throw new MetaborgException("Compiling Main ESV file failed");
            }
        }
    } catch (FileSystemException e) {
        final String message = logger.format("Could not compile ESV file {}", mainEsvFile);
        throw new MetaborgException(message, e);
    } catch (InterruptedException e) {
    // Ignore
    }
    // HACK: compile the main DS file if available, after generating sources (because ds can depend on Stratego
    // strategies), to generate an interpreter.
    final Iterable<FileObject> dsRoots = languagePathService.sourcePaths(input.project(), SpoofaxConstants.LANG_DYNSEM_NAME);
    final FileObject mainDsFile = paths.findDsMainFile(dsRoots, input.languageSpec().config().strategoName());
    try {
        if (mainDsFile != null && mainDsFile.exists()) {
            if (languageIdentifierService.identify(mainDsFile, input.project()) == null) {
                logger.error("Could not identify DynSem main file {}, please add DynSem as a compile dependency", mainDsFile);
            }
            logger.info("Compiling main DynSem file {}", mainDsFile);
            // @formatter:off
            final BuildInput buildInput = new BuildInputBuilder(input.languageSpec()).addSource(mainDsFile).addTransformGoal(new EndNamedGoal("Generate interpreter")).withMessagePrinter(new StreamMessagePrinter(sourceTextService, false, true, logger)).build(dependencyService, languagePathService);
            // @formatter:on
            final ISpoofaxBuildOutput result = runner.build(buildInput, null, null).schedule().block().result();
            if (!result.success()) {
                logger.error("Compiling main DynSem file {} failed", mainDsFile);
            }
        }
    } catch (FileSystemException e) {
        final String message = logger.format("Could not compile DynSem file {}", mainDsFile);
        throw new MetaborgException(message, e);
    } catch (InterruptedException e) {
    // Ignore
    }
    for (IBuildStep buildStep : buildSteps) {
        buildStep.execute(LanguageSpecBuildPhase.compile, input);
    }
}
Also used : StreamMessagePrinter(org.metaborg.core.messages.StreamMessagePrinter) CompileGoal(org.metaborg.core.action.CompileGoal) ISpoofaxBuildOutput(org.metaborg.spoofax.core.build.ISpoofaxBuildOutput) MetaborgException(org.metaborg.core.MetaborgException) BuildInputBuilder(org.metaborg.core.build.BuildInputBuilder) FileSystemException(org.apache.commons.vfs2.FileSystemException) BuildInput(org.metaborg.core.build.BuildInput) EndNamedGoal(org.metaborg.core.action.EndNamedGoal) RequiredBuilderFailed(build.pluto.builder.RequiredBuilderFailed) FileObject(org.apache.commons.vfs2.FileObject) SpoofaxCommonPaths(org.metaborg.spoofax.core.build.SpoofaxCommonPaths)

Aggregations

SpoofaxCommonPaths (org.metaborg.spoofax.core.build.SpoofaxCommonPaths)4 FileObject (org.apache.commons.vfs2.FileObject)3 MetaborgException (org.metaborg.core.MetaborgException)3 FileSystemException (org.apache.commons.vfs2.FileSystemException)2 RequiredBuilderFailed (build.pluto.builder.RequiredBuilderFailed)1 IOException (java.io.IOException)1 CompileGoal (org.metaborg.core.action.CompileGoal)1 EndNamedGoal (org.metaborg.core.action.EndNamedGoal)1 BuildInput (org.metaborg.core.build.BuildInput)1 BuildInputBuilder (org.metaborg.core.build.BuildInputBuilder)1 MissingDependencyException (org.metaborg.core.build.dependency.MissingDependencyException)1 ILanguageComponent (org.metaborg.core.language.ILanguageComponent)1 StreamMessagePrinter (org.metaborg.core.messages.StreamMessagePrinter)1 ISpoofaxBuildOutput (org.metaborg.spoofax.core.build.ISpoofaxBuildOutput)1 TypesmartContext (org.spoofax.terms.typesmart.TypesmartContext)1