summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md135
1 files changed, 135 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b683df1
--- /dev/null
+++ b/README.md
@@ -0,0 +1,135 @@
+rebar
+=====
+
+rebar is an Erlang build tool that makes it easy to compile and
+test Erlang applications, port drivers and releases.
+
+rebar is a self-contained Erlang script, so it's easy to distribute or even
+embed directly in a project. Where possible, rebar uses standard Erlang/OTP
+conventions for project structures, thus minimizing the amount of build
+configuration work. rebar also provides dependency management, enabling
+application writers to easily re-use common libraries from a variety of
+locations (git, hg, etc).
+
+Building
+--------
+
+Information on building and installing Erlang/OTP can be found
+in the `INSTALL.md` document.
+
+### Dependencies
+
+To build rebar you will need a working installation of Erlang R13B03 (or
+later).
+
+Should you want to clone the rebar repository, you will also require git.
+
+#### Downloading
+
+Clone the git repository:
+
+ $ git clone git://github.com/basho/rebar.git
+
+#### Building rebar
+
+ $ cd rebar/
+ $ ./bootstrap
+ Recompile: src/getopt
+ ...
+ Recompile: src/rebar_utils
+ ==> rebar (compile)
+ Congratulations! You now have a self-contained script called "rebar" in
+ your current working directory. Place this script anywhere in your path
+ and you can use rebar to build OTP-compliant apps.
+
+
+Contributing to rebar
+=====================
+
+Coding style
+------------
+
+Do not introduce trailing whitespace.
+
+Do not introduce lines longer than 80 characters.
+
+### Indentation
+
+To have consistent indentation we have vi modeline/emacs local variable
+headers in rebar's source files. This works automatically with vi.
+With Emacs you have to declare <code>'erlang-indent-level</code>
+set to <code>4</code>
+as a safe local variable value. If not configured Emacs will prompt
+you to save this as part of custom-set-variables:
+
+ '(safe-local-variable-values (quote ((erlang-indent-level . 4))))
+You can also tell Emacs to ignore file variables:
+
+ (setq enable-local-variables nil
+ enable-local-eval nil)
+
+
+Writing Commit Messages
+-----------------------
+
+Structure your commit message like this:
+
+<pre>
+One line summary (less than 50 characters)
+
+Longer description (wrap at 72 characters)
+</pre>
+
+### Summary
+
+* Less than 50 characters
+* What was changed
+* Imperative present tense (fix, add, change)
+> Fix bug 123
+> Add 'foobar' command
+> Change default timeout to 123
+* No period
+
+### Description
+
+* Wrap at 72 characters
+* Why, explain intention and implementation approach
+* Present tense
+
+### Atomicity
+
+* Break up logical changes
+* Make whitespace changes separately
+
+Dialyzer and Tidier
+-------------------
+
+Before you submit a patch check for discrepancies with
+[Dialyzer](http://www.erlang.org/doc/man/dialyzer.html):
+
+<pre>
+$ cd rebar/
+$ ./bootstrap debug
+$ dialyzer ebin -Wunmatched_returns -Werror_handling -Wrace_conditions -Wunderspecs
+</pre>
+
+The following discrepancies are known and safe to ignore:
+<pre>
+rebar_templater.erl:249: The call rebar_templater:consult(
+ Cont1::erl_scan:return_cont(),'eof',
+ Acc::[any()])
+ contains an opaque term as 1st argument when terms
+ of different types are expected in these positions
+rebar_utils.erl:144: Call to missing or unexported function escript:foldl/3
+rebar_utils.erl:165: The created fun has no local return
+</pre>
+
+It is **strongly recommended** to check the code with
+[Tidier](http://tidier.softlab.ntua.gr:20000/tidier/getstarted).
+Select all transformation options and enable **automatic**
+transformation.
+If Tidier suggests a transformation apply the changes **manually**
+to the source code.
+Do not use the code from the tarball (*out.tgz*) as it will have
+white-space changes
+applied by Erlang's pretty-printer.