Updated Rakefile to mirror the functionality of the Makefile
[jquery.git] / Rakefile
1 prefix    = File.dirname( __FILE__ )
2
3 # Directory variables
4 src_dir   = File.join( prefix, 'src' )
5 build_dir = File.join( prefix, 'build' )
6 test_dir  = File.join( prefix, 'test' )
7
8 # A different destination directory can be set by
9 # setting DIST_DIR before calling rake
10 dist_dir  = ENV['DIST_DIR'] || File.join( prefix, 'dist' )
11
12 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" ) }
13
14 # Sizzle, QUnit and jQuery files/dirs
15 sizzle_dir = File.join( src_dir, "sizzle" )
16 sizzle     = File.join( sizzle_dir, "sizzle.js" )
17 selector   = File.join( src_dir, "selector.js" )
18
19 qunit_dir  = File.join( test_dir, "qunit" )
20 qunit      = File.join( qunit_dir, "qunit", "qunit.js" )
21
22 jq         = File.join( dist_dir, "jquery.js" )
23 jq_min     = File.join( dist_dir, "jquery.min.js" )
24
25 # General Variables
26 date       = `git log -1 | grep Date: | sed 's/[^:]*: *//'`.strip
27 version    = File.read( File.join( prefix, 'version.txt' ) ).strip
28
29 # Build tools
30 rhino      = "java -jar #{build_dir}/js.jar"
31 minfier    = "java -jar #{build_dir}/google-compiler-20091218.jar"
32
33 # Turn off output other than needed from `sh` and file commands
34 verbose(false) 
35
36
37 # Tasks
38 task :default => "jquery"
39
40 desc "Builds jQuery; Tests with JSLint; Minifies jQuery"
41 task :all => [:jquery, :lint, :min] do
42   puts "jQuery build complete."
43 end
44
45 desc "Builds jQuery: jquery.js (Default task)"
46 task :jquery => [:selector, jq]
47
48 desc "Builds a minified version of jQuery: jquery.min.js"
49 task :min => jq_min
50
51
52 task :init => [sizzle, qunit] do
53   puts "Updating SizzleJS with latest..."
54         sh "cd #{sizzle_dir} && git pull origin master &> /dev/null"
55
56   puts "Updating QUnit with latest..."
57         sh "cd #{qunit_dir} &&  git pull origin master &> /dev/null"
58 end
59
60 desc "Removes dist folder, selector.js, and Sizzle/QUnit"
61 task :clean do
62   puts "Removing Distribution directory: #{dist_dir}..." 
63   rm_r dist_dir
64
65   puts "Removing built copy of Sizzle..."
66   rm_r selector
67
68   puts "Removing cloned directories..."
69   rm_r qunit_dir
70   rm_r sizzle_dir
71 end
72
73 desc "Rebuilds selector.js from SizzleJS"
74 task :selector => [:init, selector]
75
76 desc "Tests built jquery.js against JSLint"
77 task :lint => jq do
78   puts "Checking jQuery against JSLint..."
79   sh "#{rhino} #{build_dir}/jslint-check.js"
80 end
81
82
83 # File and Directory Dependencies
84 directory dist_dir
85
86 file jq => [dist_dir, base_files].flatten do
87   puts "Building jquery.js..."
88   sh "cat #{base_files.join(' ')} | sed 's/Date:./&#{date}/' | sed s/@VERSION/#{version}/ > #{jq}"
89 end
90
91 file jq_min => jq do
92   puts "Building jquery.min.js..."
93
94   sh "head -15 #{jq} > #{jq_min}"
95   sh "#{minfier} --js #{jq} --warning_level QUIET >> #{jq_min}"
96 end
97
98 file selector => [sizzle] do 
99   puts "Building selector code from Sizzle..."
100   sh "sed '/EXPOSE/r #{src_dir}/sizzle-jquery.js' #{sizzle} > #{selector}"
101 end
102
103 file sizzle do
104   puts "Retrieving SizzleJS from Github..."
105   sh "git clone git://github.com/jeresig/sizzle.git #{sizzle_dir}"
106 end
107
108 file qunit do
109   puts "Retrieving SizzleJS from Github..."
110   sh "git clone git://github.com/jquery/qunit.git #{qunit_dir}"
111 end