[PATCH rtems-libbsd 1/3] Add helper script to find licenses.

Joel Sherrill joel at rtems.org
Thu Sep 17 12:51:09 UTC 2020


I think I'm ok on all three of these patches but some
comments on the shell script. I can see where this is a
tedious but important check. And it can be improved easily.

Since this smells like something Chris would poke me f
or and call a "Joel script" :)

On Thu, Sep 17, 2020 at 4:33 AM Christian Mauderer <
christian.mauderer at embedded-brains.de> wrote:

> Update #4082
> ---
>  find_licenses_and_unused.sh | 121 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 121 insertions(+)
>  create mode 100755 find_licenses_and_unused.sh
>
> diff --git a/find_licenses_and_unused.sh b/find_licenses_and_unused.sh
> new file mode 100755
> index 00000000..ee15f652
> --- /dev/null
> +++ b/find_licenses_and_unused.sh
> @@ -0,0 +1,121 @@
> +#!/bin/bash
> +
> +#
> +# Copyright (c) 2018 embedded brains GmbH.  All rights reserved.
> +#
> +#  embedded brains GmbH
> +#  Dornierstr. 4
> +#  82178 Puchheim
> +#  Germany
> +#  <rtems at embedded-brains.de>
> +#
> +# Redistribution and use in source and binary forms, with or without
> +# modification, are permitted provided that the following conditions
> +# are met:
> +# 1. Redistributions of source code must retain the above copyright
> +#    notice, this list of conditions and the following disclaimer.
> +# 2. Redistributions in binary form must reproduce the above copyright
> +#    notice, this list of conditions and the following disclaimer in the
> +#    documentation and/or other materials provided with the distribution.
> +#
> +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> +# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
> +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL
> +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> STRICT
> +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
> WAY
> +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> +# SUCH DAMAGE.
> +#
> +
> +# exit on wrong command and undefined variable
> +set -e
> +set -u
> +set -o pipefail
> +
> +SCRIPTNAME=$0
> +TARGET="freebsd/"
> +SOURCE="freebsd-org/"
> +LIST="libbsd.py"
> +FORCE=0
> +
> +printhelp () {
> +       echo ""
> +       echo "Call:   ${SCRIPTNAME} <options>"
> +       echo "1. Find LICENSE files for each file in \"${TARGET}\" if the"
> +       echo "   license file is not in ${LIST}."
> +       echo "2. Find all files in \"${TARGET}\" that are not in
> \"${LIST}\"."
> +       echo "   Note: This function currently prints a lot of generated
> files too."
>

If they are generated, isn't there a source to generated file pattern that
can be
taken advantage of to eliminate them from the output ahead of the dirname in
checkfile.  Get the basename, switch on a set of known generated output
names, verify there is the correct input file, and then continue so it does
not
show up in the output.

Reducing the noisy output seems important and straightforward. You know
how to do it by hand so there should be a few patterns.


> +       echo "Reccomended usage:"
>

Spelling.


> +       echo "./${SCRIPTNAME} | sort | uniq"
>

Just add this to the find line that drives everything. And why not sort -u?

If you want it to be an option, just put those in a second function and
pipe through that.

maybe_sort()
{
  if [ ${do_sort} = "yes" ] l then
   sort -u
  else
    cat
 fi
}

+       echo ""
> +       echo "The following parameters are optional:"
> +       echo "  -h          Print this help and exit the script."
> +       echo "  -f          Force printing all license files."
> +       echo "  -v          Be more verbose. Can be used multiple times."
> +       exit 0
> +}
> +
> +while getopts "hfv" OPTION
> +do
> +       case ${OPTION} in
> +               h)  printhelp ;;
> +               f)  FORCE=1 ;;
> +               \?) echo "Unknown option \"-${OPTARG}\"."
> +                       exit 1 ;;
> +               :)  echo "Option \"-${OPTARG}\" needs an argument."; exit
> 1 ;;
> +       esac
> +done
> +shift $((${OPTIND} - 1))
> +
> +checkfile () {
> +       local FILE="$1"
> +       local FILE_WITHOUT_PATH=${FILE#"$TARGET"}
> +       local LICENSE=""
> +
> +       grep "${FILE_WITHOUT_PATH}" "${LIST}" > /dev/null || \
> +           echo "File not in ${LIST}: ${FILE_WITHOUT_PATH}"
> +
> +       local DIR="${SOURCE}`dirname ${FILE_WITHOUT_PATH}`"
> +       while [ "$DIR" != "." ]
> +       do
> +               local MAYBELICENSE="${DIR}/LICENSE*"
> +               if [ -e ${MAYBELICENSE} ]
> +               then
> +                       LICENSE=`ls ${MAYBELICENSE}`
> +                       break
> +               fi
> +               local MAYBELICENSE="${DIR}/COPY*"
> +               if [ -e ${MAYBELICENSE} ]
> +               then
> +                       LICENSE=`ls ${MAYBELICENSE}`
> +                       break
> +               fi
> +               DIR="`dirname ${DIR}`"
> +       done
> +
> +       if [ "${LICENSE}" != "" ]
> +       then
> +               local LICENSE_WITHOUT_PATH=${LICENSE#"$SOURCE"}
> +               if grep "${LICENSE_WITHOUT_PATH}" "${LIST}" > /dev/null
> +               then
> +                       if [ ${FORCE} -ne 0 ]
> +                       then
> +                               echo "License file found: ${LICENSE}"
> +                       fi
> +               else
> +                       echo "New license file found: ${LICENSE}"
> +               fi
> +       fi
> +}
> +
> +export -f checkfile
> +export TARGET
> +export SOURCE
> +export LIST
> +export FORCE
> +
> +find ${TARGET} -name "*\.[ch]" -exec bash -c 'checkfile "$0"' {} \;
> --
> 2.26.2
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200917/e0d39a18/attachment.html>


More information about the devel mailing list