Start runtime Python bindings. Add setup.py which only runs charmonizer and cleanup targets. Add a stub __init__.py file.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/856d7c1d Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/856d7c1d Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/856d7c1d Branch: refs/heads/master Commit: 856d7c1d84c619bcaa44cc992e575e8052af630a Parents: b10130e Author: Marvin Humphrey <[email protected]> Authored: Tue Jan 19 18:25:51 2016 -0800 Committer: Marvin Humphrey <[email protected]> Committed: Sat Feb 6 10:23:08 2016 -0800 ---------------------------------------------------------------------- runtime/python/setup.py | 130 ++++++++++++++++++++++++++ runtime/python/src/clownfish/__init__.py | 15 +++ 2 files changed, 145 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/856d7c1d/runtime/python/setup.py ---------------------------------------------------------------------- diff --git a/runtime/python/setup.py b/runtime/python/setup.py new file mode 100644 index 0000000..a522cb9 --- /dev/null +++ b/runtime/python/setup.py @@ -0,0 +1,130 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +from distutils.core import setup +from distutils.command.build import build as _build +from distutils.command.clean import clean as _clean +from distutils.cmd import Command as _Command +from distutils.dep_util import newer_group +import distutils.ccompiler +import os +import glob +import shutil +import subprocess +import sysconfig + +# Get a compiler object and and strings representing the compiler type and +# CFLAGS. Add the Python headers include dir to CFLAGS. +compiler = distutils.ccompiler.new_compiler() +cflags = sysconfig.get_config_var('CFLAGS') +compiler_type = distutils.ccompiler.get_default_compiler() + +# There's no public way to get a string representing the compiler executable +# out of distutils, but the member variable has been in the same place for a +# long time, so violating encapsulation may be ok. +compiler_name = " ".join(compiler.compiler) +make_command = "make" # TODO portability + +BASE_DIR = os.path.abspath(os.path.join(os.pardir, os.pardir)) +PARENT_DIR = os.path.abspath(os.pardir) +CORE_SOURCE_DIR = os.path.join(PARENT_DIR, 'core') +CFEXT_DIR = 'cfext' +COMMON_SOURCE_DIR = os.path.join(PARENT_DIR, 'common') +CHARMONIZER_C = os.path.join(COMMON_SOURCE_DIR, 'charmonizer.c') +CHARMONIZER_EXE_NAME = compiler.executable_filename('charmonizer') +CHARMONIZER_EXE_PATH = os.path.join(os.curdir, CHARMONIZER_EXE_NAME) +CHARMONY_H_PATH = 'charmony.h' + +c_filepaths = [] +paths_to_clean = [ + CHARMONIZER_EXE_PATH, + CHARMONY_H_PATH, + '_charm*', +] + +def _quotify(text): + text = text.replace('\\', '\\\\') + text = text.replace('"', '\\"') + return '"' + text + '"' + +class charmony(_Command): + description = "Build and run charmonizer" + user_options = [] + def initialize_options(self): + pass + def finalize_options(self): + pass + def run(self): + # Compile charmonizer. + if newer_group([CHARMONIZER_C], CHARMONIZER_EXE_PATH): + command = [compiler_name] + if compiler_type == 'msvc': + command.append('/Fe' + CHARMONIZER_EXE_PATH) + else: + command.extend(['-o', CHARMONIZER_EXE_PATH]) + command.append(CHARMONIZER_C) + print(" ".join(command)) + subprocess.check_call(command) + + # Run charmonizer. + if newer_group([CHARMONIZER_EXE_PATH], CHARMONY_H_PATH): + command = [ + CHARMONIZER_EXE_PATH, + '--cc=' + _quotify(compiler_name), + '--enable-c', + '--enable-python', + '--host=python', + '--enable-makefile', + '--', + cflags + ] + if 'CHARM_VALGRIND' in os.environ: + command[0:0] = "valgrind", "--leak-check=yes"; + print(" ".join(command)) + subprocess.check_call(command) + +class my_clean(_clean): + def run(self): + _clean.run(self) + if os.path.isfile("Makefile"): + subprocess.check_call([make_command, 'distclean']) + for elem in paths_to_clean: + for path in glob.glob(elem): + print("removing " + path) + if os.path.isdir(path): + shutil.rmtree(path) + else: + os.unlink(path) + +class my_build(_build): + def run(self): + self.run_command('charmony') + _build.run(self) + +setup(name = 'clownfish', + version = '0.4.0', + description = 'Clownfish runtime', + author = 'Apache Lucy Project', + author_email = 'dev at lucy dot apache dot org', + url = 'http://lucy.apache.org', + packages = ['clownfish', + ], + cmdclass = { + 'build': my_build, + 'clean': my_clean, + 'charmony': charmony, + }, + package_dir={'': 'src'},) + http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/856d7c1d/runtime/python/src/clownfish/__init__.py ---------------------------------------------------------------------- diff --git a/runtime/python/src/clownfish/__init__.py b/runtime/python/src/clownfish/__init__.py new file mode 100644 index 0000000..09697dc --- /dev/null +++ b/runtime/python/src/clownfish/__init__.py @@ -0,0 +1,15 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +
