Updated Rakefile to mirror the functionality of the Makefile
authorDouglas Neiner <doug@pixelgraphics.us>
Sun, 13 Jun 2010 03:55:49 +0000 (23:55 -0400)
committerwycats <wycats@gmail.com>
Sun, 20 Jun 2010 05:29:48 +0000 (22:29 -0700)
The Rakefile now supports all the functionality of the Makefile
including only rebuilding files when dependent files change.

To see availible tasks, run:

    rake -T

Rakefile

index 71a7067..5ee4a5e 100644 (file)
--- a/Rakefile
+++ b/Rakefile
-# Basic Rakefile for building jQuery
-files = [ "intro", "core", "support", "data", "queue", "event", "selector", "traversing", "attributes", "manipulation", "css", "ajax", "effects", "offset", "dimensions", "outro" ]
+prefix    = File.dirname( __FILE__ )
 
-date = `git log -1 | grep Date: | sed 's/[^:]*: *//'`.gsub(/\n/, "")
-version = `cat version.txt`.gsub(/\n/, "")
+# Directory variables
+src_dir   = File.join( prefix, 'src' )
+build_dir = File.join( prefix, 'build' )
+test_dir  = File.join( prefix, 'test' )
 
-task :default => :jquery
+# A different destination directory can be set by
+# setting DIST_DIR before calling rake
+dist_dir  = ENV['DIST_DIR'] || File.join( prefix, 'dist' )
 
-task :init do
-       sh "if test ! -d test/qunit; then git clone git://github.com/jquery/qunit.git test/qunit; fi"
-       sh "if test ! -d src/sizzle; then git clone git://github.com/jeresig/sizzle.git src/sizzle; fi"
-       sh "cd src/sizzle && git pull origin master &> /dev/null"
-       sh "cd test/qunit && git pull origin master &> /dev/null"
+base_files = %w{intro core support data queue attributes event selector traversing manipulation css ajax effects offset dimensions outro}.map { |js| File.join( src_dir, "#{js}.js" ) }
+
+# Sizzle, QUnit and jQuery files/dirs
+sizzle_dir = File.join( src_dir, "sizzle" )
+sizzle     = File.join( sizzle_dir, "sizzle.js" )
+selector   = File.join( src_dir, "selector.js" )
+
+qunit_dir  = File.join( test_dir, "qunit" )
+qunit      = File.join( qunit_dir, "qunit", "qunit.js" )
+
+jq         = File.join( dist_dir, "jquery.js" )
+jq_min     = File.join( dist_dir, "jquery.min.js" )
+
+# General Variables
+date       = `git log -1 | grep Date: | sed 's/[^:]*: *//'`.strip
+version    = File.read( File.join( prefix, 'version.txt' ) ).strip
+
+# Build tools
+rhino      = "java -jar #{build_dir}/js.jar"
+minfier    = "java -jar #{build_dir}/google-compiler-20091218.jar"
+
+# Turn off output other than needed from `sh` and file commands
+verbose(false) 
+
+
+# Tasks
+task :default => "jquery"
+
+desc "Builds jQuery; Tests with JSLint; Minifies jQuery"
+task :all => [:jquery, :lint, :min] do
+  puts "jQuery build complete."
+end
+
+desc "Builds jQuery: jquery.js (Default task)"
+task :jquery => [:selector, jq]
+
+desc "Builds a minified version of jQuery: jquery.min.js"
+task :min => jq_min
+
+
+task :init => [sizzle, qunit] do
+  puts "Updating SizzleJS with latest..."
+       sh "cd #{sizzle_dir} && git pull origin master &> /dev/null"
+
+  puts "Updating QUnit with latest..."
+       sh "cd #{qunit_dir} &&  git pull origin master &> /dev/null"
 end
 
-task :jquery => [:init, :selector] do
-       sh "mkdir -p dist"
+desc "Removes dist folder, selector.js, and Sizzle/QUnit"
+task :clean do
+  puts "Removing Distribution directory: #{dist_dir}..." 
+  rm_r dist_dir
+
+  puts "Removing built copy of Sizzle..."
+  rm_r selector
+
+  puts "Removing cloned directories..."
+  rm_r qunit_dir
+  rm_r sizzle_dir
+end
+
+desc "Rebuilds selector.js from SizzleJS"
+task :selector => [:init, selector]
+
+desc "Tests built jquery.js against JSLint"
+task :lint => jq do
+  puts "Checking jQuery against JSLint..."
+  sh "#{rhino} #{build_dir}/jslint-check.js"
+end
+
+
+# File and Directory Dependencies
+directory dist_dir
+
+file jq => [dist_dir, base_files].flatten do
+  puts "Building jquery.js..."
+  sh "cat #{base_files.join(' ')} | sed 's/Date:./&#{date}/' | sed s/@VERSION/#{version}/ > #{jq}"
+end
+
+file jq_min => jq do
+  puts "Building jquery.min.js..."
+
+  sh "head -15 #{jq} > #{jq_min}"
+  sh "#{minfier} --js #{jq} --warning_level QUIET >> #{jq_min}"
+end
+
+file selector => [sizzle] do 
+  puts "Building selector code from Sizzle..."
+  sh "sed '/EXPOSE/r #{src_dir}/sizzle-jquery.js' #{sizzle} > #{selector}"
+end
 
-       sh "cat " + files.map {|file| "src/" + file + ".js"}.join(" ") +
-               " | sed 's/Date:./&" + date + "/' | " +
-               " sed s/@VERSION/" + version + "/ > dist/jquery.js"
+file sizzle do
+  puts "Retrieving SizzleJS from Github..."
+  sh "git clone git://github.com/jeresig/sizzle.git #{sizzle_dir}"
 end
 
-task :selector do
-       sh "sed '/EXPOSE/r src/sizzle-jquery.js' src/sizzle/sizzle.js > src/selector.js"
+file qunit do
+  puts "Retrieving SizzleJS from Github..."
+  sh "git clone git://github.com/jquery/qunit.git #{qunit_dir}"
 end