[libcamera-ci,2/3] setup-container: Generalize package installation through pip
diff mbox series

Message ID 20250727011123.31634-3-laurent.pinchart@ideasonboard.com
State New
Headers show
Series
  • Prepare CI for Sphinx doxylink usage
Related show

Commit Message

Laurent Pinchart July 27, 2025, 1:11 a.m. UTC
When building containers, we favour packages from the Debian
repositories, and fall back to pip when minimum version requirements are
not met by Debian. This is open-coded for two packages (meson and
python3-pygments). Generalize the mechanism in preparation for adding
more packages.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 .gitlab-ci/setup-container.sh | 43 +++++++++++++++++++----------------
 1 file changed, 24 insertions(+), 19 deletions(-)

Patch
diff mbox series

diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh
index 5e9b89da8431..c8b631c387b5 100755
--- a/.gitlab-ci/setup-container.sh
+++ b/.gitlab-ci/setup-container.sh
@@ -93,6 +93,11 @@  PKGS_VIRTME_RUNTIME=(
 	udev
 )
 
+PKGS_PIP_MIN_VERSIONS=(
+	'meson meson 1.2.0 remove'
+	'python3-pygments pygments 2.10.0 keep'
+)
+
 archs=( amd64 )
 
 declare -A components
@@ -192,34 +197,34 @@  dpkg_check_version() {
 cbuild_fixups() {
 	echo "Applying miscellaneous fixups"
 
-	local min_version
 	local pip3_options
-	local version
+	local pkg
 
 	if [[ $FDO_DISTRIBUTION_VERSION != 'bullseye' ]] ; then
 		pip3_options=--break-system-packages
 	fi
 
-	# Install meson from pip.
-	min_version=1.2.0
-	version=$(dpkg_version meson)
-	if dpkg_check_version $version $min_version ; then
-		echo "meson $version too old, installing $min_version from pip"
+	# Install packages from pip to ensure minimum versions.
+	for pkg in "${PKGS_PIP_MIN_VERSIONS[@]}" ; do
+		pkg=($pkg)
+		local pkg_name=${pkg[0]}
+		local pip_name=${pkg[1]}
+		local min_version=${pkg[2]}
+		local action=${pkg[3]}
 
-		apt remove -y meson
-		apt install -y python3-pip
-		pip3 install ${pip3_options} meson==${min_version}
-	fi
+		local version=$(dpkg_version $pkg_name)
 
-	# Install pygments from pip.
-	min_version=2.10.0
-	version=$(dpkg_version python3-pygments)
-	if dpkg_check_version $version $min_version ; then
-		echo "pygments $version too old, installing $min_version from pip"
+		if dpkg_check_version $version $min_version ; then
+			echo "$pkg_name $version too old, installing $min_version from pip"
 
-		apt install -y python3-pip
-		pip3 install ${pip3_options} pygments==${min_version}
-	fi
+			if [[ $action == 'remove' ]] ; then
+				apt remove -y ${pkg_name}
+			fi
+
+			apt install -y python3-pip
+			pip3 install ${pip3_options} ${pip_name}==${min_version}
+		fi
+	done
 
 	# Create pybind11.pc manually if not provided by the distribution
 	# package.