]> Creatis software - gdcm.git/blob - setup.py
ebeef96af03a658d9e44d752942b848b3cb66acd
[gdcm.git] / setup.py
1 from distutils.core import setup
2 import glob, os, sys, shutil
3 from distutilsWrapping import *
4 from WrapSwig import *
5 from WrapVTK import *
6 from gdcmVersion import *
7
8 ThisModule='gdcmPython'
9 gdcmPythonSrcDir=ThisModule
10 gdcmSrcDir      ="src"
11 gdcmJpeg8SrcDir =os.path.join('src', 'jpeg', 'libijg8')
12 gdcmJpeg12SrcDir=os.path.join('src', 'jpeg', 'libijg12')
13 gdcmJpgSrcDir=os.path.join('src', 'jpeg', 'ljpg')
14 gdcmvtkSrcDir   ="vtk"
15 gdcmDictsDir    ="Dicts"
16 gdcmTestDir     ="Test"
17
18 # Due to a disutil oddity on Unices : see
19 # http://aspn.activestate.com/ASPN/Mail/Message/distutils-sig/588325
20 if(os.name=='posix'):
21         targetDir=os.path.join('lib','python'+sys.version[:3],'site-packages')
22         libraries=["stdc++"]
23         macros   =[('__STDC_LIMIT_MACROS', '1')]
24
25         VTKPATH="/usr"
26         vtkWrapper="vtkWrapPython"
27 else:
28         targetDir=os.path.join('lib','site-packages')
29         libraries=["WSOCK32"]
30         macros   =[]
31
32         try:
33                 VTKPATH=os.environ['VTKPATH']
34         except KeyError,e:
35                 err=str(e)
36                 print "Environment variable",err[err.rfind(':')+1:],'not defined, '\
37                        'please fix it!'
38                 VTKPATH="c:\\Creatis\\vtkDistrib"
39         vtkWrapper=os.path.join(VTKPATH,"bin","vtkWrapPython")
40
41 targetDir=os.path.join(targetDir, ThisModule)
42
43 ### Sources section: determination of sources for the extensions:
44 # Sources 1a/ The kernel of gdcm itself (which wrapped with Swig)
45 #             defines the first extension
46 Sources = []
47 Sources.extend(glob.glob(os.path.join(gdcmSrcDir,"*.cxx")))
48 Sources.append(os.path.join(gdcmPythonSrcDir,"gdcm.i"))
49 # Sources 1b/ The kernel of gdcm depends on a jpeg library whose sources are
50 #             contained in subdir gdcmJpeg8SrcDir. But within this subdir
51 #             some of the C files should not be compiled (refer to
52 #             gdcmJpeg8SrcDir/Makefile.am) !
53
54 Jpeg8Sources = glob.glob(os.path.join(gdcmJpeg8SrcDir,"j*.c"))
55 Jpeg8SourcesToRemove = ['jmemansi.c', 'jmemname.c', 'jmemdos.c', 'jmemmac.c']
56 for Remove in Jpeg8SourcesToRemove:
57    ### Because setup.py is a multiple pass process we need to trap
58    ### the case where the files were allready wed out on a previous pass.
59    try:
60       Jpeg8Sources.remove(os.path.join(gdcmJpeg8SrcDir, Remove))
61    except ValueError:
62       continue
63 Sources.extend(Jpeg8Sources)
64
65 Jpeg12Sources = glob.glob(os.path.join(gdcmJpeg12SrcDir,"j*.c"))
66 Jpeg12SourcesToRemove = ['jmemansi12.c', 'jmemname12.c', 'jmemdos12.c', 
67                          'jmemmac12.c']
68 for Remove in Jpeg12SourcesToRemove:
69    ### Because setup.py is a multiple pass process we need to trap
70    ### the case where the files were allready wed out on a previous pass.
71    try:
72       Jpeg12Sources.remove(os.path.join(gdcmJpeg12SrcDir, Remove))
73    except ValueError:
74       continue
75 Sources.extend(Jpeg12Sources)
76
77 #For 'xmedcon' Jpeg Lossless
78 JpgSources =glob.glob(os.path.join(gdcmJpgSrcDir,"*.c"))
79 Sources.extend(JpgSources)  
80
81 # Sources 2/ The second extension contains the VTK classes (which we wrap
82 #            with the vtk wrappers):
83 VTK_INCLUDE_DIR=os.path.join(VTKPATH,"include","vtk")
84 VTK_LIB_DIR=os.path.join(VTKPATH,"lib","vtk")
85 vtkSources = []
86 vtkSources.extend(glob.glob(os.path.join(gdcmvtkSrcDir,"vtk*.cxx")))
87 vtkSources.extend(glob.glob(os.path.join(gdcmSrcDir,"*.cxx")))
88 vtkSources.extend(Jpeg8Sources)
89 vtkSources.extend(Jpeg12Sources)
90 vtkSources.extend(JpgSources)
91 try:
92         vtkSources.remove(os.path.join(gdcmvtkSrcDir,"vtkgdcmViewer.cxx"))
93 except:
94         pass
95
96 vtkLibraries=["vtkCommon","vtkCommonPython",
97               "vtkIO","vtkIOPython",
98               "vtkFiltering","vtkFilteringPython"]
99
100 ##### 
101 setup(name=ThisModule,
102       version=gdcmVERSION,
103       description="...",
104       author="frog",
105       author_email="frog@creatis.insa-lyon.fr",
106       url="http://www.creatis.insa-lyon.fr/",
107       packages=[ '.',
108                  gdcmPythonSrcDir,
109                  gdcmPythonSrcDir + '.demo' ],
110       cmdclass={'build_ext':build_extWrap}, # redirects default build_ext
111       ext_modules=[SwigExtension(name='_gdcm',
112                                  sources=Sources,
113                                  include_dirs=[gdcmSrcDir,gdcmJpeg8SrcDir,
114                                                gdcmJpeg12SrcDir,gdcmJpgSrcDir],
115                                  libraries=libraries,
116                                  define_macros=macros,
117                                  swig_cpp=1,
118                                  swig_include=[gdcmSrcDir]
119                                 ),
120                    VTKExtension(name='gdcmPython.vtkgdcmPython',
121                                 sources=vtkSources,
122                                 include_dirs=[gdcmSrcDir,gdcmvtkSrcDir,
123                                               VTK_INCLUDE_DIR],
124                                 libraries=libraries+vtkLibraries,
125                                 define_macros=macros,
126                                 library_dirs=[VTK_LIB_DIR],
127                                 vtkWrapper=vtkWrapper,
128                                ),
129                                                 ],
130       data_files=[(os.path.join(targetDir,gdcmTestDir),
131                    glob.glob(os.path.join(gdcmTestDir,"*.acr"))),
132                   (targetDir,
133                    glob.glob(os.path.join(gdcmSrcDir,"*.py"))),
134                   (os.path.join(targetDir,"Dicts"),
135                    glob.glob(os.path.join(gdcmDictsDir,"*.*"))),
136                   (targetDir,
137                    glob.glob(os.path.join(gdcmSrcDir,"..","gdcmVersion.py"))),
138                   (os.path.join(targetDir,".."),
139                    glob.glob(os.path.join(gdcmSrcDir,"..","gdcmVersion.py"))),
140                 ]
141      )