@ -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 ( ' \t ProjectSection(ProjectDependencies) = postProject \n ' )
count = 0
out = ' \t ProjectSection(ProjectDependencies) = postProject \n '
for p in projects :
if p != ' webready ' :
s . write ( ' \t \t { %s } = { %s } \n ' % ( uid [ p ] , uid [ p ] ) )
s . write ( ' \t EndProjectSection \n ' )
if not p in ignore :
count = count + 1
out = out + ' \t \t { %s } = { %s } \n ' % ( uid [ p ] , uid [ p ] )
out = out + ' \t EndProjectSection \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__ " :