numpy.distutils, system_info and dll/exp/lib
Hi, In one of my package, I use numpy.distutils.system_info to detect a C library. This works well on linux and Mac OS X, but on windows, the library is not detected if only the dll is present. If the .lib is there, then it is detected; the dll itself works OK (I can use it from ctypes normally). Am I doing something wrong in my configuration ? """ class SndfileNotFoundError(NotFoundError): """ sndfile (http://www.mega-nerd.com/libsndfile/) library not found. Directories to search for the libraries can be specified in the site.cfg file (section [sndfile]).""" class sndfile_info(system_info): #variables to override section = 'sndfile' notfounderror = SndfileNotFoundError libname = 'sndfile' header = 'sndfile.h' def __init__(self): system_info.__init__(self) def calc_info(self): """ Compute the informations of the library """ prefix = 'lib' # Look for the shared library sndfile_libs = self.get_libs('sndfile_libs', self.libname) lib_dirs = self.get_lib_dirs() for i in lib_dirs: tmp = self.check_libs(i, sndfile_libs) if tmp is not None: info = tmp break #else: # raise self.notfounderror() # Look for the header file include_dirs = self.get_include_dirs() inc_dir = None for d in include_dirs: p = self.combine_paths(d,self.header) if p: inc_dir = os.path.dirname(p[0]) headername = os.path.abspath(p[0]) break if inc_dir is not None and tmp is not None: if sys.platform == 'win32': # win32 case fullname = prefix + tmp['libraries'][0] + \ '.dll' elif sys.platform == 'darwin': # Mac Os X case fullname = prefix + tmp['libraries'][0] + '.' + \ str(SNDFILE_MAJ_VERSION) + '.dylib' else: # All others (Linux for sure; what about solaris) ? fullname = prefix + tmp['libraries'][0] + '.so' + \ '.' + str(SNDFILE_MAJ_VERSION) fullname = os.path.join(info['library_dirs'][0], fullname) dict_append(info, include_dirs=[inc_dir], fullheadloc = headername, fulllibloc = fullname) else: return #print self self.set_info(**info) return """ The problem is, the library I am using is distributed only as a dll, not with the .lib. Right now, users of my package need to generate the .lib by themselves from the dll, using visual studio compiler, which is really too much (specially since the library itself is fine; using the compiler is necessary only for distutils to find the library !). cheers, David
participants (1)
-
David Cournapeau