5ab8296f7d4aa4a50585369659942a8b6f1ab206
1 '''e.g. python setup.py bdist_apps --cores=1 --no-windows=1'''
4 from ya2
.utils
.log
import LogManager
5 LogManager
.before_init_setup('pmachines')
8 from setuptools
import setup
9 from subprocess
import Popen
10 from setuptools
import Command
11 from setuptools
.command
.develop
import develop
12 from multiprocessing
import cpu_count
13 from textwrap
import dedent
14 from direct
.dist
.commands
import bdist_apps
15 from p3d_appimage
import AppImageBuilder
16 from ya2
.build
.build
import _branch
, find_file_names
, _version
, FindFileNamesInfo
17 from ya2
.build
.lang
import LanguageBuilder
18 from ya2
.build
.screenshots
import ScreenshotsBuilder
19 from ya2
.build
.images
import ImagesBuilder
20 from ya2
.build
.models
import ModelsBuilder
21 from pmachines
.application
.application
import Pmachines
24 app_name
= long_name
= 'pmachines'
27 class SetupDevelopmentCommand(develop
):
31 for argument
in ['lang', 'models', 'images']:
32 p
= Popen([sys
.executable
, __file__
, argument
])
36 class BaseCommand(Command
):
38 user_options
= [('cores=', None, '#cores')]
41 def initialize_options(self
):
42 BaseCommand
.cores
= cpu_count()
43 for a
in argv
[:]: self
.__process
_argument
(a
)
45 def __process_argument(self
, argument
):
46 if argument
.startswith('--cores='):
47 BaseCommand
.cores
= int(argument
.split('=')[1])
49 def finalize_options(self
): pass # must override
52 class ModelsCommand(BaseCommand
):
55 m
= ModelsBuilder('assets/models', int(BaseCommand
.cores
))
59 class ImagesCommand(BaseCommand
):
62 s
= ScreenshotsBuilder(Pmachines
.scenes())
64 find_info
= FindFileNamesInfo(
66 ['models', 'gltf', 'bam'],
68 images
= find_file_names(find_info
)
69 i
= ImagesBuilder(images
, int(BaseCommand
.cores
))
73 class L10nCommand(BaseCommand
):
77 app_name
, 'assets/locale/po/', 'assets/scenes/', 'assets/locale/')
81 class BDistAppsCommand(bdist_apps
):
83 user_options
= bdist_apps
.user_options
+ [
84 ('cores', None, '#cores'),
85 ('nowindows=', None, "don't build for windows"), # letters, numbers and hypens only
86 ('nolinux=', None, "don't build for linux")]
88 def initialize_options(self
):
89 super().initialize_options()
90 self
.nowindows
, self
.nolinux
= None, None
91 for a
in argv
[:]: self
.__process
_argument
(a
)
93 def __process_argument(self
, argument
):
94 if argument
.startswith('--no-windows='):
95 self
.nowindows
= int(argument
.split('=')[1])
96 if argument
.startswith('--no-linux='):
97 self
.nolinux
= int(argument
.split('=')[1])
100 assets_creation_message
= dedent('''NOTE: please be sure that you've already created the assets with:
101 * python setup.py images models lang''')
102 print(assets_creation_message
)
103 self
.__patch
_commands
_py
()
105 self
.__eventually
_build
_appimage
()
107 def __patch_commands_py(self
):
108 command
= 'patch --forward ' + \
109 '../venv/lib/python3.7/site-packages/direct/dist/commands.py' + \
110 ' ya2/build/commands.patch'
113 def __eventually_build_appimage(self
):
115 a
= AppImageBuilder(self
)
116 filename_branch
= {'master': 'alpha', 'rc': 'rc', 'stable': ''}
117 branch
= filename_branch
[_branch()]
118 a
.build(long_name
, branch
, 'https://www.ya2.it/downloads/')
121 def _build_setup_arguments():
124 'version': _version(),
125 'packages': ['pmachines', 'ya2', 'assets', 'licenses'],
127 'develop': SetupDevelopmentCommand
,
128 'models': ModelsCommand
,
129 'images': ImagesCommand
,
131 'bdist_apps': BDistAppsCommand
},
132 'install_requires': ['panda3d'],
135 'exclude_patterns': [
136 'build/*', 'built/*', 'setup.py', 'requirements.txt',
137 'venv/*', '.git*', '*.pyc', 'options.ini', '__pycache__',
138 'assets/models/gltf/*', 'assets/models/**/*.blend',
139 'assets/models/**/models/*.png',
140 'assets/models/**/models/*.jpg'],
141 'log_filename_strftime': True,
142 'log_filename': '$USER_APPDATA/pmachines/logs/%Y/%B/%d/%H_%M_%S.log',
143 'plugins': ['pandagl', 'p3openal_audio', 'pandadx9'],
144 'gui_apps': {app_name
: 'main.py'},
145 'package_data_dirs': {'simplepbr': [('simplepbr/shaders*', '', {})]},
148 'assets/images/icon/icon256.png',
149 'assets/images/icon/icon128.png',
150 'assets/images/icon/icon48.png',
151 'assets/images/icon/icon32.png',
152 'assets/images/icon/icon16.png']},
153 'include_patterns': [
171 'platforms': __platform_list(),
172 'include_modules': {'*': ['encodings.hex_codec']}},
173 'bdist_apps': {'installers': __installers_dictionary()}}}
176 def __platform_list():
178 if all('--no-windows' not in a
for a
in argv
):
179 platforms
+= ['win_amd64']
180 if all('--no-linux' not in a
for a
in argv
):
181 platforms
+= ['manylinux2010_x86_64']
184 def __installers_dictionary():
186 if all('--no-windows' not in a
for a
in argv
):
187 installers
['win_amd64'] = ['nsis']
188 if all('--no-linux' not in a
for a
in argv
):
189 installers
['manylinux2010_x86_64'] = []
192 if __name__
== '__main__':
193 setup(**_build_setup_arguments())