#!/usr/bin/env python
##
# Copyright (c) 2006-2016 Apple Inc. All rights reserved.
#
# 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.
##
from __future__ import print_function
from os.path import dirname, abspath, join as joinpath
from setuptools import setup, find_packages as setuptools_find_packages
import errno
import os
import subprocess
base_version = "0.2"
base_project = "ccs-caldavtester"
#
# Utilities
#
def find_packages():
modules = []
for pkg in filter(
lambda p: os.path.isdir(p) and os.path.isfile(os.path.join(p, "__init__.py")),
os.listdir(".")
):
modules.extend([pkg, ] + [
"{}.{}".format(pkg, subpkg)
for subpkg in setuptools_find_packages(pkg)
])
return modules
def git_info(wc_path):
"""
Look up info on a GIT working copy.
"""
try:
branch = subprocess.check_output(
["git", "rev-parse", "--abbrev-ref", "HEAD"],
stderr=subprocess.STDOUT,
)
except OSError as e:
if e.errno == errno.ENOENT:
return None
raise
except subprocess.CalledProcessError:
return None
branch = branch.strip()
try:
revision = subprocess.check_output(
["git", "rev-parse", "--verify", "HEAD"],
stderr=subprocess.STDOUT,
)
except OSError as e:
if e.errno == errno.ENOENT:
return None
raise
except subprocess.CalledProcessError:
return None
revision = revision.strip()
try:
tag = subprocess.check_output(
["git", "describe", "--candidates=0", "HEAD"],
stderr=subprocess.STDOUT,
)
except OSError as e:
if e.errno == errno.ENOENT:
return None
raise
except subprocess.CalledProcessError:
tag = None
else:
tag = tag.strip()
return dict(
project=base_project,
branch=branch,
revision=revision,
tag=tag,
)
def version():
"""
Compute the version number.
"""
source_root = dirname(abspath(__file__))
info = git_info(source_root)
if info is None:
# We don't have GIT info...
return "{}a1+unknown".format(base_version)
assert info["project"] == base_project, (
"GIT project {!r} != {!r}"
.format(info["project"], base_project)
)
if info["tag"]:
project_version = info["tag"]
project, version = project_version.split("-")
assert project == project_name, (
"Tagged project {!r} != {!r}".format(project, project_name)
)
assert version == base_version, (
"Tagged version {!r} != {!r}".format(version, base_version)
)
# This is a correctly tagged release of this project.
return base_version
if info["branch"].startswith("release/"):
project_version = info["branch"][len("release/"):]
project, version, dev = project_version.split("-")
assert project == project_name, (
"Branched project {!r} != {!r}".format(project, project_name)
)
assert version == base_version, (
"Branched version {!r} != {!r}".format(version, base_version)
)
assert dev == "dev", (
"Branch name doesn't end in -dev: {!r}".format(info["branch"])
)
# This is a release branch of this project.
# Designate this as beta2, dev version based on git revision.
return "{}b2.dev-{}".format(base_version, info["revision"])
if info["branch"] == "master":
# This is master.
# Designate this as beta1, dev version based on git revision.
return "{}b1.dev-{}".format(base_version, info["revision"])
# This is some unknown branch or tag...
return "{}a1.dev-{}+{}".format(
base_version,
info["revision"],
info["branch"].replace("/", ".").replace("-", "."),
)
#
# Options
#
project_name = "CalDAVTester"
description = "CalDAV/CardDAV protocol test suite"
long_description = file(joinpath(dirname(__file__), "README.md")).read()
url = "https://github.com/apple/ccs-caldavtester"
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 2 :: Only",
"Topic :: Software Development :: Testing",
]
author = "Apple Inc."
author_email = "calendarserver-dev@lists.macosforge.org"
license = "Apache License, Version 2.0"
platforms = ["all"]
#
# Dependencies
#
setup_requirements = []
install_requirements = [
"pycalendar",
]
extras_requirements = {}
#
# Set up Extension modules that need to be built
#
# from distutils.core import Extension
extensions = []
#
# Run setup
#
def doSetup():
version_string = version()
setup(
name=project_name,
version=version_string,
description=description,
long_description=long_description,
url=url,
classifiers=classifiers,
author=author,
author_email=author_email,
license=license,
platforms=platforms,
packages=find_packages(),
package_data={},
scripts=[],
data_files=[],
ext_modules=extensions,
py_modules=[],
setup_requires=setup_requirements,
install_requires=install_requirements,
extras_require=extras_requirements,
)
#
# Main
#
if __name__ == "__main__":
doSetup()