6.2. 부울 종속 항목 지원
버전 4.13부터 RPM은 다음 종속성에서 부울 표현식을 처리할 수 있습니다.
-
필수 항목
-
권장
-
권장 사항
-
Supplemental
-
enhances
-
충돌
다음 섹션에서는 부울 종속성 구문에 대해 설명하고 부울 종속성 연산자 목록 , 부울 종속성 중첩 및 부울 종속성 의미에 대해 설명합니다.
6.2.1. 부울 종속 항목 구문
부울 표현식은 항상 괄호로 묶습니다.
일반적인 종속성에서 빌드됩니다.
- 이름 또는 이름
- 비교
- 버전 설명
6.2.2. 부울 연산자
RPM 4.13에는 다음과 같은 부울 Operator가 도입되었습니다.
부울 연산자 | 설명 | 사용 예 |
---|---|---|
| 용어가 true가 되도록 모든 피연산자가 충족되어야 합니다.Requires all operands to be fulfilled for the term to be true. | 충돌: (pkgA 및 pkgB) |
| 용어가 true인 경우 피연산자 중 하나가 충족되어야 합니다. | 필수: (pkgA >= 3.2 또는 pkgB) |
| 첫 번째 피연산자가 충족되어야 하는 경우 두 번째 피연산자가 충족되어야 합니다. | 권장 사항: (langsupportCZ의 경우myP throughout-langCZ) |
|
| 필요 사항: ma spring-backend-mariaDB if mariaDB else sqlite |
RPM 4.14에는 다음과 같은 추가 부울 Operator가 도입되었습니다.
부울 연산자 | 설명 | 사용 예 |
---|---|---|
| 용어가 true인 경우 동일한 패키지에서 모든 피연산자를 충족해야 합니다.Requires all operands to be fulfilled by the same package for the term to be true. | 필요 사항: (pkgA-foo with pkgA-bar) |
| 첫 번째 피연산자를 충족하지만 두 번째 피연산자를 충족하는 단일 패키지가 필요합니다. (set subtraction) | 필요 사항: (pkgA-bar 없이 pkgA-foo) |
| 두 번째 피연산자가 실행되지 않으면 첫 번째 피연산자가 충족되어야 합니다.(반도 음수 부정확함) | 충돌: ( driverB 제외) |
|
| 충돌: ( myP throughout-backend-SDL1이 아닌 경우, myP throughout-backend-SDL2 기타 SDL2) |
if
연산자는 또는
연산자와 동일한 컨텍스트에서 사용할 수 없으며 및 와 동일한 컨텍스트에서 연산자를 사용할 수 없는 경우 .
6.2.3. 중첩
피연산자 자체는 아래 예제와 같이 부울 표현식으로 사용할 수 있습니다.
이러한 경우 피연산자는 괄호로 묶어야 합니다. 및
또는
연산자를 주변 괄호 중 하나만 사용하여 동일한 연산자를 반복하여 연결할 수 있습니다.
예 6.2. 부울 식으로 적용된 피연산자 사용 예
Requires: (pkgA or pkgB or pkgC)
Requires: (pkgA or (pkgB and pkgC))
Supplements: (foo and (lang-support-cz or lang-support-all))
Requires: (pkgA with capB) or (pkgB without capA)
Supplements: ((driverA and driverA-tools) unless driverB)
Recommends: myPkg-langCZ and (font1-langCZ or font2-langCZ) if langsupportCZ
6.2.4. 의미 체계
부울 종속성을
사용하면 일반 종속성의 의미가 변경되지 않습니다.
부울 종속성을
사용하는 경우 일치하는 모든 이름을 확인하고 부울 연산자를 통해 일치하는 부울 값을 일치시킬 수 있습니다.
Conflicts
를 제외한 모든 종속 항목의 경우 설치를 방지하려면 결과를 True
로 설정해야 합니다. Conflicts:
.의 경우 설치를 방지하려면 결과가 False
여야 합니다.
provides는 종속성이 아니며 부울
식을 포함할 수 없습니다.
6.2.5. if Operator의 출력 이해
또한 if
연산자는 부울 값을 반환하며, 이는 일반적으로 직관적인 이해에 가깝습니다. 그러나 아래 예제에서는 일부의 경우 잘못 이해 될 수 있는지에 대한 직관적 인 이해를 보여줍니다.
예 6.3. if Operator의 잘못된 출력
pkgB가 설치되지 않은 경우 이 설명은 true입니다. 그러나 이 문을 기본 결과가 false인 경우 상황이 복잡해집니다.
Requires: (pkgA if pkgB)
이 설명은 pkgB가 설치되고 pkgA가 아닌 한 충돌입니다.
Conflicts: (pkgA if pkgB)
대신 다음을 사용할 수 있습니다.
Conflicts: (pkgA and pkgB)
if
연산자가 조건 또는
조건에 중첩된 경우도 마찬가지입니다.
Requires: ((pkgA if pkgB) or pkgC or pkg)
이는 pkgB가 설치되지 않은 경우
용어가 true이기 때문에 전체 용어인 true를 만듭니다. pkgA가 pkgB가 설치된 경우에만 도움이 되는 경우, 대신 및
을 사용합니다.
Requires: ((pkgA and pkgB) or pkgC or pkg)