source: sasview/setup.py @ 7a04dbb

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 7a04dbb was 7a04dbb, checked in by krzywon, 9 years ago

Removed the last vestiges of the SANS references and ran run.py. Tested
loading multiple file types and ran fits, p(r) and inversion. Help
windows loaded properly. Saving and loading projects and analyses acted
the same as before the conversion.

All unit tests run by utest_sasview.py passed.

  • Property mode set to 100644
File size: 14.5 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 ######################################
[3a39c2e]28import sasview
29VERSION = sasview.__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
[3a39c2e]38# We do this here because application updates these files from .sasview
[8ab3302]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']
[3a39c2e]47sas_dir = os.path.join(os.path.expanduser("~"),'.sasview')
48if os.path.isdir(sas_dir):
49    f_path = os.path.join(sas_dir, "sasview.log")
[e615a0d]50    if os.path.isfile(f_path):
51        os.remove(f_path)
[3a39c2e]52    f_path = os.path.join(sas_dir, "serialized_cat.json")
[ea5fa58]53    if os.path.isfile(f_path):
54        os.remove(f_path)
[3a39c2e]55    f_path = os.path.join(sas_dir, 'config', "custom_config.py")
[e615a0d]56    if os.path.isfile(f_path):
57        os.remove(f_path)
[3a39c2e]58    f_path = os.path.join(sas_dir, 'plugin_models')
[e615a0d]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   
[7a04dbb]70enable_openmp = False
[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
[5972029]106class DisableOpenMPCommand(Command):
107    description = "The version of MinGW that comes with Anaconda does not come with OpenMP :( "\
108                  "This commands means we can turn off compiling with OpenMP for this or any "\
109                  "other reason."
110    user_options = []
111
112    def initialize_options(self):
113        self.cwd = None
114
115    def finalize_options(self):
116        self.cwd = os.getcwd()
117        global enable_openmp
118        enable_openmp = False
[1829835]119
[5972029]120    def run(self):
121        pass
[ebdb833]122
[13f00a0]123class build_ext_subclass( build_ext ):
124    def build_extensions(self):
125        # Get 64-bitness
126        c = self.compiler.compiler_type
127        print "Compiling with %s (64bit=%s)" % (c, str(is_64bits))
128       
[ebdb833]129        # OpenMP build options
[b30ed8f]130        if enable_openmp:
[13f00a0]131            if copt.has_key(c):
[5980b1a]132                for e in self.extensions:
133                    e.extra_compile_args = copt[ c ]
[13f00a0]134            if lopt.has_key(c):
135                for e in self.extensions:
136                    e.extra_link_args = lopt[ c ]
137                   
[ebdb833]138        # Platform-specific build options
139        if platform_lopt.has_key(c):
140            for e in self.extensions:
141                e.extra_link_args = platform_lopt[ c ]
142
[1829835]143        if platform_copt.has_key(c):
144            for e in self.extensions:
145                e.extra_compile_args = platform_copt[ c ]
146
147
[13f00a0]148        build_ext.build_extensions(self)
[d6bc28cf]149
[968aa6e]150class BuildSphinxCommand(Command):
151    description = "Build Sphinx documentation."
152    user_options = []
153
154    def initialize_options(self):
155        self.cwd = None
156
157    def finalize_options(self):
158        self.cwd = os.getcwd()
159
160    def run(self):       
161        build_sphinx.clean()
162        build_sphinx.retrieve_user_docs()
163        build_sphinx.apidoc()
164        build_sphinx.build()
165
[3a39c2e]166# sas module
167package_dir["sas"] = os.path.join("src", "sas")
168packages.append("sas")
[29e96f3]169
[3a39c2e]170# sas.invariant
171package_dir["sas.invariant"] = os.path.join("src", "sas", "invariant")
172packages.extend(["sas.invariant"])
[d6bc28cf]173
[3a39c2e]174# sas.guiframe
175guiframe_path = os.path.join("src", "sas", "guiframe")
176package_dir["sas.guiframe"] = guiframe_path
177package_dir["sas.guiframe.local_perspectives"] = os.path.join(os.path.join(guiframe_path, "local_perspectives"))
178package_data["sas.guiframe"] = ['images/*', 'media/*']
179packages.extend(["sas.guiframe", "sas.guiframe.local_perspectives"])
[d6bc28cf]180# build local plugin
[5980b1a]181for d in os.listdir(os.path.join(guiframe_path, "local_perspectives")):
182    if d not in ['.svn','__init__.py', '__init__.pyc']:
[3a39c2e]183        package_name = "sas.guiframe.local_perspectives." + d
[3d24489]184        packages.append(package_name)
[5980b1a]185        package_dir[package_name] = os.path.join(guiframe_path, "local_perspectives", d)
[d6bc28cf]186
[3a39c2e]187# sas.dataloader
188package_dir["sas.dataloader"] = os.path.join("src", "sas", "dataloader")
189package_data["sas.dataloader.readers"] = ['defaults.xml','schema/*.xsd']
190packages.extend(["sas.dataloader","sas.dataloader.readers","sas.dataloader.readers.schema"])
[d6bc28cf]191
[3a39c2e]192# sas.calculator
193package_dir["sas.calculator"] =os.path.join("src", "sas", "calculator")
194packages.extend(["sas.calculator"])
[d6bc28cf]195   
[3a39c2e]196# sas.pr
[cb5fb4a]197numpy_incl_path = os.path.join(NUMPY_INC, "numpy")
[3a39c2e]198srcdir  = os.path.join("src", "sas", "pr", "c_extensions")
199package_dir["sas.pr.core"] = srcdir
200package_dir["sas.pr"] = os.path.join("src","sas", "pr")
201packages.extend(["sas.pr","sas.pr.core"])
202ext_modules.append( Extension("sas.pr.core.pr_inversion",
[3d24489]203                              sources = [os.path.join(srcdir, "Cinvertor.c"),
[29e96f3]204                                         os.path.join(srcdir, "invertor.c"),
205                                         ],
206                              include_dirs=[numpy_incl_path],
207                              ) )
[d6bc28cf]208       
[3a39c2e]209# sas.fit (park integration)
210package_dir["sas.fit"] = os.path.join("src", "sas", "fit")
211packages.append("sas.fit")
[3d24489]212
213# Perspectives
[3a39c2e]214package_dir["sas.perspectives"] = os.path.join("src", "sas", "perspectives")
215package_dir["sas.perspectives.pr"] = os.path.join("src", "sas", "perspectives", "pr")
216packages.extend(["sas.perspectives","sas.perspectives.pr"])
217package_data["sas.perspectives.pr"] = ['images/*']
218
219package_dir["sas.perspectives.invariant"] = os.path.join("src", "sas", "perspectives", "invariant")
220packages.extend(["sas.perspectives.invariant"])
221package_data['sas.perspectives.invariant'] = [os.path.join("media",'*')]
222
223package_dir["sas.perspectives.fitting"] = os.path.join("src", "sas", "perspectives", "fitting")
224package_dir["sas.perspectives.fitting.plugin_models"] = os.path.join("src", "sas", "perspectives", "fitting", "plugin_models")
225packages.extend(["sas.perspectives.fitting", 
226                 "sas.perspectives.fitting.plugin_models"])
227package_data['sas.perspectives.fitting'] = ['media/*','plugin_models/*']
228
229packages.extend(["sas.perspectives", "sas.perspectives.calculator"])   
230package_data['sas.perspectives.calculator'] = ['images/*', 'media/*']
[3d24489]231   
[d6bc28cf]232# Data util
[3a39c2e]233package_dir["data_util"] = os.path.join("src", "sas", "data_util")
234packages.append("sas.data_util")
[d6bc28cf]235
236# Plottools
[3a39c2e]237package_dir["sas.plottools"] = os.path.join("src", "sas", "plottools")
238packages.append("sas.plottools")
[d6bc28cf]239
240# Park 1.2.1
241package_dir["park"]="park-1.2.1/park"
242packages.extend(["park"])
243package_data["park"] = ['park-1.2.1/*.txt', 'park-1.2.1/park.epydoc']
244ext_modules.append( Extension("park._modeling",
[8ab3302]245                              sources = [ os.path.join("park-1.2.1", 
246                                                "park", "lib", "modeling.cc"),
247                                         os.path.join("park-1.2.1", 
248                                                "park", "lib", "resolution.c"),
[29e96f3]249                                         ],
250                              ) )
[d6bc28cf]251
[3a39c2e]252# sas models
253includedir  = os.path.join("src", "sas", "models", "include")
254igordir = os.path.join("src", "sas", "models", "c_extension", "libigor")
255cephes_dir = os.path.join("src", "sas", "models", "c_extension", "cephes")
256c_model_dir = os.path.join("src", "sas", "models", "c_extension", "c_models")
257smear_dir  = os.path.join("src", "sas", "models", "c_extension", "c_smearer")
258gen_dir  = os.path.join("src", "sas", "models", "c_extension", "c_gen")
259wrapper_dir  = os.path.join("src", "sas", "models", "c_extension", "python_wrapper", "generated")
260model_dir = os.path.join("src", "sas","models")
[082c565]261
[78f74bd7]262if os.path.isdir(wrapper_dir):
263    for file in os.listdir(wrapper_dir): 
264        file_path =  os.path.join(wrapper_dir, file)
265        os.remove(file_path)
266else:
[0ba3b08]267    os.makedirs(wrapper_dir)
[3a39c2e]268sys.path.append(os.path.join("src", "sas", "models", "c_extension", "python_wrapper"))
[3d24489]269from wrapping import generate_wrappers
270generate_wrappers(header_dir = includedir, 
271                  output_dir = model_dir,
272                  c_wrapper_dir = wrapper_dir)
[2d1b700]273
[101065a]274IGNORED_FILES = [".svn"]
[9cde4cc]275if not os.name=='nt':
[2c63e80e]276    IGNORED_FILES.extend(["gamma_win.c","winFuncs.c"])
[9cde4cc]277
[d6bc28cf]278EXTENSIONS = [".c", ".cpp"]
279
280def append_file(file_list, dir_path):
281    """
282    Add sources file to sources
283    """
284    for f in os.listdir(dir_path):
285        if os.path.isfile(os.path.join(dir_path, f)):
286            _, ext = os.path.splitext(f)
287            if ext.lower() in EXTENSIONS and f not in IGNORED_FILES:
288                file_list.append(os.path.join(dir_path, f)) 
289        elif os.path.isdir(os.path.join(dir_path, f)) and \
290                not f.startswith("."):
291            sub_dir = os.path.join(dir_path, f)
292            for new_f in os.listdir(sub_dir):
293                if os.path.isfile(os.path.join(sub_dir, new_f)):
294                    _, ext = os.path.splitext(new_f)
295                    if ext.lower() in EXTENSIONS and\
296                         new_f not in IGNORED_FILES:
297                        file_list.append(os.path.join(sub_dir, new_f)) 
298       
299model_sources = []
300append_file(file_list=model_sources, dir_path=igordir)
301append_file(file_list=model_sources, dir_path=c_model_dir)
[67424cd]302append_file(file_list=model_sources, dir_path=wrapper_dir)
303
[d6bc28cf]304smear_sources = []
305append_file(file_list=smear_sources, dir_path=smear_dir)
306       
[3a39c2e]307package_dir["sas.models"] = model_dir
308package_dir["sas.models.sas_extension"] = os.path.join("src", "sas", "models", "sas_extension")
309package_data['sas.models'] = [os.path.join('media', "*.*")]
310package_data['sas.models'] += [os.path.join('media','img', "*.*")]
311packages.extend(["sas.models","sas.models.sas_extension"])
[5980b1a]312   
313smearer_sources = [os.path.join(smear_dir, "smearer.cpp"),
314                  os.path.join(smear_dir, "smearer_module.cpp")]
315geni_sources = [os.path.join(gen_dir, "sld2i_module.cpp")]
316if os.name=='nt':
317    smearer_sources.append(os.path.join(igordir, "winFuncs.c"))
318    geni_sources.append(os.path.join(igordir, "winFuncs.c"))
[820df88]319
320c_models = [ 
[3a39c2e]321    Extension("sas.models.sas_extension.c_models",
[820df88]322        sources=model_sources,                 
323        include_dirs=[
324            igordir, includedir, c_model_dir, numpy_incl_path, cephes_dir
325        ],
326    ),
327
328    # Smearer extension
[3a39c2e]329    Extension("sas.models.sas_extension.smearer",
[820df88]330        sources = smearer_sources,
331        include_dirs=[igordir,  smear_dir, numpy_incl_path],
332    ),
[5980b1a]333                   
[3a39c2e]334    Extension("sas.models.sas_extension.smearer2d_helper",
[820df88]335        sources = [
336            os.path.join(smear_dir, "smearer2d_helper_module.cpp"),
337            os.path.join(smear_dir, "smearer2d_helper.cpp"),
338        ],
339        include_dirs=[smear_dir, numpy_incl_path],
340    ),
[5980b1a]341                   
[3a39c2e]342    Extension("sas.models.sas_extension.sld2i",
[820df88]343        sources = [
344            os.path.join(gen_dir, "sld2i_module.cpp"),
345            os.path.join(gen_dir, "sld2i.cpp"),
346            os.path.join(c_model_dir, "libfunc.c"),
347            os.path.join(c_model_dir, "librefl.c"),
348        ],
349        include_dirs=[gen_dir, includedir,  c_model_dir, numpy_incl_path],
350    ),
351]
352
353# Comment out the following to avoid rebuilding all the models
354ext_modules.extend(c_models)
355
[c329f4d]356# SasView
[df7a7e3]357
[3a39c2e]358package_dir["sas.sasview"] = "sasview"
359package_data['sas.sasview'] = ['images/*', 'media/*', 'test/*', 
[27b7acc]360                                 'default_categories.json']
[3a39c2e]361packages.append("sas.sasview")
[d6bc28cf]362
[9f32c57]363required = [
[b44da61]364    'bumps>=0.7.5.4', 'periodictable>=1.3.1', 'pyparsing<2.0.0',
[9f32c57]365
366    # 'lxml>=2.2.2',
367    'lxml', 
368
369    ## The following dependecies won't install automatically, so assume them
370    ## The numbers should be bumped up for matplotlib and wxPython as well.
371    # 'numpy>=1.4.1', 'scipy>=0.7.2', 'matplotlib>=0.99.1.1',
372    # 'wxPython>=2.8.11', 'pil',
373    ]
[213b445]374
[95fe70d]375if os.name=='nt':
[7a211030]376    required.extend(['html5lib', 'reportlab'])
[7f59928e]377else:
[202c1ef]378    required.extend(['pil'])
[30ad350]379   
[5980b1a]380# Set up SasView   
[d6bc28cf]381setup(
[c329f4d]382    name="sasview",
[5548954]383    version = VERSION,
[c329f4d]384    description = "SasView application",
[d6bc28cf]385    author = "University of Tennessee",
386    author_email = "sansdanse@gmail.com",
[5980b1a]387    url = "http://sasview.org",
[d6bc28cf]388    license = "PSF",
[c329f4d]389    keywords = "small-angle x-ray and neutron scattering analysis",
[d6bc28cf]390    download_url = "https://sourceforge.net/projects/sansviewproject/files/",
391    package_dir = package_dir,
392    packages = packages,
393    package_data = package_data,
394    ext_modules = ext_modules,
395    install_requires = required,
[60f7d19]396    zip_safe = False,
[a7b774d]397    entry_points = {
398                    'console_scripts':[
[3a39c2e]399                                       "sasview = sas.sasview.sasview:run",
[a7b774d]400                                       ]
[13f00a0]401                    },
[968aa6e]402    cmdclass = {'build_ext': build_ext_subclass,
[5972029]403                'docs': BuildSphinxCommand,
404                'disable_openmp': DisableOpenMPCommand}
[d113531]405    )   
Note: See TracBrowser for help on using the repository browser.