aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/minit.py117
1 files changed, 64 insertions, 53 deletions
diff --git a/mesonbuild/minit.py b/mesonbuild/minit.py
index 5f28f58..85d4a0f 100644
--- a/mesonbuild/minit.py
+++ b/mesonbuild/minit.py
@@ -15,118 +15,130 @@
"""Code that creates simple startup projects."""
from pathlib import Path
-import re, shutil, subprocess
+from enum import Enum
+import subprocess
+import shutil
+import re
from glob import glob
from mesonbuild import mesonlib
from mesonbuild.environment import detect_ninja
-from mesonbuild.templates.ctemplates import (create_exe_c_sample, create_lib_c_sample)
-from mesonbuild.templates.cpptemplates import (create_exe_cpp_sample, create_lib_cpp_sample)
-from mesonbuild.templates.cstemplates import (create_exe_cs_sample, create_lib_cs_sample)
-from mesonbuild.templates.cudatemplates import (create_exe_cuda_sample, create_lib_cuda_sample)
-from mesonbuild.templates.objctemplates import (create_exe_objc_sample, create_lib_objc_sample)
+from mesonbuild.templates.fortrantemplates import (create_exe_fortran_sample, create_lib_fortran_sample)
from mesonbuild.templates.objcpptemplates import (create_exe_objcpp_sample, create_lib_objcpp_sample)
from mesonbuild.templates.dlangtemplates import (create_exe_d_sample, create_lib_d_sample)
-from mesonbuild.templates.javatemplates import (create_exe_java_sample, create_lib_java_sample)
-from mesonbuild.templates.fortrantemplates import (create_exe_fortran_sample, create_lib_fortran_sample)
from mesonbuild.templates.rusttemplates import (create_exe_rust_sample, create_lib_rust_sample)
+from mesonbuild.templates.javatemplates import (create_exe_java_sample, create_lib_java_sample)
+from mesonbuild.templates.cudatemplates import (create_exe_cuda_sample, create_lib_cuda_sample)
+from mesonbuild.templates.objctemplates import (create_exe_objc_sample, create_lib_objc_sample)
+from mesonbuild.templates.cpptemplates import (create_exe_cpp_sample, create_lib_cpp_sample)
+from mesonbuild.templates.cstemplates import (create_exe_cs_sample, create_lib_cs_sample)
+from mesonbuild.templates.ctemplates import (create_exe_c_sample, create_lib_c_sample)
'''
-there is currently only one meson template at this time.
+we currently have one meson template at this time.
'''
from mesonbuild.templates.mesontemplates import create_meson_build
-FORTRAN_SUFFIXES = ['.f', '.for', '.F', '.f90', '.F90']
+FORTRAN_SUFFIXES = {'.f', '.for', '.F', '.f90', '.F90'}
+LANG_SUFFIXES = {'.c', '.cc', '.cpp', '.cs', '.cu', '.d', '.m', '.mm', '.rs', '.java'} | FORTRAN_SUFFIXES
+LANG_SUPPORTED = {'c', 'cpp', 'cs', 'cuda', 'd', 'fortran', 'java', 'rust', 'objc', 'objcpp'}
-UNREACHABLE_CODE = 'Unreachable code'
+DEFAULT_PROJECT = 'executable'
+DEFAULT_VERSION = '0.1'
+class DEFAULT_TYPES(Enum):
+ EXE = 'executable'
+ LIB = 'library'
-info_message = '''Sample project created. To build it run the
+UNREACHABLE_CODE_ERROR = 'Unreachable code'
+
+INFO_MESSAGE = '''Sample project created. To build it run the
following commands:
meson builddir
ninja -C builddir
'''
-def create_sample(options):
+
+def create_sample(options) -> None:
'''
Based on what arguments are passed we check for a match in language
then check for project type and create new Meson samples project.
'''
if options.language == 'c':
- if options.type == 'executable':
+ if options.type == DEFAULT_TYPES['EXE'].value:
create_exe_c_sample(options.name, options.version)
- elif options.type == 'library':
+ elif options.type == DEFAULT_TYPES['LIB'].value:
create_lib_c_sample(options.name, options.version)
else:
- raise RuntimeError(UNREACHABLE_CODE)
+ raise RuntimeError(UNREACHABLE_CODE_ERROR)
elif options.language == 'cpp':
- if options.type == 'executable':
+ if options.type == DEFAULT_TYPES['EXE'].value:
create_exe_cpp_sample(options.name, options.version)
- elif options.type == 'library':
+ elif options.type == DEFAULT_TYPES['LIB'].value:
create_lib_cpp_sample(options.name, options.version)
else:
- raise RuntimeError(UNREACHABLE_CODE)
+ raise RuntimeError(UNREACHABLE_CODE_ERROR)
elif options.language == 'cs':
- if options.type == 'executable':
+ if options.type == DEFAULT_TYPES['EXE'].value:
create_exe_cs_sample(options.name, options.version)
- elif options.type == 'library':
+ elif options.type == DEFAULT_TYPES['LIB'].value:
create_lib_cs_sample(options.name, options.version)
else:
- raise RuntimeError(UNREACHABLE_CODE)
+ raise RuntimeError(UNREACHABLE_CODE_ERROR)
elif options.language == 'cuda':
- if options.type == 'executable':
+ if options.type == DEFAULT_TYPES['EXE'].value:
create_exe_cuda_sample(options.name, options.version)
- elif options.type == 'library':
+ elif options.type == DEFAULT_TYPES['LIB'].value:
create_lib_cuda_sample(options.name, options.version)
else:
- raise RuntimeError(UNREACHABLE_CODE)
+ raise RuntimeError(UNREACHABLE_CODE_ERROR)
elif options.language == 'd':
- if options.type == 'executable':
+ if options.type == DEFAULT_TYPES['EXE'].value:
create_exe_d_sample(options.name, options.version)
- elif options.type == 'library':
+ elif options.type == DEFAULT_TYPES['LIB'].value:
create_lib_d_sample(options.name, options.version)
else:
- raise RuntimeError(UNREACHABLE_CODE)
+ raise RuntimeError(UNREACHABLE_CODE_ERROR)
elif options.language == 'fortran':
- if options.type == 'executable':
+ if options.type == DEFAULT_TYPES['EXE'].value:
create_exe_fortran_sample(options.name, options.version)
- elif options.type == 'library':
+ elif options.type == DEFAULT_TYPES['LIB'].value:
create_lib_fortran_sample(options.name, options.version)
else:
- raise RuntimeError(UNREACHABLE_CODE)
+ raise RuntimeError(UNREACHABLE_CODE_ERROR)
elif options.language == 'rust':
- if options.type == 'executable':
+ if options.type == DEFAULT_TYPES['EXE'].value:
create_exe_rust_sample(options.name, options.version)
- elif options.type == 'library':
+ elif options.type == DEFAULT_TYPES['LIB'].value:
create_lib_rust_sample(options.name, options.version)
else:
- raise RuntimeError(UNREACHABLE_CODE)
+ raise RuntimeError(UNREACHABLE_CODE_ERROR)
elif options.language == 'objc':
- if options.type == 'executable':
+ if options.type == DEFAULT_TYPES['EXE'].value:
create_exe_objc_sample(options.name, options.version)
- elif options.type == 'library':
+ elif options.type == DEFAULT_TYPES['LIB'].value:
create_lib_objc_sample(options.name, options.version)
else:
- raise RuntimeError(UNREACHABLE_CODE)
+ raise RuntimeError(UNREACHABLE_CODE_ERROR)
elif options.language == 'objcpp':
- if options.type == 'executable':
+ if options.type == DEFAULT_TYPES['EXE'].value:
create_exe_objcpp_sample(options.name, options.version)
- elif options.type == 'library':
+ elif options.type == DEFAULT_TYPES['LIB'].value:
create_lib_objcpp_sample(options.name, options.version)
else:
- raise RuntimeError(UNREACHABLE_CODE)
+ raise RuntimeError(UNREACHABLE_CODE_ERROR)
elif options.language == 'java':
- if options.type == 'executable':
+ if options.type == DEFAULT_TYPES['EXE'].value:
create_exe_java_sample(options.name, options.version)
- elif options.type == 'library':
+ elif options.type == DEFAULT_TYPES['LIB'].value:
create_lib_java_sample(options.name, options.version)
else:
- raise RuntimeError(UNREACHABLE_CODE)
+ raise RuntimeError(UNREACHABLE_CODE_ERROR)
else:
- raise RuntimeError(UNREACHABLE_CODE)
- print(info_message)
+ raise RuntimeError(UNREACHABLE_CODE_ERROR)
+ print(INFO_MESSAGE)
-def autodetect_options(options, sample: bool = False):
+def autodetect_options(options, sample: bool = False) -> None:
'''
Here we autodetect options for args not passed in so don't have to
think about it.
@@ -148,7 +160,7 @@ def autodetect_options(options, sample: bool = False):
if not options.srcfiles:
srcfiles = []
for f in (f for f in Path().iterdir() if f.is_file()):
- if f.suffix in (['.c', '.cc', '.cpp', '.cs', '.cu', '.d', '.m', '.mm', '.rs', '.java'] + FORTRAN_SUFFIXES):
+ if f.suffix in LANG_SUFFIXES:
srcfiles.append(f)
if not srcfiles:
raise SystemExit('No recognizable source files found.\n'
@@ -201,13 +213,12 @@ def add_arguments(parser):
parser.add_argument("-n", "--name", help="project name. default: name of current directory")
parser.add_argument("-e", "--executable", help="executable name. default: project name")
parser.add_argument("-d", "--deps", help="dependencies, comma-separated")
- parser.add_argument("-l", "--language", choices=['c', 'cpp', 'cs', 'cuda', 'd', 'fortran', 'java', 'rust', 'objc', 'objcpp'],
- help="project language. default: autodetected based on source files")
- parser.add_argument("-b", "--build", help="build after generation", action='store_true')
- parser.add_argument("--builddir", help="directory for build", default='build')
+ parser.add_argument("-l", "--language", choices=LANG_SUPPORTED, help="project language. default: autodetected based on source files")
+ parser.add_argument("-b", "--build", action='store_true', help="build after generation")
+ parser.add_argument("--builddir", default='build', help="directory for build")
parser.add_argument("-f", "--force", action="store_true", help="force overwrite of existing files and directories.")
- parser.add_argument('--type', default='executable', choices=['executable', 'library'])
- parser.add_argument('--version', default='0.1')
+ parser.add_argument('--type', default=DEFAULT_PROJECT, choices=('executable', 'library'), help="project type. default: {} based project".format(DEFAULT_PROJECT))
+ parser.add_argument('--version', default=DEFAULT_VERSION, help="project version. default: {}".format(DEFAULT_VERSION))
def run(options) -> int:
'''