1 | |
---|
2 | # Copyright Aleksey Gurtovoy 2001-2004 |
---|
3 | # |
---|
4 | # Distributed under the Boost Software License, Version 1.0. |
---|
5 | # (See accompanying file LICENSE_1_0.txt or copy at |
---|
6 | # http://www.boost.org/LICENSE_1_0.txt) |
---|
7 | # |
---|
8 | # See http://www.boost.org/libs/mpl for documentation. |
---|
9 | |
---|
10 | # $Source: /cvsroot/boost/boost/libs/mpl/preprocessed/preprocess.py,v $ |
---|
11 | # $Date: 2005/10/04 08:35:29 $ |
---|
12 | # $Revision: 1.5 $ |
---|
13 | |
---|
14 | import pp |
---|
15 | import shutil |
---|
16 | import os.path |
---|
17 | import os |
---|
18 | import string |
---|
19 | import sys |
---|
20 | |
---|
21 | preprocess_cmd = open( "preprocess.cmd" ).readlines()[0] |
---|
22 | |
---|
23 | def process( file, boost_root, dst_dir, mode ): |
---|
24 | file_path = "%s.hpp" % os.path.splitext( file )[0] |
---|
25 | os.system( preprocess_cmd % { |
---|
26 | 'boost_root': boost_root |
---|
27 | , 'mode': mode |
---|
28 | , 'file': file |
---|
29 | , 'file_path': file_path |
---|
30 | } ) |
---|
31 | |
---|
32 | os.rename( file_path, "%s.tmp" % file_path ) |
---|
33 | pp.main( "%s.tmp" % file_path, file_path ) |
---|
34 | os.remove( "%s.tmp" % file_path ) |
---|
35 | |
---|
36 | filename = os.path.basename(file_path) |
---|
37 | dst_dir = os.path.join( dst_dir, mode ) |
---|
38 | dst_file = os.path.join( dst_dir, filename ) |
---|
39 | |
---|
40 | if os.path.exists( dst_file ): |
---|
41 | shutil.copymode( filename, dst_file ) |
---|
42 | |
---|
43 | shutil.copy( filename, dst_dir ) |
---|
44 | os.remove( filename ) |
---|
45 | |
---|
46 | |
---|
47 | def process_all( root, boost_root, dst_dir, mode ): |
---|
48 | files = os.listdir( root ) |
---|
49 | for file in files: |
---|
50 | path = os.path.join( root, file ) |
---|
51 | if os.path.splitext( file )[1] == ".cpp": |
---|
52 | process( path, boost_root, dst_dir, mode ) |
---|
53 | else: |
---|
54 | if os.path.isdir( path ): |
---|
55 | process_all( path, boost_root, dst_dir, mode ) |
---|
56 | |
---|
57 | |
---|
58 | def main( all_modes, src_dir, dst_dir ): |
---|
59 | if len( sys.argv ) < 2: |
---|
60 | print "\nUsage:\n\t %s <mode> <boost_root> [<source_file>]" % os.path.basename( sys.argv[0] ) |
---|
61 | print "\nPurpose:\n\t updates preprocessed version(s) of the header(s) in \"%s\" directory" % dst_dir |
---|
62 | print "\nExample:\n\t the following command will re-generate and update all 'apply.hpp' headers:" |
---|
63 | print "\n\t\t %s all f:\\cvs\\boost apply.cpp" % os.path.basename( sys.argv[0] ) |
---|
64 | sys.exit( -1 ) |
---|
65 | |
---|
66 | if sys.argv[1] == "all": |
---|
67 | modes = all_modes |
---|
68 | else: |
---|
69 | modes = [sys.argv[1]] |
---|
70 | |
---|
71 | boost_root = sys.argv[2] |
---|
72 | dst_dir = os.path.join( boost_root, dst_dir ) |
---|
73 | |
---|
74 | for mode in modes: |
---|
75 | if len( sys.argv ) > 3: |
---|
76 | file = os.path.join( os.path.join( os.getcwd(), src_dir ), sys.argv[3] ) |
---|
77 | process( file, boost_root, dst_dir, mode ) |
---|
78 | else: |
---|
79 | process_all( os.path.join( os.getcwd(), src_dir ), boost_root, dst_dir, mode ) |
---|
80 | |
---|
81 | |
---|
82 | if __name__ == '__main__': |
---|
83 | |
---|
84 | main( |
---|
85 | ["bcc", "bcc551", "gcc", "msvc60", "msvc70", "mwcw", "dmc", "no_ctps", "no_ttp", "plain"] |
---|
86 | , "src" |
---|
87 | , os.path.join( "boost", "mpl", "aux_", "preprocessed" ) |
---|
88 | ) |
---|