44"""
55from setuptools import setup, Extension
66from distutils.command.build_ext import build_ext
7- from distutils.command.build_scripts import build_scripts
87from distutils.command.install_lib import install_lib
8+ from distutils.command.install_data import install_data
99from distutils.sysconfig import get_config_var
10- from distutils.util import convert_path
11- from distutils.dep_util import newer
12- from distutils import log
1310from platform import architecture
1411from subprocess import Popen, CalledProcessError, PIPE, check_call
1512from glob import glob
16- import stat
13+ import fnmatch
1714import sys
1815import os
1916
20- CONFIG = "Release" # Release or Debug
17+ CONFIG = "Release" # Release or Debug
2118DEVTOOLS = "MsDev" if sys.platform == "win32" else "Mono"
22- VERBOSITY = "minimal" # quiet, minimal, normal, detailed, diagnostic
19+ VERBOSITY = "minimal" # quiet, minimal, normal, detailed, diagnostic
2320PLATFORM = "x64" if architecture()[0] == "64bit" else "x86"
2421
2522
@@ -167,7 +164,6 @@ def build_extension(self, ext):
167164 if DEVTOOLS == "Mono":
168165 self._build_monoclr(ext)
169166
170-
171167 def _get_manifest(self, build_dir):
172168 if DEVTOOLS == "MsDev" and sys.version_info[:2] > (2,5):
173169 mt = _find_msbuild_tool("mt.exe", use_windows_sdk=True)
@@ -177,7 +173,6 @@ def _get_manifest(self, build_dir):
177173 check_call(" ".join(cmd), shell=False)
178174 return manifest
179175
180-
181176 def _build_monoclr(self, ext):
182177 mono_libs = _check_output("pkg-config --libs mono-2", shell=True)
183178 mono_cflags = _check_output("pkg-config --cflags mono-2", shell=True)
@@ -197,7 +192,6 @@ def _build_monoclr(self, ext):
197192
198193 build_ext.build_extension(self, clr_ext)
199194
200-
201195 def _install_packages(self):
202196 """install packages using nuget"""
203197 nuget = os.path.join("tools", "nuget", "nuget.exe")
@@ -222,12 +216,31 @@ def install(self):
222216 if not os.path.exists(self.install_dir):
223217 self.mkpath(self.install_dir)
224218
225- # only copy clr.pyd and its dependencies
226- for pattern in ("clr.*", "Python.Runtime.*"):
227- for srcfile in glob(os.path.join(self.build_dir, pattern)):
228- destfile = os.path.join(self.install_dir, os.path.basename(srcfile))
229- self.copy_file(srcfile, destfile)
230-
219+ # only copy clr.pyd/.so
220+ for srcfile in glob(os.path.join(self.build_dir, "clr.*")):
221+ destfile = os.path.join(self.install_dir, os.path.basename(srcfile))
222+ self.copy_file(srcfile, destfile)
223+
224+
225+ class PythonNET_InstallData(install_data):
226+
227+ def run(self):
228+ build_cmd = self.get_finalized_command("build_ext")
229+ install_cmd = self.get_finalized_command("install")
230+ build_lib = os.path.abspath(build_cmd.build_lib)
231+ install_platlib = os.path.relpath(install_cmd.install_platlib, self.install_dir)
232+
233+ for i, data_files in enumerate(self.data_files):
234+ if isinstance(data_files, str):
235+ self.data_files[i] = data_files[i].format(build_lib=build_lib)
236+ else:
237+ for j, filename in enumerate(data_files[1]):
238+ data_files[1][j] = filename.format(build_lib=build_lib)
239+ dest = data_files[0].format(install_platlib=install_platlib)
240+ self.data_files[i] = dest, data_files[1]
241+
242+ return install_data.run(self)
243+
231244
232245def _check_output(*popenargs, **kwargs):
233246 """subprocess.check_output from python 2.7.
@@ -248,6 +261,24 @@ def _check_output(*popenargs, **kwargs):
248261
249262
250263if __name__ == "__main__":
264+ setupdir = os.path.dirname(__file__)
265+ if setupdir:
266+ os.chdir(setupdir)
267+
268+ sources = []
269+ for ext in (".sln", ".snk", ".config"):
270+ sources.extend(glob("*" + ext))
271+
272+ for root, dirnames, filenames in os.walk("src"):
273+ for ext in (".cs", ".csproj", ".sln", ".snk", ".config", ".il", ".py", ".c", ".h", ".ico"):
274+ for filename in fnmatch.filter(filenames, "*" + ext):
275+ sources.append(os.path.join(root, filename))
276+
277+ for root, dirnames, filenames in os.walk("tools"):
278+ for ext in (".exe"):
279+ for filename in fnmatch.filter(filenames, "*" + ext):
280+ sources.append(os.path.join(root, filename))
281+
251282 setup(
252283 name="pythonnet",
253284 version="2.0.0.dev1",
@@ -258,12 +289,18 @@ def _check_output(*popenargs, **kwargs):
258289 'Development Status :: 3 - Alpha',
259290 'Intended Audience :: Developers'],
260291 ext_modules=[
261- Extension("clr", sources=[])
292+ Extension("clr", sources=sources)
293+ ],
294+ data_files=[
295+ ("{install_platlib}", [
296+ "{build_lib}/Python.Runtime.dll",
297+ "Python.Runtime.dll.config"]),
262298 ],
263299 zip_safe=False,
264300 cmdclass={
265- "build_ext": PythonNET_BuildExt,
266- "install_lib": PythonNET_InstallLib,
301+ "build_ext" : PythonNET_BuildExt,
302+ "install_lib" : PythonNET_InstallLib,
303+ "install_data": PythonNET_InstallData,
267304 }
268305 )
269306
0 commit comments