[Bug 199929] [NEW PORT] math/cryptominisat
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Tue May 5 20:14:33 UTC 2015
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=199929
--- Comment #4 from Jan Beich <jbeich at FreeBSD.org> ---
Created attachment 156406
--> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=156406&action=edit
PYTHON as separate ports, v0
(In reply to 6yearold from comment #3)
> (In reply to Jan Beich from comment #1)
>>WARN: /usr/ports/math/cryptominisat/pkg-plist: [8]: installing shared
>>libraries, please define USE_LDCONFIG as appropriate
>>Maybe set SOVERSION, so the library path can be cached by ldconfig(8)
>>and used not only via RPATH.
> Yup, but what's the proper way to do this? Make a symlink at post-install?
After testing it works fine with just USE_LDCONFIG. Broken ldconfig -r
output can be ignored as it doesn't affect LIB_DEPENDS implementation
for a few years. If you still want SOVERSION try:
set_target_properties(libcryptominisat4 PROPERTIES
...
SOVERSION 0
)
>>USES=python with no version specified is for ports that support both
>>python2 and python3. CMakeLists.txt seems to disagree:
>
> As with find_package(Boost 1.46) case, this version number is a minimum version
> required. Since cryptominisat author doesn't check for actual version of python
> that have been found, i thought it should work with any python that is 2.7+.
Try building with:
# in make.conf
DEFAULT_VERSIONS = python=3.4
which would either not find suitable python version or fail as
pycryptosat.cpp:68:10: error: use of undeclared identifier 'PyInt_Check'
if (!IS_INT(lit)) {
^
pycryptosat.cpp:21:21: note: expanded from macro 'IS_INT'
#define IS_INT(x) (PyInt_Check(x) || PyLong_Check(x))
^
pycryptosat.cpp:366:11: error: no member named 'ob_type' in 'Solver'
self->ob_type->tp_free((PyObject*)self);
~~~~ ^
pycryptosat.cpp:409:5: error: cannot initialize a member subobject of type
'Py_ssize_t' (aka 'long') with
an lvalue of type 'const char [19]'
"pycryptosat.Solver", /*tp_name*/
^~~~~~~~~~~~~~~~~~~~
pycryptosat.cpp:412:5: error: cannot initialize a member subobject of type
'printfunc' (aka 'int
(*)(PyObject *, FILE *, int)') with an rvalue of type 'destructor' (aka
'void (*)(PyObject *)'):
different number of parameters (3 vs 1)
(destructor)Solver_dealloc, /*tp_dealloc*/
^~~~~~~~~~~~~~~~~~~~~~~~~~
pycryptosat.cpp:427:5: error: cannot initialize a member subobject of type
'const char *' with an rvalue
of type 'unsigned long'
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/python3.4/object.h:647:29: note: expanded from macro
'Py_TPFLAGS_DEFAULT'
#define Py_TPFLAGS_DEFAULT ( \
^
pycryptosat.cpp:428:5: error: cannot initialize a member subobject of type
'traverseproc' (aka 'int
(*)(PyObject *, visitproc, void *)') with an lvalue of type 'const char
[15]'
"Solver objects", /* tp_doc */
^~~~~~~~~~~~~~~~
pycryptosat.cpp:435:5: error: cannot initialize a member subobject of type
'struct PyMemberDef *' with an
lvalue of type 'PyMethodDef [4]'
Solver_methods, /* tp_methods */
^~~~~~~~~~~~~~
pycryptosat.cpp:436:5: error: cannot initialize a member subobject of type
'struct PyGetSetDef *' with an
lvalue of type 'PyMemberDef [1]'
Solver_members, /* tp_members */
^~~~~~~~~~~~~~
pycryptosat.cpp:443:5: error: cannot initialize a member subobject of type
'allocfunc' (aka 'PyObject
*(*)(struct _typeobject *, Py_ssize_t)') with an rvalue of type
'initproc' (aka 'int (*)(PyObject *,
PyObject *, PyObject *)'): different number of parameters (2 vs 3)
(initproc)Solver_init, /* tp_init */
^~~~~~~~~~~~~~~~~~~~~
pycryptosat.cpp:445:5: error: cannot initialize a member subobject of type
'freefunc'
(aka 'void (*)(void *)') with an lvalue of type
'PyObject *(PyTypeObject *, PyObject *, PyObject *)': different number
of parameters (1 vs 3)
Solver_new, /* tp_new */
^~~~~~~~~~
pycryptosat.cpp:458:9: error: non-void function 'initpycryptosat' should
return a value [-Wreturn-type]
return;
^
pycryptosat.cpp:460:9: error: use of undeclared identifier 'Py_InitModule3'
m = Py_InitModule3("pycryptosat", module_methods,
^
Also, USES+=python:build doesn't account for libpython dependency.
$ readelf -d .../pycryptosat.so | fgrep NEEDED
0x0000000000000001 (NEEDED) Shared library:
[libcryptominisat4.so]
0x0000000000000001 (NEEDED) Shared library: [libpython2.7.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc++.so.1]
0x0000000000000001 (NEEDED) Shared library: [libcxxrt.so.1]
0x0000000000000001 (NEEDED) Shared library: [libm.so.5]
0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.7]
>> Why not create a separate USE_PYTHON=distutils port that depends on this one?
> I don't see why it's required. The setup.py script is still configured by
> CMake, so, from my understanding, i would have to run either cmake or setup.py
> manually.
It was merely a suggestion (not requirement) to:
- let the ports framework set the build environment for you
- provide python bindings for package users
I'm attaching an example with all of the mentioned issues addressed.
Hopefully, slave deduplication doesn't make the approach hard
to understand.
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-ports-bugs
mailing list