source: sasview/installers/setup_mac.py @ 1d56359

ticket-1094-headless
Last change on this file since 1d56359 was b963b20, checked in by Paul Kienzle <pkienzle@…>, 7 years ago

pull config out of sas.sasgui so it can be used without reference to wx

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