Allow specifying VCS revision on the build command line

This commit is contained in:
Kovid Goyal 2023-02-28 13:05:43 +05:30
parent 1ddb1dc5e1
commit 935a36f5a8
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 17 additions and 6 deletions

View File

@ -41,6 +41,7 @@ class Env:
library_paths: Dict[str, List[str]] = {} library_paths: Dict[str, List[str]] = {}
ldpaths: List[str] = [] ldpaths: List[str] = []
ccver: Tuple[int, int] ccver: Tuple[int, int]
vcs_rev: str = ''
# glfw stuff # glfw stuff
all_headers: List[str] = [] all_headers: List[str] = []
@ -52,11 +53,13 @@ class Env:
def __init__( def __init__(
self, cc: List[str] = [], cppflags: List[str] = [], cflags: List[str] = [], ldflags: List[str] = [], self, cc: List[str] = [], cppflags: List[str] = [], cflags: List[str] = [], ldflags: List[str] = [],
library_paths: Dict[str, List[str]] = {}, ldpaths: Optional[List[str]] = None, ccver: Tuple[int, int] = (0, 0) library_paths: Dict[str, List[str]] = {}, ldpaths: Optional[List[str]] = None, ccver: Tuple[int, int] = (0, 0),
vcs_rev: str = ''
): ):
self.cc, self.cppflags, self.cflags, self.ldflags, self.library_paths = cc, cppflags, cflags, ldflags, library_paths self.cc, self.cppflags, self.cflags, self.ldflags, self.library_paths = cc, cppflags, cflags, ldflags, library_paths
self.ldpaths = ldpaths or [] self.ldpaths = ldpaths or []
self.ccver = ccver self.ccver = ccver
self.vcs_rev = vcs_rev
def copy(self) -> 'Env': def copy(self) -> 'Env':
ans = Env(self.cc, list(self.cppflags), list(self.cflags), list(self.ldflags), dict(self.library_paths), list(self.ldpaths), self.ccver) ans = Env(self.cc, list(self.cppflags), list(self.cflags), list(self.ldflags), dict(self.library_paths), list(self.ldpaths), self.ccver)

View File

@ -333,7 +333,8 @@ def init_env(
ignore_compiler_warnings: bool = False, ignore_compiler_warnings: bool = False,
build_universal_binary: bool = False, build_universal_binary: bool = False,
extra_library_dirs: Iterable[str] = (), extra_library_dirs: Iterable[str] = (),
verbose: bool = True verbose: bool = True,
vcs_rev: str = '',
) -> Env: ) -> Env:
native_optimizations = native_optimizations and not sanitize and not debug native_optimizations = native_optimizations and not sanitize and not debug
if native_optimizations and is_macos and is_arm: if native_optimizations and is_macos and is_arm:
@ -428,7 +429,7 @@ def init_env(
set_arches(cflags) set_arches(cflags)
set_arches(ldflags) set_arches(ldflags)
return Env(cc, cppflags, cflags, ldflags, library_paths, ccver=ccver, ldpaths=ldpaths) return Env(cc, cppflags, cflags, ldflags, library_paths, ccver=ccver, ldpaths=ldpaths, vcs_rev=vcs_rev)
def kitty_env() -> Env: def kitty_env() -> Env:
@ -503,7 +504,7 @@ def run_tool(cmd: Union[str, List[str]], desc: Optional[str] = None) -> None:
@lru_cache @lru_cache
def get_vcs_rev_define() -> str: def get_vcs_rev() -> str:
ans = '' ans = ''
if os.path.exists('.git'): if os.path.exists('.git'):
try: try:
@ -526,7 +527,9 @@ def get_source_specific_defines(env: Env, src: str) -> Tuple[str, Optional[List[
if src == 'kitty/parser_dump.c': if src == 'kitty/parser_dump.c':
return 'kitty/parser.c', ['DUMP_COMMANDS'] return 'kitty/parser.c', ['DUMP_COMMANDS']
if src == 'kitty/data-types.c': if src == 'kitty/data-types.c':
return src, [f'KITTY_VCS_REV="{get_vcs_rev_define()}"', f'WRAPPED_KITTENS="{wrapped_kittens()}"'] if not env.vcs_rev:
env.vcs_rev = get_vcs_rev()
return src, [f'KITTY_VCS_REV="{env.vcs_rev}"', f'WRAPPED_KITTENS="{wrapped_kittens()}"']
try: try:
return src, env.library_paths[src] return src, env.library_paths[src]
except KeyError: except KeyError:
@ -908,7 +911,8 @@ def build_static_kittens(
if not for_platform: if not for_platform:
update_go_generated_files(args, os.path.join(launcher_dir, appname)) update_go_generated_files(args, os.path.join(launcher_dir, appname))
cmd = [go, 'build', '-v'] cmd = [go, 'build', '-v']
ld_flags = [f"-X 'kitty.VCSRevision={get_vcs_rev_define()}'"] vcs_rev = args.vcs_rev or get_vcs_rev()
ld_flags = [f"-X 'kitty.VCSRevision={vcs_rev}'"]
if for_freeze: if for_freeze:
ld_flags.append("-X 'kitty.IsFrozenBuild=true'") ld_flags.append("-X 'kitty.IsFrozenBuild=true'")
if for_platform: if for_platform:
@ -1588,6 +1592,10 @@ def option_parser() -> argparse.ArgumentParser: # {{{
default=Options.libdir_name, default=Options.libdir_name,
help='The name of the directory inside --prefix in which to store compiled files. Defaults to "lib"' help='The name of the directory inside --prefix in which to store compiled files. Defaults to "lib"'
) )
p.add_argument(
'--vcs-rev', default='',
help='The VCS revision to embed in the binary. The default is to read it from the .git directory when present.'
)
p.add_argument( p.add_argument(
'--extra-logging', '--extra-logging',
action='append', action='append',