LINUX.ORG.RU

Autoconf, кросскомпиляция и библиотеки

 , ,


0

1

Привет, ЛОР!

Хочу сделать странное. Пилю сейчас в один проект поддержку кросскомпиляции под одну платформу, и на этой платформе к одному из компонентов проекта требуется подключить библиотечку. Накидал функцию для поиска этой библиотеки:

dnl ** Have libhelloworld?
dnl --------------------------------------------------------------
dnl Sets UseHelloworld.
AC_DEFUN([FP_FIND_HELLOWORLD],
[
  AC_ARG_WITH([libhelloworld-libraries],
    [AS_HELP_STRING([--with-libhelloworld-libraries=ARG],
      [Find libraries for libhelloworld in ARG [default=system default]])
    ],
    [
      LibhelloworldLibDir="$withval"
      LIBHELLOWORLD_LDFLAGS="-L$withval"
    ])

  AC_SUBST(LibhelloworldLibDir)

  AC_ARG_WITH([libhelloworld-includes],
    [AS_HELP_STRING([--with-libhelloworld-includes=ARG],
      [Find includes for libhelloworld in ARG [default=system default]])
    ],
    [
      LibhelloworldIncludeDir="$withval"
      LIBHELLOWORLD_CFLAGS="-I$withval -ffreestanding -nostdinc"
    ])

  AC_SUBST(LibhelloworldIncludeDir)

  UseLibhelloworld=NO
  USE_LIBHELLOWORLD=0
  AC_SUBST(UseLibhelloworld)
  if test $UseLibhelloworld = "YES" ; then
    USE_LIBHELLOWORLD=1
    AC_SUBST([HaveLibhelloworld],[True])
  else
    AC_SUBST([HaveLibhelloworld],[False])
  fi
  AC_DEFINE_UNQUOTED([USE_LIBHELLOWORLD], [$USE_LIBHELLOWORLD], [Set to 1 to use libhelloworld])
])

Проблема следующая: при вызове FP_FIND_HELLOWORLD из configure.ac, в сборке дефолтных сишных тестов автоконфа подставляются CFLAGS и LDFLAGS этой библиотеки, что естественно валит их напрочь.

Как избежать этой подстановки, ЛОР?

★★★★★

Последнее исправление: hateyoufeel (всего исправлений: 3)
Ответ на: комментарий от imb

Вы бы дальнешее использование показали бы, как примерhttps://github.com/curl/curl/tree/master/m4

А дальше ничего особенного нет. Я вызываю эту функцию из топа configure.ac и после этого сборка тестов автоконфа (AC_PROG_CC, например) валится.

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

Нет, озвученная проблема относится целиком и полностью к автоконфу. Заменить автоконф на данный момент в проекте почти на миллион строк – не вариант.

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

А нельзя сохранить оригинальные флаги и выставь их в тестах?

if test $UseLibhelloworld = "YES" ; then
  USE_LIBHELLOWORLD=1
  AC_SUBST([HaveLibhelloworld],[True])
  AC_SUBST([CFLAGS], [$SAVED_CFLAGS $LIBHELLOWORLD_CFLAGS])
  AC_SUBST([LDFLAGS], [$SAVED_LDFLAGS $LIBHELLOWORLD_LDFLAGS])
else
  AC_SUBST([HaveLibhelloworld],[False])
  AC_SUBST([CFLAGS], [$SAVED_CFLAGS])
  AC_SUBST([LDFLAGS], [$SAVED_LDFLAGS])
fi
fluorite ★★★★★
()
Ответ на: комментарий от fluorite

А нельзя сохранить оригинальные флаги и выставь их в тестах?

Можно, наверное. Но если библиотек будет больше одной (а это скорее всего так и будет), то будет срань.

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

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

Господи, ну и трешняк.

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