blob: 7de1bf612824fec894a976e0fb1018bc7c8cf843 [file] [log] [blame]
#!/usr/bin/env bash
#
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
# Helper script that reads a file from stdin and replaces every tab character
# with at most eight spaces (i.e. what smart tabs would render it as at an
# eight-space tab.
#
# This is useful for cleaning up the output of GCC tools that are excited about
# mixing tabs and spaces.
set -e
# A simple perl program that matches every tab in every line
# and replaces it with `8 - n % 8` spaces, where `n` is the
# index of the tab. Although the array $@ holds this
# information, it does not account for previous tab
# replacements, so we need to maintain a running total of
# how many new spaces we've added, which we do with `$acc`.
perl -pe '
my $acc = 0;
s/\t/
my $sp = 8 - ($acc + $-[0]) % 8;
$acc += $sp - 1;
" " x $sp
/eg'