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]] -=-=-=-=-=-=-=-=-=-=-=-
