Определение целевой архитектуры в скрипте Autoconf M4
В настоящее время я работаю с системой, которая требует сборки библиотек i686 и x86_64, сборки и установки их на одной и той же системе - это устаревший проект, который содержит смесь более нового кода, не зависящего от ABI, который обычно выполняется в 64-битной среде, потому что он может использовать дополнительную память и некоторый старый код, который ломается при сборке для 64.
Для 99% связанных библиотек это работает без проблем; между autoconf, rpm-build и pkg_config он находит правильные библиотеки без проблем. К сожалению, есть главное исключение - MySQL. Вместо того, чтобы поставлять скрипты pkg_config, у них есть свой собственный скрипт mysql_config, и он не учитывает целевые ABI - он просто сообщает значения для последнего установленного.
Итак, пока мы получаем последний код, правильно запущенный на 64-битной версии, я пытаюсь обойти эту проблему, отредактировав скрипт конфигурации Autoconf MySQL (официальный GNU, ax_lib_mysql.m4), чтобы постобработать сообщенный CFLAGS и LDFLAGS в зависимости от целевой платформы. И в этом суть вопроса - есть ли в Autoconf M4 хороший способ определить, планируете ли вы 32- или 64-битную цель? Точный ABI не имеет значения - он в первую очередь знает, нужно ли мне ссылаться на /usr/lib или /usr/lib64.
Извините за написание романа для вопроса из одного предложения, но я нашел несколько мест в Интернете, где люди спрашивали, как это сделать, и никогда не получали ответа, потому что все были слишком заняты, говоря им, что они не должны делать это, так как это сделать процесс сборки более хрупким, поэтому я попытался немного подготовить почву. Я знаю, что это ужасный хак (и я очень рад альтернативным подходам!), Но мне нужен какой-то способ обойти это, чтобы сохранить построение системы во время перехода.
1 ответ
Я думаю, что вы хотите использовать $host_cpu$ или $build_cpu$, который будет установлен, если вы добавите AC_CANONICAL_HOST в свой скрипт configure.
См. Получение канонического типа системы в документации по autoconf info.