Skip to content

Commit 9b2d6f2

Browse files
committed
Fix clr module to work without npython.
The npython binary was a workaround to be able to use pythonnet on Linux. This is no longer necessary as the clr module can be imported directly from the standard Python interpreter.
1 parent c7db273 commit 9b2d6f2

File tree

5 files changed

+11
-188
lines changed

5 files changed

+11
-188
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ install:
1717
- pip install six
1818
- python setup.py build_ext --inplace
1919
script:
20-
- export PYTHONPATH=`pwd`
20+
- export PYTHONPATH=`pwd`:$PYTHONPATH
2121
- export PYTHONHOME=`python -c "import sys; print(sys.exec_prefix)"`
22-
- ./npython src/tests/runtests.py
22+
- python src/tests/runtests.py

setup.py

Lines changed: 5 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,11 @@ def _find_msbuild_tool(tool="msbuild.exe", use_windows_sdk=False):
8383
_xbuild = "\"%s\"" % _find_msbuild_tool("msbuild.exe")
8484
_defines_sep = ";"
8585
_config = "%sWin" % CONFIG
86-
_npython_exe = "nPython.exe"
8786

8887
elif DEVTOOLS == "Mono":
8988
_xbuild = "xbuild"
9089
_defines_sep = ","
9190
_config = "%sMono" % CONFIG
92-
_npython_exe = "npython"
9391

9492
else:
9593
raise NotImplementedError("DevTools %s not supported (use MsDev or Mono)" % DEVTOOLS)
@@ -131,6 +129,11 @@ def build_extension(self, ext):
131129
if sys.platform != "win32" and DEVTOOLS == "Mono":
132130
defines.append("MONO_LINUX")
133131

132+
# Check if --enable-shared was set when Python was built
133+
enable_shared = get_config_var("Py_ENABLE_SHARED")
134+
if enable_shared == 0:
135+
defines.append("PYTHON_WITHOUT_ENABLE_SHARED")
136+
134137
if hasattr(sys, "abiflags"):
135138
if "d" in sys.abiflags:
136139
defines.append("PYTHON_WITH_PYDEBUG")
@@ -191,44 +194,6 @@ def _build_monoclr(self, ext):
191194

192195
build_ext.build_extension(self, clr_ext)
193196

194-
# build the clr python executable
195-
sources = [
196-
"src/monoclr/pynetinit.c",
197-
"src/monoclr/python.c",
198-
]
199-
200-
macros = ext.define_macros[:]
201-
for undef in ext.undef_macros:
202-
macros.append((undef,))
203-
204-
objects = self.compiler.compile(sources,
205-
output_dir=self.build_temp,
206-
macros=macros,
207-
include_dirs=ext.include_dirs,
208-
debug=self.debug,
209-
extra_postargs=cflags.split(" "),
210-
depends=ext.depends)
211-
212-
output_dir = os.path.dirname(self.get_ext_fullpath(ext.name))
213-
py_libs = get_config_var("BLDLIBRARY")
214-
libs += " " + py_libs
215-
216-
# Include the directories python's shared libs were installed to. This
217-
# is case python was built with --enable-shared as then npython will need
218-
# to be able to find libpythonX.X.so.
219-
runtime_library_dirs = (get_config_var("DESTDIRS") or "").split(" ")
220-
if ext.runtime_library_dirs:
221-
runtime_library_dirs.extend(ext.runtime_library_dirs)
222-
223-
self.compiler.link_executable(objects,
224-
_npython_exe,
225-
output_dir=output_dir,
226-
libraries=self.get_libraries(ext),
227-
library_dirs=ext.library_dirs,
228-
runtime_library_dirs=runtime_library_dirs,
229-
extra_postargs=libs.split(" "),
230-
debug=self.debug)
231-
232197

233198
def _install_packages(self):
234199
"""install packages using nuget"""
@@ -261,77 +226,6 @@ def install(self):
261226
self.copy_file(srcfile, destfile)
262227

263228

264-
class PythonNET_BuildScripts(build_scripts):
265-
266-
def finalize_options(self):
267-
build_scripts.finalize_options(self)
268-
269-
# fixup scripts to look in the build_ext output folder
270-
if self.scripts:
271-
build_ext = self.get_finalized_command("build_ext")
272-
output_dir = os.path.dirname(build_ext.get_ext_fullpath("clr"))
273-
scripts = []
274-
for script in self.scripts:
275-
if os.path.exists(os.path.join(output_dir, script)):
276-
script = os.path.join(output_dir, script)
277-
scripts.append(script)
278-
self.scripts = scripts
279-
280-
def copy_scripts(self):
281-
# Look for the npython script as it can't be copied by the base class'
282-
# copy_scripts as it attempts to determine the file encoding as if it
283-
# were a text file.
284-
npython = None
285-
for script in self.scripts:
286-
if os.path.basename(script) == _npython_exe:
287-
npython = script
288-
289-
if npython is None:
290-
return build_scripts.copy_scripts(self)
291-
292-
# Call the base class copy_scripts with anything other than npython
293-
scripts = self.scripts
294-
self.scripts = [x for x in scripts if x != npython]
295-
try:
296-
base_result = build_scripts.copy_scripts(self)
297-
finally:
298-
self.scripts = scripts
299-
300-
# Copy npython
301-
outfiles = []
302-
updated_files = []
303-
304-
script = convert_path(npython)
305-
outfile = os.path.join(self.build_dir, os.path.basename(script))
306-
outfiles.append(outfile)
307-
308-
if not self.force and not newer(script, outfile):
309-
log.debug("not copying %s (up-to-date)", script)
310-
else:
311-
updated_files.append(outfile)
312-
self.copy_file(script, outfile)
313-
314-
if os.name == 'posix':
315-
for file in outfiles:
316-
if self.dry_run:
317-
log.info("changing mode of %s", file)
318-
else:
319-
oldmode = os.stat(file)[stat.ST_MODE] & 0o7777
320-
newmode = (oldmode | 0o555) & 0o7777
321-
if newmode != oldmode:
322-
log.info("changing mode of %s from %o to %o",
323-
file, oldmode, newmode)
324-
os.chmod(file, newmode)
325-
326-
# Some versions of build_command.copy_scripts return (outfiles, updated_files),
327-
# older versions return None.
328-
if base_result is not None:
329-
base_outfiles, base_updated_files = base_result
330-
outfiles.extend(base_outfiles)
331-
updated_files.extend(base_updated_files)
332-
return outfiles, updated_files
333-
334-
335229
def _check_output(*popenargs, **kwargs):
336230
"""subprocess.check_output from python 2.7.
337231
Added here to support building for earlier versions
@@ -363,11 +257,9 @@ def _check_output(*popenargs, **kwargs):
363257
ext_modules=[
364258
Extension("clr", sources=[])
365259
],
366-
scripts=[_npython_exe],
367260
zip_safe=False,
368261
cmdclass={
369262
"build_ext": PythonNET_BuildExt,
370-
"build_scripts": PythonNET_BuildScripts,
371263
"install_lib": PythonNET_InstallLib,
372264
}
373265
)

src/monoclr/clrpython.c

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/monoclr/python.c

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/runtime/runtime.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,11 @@ public class Runtime {
177177
internal const string dllWithWideUnicode = "";
178178
#endif
179179

180+
#if (PYTHON_WITHOUT_ENABLE_SHARED)
181+
public const string dll = "__Internal";
182+
#else
180183
public const string dll = dllBase + dllWithPyDebug + dllWithPyMalloc + dllWithWideUnicode;
184+
#endif
181185

182186
// set to true when python is finalizing
183187
internal static Object IsFinalizingLock = new Object();

0 commit comments

Comments
 (0)