package com.jnaerator;
/*
* Copyright 2001-2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import com.ochafik.lang.jnaerator.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
/**
* Launch JNAerator to wrap native libraries in Java for use with JNA.
* @goal generate
* @phase generate-sources
* @description Launches JNAerator with the command-line arguments contained in src/main/jnaerator/config.jnaerator. To launch from command line, use "mvn jnaerator:generate"
*/
public class JNAeratorMojo
extends AbstractMojo
{
/**
* Path to JNAerator configuration file.
* @parameter expression="${project.basedir}/src/main/jnaerator/config.jnaerator"
* @required
*/
private File config;
/**
* Whether JNAerator should output helper Scala classes (experimental)
* @parameter expression="false"
* @optional
*/
private boolean generateScala;
/**
* Output directory for JNAerated Java sources.
* @parameter expression="${project.build.directory}/generated-sources/java"
* @optional
*/
private File javaOutputDirectory;
/**
* Output directory for JNAerated Scala sources.
* @parameter expression="${project.build.directory}/generated-sources/scala"
* @optional
*/
private File scalaOutputDirectory;
/**
* @parameter expression="${project}"
* @required
* @readonly
* @since 1.0
*/
private MavenProject project;
static File canonizeDir(File f) throws IOException {
if (!f.exists())
f.mkdirs();
return f.getCanonicalFile();
}
public void execute()
throws MojoExecutionException
{
if (!config.exists()) {
getLog().info("No JNAerator config file '" + config + "' found");
return;
}
try
{
List<String> args = new ArrayList<String>();
args.add(config.getAbsolutePath());
// Override settings from config file :
args.add("-mode");
args.add(JNAeratorConfig.OutputMode.Directory.name());
args.add("-f");
args.add("-o");
File javaDir = canonizeDir(javaOutputDirectory);
args.add(javaDir.toString());
project.addCompileSourceRoot(javaDir.toString());
if (generateScala) {
args.add("-scalaOut");
args.add(canonizeDir(scalaOutputDirectory).toString());
}
com.ochafik.lang.jnaerator.JNAerator.main(args.toArray(new String[0]));
}
catch (Exception e )
{
throw new MojoExecutionException( "Error running JNAerator on " + config, e );
}
}
}