Столкнулся с проблемкой, как лучше подключать хедеры из зависимых приложений.

130 views
Skip to first unread message

Yuri Zhloba

unread,
Mar 6, 2013, 8:49:05 AM3/6/13
to erlang-...@googlegroups.com
Например, у меня есть app1 в котором app1/include/logger.hrl
и app2, для которого указана зависимость от app1, и logger.hrl тож нужен

Варианты:
1) продублировать logger.hrl в app2 и подключить просто:
-include("logger.hrl").
2) подключить по относительному пути 
-include("../deps/app1/include/logger.hrl").
3) через переменную окружения 
-include("$SOME_PATH/logger.hrl").
4) с помощью include_lib
-include_lib("app1/include/logger.hrl")

Заинтересованные лица, которым важен этот include:
- rebar
- dialyzer
- emacs модуль erlang-flymake.el

С rebar и dialyzer договориться можно, они настраиваются. А вот erlang-flymake.el туповат. Он понимает только первые два варианта, 3й и 4й не понимает. Я заглянул в его сорцы, и нашел только

(defun erlang-flymake-get-include-dirs ()
  (list (concat (erlang-flymake-get-app-dir) "include")))

то есть app-dir и include в нем. Хедеры из другого приложения подключить проблематично. 

И как с этим жить? Отключить erlang-flymake?

Maxim Sokhatsky

unread,
Mar 6, 2013, 8:50:35 AM3/6/13
to erlang-...@googlegroups.com
С помощью include_lib самый четкий способ.


Date: Wed, 6 Mar 2013 05:49:05 -0800
From: yzh4...@gmail.com
To: erlang-...@googlegroups.com
Subject: Столкнулся с проблемкой, как лучше подключать хедеры из зависимых приложений.
--
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Новости: http://erlanger.ru
Чат: xmpp://erl...@conference.jabber.ru
Чат для оффтопа: xmpp://erlang...@conference.jabber.ru
Правила, действующие в чате и рассылке: http://erlanger.ru/ru/erlang-at-conference-jabber-ru
 
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com
---
Вы получили это сообщение, поскольку подписаны на группу Erlang по-русски.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес erlang-russia...@googlegroups.com.
Подробнее о функциях можно узнать на странице https://groups.google.com/groups/opt_out.
 
 

Yuri Zhloba

unread,
Mar 6, 2013, 8:52:36 AM3/6/13
to erlang-...@googlegroups.com
да, но erlang-flymake.el его не понимает, из-за чего у меня в emacs код раскрашен кучей ошибок

поэтому вопрос прежний: можно ли как-то подружиться с erlang-flymake, или придется отключить его?

Maxim Sokhatsky

unread,
Mar 6, 2013, 8:53:21 AM3/6/13
to erlang-...@googlegroups.com
Это не повод идти на поводу у гавноприложения что бы свой проект превращать в мусорку.


Date: Wed, 6 Mar 2013 16:52:36 +0300
Subject: Re: Столкнулся с проблемкой, как лучше подключать хедеры из зависимых приложений.
From: yzh4...@gmail.com
To: erlang-...@googlegroups.com


да, но erlang-flymake.el его не понимает, из-за чего у меня в emacs код раскрашен кучей ошибок

поэтому вопрос прежний: можно ли как-то подружиться с erlang-flymake, или придется отключить его?

Alexander Dergachev

unread,
Mar 6, 2013, 8:53:58 AM3/6/13
to erlang-...@googlegroups.com
есть такая вещь как edts (https://github.com/tjarvstrand/edts), в ней кроме всего прочего есть либо flymake, либо альтернатива, которая работает. так вот, если весь edts по каким-то причинам не нужен, можно взять flymake (или его аналог) из этого самого edts.

With Best Regards,
Alexander Dergachev


2013/3/6 Yuri Zhloba <yzh4...@gmail.com>
да, но erlang-flymake.el его не понимает, из-за чего у меня в emacs код раскрашен кучей ошибок

поэтому вопрос прежний: можно ли как-то подружиться с erlang-flymake, или придется отключить его?

--

Yuri Zhloba

unread,
Mar 6, 2013, 8:56:35 AM3/6/13
to erlang-...@googlegroups.com


6 марта 2013 г., 16:53 пользователь Alexander Dergachev <cy6er...@gmail.com> написал:

есть такая вещь как edts (https://github.com/tjarvstrand/edts), в ней кроме всего прочего есть либо flymake, либо альтернатива, которая работает. так вот, если весь edts по каким-то причинам не нужен, можно взять flymake (или его аналог) из этого самого edts.

With Best Regards,
Alexander Dergachev

Ага, ок, буду смотреть. Я-то обходился erlang-mode, идуший в составе erlang/otp. Но с такими проблемами мириться нельзя.

Maxim Sokhatsky

unread,
Mar 6, 2013, 8:59:14 AM3/6/13
to erlang-...@googlegroups.com
Проблема надумана. Синк показывает строки с эрорами при C-x s.


Date: Wed, 6 Mar 2013 16:56:35 +0300
Subject: Re: Столкнулся с проблемкой, как лучше подключать хедеры из зависимых приложений.
From: yzh4...@gmail.com
To: erlang-...@googlegroups.com

Yuri Zhloba

unread,
Mar 6, 2013, 9:01:34 AM3/6/13
to erlang-...@googlegroups.com

6 марта 2013 г., 16:59 пользователь Maxim Sokhatsky <ma...@synrc.com> написал:
Проблема надумана. Синк показывает строки с эрорами при C-x s.

ну ок, ок, я понял. Нужно отказаться от erlang-flymake :) 

Max Lapshin

unread,
Mar 6, 2013, 9:02:21 AM3/6/13
to erlang-...@googlegroups.com
Править свою приблуду, однозначно. Различные приложения должны соединяться через include_lib

Yuri Zhloba

unread,
Mar 6, 2013, 9:03:28 AM3/6/13
to erlang-...@googlegroups.com


6 марта 2013 г., 17:02 пользователь Max Lapshin <max.l...@gmail.com> написал:

Править свою приблуду, однозначно. Различные приложения должны соединяться через include_lib

Не моя приблуда, а изделие Ericsson, идущее в одном пакете с erlang/otp :) Но фиг с ним, не важно.

Max Lapshin

unread,
Mar 6, 2013, 9:08:47 AM3/6/13
to erlang-...@googlegroups.com
в одном пакете с otp идут не только изделия, но ещё и поделия =))

Witali Monastyrjow

unread,
Mar 6, 2013, 12:14:06 PM3/6/13
to erlang-...@googlegroups.com
Я переопределил в .emacs erlang-flymake-get-include-dirs и добавил в
своей функции директории в которых лежат нужные applications.

6 марта 2013 г., 15:08 пользователь Max Lapshin <max.l...@gmail.com> написал:
> в одном пакете с otp идут не только изделия, но ещё и поделия =))
>

Sergey Prokhorov

unread,
Mar 7, 2013, 12:48:49 PM3/7/13
to erlang-...@googlegroups.com
Однозначно нужно использовать include_lib().
Flymake я научил использовать нужные директории как то так:

(defun flymake-erlang-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
  'flymake-create-temp-copy))
  (local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
 (list "~/.emacs.d/bin/eflymake"  (list local-file buffer-file-name))))


#!/usr/bin/env escript

main([FileName]) ->
    main([FileName, FileName]);
main([FileName, OrigFileName]) ->
    IncApp = filename:dirname(OrigFileName),
    AppDir = filename:dirname(filename:dirname(OrigFileName)),
    IncDeps = filename:join(AppDir, "deps"),

    LibPaths = expand_lib_dirs(["deps", ".."], AppDir, []),
    ok = code:add_pathsa(LibPaths),

    %% io:format("IncApp ~s, AppDir ~s, IncApp ~s~n", [IncApp, AppDir, IncDeps]),
    %% io:format("~s:1: IncApp ~s, AppDir ~s, IncApp ~s LibPaths ~p~n", [FileName, IncApp, AppDir, IncDeps, LibPaths]),

    compile:file(FileName, [warn_obsolete_ghuard, warn_unused_import,
                            warn_shadow_vars, warn_export_vars,
                            strong_validation, report,
                            {i, IncDeps}, {i, IncApp}]).


%% from rebar
expand_lib_dirs([], _Root, Acc) ->
    Acc;
expand_lib_dirs([Dir | Rest], Root, Acc) ->
    Apps = filelib:wildcard(filename:join([Root, Dir, "*", "ebin"])),
    FqApps = [filename:join([Root, A]) || A <- Apps],
    expand_lib_dirs(Rest, Root, Acc ++ FqApps).


Как именно это работает уже не помню, написал год назад и забыл. По моему просто добавляет пути относительно текущего файла.

среда, 6 марта 2013 г., 17:49:05 UTC+4 пользователь Yuri Zhloba написал:

Yuri Zhloba

unread,
Mar 7, 2013, 12:55:19 PM3/7/13
to erlang-...@googlegroups.com
ок, пасиб

7 марта 2013 г., 20:48 пользователь Sergey Prokhorov <seri...@gmail.com> написал:

--
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Новости: http://erlanger.ru
Чат: xmpp://erl...@conference.jabber.ru
Чат для оффтопа: xmpp://erlang...@conference.jabber.ru
Правила, действующие в чате и рассылке: http://erlanger.ru/ru/erlang-at-conference-jabber-ru
 
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com
---
Вы получили это сообщение, поскольку подписаны на группу Erlang по-русски.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес erlang-russia...@googlegroups.com.
Подробнее о функциях можно узнать на странице https://groups.google.com/groups/opt_out.
 
 



--
Yuri Zhloba

skype: yzh44yzh
jabber: yzh4...@gmail.com
phone: +375 44 793 33 73
Reply all
Reply to author
Forward
0 new messages