1

Доброго времени!
Собираю версию 1.1:

+ открыть спойлер
...
./configure \
--extra-cflags="$SLKCFLAGS" \
--target=$ARCH-slackware-linux \
--prefix=/usr \
--confdir=/etc/mplayer \
--mandir=/usr/man \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--enable-gui \
--enable-menu \
--enable-dynamic-plugins \
--enable-gl \
--with-xvmclib=XvMCNVIDIA \
--with-vidix-drivers=nvidia \
--enable-fbdev \
--disable-arts \
--disable-pulse \
--disable-ossaudio \
--disable-esd \
--disable-jack \
--disable-nas \
--disable-sgiaudio \
--disable-sunaudio \
--disable-kai \
--disable-dart \
--disable-win32waveout \
--disable-radio \
--disable-radio-v4l2 \
--disable-radio-bsdbt848 \
--disable-tv \
--disable-tv-v4l1 \
--disable-tv-v4l2 \
--disable-tv-bsdbt848 \
--disable-bluray \
--disable-dvb \
--enable-libdvdcss-internal \
--enable-dvdread-internal \
--disable-unrarexec \
--disable-inet6 \
--disable-ftp \
--disable-win32dll \
--disable-pvr \
--disable-cddb \
--disable-w32threads \
--charset=utf-8 \
--language-doc=en,ru \
--language-man=en,ru \
--language-msg=ru \
--language=en,ru
...

Не собирается, ругается на разные файлы, что "нет такого файла", например, очередная попытка:

libdvdnav/read_cache.c:37:31: fatal error: dvdread/nav_types.h: No such file or directory
compilation terminated.

Исправляю патчем, утыкаюсь в следующий, снова делаю патч... Это все понятно и вопросов не вызывает. Но меня терзают сомнения, а на верном ли я пути? И стоит ли после победы отправить отчет и патчи разработчикам?
AlienBOB собирал по-другому, но там, по-моему, тоже куча проблем, логов не сохранилось.
UPD: Со штатным libdvdread-4.2.0 тоже не собирается...

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

2 (22.03.2013 21:17:27 отредактировано bormant)

У AlienBOB-а сейчас лежит слакбилд для 1.1.2 (там в одном месте случайный перевод строки, нужно поправить, это несложно, вот тут:
         && git checkout $(git rev-list -n 1 --before="`date -d $SRCVER`" $BRANC
H) \
), не пойдёт?
Попробовать собрать? Собранные пакеты там тоже рядом.

ps. http://taper.alienbase.nl/mirrors/peopl … ds/ffmpeg/
pps. Собранные лучше брать там: http://taper.alienbase.nl/mirrors/peopl … ds/ffmpeg/

3

Хм. Перевод строки - мелочь, я и сам бы нашел ab

bormant пишет:

ps.
pps.

Спасибо, попробую, но сначала, пожалуй, дожму свой.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

4

Приехали:

libdvdcss/ioctl.c:273:5: error: #error "DVD ioctls are unavailable on this system"

Это еще почему??? Закон был в Америке на эту тему?
И да, эта же версия (1.1) от Alien'а просит:

If you want to play encrypted DVD's you need to install libdvdcss separately.

и по умолчанию:

USE_PATENTS:-"NO"

и MPlayer будет собираться с

DO_PATENTED="--disable-libdvdcss-internal \
               --disable-mp3lame --disable-mp3lame-lavc \
               --disable-libopencore_amrnb \
               --disable-libopencore_amrwb"

Значит, в связи с этим законом, код, который позволяет смотреть DVD, удалили? Что ж, пойду собирать-ставить внешнюю libdvdcss...

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

5

У нас с вами какой-то разный Интернет, по ссылкам в ps

#USE_PATENTS="NO"
USE_PATENTS=${USE_PATENTS:-"YES"}

первая строка с комментарием -- "#" в начале строки.

6

Там 1.1.2, а я собирал 1.1, взятую с сайта MPlayer'a, слакбилдом Alien'а, который есть на диске с исходниками Slackware-14, еще есть checkout недельной давности, попробую с ним. Не получится (а, скорее всего, так и будет) - попробую тогда ваши ссылки. Но, думаю, тут дело не в версии плеера, а в том, что он почему-то не видит заголовки {dvd,dvdio}.h и еще какой-то.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

7

Если что,
-- libdvdcss есть там: http://taper.alienbase.nl/mirrors/peopl … libdvdcss/
-- FFmpeg 1.2 "Magic", вышедший 2013-03-15, замечательно собирается слакбилдом от AlienBOB:

# bash *Build
...
Slackware package /home/bld/ffmpeg-1.2-x86_64-1alien.txz created.

8

При сборке версии 1.1 патчить пришлось файлы:

+ открыть спойлер
./libdvdnav/vm/decoder.c
./libdvdnav/dvdnav.c
./libdvdnav/dvdnav/dvdnav.h
./libdvdnav/highlight.c
./libdvdread4/dvdread/ifo_read.h
./libdvdread4/dvdread/ifo_types.h
./libdvdnav/navigation.c
./libdvdnav/read_cache.c
./libdvdnav/remap.c
./libdvdnav/searching.c
./libdvdnav/settings.c
./stream/stream_dvd_common.h
./stream/stream_dvd.h
./libdvdnav/vm/vm.c
./libdvdnav/vm/vmcmd.c

А все дело в том, что в них встречается следующее:

+ открыть спойлер
*** ./libdvdnav/vm/decoder.c.orig    2013-03-22 22:52:46.013316212 +0400
--- ./libdvdnav/vm/decoder.c    2013-03-22 22:53:19.459638556 +0400
***************
*** 30,37 ****
  #include <limits.h>
  #include <string.h>  /* For memset */
  #include <sys/time.h>
! #include <dvdread/nav_types.h>
! #include <dvdread/ifo_types.h> /* vm_cmd_t */
  
  #include "dvdnav/dvdnav.h"
  #include "remap.h"
--- 30,37 ----
  #include <limits.h>
  #include <string.h>  /* For memset */
  #include <sys/time.h>
! #include <libdvdread4/dvdread/nav_types.h>
! #include <libdvdread4/dvdread/ifo_types.h> /* vm_cmd_t */
  
  #include "dvdnav/dvdnav.h"
  #include "remap.h"

И примерно такие изменения нужно сделать во всех этих файлах. Цель - воспроизведение DVD без выкачивания "стороннего" ПО, например, того же ffmpeg - в MPlayer же все для этого и так есть.
Внешняя libdvdcss версии

ls -l /var/log/packages/libdvdcss-1.2.13-i486-1_yars 
-rw-r--r-- 1 root root 2862 марта 23 01:11 /var/log/packages/libdvdcss-1.2.13-i486-1_yars

была взята с http://developers.videolan.org/libdvdcss/. Но это все равно не решает проблему с DVD ioctl's, и выходит, ее отдельность значения не имеет. bw
UPD: Собственно проблема, с которой началась тема - решается патчами, подобными приведенному.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

9 (23.03.2013 20:59:02 отредактировано bormant)

В таких случаях

-#include <dvdread/nav_types.h>
+#include <libdvdread4/dvdread/nav_types.h>

достаточно предать дополнительный путь к заголовочным файлам, добавить в CFLAGS / CXXFLAGS
-I/usr/include/libdvdread4

или, если используется pkgconfig, проверить и, если нужно, исправить пути к заголовкам в его файлах, а исходники патчить не надо.


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

pps. libdvdcss -- это про http://ru.wikipedia.org/wiki/Content_Scramble_System , а не про DVD ioctl.

10

Спасибо, учту на будущее.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

11

bormant пишет:

Указали бы на предмет патченья раньше

Ну, в первом сообщении же есть строчка с ошибкой...

bormant пишет:

DVD ioctl.

C этим отдельная проблема, она вылезла уже после того, как я разобрался с патчами, вот теперь думаю, как бы ее победить. В системе заголовочные файлы dvd.h, cdio.h присутствуют, но нету dvdio.h, соответсвенно, configure выдает:

...
Checking for sys/dvdio.h ... no 
Checking for sys/cdio.h ... no 
Checking for linux/cdrom.h ... yes 
Checking for dvd.h ... no 
...
Checking for VCD support ... no (not supported on this OS)
...
Checking for dvdread ... yes (external)
Checking for internal libdvdcss ... no 
Checking for libcdio ... yes 
Checking for cdparanoia ... no (using libcdio)
...
Checking for DVD support (libdvdnav) ... no

Пойду искать пакет, в который dvdio.h входит...

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

12

yars⇓ пишет:

в первом сообщении же есть строчка с ошибкой...

но нет строчки с исправлением...
А как иначе догадаться, что проблема
fatal error: dvdread/nav_types.h: No such file or directory
не в том, что чего-то не хватает, а в том, что оно лежит по другому пути. А как только это стало видно:
-#include <dvdread/nav_types.h>
+#include <libdvdread4/dvdread/nav_types.h>
так и соответствующее решение сразу видно -- добавить в пути поиска заголовочных файлов, в которых происходит поиск (в угловых скобках #include <...>).

13

bormant пишет:

но нет строчки с исправлением...

Ну, на тот момент у меня не все патчи были готовы, если кому-нибудь они нужны, могу выложить.
UPD: Конечно, да, указать эти пути в CFLAGS/CXXFLAGS правильнее, но раз в исходниках пути неверные, то нужен кто-то, кто бы их наконец исправил ab

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

14

yars,
не нужны там патчи исходников. Или слакбилда, или Makefile-а максимум.

15

bormant пишет:

В таких случаях
достаточно предать дополнительный путь к заголовочным файлам, добавить в CFLAGS / CXXFLAGS
-I/usr/include/libdvdread4

Сорри за вторжение, но возник аналогичный вопрос по сборке hotot из git. Инклюды Qt разбросаны по  директориям /usr/lib/qt/include/other_dir. Каким образом их указывать в CFLAGS / CXXFLAGS чтобы были видны инклюды из всех этих other_dir ?

16

Как-то так:

-I/usr/lib/qt/include/other_dir -I/usr/lib/include/some_dir
Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

17

Компилятор ищет включаемые директивой #include <...> файлы в наборе путей, аналогично тому, как ищется исполняемый файл в путях переменной PATH.
Набор путей задаётся переменной окружения CPATH для всего набора gcc, C_INCLUDE_PATH для C, CPLUS_INCLUDE_PATH для C++, а также параметром командной строки -I, который может повторяться более одного раза, добавляя пути в набор поиска. Подробнее в gcc(1).
Если включение файлов выглядит как
#include <other_dir/header>
, достаточно добавить в пути поиска
/usr/lib/qt/include
. Если как
#include <header>
, то придётся перечислить необходимые
/usr/lib/qt/include/other_dir
.
Вообще говоря, указанная задача правильного указания набора путей, обеспечивающих сборку, лежит на разработчике. Ему в этом помогают autotools, pkgconfig, ... Но если дистрибутив имеет особенности, которые трудно было предвидеть при разработке, имеющимися средствами вполне возможно наставить на путь истинный в обоих смыслах.

18

yars пишет:

Как-то так:

-I/usr/lib/qt/include/other_dir -I/usr/lib/include/some_dir

Да вот не катит почему то.

19

Задавал перечисления -I/1 -I/2 -I/3,  видит только 1

20

SergMarkov,
можно конкретный пример того, что в файле в #include, и того, что в команде?

$ mkdir -p /home/bld/include/inc{1,2,3}
$ for n in 1 2 3; do echo -e "#define INC$n $n" > /home/bld/include/inc$n/inc$n.h; done
$ find /home/bld/include/
/home/bld/include/
/home/bld/include/inc1
/home/bld/include/inc1/inc1.h
/home/bld/include/inc2
/home/bld/include/inc2/inc2.h
/home/bld/include/inc3
/home/bld/include/inc3/inc3.h

$ cat <<EOF >tst.c
#include <stdio.h>
#include <inc1/inc1.h>
#include <inc2/inc2.h>
#include <inc3/inc3.h>

void main(void) { printf("%d, %d, %d\n", INC1, INC2, INC3); }
EOF

$ gcc tst.c
tst.c:2:23: фатальная ошибка: inc1/inc1.h: Нет такого файла или каталога
компиляция прервана.

Добавляем пути к заголовкам:

$ gcc -I/home/bld/include -o tst tst.c
$ ./tst
1, 2, 3

Другой вариант:

$ cat <<EOF >tst2.c
#include <stdio.h>
#include <inc1.h>
#include <inc2.h>
#include <inc3.h>

void main(void) { printf("%d, %d, %d\n", INC1, INC2, INC3); }
EOF
$ gcc -I/home/bld/include/inc{1,2,3} -o tst2 tst2.c
$ ./tst2
1, 2, 3

Башизм раскроется в 3 директивы -I/...

21 (24.03.2013 13:18:36 отредактировано bormant)

И ещё момент. В 64-битной Slackware пути к тем заголовкам будут:
/usr/lib64/qt/include

К слову,

qt/CMakeLists.txt пишет:

set(HOTOT_QT4_INCLUDE_DIRS
  ${QT_INCLUDE_DIR}
  ${QT_QTCORE_INCLUDE_DIR}
  ${QT_QTGUI_INCLUDE_DIR}
  ${QT_QTWEBKIT_INCLUDE_DIR}
  ${QT_QTNETWORK_INCLUDE_DIR})

22

bormant пишет:

SergMarkov,
можно конкретный пример того, что в файле в #include, и того, что в команде?

Сорри, это мой косяк, указал -I в скрипте с configure, но не указал в скрипте с make (они у меня разнесены по разным скриптам) В результате подхватывается только первый -I

23

bormant пишет:

И ещё момент. В 64-битной Slackware пути к тем заголовкам будут:
/usr/lib64/qt/include

К слову,

qt/CMakeLists.txt пишет:

set(HOTOT_QT4_INCLUDE_DIRS
  ${QT_INCLUDE_DIR}
  ${QT_QTCORE_INCLUDE_DIR}
  ${QT_QTGUI_INCLUDE_DIR}
  ${QT_QTWEBKIT_INCLUDE_DIR}
  ${QT_QTNETWORK_INCLUDE_DIR})

Только толку нуль. Он их не видит. Да и сам hotot отказывается  подсоединяться к твиттеру, но это уже другая песня. Хоть кедолибы ставь для choqok :-) Есть плагин для пиджина, но он малофукционален. Вообще с твиттер клиентами какая то смурь, одни старые и не поддерживают новые протоколы твиттера, другие на air, еще с одними, как с hotot, какие то проблемы с авторизацией, даже в новых версиях. Стабильно работает только instantbird, но уж больно он жирен до ресурсов.

24

На Slackware 14.0 64-бит не заметил проблем со сборкой Hotot:

$ git clone git://github.com/lyricat/Hotot.git
$ cd Hotot
$ less README.md
$ mkdir build; cd build
$   cmake \
    -DCMAKE_C_FLAGS:STRING="-O2 -fPIC" \
    -DCMAKE_CXX_FLAGS:STRING="-O2 -fPIC" \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DLIB_SUFFIX=64 \
    -DMAN_INSTALL_DIR=/usr/man \
    -DCMAKE_BUILD_TYPE=Release ..
$ make
$ mkdir /tmp/package-hotot
$ make install DESTDIR=/tmp/package-hotot
$ su -
# cd /tmp/package-hotot
# makepkg -c y -l y ../tmp/hotot-0.9.8.5git-x86_64-1.txz