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

Guo, Yejun yejun.guo at intel.com
Wed Apr 24 11:51:01 EEST 2019



> -----Original Message-----
> From: Guo, Yejun
> Sent: Wednesday, April 24, 2019 3:29 PM
> To: Guo, Yejun <yejun.guo at intel.com>
> Subject: Re: [FFmpeg-devel] [PATCH V4 1/2] configure: sort
> decoder/encoder/filter/... names in alphabet order
> 
> > print_in_columns() {
> > -    cols=$(expr $ncols / 24)
> > -    cat | tr ' ' '\n' | sort | pr -r "-$cols" -w $ncols -t
> > +    set -- $(cat | tr ' ' '\n' | sort)
> > +    col_width=24
> > +    cols=$(($ncols / $col_width))
> > +    rows=$(($(($# + $cols - 1)) / $cols))
> > +    cols_seq=$(seq $cols)
> > +    rows_seq=$(seq $rows)
> > +    for row in $rows_seq; do
> > +        index=$row
> > +        line=""
> > +        fmt=""
> > +        for col in $cols_seq; do
> > +            if [ $index -le $# ]; then
> > +                eval line='"$line "${'$index'}'
> > +                fmt="$fmt%-${col_width}s"
> > +            fi
> > +            index=$(($index + $rows))
> > +        done
> > +        printf "$fmt\n" $line
> > +    done | sed 's/ *$//'
> > }
> 
> Looks good.
> 
> Hopefully last batch of comments, nothing critical:
> 
> - Make sure the new code behaves well when $ncols < 24. It's an unlikely case
>   but I think v3 and v4 don't print anything if that happens.

yes, there will be script error with division by zero. I'll add 'if' here.

> 
> - You don't need to "build" `$fmt`, because printf reuses the format string
>   if there are more values than placeholders. Just use one fixed "%-24s".

thanks, will change to it.

> 
> - The `cat |` in `cat | tr ' ' '\n' | sort` is not required. It just adds
>   a process without giving any value.

thanks, will remove 'cat |'.

> 
> - When `$(<some-commands>)` is unquoted and not part of an assignment then
> it's
>   also subject to glob expansion. E.g. try `printf "A B *" | print_in_columns`
>   with your code compared to the original version with `pr`. For our case it's
>   not an issue because the values do not expand (and other parts in configure
>   will break if they did expand), but in general the correct (and slower) way
>   to handle it is with `read`, so it's worth adding a comment that there are
>   some constraints with the values.

got it, will add the comments.

btw, I tried read as following, looks that read also expands '*':
print_in_columns() {
	read inputs
	echo $inputs
}

echo "xxxxxxxxxxxxx"
echo "A B *" | print_in_columns
echo "yyyyyyyyyyyyy"

> 
> - `$rows_seq` is not required (but also doesn't hurt). It's evaluated only once
>   anyway - only when the outer loop starts, unlike `$cols_seq` which is used
>   with a new `for` on each row. But it doesn't have a performance impact and
>   it's a good practice in general where possible, so it's fine to keep it.

ok, will keep it.

> 
> - To measure the runtime of a program you can do `time program
> <arguments>`.
>   To measure the runtime of sections in a script you can use `time.sh` which I
>   used with `configure` in the past - https://github.com/avih/time.sh .

thanks for your nice tool!

> 
> 
> > To check a name with human eye, after we get the nearby area for the check:
> > If row by row, we have to turn our eyes from left to right, from up to down,
> > and then again left to right, up to down, maybe again and again. And there is
> still
> > possibility that we missed the check.
> >
> > If column by column, we just turn from up to down (the same column) and
> > can easily check if the name is there or not.
> 
> Yeah, no disagreement there. Just wondered if it was considered. Thanks.


More information about the ffmpeg-devel mailing list