#! /usr/bin/env python2.2
##
## vi:ts=4:et
##
##---------------------------------------------------------------------------##
##  Author:
##      Markus F.X.J. Oberhumer <markus@oberhumer.com>
##  Copyright:
##      Distributed under the terms of the GNU General Public License.
##  Description:
##      xx
##  Usage:
##      python findexe ls
##      python findexe "python*" [glob expression]
##---------------------------------------------------------------------------##


import fnmatch, getopt, os, re, string, sys


# /***********************************************************************
# //
# ************************************************************************/

opts = {
    "abspath":      0,
    "realpath":     0,
}


def getname(n):
    if opts.get("abspath"):
        n = os.path.abspath(n)
    if opts.get("realpath"):
        n = os.path.realpath(n)
    if opts.get("normpath"):
        n = os.path.normpath(n)
    if opts.get("normcase"):
        n = os.path.normcase(n)
    return n


def main(argv):
    longopts = opts.keys()
    longopts.sort()
    xopts, xargs = getopt.getopt(argv[1:], "", longopts)
    ##print xopts, xargs
    for o, a in xopts:
        if o[:2] == "--":
            o = o[2:]
        assert o
        ##print o, a
        if not a: a = 1
        opts[o] = a
    #
    path = os.environ.get("PATH", "")
    path = string.splitfields(path, os.pathsep)
    #
    re_flags = 0
    if os.name == "nt": re_flags = re.I
    patterns = []
    for pat in xargs:
        p = fnmatch.translate(pat)
        r = re.compile(p, re_flags)
        patterns.append(r)
    #
    result = []
    for dir in path:
        if not dir or not os.path.isdir(dir):
            continue
        try:
            names = os.listdir(dir)
        except:
            names = []
        names.sort()
        for n in names:
            for pat in patterns:
                if pat.match(n):
                    fn = os.path.join(dir, n)
                    if os.path.isfile(fn):
                        exe = getname(fn)
                        if not exe in result:
                            result.append(exe)
    for r in result:
        print r

if __name__ == "__main__":
    sys.exit(main(sys.argv))

