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

Reply via email to