#!/usr/bin/env python
import os
import sys
import tsort
# Determine root of sources
try:
source_root = sys.argv[1]
except IndexError:
source_root = os.getcwd()
# Find all slack-required files
slack_requireds = []
for dir_path, dir_names, file_names in os.walk(source_root):
if 'slack-required' in file_names:
slack_requireds.append(os.path.join(dir_path, 'slack-required'))
# Establish initial dependencies
initial_deps = {}
for slack_required in slack_requireds:
app = slack_required.split(os.path.sep)[-3]
initial_deps[app] = []
slack_required = open(slack_required)
for line in slack_required:
# operator is a dummy variable
dep, operator, version = line.split()
slack_build = os.path.join(dep, version, 'src', dep + '.SlackBuild')
# skip dependency if no slack build exists for it
if not os.path.exists(slack_build):
break
if dep not in initial_deps:
initial_deps[dep] = []
initial_deps[app].append(line.split()[0])
# Do topological sort (i.e., find dependencies)
for app in tsort.toposort(initial_deps):
print app