forked from vasole/pymca
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpy2app_setup.py
executable file
·115 lines (105 loc) · 3.86 KB
/
py2app_setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#
# These Python modules have been developed by V.A. Sole, from the European
# Synchrotron Radiation Facility (ESRF) to build a frozen version of PyMca.
# Given the nature of this work, these module can be considered public domain.
# Therefore redistribution and use in source and binary forms, with or without
# modification, are permitted provided the following disclaimer is accepted:
#
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND THE ESRF ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) AND/OR THE ESRF BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
"""
Script for building the PyMca bundle.
For a distributable application Platypus is needed
Usage:
python py2app_setup.py py2app
"""
from distutils.core import setup
import py2app
import os
import sys
#force a clean build
os.system("/bin/rm -rf dist")
os.system("/bin/rm -rf build")
os.system("/bin/rm -rf *.pyc")
BUNDLE_ICON = os.path.join(os.path.abspath('icons'), 'PyMca.icns')
#obtain the current PyMca version from the source file
ffile = open(os.path.join('PyMca5', '__init__.py'), 'r').readlines()
for line in ffile:
if line.startswith('__version__'):
#remove spaces and split
__version__ = "%s" % line.replace(' ','').split("=")[-1][:-1]
#remove " or ' present
__version__ = __version__[1:-1]
break
PyMcaInstallationDir = os.path.abspath("build")
PyMcaDir = os.path.join(PyMcaInstallationDir, "PyMca5")
#make sure PyMca is freshly built
cmd = "python setup.py install --install-lib %s --install-scripts /tmp" % PyMcaInstallationDir
if os.system(cmd):
print "Error building PyMca"
sys.exit(1)
# awful workaround because py2app picks PyMca form the source directory
os.chdir(PyMcaInstallationDir)
sys.path.insert(0, PyMcaInstallationDir)
pymcapath = PyMcaDir
application=os.path.join(pymcapath, 'PyMcaGui','pymca', "PyMcaMain.py")
#The options below are equivalent to running from the command line
#python py2app_setup.py py2app --packages=matplotlib,ctypes,h5py,Object3D
#probably matplotlib and PyOpenGL are properly detected by py2app
PACKAGES = ['fisx', 'h5py','OpenGL','ctypes','matplotlib','hdf5plugin','logging', 'PyMca5']
try:
import mdp
PACKAGES.append('mdp')
except:
pass
try:
import pyopencl
PACKAGES.append('pyopencl')
except:
pass
PY2APP_OPTIONS = {'packages':PACKAGES}
if os.path.exists(BUNDLE_ICON):
PY2APP_OPTIONS['iconfile'] = BUNDLE_ICON
else:
BUNDLE_ICON = None
setup(
app=[application],
options={'py2app':PY2APP_OPTIONS}
)
# move to the proper place
os.system("mv -f ./dist ../dist")
os.chdir(os.path.dirname(PyMcaInstallationDir))
#Command line call to Platypus ...
platypusFile = '/usr/local/bin/platypus'
if os.path.exists(platypusFile):
import subprocess
args = [platypusFile,
'-R',
'-a',
'PyMca%s' % __version__,
'-o',
'Progress Bar',
'-p',
'/bin/bash',
'-V',
'%s' % __version__,
'-I',
'ESRF.sole.PyMca%s' % __version__,
'-y', #force overwrite
'-f',
os.path.join(os.getcwd(),'dist', 'PyMcaMain.app')]
if BUNDLE_ICON is not None:
args.append('-i')
args.append(BUNDLE_ICON)
args.append(os.path.join(os.getcwd(), 'PlatypusScript'))
process = subprocess.call(args)