summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-12-22 20:33:21 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2017-12-31 23:18:08 +0200
commitd2b68d31dd630e5aeacc3588151e80e6774b51bf (patch)
tree9dc5e5a257b9c8558d83a56d29cb98bb48b1c128
parentdd3f49af0d8c94033e6db68b25c23ea9e63e9c5c (diff)
downloadmeson-d2b68d31dd630e5aeacc3588151e80e6774b51bf.tar.gz
Added init command that creates a sample exe project.
-rw-r--r--mesonbuild/mesonmain.py4
-rw-r--r--mesonbuild/minit.py64
2 files changed, 67 insertions, 1 deletions
diff --git a/mesonbuild/mesonmain.py b/mesonbuild/mesonmain.py
index 20ec3045c..12bbd6914 100644
--- a/mesonbuild/mesonmain.py
+++ b/mesonbuild/mesonmain.py
@@ -17,7 +17,7 @@ import time, datetime
import os.path
from . import environment, interpreter, mesonlib
from . import build
-from . import mconf, mintro, mtest, rewriter
+from . import mconf, mintro, mtest, rewriter, minit
import platform
from . import mlog, coredata
from .mesonlib import MesonException
@@ -308,6 +308,8 @@ def run(original_args, mainfile=None):
sys.exit(1)
elif cmd_name == 'wrap':
return wraptool.run(remaining_args)
+ elif cmd_name == 'init':
+ return minit.run(remaining_args)
elif cmd_name == 'runpython':
import runpy
script_file = remaining_args[0]
diff --git a/mesonbuild/minit.py b/mesonbuild/minit.py
new file mode 100644
index 000000000..51c8b2009
--- /dev/null
+++ b/mesonbuild/minit.py
@@ -0,0 +1,64 @@
+# Copyright 2017 The Meson development team
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Code that creates simple startup projects."""
+
+import os, sys, argparse, re
+from glob import glob
+
+hello_c_template = '''#include <stdio.h>
+
+#define PROJECT_NAME "{project_name}"
+
+int main(int argc, char **argv) {{
+ printf("This is project %s.", PROJECT_NAME);
+ return 0;
+}}
+'''
+
+hello_c_meson_template = '''project('{project_name}', 'c')
+
+executable('{exe_name}', '{source_name}',
+ install : true)
+'''
+
+info_message = '''Sample project created. To build it run the
+following commands:
+
+meson builddir
+ninja -C builddir
+'''
+
+def create_exe_c_sample(project_name):
+ lowercase_token = re.sub(r'[^a-z0-9]', '_', project_name.lower())
+ uppercase_token = lowercase_token.upper()
+ source_name = lowercase_token + '.c'
+ open(source_name, 'w').write(hello_c_template.format(project_name=project_name))
+ open('meson.build', 'w').write(hello_c_meson_template.format(project_name=project_name,
+ exe_name=lowercase_token,
+ source_name=source_name))
+
+def create_sample(options):
+ create_exe_c_sample(options.name)
+ print(info_message)
+
+def run(args):
+ parser = argparse.ArgumentParser(prog='meson')
+ parser.add_argument('--name', default = 'mesonsample')
+ #parser.add_argument('--type', default_value='executable')
+ options = parser.parse_args(args)
+ if len(glob('*')) != 0:
+ sys.exit('This command must be run in an empty directory.')
+ create_sample(options)
+ return 0