|
20 | 20 | import traceback |
21 | 21 | import os |
22 | 22 | import io |
| 23 | +import re |
| 24 | +import ast |
23 | 25 | from pipes import quote |
24 | 26 | from sys import platform, executable |
25 | 27 | from buildozer import BuildozerException |
@@ -461,6 +463,25 @@ def _check_aidl(self, v_build_tools): |
461 | 463 | raise BuildozerException() |
462 | 464 |
|
463 | 465 | def install_platform(self): |
| 466 | + self._install_p4a() |
| 467 | + self._install_apache_ant() |
| 468 | + self._install_android_sdk() |
| 469 | + self._install_android_ndk() |
| 470 | + self._install_android_packages() |
| 471 | + |
| 472 | + # ultimate configuration check. |
| 473 | + # some of our configuration cannot be check without platform. |
| 474 | + self.check_configuration_tokens() |
| 475 | + |
| 476 | + self.buildozer.environ.update({ |
| 477 | + 'PACKAGES_PATH': self.buildozer.global_packages_dir, |
| 478 | + 'ANDROIDSDK': self.android_sdk_dir, |
| 479 | + 'ANDROIDNDK': self.android_ndk_dir, |
| 480 | + 'ANDROIDAPI': self.android_api, |
| 481 | + 'ANDROIDNDKVER': 'r{}'.format(self.android_ndk_version) |
| 482 | + }) |
| 483 | + |
| 484 | + def _install_p4a(self): |
464 | 485 | cmd = self.buildozer.cmd |
465 | 486 | source = self.buildozer.config.getdefault('app', 'p4a.branch', |
466 | 487 | self.p4a_branch) |
@@ -493,22 +514,19 @@ def install_platform(self): |
493 | 514 | cwd=pa_dir) |
494 | 515 | cmd('git checkout {}'.format(source), cwd=pa_dir) |
495 | 516 |
|
496 | | - self._install_apache_ant() |
497 | | - self._install_android_sdk() |
498 | | - self._install_android_ndk() |
499 | | - self._install_android_packages() |
500 | | - |
501 | | - # ultimate configuration check. |
502 | | - # some of our configuration cannot be check without platform. |
503 | | - self.check_configuration_tokens() |
504 | | - |
505 | | - self.buildozer.environ.update({ |
506 | | - 'PACKAGES_PATH': self.buildozer.global_packages_dir, |
507 | | - 'ANDROIDSDK': self.android_sdk_dir, |
508 | | - 'ANDROIDNDK': self.android_ndk_dir, |
509 | | - 'ANDROIDAPI': self.android_api, |
510 | | - 'ANDROIDNDKVER': 'r{}'.format(self.android_ndk_version) |
511 | | - }) |
| 517 | + # also install dependencies (currently, only setup.py knows about it) |
| 518 | + # let's extract them. |
| 519 | + try: |
| 520 | + with open(join(self.pa_dir, "setup.py")) as fd: |
| 521 | + setup = fd.read() |
| 522 | + deps = re.findall("install_reqs = (\[[^\]]*\])", setup, re.DOTALL | re.MULTILINE)[1] |
| 523 | + deps = ast.literal_eval(deps) |
| 524 | + except Exception: |
| 525 | + deps = [] |
| 526 | + pip_deps = [] |
| 527 | + for dep in deps: |
| 528 | + pip_deps.append('"{}"'.format(dep)) |
| 529 | + cmd('pip install -q --user {}'.format(" ".join(pip_deps))) |
512 | 530 |
|
513 | 531 | def get_available_packages(self): |
514 | 532 | available_modules = self.buildozer.cmd('./distribute.sh -l', |
|
0 commit comments