msvc2005/configure.bat Work in progress. Commented strategy to deal with feature request: "remove pngimge.cpp when zlib" is disabled.

v0.27.3
Robin Mills 10 years ago
parent 4cfce114db
commit 552f8cf842

@ -1 +1,3 @@
@ %COPY_CONFIG%
@ REM set COPY_CONFIG=copy/y y:\gnu\exiv2\trunk\msvc2005\configure.py
python configure.py %*%

@ -7,9 +7,11 @@ import optparse
global empty # set: empty
global strings # dict: Visual Studio Strings
global uid # dict: UID of every projects
global project # dict: dependency
global project # dict: dependency sets for every project
global ignore # set: projects to ignore
empty=set([])
ignore=set(['webready'])
strings = {}
strings['Begin']='''Microsoft Visual Studio Solution File, Format Version 9.00
@ -40,7 +42,31 @@ strings['preSolution'] = ''' GlobalSection(SolutionProperties) = preSol
EndGlobalSection
'''
# grep ^Project exiv2.sln | while read line; do p=$(echo $line | cut -d'"' -f 4); u=$(echo $line | cut -d'"' -f 8 | sed -e 's/{//' -e 's/}//' ); echo $p $u ; done
##
# Remove feature (not implemented yet)
# import sys
# import xml.dom.minidom
# global remove # dict: files to removed for an option (not implemented yet)
# remove={}
# remove['zlib'] = set([ 'pngimage.cpp' ])
#
# modify writeProject():
# # Filter every .vcproj foo\foo.vcproj -> foo\foo_configure.vcproj
# xml = xml.dom.minidom.parse('foo\foo.vcproj')
# pretty = xml.toprettyxml()
# lines = pretty.split('\n')
# out = ""
# for line in lines:
# if not line.match( '<File RelativePath="..\..\src\pngimage.cpp"></File>' ):
# out = out + line.remove('\n')
# if not line.match( 'PreprocessorDefinitions=.*"' ):
# line=replace('"$','EXV_MSVC_CONFIGURE"')
# out = out + line.remove('\n')
#
# open('foo\foo_configure.vcproj').write(out)
##
# for l in $(find . -name "*" -type d -maxdepth 1); do l=$(basename $l) ; if [ -e $l/$l.vcproj ]; then xmllint $l/$l.vcproj -pretty 1 | grep RootNamespace ; fi; done
uid = {}
uid['addmoddel' ] = '83914D93-57B3-4718-8A50-662C17C4AE8F'
uid['conntest' ] = 'E015DB8C-C463-4A6B-88EA-AFC671D84B5B'
@ -61,12 +87,18 @@ uid['iptcprint' ] = 'A7D22798-1262-4194-94A5-C636BCB68329'
uid['iptctest' ] = 'AD41F87C-242B-4B61-B767-A9879F0D5C04'
uid['key-test' ] = 'F11358FA-AA36-46E1-BA80-A17B8042BF9B'
uid['largeiptc-test' ] = '953404C9-B20A-4D17-8262-9D9AD1CDC5C1'
uid['libcurl' ] = 'F36F075A-880D-47BA-805F-C47850062121'
uid['libeay32' ] = '2C117585-9BA4-4BFE-8335-E3E9D51D4DA7'
uid['libexiv2' ] = '831EF580-92C8-4CA8-B0CE-3D906280A54D'
uid['libexpat' ] = '6C4C06A3-6F8F-4067-AA4C-D5F41E1FFF9A'
uid['libssh' ] = '729E4E11-3BBA-4306-B53C-8AEC45E70E10'
uid['metacopy' ] = 'AD231915-942F-4083-9671-85E26A5798B0'
uid['mmap-test' ] = '556CB4FC-33BB-4E67-AB0E-1865E67176A5'
uid['openssl' ] = '3D77E4F8-02EE-491F-B01C-EE8012CABA18'
uid['path-test' ] = 'E04D48BF-F529-4267-9311-908E94DF5A49'
uid['prevtest' ] = 'FC7120EC-BEB2-4CC3-9B90-B022F560E584'
uid['remotetest' ] = 'B25A3F96-68E8-4FD4-860E-2C33E539B892'
uid['ssleay32' ] = '6ABBF8BA-0A23-4C5C-8AEB-1B2577625DFA'
uid['stringto-test' ] = '9DCEE051-A07B-4C6B-B2BC-0814F0C323AA'
uid['taglist' ] = 'DBD630FC-0DA9-41EB-925D-70654D01F6FA'
uid['tiff-test' ] = 'C34B11A1-B707-46B2-8053-2FA236B369CF'
@ -78,13 +110,7 @@ uid['xmpparse' ] = '1708EFC1-414E-4712-80A5-813A6F38814C'
uid['xmpparser-test' ] = '85121FD0-01A1-49BA-B168-CC8D90F91A6F'
uid['xmpsample' ] = '45CA5427-4260-4F4A-86B0-FB7AE233D76B'
uid['xmpsdk' ] = '09877CF4-83B6-44FE-A2E2-629AA5C8093E'
#
# for lib in libcurl openssl libssh zlib libexpat; do xmllint $lib/$lib.vcproj -pretty 1 | grep RootNamespace ; done
uid['libcurl' ] = 'F36F075A-880D-47BA-805F-C47850062121'
uid['libexpat' ] = '6C4C06A3-6F8F-4067-AA4C-D5F41E1FFF9A'
uid['zlib' ] = '8308C68D-E12B-4C71-96F4-7137F6BEB654'
uid['libssh' ] = '729E4E11-3BBA-4306-B53C-8AEC45E70E10'
uid['openssl' ] = '3D77E4F8-02EE-491F-B01C-EE8012CABA18'
##
# define project dependances
@ -93,14 +119,15 @@ project = {}
for p in ['libexpat','zlib']:
project[p]=empty
# known dependance
##
# dependancies
project['libcurl' ] = set(['webready' ])
project['libssh' ] = set(['webready' ])
project['openssl' ] = set(['webready' ])
project['xmpparser-test' ] = set(['libexiv2','xmpsdk' ])
project['xmpsample' ] = set(['libexiv2','xmpsdk' ])
project['xmpsdk' ] = set(['libexpat' ])
project['libexiv2' ] = set(['zlib' ,'libexpat','xmpsdk'])
project['libexiv2' ] = set(['zlib' ,'libexpat','xmpsdk','libcurl','libeay32','ssleay32','openssl','libssh'])
project['geotag' ] = set(['libexiv2','libexpat' ])
# all others depend on libexiv2
for p in uid:
@ -119,23 +146,22 @@ def writeCompilationTable(s,uid):
# Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libexiv2", "libexiv2\libexiv2.vcproj", "{831EF580-92C8-4CA8-B0CE-3D906280A54D}"
# ProjectSection(ProjectDependencies) = postProject
# {09877CF4-83B6-44FE-A2E2-629AA5C8093E} = {09877CF4-83B6-44FE-A2E2-629AA5C8093E}
# {6C4C06A3-6F8F-4067-AA4C-D5F41E1FFF9A} = {6C4C06A3-6F8F-4067-AA4C-D5F41E1FFF9A}
# {8308C68D-E12B-4C71-96F4-7137F6BEB654} = {8308C68D-E12B-4C71-96F4-7137F6BEB654}
# ...
# EndProjectSection
# EndProject
# '''
def writeProject(s,project,projects):
UID='8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942' # grep 8BC9 exiv2.sln | head -1
s.write( 'Project("{%s}") = "%s", "%s\%s.vcproj", "{%s}"\n' % (UID,project,project,project,uid[project]) )
count=len(projects)
if 'webready' in projects:
count=count-1
if count > 0:
s.write('\tProjectSection(ProjectDependencies) = postProject\n')
count=0
out='\tProjectSection(ProjectDependencies) = postProject\n'
for p in projects:
if p != 'webready':
s.write( '\t\t{%s} = {%s}\n' % (uid[p],uid[p]) )
s.write('\tEndProjectSection\n')
if not p in ignore:
count=count+1
out = out + '\t\t{%s} = {%s}\n' % (uid[p],uid[p])
out = out + '\tEndProjectSection\n'
if count > 0:
s.write(out)
s.write('EndProject\n')
##
@ -145,9 +171,19 @@ def cantHappen(condition,message):
print(message)
exit(1)
##
# if opt is false, remove lib from all projects
def cleanProjectSet(opt,lib):
if not opt:
ignore.add(lib);
for p in project:
project[p].add(lib)
project[p].remove(lib)
def main():
##
# set up argument parser
usage = "usage: %prog [options] arg"
usage = "usage: %prog [options]+"
parser = optparse.OptionParser(usage)
parser = optparse.OptionParser()
parser.add_option('-W', '--enable-webready' , action='store_true' , dest='webready',help='enable webready' ,default=False)
@ -168,6 +204,8 @@ def main():
parser.add_option('-e', '--disable-expat' , action='store_false', dest='expat' ,help='disable expat' )
parser.add_option('-d', '--default' , action='store_true' , dest='defolt' ,help='default' ,default=True)
##
# no arguments, report and quit
if len(sys.argv) == 1:
parser.print_help()
return
@ -175,14 +213,14 @@ def main():
##
# parse and test for errors
(options, args) = parser.parse_args()
cantHappen(options.curl & (not options.webready),'cannot use curl without webready' );
cantHappen(options.openssl & (not options.webready),'cannot use openssl without webready');
cantHappen(options.ssh & (not options.webready),'cannot use libssh without webready');
cantHappen(options.xmp & (not options.expat ),'cannot use xmp without expat' );
if options.defolt == True:
options.xmp=True
options.zlib=True
options.expat=True
cantHappen(options.curl & (not options.webready),'cannot use curl without webready' );
cantHappen(options.openssl & (not options.webready),'cannot use openssl without webready');
cantHappen(options.ssh & (not options.webready),'cannot use libssh without webready');
cantHappen(options.xmp & (not options.expat ),'cannot use xmp without expat' );
##
# print options
@ -193,12 +231,13 @@ def main():
if o != 'defolt':
print(fmt % (o, v))
if options.curl:
project['libexiv2'].add('libcurl')
if options.openssl:
project['libexiv2'].add('openssl')
if options.ssh:
project['libexiv2'].add('ssh' )
cleanProjectSet(options.curl ,'libcurl' )
cleanProjectSet(options.openssl,'openssl' )
cleanProjectSet(options.openssl,'libeay32')
cleanProjectSet(options.openssl,'ssleay32')
cleanProjectSet(options.xmp ,'xmpsdk' )
cleanProjectSet(options.expat ,'libexpat')
cleanProjectSet(options.zlib ,'zlib' )
##
# open the strings file
@ -210,6 +249,7 @@ def main():
# write projects
print('Projects:',end=' ')
for p in sorted(project):
if not p in ignore:
print(p,end=' ')
projects=project[p]
@ -240,7 +280,7 @@ def main():
s.write(strings['End'])
s.close()
print()
print('MSVC 2005 strings file created: ' + sln)
print('MSVC 2005 Solution file created: ' + sln)
print()
if __name__ == "__main__":

Loading…
Cancel
Save