Copyright (C) 2009-2013 Barchart, Inc. All rights reserved. Licensed under the OSI BSD License. http://www.opensource.org/licenses/bsd-license.php
/** * Copyright (C) 2009-2013 Barchart, Inc. <http://www.barchart.com/> * * All rights reserved. Licensed under the OSI BSD License. * * http://www.opensource.org/licenses/bsd-license.php */
package com.barchart.udt.lib; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory;
maven-nar-plugin build-time properties which determine library name and path conventions; AOL stands for "arch/os/linker"
/** * maven-nar-plugin build-time properties which determine library name and path * conventions; AOL stands for "arch/os/linker" */
public class PluginPropsUDT {
suffix for c++ compiler configured for platform in NAR_AOL_PROPERTIES file
/** * suffix for c++ compiler configured for platform in * {@link #NAR_AOL_PROPERTIES} file */
protected static final String AOL_CPP_COMPILER = "cpp.compiler";
suffix for JNI library file extension as defined in NAR_AOL_PROPERTIES file
/** * suffix for JNI library file extension as defined in * {@link #NAR_AOL_PROPERTIES} file */
protected static final String AOL_JNI_EXTENSION = "jni.extension";
suffix for dependency libraries as defined in NAR_AOL_PROPERTIES file
/** * suffix for dependency libraries as defined in {@link #NAR_AOL_PROPERTIES} * file */
protected static final String AOL_LINKER_DEPENDENCY = "linker.dependency";
suffix for shared library file prefix as defined in NAR_AOL_PROPERTIES file
/** * suffix for shared library file prefix as defined in * {@link #NAR_AOL_PROPERTIES} file */
protected static final String AOL_SHARED_PREFIX = "shared.prefix";
missing / invalid property value representation
/** * missing / invalid property value representation */
protected static final String EMPTY_VALUE = ""; protected static final Logger log = LoggerFactory .getLogger(PluginPropsUDT.class);
NAR properties file; should be present in project root folder during build time for plug-in configuration and as a class path resource during run time for properties lookup.
/** * NAR properties file; should be present in project root folder during * build time for plug-in configuration and as a class path resource during * run time for properties lookup. */
protected static final String NAR_AOL_PROPERTIES = "aol.properties";
current architecture reported by JVM
/** * current architecture reported by JVM */
protected static final String OS_ARCH = System.getProperty("os.arch");
current operating system reported by JVM
/** * current operating system reported by JVM */
protected static final String OS_NAME = System.getProperty("os.name");
properties from NAR_AOL_PROPERTIES file
/** * properties from {@link #NAR_AOL_PROPERTIES} file */
protected static final Properties props = new Properties(); static { try { log.info("ARCH/OS/LINK = {}/{}/{}", narARCH(), narOS(), narLINK()); log.debug("Loading aol.properties."); final InputStream input = PluginPropsUDT.class.getClassLoader() .getResourceAsStream(NAR_AOL_PROPERTIES); props.load(input); } catch (final Throwable e) { log.error("Failed to load aol.properties.", e); } }
dependency libraries specified in NAR_AOL_PROPERTIES file
/** * dependency libraries specified in {@link #NAR_AOL_PROPERTIES} file */
protected static List<String> currentDependencyLibraries() { final List<String> list = new ArrayList<String>(); final String entryText = property(currentNarKeyLinkerDependency()); if (entryText == null || entryText.length() == 0) { return list; } final String[] entryArray = entryText.split("\\s"); for (final String entry : entryArray) { list.add(entry.trim()); } return list; }
nar key prefix for current arch/os/link
/** * nar key prefix for current arch/os/link */
protected static String currentNarKey() { return formatNarKey(narARCH(), narOS(), narLINK()); }
full nar key built from arch/os/link prefix and the key suffix
/** * full nar key built from arch/os/link prefix and the key suffix */
protected static String currentNarKey(final String suffix) { return currentNarKey() + "." + suffix; }
CPP compiler for the platform
/** * CPP compiler for the platform */
protected static String currentNarKeyCppCompiler() { return currentNarKey(AOL_CPP_COMPILER); }
JNI extension for the platform
/** * JNI extension for the platform */
protected static String currentNarKeyJniExtension() { return currentNarKey(AOL_JNI_EXTENSION); }
list of dependencies for the platform
/** * list of dependencies for the platform */
protected static String currentNarKeyLinkerDependency() { return currentNarKey(AOL_LINKER_DEPENDENCY); }
library name prefix for the platform
/** * library name prefix for the platform */
protected static String currentNarKeySharedPrefix() { return currentNarKey(AOL_SHARED_PREFIX); }
nar aol path entry for current arch/os/link
/** * nar aol path entry for current arch/os/link */
protected static String currentNarPath() { return formatNarPath(narARCH(), narOS(), narLINK()); }
list of release library paths expected to be resent for current platform; must be packaged in the jar; used during release delivery
/** * list of release library paths expected to be resent for current platform; * must be packaged in the jar; used during release delivery */
protected static List<String> currentReleaseLibraries(final String coreName) { final List<String> list = new ArrayList<String>(); /** dependency */ for (final String name : currentDependencyLibraries()) { final String path = formatMainReleasePath(name); list.add(path); } /** main */ { final String name = formatMainLibraryName(coreName); final String path = formatMainReleasePath(name); list.add(path); } return list; }
list of staging library paths expected to be resent for current platform; must be located on test class path; used during NAR build
/** * list of staging library paths expected to be resent for current platform; * must be located on test class path; used during NAR build */
protected static List<String> currentStagingLibraries(final String coreName) { final List<String> list = new ArrayList<String>(); /** dependency */ for (final String name : currentDependencyLibraries()) { final String path = formatTestingDependencyPath(name); list.add(path); } /** main */ { final String path = formatMainStagingPath(coreName); list.add(path); } return list; }
list of testing library paths expected to be resent for current platform; must be located on test class path; used during CDT build
/** * list of testing library paths expected to be resent for current platform; * must be located on test class path; used during CDT build */
protected static List<String> currentTestingLibraries(final String coreName) { final List<String> list = new ArrayList<String>(); /** dependency */ for (final String name : currentDependencyLibraries()) { final String path = formatTestingDependencyPath(name); list.add(path); } /** main */ { final String path = formatMainTestingPath(coreName); list.add(path); } return list; }
make main library name with AOL_SHARED_PREFIX and AOL_JNI_EXTENSION convention
/** * make main library name with {@link #AOL_SHARED_PREFIX} and * {@link #AOL_JNI_EXTENSION} convention */
protected static String formatMainLibraryName(final String coreName) { final String prefix = property(currentNarKeySharedPrefix()); final String extension = property(currentNarKeyJniExtension()); return String.format("%s%s.%s", prefix, coreName, extension); }
location of release main library and dependency libraries in release jar
/** * location of release main library and dependency libraries in release jar */
protected static String formatMainReleasePath(final String name) { final String aol = currentNarPath(); return String.format("/lib/%s/jni/%s", aol, name); }
location of staging main library on the test class path
/** * location of staging main library on the test class path */
protected static String formatMainStagingPath(final String coreName) { final String aol = currentNarPath(); final String mainName = formatMainLibraryName(coreName); return String.format("/%s-%s-jni/lib/%s/jni/%s", // coreName, aol, aol, mainName); }
location of testing main library on the test class path
/** * location of testing main library on the test class path */
protected static String formatMainTestingPath(final String coreName) { final String mainName = formatMainLibraryName(coreName); return String.format("/%s", // mainName); }
NAR_AOL_PROPERTIES property key prefix
/** * {@link #NAR_AOL_PROPERTIES} property key prefix */
protected static String formatNarKey(final String arch, final String os, final String link) { return String.format("%s.%s.%s", arch, os, link); }
NAR_AOL_PROPERTIES aol path element
/** * {@link #NAR_AOL_PROPERTIES} aol path element */
protected static String formatNarPath(final String arch, final String os, final String link) { return String.format("%s-%s-%s", arch, os, link); }
location of dependency libraries on test class path
/** * location of dependency libraries on test class path */
protected static String formatTestingDependencyPath(final String name) { final String aol = currentNarPath(); return String.format("/aol/%s/lib/%s", aol, name); }
is current platform defined in NAR_AOL_PROPERTIES file?
/** * is current platform defined in {@link #NAR_AOL_PROPERTIES} file? */
protected static boolean isSupportedPlatform() { return !EMPTY_VALUE.equals(property(currentNarKeyCppCompiler())); }
map JVM arch name to NAR arch name
/** * map JVM arch name to NAR arch name */
protected static String narARCH() { return OS_ARCH; }
map JVM arch/os name to NAR tool chain name
/** * map JVM arch/os name to NAR tool chain name */
protected static String narLINK() { return "gpp"; }
map JVM os name to NAR os name
/** * map JVM os name to NAR os name */
protected static String narOS() { if (OS_NAME.contains("Mac OS X")) { return "MacOSX"; } if (OS_NAME.contains("Windows")) { return "Windows"; } return OS_NAME; }
find property entry in the NAR_AOL_PROPERTIES file
/** * find property entry in the {@link #NAR_AOL_PROPERTIES} file */
protected static String property(final String key) { final String value = props.getProperty(key); if (value instanceof String) { return value; } else { return EMPTY_VALUE; } } }