= Developers information

== Required software

The tests need the following software installed:

* All the usual Phusion Passenger dependencies.
* Ruby on Rails 1.2.x
* Ruby on Rails 2.0.x
* Ruby on Rails 2.2.x
* Ruby on Rails 2.3.x
* Ruby on Rails 3.0.x
* rspec >= 1.1.2
* mime-types >= 1.15
* sqlite3-ruby

The following software is optional:

* RCov, for code coverage
* RDoc, for generating HTML Ruby API documentation
* Doxygen, for generating HTML C++ API documentation
* dot (part of Graphviz), for generating diagrams in HTML API documentation
* The font "Bitstream Vera Sans", used in the class diagrams. See http://www.gnome.org/fonts
* AsciiDoc >= 8.2.5, for converting various doc/*.txt documents to HTML

== Compiling Phusion Passenger

Run the following command to compile everything:

 rake apache
 rake nginx

== Directory structure

The most important directories are:
[ lib/phusion_passenger ]
  The source code for the spawn server, which is written in Ruby.
[ ext/phusion_passenger ]
  Native extensions for Ruby, used by the spawn server.
[ ext/apache2 ]
  Apache 2-specific source code.
[ ext/nginx ]
  Nginx-specific source code.
[ ext/common ]
  Source code shared by the Apache and Nginx modules.
[ bin ]
  User executables.
[ helper-scripts ]
  Scripts used during runtime, but not directly executed by the user.
[ doc ]
  Various documentation.
[ test ]
  Unit tests and integration tests.
[ test/support ]
  Support/utility code, used in the tests.
[ test/stub ]
  Stub code, used in the tests.

Less important directories:
[ ext/boost ]
  A stripped-down and customized version of the Boost C++ library
  (www.boost.org).
[ ext/oxt ]
  The "OS eXtensions for boosT" library, which provides various important
  functionality necessary for writing robust server software. It provides
  things like support for interruptable system calls and portable backtraces
  for C++. Boost was modified to make use of the functionality provided by OXT.
[ dev ]
  Tools for Phusion Passenger developers. Not used during production.
[ resources ]
  Various resource files, used during production.
[ debian ]
  Debian packaging files.
[ man ]
  Man pages.
[ build ]
  Rake tasks used by the build system.

== Tests

Run all tests:

 rake test

Run only the unit tests for the C++ components:

 rake test:cxx

Run just the unit tests for the Ruby spawn server:

 rake test:ruby

Run just the integration tests:

 rake test:integration            # All integration tests.
 rake test:integration:apache2    # Just integration tests for Apache 2.
 rake test:integration:nginx      # Just integration tests for Nginx.

Notes:
- Some tests, such as the ones that test privilege lowering, require
  root privileges. Those will only be run if Rake is run as root.
- Some tests will be run against multiple Rails versions in order to
  test compatibility. This can take a long time. If you want to test
  against only a single Rails version, then set the environment variable
  ONLY_RAILS_VERSION to one of the subdirectory names in
  test/stub/rails_apps, e.g. 'export ONLY_RAILS_VERSION=2.3'

== Documentation

Various developer documents can be found in 'doc/*.html'.

The Ruby part's API reference is located in 'doc/rdoc/'.
The C++ part's API reference is located in 'doc/cxxapi/'.
