chiark / gitweb /
Merge branch 'SteamEngine' of https://github.com/daid/Cura into SteamEngine
[cura.git] / build_app.py
1 # coding=utf-8
2 import sys
3 import os
4
5 if sys.platform.startswith('darwin'):
6     from setuptools import setup
7
8     APP = ['Cura/cura.py']
9     DATA_FILES = ['Cura/LICENSE', 'Cura/resources/images', 'Cura/resources/meshes', 'Cura/resources/example', 'Cura/resources/firmware']
10     PLIST = {
11         u'CFBundleName': u'Cura',
12         u'CFBundleShortVersionString': u'13.06.5',
13         u'CFBundleVersion': u'13.06.5',
14         u'CFBundleIdentifier': u'com.ultimaker.Cura',
15         u'LSMinimumSystemVersion': u'10.6',
16         u'LSApplicationCategoryType': u'public.app-category.graphics-design',
17         u'CFBundleDocumentTypes': [
18             {
19                 u'CFBundleTypeRole': u'Viewer',
20                 u'LSItemContentTypes': [u'com.pleasantsoftware.uti.stl'],
21                 u'LSHandlerRank': u'Owner',
22                 },
23             {
24                 u'CFBundleTypeRole': u'Viewer',
25                 u'LSItemContentTypes': [u'org.khronos.collada.digital-asset-exchange'],
26                 u'LSHandlerRank': u'Owner'
27             },
28             {
29                 u'CFBundleTypeName': u'Wavefront 3D Object',
30                 u'CFBundleTypeExtensions': [u'obj'],
31                 u'CFBundleTypeMIMETypes': [u'application/obj-3d'],
32                 u'CFBundleTypeRole': u'Viewer',
33                 u'LSHandlerRank': u'Owner'
34             }
35         ],
36         u'UTImportedTypeDeclarations': [
37             {
38                 u'UTTypeIdentifier': u'com.pleasantsoftware.uti.stl',
39                 u'UTTypeConformsTo': [u'public.data'],
40                 u'UTTypeDescription': u'Stereo Lithography 3D object',
41                 u'UTTypeReferenceURL': u'http://en.wikipedia.org/wiki/STL_(file_format)',
42                 u'UTTypeTagSpecification': {u'public.filename-extension': [u'stl'], u'public.mime-type': [u'text/plain']}
43             },
44             {
45                 u'UTTypeIdentifier': u'org.khronos.collada.digital-asset-exchange',
46                 u'UTTypeConformsTo': [u'public.xml', u'public.audiovisual-content'],
47                 u'UTTypeDescription': u'Digital Asset Exchange (DAE)',
48                 u'UTTypeTagSpecification': {u'public.filename-extension': [u'dae'], u'public.mime-type': [u'model/vnd.collada+xml']}
49             }
50         ]
51     }
52     OPTIONS = {
53         'argv_emulation': True,
54         'iconfile': 'Cura/resources/Cura.icns',
55         'includes': ['objc', 'Foundation'],
56         'resources': DATA_FILES,
57         'optimize': '2',
58         'plist': PLIST,
59         'bdist_base': 'scripts/darwin/build',
60         'dist_dir': 'scripts/darwin/dist'
61     }
62
63     setup(
64         name="Cura",
65         app=APP,
66         data_files=DATA_FILES,
67         options={'py2app': OPTIONS},
68         setup_requires=['py2app']
69     )
70 else:
71     import zipfile
72     try:
73         import cx_Freeze
74     except:
75         print "ERROR: You need cx-Freeze installed to build this package"
76         sys.exit(1)
77
78     freezeVersion = map(int, cx_Freeze.version.split('.'))
79     if freezeVersion[0] < 4 or freezeVersion[0] == 4 and freezeVersion[1] < 2:
80         print "ERROR: Your cx-Freeze version is too old to use with Cura."
81         sys.exit(1)
82
83     sys.path.append(os.path.abspath('cura_sf'))
84
85     # Dependencies are automatically detected, but it might need fine tuning.
86     build_exe_options = {
87     "silent": True,
88     "packages": [
89         'encodings.utf_8',
90         "OpenGL", "OpenGL.arrays", "OpenGL.platform", "OpenGL.GLU",
91         ], "excludes": [
92         'Tkinter', 'tcl', 'cura_sf', 'fabmetheus_utilities', 'skeinforge_application', 'numpy',
93         ], "include_files": [
94         ('images', 'images'),
95         ], "build_exe": 'freeze_build'}
96
97     # GUI applications require a different base on Windows (the default is for a
98     # console application).
99     base = None
100     if sys.platform == "win32":
101         base = "Win32GUI"
102
103     cx_Freeze.setup(  name = "Cura",
104         version = "RC5",
105         description = "Cura",
106         options = {"build_exe": build_exe_options},
107         executables = [cx_Freeze.Executable("cura.py", base=base)])
108
109     m = cx_Freeze.ModuleFinder(excludes=["gui"])
110     m.IncludeFile(os.path.abspath("cura.py"))
111     m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/profile_plugins/extrusion.py"))
112     m.IncludeFile(os.path.abspath("cura_sf/fabmetheus_utilities/fabmetheus_tools/interpret_plugins/stl.py"))
113     m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/export_plugins/static_plugins/gcode_small.py"))
114     for name in os.listdir("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins"):
115         if name.endswith('.py'):
116             m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/" + name))
117     m.ReportMissingModules()
118     cwd = os.path.abspath(".")
119
120     z = zipfile.ZipFile("freeze_build/cura_sf.zip", "w", zipfile.ZIP_DEFLATED)
121     for mod in m.modules:
122         if mod.file != None and mod.file.startswith(cwd):
123             if mod.file[len(cwd)+1:] == "cura.py":
124                 z.write(mod.file[len(cwd)+1:], "__main__.py")
125             else:
126                 z.write(mod.file[len(cwd)+1:])
127     z.write('cura_sf/fabmetheus_utilities/templates/layer_template.svg')
128     z.write('cura_sf/fabmetheus_utilities/version.txt')
129     z.write('__init__.py')
130     z.close()