Renamed "complete" to "done" in order to avoid conflicts with jXHR.complete.
[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{
13   intro
14   core
15   support
16   data
17   queue
18   attributes
19   event
20   selector
21   traversing
22   manipulation
23   css
24   ajax
25   ajax/jsonp
26   ajax/script
27   ajax/xhr
28   effects
29   offset
30   dimensions
31   outro
32 }.map { |js| File.join( src_dir, "#{js}.js" ) }
33
34 # Sizzle, QUnit and jQuery files/dirs
35 sizzle_dir = File.join( src_dir, "sizzle" )
36 sizzle     = File.join( sizzle_dir, "sizzle.js" )
37 selector   = File.join( src_dir, "selector.js" )
38
39 qunit_dir  = File.join( test_dir, "qunit" )
40 qunit      = File.join( qunit_dir, "qunit", "qunit.js" )
41
42 jq         = File.join( dist_dir, "jquery.js" )
43 jq_min     = File.join( dist_dir, "jquery.min.js" )
44
45 # General Variables
46 date       = `git log -1`[/^Date:\s+(.+)$/, 1]
47 version    = File.read( File.join( prefix, 'version.txt' ) ).strip
48
49 # Build tools
50 rhino      = "java -jar #{build_dir}/js.jar"
51 minfier    = "java -jar #{build_dir}/google-compiler-20100917.jar"
52
53 # Turn off output other than needed from `sh` and file commands
54 verbose(false)
55
56 # Tasks
57 task :default => "all"
58
59 desc "Builds jQuery; Tests with JSLint; Minifies jQuery"
60 task :all => [:jquery, :lint, :min] do
61   puts "jQuery build complete."
62 end
63
64 desc "Builds jQuery: jquery.js (Default task)"
65 task :jquery => [:selector, jq]
66
67 desc "Builds a minified version of jQuery: jquery.min.js"
68 task :min => jq_min
69
70
71 task :init => [sizzle, qunit] do
72   sizzle_git = File.join(sizzle_dir, '.git')
73   qunit_git  = File.join(qunit_dir,  '.git')
74
75   puts "Updating SizzleJS with latest..."
76         sh "git --git-dir=#{sizzle_git} pull -q origin master"
77
78   puts "Updating QUnit with latest..."
79         sh "git --git-dir=#{qunit_git} pull -q origin master"
80 end
81
82 desc "Removes dist folder, selector.js, and Sizzle/QUnit"
83 task :clean do
84   puts "Removing Distribution directory: #{dist_dir}..."
85   rm_rf dist_dir
86
87   puts "Removing built copy of Sizzle..."
88   rm_rf selector
89
90   puts "Removing cloned directories..."
91   rm_rf qunit_dir
92   rm_rf sizzle_dir
93 end
94
95 desc "Rebuilds selector.js from SizzleJS"
96 task :selector => [:init, selector]
97
98 desc "Tests built jquery.js against JSLint"
99 task :lint => jq do
100   puts "Checking jQuery against JSLint..."
101   sh "#{rhino} " + File.join(build_dir, 'jslint-check.js')
102 end
103
104
105 # File and Directory Dependencies
106 directory dist_dir
107
108 file jq => [dist_dir, base_files].flatten do
109   puts "Building jquery.js..."
110
111   File.open(jq, 'w') do |f|
112     f.write cat(base_files).
113       gsub(/@DATE/, date).
114       gsub(/@VERSION/, version).
115       gsub(/.function..jQuery...\{/, '').
116       gsub(/\}...jQuery..;/, '')
117   end
118 end
119
120 file jq_min => jq do
121   puts "Building jquery.min.js..."
122
123   sh "#{minfier} --js #{jq} --warning_level QUIET --js_output_file #{jq_min}"
124
125   min = File.read( jq_min )
126
127   # Equivilent of "head"
128   File.open(jq_min, 'w') do |f|
129     f.write File.readlines(jq)[0..14].join()
130     f.write min
131   end
132 end
133
134 file selector => [sizzle, :init] do
135   puts "Building selector code from Sizzle..."
136
137   File.open(selector, 'w') do |f|
138     f.write File.read(sizzle).gsub(
139       /^.+EXPOSE$\n/,
140       '\0' + File.read( File.join( src_dir, 'sizzle-jquery.js' ))
141     ).gsub(
142       /^window.Sizzle.+$\n/, ''
143     )
144   end
145 end
146
147 file sizzle do
148   puts "Retrieving SizzleJS from Github..."
149   sh "git clone git://github.com/jeresig/sizzle.git #{sizzle_dir}"
150 end
151
152 file qunit do
153   puts "Retrieving QUnit from Github..."
154   sh "git clone git://github.com/jquery/qunit.git #{qunit_dir}"
155 end
156
157
158 def cat( files )
159   files.map do |file|
160     File.read(file)
161   end.join('')
162 end