#!/bin/bash CURDIR="$(realpath "$(dirname "$0")")" . "${CURDIR}/../utils/sh/log.sh" log "enable logging" while [ "$#" -gt 0 ]; do case $1 in -h|-?|--help|help) HELP=1 ;; -*) echo "Error: Unsupported flag $1" >&2 return 1 ;; *) # No more options break ;; esac shift done if [ "$HELP" ]; then printf "\ usage %s \n -?|-h|--help\tthis message " "$(basename "$0")" exit fi CARGO_PATH="$1" if [ -z "$CARGO_PATH" ]; then printf "please provide path to Cargo.toml\n" exit fi if [ -d "$CARGO_PATH" ]; then CARGO_PATH="${CARGO_PATH}/Cargo.toml" fi features=$(grep '^\[features\]' $1 -A99999999 | grep '^\[' -m 2 -B99999999 | grep -v '^\[' | cut -d '=' -f 1 | grep -v 'default') generate_combinations() { local items=($1) local size=$2 local current=$3 local combination=$4 if [ $current -eq $size ]; then echo "$combination" return fi for ((i = 0; i < ${#items[@]}; ++i)); do new_combination="$combination ${items[$i]}" remaining_items=("${items[@]:0:$i}" "${items[@]:$((i + 1))}") generate_combinations "$(IFS=" "; echo "${remaining_items[*]}")" $size $((current + 1)) "$new_combination" done } for ((i = 1; i <= $(wc -w <<< "$features"); ++i)); do echo "Generating combinations of size $i" combos=$(generate_combinations "$features" $i 0 "") echo "$combos" | while read line do echo "Running clippy with features: $line" combo=$(echo $combo | xargs) # Trim echo "Running clippy with features: $combo" if ! cargo clippy --features "$combo"; then echo "Error found in combination: $combo" exit 1 fi done done