diff -r 000000000000 -r 044383f39525 sbsv2/raptor/python/sbs_dist.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/python/sbs_dist.py Tue Oct 27 16:36:35 2009 +0000 @@ -0,0 +1,139 @@ +# +# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# raptor linux distribution creation module +# This module allow to crate raptor linux distribution archive (tar.gz) e.g. sbs_linux_dist.tar.gz +# Script extect the following command-line parameters: +# 1. Archive name +# 2. List of files/directories to include +# By default windows specific and source files are excluded. +# example including bin and python subdir: +# sbs_dist.py sbs_linux_dist.tar.gz bin python +# + +import os +import re +import tarfile +import sys +import dos2unix + +#------------------------------------------------------------------------------ +# Create tar.gz archive including given files (fileName list and tarinfo list) +#------------------------------------------------------------------------------ +def createTarGZ(tarName, fileList): + tar = tarfile.open(tarName, "w|gz") + for name in fileList: + tar.add(name) + return tar + +#------------------------------------------------------------------------------ +# Lists files in each of given directories +#------------------------------------------------------------------------------ +def listFilesInDirs(paths): + fileList = [] + for path in paths: + fileList.extend(listFiles(path)) + return fileList + +#------------------------------------------------------------------------------ +# Lists files in given directory +#------------------------------------------------------------------------------ +def listFiles(path): + fileList = [] + for root, dirs, files in os.walk(path): + for index in range(len(files)): + fileList.append(root + "/" + files[index]) + return fileList + +#------------------------------------------------------------------------------ +# Excludes files matching "pattern" from given files list +#------------------------------------------------------------------------------ +def excludeFiles(fileList, pattern): + filteredFileList = [] + regExp = re.compile(pattern) + for fileName in fileList: + if not(regExp.match(fileName)): + filteredFileList.append(fileName) + return filteredFileList + + +#------------------------------------------------------------------------------ +# Groups given paths as files or directories +#------------------------------------------------------------------------------ +def groupFilesAndDirs(filesAndDirs): + files = [] + dirs = [] + for name in filesAndDirs: + if os.path.isdir(name): + dirs.append(name) + else: + if os.path.isfile(name): + files.append(name) + else: + print "Warning: Neither a file nor a directory! Ignoring parameter - " + name + return (files,dirs) + +#------------------------------------------------------------------------------ +# Prepares regular expression to exclude unnecessary files +#------------------------------------------------------------------------------ +def prepareExcludedFilesRegExp(): + pathPrefixRegExp = ".*[\\\/]" + filesRegExp = "((sbs)|(.*\.bat)|(.*\.pyc)|(.*\.cmd)|(.*\.exe)|(.*\.dll)|(sbs_dist.py)" + filesRegExp = filesRegExp + "|(dos2unix.py)|(raptor_py2exe_setup.py)|(make)|(bash)|(bashbug))+" + return "^" + pathPrefixRegExp + filesRegExp + "$" + +#------------------------------------------------------------------------------ +# Includes all files in fileList in given tar with altered executable permision (+X) for all +#------------------------------------------------------------------------------ +def includeAsExecutable(tar, fileList): + for f in fileList: + tarinfo = tar.gettarinfo(f) + # OR with 73 (001 001 001) - +X for all + tarinfo.mode = tarinfo.mode | 73 + tar.addfile(tarinfo,file(f, "rb")) + + +#------------------------------------------------------------------------------ +# Validate script parameters +#------------------------------------------------------------------------------ +def validateParameters(tarFileName, filesToInclude): + if not(len(tarFileName) > 0): + print "Error: No archive name given." + sys.exit() + if not(len(filesToInclude) > 0): + print "Error: No files/directories names to include in archive given." + sys.exit() + + +tarFileName = sys.argv[1] +# files and directories +filesAndDirsToInclude = sys.argv[2:] + +validateParameters(tarFileName, filesAndDirsToInclude) + +(filesToInclude,dirsToInclude) = groupFilesAndDirs(filesAndDirsToInclude) + +fileList = listFilesInDirs(dirsToInclude) +fileList.extend(filesToInclude) + +filteredFileList = excludeFiles(fileList, prepareExcludedFilesRegExp()) + +dos2unix.dos2unix("bin/sbs") + +tar = createTarGZ(tarFileName, filteredFileList) +fileToBeExecutableList = ["bin/sbs", "linux-i386/bin/make", "linux-i386/bin/bash", "linux-i386/bin/bashbug", + "bin/sbs_descramble"] +includeAsExecutable(tar, fileToBeExecutableList) +tar.close() +