]> Creatis software - gdcm.git/blobdiff - gdcmPython/setup.py.in
* src/gdcmFile.h : bug fix. Variable type and variable name had same name
[gdcm.git] / gdcmPython / setup.py.in
index 3a8d31c8c304cc15cc0c7073b8646904b07aa675..50ee836b01f032158acb52022602afcdf8b690f6 100644 (file)
-from distutils.core import setup
-import glob, os, sys, shutil
-from distutilsWrapping import *
-from WrapSwig import *
-from WrapVTK import *
+#!/usr/bin/env python
 
-ThisModule      ="gdcmPython"
-gdcmPythonSrcDir=ThisModule
-gdcmSrcDir      ="src"
-gdcmJpeg8SrcDir =os.path.join('src', 'jpeg', 'libijg8')
-gdcmJpeg12SrcDir=os.path.join('src', 'jpeg', 'libijg12')
-gdcmJpgSrcDir   =os.path.join('src', 'jpeg', 'ljpg')
-gdcmvtkSrcDir   ="vtk"
-gdcmDictsDir    ="Dicts"
-gdcmTestDir     ="Test"
+"""
+setup.py for installing the gdcm-Python bindings using distutils.
 
-# Due to a distutils oddity on Unices : see
-# http://aspn.activestate.com/ASPN/Mail/Message/distutils-sig/588325
-if(os.name=='posix'):
-       targetDir=os.path.join('lib','python'+sys.version[:3],'site-packages')
-       libraries=["stdc++"]
-       macros   =[('__STDC_LIMIT_MACROS', '1')]
+Created by Mathieu Malaterre, May 2004.
+Heavily based on setup.py.in from VTK, Prabhu Ramachandran, June 2002.
 
-       VTKPATH="${VTK_DIR}"
-       vtkWrapper="vtkWrapPython"
-else:
-       targetDir=os.path.join('lib','site-packages')
-       libraries=["WSOCK32"]
-       macros   =[]
+"""
 
-       try:
-               VTKPATH=os.environ['VTKPATH']
-       except KeyError,e:
-               err=str(e)
-               print "Environment variable",err[err.rfind(':')+1:],'not defined, '\
-                      'please fix it!'
-               VTKPATH="${VTK_DIR}"
-       vtkWrapper=os.path.join(VTKPATH,"bin","vtkWrapPython")
+import glob, sys, os
+from types import StringType
+from distutils.core import setup
+from distutils.util import change_root, convert_path
+from distutils.command.install_data import install_data
+from distutils.sysconfig import get_config_var
 
-targetDir=os.path.join(targetDir, ThisModule)
+version = "${GDCM_VERSION}",
 
-### Sources section: determination of sources for the extensions:
-# Sources 1a/ The kernel of gdcm itself (which wrapped with Swig)
-#             defines the first extension
-Sources = []
-Sources.extend(glob.glob(os.path.join(gdcmSrcDir,"*.cxx")))
-Sources.append(os.path.join(gdcmPythonSrcDir,"gdcm.i"))
-# Sources 1b/ The kernel of gdcm depends on a jpeg library whose sources are
-#             contained in subdir gdcmJpeg8SrcDir. But within this subdir
-#             some of the C files should not be compiled (refer to
-#             gdcmJpeg8SrcDir/Makefile.am) !
+build_lib_dir = "${LIBRARY_OUTPUT_PATH}"
 
-Jpeg8Sources = glob.glob(os.path.join(gdcmJpeg8SrcDir,"j*.c"))
-Jpeg8SourcesToRemove = ['jmemansi.c', 'jmemname.c', 'jmemdos.c', 'jmemmac.c']
-for Remove in Jpeg8SourcesToRemove:
-   ### Because setup.py is a multiple pass process we need to trap
-   ### the case where the files were already wed out on a previous pass.
-   try:
-      Jpeg8Sources.remove(os.path.join(gdcmJpeg8SrcDir, Remove))
-   except ValueError:
-      continue
-Sources.extend(Jpeg8Sources)
+build_bin_dir = "${EXECUTABLE_OUTPUT_PATH}"
 
-Jpeg12Sources = glob.glob(os.path.join(gdcmJpeg12SrcDir,"j*.c"))
-Jpeg12SourcesToRemove = ['jmemansi12.c', 'jmemname12.c', 'jmemdos12.c', 'jmemmac12.c']
-for Remove in Jpeg12SourcesToRemove:
-   ### Because setup.py is a multiple pass process we need to trap
-   ### the case where the files were already wed out on a previous pass.
-   try:
-      Jpeg12Sources.remove(os.path.join(gdcmJpeg12SrcDir, Remove))
-   except ValueError:
-      continue
-Sources.extend(Jpeg12Sources)
+gdcmDictsDir = "${GDCM_SOURCE_DIR}"
+gdcmDictsDir = os.path.join( gdcmDictsDir, "Dicts" )
 
-#For 'xmedcon' Jpeg Lossless
-JpgSources =glob.glob(os.path.join(gdcmJpgSrcDir,"*.c"))
-Sources.extend(JpgSources)  
+def get_libs():
+    """Returns a list of libraries to be installed.  """
+    libs = []
+    if os.name == 'posix':
+        libs = glob.glob(os.path.abspath(os.path.join(
+            build_lib_dir, '_gdcm' + get_config_var('SO'))))
+        libs = libs + glob.glob(os.path.abspath(os.path.join(
+            build_lib_dir, 'libvtkgdcmPython' + get_config_var('SO'))))
+    else:
+        d = os.path.normpath(build_lib_dir)
+        if not os.path.isfile(os.path.join(d, 'libvtkgdcmPython.dll')):
+            d = os.path.normpath(os.path.join(build_lib_dir, 'release'))
+            
+        libs = glob.glob(os.path.join(d, 'vtk*Python.dll'))
 
-# Sources 2/ The second extension contains the VTK classes (which we wrap
-#            with the vtk wrappers):
-VTK_INCLUDE_DIR=os.path.join(VTKPATH,"include","vtk")
-VTK_LIB_DIR=os.path.join(VTKPATH,"lib","vtk")
-vtkSources = []
-vtkSources.extend(glob.glob(os.path.join(gdcmvtkSrcDir,'vtk*.cxx')))
-vtkSources.extend(glob.glob(os.path.join(gdcmSrcDir,'*.cxx')))
-vtkSources.extend(Jpeg8Sources)
-vtkSources.extend(Jpeg12Sources)
-vtkSources.extend(JpgSources)
+    return libs
 
-vtkLibraries=["vtkCommon","vtkCommonPython",
-              "vtkIO","vtkIOPython",
-              "vtkFiltering","vtkFilteringPython"]
+class my_install_data (install_data):
+    def finalize_options (self):
+        """Needed to make this thing work properly."""
+        self.set_undefined_options ('install',
+                                    ('install_lib', 'install_dir'),
+                                    ('root', 'root'),
+                                    ('force', 'force'),
+                                    )
+    def run (self):
+        """Taken shamlessly from VTK source"""
+        self.mkpath(self.install_dir)
+        for f in self.data_files:
+            if type(f) == StringType:
+                # it's a simple file, so copy it
+                f = convert_path(f)
+                if self.warn_dir:
+                    self.warn("setup script did not provide a directory for "
+                              "'%s' -- installing right in '%s'" %
+                              (f, self.install_dir))
+                (out, _) = self.copy_file(f, self.install_dir)
+                self.outfiles.append(out)
+            else:
+                # it's a tuple with path to install to and a list of files
+                dir = convert_path(f[0])
+                if not os.path.isabs(dir):
+                    dir = os.path.join(self.install_dir, dir)
+                elif self.root:
+                    dir = change_root(self.root, dir)
+                self.mkpath(dir)
+                for data in f[1]:
+                    data = convert_path(data)
+                    (out, _) = self.copy_file(data, dir)
+                    self.outfiles.append(out)
+      
+# I should not hardcode 'bin' since user could build in none default path...
+# Well keep finger cross it won't happen :P
 
-##### 
-setup(name=ThisModule,
-      version="${GDCM_VERSION_MAJOR}.${GDCM_VERSION_MINOR}",
-      description="...",
-      author="frog",
-      author_email="frog@creatis.insa-lyon.fr",
-      url="http://www.creatis.insa-lyon.fr/Public/Gdcm/",
-      packages=[ '.',
-                 gdcmPythonSrcDir,
-                 gdcmPythonSrcDir + '.demo' ],
-      cmdclass={'build_ext':build_extWrap}, # redirects default build_ext
-      ext_modules=[SwigExtension(name='_gdcm',
-                                 sources=Sources,
-                                 include_dirs=[gdcmSrcDir,gdcmJpeg8SrcDir,
-                                               gdcmJpeg12SrcDir,gdcmJpgSrcDir],
-                                 libraries=libraries,
-                                 define_macros=macros,
-                                 swig_cpp=1,
-                                 swig_include=[gdcmSrcDir]
-                                ),
-                                VTKExtension(name='gdcmPython.vtkgdcmPython',
-                                sources=vtkSources,
-                                include_dirs=[gdcmSrcDir,gdcmvtkSrcDir,
-                                              VTK_INCLUDE_DIR],
-                                libraries=libraries+vtkLibraries,
-                                define_macros=macros,
-                                library_dirs=[VTK_LIB_DIR],
-                                vtkWrapper=vtkWrapper,
-                               ),
-                                               ],
-      data_files=[(os.path.join(targetDir,gdcmTestDir),
-                   glob.glob(os.path.join(gdcmTestDir,"*.acr"))),
-                  (os.path.join(targetDir,"Dicts"),
-                   glob.glob(os.path.join(gdcmDictsDir,"*.*"))),
-                ]
+setup(name             = "gdcmPython",
+      version          = "${GDCM_VERSION}",
+      description      = "Grass Root DiCoM",
+      author           = "frog",
+      author_email     = "frog@creatis.insa-lyon.fr",
+      maintainer       = "GDCM Developers",
+      maintainer_email = "dcmlib@creatis.insa-lyon.fr",
+      license          = "BSD",
+      long_description = "Library dedicated to reading/parsing and writing Dicom files",
+      url              = "http://www.creatis.insa-lyon.fr/Public/Gdcm/",
+      platforms        = ['Any'],
+      cmdclass          = {'install_data': my_install_data},
+      packages         = ['gdcmPython'],
+      package_dir      = {'gdcmPython' : 'bin'},
+      data_files       = [ ('gdcmPython', get_libs() ), ('.', ['gdcmPython/gdcm.pth']) ],
      )
+