-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix linking to editable install on Windows
On Windows during compile time it is not only target .dll that is needed to link to a DSO, but also corresponding .lib and .exp files. And if the .lib file cannot be found linking fails. On regular install for a DSO X we are currently installing all X.dll, X.lib and X.exp, but for in-place builds we copy only X.dll into intree without X.lib and the rest. This leads to build failures when an external project tries to link to a DSO from `pip install -e` installed project. Below is, for example, how it looks for the link failure of added example/project2 to dsodemo.lib.demo without the fix: ```console (1.wenv) Z:\home\kirr\src\tools\go\pygo-win\setuptools_dso\example\project2>python setup.py build_ext -i running build_ext building 'use_dsodemo.ext' extension Z:\home\kirr\src\tools\go\pygo-win\BuildTools\vc\tools\msvc\14.35.32215\bin\Hostx64\x64\cl.exe /c /nologo /Od /W3 /GL /DNDEBUG /MD -I../src -IZ:\ho me\kirr\src\tools\go\pygo-win\1.wenv\include "-IC:\Program Files\Python310\include" "-IC:\Program Files\Python310\Include" -Iz:\home\kirr\src\tools \go\pygo-win\BuildTools\vc\tools\msvc\14.35.32215\include -Iz:\home\kirr\src\tools\go\pygo-win\BuildTools\kits\10\include\10.0.22000.0\shared -Iz:\ home\kirr\src\tools\go\pygo-win\BuildTools\kits\10\include\10.0.22000.0\ucrt -Iz:\home\kirr\src\tools\go\pygo-win\BuildTools\kits\10\include\10.0.2 2000.0\um -Iz:\home\kirr\src\tools\go\pygo-win\BuildTools\kits\10\include\10.0.22000.0\winrt /EHsc /Tpsrc/use_dsodemo/ext.cpp /Fobuild\temp.win-amd 64-cpython-310\Release\src/use_dsodemo/ext.obj ext.cpp creating Z:\home\kirr\src\tools\go\pygo-win\setuptools_dso\example\project2\build\lib.win-amd64-cpython-310 creating Z:\home\kirr\src\tools\go\pygo-win\setuptools_dso\example\project2\build\lib.win-amd64-cpython-310\use_dsodemo Z:\home\kirr\src\tools\go\pygo-win\BuildTools\vc\tools\msvc\14.35.32215\bin\Hostx64\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED ,ID=2 /MANIFESTUAC:NO /LIBPATH:Z:\home\kirr\src\tools\go\pygo-win\setuptools_dso\example\src\dsodemo\lib "/LIBPATH:C:\Program Files\Python310\libs" "/LIBPATH:C:\Program Files\Python310" /LIBPATH:z:\home\kirr\src\tools\go\pygo-win\BuildTools\vc\tools\msvc\14.35.32215\lib\x64 /LIBPATH:z:\home\ki rr\src\tools\go\pygo-win\BuildTools\kits\10\lib\10.0.22000.0\ucrt\x64 /LIBPATH:z:\home\kirr\src\tools\go\pygo-win\BuildTools\kits\10\lib\10.0.22000 .0\um\x64 demo.lib /EXPORT:PyInit_ext build\temp.win-amd64-cpython-310\Release\src/use_dsodemo/ext.obj /OUT:build\lib.win-amd64-cpython-310\use_dso demo\ext.cp310-win_amd64.pyd /IMPLIB:build\temp.win-amd64-cpython-310\Release\src/use_dsodemo\ext.cp310-win_amd64.lib LINK : fatal error LNK1181: cannot open input file 'demo.lib' error: command 'Z:\\home\\kirr\\src\\tools\\go\\pygo-win\\BuildTools\\vc\\tools\\msvc\\14.35.32215\\bin\\Hostx64\\x64\\link.exe' failed with exit code 1181 ``` This fix is simple: on inplace build copy into intree not only .dll but also .lib and .exp files.
- Loading branch information
Showing
9 changed files
with
142 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
include pyproject.toml | ||
include src/*.h | ||
include src/*.c | ||
include src/*.cpp |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
[build-system] | ||
requires = ["setuptools", "wheel", "setuptools_dso"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
#!/usr/bin/env python | ||
"""Project2 demonstrates how to link-to dsodemo and use it from external project""" | ||
|
||
from setuptools_dso import Extension, setup | ||
from os.path import dirname, join, abspath | ||
|
||
import dsodemo.lib | ||
|
||
ext = Extension('use_dsodemo.ext', ['src/use_dsodemo/ext.cpp'], | ||
dsos=['dsodemo.lib.demo'], | ||
include_dirs=[dirname(dsodemo.lib.__file__)], # TODO automatically discover it like we do for library_dirs | ||
) | ||
setup( | ||
name='use_dsodemo', | ||
version="0.1", | ||
install_requires = ['setuptools_dso', 'dsodemo'], | ||
packages=['use_dsodemo'], | ||
package_dir={'': 'src'}, | ||
ext_modules = [ext], | ||
) |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
from __future__ import print_function | ||
|
||
import dsodemo.ext.dtest # preload dsodemo.lib.demo dso which dsodemo.ext.dtest uses | ||
|
||
from . import ext | ||
|
||
def main(): | ||
print('via .ext -> dsodemo.lib.demo:') | ||
print(ext.dsodemo_foo()) | ||
print(ext.dsodemo_bar()) | ||
|
||
if __name__ == '__main__': | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#include <Python.h> | ||
|
||
#include "mylib.h" | ||
|
||
static | ||
PyObject* call_dsodemo_foo(PyObject *junk) | ||
{ | ||
return PyUnicode_FromString(foo()); | ||
} | ||
|
||
static | ||
PyObject* call_dsodemo_bar(PyObject *junk) | ||
{ | ||
return PyUnicode_FromString(bar().c_str()); | ||
} | ||
|
||
static struct PyMethodDef use_dsodemo_methods[] = { | ||
{"dsodemo_foo", (PyCFunction)call_dsodemo_foo, METH_NOARGS, | ||
"dsodemo_foo() -> unicode\n" | ||
"call foo"}, | ||
{"dsodemo_bar", (PyCFunction)call_dsodemo_bar, METH_NOARGS, | ||
"dsodemo_bar() -> unicode\n" | ||
"call bar"}, | ||
{NULL} | ||
}; | ||
|
||
#if PY_MAJOR_VERSION >= 3 | ||
static struct PyModuleDef use_dsodemo_module = { | ||
PyModuleDef_HEAD_INIT, | ||
"use_dsodemo.ext", | ||
NULL, | ||
-1, | ||
use_dsodemo_methods, | ||
}; | ||
#endif | ||
|
||
#if PY_MAJOR_VERSION >= 3 | ||
# define PyMOD(NAME) PyObject* PyInit_##NAME (void) | ||
#else | ||
# define PyMOD(NAME) void init##NAME (void) | ||
#endif | ||
|
||
extern "C" | ||
PyMOD(ext) | ||
{ | ||
#if PY_MAJOR_VERSION >= 3 | ||
PyObject *mod = PyModule_Create(&use_dsodemo_module); | ||
#else | ||
PyObject *mod = Py_InitModule("use_dsodemo.ext", use_dsodemo_methods); | ||
#endif | ||
if(mod) { | ||
} | ||
#if PY_MAJOR_VERSION >= 3 | ||
return mod; | ||
#else | ||
(void)mod; | ||
#endif | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters