[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