|  | @@ -182,27 +182,50 @@ function check_configuration(configuration) {
 | 
	
		
			
				|  |  |   *  3. $AMBER/support/
 | 
	
		
			
				|  |  |   *
 | 
	
		
			
				|  |  |   * @param filename name of a file without '.js' prefix
 | 
	
		
			
				|  |  | - * @param callback gets called on success with path to .js file as parameter
 | 
	
		
			
				|  |  | + * @param configuration the main amberc configuration object
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  function resolve_js(filename, configuration) {
 | 
	
		
			
				|  |  | +	var baseName = path.basename(filename, '.js');
 | 
	
		
			
				|  |  | +	var jsFile = baseName + configuration.loadsuffix + '.js';
 | 
	
		
			
				|  |  | +	return resolve_file(jsFile, configuration.jsLibraryDirs);
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Check if the file given as parameter exists in any of the following directories:
 | 
	
		
			
				|  |  | + *  1. current local directory
 | 
	
		
			
				|  |  | + *  2. $AMBER/
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @param filename name of a .st file
 | 
	
		
			
				|  |  | + * @param configuration the main amberc configuration object
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function resolve_st(filename, configuration) {
 | 
	
		
			
				|  |  | +	return resolve_file(filename, [configuration.amber_dir]);
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Resolve the location of a file given as parameter filename.
 | 
	
		
			
				|  |  | + * First check if the file exists at given location,
 | 
	
		
			
				|  |  | + * then check in each of the directories specified in parameter searchDirectories.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function resolve_file(filename, searchDirectories) {
 | 
	
		
			
				|  |  |  	return new Promise(function(resolve, reject) {
 | 
	
		
			
				|  |  | -		var baseName = path.basename(filename, '.js');
 | 
	
		
			
				|  |  | -		var jsFile = baseName + configuration.loadsuffix + '.js';
 | 
	
		
			
				|  |  | -		console.log('Resolving: ' + jsFile);
 | 
	
		
			
				|  |  | -		fs.exists(jsFile, function(exists) {
 | 
	
		
			
				|  |  | +		console.log('Resolving: ' + filename);
 | 
	
		
			
				|  |  | +		fs.exists(filename, function(exists) {
 | 
	
		
			
				|  |  |  			if (exists) {
 | 
	
		
			
				|  |  | -				resolve(jsFile);
 | 
	
		
			
				|  |  | +				resolve(filename);
 | 
	
		
			
				|  |  |  			} else {
 | 
	
		
			
				|  |  | -				var amberJsFile = '';
 | 
	
		
			
				|  |  | -				// check for specified .js file in any of the directories from jsLibraryDirs
 | 
	
		
			
				|  |  | -				var found = configuration.jsLibraryDirs.some(function(directory) {
 | 
	
		
			
				|  |  | -					amberJsFile = path.join(directory, jsFile);
 | 
	
		
			
				|  |  | -					return fs.existsSync(amberJsFile);
 | 
	
		
			
				|  |  | +				var alternativeFile = '';
 | 
	
		
			
				|  |  | +				// check for filename in any of the given searchDirectories
 | 
	
		
			
				|  |  | +				var found = searchDirectories.some(function(directory) {
 | 
	
		
			
				|  |  | +					alternativeFile = path.join(directory, filename);
 | 
	
		
			
				|  |  | +					return fs.existsSync(alternativeFile);
 | 
	
		
			
				|  |  |  				});
 | 
	
		
			
				|  |  |  				if (found) {
 | 
	
		
			
				|  |  | -					resolve(amberJsFile);
 | 
	
		
			
				|  |  | +					resolve(alternativeFile);
 | 
	
		
			
				|  |  |  				} else {
 | 
	
		
			
				|  |  | -					reject(Error('JavaScript file not found: ' + jsFile));
 | 
	
		
			
				|  |  | +					reject(Error('File not found: ' + alternativeFile));
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		});
 | 
	
	
		
			
				|  | @@ -218,24 +241,7 @@ function collect_st_files(configuration) {
 | 
	
		
			
				|  |  |  	return new Promise(function(resolve, reject) {
 | 
	
		
			
				|  |  |  		Promise.all(
 | 
	
		
			
				|  |  |  			configuration.stFiles.map(function(stFile) {
 | 
	
		
			
				|  |  | -				return new Promise(function(resolve, reject) {
 | 
	
		
			
				|  |  | -					console.log('Checking: ' + stFile);
 | 
	
		
			
				|  |  | -					var amberStFile = path.join(configuration.amber_dir, 'st', stFile);
 | 
	
		
			
				|  |  | -					fs.exists(stFile, function(exists) {
 | 
	
		
			
				|  |  | -						if (exists) {
 | 
	
		
			
				|  |  | -							resolve(stFile);
 | 
	
		
			
				|  |  | -						} else {
 | 
	
		
			
				|  |  | -							console.log('Checking: ' + amberStFile);
 | 
	
		
			
				|  |  | -							fs.exists(amberStFile, function(exists) {
 | 
	
		
			
				|  |  | -								if (exists) {
 | 
	
		
			
				|  |  | -									resolve(amberStFile);
 | 
	
		
			
				|  |  | -								} else {
 | 
	
		
			
				|  |  | -									reject(Error('Smalltalk file not found: ' + amberStFile));
 | 
	
		
			
				|  |  | -								}
 | 
	
		
			
				|  |  | -							});
 | 
	
		
			
				|  |  | -						}
 | 
	
		
			
				|  |  | -					});
 | 
	
		
			
				|  |  | -				});
 | 
	
		
			
				|  |  | +				return resolve_st(stFile, configuration);
 | 
	
		
			
				|  |  |  			})
 | 
	
		
			
				|  |  |  		).then(function(data) {
 | 
	
		
			
				|  |  |  			configuration.compile = configuration.compile.concat(data);
 |