1b151a5e952e611b5fc8d8413d1831b7e35a042a
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 'prefer_discrete_gpu': True},
174 'bdist_apps': {'installers': __installers_dictionary()}}}
177 def __platform_list():
179 if all('--no-windows' not in a
for a
in argv
):
180 platforms
+= ['win_amd64']
181 if all('--no-linux' not in a
for a
in argv
):
182 platforms
+= ['manylinux2010_x86_64']
185 def __installers_dictionary():
187 if all('--no-windows' not in a
for a
in argv
):
188 installers
['win_amd64'] = ['nsis']
189 if all('--no-linux' not in a
for a
in argv
):
190 installers
['manylinux2010_x86_64'] = []
193 if __name__
== '__main__':
194 setup(**_build_setup_arguments())