You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.4 KiB
Python
128 lines
3.4 KiB
Python
#!/usr/bin/python3
|
|
|
|
##
|
|
# tee.py
|
|
# This little script was an effort tsort the dependancies
|
|
# I don't actually need it because I've used depend.py to extract
|
|
# the dependency table from exiv2-webready.sln and pasted it into configure.py
|
|
##
|
|
|
|
import os
|
|
import sys
|
|
import uuid
|
|
import optparse
|
|
import datetime
|
|
import platform
|
|
import xml.dom.minidom
|
|
|
|
class GraphError(Exception):
|
|
pass
|
|
|
|
def tsort(partials):
|
|
"""
|
|
Copyright Nathan Hurst 2001
|
|
Licenced under the LGNU GPL. see COPYING for details.
|
|
"""
|
|
preds = {}
|
|
succs = {}
|
|
output = []
|
|
distinct_value = (0,) # Julian Satchell suggested I use a unique
|
|
# identifier, rather than None as my sentinel
|
|
for i in partials:
|
|
prev = distinct_value;
|
|
for j in i:
|
|
if(not j in preds):
|
|
preds[j] = 0;
|
|
|
|
if(not j in succs):
|
|
succs[j] = {};
|
|
if(not prev is distinct_value):
|
|
if(not prev in succs):
|
|
succs[prev] = {};
|
|
if(not j in succs[prev]):
|
|
succs[prev][j] = 1;
|
|
preds[j] = preds[j] + 1;
|
|
prev = j
|
|
|
|
starts = list(map(lambda a: a[0], filter(lambda a: (a[1] == 0), preds.items())))
|
|
while(len(starts) > 0):
|
|
start = starts[0]
|
|
starts = starts[1:] # prune off start
|
|
output = output + [start];
|
|
for i in succs[start].keys():
|
|
preds[i] = preds[i] - 1;
|
|
if(preds[i] == 0):
|
|
starts.append(i)
|
|
del succs[start];
|
|
result=[]
|
|
for i in reversed(output):
|
|
result.append(i)
|
|
return result
|
|
|
|
def empty():
|
|
return set([])
|
|
|
|
ignore = set(['expat' , 'expat201' , 'expat210' , 'tests' , 'testv'
|
|
,'zlib123' , 'zlib125' , 'zlib127' , 'tools' , 'exiv2lib'
|
|
])
|
|
|
|
##
|
|
# build dict:uid - hunt the tree for .vcproj files
|
|
uid = {}
|
|
for d in os.listdir('.'):
|
|
if os.path.isdir(d) & (not d in ignore):
|
|
for root, dirs, files in os.walk(d):
|
|
for file in files:
|
|
ext = ".vcproj"
|
|
if file.endswith(ext) & (file.find('configure') < 0):
|
|
uid[d]=str(uuid.uuid1())
|
|
|
|
|
|
externlib= set(['libcurl' , 'libexpat' , 'zlib' , 'libcurl'
|
|
,'libeay32' , 'ssleay32' , 'libssh' , 'openssl'
|
|
])
|
|
|
|
|
|
##
|
|
# define project dependances
|
|
# TODO: read exiv-webready.sln to build project/dependency set
|
|
project = {}
|
|
# no dependancy
|
|
for p in externlib:
|
|
project[p]=empty()
|
|
|
|
##
|
|
# dependancies
|
|
project['xmpparser-test' ] = set(['libexiv2','xmpsdk' ])
|
|
project['xmpparse' ] = set(['libexiv2','xmpsdk' ])
|
|
project['xmpsample' ] = set(['libexiv2','xmpsdk' ])
|
|
project['xmpsdk' ] = set([ 'libexpat' ])
|
|
project['geotag' ] = set([ 'libexpat','libexiv2'])
|
|
project['libexiv2' ] = set([ 'libexpat','xmpsdk' ,'zlib','libcurl','libeay32','ssleay32','libssh','openssl'])
|
|
project['libcurl' ] = set(['libeay32','ssleay32','libssh' ])
|
|
project['libssh' ] = set(['libeay32','ssleay32','openssl' ])
|
|
project['libeay32' ] = set(['openssl' ])
|
|
project['ssleay32' ] = set(['openssl' ])
|
|
project['openssl' ] = set(['libcurl' , 'libssh' ])
|
|
project['libexiv2' ] = set(['openssl' ,'zlib','xmpsdk'])
|
|
|
|
##
|
|
# all others depend on libexiv2
|
|
for p in uid:
|
|
if not p in project:
|
|
project[p]=set(['libexiv2'])
|
|
|
|
##
|
|
# tsort the dependencies
|
|
edges=[]
|
|
for p in project:
|
|
for d in project[p]:
|
|
edges.append([p,d])
|
|
|
|
print(edges)
|
|
print('-------------')
|
|
print(tsort(edges))
|
|
|
|
# That's all folks
|
|
##
|