added uninstall
[sfa.git] / setup.py
1 #!/usr/bin/python
2
3 """
4 Installation script for the geniwrapper module
5 """
6
7 from distutils.core import setup, Extension
8 import os, sys
9
10 version = '0.2'
11 scripts = ['geni/gimport.py', 'geni/plc.py', 'cmdline/sfi.py']
12 package_dirs = ['geni', 'geni/util', 'geni/methods']
13 data_files = [('/etc/geni/', ['geni/aggregates.xml', 'geni/registries.xml', 'geni/util/geni_config', 'cmdline/configSfi.sh'])]
14
15 def list_dir(directory):
16     # list the files in this directory
17     try:
18         files = os.listdir(directory)
19         add_directory_path = lambda path: directory + os.sep + path
20         # add absolute path to files
21         files = map(add_directory_path, files)
22         # separate files from directories
23         files_only = lambda path: os.path.isfile(path)
24         directories_only = lambda path: os.path.isdir(path)
25         directories = filter(directories_only, files)
26         files = filter(files_only, files)
27         for d in directories:
28             try:
29                 (fs, ds) = list_dir(d)
30                 files.extend(fs)
31             except: 
32                 print "Error listing", d
33         return (files, directories)
34     except:
35         return ([], [])
36         
37         
38 if sys.argv[1] in ['uninstall', 'remove', 'delete']:
39     python_path = sys.path
40     site_packages_only = lambda path: path.endswith('site-packages') 
41     site_packages_path = filter(site_packages_only, python_path)
42     add_geni_path = lambda path: path + os.sep + 'geni'
43     site_packages_path = map(add_geni_path, site_packages_path) 
44     remove_dirs = ['/etc/geni/'] + site_packages_path
45     remove_files = ['/usr/bin/gimport.py', '/usr/bin/plc.py', '/usr/bin/sfi.py']
46     # update list of files/directories to remove
47     for directory in remove_dirs:
48         files, dirs = list_dir(directory)
49         remove_files.extend(list(set(files)))
50         remove_dirs.extend(dirs)
51         remove_dirs.reverse()
52
53     # remove files   
54     for filepath in remove_files:
55         print "removing", filepath, " ... ",
56         try: 
57             os.remove(filepath)
58             print "success"
59         except: print "failed"
60     # remove directories 
61     for directory in remove_dirs: 
62         print "removing", directory, " ... ",
63         try: 
64             os.rmdir(directory)
65             print "success"
66         except: print "failed"
67  
68 else:
69     setup(name='geniwrapper', 
70       version = version,
71       packages = package_dirs, 
72       data_files = data_files,
73       ext_modules = [],
74       py_modules = [],
75       scripts = scripts,   
76       url = 'http://svn.planet-lab.org/svn/geniwrapper/',
77       description = "Geni api",      
78       long_description = """\
79 Geniwrapper implements the Geni interface which serves 
80 as a layer between the existing PlanetLab interfaces 
81 and the Geni API.
82                     """,
83       license = 'GPL')