Erlang: couchbeam rebar compile problem [SOLVED]

Всю жизнь писал я на обычных C-like языках (C++, php, Java, JS и пр.). Это довольно интересно, но выучив пару таких ЯП, понимаешь, что дальше все будет тоже самое. Поэтому в познавательно-развлекательных целях увлекся я функциональным языком программирования Erlang.

Сам язык очень интересный, позволяет писать железобетонные сервера с постоянными подключениями (готовимся к html5 sockets %) ), имеет необычный функциональный синтаксис, близкий к математическим выражениям, и т.д. В ближайшем будущем напишу о нем по-подробней и представлю небольшой проект, который я на нем пишу.

В моем приложении используется внешняя библиотека для работы с БД CouchDB – Couchbeam, которая в свою очередь требует еще пару библиотек.

Оказалось, в среде erlang есть аналог Maven (приложение для сборки всех зависимостей) – rebar. Неплохой мануал по теме есть на Хабре.

Чтобы настроить rebar на автоматическое скачивание и компиляцию couchbeam, в файле rebar.config пишется примерно следующее:

%% Здесь будут лежать зависимости
{deps_dir, ["deps"]}.

%% Поддиректории, в которые rebar должен заглядывать
{sub_dirs, ["rel"]}.

%% Список зависимостей
{deps,
[
{couchbeam, ".*", {git, "http://github.com/benoitc/couchbeam.git", "master"}}
]}.

Для непосредственного скачивания зависимостей выполняем

./rebar get-deps

а для компиляции

./rebar compile 

Вот тут-то и появилась ошибка на которую я убил не меньше часа:

./rebar compile
...
==> mochiweb (compile)
ERROR: compile failed while processing /Users/dimitry/Documents/workspaces/eclipse-java/site_stater/deps/mochiweb: {'EXIT',{function_clause,[{filelib,wildcard,[{"R14","c_src/*.c"}]},
                          {rebar_port_compiler,expand_sources,2},
                          {rebar_port_compiler,compile,2},
                          {rebar_core,run_modules,4},
                          {rebar_core,execute,4},
                          {rebar_core,process_dir,4},
                          {rebar_core,process_each,5},
                          {rebar_core,process_dir,4}]}}
 

Оказалось, все дело в файле конфигурации rebar (rebar.config) библиотеки ejson, для которой необходим сервер mochiweb. Для того, чтобы все нормально скомпилировалось, необходимо закомментировать первую строку:

%%{port_sources, [{ "R14", "c_src/*.c"}, {"R14", "c_src/yajl/*.c"}]}.

Точного описания директивы я так и не нашел, но, судя по всему, она указывает, откуда брать NIF (модули, написанные на C) для компиляции.
После её комментирования все компилируется, как по волшебству.)

UPDATE
Разобрался, в чем было дело: я пытался собираться проект основной версией rebar (из github), а нужна была та, что поставлялась в архиве с couchbeam. В этой версии есть компиляция Сишных модулей в erlang, видимо это улучшение где-то в pull коммитах. К сожалению, у этого проекта нет версий, поэтому и возникла такая ситуация.