diff --git a/glfw/glfw.py b/glfw/glfw.py index 7e4994c2f..d795cef70 100755 --- a/glfw/glfw.py +++ b/glfw/glfw.py @@ -41,6 +41,7 @@ class Env: library_paths: Dict[str, List[str]] = {} ldpaths: List[str] = [] ccver: Tuple[int, int] + vcs_rev: str = '' # glfw stuff all_headers: List[str] = [] @@ -52,11 +53,13 @@ class Env: def __init__( 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.ldpaths = ldpaths or [] self.ccver = ccver + self.vcs_rev = vcs_rev 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) diff --git a/setup.py b/setup.py index bdc74876b..4cd2b50f6 100755 --- a/setup.py +++ b/setup.py @@ -333,7 +333,8 @@ def init_env( ignore_compiler_warnings: bool = False, build_universal_binary: bool = False, extra_library_dirs: Iterable[str] = (), - verbose: bool = True + verbose: bool = True, + vcs_rev: str = '', ) -> Env: native_optimizations = native_optimizations and not sanitize and not debug if native_optimizations and is_macos and is_arm: @@ -428,7 +429,7 @@ def init_env( set_arches(cflags) 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: @@ -503,7 +504,7 @@ def run_tool(cmd: Union[str, List[str]], desc: Optional[str] = None) -> None: @lru_cache -def get_vcs_rev_define() -> str: +def get_vcs_rev() -> str: ans = '' if os.path.exists('.git'): try: @@ -526,7 +527,9 @@ def get_source_specific_defines(env: Env, src: str) -> Tuple[str, Optional[List[ if src == 'kitty/parser_dump.c': return 'kitty/parser.c', ['DUMP_COMMANDS'] 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: return src, env.library_paths[src] except KeyError: @@ -908,7 +911,8 @@ def build_static_kittens( if not for_platform: update_go_generated_files(args, os.path.join(launcher_dir, appname)) 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: ld_flags.append("-X 'kitty.IsFrozenBuild=true'") if for_platform: @@ -1588,6 +1592,10 @@ def option_parser() -> argparse.ArgumentParser: # {{{ default=Options.libdir_name, 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( '--extra-logging', action='append',