/** * Tests if isPluginModule returns true when set to plugin output type * * <p>See patch [ 676276 ] Enhanced support for Mac OS X */ public void testIsPluginTrue() { LinkType type = new LinkType(); OutputTypeEnum pluginType = new OutputTypeEnum(); pluginType.setValue("plugin"); type.setOutputType(pluginType); assertTrue(type.isPluginModule()); }
/** * Tests if isPluginModule returns true when set to plugin output type * * <p>See patch [ 676276 ] Enhanced support for Mac OS X */ public void testIsPluginFalse() { LinkType type = new LinkType(); OutputTypeEnum pluginType = new OutputTypeEnum(); pluginType.setValue("executable"); type.setOutputType(pluginType); assertTrue(!type.isPluginModule()); }
private void createLibrary(final Project antProject, final Library library) throws MojoExecutionException, MojoFailureException { getLog().debug("Creating Library " + library); // configure task final CCTask task = new CCTask(); task.setCommandLogLevel(this.commandLogLevel); task.setProject(antProject); task.setDecorateLinkerOptions(this.decorateLinkerOptions); // subsystem final SubsystemEnum subSystem = new SubsystemEnum(); subSystem.setValue(library.getSubSystem()); task.setSubsystem(subSystem); // set max cores task.setMaxCores(getMaxCores(getAOL())); // outtype final OutputTypeEnum outTypeEnum = new OutputTypeEnum(); final String type = library.getType(); outTypeEnum.setValue(type); task.setOuttype(outTypeEnum); // stdc++ task.setLinkCPP(library.linkCPP()); // fortran task.setLinkFortran(library.linkFortran()); task.setLinkFortranMain(library.linkFortranMain()); // outDir File outDir; if (type.equals(Library.EXECUTABLE)) { outDir = getLayout() .getBinDirectory( getTargetDirectory(), getMavenProject().getArtifactId(), getMavenProject().getVersion(), getAOL().toString()); } else { outDir = getLayout() .getLibDirectory( getTargetDirectory(), getMavenProject().getArtifactId(), getMavenProject().getVersion(), getAOL().toString(), type); } outDir.mkdirs(); // outFile // FIXME NAR-90 we could get the final name from layout final File outFile = new File(outDir, getOutput(getAOL(), type)); getLog().debug("NAR - output: '" + outFile + "'"); task.setOutfile(outFile); // object directory File objDir = new File(getTargetDirectory(), "obj"); objDir = new File(objDir, getAOL().toString()); objDir.mkdirs(); task.setObjdir(objDir); // failOnError, libtool task.setFailonerror(failOnError(getAOL())); task.setLibtool(useLibtool(getAOL())); // runtime final RuntimeType runtimeType = new RuntimeType(); runtimeType.setValue(getRuntime(getAOL())); task.setRuntime(runtimeType); // IDL, MC, RC compilations should probably be 'generate source' type // actions, seperate from main build. // Needs resolution of handling for generate sources. // Order is somewhat important here, IDL and MC generate outputs that are // (often) included in the RC compilation if (getIdl() != null) { final CompilerDef idl = getIdl().getCompiler(Compiler.MAIN, null); if (idl != null) { task.addConfiguredCompiler(idl); } } if (getMessage() != null) { final CompilerDef mc = getMessage().getCompiler(Compiler.MAIN, null); if (mc != null) { task.addConfiguredCompiler(mc); } } if (getResource() != null) { final CompilerDef res = getResource().getCompiler(Compiler.MAIN, null); if (res != null) { task.addConfiguredCompiler(res); } } // Darren Sargent Feb 11 2010: Use Compiler.MAIN for "type"...appears the // wrong "type" variable was being used // since getCompiler() expects "main" or "test", whereas the "type" variable // here is "executable", "shared" etc. // add C++ compiler if (getCpp() != null) { final CompilerDef cpp = getCpp().getCompiler(Compiler.MAIN, null); if (cpp != null) { task.addConfiguredCompiler(cpp); } } // add C compiler if (getC() != null) { final CompilerDef c = getC().getCompiler(Compiler.MAIN, null); if (c != null) { task.addConfiguredCompiler(c); } } // add Fortran compiler if (getFortran() != null) { final CompilerDef fortran = getFortran().getCompiler(Compiler.MAIN, null); if (fortran != null) { task.addConfiguredCompiler(fortran); } } // end Darren // add javah include path final File jniDirectory = getJavah().getJniDirectory(); if (jniDirectory.exists()) { task.createIncludePath().setPath(jniDirectory.getPath()); } // add java include paths getJava().addIncludePaths(task, type); final List<NarArtifact> dependencies = getNarArtifacts(); // add dependency include paths for (final Object element : dependencies) { // FIXME, handle multiple includes from one NAR final NarArtifact narDependency = (NarArtifact) element; final String binding = narDependency.getNarInfo().getBinding(getAOL(), Library.STATIC); getLog().debug("Looking for " + narDependency + " found binding " + binding); if (!binding.equals(Library.JNI)) { final File unpackDirectory = getUnpackDirectory(); final File include = getLayout() .getIncludeDirectory( unpackDirectory, narDependency.getArtifactId(), narDependency.getBaseVersion()); getLog().debug("Looking for include directory: " + include); if (include.exists()) { task.createIncludePath().setPath(include.getPath()); } else { throw new MojoExecutionException("NAR: unable to locate include path: " + include); } } } // add linker final LinkerDef linkerDefinition = getLinker().getLinker(this, antProject, getOS(), getAOL().getKey() + ".linker.", type); task.addConfiguredLinker(linkerDefinition); // add dependency libraries // FIXME: what about PLUGIN and STATIC, depending on STATIC, should we // not add all libraries, see NARPLUGIN-96 if (type.equals(Library.SHARED) || type.equals(Library.JNI) || type.equals(Library.EXECUTABLE)) { final List depLibOrder = getDependencyLibOrder(); List depLibs = dependencies; // reorder the libraries that come from the nar dependencies // to comply with the order specified by the user if (depLibOrder != null && !depLibOrder.isEmpty()) { final List tmp = new LinkedList(); for (final Iterator i = depLibOrder.iterator(); i.hasNext(); ) { final String depToOrderName = (String) i.next(); for (final Iterator j = depLibs.iterator(); j.hasNext(); ) { final NarArtifact dep = (NarArtifact) j.next(); final String depName = dep.getGroupId() + ":" + dep.getArtifactId(); if (depName.equals(depToOrderName)) { tmp.add(dep); j.remove(); } } } tmp.addAll(depLibs); depLibs = tmp; } for (final Iterator i = depLibs.iterator(); i.hasNext(); ) { final NarArtifact dependency = (NarArtifact) i.next(); // FIXME no handling of "local" // FIXME, no way to override this at this stage final String binding = dependency.getNarInfo().getBinding(getAOL(), Library.NONE); getLog().debug("Using Binding: " + binding); AOL aol = getAOL(); aol = dependency.getNarInfo().getAOL(getAOL()); getLog().debug("Using Library AOL: " + aol.toString()); if (!binding.equals(Library.JNI) && !binding.equals(Library.NONE) && !binding.equals(Library.EXECUTABLE)) { final File unpackDirectory = getUnpackDirectory(); final File dir = getLayout() .getLibDirectory( unpackDirectory, dependency.getArtifactId(), dependency.getBaseVersion(), aol.toString(), binding); getLog().debug("Looking for Library Directory: " + dir); if (dir.exists()) { final LibrarySet libSet = new LibrarySet(); libSet.setProject(antProject); // FIXME, no way to override final String libs = dependency.getNarInfo().getLibs(getAOL()); if (libs != null && !libs.equals("")) { getLog().debug("Using LIBS = " + libs); libSet.setLibs(new CUtil.StringArrayBuilder(libs)); libSet.setDir(dir); task.addLibset(libSet); } } else { getLog().debug("Library Directory " + dir + " does NOT exist."); } // FIXME, look again at this, for multiple dependencies we may need to // remove duplicates final String options = dependency.getNarInfo().getOptions(getAOL()); if (options != null && !options.equals("")) { getLog().debug("Using OPTIONS = " + options); final LinkerArgument arg = new LinkerArgument(); arg.setValue(options); linkerDefinition.addConfiguredLinkerArg(arg); } final String sysLibs = dependency.getNarInfo().getSysLibs(getAOL()); if (sysLibs != null && !sysLibs.equals("")) { getLog().debug("Using SYSLIBS = " + sysLibs); final SystemLibrarySet sysLibSet = new SystemLibrarySet(); sysLibSet.setProject(antProject); sysLibSet.setLibs(new CUtil.StringArrayBuilder(sysLibs)); task.addSyslibset(sysLibSet); } } } } // Add JVM to linker getJava().addRuntime(task, getJavaHome(getAOL()), getOS(), getAOL().getKey() + ".java."); // execute try { task.execute(); } catch (final BuildException e) { throw new MojoExecutionException("NAR: Compile failed", e); } // FIXME, this should be done in CPPTasks at some point if (getRuntime(getAOL()).equals("dynamic") && getOS().equals(OS.WINDOWS) && getLinker().getName(null, null).equals("msvc") && !getLinker().getVersion().startsWith("6.")) { final String libType = library.getType(); if (libType.equals(Library.JNI) || libType.equals(Library.SHARED)) { final String dll = outFile.getPath() + ".dll"; final String manifest = dll + ".manifest"; final int result = NarUtil.runCommand( "mt.exe", new String[] {"/manifest", manifest, "/outputresource:" + dll + ";#2"}, null, null, getLog()); if (result != 0) { throw new MojoFailureException("MT.EXE failed with exit code: " + result); } } else if (libType.equals(Library.EXECUTABLE)) { final String exe = outFile.getPath() + ".exe"; final String manifest = exe + ".manifest"; final int result = NarUtil.runCommand( "mt.exe", new String[] {"/manifest", manifest, "/outputresource:" + exe + ";#1"}, null, null, getLog()); if (result != 0) { throw new MojoFailureException("MT.EXE failed with exit code: " + result); } } } }