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
Line 
1"""
2    Setup for SasView
3    #TODO: Add checks to see that all the dependencies are on the system
4"""
5import sys
6import os
7from setuptools import setup, Extension
8from distutils.command.build_ext import build_ext
9from distutils.core import Command
10
11sys.path.append("docs/sphinx-docs")
12import build_sphinx
13
14try:
15    from numpy.distutils.misc_util import get_numpy_include_dirs
16    NUMPY_INC = get_numpy_include_dirs()[0]
17except:
18    try:
19        import numpy
20        NUMPY_INC = os.path.join(os.path.split(numpy.__file__)[0], 
21                                 "core","include")
22    except:
23        msg = "\nNumpy is needed to build SasView. "
24        print msg, "Try easy_install numpy.\n  %s" % str(sys.exc_value)
25        sys.exit(0)
26
27# Manage version number ######################################
28import sasview
29VERSION = sasview.__version__
30##############################################################
31
32package_dir = {}
33package_data = {}
34packages = []
35ext_modules = []
36
37# Remove all files that should be updated by this setup
38# We do this here because application updates these files from .sasview
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', 
43                     'testmodel_2.py', 'testmodel.py',
44                     'polynominal5.pyc', 'sph_bessel_jn.pyc', 
45                     'sum_Ap1_1_Ap2.pyc', 'sum_p1_p2.pyc', 
46                     'testmodel_2.pyc', 'testmodel.pyc', 'plugins.log']
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")
50    if os.path.isfile(f_path):
51        os.remove(f_path)
52    f_path = os.path.join(sas_dir, "serialized_cat.json")
53    if os.path.isfile(f_path):
54        os.remove(f_path)
55    f_path = os.path.join(sas_dir, 'config', "custom_config.py")
56    if os.path.isfile(f_path):
57        os.remove(f_path)
58    f_path = os.path.join(sas_dir, 'plugin_models')
59    if os.path.isdir(f_path):
60        for f in os.listdir(f_path): 
61            if f in plugin_model_list:
62                file_path =  os.path.join(f_path, f)
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   
70enable_openmp = False
71
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"
84
85# Options to enable OpenMP
86copt =  {'msvc': ['/openmp'],
87         'mingw32' : ['-fopenmp'],
88         'unix' : ['-fopenmp']}
89lopt =  {'msvc': ['/MANIFEST'],
90         'mingw32' : ['-fopenmp'],
91         'unix' : ['-lgomp']}
92
93# Platform-specific link options
94platform_lopt = {'msvc' : ['/MANIFEST']}
95platform_copt = {}
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
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
119
120    def run(self):
121        pass
122
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       
129        # OpenMP build options
130        if enable_openmp:
131            if copt.has_key(c):
132                for e in self.extensions:
133                    e.extra_compile_args = copt[ c ]
134            if lopt.has_key(c):
135                for e in self.extensions:
136                    e.extra_link_args = lopt[ c ]
137                   
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
143        if platform_copt.has_key(c):
144            for e in self.extensions:
145                e.extra_compile_args = platform_copt[ c ]
146
147
148        build_ext.build_extensions(self)
149
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
166# sas module
167package_dir["sas"] = os.path.join("src", "sas")
168packages.append("sas")
169
170# sas.invariant
171package_dir["sas.invariant"] = os.path.join("src", "sas", "invariant")
172packages.extend(["sas.invariant"])
173
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"])
180# build local plugin
181for d in os.listdir(os.path.join(guiframe_path, "local_perspectives")):
182    if d not in ['.svn','__init__.py', '__init__.pyc']:
183        package_name = "sas.guiframe.local_perspectives." + d
184        packages.append(package_name)
185        package_dir[package_name] = os.path.join(guiframe_path, "local_perspectives", d)
186
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"])
191
192# sas.calculator
193package_dir["sas.calculator"] =os.path.join("src", "sas", "calculator")
194packages.extend(["sas.calculator"])
195   
196# sas.pr
197numpy_incl_path = os.path.join(NUMPY_INC, "numpy")
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",
203                              sources = [os.path.join(srcdir, "Cinvertor.c"),
204                                         os.path.join(srcdir, "invertor.c"),
205                                         ],
206                              include_dirs=[numpy_incl_path],
207                              ) )
208       
209# sas.fit (park integration)
210package_dir["sas.fit"] = os.path.join("src", "sas", "fit")
211packages.append("sas.fit")
212
213# Perspectives
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/*']
231   
232# Data util
233package_dir["data_util"] = os.path.join("src", "sas", "data_util")
234packages.append("sas.data_util")
235
236# Plottools
237package_dir["sas.plottools"] = os.path.join("src", "sas", "plottools")
238packages.append("sas.plottools")
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",
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"),
249                                         ],
250                              ) )
251
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")
261
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:
267    os.makedirs(wrapper_dir)
268sys.path.append(os.path.join("src", "sas", "models", "c_extension", "python_wrapper"))
269from wrapping import generate_wrappers
270generate_wrappers(header_dir = includedir, 
271                  output_dir = model_dir,
272                  c_wrapper_dir = wrapper_dir)
273
274IGNORED_FILES = [".svn"]
275if not os.name=='nt':
276    IGNORED_FILES.extend(["gamma_win.c","winFuncs.c"])
277
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)
302append_file(file_list=model_sources, dir_path=wrapper_dir)
303
304smear_sources = []
305append_file(file_list=smear_sources, dir_path=smear_dir)
306       
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"])
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"))
319
320c_models = [ 
321    Extension("sas.models.sas_extension.c_models",
322        sources=model_sources,                 
323        include_dirs=[
324            igordir, includedir, c_model_dir, numpy_incl_path, cephes_dir
325        ],
326    ),
327
328    # Smearer extension
329    Extension("sas.models.sas_extension.smearer",
330        sources = smearer_sources,
331        include_dirs=[igordir,  smear_dir, numpy_incl_path],
332    ),
333                   
334    Extension("sas.models.sas_extension.smearer2d_helper",
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    ),
341                   
342    Extension("sas.models.sas_extension.sld2i",
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
356# SasView
357
358package_dir["sas.sasview"] = "sasview"
359package_data['sas.sasview'] = ['images/*', 'media/*', 'test/*', 
360                                 'default_categories.json']
361packages.append("sas.sasview")
362
363required = [
364    'bumps>=0.7.5.4', 'periodictable>=1.3.1', 'pyparsing<2.0.0',
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    ]
374
375if os.name=='nt':
376    required.extend(['html5lib', 'reportlab'])
377else:
378    required.extend(['pil'])
379   
380# Set up SasView   
381setup(
382    name="sasview",
383    version = VERSION,
384    description = "SasView application",
385    author = "University of Tennessee",
386    author_email = "sansdanse@gmail.com",
387    url = "http://sasview.org",
388    license = "PSF",
389    keywords = "small-angle x-ray and neutron scattering analysis",
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,
396    zip_safe = False,
397    entry_points = {
398                    'console_scripts':[
399                                       "sasview = sas.sasview.sasview:run",
400                                       ]
401                    },
402    cmdclass = {'build_ext': build_ext_subclass,
403                'docs': BuildSphinxCommand,
404                'disable_openmp': DisableOpenMPCommand}
405    )   
Note: See TracBrowser for help on using the repository browser.