diff options
author | Michał Górny <mgorny@gentoo.org> | 2017-12-08 19:34:27 +0100 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2017-12-08 19:47:12 +0100 |
commit | 76e48fd6c1e9a33aa8652e062b79bb60885b757f (patch) | |
tree | d5d4eef6a4124b82dcb4fa1ae95d144f7cf6b747 /dev-python/cvxopt | |
parent | dev-libs/mpfr: [QA] Move patches to distfile (diff) | |
download | gentoo-76e48fd6c1e9a33aa8652e062b79bb60885b757f.tar.gz gentoo-76e48fd6c1e9a33aa8652e062b79bb60885b757f.tar.bz2 gentoo-76e48fd6c1e9a33aa8652e062b79bb60885b757f.zip |
dev-python/cvxopt: Drop old
Closes: https://bugs.gentoo.org/620564
Diffstat (limited to 'dev-python/cvxopt')
-rw-r--r-- | dev-python/cvxopt/Manifest | 2 | ||||
-rw-r--r-- | dev-python/cvxopt/cvxopt-1.1.6-r2.ebuild | 99 | ||||
-rw-r--r-- | dev-python/cvxopt/cvxopt-1.1.8.ebuild | 103 | ||||
-rw-r--r-- | dev-python/cvxopt/files/cvxopt-1.1.6-glpk449.patch | 1082 | ||||
-rw-r--r-- | dev-python/cvxopt/files/cvxopt-1.1.6-setup.patch | 176 | ||||
-rw-r--r-- | dev-python/cvxopt/files/cvxopt-1.1.8-setup.patch | 136 |
6 files changed, 0 insertions, 1598 deletions
diff --git a/dev-python/cvxopt/Manifest b/dev-python/cvxopt/Manifest index 31aea1f97c8a..1f9e11f106d9 100644 --- a/dev-python/cvxopt/Manifest +++ b/dev-python/cvxopt/Manifest @@ -1,3 +1 @@ -DIST cvxopt-1.1.6.tar.gz 3352996 SHA256 7b4ccf3ed896dde6624623431c0b1f5e32d874384329ed716f51babcbf416227 SHA512 b9f5fd7870412423b60068d205efb99d3630012509cb659fb67a10d6175906768846d7c906cf2fcac4be29afd558619b71e2dca730041329195a2365dd1d722c WHIRLPOOL d43cf090ee0396a77851fb71e6e34c980152bccdd5fdb3ecc53d0a464a505ac87a1e7198d313ec669443970bcf8a2d616f03c2f861b7df2f620bd583a97ea140 -DIST cvxopt-1.1.8.tar.gz 5354013 SHA256 c96f8d01ae31a5bdec36a65b0587f50cfbf8139335adb70442350a8042da2025 SHA512 fdf047f203275e687c51b88575639ab0383207f8748969939ecf2939f9a2acc9f5d0e97c68377466fce81eb979b5eb058834f75134cc56df5dbb01805cb98c93 WHIRLPOOL 65c8a246e03a7136c2bce3c7ef831f9f82c4cc84b7a1e5db6a2643127ea9164c35782fb1013c0eaf7ac190d036887a131c705fa56b78bda179792eca9d016d8b DIST cvxopt-1.1.9.tar.gz 1872932 SHA256 09997fec809179c9bb9fe8cdd202ad6ecb675f890658219022f492e0797122ee SHA512 bb0982cd1489157df4c7cd0dd92bf83b1692dc3a27d6b9a7a465dda9f9daea4ea5ef69e48642a879d036679bd0b0fe0dfd782433ce4cc570e90e11823733e58b WHIRLPOOL c9ba8b674dbcf1799a99559f3794db2cf8f57f5584865294fea5ee6932d59a9d9980e10197e8e4cd291d591bad9d92b24737a909b5bac6f6617597afa057c171 diff --git a/dev-python/cvxopt/cvxopt-1.1.6-r2.ebuild b/dev-python/cvxopt/cvxopt-1.1.6-r2.ebuild deleted file mode 100644 index c83a21f9e4b9..000000000000 --- a/dev-python/cvxopt/cvxopt-1.1.6-r2.ebuild +++ /dev/null @@ -1,99 +0,0 @@ -# Copyright 1999-2015 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 - -EAPI=5 - -PYTHON_COMPAT=( python{2_7,3_4} ) - -inherit distutils-r1 toolchain-funcs eutils - -DESCRIPTION="Python package for convex optimization" -HOMEPAGE="http://cvxopt.org/" -SRC_URI="https://github.com/${PN}/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz" - -LICENSE="GPL-3" -SLOT="0" -KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" -IUSE="doc +dsdp examples fftw +glpk gsl" - -RDEPEND=" - virtual/blas - virtual/cblas - virtual/lapack - sci-libs/cholmod:0= - sci-libs/umfpack:0= - dsdp? ( sci-libs/dsdp:0= ) - fftw? ( sci-libs/fftw:3.0= ) - glpk? ( sci-mathematics/glpk:0= ) - gsl? ( sci-libs/gsl:0= )" -DEPEND="${RDEPEND} - virtual/pkgconfig - doc? ( dev-python/sphinx )" - -python_prepare_all(){ - epatch "${FILESDIR}"/${PN}-1.1.6-setup.patch - - has_version ">=sci-mathematics/glpk-4.49" && \ - epatch "${FILESDIR}"/${PN}-1.1.6-glpk449.patch - - rm -r src/C/SuiteSparse*/ || die - - pkg_lib() { - local pkg=$(echo $1 | tr '[:lower:]' '[:upper:]') - local libs="$($(tc-getPKG_CONFIG) --libs-only-l $1 | \ - sed -e 's:[ ]-l*\(pthread\|m\)\([ ]\|$\)::g' -e 's:[ ]*$::' | \ - tr ' ' '\n' | sort -u | sed -e "s:^-l\(.*\):'\1':g" | \ - tr '\n' ',' | sed -e 's:,$::')" - local libdir="$($(tc-getPKG_CONFIG) --libs-only-L $1 | \ - sed -e 's:[ ]*$::' | \ - tr ' ' '\n' | sort -u | sed -e "s:^-L\(.*\):'\1':g" | \ - tr '\n' ',' | sed -e 's:,$::')" - local incdir="$($(tc-getPKG_CONFIG) --cflags-only-I $1 | \ - sed -e 's:[ ]*$::' | \ - tr ' ' '\n' | sort -u | sed -e "s:^-L\(.*\):'\1':g" | \ - tr '\n' ',' | sed -e 's:,$::')" - sed -i \ - -e "/${pkg}_LIB[ ]*=/s:\(.*[ ]*=[ ]*\[\).*${1}.*:\1${libs}\]:" \ - -e "s:\(${pkg}_INC_DIR[ ]*=\).*$:\1 ${incdir}:" \ - -e "s:\[ BLAS_LIB_DIR \]:\[ ${libdir} \]:g" \ - setup.py || die - } - - use_cvx() { - local flag=$1 - if use ${flag} ; then - # Switch to ^^ when we switch to EAPI=6. - #local uflag=${flag^^} - local uflag=$(tr '[:lower:]' '[:upper:]' <<<"${flag}") - sed -i \ - -e "s/\(BUILD_${uflag} =\) 0/\1 1/" \ - setup.py || die - fi - } - - pkg_lib blas - pkg_lib lapack - - use_cvx gsl - use_cvx fftw - use_cvx glpk - use_cvx dsdp - - distutils-r1_python_prepare_all -} - -python_compile_all() { - use doc && export VARTEXFONTS="${T}/fonts" && emake -C doc -B html -} - -python_test() { - cd examples/doc/chap8 - "${EPYTHON}" lp.py || die -} - -python_install_all() { - use doc && HTML_DOCS=( doc/build/html/. ) - insinto /usr/share/doc/${PF} - use examples && doins -r examples - distutils-r1_python_install_all -} diff --git a/dev-python/cvxopt/cvxopt-1.1.8.ebuild b/dev-python/cvxopt/cvxopt-1.1.8.ebuild deleted file mode 100644 index a4a23ecac408..000000000000 --- a/dev-python/cvxopt/cvxopt-1.1.8.ebuild +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright 1999-2015 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 - -EAPI=5 - -PYTHON_COMPAT=( python2_7 python3_{4,5} ) - -inherit distutils-r1 eutils toolchain-funcs - -DESCRIPTION="Python package for convex optimization" -HOMEPAGE="http://cvxopt.org/" -SRC_URI="https://github.com/${PN}/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz" - -LICENSE="GPL-3" -SLOT="0" -KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" -IUSE="doc +dsdp examples fftw +glpk gsl" - -RDEPEND=" - virtual/blas - virtual/cblas - virtual/lapack - sci-libs/amd:0= - sci-libs/cholmod:0= - sci-libs/colamd:0= - sci-libs/suitesparseconfig:0= - sci-libs/umfpack:0= - dsdp? ( sci-libs/dsdp:0= ) - fftw? ( sci-libs/fftw:3.0= ) - glpk? ( >=sci-mathematics/glpk-4.49:0= ) - gsl? ( sci-libs/gsl:0= )" -DEPEND="${RDEPEND} - virtual/pkgconfig - doc? ( dev-python/sphinx )" - -python_prepare_all(){ - epatch "${FILESDIR}"/${P}-setup.patch - - rm -r src/C/SuiteSparse*/ || die - - pkg_lib() { - local pkg=$(echo $1 | tr '[:lower:]' '[:upper:]') - local libs="$($(tc-getPKG_CONFIG) --libs-only-l $1 | \ - sed -e 's:[ ]-l*\(pthread\|m\)\([ ]\|$\)::g' -e 's:[ ]*$::' | \ - tr ' ' '\n' | sort -u | sed -e "s:^-l\(.*\):'\1':g" | \ - tr '\n' ',' | sed -e 's:,$::')" - local libdir="$($(tc-getPKG_CONFIG) --libs-only-L $1 | \ - sed -e 's:[ ]*$::' | \ - tr ' ' '\n' | sort -u | sed -e "s:^-L\(.*\):'\1':g" | \ - tr '\n' ',' | sed -e 's:,$::')" - local incdir="$($(tc-getPKG_CONFIG) --cflags-only-I $1 | \ - sed -e 's:[ ]*$::' | \ - tr ' ' '\n' | sort -u | sed -e "s:^-L\(.*\):'\1':g" | \ - tr '\n' ',' | sed -e 's:,$::')" - sed -i \ - -e "/${pkg}_LIB[ ]*=/s:\(.*[ ]*=[ ]*\[\).*${1}.*:\1${libs}\]:" \ - -e "s:\(${pkg}_INC_DIR[ ]*=\).*$:\1 ${incdir}:" \ - -e "s:\[ BLAS_LIB_DIR \]:\[ ${libdir} \]:g" \ - setup.py || die - } - - use_cvx() { - local flag=$1 - if use ${flag} ; then - # Switch to ^^ when we switch to EAPI=6. - #local uflag=${flag^^} - local uflag=$(tr '[:lower:]' '[:upper:]' <<<"${flag}") - sed -i \ - -e "s/\(BUILD_${uflag} =\) 0/\1 1/" \ - setup.py || die - fi - } - - pkg_lib blas - pkg_lib lapack - - use_cvx gsl - use_cvx fftw - use_cvx glpk - use_cvx dsdp - - sed \ - -e '/SUITESPARSE_EXT_LIB/s:0:1:g' \ - -i setup.py || die - - distutils-r1_python_prepare_all -} - -python_compile_all() { - use doc && export VARTEXFONTS="${T}/fonts" && emake -C doc -B html -} - -python_test() { - cd examples/doc/chap8 - "${EPYTHON}" lp.py || die -} - -python_install_all() { - use doc && HTML_DOCS=( doc/build/html/. ) - insinto /usr/share/doc/${PF} - use examples && EXAMPLES=( examples/. ) - distutils-r1_python_install_all -} diff --git a/dev-python/cvxopt/files/cvxopt-1.1.6-glpk449.patch b/dev-python/cvxopt/files/cvxopt-1.1.6-glpk449.patch deleted file mode 100644 index 2a1cc6737be4..000000000000 --- a/dev-python/cvxopt/files/cvxopt-1.1.6-glpk449.patch +++ /dev/null @@ -1,1082 +0,0 @@ ---- src/C/glpk.c.orig 2014-03-24 09:39:39.510214726 -0700 -+++ src/C/glpk.c 2014-03-24 09:38:41.251897138 -0700 -@@ -23,75 +23,271 @@ - #include "misc.h" - #include "glpk.h" - -+ - PyDoc_STRVAR(glpk__doc__, - "Interface to the simplex and mixed integer LP algorithms in GLPK.\n\n" - "The GLPK control parameters have the default values listed in \n" -- "the GLPK documentation, except for 'LPX_K_PRESOL', which is set\n" -+ "the GLPK documentation, except for 'presolve', which is set\n" - "to 1 and cannot be modified. The other parameters can be\n" -- "modified by making an entry in the dictionary glpk.options.\n" -- "For example, the command glpk.options['LPX_K_MSGLEV'] = 0 turns\n" -- "off the printed output during execution of glpk.simplex().\n" -+ "modified by passing a smcp or iocp object to the appropriate function\n" -+ "For example, the commands param = glpk.smcp(msg_lev = 0), or \n" -+ "param=glpk.smcp(); param.msg_lev=1 turn off the printed output during" -+ " execution of glpk.simplex().\n" - "See the documentation at www.gnu.org/software/glpk/glpk.html for\n" - "the list of GLPK control parameters and their default values."); - - static PyObject *glpk_module; - --typedef struct { -- char name[20]; -- int idx; -- char type; --} param_tuple; -- --static const param_tuple GLPK_PARAM_LIST[] = { -- {"LPX_K_MSGLEV", LPX_K_MSGLEV, 'i'}, -- {"LPX_K_SCALE", LPX_K_SCALE, 'i'}, -- {"LPX_K_DUAL", LPX_K_DUAL, 'i'}, -- {"LPX_K_PRICE", LPX_K_PRICE, 'i'}, -- {"LPX_K_RELAX", LPX_K_RELAX, 'f'}, -- {"LPX_K_TOLBND", LPX_K_TOLBND, 'f'}, -- {"LPX_K_TOLDJ", LPX_K_TOLDJ, 'f'}, -- {"LPX_K_TOLPIV", LPX_K_TOLPIV, 'f'}, -- {"LPX_K_ROUND", LPX_K_ROUND, 'i'}, -- {"LPX_K_OBJLL", LPX_K_OBJLL, 'f'}, -- {"LPX_K_OBJUL", LPX_K_OBJUL, 'f'}, -- {"LPX_K_ITLIM", LPX_K_ITLIM, 'i'}, -- {"LPX_K_ITCNT", LPX_K_ITCNT, 'i'}, -- {"LPX_K_TMLIM", LPX_K_TMLIM, 'f'}, -- {"LPX_K_OUTFRQ", LPX_K_OUTFRQ, 'i'}, -- {"LPX_K_OUTDLY", LPX_K_OUTDLY, 'f'}, -- {"LPX_K_BRANCH", LPX_K_BRANCH, 'i'}, -- {"LPX_K_BTRACK", LPX_K_BTRACK, 'i'}, -- {"LPX_K_TOLINT", LPX_K_TOLINT, 'f'}, -- {"LPX_K_TOLOBJ", LPX_K_TOLOBJ, 'f'}, -- {"LPX_K_MPSINFO", LPX_K_MPSINFO, 'i'}, -- {"LPX_K_MPSOBJ", LPX_K_MPSOBJ, 'i'}, -- {"LPX_K_MPSORIG", LPX_K_MPSORIG, 'i'}, -- {"LPX_K_MPSWIDE", LPX_K_MPSWIDE, 'i'}, -- {"LPX_K_MPSFREE", LPX_K_MPSFREE, 'i'}, -- {"LPX_K_MPSSKIP", LPX_K_MPSSKIP, 'i'}, -- {"LPX_K_LPTORIG", LPX_K_LPTORIG, 'i'}, -- {"LPX_K_PRESOL", LPX_K_PRESOL, 'i'}, --}; /* 28 paramaters */ -+/* Wrappers around the option glpk structs */ -+typedef struct{ -+ PyObject_HEAD -+ glp_smcp obj; -+} pysmcp; - -+/* Deallocation of smcp object */ -+static void smcp_dealloc(pysmcp* self) -+{ -+ Py_TYPE(self)->tp_free((PyObject*)self); -+} - --#if PY_MAJOR_VERSION >= 3 --static int get_param_idx(const char *str, int *idx, char *type) --#else --static int get_param_idx(char *str, int *idx, char *type) --#endif -+/* New smcp method */ -+static PyObject * -+smcp_new(PyTypeObject *type, PyObject *args, PyObject *kwds) - { -- int i; -+ pysmcp *self; -+ self = (pysmcp *)type->tp_alloc(type, 0); -+ return (PyObject *)self; -+} -+ -+/* Initialisation of smcp object */ -+static int -+smcp_init(pysmcp *self, PyObject *args, PyObject *kwds) -+{ -+ /*static char *kwlist[] = {"number", NULL};*/ -+ static char *kwlist[] = { "msg_lev", "meth", "pricing", "r_test", "tol_bnd", "tol_dj", "tol_piv", "obj_ll", "obj_ul", "it_lim", "tm_lim", "out_frq", "out_dly", "presolve" }; -+ glp_init_smcp(&self->obj); -+ if (! PyArg_ParseTupleAndKeywords(args, kwds, "|iiiidddddiiiii", kwlist, -+ &self->obj.msg_lev, -+ &self->obj.meth, -+ &self->obj.pricing, -+ &self->obj.r_test, -+ &self->obj.tol_bnd, -+ &self->obj.tol_dj, -+ &self->obj.tol_piv, -+ &self->obj.obj_ll, -+ &self->obj.obj_ul, -+ &self->obj.it_lim, -+ &self->obj.tm_lim, -+ &self->obj.out_frq, -+ &self->obj.out_dly, -+ &self->obj.presolve)) -+ return -1; - -- for (i=0; i<28; i++) { -- if (!strcmp(GLPK_PARAM_LIST[i].name, str)) { -- *idx = GLPK_PARAM_LIST[i].idx; -- *type = GLPK_PARAM_LIST[i].type; -- return 1; -- } -- } - return 0; - } - -+/* smcp members declaration */ -+static PyMemberDef smcpMembers[] = { -+ {"msg_lev", T_INT, offsetof(pysmcp,obj)+offsetof(glp_smcp,msg_lev), 0, "message level: "}, -+ {"meth", T_INT, offsetof(pysmcp,obj)+offsetof(glp_smcp,meth), 0, "simplex method option: "}, -+ {"pricing", T_INT, offsetof(pysmcp,obj)+offsetof(glp_smcp,pricing), 0, "pricing technique: "}, -+ {"r_test", T_INT, offsetof(pysmcp,obj)+offsetof(glp_smcp,r_test), 0, "ratio test technique: "}, -+ {"tol_bnd", T_DOUBLE, offsetof(pysmcp,obj)+offsetof(glp_smcp,tol_bnd), 0, "spx.tol_bnd "}, -+ {"tol_dj", T_DOUBLE, offsetof(pysmcp,obj)+offsetof(glp_smcp,tol_dj), 0, "spx.tol_dj "}, -+ {"tol_piv", T_DOUBLE, offsetof(pysmcp,obj)+offsetof(glp_smcp,tol_piv), 0, "spx.tol_piv "}, -+ {"obj_ll", T_DOUBLE, offsetof(pysmcp,obj)+offsetof(glp_smcp,obj_ll), 0, "spx.obj_ll "}, -+ {"obj_ul", T_DOUBLE, offsetof(pysmcp,obj)+offsetof(glp_smcp,obj_ul), 0, "spx.obj_ul "}, -+ {"it_lim", T_INT, offsetof(pysmcp,obj)+offsetof(glp_smcp,it_lim), 0, "spx.it_lim "}, -+ {"tm_lim", T_INT, offsetof(pysmcp,obj)+offsetof(glp_smcp,tm_lim), 0, "spx.tm_lim (milliseconds) "}, -+ {"out_frq", T_INT, offsetof(pysmcp,obj)+offsetof(glp_smcp,out_frq), 0, "spx.out_frq "}, -+ {"out_dly", T_INT, offsetof(pysmcp,obj)+offsetof(glp_smcp,out_dly), 0, "spx.out_dly (milliseconds) "}, -+ {"presolve", T_INT, offsetof(pysmcp,obj)+offsetof(glp_smcp,presolve), 0, "enable/disable using LP presolver "}, -+}; -+ -+static PyTypeObject smcp_t = { -+ PyVarObject_HEAD_INIT(NULL, 0) -+ "glpk.smcp", /* tp_name */ -+ sizeof(pysmcp), /* tp_basicsize */ -+ 0, /* tp_itemsize */ -+ (destructor)smcp_dealloc, /* tp_dealloc */ -+ 0, /* tp_print */ -+ 0, /* tp_getattr */ -+ 0, /* tp_setattr */ -+ 0, /* tp_reserved */ -+ 0, /* tp_repr */ -+ 0, /* tp_as_number */ -+ 0, /* tp_as_sequence */ -+ 0, /* tp_as_mapping */ -+ 0, /* tp_hash */ -+ 0, /* tp_call */ -+ 0, /* tp_str */ -+ 0, /* tp_getattro */ -+ 0, /* tp_setattro */ -+ 0, /* tp_as_buffer */ -+ Py_TPFLAGS_DEFAULT | -+ Py_TPFLAGS_BASETYPE, /* tp_flags */ -+ "simplex method control parameters", /* tp_doc */ -+ 0, /* tp_traverse */ -+ 0, /* tp_clear */ -+ 0, /* tp_richcompare */ -+ 0, /* tp_weaklistoffset */ -+ 0, /* tp_iter */ -+ 0, /* tp_iternext */ -+ 0, /* tp_methods */ -+ smcpMembers, /* tp_members */ -+ 0, /* tp_getset */ -+ 0, /* tp_base */ -+ 0, /* tp_dict */ -+ 0, /* tp_descr_get */ -+ 0, /* tp_descr_set */ -+ 0, /* tp_dictoffset */ -+ (initproc)smcp_init, /* tp_init */ -+ 0, /* tp_alloc */ -+ smcp_new, /* tp_new */ -+}; -+ -+ -+/* Wrappers around the option glpk structs */ -+typedef struct{ -+ PyObject_HEAD -+ glp_iocp obj; -+} pyiocp; -+ -+/* Deallocation of iocp object */ -+static void iocp_dealloc(pysmcp* self) -+{ -+ Py_TYPE(self)->tp_free((PyObject*)self); -+} -+ -+/* New iocp method */ -+static PyObject * -+iocp_new(PyTypeObject *type, PyObject *args, PyObject *kwds) -+{ -+ pyiocp *self; -+ self = (pyiocp *)type->tp_alloc(type, 0); -+ return (PyObject *)self; -+} -+ -+/* Initialisation of iocp object */ -+static int -+iocp_init(pyiocp *self, PyObject *args, PyObject *kwds) -+{ -+ /*static char *kwlist[] = {"number", NULL};*/ -+ static char *kwlist[] = { "msg_lev", "br_tech", "bt_tech", "tol_int", "tol_obj", "tm_lim", "out_frq", "out_dly", "cb_size", "pp_tech", "mip_gap", "mir_cuts", "gmi_cuts", "cov_cuts", "clq_cuts", "presolve", "binarize", "fp_heur", "ps_heur", "ps_tm_lim", "use_sol", "save_sol", "alien",NULL}; -+ glp_init_iocp(&self->obj); -+ -+ if (! PyArg_ParseTupleAndKeywords(args, kwds, "|iiiddiiiiidiiiiiiiiiisi", kwlist, -+ &self->obj.msg_lev, -+ &self->obj.br_tech, -+ &self->obj.bt_tech, -+ &self->obj.tol_int, -+ &self->obj.tol_obj, -+ &self->obj.tm_lim, -+ &self->obj.out_frq, -+ &self->obj.out_dly, -+ &self->obj.cb_size, -+ &self->obj.pp_tech, -+ &self->obj.mip_gap, -+ &self->obj.mir_cuts, -+ &self->obj.gmi_cuts, -+ &self->obj.cov_cuts, -+ &self->obj.clq_cuts, -+ &self->obj.presolve, -+ &self->obj.binarize, -+ &self->obj.fp_heur, -+ &self->obj.ps_heur, -+ &self->obj.ps_tm_lim, -+ &self->obj.use_sol, -+ &self->obj.save_sol, -+ &self->obj.alien)) -+ return -1; -+ -+ return 0; -+} -+ -+/* iocp members declaration */ -+static PyMemberDef iocpMembers[] = { -+ {"msg_lev", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,msg_lev), 0, "message level (see glp_smcp) "}, -+ {"br_tech", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,br_tech), 0, "branching technique: "}, -+ {"bt_tech", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,bt_tech), 0, "backtracking technique: "}, -+ {"tol_int", T_DOUBLE, offsetof(pysmcp,obj)+offsetof(glp_iocp,tol_int), 0, "mip.tol_int "}, -+ {"tol_obj", T_DOUBLE, offsetof(pysmcp,obj)+offsetof(glp_iocp,tol_obj), 0, "mip.tol_obj "}, -+ {"tm_lim", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,tm_lim), 0, "mip.tm_lim (milliseconds) "}, -+ {"out_frq", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,out_frq), 0, "mip.out_frq (milliseconds) "}, -+ {"out_dly", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,out_dly), 0, "mip.out_dly (milliseconds) "}, -+ /*void (*cb_func)(glp_tree *T, void *info); [> mip.cb_func <]*/ -+ /*void *cb_info; [> mip.cb_info <]*/ -+ {"cb_size", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,cb_size), 0, "mip.cb_size "}, -+ {"pp_tech", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,pp_tech), 0, "preprocessing technique: "}, -+ {"mip_gap", T_DOUBLE, offsetof(pysmcp,obj)+offsetof(glp_iocp,mip_gap), 0, "relative MIP gap tolerance "}, -+ {"mir_cuts", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,mir_cuts), 0, "MIR cuts (GLP_ON/GLP_OFF) "}, -+ {"gmi_cuts", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,gmi_cuts), 0, "Gomory's cuts (GLP_ON/GLP_OFF) "}, -+ {"cov_cuts", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,cov_cuts), 0, "cover cuts (GLP_ON/GLP_OFF) "}, -+ {"clq_cuts", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,clq_cuts), 0, "clique cuts (GLP_ON/GLP_OFF) "}, -+ {"presolve", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,presolve), 0, "enable/disable using MIP presolver "}, -+ {"binarize", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,binarize), 0, "try to binarize integer variables "}, -+ {"fp_heur", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,fp_heur), 0, "feasibility pump heuristic "}, -+ {"ps_heur", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,ps_heur), 0, "proximity search heuristic "}, -+ {"ps_tm_lim", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,ps_tm_lim), 0, "proxy time limit, milliseconds "}, -+ {"use_sol", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,use_sol), 0, "use existing solution "}, -+ {"save_sol",T_STRING,offsetof(pysmcp,obj)+offsetof(glp_iocp,save_sol),0, "filename to save every new solution"}, -+ {"alien", T_INT, offsetof(pysmcp,obj)+offsetof(glp_iocp,alien), 0, "use alien solver "}, -+}; -+ -+static PyTypeObject iocp_t = { -+ PyVarObject_HEAD_INIT(NULL, 0) -+ "glpk.iocp", /* tp_name */ -+ sizeof(pyiocp), /* tp_basicsize */ -+ 0, /* tp_itemsize */ -+ (destructor)iocp_dealloc, /* tp_dealloc */ -+ 0, /* tp_print */ -+ 0, /* tp_getattr */ -+ 0, /* tp_setattr */ -+ 0, /* tp_reserved */ -+ 0, /* tp_repr */ -+ 0, /* tp_as_number */ -+ 0, /* tp_as_sequence */ -+ 0, /* tp_as_mapping */ -+ 0, /* tp_hash */ -+ 0, /* tp_call */ -+ 0, /* tp_str */ -+ 0, /* tp_getattro */ -+ 0, /* tp_setattro */ -+ 0, /* tp_as_buffer */ -+ Py_TPFLAGS_DEFAULT | -+ Py_TPFLAGS_BASETYPE, /* tp_flags */ -+ "integer optimizer control parameters", /* tp_doc */ -+ 0, /* tp_traverse */ -+ 0, /* tp_clear */ -+ 0, /* tp_richcompare */ -+ 0, /* tp_weaklistoffset */ -+ 0, /* tp_iter */ -+ 0, /* tp_iternext */ -+ 0, /* tp_methods */ -+ iocpMembers, /* tp_members */ -+ 0, /* tp_getset */ -+ 0, /* tp_base */ -+ 0, /* tp_dict */ -+ 0, /* tp_descr_get */ -+ 0, /* tp_descr_set */ -+ 0, /* tp_dictoffset */ -+ (initproc)iocp_init, /* tp_init */ -+ 0, /* tp_alloc */ -+ iocp_new, /* tp_new */ -+}; -+ -+ -+ -+/* Small helper function to generate the output string of the simplex function */ -+inline static void set_output_string(PyObject* t,const char s[]) { -+ PyTuple_SET_ITEM(t, 0, (PyObject *) -+#if PY_MAJOR_VERSION >= 3 -+ PyUnicode_FromString(s)); -+#else -+ PyString_FromString(s)); -+#endif -+ } -+ - - static char doc_simplex[] = - "Solves a linear program using GLPK.\n\n" -@@ -126,21 +322,16 @@ - PyObject *kwrds) - { - matrix *c, *h, *b=NULL, *x=NULL, *z=NULL, *y=NULL; -- PyObject *G, *A=NULL, *t=NULL, *param, *key, *value; -- LPX *lp; -- int m, n, p, i, j, k, nnz, nnzmax, *rn=NULL, *cn=NULL, param_id; -- int_t pos=0; -+ PyObject *G, *A=NULL, *t=NULL; -+ glp_prob *lp; -+ glp_smcp *options = NULL; -+ pysmcp *smcpParm = NULL; -+ int m, n, p, i, j, k, nnz, nnzmax, *rn=NULL, *cn=NULL; - double *a=NULL, val; -- char param_type, err_str[100]; --#if PY_MAJOR_VERSION >= 3 -- const char *keystr; --#else -- char *keystr; --#endif -- char *kwlist[] = {"c", "G", "h", "A", "b", NULL}; -+ char *kwlist[] = {"c", "G", "h", "A", "b","options", NULL}; - -- if (!PyArg_ParseTupleAndKeywords(args, kwrds, "OOO|OO", kwlist, &c, -- &G, &h, &A, &b)) return NULL; -+ if (!PyArg_ParseTupleAndKeywords(args, kwrds, "OOO|OOO!", kwlist, &c, -+ &G, &h, &A, &b,&smcp_t,&smcpParm)) return NULL; - - if ((Matrix_Check(G) && MAT_ID(G) != DOUBLE) || - (SpMatrix_Check(G) && SP_ID(G) != DOUBLE) || -@@ -182,19 +373,30 @@ - PyErr_SetString(PyExc_ValueError, "incompatible dimensions"); - return NULL; - } -+ if(!smcpParm) -+ { -+ smcpParm = (pysmcp*)malloc(sizeof(*smcpParm)); -+ glp_init_smcp(&(smcpParm->obj)); -+ } -+ if(smcpParm) -+ { -+ Py_INCREF(smcpParm); -+ options = &smcpParm->obj; -+ options->presolve = 1; -+ } - -- lp = lpx_create_prob(); -- lpx_add_rows(lp, m+p); -- lpx_add_cols(lp, n); -+ lp = glp_create_prob(); -+ glp_add_rows(lp, m+p); -+ glp_add_cols(lp, n); - - for (i=0; i<n; i++){ -- lpx_set_obj_coef(lp, i+1, MAT_BUFD(c)[i]); -- lpx_set_col_bnds(lp, i+1, LPX_FR, 0.0, 0.0); -+ glp_set_obj_coef(lp, i+1, MAT_BUFD(c)[i]); -+ glp_set_col_bnds(lp, i+1, GLP_FR, 0.0, 0.0); - } - for (i=0; i<m; i++) -- lpx_set_row_bnds(lp, i+1, LPX_UP, 0.0, MAT_BUFD(h)[i]); -+ glp_set_row_bnds(lp, i+1, GLP_UP, 0.0, MAT_BUFD(h)[i]); - for (i=0; i<p; i++) -- lpx_set_row_bnds(lp, i+m+1, LPX_FX, MAT_BUFD(b)[i], -+ glp_set_row_bnds(lp, i+m+1, GLP_FX, MAT_BUFD(b)[i], - MAT_BUFD(b)[i]); - - nnzmax = (SpMatrix_Check(G) ? SP_NNZ(G) : m*n ) + -@@ -203,7 +405,7 @@ - rn = (int *) calloc(nnzmax+1, sizeof(int)); - cn = (int *) calloc(nnzmax+1, sizeof(int)); - if (!a || !rn || !cn){ -- free(a); free(rn); free(cn); lpx_delete_prob(lp); -+ free(a); free(rn); free(cn); glp_delete_prob(lp); - return PyErr_NoMemory(); - } - -@@ -242,84 +444,18 @@ - nnz++; - } - -- lpx_load_matrix(lp, nnz, rn, cn, a); -+ glp_load_matrix(lp, nnz, rn, cn, a); - free(rn); free(cn); free(a); - - if (!(t = PyTuple_New(A ? 4 : 3))){ -- lpx_delete_prob(lp); -+ glp_delete_prob(lp); - return PyErr_NoMemory(); - } - -- if (!(param = PyObject_GetAttrString(glpk_module, "options")) -- || !PyDict_Check(param)){ -- lpx_delete_prob(lp); -- PyErr_SetString(PyExc_AttributeError, -- "missing glpk.options dictionary"); -- return NULL; -- } -- -- while (PyDict_Next(param, &pos, &key, &value)) --#if PY_MAJOR_VERSION >= 3 -- if ((PyUnicode_Check(key)) && -- get_param_idx(_PyUnicode_AsString(key), ¶m_id, -- ¶m_type)){ -- keystr = _PyUnicode_AsString(key); --#else -- if ((keystr = PyString_AsString(key)) && get_param_idx(keystr, -- ¶m_id, ¶m_type)){ --#endif -- if (param_type == 'i'){ --#if PY_MAJOR_VERSION >= 3 -- if (!PyLong_Check(value)){ --#else -- if (!PyInt_Check(value)){ --#endif -- sprintf(err_str, "invalid value for integer " -- "GLPK parameter: %-.20s", keystr); -- PyErr_SetString(PyExc_ValueError, err_str); -- lpx_delete_prob(lp); -- Py_DECREF(param); -- return NULL; -- } -- if (!strcmp("LPX_K_PRESOL", keystr) && --#if PY_MAJOR_VERSION >= 3 -- PyLong_AS_LONG(value) != 1){ --#else -- PyInt_AS_LONG(value) != 1){ --#endif -- PyErr_Warn(PyExc_UserWarning, "ignoring value of " -- "GLPK parameter 'LPX_K_PRESOL'"); -- } -- else lpx_set_int_parm(lp, param_id, --#if PY_MAJOR_VERSION >= 3 -- PyLong_AS_LONG(value)); --#else -- PyInt_AS_LONG(value)); --#endif -- } -- else { --#if PY_MAJOR_VERSION >= 3 -- if (!PyLong_Check(value) && !PyFloat_Check(value)){ --#else -- if (!PyInt_Check(value) && !PyFloat_Check(value)){ --#endif -- sprintf(err_str, "invalid value for floating point " -- "GLPK parameter: %-.20s", keystr); -- PyErr_SetString(PyExc_ValueError, err_str); -- lpx_delete_prob(lp); -- Py_DECREF(param); -- return NULL; -- } -- lpx_set_real_parm(lp, param_id, -- PyFloat_AsDouble(value)); -- } -- } -- lpx_set_int_parm(lp, LPX_K_PRESOL, 1); -- Py_DECREF(param); - -- switch (lpx_simplex(lp)){ -+ switch (glp_simplex(lp,options)){ - -- case LPX_E_OK: -+ case 0: - - x = (matrix *) Matrix_New(n,1,DOUBLE); - z = (matrix *) Matrix_New(m,1,DOUBLE); -@@ -329,65 +465,70 @@ - Py_XDECREF(z); - Py_XDECREF(y); - Py_XDECREF(t); -- lpx_delete_prob(lp); -+ Py_XDECREF(smcpParm); -+ glp_delete_prob(lp); - return PyErr_NoMemory(); - } - -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("optimal")); --#else -- PyString_FromString("optimal")); --#endif -+ set_output_string(t,"optimal"); - - for (i=0; i<n; i++) -- MAT_BUFD(x)[i] = lpx_get_col_prim(lp, i+1); -+ MAT_BUFD(x)[i] = glp_get_col_prim(lp, i+1); - PyTuple_SET_ITEM(t, 1, (PyObject *) x); - - for (i=0; i<m; i++) -- MAT_BUFD(z)[i] = -lpx_get_row_dual(lp, i+1); -+ MAT_BUFD(z)[i] = -glp_get_row_dual(lp, i+1); - PyTuple_SET_ITEM(t, 2, (PyObject *) z); - - if (A){ - for (i=0; i<p; i++) -- MAT_BUFD(y)[i] = -lpx_get_row_dual(lp, m+i+1); -+ MAT_BUFD(y)[i] = -glp_get_row_dual(lp, m+i+1); - PyTuple_SET_ITEM(t, 3, (PyObject *) y); - } - -- lpx_delete_prob(lp); -+ Py_XDECREF(smcpParm); -+ glp_delete_prob(lp); - return (PyObject *) t; -- -- case LPX_E_NOPFS: -- -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("primal infeasible")); --#else -- PyString_FromString("primal infeasible")); --#endif -+ case GLP_EBADB: -+ set_output_string(t,"incorrect initial basis"); - break; -- -- case LPX_E_NODFS: -- -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("dual infeasible")); --#else -- PyString_FromString("dual infeasible")); --#endif -+ case GLP_ESING: -+ set_output_string(t,"singular initial basis matrix"); -+ break; -+ case GLP_ECOND: -+ set_output_string(t,"ill-conditioned initial basis matrix"); -+ break; -+ case GLP_EBOUND: -+ set_output_string(t,"incorrect bounds"); -+ break; -+ case GLP_EFAIL: -+ set_output_string(t,"solver failure"); -+ break; -+ case GLP_EOBJLL: -+ set_output_string(t,"objective function reached lower limit"); -+ break; -+ case GLP_EOBJUL: -+ set_output_string(t,"objective function reached upper limit"); -+ break; -+ case GLP_EITLIM: -+ set_output_string(t,"iteration limit exceeded"); -+ break; -+ case GLP_ETMLIM: -+ set_output_string(t,"time limit exceeded"); -+ break; -+ case GLP_ENOPFS: -+ set_output_string(t,"primal infeasible"); -+ break; -+ case GLP_ENODFS: -+ set_output_string(t,"dual infeasible"); - break; -- - default: -- -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("unknown")); --#else -- PyString_FromString("unknown")); --#endif -+ set_output_string(t,"unknown"); -+ break; - } - -- lpx_delete_prob(lp); -+ Py_XDECREF(smcpParm); -+ glp_delete_prob(lp); - - PyTuple_SET_ITEM(t, 1, Py_BuildValue("")); - PyTuple_SET_ITEM(t, 2, Py_BuildValue("")); -@@ -427,21 +568,28 @@ - { - matrix *c, *h, *b=NULL, *x=NULL; - PyObject *G, *A=NULL, *IntSet=NULL, *BinSet = NULL; -- PyObject *t=NULL, *param, *key, *value; -- LPX *lp; -- int m, n, p, i, j, k, nnz, nnzmax, *rn=NULL, *cn=NULL, param_id; -- int_t pos=0; -+ PyObject *t=NULL; -+ pyiocp *iocpParm = NULL;; -+ glp_iocp *options = NULL; -+ glp_prob *lp; -+ int m, n, p, i, j, k, nnz, nnzmax, *rn=NULL, *cn=NULL; - double *a=NULL, val; -- char param_type, err_str[100]; --#if PY_MAJOR_VERSION >= 3 -- const char *keystr; --#else -- char *keystr; --#endif -- char *kwlist[] = {"c", "G", "h", "A", "b", "I", "B", NULL}; -+ char *kwlist[] = {"c", "G", "h", "A", "b", "I", "B","iocp", NULL}; -+ -+ if (!PyArg_ParseTupleAndKeywords(args, kwrds, "OOO|OOOOO!", kwlist, &c, -+ &G, &h, &A, &b, &IntSet, &BinSet,iocp_t,&iocpParm)) return NULL; - -- if (!PyArg_ParseTupleAndKeywords(args, kwrds, "OOO|OOOO", kwlist, &c, -- &G, &h, &A, &b, &IntSet, &BinSet)) return NULL; -+ if(!iocpParm) -+ { -+ iocpParm = (pyiocp*)malloc(sizeof(*iocpParm)); -+ glp_init_iocp(&(iocpParm->obj)); -+ } -+ if(iocpParm) -+ { -+ Py_INCREF(iocpParm); -+ options = &iocpParm->obj; -+ options->presolve = 1; -+ } - - if ((Matrix_Check(G) && MAT_ID(G) != DOUBLE) || - (SpMatrix_Check(G) && SP_ID(G) != DOUBLE) || -@@ -490,18 +638,18 @@ - if ((BinSet) && (!PyAnySet_Check(BinSet))) - PY_ERR_TYPE("invalid binary index set"); - -- lp = lpx_create_prob(); -- lpx_add_rows(lp, m+p); -- lpx_add_cols(lp, n); -+ lp = glp_create_prob(); -+ glp_add_rows(lp, m+p); -+ glp_add_cols(lp, n); - - for (i=0; i<n; i++){ -- lpx_set_obj_coef(lp, i+1, MAT_BUFD(c)[i]); -- lpx_set_col_bnds(lp, i+1, LPX_FR, 0.0, 0.0); -+ glp_set_obj_coef(lp, i+1, MAT_BUFD(c)[i]); -+ glp_set_col_bnds(lp, i+1, GLP_FR, 0.0, 0.0); - } - for (i=0; i<m; i++) -- lpx_set_row_bnds(lp, i+1, LPX_UP, 0.0, MAT_BUFD(h)[i]); -+ glp_set_row_bnds(lp, i+1, GLP_UP, 0.0, MAT_BUFD(h)[i]); - for (i=0; i<p; i++) -- lpx_set_row_bnds(lp, i+m+1, LPX_FX, MAT_BUFD(b)[i], -+ glp_set_row_bnds(lp, i+m+1, GLP_FX, MAT_BUFD(b)[i], - MAT_BUFD(b)[i]); - - nnzmax = (SpMatrix_Check(G) ? SP_NNZ(G) : m*n ) + -@@ -510,7 +658,7 @@ - rn = (int *) calloc(nnzmax+1, sizeof(int)); - cn = (int *) calloc(nnzmax+1, sizeof(int)); - if (!a || !rn || !cn){ -- free(a); free(rn); free(cn); lpx_delete_prob(lp); -+ free(a); free(rn); free(cn); glp_delete_prob(lp); - return PyErr_NoMemory(); - } - -@@ -549,79 +697,14 @@ - nnz++; - } - -- lpx_load_matrix(lp, nnz, rn, cn, a); -+ glp_load_matrix(lp, nnz, rn, cn, a); - free(rn); free(cn); free(a); - - if (!(t = PyTuple_New(2))) { -- lpx_delete_prob(lp); -+ glp_delete_prob(lp); - return PyErr_NoMemory(); - } - -- if (!(param = PyObject_GetAttrString(glpk_module, "options")) -- || !PyDict_Check(param)){ -- lpx_delete_prob(lp); -- PyErr_SetString(PyExc_AttributeError, -- "missing glpk.options dictionary"); -- return NULL; -- } -- -- while (PyDict_Next(param, &pos, &key, &value)) --#if PY_MAJOR_VERSION >= 3 -- if ((PyUnicode_Check(key)) && (keystr = PyUnicode_AS_DATA(key)) -- && get_param_idx(keystr, ¶m_id, ¶m_type)){ --#else -- if ((keystr = PyString_AsString(key)) && get_param_idx(keystr, -- ¶m_id, ¶m_type)){ --#endif -- if (param_type == 'i'){ --#if PY_MAJOR_VERSION >= 3 -- if (!PyLong_Check(value)){ --#else -- if (!PyInt_Check(value)){ --#endif -- sprintf(err_str, "invalid value for integer " -- "GLPK parameter: %-.20s", keystr); -- PyErr_SetString(PyExc_ValueError, err_str); -- lpx_delete_prob(lp); -- Py_DECREF(param); -- return NULL; -- } -- if (!strcmp("LPX_K_PRESOL", keystr) && --#if PY_MAJOR_VERSION >= 3 -- PyLong_AS_LONG(value) != 1){ --#else -- PyInt_AS_LONG(value) != 1){ --#endif -- PyErr_Warn(PyExc_UserWarning, "ignoring value of " -- "GLPK parameter 'LPX_K_PRESOL'"); -- } -- else --#if PY_MAJOR_VERSION >= 3 -- lpx_set_int_parm(lp, param_id, PyLong_AS_LONG(value)); --#else -- lpx_set_int_parm(lp, param_id, PyInt_AS_LONG(value)); --#endif -- } -- else { --#if PY_MAJOR_VERSION >= 3 -- if (!PyLong_Check(value) && !PyFloat_Check(value)){ --#else -- if (!PyInt_Check(value) && !PyFloat_Check(value)){ --#endif -- sprintf(err_str, "invalid value for floating point " -- "GLPK parameter: %-.20s", keystr); -- PyErr_SetString(PyExc_ValueError, err_str); -- lpx_delete_prob(lp); -- Py_DECREF(param); -- return NULL; -- } -- lpx_set_real_parm(lp, param_id, -- PyFloat_AsDouble(value)); -- } -- } -- lpx_set_int_parm(lp, LPX_K_PRESOL, 1); -- Py_DECREF(param); -- - if (IntSet) { - PyObject *iter = PySequence_Fast(IntSet, "Critical error: not sequence"); - -@@ -633,7 +716,7 @@ - #else - if (!PyInt_Check(tmp)) { - #endif -- lpx_delete_prob(lp); -+ glp_delete_prob(lp); - Py_DECREF(iter); - PY_ERR_TYPE("non-integer element in I"); - } -@@ -643,7 +726,7 @@ - int k = PyInt_AS_LONG(tmp); - #endif - if ((k < 0) || (k >= n)) { -- lpx_delete_prob(lp); -+ glp_delete_prob(lp); - Py_DECREF(iter); - PY_ERR(PyExc_IndexError, "index element out of range in I"); - } -@@ -664,7 +747,7 @@ - #else - if (!PyInt_Check(tmp)) { - #endif -- lpx_delete_prob(lp); -+ glp_delete_prob(lp); - Py_DECREF(iter); - PY_ERR_TYPE("non-binary element in I"); - } -@@ -674,7 +757,7 @@ - int k = PyInt_AS_LONG(tmp); - #endif - if ((k < 0) || (k >= n)) { -- lpx_delete_prob(lp); -+ glp_delete_prob(lp); - Py_DECREF(iter); - PY_ERR(PyExc_IndexError, "index element out of range in B"); - } -@@ -686,114 +769,85 @@ - } - - -+ switch (glp_intopt(lp,options)){ - -- switch (lpx_intopt(lp)){ -+ case 0: - -- case LPX_E_OK: -+ x = (matrix *) Matrix_New(n,1,DOUBLE); -+ if (!x) { -+ Py_XDECREF(iocpParm); -+ Py_XDECREF(t); -+ glp_delete_prob(lp); -+ return PyErr_NoMemory(); -+ } -+ set_output_string(t,"optimal"); -+ set_output_string(t,"optimal"); - -- x = (matrix *) Matrix_New(n,1,DOUBLE); -- if (!x) { -- Py_XDECREF(t); -- lpx_delete_prob(lp); -- return PyErr_NoMemory(); -- } -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("optimal")); --#else -- PyString_FromString("optimal")); --#endif -+ for (i=0; i<n; i++) -+ MAT_BUFD(x)[i] = glp_mip_col_val(lp, i+1); -+ PyTuple_SET_ITEM(t, 1, (PyObject *) x); - -- for (i=0; i<n; i++) -- MAT_BUFD(x)[i] = lpx_mip_col_val(lp, i+1); -- PyTuple_SET_ITEM(t, 1, (PyObject *) x); -+ Py_XDECREF(iocpParm); -+ glp_delete_prob(lp); -+ return (PyObject *) t; - -- lpx_delete_prob(lp); -- return (PyObject *) t; -+ case GLP_ETMLIM: - -- case LPX_E_TMLIM: -+ x = (matrix *) Matrix_New(n,1,DOUBLE); -+ if (!x) { -+ Py_XDECREF(t); -+ Py_XDECREF(iocpParm); -+ glp_delete_prob(lp); -+ return PyErr_NoMemory(); -+ } -+ set_output_string(t,"time limit exceeded"); - -- x = (matrix *) Matrix_New(n,1,DOUBLE); -- if (!x) { -- Py_XDECREF(t); -- lpx_delete_prob(lp); -- return PyErr_NoMemory(); -- } -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("time limit exceeded")); --#else -- PyString_FromString("time limit exceeded")); --#endif -+ for (i=0; i<n; i++) -+ MAT_BUFD(x)[i] = glp_mip_col_val(lp, i+1); -+ PyTuple_SET_ITEM(t, 1, (PyObject *) x); - -- for (i=0; i<n; i++) -- MAT_BUFD(x)[i] = lpx_mip_col_val(lp, i+1); -- PyTuple_SET_ITEM(t, 1, (PyObject *) x); -- -- lpx_delete_prob(lp); -- return (PyObject *) t; -+ Py_XDECREF(iocpParm); -+ glp_delete_prob(lp); -+ return (PyObject *) t; - - -- case LPX_E_FAULT: -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("invalid MIP formulation")); --#else -- PyString_FromString("invalid MIP formulation")); --#endif -- break; -+ case GLP_EBOUND: -+ set_output_string(t,"incorrect bounds"); -+ break; -+ case GLP_EFAIL: -+ set_output_string(t,"invalid MIP formulation"); -+ break; - -- case LPX_E_NOPFS: -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("primal infeasible")); --#else -- PyString_FromString("primal infeasible")); --#endif -- break; -+ case GLP_ENOPFS: -+ set_output_string(t,"primal infeasible"); -+ break; - -- case LPX_E_NODFS: -+ case GLP_ENODFS: -+ set_output_string(t,"dual infeasible"); -+ break; - -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("dual infeasible")); --#else -- PyString_FromString("dual infeasible")); --#endif -- break; -+ case GLP_EMIPGAP: -+ set_output_string(t,"Relative mip gap tolerance reached"); -+ break; - -- case LPX_E_ITLIM: -+ /*case LPX_E_ITLIM: - -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("maxiters exceeded")); --#else -- PyString_FromString("maxiters exceeded")); --#endif -- break; -+ set_output_string(t,"maxiters exceeded"); -+ break;*/ - -- case LPX_E_SING: -+ /*case LPX_E_SING: - -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("singular or ill-conditioned basis")); --#else -- PyString_FromString("singular or ill-conditioned basis")); --#endif -- break; -+ set_output_string(t,"singular or ill-conditioned basis"); -+ break;*/ - - -- default: -+ default: - -- PyTuple_SET_ITEM(t, 0, (PyObject *) --#if PY_MAJOR_VERSION >= 3 -- PyUnicode_FromString("unknown")); --#else -- PyString_FromString("unknown")); --#endif -- } -+ set_output_string(t,"unknown"); -+ } - -- lpx_delete_prob(lp); -+ Py_XDECREF(iocpParm); -+ glp_delete_prob(lp); - - PyTuple_SET_ITEM(t, 1, Py_BuildValue("")); - return (PyObject *) t; -@@ -819,10 +873,94 @@ - NULL, NULL, NULL, NULL - }; - -+void addglpkConstants (void) -+{ -+ PyModule_AddIntMacro(glpk_module, GLP_ON); -+ PyModule_AddIntMacro(glpk_module,GLP_OFF); -+ -+ /* reason codes: */ -+ PyModule_AddIntMacro(glpk_module,GLP_IROWGEN); -+ PyModule_AddIntMacro(glpk_module,GLP_IBINGO); -+ PyModule_AddIntMacro(glpk_module,GLP_IHEUR); -+ PyModule_AddIntMacro(glpk_module,GLP_ICUTGEN); -+ PyModule_AddIntMacro(glpk_module,GLP_IBRANCH); -+ PyModule_AddIntMacro(glpk_module,GLP_ISELECT); -+ PyModule_AddIntMacro(glpk_module,GLP_IPREPRO); -+ -+ /* branch selection indicator: */ -+ PyModule_AddIntMacro(glpk_module,GLP_NO_BRNCH); -+ PyModule_AddIntMacro(glpk_module,GLP_DN_BRNCH); -+ PyModule_AddIntMacro(glpk_module,GLP_UP_BRNCH); -+ -+ /* return codes: */ -+ PyModule_AddIntMacro(glpk_module,GLP_EBADB); -+ PyModule_AddIntMacro(glpk_module,GLP_ESING); -+ PyModule_AddIntMacro(glpk_module,GLP_ECOND); -+ PyModule_AddIntMacro(glpk_module,GLP_EBOUND); -+ PyModule_AddIntMacro(glpk_module,GLP_EFAIL); -+ PyModule_AddIntMacro(glpk_module,GLP_EOBJLL); -+ PyModule_AddIntMacro(glpk_module,GLP_EOBJUL); -+ PyModule_AddIntMacro(glpk_module,GLP_EITLIM); -+ PyModule_AddIntMacro(glpk_module,GLP_ETMLIM); -+ PyModule_AddIntMacro(glpk_module,GLP_ENOPFS); -+ PyModule_AddIntMacro(glpk_module,GLP_ENODFS); -+ PyModule_AddIntMacro(glpk_module,GLP_EROOT); -+ PyModule_AddIntMacro(glpk_module,GLP_ESTOP); -+ PyModule_AddIntMacro(glpk_module,GLP_EMIPGAP); -+ PyModule_AddIntMacro(glpk_module,GLP_ENOFEAS); -+ PyModule_AddIntMacro(glpk_module,GLP_ENOCVG); -+ PyModule_AddIntMacro(glpk_module,GLP_EINSTAB); -+ PyModule_AddIntMacro(glpk_module,GLP_EDATA); -+ PyModule_AddIntMacro(glpk_module,GLP_ERANGE); -+ -+ /* condition indicator: */ -+ PyModule_AddIntMacro(glpk_module,GLP_KKT_PE); -+ PyModule_AddIntMacro(glpk_module,GLP_KKT_PB); -+ PyModule_AddIntMacro(glpk_module,GLP_KKT_DE); -+ PyModule_AddIntMacro(glpk_module,GLP_KKT_DB); -+ PyModule_AddIntMacro(glpk_module,GLP_KKT_CS); -+ -+ /* MPS file format: */ -+ PyModule_AddIntMacro(glpk_module,GLP_MPS_DECK); -+ PyModule_AddIntMacro(glpk_module,GLP_MPS_FILE); -+ -+ /* simplex method control parameters */ -+ /* message level: */ -+ PyModule_AddIntMacro(glpk_module,GLP_MSG_OFF); -+ PyModule_AddIntMacro(glpk_module,GLP_MSG_ERR); -+ PyModule_AddIntMacro(glpk_module,GLP_MSG_ON); -+ PyModule_AddIntMacro(glpk_module,GLP_MSG_ALL); -+ PyModule_AddIntMacro(glpk_module,GLP_MSG_DBG); -+ /* simplex method option: */ -+ PyModule_AddIntMacro(glpk_module,GLP_PRIMAL); -+ PyModule_AddIntMacro(glpk_module,GLP_DUALP); -+ PyModule_AddIntMacro(glpk_module,GLP_DUAL); -+ /* pricing technique: */ -+ PyModule_AddIntMacro(glpk_module,GLP_PT_STD); -+ PyModule_AddIntMacro(glpk_module,GLP_PT_PSE); -+ /* ratio test technique: */ -+ PyModule_AddIntMacro(glpk_module,GLP_RT_STD); -+ PyModule_AddIntMacro(glpk_module,GLP_RT_HAR); -+ -+ /* interior-point solver control parameters */ -+ /* ordering algorithm: */ -+ PyModule_AddIntMacro(glpk_module,GLP_ORD_NONE); -+ PyModule_AddIntMacro(glpk_module,GLP_ORD_QMD); -+ PyModule_AddIntMacro(glpk_module,GLP_ORD_AMD); -+ PyModule_AddIntMacro(glpk_module,GLP_ORD_SYMAMD); -+} -+ - PyMODINIT_FUNC PyInit_glpk(void) - { - if (!(glpk_module = PyModule_Create(&glpk_module_def))) return NULL; -- PyModule_AddObject(glpk_module, "options", PyDict_New()); -+ if (PyType_Ready(&iocp_t) < 0 || (PyType_Ready(&smcp_t) < 0)) return NULL; -+ /* Adding macros */ -+ addglpkConstants(); -+ /* Adding option lists as objects */ -+ Py_INCREF(&smcp_t); -+ PyModule_AddObject(glpk_module,"smcp",(PyObject*)&smcp_t); -+ Py_INCREF(&iocp_t); -+ PyModule_AddObject(glpk_module,"iocp",(PyObject*)&iocp_t); - if (import_cvxopt() < 0) return NULL; - return glpk_module; - } -@@ -832,8 +970,13 @@ - PyMODINIT_FUNC initglpk(void) - { - glpk_module = Py_InitModule3("cvxopt.glpk", glpk_functions, -- glpk__doc__); -- PyModule_AddObject(glpk_module, "options", PyDict_New()); -+ glpk__doc__); -+ if (PyType_Ready(&iocp_t) < 0 || (PyType_Ready(&smcp_t) < 0)) return NULL; -+ addglpkConstants(); -+ Py_INCREF(&smcp_t); -+ PyModule_AddObject(glpk_module,"smcp",(PyObject*)&smcp_t); -+ Py_INCREF(&iocp_t); -+ PyModule_AddObject(glpk_module,"iocp",(PyObject*)&iocp_t); - if (import_cvxopt() < 0) return; - } - diff --git a/dev-python/cvxopt/files/cvxopt-1.1.6-setup.patch b/dev-python/cvxopt/files/cvxopt-1.1.6-setup.patch deleted file mode 100644 index c95f31bf6048..000000000000 --- a/dev-python/cvxopt/files/cvxopt-1.1.6-setup.patch +++ /dev/null @@ -1,176 +0,0 @@ ---- setup.py.orig 2013-05-16 21:36:29.616510963 +1200 -+++ setup.py 2013-05-16 21:51:08.456347311 +1200 -@@ -2,7 +2,7 @@ - from glob import glob - - # Modifiy this if BLAS and LAPACK libraries are not in /usr/lib. --BLAS_LIB_DIR = '/usr/lib' -+BLAS_LIB_DIR = '' - - # Default names of BLAS and LAPACK libraries - BLAS_LIB = ['blas'] -@@ -18,37 +18,37 @@ - BUILD_GSL = 0 - - # Directory containing libgsl (used only when BUILD_GSL = 1). --GSL_LIB_DIR = '/usr/lib' -+GSL_LIB_DIR = '' - - # Directory containing the GSL header files (used only when BUILD_GSL = 1). --GSL_INC_DIR = '/usr/include/gsl' -+GSL_INC_DIR = '' - - # Set to 1 if you are installing the fftw module. - BUILD_FFTW = 0 - - # Directory containing libfftw3 (used only when BUILD_FFTW = 1). --FFTW_LIB_DIR = '/usr/lib' -+FFTW_LIB_DIR = '' - - # Directory containing fftw.h (used only when BUILD_FFTW = 1). --FFTW_INC_DIR = '/usr/include' -+FFTW_INC_DIR = '' - - # Set to 1 if you are installing the glpk module. - BUILD_GLPK = 0 - - # Directory containing libglpk (used only when BUILD_GLPK = 1). --GLPK_LIB_DIR = '/usr/lib' -+GLPK_LIB_DIR = '' - - # Directory containing glpk.h (used only when BUILD_GLPK = 1). --GLPK_INC_DIR = '/usr/include' -+GLPK_INC_DIR = '' - - # Set to 1 if you are installing the DSDP module. - BUILD_DSDP = 0 - - # Directory containing libdsdp (used only when BUILD_DSDP = 1). --DSDP_LIB_DIR = '/usr/lib' -+DSDP_LIB_DIR = '' - - # Directory containing dsdp5.h (used only when BUILD_DSDP = 1). --DSDP_INC_DIR = '/usr/include/dsdp' -+DSDP_INC_DIR = '' - - # No modifications should be needed below this line. - -@@ -61,39 +61,32 @@ - # optional modules - - if BUILD_GSL: -- gsl = Extension('gsl', libraries = ['m', 'gsl'] + BLAS_LIB, -- include_dirs = [ GSL_INC_DIR ], -- library_dirs = [ GSL_LIB_DIR, BLAS_LIB_DIR ], -- extra_link_args = BLAS_EXTRA_LINK_ARGS, -+ gsl = Extension('gsl', libraries = ['gsl'], -+ library_dirs = [ GSL_LIB_DIR ], - sources = ['src/C/gsl.c'] ) - extmods += [gsl]; - - if BUILD_FFTW: -- fftw = Extension('fftw', libraries = ['fftw3'] + BLAS_LIB, -- include_dirs = [ FFTW_INC_DIR ], -- library_dirs = [ FFTW_LIB_DIR, BLAS_LIB_DIR ], -- extra_link_args = BLAS_EXTRA_LINK_ARGS, -+ fftw = Extension('fftw', libraries = ['fftw3'], -+ library_dirs = [ FFTW_LIB_DIR ], - sources = ['src/C/fftw.c'] ) - extmods += [fftw]; - - if BUILD_GLPK: - glpk = Extension('glpk', libraries = ['glpk'], -- include_dirs = [ GLPK_INC_DIR ], - library_dirs = [ GLPK_LIB_DIR ], - sources = ['src/C/glpk.c'] ) - extmods += [glpk]; - - if BUILD_DSDP: -- dsdp = Extension('dsdp', libraries = ['dsdp'] + LAPACK_LIB + BLAS_LIB, -- include_dirs = [ DSDP_INC_DIR ], -- library_dirs = [ DSDP_LIB_DIR, BLAS_LIB_DIR ], -- extra_link_args = BLAS_EXTRA_LINK_ARGS, -+ dsdp = Extension('dsdp', libraries = ['dsdp'], -+ library_dirs = [ DSDP_LIB_DIR ], - sources = ['src/C/dsdp.c'] ) - extmods += [dsdp]; - - # Required modules - --base = Extension('base', libraries = ['m'] + LAPACK_LIB + BLAS_LIB, -+base = Extension('base', libraries = ['m'] + LAPACK_LIB, - library_dirs = [ BLAS_LIB_DIR ], - define_macros = MACROS, - extra_link_args = BLAS_EXTRA_LINK_ARGS, -@@ -105,61 +98,36 @@ - extra_link_args = BLAS_EXTRA_LINK_ARGS, - sources = ['src/C/blas.c'] ) - --lapack = Extension('lapack', libraries = LAPACK_LIB + BLAS_LIB, -+lapack = Extension('lapack', libraries = LAPACK_LIB, - library_dirs = [ BLAS_LIB_DIR ], - define_macros = MACROS, - extra_link_args = BLAS_EXTRA_LINK_ARGS, - sources = ['src/C/lapack.c'] ) - - umfpack = Extension('umfpack', -- include_dirs = [ 'src/C/SuiteSparse/UMFPACK/Include', -- 'src/C/SuiteSparse/AMD/Include', -- 'src/C/SuiteSparse/AMD/Source', -- 'src/C/SuiteSparse/SuiteSparse_config' ], - library_dirs = [ BLAS_LIB_DIR ], - define_macros = MACROS + [('NTIMER', '1'), ('NCHOLMOD', '1')], -- libraries = LAPACK_LIB + BLAS_LIB, -+ libraries = [ 'umfpack' ], - extra_compile_args = ['-Wno-unknown-pragmas'], -- extra_link_args = BLAS_EXTRA_LINK_ARGS, -- sources = [ 'src/C/umfpack.c', -- 'src/C/SuiteSparse/UMFPACK/Source/umfpack_global.c', -- 'src/C/SuiteSparse/UMFPACK/Source/umfpack_tictoc.c' ] + -- ['src/C/SuiteSparse/SuiteSparse_config/SuiteSparse_config.c'] + -- glob('src/C/SuiteSparse_cvxopt_extra/umfpack/*')) -+ sources = [ 'src/C/umfpack.c' ]) - - # Build for int or long? - import sys - if sys.maxsize > 2**31: MACROS += [('DLONG',None)] - - cholmod = Extension('cholmod', -- library_dirs = [ BLAS_LIB_DIR ], -- libraries = LAPACK_LIB + BLAS_LIB, -- include_dirs = [ 'src/C/SuiteSparse/CHOLMOD/Include', -- 'src/C/SuiteSparse/COLAMD', -- 'src/C/SuiteSparse/AMD/Include', -- 'src/C/SuiteSparse/COLAMD/Include', -- 'src/C/SuiteSparse/SuiteSparse_config' ], -- define_macros = MACROS + [('NPARTITION', '1'), ('NTIMER', '1')], -- extra_link_args = BLAS_EXTRA_LINK_ARGS, -- sources = [ 'src/C/cholmod.c' ] + -- ['src/C/SuiteSparse/AMD/Source/' + s for s in ['amd_global.c', -- 'amd_postorder.c', 'amd_post_tree.c', 'amd_2.c']] + -- ['src/C/SuiteSparse/COLAMD/Source/' + s for s in ['colamd.c', -- 'colamd_global.c']] + -- ['src/C/SuiteSparse/SuiteSparse_config/SuiteSparse_config.c'] + -- glob('src/C/SuiteSparse/CHOLMOD/Core/c*.c') + -- glob('src/C/SuiteSparse/CHOLMOD/Cholesky/c*.c') + -- ['src/C/SuiteSparse/CHOLMOD/Check/cholmod_check.c'] + -- glob('src/C/SuiteSparse/CHOLMOD/Supernodal/c*.c') ) -+ library_dirs = [ BLAS_LIB_DIR ], -+ libraries = ['cholmod'] + BLAS_LIB, -+ define_macros = MACROS + [('NPARTITION', '1'), ('NTIMER', '1')], -+ sources = [ 'src/C/cholmod.c' ]) - - amd = Extension('amd', -- include_dirs = [ 'src/C/SuiteSparse/AMD/Include', -- 'src/C/SuiteSparse/SuiteSparse_config' ], - define_macros = MACROS, -- sources = [ 'src/C/amd.c' ] + glob('src/C/SuiteSparse/AMD/Source/*.c') ) -+ libraries = ['amd'], -+ sources = [ 'src/C/amd.c' ]) - - misc_solvers = Extension('misc_solvers', -- libraries = LAPACK_LIB + BLAS_LIB, -+ libraries = LAPACK_LIB, - library_dirs = [ BLAS_LIB_DIR ], - define_macros = MACROS, - extra_link_args = BLAS_EXTRA_LINK_ARGS, diff --git a/dev-python/cvxopt/files/cvxopt-1.1.8-setup.patch b/dev-python/cvxopt/files/cvxopt-1.1.8-setup.patch deleted file mode 100644 index 1b53f7535117..000000000000 --- a/dev-python/cvxopt/files/cvxopt-1.1.8-setup.patch +++ /dev/null @@ -1,136 +0,0 @@ - setup.py | 45 +++++++++++++++++++-------------------------- - 1 file changed, 19 insertions(+), 26 deletions(-) - -diff --git a/setup.py b/setup.py -index 031ad53..e5c56af 100644 ---- a/setup.py -+++ b/setup.py -@@ -6,7 +6,7 @@ from glob import glob - import os - - # Modifiy this if BLAS and LAPACK libraries are not in /usr/lib. --BLAS_LIB_DIR = '/usr/lib' -+BLAS_LIB_DIR = '' - - # Default names of BLAS and LAPACK libraries - BLAS_LIB = ['blas'] -@@ -22,37 +22,37 @@ BLAS_NOUNDERSCORES = False - BUILD_GSL = 0 - - # Directory containing libgsl (used only when BUILD_GSL = 1). --GSL_LIB_DIR = '/usr/lib' -+GSL_LIB_DIR = '' - - # Directory containing the GSL header files (used only when BUILD_GSL = 1). --GSL_INC_DIR = '/usr/include/gsl' -+GSL_INC_DIR = '' - - # Set to 1 if you are installing the fftw module. - BUILD_FFTW = 0 - - # Directory containing libfftw3 (used only when BUILD_FFTW = 1). --FFTW_LIB_DIR = '/usr/lib' -+FFTW_LIB_DIR = '' - - # Directory containing fftw.h (used only when BUILD_FFTW = 1). --FFTW_INC_DIR = '/usr/include' -+FFTW_INC_DIR = '' - - # Set to 1 if you are installing the glpk module. - BUILD_GLPK = 0 - - # Directory containing libglpk (used only when BUILD_GLPK = 1). --GLPK_LIB_DIR = '/usr/lib' -+GLPK_LIB_DIR = '' - - # Directory containing glpk.h (used only when BUILD_GLPK = 1). --GLPK_INC_DIR = '/usr/include' -+GLPK_INC_DIR = '' - - # Set to 1 if you are installing the DSDP module. - BUILD_DSDP = 0 - - # Directory containing libdsdp (used only when BUILD_DSDP = 1). --DSDP_LIB_DIR = '/usr/lib' -+DSDP_LIB_DIR = '' - - # Directory containing dsdp5.h (used only when BUILD_DSDP = 1). --DSDP_INC_DIR = '/usr/include/dsdp' -+DSDP_INC_DIR = '' - - # Set to 1 to use external SuiteSparse library - SUITESPARSE_EXT_LIB = 0 -@@ -98,39 +98,32 @@ if BLAS_NOUNDERSCORES: MACROS.append(('BLAS_NO_UNDERSCORE','')) - # optional modules - - if BUILD_GSL: -- gsl = Extension('gsl', libraries = ['m', 'gsl'] + BLAS_LIB, -- include_dirs = [ GSL_INC_DIR ], -- library_dirs = [ GSL_LIB_DIR, BLAS_LIB_DIR ], -- extra_link_args = BLAS_EXTRA_LINK_ARGS, -+ gsl = Extension('gsl', libraries = ['gsl'], -+ library_dirs = [ GSL_LIB_DIR ], - sources = ['src/C/gsl.c'] ) - extmods += [gsl]; - - if BUILD_FFTW: -- fftw = Extension('fftw', libraries = ['fftw3'] + BLAS_LIB, -- include_dirs = [ FFTW_INC_DIR ], -- library_dirs = [ FFTW_LIB_DIR, BLAS_LIB_DIR ], -- extra_link_args = BLAS_EXTRA_LINK_ARGS, -+ fftw = Extension('fftw', libraries = ['fftw3'], -+ library_dirs = [ FFTW_LIB_DIR ], - sources = ['src/C/fftw.c'] ) - extmods += [fftw]; - - if BUILD_GLPK: - glpk = Extension('glpk', libraries = ['glpk'], -- include_dirs = [ GLPK_INC_DIR ], - library_dirs = [ GLPK_LIB_DIR ], - sources = ['src/C/glpk.c'] ) - extmods += [glpk]; - - if BUILD_DSDP: -- dsdp = Extension('dsdp', libraries = ['dsdp'] + LAPACK_LIB + BLAS_LIB, -- include_dirs = [ DSDP_INC_DIR ], -- library_dirs = [ DSDP_LIB_DIR, BLAS_LIB_DIR ], -- extra_link_args = BLAS_EXTRA_LINK_ARGS, -+ dsdp = Extension('dsdp', libraries = ['dsdp'] + LAPACK_LIB, -+ library_dirs = [ DSDP_LIB_DIR ], - sources = ['src/C/dsdp.c'] ) - extmods += [dsdp]; - - # Required modules - --base = Extension('base', libraries = ['m'] + LAPACK_LIB + BLAS_LIB, -+base = Extension('base', libraries = ['m'] + LAPACK_LIB, - library_dirs = [ BLAS_LIB_DIR ], - define_macros = MACROS, - extra_link_args = BLAS_EXTRA_LINK_ARGS, -@@ -142,7 +135,7 @@ blas = Extension('blas', libraries = BLAS_LIB, - extra_link_args = BLAS_EXTRA_LINK_ARGS, - sources = ['src/C/blas.c'] ) - --lapack = Extension('lapack', libraries = LAPACK_LIB + BLAS_LIB, -+lapack = Extension('lapack', libraries = LAPACK_LIB, - library_dirs = [ BLAS_LIB_DIR ], - define_macros = MACROS, - extra_link_args = BLAS_EXTRA_LINK_ARGS, -@@ -177,7 +170,7 @@ if sys.maxsize > 2**31: MACROS += [('DLONG',None)] - - if SUITESPARSE_EXT_LIB: - cholmod = Extension('cholmod', -- libraries = ['amd','colamd','suitesparseconfig','cholmod'], -+ libraries = ['amd','colamd','suitesparseconfig','cholmod'] + LAPACK_LIB, - include_dirs = [SUITESPARSE_INC_DIR], - library_dirs = [SUITESPARSE_LIB_DIR], - sources = [ 'src/C/cholmod.c' ]) -@@ -218,7 +211,7 @@ else: - glob('src/C/SuiteSparse/AMD/Source/*.c') ) - - misc_solvers = Extension('misc_solvers', -- libraries = LAPACK_LIB + BLAS_LIB, -+ libraries = ['m'] + LAPACK_LIB, - library_dirs = [ BLAS_LIB_DIR ], - define_macros = MACROS, - extra_link_args = BLAS_EXTRA_LINK_ARGS, |