вторник, 24 ноября 2015 г.

Slackware: dot и graphviz

Начитался тут баша и открыл для себя язык описания графов по имени dot. Соответственно, возникло непреодолимое желание этот самый dot пощупать. Решил взгромоздить на свой Slackware некий софт graphviz v2.38, собрав его из исходников. Дальше начались чудеса.

Во-первых, заглючила команда make, вывалившись с сообщением error: 'tsrm_ls' undeclared. Решение нашлось, но, по-моему, на китайском языке. К счастью, буквы, которые надо вводить в компьютер, остались английскими, так что сориентироваться можно. В общем, надо отредактировать файл tclpkg/gv/gv_php_init.c, добавив в пару функций по строчке:
static size_t gv_string_writer (GVJ_t *job, const char *s, size_t len)
{
    TSRMLS_FETCH(); // <- добавили
    return PHPWRITE(s, len);
}
 
static size_t gv_channel_writer (GVJ_t *job, const char *s, size_t len)
{
    TSRMLS_FETCH(); // <- добавили
    return PHPWRITE(s, len);
}


На этом приключение не закончилось. Впервые на моей памяти заглючила также команда make install. На этот раз ошибка выглядела примерно так: fatal error: QtGui/qwidget.h: No such file or directory. Оказывается, требуется поправить файл /cmd/gvedit/Makefile: найти там строку примерно такого вида:
INCPATH       = -I/usr/lib64/qt/mkspecs/linux-g++ -I. -I/usr/lib64/qt/include/QtCore -I/usr/lib64/qt/include/QtGui -I/usr/lib64/qt/include -I../../lib/gvc -I../../lib/common -I../../lib/pathplan -I../../lib/cgraph -I../../lib/cdt -I../.. -I.
и вымарать из неё пару опций:
INCPATH       = -I/usr/lib64/qt/mkspecs/linux-g++ -I. -I/usr/lib64/qt/include -I../../lib/gvc -I../../lib/common -I../../lib/pathplan -I../../lib/cgraph -I../../lib/cdt -I../.. -I.
После этого всё, наконец, установилось.

Штука оказалась довольно прикольной. Например, можно создать вот такой текстовый файл sample.gv:
digraph myFirstGraph {
    edge [color=blue]
    a;
    b [shape=box label="Ку-ку"];
    c;
    d;
    a -> b [label="некая связь"];
    subgraph g1 {
        edge [dir=none]
        b -> c;
        b -> d;
    }
}
натравить на него команду:
dot -Tpng -osample.png sample.gv
и получить симпатичную картинку:
Ну не чудо ли!

Комментариев нет:

Отправить комментарий