#!/usr/bin/env python# pylint: disable-msg=W0142,W0403,W0404,E0611,W0613,W0622,W0622,W0704# pylint: disable-msg=R0904,C0103## Copyright (c) 2003 LOGILAB S.A. (Paris, FRANCE).# http://www.logilab.fr/ -- mailto:contact@logilab.fr## This program is free software; you can redistribute it and/or modify it under# the terms of the GNU General Public License as published by the Free Software# Foundation; either version 2 of the License, or (at your option) any later# version.## This program is distributed in the hope that it will be useful, but WITHOUT# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.## You should have received a copy of the GNU General Public License along with# this program; if not, write to the Free Software Foundation, Inc.,# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.""" Generic Setup script, takes package info from __pkginfo__.py file """from__future__importnested_scopes__revision__='$Id: setup.py,v 1.26 2006-03-05 15:47:17 syt Exp $'importosimportsysimportshutilfromdistutils.coreimportsetupfromdistutils.commandimportinstall_libfromos.pathimportisdir,exists,join,walk# import required featuresfrom__pkginfo__importmodname,version,license,short_desc,long_desc, \
web,author,author_email,classifiers# import optional featurestry:from__pkginfo__importdistnameexceptImportError:distname=modnametry:from__pkginfo__importscriptsexceptImportError:scripts=[]try:from__pkginfo__importdata_filesexceptImportError:data_files=Nonetry:from__pkginfo__importsubpackage_ofexceptImportError:subpackage_of=Nonetry:from__pkginfo__importinclude_dirsexceptImportError:include_dirs=[]try:from__pkginfo__importext_modulesexceptImportError:ext_modules=NoneBASE_BLACKLIST=('CVS','debian','dist','build','__buildlog','.svn')IGNORED_EXTENSIONS=('.pyc','.pyo','.elc')defensure_scripts(linux_scripts):""" Creates the proper script names required for each platform (taken from 4Suite) """fromdistutilsimportutilifutil.get_platform()[:3]=='win':scripts_=[script+'.bat'forscriptinlinux_scripts]else:scripts_=linux_scriptsreturnscripts_defget_packages(directory,prefix):"""return a list of subpackages for the given directory """result=[]forpackageinos.listdir(directory):absfile=join(directory,package)ifisdir(absfile):ifexists(join(absfile,'__init__.py'))or \
packagein('test','tests'):ifprefix:result.append('%s.%s'%(prefix,package))else:result.append(package)result+=get_packages(absfile,result[-1])returnresultdefexport(from_dir,to_dir,blacklist=BASE_BLACKLIST,ignore_ext=IGNORED_EXTENSIONS):"""make a mirror of from_dir in to_dir, omitting directories and files listed in the black list """defmake_mirror(arg,directory,fnames):"""walk handler"""fornorecursinblacklist:try:fnames.remove(norecurs)exceptValueError:passforfilenameinfnames:# don't include binary filesiffilename[-4:]inignore_ext:continueiffilename[-1]=='~':continuesrc='%s/%s'%(directory,filename)dest=to_dir+src[len(from_dir):]print>>sys.stderr,src,'->',destifos.path.isdir(src):ifnotexists(dest):os.mkdir(dest)else:ifexists(dest):os.remove(dest)shutil.copy2(src,dest)try:os.mkdir(to_dir)exceptOSError,ex:# file exists ?importerrnoifex.errno!=errno.EEXIST:raisewalk(from_dir,make_mirror,None)EMPTY_FILE='"""generated file, don\'t modify or your data will be lost"""\n'classMyInstallLib(install_lib.install_lib):"""extend install_lib command to handle package __init__.py and include_dirs variable if necessary """defrun(self):"""overridden from install_lib class"""install_lib.install_lib.run(self)# create Products.__init__.py if neededifsubpackage_of:product_init=join(self.install_dir,subpackage_of,'__init__.py')ifnotexists(product_init):self.announce('creating %s'%product_init)stream=open(product_init,'w')stream.write(EMPTY_FILE)stream.close()# manually install included directories if anyifinclude_dirs:ifsubpackage_of:base=join(subpackage_of,modname)else:base=modnamefordirectoryininclude_dirs:dest=join(self.install_dir,base,directory)export(directory,dest)definstall(**kwargs):"""setup entry point"""ifsubpackage_of:package=subpackage_of+'.'+modnamekwargs['package_dir']={package:'.'}packages=[package]+get_packages(os.getcwd(),package)else:kwargs['package_dir']={modname:'.'}packages=[modname]+get_packages(os.getcwd(),modname)kwargs['packages']=packagesreturnsetup(name=distname,version=version,license=license,description=short_desc,long_description=long_desc,author=author,author_email=author_email,url=web,classifiers=classifiers,scripts=ensure_scripts(scripts),data_files=data_files,ext_modules=ext_modules,cmdclass={'install_lib':MyInstallLib},**kwargs)if__name__=='__main__':install()