[FFmpeg-devel] [PATCH V3 1/2] configure: sort decoder/encoder/filter/... names in alphabet order

Guo, Yejun yejun.guo at intel.com
Tue Apr 23 13:31:22 EEST 2019


take decoder names an example, with the default page length, shell command
'pr' needs two pages for all the decoder names. The names are firstly printed
in the first page, then in the second page. So, as a whole, the names are
sorted neither in column order nor in row order. It's a little confused.

One method is to calculate the proper page length, so all the names are printed
in one page by 'pr -l', and so strictly in alphabet order, column by column.

Another method is to use command printf instead of pr, because buybox doesn't
have pr. This patch refines print_in_columns to print the names with printf
in alphabet order, very similar with 'pr -l', except the case when the last
column is not fully filled with names.

The interface of print_in_columns changed, the input needs to be sorted first,
and then pass into print_in_columns as function parameters. It gives the
flexibility the input parameters can be considered as an array and can be indexed.

contributor: Alexander Strasser <eclipse7 at gmx.net>
Signed-off-by: Guo, Yejun <yejun.guo at intel.com>
---
 configure | 32 +++++++++++++++++++++++---------
 1 file changed, 23 insertions(+), 9 deletions(-)

diff --git a/configure b/configure
index 3b11ffe..f8032aa 100755
--- a/configure
+++ b/configure
@@ -3832,14 +3832,28 @@ die_unknown(){
 }
 
 print_in_columns() {
-    cols=$(expr $ncols / 24)
-    cat | tr ' ' '\n' | sort | pr -r "-$cols" -w $ncols -t
+    col_width=24
+    cols=$(expr $ncols / $col_width)
+    rows=$(expr $(expr $# + $cols - 1) / $cols)
+    for row in $(seq $rows); do
+        index=$row
+        line=""
+        fmt=""
+        for col in $(seq $cols); do
+            if [ $index -le $# ]; then
+                eval line='"$line "${'$index'}'
+                fmt="$fmt%-${col_width}s"
+            fi
+            index=$(expr $index + $rows)
+        done
+        printf "$fmt\n" $line
+    done | sed 's/ *$//'
 }
 
 show_list() {
     suffix=_$1
     shift
-    echo $* | sed s/$suffix//g | print_in_columns
+    print_in_columns $(echo $* | sed s/$suffix//g | tr ' ' '\n' | sort)
     exit 0
 }
 
@@ -7121,32 +7135,32 @@ test -n "$random_seed" &&
 echo
 
 echo "External libraries:"
-print_enabled '' $EXTERNAL_LIBRARY_LIST $EXTERNAL_AUTODETECT_LIBRARY_LIST | print_in_columns
+print_in_columns $(print_enabled '' $EXTERNAL_LIBRARY_LIST $EXTERNAL_AUTODETECT_LIBRARY_LIST | tr ' ' '\n' | sort)
 echo
 
 echo "External libraries providing hardware acceleration:"
-print_enabled '' $HWACCEL_LIBRARY_LIST $HWACCEL_AUTODETECT_LIBRARY_LIST | print_in_columns
+print_in_columns $(print_enabled '' $HWACCEL_LIBRARY_LIST $HWACCEL_AUTODETECT_LIBRARY_LIST | tr ' ' '\n' | sort)
 echo
 
 echo "Libraries:"
-print_enabled '' $LIBRARY_LIST | print_in_columns
+print_in_columns $(print_enabled '' $LIBRARY_LIST | tr ' ' '\n' | sort)
 echo
 
 echo "Programs:"
-print_enabled '' $PROGRAM_LIST | print_in_columns
+print_in_columns $(print_enabled '' $PROGRAM_LIST | tr ' ' '\n' | sort)
 echo
 
 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
     echo "Enabled ${type}s:"
     eval list=\$$(toupper $type)_LIST
-    print_enabled '_*' $list | print_in_columns
+    print_in_columns $(print_enabled '_*' $list | tr ' ' '\n' | sort)
     echo
 done
 
 if test -n "$ignore_tests"; then
     ignore_tests=$(echo $ignore_tests | tr ',' ' ')
     echo "Ignored FATE tests:"
-    echo $ignore_tests | print_in_columns
+    print_in_columns $(echo $ignore_tests | tr ' ' '\n' | sort)
     echo
 fi
 
-- 
2.7.4



More information about the ffmpeg-devel mailing list