X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=gdcmPython%2Fsetup.py.in;h=50ee836b01f032158acb52022602afcdf8b690f6;hb=fefb49a4c17b2c2134cf23edf1ecf230c5e309d1;hp=e5e2988002fbb140d3fe42e80edfaf25672c72ea;hpb=f94f85b5578c5a8575f9cadc3702766defd9d707;p=gdcm.git diff --git a/gdcmPython/setup.py.in b/gdcmPython/setup.py.in index e5e29880..50ee836b 100644 --- a/gdcmPython/setup.py.in +++ b/gdcmPython/setup.py.in @@ -1,129 +1,97 @@ -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']) ], ) +