123 lines
3.9 KiB
Python
123 lines
3.9 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
from distutils import file_util
|
||
|
from distutils.command.build import build as orig_build
|
||
|
from distutils.util import get_platform
|
||
|
|
||
|
from setuptools import Command, setup
|
||
|
|
||
|
|
||
|
class build_make(Command):
|
||
|
description = "run the makefile and include the libraries in the build"
|
||
|
|
||
|
user_options = [
|
||
|
("ignore-errors", "i", "ignore errors from makefile commands"),
|
||
|
]
|
||
|
|
||
|
boolean_options = ["ignore-errors"]
|
||
|
|
||
|
def initialize_options(self):
|
||
|
self.build_lib = None
|
||
|
self.ignore_errors = False
|
||
|
self.makefile = None
|
||
|
self.make_data = None # {package: files}
|
||
|
place_dll_dir = "libtcodpy"
|
||
|
|
||
|
if "linux" in sys.platform:
|
||
|
self.makefile = "makefiles/makefile-linux"
|
||
|
self.make_data = {place_dll_dir: ["libtcod.so"]}
|
||
|
elif "haiku" in sys.platform:
|
||
|
self.makefile = "makefiles/makefile-haiku"
|
||
|
self.make_data = {place_dll_dir: ["libtcod.so"]}
|
||
|
elif "win" in sys.platform:
|
||
|
self.makefile = "makefiles/makefile-mingw-sdl2"
|
||
|
self.make_data = {place_dll_dir: ["libtcod-mingw.dll", "SDL2.dll"]}
|
||
|
else:
|
||
|
raise StandardError("No makefile exists for the %s platform" % sys.platform)
|
||
|
|
||
|
def finalize_options(self):
|
||
|
self.set_undefined_options(
|
||
|
"build",
|
||
|
("build_lib", "build_lib"),
|
||
|
)
|
||
|
|
||
|
def run(self):
|
||
|
cmd = ["make", "-f", self.makefile, "release"]
|
||
|
if self.ignore_errors:
|
||
|
cmd += ["--ignore-errors"]
|
||
|
if self.dry_run:
|
||
|
cmd += ["--dry-run"]
|
||
|
self.spawn(cmd)
|
||
|
for directory, files in self.make_data.items():
|
||
|
for file in files:
|
||
|
self.copy_file(os.path.join(".", file), os.path.join(self.build_lib, directory, file))
|
||
|
|
||
|
|
||
|
class build(orig_build):
|
||
|
def initialize_options(self):
|
||
|
"add the platform name to the build dir to prevent conflicts"
|
||
|
orig_build.initialize_options(self)
|
||
|
|
||
|
plat_name = self.plat_name or get_platform()
|
||
|
self.build_lib = os.path.join(self.build_base, "lib.%s" % plat_name)
|
||
|
|
||
|
# add build_make as a subcommand
|
||
|
sub_commands = orig_build.sub_commands + [("build_make", None)]
|
||
|
|
||
|
|
||
|
cmdclass = {"build": build, "build_make": build_make}
|
||
|
|
||
|
try:
|
||
|
from wheel.bdist_wheel import bdist_wheel as orig_bdist_wheel
|
||
|
|
||
|
class bdist_wheel(orig_bdist_wheel):
|
||
|
"""ctypes libraries are "platform specific" "pure Python" modules.
|
||
|
|
||
|
There's no way to tell bdist_wheel this without overwriting its methods
|
||
|
"""
|
||
|
|
||
|
description = "create a ctypes wheel distribution"
|
||
|
|
||
|
def get_tag(self):
|
||
|
# modified to add the platform tag to pure libraries
|
||
|
# no other changes
|
||
|
impl, abi, plat = orig_bdist_wheel.get_tag(self)
|
||
|
|
||
|
plat_name = self.plat_name
|
||
|
if plat_name is None:
|
||
|
plat_name = get_platform()
|
||
|
plat_name = plat_name.replace("-", "_").replace(".", "_")
|
||
|
|
||
|
return (impl, abi, plat_name)
|
||
|
|
||
|
cmdclass["bdist_wheel"] = bdist_wheel
|
||
|
except ImportError:
|
||
|
pass
|
||
|
|
||
|
needs_pytest = {"pytest", "test", "ptr"}.intersection(sys.argv)
|
||
|
pytest_runner = ["pytest-runner"] if needs_pytest else []
|
||
|
|
||
|
setup(
|
||
|
# public name, e.g. > pip install libtcod
|
||
|
name="libtcod",
|
||
|
# generic first release version
|
||
|
version="0.1.0",
|
||
|
# package named to be compatible with the tutorial
|
||
|
packages=["libtcodpy"],
|
||
|
# use added and modified commands
|
||
|
# disabled at this moment
|
||
|
# cmdclass=cmdclass,
|
||
|
# important metadata
|
||
|
url="https://github.com/libtcod/python-tcod",
|
||
|
maintainer="",
|
||
|
maintainer_email="",
|
||
|
# used for test command
|
||
|
setup_requires=pytest_runner,
|
||
|
tests_require=["pytest", "pytest-cov"],
|
||
|
# optional metadata for pypi
|
||
|
description="",
|
||
|
license="Revised BSD License", # 3-clause BSD license
|
||
|
)
|