diff options
4 files changed, 201 insertions, 0 deletions
diff --git a/Platform/Intel/Tools/AppendPackagesPath/AppendPackagesPath.bat b/Platform/Intel/Tools/AppendPackagesPath/AppendPackagesPath.bat new file mode 100644 index 00000000..da15d9c4 --- /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 00000000..599c8d07 --- /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 00000000..31ed44cf --- /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 00000000..7784f2f5 --- /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.
+
+## 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
|