1d4a945e2SPaul E. McKenney#!/bin/sh 2d4a945e2SPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+ 3d4a945e2SPaul E. McKenney# 4d4a945e2SPaul E. McKenney# Create a spreadsheet from torture-test Kconfig options and kernel boot 5d4a945e2SPaul E. McKenney# parameters. Run this in the directory containing the scenario files. 6d4a945e2SPaul E. McKenney# 7d4a945e2SPaul E. McKenney# Usage: config2csv path.csv [ "scenario1 scenario2 ..." ] 8d4a945e2SPaul E. McKenney# 9d4a945e2SPaul E. McKenney# By default, this script will take the list of scenarios from the CFLIST 10d4a945e2SPaul E. McKenney# file in that directory, otherwise it will consider only the scenarios 11d4a945e2SPaul E. McKenney# specified on the command line. It will examine each scenario's file 12d4a945e2SPaul E. McKenney# and also its .boot file, if present, and create a column in the .csv 13d4a945e2SPaul E. McKenney# output file. Note that "CFLIST" is a synonym for all the scenarios in the 14d4a945e2SPaul E. McKenney# CFLIST file, which allows easy comparison of those scenarios with selected 15d4a945e2SPaul E. McKenney# scenarios such as BUSTED that are normally omitted from CFLIST files. 16d4a945e2SPaul E. McKenney 17d4a945e2SPaul E. McKenneycsvout=${1} 18d4a945e2SPaul E. McKenneyif test -z "$csvout" 19d4a945e2SPaul E. McKenneythen 20d4a945e2SPaul E. McKenney echo "Need .csv output file as first argument." 21d4a945e2SPaul E. McKenney exit 1 22d4a945e2SPaul E. McKenneyfi 23d4a945e2SPaul E. McKenneyshift 24d4a945e2SPaul E. McKenneydefaultconfigs="`tr '\012' ' ' < CFLIST`" 25d4a945e2SPaul E. McKenneyif test "$#" -eq 0 26d4a945e2SPaul E. McKenneythen 27d4a945e2SPaul E. McKenney scenariosarg=$defaultconfigs 28d4a945e2SPaul E. McKenneyelse 29d4a945e2SPaul E. McKenney scenariosarg=$* 30d4a945e2SPaul E. McKenneyfi 31d4a945e2SPaul E. McKenneyscenarios="`echo $scenariosarg | sed -e "s/\<CFLIST\>/$defaultconfigs/g"`" 32d4a945e2SPaul E. McKenney 33*c211ae9cSPaul E. McKenneyT=`mktemp -d /tmp/config2latex.sh.XXXXXX` 34d4a945e2SPaul E. McKenneytrap 'rm -rf $T' 0 35d4a945e2SPaul E. McKenney 36d4a945e2SPaul E. McKenneycat << '---EOF---' >> $T/p.awk 37d4a945e2SPaul E. McKenneyEND { 38d4a945e2SPaul E. McKenney---EOF--- 39d4a945e2SPaul E. McKenneyfor i in $scenarios 40d4a945e2SPaul E. McKenneydo 41d4a945e2SPaul E. McKenney echo ' s["'$i'"] = 1;' >> $T/p.awk 42d4a945e2SPaul E. McKenney grep -v '^#' < $i | grep -v '^ *$' > $T/p 43d4a945e2SPaul E. McKenney if test -r $i.boot 44d4a945e2SPaul E. McKenney then 45d4a945e2SPaul E. McKenney tr -s ' ' '\012' < $i.boot | grep -v '^#' >> $T/p 46d4a945e2SPaul E. McKenney fi 47d4a945e2SPaul E. McKenney sed -e 's/^[^=]*$/&=?/' < $T/p | 48d4a945e2SPaul E. McKenney sed -e 's/^\([^=]*\)=\(.*\)$/\tp["\1:'"$i"'"] = "\2";\n\tc["\1"] = 1;/' >> $T/p.awk 49d4a945e2SPaul E. McKenneydone 50d4a945e2SPaul E. McKenneycat << '---EOF---' >> $T/p.awk 51d4a945e2SPaul E. McKenney ns = asorti(s, ss); 52d4a945e2SPaul E. McKenney nc = asorti(c, cs); 53d4a945e2SPaul E. McKenney for (j = 1; j <= ns; j++) 54d4a945e2SPaul E. McKenney printf ",\"%s\"", ss[j]; 55d4a945e2SPaul E. McKenney printf "\n"; 56d4a945e2SPaul E. McKenney for (i = 1; i <= nc; i++) { 57d4a945e2SPaul E. McKenney printf "\"%s\"", cs[i]; 58d4a945e2SPaul E. McKenney for (j = 1; j <= ns; j++) { 59d4a945e2SPaul E. McKenney printf ",\"%s\"", p[cs[i] ":" ss[j]]; 60d4a945e2SPaul E. McKenney } 61d4a945e2SPaul E. McKenney printf "\n"; 62d4a945e2SPaul E. McKenney } 63d4a945e2SPaul E. McKenney} 64d4a945e2SPaul E. McKenney---EOF--- 65d4a945e2SPaul E. McKenneyawk -f $T/p.awk < /dev/null > $T/p.csv 66d4a945e2SPaul E. McKenneycp $T/p.csv $csvout 67