[devel] I: autoconf 2.71 and --runstatedir

Gleb Fotengauer-Malinovskiy glebfm на altlinux.org
Вт Июл 25 18:46:33 MSK 2023


Hi,

В воскресенье в Сизиф отправился долгожданный autoconf 2.71, заодно эта
версия сразу была сделана основной.

https://lists.gnu.org/archive/html/autoconf/2020-12/msg00002.html
https://lists.gnu.org/archive/html/autoconf/2021-01/msg00126.html

На всякий случай, напоминаю, как работает макрос %set_autoconf_version.
Он сразу и добавляет пакет указанной версии в сборочные зависимости и
экспортирует во всех скриптах переменную AUTOCONF_VERSION.  Т.е. если
приходится использовать в пакете autoconf_2.60, нужно просто добавить
строку:
%set_autoconf_version 2.60

После этого обновления некоторые пакеты начинают использовать умолчальное
значение runstatedir ('${localstatedir}/run'), которое не подходит для
дистрибутива, так что rpm-build 4.0.4.190-alt1 [1] пытается проверить,
поддерживает ли configure-скрипт опцию --runstatedir и передаёт её только
в случае, если находит подстроку 'runstatedir=DIR' в configure-скрипте.
Такое решение позволяет не сломать по моим оценкам 874 пакета (для
справки, такая попытка была пару лет назад [2]), в которых
configure-скрипты не поддерживают эту опцию (или потому что не используют
autoconf или, реже, не запускают autoreconf при сборке), при сборке таких
пакетов rpm-build теперь выводит сообщение вида:

rpm-build: warning: %{_configure_script} script does not support --runstatedir

Также реализован выключатель
%undefine _configure_use_runstatedir
Я надеюсь, что он не пригодится, но он может быть нужен только если при
сборке пакета автоматика определяет, что --runstatedir поддерживается, но
эта опция передаётся также другим configure-скриптам, используемым при
сборке, которые в свою очередь --runstatedir не поддерживают.  В этой
ситуации лучше сделать autoreconf для таких configure-скриптов, а
выключатель нужен только если это совсем не помогает.

Пакеты, которые сломались:

courier-authlib	lakostis @everybody
hercules	nbr @everybody
libdb5.3	rider @everybody
libdb6.1	rider @everybody
libmp3splt	@nobody
libredland	lav zerg @qa
moc	lakostis
otf2	rider @everybody
pacemaker	cas @everybody
pinball	viy @everybody
proftpd	ender @qa @everybody
scalasca	rider @everybody
scim	oddity @qa
scim-anthy	oddity @everybody
scim-m17n	viy @everybody
scorep	rider @everybody
sdcc	sbolshakov @everybody
squid	shaba @everybody
suite3270	nbr @everybody
synfigstudio	cas @everybody
telepathy-gabble	aris
unixODBC	@nobody
	configure: error: unrecognized option: `--runstatedir=/var/run'
	Try `./configure --help' for more information
	configure: error: ./configure failed for libltdl

	Это побочный эффект от передачи --runstatedir через один
	configure-скрипт в другой configure-скрипт (см. выше про это).
	Везде должно помочь %autoreconf, а в большинстве этих пакетов
	просто %autoreconf libltdl.


aMule	oddity @everybody
avr-binutils	week viy
avr-gcc	week viy
gcc10	glebfm ldv
gcc11	glebfm ldv
gcc12	glebfm ldv
	configure.ac:35: error: autoconf 2.71 is known to not work with aMule. Please use
	2.69 instead.

	У этих пакетов апстрим по той или иной причине считает, что нужно
	использовать конкретную версию autoconf.


apcupsd	asy
libSDL_pango	@nobody
libmcrypt	lav @qa @everybody
libsrtp	@nobody
libsrtp2	sbolshakov @everybody
	configure: error: cannot find required auxiliary files: compile missing
	configure: error: cannot find required auxiliary files: install-sh config.guess config.sub

	autoreconf will issue an error if any auxiliary scripts are needed
	but cannot be found.


printer-driver-magicolor2430dl	mcpain @everybody
printer-driver-magicolor2530dl	mcpain @everybody
printer-driver-magicolor5430dl	mcpain @everybody
printer-driver-magicolor5440dl	mcpain @everybody
	configure: error: cannot find required auxiliary files: config.guess config.sub

	Эти пакеты относятся к предыдущей категории, но у них в spec-е нет
	autoreconf, но autoconf запускается сборочными скриптами самого
	проекта.  Стоит просто добавить %autoreconf.


conserver	rider @everybody
python3	grenka imz vitty george glebfm darktemplar
zsh	george arseny @qa
	autoreconf-default: Leaving directory '.'
	+ ln -s package/config.sub
	ln: failed to create symbolic link './config.sub': File exists

	Эти пакеты просто не ожидали, что autoconf установит config.sub и/или
	config.guess.


asterisk	sbolshakov @everybody
yasm	sbolshakov @everybody
	configure: error: *** ANSI C header files not found.
	configure: error: Standard (ANSI/ISO C89) header files are required.

	*** AC_HEADER_STDC and AC_HEADER_TIME are now stubs.
	
	  They still define the C preprocessor macros STDC_HEADERS and
	  TIME_WITH_SYS_TIME, respectively, but they no longer check for the
	  ancient, non-ISO-C90 compliant systems where formerly those macros
	  would not be defined.  Autoupdate will remove them.
	
	  These macros were already labeled obsolete in the manual.
	
	Макрос AC_HEADER_STDC больше не определяет переменную
	ac_cv_header_stdc.


imagescan	cas @everybody
openmpi	bircoph dans @everybody
	checking for LIBMAGICK_PP... yes
	./configure: line 25179: syntax error near unexpected token `newline'
	./configure: line 25179: `    '''
	
	checking if --with-cuda is set... not set (--with-cuda=)
	./configure: line 11024: syntax error near unexpected token `)'
	./configure: line 11024: `    )'
	
	AS_IF перестал терпеть отсутствие квадратных скобок.

	configure.ac
	@@ -354,3 +354,3 @@
	 AS_IF([test xno != "x$with_magick_pp"],
	-   AS_CASE("x$with_magick_pp",
	+   [AS_CASE("x$with_magick_pp",
	      [xGraphicsMagick],
	@@ -375,3 +375,3 @@
	       AC_MSG_ERROR([unknown value: --with-magick-pp=$with_magick_pp])
	-     ]))
	+     ])])
	 AM_CONDITIONAL([have_libmagick_pp], [test x != "x$LIBMAGICK_PP_LIBS"])
	@@ -379,3 +379,3 @@
	 AS_IF([test xno != "x$with_magick"],
	-   AS_CASE("x$with_magick",
	+   [AS_CASE("x$with_magick",
	      [xGraphicsMagick],
	@@ -410,3 +410,3 @@
	       AC_MSG_ERROR([unknown value: --with-magick=$with_magick])
	-     ]))
	+     ])])
	 AC_DEFINE_UNQUOTED([MAGICK_CONVERT], ["$MAGICK_CONVERT"])

	config/opal_check_cuda.m4
	 AS_IF([test "$opal_check_cuda_happy"="yes"],
	-    AC_CHECK_DECL([CU_POINTER_ATTRIBUTE_SYNC_MEMOPS], [CUDA_SYNC_MEMOPS=1], [CUDA_SYNC_MEMOPS=0],
	-        [#include <$opal_cuda_incdir/cuda.h>]),
	+    [AC_CHECK_DECL([CU_POINTER_ATTRIBUTE_SYNC_MEMOPS], [CUDA_SYNC_MEMOPS=1], [CUDA_SYNC_MEMOPS=0],
	+        [#include <$opal_cuda_incdir/cuda.h>])],
	     [])


apr1	arbars @everybody
	checking whether int64_t and long long use fmt %lld... no
	configure: error: could not determine the string function for int64_t

	https://github.com/apache/apr/commit/0a763c5e500f4304b7c534fae0fad430d64982e8


cube	rider @everybody
	autoreconf-default: running: /usr/bin/autoconf-2.71 --force
	configure:19220: error: possibly undefined macro: _AC_C_STD_TRY
	If this token and others are legitimate, please use m4_pattern_allow.
	See the Autoconf documentation.
	autoreconf-default: error: /usr/bin/autoconf-2.71 failed with exit status: 1

	Макрос _AC_C_STD_TRY больше не реализован в autoconf.


freeipmi	rider @qa
	autoreconf-default: running: aclocal --force -I config
	configure.ac:18: error: AC_CONFIG_MACRO_DIR can only be used once
	
	*** New macro AC_CONFIG_MACRO_DIRS.
	
	  This macro can be used more than once and accepts a list of
	  directories to search for local M4 macros.  With Automake 1.13 and
	  later, use of this macro eliminates a reason to use ACLOCAL_AMFLAGS
	  in Makefile.am.
	
	  The older AC_CONFIG_MACRO_DIR, which could only be used once, is
	  still supported but considered deprecated.


libudev0	shaba @everybody
	+ make -j16
	make: *** No rule to make target '/linux-default/include/linux/input-event-codes.h',
	needed by 'src/extras/keymap/keys.txt'.  Stop.
	make: *** Waiting for unfinished jobs....

	Перестала работать вот такая конструкция
	AC_SUBST([INCLUDE_PREFIX], [$(echo '#include <linux/input.h>' | eval $ac_cpp -E - | sed -n '/linux\/input.h/ {s:.*"\(.*\)/linux/input.h".*:\1:; p; q}')])
	потому что в configure.ac не используется AC_PROG_CPP и переменная
	ac_cpp оказывается пустой.


ltrace	grenka @everybody
	autoreconf-default: configure.ac: creating directory config/autoconf
	autoreconf-default: error: cannot create config/autoconf: No such file or directory

	autoconf перестал создавать промежуточный каталог в этом месте.


miredo	naf @qa
	checking for tdestroy... no
	configure: error: Required tdestroy() or Judy dynamic arrays.

	Это бага на стороне autoconf [3], я собираюсь сделать backport и
	собрать autoconf 2.71-alt2.


quvi	viy aris @gnome
	checking whether the C compiler works... no
	configure: error: in `/usr/src/RPM/BUILD/quvi-0.9.5':
	configure: error: C compiler cannot create executables
	See `config.log' for more details
	
	https://salsa.debian.org/debian/quvi/-/blob/master/debian/patches/0001-Fix-FTBFS-with-autoconf-2.70.patch


rofi	akv @everybody
	autoreconf-default: running: aclocal --force -I subprojects/libnkutils -I
	subprojects/libgwater ${ACLOCAL_FLAGS}
	configure.ac:10: error: AC_PROG_LEX: unrecognized argument: flex
	./lib/autoconf/programs.m4:716: _AC_PROG_LEX is expanded from...
	--
	configure.ac:10: the top level
	autom4te-2.71: error: /usr/bin/m4 failed with exit status: 1
	aclocal-default: error: /usr/bin/autom4te-2.71 failed with exit status: 1
	autoreconf-default: error: aclocal failed with exit status: 1

	У макроса AC_PROG_LEX раньше не было никаких аргументов и аргументы
	передаваемые по ошибке просто игнорировались.

	AC_PROG_LEX now takes one argument, which may be either ‘yywrap’ or
	‘noyywrap’.


tcl-httpd	@nobody
	checking whether the C compiler works... no
	configure: error: in `/usr/src/RPM/BUILD/tcl-httpd-3.5.1':
	configure: error: C compiler cannot create executables
	See `config.log' for more details

	В autoconf 2.69 AC_DEFINE_UNQUOTED был реализован как
	cat >>confdefs.h <<_ACEOF
	#define VERSION "${VERSION}"
	_ACEOF
	а в autoconf 2.71 он выглядит так:
	printf "%s\n" "#define VERSION \"${VERSION}\"" >>confdefs.h

	В этом пакете перед AC_DEFINE_UNQUOTED зачем-то стоит eval,
	который со старым autoconf не вредил, а с новым ломает сборку.


torque	viy @everybody
	checking for ar... (cached) ar
	mv: cannot stat 'libtool': No such file or directory
	./configure: line 18734: libtool: No such file or directory
	mv: cannot stat 'libtool.old': No such file or directory
	checking whether ln -s works... yes
	--
	checking if largefile compiles (looking at you, OSX)... checking for pthread_create in
	-lpthread... no
	configure: error: TORQUE needs pthreads in order to build
	error: Bad exit status from /usr/src/tmp/rpm-tmp.62250 (%build)	

	autoconf перестал угадывать, что этот проект на C++, должно быть
	достаточно просто добавить AC_LANG([C++]).


[1] https://git.altlinux.org/gears/r/rpm-build.git?p=rpm-build.git;a=commitdiff;h=e96f79a7d031ed82024500fd229369456aed0f5a
[2] https://lore.altlinux.org/devel/20210825082756.GA16086@altlinux.org/T/#u
[3] https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=8b5e2016c7ed2d67f31b03a3d2e361858ff5299b
-- 
glebfm
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : signature.asc
Тип     : application/pgp-signature
Размер  : 801 байтов
Описание: отсутствует
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20230725/e341ba96/attachment-0001.bin>


Подробная информация о списке рассылки Devel