All pastes #845915 Raw Edit

Someone

public text v1 · immutable
#845915 ·published 2008-01-07 23:28 UTC
rendered paste body
#!/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