Ошибка сборки RPM: слишком много уровней рекурсии в раскрытии макроса. Вероятно, это вызвано рекурсивным объявлением макроса. - PullRequest
0 голосов
/ 13 февраля 2020

Я пытался построить rpm с помощью rpmbuild, но постоянно получаю следующую ошибку -

error: Слишком много уровней рекурсии в раскрытии макроса. Вероятно, это вызвано рекурсивным объявлением макроса.

Сведения о среде- rpmbuild --version Версия RPM 4.11.3

часть файла .spe c -

############# we define product here ###################
%define name abc

%define installdir /direc

############### product Info ###################
Summary: ABC management package
Name: %{name}
Version: %{version}
Release: %{release}
Source: %{name}-%{version}.tgz
Vendor: XYZ
License: Commercial
Group: System Environment/Libraries
Prefix: %{_prefix}
Buildroot: %{_tmpbuildroot}
################Dependencies ###########################
Requires : %{name} = %{version}, mod_php, php-pgsql

.rpmmacros file

    %_topdir               /home/jan/rpmbuild/
    %_tmppath              /home/jan/rpmbuild/tmp
    %_tmpbuildroot          /home/jan/rpmbuild/build
    %_buildroot         /home/jan/rpmbuild/BUILD
    %version                100.0.111.20200213
    %release                R_jenkins-XXXXXX-61
   %extra_require ameyocrm = 100.0.111.20200213

Команда, используемая для построения rpm - sudo rpmbuild -bb -vv /home/jan/Work/BuildMachine/RPM/rpm_spec/rpm/SPECS/myspecfile.spec --target "\x86_64-redhat-linux\"

1 Ответ

2 голосов
/ 13 февраля 2020
Макросы

%name, %version и %release встроены. Вы не должны пытаться переопределить их. Макрос %name определяется как содержимое тега Name:, то же самое относится и к %version и %release.

. Перепишите его примерно так:

Name: abc
Version: 100.0.111.20200213
Release: R_jenkins-XXXXXX-61
Source: %{name}-%{version}.tgz
...

РЕДАКТИРОВАТЬ: Как отметил @Danila:

Requires : %{name} = %{version}

Означает, что ваш пакет требует себя, что не имеет смысла.

EDIT2

Если вы хотите иметь возможность определить номер версии и выпуска извне, вы можете просто определить другой макрос:

%{!?_version: %define _version 100.0.111.20200213 }
%{!?_release: %define _release R_jenkins-XXXXXX-61 }

Name:       abc
Version:    %{_version}
Release:    %{_release}

эти макросы _version и _release не являются стандартными и могут быть определены вне вашего файла spe c.

...