mirror of
https://github.com/InsightGit/Morpheus.git
synced 2025-06-19 09:15:36 -04:00
90 lines
3.1 KiB
Python
Executable File
90 lines
3.1 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
import os
|
|
import shutil
|
|
import sys
|
|
|
|
from distutils import dir_util
|
|
|
|
BUILDTOOLS_TO_COPY = ["bintileconvert", "bintilesplit", "gba_fat_patch", "generate_fonts"]
|
|
|
|
|
|
def _print_usage():
|
|
print(f"Usage: {__file__} morpheus_dir_path new_project_name [new_project_dir_path]")
|
|
|
|
|
|
def main():
|
|
if len(sys.argv) > 1 and sys.argv[1] == "--help":
|
|
_print_usage()
|
|
|
|
sys.exit(0)
|
|
|
|
if len(sys.argv) > 2:
|
|
morpheus_dir = sys.argv[1]
|
|
new_project_name = sys.argv[2]
|
|
|
|
if len(sys.argv) > 3:
|
|
new_project_dir_path = sys.argv[3]
|
|
else:
|
|
new_project_dir_path = os.getcwd()
|
|
|
|
project_dir = os.path.join(new_project_dir_path, new_project_name)
|
|
|
|
try:
|
|
os.makedirs(project_dir, exist_ok=False)
|
|
|
|
os.makedirs(os.path.join(project_dir, "buildtools"), exist_ok=False)
|
|
os.makedirs(os.path.join(project_dir, "cmake"), exist_ok=False)
|
|
os.makedirs(os.path.join(project_dir, "src"), exist_ok=False)
|
|
except OSError as e:
|
|
print(f"Found existing Morpheus directory structure under {project_dir}!\n"
|
|
f"Not overwriting files and aborting...", file=sys.stderr)
|
|
|
|
sys.exit(1)
|
|
|
|
try:
|
|
for buildtool in BUILDTOOLS_TO_COPY:
|
|
dir_util.copy_tree(os.path.join(morpheus_dir, "buildtools", buildtool),
|
|
os.path.join(project_dir, "buildtools", buildtool))
|
|
|
|
build_utils_path = os.path.join("cmake", "morpheus_build_utils.cmake")
|
|
|
|
dir_util.copy_tree(os.path.join(morpheus_dir, "buildtools", "project_generator", "project_template"),
|
|
project_dir)
|
|
|
|
shutil.copy(os.path.join(morpheus_dir, build_utils_path), os.path.join(project_dir, build_utils_path))
|
|
except OSError:
|
|
print(f"Couldn't copy project template files over to {project_dir}! \n"
|
|
f"Reverting to original state and aborting...", file=sys.stderr)
|
|
|
|
try:
|
|
shutil.rmtree(project_dir)
|
|
except OSError:
|
|
print("Couldn't revert to original state! Incomplete project "
|
|
"directory will have to be manually deleted.", file=sys.stderr)
|
|
|
|
sys.exit(1)
|
|
|
|
with open(os.path.join(project_dir, "CMakeLists.txt"), 'r') as cmake_file:
|
|
cmake_file_contents = cmake_file.read()
|
|
|
|
with open(os.path.join(project_dir, "CMakeLists.txt"), 'w') as cmake_file:
|
|
morpheus_dir = os.path.abspath(morpheus_dir).replace(os.sep, "/")
|
|
|
|
cmake_file.write(cmake_file_contents. \
|
|
replace("set(PROJECT_NAME \"Project Template Name\")",
|
|
f"set(PROJECT_NAME \"{new_project_name}\")"). \
|
|
replace("set(MORPHEUS_DIR \"\")",
|
|
f"set(MORPHEUS_DIR \"{morpheus_dir}\")"))
|
|
|
|
print(f"Morpheus project {new_project_name} successfully created at {project_dir}!")
|
|
else:
|
|
print("Insufficent arguments!", file=sys.stderr)
|
|
|
|
_print_usage()
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |