1*49cdfc7eSAndroid Build Coastguard Worker#!/bin/sh -eu 2*49cdfc7eSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0-or-later 3*49cdfc7eSAndroid Build Coastguard Worker# Copyright (c) 2021 SUSE LLC <[email protected]> 4*49cdfc7eSAndroid Build Coastguard Worker 5*49cdfc7eSAndroid Build Coastguard Worker# Helper for running spatch Coccinelle scripts on the LTP source tree 6*49cdfc7eSAndroid Build Coastguard Worker 7*49cdfc7eSAndroid Build Coastguard Workerif [ ! -d lib ] || [ ! -d scripts/coccinelle ]; then 8*49cdfc7eSAndroid Build Coastguard Worker echo "$0: Can't find lib or scripts directories. Run me from top src dir" 9*49cdfc7eSAndroid Build Coastguard Worker exit 1 10*49cdfc7eSAndroid Build Coastguard Workerfi 11*49cdfc7eSAndroid Build Coastguard Worker 12*49cdfc7eSAndroid Build Coastguard Workerdo_fix=no 13*49cdfc7eSAndroid Build Coastguard Worker 14*49cdfc7eSAndroid Build Coastguard Worker# Run a script on the lib dir 15*49cdfc7eSAndroid Build Coastguard Workerlibltp_spatch() { 16*49cdfc7eSAndroid Build Coastguard Worker echo libltp_spatch $* 17*49cdfc7eSAndroid Build Coastguard Worker 18*49cdfc7eSAndroid Build Coastguard Worker if [ $do_fix = yes ]; then 19*49cdfc7eSAndroid Build Coastguard Worker spatch --dir lib \ 20*49cdfc7eSAndroid Build Coastguard Worker --ignore lib/parse_opts.c \ 21*49cdfc7eSAndroid Build Coastguard Worker --ignore lib/newlib_tests \ 22*49cdfc7eSAndroid Build Coastguard Worker --ignore lib/tests \ 23*49cdfc7eSAndroid Build Coastguard Worker --use-gitgrep \ 24*49cdfc7eSAndroid Build Coastguard Worker --in-place \ 25*49cdfc7eSAndroid Build Coastguard Worker -D fix \ 26*49cdfc7eSAndroid Build Coastguard Worker --include-headers \ 27*49cdfc7eSAndroid Build Coastguard Worker $* 28*49cdfc7eSAndroid Build Coastguard Worker spatch --dir include \ 29*49cdfc7eSAndroid Build Coastguard Worker --use-gitgrep \ 30*49cdfc7eSAndroid Build Coastguard Worker --in-place \ 31*49cdfc7eSAndroid Build Coastguard Worker -D fix \ 32*49cdfc7eSAndroid Build Coastguard Worker --include-headers \ 33*49cdfc7eSAndroid Build Coastguard Worker $* 34*49cdfc7eSAndroid Build Coastguard Worker else 35*49cdfc7eSAndroid Build Coastguard Worker spatch --dir lib \ 36*49cdfc7eSAndroid Build Coastguard Worker --ignore lib/parse_opts.c \ 37*49cdfc7eSAndroid Build Coastguard Worker --ignore lib/newlib_tests \ 38*49cdfc7eSAndroid Build Coastguard Worker --ignore lib/tests \ 39*49cdfc7eSAndroid Build Coastguard Worker --use-gitgrep \ 40*49cdfc7eSAndroid Build Coastguard Worker --include-headers \ 41*49cdfc7eSAndroid Build Coastguard Worker $* 42*49cdfc7eSAndroid Build Coastguard Worker spatch --dir include \ 43*49cdfc7eSAndroid Build Coastguard Worker --use-gitgrep \ 44*49cdfc7eSAndroid Build Coastguard Worker --include-headers \ 45*49cdfc7eSAndroid Build Coastguard Worker $* 46*49cdfc7eSAndroid Build Coastguard Worker fi 47*49cdfc7eSAndroid Build Coastguard Worker} 48*49cdfc7eSAndroid Build Coastguard Worker 49*49cdfc7eSAndroid Build Coastguard Workertests_spatch() { 50*49cdfc7eSAndroid Build Coastguard Worker echo tests_spatch $* 51*49cdfc7eSAndroid Build Coastguard Worker 52*49cdfc7eSAndroid Build Coastguard Worker if [ $do_fix = yes ]; then 53*49cdfc7eSAndroid Build Coastguard Worker spatch --dir testcases \ 54*49cdfc7eSAndroid Build Coastguard Worker --dir lib/newlib_tests \ 55*49cdfc7eSAndroid Build Coastguard Worker --use-gitgrep \ 56*49cdfc7eSAndroid Build Coastguard Worker --in-place \ 57*49cdfc7eSAndroid Build Coastguard Worker -D fix \ 58*49cdfc7eSAndroid Build Coastguard Worker --include-headers \ 59*49cdfc7eSAndroid Build Coastguard Worker $* 60*49cdfc7eSAndroid Build Coastguard Worker else 61*49cdfc7eSAndroid Build Coastguard Worker spatch --dir testcases \ 62*49cdfc7eSAndroid Build Coastguard Worker --dir lib/newlib_tests \ 63*49cdfc7eSAndroid Build Coastguard Worker --use-gitgrep \ 64*49cdfc7eSAndroid Build Coastguard Worker --include-headers \ 65*49cdfc7eSAndroid Build Coastguard Worker $* 66*49cdfc7eSAndroid Build Coastguard Worker fi 67*49cdfc7eSAndroid Build Coastguard Worker} 68*49cdfc7eSAndroid Build Coastguard Worker 69*49cdfc7eSAndroid Build Coastguard Workerusage() 70*49cdfc7eSAndroid Build Coastguard Worker{ 71*49cdfc7eSAndroid Build Coastguard Worker cat <<EOF 72*49cdfc7eSAndroid Build Coastguard WorkerUsage: 73*49cdfc7eSAndroid Build Coastguard Worker$0 [ -f ] <patch basename> [ <patch basename> [...] ] 74*49cdfc7eSAndroid Build Coastguard Worker$0 -h 75*49cdfc7eSAndroid Build Coastguard Worker 76*49cdfc7eSAndroid Build Coastguard WorkerOptions: 77*49cdfc7eSAndroid Build Coastguard Worker-f Apply the semantic patch in-place to fix the code 78*49cdfc7eSAndroid Build Coastguard Worker-h You are reading it 79*49cdfc7eSAndroid Build Coastguard Worker 80*49cdfc7eSAndroid Build Coastguard WorkerIf run without -f then the semantic patch will only print locations 81*49cdfc7eSAndroid Build Coastguard Workerwhere it matches or show a diff. 82*49cdfc7eSAndroid Build Coastguard Worker 83*49cdfc7eSAndroid Build Coastguard WorkerEOF 84*49cdfc7eSAndroid Build Coastguard Worker} 85*49cdfc7eSAndroid Build Coastguard Worker 86*49cdfc7eSAndroid Build Coastguard Workerwhile getopts "fh" opt; do 87*49cdfc7eSAndroid Build Coastguard Worker case $opt in 88*49cdfc7eSAndroid Build Coastguard Worker f) do_fix=yes;; 89*49cdfc7eSAndroid Build Coastguard Worker h|?) usage; exit $([ $opt = h ]);; 90*49cdfc7eSAndroid Build Coastguard Worker esac 91*49cdfc7eSAndroid Build Coastguard Workerdone 92*49cdfc7eSAndroid Build Coastguard Worker 93*49cdfc7eSAndroid Build Coastguard Workershift $(($OPTIND - 1)) 94*49cdfc7eSAndroid Build Coastguard Worker 95*49cdfc7eSAndroid Build Coastguard Workerif [ $# -eq 0 ]; then 96*49cdfc7eSAndroid Build Coastguard Worker echo -e "Missing semantic patch name \n" 97*49cdfc7eSAndroid Build Coastguard Worker usage; exit 1 98*49cdfc7eSAndroid Build Coastguard Workerfi 99*49cdfc7eSAndroid Build Coastguard Worker 100*49cdfc7eSAndroid Build Coastguard Workerif [ $do_fix = yes ] && [ -n "$(git ls-files -m -d)" ]; then 101*49cdfc7eSAndroid Build Coastguard Worker echo "At least stage your current changes!" 102*49cdfc7eSAndroid Build Coastguard Worker exit 1 103*49cdfc7eSAndroid Build Coastguard Workerfi 104*49cdfc7eSAndroid Build Coastguard Worker 105*49cdfc7eSAndroid Build Coastguard Workerfor spatch_file in $*; do 106*49cdfc7eSAndroid Build Coastguard Worker case $spatch_file in 107*49cdfc7eSAndroid Build Coastguard Worker libltp-test-macro) 108*49cdfc7eSAndroid Build Coastguard Worker libltp_spatch --sp-file scripts/coccinelle/libltp-test-macro.cocci;; 109*49cdfc7eSAndroid Build Coastguard Worker libltp-test-macro-vars) 110*49cdfc7eSAndroid Build Coastguard Worker libltp_spatch --sp-file scripts/coccinelle/libltp-test-macro-vars.cocci \ 111*49cdfc7eSAndroid Build Coastguard Worker --ignore lib/tst_test.c;; 112*49cdfc7eSAndroid Build Coastguard Worker *) 113*49cdfc7eSAndroid Build Coastguard Worker tests_spatch --sp-file scripts/coccinelle/$spatch_file.cocci;; 114*49cdfc7eSAndroid Build Coastguard Worker esac 115*49cdfc7eSAndroid Build Coastguard Workerdone 116*49cdfc7eSAndroid Build Coastguard Worker 117*49cdfc7eSAndroid Build Coastguard Worker 118*49cdfc7eSAndroid Build Coastguard Worker 119