[РЕШЕНО]Сборка fdutils

Здраствуйте , помогите собрать fdutils пакет ( утилита для флопи ) , пишет - fdmount.c:25: error:include file 'linux/ext2_fs.h' not found
make: *** [Makefile:8: compile] Error 2

aur-mirror /fdutils/PKGBUILD :
# Contributor: Laurent Hilsz <laurent.hilsz@laposte.net>
pkgname=fdutils
pkgver=5.5
pkgrel=3
arch=('i686' 'x86_64')
pkgdesc="Utilities for the Linux floppy driver, i.e. for formatting extra capacity disks"
url="http://fdutils.linux.lu/index.html"
makedepends=('texinfo' 'tcc')
depends=('glibc' 'tcc' 'texinfo')
source=(http://fdutils.linux.lu/$pkgname-$pkgver.tar.gz)
md5sums=('2b8b65f52378158a4a21e455566b456d')
#install=fdutils.install
options=('!strip' '!makeflags' '!buildflags')
license=('GPL')

#build() {
package() {
cd $srcdir/$pkgname-$pkgver
install -d $pkgdir/etc
export CC=tcc
./configure --prefix=$pkgdir/usr --sysconfdir=$pkgdir/etc \
--infodir=$pkgdir/usr/share/info || return 1
sed -i 's+-c -s -m+-c -m+g' src/Makefile || return 1
make || return 1
make install || return 1
}

Build брал здесь : https://searchcode.com/codesearch/view/40121919/

Спасибо .
safemode
fdmount.c:25: error:include file 'linux/ext2_fs.h' not found
Не находит ext2_fs.h .......... но вряд ли и получится собрать - я сейчас попробовал, но без PKGBUILD - просто скачал fdutils-5.5.tar.gz - распаковал, configure прошел нормально, make на отсутствие ext2_fs.h не заругался (я закинул этот файл в /usr/include/linux/ ), но, учитывая, что пакет fdutils слишком старый, а gcc далеко ускакал вперед, то получил кучу варнингов и ошибок и в конце не собралось, сообщил на две ошибки - что то и не понял какие (особо не вдавался).
Попробуй, может исправишь эти ошибки, если имеешь опыт. А если опыта нет, то лучше и не пробовать.
Но можно попробовать скачать готовый deb пакет fdutils (есть в Ubuntu и Debian) и переконвертить его в наш пакет (поищи в блогах - там написано про конверторы пакетов).
vasek
и переконвертить его в наш пакет
чо там конвертить то, распакавал, закинул файлы по нужным папкам и запаковал... гатова
vasek
Но можно попробовать скачать готовый deb пакет fdutils (есть в Ubuntu и Debian) и переконвертить его в наш пакет (поищи в блогах - там написано про конверторы пакетов).

Спасибо , вы мне помогли советом .
Буду тестить этот пакет :)
Установка deb пакетов : https://www.ostechnix.com/convert-deb-packages-arch-linux-packages/
vasek
make на отсутствие ext2_fs.h не заругался (я закинул этот файл в /usr/include/linux/ ), но, учитывая, что пакет fdutils слишком старый, а gcc далеко ускакал вперед, то получил кучу варнингов и ошибок и в конце не собралось, сообщил на две ошибки - что то и не понял какие (особо не вдавался).
После ./configure видно что ему не хватает старых заголовков:
checking linux/ext_fs.h usability... no
checking linux/ext_fs.h presence... no
checking for linux/ext_fs.h... no
checking linux/xia_fs.h usability... no
checking linux/xia_fs.h presence... no
checking for linux/xia_fs.h... no
ext2_fs.h его вроде даже не интересует.
RusWolf
ext2_fs.h его вроде даже не интересует.
Я обычно на это не смотрю, запускаю make и разбираюсь.
В данном случае после запуска make получаем фатальную ошибку при сборке fdmount
gcc -Wall -g -O2 -I. -I.  -DHAVE_CONFIG_H -DSYSCONFDIR=\"/usr/local/etc\"   fdmount.c   -o fdmount
fdmount.c:25:10: фатальная ошибка: linux/ext2_fs.h: Нет такого файла или каталога
 #include <linux/ext2_fs.h>
Смотрим строку 25 в fdmount.c и видим - #include <linux/ext2_fs.h>
Проверяем и убеждаемся, что в нашем ядре, такого файла действительно нет.
Скопировал из имеющихся у меня сорцов и запустил make по новой - прошло, этой фатальной ошибки нет, но появилась куча других ошибок, но эти ошибки уже обусловлены самим исходником и компилятором
gcc -Wall -g -O2 -I. -I.  -DHAVE_CONFIG_H -DSYSCONFDIR=\"/usr/local/etc\"   fdmount.c   -o fdmount
In file included from fdmount.c:25:0:
/usr/include/linux/ext2_fs.h:33:15: ошибка: неизвестное имя типа «u64»
 static inline u64 ext2_image_size(void *ext2_sb)
               ^~~
/usr/include/linux/ext2_fs.h: В функции «ext2_image_size»:
/usr/include/linux/ext2_fs.h:38:10: ошибка: «u64» undeclared (first use in this function); did you mean «a64l»?
  return (u64)le32_to_cpup((__le32 *)(p + EXT2_SB_BLOCKS_OFFSET)) <<
          ^~~
          a64l
/usr/include/linux/ext2_fs.h:38:10: замечание: сообщение о каждом неописанном идентификаторе выдается один раз в каждой функции, где он встречается
/usr/include/linux/ext2_fs.h:38:14: ошибка: expected «;» before «le32_to_cpup»
  return (u64)le32_to_cpup((__le32 *)(p + EXT2_SB_BLOCKS_OFFSET)) <<
.....................................................................................................
fdmount.c: В функции «id_fstype»:
fdmount.c:447:13: ошибка: dereferencing pointer to incomplete type «struct ext2_super_block»
     if (ext2->s_magic==EXT2_SUPER_MAGIC
...................................................................................................
make[1]: *** [<встроенное>: fdmount] Ошибка 1
и fdmount не собрался. Нужно смотреть и разбираться, а это не так то просто, не зная в совершенстве C и основы данной проги. Но не исключено, что ошибки могут быть и дальше.
vasek
Нужно смотреть и разбираться, а это не так то просто, не зная в совершенстве C и основы данной проги. Но не исключено, что ошибки могут быть и дальше.
Без углублённых знаний видно, что вместо ext2_fs.h нужен ext_fs.h, с совсем другими объявленными функциями.
RusWolf
Без углублённых знаний видно, что вместо ext2_fs.h нужен ext_fs.h, с совсем другими объявленными функциями.
Давай попробуем разобраться.
1. Если бы в configure была серъезная ошибка, то в конце вывода была бы строка, типа
configure: error: ***  <что то там> header not found
Если такая строка отсутствует, тот можно смело переходить к make и ловить ошибки там. У нас такой строки нет и считаем что все нормально.
2. Если делать по феншею, используя PKGBUILD , то мы остановимся на той же ошибке
fdmount.c:25:10: фатальная ошибка: linux/ext2_fs.h: Нет такого файла или каталога
и плясать мы будем от этой ошибки, чтобы устранить ее.

3. Проведем более подробный анализ. Если воспользоваться поиском наличия словосочетания ext_fs в файлах пакета (например, используя утилиты rg, ag и др.), то увидим, что ext_fs встречается в файлах
fdutils-5.5/configure.in
AC_CHECK_HEADERS(linux/ext_fs.h linux/xia_fs.h sys/sysmacros.h)
С этим все понятно - обязательная проверка
fdutils-5.5/configure
for ac_header in linux/ext_fs.h linux/xia_fs.h sys/sysmacros.h  do
С этим то же все понятно - обязательная проверка
fdutils-5.5/config.h и fdutils-5.5/config.h.in
/* Define to 1 if you have the <linux/ext_fs.h> header file. */
/* #undef HAVE_LINUX_EXT_FS_H */
А вот это уже важно - мы не используем старую, самую 1-ую файловую систему, и оставляем все по умолчанию - т.е. вопросов по ней быть не должно.
fdutils-5.5/src/fdmount.c
#ifdef HAVE_LINUX_EXT_FS_H
#include <linux/ext_fs.h>
#endif

#include <linux/ext2_fs.h>
И получается, что ext_fs.h нам не нужен, а вот без ext2_fs.h не обойтись.

Если я не прав, поясни, буду только рад - я к критике отношусь положительно. Это всегда на пользу.
Эта фигня еще и конфигурационный файл создает как $prefix/etc , т.е. при установке или перепишет каталог /etc или /usr/etc, если вас угораздит делать это под rootом или пошлет куда-то далеко, если под обычным пользователем. Но изменив в исходниках, а именно в файле src/fdmount.c 25 строку с #include <linux/ext2_fs.h> на #include <ext2fs/ext2_fs.h> и пременив ./configure --prefix=/tmp/fdutils я спокойно этот древний хлам скомпилировал и установил, если у вас все в порядке с преобразованием texi файлов в info и man. Если же ругается при создании документации, можно компилировать и устанавливать из каталога src. Желаю удачи в ваших археологических раскопках.
ЗЫ. $prefix/etc - это регулярный файл, не каталог!
anode, спасибо за подсказку - я что то и не додумался подправить #include <ext2fs/ext2_fs.h>
В этом случае в самом деле не нужно никаких файлов. Попробовал, как ты и описал, прошло нормально, но в конце уперлось в преобразование texi файлов. Убедился, дальше пробовать не стал.
 
Зарегистрироваться или войдите чтобы оставить сообщение.