/** * Copyright (C) 2009 France Telecom * * This file is part of "Mind Compiler" is free software: you can redistribute * it and/or modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Contact: mind@ow2.org * * Authors: Olivier Lobry * Contributors: Matthieu Leclercq */ package org.ow2.mind.preproc; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.antlr.runtime.ANTLRFileStream; import org.antlr.runtime.CommonTokenStream; import org.ow2.mind.preproc.parser.CPLLexer; import org.ow2.mind.preproc.parser.CPLParser; public class PreprocFilesOnCompilerCommand { private static String preproc(final File file, final List<String> command) throws Exception { Process child; String tempFileName = null; command.add("-c"); command.add("-E"); File tmpFile = null; final String orgName = file.getName(); tmpFile = File.createTempFile("cgcparse_preproc_" + orgName.subSequence(0, orgName.length() - 2), ".c"); tempFileName = tmpFile.getAbsolutePath(); command.add(file.getAbsolutePath()); // .replace(" ", "\\ ") command.add("-o"); command.add(tempFileName); child = Runtime.getRuntime().exec( command.toArray(new String[command.size()]), null); if (child.waitFor() != 0) throw new Exception("Error while compiling files \"" + file.getAbsolutePath() + "...\""); child.destroy(); return tempFileName; } public static void main(final String[] args) throws Exception { final List<String> preprocCommand = new ArrayList<String>(); final Map<File, File> fileMap = new HashMap<File, File>(); for (final String arg : args) { if (arg.endsWith(".c")) { File resFile = null; final File orgFile = new File(arg); try { final String orgName = orgFile.getName(); resFile = File.createTempFile("mindparse_res_" + orgName.subSequence(0, orgName.length() - 2), ".c"); } catch (final IOException e1) { throw new Exception("cannot create res file"); } fileMap.put(orgFile, resFile); } else if (arg.startsWith("-") || (arg == args[0])) { if (!arg.startsWith("-M") && !arg.startsWith("-o")) { preprocCommand.add(arg); } } } for (final Map.Entry<File, File> entry : fileMap.entrySet()) { final String tmp = preproc(entry.getKey(), preprocCommand); final CPLLexer lex = new CPLLexer(new ANTLRFileStream(tmp)); final CommonTokenStream tokens = new CommonTokenStream(lex); final CPLParser mpp = new CPLParser(tokens); mpp.parseFile(); } } }