6.2. 사양 파일 조건
사양 파일 조건을 사용하여 파일의 다양한 섹션을 조건부로 포함할 수 있습니다.
사양
일반적으로 조건은 다음과 같은 측면을 다룹니다.
- 아키텍처별 섹션.
- 운영 체제별 섹션.
- 다양한 버전의 운영 체제 간의 호환성 문제.
spec conditionals는 다양한 목적으로 사용할 수 있습니다. 예를 들면 다음과 같습니다.
조건부 표현식(
%if).%if를 여러 용도로 사용할 수 있습니다. 예를 들어 다음 구문이 있을 수 있습니다.If expression is true, then do some action:
%if expression ... %endifIf expression is true, then do some action, otherwise, another action:
%if expression ... %elsif expression ... %else ... %endif%if는 임의의 수의%elif조건(neted%elsif)을 따를 수도 있습니다. 예를 들면 다음과 같습니다.%if expression %elif expression ... %else %endif
시스템 아키텍처(
%ifarch,%ifnarch).%ifarch는 현재 대상 시스템 아키텍처가 일치하는지 여부를 테스트합니다.%ifarch를 사용하여 여러 플랫폼의 RPM 패키지를 빌드할 수 있습니다. 예를 들면 다음과 같습니다.%ifarch s390 s390x BuildRequires: s390utils-devel %endif-
운영 체제(
%ifos,%ifnos).%IFOS는 빌드 대상 운영 체제에 따라사양파일 처리를 제어합니다.
6.2.1. %if 조건 사용 예 링크 복사링크가 클립보드에 복사되었습니다!
사양 파일 내에서 %if 조건을 사용하는 방법을 보여주는 다음 예제를 검토하십시오.
예 6.1. %if 조건을 사용하여 Red Hat Enterprise Linux 10과 기타 운영 체제 간의 호환성을 처리
%if 0%{?rhel} == 10
sed -i '/AS_FUNCTION_DESCRIBE/ s/^/#/' configure.in
sed -i '/AS_FUNCTION_DESCRIBE/ s/^/#/' acinclude.m4
%endif
RHEL 10에서 패키지를 빌드할 때 %rhel 매크로의 값이 10 으로 설정될 때 고려되는 autoconf 스크립트에서 AS_FUNCTION_DESCRIBE 행을 주석 처리합니다.
예 6.2. %if 조건을 사용하여 매크로 정의를 처리
%define ruby_archive %{name}-%{ruby_version}
%if 0%{?milestone:1}%{?revision:1} != 0
%define ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision:r%{revision}}}
%endif
이 조건부는 매크로 정의를 처리합니다. %milestone 또는 %revision 매크로가 설정된 경우 업스트림 아카이브의 이름을 정의하는 %ruby_archive 매크로가 다시 정의됩니다.