| [12] | 1 | # Copyright (c) MetaCommunications, Inc. 2003-2004 | 
|---|
 | 2 | # | 
|---|
 | 3 | # Distributed under the Boost Software License, Version 1.0.  | 
|---|
 | 4 | # (See accompanying file LICENSE_1_0.txt or copy at  | 
|---|
 | 5 | # http://www.boost.org/LICENSE_1_0.txt) | 
|---|
 | 6 |  | 
|---|
 | 7 | import sys | 
|---|
 | 8 | import os | 
|---|
 | 9 | import shutil | 
|---|
 | 10 | import optparse | 
|---|
 | 11 |  | 
|---|
 | 12 |  | 
|---|
 | 13 | import utils | 
|---|
 | 14 |  | 
|---|
 | 15 | my_location  = os.path.abspath( os.path.dirname( sys.argv[0] ) ) | 
|---|
 | 16 |  | 
|---|
 | 17 | def accept_args( args ): | 
|---|
 | 18 |     #( release_version, cvs_tag, sf_user, temp_dir, start_step ) = accept_args( sys.argv[ 1: ] ) | 
|---|
 | 19 |     parser = optparse.OptionParser() | 
|---|
 | 20 |     parser.add_option( "-v", "--release-version", dest="release_version", metavar="release-version", help="release version (e.g. 1.32.0)") | 
|---|
 | 21 |     parser.add_option( "", "--tag",  dest="tag", help="CVS tag" ) | 
|---|
 | 22 |     parser.add_option( "-r", "--cvs-branch", dest="cvs_branch", metavar="cvs-branch" | 
|---|
 | 23 |                        , help = "cvs branch to get the sources from (e.g RC_1_32_0). Important: it is case sensitive" ) | 
|---|
 | 24 |     parser.add_option( "-u", "--sf-user", dest="sf_user", metavar="sf-user" | 
|---|
 | 25 |                        , help = "SourceForge user name (for CVS)" ) | 
|---|
 | 26 |     parser.add_option( "-t", "--toolset", dest="toolset", help="toolset to use to build needed tools" ) | 
|---|
 | 27 |     parser.add_option( "-s", "--start-step", dest="start_step" ) | 
|---|
 | 28 |     parser.usage = "make_tarballs [options] target_directory \n\n" + \ | 
|---|
 | 29 |                    "Requirements:\n" + \ | 
|---|
 | 30 |                    "  CVS:\n"+ \ | 
|---|
 | 31 |                    "    cvs             - (windows) to export sources with windows newlines \n" + \ | 
|---|
 | 32 |                    "    /usr/bin/cvs    - (cygwin) to export sources with posix newlines\n" + \ | 
|---|
 | 33 |                    "  Utilities:\n" + \ | 
|---|
 | 34 |                    "    mv              - (cygwin) posix move\n" + \ | 
|---|
 | 35 |                    "    /usr/bin/find   - (cygwin) to export sources with posix newlines\n" + \ | 
|---|
 | 36 |                    "    7z              - to create zipball\n" + \ | 
|---|
 | 37 |                    "  BoostBook generation:\n" + \ | 
|---|
 | 38 |                    "    bjam\n" + \ | 
|---|
 | 39 |                    "    user-config.jam - in user directory ($HOME/%HOME%)  for BoostBook generation\n" + \ | 
|---|
 | 40 |                    "    java\n" + \ | 
|---|
 | 41 |                    "    doxygen\n" | 
|---|
 | 42 |      | 
|---|
 | 43 |      | 
|---|
 | 44 |  | 
|---|
 | 45 |     ( options, args ) = parser.parse_args( args ) | 
|---|
 | 46 |  | 
|---|
 | 47 |     temp_dir = None | 
|---|
 | 48 |     start_step = None | 
|---|
 | 49 |     if ( len( args ) > 0 ): temp_dir = args[0] | 
|---|
 | 50 |  | 
|---|
 | 51 |      | 
|---|
 | 52 |     ( version, tag, user, toolset, start_step ) =  ( options.release_version | 
|---|
 | 53 |                                          , options.cvs_branch | 
|---|
 | 54 |                                          , options.sf_user | 
|---|
 | 55 |                                          , options.toolset | 
|---|
 | 56 |                                          , options.start_step ) | 
|---|
 | 57 |  | 
|---|
 | 58 |     if ( start_step is None ): start_step = "" | 
|---|
 | 59 |  | 
|---|
 | 60 |     def required( value, name ): | 
|---|
 | 61 |        if ( value is None ): | 
|---|
 | 62 |             print "%s should be specified." % name | 
|---|
 | 63 |             parser.print_help() | 
|---|
 | 64 |             sys.exit( 1 ) | 
|---|
 | 65 |         | 
|---|
 | 66 |     required( version, "version" ) | 
|---|
 | 67 |     required( tag, "tag" ) | 
|---|
 | 68 |     required( user, "user" ) | 
|---|
 | 69 |     required( temp_dir, "temp_dir" ) | 
|---|
 | 70 |     required( toolset, "toolset" ) | 
|---|
 | 71 |                         | 
|---|
 | 72 |     return ( version, tag, user, toolset, temp_dir, start_step ) | 
|---|
 | 73 |  | 
|---|
 | 74 |  | 
|---|
 | 75 | def remove_directory( directory ): | 
|---|
 | 76 |     if os.path.exists( directory ): | 
|---|
 | 77 |         print "    Removing  directory %s" % directory | 
|---|
 | 78 |         os.system( 'rd /s /q "%s"' % directory ) | 
|---|
 | 79 |      | 
|---|
 | 80 | def clean_directory( directory ): | 
|---|
 | 81 |     remove_directory( directory ) | 
|---|
 | 82 |     print "    Creating directory %s" % directory  | 
|---|
 | 83 |     os.makedirs( directory ) | 
|---|
 | 84 |  | 
|---|
 | 85 | def listdir_recursively( root, path="" ): | 
|---|
 | 86 |     # recursive listdir | 
|---|
 | 87 |     files = [] | 
|---|
 | 88 |     try: | 
|---|
 | 89 |         for file in os.listdir(os.path.join(root, path)): | 
|---|
 | 90 |             pathname = os.path.join(path, file) | 
|---|
 | 91 |             if os.path.isdir(os.path.join(root, pathname)): | 
|---|
 | 92 |                 files.extend(listdir_recursively(root, pathname)) | 
|---|
 | 93 |             else: | 
|---|
 | 94 |                 files.append(pathname) | 
|---|
 | 95 |     except OSError: | 
|---|
 | 96 |         pass | 
|---|
 | 97 |     return files | 
|---|
 | 98 |  | 
|---|
 | 99 | def find_file( root, name ): | 
|---|
 | 100 |     print root | 
|---|
 | 101 |     files = listdir_recursively( root ) | 
|---|
 | 102 |     for file in files: | 
|---|
 | 103 |         # print file | 
|---|
 | 104 |         if os.path.basename( file ) == name: | 
|---|
 | 105 |             return os.path.join( root, file ) | 
|---|
 | 106 |     return None | 
|---|
 | 107 |  | 
|---|
 | 108 | start_dir = os.getcwd() | 
|---|
 | 109 |  | 
|---|
 | 110 | class make_tarballs( utils.step_controller ): | 
|---|
 | 111 |     def __init__( self, release_version, cvs_tag, sf_user, toolset, temp_dir, start_step ): | 
|---|
 | 112 |         utils.step_controller.__init__( self, start_step ) | 
|---|
 | 113 |         self.release_version_ = release_version | 
|---|
 | 114 |         self.cvs_tag_         = cvs_tag | 
|---|
 | 115 |         self.sf_user_         = sf_user | 
|---|
 | 116 |         self.toolset_         = toolset | 
|---|
 | 117 |         self.temp_dir_        = temp_dir | 
|---|
 | 118 |      | 
|---|
 | 119 |     def run( self ): | 
|---|
 | 120 |         archives = [] | 
|---|
 | 121 |  | 
|---|
 | 122 |         win_build_results = self.build_win( self.release_version_ | 
|---|
 | 123 |                                          , self.cvs_tag_ | 
|---|
 | 124 |                                          , self.sf_user_ | 
|---|
 | 125 |                                          , self.temp_dir_ ) | 
|---|
 | 126 |         archives.extend( win_build_results[1] ) | 
|---|
 | 127 |          | 
|---|
 | 128 |         archives.extend( self.build_unix( self.release_version_ | 
|---|
 | 129 |                                          , self.cvs_tag_ | 
|---|
 | 130 |                                          , self.sf_user_ | 
|---|
 | 131 |                                          , self.temp_dir_ | 
|---|
 | 132 |                                          , win_build_results[0] ) ) | 
|---|
 | 133 |  | 
|---|
 | 134 |          | 
|---|
 | 135 |         #    os.chdir( start_dir ) | 
|---|
 | 136 |         #    for archive in archives: | 
|---|
 | 137 |         #        shutil.copy( archive, start_dir ) | 
|---|
 | 138 |  | 
|---|
 | 139 |  | 
|---|
 | 140 |     def make_temp_platform( self, temp, platform ): | 
|---|
 | 141 |         temp_platform = os.path.join( temp, platform ) | 
|---|
 | 142 |         if not self.is_skipping(): | 
|---|
 | 143 |             clean_directory( temp_platform ) | 
|---|
 | 144 |         return temp_platform | 
|---|
 | 145 |  | 
|---|
 | 146 |     def cvs_export( self, sf_user, cvs_tag, release_version, shell = "%s" ): | 
|---|
 | 147 |         if not self.is_skipping(): | 
|---|
 | 148 |             print "    Exporting..." | 
|---|
 | 149 |             cvs_export_template = 'cvs -d:ext:%(user)s@cvs.sourceforge.net:/cvsroot/boost -z9 export -r %(branch)s boost' | 
|---|
 | 150 |  | 
|---|
 | 151 |             cmd = cvs_export_template % { "user": sf_user | 
|---|
 | 152 |                                           , "branch" : cvs_tag } | 
|---|
 | 153 |  | 
|---|
 | 154 |             print cmd | 
|---|
 | 155 |             os.system( shell % cmd ) | 
|---|
 | 156 |             os.system( "del /S/F/Q .cvsignore >nul" ) | 
|---|
 | 157 |             # have to use mv instead of os.rename - cygwin cvs sets strange directory permssions | 
|---|
 | 158 |             # which Windows rename or Python's os.rename cannot deal with | 
|---|
 | 159 |             os.system( "mv boost boost_%s" % release_version ) | 
|---|
 | 160 |         return "boost_%s" % release_version | 
|---|
 | 161 |  | 
|---|
 | 162 |     def build_win( self, release_version, cvs_tag, sf_user, temp_dir ): | 
|---|
 | 163 |  | 
|---|
 | 164 |         if "win.export": | 
|---|
 | 165 |             self.start_step( "win.export", "Exporting windows copy" ) | 
|---|
 | 166 |  | 
|---|
 | 167 |             temp_win = self.make_temp_platform( temp_dir, "win" ) | 
|---|
 | 168 |             os.chdir( temp_win ) | 
|---|
 | 169 |  | 
|---|
 | 170 |             exported_dir = self.cvs_export( sf_user, cvs_tag, release_version ) | 
|---|
 | 171 |             self.finish_step( "win.export" ) | 
|---|
 | 172 |          | 
|---|
 | 173 |         self.make_docs( os.path.abspath( exported_dir ), temp_dir ) | 
|---|
 | 174 |  | 
|---|
 | 175 |         if self.start_step( "win.make_readonly", "Making all files writable" ): | 
|---|
 | 176 |             os.chdir( temp_win ) | 
|---|
 | 177 |             utils.checked_system( [ "attrib /S -R *.*" ] ) | 
|---|
 | 178 |             self.finish_step( "win.make_readonly" ) | 
|---|
 | 179 |          | 
|---|
 | 180 |         zip_name = "boost_%s.zip" % release_version | 
|---|
 | 181 |         os.chdir( temp_win ) | 
|---|
 | 182 |  | 
|---|
 | 183 |          | 
|---|
 | 184 |         if self.start_step( "win.zip", "    Zipping" ): | 
|---|
 | 185 |              print "    Zipping" | 
|---|
 | 186 |              if os.path.exists( zip_name ): os.unlink( zip_name ) | 
|---|
 | 187 |  | 
|---|
 | 188 |              utils.checked_system( ["7z a -r -tzip %s %s\* > %s" % ( zip_name, "boost_%s" % release_version, zip_name + ".log" ) ] ) | 
|---|
 | 189 |              self.finish_step( "win.zip" ) | 
|---|
 | 190 |  | 
|---|
 | 191 |  | 
|---|
 | 192 |         return ( os.path.abspath( exported_dir ), [ os.path.abspath( zip_name ) ] ) | 
|---|
 | 193 |  | 
|---|
 | 194 |     def make_docs( self, boost_directory, temp_dir ): | 
|---|
 | 195 |         boostbook_temp = os.path.join( boost_directory, "bin.v2" ) | 
|---|
 | 196 |         tools_directory = os.path.join( temp_dir, "tools" ) | 
|---|
 | 197 |         if not os.path.exists( tools_directory ): | 
|---|
 | 198 |             os.makedirs( tools_directory ) | 
|---|
 | 199 |  | 
|---|
 | 200 |         if self.start_step( "win.make_docs.setup_tools", "Setting up BoostBook tools" ): | 
|---|
 | 201 |             sys.path.append( sys.path[0] + "/../boostbook" ) | 
|---|
 | 202 |             print sys.path | 
|---|
 | 203 |             import setup_boostbook | 
|---|
 | 204 |             os.environ[ "BOOST_ROOT" ] = boost_directory | 
|---|
 | 205 |             setup_boostbook.setup_boostbook( os.path.join( temp_dir, "tools" ) ) | 
|---|
 | 206 |  | 
|---|
 | 207 |         if self.start_step( "win.make_docs.clean", "Clearing \"bin.v2" ): | 
|---|
 | 208 |             if os.path.exists( boostbook_temp ): | 
|---|
 | 209 |                 shutil.rmtree( boostbook_temp ) | 
|---|
 | 210 |             self.finish_step( "win.make_docs.clean" ) | 
|---|
 | 211 |  | 
|---|
 | 212 |              | 
|---|
 | 213 |         cd = os.getcwd() | 
|---|
 | 214 |         os.chdir( os.path.join( boost_directory, "doc" )  ) | 
|---|
 | 215 |  | 
|---|
 | 216 |         if self.start_step( "win.make_docs.correct_permissions", "Making html's writable" ): | 
|---|
 | 217 |             utils.checked_system(  | 
|---|
 | 218 |                 [  | 
|---|
 | 219 |                 "cd html" | 
|---|
 | 220 |                 , "attrib -R *" | 
|---|
 | 221 |                 , "cd .." | 
|---|
 | 222 |                 ] ) | 
|---|
 | 223 |             self.finish_step( "win.make_docs.correct_permissions" ) | 
|---|
 | 224 |  | 
|---|
 | 225 |         def generate( output_format ): | 
|---|
 | 226 |             if self.start_step( "win.make_docs.%s" % output_format, '    Generating %s' % output_format ): | 
|---|
 | 227 |                 utils.checked_system( [  | 
|---|
 | 228 |                     # "set HOME=%s" % my_location | 
|---|
 | 229 |                      "%s -d2 --v2 %s " % ( bjam_path(), output_format ) | 
|---|
 | 230 |                     ] ) | 
|---|
 | 231 |                 self.finish_step( "win.make_docs.%s" % output_format ) | 
|---|
 | 232 |          | 
|---|
 | 233 |         generate( "html" ) | 
|---|
 | 234 |         generate( "docbook" ) | 
|---|
 | 235 |         generate( "fo" ) | 
|---|
 | 236 |  | 
|---|
 | 237 |         if self.start_step( "win.make_docs.copy_docs", "Copying docs into doc directory" ): | 
|---|
 | 238 |             shutil.copy( os.path.join( boostbook_temp, "doc", self.toolset_, "debug", "boost.docbook" ), "boost.docbook" ) | 
|---|
 | 239 |             shutil.copy( os.path.join( boostbook_temp, "doc", self.toolset_, "debug", "boost.fo" ), "boost.fo" ) | 
|---|
 | 240 |             self.finish_step( "win.make_docs.copy_docs" ) | 
|---|
 | 241 |  | 
|---|
 | 242 |  | 
|---|
 | 243 |         if self.start_step( "win.make_docs.clean2", "Copying docs into doc directory" ):             | 
|---|
 | 244 |             shutil.rmtree( boostbook_temp ) | 
|---|
 | 245 |             shutil.rmtree( "xml" ) | 
|---|
 | 246 |             self.finish_step( "win.make_docs.clean2" ) | 
|---|
 | 247 |  | 
|---|
 | 248 |         if self.start_step( "win.make_docs.bb_userman", "Creating Boost.Build user manual" ): | 
|---|
 | 249 |             os.chdir( os.path.join( boost_directory, "tools", "build", "v2", "doc" ) ) | 
|---|
 | 250 |  | 
|---|
 | 251 |             utils.checked_system( [  | 
|---|
 | 252 | #                    "set HOME=%s" % my_location | 
|---|
 | 253 |                     "%s -d2 --v2 pdf" % bjam_path() | 
|---|
 | 254 |                     ] ) | 
|---|
 | 255 |  | 
|---|
 | 256 |             for f in [ "userman.pdf" ]: | 
|---|
 | 257 |                 shutil.copy( find_file( os.path.join( boostbook_temp ), f ), f  ) | 
|---|
 | 258 |  | 
|---|
 | 259 |             shutil.rmtree( boostbook_temp ) | 
|---|
 | 260 |             self.finish_step( "win.make_docs.bb_userman" ) | 
|---|
 | 261 |  | 
|---|
 | 262 |         if self.start_step( "win.make_docs.clean3", boost_directory ): | 
|---|
 | 263 |             for i in os.walk( boost_directory ): | 
|---|
 | 264 |                 for f in i[2]: | 
|---|
 | 265 |                     full_path = os.path.join( i[0], f ) | 
|---|
 | 266 |                     if os.path.splitext( f )[1] in [ ".boostbook" ] \ | 
|---|
 | 267 |                         and os.access( full_path, os.W_OK ): | 
|---|
 | 268 |                         os.unlink( full_path ) | 
|---|
 | 269 |             self.finish_step( "win.make_docs.clean3" ) | 
|---|
 | 270 |                          | 
|---|
 | 271 |  | 
|---|
 | 272 |     def correct_executable_permissions( self, path ): | 
|---|
 | 273 |         if not self.is_skipping(): | 
|---|
 | 274 |             print "    Correcting permissions" | 
|---|
 | 275 |             for i in os.walk( path ): | 
|---|
 | 276 |                 for f in i[2]: | 
|---|
 | 277 |                     if os.path.splitext( f )[1] in ( ".css", ".hpp", ".cpp",\ | 
|---|
 | 278 |                                                      ".html", ".htm", ".rst", \ | 
|---|
 | 279 |                                                      ".pdf", ".xml", ".png",\ | 
|---|
 | 280 |                                                      ".jpg", ".vcproj", ".pattern2", \ | 
|---|
 | 281 |                                                      ".jam", ".bat", ".sty", ".diff" ) \ | 
|---|
 | 282 |                        or os.path.basename( f ).lower() in ( "jamfile", "todo", "makefile", "jamrules", "gnumakefile" ): | 
|---|
 | 283 |                         print os.path.join( i[0], f ) | 
|---|
 | 284 |                         os.system( "chmod a-x %s" % os.path.join( i[0], f ) ) | 
|---|
 | 285 |  | 
|---|
 | 286 |          | 
|---|
 | 287 |     def build_unix( self, release_version, cvs_tag, sf_user, temp_dir, win_build_dir ): | 
|---|
 | 288 |  | 
|---|
 | 289 |         self.start_step( "unix.export", "Exporting unix copy" ) | 
|---|
 | 290 |  | 
|---|
 | 291 |         temp_unix = self.make_temp_platform( temp_dir, "unix" ) | 
|---|
 | 292 |         os.chdir( temp_unix ) | 
|---|
 | 293 |  | 
|---|
 | 294 |         exported_dir = self.cvs_export( sf_user, cvs_tag, release_version, "bash -c \"/usr/bin/%s\"" ) | 
|---|
 | 295 |         self.correct_executable_permissions( "." ) | 
|---|
 | 296 |         self.finish_step( "unix.export" ) | 
|---|
 | 297 |  | 
|---|
 | 298 |         self.copy_docs_to_unix( os.path.abspath( exported_dir ) | 
|---|
 | 299 |                                 , win_build_dir ) | 
|---|
 | 300 |  | 
|---|
 | 301 |         if self.start_step( "unix.make_readonly", "Making all files readonly" ): | 
|---|
 | 302 |             utils.checked_system( [ "chmod -R a-w+r,u+w %s" % temp_unix ] ) | 
|---|
 | 303 |             utils.checked_system( [ "bash -c /usr/bin/find %s -type d -exec chmod u+w {} ;" % temp_unix ] ) | 
|---|
 | 304 |             self.finish_step( "unix.make_readonly" ) | 
|---|
 | 305 |  | 
|---|
 | 306 |         gz_archive_name = "boost_%s" % release_version + ".tar.gz" | 
|---|
 | 307 |         if self.start_step( "unix.gz", "    Making .gz" ): | 
|---|
 | 308 |             if os.path.exists( gz_archive_name  ):  os.unlink( gz_archive_name  ) | 
|---|
 | 309 |             os.system( "tar cfz %s %s" % ( gz_archive_name, "boost_%s" % release_version ) ) | 
|---|
 | 310 |             self.finish_step( "unix.gz" ) | 
|---|
 | 311 |  | 
|---|
 | 312 |         bz2_archive_name = "boost_%s" % release_version + ".tar.bz2" | 
|---|
 | 313 |         if self.start_step( "unix.bz2", "    Making .bz2" ): | 
|---|
 | 314 |             if os.path.exists( bz2_archive_name  ):  os.unlink( bz2_archive_name ) | 
|---|
 | 315 |             os.system( 'bash -c "gunzip -c %s | bzip2 > %s"' % ( gz_archive_name, bz2_archive_name ) ) | 
|---|
 | 316 |             self.finish_step( "unix.bz2" ) | 
|---|
 | 317 |              | 
|---|
 | 318 |         return [ os.path.abspath( x ) for x in ( gz_archive_name, bz2_archive_name ) ] | 
|---|
 | 319 |  | 
|---|
 | 320 |     def remove_x_permission( self, directory ): | 
|---|
 | 321 |         for i in os.walk( directory ): | 
|---|
 | 322 |             for f in i[1]: | 
|---|
 | 323 |                 os.system( "chmod a=xr,u=rwx %s" % os.path.join( i[0], f ) ) | 
|---|
 | 324 |             for f in i[2]: | 
|---|
 | 325 |                 os.system( "chmod a=r,u=rw %s" % os.path.join( i[0], f ) ) | 
|---|
 | 326 |          | 
|---|
 | 327 |     def copy_docs_to_unix( self, unix_boost_directory, win_boost_directory ): | 
|---|
 | 328 |         if self.start_step( "unix.copy_docs", "Copying docs to unix copy" ): | 
|---|
 | 329 |             doc_directory = os.path.join( unix_boost_directory, "doc" ) | 
|---|
 | 330 |             doc_html_directory = os.path.join( doc_directory, "html" ) | 
|---|
 | 331 |             remove_directory( doc_html_directory ) | 
|---|
 | 332 |             utils.checked_system( [ | 
|---|
 | 333 |                 "cp -R %s %s " % ( os.path.join( win_boost_directory, "doc", "html" ) | 
|---|
 | 334 |                                 , doc_html_directory ) | 
|---|
 | 335 |                 ] ) | 
|---|
 | 336 |             for f in [ "boost.docbook", "boost.fo" ]: | 
|---|
 | 337 |                 utils.checked_system( [ | 
|---|
 | 338 |                     "cp %s %s" % ( os.path.join( win_boost_directory, "doc", f ) | 
|---|
 | 339 |                                     , os.path.join( doc_directory, f ) ) | 
|---|
 | 340 |                     ] ) | 
|---|
 | 341 |  | 
|---|
 | 342 |             self.remove_x_permission( doc_directory ) | 
|---|
 | 343 |  | 
|---|
 | 344 |             boost_build_doc_directory = os.path.join( unix_boost_directory, "tools", "build", "v2", "doc" ) | 
|---|
 | 345 |             boost_build_doc_html_directory = os.path.join( boost_build_doc_directory, "html" ) | 
|---|
 | 346 |              | 
|---|
 | 347 |             remove_directory( boost_build_doc_html_directory ) | 
|---|
 | 348 |             utils.checked_system( [ | 
|---|
 | 349 |                 "cp -R %s %s " % ( os.path.join( win_boost_directory, "tools", "build", "v2", "doc", "html" ) | 
|---|
 | 350 |                                 , boost_build_doc_html_directory ) ] ) | 
|---|
 | 351 |  | 
|---|
 | 352 |             for f in [ "userman.pdf" ]: | 
|---|
 | 353 |                 utils.checked_system( [ | 
|---|
 | 354 |                     "cp %s %s " % ( os.path.join( win_boost_directory, "tools", "build", "v2", "doc", f ) | 
|---|
 | 355 |                                     , os.path.join( boost_build_doc_directory, f ) ) ] ) | 
|---|
 | 356 |  | 
|---|
 | 357 |             self.remove_x_permission( boost_build_doc_directory ) | 
|---|
 | 358 |             self.finish_step( "unix.copy_docs" ) | 
|---|
 | 359 |  | 
|---|
 | 360 |  | 
|---|
 | 361 | def bjam_path(): | 
|---|
 | 362 |     if os.path.exists( os.path.join( my_location, "bjam.exe" ) ): | 
|---|
 | 363 |         return os.path.join( my_location, "bjam.exe" ) | 
|---|
 | 364 |     else: | 
|---|
 | 365 |         return "bjam.exe" | 
|---|
 | 366 |          | 
|---|
 | 367 | def main(): | 
|---|
 | 368 |     ( release_version, cvs_tag, sf_user, toolset, temp_dir, start_step ) = accept_args( sys.argv[ 1: ] ) | 
|---|
 | 369 |  | 
|---|
 | 370 |     make_tarballs( release_version, cvs_tag, sf_user, toolset, temp_dir, start_step  ).run() | 
|---|
 | 371 |      | 
|---|
 | 372 | if __name__ == "__main__": | 
|---|
 | 373 |     main() | 
|---|