Общий поток автосборочного окружения одинаков:
единожды используется autoscan для создания базового профиля;
описывается configure.ac;
вызываются autoheader для генерации config.h.in и aclocal для подготовки к работе automake;
описывается make-генератор Makefile.am;
вызывается automake --add-missing для подготовки Makefile.in;
вызывается autoconf для генерации основного конфигурационного файла configure.
При уже описанных
configure.ac и
Makefile.am и лишь небольшом редактировании этих файлов подготовка к сборке представляет из себя последовательный вызов → → → . Для того чтобы делать эти действия за один раз используется утилита
autoreconf с ключами
-fisv. Весь путь по созданию конфигурационного окружения показан здесь:
В spec-файле для директивы %build есть даже специальный макрос %autoreconf, буквально разворачивающийся в команду autoreconf -fisv. После его исполнения необходимо лишь вызвать configure и завершить сборку с помощью make:
@user:
autoenv-pkg/autoenv-pkg.spec
Name: autoenv-pkg
Version: 1.0
Release: alt1
Summary: Test pkg with autotool
License: GPL-3.0-or-later
Group: Development/Other
Source0: %name-%version.tar.gz
BuildRequires: libncurses-devel
%description
This is a small testing package, builded by autotools
%prep
%setup
%build
%autoreconf
%configure
%make_build
%install
%makeinstall_std
%check
make check
%files
%_bindir/*
%changelog
* Mon Jul 21 2025 UsamG1t <usamg1t@altlinux.org> 1.0-alt1
- Initial build
Макрос %makeinstall_std разворачивается в make install с параметрами; ни цели install, ни цели check в прототипе Makefile.am нет: их (и десятки других рецептов) добавляет в конечный Makefile сценарий configure.
Поскольку для корректной сборки конфигурационного окружения достаточно лишь двух файлов — configure.ac и Makefile.am — gear-репозиторий может выглядеть достаточно компактным. На практике часть промежуточных файлов генерации не считаются такими в рамках разработки. Обычно в итоговый набор файлов входит всё, что необходимо для работы основного конфигурационного сценария configure. Однако мы остановимся на минимальном рабочем варианте:
@user
[user@VM autoenv-pkg]$ tree . .gear
.
├── autoenv-pkg.spec
├── configure.ac
├── Makefile.am
└── src
└── prog.c
.gear
└── rules
3 directories, 5 files
[user@VM autoenv-pkg]$
Рассмотрим информационный вывод при сборке пакета:
@user
[user@VM autoenv-pkg]$ gear-hsh
<...>
Wrote: /usr/src/in/srpm/autoenv-pkg-1.0-alt1.src.rpm (w1.gzdio)
Installing autoenv-pkg-1.0-alt1.src.rpm
<...>
При выполнении секции
%build макрос
%autoreconf, действительно, разворачивается в команду пересборки
configure:
Executing(%build): /bin/sh -e /usr/src/tmp/rpm-tmp.51756
+ umask 022
+ /bin/mkdir -p /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ cd autoenv-pkg-1.0
+ autoreconf -fisv
<...>
Подробнее остановимся на самом исполнении
configure при сборке. В макросе к нему добавляется множество флагов сборки, указывающих на местоположение исходников, библиотек и т.д:
+ ./configure --build=x86_64-alt-linux --host=x86_64-alt-linux --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/lib --localstatedir=/var/lib --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --disable-dependency-tracking --disable-silent-rules --runstatedir=/var/run --without-included-gettext
configure: WARNING: unrecognized options: --without-included-gettext
checking for a BSD-compatible install... /usr/bin/ginstall -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
В рамках выполнения
configure проверяются наличие всех сборочных зависимостей системы: наличие
make, компилятора
gcc и т. д.:
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for x86_64-alt-linux-gcc... x86_64-alt-linux-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether x86_64-alt-linux-gcc accepts -g... yes
checking for x86_64-alt-linux-gcc option to enable C11 features... none needed
checking whether x86_64-alt-linux-gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of x86_64-alt-linux-gcc... none
Проверяется достижимость библиотек: как по указанным в
AC_CHECK_LIB проверкам, так и по заголовочным файлам:
checking for initscr in -lncurses... yes
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for unistd.h... (cached) yes
checking for ncurses.h... yes
checking for error_at_line... yes
checking that generated files are newer than configure... done
Создаётся специальный сценарий
config.status, хранящий информацию и параметры последней удачной сборки окружения:
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands
configure: WARNING: unrecognized options: --without-included-gettext
<...>
Отдельное внимание заслуживает директива
%check, в которой описываются результаты тестирования сценариев из
Makefile.am:
Executing(%check): /bin/sh -e /usr/src/tmp/rpm-tmp.61556
+ umask 022
+ /bin/mkdir -p /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ cd autoenv-pkg-1.0
+ make check
make: Entering directory '/usr/src/RPM/BUILD/autoenv-pkg-1.0'
make check-TESTS
make[1]: Entering directory '/usr/src/RPM/BUILD/autoenv-pkg-1.0'
make[2]: Entering directory '/usr/src/RPM/BUILD/autoenv-pkg-1.0'
echo 'test "`./autoenv < /dev/null 2>&1`" = "./autoenv: Not a terminal"' > isterm.sh
chmod +x isterm.sh
PASS: isterm.sh
============================================================================
Testsuite summary for autoenv-pkg 1.0
============================================================================
# TOTAL: 1
# PASS: 1
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================
make[2]: Leaving directory '/usr/src/RPM/BUILD/autoenv-pkg-1.0'
make[1]: Leaving directory '/usr/src/RPM/BUILD/autoenv-pkg-1.0'
make: Leaving directory '/usr/src/RPM/BUILD/autoenv-pkg-1.0'
+ exit 0
<...>