From eca6010779da4f2e4448f18f676f909439033687 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Thu, 24 May 2007 19:54:39 +0000 Subject: [PATCH] Created a much simpler Gnu Makefile project template. --- .../META-INF/MANIFEST.MF | 3 +- .../plugin.xml | 10 ++ .../templates/SimpleMakefileGenerator.java | 117 ++++++++++++++++++ .../{src => }/Basename.cpp | 0 .../MakefileHelloWorldCCProject/Makefile | 16 +++ .../MakefileHelloWorldCCProject/template.xml | 17 +-- 6 files changed, 148 insertions(+), 15 deletions(-) create mode 100644 build/org.eclipse.cdt.managedbuilder.gnu.ui/src/org/eclipse/cdt/managedbuilder/gnu/templates/SimpleMakefileGenerator.java rename build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/{src => }/Basename.cpp (100%) create mode 100644 build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/Makefile diff --git a/build/org.eclipse.cdt.managedbuilder.gnu.ui/META-INF/MANIFEST.MF b/build/org.eclipse.cdt.managedbuilder.gnu.ui/META-INF/MANIFEST.MF index dbc9a92a231..477227262a2 100644 --- a/build/org.eclipse.cdt.managedbuilder.gnu.ui/META-INF/MANIFEST.MF +++ b/build/org.eclipse.cdt.managedbuilder.gnu.ui/META-INF/MANIFEST.MF @@ -10,5 +10,6 @@ Export-Package: org.eclipse.cdt.managedbuilder.gnu.cygwin, org.eclipse.cdt.managedbuilder.gnu.ui Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)", org.eclipse.cdt.managedbuilder.core;bundle-version="[4.0.0,5.0.0)", - org.eclipse.cdt.core;bundle-version="[4.0.0,5.0.0)" + org.eclipse.cdt.core;bundle-version="[4.0.0,5.0.0)", + org.eclipse.core.resources Eclipse-LazyStart: true diff --git a/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml b/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml index 718809c62f8..5eb820fa302 100644 --- a/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml +++ b/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml @@ -3792,5 +3792,15 @@ + + + + + + diff --git a/build/org.eclipse.cdt.managedbuilder.gnu.ui/src/org/eclipse/cdt/managedbuilder/gnu/templates/SimpleMakefileGenerator.java b/build/org.eclipse.cdt.managedbuilder.gnu.ui/src/org/eclipse/cdt/managedbuilder/gnu/templates/SimpleMakefileGenerator.java new file mode 100644 index 00000000000..d52c72855e8 --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.gnu.ui/src/org/eclipse/cdt/managedbuilder/gnu/templates/SimpleMakefileGenerator.java @@ -0,0 +1,117 @@ +/********************************************************************** + * Copyright (c) 2007 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * QNX Software Systems - Initial API and implementation + **********************************************************************/ + +package org.eclipse.cdt.managedbuilder.gnu.templates; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.eclipse.cdt.core.templateengine.TemplateCore; +import org.eclipse.cdt.core.templateengine.TemplateEngineHelper; +import org.eclipse.cdt.core.templateengine.process.ProcessArgument; +import org.eclipse.cdt.core.templateengine.process.ProcessFailureException; +import org.eclipse.cdt.core.templateengine.process.ProcessHelper; +import org.eclipse.cdt.core.templateengine.process.ProcessRunner; +import org.eclipse.cdt.core.templateengine.process.processes.Messages; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; + +/** + * @author Doug Schaefer + * + * TODO - this is necessitated because the default macro format for + * the template engine is $( and ) which is the same as make macros. + * This replaces that with something more make friendly. + * + * But at the end of they day, we need a real macro replacement engine + * like JET, or something... + */ +public class SimpleMakefileGenerator extends ProcessRunner { + + private static final String MAKEFILE = "Makefile"; //$NON-NLS-1$ + public void process(TemplateCore template, ProcessArgument[] args, + String processId, IProgressMonitor monitor) + throws ProcessFailureException { + String projectName = args[0].getSimpleValue(); + + IProject projectHandle = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); + URL path; + try { + path = TemplateEngineHelper.getTemplateResourceURLRelativeToTemplate(template, MAKEFILE); + if (path == null) { + throw new ProcessFailureException(getProcessMessage(processId, IStatus.ERROR, Messages.getString("AddFile.0") + MAKEFILE)); //$NON-NLS-1$ + } + } catch (IOException e1) { + throw new ProcessFailureException(getProcessMessage(processId, IStatus.ERROR, Messages.getString("AddFile.1") + MAKEFILE)); //$NON-NLS-1$ + } + + InputStream contents = null; + String fileContents; + try { + fileContents = ProcessHelper.readFromFile(path); + } catch (IOException e) { + throw new ProcessFailureException(getProcessMessage(processId, IStatus.ERROR, Messages.getString("AddFile.2") + MAKEFILE)); //$NON-NLS-1$ + } + + Map macros = new HashMap(template.getValueStore()); + if (Platform.getOS().equals(Platform.OS_WIN32)) + macros.put("exe", ".exe"); + + fileContents = replaceMacros(fileContents, macros); + contents = new ByteArrayInputStream(fileContents.getBytes()); + + try { + IFile iFile = projectHandle.getFile(MAKEFILE); + if (!iFile.getParent().exists()) { + ProcessHelper.mkdirs(projectHandle, projectHandle.getFolder(iFile.getParent().getProjectRelativePath())); + } + iFile.create(contents, true, null); + iFile.refreshLocal(IResource.DEPTH_ONE, null); + projectHandle.refreshLocal(IResource.DEPTH_INFINITE, null); + } catch (CoreException e) { + throw new ProcessFailureException(getProcessMessage(processId, IStatus.ERROR, Messages.getString("AddFile.4") + e.getMessage()), e); //$NON-NLS-1$ + } + } + + private static final String START = "{{"; + private static final String END = "}}"; + + private String replaceMacros(String fileContents, Map valueStore) { + StringBuffer buffer = new StringBuffer(fileContents); + for (Iterator i = valueStore.keySet().iterator(); i.hasNext();) { + String key = (String)i.next(); + String pattern = START + key +END; + if (!fileContents.contains(pattern)) + // Not used + continue; + + // replace + int len = pattern.length(); + int pos = 0; + while ((pos = buffer.indexOf(pattern, pos)) >= 0) { + buffer.replace(pos, pos + len, (String)valueStore.get(key)); + pos += len; + } + } + return buffer.toString(); + } +} diff --git a/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/src/Basename.cpp b/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/Basename.cpp similarity index 100% rename from build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/src/Basename.cpp rename to build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/Basename.cpp diff --git a/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/Makefile b/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/Makefile new file mode 100644 index 00000000000..7114ef1e1cf --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/Makefile @@ -0,0 +1,16 @@ +CFLAGS = -O2 -g -Wall -fmessage-length=0 +CXXFLAGS = -O2 -g -Wall -fmessage-length=0 + +OBJS = {{baseName}}.o + +LIBS = + +TARGET = {{baseName}}{{exe}} + +$(TARGET): $(OBJS) + $(CC) -o $(TARGET) $(OBJS) $(LIBS) + +all: $(TARGET) + +clean: + rm -f $(OBJS) $(TARGET) diff --git a/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/template.xml b/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/template.xml index e319bd80b1f..d5c845b7b18 100644 --- a/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/template.xml +++ b/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/MakefileHelloWorldCCProject/template.xml @@ -30,29 +30,18 @@ persist="true"/> - - - - - - - - - + + - +