Автор Тема: Научите меня, пожалуйста, составлять файл spec  (Прочитано 27300 раз)

Оффлайн LanuHum

  • Завсегдатай
  • *
  • Сообщений: 171
    • Email
В завершение ко всему установка собранного пакета написала вот чего:
[root@localhost lib64]# rpm -Uhv /home/lanuhum/RPM/RPMS/x86_64/makehuman-0.9.1-0.3.rc1a.alt.x86_64.rpm
ошибка: неудовлетворенные зависимости:
        libanimorph.so.0()(64bit)   нужен для makehuman-0.9.1-0.3.rc1a.alt
        libmhgui.so.0()(64bit)   нужен для makehuman-0.9.1-0.3.rc1a.alt
[root@localhost lib64]#
Для,ёханый бабай!!! >:(

Alexei_VM

  • Гость
Я так понимаю, что я не знаю как заставить сборку программы устанавливать свои файлы не в local, а непосредственно в /usr, и не в /lib, а в /lib64. Я ранее делал принудительную установку. Прописывал в спеке: mv lib lib64 и mv /usr/local/lib64 /usr. Это,наверное, неправильно. Файлы оказывались, там где нужно, но думали, что они всё ещё не на месте... 

Во-первых, ничего не должно ставиться в /usr/local
Во-вторых, откройте наконец для себя параметры скрипта configure

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR           user executables [EPREFIX/bin]
  --sbindir=DIR          system admin executables [EPREFIX/sbin]
  --libexecdir=DIR       program executables [EPREFIX/libexec]
  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
  --libdir=DIR           object code libraries [EPREFIX/lib]
  --includedir=DIR       C header files [PREFIX/include]
  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
  --infodir=DIR          info documentation [PREFIX/info]
  --mandir=DIR           man documentation [PREFIX/man]


Оффлайн LanuHum

  • Завсегдатай
  • *
  • Сообщений: 171
    • Email
Цитировать
Во-вторых, откройте наконец для себя параметры скрипта configure

Ну что, так и писать: ./configure --prefix=/usr --libdir=/usr/lib64?

Alexei_VM

  • Гость
Цитировать
Во-вторых, откройте наконец для себя параметры скрипта configure

Ну что, так и писать: ./configure --prefix=/usr --libdir=/usr/lib64?

Думаю, что лучше использовать макрос %configure и прочие макросы. В конце концов, подглядите в каком-нить пакете, благо исходники доступны.

%configure --enable-pkgdatadir=%_datadir/%name --enable-pkglibdir=%_libdir/%name

Оффлайн LanuHum

  • Завсегдатай
  • *
  • Сообщений: 171
    • Email
Цитировать
Думаю, что лучше использовать макрос %configure
C этим макросом ошибка получается и брань на libtool, если autoreconf -fisv перед ним пишу, то в конце ошибка выскакивает.
Ну вот написал ./configure --prefix=/usr --libdir=/usr/lib64.  Пакет собрался вроде бы нормально, а смотрю /pkgconfig/animorph.pc:
Цитировать
prefix=/usr
exec_prefix=/usr
libdir=${prefix}/lib
includedir=/usr/include

Name: animorph
Description: 3D Animation and Morph Library
Version: 0.3
Requires:
Conflicts:
Libs: -L${libdir} -lanimorph
Cflags: -I${includedir}

Фигня какая-то. Почему он пишет эту директорию? Я посмотрел другие - написано lib64. Библиотека то в lib64.
« Последнее редактирование: 04.01.2009 15:06:28 от LanuHum »

Alexei_VM

  • Гость
Цитировать
Думаю, что лучше использовать макрос %configure
C этим макросом ошибка получается и брань на libtool, если autoreconf -fisv перед ним пишу, то в конце ошибка выскакивает.
Нет точной цитаты ошибки -- нет ошибки.

И кроме того, использование стандартных макросов правильнее, чем их неиспользование.


Ну вот написал ./configure --prefix=/usr --libdir=/usr/lib64.  Пакет собрался вроде бы нормально, а смотрю /pkgconfig/animorph.pc:
Цитировать
prefix=/usr
exec_prefix=/usr
libdir=${prefix}/lib
includedir=/usr/include

Фигня какая-то. Почему он пишет эту директорию? Я посмотрел другие - написано lib64. Библиотека то в lib64.

Может потому, что автор исходной программы не подумал о 64бит? И надо где-нить че-нить пропатчить?

Drool

  • Гость
1. C этим макросом ошибка получается и брань на libtool, если autoreconf -fisv перед ним пишу, то в конце ошибка выскакивает.
2. Ну вот написал ./configure --prefix=/usr --libdir=/usr/lib64...

1. autoreconf не всем исходникам подходит, к примеру если попытаться такое сделать для кедной софтины - ничего хорошего не выйдет.
2. --libdir=/usr/lib64 нельзя использовать, иначе на 32-битной системе это сломает софтину, используйте --libdir=%_libdir, и еще раз - все-таки используйте %configure.

Оффлайн LanuHum

  • Завсегдатай
  • *
  • Сообщений: 171
    • Email
Цитировать
Нет точной цитаты ошибки -- нет ошибки.
Вот вам цитата из спека:
Цитировать
%prep
%setup -q

%configure --prefix=/usr --libdir=%_libdir
%build
%make
А вот из терминала:
Цитировать
checking for stdint.h... yes
checking for unistd.h... yes
checking dlfcn.h usability... yes
checking dlfcn.h presence... yes
checking for dlfcn.h... yes
checking how to run the C++ preprocessor... x86_64-alt-linux-g++ -E
checking the maximum length of command line arguments... 98304
checking command to parse /usr/bin/nm -B output from x86_64-alt-linux-gcc object... ok
checking for objdir... .libs
checking for x86_64-alt-linux-ar... no
checking for ar... ar
checking for x86_64-alt-linux-ranlib... no
checking for ranlib... ranlib
checking for x86_64-alt-linux-strip... no
checking for strip... strip
checking for correct ltmain.sh version... no
configure: error:

*** [Gentoo] sanity check failed! ***
*** libtool.m4 and ltmain.sh have a version mismatch! ***
*** (libtool.m4 = 1.5.24, ltmain.sh = 1.5.26) ***

Please run:

  libtoolize --copy --force

if appropriate, please contact the maintainer of this
package (or your distribution) for help.

ошибка: Неверный код возврата из /home/lanuhum/tmp/rpm-tmp.54276 (%prep)


Ошибки сборки пакетов:
    Неверный код возврата из /home/lanuhum/tmp/rpm-tmp.54276 (%prep)
[lanuhum@localhost mhgui-0.2]$

Оффлайн LanuHum

  • Завсегдатай
  • *
  • Сообщений: 171
    • Email
Получается так, что оно собирает мне 32-битные библиотеки, а самого мэйкхумана в 64-битном варианте, поэтому он и просил обе эти библиотеки. Но, когда я линки делал, я же запускал оболочку и своими глазами видел, что программа работает. Значит, библиотеки animorph, mhgui 32бит и 64бит не отличаются...

Оффлайн LanuHum

  • Завсегдатай
  • *
  • Сообщений: 171
    • Email
Ура,товарищи!!! :) :) :)
С этой цитатой всё с самого начала пересобрал,и получилось!!!

Цитировать
./configure --prefix=/usr --libdir=%_libdir

Drool

  • Гость
*** [Gentoo] sanity check failed! ***
*** libtool.m4 and ltmain.sh have a version mismatch! ***
*** (libtool.m4 = 1.5.24, ltmain.sh = 1.5.26) ***

Вот бы все п.1 правил форума читали, вопросов было бы меньше...
http://lists.altlinux.org/pipermail/sisyphus/2006-January/296853.html

Оффлайн LanuHum

  • Завсегдатай
  • *
  • Сообщений: 171
    • Email
Цитировать
Вот бы все п.1 правил форума читали, вопросов было бы меньше...
http://lists.altlinux.org/pipermail/sisyphus/2006-January/296853.html

Цитировать
1. autoreconf не всем исходникам подходит, к примеру если попытаться такое сделать для кедной софтины - ничего хорошего не выйдет.

Drool ,это две ваши цитаты. Вы, вообще, контролируете ситуацию? Вы даёте ссылку на реконф, про который сами говорите, что он не всем подходит, и про который я вам говорю, что мне не подходит. Вы сами запутываете, а потом хотите, чтобы меньше вопросов было...


Но, я, собственно ни за этим сюда зашёл, а по поводу составления спека. Выскакивает вот такая ошибка:
Цитировать
CMake Error at cmake/modules/OutOfSourceBuild.cmake:4 (MESSAGE):
  Aqsis requires an out of source build.  Please create a separate build
  directory and run 'cmake path_to_source [options]' there.
Call Stack (most recent call first):
  CMakeLists.txt:21 (INCLUDE)


-- Configuring incomplete, errors occurred!
ошибка: Неверный код возврата из /home/lanuhum/tmp/rpm-tmp.19283 (%build)


Ошибки сборки пакетов:
    Неверный код возврата из /home/lanuhum/tmp/rpm-tmp.19283 (%build)
[lanuhum@localhost ~]$

При этом  в спеке у меня указано вот что:
Цитировать
cmake /home/lanuhum/tools/build/sources/aqsis-1.4.1 -DCMAKE_INSTALL_PREFIX=/usr \
    -DAQSIS_USE_FLTK:BOOL=ON \
    -DAQSIS_USE_OPENEXR:BOOL=ON \
    -DAQSIS_BOOST_LIB_SUFFIX:STRING=-mt \
    -DCMAKE_CMAKE_BUILD_TYPE=Release \
    -DAQSIS_ENABLE_TESTING:BOOL=OFF \
    -DAQSIS_USE_PLUGINS:BOOL=ON \
    -DAQSIS_USE_TIMERS:BOOL=ON \
    -DSYSCONFDIR:STRING=%{_sysconfdir} \
    -DLIBDIR="%{_libdir}" \
    -DDEFAULT_DISPLAYPATH="%{_libdir}/%{name}"

Нужно как-то прописать, чтоб установка проводилась в другом каталоге, а не там, где src, это как в спеке выглядеть должно?

Alexei_VM

  • Гость
При этом  в спеке у меня указано вот что:
Цитировать
cmake /home/lanuhum/tools/build/sources/aqsis-1.4.1 -DCMAKE_INSTALL_PREFIX=/usr \

Вот прям так, с полным указанием пути в домашнюю директорию пользователя? Зачем такое извращение?

При сборке пакета по умолчанию рабочий каталог тот, в которой распакованы исходники. Вы перед вызовом cmake вполне можете создать отдельный каталог для сборки (о чем и говорит вам cmake), перейти в него и продолжить работу в нем. Че-нить типа:
mkdir build
pushd ./build
cmake BLA-BLA-BLA


Оффлайн LanuHum

  • Завсегдатай
  • *
  • Сообщений: 171
    • Email
Цитировать
+ mkdir build
+ pushd ./build
~/RPM/BUILD/aqsis-1.4.1/build ~/RPM/BUILD/aqsis-1.4.1
+ cmake . -DCMAKE_INSTALL_PREFIX=/usr -DAQSIS_USE_FLTK:BOOL=ON -DAQSIS_USE_OPENEXR:BOOL=ON -DAQSIS_BOOST_LIB_SUFFIX:STRING=-mt -DCMAKE_CMAKE_BUILD_TYPE=Release -DAQSIS_ENABLE_TESTING:BOOL=OFF -DAQSIS_USE_PLUGINS:BOOL=ON -DAQSIS_USE_TIMERS:BOOL=ON -DSYSCONFDIR:STRING=/etc -DLIBDIR=/usr/lib64 -DDEFAULT_DISPLAYPATH=/usr/lib64/aqsis
CMake Error: The source directory "/home/lanuhum/RPM/BUILD/aqsis-1.4.1/build" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
ошибка: Неверный код возврата из /home/lanuhum/tmp/rpm-tmp.97009 (%build)

Заменил pushd ./build на cd build

Цитировать
+ mkdir build
+ cd build
+ cmake . -DCMAKE_INSTALL_PREFIX=/usr -DAQSIS_USE_FLTK:BOOL=ON -DAQSIS_USE_OPENEXR:BOOL=ON -DAQSIS_BOOST_LIB_SUFFIX:STRING=-mt -DCMAKE_CMAKE_BUILD_TYPE=Release -DAQSIS_ENABLE_TESTING:BOOL=OFF -DAQSIS_USE_PLUGINS:BOOL=ON -DAQSIS_USE_TIMERS:BOOL=ON -DSYSCONFDIR:STRING=/etc -DLIBDIR=/usr/lib64 -DDEFAULT_DISPLAYPATH=/usr/lib64/aqsis
CMake Error: The source directory "/home/lanuhum/RPM/BUILD/aqsis-1.4.1/build" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
ошибка: Неверный код возврата из /home/lanuhum/tmp/rpm-tmp.14792 (%build)

Оффлайн LanuHum

  • Завсегдатай
  • *
  • Сообщений: 171
    • Email
Цитировать
+ mkdir build
+ pushd ./build
~/RPM/BUILD/aqsis-1.4.1/build ~/RPM/BUILD/aqsis-1.4.1
+ cmake /home/lanuhum/RPM/SOURCES/aqsis-1.4.1 -DCMAKE_INSTALL_PREFIX=/usr -DAQSIS_USE_FLTK:BOOL=ON -DAQSIS_USE_OPENEXR:BOOL=ON -DAQSIS_BOOST_LIB_SUFFIX:STRING=-mt -DCMAKE_CMAKE_BUILD_TYPE=Release -DAQSIS_ENABLE_TESTING:BOOL=OFF -DAQSIS_USE_PLUGINS:BOOL=ON -DAQSIS_USE_TIMERS:BOOL=ON -DSYSCONFDIR:STRING=/etc -DLIBDIR=/usr/lib64 -DDEFAULT_DISPLAYPATH=/usr/lib64/aqsis
CMake Error at cmake/modules/OutOfSourceBuild.cmake:4 (MESSAGE):
  Aqsis requires an out of source build.  Please create a separate build
  directory and run 'cmake path_to_source [options]' there.
Call Stack (most recent call first):
  CMakeLists.txt:21 (INCLUDE)