= 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.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.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 GIT:

  git clone http://git.apache.org/buildr.git

If you prefer GitHub, a mirror is available from http://github.com/apache/buildr:

  git clone git://github.com/apache/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.
