You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by kn...@apache.org on 2003/03/26 20:32:13 UTC

cvs commit: maven/src/plugins-build/native/src/main/org/apache/maven/natives/util JavaSourceTool.java

knielsen    2003/03/26 11:32:13

  Added:       src/plugins-build/native/xdocs properties.xml index.xml
                        .cvsignore navigation.xml tasks.xml goals.xml
               src/plugins-build/native project.properties LICENSE.txt
                        .cvsignore project.xml plugin.jelly
               src/plugins-build/native/src/main/org/apache/maven/natives/util
                        JavaSourceTool.java
  Log:
  Initial checking of the Native compilation plugin
  
  Revision  Changes    Path
  1.1                  maven/src/plugins-build/native/xdocs/properties.xml
  
  Index: properties.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <document>
    <properties>
      <title>Maven Native Plugin Properties</title>
      <author email="apache@kav.dk">Kasper Nielsen</author>
    </properties>
    <body>
      <section name="Native Plugin Properties">
        <table>
          <tr>
            <th>Property</th>
            <th>Optional?</th>
            <th>Description</th>
          </tr>
          <tr>
            <td>maven.jni.dest</td>
            <td>Yes</td>
            <td>
              <p>Default value is
                <code>${maven.build.dir}/jni</code>.</p>
            </td>
          </tr>
        </table>
      </section>
    </body>
  </document>
  
  
  1.1                  maven/src/plugins-build/native/xdocs/index.xml
  
  Index: index.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
  
    <properties>
      <title>Maven Native Plug-in</title>
      <author email="apache@kav.dk">Kasper Nielsen</author>
    </properties>
  
    <body>
      <section name="Maven Native Plug-in">
        <p>
          This is a plugin that allows to compile c,c++,fortran code under maven with 
          different compilers such as gcc, msvc, bcc, ...
         
        </p>
        <p>
          Currently, this plugin only supports generation of jni header files.
        </p>
      </section>
      <section name="News">
        <table>
          <tr>
            <th>Date</th>
            <th>Description</th>
          </tr>
          <tr>
            <td>26 Mar 2003</td>
            <td>
              Project Created
            </td>
          </tr>
         </table>
      </section>
  
   </body>
  </document>
  
  
  
  1.1                  maven/src/plugins-build/native/xdocs/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  stylesheets
  
  
  
  1.1                  maven/src/plugins-build/native/xdocs/navigation.xml
  
  Index: navigation.xml
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <project name="Maven Native Plugin">
  
    <title>Maven Native Plugin</title>
  
    <body>
      <links>
        <item name="Maven" href="http://maven.apache.org/"/>
      </links>
      <menu name="Overview">
        <item href="/index.html" name="Overview"/>
        <item href="/goals.html" name="Goals"/>
        <item href="/properties.html" name="Properties"/>
        <item href="/tasks.html" name="Tasks"/>
      </menu>
     </body>
  </project>
  
  
  
  1.1                  maven/src/plugins-build/native/xdocs/tasks.xml
  
  Index: tasks.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
  
    <properties>
      <title>Tasks</title>
      <author email="apache@kav.dk">Kasper Nielsen</author>
    </properties>
  
    <body>
      <section name="Tasks">
        <p>
        	Lists of todos and ideas for future versions.
        </p>
  
        <subsection name="Unassigned">
          <p>
          </p>
        </subsection>
  
      </section>
  
    </body>
  </document>
  
  
  
  1.1                  maven/src/plugins-build/native/xdocs/goals.xml
  
  Index: goals.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <document>
    <properties>
      <title>Maven Native Plug-in Goals</title>
      <author email="apache@kav.dk">Kasper Nielsen</author>
    </properties>
    <body>
      <goals>
        <goal>
          <name>native:jniheader</name>
          <description>Generates JNI header files</description>
        </goal>
      </goals>
    </body>
  </document>
  
  
  1.1                  maven/src/plugins-build/native/project.properties
  
  Index: project.properties
  ===================================================================
  # -------------------------------------------------------------------
  # P R O J E C T  P R O P E R T I E S
  # -------------------------------------------------------------------
  maven.xdoc.date=left
  maven.xdoc.version=${pom.currentVersion}
  maven.checkstyle.format = turbine
  maven.license.licenseFile=${basedir}/../../../LICENSE.txt
  
  
  1.1                  maven/src/plugins-build/native/LICENSE.txt
  
  Index: LICENSE.txt
  ===================================================================
  
  
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Maven" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Maven", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  
  
  
  1.1                  maven/src/plugins-build/native/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  target
  maven.log
  velocity.log
  build.properties
  .classpath
  .project
  
  
  
  1.1                  maven/src/plugins-build/native/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <project>
    <extend>${basedir}/../project.xml</extend>
    <pomVersion>3</pomVersion>
    <id>maven-native-plugin</id>
    <name>Maven Native Plug-in</name>
    <currentVersion>1.0</currentVersion>
    <description>Plugin for native compilation c,c++, fortran</description>
    <shortDescription>Native plugin</shortDescription>
    <url>http://maven.apache.org/reference/plugins/native/</url>
  
    <siteDirectory>/www/maven.apache.org/reference/plugins/native/</siteDirectory>
  
    <repository>
      <connection>scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:maven/src/plugins-build/native/</connection>
      <url>http://cvs.apache.org/viewcvs/maven/src/plugins-build/native/</url>
    </repository>
  
  
    <developers>
  
      <developer>
        <name>Kasper Nielsen</name>
        <id>knielsen</id>
        <email>apache@kav.dk</email>
        <organization>it.edu</organization>
        <roles>
          <role>Architect</role>
        </roles>
      </developer>
  
    </developers>
  
    <contributors/>
  
    <dependencies>
  
       <dependency>
        <id>ant-contrib:cpptasks</id>
        <version>20030309.134440</version>
        <properties>
          <classloader>root</classloader>
        </properties>
      </dependency>
  
      <dependency>
        <id>bcel</id>
        <version>5.0</version>
        <properties>
          <classloader>root</classloader>
        </properties>
      </dependency>
    </dependencies>
  
  </project>
  
  
  
  1.1                  maven/src/plugins-build/native/plugin.jelly
  
  Index: plugin.jelly
  ===================================================================
  <?xml version="1.0"?>
  <project xmlns:j="jelly:core" xmlns:util="jelly:util">
  	<!--==================================================================-->
  	<!-- Compile all source code                                      -->
  	<!--==================================================================-->
  	<goal name="native" description="NAtive compiler" prereqs="native:compile"/>
  	
  	<goal name="native:compile" description="Compile the native compiler">
  		<echo>a</echo>
  		<taskdef name="cc" classname="net.sf.antcontrib.cpptasks.CCTask"/>
  		<typedef name="linker" classname="net.sf.antcontrib.cpptasks.LinkerDef"/>
  		<typedef name="compiler" classname="net.sf.antcontrib.cpptasks.CompilerDef"/>
  		<echo>b</echo>
  		<compiler id="gcc" name="gcc" if="use-gcc">
  			<compilerarg value="-O" unless="is-debug"/>
  		</compiler>
  	</goal>
  	
  	<goal name="native:jniheader" description="make jniheaders for classes" prereqs="java:compile">
  		<fileScanner var="classFiles">
  			<fileset dir="${maven.build.dest}">
  				<patternset>
  					<include name="**/*.class"/>
  				</patternset>
  			</fileset>
  		</fileScanner>
  		<mkdir dir="${maven.build.dir}/jni"/>
  		<javah destdir="${maven.build.dir}/jni">
  			<classpath>
  				<pathelement location="${maven.build.dest}"/>
  			</classpath>
  			<j:useBean var="javaSourceTool" class="org.apache.maven.natives.util.JavaSourceTool"/>
  			<j:forEach var="file" items="${classFiles.iterator()}">
  				<j:set var="isNative" value="false"/>
  				<j:set var="clazz" value="${javaSourceTool.getBcelClass(file.toString())}"/>
  				<j:forEach var="method" items="${clazz.getMethods()}">
  					<j:if test="${method.isNative() == 'true'}">
  						<j:set var="isNative" value="true"/>
  					</j:if>
  				</j:forEach>
  				<j:if test="${isNative == 'true'}">
  					<class name="${clazz.className}"/>
  				</j:if>
  			</j:forEach>
  		</javah>
  	</goal>
  </project>
  
  
  
  1.1                  maven/src/plugins-build/native/src/main/org/apache/maven/natives/util/JavaSourceTool.java
  
  Index: JavaSourceTool.java
  ===================================================================
  package org.apache.maven.natives.util;
  
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Maven" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Maven", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
   
  import java.io.IOException;
  
  import org.apache.bcel.classfile.ClassParser;
  import org.apache.bcel.classfile.JavaClass;
  
  /**
   * @author Kasper Nielsen
   *
   */
  public class JavaSourceTool {
      
      
      /**
       * Parses the java class file and returns an isntance of a Bcel Class
       *
       * @param absoluteFileName the absolute file name to transform
       * @return the Bcel Class.
       * @throws IOException upon failure to read the java file
       */
      public static final JavaClass getBcelClass(String absoluteFileName) throws IOException {
          try {
              ClassParser parser = new ClassParser(absoluteFileName);
              JavaClass clazz= parser.parse();
              return clazz;
              
          } catch (Exception e) {
              System.out.println("\nError parsing " + absoluteFileName + ": " + e + "\n");
              return null;
          }
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org