= Buildr

This is Buildr, the build system that lets you build like you code.

http://buildr.apache.org/

== Get Started

=== Install Buildr

Buildr needs Ruby 1.8 or later and RubyGems 0.9 or later.

Windows users can get the one-click Ruby installer, which includes the latest
version of Ruby and RubyGems:

http://rubyinstaller.rubyforge.org

Make sure to set JAVA_HOME environment variable first, then:

  gem install buildr

(Use sudo for Linux and OS X)

More installation and setup instructions available online
http://buildr.apache.org/


=== RTFM

* Buildr documentation: http://buildr.apache.org
* More about Rake: http://docs.rubyrake.org
* Antwrap documentation: http://antwrap.rubyforge.org


=== Mailing list

Users: users-subscribe@buildr.apache.org http://buildr.markmail.org/search/list:users

Developers: dev-subscribe@buildr.apache.org http://buildr.markmail.org/search/list:dev

Create your own Buildfile and start living the life!


== Where's My Ruby?

Buildr needs Ruby 1.8 or later and RubyGems 0.9 or later. All other
dependencies are installed when you run:

  gem install buildr

=== Windows

Windows users can get the one-click Ruby installer, which includes the latest
version of Ruby and RubyGems:

http://rubyinstaller.rubyforge.org

Before installing Buildr, please set the JAVA_HOME environment variable to
point to your JDK distribution.  Next, use Ruby Gem to install Buildr:

  > gem install buildr

When prompted for a platform, select mswin32.

=== Linux, BSD, Cygwin

On Linux/BSD/Cygwin, use your default package manager, for example, for Ubuntu:

$ sudo apt-get install ruby
$ sudo apt-get install ruby1.8-dev
$ sudo apt-get install build-essential
$ sudo apt-get install libopenssl-ruby

Before installing Buildr, please set the JAVA_HOME environment variable to
point to your JDK distribution.  Next, use Ruby Gem to install Buildr:

  $ sudo env JAVA_HOME=$JAVA_HOME gem install buildr

When prompted for a platform, select ruby.

=== OS X

Leopard includes the latest version of Ruby, if you are using Tiger or an older
release, we recommend re-installing the latest:

http://hivelogic.com/narrative/articles/ruby-rails-mongrel-mysql-osx

To install Buildr:

  $ sudo gem install buildr

When prompted for a platform, select ruby.


== Living On the Edge

You can check the latest sources from SVN:

  svn co http://svn.apache.org/repos/asf/buildr/trunk

Or browse the SVN repository online:
http://svn.apache.org/repos/asf/buildr

If you prefer Git, a Git fork is available from http://github.com/buildr/buildr/tree/master:

  git clone git://github.com/buildr/buildr.git

To install Buildr locally from source:

  cd buildr
  export JRUBY_OPTS="-J-XX:MaxPermSize=312m -J-Xmx1024M"
  export JAVA_OPTS="-Xmx1024m -XX:MaxPermSize=312m"
  rake install

If the cutting edge doesn't work, make sure to check the CHANGELOG, to see
which changes might have broken your build.  To run all the test cases:

  rake spec


== License

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with this
work for additional information regarding copyright ownership.  The ASF
licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
License for the specific language governing permissions and limitations under
the License.
