+++ /dev/null
-#!/bin/bash
-
-# Disable pathname expansion by '*' or '?'
-set -f
-
-IFS=";"
-
-# Message formatting
-LINE_MAX_LENGTH=90
-
-print_border() {
- PLACEHOLDER=$(printf "%*s" "$LINE_MAX_LENGTH" " ")
- echo ${PLACEHOLDER// /\#}
-}
-
-print_message() {
- MESSAGE_MAX_LENGTH=$(($LINE_MAX_LENGTH - 3))
- printf "# %-*s#\n" "$MESSAGE_MAX_LENGTH" "$1"
-}
-
-print_not_allowed_warning() {
- WARNING_TYPE=$1
- NOT_ALLOWED_LIST=$2
- ALLOWED_LIST=$3
- CHECK_ALWAYS=$4
-
- print_border
- print_border
-
- print_message "WARNING: There are not allowed $WARNING_TYPE. They might cause ABI break."
- for NOT_ALLOWED in ${NOT_ALLOWED_LIST}; do
- print_message "WARNING: - $NOT_ALLOWED"
- done
-
- print_message "WARINIG:"
- if [[ ! -z $ALLOWED_LIST ]]; then
- print_message "WARNING: Use only allowed packages below for $WARNING_TYPE"
- for ALLOWED in ${ALLOWED_LIST}; do
- print_message "WARNING: - $ALLOWED"
- done
- else
- print_message "WARNING: It is not allowed to specify $WARNING_TYPE"
- fi
-
- if [[ $CHECK_ALWAYS == "no" ]]; then
- print_message "WARNING:"
- print_message "WARNING: Give parameter --define 'disable_hal_rootstrap_checker 1' to gbs build"
- print_message "WARNING: to skip this check."
- fi
-
- print_border
- print_border
-}
-
-# main
-DISABLE_HAL_ROOTSTRAP_CHECKER=$1
-SOURCEDIR=$2
-
-# Checker configuration filepath
-HAL_ROOTSTRAP_CHECKER_CONF=/etc/hal/rootstrap/hal-rootstrap-checker.yaml
-HAL_ROOTSTRAP_CHECKER_CONF_D=/etc/hal/rootstrap/rules.d/hal-rootstrap-checker.yaml
-
-# Checker configuration
-TARGET_PACKAGE_NAME=""
-EXCLUDED_TARGET_PACKAGE_NAME=""
-ALLOWED_BUILDREQUIRES=""
-ALLOWED_BUILDCONFLICTS=""
-ALLOWED_REQUIRES=""
-CHECK_ALWAYS="no"
-
-# Locate configuration file
-CONFFILE=""
-if [[ -s $HAL_ROOTSTRAP_CHECKER_CONF_D ]]; then
- CONFFILE=$HAL_ROOTSTRAP_CHECKER_CONF_D
-elif [[ -s $HAL_ROOTSTRAP_CHECKER_CONF ]]; then
- CONFFILE=$HAL_ROOTSTRAP_CHECKER_CONF
-else
- echo "No configuration has been specified. Skipping test"
- exit 0
-fi
-
-# Naive yaml parser for configuration file
-KEY=""
-while read LINE; do
- # Trim comment(#) and whitespace
- LINE=$(echo "$LINE" | sed 's/#.*//')
- LINE=$(echo "$LINE" | sed 's/^[[:space:]]*\(.*\)[[:space:]]*$/\1/')
-
- if [[ -z "$LINE" ]]; then
- continue
- fi
-
- VALUE=""
- if [[ "$LINE" =~ ^(.*):\ (.*)$ ]]; then # 'key: value'
- KEY="${BASH_REMATCH[1]}"
- VALUE="${BASH_REMATCH[2]}"
- elif [[ "$LINE" =~ ^(.*):$ ]]; then # 'key:'
- KEY="${BASH_REMATCH[1]}"
- VALUE=""
- elif [[ "$LINE" =~ ^-\ (.*)$ ]]; then # '- value'
- VALUE="${BASH_REMATCH[1]}"
- fi
-
- if [[ -z "$VALUE" ]]; then
- continue
- fi
-
- case $KEY in
- target_package_name)
- TARGET_PACKAGE_NAME+="$VALUE$IFS"
- ;;
- excluded_target_package_name)
- EXCLUDED_TARGET_PACKAGE_NAME+="$VALUE$IFS"
- ;;
- allowed_buildrequires)
- ALLOWED_BUILDREQUIRES+="$VALUE$IFS"
- ;;
- allowed_buildconflicts)
- ALLOWED_BUILDCONFLICTS+="$VALUE$IFS"
- ;;
- allowed_requires)
- ALLOWED_REQUIRES+="$VALUE$IFS"
- ;;
- check_always)
- CHECK_ALWAYS="$VALUE"
- ;;
- *)
- echo "Undefined key($KEY), skip the line: $LINE"
- ;;
- esac
-done < $CONFFILE
-
-# Screen out packages that are not subject to the hal-rootstrap-checker
-SPECFILE=$(find $SOURCEDIR -name *.spec)
-if [[ $? != 0 ]]; then
- echo "Cannot locate specfile for hal-rootstrap-checker"
- exit 0
-fi
-
-CURRENT_PACKAGE_NAME=$(rpmspec -q --queryformat "[%{NAME}\n]" $SPECFILE | head -n 1)
-PATTERN_MATCHED=0
-for PATTERN in $TARGET_PACKAGE_NAME; do
- if [[ $CURRENT_PACKAGE_NAME == $PATTERN ]]; then
- PATTERN_MATCHED=1
- break
- fi
-done
-
-if [[ $PATTERN_MATCHED == 0 ]]; then
- exit 0
-fi
-
-PATTERN_MATCHED=0
-for PATTERN in $EXCLUDED_TARGET_PACKAGE_NAME; do
- if [[ $CURRENT_PACKAGE_NAME == $PATTERN ]]; then
- PATTERN_MATCHED=1
- break
- fi
-done
-
-if [[ $PATTERN_MATCHED == 1 ]]; then
- print_border
- print_border
-
- print_message "NOTICE: $CURRENT_PACKAGE_NAME is skipped from hal-rootstrap-checker"
- print_message "NOTICE: as it has been specified at excluded_target_package_name."
-
- print_border
- print_border
- exit 0
-fi
-
-# Parse specfile: Get BuildRequires
-SPECFILE_BUILDREQUIRES=""
-while read -r LINE; do
- if [[ -z $LINE ]]; then
- continue
- fi
- SPECFILE_BUILDREQUIRES+="$LINE$IFS"
-done <<< $(rpmspec -q --buildrequires $SPECFILE)
-
-# Parse specfile: Get BuildConflicts
-SPECFILE_BUILDCONFLICTS=""
-while read -r LINE; do
- if [[ -z $LINE ]]; then
- continue
- fi
- SPECFILE_BUILDCONFLICTS+="$LINE$IFS"
-done <<< $(rpmspec -q --buildconflicts $SPECFILE)
-
-# Parse specfile: Get Requires
-SPECFILE_REQUIRES=""
-while read -r LINE; do
- if [[ -z $LINE ]]; then
- continue
- fi
- SPECFILE_REQUIRES+="$LINE$IFS"
-done <<< $(rpmspec -q --queryformat "[%{REQUIRES}\n]" $SPECFILE)
-
-# Collect not allowed BuildRequires
-SPECFILE_NOT_ALLOWED_BUILDREQUIRES=""
-for BUILDREQUIRES in $SPECFILE_BUILDREQUIRES; do
- IS_ALLOWED=0
- for ALLOWED_PATTERN in $ALLOWED_BUILDREQUIRES; do
- if [[ $BUILDREQUIRES == $ALLOWED_PATTERN ]]; then
- IS_ALLOWED=1
- break
- fi
- done
-
- if [[ $IS_ALLOWED == 0 ]]; then
- SPECFILE_NOT_ALLOWED_BUILDREQUIRES+="$BUILDREQUIRES$IFS"
- fi
-done
-
-# Collect not allowed BuildConflicts
-SPECFILE_NOT_ALLOWED_BUILDCONFLICTS=""
-for BUILDCONFLICTS in $SPECFILE_BUILDCONFLICTS; do
- IS_ALLOWED=0
- for ALLOWED_PATTERN in $ALLOWED_BUILDCONFLICTS; do
- if [[ $BUILDCONFLICTS == $ALLOWED_PATTERN ]]; then
- IS_ALLOWED=1
- break
- fi
- done
-
- if [[ $IS_ALLOWED == 0 ]]; then
- SPECFILE_NOT_ALLOWED_BUILDCONFLICTS+="$BUILDCONFLICTS$IFS"
- fi
-done
-
-# Collect not allowed Requires
-SPECFILE_NOT_ALLOWED_REQUIRES=""
-for REQUIRES in $SPECFILE_REQUIRES; do
- IS_ALLOWED=0
- for ALLOWED_PATTERN in $ALLOWED_REQUIRES; do
- if [[ $REQUIRES == $ALLOWED_PATTERN ]]; then
- IS_ALLOWED=1
- break
- fi
- done
-
- if [[ $IS_ALLOWED == 0 ]]; then
- SPECFILE_NOT_ALLOWED_REQUIRES+="$REQUIRES$IFS"
- fi
-done
-
-# Check if there are not allowed BuildRequires
-if [[ ! -z $SPECFILE_NOT_ALLOWED_BUILDREQUIRES ]]; then
- print_not_allowed_warning "BuildRequires" \
- "$SPECFILE_NOT_ALLOWED_BUILDREQUIRES" \
- "$ALLOWED_BUILDREQUIRES" \
- "$CHECK_ALWAYS"
-fi
-
-# Check if there are not allowed BuildConflicts
-if [[ ! -z $SPECFILE_NOT_ALLOWED_BUILDCONFLICTS ]]; then
- print_not_allowed_warning "BuildConflicts" \
- "$SPECFILE_NOT_ALLOWED_BUILDCONFLICTS" \
- "$ALLOWED_BUILDCONFLICTS" \
- "$CHECK_ALWAYS"
-fi
-
-# Check if there are not allowed Requires
-if [[ ! -z $SPECFILE_NOT_ALLOWED_REQUIRES ]]; then
- print_not_allowed_warning "Requires" \
- "$SPECFILE_NOT_ALLOWED_REQUIRES" \
- "$ALLOWED_REQUIRES" \
- "$CHECK_ALWAYS"
-fi
-
-# Check whether the test can be skipped
-if [[ $DISABLE_HAL_ROOTSTRAP_CHECKER != 0 && $CHECK_ALWAYS == "no" ]]; then
- exit 0
-fi
-
-if [[ ! -z $SPECFILE_NOT_ALLOWED_BUILDREQUIRES || ! -z $SPECFILE_NOT_ALLOWED_REQUIRES || ! -z $SPECFILE_NOT_ALLOWED_BUILDCONFLICTS ]]; then
- exit 0 # Let them pass for now
-fi
#Group:
License: Apache-2.0
Source0: %{name}-%{version}.tar.gz
-Source1: hal-rootstrap-checker.sh
-Source2: hal-rootstrap-checker.yaml
-Source3: macros.hal-rootstrap-checker
AutoReqProv: no
BuildRequires: cmake
%description -n %{devel_name}
%{name} Interface for product vendor developer
-### hal-rootstrap-checker
-%package checker
-Summary: %{name} checker
-Group: System/Base
-#Requires: hal-rootstrap-checker-plugin-conf
-
-%description checker
-Checker for the hal rootstrap
-
### hal-rootstrap-headed
%package -n %{headed_name}
Summary: Package for rootstrap of hal, for headed image
./modify_pc.py "%{buildroot}%{_libdir}/pkgconfig/hal-rootstrap-headed.pc" "%{buildroot}%{hal_rootstrap_headed_install_path}/%{_libdir}/pkgconfig"
rm -f "%{buildroot}%{hal_rootstrap_headed_install_path}/%{_libdir}/pkgconfig/*.pc"
-mkdir -p %{buildroot}%{_sysconfdir}/hal/rootstrap
-install -m 755 %{SOURCE1} %{buildroot}%{_sysconfdir}/hal/rootstrap
-install -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/hal/rootstrap
-
-mkdir -p %{buildroot}%{_sysconfdir}/rpm
-install -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/rpm
-
%files
%{hal_rootstrap_install_path}
%exclude %dir %{hal_rootstrap_install_path}/%{_includedir}
%defattr(-,root,root,-)
%{hal_rootstrap_headed_install_path}/%{_includedir}
%{_libdir}/pkgconfig/hal-rootstrap-headed.pc
-
-%files checker
-%defattr(-,root,root,-)
-%{_sysconfdir}/hal/rootstrap/hal-rootstrap-checker.sh
-%{_sysconfdir}/hal/rootstrap/hal-rootstrap-checker.yaml
-%{_sysconfdir}/rpm/macros.hal-rootstrap-checker