LINUX.ORG.RU

А autotools в *BSD выполняют свою функцию?

 , ,


0

2

Пробую собрать программку с помощью automake/autoconf в OpenBSD. Проект простенький. Но нужно линковаться с библиотеками. Соответственно используются AC_CHECK_LIB и AC_CHECK_HEADER. Библиотеки лежат в /usr/local/lib. При запуске configure они не находятся. В configure.log видно, что во время тестов дополнительные пути к либам (-L) не прописываются. Библиотеки и не находятся (хотя я не в курсе, где в *BSD ищутся либы по умолчанию). Пробовал задавать пути к /usr/local/lib, /usr/local/include через –libdir=DIR и –includedir=DIR. Никакого эффекта.

Вобщем, оно вообще реально что-то под *BSD собрать с помщью autotools?

Ответ на: комментарий от Pinkbyte
AC_PREREQ([2.60])
AC_INIT([xmxkbconf],
	[0.4],
	[https://sourceforge.net/projects/xmxkbconf/],
	[xmxkbconf])
AC_CONFIG_SRCDIR([xmxkbconf.c])
AC_CONFIG_HEADERS([config.h])

# Initialize Automake
AM_INIT_AUTOMAKE([foreign dist-bzip2])

AC_CHECK_LIB(X11, XCopyArea, , AC_MSG_RESULT([X11 lib not found]))

AC_CHECK_LIB(Xt, XtVaSetValues, , AC_MSG_RESULT([X toolkit lib not found]))

AC_CHECK_LIB(Xm, XmCreateScrollBar, , AC_MSG_RESULT([Motif lib not found]))

AC_CHECK_HEADER(X11/xpm.h, , AC_MSG_RESULT([Xpm lib headers not found]))

AC_CHECK_HEADER(Xm/Xm.h, , AC_MSG_RESULT([Motif headers not found]))

AC_ARG_WITH(xkb-config-root,
        AS_HELP_STRING([--with-xkb-config-root=<paths>],
                       [Set default XKB config root (default: ${datadir}/X11/xkb)]),
        [XKBCONFIGROOT="$withval"],
        [XKBCONFIGROOT=${datadir}/X11/xkb])
AC_SUBST([XKBCONFIGROOT])

AC_ARG_ENABLE(i18n-use,
  AS_HELP_STRING([--disable-i18n-use],[disable i18n]),
  , [AC_DEFINE(I18N_USE,,[Use language translation of messages])])

AC_ARG_ENABLE(override-xkbrf-load-rules,
  AS_HELP_STRING([--disable-override-xkbrf-load-rules],[disable overriding xkbrf load rules]),
  , [AC_DEFINE(USE_INTERNAL_XKBRULES_LOADER,,[Use internal function for loading xkb rules])])

# Checks for pkg-config packages
PKG_CHECK_MODULES(XMXKBCONF, xkbfile)

AC_CONFIG_FILES([
	Makefile])
AC_OUTPUT
zloy_starper ★★★
() автор топика

А зачем тебе для линкования с библиотеками автотулзы? Достаточно же -lname в компилятор передать, и он сам найдёт библиотеку (если она есть).

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

А зачем тебе для линкования с библиотеками автотулзы? Достаточно же -lname в компилятор передать, и он сам найдёт библиотеку (если она есть).

Где ты мне предлагаешь всё, что нужно в компилятор передавать? В командной строке что ли писать всю эту простыню: сс и еще два десятка аргументов с ключами? Или это про написание makefile, который могут разные версии unix-а проглотить?

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

У тебя один си-файл на 80кб! И к нему прилагается 300кб автотулзового хлама чтобы вызвать к нему компилятор? Может быть, достаточно однострочника вида cc -o xmxkbconf xmxkbconf.c -lX11 -lqwe -lasd?

firkax ★★★★★
()

А, я возможно неправильно понял изначальный вопрос.

дополнительные пути к либам (-L) не прописываются

-L это ключ компилятора или че?

Пробовал задавать пути к /usr/local/lib, /usr/local/include через –libdir=DIR и –includedir=DIR

Эти пути и так дефолтные для компилятора, задавать их не надо. Но я не понял компилятору ты их даёшь или ещё кому-то.

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

Во-первых, однострочника достаточно будет только для Linux. Да, этот однострочник фактически генерится всем этим хламом на 300кб. Но как только я попробовал собрать этим однострочником на OpenBSD, то фиг вам. Так как к этому однострочнику надо минимум еще добавить пару путей поиска хидеров и пару путей поиска библиотек. И я понятия не имею, надо ли будет проделать все то же самое, например, на DragonFlyBSD, или там пути будут другие.

Во-вторых, см. ответ ниже.

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

Я не держусь за autotools. В общем то часть вопроса была в том, нормально ли autotools работают на *BSD, или они там для галочки и лучше с ними не связываться вообще. Написать makefile с учетом особенности разных систем не сложно.

Но есть еще нюанс. Уже сейчас это собирается в разных вариантах конфигурации. Мне представляется, что выполнить configure –disable-lalala –enable-tatata … и затем make вполне себе приемлемо. А вот что-то править в makefile, или еще где-то, прежде, чем запускать сборку - как-то не комильфо. Ну или я плохо разбираюсь в возможностях make.

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

УМВР, ЧЯДНТ?

Какая система? У меня OpenBSD. Другого нет под рукой. Если просто запускаю configure, вообще ничего не находится, ни либы, ни хидеры.

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

Эти пути и так дефолтные для компилятора, задавать их не надо. Но я не понял компилятору ты их даёшь или ещё кому-то.

Я запускаю configure. Он ничего не находит.

В логе есть проверки типа:

cc test.c -lX11

которые завершаются с ошибкой: не найдена библиотека.

Я не знаю, где в *BSD компилятор ищет библиотеки, но если выполнить что-то типа:

cc test.c -L/usr/X11R6/lib -lX11

то все будет ок. Ну и та же песня с инклюдами.

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

Во FreeBSD -L${LOCALBASE}/lib всю жизнь добавляется в LDFLAGS, так что нет, без внешних телодвижений оно не работает. Но это как-бы правильно потому что LOCALBASE технически может быть во что угодно установлен.

anonymous
()

если под «функцией» автолулзов подразумевается портить людям жизнь, то да, выполняют. И не только под BSD.

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

Just IMHO. Для систем семейства BSD правильнее всего оформить сборку софтины в виде порта. Обработка типовых вариантов использования GNU configure там есть. А в качестве бесплатного приложения появится возможность ставить/обновлять/удалять её средствами управления пакетами. Для именно OpenBSD — https://www.openbsd.org/faq/ports/.

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

Для систем семейства BSD правильнее всего оформить сборку софтины в виде порта

Надо добавить что так допустимо делать только если вы сами пользуетесь конкретной BSD on a daily basis. Иначе получится не рабочий и не поддерживаемый порт, на который будете тратить время впустую как вы для обновления, так и юзеры в тщетных попытках что-то из него собрать.

Так-то для систем семейства BSD (как и любых других) достаточно использовать современную систему сборки (к которым autocrap не относится) и не добавлять туда явных несовместимостей (типа завязки на linuxизмы или хождения в интеренет во время сборки), а порт сделают мантейнеры.

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

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

Почему впустую? Если я что-то собираю, то наверно оно мне нужно не ради того чтоб собралось.
И какие такие «юзеры»? Речь про сборку софта для себя любимого. Сам имею некоторое количество портов для FreeBSD, созданных для собственного удобства, и которые скорее всего никогда не появятся в публичном дереве.

достаточно использовать современную систему сборки (к которым autocrap не относится) и не добавлять туда явных несовместимостей (типа завязки на linuxизмы или хождения в интеренет во время сборки)

Осталось рассказать это аффтарам софта (успеха Вам на сём благородном поприще)...

а порт сделают мантейнеры

Которые самозарождаются там от сырости...

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

Так-то для систем семейства BSD (как и любых других) достаточно использовать современную систему сборки (к которым autocrap не относится) и не добавлять туда явных несовместимостей (типа завязки на linuxизмы или хождения в интеренет во время сборки)

Современная система сборки - это что? Я без понятия, что есть и на Linux, и на разных BSD, и при этом везде работает без проблем. Ну только обычный make, который давно уже не соврменнный.

А как в make сделать удобное конфигурирование сборки? Редактировать в текстовом редакторе какие-нибудь параметры?

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

Вобщем, оно вообще реально что-то под *BSD собрать с помщью autotools?

Да, реально. Но все сильно зависит от того, какие библиотеки используются.

Судя по примеру выше, есть смысл использовать AC_PATH_X или AC_PATH_XTRA, тогда можно будет указать пути к иксам аругментами --x-libraries=... и --x-includes=... для ./configure.

В configure.ac нужно будет для иксов использовать X_CFLAGS и X_LIBS.

https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/System-Services.html

Novel ★★★★
()
Последнее исправление: Novel (всего исправлений: 1)
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария