| 
					
				 | 
			
			
				@@ -1,137 +0,0 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-module.exports = function(grunt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  var path = require('path'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  var fs = require('fs'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  var amberc = require('../../cli/support/amberc.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     A full example entry for a Gruntfile.js is available below. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Please note that the verbose level is either specified globally 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     or on a target specific level. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     However, it can additionally be triggered on the commandline by 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     adding the '-v' or '--verbose' flag. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Example Gruntfile.js entry: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     amberc: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       options: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         amber_dir: process.cwd(),                // REQUIRED 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         library_dirs: ['dir1', '/usr/local/js'], // optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         verbose: true                            // optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       helloWorld: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         // this 'options' object is optional as well as all parameters inside it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         // they can be used to override the global 'options' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         options: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           library_dirs: ['dir1', '/usr/local/js'], // optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           verbose: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         src: ['projects/HelloWorld/src/HelloWorld.st'], // REQUIRED 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         output_dir: 'projects/HelloWorld/src',  // optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         libraries: 'Web',                       // optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         jsGlobals: ['global1', 'global2'],     // optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         main_class: 'HelloWorld',              // optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         output_name: 'helloWorld',             // optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         amd_namespace: 'MyNamespace',          // optional (default: 'amber') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         main_file: 'myMain.js',                // optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         output_suffix: 'mySuffix',             // optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         library_suffix: '-0.9'                 // optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grunt.registerMultiTask('amberc', 'Compile Smalltalk files with the amberc compiler', function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // mark task as async task 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var done = this.async(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var options = this.options({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      amber_dir: undefined, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      library_dirs: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      verbose: grunt.option('verbose') || false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    this.data.verbose = options.verbose; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    this.data.library_dirs = options.library_dirs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // mark required properties 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    this.requiresConfig('amberc.options.amber_dir'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // raise error on missing source files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (this.filesSrc.length === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        grunt.fail.fatal('No source files to compile or link.'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // create and initialize amberc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var compiler = new amberc.Compiler(grunt.config('amberc.options.amber_dir')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // generate the amberc configuration out of the given target properties 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var configuration = generateCompilerConfiguration(this.data, this.filesSrc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // run the compiler and call the async callback once finished 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    compiler.main(configuration, function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      // signal that task has finished 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      done(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  function generateCompilerConfiguration(data, sourceFiles) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var configuration = amberc.createDefaultConfiguration(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var parameters = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var libraries = data.libraries; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (undefined !== libraries) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.load = libraries; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var library_dirs = data.library_dirs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (undefined !== library_dirs) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.jsLibraryDirs = library_dirs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var mainClass = data.main_class; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (undefined !== mainClass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.main = mainClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var mainFile = data.main_file; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (undefined !== mainFile) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.mainfile = mainFile; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var outputSuffix = data.output_suffix; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (undefined !== outputSuffix) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.suffix = outputSuffix; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.suffix_used = outputSuffix; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var librarySuffix = data.library_suffix; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (undefined !== librarySuffix) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.loadsuffix = librarySuffix; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.suffix_used = librarySuffix; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (undefined !== sourceFiles) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      sourceFiles.forEach(function(currentItem){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var fileSuffix = path.extname(currentItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        switch (fileSuffix) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          case '.st': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            configuration.stFiles.push(currentItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          case '.js': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            configuration.jsFiles.push(currentItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var outputName = data.output_name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (undefined !== outputName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.program = outputName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    var amdNamespace = data.amd_namespace; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (undefined !== amdNamespace) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.amd_namespace = amdNamespace; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (undefined !== data.output_dir) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.output_dir = data.output_dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (undefined !== data.jsGlobals) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      configuration.jsGlobals.push.apply(configuration.jsGlobals, data.jsGlobals); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    configuration.verbose = data.verbose; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return configuration; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 |