Reviewed-by: Ray Ni <[email protected]>

> -----Original Message-----
> From: Luo, Heng <[email protected]>
> Sent: Friday, April 10, 2020 9:06 AM
> To: [email protected]
> Cc: Ni, Ray <[email protected]>; Dong, Eric <[email protected]>; Gao, Liming 
> <[email protected]>; Feng, Bob C
> <[email protected]>; Chan, Amy <[email protected]>
> Subject: [PATCH] Platform/Intel/Tools: Add scripts to set PACKAGES_PATH 
> environment
> 
> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=2656
> 
> 1. Add GetPackagesPath.py, it will be used to get package pathes from
>   special directories. A sub directory is a qualified package path
>   when an EDKII Package can be found under it.
> 2. Add AppendPackagesPath.bat and AppendPackagesPath.sh, these scripts
>   call GetPackagesPath.py to collect all package paths under specified
>   directories and append them to PACKAGES_PATH environment variable.
> 
> Cc: Ray Ni <[email protected]>
> Cc: Eric Dong <[email protected]>
> Cc: Liming Gao <[email protected]>
> Cc: Bob Feng <[email protected]>
> Cc: Amy Chan <[email protected]>
> Signed-off-by: Heng Luo <[email protected]>
> ---
>  Platform/Intel/Tools/AppendPackagesPath/AppendPackagesPath.bat | 33 
> +++++++++++++++++++++++++++++++++
>  Platform/Intel/Tools/AppendPackagesPath/AppendPackagesPath.sh  | 42
> ++++++++++++++++++++++++++++++++++++++++++
>  Platform/Intel/Tools/AppendPackagesPath/GetPackagesPath.py     | 98
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  Platform/Intel/Tools/AppendPackagesPath/Readme.md              | 28 
> ++++++++++++++++++++++++++++
>  4 files changed, 201 insertions(+)
> 
> diff --git a/Platform/Intel/Tools/AppendPackagesPath/AppendPackagesPath.bat
> b/Platform/Intel/Tools/AppendPackagesPath/AppendPackagesPath.bat
> new file mode 100644
> index 0000000000..da15d9c451
> --- /dev/null
> +++ b/Platform/Intel/Tools/AppendPackagesPath/AppendPackagesPath.bat
> @@ -0,0 +1,33 @@
> +@REM @file
> 
> +@REM Windows batch file to set PACKAGES_PATH environment
> 
> +@REM
> 
> +@REM Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +@REM SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +@REM
> 
> +@REM This script calls GetPackagesPath.py to collect all package paths under
> 
> +@REM specified directories and appends them to PACKAGES_PATH environment
> 
> +@REM variable. A sub directory is a qualified package path when an EDKII
> 
> +@REM Package can be found under it.
> 
> +
> 
> +@echo off
> 
> +@if /I "%1"=="" @goto Usage
> 
> +@if /I "%1"=="-h" @goto Usage
> 
> +@if /I "%1"=="--help" @goto Usage
> 
> +@if /I "%1"=="/?" @goto Usage
> 
> +
> 
> +for /f %%i in ('python %~dp0\GetPackagesPath.py %*') do (
> 
> +    if defined PACKAGES_PATH (
> 
> +        set "PACKAGES_PATH=%PACKAGES_PATH%;%%i"
> 
> +    ) else (
> 
> +        set "PACKAGES_PATH=%%i"
> 
> +    )
> 
> +)
> 
> +@goto End
> 
> +
> 
> +:Usage
> 
> +@echo Usage: AppendPackagesPath.bat directory [directory ...]
> 
> +@echo Copyright(c) 2020, Intel Corporation. All rights reserved.
> 
> +@echo Options:
> 
> +@echo   --help, -h     Print this help screen and exit
> 
> +
> 
> +:End
> 
> diff --git a/Platform/Intel/Tools/AppendPackagesPath/AppendPackagesPath.sh
> b/Platform/Intel/Tools/AppendPackagesPath/AppendPackagesPath.sh
> new file mode 100644
> index 0000000000..599c8d073b
> --- /dev/null
> +++ b/Platform/Intel/Tools/AppendPackagesPath/AppendPackagesPath.sh
> @@ -0,0 +1,42 @@
> +#!/bin/bash
> +
> +#
> +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +# This script calls GetPackagesPath.py to collect all package paths under
> +# specified directories and appends them to PACKAGES_PATH environment
> +# variable. A sub directory is a qualified package path when an EDKII
> +# Package can be found under it.
> +#
> +# Note: This script must be \'sourced\' so the environment can be changed:
> +# source SetPackagesPath.sh
> +# . AppendPackagesPath.sh
> +
> +function Usage()
> +{
> +    echo "Usage: source AppendPackagesPath.sh directory [directory ...]"
> +    echo "Copyright(c) 2020, Intel Corporation. All rights reserved."
> +    echo "Options:"
> +    echo "  --help, -h     Print this help screen and exit"
> +    echo "Please note: This script must be \'sourced\' so the environment 
> can be changed."
> +    echo ". AppendPackagesPath.sh"
> +    echo "source AppendPackagesPath.sh"
> +}
> +
> +function SetEnv()
> +{
> +    local tool_path=$(dirname "$BASH_SOURCE")
> +    local paths=$(python $tool_path/GetPackagesPath.py $@)
> +    if [ "$PACKAGES_PATH" ]; then
> +        PACKAGES_PATH=$PACKAGES_PATH:$paths
> +    else
> +        PACKAGES_PATH=$paths
> +    fi
> +}
> +
> +if [ $# -eq 0 -o "$1" == "-h" -o "$1" == "--help" -o "$1" == "/?" ]; then
> +    Usage
> +else
> +    SetEnv $@
> +fi
> diff --git a/Platform/Intel/Tools/AppendPackagesPath/GetPackagesPath.py
> b/Platform/Intel/Tools/AppendPackagesPath/GetPackagesPath.py
> new file mode 100644
> index 0000000000..31ed44cfa3
> --- /dev/null
> +++ b/Platform/Intel/Tools/AppendPackagesPath/GetPackagesPath.py
> @@ -0,0 +1,98 @@
> +## @file
> 
> +# Get all recursive package paths from special directories.
> 
> +#
> 
> +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +
> 
> +import os
> 
> +import glob
> 
> +import argparse
> 
> +
> 
> +#
> 
> +# Globals for help information
> 
> +#
> 
> +__prog__ = 'GetPackagesPath.py'
> 
> +__copyright__ = 'Copyright (c) 2020, Intel Corporation. All rights reserved.'
> 
> +__description__ = 'Gets all recursive package paths in specified 
> directory.\n'
> 
> +
> 
> +def __get_packages_path(root):
> 
> +    """ Gets all recursive package paths in specified directory.
> 
> +        A directory is a package path if it satisfies conditions below:
> 
> +        1. it is a directory
> 
> +        2. it is not an EDK II Package. An EDK II Package (directory) is
> 
> +           a directory that contains an EDK II package declaration (DEC) 
> file.
> 
> +        3. it contains at least one first level EDK II Package.
> 
> +        Note: A directory is not package path but its subdirectory could be.
> 
> +        Example: edk2-platforms/Features is not package path
> 
> +        but edk2-platforms/Features/Intel is.
> 
> +
> 
> +        :param root: The specified directory to find package paths in it,
> 
> +            the caller should ensure it is an valid directory
> 
> +        :type root: String
> 
> +        :returns: Return all recursive package paths
> 
> +        :rtype: String list
> 
> +    """
> 
> +
> 
> +    paths = []
> 
> +    contain_package = False
> 
> +    for filename in os.listdir(root):
> 
> +        # skip files whose name starts with ".", such as ".git"
> 
> +        if filename.startswith('.'):
> 
> +            continue
> 
> +        filepath = os.path.join(root, filename)
> 
> +        if os.path.isdir(filepath):
> 
> +            if glob.glob(os.path.join(filepath, '*.dec')):
> 
> +                # it is an EDK II Package
> 
> +                contain_package = True
> 
> +            else:
> 
> +                # get package paths for subdirectory if it is not package
> 
> +                paths = paths + __get_packages_path(filepath)
> 
> +
> 
> +    if contain_package:
> 
> +        # root is a package path because it contains EDK II Package
> 
> +        # in first level folder, inset it to head of list
> 
> +        paths.insert(0, root)
> 
> +
> 
> +    # return package paths
> 
> +    return paths
> 
> +
> 
> +def get_packages_path(directories):
> 
> +    """ For each direcory in directories, gets all recursive package paths
> 
> +        in this directory and joins them into one string.
> 
> +
> 
> +        :param directories: the list of directory
> 
> +        :type directories: String list
> 
> +        :returns: Return string of package paths
> 
> +        :rtype: String
> 
> +    """
> 
> +
> 
> +    packages_path = ''
> 
> +    for directory in directories:
> 
> +        directory = os.path.abspath(directory)
> 
> +        if (not os.path.exists(directory)) or (not os.path.isdir(directory)):
> 
> +            continue
> 
> +
> 
> +        if glob.glob(os.path.join(directory, '*.dec')):
> 
> +            # it is an EDK II Package
> 
> +            continue
> 
> +
> 
> +        paths = __get_packages_path(directory)
> 
> +        for path in paths:
> 
> +            if packages_path == '':
> 
> +                packages_path = path
> 
> +            else:
> 
> +                packages_path += os.pathsep + path
> 
> +    return packages_path
> 
> +
> 
> +if __name__ == '__main__':
> 
> +    # Create command line argument parser object
> 
> +    parser = argparse.ArgumentParser(
> 
> +            prog=__prog__,
> 
> +            description=__description__ + __copyright__,
> 
> +            conflict_handler='resolve'
> 
> +    )
> 
> +    parser.add_argument('directory', nargs='+',
> 
> +            help='Specified directory where package packages are got from')
> 
> +    args = parser.parse_args()
> 
> +    print(get_packages_path(args.directory))
> 
> diff --git a/Platform/Intel/Tools/AppendPackagesPath/Readme.md
> b/Platform/Intel/Tools/AppendPackagesPath/Readme.md
> new file mode 100644
> index 0000000000..66aebee7cf
> --- /dev/null
> +++ b/Platform/Intel/Tools/AppendPackagesPath/Readme.md
> @@ -0,0 +1,28 @@
> +
> 
> +# How to use AppendPackagesPath
> 
> +
> 
> +## Overview
> 
> +
> 
> +This script calls GetPackagesPath.py to collect all package paths under 
> specified directories and appends them to
> PACKAGES_PATH environment variable. A sub directory is a qualified package 
> path when an EDKII Package can be found
> under it.
> 
> +
> 
> +**Notice**:
> 
> +The old PACKAGES_PATH will be replaced by new one.s
> 
> +
> 
> +## The usage of the tool
> 
> +
> 
> +### Windows
> 
> +
> 
> +Usage: AppendPackagesPath.bat directory [directory ...]
> 
> +Copyright(c) 2020, Intel Corporation. All rights reserved.
> 
> +Options:
> 
> +  --help, -h     Print this help screen and exit
> 
> +
> 
> +### Ubuntu
> 
> +
> 
> +Usage: source AppendPackagesPath.sh directory [directory ...]
> 
> +Copyright(c) 2020, Intel Corporation. All rights reserved.
> 
> +Options:
> 
> +  --help, -h     Print this help screen and exit
> 
> +Please note: This script must be \'sourced\' so the environment can be 
> changed.
> 
> +. AppendPackagesPath.sh
> 
> +source AppendPackagesPath.sh
> 
> --
> 2.24.0.windows.2


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#57388): https://edk2.groups.io/g/devel/message/57388
Mute This Topic: https://groups.io/mt/72911539/21656
Group Owner: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to