mirror of
https://github.com/ZDoom/zdoom-macos-deps.git
synced 2025-02-17 17:11:29 +00:00
build script: improve target registration
target can be named with arbitrary string
This commit is contained in:
parent
7acd7e532b
commit
a34f525cdf
1 changed files with 41 additions and 20 deletions
61
build.py
61
build.py
|
@ -24,18 +24,48 @@ if sys.hexversion < 0x3070000:
|
||||||
print('Build module requires Python 3.7 or newer')
|
print('Build module requires Python 3.7 or newer')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import tarfile
|
import tarfile
|
||||||
|
from typing import KeysView
|
||||||
|
|
||||||
|
|
||||||
class Target(object):
|
class TargetRegistry:
|
||||||
_SETUP_PREFIX = '_setup_'
|
_SETUPS = {}
|
||||||
|
_TARGETS = {}
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_names() -> KeysView:
|
||||||
|
return TargetRegistry._SETUPS.keys()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_targets() -> dict:
|
||||||
|
if len(TargetRegistry._TARGETS) == 0:
|
||||||
|
TargetRegistry._TARGETS = {name: Target(name) for name in TargetRegistry.get_names()}
|
||||||
|
|
||||||
|
return TargetRegistry._TARGETS
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_setup(name: str):
|
||||||
|
return TargetRegistry._SETUPS[name]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def setup(name):
|
||||||
|
def register(func):
|
||||||
|
assert name not in TargetRegistry._SETUPS
|
||||||
|
TargetRegistry._SETUPS[name] = func
|
||||||
|
return func
|
||||||
|
|
||||||
|
return register
|
||||||
|
|
||||||
|
|
||||||
|
target_setup = TargetRegistry.setup
|
||||||
|
|
||||||
|
|
||||||
|
class Target:
|
||||||
def __init__(self, name: str):
|
def __init__(self, name: str):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.url = None
|
self.url = None
|
||||||
|
@ -43,41 +73,32 @@ class Target(object):
|
||||||
self.post_build = None
|
self.post_build = None
|
||||||
|
|
||||||
def setup(self, builder: 'Builder'):
|
def setup(self, builder: 'Builder'):
|
||||||
setup_func = getattr(Target, Target._SETUP_PREFIX + self.name)
|
setup_func = TargetRegistry.get_setup(self.name)
|
||||||
setup_func(self, builder)
|
setup_func(self, builder)
|
||||||
|
|
||||||
@staticmethod
|
@target_setup('gzdoom')
|
||||||
def get_target_names() -> list:
|
|
||||||
targets = []
|
|
||||||
|
|
||||||
for member in dir(Target):
|
|
||||||
if member.startswith(Target._SETUP_PREFIX):
|
|
||||||
targets.append(member[len(Target._SETUP_PREFIX):])
|
|
||||||
|
|
||||||
return targets
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def create_targets() -> dict:
|
|
||||||
return {name: Target(name) for name in Target.get_target_names()}
|
|
||||||
|
|
||||||
def _setup_gzdoom(self, builder: 'Builder'):
|
def _setup_gzdoom(self, builder: 'Builder'):
|
||||||
self.url = 'https://github.com/coelckers/gzdoom.git'
|
self.url = 'https://github.com/coelckers/gzdoom.git'
|
||||||
self.post_build = Target._copy_moltenvk
|
self.post_build = Target._copy_moltenvk
|
||||||
self._assign_zdoom_raze_cmake_options(builder)
|
self._assign_zdoom_raze_cmake_options(builder)
|
||||||
|
|
||||||
|
@target_setup('qzdoom')
|
||||||
def _setup_qzdoom(self, builder: 'Builder'):
|
def _setup_qzdoom(self, builder: 'Builder'):
|
||||||
self.url = 'https://github.com/madame-rachelle/qzdoom.git'
|
self.url = 'https://github.com/madame-rachelle/qzdoom.git'
|
||||||
self.post_build = Target._copy_moltenvk
|
self.post_build = Target._copy_moltenvk
|
||||||
self._assign_zdoom_raze_cmake_options(builder)
|
self._assign_zdoom_raze_cmake_options(builder)
|
||||||
|
|
||||||
|
@target_setup('lzdoom')
|
||||||
def _setup_lzdoom(self, builder: 'Builder'):
|
def _setup_lzdoom(self, builder: 'Builder'):
|
||||||
self.url = 'https://github.com/drfrag666/gzdoom.git'
|
self.url = 'https://github.com/drfrag666/gzdoom.git'
|
||||||
self._assign_zdoom_raze_cmake_options(builder)
|
self._assign_zdoom_raze_cmake_options(builder)
|
||||||
|
|
||||||
|
@target_setup('raze')
|
||||||
def _setup_raze(self, builder: 'Builder'):
|
def _setup_raze(self, builder: 'Builder'):
|
||||||
self.url = 'https://github.com/coelckers/Raze.git'
|
self.url = 'https://github.com/coelckers/Raze.git'
|
||||||
self._assign_zdoom_raze_cmake_options(builder)
|
self._assign_zdoom_raze_cmake_options(builder)
|
||||||
|
|
||||||
|
@target_setup('zandronum')
|
||||||
def _setup_zandronum(self, builder: 'Builder'):
|
def _setup_zandronum(self, builder: 'Builder'):
|
||||||
self.url = 'https://github.com/TorrSamaho/zandronum.git'
|
self.url = 'https://github.com/TorrSamaho/zandronum.git'
|
||||||
opts = self.cmake_options
|
opts = self.cmake_options
|
||||||
|
@ -164,7 +185,7 @@ class Builder(object):
|
||||||
self.sdk_path = arguments.sdk_path
|
self.sdk_path = arguments.sdk_path
|
||||||
self.create_package = arguments.create_package
|
self.create_package = arguments.create_package
|
||||||
|
|
||||||
targets = Target.create_targets()
|
targets = TargetRegistry.get_targets()
|
||||||
|
|
||||||
if arguments.target:
|
if arguments.target:
|
||||||
self.target = targets[arguments.target]
|
self.target = targets[arguments.target]
|
||||||
|
@ -304,7 +325,7 @@ class Builder(object):
|
||||||
parser = argparse.ArgumentParser(description='*ZDoom binary dependencies for macOS')
|
parser = argparse.ArgumentParser(description='*ZDoom binary dependencies for macOS')
|
||||||
|
|
||||||
group = parser.add_mutually_exclusive_group(required=True)
|
group = parser.add_mutually_exclusive_group(required=True)
|
||||||
group.add_argument('--target', choices=Target.get_target_names(), help='target to build')
|
group.add_argument('--target', choices=TargetRegistry.get_names(), help='target to build')
|
||||||
group.add_argument('--source-path', metavar='path', help='path to target\'s source code')
|
group.add_argument('--source-path', metavar='path', help='path to target\'s source code')
|
||||||
|
|
||||||
group = parser.add_argument_group()
|
group = parser.add_argument_group()
|
||||||
|
|
Loading…
Reference in a new issue