|  | @@ -128,9 +128,8 @@ var path = require('path'),
 | 
	
		
			
				|  |  |   * amber_dir: points to the location of an amber installation
 | 
	
		
			
				|  |  |   * closure_jar: location of compiler.jar (can be left undefined)
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  | -function AmberC(amber_dir, closure_jar) {
 | 
	
		
			
				|  |  | +function AmberC(amber_dir) {
 | 
	
		
			
				|  |  |  	this.amber_dir = amber_dir;
 | 
	
		
			
				|  |  | -	this.closure_jar = closure_jar || '';
 | 
	
		
			
				|  |  |  	this.kernel_libraries = ['@boot', '@smalltalk', '@nil', '@_st', 'Kernel-Objects', 'Kernel-Classes', 'Kernel-Methods',
 | 
	
		
			
				|  |  |  							'Kernel-Collections', 'Kernel-Infrastructure', 'Kernel-Exceptions', 'Kernel-Transcript',
 | 
	
		
			
				|  |  |  							'Kernel-Announcements'];
 | 
	
	
		
			
				|  | @@ -155,9 +154,6 @@ var createDefaults = function(amber_dir, finished_callback){
 | 
	
		
			
				|  |  |  		'jsFiles': [],
 | 
	
		
			
				|  |  |  		'jsGlobals': [],
 | 
	
		
			
				|  |  |  		'amd_namespace': 'amber_core',
 | 
	
		
			
				|  |  | -		'closure': false,
 | 
	
		
			
				|  |  | -		'closure_full': false,
 | 
	
		
			
				|  |  | -		'closure_options': ' --language_in=ECMASCRIPT5 ',
 | 
	
		
			
				|  |  |  		'suffix': '',
 | 
	
		
			
				|  |  |  		'loadsuffix': '',
 | 
	
		
			
				|  |  |  		'suffix_used': '',
 | 
	
	
		
			
				|  | @@ -196,10 +192,7 @@ AmberC.prototype.main = function(configuration, finished_callback) {
 | 
	
		
			
				|  |  |  	if (this.check_configuration_ok(configuration)) {
 | 
	
		
			
				|  |  |  		this.defaults = configuration;
 | 
	
		
			
				|  |  |  		this.defaults.smalltalk = {}; // the evaluated compiler will be stored in this variable (see create_compiler)
 | 
	
		
			
				|  |  | -		var self = this;
 | 
	
		
			
				|  |  | -		this.check_for_closure_compiler(function(){
 | 
	
		
			
				|  |  | -			self.collect_files(self.defaults.stFiles, self.defaults.jsFiles)
 | 
	
		
			
				|  |  | -		});
 | 
	
		
			
				|  |  | +		this.collect_files(this.defaults.stFiles, this.defaults.jsFiles)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -219,44 +212,6 @@ AmberC.prototype.check_configuration_ok = function(configuration) {
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/**
 | 
	
		
			
				|  |  | - * Checks if the java executable exists and afterwards,
 | 
	
		
			
				|  |  | - * if compiler.jar exists at the path stored in this.closure_jar.
 | 
	
		
			
				|  |  | - * All closure related entries are set to false upon failure.
 | 
	
		
			
				|  |  | - *
 | 
	
		
			
				|  |  | - * callback gets called in any case.
 | 
	
		
			
				|  |  | - */
 | 
	
		
			
				|  |  | -AmberC.prototype.check_for_closure_compiler = function(callback) {
 | 
	
		
			
				|  |  | -	var defaults = this.defaults;
 | 
	
		
			
				|  |  | -	var self = this;
 | 
	
		
			
				|  |  | -	if (defaults.closure) {
 | 
	
		
			
				|  |  | -		exec('which java', function(error, stdout, stderr) {
 | 
	
		
			
				|  |  | -			// stdout contains path to java executable
 | 
	
		
			
				|  |  | -			if (null !== error) {
 | 
	
		
			
				|  |  | -				console.warn('java is not installed but is needed for running the Closure compiler (-O, -A or -o flags).');
 | 
	
		
			
				|  |  | -				defaults.closure = false;
 | 
	
		
			
				|  |  | -				defaults.closure_full = false;
 | 
	
		
			
				|  |  | -				callback();
 | 
	
		
			
				|  |  | -				return;
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			fs.exists(self.closure_jar, function(exists) {
 | 
	
		
			
				|  |  | -				if (!exists) {
 | 
	
		
			
				|  |  | -					console.warn('Can not find Closure compiler at: ' + self.closure_jar);
 | 
	
		
			
				|  |  | -					defaults.closure = false;
 | 
	
		
			
				|  |  | -					defaults.closure_full = false;
 | 
	
		
			
				|  |  | -				} else {
 | 
	
		
			
				|  |  | -					console.warn('Closure compiler found at: ' + self.closure_jar);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				callback();
 | 
	
		
			
				|  |  | -				return;
 | 
	
		
			
				|  |  | -			});
 | 
	
		
			
				|  |  | -		});
 | 
	
		
			
				|  |  | -	} else {
 | 
	
		
			
				|  |  | -		callback();
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * Check if the file given as parameter exists in the local directory or in $AMBER/js/.
 | 
	
		
			
				|  |  |   * '.js' is appended first.
 | 
	
	
		
			
				|  | @@ -543,7 +498,7 @@ AmberC.prototype.category_export = function() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * Verify if all .st files have been compiled.
 | 
	
		
			
				|  |  | - * Followed by compose_js_files() and optimize().
 | 
	
		
			
				|  |  | + * Followed by compose_js_files().
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  AmberC.prototype.verify = function() {
 | 
	
		
			
				|  |  |  	console.log('Verifying if all .st files were compiled');
 | 
	
	
		
			
				|  | @@ -575,7 +530,6 @@ AmberC.prototype.compose_js_files = function() {
 | 
	
		
			
				|  |  |  	var self = this;
 | 
	
		
			
				|  |  |  	var programFile = defaults.program;
 | 
	
		
			
				|  |  |  	if (undefined === programFile) {
 | 
	
		
			
				|  |  | -		self.optimize();
 | 
	
		
			
				|  |  |  		return;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	if (undefined !== defaults.output_dir) {
 | 
	
	
		
			
				|  | @@ -604,7 +558,7 @@ AmberC.prototype.compose_js_files = function() {
 | 
	
		
			
				|  |  |  	});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	fileStream.on('close', function(){
 | 
	
		
			
				|  |  | -		self.optimize();
 | 
	
		
			
				|  |  | +		return;
 | 
	
		
			
				|  |  |  	});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	var builder = createConcatenator();
 | 
	
	
		
			
				|  | @@ -651,59 +605,6 @@ AmberC.prototype.compose_js_files = function() {
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/**
 | 
	
		
			
				|  |  | - * Optimize created JavaScript files with Google Closure compiler depending
 | 
	
		
			
				|  |  | - * on the flag: defaults.closure_full.
 | 
	
		
			
				|  |  | - */
 | 
	
		
			
				|  |  | -AmberC.prototype.optimize = function() {
 | 
	
		
			
				|  |  | -	var defaults = this.defaults;
 | 
	
		
			
				|  |  | -	var self = this;
 | 
	
		
			
				|  |  | -	var optimization_done = new Combo(function() {
 | 
	
		
			
				|  |  | -		console.log = console.ambercLog;
 | 
	
		
			
				|  |  | -		console.timeEnd('Compile Time');
 | 
	
		
			
				|  |  | -		if (undefined !== defaults.finished_callback) {
 | 
	
		
			
				|  |  | -			defaults.finished_callback();
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	});
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	if (defaults.closure_full && (undefined !== defaults.program)) {
 | 
	
		
			
				|  |  | -		var programFile = defaults.program;
 | 
	
		
			
				|  |  | -		if (undefined !== defaults.output_dir) {
 | 
	
		
			
				|  |  | -			programFile = path.join(defaults.output_dir, programFile);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		console.log('Compiling ' + programFile + '.js file using Google closure compiler.');
 | 
	
		
			
				|  |  | -		self.closure_compile(programFile + '.js', programFile + '.min.js', optimization_done.add());
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	always_resolve(optimization_done.add());
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/**
 | 
	
		
			
				|  |  | - * Compile sourceFile into minifiedFile with Google Closure compiler.
 | 
	
		
			
				|  |  | - * callback gets executed once finished.
 | 
	
		
			
				|  |  | - */
 | 
	
		
			
				|  |  | -AmberC.prototype.closure_compile = function(sourceFile, minifiedFile, callback) {
 | 
	
		
			
				|  |  | -	// exec is asynchronous
 | 
	
		
			
				|  |  | -	var self = this;
 | 
	
		
			
				|  |  | -	exec(
 | 
	
		
			
				|  |  | -		'java -jar ' +
 | 
	
		
			
				|  |  | -		self.closure_jar + ' ' +
 | 
	
		
			
				|  |  | -		self.defaults.closure_options +
 | 
	
		
			
				|  |  | -		' --js '+ sourceFile +
 | 
	
		
			
				|  |  | -		' --js_output_file '+ minifiedFile,
 | 
	
		
			
				|  |  | -		function (error, stdout, stderr) {
 | 
	
		
			
				|  |  | -			if (error) {
 | 
	
		
			
				|  |  | -				console.log(stderr);
 | 
	
		
			
				|  |  | -			} else {
 | 
	
		
			
				|  |  | -				console.log(stdout);
 | 
	
		
			
				|  |  | -				console.log('Minified: '+ minifiedFile);
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			callback();
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	);
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  module.exports.Compiler = AmberC;
 | 
	
		
			
				|  |  |  module.exports.createDefaults = createDefaults;
 | 
	
		
			
				|  |  |  module.exports.Combo = Combo;
 |