shell problem: salvare il retval di un comando in mezzo ad una pipe

Ciao,

ho un problema di shell programming che non riesco a risolvere. Forse uno
di voi ha la soluzione.

Il problema e' il seguente:
Ho una pipeline di comandi, tipo "CC | SS" dove CC produce del output e SS
e' un filtro che riformatta l'output di CC. Io voglio eseguire la pipe e
salvarmi il valore di ritorno di CC.

Ho provato i seguenti comandi:
   CC; retval=$? | SS
Questo non funziona perche' la pipe usa l'output di "retval=$?" e non di CC.
   (CC; retval=$?) | SS
Adesso SS elabora l'output di CC, ma la variabile retval non e' definita
al di fuori delle parentesi, perche' le parentesi lanciano una sub-shell e
non so come esportare variabili da li'.

Background del problema:
Ho un Makefile che deve fermarsi al primo errore. Pero' io devo
riformattare l'output di $(CC). La regola di Make e' a grandi linee la
seguente:

%.o: %.c
    $(CC) -c $(CFLAGS) -o $@ $< 2>&1 | sed -e 's/ome/thing/'

Essendo sed l'ultimo programma nella pipe, la shell ritorna il retvalue di
sed che e' sempre 0. Quindi make continua a compilare anche se c'e' un
errore.
Non posso fare la ridirezione del output in un file e poi riformattarlo,
perche' lo scopo di questo esercizio e' di avere un output 'cliccable' in
una IDE. Quindi non posso fermarmi subito quando $(CC) ritorna errore.

L'unica soluzione che ho trovato e' la seguente, ma e' veramente
inefficiente:

%.o: %.c
    retval=0
    $(CC) -c $(CFLAGS) -o $@ $< > /tmp/file 2>&1 || retval=1
    sed -e 's/ome/thing/' /tmp/file
    [ $$retval -eq 0 ]

Qualcuno ha un idea come potrei risolvere questo in meno righe di codice?

Ciao,
Thomas