chiark / gitweb /
Add language files to mac release.
[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', 'Cura/resources/locale']
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                 u'UTTypeIdentifier': u'com.ultimaker.obj',
52                 u'UTTypeConformsTo': [u'public.data'],
53                 u'UTTypeDescription': u'Wavefront OBJ',
54                 u'UTTypeReferenceURL': u'https://en.wikipedia.org/wiki/Wavefront_.obj_file',
55                 u'UTTypeTagSpecification': {u'public.filename-extension': [u'obj'], u'public.mime-type': [u'text/plain']}
56             },
57             {
58                 u'UTTypeIdentifier': u'com.ultimaker.amf',
59                 u'UTTypeConformsTo': [u'public.data'],
60                 u'UTTypeDescription': u'Additive Manufacturing File',
61                 u'UTTypeReferenceURL': u'https://en.wikipedia.org/wiki/Additive_Manufacturing_File_Format',
62                 u'UTTypeTagSpecification': {u'public.filename-extension': [u'amf'], u'public.mime-type': [u'text/plain']}
63             }
64         ]
65     }
66     OPTIONS = {
67         'argv_emulation': True,
68         'iconfile': 'Cura/resources/Cura.icns',
69         'includes': ['objc', 'Foundation'],
70         'resources': DATA_FILES,
71         'optimize': '2',
72         'plist': PLIST,
73         'bdist_base': 'scripts/darwin/build',
74         'dist_dir': 'scripts/darwin/dist'
75     }
76
77     setup(
78         name="Cura",
79         app=APP,
80         data_files=DATA_FILES,
81         options={'py2app': OPTIONS},
82         setup_requires=['py2app']
83     )
84 else:
85     import zipfile
86     try:
87         import cx_Freeze
88     except:
89         print "ERROR: You need cx-Freeze installed to build this package"
90         sys.exit(1)
91
92     freezeVersion = map(int, cx_Freeze.version.split('.'))
93     if freezeVersion[0] < 4 or freezeVersion[0] == 4 and freezeVersion[1] < 2:
94         print "ERROR: Your cx-Freeze version is too old to use with Cura."
95         sys.exit(1)
96
97     sys.path.append(os.path.abspath('cura_sf'))
98
99     # Dependencies are automatically detected, but it might need fine tuning.
100     build_exe_options = {
101     "silent": True,
102     "packages": [
103         'encodings.utf_8',
104         "OpenGL", "OpenGL.arrays", "OpenGL.platform", "OpenGL.GLU",
105         ], "excludes": [
106         'Tkinter', 'tcl', 'cura_sf', 'fabmetheus_utilities', 'skeinforge_application', 'numpy',
107         ], "include_files": [
108         ('images', 'images'),
109         ], "build_exe": 'freeze_build'}
110
111     # GUI applications require a different base on Windows (the default is for a
112     # console application).
113     base = None
114     if sys.platform == "win32":
115         base = "Win32GUI"
116
117     cx_Freeze.setup(  name = "Cura",
118         version = "RC5",
119         description = "Cura",
120         options = {"build_exe": build_exe_options},
121         executables = [cx_Freeze.Executable("cura.py", base=base)])
122
123     m = cx_Freeze.ModuleFinder(excludes=["gui"])
124     m.IncludeFile(os.path.abspath("cura.py"))
125     m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/profile_plugins/extrusion.py"))
126     m.IncludeFile(os.path.abspath("cura_sf/fabmetheus_utilities/fabmetheus_tools/interpret_plugins/stl.py"))
127     m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/export_plugins/static_plugins/gcode_small.py"))
128     for name in os.listdir("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins"):
129         if name.endswith('.py'):
130             m.IncludeFile(os.path.abspath("cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/" + name))
131     m.ReportMissingModules()
132     cwd = os.path.abspath(".")
133
134     z = zipfile.ZipFile("freeze_build/cura_sf.zip", "w", zipfile.ZIP_DEFLATED)
135     for mod in m.modules:
136         if mod.file != None and mod.file.startswith(cwd):
137             if mod.file[len(cwd)+1:] == "cura.py":
138                 z.write(mod.file[len(cwd)+1:], "__main__.py")
139             else:
140                 z.write(mod.file[len(cwd)+1:])
141     z.write('cura_sf/fabmetheus_utilities/templates/layer_template.svg')
142     z.write('cura_sf/fabmetheus_utilities/version.txt')
143     z.write('__init__.py')
144     z.close()