我想添加一个具有扩展功能的build
命令。具体来说,它编译了一个Go共享库。这是一个漫长的过程,而且Go源代码很少被修改。因此
有没有办法让setuptools
记住文件运行时的最后修改日期,或者我需要一个更重要的构建工具(比如SCons)。我不在乎它是否通过时间戳或任何其他简单的策略来识别最近性
以下是相关代码:
class BuildGo(build_py):
'''
Build Go bindings before building Python extension
'''
def run(self):
# What should go into go_sources_modified?
if self.go_sources_modified():
self.compile_go()
build_py.run(self)
def compile_go(self):
version = None
refusal = 'Will not compile Go bindings'
try:
version = subprocess.check_output(['go', 'version'])
except subprocess.CalledProcessError:
print('Didn\'t find Go compiler.')
print(refusal)
return
match = re.search(br'go(\d+)\.(\d+)\.(\d+)', version)
if match:
version = tuple(map(int, match.group(1, 2, 3)))
else:
print('Unrecognized version of Go compiler: {}'.format(version))
print(refusal)
return
req_version = 1, 9, 1
if version < req_version:
print('You need Go compiler version higher than: {}'.format(
req_version,
))
print(refusal)
return
try:
result = subprocess.check_output([
'go',
'build',
'-v',
'-buildmode=c-shared',
'-o',
SHLIB_LOCATION,
SHLIB_PACKAGE,
])
print(result)
except subprocess.CalledProcessError as e:
print(e.stderr)
raise
您可以使用
distutils.dep_util
模块中的函数来检查自上次构建库以来是否修改了任何go源:相关问题 更多 >
编程相关推荐