#!/usr/bin/python
# -*- coding: utf-8 -*-

from distutils.core import setup
import os

def find_all_dist_module():
    base_dir = 'src'
    all_files = os.listdir(base_dir)
    modules=[]
    for f in all_files:
        fname = os.path.join(base_dir,f)
        if os.path.isfile(fname):
            ext = f.split('.')[-1]
            #print f.split('.')
            if ext == 'py':
                modules.append(f)
                
    return modules
    
#print find_all_dist_module()

setup(
    name = 'tcutils',
    version = "0.2",
    description = "Cheng Tang 's python libraries",
    author = 'Cheng Tang',
    author_email = 'cashtang@gmail.com',
    platforms=['All'],
    scripts=['vcprojred.py'],
    packages=['tcutils']
    )