@@ -199,10 +199,12 @@ def libpaths(paths,bits):
199199 '/opt/local/include' , '/sw/include' ,
200200 '/usr/include/suitesparse' ]
201201 default_src_dirs = ['.' ,'/usr/local/src' , '/opt/src' ,'/sw/src' ]
202+
202203 default_x11_lib_dirs = libpaths (['/usr/X11R6/lib' ,'/usr/X11/lib' ,
203204 '/usr/lib' ], platform_bits )
204205 default_x11_include_dirs = ['/usr/X11R6/include' ,'/usr/X11/include' ,
205206 '/usr/include' ]
207+
206208 if os .path .exists ('/usr/lib/X11' ):
207209 globbed_x11_dir = glob ('/usr/lib/*/libX11.so' )
208210 if globbed_x11_dir :
@@ -211,7 +213,6 @@ def libpaths(paths,bits):
211213 default_x11_include_dirs .extend (['/usr/lib/X11/include' ,
212214 '/usr/include/X11' ])
213215
214-
215216if os .path .join (sys .prefix , 'lib' ) not in default_lib_dirs :
216217 default_lib_dirs .insert (0 ,os .path .join (sys .prefix , 'lib' ))
217218 default_include_dirs .append (os .path .join (sys .prefix , 'include' ))
@@ -434,11 +435,7 @@ def calc_libraries_info(self):
434435 dirs = self .get_lib_dirs ()
435436 info = {}
436437 for lib in libs :
437- i = None
438- for d in dirs :
439- i = self .check_libs (d ,[lib ])
440- if i is not None :
441- break
438+ i = self .check_libs (dirs ,[lib ])
442439 if i is not None :
443440 dict_append (info ,** i )
444441 else :
@@ -586,7 +583,7 @@ def library_extensions(self):
586583 # exts.append('.so.3gf')
587584 return exts
588585
589- def check_libs (self ,lib_dir ,libs ,opt_libs = []):
586+ def check_libs (self ,lib_dirs ,libs ,opt_libs = []):
590587 """If static or shared libraries are available then return
591588 their info dictionary.
592589
@@ -596,23 +593,23 @@ def check_libs(self,lib_dir,libs,opt_libs =[]):
596593 exts = self .library_extensions ()
597594 info = None
598595 for ext in exts :
599- info = self ._check_libs (lib_dir ,libs ,opt_libs ,[ext ])
596+ info = self ._check_libs (lib_dirs ,libs ,opt_libs ,[ext ])
600597 if info is not None :
601598 break
602599 if not info :
603- log .info (' libraries %s not found in %s' , ',' .join (libs ), lib_dir )
600+ log .info (' libraries %s not found in %s' , ',' .join (libs ), lib_dirs )
604601 return info
605602
606- def check_libs2 (self , lib_dir , libs , opt_libs = []):
603+ def check_libs2 (self , lib_dirs , libs , opt_libs = []):
607604 """If static or shared libraries are available then return
608605 their info dictionary.
609606
610607 Checks each library for shared or static.
611608 """
612609 exts = self .library_extensions ()
613- info = self ._check_libs (lib_dir ,libs ,opt_libs ,exts )
610+ info = self ._check_libs (lib_dirs ,libs ,opt_libs ,exts )
614611 if not info :
615- log .info (' libraries %s not found in %s' , ',' .join (libs ), lib_dir )
612+ log .info (' libraries %s not found in %s' , ',' .join (libs ), lib_dirs )
616613 return info
617614
618615 def _lib_list (self , lib_dir , libs , exts ):
@@ -640,13 +637,36 @@ def _lib_list(self, lib_dir, libs, exts):
640637 break
641638 return liblist
642639
643- def _check_libs (self , lib_dir , libs , opt_libs , exts ):
644- found_libs = self ._lib_list (lib_dir , libs , exts )
640+ def _check_libs (self , lib_dirs , libs , opt_libs , exts ):
641+ """Find mandatory and optional libs in expected paths.
642+
643+ Missing optional libraries are silently forgotten.
644+ """
645+ # First, try to find the mandatory libraries
646+ if is_sequence (lib_dirs ):
647+ found_libs , found_dirs = [], []
648+ for dir_ in lib_dirs :
649+ found_libs1 = self ._lib_list (dir_ , libs , exts )
650+ if found_libs1 :
651+ found_libs .extend (found_libs1 )
652+ found_dirs .append (dir_ )
653+ else :
654+ found_libs = self ._lib_list (lib_dirs , libs , exts )
655+ found_dirs = [lib_dirs ]
645656 if len (found_libs ) == len (libs ):
646- info = {'libraries' : found_libs , 'library_dirs' : [lib_dir ]}
647- opt_found_libs = self ._lib_list (lib_dir , opt_libs , exts )
648- if len (opt_found_libs ) == len (opt_libs ):
649- info ['libraries' ].extend (opt_found_libs )
657+ info = {'libraries' : found_libs , 'library_dirs' : found_dirs }
658+ # Now, check for optional libraries
659+ if is_sequence (lib_dirs ):
660+ for dir_ in lib_dirs :
661+ opt_found_libs = self ._lib_list (dir_ , opt_libs , exts )
662+ if opt_found_libs :
663+ if dir_ not in found_dirs :
664+ found_dirs .extend (dir_ )
665+ found_libs .extend (opt_found_libs )
666+ else :
667+ opt_found_libs = self ._lib_list (lib_dirs , opt_libs , exts )
668+ if opt_found_libs :
669+ found_libs .extend (opt_found_libs )
650670 return info
651671 else :
652672 return None
@@ -695,12 +715,7 @@ def calc_ver_info(self,ver_param):
695715 incl_dirs = self .get_include_dirs ()
696716 incl_dir = None
697717 libs = self .get_libs (self .section + '_libs' , ver_param ['libs' ])
698- info = None
699- for d in lib_dirs :
700- r = self .check_libs (d ,libs )
701- if r is not None :
702- info = r
703- break
718+ info = self .check_libs (lib_dirs ,libs )
704719 if info is not None :
705720 flag = 0
706721 for d in incl_dirs :
@@ -871,23 +886,18 @@ def __init__(self):
871886 #l = 'mkl_ia32'
872887 if l not in self ._lib_mkl :
873888 self ._lib_mkl .insert (0 ,l )
874- system_info .__init__ (self ,
875- default_lib_dirs = [os .path .join (mklroot ,'lib' ,plt )],
876- default_include_dirs = [os .path .join (mklroot ,'include' )])
889+ system_info .__init__ (
890+ self ,
891+ default_lib_dirs = [os .path .join (mklroot ,'lib' ,plt )],
892+ default_include_dirs = [os .path .join (mklroot ,'include' )])
877893
878894 def calc_info (self ):
879895 lib_dirs = self .get_lib_dirs ()
880896 incl_dirs = self .get_include_dirs ()
881897 mkl_libs = self .get_libs ('mkl_libs' ,self ._lib_mkl )
882- mkl = None
883- for d in lib_dirs :
884- mkl = self .check_libs2 (d ,mkl_libs )
885- if mkl is not None :
886- break
887- if mkl is None :
898+ info = self .check_libs2 (lib_dirs ,mkl_libs )
899+ if info is None :
888900 return
889- info = {}
890- dict_append (info ,** mkl )
891901 dict_append (info ,
892902 define_macros = [('SCIPY_MKL_H' ,None )],
893903 include_dirs = incl_dirs )
@@ -950,12 +960,7 @@ def calc_info(self):
950960 lapack_atlas = self .check_libs2 (d ,['lapack_atlas' ],[])
951961 if atlas is not None :
952962 lib_dirs2 = [d ] + self .combine_paths (d ,['atlas*' ,'ATLAS*' ])
953- for d2 in lib_dirs2 :
954- lapack = self .check_libs2 (d2 ,lapack_libs ,[])
955- if lapack is not None :
956- break
957- else :
958- lapack = None
963+ lapack = self .check_libs2 (lib_dirs2 ,lapack_libs ,[])
959964 if lapack is not None :
960965 break
961966 if atlas :
@@ -1035,11 +1040,7 @@ def calc_info(self):
10351040 info = {}
10361041 atlas_libs = self .get_libs ('atlas_libs' ,
10371042 self ._lib_names + self ._lib_atlas )
1038- atlas = None
1039- for d in lib_dirs :
1040- atlas = self .check_libs2 (d ,atlas_libs ,[])
1041- if atlas is not None :
1042- break
1043+ atlas = self .check_libs2 (lib_dirs ,atlas_libs ,[])
10431044 if atlas is None :
10441045 return
10451046 include_dirs = self .get_include_dirs ()
@@ -1082,12 +1083,8 @@ def calc_info(self):
10821083 lib_dirs = self .get_lib_dirs ()
10831084
10841085 lapack_libs = self .get_libs ('lapack_libs' , self ._lib_names )
1085- for d in lib_dirs :
1086- lapack = self .check_libs (d ,lapack_libs ,[])
1087- if lapack is not None :
1088- info = lapack
1089- break
1090- else :
1086+ info = self .check_libs (lib_dirs ,lapack_libs_libs ,[])
1087+ if info is None :
10911088 return
10921089 info ['language' ] = 'f77'
10931090 self .set_info (** info )
@@ -1253,8 +1250,8 @@ def get_atlas_version(**config):
12531250 if m :
12541251 atlas_version = m .group ('version' )
12551252 if atlas_version is not None :
1256-
12571253 break
1254+
12581255 # final choice --- look at ATLAS_VERSION environment
12591256 # variable
12601257 if atlas_version is None :
@@ -1294,7 +1291,7 @@ def calc_info(self):
12941291 args = []
12951292 link_args = []
12961293 if get_platform ()[- 4 :] == 'i386' or 'intel' in get_platform () or \
1297- 'i386' in platform .platform ():
1294+ 'i386' in platform .platform ():
12981295 intel = 1
12991296 else :
13001297 intel = 0
@@ -1382,7 +1379,7 @@ def calc_info(self):
13821379 args = []
13831380 link_args = []
13841381 if get_platform ()[- 4 :] == 'i386' or 'intel' in get_platform () or \
1385- 'i386' in platform .platform ():
1382+ 'i386' in platform .platform ():
13861383 intel = 1
13871384 else :
13881385 intel = 0
@@ -1452,12 +1449,8 @@ def calc_info(self):
14521449 lib_dirs = self .get_lib_dirs ()
14531450
14541451 blas_libs = self .get_libs ('blas_libs' , self ._lib_names )
1455- for d in lib_dirs :
1456- blas = self .check_libs (d ,blas_libs ,[])
1457- if blas is not None :
1458- info = blas
1459- break
1460- else :
1452+ info = self .check_libs (lib_dirs ,blas_libs ,[])
1453+ if info is None :
14611454 return
14621455 info ['language' ] = 'f77' # XXX: is it generally true?
14631456 self .set_info (** info )
@@ -1529,11 +1522,8 @@ def calc_info(self):
15291522 lib_dirs = self .get_lib_dirs ()
15301523 include_dirs = self .get_include_dirs ()
15311524 x11_libs = self .get_libs ('x11_libs' , ['X11' ])
1532- for lib_dir in lib_dirs :
1533- info = self .check_libs (lib_dir , x11_libs , [])
1534- if info is not None :
1535- break
1536- else :
1525+ info = self .check_libs (lib_dirs , x11_libs , [])
1526+ if info is None :
15371527 return
15381528 inc_dir = None
15391529 for d in include_dirs :
@@ -1880,12 +1870,8 @@ def calc_info(self):
18801870 lib_dirs = self .get_lib_dirs ()
18811871
18821872 amd_libs = self .get_libs ('amd_libs' , self ._lib_names )
1883- for d in lib_dirs :
1884- amd = self .check_libs (d ,amd_libs ,[])
1885- if amd is not None :
1886- info = amd
1887- break
1888- else :
1873+ info = self .check_libs (lib_dirs ,amd_libs ,[])
1874+ if info is None :
18891875 return
18901876
18911877 include_dirs = self .get_include_dirs ()
@@ -1914,12 +1900,8 @@ def calc_info(self):
19141900 lib_dirs = self .get_lib_dirs ()
19151901
19161902 umfpack_libs = self .get_libs ('umfpack_libs' , self ._lib_names )
1917- for d in lib_dirs :
1918- umf = self .check_libs (d ,umfpack_libs ,[])
1919- if umf is not None :
1920- info = umf
1921- break
1922- else :
1903+ info = self .check_libs (lib_dirs ,umfpack_libs ,[])
1904+ if info is None :
19231905 return
19241906
19251907 include_dirs = self .get_include_dirs ()
0 commit comments