X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=Rakefile;h=5ea143b66e5a0792ab3346b686441335835e3da3;hb=f5d4bf8920868c2d1f88cc4f3bfcf85c0b566b2e;hp=92176a6c1b6c218d459eba4f8280accfde6adbe6;hpb=77510fec025e654a8d2fdc6b2cbb564c159b3204;p=jquery.git diff --git a/Rakefile b/Rakefile index 92176a6..5ea143b 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", "fx", "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 + +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} " + File.join(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..." + + File.open(jq, 'w') do |f| + f.write cat(base_files).gsub(/(Date:.)/, "\\1#{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 -task :jquery => [:init, :selector] do - sh "mkdir -p dist" +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 - sh "cat " + files.map {|file| "src/" + file + ".js"}.join(" ") + - " | sed 's/Date:./&" + date + "/' | " + - " sed s/@VERSION/" + version + "/ > dist/jquery2.js" +file qunit do + puts "Retrieving QUnit from Github..." + sh "git clone git://github.com/jquery/qunit.git #{qunit_dir}" end -task :selector do - sh "sed '/EXPOSE/r src/sizzle-jquery.js' src/sizzle/sizzle.js > src/selector.js" + +def cat( files ) + files.map do |file| + File.read(file) + end.join('') end