Changeset 7711 for trunk/projects


Ignore:
Timestamp:
05/26/11 15:54:31 (8 years ago)
Author:
hinerm
Message:

Updated cppwrap to allow additions of core Java files and extra CMake commands

  • core Java classes to be proxied can be specified via coreFile property
  • extra CmakeLists.txt code can be specified in extrasFile property
  • reduced library search complexity
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/projects/cppwrap-maven-plugin/src/main/java/loci/maven/plugin/cppwrap/CppWrapMojo.java

    r7668 r7711  
    3838import java.io.IOException; 
    3939import java.util.ArrayList; 
     40import java.util.Collections; 
     41import java.util.Comparator; 
    4042import java.util.List; 
     43import java.util.Arrays; 
    4144 
    4245import loci.jar2lib.Jar2Lib; 
     
    120123         */ 
    121124        private File outputDir; 
     125         
     126        /** 
     127         * Path to a text file listing core Java classes to be ensured 
     128         * proxied. 
     129         * 
     130         * @parameter expression="${cppwrap.coreFile}" 
     131         *   default-value="src/main/cppwrap/core.txt" 
     132         */ 
     133        private File coreFile; 
     134         
     135        /** 
     136         * Path to text file, the contents of which will be 
     137         * appended to resulting CMakeLists.txt for this project. 
     138         * 
     139         * @parameter expression="${cppwrap.extrasFile}" 
     140         *   default-value="src/main/cppwrap/extras.txt" 
     141         */ 
     142        private File extrasFile; 
    122143 
    123144        @Override 
     
    136157                        sourceDir.getPath() : null; 
    137158                final String outputPath = outputDir.getPath(); 
     159                final String extrasPath = extrasFile.exists() ? 
     160                                extrasFile.getPath() : null; 
     161                final String corePath = coreFile.exists() ? 
     162                                coreFile.getPath() : null; 
    138163 
    139164                final Jar2Lib jar2lib = new Jar2Lib() { 
     
    151176                jar2lib.setSourcePath(sourcePath); 
    152177                jar2lib.setOutputPath(outputPath); 
     178                jar2lib.setExtrasPath(extrasPath); 
     179                jar2lib.setCorePath(corePath); 
    153180                try { 
    154181                        jar2lib.execute(); 
     
    177204                        @SuppressWarnings("unchecked") 
    178205                        final List<Artifact> artifacts = project.getRuntimeArtifacts(); 
    179  
     206                        ArrayList<String> libs = new ArrayList<String>(Arrays.asList(libraries)); 
     207                         
     208                        Collections.sort(artifacts, new ArtComparator()); 
     209                        Collections.sort(libs); 
     210                        int libIndex = 0; 
     211                        int artIndex = 0; 
     212                         
     213                        boolean done = artIndex == artifacts.size(); 
     214                        while (!done) 
     215                        { 
     216                                if(libs.get(libIndex).compareTo(artifacts.get(artIndex).getId()) == 0) 
     217                                { 
     218                                        File artifactFile = artifacts.get(artIndex).getFile(); 
     219                                        if (!artifactFile.exists()) { 
     220                                                throw new MojoExecutionException("Artifact not found: " + 
     221                                                        artifactFile); 
     222                                        } 
     223                                        jars.add(artifactFile.getPath()); 
     224                                        libIndex++; 
     225                                } 
     226                                else 
     227                                { 
     228                                        artIndex++; 
     229                                } 
     230                                 
     231                                if(artIndex == artifacts.size()) 
     232                                { 
     233                                        throw new MojoExecutionException("Invalid library dependency: " + 
     234                                                        libs.get(libIndex)); 
     235                                } 
     236                                 
     237                                done = libIndex == libraries.length; 
     238                        }  
     239 
     240                        /* 
    180241                        // TODO - avoid M*N complexity here 
    181                         for (final String library : libraries) { 
     242                        for (final String library : libraries) {         
    182243                                boolean foundArtifact = false; 
    183244                                for (final Artifact artifact : artifacts) { 
     
    199260                                } 
    200261                        } 
     262                        */ 
    201263                } 
    202264                return jars; 
     
    215277                return jars; 
    216278        } 
     279         
     280        private class ArtComparator implements Comparator { 
     281                public int compare (Object obj1, Object obj2) { 
     282                        Artifact art1 = (Artifact)obj1; 
     283                        Artifact art2 = (Artifact)obj2; 
     284                         
     285                        return art1.getId().compareTo(art2.getId()); 
     286                } 
     287        } 
    217288 
    218289} 
Note: See TracChangeset for help on using the changeset viewer.