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