LINUX.ORG.RU

как избавиться от libtool не избавляясь от automake?

 , ,


5

5

всем привет.

в первую очередь, попрошу фанатов cmake покинуть помещение, за исключением тех кто разбирается в предмете, и может сообщить что-то по теме. промахнувшихся темой буду нещадно френдить.

теперь, собственно, описание проблемы.

есть automake, есть много Makefile.am, в которых делается что-то вроде такого:

pkglib_LTLIBRARIES = mylibrary.la
mylibrary_la_SOURCES = mylibrary.c
mylibrary_la_LDFLAGS = -module

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

  • сгенерирует огромную кучу всяких файлов, типа .la, .lo, .lai, .Plo
  • при сборке будет автоматически использоваться libtool при подключении чужих библиотек, используя .la файлы в /usr/lib например
  • помимо mylibrary.so, будут сгенерированы mylibrary.so.0.0.0 и mylibrary.so.0, и засимлинканы друг на друга
  • при попытке кросскомпилить, или использовать не-системные версии библиотек при сборке, libtool ведет себя совершенно непредсказуемо, выдает бредовые ошибки, использует не те библиотеки которые ему сказано, и вообще говно.
  • .la файлы будут включены в install target, и создадут бесполезный мусор в /usr/lib
  • сборка статического билда очень усложняется, т.к. неизвестно, увидел ли libtool именно нужную библиотеку, или слинковался с системной (а это он умеет)
  • к библиотекам неявно прилинковывается всякий шлак, который добавляется по типу исходника — например, при сборке .cpp файлов автоматом к линку добавляется всякий libstdc++ и libgcc_s, даже если он не нужен, т.е. в скрипте libtool (некоторых версиях) можно увидеть добавление вот таких аргументов к командной строке "-lstdc++ -lm -lgcc_s -lc -lgcc_s", gcc_s 2 раза видимо для надежности.

короче, предполагается, что целевая аудитория данного треда в курсе о чем речь :)

ну и собсно, финальный вопрос. есть ли в природе какие-то альтернативные automake macros, чтобы вообще совсем навсегда избавиться от libtool?

что от макроса(-ов) требуется:

  • компилить .so, как с префиксом «lib», так и без него, т.е. как в libtool с -module
  • чтобы указание -lname линковало только libname.so из -L (с соблюдением стандартного search order), и всегда игнорировало .la файлы в $LIBDIR
  • чтобы никаких la файлов и versioned so не создавалось (опциональная возможность versioning приветствуется)
  • чтобы сборка работала на linux/win/osx/bsd (через gcc/llvmgcc)

понимаю, что вменяемого способа решить эту проблему может и не быть, поэтому предложения полной смены билд системы тоже приветствуются. но альтернативная система не должна требовать установки ничего кроме make+coreutils у юзера, и должна быть не хуже autotools по фичам — т.е. уметь make distcheck, make install/uninstall, использовать configure, и всякие подобные штуки (в связи с чем предлагателей cmake, опять же, попрошу не обращаться).

например, кто-то смотрел что используется в ffmpeg? там что-то свое, или у него есть сайт?

★★★★★

Ответ на: комментарий от waker

если не найду как избавиться от libtool в automake, то видимо придется.

от libtool можно избавиться, написав свою пачку макросов на m4 вместо встроенных в automake. Правда непонятно, зачем после этого automake нужен.

у нас в паре рабочих проектов используются autoconf + самописные makefiles. Скрипт configure генерирует Rules.mk, который подключается в топовом Makefile, а дальше ты понял.

anonymous
()
Ответ на: комментарий от anonymous

Типичные мысли студентов.

Если ты можешь собрать своё поделие без libtool - не используй libtool.

А боль и страдания ты узнаешь когда своё поделие придётся собирать например хотя бы на linux+SolarisStudio, solaris+gcc+sunld, solaris+gcc+gnuld

anonymous
()
Ответ на: комментарий от anonymous

боль и страдания ты узнаешь когда своё поделие придётся собирать например хотя бы на linux+SolarisStudio, solaris+gcc+sunld, solaris+gcc+gnuld

ха-ха! Автолулзы на солярке! Давай, пошути ещё раз.

автолулзы на солярке часто вообще не работают. Например, чтобы configure находил tar, нужно писать к нему костыли, потому что автолулзы хотят именно гнутый. То же с остальной херней.

anonymous
()
Ответ на: комментарий от kravich

Стало интересно, а какая система сборки используется у вас в конторе? Или это под NDA?

у нас в конторе много разных проектов, и во всех разные системы сборки. думаю, где-то и cmake есть, и автотулсы. есть народ кто просто использует вижуалстудию. для самого большого главного проекта используется модифицированный jam (какой из вариантов не помню), + здоровенный перловый скрипт.

waker ★★★★★
() автор топика
Ответ на: комментарий от waker

Ты про это

требуется, чтобы не надо было устанавливать cmake.

?

Тогда только самописный велосипед. Фигачь баш-скриптик, который будет компилять нужные файлы и создавать config.h с Makefile'ом.

Anon
()
Ответ на: комментарий от Anon

Тогда только самописный велосипед. Фигачь баш-скриптик, который будет компилять нужные файлы и создавать config.h с Makefile'ом.

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

waker ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Правда непонятно, зачем после этого automake нужен.

а что, можно как-то избавиться от automake, и при этом иметь работающий make dist / distcheck? или для этого тоже придется вручную в makefile все прописывать? по-моему, жирновато выйдет.

waker ★★★★★
() автор топика
Ответ на: комментарий от Anon

Их надо устанавливать → твое же условие не выполняется!!!

в том все и дело, что не надо.

waker ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Неправда ваша. Оно умеет проверять tar на гнутость, но не требует чтобы tar был гнутым. Оно даже на моем древнючем ультриксе работает. Так что пишите нормальные тесты и не пеняйте на годный инструмент.

slapin ★★★★★
()
Ответ на: комментарий от anonymous

ну вот.. а без этого нельзя. и переписывать части automake не хочется.

waker ★★★★★
() автор топика
Ответ на: комментарий от Anon

ЯХЗ. Пробовал эту дрянь когда-то давно, больше в это говно руки совать не хочется.

у меня от cmake такие впечатления.

waker ★★★★★
() автор топика
Ответ на: комментарий от waker

Забавно. В автотулзах лично мне не понравился жутко уродливый синтаксис конфигурялок + ужасно низкая скорость выполнения ./configure! И что интересно, автотулзам пофиг: один ли у тебя файл в проекте с использованием только libc, или же 1000 файлов с использованием 100500 библиотек. Все равно эта собака будет долго тупить, прежде чем создаст Makefile.

Извращение, а не система сборки!

Anon
()
Ответ на: от Anon

Забавно. В автотулзах лично мне не понравился жутко уродливый синтаксис конфигурялок

обычный m4.

ужасно низкая скорость выполнения ./configure

которого в cmake просто нет - логично.

И что интересно, автотулзам пофиг: один ли у тебя файл в проекте с использованием только libc, или же 1000 файлов с использованием 100500 библиотек. Все равно эта собака будет долго тупить, прежде чем создаст Makefile.

а это уже с претензиями к разработчикам, которые на проект из 1 файла навешивают что либо кроме Makefile.

waker ★★★★★
() автор топика
Ответ на: комментарий от waker

а это уже с претензиями к разработчикам, которые на проект из 1 файла навешивают что либо кроме Makefile

Ну а нафига тебе в deadbeef automake? Почему ты ручками Makefile не пишешь?

Anon
()
Ответ на: комментарий от waker

у меня от cmake такие впечатления.

да, cmake тоже не подарок, но его хоть реально заставить работать в отличии от?

А qbs не хочешь попробовать?

AF ★★★
()
Ответ на: комментарий от AF

да, cmake тоже не подарок, но его хоть реально заставить работать в отличии от?

я его не могу заставить работать даже как пользователь, не то что как девелопер. наверняка есть люди, у кого это получилось, но точно не я.

А qbs не хочешь попробовать?

ща буду гуглить что это.

waker ★★★★★
() автор топика
Ответ на: комментарий от waker

ага, нагугил qbs. по синтаксису выглядит прикольно, но:

  • требует чтобы у юзера, кто собирает, был установлен qbs (а не только у разработчика)
  • юзкейсы типа «как собрать тарболл», «как проверить что тарболл содержит все файлы нужные для сборки», «как проверить что из тарболла все корректно компилируется, инсталлируется и деинсталлируется» - в quick reference не рассмотрены, а читать все доки ради того чтобы узнать есть оно или нет как-то влом

вобщем, как появятся какие-то годные проекты, использующие qbs, посмотрим.

waker ★★★★★
() автор топика

Слушайте опытных людей.

https://git.kernel.org/cgit/linux/kernel/git/kay/libabc.git/tree/README

use autotools
  - Every custom config/makefile/build system is worse for everybody
    than autotools is.
  - We are all used to autotools, it works, nobody cares.
  - It's only two simple files to edit and include in git, which are
    well understood by many many people, not just you.
  - Ignore all crap autotools create in the source tree. never check
    the created files into git.
  - Never, ever, install config.h. That's internal to your sources
    and is nothing to install.
  - And really, anything but autotools is realy an option. Just get
    over it. Everything else is an experiment, and it will come back
    to you sooner or later. Why? think cross compilation, installation/
    uninstallation, build root integration, separate object trees,
    standard adherence, tarball handling, make distcheck, testing,
    portability between distros, ...
anonymous
()
Ответ на: комментарий от anonymous

я их и использую. вопрос о том, как избавиться от libtool, т.к. этот компонент не устраивает. все остальное норм.

waker ★★★★★
() автор топика
Ответ на: комментарий от waker

Зачем так дофига файлов обычному медиаплееру?

Вот если бы ты работал с ffmpeg, все было бы куда проще! Ну и повыкидывал бы ненужный функционал. И GTK сменил бы на curses.

Anon
()
Ответ на: комментарий от Anon

Вот если бы ты работал с ffmpeg, все было бы куда проще! Ну и повыкидывал бы ненужный функционал. И GTK сменил бы на curses.

напиши свой плеер - и у тебя все обязательно будет именно так. 1 файл, проигрывание через ffmpeg, гуй через curses. и cmake.

.. oh shi... это ж ffplay получается. я нашел плеер твоей мечты?

waker ★★★★★
() автор топика
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от anonymous

use Windows(tm)
- Every alternative operating system is worse for everybody than Windows is.
- We are all used to Windows, it works, nobody cares.
- It takes only two hours install it, which are well understood by many many people, not just you.
- Ignore all crap that windows store in your hard drive, just format your hard drive from time to time.
- And really, anything but Windows is realy an option. Just get over it. Everything else is an experiment, and it will come back to you sooner or later. Why? think about another possible users of your computer, lazy software developers and system administrators, Microsoft managers, ...

kravich ★★★★
()
Последнее исправление: kravich (всего исправлений: 2)
Ответ на: комментарий от waker

.. oh shi... это ж ffplay получается

вот я и нашел замену рагульному deadbeef

x0r ★★★★★
()
Ответ на: комментарий от waker

А почему deadbeef -h ничего про это не говорит?

Кстати, а что это у тебя deadbeef -h выводит вот что:

deadbeef -h
starting deadbeef 0.5.6
Usage: deadbeef [options] [--] [file(s)]
п·п©я├п╦п╦:
   --help  п╦п╩п╦  -h     п▓я▀п╡п╣я│я┌п╦ п╫п╟ я█п╨я─п╟п╫ я│п©я─п╟п╡п╨я┐ (я█я┌п╬ я│п╬п╬п╠я┴п╣п╫п╦п╣) п╦ п╡я▀п╧я┌п╦
   --quit              п▓я▀п╧я┌п╦ п╦п╥ п©п╩п╣п╣я─п╟
   --version           п▓я▀п╡п╣я│я┌п╦ п╫п╟ я█п╨я─п╟п╫ п╦п╫я└п╬я─п╪п╟я├п╦я▌ п╬ п╡п╣я─я│п╦п╦ п©я─п╬пЁя─п╟п╪п╪я▀ п╦ п╡я▀п╧я┌п╦
   --play              п²п╟я┤п╟я┌я▄ п╡п╬я│п©я─п╬п╦п╥п╡п╣п╢п╣п╫п╦п╣
   --stop              п·я│я┌п╟п╫п╬п╡п╦я┌я▄ п╡п╬я│п©я─п╬п╦п╥п╡п╣п╢п╣п╫п╦п╣
   --pause             п÷я─п╦п╬я│я┌п╟п╫п╬п╡п╦я┌я▄ п╡п╬я│п©я─п╬п╦п╥п╡п╣п╢п╣п╫п╦п╣
   --toggle-pause      п÷я─п╦п╬я│я┌п╟п╫п╬п╡п╦я┌я▄ п╡п╬я│п©я─п╬п╦п╥п╡п╣п╢п╣п╫п╦п╣
   --play-pause        п²п╟я┤п╟я┌я▄ п╡п╬я│п©я─п╬п╦п╥п╡п╣п╢п╣п╫п╦п╣ п╣я│п╩п╦ п╬я│я┌п╟п╫п╬п╡п╩п╣п╫п╬, п╡ п©я─п╬я┌п╦п╡п╫п╬п╪ я│п╩я┐я┤п╟п╣ - п©я─п╦п╬я│я┌п╟п╫п╬п╡п╦я┌я▄
   --next              п║п╩п╣п╢я┐я▌я┴п╟я▐ п╢п╬я─п╬п╤п╨п╟ п╡ п©п╩п╣п╧п╩п╦я│я┌п╣
   --prev              п÷я─п╣п╢я▀п╢я┐я┴п╟я▐ п╢п╬я─п╬п╤п╨п╟ п╡ п©п╩п╣п╧п╩п╦я│я┌п╣
   --random            п▓п╬я│п©я─п╬п╦п╥п╡п╣п╢п╣п╫п╦п╣ я│п╩я┐я┤п╟п╧п╫п╬п╧ п╢п╬я─п╬п╤п╨п╦ п╡ п©п╩п╣п╧п╩п╦я│я┌п╣
   --queue             п■п╬п╠п╟п╡п╦я┌я▄ я└п╟п╧п╩(я▀) п╡ я│я┐я┴п╣я│я┌п╡я┐я▌я┴п╦п╧ п©п╩п╣п╧п╩п╦я│я┌
   --gui PLUGIN       Tells which GUI plugin to use, default is "GTK2"
   --nowplaying FMT    п▓я▀п╡п╣я│я┌п╦ п╫п╟ я█п╨я─п╟п╫ я└п╬я─п╪п╟я┌п╦я─п╬п╡п╟п╫п╫п╬п╣ п╫п╟п╥п╡п╟п╫п╦п╣ п╢п╬я─п╬п╤п╨п╦
                       FMT %-я│п╦п╫я┌п╟п╨я│п╦я│: %a-п╦я│п©п╬п╩п╫п╦я┌п╣п╩я▄, %t-п╫п╟п╥п╡п╟п╫п╦п╣, %b-п╟п╩я▄п╠п╬п╪,
                       %l-п╢п╩п╦п╫п╟, %n-п╫п╬п╪п╣я─ п╢п╬я─п╬п╤п╨п╦, %y-пЁп╬п╢, %c-п╨п╬п╪п╪п╣п╫я┌п╟я─п╦п╧,
                       %r-п╟п╡я┌п╬я─я│п╨п╦п╣ п©я─п╟п╡п╟, %e-п╡я─п╣п╪я▐, п╨п╬я┌п╬я─п╬п╣ п©я─п╬я┬п╩п╬ 
                       п²п╟п©я─п╦п╪п╣я─: --nowplaying "%a - %t" п╢п╬п╩п╤п╫п╟ п╡я▀п╡п╣я│я┌п╦ п╫п╟ я█п╨я─п╟п╫ "artist - title"
                      п╢п╩я▐ п╢п╬п©п╬п╩п╫п╦я┌п╣п╩я▄п╫п╬п╧ п╦п╫я└п╬я─п╪п╟я├п╦п╦, я│п╪п╬я┌я─п╦я┌п╣ http://sourceforge.net/apps/mediawiki/deadbeef/index.php?title=Title_Formatting
??

Ты что, не пользуешься gettext'ом?

Anon
()
Ответ на: комментарий от Anon

А почему deadbeef -h ничего про это не говорит?

по десятку разных причин. но главная из них в том, что конвертер это плагин, а в deadbeef нет API для доступа к плагинам через комстроку.

Кстати, а что это у тебя deadbeef -h выводит вот что:

выглядит как utf8 текст отображенный в консоли настроенной на koi8-r.

$ echo "п▓я▀п╧я┌п╦ п╦п╥ п©п╩п╣п╣я─п╟" | iconv -t koi8-r | iconv -f utf8
Выйти из плеера

соотв, можно делать

deadbeef --h | iconv -f utf8 -t koi8-r

Ты что, не пользуешься gettext'ом?

именно им и пользуюсь

waker ★★★★★
() автор топика
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

плагин

Дык, зачем мне плагины? Единственное, что мне нужно от плеера — качественное проигрывание любых форматов музыки, управление с USB-шного пультика и поддержка обычных плейлистов.

выглядит как utf8 текст отображенный в консоли настроенной на koi8-r.

Ты прямо-таки КО.

именно им и пользуюсь

Я тоже им пользуюсь, только у меня почему-то все по-русски в консоли, а у тебя — на юникоде. Неужто ты не делаешь в самом начале нечто вроде

	setlocale(LC_ALL, "");
	setlocale(LC_NUMERIC, "C");
	bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
	textdomain(GETTEXT_PACKAGE);
???

Anon
()
Ответ на: комментарий от Anon

Дык, зачем мне плагины? Единственное, что мне нужно от плеера — качественное проигрывание любых форматов музыки, управление с USB-шного пультика и поддержка обычных плейлистов.

дык пользуйся, чем нравится, на здоровье. я причем?

Я тоже им пользуюсь, только у меня почему-то все по-русски в консоли, а у тебя — на юникоде. Неужто ты не делаешь в самом начале нечто вроде

patches are welcome. ныть каждый может.

waker ★★★★★
() автор топика
Ответ на: комментарий от Anon

вот код

    setlocale (LC_ALL, "");
    setlocale (LC_NUMERIC, "C");
#ifdef ENABLE_NLS
//    fprintf (stderr, "enabling gettext support: package=" PACKAGE ", dir=" LOCALEDIR "...\n");
    if (portable) {
        char localedir[PATH_MAX];
        snprintf (localedir, sizeof (localedir), "%s/locale", dbinstalldir);
        bindtextdomain (PACKAGE, localedir);
    }
    else {
        bindtextdomain (PACKAGE, LOCALEDIR);
    }
    bind_textdomain_codeset (PACKAGE, "UTF-8");
    textdomain (PACKAGE);

что надо переделать, чтобы он правильно заработал на koi8-r? (и не сломался на utf)

waker ★★★★★
() автор топика
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

Однозначно не скажу. Надо поковыряться будет.

Anon
()
Ответ на: комментарий от waker

Есть два широких класса разработчиков: те кто пытается ужиться с autocrap таким какой он есть, и те кто уже отказался от autocrap в пользу чего-нибудь более вменяемого. Твоя проблема в том, что ты ни в один из означенных классов не попадаешь. Это как сесть между двух стульев.

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 1)

использовать configure

Отличное требование к альтернативной системе сборки! А дрочить вприсядку не надо?

Manhunt ★★★★★
()
Ответ на: комментарий от anonymous

Слушайте опытных людей.

https://git.kernel.org/cgit/linux/kernel/git/kay/libabc.git/tree/README

Kay Sievers - опытный высиратель говен. От его парсера правил в udev, представляющего собой огромный switch-case на пару тысяч строк, я чуть не заблевал монитор. Это как раз таки тот чувак, которого надо послушать и никогда не делать так как он советует.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.