/*
 *    GeoTools - The Open Source Java GIS Toolkit
 *    http://geotools.org
 *
 *    (C) 2007-2008, Open Source Geospatial Foundation (OSGeo)
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation;
 *    version 2.1 of the License.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 */
package org.geotools.data.ogr.bridj;

import org.bridj.BridJ;
import org.geotools.data.ogr.bridj.OgrLibrary;

/**
 * Helper class allowing to locate the GDAL library and attach to it 
 *
 * @source $URL$
 */
class GdalInit {

    private static volatile String NATIVE_NAME;

    public static void init() {
        if (NATIVE_NAME == null) {
            synchronized (GdalInit.class) {
                if (NATIVE_NAME == null) {
                    NATIVE_NAME = System.getProperty("GDAL_LIBRARY_NAME");
                    if(NATIVE_NAME != null) {
                        // someone told us its name
                    	if(!checkNativeName(NATIVE_NAME)) {
                    		throw new RuntimeException(
                            "Failed to bind to user specified gdal library named: " + NATIVE_NAME);
                    	}
                    } else {
	                    // on linux platforms libgdal is normally associated with its version,
	                    // painful...
	                    // generate a bunch of the known release numbers, plus more for the future
	                    // :)
	                    if (!checkNativeName("gdal") && !(checkNativeName("gdal_fw"))) {
	                        int x = 1;
	                        // for (int x = 2; x >= 1; x--) {
	                            for (int y = 10; y >= 0; y--) {
	                                if (checkNativeName("gdal" + x + "." + y)) {
	                                    return;
	                                }
	                                for (int z = 5; z >= 0; z--) {
	                                    if (checkNativeName("gdal" + x + "." + y + "." + z)) {
	                                        return;
	                                    }
	                                }
	                            }
	                        // }
	                        throw new RuntimeException(
	                                "Failed to automatically guess the gdal library name, please set the GDAL_LIBRARY_NAME system variable");
	                    }
                    }
                }
            }
        }
    }

    static boolean checkNativeName(String name) {
        try {
            if (BridJ.getNativeLibrary(name) != null) {
                registerAlias(name);
                OgrLibrary.OGRGetDriverCount();

                NATIVE_NAME = name;

                return true;
            } else {
                return false;
            }
        } catch (Throwable t) {
            return false;
        }
    }

    private static void registerAlias(String name) {
        System.out.println("Registered library as " + name);
        BridJ.addNativeLibraryAlias("ogr", name);
        BridJ.addNativeLibraryAlias("osr", name);
        BridJ.addNativeLibraryAlias("cplError", name);
        BridJ.addNativeLibraryAlias("gdal", name);
    }

    
}

@@ -1178,32 +1178,58 @@
 IVE_NAME != null
+ && !NATIVE_NAME.isEmpty()
 ) %7B%0A            

Make bridj look for the system installed libs if the native name is not provided