#!/usr/bin/env python

import os, os.path, sys, signal

SAGE_ROOT = os.path.realpath(os.environ['SAGE_ROOT'])

def handler(signum, frame):
    print 'Signal handler called with signal', signum
    sys.exit(1)

def filename_to_modname(fname):
    rpath = os.path.realpath(fname)
    #remove SAGE_ROOT/devel/ from rpath
    nname = rpath[len(SAGE_ROOT)+7:]
    #remove the sage-<brachname>
    nname = nname[nname.find('/')+1:]

    if nname.endswith('__init__.py'):
        return nname[:-12].replace('/','.')

    (root, ext) = os.path.splitext(nname)
    return root.replace('/','.')

def test(fname):
    if os.path.isdir(fname):
        ld = os.listdir(fname)
        #if not ('__nodoctest__' in ld):
        if not '__init__.py' in ld:
            return None
        for i in ld:
            k = test(os.path.join(fname,i))
    else:
        (root, ext) = os.path.splitext(fname)
        if ext in [".py", ".pyx"]:
            modname = filename_to_modname(fname)
            err = os.system('python -c "import ' + modname +'" >/dev/null 2>&1')
            if err != 0:
                print modname, err



if len(sys.argv) < 2:
    print "usage: sage-test-import <filename>"


arg = sys.argv[1]

if not os.path.exists(arg):
    print "%s does not exist, exiting"
    sys.exit(1)

if not os.path.realpath(arg).startswith(SAGE_ROOT):
    print "This script only supports testing modules in a Sage source tree under a corresponding Sage installation"
    sys.exit(1)

signal.signal(signal.SIGTERM, handler)
signal.signal(signal.SIGINT, handler)


test(arg)





