#!/bin/bash # # This script makes a patch for LLVM ensuring the correct diff options and # putting the files in a standard review order. function error { retcode="$?" echo "mkpatch: error: $1 ($retcode)" exit 1 } if [ ! -e llvm.spec.in ] ; then error "Please change directory to the LLVM top source directory" fi if [ "$#" -ne 1 ] ; then error "usage: utils/mkpatch [PATCH_NAME]" fi NAME="$1" echo "mkpatch: Generating differences on top level files" cvs diff -l -Ntdup -5 . > "$NAME".patch.raw 2>&1 echo "mkpatch: Generating differences on all directories" cvs diff -Ntdup -5 >> "$NAME".patch.raw 2>&1 \ autoconf docs utils include lib/System lib/Support lib/VMCore lib/AsmParser \ lib/Bytecode lib/Analysis lib/Transforms lib/CodeGen lib/Target \ lib/ExecutionEngine lib/Debugger lib/Linker \ tools test runtime projects examples win32 Xcode echo "mkpatch: Removing cruft from the patch file" sed "$NAME".patch.raw -e '/^[?] .*/d' -e '/^cvs diff: Diffing/d' | awk '\ BEGIN { deleting = 0; } \ /^Index: .*[.]cvs$/ { deleting = 1; fname=substr($0,7); print "Skipping: ", fname > "/dev/stderr"; } \ /^Index:.*/ && !/^Index: .*[.]cvs$/ { deleting = 0; } \ { if (! deleting) { print; } } \ ' > "$NAME".patch || error "sed/awk cleanup failed"