import os from os.path import join import numpy def configuration(parent_package="", top_path=None): from numpy.distutils.misc_util import Configuration config = Configuration("svm", parent_package, top_path) config.add_subpackage("tests") # newrand wrappers config.add_extension( "_newrand", sources=["_newrand.pyx"], include_dirs=[numpy.get_include(), join("src", "newrand")], depends=[join("src", "newrand", "newrand.h")], language="c++", # Use C++11 random number generator fix extra_compile_args=["-std=c++11"], ) # Section LibSVM # we compile both libsvm and libsvm_sparse config.add_library( "libsvm-skl", sources=[join("src", "libsvm", "libsvm_template.cpp")], depends=[ join("src", "libsvm", "svm.cpp"), join("src", "libsvm", "svm.h"), join("src", "newrand", "newrand.h"), ], # Force C++ linking in case gcc is picked up instead # of g++ under windows with some versions of MinGW extra_link_args=["-lstdc++"], # Use C++11 to use the random number generator fix extra_compiler_args=["-std=c++11"], ) libsvm_sources = ["_libsvm.pyx"] libsvm_depends = [ join("src", "libsvm", "libsvm_helper.c"), join("src", "libsvm", "libsvm_template.cpp"), join("src", "libsvm", "svm.cpp"), join("src", "libsvm", "svm.h"), join("src", "newrand", "newrand.h"), ] config.add_extension( "_libsvm", sources=libsvm_sources, include_dirs=[ numpy.get_include(), join("src", "libsvm"), join("src", "newrand"), ], libraries=["libsvm-skl"], depends=libsvm_depends, ) # liblinear module libraries = [] if os.name == "posix": libraries.append("m") # precompile liblinear to use C++11 flag config.add_library( "liblinear-skl", sources=[ join("src", "liblinear", "linear.cpp"), join("src", "liblinear", "tron.cpp"), ], depends=[ join("src", "liblinear", "linear.h"), join("src", "liblinear", "tron.h"), join("src", "newrand", "newrand.h"), ], # Force C++ linking in case gcc is picked up instead # of g++ under windows with some versions of MinGW extra_link_args=["-lstdc++"], # Use C++11 to use the random number generator fix extra_compiler_args=["-std=c++11"], ) liblinear_sources = ["_liblinear.pyx"] liblinear_depends = [ join("src", "liblinear", "*.h"), join("src", "newrand", "newrand.h"), join("src", "liblinear", "liblinear_helper.c"), ] config.add_extension( "_liblinear", sources=liblinear_sources, libraries=["liblinear-skl"] + libraries, include_dirs=[ join(".", "src", "liblinear"), join(".", "src", "newrand"), join("..", "utils"), numpy.get_include(), ], depends=liblinear_depends, # extra_compile_args=['-O0 -fno-inline'], ) # end liblinear module # this should go *after* libsvm-skl libsvm_sparse_sources = ["_libsvm_sparse.pyx"] config.add_extension( "_libsvm_sparse", libraries=["libsvm-skl"], sources=libsvm_sparse_sources, include_dirs=[ numpy.get_include(), join("src", "libsvm"), join("src", "newrand"), ], depends=[ join("src", "libsvm", "svm.h"), join("src", "newrand", "newrand.h"), join("src", "libsvm", "libsvm_sparse_helper.c"), ], ) return config if __name__ == "__main__": from numpy.distutils.core import setup setup(**configuration(top_path="").todict())