Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.apache.maven.plugin.nar;
  
  /*
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you 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 java.io.File;
 import java.util.List;
 
 
 import  org.apache.tools.ant.BuildException;
 import  org.apache.tools.ant.Project;

Compiles native test source files.

Author(s):
Mark Donszelmann
Goal:
nar-testCompile
Phase:
test-compile
RequiresDependencyResolution:
test
 
 public class NarTestCompileMojo
     extends AbstractCompileMojo
 {
    
Skip running of NAR integration test plugins.

Parameter:
expression="${skipNar}" default-value="false"
 
     protected boolean skipNar;
 
     public final void narExecute()
     {
         // make sure destination is there
         getTestTargetDirectory().mkdirs();
 
         for ( Iterator i = getTests().iterator(); i.hasNext(); )
         {
             createTestgetAntProject(), (Testi.next() );
         }
     }
 
     private void createTest( Project antProjectTest test )
     {
         String type = "test";
 
         // configure task
         CCTask task = new CCTask();
         task.setProjectantProject );
 
         // subsystem
         SubsystemEnum subSystem = new SubsystemEnum();
         subSystem.setValue"console" );
         task.setSubsystemsubSystem );
 
         // outtype
         OutputTypeEnum outTypeEnum = new OutputTypeEnum();
         outTypeEnum.setValue. );
         task.setOuttypeoutTypeEnum );
 
         // outDir
         File outDir = new FilegetTestTargetDirectory(), "bin" );
         outDir = new FileoutDirgetAOL().toString() );
         outDir.mkdirs();
 
         // outFile
        File outFile = new FileoutDirtest.getName() );
        getLog().debug"NAR - output: '" + outFile + "'" );
        task.setOutfileoutFile );
        // object directory
        File objDir = new FilegetTestTargetDirectory(), "obj" );
        objDir = new FileobjDirgetAOL().toString() );
        objDir.mkdirs();
        task.setObjdirobjDir );
        // failOnError, libtool
        task.setFailonerrorfailOnErrorgetAOL() ) );
        task.setLibtooluseLibtoolgetAOL() ) );
        // runtime
        RuntimeType runtimeType = new RuntimeType();
        runtimeType.setValuegetRuntimegetAOL() ) );
        task.setRuntimeruntimeType );
        // add C++ compiler
        CompilerDef cpp = getCpp().getCompilertypetest.getName() );
        if ( cpp != null )
        {
            task.addConfiguredCompilercpp );
        }
        // add C compiler
        CompilerDef c = getC().getCompilertypetest.getName() );
        if ( c != null )
        {
            task.addConfiguredCompilerc );
        }
        // add Fortran compiler
        CompilerDef fortran = getFortran().getCompilertypetest.getName() );
        if ( fortran != null )
        {
            task.addConfiguredCompilerfortran );
        }
        // add java include paths
        getJava().addIncludePathstasktype );
        // add dependency include paths
        for ( Iterator i = getNarManager().getNarDependencies"test" ).iterator(); i.hasNext(); )
        {
            Artifact artifact = (Artifacti.next();
            
            // check if it exists in the normal unpack directory
            File include = 
                getLayout().getIncludeDirectorygetUnpackDirectory(), artifact.getArtifactId(), artifact.getVersion() );
            if ( !include.exists() )
            {
                // otherwise try the test unpack directory
                include = 
                    getLayout().getIncludeDirectorygetTestUnpackDirectory(), artifact.getArtifactId(), artifact.getVersion() );
            }
            if ( include.exists() )
            {                
                task.createIncludePath().setPathinclude.getPath() );
            }
        }
        
        // add javah generated include path
        File jniIncludeDir = getJavah().getJniDirectory();
        if (jniIncludeDir.exists()) {
        	task.createIncludePath().setPath(jniIncludeDir.getPath());
        }
        // add linker
        LinkerDef linkerDefinition =
            getLinker().getLinkerthisantProjectgetOS(), getAOL().getKey() + ".linker."type );
        task.addConfiguredLinkerlinkerDefinition );
        // FIXME hardcoded values
        String libName = getFinalName();
        File includeDir =
                                             getMavenProject().getVersion() );
        File libDir =
                                         getMavenProject().getVersion(), getAOL().toString(), test.getLink() );
        // copy shared library
        // FIXME why do we do this ?
        /*
         * Removed in alpha-10 if (test.getLink().equals(Library.SHARED)) { try { // defaults are Unix String libPrefix
         * = NarUtil.getDefaults().getProperty( getAOLKey() + "shared.prefix", "lib"); String libExt =
         * NarUtil.getDefaults().getProperty( getAOLKey() + "shared.extension", "so"); File copyDir = new
         * File(getTargetDirectory(), (getOS().equals( "Windows") ? "bin" : "lib") + "/" + getAOL() + "/" +
         * test.getLink()); FileUtils.copyFileToDirectory(new File(libDir, libPrefix + libName + "." + libExt),
         * copyDir); if (!getOS().equals(OS.WINDOWS)) { libDir = copyDir; } } catch (IOException e) { throw new
         * MojoExecutionException( "NAR: Could not copy shared library", e); } }
         */
        // FIXME what about copying the other shared libs?
        // add include of this package
        if ( includeDir.exists() )
        {
            task.createIncludePath().setLocationincludeDir );
        }
        // add library of this package
        if ( libDir.exists() )
        {
            LibrarySet libSet = new LibrarySet();
            libSet.setProjectantProject );
            libSet.setLibsnew CUtil.StringArrayBuilderlibName ) );
            LibraryTypeEnum libType = new LibraryTypeEnum();
            libType.setValuetest.getLink() );
            libSet.setTypelibType );
            libSet.setDirlibDir );
            task.addLibsetlibSet );
        }
        // add dependency libraries
        List depLibOrder = getDependencyLibOrder();
        List depLibs = getNarManager().getNarDependencies"test" );
        // reorder the libraries that come from the nar dependencies
        // to comply with the order specified by the user
        if ( ( depLibOrder != null ) && !depLibOrder.isEmpty() )
        {
            List tmp = new LinkedList();
            for ( Iterator i = depLibOrder.iterator(); i.hasNext(); )
            {
                String depToOrderName = (Stringi.next();
                for ( Iterator j = depLibs.iterator(); j.hasNext(); )
                {
                    NarArtifact dep = (NarArtifactj.next();
                    String depName = dep.getGroupId() + ":" + dep.getArtifactId();
                    if ( depName.equalsdepToOrderName ) )
                    {
                        tmp.adddep );
                        j.remove();
                    }
                }
            }
            tmp.addAlldepLibs );
            depLibs = tmp;
        }
        for ( Iterator i = depLibs.iterator(); i.hasNext(); )
        {
            NarArtifact dependency = (NarArtifacti.next();
            // FIXME no handling of "local"
            // FIXME, no way to override this at this stage
            String binding = dependency.getNarInfo().getBindinggetAOL(), . );
            getLog().debug"Using Binding: " + binding );
            AOL aol = getAOL();
            aol = dependency.getNarInfo().getAOLgetAOL() );
            getLog().debug"Using Library AOL: " + aol.toString() );
            if ( !binding.equals. ) && !binding.equals. ) )
            {
                // check if it exists in the normal unpack directory 
                File dir =
                    getLayout().getLibDirectorygetUnpackDirectory(), dependency.getArtifactId(),
                                                  dependency.getVersion(), aol.toString(), binding );
                getLog().debug"Looking for Library Directory: " + dir );
                if ( !dir.exists() )
                {
                    getLog().debug"Library Directory " + dir + " does NOT exist." );
                    // otherwise try the test unpack directory
                    dir = getLayout().getLibDirectorygetTestUnpackDirectory(), dependency.getArtifactId(),
                                                        dependency.getVersion(), aol.toString(), binding );
                    getLog().debug"Looking for Library Directory: " + dir );
                }
                if ( dir.exists() )
                {
                    LibrarySet libSet = new LibrarySet();
                    libSet.setProjectantProject );
                    // FIXME, no way to override
                    String libs = dependency.getNarInfo().getLibsgetAOL() );
                    if ( ( libs != null ) && !libs.equals"" ) )
                    {
                        getLog().debug"Using LIBS = " + libs );
                        libSet.setLibsnew CUtil.StringArrayBuilderlibs ) );
                        libSet.setDirdir );
                        task.addLibsetlibSet );
                    }
                }
                else
                {
                    getLog().debug"Library Directory " + dir + " does NOT exist." );
                }
                // FIXME, look again at this, for multiple dependencies we may need to remove duplicates
                String options = dependency.getNarInfo().getOptionsgetAOL() );
                if ( ( options != null ) && !options.equals"" ) )
                {
                    getLog().debug"Using OPTIONS = " + options );
                    LinkerArgument arg = new LinkerArgument();
                    arg.setValueoptions );
                    linkerDefinition.addConfiguredLinkerArgarg );
                }
                String sysLibs = dependency.getNarInfo().getSysLibsgetAOL() );
                if ( ( sysLibs != null ) && !sysLibs.equals"" ) )
                {
                    getLog().debug"Using SYSLIBS = " + sysLibs );
                    SystemLibrarySet sysLibSet = new SystemLibrarySet();
                    sysLibSet.setProjectantProject );
                    sysLibSet.setLibsnew CUtil.StringArrayBuildersysLibs ) );
                    task.addSyslibsetsysLibSet );
                }
            }
        }
        // Add JVM to linker
        getJava().addRuntimetaskgetJavaHomegetAOL() ), getOS(), getAOL().getKey() + ".java." );
        // execute
        try
        {
            task.execute();
        }
        catch ( BuildException e )
        {
            throw new MojoExecutionException"NAR: Test-Compile failed"e );
        }
    }
New to GrepCode? Check out our FAQ X