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