xref: /aosp_15_r20/external/mesa3d/bin/git_sha1_gen.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker"""
2*61046927SAndroid Build Coastguard WorkerGenerate the contents of the git_sha1.h file.
3*61046927SAndroid Build Coastguard Worker"""
4*61046927SAndroid Build Coastguard Worker
5*61046927SAndroid Build Coastguard Workerimport argparse
6*61046927SAndroid Build Coastguard Workerimport os
7*61046927SAndroid Build Coastguard Workerimport os.path
8*61046927SAndroid Build Coastguard Workerimport subprocess
9*61046927SAndroid Build Coastguard Workerimport sys
10*61046927SAndroid Build Coastguard Worker
11*61046927SAndroid Build Coastguard Worker
12*61046927SAndroid Build Coastguard Workerdef get_git_sha1():
13*61046927SAndroid Build Coastguard Worker    """Try to get the git SHA1 with git rev-parse."""
14*61046927SAndroid Build Coastguard Worker    git_dir = os.path.join(os.path.dirname(sys.argv[0]), '..', '.git')
15*61046927SAndroid Build Coastguard Worker    try:
16*61046927SAndroid Build Coastguard Worker        git_sha1 = subprocess.check_output([
17*61046927SAndroid Build Coastguard Worker            'git',
18*61046927SAndroid Build Coastguard Worker            '--git-dir=' + git_dir,
19*61046927SAndroid Build Coastguard Worker            'rev-parse',
20*61046927SAndroid Build Coastguard Worker            'HEAD',
21*61046927SAndroid Build Coastguard Worker        ], stderr=open(os.devnull, 'w')).decode("ascii")
22*61046927SAndroid Build Coastguard Worker    except Exception:
23*61046927SAndroid Build Coastguard Worker        # don't print anything if it fails
24*61046927SAndroid Build Coastguard Worker        git_sha1 = ''
25*61046927SAndroid Build Coastguard Worker    return git_sha1
26*61046927SAndroid Build Coastguard Worker
27*61046927SAndroid Build Coastguard Worker
28*61046927SAndroid Build Coastguard Workerdef write_if_different(contents):
29*61046927SAndroid Build Coastguard Worker    """
30*61046927SAndroid Build Coastguard Worker    Avoid touching the output file if it doesn't need modifications
31*61046927SAndroid Build Coastguard Worker    Useful to avoid triggering rebuilds when nothing has changed.
32*61046927SAndroid Build Coastguard Worker    """
33*61046927SAndroid Build Coastguard Worker    if os.path.isfile(args.output):
34*61046927SAndroid Build Coastguard Worker        with open(args.output, 'r') as file:
35*61046927SAndroid Build Coastguard Worker            if file.read() == contents:
36*61046927SAndroid Build Coastguard Worker                return
37*61046927SAndroid Build Coastguard Worker    with open(args.output, 'w') as file:
38*61046927SAndroid Build Coastguard Worker        file.write(contents)
39*61046927SAndroid Build Coastguard Worker
40*61046927SAndroid Build Coastguard Worker
41*61046927SAndroid Build Coastguard Workerparser = argparse.ArgumentParser()
42*61046927SAndroid Build Coastguard Workerparser.add_argument('--output', help='File to write the #define in',
43*61046927SAndroid Build Coastguard Worker                    required=True)
44*61046927SAndroid Build Coastguard Workerargs = parser.parse_args()
45*61046927SAndroid Build Coastguard Worker
46*61046927SAndroid Build Coastguard Workergit_sha1 = os.environ.get('MESA_GIT_SHA1_OVERRIDE', get_git_sha1())[:10]
47*61046927SAndroid Build Coastguard Workerif git_sha1:
48*61046927SAndroid Build Coastguard Worker    write_if_different('#define MESA_GIT_SHA1 " (git-' + git_sha1 + ')"')
49*61046927SAndroid Build Coastguard Workerelse:
50*61046927SAndroid Build Coastguard Worker    write_if_different('#define MESA_GIT_SHA1 ""')
51