/[ascend]/trunk/scons/disttar.py
ViewVC logotype

Annotation of /trunk/scons/disttar.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 554 - (hide annotations) (download) (as text)
Tue May 2 00:51:02 2006 UTC (14 years, 5 months ago) by johnpye
File MIME type: text/x-python
File size: 2849 byte(s)
Fixed building of source tarball using 'scons dist'.
Will next add automated building of RPM targets.
Started work on building of separate RPMs for tcltk and python interfaces.
1 johnpye 554 # DistTarBuilder: tool to generate tar files using SCons
2 johnpye 553 # Copyright (C) 2005, 2006 Matthew A. Nicholson
3     #
4 johnpye 554 # This file is free software; you can redistribute it and/or
5 johnpye 553 # modify it under the terms of the GNU Lesser General Public
6     # License version 2.1 as published by the Free Software Foundation.
7     #
8 johnpye 554 # This file is distributed in the hope that it will be useful,
9 johnpye 553 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11     # Lesser General Public License for more details.
12     #
13     # You should have received a copy of the GNU Lesser General Public
14     # License along with this library; if not, write to the Free Software
15     # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 johnpye 554 #
17     # vim: set et sw=3 tw=0 fo=awqorc ft=python:
18 johnpye 553
19     def DistTar(target, source, env):
20     """tar archive builder"""
21    
22     import tarfile
23     import os
24    
25     env_dict = env.Dictionary()
26    
27 johnpye 554 if env_dict.get("DISTTAR_FORMAT") in ["gz", "bz2"]:
28 johnpye 553 tar_format = env_dict["DISTTAR_FORMAT"]
29     else:
30     tar_format = ""
31    
32     # split the target directory, filename, and stuffix
33     base_name = str(target[0]).split('.tar')[0]
34     (target_dir, dir_name) = os.path.split(base_name)
35    
36     # create the target directory if it does not exist
37     if target_dir and not os.path.exists(target_dir):
38     os.makedirs(target_dir)
39    
40     # open our tar file for writing
41     tar = tarfile.open(str(target[0]), "w:%s" % (tar_format,))
42    
43 johnpye 554 excludeexts = env_dict.get('DISTTAR_EXCLUDEEXTS',[])
44     excludedirs = env_dict.get('DISTTAR_EXCLUDEDIRS',[])
45    
46 johnpye 553 # write sources to our tar file
47     for item in source:
48 johnpye 554 for root, dirs, files in os.walk(str(item)):
49     for name in files:
50     ext = os.path.splitext(name)
51     if not ext[1] in excludeexts:
52     relpath = os.path.join(root,name)
53     #print "Adding %s/%s" %(dir_name,relpath)
54     tar.add(os.path.join(root,name),'%s/%s' % (dir_name,relpath))
55     for d in excludedirs:
56     if d in dirs:
57     dirs.remove(d) # don't visit CVS directories etc
58 johnpye 553
59     # all done
60 johnpye 554 print "Closing TAR file"
61 johnpye 553 tar.close()
62    
63     def DistTarSuffix(env, sources):
64     """tar archive suffix generator"""
65    
66     env_dict = env.Dictionary()
67     if env_dict.has_key("DISTTAR_FORMAT") and env_dict["DISTTAR_FORMAT"] in ["gz", "bz2"]:
68     return ".tar." + env_dict["DISTTAR_FORMAT"]
69     else:
70     return ".tar"
71    
72     def generate(env):
73     """
74     Add builders and construction variables for the DistTar builder.
75     """
76     env.Append(BUILDERS = {
77     'DistTar': env.Builder(
78     action = DistTar,
79     suffix = DistTarSuffix,
80     target_factory = env.fs.Entry,
81     ),
82     })
83    
84     env.AppendUnique(
85 johnpye 554 DISTTAR_FORMAT = 'gz'
86     , DISTTAR_EXCLUDEEXTS = ['.o','.os','.so','.a','.dll','.lib']
87     , DISTTAR_EXCLUDEDIRS = ['CVS','.svn']
88 johnpye 553 )
89    
90     def exists(env):
91     """
92     Make sure this tool exists.
93     """
94     try:
95     import os
96     import tarfile
97     except ImportError:
98     return False
99     else:
100     return True

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22