deodar icon indicating copy to clipboard operation
deodar copied to clipboard

Не собирается под арч.

Open Dronte opened this issue 10 years ago • 34 comments

Решил PKGBUILD под арч написать и столкнулся с тем, что у меня не собирается.

gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ] make: Entering directory '/home/dronte/deodar/src/deodar/glxwin/build' CXX(target) Release/obj.target/glxwin/glxwin.o In file included from ../glxwin.cpp:36:0: ../glxwin.h:27:38: fatal error: freetype/freetype.h: No such file or directory #include <freetype/freetype.h> ^ У меня все лежит в другой папке freetype2 /usr/include/freetype2/freetype.h

Система - Archlinux.

Dronte avatar Apr 03 '14 13:04 Dronte

если не трудно, поменяйте путь к инклюду, он прописан (в странном месте) в файле bindings.gyp

exebook avatar Apr 03 '14 17:04 exebook

Что-то я не могу найти этого файла. К тому же, как я сказал, я писал PKGBUILD. Нельзя что-то сделать, чтобы это работало универсально?

Dronte avatar Apr 03 '14 17:04 Dronte

поясните что вы делаете? я не знаю что такое PKGBUILD

вот файл упомянутый https://github.com/exebook/glxwin/blob/master/binding.gyp

в крайнем случае можно скомпилировать просто запустив gcc или clang, но там тоже придётся пути к либам указывать

exebook avatar Apr 03 '14 18:04 exebook

Не совсем в тему, но, возможно, кому-то поможет. У меня при выполнении cd x11clip; node-gyp configure build была такая ошибка (следовал инструкции).

gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/home/kyrylo/Dropbox/code/kyrylo/deodar/x11clip/build'
  CXX(target) Release/obj.target/x11clip/x11clip.o
  SOLINK_MODULE(target) Release/obj.target/x11clip.node
/bin/ld: cannot find -lv8
collect2: error: ld returned 1 exit status
x11clip.target.mk:116: recipe for target 'Release/obj.target/x11clip.node' failed
make: *** [Release/obj.target/x11clip.node] Error 1
make: Leaving directory '/home/kyrylo/Dropbox/code/kyrylo/deodar/x11clip/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:797:12)
gyp ERR! System Linux 3.13.8-1-ARCH
gyp ERR! command "node" "/bin/node-gyp" "configure" "build" "--python" "python2"
gyp ERR! cwd /home/kyrylo/Dropbox/code/kyrylo/deodar/x11clip
gyp ERR! node -v v0.10.26
gyp ERR! node-gyp -v v0.13.0
gyp ERR! not ok 

Решилось установкой v8.

sudo pacman -S v8

kyrylo avatar Apr 03 '14 18:04 kyrylo

Кстати, если у вас стоит Питон 3, то билду это не понравится. Нужно выполнять команду так: node-gyp configure build --python python2 (предварительно убедившись в наличии Питона 2).

kyrylo avatar Apr 03 '14 18:04 kyrylo

ценная инфа, попробую в вики страничку сделать)

exebook avatar Apr 03 '14 18:04 exebook

Прошу прощение за флуд, а как запустить теперь (я профан в Ноде)?

kyrylo avatar Apr 03 '14 19:04 kyrylo

пхах, это не флуд, это важный вопрос!

node deodar.js

exebook avatar Apr 03 '14 19:04 exebook

В этом файле написано "include_dirs": ["/usr/include/freetype2", "osnova", "extra"], но по адресу /usr/include/freetype2/freetype ничего не лежит.

Если заменить #include<freetype/freetype.h> на #include<freetype.h> тогда оно компилируется но при запуске вылетает ошибка /home/dronte/deodar/src/deodar/intervision/display.js:53 dnaof(this, undefined, fonts[f].name, fontSize, fonts[f].extra_x, fonts[f].tu ^ TypeError: Cannot read property 'name' of undefined at X.TGLXVision.can.init (/home/dronte/deodar/src/deodar/intervision/display.js:53:33) at dnaof (/home/dronte/deodar/src/deodar/dnaof/dnaof.js:43:29) at X.TDeodar.can.init (/home/dronte/deodar/src/deodar/deodar.js:194:2) at Function.X.create (/home/dronte/deodar/src/deodar/dnaof/dnaof.js:24:35) at Object. (/home/dronte/deodar/src/deodar/deodar.js:198:17) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10)

PKGBUILD - это способ распространения пакетов в Arch gnu/linux по сути это скрипт который скачивает, собирает и устанавливает программу. Его можно положить в репозиторий(что я и собираюсь сделать) и тогда пользователи смогут ставить deodar одной командой.

Dronte avatar Apr 03 '14 19:04 Dronte

кажется случилось страшное и функция поиска шрифтов ни нашла ни одного. если не затруднит посмотрите первые 20 строчек display.js как они работают.

видимо Arch gnu/linux имеет другой набор шрифтов либо путь к ним не такой как в убунтах. Это нормально, просто я не знаю сам где там что в этом знаменитом дистрибе.

exebook avatar Apr 03 '14 19:04 exebook

А где лежит display.js?

kyrylo avatar Apr 03 '14 19:04 kyrylo

Тьфу, всё, разобрался :)

kyrylo avatar Apr 03 '14 19:04 kyrylo

Да, действительно, дело в шрифтах. У нас все шрифты лежат в /usr/share/fonts/TTF мы можем совместными усилиями добиться переносимости кода между дистрибутивами?

Dronte avatar Apr 03 '14 19:04 Dronte

displya.js -- это часть самого деодара.

deodar/intervision/display.js

https://github.com/exebook/intervision/blob/master/display.js

exebook avatar Apr 03 '14 19:04 exebook

конечно можем!

exebook avatar Apr 03 '14 19:04 exebook

вы сделайте чтобы у вас работало а я придумаю как соединить

exebook avatar Apr 03 '14 19:04 exebook

Пока что на ум прихожит использование fc-list и парсинг выхлопа :)

kyrylo avatar Apr 03 '14 19:04 kyrylo

У меня работает. для этого я

  1. изменил include, как писал выше.
  2. переписал пути к шрифтам. Можно это сделать параметрами configure или как-то так?

Dronte avatar Apr 03 '14 19:04 Dronte

пока можно просто добавить /usr/share/fonts/TTF в список сканируемых каталогов

exebook avatar Apr 03 '14 19:04 exebook

а можете сделать find /usr/share/fonts/TTF|grep Mono чтобы я знал какие там есть моно шрифты

exebook avatar Apr 03 '14 19:04 exebook

у меня лично стоят вот эти: /usr/share/fonts/TTF/DejaVuSansMono.ttf /usr/share/fonts/TTF/DejaVuSansMono-BoldOblique.ttf /usr/share/fonts/TTF/DejaVuSansMono-Oblique.ttf /usr/share/fonts/TTF/FreeMonoBold.ttf /usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf /usr/share/fonts/TTF/FreeMono.ttf /usr/share/fonts/TTF/FreeMonoBoldOblique.ttf /usr/share/fonts/TTF/FreeMonoOblique.ttf

Dronte avatar Apr 03 '14 19:04 Dronte

прикрутил fc-list, на Mint работает. пожалуйста проверьте на Arch

exebook avatar Apr 03 '14 21:04 exebook

Да, если исправить инклуд, то все в порядке. Исправьте инклуд пожалуйста.

Dronte avatar Apr 04 '14 12:04 Dronte

Проблема в том, что вы написали "Если заменить #include на #include тогда оно компилируется" и я не понимаю, что это значит. Скорее всего гитхаб съел какие-то символы, а может в чём-то другом дело. Я ещё вчера об этом подумал, но забыл спросить, что на самом деле надо поменять и на что.

exebook avatar Apr 04 '14 13:04 exebook

О, оказывается если у комента нажать кнопку правки, то можно увидеть в чём дело, оказывается надо заменить freetype/freetype.h на просто freetype.h. Посмотрю что можно сделать.

exebook avatar Apr 04 '14 13:04 exebook

да я именно про это говорил.

Dronte avatar Apr 04 '14 13:04 Dronte

вот что у меня будет если сделать как вы предложили:

/usr/include/ft2build.h:56:38: fatal error: freetype/config/ftheader.h: No such file or directory

так что это не вариант. можете выполнить комманду чтобы я понял что к чему

find /usr/include|grep -E '(freetype.h|ft2)'

exebook avatar Apr 04 '14 13:04 exebook

В том-то и дело, что в разных системах заголовочные файлы лежат в разных местах, и надо придумать универсальный метод. Попробуйте на вашей системе заменить freetype/freetype.h на freetype.h и изменить в binding.gyp строчку "include_dirs": ["/usr/include/freetype2", "osnova", "extra"], на "include_dirs": ["/usr/include/freetype2","/usr/include/freetype2/freetype", "osnova", "extra"],

Dronte avatar Apr 04 '14 15:04 Dronte

о, заработало) попробуйте плз похоже вы придумали универсальный метод

exebook avatar Apr 04 '14 15:04 exebook

У меня работает, но тепеь еще проблема - нужно уметь говорить npm-gyp install чтобы установить x11clip и glxwin в систему. Желательно это делать так: npm-gyp install --prefix dir чтобы он ставился в директорию dir

Dronte avatar Apr 05 '14 10:04 Dronte