#!/usr/bin/env sh IFS=''; set -fCu # safe mode: no split/glob = no quoting headaches let() { return $((!($1))); } # Automatically (re-)indent make...done blocks in a Mamfile. # Usage: Mamfile_indent Mamfile.new # # Should work on all current POSIX compliant shells. # By Martijn Dekker , 2021. Public domain. # Spacing per indentation level. Edit to change style. indent=' ' # one tab # Remove existing indentation, add new indentation. indentlvl=0 sed 's/^[[:space:]]*//' \ | while read -r line do case $line in '') continue ;; done*) let "indentlvl -= 1" ;; esac spc= i=0 while let "(i += 1) <= indentlvl" do spc=$indent$spc done printf '%s\n' $spc$line case $line in make*) let "indentlvl += 1" ;; esac done