4
4
from distutils import version
5
5
from distutils .core import Extension
6
6
import glob
7
+ import io
7
8
import multiprocessing
8
9
import os
9
10
import re
@@ -634,17 +635,48 @@ class CXX(SetupPackage):
634
635
name = 'pycxx'
635
636
636
637
def check (self ):
638
+ if sys .version_info [:2 ] == (2 , 7 ):
639
+ # There is no version of PyCXX in the wild that will work
640
+ # with Python 2.7
641
+ self .__class__ .found_external = False
642
+ return ("Official version of PyCXX are not compatible with "
643
+ "Python 2.7. Using local copy" )
644
+
645
+ self .__class__ .found_external = True
646
+ old_stdout = sys .stdout
647
+ sys .stdout = io .BytesIO ()
648
+ try :
649
+ import CXX
650
+ except ImportError :
651
+ self .__class__ .found_external = False
652
+ return "Couldn't import. Using local copy."
653
+ finally :
654
+ sys .stdout = old_stdout
655
+
637
656
try :
638
657
return self ._check_for_pkg_config (
639
- 'PyCXX' , 'CXX/Extensions.hxx' , min_version = 'PATCH ' )
658
+ 'PyCXX' , 'CXX/Extensions.hxx' , min_version = '6.2.4 ' )
640
659
except CheckFailed as e :
641
660
self .__class__ .found_external = False
642
661
return str (e ) + ' Using local copy.'
643
- else :
644
- self .__class__ .found_external = True
645
662
646
663
def add_flags (self , ext ):
647
664
if self .found_external :
665
+ support_dir = os .path .normpath (
666
+ os .path .join (
667
+ sys .prefix ,
668
+ 'share' ,
669
+ 'python%d.%d' % (
670
+ sys .version_info [0 ], sys .version_info [1 ]),
671
+ 'CXX' ))
672
+ if not os .path .exists (support_dir ):
673
+ # On Fedora 17, these files are installed in /usr/share/CXX
674
+ support_dir = '/usr/src/CXX'
675
+ ext .sources .extend ([
676
+ os .path .join (support_dir , x ) for x in
677
+ ['cxxsupport.cxx' , 'cxx_extensions.cxx' ,
678
+ 'IndirectPythonInterface.cxx' ,
679
+ 'cxxextensions.c' ]])
648
680
pkg_config .setup_extension (ext , 'PyCXX' )
649
681
else :
650
682
ext .sources .extend (glob .glob ('CXX/*.cxx' ))
@@ -661,28 +693,30 @@ class LibAgg(SetupPackage):
661
693
name = 'libagg'
662
694
663
695
def check (self ):
696
+ self .__class__ .found_external = True
664
697
try :
665
698
return self ._check_for_pkg_config (
666
699
'libagg' , 'agg2/agg_basics.h' , min_version = 'PATCH' )
667
700
except CheckFailed as e :
668
701
self .__class__ .found_external = False
669
702
return str (e ) + ' Using local copy.'
670
- finally :
671
- self .__class__ .found_external = True
672
703
673
704
def add_flags (self , ext ):
674
- ext .include_dirs .append ('agg24/include' )
675
- agg_sources = [
676
- 'agg_bezier_arc.cpp' ,
677
- 'agg_curves.cpp' ,
678
- 'agg_image_filters.cpp' ,
679
- 'agg_trans_affine.cpp' ,
680
- 'agg_vcgen_contour.cpp' ,
681
- 'agg_vcgen_dash.cpp' ,
682
- 'agg_vcgen_stroke.cpp' ,
683
- ]
684
- ext .sources .extend (
685
- os .path .join ('agg24' , 'src' , x ) for x in agg_sources )
705
+ if self .found_external :
706
+ pkg_config .setup_extension (ext , 'libagg' )
707
+ else :
708
+ ext .include_dirs .append ('agg24/include' )
709
+ agg_sources = [
710
+ 'agg_bezier_arc.cpp' ,
711
+ 'agg_curves.cpp' ,
712
+ 'agg_image_filters.cpp' ,
713
+ 'agg_trans_affine.cpp' ,
714
+ 'agg_vcgen_contour.cpp' ,
715
+ 'agg_vcgen_dash.cpp' ,
716
+ 'agg_vcgen_stroke.cpp' ,
717
+ ]
718
+ ext .sources .extend (
719
+ os .path .join ('agg24' , 'src' , x ) for x in agg_sources )
686
720
687
721
688
722
class FreeType (SetupPackage ):
0 commit comments