source: sasview/setup.py @ e497527

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since e497527 was b44da61, checked in by pkienzle, 10 years ago

bump bumps required version to 0.7.5.4 so that fits to sld parameters will work

  • Property mode set to 100644
File size: 14.1 KB
RevLine 
[d6bc28cf]1"""
[c329f4d]2    Setup for SasView
[d6bc28cf]3    #TODO: Add checks to see that all the dependencies are on the system
4"""
[8ab3302]5import sys
[d6bc28cf]6import os
[5980b1a]7from setuptools import setup, Extension
[2cef9d3]8from distutils.command.build_ext import build_ext
[968aa6e]9from distutils.core import Command
10
11sys.path.append("docs/sphinx-docs")
12import build_sphinx
[2cef9d3]13
[e13ef7f]14try:
15    from numpy.distutils.misc_util import get_numpy_include_dirs
16    NUMPY_INC = get_numpy_include_dirs()[0]
17except:
[cb5fb4a]18    try:
[e13ef7f]19        import numpy
[8ab3302]20        NUMPY_INC = os.path.join(os.path.split(numpy.__file__)[0], 
21                                 "core","include")
[cb5fb4a]22    except:
[c329f4d]23        msg = "\nNumpy is needed to build SasView. "
[8ab3302]24        print msg, "Try easy_install numpy.\n  %s" % str(sys.exc_value)
[e13ef7f]25        sys.exit(0)
[d6bc28cf]26
[5548954]27# Manage version number ######################################
[a134fc6]28import sansview
29VERSION = sansview.__version__
[5548954]30##############################################################
31
[d6bc28cf]32package_dir = {}
33package_data = {}
34packages = []
35ext_modules = []
36
[8ab3302]37# Remove all files that should be updated by this setup
38# We do this here because application updates these files from .sansview
39# except when there is no such file
40# Todo : make this list generic
41plugin_model_list = ['polynominal5.py', 'sph_bessel_jn.py', 
42                     'sum_Ap1_1_Ap2.py', 'sum_p1_p2.py', 
[b30ed8f]43                     'testmodel_2.py', 'testmodel.py',
44                     'polynominal5.pyc', 'sph_bessel_jn.pyc', 
45                     'sum_Ap1_1_Ap2.pyc', 'sum_p1_p2.pyc', 
[eb32080e]46                     'testmodel_2.pyc', 'testmodel.pyc', 'plugins.log']
[c329f4d]47sans_dir = os.path.join(os.path.expanduser("~"),'.sasview')
[8ab3302]48if os.path.isdir(sans_dir):
[c329f4d]49    f_path = os.path.join(sans_dir, "sasview.log")
[e615a0d]50    if os.path.isfile(f_path):
51        os.remove(f_path)
[27b7acc]52    f_path = os.path.join(sans_dir, "serialized_cat.json")
[ea5fa58]53    if os.path.isfile(f_path):
54        os.remove(f_path)
[e615a0d]55    f_path = os.path.join(sans_dir, 'config', "custom_config.py")
56    if os.path.isfile(f_path):
57        os.remove(f_path)
58    f_path = os.path.join(sans_dir, 'plugin_models')
59    if os.path.isdir(f_path):
[5980b1a]60        for f in os.listdir(f_path): 
61            if f in plugin_model_list:
62                file_path =  os.path.join(f_path, f)
[e615a0d]63                os.remove(file_path)
64                   
65# 'sys.maxsize' and 64bit: Not supported for python2.5
66is_64bits = False
67if sys.version_info >= (2, 6):
68    is_64bits = sys.maxsize > 2**32
69   
[9729a6d]70enable_openmp = False if "--disable-open-mp" in sys.argv else True
[e79a467]71
[f468791]72if sys.platform =='darwin':
73    if not is_64bits:
74        # Disable OpenMP
75        enable_openmp = False
76    else:
77        # Newer versions of Darwin don't support openmp
78        try:
79            darwin_ver = int(os.uname()[2].split('.')[0])
80            if darwin_ver >= 12:
81                enable_openmp = False
82        except:
83            print "PROBLEM determining Darwin version"
[b30ed8f]84
85# Options to enable OpenMP
86copt =  {'msvc': ['/openmp'],
87         'mingw32' : ['-fopenmp'],
88         'unix' : ['-fopenmp']}
89lopt =  {'msvc': ['/MANIFEST'],
90         'mingw32' : ['-fopenmp'],
91         'unix' : ['-lgomp']}
[13f00a0]92
[ebdb833]93# Platform-specific link options
94platform_lopt = {'msvc' : ['/MANIFEST']}
[307fa4f]95platform_copt = {}
[b9c8fc5]96
97# Set copts to get compile working on OS X >= 10.9 using clang
98if sys.platform =='darwin':
99    try:
100        darwin_ver = int(os.uname()[2].split('.')[0])
101        if darwin_ver >= 13:
102            platform_copt = {'unix' : ['-Wno-error=unused-command-line-argument-hard-error-in-future']}
103    except:
104        print "PROBLEM determining Darwin version"
105
[1829835]106
[ebdb833]107
[13f00a0]108class build_ext_subclass( build_ext ):
109    def build_extensions(self):
110        # Get 64-bitness
111        c = self.compiler.compiler_type
112        print "Compiling with %s (64bit=%s)" % (c, str(is_64bits))
113       
[ebdb833]114        # OpenMP build options
[b30ed8f]115        if enable_openmp:
[13f00a0]116            if copt.has_key(c):
[5980b1a]117                for e in self.extensions:
118                    e.extra_compile_args = copt[ c ]
[13f00a0]119            if lopt.has_key(c):
120                for e in self.extensions:
121                    e.extra_link_args = lopt[ c ]
122                   
[ebdb833]123        # Platform-specific build options
124        if platform_lopt.has_key(c):
125            for e in self.extensions:
126                e.extra_link_args = platform_lopt[ c ]
127
[1829835]128        if platform_copt.has_key(c):
129            for e in self.extensions:
130                e.extra_compile_args = platform_copt[ c ]
131
132
[13f00a0]133        build_ext.build_extensions(self)
[d6bc28cf]134
[968aa6e]135class BuildSphinxCommand(Command):
136    description = "Build Sphinx documentation."
137    user_options = []
138
139    def initialize_options(self):
140        self.cwd = None
141
142    def finalize_options(self):
143        self.cwd = os.getcwd()
144
145    def run(self):       
146        build_sphinx.clean()
147        build_sphinx.retrieve_user_docs()
148        build_sphinx.apidoc()
149        build_sphinx.build()
150
[5980b1a]151# sans module
152package_dir["sans"] = os.path.join("src", "sans")
153packages.append("sans")
[29e96f3]154
[d6bc28cf]155# sans.invariant
[3d24489]156package_dir["sans.invariant"] = os.path.join("src", "sans", "invariant")
157packages.extend(["sans.invariant"])
[d6bc28cf]158
159# sans.guiframe
[3d24489]160guiframe_path = os.path.join("src", "sans", "guiframe")
161package_dir["sans.guiframe"] = guiframe_path
162package_dir["sans.guiframe.local_perspectives"] = os.path.join(os.path.join(guiframe_path, "local_perspectives"))
163package_data["sans.guiframe"] = ['images/*', 'media/*']
164packages.extend(["sans.guiframe", "sans.guiframe.local_perspectives"])
[d6bc28cf]165# build local plugin
[5980b1a]166for d in os.listdir(os.path.join(guiframe_path, "local_perspectives")):
167    if d not in ['.svn','__init__.py', '__init__.pyc']:
168        package_name = "sans.guiframe.local_perspectives." + d
[3d24489]169        packages.append(package_name)
[5980b1a]170        package_dir[package_name] = os.path.join(guiframe_path, "local_perspectives", d)
[d6bc28cf]171
172# sans.dataloader
[3d24489]173package_dir["sans.dataloader"] = os.path.join("src", "sans", "dataloader")
[eda8972]174package_data["sans.dataloader.readers"] = ['defaults.xml','schema/*.xsd']
175packages.extend(["sans.dataloader","sans.dataloader.readers","sans.dataloader.readers.schema"])
[d6bc28cf]176
177# sans.calculator
[3d24489]178package_dir["sans.calculator"] =os.path.join("src", "sans", "calculator")
179packages.extend(["sans.calculator"])
[d6bc28cf]180   
181# sans.pr
[cb5fb4a]182numpy_incl_path = os.path.join(NUMPY_INC, "numpy")
[b8a8e4e]183srcdir  = os.path.join("src", "sans", "pr", "c_extensions")
[3d24489]184package_dir["sans.pr.core"] = srcdir
185package_dir["sans.pr"] = os.path.join("src","sans", "pr")
186packages.extend(["sans.pr","sans.pr.core"])
[d6bc28cf]187ext_modules.append( Extension("sans.pr.core.pr_inversion",
[3d24489]188                              sources = [os.path.join(srcdir, "Cinvertor.c"),
[29e96f3]189                                         os.path.join(srcdir, "invertor.c"),
190                                         ],
191                              include_dirs=[numpy_incl_path],
192                              ) )
[d6bc28cf]193       
194# sans.fit (park integration)
[3d24489]195package_dir["sans.fit"] = os.path.join("src", "sans", "fit")
196packages.append("sans.fit")
197
198# Perspectives
199package_dir["sans.perspectives"] = os.path.join("src", "sans", "perspectives")
200package_dir["sans.perspectives.pr"] = os.path.join("src", "sans", "perspectives", "pr")
201packages.extend(["sans.perspectives","sans.perspectives.pr"])
202package_data["sans.perspectives.pr"] = ['images/*']
203
204package_dir["sans.perspectives.invariant"] = os.path.join("src", "sans", "perspectives", "invariant")
205packages.extend(["sans.perspectives.invariant"])
206package_data['sans.perspectives.invariant'] = [os.path.join("media",'*')]
207
208package_dir["sans.perspectives.fitting"] = os.path.join("src", "sans", "perspectives", "fitting")
209package_dir["sans.perspectives.fitting.plugin_models"] = os.path.join("src", "sans", "perspectives", "fitting", "plugin_models")
210packages.extend(["sans.perspectives.fitting", 
211                 "sans.perspectives.fitting.plugin_models"])
[8ca5890]212package_data['sans.perspectives.fitting'] = ['media/*','plugin_models/*']
[3d24489]213
214packages.extend(["sans.perspectives", "sans.perspectives.calculator"])   
215package_data['sans.perspectives.calculator'] = ['images/*', 'media/*']
216   
[d6bc28cf]217# Data util
[76263a5]218package_dir["data_util"] = os.path.join("src", "sans", "data_util")
219packages.append("sans.data_util")
[d6bc28cf]220
221# Plottools
[f468791]222package_dir["sans.plottools"] = os.path.join("src", "sans", "plottools")
223packages.append("sans.plottools")
[d6bc28cf]224
225# Park 1.2.1
226package_dir["park"]="park-1.2.1/park"
227packages.extend(["park"])
228package_data["park"] = ['park-1.2.1/*.txt', 'park-1.2.1/park.epydoc']
229ext_modules.append( Extension("park._modeling",
[8ab3302]230                              sources = [ os.path.join("park-1.2.1", 
231                                                "park", "lib", "modeling.cc"),
232                                         os.path.join("park-1.2.1", 
233                                                "park", "lib", "resolution.c"),
[29e96f3]234                                         ],
235                              ) )
[d6bc28cf]236
237# Sans models
[b8a8e4e]238includedir  = os.path.join("src", "sans", "models", "include")
[79d5b6c]239igordir = os.path.join("src", "sans", "models", "c_extension", "libigor")
240cephes_dir = os.path.join("src", "sans", "models", "c_extension", "cephes")
241c_model_dir = os.path.join("src", "sans", "models", "c_extension", "c_models")
242smear_dir  = os.path.join("src", "sans", "models", "c_extension", "c_smearer")
243gen_dir  = os.path.join("src", "sans", "models", "c_extension", "c_gen")
244wrapper_dir  = os.path.join("src", "sans", "models", "c_extension", "python_wrapper", "generated")
[b8a8e4e]245model_dir = os.path.join("src", "sans","models")
[082c565]246
[78f74bd7]247if os.path.isdir(wrapper_dir):
248    for file in os.listdir(wrapper_dir): 
249        file_path =  os.path.join(wrapper_dir, file)
250        os.remove(file_path)
251else:
[0ba3b08]252    os.makedirs(wrapper_dir)
[79d5b6c]253sys.path.append(os.path.join("src", "sans", "models", "c_extension", "python_wrapper"))
[3d24489]254from wrapping import generate_wrappers
255generate_wrappers(header_dir = includedir, 
256                  output_dir = model_dir,
257                  c_wrapper_dir = wrapper_dir)
[2d1b700]258
[101065a]259IGNORED_FILES = [".svn"]
[9cde4cc]260if not os.name=='nt':
[2c63e80e]261    IGNORED_FILES.extend(["gamma_win.c","winFuncs.c"])
[9cde4cc]262
[d6bc28cf]263EXTENSIONS = [".c", ".cpp"]
264
265def append_file(file_list, dir_path):
266    """
267    Add sources file to sources
268    """
269    for f in os.listdir(dir_path):
270        if os.path.isfile(os.path.join(dir_path, f)):
271            _, ext = os.path.splitext(f)
272            if ext.lower() in EXTENSIONS and f not in IGNORED_FILES:
273                file_list.append(os.path.join(dir_path, f)) 
274        elif os.path.isdir(os.path.join(dir_path, f)) and \
275                not f.startswith("."):
276            sub_dir = os.path.join(dir_path, f)
277            for new_f in os.listdir(sub_dir):
278                if os.path.isfile(os.path.join(sub_dir, new_f)):
279                    _, ext = os.path.splitext(new_f)
280                    if ext.lower() in EXTENSIONS and\
281                         new_f not in IGNORED_FILES:
282                        file_list.append(os.path.join(sub_dir, new_f)) 
283       
284model_sources = []
285append_file(file_list=model_sources, dir_path=igordir)
286append_file(file_list=model_sources, dir_path=c_model_dir)
[67424cd]287append_file(file_list=model_sources, dir_path=wrapper_dir)
288
[d6bc28cf]289smear_sources = []
290append_file(file_list=smear_sources, dir_path=smear_dir)
291       
[5980b1a]292package_dir["sans.models"] = model_dir
293package_dir["sans.models.sans_extension"] = os.path.join("src", "sans", "models", "sans_extension")
294package_data['sans.models'] = [os.path.join('media', "*.*")]
295package_data['sans.models'] += [os.path.join('media','img', "*.*")]
296packages.extend(["sans.models","sans.models.sans_extension"])
297   
298smearer_sources = [os.path.join(smear_dir, "smearer.cpp"),
299                  os.path.join(smear_dir, "smearer_module.cpp")]
300geni_sources = [os.path.join(gen_dir, "sld2i_module.cpp")]
301if os.name=='nt':
302    smearer_sources.append(os.path.join(igordir, "winFuncs.c"))
303    geni_sources.append(os.path.join(igordir, "winFuncs.c"))
[820df88]304
305c_models = [ 
306    Extension("sans.models.sans_extension.c_models",
307        sources=model_sources,                 
308        include_dirs=[
309            igordir, includedir, c_model_dir, numpy_incl_path, cephes_dir
310        ],
311    ),
312
313    # Smearer extension
314    Extension("sans.models.sans_extension.smearer",
315        sources = smearer_sources,
316        include_dirs=[igordir,  smear_dir, numpy_incl_path],
317    ),
[5980b1a]318                   
[820df88]319    Extension("sans.models.sans_extension.smearer2d_helper",
320        sources = [
321            os.path.join(smear_dir, "smearer2d_helper_module.cpp"),
322            os.path.join(smear_dir, "smearer2d_helper.cpp"),
323        ],
324        include_dirs=[smear_dir, numpy_incl_path],
325    ),
[5980b1a]326                   
[820df88]327    Extension("sans.models.sans_extension.sld2i",
328        sources = [
329            os.path.join(gen_dir, "sld2i_module.cpp"),
330            os.path.join(gen_dir, "sld2i.cpp"),
331            os.path.join(c_model_dir, "libfunc.c"),
332            os.path.join(c_model_dir, "librefl.c"),
333        ],
334        include_dirs=[gen_dir, includedir,  c_model_dir, numpy_incl_path],
335    ),
336]
337
338# Comment out the following to avoid rebuilding all the models
339ext_modules.extend(c_models)
340
[c329f4d]341# SasView
[df7a7e3]342
[d6bc28cf]343package_dir["sans.sansview"] = "sansview"
[ea5fa58]344package_data['sans.sansview'] = ['images/*', 'media/*', 'test/*', 
[27b7acc]345                                 'default_categories.json']
[d6bc28cf]346packages.append("sans.sansview")
347
[9f32c57]348required = [
[b44da61]349    'bumps>=0.7.5.4', 'periodictable>=1.3.1', 'pyparsing<2.0.0',
[9f32c57]350
351    # 'lxml>=2.2.2',
352    'lxml', 
353
354    ## The following dependecies won't install automatically, so assume them
355    ## The numbers should be bumped up for matplotlib and wxPython as well.
356    # 'numpy>=1.4.1', 'scipy>=0.7.2', 'matplotlib>=0.99.1.1',
357    # 'wxPython>=2.8.11', 'pil',
358    ]
[213b445]359
[95fe70d]360if os.name=='nt':
[7a211030]361    required.extend(['html5lib', 'reportlab'])
[7f59928e]362else:
[202c1ef]363    required.extend(['pil'])
[30ad350]364   
[5980b1a]365# Set up SasView   
[d6bc28cf]366setup(
[c329f4d]367    name="sasview",
[5548954]368    version = VERSION,
[c329f4d]369    description = "SasView application",
[d6bc28cf]370    author = "University of Tennessee",
371    author_email = "sansdanse@gmail.com",
[5980b1a]372    url = "http://sasview.org",
[d6bc28cf]373    license = "PSF",
[c329f4d]374    keywords = "small-angle x-ray and neutron scattering analysis",
[d6bc28cf]375    download_url = "https://sourceforge.net/projects/sansviewproject/files/",
376    package_dir = package_dir,
377    packages = packages,
378    package_data = package_data,
379    ext_modules = ext_modules,
380    install_requires = required,
[60f7d19]381    zip_safe = False,
[a7b774d]382    entry_points = {
383                    'console_scripts':[
[9a3b713]384                                       "sasview = sans.sansview.sansview:run",
[a7b774d]385                                       ]
[13f00a0]386                    },
[968aa6e]387    cmdclass = {'build_ext': build_ext_subclass,
388                'docs': BuildSphinxCommand}
[d113531]389    )   
Note: See TracBrowser for help on using the repository browser.