mirror of
https://github.com/intel/linux-sgx
synced 2026-06-08 14:49:32 +00:00
26c458905b
Signed-off-by: Zhang Lili <lili.z.zhang@intel.com>
221 lines
7.5 KiB
Python
Executable File
221 lines
7.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# Copyright (C) 2011-2021 Intel Corporation. All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
#
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# * 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.
|
|
# * Neither the name of Intel Corporation nor the names of its
|
|
# contributors may be used to endorse or promote products derived
|
|
# from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT
|
|
# OWNER 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.
|
|
#
|
|
#
|
|
|
|
# This script is used to copy file from src to dest as descript in a BOM file
|
|
# example: python gen_source.py --bom=PATH_TO_BOM [--cleanup=false] [--deliverydir=DIR_RELATIVE_TO_gen_source.py] [--installdir=DIR_APPEND_BEFORE_INSTALLDIR]
|
|
#
|
|
|
|
|
|
import sys
|
|
import os
|
|
import shutil
|
|
import getopt
|
|
|
|
def parse_cmd(argc, argv):
|
|
global bom_file
|
|
global cleanup
|
|
global deliverydir
|
|
global installdir
|
|
|
|
bom_file = ""
|
|
cleanup = True
|
|
deliverydir = ""
|
|
installdir = ""
|
|
|
|
local_path = os.path.split(os.path.realpath(sys.argv[0]))[0]
|
|
|
|
try:
|
|
opts, args = getopt.getopt(sys.argv[1:], "", ["bom=", "cleanup=", "deliverydir=", "installdir="])
|
|
except getopt.GetoptError as err:
|
|
print(str(err))
|
|
return False
|
|
|
|
for option, value in opts:
|
|
if option == "--bom":
|
|
bom_file = value
|
|
if not os.path.exists(os.path.join(local_path, bom_file)):
|
|
return False
|
|
|
|
if option == "--cleanup":
|
|
cleanup = value
|
|
if cleanup.lower() != "true" and cleanup.lower() != "false":
|
|
return False
|
|
if cleanup.lower() == "false":
|
|
cleanup = False
|
|
|
|
if option == "--deliverydir":
|
|
deliverydir = value
|
|
|
|
if option == "--installdir":
|
|
installdir = value
|
|
|
|
|
|
if bom_file == "":
|
|
return False
|
|
|
|
return True
|
|
|
|
################################################################################
|
|
# Name: copy_folder_unrecursively() #
|
|
# Usage: #
|
|
# return: True if the operation is successful. False otherwise. #
|
|
################################################################################
|
|
def copy_folder_unrecursively(src_dir, dest_dir):
|
|
if os.path.isdir(src_dir) == True :
|
|
print ("Warning: The src is a folder ......")
|
|
return False
|
|
|
|
try:
|
|
shutil.copy(src_dir, dest_dir)
|
|
return True
|
|
except:
|
|
print ("Error !!!: can't find file: {}".format(src_dir))
|
|
return False
|
|
|
|
################################################################################
|
|
# Name: copy_folder_recursively() #
|
|
# Usage: #
|
|
################################################################################
|
|
def copy_folder_recursively(src_dir, dest_dir):
|
|
if os.path.isdir(src_dir) == True:
|
|
#copy the folder
|
|
if os.path.exists(dest_dir) == False:
|
|
os.makedirs(dest_dir)
|
|
|
|
for item in os.listdir(src_dir):
|
|
copy_folder_recursively((os.path.join(src_dir, item)).replace("\\", "/"), (os.path.join(dest_dir, item)).replace("\\", "/"))
|
|
continue
|
|
else:
|
|
#copy the file
|
|
print ("copy file from {0} to {1}".format(src_dir, dest_dir))
|
|
shutil.copyfile(src_dir, dest_dir)
|
|
|
|
|
|
#if os.path.isdir(src_dir) == False or os.path.isdir(dest_dir) == False:
|
|
# print "Bom file error at copying " + src_dir + " to " + dest_dir
|
|
# exit(-1)
|
|
|
|
|
|
################################################################################
|
|
# Name: read_BOM() #
|
|
# Usage: read bom_file #
|
|
# return: the contents in bom_file #
|
|
################################################################################
|
|
def read_BOM(local_path):
|
|
#get the BOM file path that need to open
|
|
file_list = local_path + "/" + bom_file
|
|
f = open(file_list, 'r')
|
|
#read the content in BOM file
|
|
lines = f.readlines()
|
|
f.close()
|
|
return lines
|
|
|
|
################################################################################
|
|
# Name: copy_files() #
|
|
# Usage: copy file from src to dest #
|
|
# return: #
|
|
################################################################################
|
|
def copy_txt_files(local_path):
|
|
home_path = os.path.realpath(os.path.join(local_path, "..", "..", "..", ".."))
|
|
|
|
#read BOM file contents
|
|
lines = read_BOM(local_path)
|
|
|
|
for line in lines[1:]:
|
|
if line == "\n":
|
|
continue
|
|
src = line.split('\t')[0]
|
|
dest = line.split('\t')[1]
|
|
src = src.replace("\\", "/")
|
|
dest = dest.replace("\\", "/")
|
|
if deliverydir == "":
|
|
src = src.replace("<deliverydir>/", home_path + "/")
|
|
else:
|
|
src = src.replace("<deliverydir>/", deliverydir + "/")
|
|
|
|
if installdir == "":
|
|
dest = dest.replace("<installdir>/", local_path + "/output/")
|
|
else:
|
|
dest = dest.replace("<installdir>/", local_path + "/output/" + installdir + "/")
|
|
|
|
if os.path.exists(src) == True:
|
|
#check whether the src is a folder or file
|
|
if os.path.isdir(src) == False :
|
|
#the src is a file
|
|
if os.path.exists(os.path.dirname(dest)) == False:
|
|
os.makedirs(os.path.dirname(dest))
|
|
ret = copy_folder_unrecursively(src, dest)
|
|
if ret == False:
|
|
exit(1)
|
|
|
|
else:
|
|
#the src is a folder
|
|
copy_folder_recursively(src, dest)
|
|
else:
|
|
#although the src file isn't exist, create the dest folder
|
|
if os.path.exists(os.path.dirname(dest)) == False:
|
|
os.makedirs(os.path.dirname(dest))
|
|
if os.path.isdir(src) == False :
|
|
print ("Error !!!: src file not exist {}".format(src))
|
|
else:
|
|
print ("Error !!!: src folder not exist {}".format(src))
|
|
exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
ret = parse_cmd(len(sys.argv), sys.argv)
|
|
if ret == False:
|
|
print ("Usage:")
|
|
print ("python gen_source.py --bom=PATH_TO_BOM [--cleanup=false] [--deliverydir=DIR_RELATIVE_TO_gen_source.py] [--installdir=DIR_APPEND_BEFORE_INSTALLDIR]")
|
|
exit(1)
|
|
|
|
#script locate direction
|
|
local_path = os.path.split(os.path.realpath(sys.argv[0]))[0]
|
|
local_dir = os.path.basename(local_path)
|
|
local_path = local_path.replace("\\", "/")
|
|
|
|
ret = os.path.exists(local_path + "/output")
|
|
if ret == True:
|
|
if cleanup == True:
|
|
print ("clean the dest dir")
|
|
shutil.rmtree(local_path + "/output")
|
|
os.mkdir(local_path + "/output")
|
|
else:
|
|
print ("Create the dest dir")
|
|
os.mkdir(local_path + "/output")
|
|
|
|
#cpoy the files
|
|
copy_txt_files(local_path)
|
|
|
|
print ("Copy files finished ......")
|
|
exit(0)
|