Commit | Line | Data |
---|---|---|
de1cfa8a | 1 | '''e.g. python setup.py bdist_apps --cores=1 --no-windows=1''' |
8ee66edd FC |
2 | |
3 | ||
d68aeda7 FC |
4 | from ya2.utils.log import LogManager |
5 | LogManager.before_init_setup('pmachines') | |
807c4e10 FC |
6 | import sys, os |
7 | from sys import argv | |
8 | from setuptools import setup | |
9 | from subprocess import Popen | |
b1af73f2 | 10 | from setuptools import Command |
8ee66edd | 11 | from setuptools.command.develop import develop |
a747111f | 12 | from multiprocessing import cpu_count |
de1cfa8a | 13 | from textwrap import dedent |
8ee66edd | 14 | from direct.dist.commands import bdist_apps |
807c4e10 | 15 | from p3d_appimage import AppImageBuilder |
a6f7e35d | 16 | from ya2.build.build import _branch, find_file_names, _version, FindFileNamesArgs |
807c4e10 | 17 | from ya2.build.lang import LanguageBuilder |
524e2ef5 | 18 | from ya2.build.screenshots import ScreenshotsBuilder |
807c4e10 FC |
19 | from ya2.build.images import ImagesBuilder |
20 | from ya2.build.models import ModelsBuilder | |
07a1eaf3 | 21 | from pmachines.application.application import Pmachines |
8ee66edd FC |
22 | |
23 | ||
d3ef798c | 24 | app_name = long_name = 'pmachines' |
8ee66edd FC |
25 | |
26 | ||
288c0ffb | 27 | class SetupDevelopmentCommand(develop): |
8ee66edd FC |
28 | |
29 | def run(self): | |
b1af73f2 FC |
30 | super().run(self) |
31 | for argument in ['lang', 'models', 'images']: | |
807c4e10 | 32 | p = Popen([sys.executable, __file__, argument]) |
b1af73f2 | 33 | p.communicate() |
8ee66edd FC |
34 | |
35 | ||
d3ef798c | 36 | class BaseCommand(Command): |
8ee66edd FC |
37 | |
38 | user_options = [('cores=', None, '#cores')] | |
a747111f | 39 | cores = cpu_count() |
8ee66edd FC |
40 | |
41 | def initialize_options(self): | |
b1af73f2 | 42 | BaseCommand.cores = cpu_count() |
807c4e10 | 43 | for a in argv[:]: self.__process_argument(a) |
288c0ffb FC |
44 | |
45 | def __process_argument(self, argument): | |
46 | if argument.startswith('--cores='): | |
d3ef798c | 47 | BaseCommand.cores = int(argument.split('=')[1]) |
8ee66edd | 48 | |
b1af73f2 | 49 | def finalize_options(self): pass # must override |
8ee66edd FC |
50 | |
51 | ||
d3ef798c | 52 | class ModelsCommand(BaseCommand): |
8ee66edd FC |
53 | |
54 | def run(self): | |
c24f4e17 | 55 | m = ModelsBuilder('assets/models', int(BaseCommand.cores)) |
524e2ef5 | 56 | m.build() |
8ee66edd FC |
57 | |
58 | ||
d3ef798c | 59 | class ImagesCommand(BaseCommand): |
8ee66edd FC |
60 | |
61 | def run(self): | |
524e2ef5 FC |
62 | s = ScreenshotsBuilder(Pmachines.scenes()) |
63 | s.build() | |
a6f7e35d | 64 | find_info = FindFileNamesArgs( |
d3ef798c | 65 | ['jpg', 'png'], |
59537c34 | 66 | ['models', 'gltf', 'bam', 'build'], |
d3ef798c FC |
67 | ['_png.png']) |
68 | images = find_file_names(find_info) | |
807c4e10 FC |
69 | i = ImagesBuilder(images, int(BaseCommand.cores)) |
70 | i.build() | |
8ee66edd FC |
71 | |
72 | ||
d3ef798c | 73 | class L10nCommand(BaseCommand): |
8ee66edd | 74 | |
8ee66edd | 75 | def run(self): |
807c4e10 | 76 | l = LanguageBuilder( |
2c6a6ed1 | 77 | app_name, 'assets/locale/po/', 'assets/scenes/', 'assets/locale/', '.') |
59537c34 | 78 | l.build() |
2c6a6ed1 FC |
79 | # l = LanguageBuilder( |
80 | # 'test', 'assets/locale/po/', 'assets/scenes/', 'assets/locale/', 'tests') | |
81 | # l.build() | |
8ee66edd FC |
82 | |
83 | ||
288c0ffb | 84 | class BDistAppsCommand(bdist_apps): |
8ee66edd FC |
85 | |
86 | user_options = bdist_apps.user_options + [ | |
87 | ('cores', None, '#cores'), | |
9209a23b FC |
88 | ('nowindows=', None, "don't build for windows"), # letters, numbers and hypens only |
89 | ('nolinux=', None, "don't build for linux")] | |
8ee66edd FC |
90 | |
91 | def initialize_options(self): | |
de1cfa8a | 92 | super().initialize_options() |
9209a23b | 93 | self.nowindows, self.nolinux = None, None |
807c4e10 | 94 | for a in argv[:]: self.__process_argument(a) |
b1af73f2 FC |
95 | |
96 | def __process_argument(self, argument): | |
97 | if argument.startswith('--no-windows='): | |
98 | self.nowindows = int(argument.split('=')[1]) | |
99 | if argument.startswith('--no-linux='): | |
100 | self.nolinux = int(argument.split('=')[1]) | |
8ee66edd FC |
101 | |
102 | def run(self): | |
de1cfa8a FC |
103 | assets_creation_message = dedent('''NOTE: please be sure that you've already created the assets with: |
104 | * python setup.py images models lang''') | |
d3ef798c | 105 | print(assets_creation_message) |
288c0ffb | 106 | self.__patch_commands_py() |
de1cfa8a | 107 | super().run() |
288c0ffb FC |
108 | self.__eventually_build_appimage() |
109 | ||
110 | def __patch_commands_py(self): | |
111 | command = 'patch --forward ' + \ | |
8ee66edd | 112 | '../venv/lib/python3.7/site-packages/direct/dist/commands.py' + \ |
53ddf3c3 | 113 | ' ya2/build/commands.patch' |
b1af73f2 | 114 | os.system(command) |
288c0ffb FC |
115 | |
116 | def __eventually_build_appimage(self): | |
9209a23b | 117 | if not self.nolinux: |
807c4e10 | 118 | a = AppImageBuilder(self) |
de1cfa8a FC |
119 | filename_branch = {'master': 'alpha', 'rc': 'rc', 'stable': ''} |
120 | branch = filename_branch[_branch()] | |
b1af73f2 | 121 | a.build(long_name, branch, 'https://www.ya2.it/downloads/') |
8ee66edd FC |
122 | |
123 | ||
b1af73f2 FC |
124 | def _build_setup_arguments(): |
125 | d = { | |
126 | 'name': app_name, | |
127 | 'version': _version(), | |
128 | 'packages': ['pmachines', 'ya2', 'assets', 'licenses'], | |
129 | 'cmdclass': { | |
288c0ffb FC |
130 | 'develop': SetupDevelopmentCommand, |
131 | 'models': ModelsCommand, | |
132 | 'images': ImagesCommand, | |
133 | 'lang': L10nCommand, | |
134 | 'bdist_apps': BDistAppsCommand}, | |
b1af73f2 FC |
135 | 'install_requires': ['panda3d'], |
136 | 'options': { | |
8ee66edd FC |
137 | 'build_apps': { |
138 | 'exclude_patterns': [ | |
139 | 'build/*', 'built/*', 'setup.py', 'requirements.txt', | |
140 | 'venv/*', '.git*', '*.pyc', 'options.ini', '__pycache__', | |
420ce99a | 141 | 'assets/models/gltf/*', 'assets/models/**/*.blend', |
8ee66edd FC |
142 | 'assets/models/**/models/*.png', |
143 | 'assets/models/**/models/*.jpg'], | |
144 | 'log_filename_strftime': True, | |
288c0ffb | 145 | 'log_filename': '$USER_APPDATA/pmachines/logs/%Y/%B/%d/%H_%M_%S.log', |
8ee66edd | 146 | 'plugins': ['pandagl', 'p3openal_audio', 'pandadx9'], |
d3ef798c | 147 | 'gui_apps': {app_name: 'main.py'}, |
288c0ffb | 148 | 'package_data_dirs': {'simplepbr': [('simplepbr/shaders*', '', {})]}, |
94a18c21 | 149 | 'icons': { |
d3ef798c | 150 | app_name: [ |
7e487769 FC |
151 | 'assets/images/icon/icon256.png', |
152 | 'assets/images/icon/icon128.png', | |
153 | 'assets/images/icon/icon48.png', | |
154 | 'assets/images/icon/icon32.png', | |
155 | 'assets/images/icon/icon16.png']}, | |
8ee66edd | 156 | 'include_patterns': [ |
53ddf3c3 | 157 | '**/ya2/licenses/*', |
8ee66edd FC |
158 | '**/licenses/*', |
159 | '**/*.bam', | |
160 | '**/*.dds', | |
161 | '**/*.bin', | |
162 | #'**/*.png', | |
163 | #'**/*.jpg', | |
164 | '**/*.ico', | |
165 | '**/*.json', | |
166 | '**/track_tr.py', | |
167 | '**/*.txt', | |
168 | '**/*.ttf', | |
169 | '**/*.vert', | |
170 | '**/*.frag', | |
171 | '**/*.ogg', | |
172 | '**/*.wav', | |
173 | '**/*.mo'], | |
b1af73f2 | 174 | 'platforms': __platform_list(), |
e444c661 FC |
175 | 'include_modules': {'*': ['encodings.hex_codec']}, |
176 | 'prefer_discrete_gpu': True}, | |
b1af73f2 FC |
177 | 'bdist_apps': {'installers': __installers_dictionary()}}} |
178 | return d | |
179 | ||
180 | def __platform_list(): | |
181 | platforms = [] | |
807c4e10 | 182 | if all('--no-windows' not in a for a in argv): |
b1af73f2 | 183 | platforms += ['win_amd64'] |
807c4e10 | 184 | if all('--no-linux' not in a for a in argv): |
b1af73f2 FC |
185 | platforms += ['manylinux2010_x86_64'] |
186 | return platforms | |
187 | ||
188 | def __installers_dictionary(): | |
189 | installers = {} | |
807c4e10 | 190 | if all('--no-windows' not in a for a in argv): |
b1af73f2 | 191 | installers['win_amd64'] = ['nsis'] |
807c4e10 | 192 | if all('--no-linux' not in a for a in argv): |
b1af73f2 FC |
193 | installers['manylinux2010_x86_64'] = [] |
194 | return installers | |
195 | ||
196 | if __name__ == '__main__': | |
807c4e10 | 197 | setup(**_build_setup_arguments()) |