Skip to content
Browse files

Merge branch 'doug'

  • Loading branch information...
2 parents c90d609 + cecd1d8 commit 6a0942c9d5bbcc7eb6b953b8d7191b7bbd1e669f @wycats wycats committed Jun 19, 2010
Showing with 175 additions and 37 deletions.
  1. +46 −20 README.md
  2. +129 −17 Rakefile
  3. 0 speed/benchmarker.css
  4. 0 speed/benchmarker.js
  5. 0 speed/index.html
View
66 README.md
@@ -3,56 +3,82 @@
What you need to build your own jQuery
---------------------------------------
-* Make sure that you have Java installed (if you want to build a minified version of jQuery).
-If not, go to this page and download "Java Runtime Environment (JRE) 5.0"
-[http://java.sun.com/javase/downloads/index.jsp](http://java.sun.com/javase/downloads/index.jsp)
+* Make sure that you have Java installed (if you want to build a minified version of jQuery).
+If not, [go to this page](http://java.sun.com/javase/downloads/index.jsp) and download "Java Runtime Environment (JRE) 5.0"
-* You now have two options for building jQuery, if you have access to common UNIX commands (like `make`, `mkdir`, `rm`, `cat`, and `echo`) then simply type `make` to build all the components.
+Build Options
+--------------
-* The other option is if you have Ant installed (or are on Windows and don't have access to make). You can download Ant from here: [http://ant.apache.org/bindownload.cgi](http://ant.apache.org/bindownload.cgi)
-If you do have Ant, everytime (in this README) that I say 'make', do 'ant' instead - it works identically (for all intents and purposes).
+You now have **three** options for building jQuery:
+
+* **`make`**: If you have access to common UNIX commands (like `make`, `mkdir`, `rm`, `cat`, and `echo`) then simply type `make` to build all the components.
+
+* **`rake`**: If you have Ruby Rake installed (on either Windows or UNIX/Linux), you can simply type `rake` to build all the components.
+
+* **`ant`**: If you have Ant installed (or are on Windows and don't have access to make). You can download Ant from here: [http://ant.apache.org/bindownload.cgi].
How to build your own jQuery
-----------------------------
+*Note: If you are using either `rake` or `ant`, substitute your chosen method in place of `make` in the examples below. They work identically for all intents and purposes. Quick reference is also available for `rake` by typing `rake -T` in the `jquery` directory.*
+
In the main directory of the distribution (the one that this file is in), type
the following to make all versions of jQuery:
-`make`
+ make
-Here are each of the individual items that are buildable from the Makefile.
+*Here are the individual items that are buildable from the Makefile:*
-`make init`
+ make init
Pull in all the external dependencies (QUnit, Sizzle) for the project.
-`make jquery`
+ make jquery
The standard, uncompressed, jQuery code.
-Makes: ./dist/jquery.js
+Makes: `./dist/jquery.js`
-`make min`
+ make min
A compressed version of jQuery (made the Closure Compiler).
-Makes: ./dist/jquery.min.js
+Makes: `./dist/jquery.min.js`
-`make lint`
+ make lint
Tests a build of jQuery against JSLint, looking for potential errors or bits of confusing code.
-`make selector`
+ make selector
Builds the selector library for jQuery from Sizzle.
-Makes: ./src/selector.js
+Makes: `./src/selector.js`
Finally, you can remove all the built files using the command:
-`make clean`
+ make clean
+
+Building to a different directory
+----------------------------------
+
+If you want to build jQuery to a directory that is different from the default location, you can...
-Additionally, if you want to install jQuery to a location that is not this
-directory, you can specify the PREFIX directory, for example:
+**Make only:** Specify the PREFIX directory, for example:
-`make PREFIX=/home/john/test/`
+ make PREFIX=/home/john/test/ [command]
+
+With this example, the output files would be contained in `/home/john/test/dist/`
+
+**Rake only:** Define the DIST_DIR directory, for example:
+
+ rake DIST_DIR=/home/john/test/ [command]
+
+With this example, the output files would be contained in `/home/john/test/`
+
+*In both examples, `[command]` is optional.*
+
+**Ant only:** You cannot currently build to another directory when using Ant.
+
+Questions?
+----------
If you have any questions, please feel free to ask them on the jQuery
mailing list, which can be found here:
View
146 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 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-20091218.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
-task :jquery => [:init, :selector] do
- sh "mkdir -p dist"
+desc "Builds jQuery: jquery.js (Default task)"
+task :jquery => [:selector, jq]
- sh "cat " + files.map {|file| "src/" + file + ".js"}.join(" ") +
- " | sed 's/Date:./&" + date + "/' | " +
- " sed s/@VERSION/" + version + "/ > dist/jquery.js"
+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 :selector do
- sh "sed '/EXPOSE/r src/sizzle-jquery.js' src/sizzle/sizzle.js > src/selector.js"
+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
+
+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
View
0 speed/benchmarker.css 100755 → 100644
File mode changed.
View
0 speed/benchmarker.js 100755 → 100644
File mode changed.
View
0 speed/index.html 100755 → 100644
File mode changed.

0 comments on commit 6a0942c

Please sign in to comment.
Something went wrong with that request. Please try again.