|
|
|
@ -4,7 +4,7 @@
|
|
|
|
|
# build-test.py [--verbose]
|
|
|
|
|
#
|
|
|
|
|
# reads the output of exiv2 -v -V and inspects it for sanity
|
|
|
|
|
# primary test is to inspect the loaded libraries
|
|
|
|
|
# inspect run-library libraries platform/compiler/{debug|release}{shared|static}
|
|
|
|
|
# TODO: 1 report loaded libraries that we didn't expect
|
|
|
|
|
# 2 mingw support
|
|
|
|
|
##
|
|
|
|
@ -19,6 +19,21 @@ def error(msg):
|
|
|
|
|
print '***',msg,'***'
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
# run a command and return output string
|
|
|
|
|
def runCommand(command):
|
|
|
|
|
##
|
|
|
|
|
# don't use check_output
|
|
|
|
|
# this is 2.7 feature.
|
|
|
|
|
# not available on cygwin's default python 2.6.8 interpreter
|
|
|
|
|
# result=subprocess.check_output( command.split(' '))
|
|
|
|
|
##
|
|
|
|
|
|
|
|
|
|
result =subprocess.Popen(command.split(' '), stdout=subprocess.PIPE).communicate()[0]
|
|
|
|
|
|
|
|
|
|
# ensure lines are \n terminated (remove \r bytes)
|
|
|
|
|
return result.replace('\r\n', '\n').replace('\r', '\n')
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
# process the version information dictionary
|
|
|
|
|
def platform(dict):
|
|
|
|
@ -37,14 +52,14 @@ def expect(dict,expects):
|
|
|
|
|
libs=dict['library']
|
|
|
|
|
E={};
|
|
|
|
|
for e in expects:
|
|
|
|
|
e=e.lower().replace('-','.') # cygwin uses - in versioning
|
|
|
|
|
e=e.lower().replace('-','.') # cygwin uses '-' in versioning
|
|
|
|
|
e=e.split('.')[0]
|
|
|
|
|
if verbose:
|
|
|
|
|
print 'expect library',e
|
|
|
|
|
E[e]=0
|
|
|
|
|
|
|
|
|
|
for lib in libs:
|
|
|
|
|
lib=lib.lower().replace('\\','/') # cygwin uses \ in pathnames
|
|
|
|
|
lib=lib.lower().replace('\\','/') # cygwin uses '\' in pathnames
|
|
|
|
|
lib=lib.replace('-','.')
|
|
|
|
|
lib=os.path.basename(lib).split('.')[0]
|
|
|
|
|
if E.has_key(lib):
|
|
|
|
@ -57,16 +72,6 @@ def expect(dict,expects):
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
def apple(dict):
|
|
|
|
|
platform(dict)
|
|
|
|
|
|
|
|
|
|
# which version of MacOS-X ?
|
|
|
|
|
os_major=int(os.uname()[2].split('.')[0])
|
|
|
|
|
os_minor=int(os.uname()[2].split('.')[1])
|
|
|
|
|
NC=13;ML=12;LION=11;SL=10;LEO=9;
|
|
|
|
|
|
|
|
|
|
if dict['bits'] != 64:
|
|
|
|
|
print '*** expected 64 bit build ***'
|
|
|
|
|
|
|
|
|
|
expects= [ 'libSystem.B.dylib'
|
|
|
|
|
, 'libexpat.1.dylib'
|
|
|
|
|
, 'libz.1.dylib'
|
|
|
|
@ -75,27 +80,34 @@ def apple(dict):
|
|
|
|
|
, 'libdyld.dylib'
|
|
|
|
|
, 'libc++.1.dylib'
|
|
|
|
|
] ;
|
|
|
|
|
|
|
|
|
|
# which version of MacOS-X ?
|
|
|
|
|
os_major=int(os.uname()[2].split('.')[0])
|
|
|
|
|
os_minor=int(os.uname()[2].split('.')[1])
|
|
|
|
|
NC=13;ML=12;LION=11;SL=10;LEO=9;
|
|
|
|
|
|
|
|
|
|
if dict['dll']:
|
|
|
|
|
expects.append('libexiv2.12.dylib')
|
|
|
|
|
|
|
|
|
|
## Mountain Lion
|
|
|
|
|
if os_major==ML and dict['dll']:
|
|
|
|
|
expects.append('libexiv2.12.dylib')
|
|
|
|
|
expects.append('libSystem.B.dylib')
|
|
|
|
|
expects.append('libexpat.1.dylib')
|
|
|
|
|
expects.append('libz.1.dylib')
|
|
|
|
|
expects.append('libiconv.2.dylib')
|
|
|
|
|
expects.append('libstdc++.6.dylib')
|
|
|
|
|
expects.append('libdyld.dylib')
|
|
|
|
|
expects.append('libc++.1.dylib')
|
|
|
|
|
|
|
|
|
|
expect(dict,expects)
|
|
|
|
|
|
|
|
|
|
## Mountain lion dll build
|
|
|
|
|
if os_major == ML and dict['dll']==1:
|
|
|
|
|
expects= [ 'libexiv2.12.dylib'
|
|
|
|
|
, 'libSystem.B.dylib'
|
|
|
|
|
, 'libexpat.1.dylib'
|
|
|
|
|
, 'libz.1.dylib'
|
|
|
|
|
, 'libiconv.2.dylib'
|
|
|
|
|
, 'libstdc++.6.dylib'
|
|
|
|
|
, 'libdyld.dylib'
|
|
|
|
|
, 'libc++.1.dylib'
|
|
|
|
|
] ;
|
|
|
|
|
expect(dict,expects)
|
|
|
|
|
expect_bits = 32 if os_major==LEO else 64
|
|
|
|
|
if expect_bits != dict['bits']:
|
|
|
|
|
error('*** expected %d bit build ***' % expect_bits)
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
def linux(dict):
|
|
|
|
|
platform(dict)
|
|
|
|
|
expects = [ 'libdl.so.2'
|
|
|
|
|
, 'libexiv2.so.12'
|
|
|
|
|
, 'libstdc++.so.6'
|
|
|
|
@ -109,39 +121,35 @@ def linux(dict):
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
def windows(dict):
|
|
|
|
|
platform(dict)
|
|
|
|
|
expects = [ 'ntdll.dll'
|
|
|
|
|
, 'kernel32.dll'
|
|
|
|
|
, 'KERNELBASE.dll'
|
|
|
|
|
, 'PSAPI.DLL'
|
|
|
|
|
, 'kernelbase.dll'
|
|
|
|
|
, 'psapi.dll'
|
|
|
|
|
];
|
|
|
|
|
expect(dict,expects)
|
|
|
|
|
|
|
|
|
|
if dict['dll']==1:
|
|
|
|
|
dll='d.dll' if dict['debug']==1 else '.dll'
|
|
|
|
|
expects = [ 'exiv2' + dll
|
|
|
|
|
, 'zlib1' + dll
|
|
|
|
|
, 'libexpat.dll'
|
|
|
|
|
]
|
|
|
|
|
if dict['dll']:
|
|
|
|
|
dll='d.dll' if dict['debug'] else '.dll'
|
|
|
|
|
expects.append( 'exiv2' + dll )
|
|
|
|
|
expects.append( 'zlib1' + dll )
|
|
|
|
|
expects.append('libexpat.dll' )
|
|
|
|
|
|
|
|
|
|
# c run time libraries
|
|
|
|
|
v=int(float(dict['version'])) # 7,8,9,10 etc
|
|
|
|
|
if v in range(8,10):
|
|
|
|
|
expects.append('msvcr%d0%s' % (v,dll) )
|
|
|
|
|
expects.append('msvcp%d0%s' % (v,dll) )
|
|
|
|
|
# 2003=71, 2005=80, 2008=90, 2010=100
|
|
|
|
|
v=int( float(dict['version'])*10 )
|
|
|
|
|
expects.append('msvcr%d%s' % (v,dll) )
|
|
|
|
|
expects.append('msvcp%d%s' % (v,dll) )
|
|
|
|
|
|
|
|
|
|
expect(dict,expects)
|
|
|
|
|
expect(dict,expects)
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
def cygwin(dict):
|
|
|
|
|
platform(dict)
|
|
|
|
|
expects = [ 'ntdll.dll'
|
|
|
|
|
, 'kernel32.dll'
|
|
|
|
|
, 'KERNELBASE.dll'
|
|
|
|
|
, 'kernelbase.dll'
|
|
|
|
|
, 'cygexiv2-12.dll'
|
|
|
|
|
, 'cygwin1.dll'
|
|
|
|
|
, 'cyggcc_s-1.dll'
|
|
|
|
|
, 'cygstdc++-6.dll'
|
|
|
|
|
, 'PSAPI.DLL'
|
|
|
|
|
, 'psapi.dll'
|
|
|
|
|
, 'cygexpat-1.dll'
|
|
|
|
|
, 'cygiconv-2.dll'
|
|
|
|
|
, 'cygintl-8.dll'
|
|
|
|
@ -150,25 +158,12 @@ def cygwin(dict):
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
def mingw(dict):
|
|
|
|
|
platform(dict)
|
|
|
|
|
error("can't test platform mingw")
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
def unknown(dict):
|
|
|
|
|
platform(dict)
|
|
|
|
|
error("can't test platform unknown")
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
def runCommand(command):
|
|
|
|
|
##
|
|
|
|
|
# don't use check_output
|
|
|
|
|
# this is 2.7 feature.
|
|
|
|
|
# Not available cygwin's default python 2.6.8 interpreter
|
|
|
|
|
# result=subprocess.check_output( command.split(' '))
|
|
|
|
|
result =subprocess.Popen(command.split(' '), stdout=subprocess.PIPE).communicate()[0]
|
|
|
|
|
# ensure lines are \n terminated
|
|
|
|
|
return result.replace('\r\n', '\n').replace('\r', '\n')
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
def main(args):
|
|
|
|
|
this=os.path.abspath(args[0])
|
|
|
|
@ -209,6 +204,7 @@ def main(args):
|
|
|
|
|
if type(dict[k])==type([]):
|
|
|
|
|
if len(dict[k])==1:
|
|
|
|
|
dict[k]=dict[k][0]
|
|
|
|
|
|
|
|
|
|
# convert numeric strings to ints
|
|
|
|
|
dict['dll' ] = int(dict['dll'])
|
|
|
|
|
dict['debug'] = int(dict['debug'])
|
|
|
|
@ -216,14 +212,16 @@ def main(args):
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
# analyse the version dictionary
|
|
|
|
|
platform(dict)
|
|
|
|
|
eval(dict['platform']+'(dict)')
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
# report success!
|
|
|
|
|
debug='debug';dll='dll';platform='platform';bits='bits'
|
|
|
|
|
v='Release' if dict[debug]==0 else 'Debug '
|
|
|
|
|
d='DLL' if dict[dll ]==0 else ' '
|
|
|
|
|
print "build %s %dbit %s%s looks good" % (dict[platform],dict[bits],v,d)
|
|
|
|
|
# report
|
|
|
|
|
debug='debug'
|
|
|
|
|
dll='dll'
|
|
|
|
|
v='Release' if dict[debug]==0 else 'Debug'
|
|
|
|
|
d='DLL' if dict[dll ]==0 else ''
|
|
|
|
|
print "build %dbit %-8s %-12s looks good" % (dict['bits'],dict['platform'],v+d)
|
|
|
|
|
else:
|
|
|
|
|
error("exiv2 not found!")
|
|
|
|
|
|
|
|
|
|