// Copyright FreeHEP, 2005. package org.freehep.maven.nar; import java.io.File; import java.util.Iterator; import java.util.List; import net.sf.antcontrib.cpptasks.CUtil; import net.sf.antcontrib.cpptasks.LinkerDef; import net.sf.antcontrib.cpptasks.types.LibrarySet; import net.sf.antcontrib.cpptasks.types.LibraryTypeEnum; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.tools.ant.Project; /** * Keeps info on a library * * @author <a href="Mark.Donszelmann@slac.stanford.edu">Mark Donszelmann</a> * @version $Id: Lib.java 12783 2007-06-15 23:34:05Z duns $ */ public class Lib { /** * Name of the library, or a dependency groupId:artifactId if this library contains sublibraries * * @parameter expression="" * @required */ private String name; /** * Type of linking for this library * * @parameter expression="" default-value="shared" * @required */ private String type = Library.SHARED; /** * Location for this library * * @parameter expression="" * @required */ private File directory; /** * Sub libraries for this library * * @parameter expression="" */ private List/*<Lib>*/ libs; public void addLibSet(AbstractDependencyMojo mojo, LinkerDef linker, Project antProject) throws MojoFailureException, MojoExecutionException { addLibSet(mojo, linker, antProject, name, directory); } private void addLibSet(AbstractDependencyMojo mojo, LinkerDef linker, Project antProject, String name, File dir) throws MojoFailureException, MojoExecutionException { if (name == null) { throw new MojoFailureException("NAR: Please specify <Name> as part of <Lib>"); } if (libs == null) { if (!type.equals("framework") && (dir == null)) { throw new MojoFailureException("NAR: Please specify <Directory> as part of <Lib>"); } LibrarySet libSet = new LibrarySet(); libSet.setProject(antProject); libSet.setLibs(new CUtil.StringArrayBuilder(name)); LibraryTypeEnum libType = new LibraryTypeEnum(); libType.setValue(type); libSet.setType(libType); libSet.setDir(dir); linker.addLibset(libSet); } else { List dependencies = mojo.getNarManager().getNarDependencies("compile"); for (Iterator i=libs.iterator(); i.hasNext(); ) { Lib lib = (Lib)i.next(); String[] ids = name.split(":",2); if (ids.length != 2) { throw new MojoFailureException("NAR: Please specify <Name> as part of <Lib> in format 'groupId:artifactId'"); } for (Iterator j=dependencies.iterator(); j.hasNext(); ) { Artifact dependency = (Artifact)j.next(); if (dependency.getGroupId().equals(ids[0]) && dependency.getArtifactId().equals(ids[1])) { File narDir = new File(mojo.getNarManager().getNarFile(dependency).getParentFile(), "nar/lib/"+mojo.getAOL()+"/"+lib.type); String narName = dependency.getArtifactId()+"-"+lib.name+"-"+dependency.getVersion(); lib.addLibSet(mojo, linker, antProject, narName, narDir); } } } } } }