#!/bin/bash tempdir="$(mktemp -d --tmpdir ${0##*/}.XXXXXXXXXXX)" urlencode() { perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$1" } # outputs in the format # class-id:line classify-lines() { while read line; do _line="$(printf '%s' "$line"|sed -r 's/^#(\S)/\1/')" class='other' case "$_line" in ac_add_options\ --enable-application=*) class=setapp;; .\ *mozconfig) class=setapp;; *profile-guided-optimization*|*pgo*) class=pgo;; *optimiz*) class=vendor;; ac_add_options\ --*-dirs) class=vendor;; ac_add_options\ --*-home=*) class=vendor;; ac_add_options\ --libdir=*) class=vendor;; ac_add_options\ --prefix=*) class=vendor;; *OFFICIAL*) class=vendor;; ac_add_options\ --with-*=*) class=application;; ac_add_options\ --*branding*) class=application;; *MOZ_PHOENIX*) class=application;; ac_add_options\ --*-system-*) class=system;; ac_add_options\ --with-pthreads) class=system;; ac_add_options\ --build=*) class=platform;; ac_add_options\ --host=*) class=platform;; *SHORT_LIBNAME*) class=platform;; ac_add_options\ --*=*) class=other;; ac_add_options\ --enable-toolkit-*) class=other;; ac_add_options\ --disable-toolkit-*) class=other;; ac_add_options\ --enable-*) class=feature;; ac_add_options\ --disable-*) class=feature;; ac_add_options\ --with-*) class=feature;; '# '*) class=comment echo "$line" >> "$tempdir/comments" ;; esac if [[ $class != comment ]]; then ci="$tempdir/comments" co="$tempdir/comments-$(urlencode "$line")" [[ -f $ci ]] && mv "$ci" "$co" class_id='' case "$class" in setapp) class_id=0;; system) class_id=1;; feature) class_id=2;; vendor) class_id=3;; platform) class_id=4;; application) class_id=5;; other) class_id=6;; pgo) class_id=7;; *) libremessages error "INVALID CLASS: $class"; exit 1;; esac printf '%s:%s\n' "$class_id" "$line" fi done } format-classes() ( echo 0 > "$tempdir/prev_id" IFS=: while read class_id line; do prev_id=$(cat "$tempdir/prev_id") if [[ "$class_id" != "$prev_id" ]]; then echo '' case "$class_id" in 0) :;; 1) echo '# System libraries';; 2) echo '# Features';; 3) echo '# Vendor settings';; 4) echo '# Platform settings';; 5) echo '# Application settings';; 6) echo '# Other';; 7) echo '# PGO';; esac fi printf '%s\n' "$line" echo "$class_id" > "$tempdir/prev_id" done echo '' echo '# Build-generated' ) clean() { sed -r \ -e '/#\s*(System libraries|Features|Other|PGO)/d' \ -e '/#\s*(Vendor|Platform|Application) settings/d' \ -e '/#\s*Build-generated/d' } hack() { sed -r \ -e '/^\s*$/d' \ -e '/#\s*(IceCat|Iceweasel)/d' \ -e '/#\s*(ConnochaetOS|Parabola)/d' \ -e 's/# (ac_add_options)/#\1/' } add-comments() { while read line; do file="$tempdir/comments-$(urlencode "$line")" if [[ -f $file ]]; then cat "$file" fi echo "$line" done file="$tempdir/comments" if [[ -f $file ]]; then cat "$file" fi } main() { cat \ | clean \ | hack \ | classify-lines "$file" \ | sort \ | format-classes \ | add-comments \ # above line intentionally left blank rm -rf "$tempdir" } main "$@"