diff --git a/.gitignore b/.gitignore index 7fcc294004d2226df3c0b65daac097228be8fd9c..71f03d3ad65ed14d6e37cfb471ba601adf355b4b 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ doc/_build .cache .DS_Store .ipynb_checkpoints + +sumpy/_git_rev.py diff --git a/setup.py b/setup.py index 400d1b9fc1d135b4a4a75dda113cf0af25d7c5cc..8d0850540362ddfc3ecedf453f2ccc53bba21a1c 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +import os from setuptools import setup ver_dic = {} @@ -10,8 +11,59 @@ try: finally: version_file.close() +os.environ["AKPYTHON_EXEC_FROM_WITHIN_WITHIN_SETUP_PY"] = "1" exec(compile(version_file_contents, "sumpy/version.py", 'exec'), ver_dic) + +# {{{ capture git revision at install time + +# authoritative version in pytools/__init__.py +def find_git_revision(tree_root): + # Keep this routine self-contained so that it can be copy-pasted into + # setup.py. + + from os.path import join, exists, abspath + tree_root = abspath(tree_root) + + if not exists(join(tree_root, ".git")): + return None + + from subprocess import Popen, PIPE, STDOUT + p = Popen(["git", "rev-parse", "HEAD"], shell=False, + stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True, + cwd=tree_root) + (git_rev, _) = p.communicate() + + import sys + if sys.version_info >= (3,): + git_rev = git_rev.decode() + + git_rev = git_rev.rstrip() + + retcode = p.returncode + assert retcode is not None + if retcode != 0: + from warnings import warn + warn("unable to find git revision") + return None + + return git_rev + + +def write_git_revision(package_name): + from os.path import dirname, join + dn = dirname(__file__) + git_rev = find_git_revision(dn) + + with open(join(dn, package_name, "_git_rev.py"), "w") as outf: + outf.write("GIT_REVISION = %s\n" % repr(git_rev)) + + +write_git_revision("sumpy") + +# }}} + + setup(name="sumpy", version=ver_dic["VERSION_TEXT"], description="Fast summation in Python", @@ -40,8 +92,8 @@ setup(name="sumpy", packages=["sumpy", "sumpy.expansion"], install_requires=[ + "pytools>=2018.2", "loo.py>=2017.2", - "pytools>=2017.6", "boxtree>=2013.1", "pytest>=2.3", "six", diff --git a/sumpy/version.py b/sumpy/version.py index 1e16d5d5f92586486f5f114e393e9e1e8e534830..f42335928e7fcb0cf6f93e8461714fb436691f8d 100644 --- a/sumpy/version.py +++ b/sumpy/version.py @@ -1,3 +1,5 @@ +from __future__ import division, absolute_import + __copyright__ = "Copyright (C) 2014 Andreas Kloeckner" __license__ = """ @@ -20,13 +22,29 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +# {{{ find install- or run-time git revision + +import os +if os.environ.get("AKPYTHON_EXEC_FROM_WITHIN_WITHIN_SETUP_PY") is not None: + # We're just being exec'd by setup.py. We can't import anything. + _git_rev = None + +else: + import sumpy._git_rev as _git_rev_mod + _git_rev = _git_rev_mod.GIT_REVISION + + # If we're running from a dev tree, the last install (and hence the most + # recent update of the above git rev) could have taken place very long ago. + from pytools import find_module_git_revision + _runtime_git_rev = find_module_git_revision(__file__, n_levels_up=1) + if _runtime_git_rev is not None: + _git_rev = _runtime_git_rev + +# }}} + VERSION = (2016, 1) VERSION_STATUS = "beta1" VERSION_TEXT = ".".join(str(x) for x in VERSION) + VERSION_STATUS -# When developing on a branch, set the first element of this tuple to your -# branch name, so as to avoid conflicts with the master branch. Make sure -# to reset this to the next number up with "master" before merging into -# master. -KERNEL_VERSION = ("master", 31) +KERNEL_VERSION = (VERSION, _git_rev, 0)