[Mesa-dev] [PATCH] scons: put the generated git_sha1.h file in top-level src/ directory

Brian Paul brianp at vmware.com
Thu Jun 16 15:48:54 UTC 2016


On 06/16/2016 07:35 AM, Eric Engestrom wrote:
> On Wed, Jun 15, 2016 at 11:58:29AM -0600, Brian Paul wrote:
>> To match what's done in the automake build.
>> ---
>>   src/SConscript      | 43 +++++++++++++++++++++++++++++++++++++++++++
>>   src/mesa/SConscript | 43 ++-----------------------------------------
>>   2 files changed, 45 insertions(+), 41 deletions(-)
>>
>> diff --git a/src/SConscript b/src/SConscript
>> index 4ba0a32..719aa69 100644
>> --- a/src/SConscript
>> +++ b/src/SConscript
>> @@ -1,5 +1,6 @@
>>   Import('*')
>>
>> +import os
>>
>>   if env['platform'] == 'windows':
>>       SConscript('getopt/SConscript')
>> @@ -12,6 +13,48 @@ if env['hostonly']:
>>       # compilation
>>       Return()
>>
>> +
>> +def write_git_sha1_h_file(filename):
>> +    """Mesa looks for a git_sha1.h file at compile time in order to display
>> +    the current git hash id in the GL_VERSION string.  This function tries
>> +    to retrieve the git hashid and write the header file.  An empty file
>> +    will be created if anything goes wrong."""
>> +
>> +    args = [ 'git', 'log', '-n', '1', '--oneline' ]
>
> You could take the opportunity to change this to:
>
> 	args = [ 'git', 'rev-parse', '--short', 'HEAD' ]
>
> to match what's being done on the make build:
> https://urldefense.proofpoint.com/v2/url?u=https-3A__patchwork.freedesktop.org_patch_90532_&d=CwIBaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=T0t4QG7chq2ZwJo6wilkFznRSFy-8uDKartPGbomVj8&m=0zzXqbMZULPltpwVbCJ7fMOHXGh4Br2grMgXY81QxQo&s=jgTYcNCdGznhwVF_DEuJaDfG6_ACwJnhVROqpu0ZWvg&e=

Will do.


>> +    try:
>> +        (commit, foo) = subprocess.Popen(args, stdout=subprocess.PIPE).communicate()
>> +    except:
>> +        # git log command didn't work
>> +        if not os.path.exists(filename):
>> +            dirname = os.path.dirname(filename)
>> +            if dirname and not os.path.exists(dirname):
>> +                os.makedirs(dirname)
>> +            # create an empty file if none already exists
>> +            f = open(filename, "w")
>> +            f.close()
>> +        return
>> +
>> +    commit = '#define MESA_GIT_SHA1 "git-%s"\n' % commit[0:7]
>
> That fixed truncation can give non-unique hashes. Switching to rev-parse
> (suggested above) fixes this.

rev-parse --short produces a 7-char hash.  The commit[0:7] part above is 
used to strip the trailing newline from the string (though that could be 
expressed better).


> I had a quick grep and found Mesa has already 314 commits that can't be
> uniquely described from the first 7 chars of their hashes:
>
> 	$ git rev-list --all --abbrev=0 --abbrev-commit | grep -E '.{8,}' | wc -l
> 	314

Yeah, I think I'll bump the hash length to ten.

v2 patch coming in a bit...

-Brian


>
> (I also tend to dislike overwriting a variable with something
> semantically different from what it contained before, but that's
> a matter of opinion, and you didn't author that code anyway.)
>
> The rest looks good, but I've never used SCons and my Python experience
> is very limited so I won't formally give an r-b on this.
>
>> +    tempfile = "git_sha1.h.tmp"
>> +    f = open(tempfile, "w")
>> +    f.write(commit)
>> +    f.close()
>> +    if not os.path.exists(filename) or not filecmp.cmp(tempfile, filename):
>> +        # The filename does not exist or it's different from the new file,
>> +        # so replace old file with new.
>> +        if os.path.exists(filename):
>> +            os.remove(filename)
>> +        os.rename(tempfile, filename)
>> +    return
>> +
>> +
>> +# Create the git_sha1.h header file
>> +write_git_sha1_h_file("git_sha1.h")
>> +# and update CPPPATH so the git_sha1.h header can be found
>> +env.Append(CPPPATH = ["#" + env['build_dir']])
>> +
>> +
>> +
>>   if env['platform'] != 'windows':
>>       SConscript('loader/SConscript')
>>
>> diff --git a/src/mesa/SConscript b/src/mesa/SConscript
>> index 434800e..2a340ac 100644
>> --- a/src/mesa/SConscript
>> +++ b/src/mesa/SConscript
>> @@ -4,7 +4,6 @@
>>
>>   Import('*')
>>   import filecmp
>> -import os
>>   import subprocess
>>   from sys import executable as python_cmd
>>
>> @@ -18,10 +17,12 @@ env.Append(CPPPATH = [
>>       '#/src/mapi',
>>       '#/src/glsl',
>>       '#/src/mesa',
>> +    '#/src/mesa/main',
>>       '#/src/gallium/include',
>>       '#/src/gallium/auxiliary',
>>       Dir('../mapi'), # src/mapi build path
>>       Dir('.'), # src/mesa build path
>> +    Dir('main'),  # src/mesa/main/ build path
>>   ])
>>
>>   if env['platform'] == 'windows':
>> @@ -119,46 +120,6 @@ if env['platform'] not in ('cygwin', 'darwin', 'windows', 'haiku'):
>>           env.Append(CPPPATH = [matypes[0].dir])
>>
>>
>> -def write_git_sha1_h_file(filename):
>> -    """Mesa looks for a git_sha1.h file at compile time in order to display
>> -    the current git hash id in the GL_VERSION string.  This function tries
>> -    to retrieve the git hashid and write the header file.  An empty file
>> -    will be created if anything goes wrong."""
>> -
>> -    args = [ 'git', 'log', '-n', '1', '--oneline' ]
>> -    try:
>> -        (commit, foo) = subprocess.Popen(args, stdout=subprocess.PIPE).communicate()
>> -    except:
>> -        # git log command didn't work
>> -        if not os.path.exists(filename):
>> -            dirname = os.path.dirname(filename)
>> -            if not os.path.exists(dirname):
>> -                os.makedirs(dirname)
>> -            # create an empty file if none already exists
>> -            f = open(filename, "w")
>> -            f.close()
>> -        return
>> -
>> -    commit = '#define MESA_GIT_SHA1 "git-%s"\n' % commit[0:7]
>> -    tempfile = "git_sha1.h.tmp"
>> -    f = open(tempfile, "w")
>> -    f.write(commit)
>> -    f.close()
>> -    if not os.path.exists(filename) or not filecmp.cmp(tempfile, filename):
>> -        # The filename does not exist or it's different from the new file,
>> -        # so replace old file with new.
>> -        if os.path.exists(filename):
>> -            os.remove(filename)
>> -        os.rename(tempfile, filename)
>> -    return
>> -
>> -
>> -# Create the git_sha1.h header file
>> -write_git_sha1_h_file("main/git_sha1.h")
>> -# and update CPPPATH so the git_sha1.h header can be found
>> -env.Append(CPPPATH = ["#" + env['build_dir'] + "/mesa/main"])
>> -
>> -
>>   #
>>   # Libraries
>>   #
>> --
>> 1.9.1
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=CwIBaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=T0t4QG7chq2ZwJo6wilkFznRSFy-8uDKartPGbomVj8&m=0zzXqbMZULPltpwVbCJ7fMOHXGh4Br2grMgXY81QxQo&s=w-GeVbHTKLg8wYP9rhvh9bz6BaV5ljyBrK_eRRzicsM&e=



More information about the mesa-dev mailing list