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 ★★★
() автор топика
Ответ на: комментарий от 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 ★★★
() автор топика
Ответ на: комментарий от firkax

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

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

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

cc test.c -lX11

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

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

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

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

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