Hi Mike, > I know the current code uses diff -Dname option which is not > universal.
As an aside, I see POSIX has diff support -e for ed(1) output. And -s for running a script. How about turning -e's output into ed that inserts the cpp(1) commands and carrying on as before? Have a poke at --8<--snip-- #! /bin/bash seq 10 >foo seq 12 | sed '3,4d; 6s/./&&/; 7p' >bar diff -Dfoo foo bar echo cp foo foo.new diff -e foo bar | awk -F, ' copy { if ($0 == ".") { if (closing) print closing copy = 0 } print next } # 42a -> 42,a /[acd]$/ { $0 = substr($0, 1, length - 1) FS substr($0, length) } # 42,a -> 42,42,a NF == 2 { $0 = $1 FS $1 FS $2 } { print "\t=" $0 } # 42,a $NF == "a" { print $1 "a" print "#ifdef foo" closing = "#endif /* foo */" copy = 1 next } # 42,314,c $NF == "c" { print $1 "i" print "#ifndef foo" print "." print ($2 + 1) "a" # Bumped on by insert. print "#else /* foo */" copy = 1 closing = "#endif /* foo */" next } # 42,314,d $NF == "d" { print $2 "a" print "#endif /* ! foo */" print "." print $1 "i" print "#ifndef foo" print "." next } END { print "w\nq" } ' >foo.ed cat foo.ed echo sed -i '/^\t=/d' foo.ed ed -s foo.new <foo.ed diff <(diff -Dfoo foo bar) foo.new && echo ok --8<--snip-- It's not had much testing as I've just knocked it up, but it shows the idea. And you might want to ditch the cpp commands and switch to something that's nicer to handle in the rest of the script. Or maybe do the .mk-up directly. Cheers, Ralph.