source: sasview/installers/setup_mac.py @ 67d8b1b

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalcmagnetic_scattrelease-4.2.2ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 67d8b1b was 67d8b1b, checked in by Paul Kienzle <pkienzle@…>, 7 years ago

force inclusion of data loaders in mac package

  • Property mode set to 100644
File size: 6.6 KB
RevLine 
[959eb01]1"""
2This is a setup.py script partly generated by py2applet
3
4Usage:
5    python setup.py py2app
6
7
8NOTES:
[25a42f99]9   12/01/2011: When seeing an error related to pytz.zoneinfo not being found,
10               change the following line in py2app/recipes/matplotlib.py
[959eb01]11               mf.import_hook('pytz.tzinfo', m, ['UTC'])
12   12/05/2011: Needs macholib >= 1.4.3 and py2app >= 0.6.4 to create a 64-bit app
13"""
[d66dbcc]14from __future__ import print_function
15
[959eb01]16import os
17import sys
[0046c6a]18import string
[914ba0a]19
[959eb01]20from distutils.util import get_platform
[914ba0a]21from distutils.filelist import findall
22from distutils.sysconfig import get_python_lib
[d66dbcc]23
24from setuptools import setup
25
[92df9cbd]26# Need the installer dir on the python path to find helper modules
27installer_dir = os.path.abspath(os.path.dirname(__file__))
28if installer_dir != os.path.abspath(os.getcwd()):
[0046c6a]29    raise RuntimeError("Must run setup_exe from the installers directory")
[92df9cbd]30sys.path.append(installer_dir)
[0046c6a]31
32# put the build directory at the front of the path
[959eb01]33root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
[d66dbcc]34platform = '%s-%s'%(get_platform(), sys.version[:3])
[914ba0a]35doc_path = os.path.join(root, 'build', 'lib.'+platform, 'doc')
[0046c6a]36build_path = os.path.join(root, 'sasview-install', 'lib', 'python2.7', 'site-packages')
37#sys.path.insert(0, build_path)
[914ba0a]38
[d66dbcc]39#Extending recursion limit
40sys.setrecursionlimit(10000)
41
[ce81f70]42if len(sys.argv) == 1:
43    sys.argv.append('py2app')
44
[92df9cbd]45import macholib_patch
46
[914ba0a]47from sas.sasview import local_config
48
[959eb01]49ICON = local_config.SetupIconFile_mac
[0046c6a]50data_files = []
[959eb01]51
[0046c6a]52# Include data for supporting packages
[914ba0a]53import periodictable
[0046c6a]54data_files += periodictable.data_files()
55
56import sasmodels
57data_files += sasmodels.data_files()
58
59# Data files for the different perspectives
[914ba0a]60from sas.sasgui.perspectives import fitting
[0046c6a]61data_files += fitting.data_files()
62
[914ba0a]63from sas.sasgui.perspectives import calculator
[0046c6a]64data_files += calculator.data_files()
65
[914ba0a]66from sas.sasgui.perspectives import invariant
[0046c6a]67data_files += invariant.data_files()
[959eb01]68
[0046c6a]69from sas.sasgui import guiframe
70data_files += guiframe.data_files()
[914ba0a]71
72# Copy the config files
[0ccbd36]73sasview_path = os.path.join('..', 'src', 'sas', 'sasview')
[0046c6a]74data_files.append(('.', [os.path.join(sasview_path, 'custom_config.py')]))
75data_files.append(('config', [os.path.join(sasview_path, 'custom_config.py')]))
76data_files.append(('.', [os.path.join(sasview_path, 'local_config.py')]))
[914ba0a]77
[0046c6a]78# Copy the logging config
79sas_path = os.path.join('..', 'src', 'sas')
80data_files.append(('.', [os.path.join(sas_path, 'logging.ini')]))
[914ba0a]81
[0046c6a]82if os.path.isfile("BUILD_NUMBER"):
83    data_files.append(('.', ["BUILD_NUMBER"]))
[914ba0a]84
85# Copying the images directory to the distribution directory.
[92df9cbd]86data_files.append(("images", findall(local_config.icon_path)))
[914ba0a]87
88# Copying the HTML help docs
[92df9cbd]89data_files.append(("media", findall(local_config.media_path)))
[914ba0a]90
91# Copying the sample data user data
[0046c6a]92test_dir = local_config.test_path
[92df9cbd]93for dirpath, dirnames, filenames in os.walk(test_dir):
94    target_dir = os.path.join("test", os.path.relpath(dirpath, test_dir))
95    source_files = [os.path.join(dirpath, f) for f in filenames]
96    data_files.append((target_dir, source_files))
[959eb01]97
98# See if the documentation has been built, and if so include it.
99if os.path.exists(doc_path):
100    for dirpath, dirnames, filenames in os.walk(doc_path):
[92df9cbd]101        target_dir = os.path.join("doc", os.path.relpath(dirpath, doc_path))
102        source_files = [os.path.join(dirpath, f) for f in filenames]
103        data_files.append((target_dir, source_files))
[959eb01]104else:
105    raise Exception("You must first build the documentation before creating an installer.")
106
[0046c6a]107# Copying opencl include files
[92df9cbd]108opencl_source = os.path.join(get_python_lib(), "pyopencl", "cl")
109opencl_target = os.path.join("includes", "pyopencl")
110data_files.append((opencl_target, findall(opencl_source)))
[0046c6a]111
112# Locate libxml2 library
113lib_locs = ['/usr/local/lib', '/usr/lib']
114libxml_path = None
115for item in lib_locs:
116    libxml_path_test = '%s/libxml2.2.dylib' % item
117    if os.path.isfile(libxml_path_test):
118        libxml_path = libxml_path_test
119if libxml_path is None:
120    raise RuntimeError("Could not find libxml2 on the system")
121
[959eb01]122# locate file extensions
123def find_extension():
124    """
125    Describe the extensions that can be read by the current application
126    """
127    try:
[a67ec83]128        extensions = []
[959eb01]129        EXCEPTION_LIST = ['*', '.', '']
130        from sas.sascalc.dataloader.loader import Loader
131        wild_cards = Loader().get_wildcards()
132        for item in wild_cards:
133            #['All (*.*)|*.*']
134            file_type, ext = string.split(item, "|*.", 1)
[a67ec83]135            if ext.strip() not in EXCEPTION_LIST and ext.strip() not in extensions:
136                extensions.append(ext)
137    except Exception:
[959eb01]138        pass
139    try:
140        file_type, ext = string.split(local_config.APPLICATION_WLIST, "|*.", 1)
[a67ec83]141        if ext.strip() not in EXCEPTION_LIST and ext.strip() not in extensions:
142            extensions.append(ext)
143    except Exception:
[959eb01]144        pass
145    try:
146        for item in local_config.PLUGINS_WLIST:
147            file_type, ext = string.split(item, "|*.", 1)
[a67ec83]148            if ext.strip() not in EXCEPTION_LIST and ext.strip() not in extensions:
149                extensions.append(ext)
150    except Exception:
[959eb01]151        pass
152
[a67ec83]153    return extensions
[959eb01]154
155EXTENSIONS_LIST = find_extension()
156
157plist = dict(CFBundleDocumentTypes=[dict(CFBundleTypeExtensions=EXTENSIONS_LIST,
158                                         CFBundleTypeIconFile=ICON,
[25a42f99]159                                         CFBundleTypeName="sasview file",
160                                         CFBundleTypeRole="Shell")],)
[959eb01]161
162#Get version - NB nasty hack. Need to find correct way to give path to installed sasview (AJJ)
163#h5py has been added to packages. It requires hdf5 to be installed separetly
164#
165
[914ba0a]166from sas.sasview import __version__ as VERSION
[959eb01]167APPNAME = "SasView "+VERSION
168DMGNAME = "SasView-"+VERSION+"-MacOSX"
[914ba0a]169APP = ['sasview_gui.py']
[959eb01]170
171EXCLUDES = ['PyQt4', 'sip', 'QtGui']
172
173OPTIONS = {'argv_emulation': True,
[914ba0a]174           'packages': ['lxml', 'numpy', 'scipy', 'pytz', 'encodings',
175                        'encodings', 'matplotlib', 'periodictable',
176                        'reportlab', 'sasmodels', 'pyopencl', 'h5py',
177                       ],
[959eb01]178           'iconfile': ICON,
[914ba0a]179           'frameworks': [libxml_path],
180           'plist': plist,
[959eb01]181           'excludes' : EXCLUDES,
[914ba0a]182          }
[92df9cbd]183
184#import pprint; pprint.pprint(data_files); sys.exit()
[959eb01]185setup(
186    name=APPNAME,
187    app=APP,
[0046c6a]188    data_files=data_files,
[914ba0a]189    include_package_data=True,
[959eb01]190    options={'py2app': OPTIONS},
191    setup_requires=['py2app'],
192)
193
194#Build dmg
[914ba0a]195DMG = "dist/%s.dmg"%DMGNAME
196if os.path.exists(DMG):
197    os.unlink(DMG)
198os.system('cd dist && ../../build_tools/dmgpack.sh "%s" "%s.app"'%(DMGNAME, APPNAME))
[959eb01]199os.system('chmod a+r "%s"'%DMG)
Note: See TracBrowser for help on using the repository browser.