Hi Richard,
Here is what I did: I added a few System.out.println in the
R4LibraryClause.match() and checkOSNames() methods and recompiled Felix
Framework (4.5.0-SNAPSHOT thus)
The modified code:
public boolean match(final Map configMap) throws BundleException {
System.out.println("os.name:" + System.getProperty("os.name"));
System.out.println("os.arch:" + System.getProperty("os.arch"));
final String normal_osname = normalizeOSName((String)
configMap.get(Constants.FRAMEWORK_OS_NAME));
System.out.println("normal_osname:" + normal_osname + ";");
final String normal_processor = normalizeProcessor((String)
configMap.get(Constants.FRAMEWORK_PROCESSOR));
System.out.println("normal_processor:" + normal_processor + ";");
final String normal_osversion = normalizeOSVersion((String)
configMap.get(Constants.FRAMEWORK_OS_VERSION));
System.out.println("normal_osversion:" + normal_osversion + ";");
final String normal_language = (String)
configMap.get(Constants.FRAMEWORK_LANGUAGE);
System.out.println("normal_language:" + normal_language + ";");
// Check library's osname.
if (!checkOSNames(normal_osname, getOSNames())) {
System.out.println("R4LibraryClause.match()-checkOSNames returned
false");
return false;
}
// Check library's processor.
if (!checkProcessors(normal_processor, getProcessors())) {
System.out.println("R4LibraryClause.match()-checkProcessors
returned false");
return false;
}
// Check library's osversion if specified.
if ((getOSVersions() != null) && (getOSVersions().length > 0)
&& !checkOSVersions(normal_osversion, getOSVersions())) {
System.out.println("R4LibraryClause.match()-checkOSVersion returned
false");
return false;
}
// Check library's language if specified.
if ((getLanguages() != null) && (getLanguages().length > 0) &&
!checkLanguages(normal_language, getLanguages())) {
System.out.println("R4LibraryClause.match()-checkLanguages returned
false");
return false;
}
// Check library's selection-filter if specified.
if ((getSelectionFilter() != null) && (getSelectionFilter().length() >=
0)
&& !checkSelectionFilter(configMap, getSelectionFilter())) {
System.out.println("R4LibraryClause.match()-checkSelectionFilter
returned false");
return false;
}
System.out.println("R4LibraryClause.match() -> returned true");
return true;
}
private boolean checkOSNames(final String currentOSName, final String[]
osnames) {
final boolean win32 = currentOSName.startsWith("win") &&
!currentOSName.equals("windowsce");
System.out.println("currentOSName:" + currentOSName);
for (int i = 0; (osnames != null) && (i < osnames.length); i++) {
System.out.println("osname[" + i + "]:" + osnames[i]);
if (osnames[i].equals(currentOSName) || ("win32".equals(osnames[i])
&& win32)) {
return true;
}
}
return false;
}
The output when run on Windows:
os.name:Windows 7
os.arch:amd64
normal_osname:win;
normal_processor:x86-64;
normal_osversion:6.1.0;
normal_language:fr;
currentOSName:win
osname[0]:windows7
R4LibraryClause.match()-checkOSNames returned false
So the problem seems to be the normal_osname that is win and not windows7…
Do you confirm?
Kind regards,
Ben
Le 12 juin 2014 à 21:48, Richard S. Hall <[email protected]> a écrit :
> Perhaps you start the JVM up suspended with debug enabled and set a break
> point up at R4LibraryClause.match() and see precisely why it is failing?
>
> The code in there is pretty self explanatory.
>
> -> richard