mirror of
https://github.com/FunKey-Project/RetroFE.git
synced 2025-12-12 17:58:53 +01:00
176 lines
6.9 KiB
Python
176 lines
6.9 KiB
Python
import argparse
|
|
import errno
|
|
import glob
|
|
import os
|
|
import shutil
|
|
import sys
|
|
|
|
def copytree(src, dst):
|
|
if os.path.isdir(src):
|
|
if not os.path.exists(dst):
|
|
mkdir_p(dst)
|
|
for name in os.listdir(src):
|
|
copytree(os.path.join(src, name),
|
|
os.path.join(dst, name))
|
|
else:
|
|
print("COPY: " + dst)
|
|
shutil.copyfile(src, dst)
|
|
|
|
def mkdir_p(path):
|
|
print("CREATE: " + path)
|
|
try:
|
|
os.makedirs(path)
|
|
|
|
except OSError as exception:
|
|
if exception.errno != errno.EEXIST:
|
|
raise
|
|
#todo: this script needs to be broken up into multiple methods
|
|
# and should be ported to be more like a class
|
|
|
|
#####################################################################
|
|
# Parse arguments
|
|
#####################################################################
|
|
parser = argparse.ArgumentParser(description='Bundle up some RetroFE common files.')
|
|
parser.add_argument('--os', choices=['windows','linux','mac'], required=True, help='Operating System (windows or linux or mac)')
|
|
parser.add_argument('--gstreamer_path', help='Path to gstreamer sdk (i.e. D:/gstreamer')
|
|
parser.add_argument('--build', default='full', help='Define what contents to package (full, core, engine, layout, none')
|
|
parser.add_argument('--clean', action='store_true', help='Clean the output directory')
|
|
parser.add_argument('--compiler', help='Compiler to use (vs, mingw, gcc')
|
|
|
|
args = parser.parse_args()
|
|
|
|
gstreamer_path = None
|
|
|
|
# windows needs a gstreamer path set
|
|
#if args.os == 'windows':
|
|
# if not hasattr(args, 'gstreamer_path'):
|
|
# print('missing argument --gstreamer_path')
|
|
# sys.exit(-1)
|
|
#
|
|
# gstreamer_path = args.gstreamer_path
|
|
#
|
|
# if not os.path.exists(gstreamer_path):
|
|
# print('could not find gstreamer libraries: ' + gstreamer_path)
|
|
# sys.exit(-1)
|
|
|
|
|
|
#####################################################################
|
|
# Determine base path os to build
|
|
#####################################################################
|
|
base_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
|
common_path = os.path.join(base_path, 'Package', 'Environment', 'Common')
|
|
os_path = None
|
|
|
|
if args.os == 'windows':
|
|
os_path = os.path.join(base_path, 'Package', 'Environment', 'Windows')
|
|
|
|
elif args.os == 'linux':
|
|
os_path = os.path.join(base_path, 'Package', 'Environment', 'Linux')
|
|
|
|
elif args.os == 'mac':
|
|
os_path = os.path.join(base_path, 'Package', 'Environment', 'MacOS')
|
|
|
|
#####################################################################
|
|
# Copy layers, artwork, config files, etc for the given os
|
|
#####################################################################
|
|
output_path = os.path.join(base_path, 'Artifacts', args.os, 'RetroFE')
|
|
|
|
if os.path.exists(output_path) and hasattr(args, 'clean'):
|
|
shutil.rmtree(output_path)
|
|
|
|
|
|
if args.build != 'none' and not os.path.exists(output_path):
|
|
os.makedirs(output_path)
|
|
|
|
if args.build == 'full':
|
|
collection_path = os.path.join(output_path, 'collections')
|
|
copytree(common_path, output_path)
|
|
copytree(os_path, output_path)
|
|
|
|
mkdir_p(os.path.join(output_path, 'meta', 'mamelist'))
|
|
|
|
dirs = [d for d in os.listdir(collection_path) if os.path.isdir(os.path.join(collection_path, d))]
|
|
for collection in dirs:
|
|
if not collection.startswith('_'):
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'roms'))
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'medium_artwork'))
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'medium_artwork', 'artwork_front'))
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'medium_artwork', 'artwork_back'))
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'medium_artwork', 'medium_back'))
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'medium_artwork', 'medium_front'))
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'medium_artwork', 'bezel'))
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'medium_artwork', 'logo'))
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'medium_artwork', 'screenshot'))
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'medium_artwork', 'screentitle'))
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'medium_artwork', 'video'))
|
|
mkdir_p(os.path.join(output_path, 'collections', collection, 'system_artwork'))
|
|
|
|
elif args.build == 'layout':
|
|
layout_dest_path = os.path.join(output_path, 'layouts')
|
|
layout_common_path = os.path.join(common_path, 'layouts')
|
|
layout_os_path = os.path.join(os_path, 'layouts')
|
|
|
|
if not os.path.exists(layout_dest_path):
|
|
os.makedirs(layout_dest_path)
|
|
|
|
if os.path.exists(layout_common_path):
|
|
copytree(layout_common_path, layout_dest_path)
|
|
|
|
if os.path.exists(layout_os_path):
|
|
copytree(layout_os_path, layout_dest_path)
|
|
|
|
#####################################################################
|
|
# Copy retrofe executable
|
|
#####################################################################
|
|
if args.os == 'windows':
|
|
if args.build == 'full' or args.build == 'core' or args.build == 'engine':
|
|
# copy retrofe.exe to core folder
|
|
if(hasattr(args, 'compiler') and args.compiler == 'mingw'):
|
|
src_exe = os.path.join(base_path, 'RetroFE', 'Build', 'retrofe.exe')
|
|
else:
|
|
src_exe = os.path.join(base_path, 'RetroFE', 'Build', 'Release', 'retrofe.exe')
|
|
|
|
core_path = os.path.join(output_path, 'core')
|
|
|
|
# create the core folder
|
|
if not os.path.exists(core_path):
|
|
os.makedirs(core_path)
|
|
|
|
# copy retrofe.exe
|
|
shutil.copy(src_exe, core_path)
|
|
# third_party_path = os.path.join(base_path, 'RetroFE', 'ThirdParty')
|
|
|
|
# if args.build == 'full' or args.build == 'core':
|
|
# libraries = [
|
|
# os.path.join(gstreamer_path, 'lib/*.dll'),
|
|
# os.path.join(gstreamer_path, 'lib/gstreamer-1.0/*.dll'),
|
|
# os.path.join(gstreamer_path, 'bin/*.dll'),
|
|
# os.path.join(third_party_path, 'SDL2-2.0.3', 'lib', 'x86', r'*.dll'),
|
|
# os.path.join(third_party_path, 'SDL2_image-2.0.0', 'lib', 'x86', '*.dll'),
|
|
# os.path.join(third_party_path, 'SDL2_mixer-2.0.0', 'lib', 'x86', '*.dll'),
|
|
# os.path.join(third_party_path, 'SDL2_ttf-2.0.12', 'lib', 'x86', '*.dll')
|
|
# ]
|
|
#
|
|
# # copy third party libraries
|
|
# for glob_dlls in libraries:
|
|
# for file in glob.glob(glob_dlls):
|
|
# shutil.copy(file, core_path)
|
|
|
|
|
|
elif args.os == 'linux':
|
|
if args.build == 'full' or args.build == 'core' or args.build == 'engine':
|
|
src_exe = os.path.join(base_path, 'RetroFE', 'Build', 'retrofe')
|
|
shutil.copy(src_exe, output_path)
|
|
|
|
elif args.os == 'mac':
|
|
if args.build == 'full' or args.build == 'core' or args.build == 'engine':
|
|
src_exe = os.path.join(base_path, 'RetroFE', 'Build', 'retrofe')
|
|
shutil.copy(src_exe, output_path)
|
|
app_path = os.path.join(output_path, 'RetroFE.app')
|
|
if not os.path.exists(app_path):
|
|
copytree(os_path, output_path)
|
|
shutil.copy(src_exe, output_path + '/RetroFE.app/Contents/MacOS/')
|
|
|
|
|
|
|