[thrift] highly concurrent Erlang goodness

Summary:
 * shim to use object-oriented code as gen_servers
 * high(er) performance Erlang-style server and transport
 * sane packaging based on otp-base, i.e. Makefiles and real structure

Test Plan: tutorial server offers the same (subset of) functionality as previous version

Revert Plan: ok


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665164 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/erl/tools/utilities/clean_release b/lib/erl/tools/utilities/clean_release
new file mode 100755
index 0000000..9202690
--- /dev/null
+++ b/lib/erl/tools/utilities/clean_release
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+if [ $# -eq 1 ]; then
+	RELEASE_NAME=$1
+else
+	RELEASE_NAME=$(basename $(dirname $(dirname $(dirname $(which $0)))))
+fi
+
+LOCAL=$(dirname $(which $0))
+
+echo $LOCAL
+echo $RELEASE_NAME
+cd $LOCAL
+
+echo "
+-module(clean_release). 
+-export([clean_release/1]). 
+
+clean_release([ReleaseName]) -> 
+    RelFile = atom_to_list(ReleaseName) ++ \".rel\",
+    case file:consult(RelFile) of
+	{ok, [{release, {RelName, RelVsn}, ErtsSpec, ReleaseSpecs}]} -> do_rest(RelFile, ReleaseSpecs);
+	{error, Reason} -> io:format(\"ERROR - Could not find file ~s~n\", [RelFile]), exit(Reason)
+    end,
+    os:cmd(\"cd ../;rm -rf \" ++ string:strip(os:cmd(\"basename `pwd`\"))).
+	     
+do_rest(RelFile, ReleaseSpecs) ->
+    io:format(\"Finding Orphans in ~p among current release specs ~p~n\", [RelFile, ReleaseSpecs]),
+    {ok, FileNameList}    = file:list_dir(\"../\"),
+    Dirs = [FileName || FileName <- FileNameList, filelib:is_dir(\"../\" ++ FileName)] --
+	   [string:strip(os:cmd(\"basename `pwd`\"), right, $\n)],
+    BigListOfReleaseSpecs = lists:foldl(fun(Dir, Acc) -> 
+						OtherRelFile = \"../\" ++ Dir ++ \"/\" ++ RelFile,
+						io:format(\"Checking external release file ~p~n\", [OtherRelFile]),
+						case file:consult(OtherRelFile) of
+						    {ok, [{release, {RelName, RelVsn}, ErtsSpec, ReleaseSpecs_}]} -> 
+							Acc ++ ReleaseSpecs_;
+						    _  -> 
+							Acc
+						end end, [], Dirs),
+    Orphans = ReleaseSpecs -- BigListOfReleaseSpecs,
+    io:format(\"Removing orphan release specs ~p from ../../lib ~n\", [Orphans]),
+    lists:foreach(fun(Orphan) -> 
+			  os:cmd(\"rm -rf ../../lib/\" ++ atom_to_list(element(1, Orphan)) ++ \"-\" ++ element(2, Orphan)) 
+		  end, Orphans).
+" > clean_release.erl
+
+erlc clean_release.erl
+
+CMD="erl -s clean_release clean_release $RELEASE_NAME -s erlang halt -noshell"
+$CMD