X-Git-Url: http://git.asbjorn.biz/?p=jquery.git;a=blobdiff_plain;f=Rakefile;h=4319aa769215d9dc4e3d425baa37dc575960bbce;hp=ebffabfcb43aa86d831183a0aae03cb7c04517b1;hb=3e0cc815043c2425819743e907a0ce263a7ce164;hpb=b70872f70d720e5f25eea7fdf0453804074dc194 diff --git a/Rakefile b/Rakefile index ebffabf..4319aa7 100644 --- a/Rakefile +++ b/Rakefile @@ -1,26 +1,138 @@ -# 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 xhr transports/jsonp transports/script transports/xhr 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`[/^Date:\s+(.+)$/, 1] +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-20100917.jar" + +# Turn off output other than needed from `sh` and file commands +verbose(false) + +# Tasks +task :default => "all" + +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 + sizzle_git = File.join(sizzle_dir, '.git') + qunit_git = File.join(qunit_dir, '.git') + + puts "Updating SizzleJS with latest..." + sh "git --git-dir=#{sizzle_git} pull -q origin master" + + puts "Updating QUnit with latest..." + sh "git --git-dir=#{qunit_git} pull -q origin master" +end + +desc "Removes dist folder, selector.js, and Sizzle/QUnit" +task :clean do + puts "Removing Distribution directory: #{dist_dir}..." + rm_rf dist_dir + + puts "Removing built copy of Sizzle..." + rm_rf selector + + puts "Removing cloned directories..." + rm_rf qunit_dir + rm_rf sizzle_dir end -task :jquery => [:init, :selector] do - sh "mkdir -p dist" +desc "Rebuilds selector.js from SizzleJS" +task :selector => [:init, selector] - sh "cat " + files.map {|file| "src/" + file + ".js"}.join(" ") + - " | sed 's/Date:./&" + date + "/' | " + - " sed s/@VERSION/" + version + "/ > dist/jquery2.js" +desc "Tests built jquery.js against JSLint" +task :lint => jq do + puts "Checking jQuery against JSLint..." + sh "#{rhino} " + File.join(build_dir, 'jslint-check.js') end -task :selector do - sh "sed '/EXPOSE/r src/sizzle-jquery.js' src/sizzle/sizzle.js > src/selector.js" + +# File and Directory Dependencies +directory dist_dir + +file jq => [dist_dir, base_files].flatten do + puts "Building jquery.js..." + + File.open(jq, 'w') do |f| + f.write cat(base_files).gsub(/@DATE/, date).gsub(/@VERSION/, version) + end +end + +file jq_min => jq do + puts "Building jquery.min.js..." + + sh "#{minfier} --js #{jq} --warning_level QUIET --js_output_file #{jq_min}" + + min = File.read( jq_min ) + + # Equivilent of "head" + File.open(jq_min, 'w') do |f| + f.write File.readlines(jq)[0..14].join() + f.write min + end +end + +file selector => [sizzle, :init] do + puts "Building selector code from Sizzle..." + + File.open(selector, 'w') do |f| + f.write File.read(sizzle).gsub( + /^.+EXPOSE$\n/, + '\0' + File.read( File.join( src_dir, 'sizzle-jquery.js' )) + ).gsub( + /^window.Sizzle.+$\n/, '' + ) + end +end + +file sizzle do + puts "Retrieving SizzleJS from Github..." + sh "git clone git://github.com/jeresig/sizzle.git #{sizzle_dir}" +end + +file qunit do + puts "Retrieving QUnit from Github..." + sh "git clone git://github.com/jquery/qunit.git #{qunit_dir}" +end + + +def cat( files ) + files.map do |file| + File.read(file) + end.join('') end