New py2app based distribution of Cura for Mac OS X.
parent
377ea03c15
commit
0e6b9fd67e
|
@ -18,3 +18,5 @@ printrun.bat
|
|||
cura.bat
|
||||
object-mirror.png
|
||||
object.png
|
||||
build/*
|
||||
dist/*
|
||||
|
|
|
@ -1,61 +0,0 @@
|
|||
import sys, os, zipfile
|
||||
try:
|
||||
import cx_Freeze
|
||||
except:
|
||||
print "ERROR: You need cx-Freeze installed to build this package"
|
||||
sys.exit(1)
|
||||
|
||||
freezeVersion = map(int, cx_Freeze.version.split('.'))
|
||||
if freezeVersion[0] < 4 or freezeVersion[0] == 4 and freezeVersion[1] < 2:
|
||||
print "ERROR: Your cx-Freeze version is too old to use with Cura."
|
||||
sys.exit(1)
|
||||
|
||||
sys.path.append(os.path.abspath('cura_sf'))
|
||||
|
||||
# Dependencies are automatically detected, but it might need fine tuning.
|
||||
build_exe_options = {
|
||||
"silent": True,
|
||||
"packages": [
|
||||
'encodings.utf_8',
|
||||
"OpenGL", "OpenGL.arrays", "OpenGL.platform", "OpenGL.GLU",
|
||||
], "excludes": [
|
||||
'Tkinter', 'tcl', 'cura_sf', 'fabmetheus_utilities', 'skeinforge_application', 'numpy',
|
||||
], "include_files": [
|
||||
('images', 'images'),
|
||||
], "build_exe": 'freeze_build'}
|
||||
|
||||
# GUI applications require a different base on Windows (the default is for a
|
||||
# console application).
|
||||
base = None
|
||||
if sys.platform == "win32":
|
||||
base = "Win32GUI"
|
||||
|
||||
cx_Freeze.setup( name = "Cura",
|
||||
version = "RC5",
|
||||
description = "Cura",
|
||||
options = {"build_exe": build_exe_options},
|
||||
executables = [cx_Freeze.Executable("cura.py", base=base)])
|
||||
|
||||
m = cx_Freeze.ModuleFinder(excludes=["gui"])
|
||||
m.IncludeFile(os.path.abspath("cura.py"))
|
||||
m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/profile_plugins/extrusion.py"))
|
||||
m.IncludeFile(os.path.abspath("cura_sf/fabmetheus_utilities/fabmetheus_tools/interpret_plugins/stl.py"))
|
||||
m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/export_plugins/static_plugins/gcode_small.py"))
|
||||
for name in os.listdir("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins"):
|
||||
if name.endswith('.py'):
|
||||
m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/" + name))
|
||||
m.ReportMissingModules()
|
||||
cwd = os.path.abspath(".")
|
||||
|
||||
z = zipfile.ZipFile("freeze_build/cura_sf.zip", "w", zipfile.ZIP_DEFLATED)
|
||||
for mod in m.modules:
|
||||
if mod.file != None and mod.file.startswith(cwd):
|
||||
if mod.file[len(cwd)+1:] == "cura.py":
|
||||
z.write(mod.file[len(cwd)+1:], "__main__.py")
|
||||
else:
|
||||
z.write(mod.file[len(cwd)+1:])
|
||||
z.write('cura_sf/fabmetheus_utilities/templates/layer_template.svg')
|
||||
z.write('cura_sf/fabmetheus_utilities/version.txt')
|
||||
z.write('__init__.py')
|
||||
z.close()
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleName</key>
|
||||
<string>Cura</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Cura 12.10</string>
|
||||
<key>CFBundleIdentifer</key>
|
||||
<string>daid.cura</string>
|
||||
<key>CFBundleIconFile></key>
|
||||
<string>Resources/Cura.icns</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>12.10</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>Cura</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,124 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
SCRIPTDIR=`dirname "$0"`
|
||||
RESDIR=${SCRIPTDIR}/../Resources/
|
||||
PKGDIR=${SCRIPTDIR}/../Pkgs/
|
||||
|
||||
#run the path_helper to set the $PATH for accessing python
|
||||
if [ -x /usr/libexec/path_helper ]; then
|
||||
eval `/usr/libexec/path_helper -s`
|
||||
fi
|
||||
|
||||
displayMessage()
|
||||
{
|
||||
/usr/bin/osascript > /dev/null <<-EOF
|
||||
tell application "System Events"
|
||||
activate
|
||||
display dialog "$@" buttons {"Ok"}
|
||||
end tell
|
||||
EOF
|
||||
}
|
||||
|
||||
#Testing for python2.7, which we need and is not always installed on MacOS 1.6
|
||||
PY="python2.7"
|
||||
$PY -c ''
|
||||
if [ $? != 0 ]; then
|
||||
displayMessage "Python 2.7 is missing from your system. Cura requires Python2.7.\nStarting the installer" $PATH
|
||||
# Install python2.7
|
||||
hdiutil attach $PKGDIR/python-2.7.3-macosx10.6.dmg
|
||||
open -W /Volumes/Python\ 2.7.3/Python.mpkg
|
||||
hdiutil detach /Volumes/Python\ 2.7.3
|
||||
# Check the installation
|
||||
$PY -c ''
|
||||
if [ $? != 0 ]; then
|
||||
displayMessage "Failed to install python2.7"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
#Next check for numpy, numpy does not always run under 64bit, so we need to check if we need to use "arch -i386"
|
||||
$PY -c 'import numpy' 2> /dev/null
|
||||
if [ $? != 0 ]; then
|
||||
PY="arch -i386 python2.7"
|
||||
$PY -c 'import numpy'
|
||||
if [ $? != 0 ]; then
|
||||
displayMessage "Numpy is missing from your system, this is required.\nStarting the installer"
|
||||
# Install numpy
|
||||
hdiutil attach $PKGDIR/numpy-1.6.2-py2.7-python.org-macosx10.3.dmg
|
||||
open -W /Volumes/numpy/numpy-1.6.2-py2.7.mpkg
|
||||
hdiutil detach /Volumes/numpy
|
||||
#After installing numpy, we need to check if we need to use arch -386 again
|
||||
PY="python2.7"
|
||||
$PY -c 'import numpy'
|
||||
if [ $? != 0 ]; then
|
||||
PY="arch -i386 python2.7"
|
||||
$PY -c 'import numpy'
|
||||
if [ $? != 0 ]; then
|
||||
displayMessage "Failed to install numpy."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
#Check for wxPython
|
||||
$PY -c 'import wx'
|
||||
if [ $? != 0 ]; then
|
||||
displayMessage "wxPython is missing from your system. Cura requires wxPython.\nStarting the installer"
|
||||
# Start wxPython installer
|
||||
hdiutil attach $PKGDIR/wxPython2.9-osx-2.9.4.0-cocoa-py2.7.dmg
|
||||
open -W /Volumes/wxPython2.9-osx-2.9.4.0-cocoa-py2.7/wxPython2.9-osx-cocoa-py2.7.pkg
|
||||
hdiutil detach /Volumes/wxPython2.9-osx-2.9.4.0-cocoa-py2.7
|
||||
#Check if wxPython is installed correctly
|
||||
$PY -c 'import wx'
|
||||
if [ $? != 0 ]; then
|
||||
displayMessage "Failed to properly install wxPython."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
#Check for PyOpenGL
|
||||
$PY -c 'import OpenGL'
|
||||
if [ $? != 0 ]; then
|
||||
# Unpackage PyOpenGL
|
||||
if [ ! -d "$PKGDIR/PyOpenGL-3.0.2/build/lib" ]; then
|
||||
cd $PKGDIR
|
||||
tar -xzf PyOpenGL-3.0.2.tar.gz
|
||||
cd PyOpenGL-3.0.2
|
||||
$PY setup.py build
|
||||
fi
|
||||
export PYTHONPATH="$PYTHONPATH:$PKGDIR/PyOpenGL-3.0.2/build/lib"
|
||||
# Test if the installation was succesful
|
||||
echo $PYTHONPATH
|
||||
$PY -c 'import OpenGL'
|
||||
if [ $? != 0 ]; then
|
||||
displayMessage "Failed to properly use PyOpenGL."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
#Check for pyserial
|
||||
$PY -c 'import serial'
|
||||
if [ $? != 0 ]; then
|
||||
#Unpackage PySerial
|
||||
if [ ! -d "$PKGDIR/pyserial-2.6/build/lib" ]; then
|
||||
cd $PKGDIR
|
||||
tar -xzf pyserial-2.6.tar.gz
|
||||
cd pyserial-2.6
|
||||
$PY setup.py build
|
||||
fi
|
||||
export PYTHONPATH="$PYTHONPATH:$PKGDIR/pyserial-2.6/build/lib"
|
||||
|
||||
#Test if we have pyserial now
|
||||
$PY -c 'import serial'
|
||||
if [ $? != 0 ]; then
|
||||
displayMessage "Failed to properly use PySerial."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
#All checks passed, start Cura
|
||||
$PY "${RESDIR}Cura/cura.py" &
|
||||
sleep 1
|
||||
|
||||
exit 0
|
|
@ -1 +0,0 @@
|
|||
APPL????
|
Binary file not shown.
|
@ -0,0 +1,143 @@
|
|||
# coding=utf-8
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
if sys.platform.startswith('darwin'):
|
||||
from setuptools import setup
|
||||
|
||||
APP = ['Cura/cura.py']
|
||||
DATA_FILES = ['Cura/images', 'Cura/LICENSE', 'Cura/stl.ico']
|
||||
PLIST = {
|
||||
u'CFBundleName': u'Cura',
|
||||
u'CFBundleShortVersionString': u'12.11',
|
||||
u'CFBundleVersion': u'12.11',
|
||||
u'CFBundleIdentifier': u'com.ultimaker.Cura',
|
||||
u'LSMinimumSystemVersion': u'10.6',
|
||||
u'LSApplicationCategoryType': u'public.app-category.graphics-design',
|
||||
u'CFBundleDocumentTypes': [
|
||||
{
|
||||
u'CFBundleTypeRole': u'Viewer',
|
||||
u'LSItemContentTypes': [u'com.pleasantsoftware.uti.stl'],
|
||||
u'LSHandlerRank': u'Alternate',
|
||||
},
|
||||
{
|
||||
u'CFBundleTypeRole': u'Viewer',
|
||||
u'LSItemContentTypes': [u'org.khronos.collada.digital-asset-exchange'],
|
||||
u'LSHandlerRank': u'Alternate'
|
||||
},
|
||||
{
|
||||
u'CFBundleTypeName': u'Stereo Lithography 3D Object',
|
||||
u'CFBundleTypeExtensions': [u'stl'],
|
||||
u'CFBundleTypeMIMETypes': [u'text/plain'],
|
||||
u'CFBundleTypeRole': u'Viewer',
|
||||
u'LSHandlerRank': u'Alternate'
|
||||
},
|
||||
{
|
||||
u'CFBundleTypeName': u'Wavefront 3D Object',
|
||||
u'CFBundleTypeExtensions': [u'obj'],
|
||||
u'CFBundleTypeMIMETypes': [u'application/obj-3d'],
|
||||
u'CFBundleTypeRole': u'Viewer',
|
||||
u'LSHandlerRank': u'Alternate'
|
||||
},
|
||||
{
|
||||
u'CFBundleTypeName': u'Digital Asset Exchange (DAE)',
|
||||
u'CFBundleTypeExtensions': [u'dae'],
|
||||
u'CFBundleTypeMIMETypes': [u'model/vnd.collada+xml'],
|
||||
u'CFBundleTypeRole': u'Viewer',
|
||||
u'LSHandlerRank': u'Alternate'
|
||||
}
|
||||
],
|
||||
u'UTImportedTypeDeclarations': [
|
||||
{
|
||||
u'UTTypeIdentifier': u'com.pleasantsoftware.uti.stl',
|
||||
u'UTTypeConformsTo': [u'public.data'],
|
||||
u'UTTypeDescription': u'Stereo Lithography 3D object',
|
||||
u'UTTypeReferenceURL': u'http://en.wikipedia.org/wiki/STL_(file_format)',
|
||||
u'UTTypeTagSpecification:': {u'public.filename-extension': [u'stl']}
|
||||
},
|
||||
{
|
||||
u'UTTypeIdentifier': u'org.khronos.collada.digital-asset-exchange',
|
||||
u'UTTypeConformsTo': [u'public.xml', u'public.audiovisual-content'],
|
||||
u'UTTypeDescription': u'Digital Asset Exchange (DAE)',
|
||||
u'UTTypeTagSpecification': {u'public.filename-extension': [u'dae']}
|
||||
}
|
||||
]
|
||||
}
|
||||
OPTIONS = {
|
||||
'argv_emulation': True,
|
||||
'iconfile': 'Cura/Cura.icns',
|
||||
'includes': ['objc', 'Foundation'],
|
||||
'resources': DATA_FILES,
|
||||
'optimize': '2',
|
||||
'plist': PLIST
|
||||
}
|
||||
|
||||
setup(
|
||||
name="Cura",
|
||||
app=APP,
|
||||
data_files=DATA_FILES,
|
||||
options={'py2app': OPTIONS},
|
||||
setup_requires=['py2app'],
|
||||
)
|
||||
else:
|
||||
import zipfile
|
||||
try:
|
||||
import cx_Freeze
|
||||
except:
|
||||
print "ERROR: You need cx-Freeze installed to build this package"
|
||||
sys.exit(1)
|
||||
|
||||
freezeVersion = map(int, cx_Freeze.version.split('.'))
|
||||
if freezeVersion[0] < 4 or freezeVersion[0] == 4 and freezeVersion[1] < 2:
|
||||
print "ERROR: Your cx-Freeze version is too old to use with Cura."
|
||||
sys.exit(1)
|
||||
|
||||
sys.path.append(os.path.abspath('cura_sf'))
|
||||
|
||||
# Dependencies are automatically detected, but it might need fine tuning.
|
||||
build_exe_options = {
|
||||
"silent": True,
|
||||
"packages": [
|
||||
'encodings.utf_8',
|
||||
"OpenGL", "OpenGL.arrays", "OpenGL.platform", "OpenGL.GLU",
|
||||
], "excludes": [
|
||||
'Tkinter', 'tcl', 'cura_sf', 'fabmetheus_utilities', 'skeinforge_application', 'numpy',
|
||||
], "include_files": [
|
||||
('images', 'images'),
|
||||
], "build_exe": 'freeze_build'}
|
||||
|
||||
# GUI applications require a different base on Windows (the default is for a
|
||||
# console application).
|
||||
base = None
|
||||
if sys.platform == "win32":
|
||||
base = "Win32GUI"
|
||||
|
||||
cx_Freeze.setup( name = "Cura",
|
||||
version = "RC5",
|
||||
description = "Cura",
|
||||
options = {"build_exe": build_exe_options},
|
||||
executables = [cx_Freeze.Executable("cura.py", base=base)])
|
||||
|
||||
m = cx_Freeze.ModuleFinder(excludes=["gui"])
|
||||
m.IncludeFile(os.path.abspath("cura.py"))
|
||||
m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/profile_plugins/extrusion.py"))
|
||||
m.IncludeFile(os.path.abspath("cura_sf/fabmetheus_utilities/fabmetheus_tools/interpret_plugins/stl.py"))
|
||||
m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/export_plugins/static_plugins/gcode_small.py"))
|
||||
for name in os.listdir("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins"):
|
||||
if name.endswith('.py'):
|
||||
m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/" + name))
|
||||
m.ReportMissingModules()
|
||||
cwd = os.path.abspath(".")
|
||||
|
||||
z = zipfile.ZipFile("freeze_build/cura_sf.zip", "w", zipfile.ZIP_DEFLATED)
|
||||
for mod in m.modules:
|
||||
if mod.file != None and mod.file.startswith(cwd):
|
||||
if mod.file[len(cwd)+1:] == "cura.py":
|
||||
z.write(mod.file[len(cwd)+1:], "__main__.py")
|
||||
else:
|
||||
z.write(mod.file[len(cwd)+1:])
|
||||
z.write('cura_sf/fabmetheus_utilities/templates/layer_template.svg')
|
||||
z.write('cura_sf/fabmetheus_utilities/version.txt')
|
||||
z.write('__init__.py')
|
||||
z.close()
|
Loading…
Reference in New Issue