Update minit.py

pull/6658/head
Michael Brockus 5 years ago committed by GitHub
parent 47759550e5
commit 3225070f8b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 110
      mesonbuild/minit.py

@ -15,118 +15,125 @@
"""Code that creates simple startup projects."""
from pathlib import Path
import re, shutil, subprocess
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']
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')
TYPE_EXE = 'executable'
TYPE_LIB = 'library'
UNREACHABLE_CODE = 'Unreachable code'
UNREACHABLE_CODE_ERROR = 'Unreachable code'
info_message = '''Sample project created. To build it run the
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 == TYPE_EXE:
create_exe_c_sample(options.name, options.version)
elif options.type == 'library':
elif options.type == TYPE_LIB:
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 == TYPE_EXE:
create_exe_cpp_sample(options.name, options.version)
elif options.type == 'library':
elif options.type == TYPE_LIB:
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 == TYPE_EXE:
create_exe_cs_sample(options.name, options.version)
elif options.type == 'library':
elif options.type == TYPE_LIB:
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 == TYPE_EXE:
create_exe_cuda_sample(options.name, options.version)
elif options.type == 'library':
elif options.type == TYPE_LIB:
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 == TYPE_EXE:
create_exe_d_sample(options.name, options.version)
elif options.type == 'library':
elif options.type == TYPE_LIB:
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 == TYPE_EXE:
create_exe_fortran_sample(options.name, options.version)
elif options.type == 'library':
elif options.type == TYPE_LIB:
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 == TYPE_EXE:
create_exe_rust_sample(options.name, options.version)
elif options.type == 'library':
elif options.type == TYPE_LIB:
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 == TYPE_EXE:
create_exe_objc_sample(options.name, options.version)
elif options.type == 'library':
elif options.type == TYPE_LIB:
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 == TYPE_EXE:
create_exe_objcpp_sample(options.name, options.version)
elif options.type == 'library':
elif options.type == TYPE_LIB:
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 == TYPE_EXE:
create_exe_java_sample(options.name, options.version)
elif options.type == 'library':
elif options.type == TYPE_LIB:
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 +155,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 +208,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='executable', choices=['executable', 'library'], help="project type. default: executable based project")
parser.add_argument('--version', default='0.1', help="project version. default: 0.1")
def run(options) -> int:
'''

Loading…
Cancel
Save