#!/usr/bin/env python ## TODO: compilation of language files (po->mo) is not done here (only by debian/rules) from distutils.core import setup import distutils.sysconfig import os ## define some strings (not patterns) to exclude specific files or directories IGNORE_FILES = [ '.svn', 'intl' ] ## define the data destination directory (below the python directory - we will fix this for debian in the rules file) pydir = distutils.sysconfig.get_python_lib() ## remove installation prefix to get relative path pydir = pydir.replace(distutils.sysconfig.get_config_var("prefix") + os.path.sep, '') pydir = os.path.join(pydir, 'cryptobox') ## shared data dir datadir = os.path.join(pydir, 'share') ## doc dir docdir = os.path.join(pydir, 'doc') ## configuration directory confdir = os.path.join(os.path.sep, 'etc', 'cryptobox-server') def listfiles(prefix,src): """create a list of files below a directory recursively If the src contains more then one path element (multiple levels), then only the last one (basename part) is added to the prefix path (e.g.: 'dest','src1/src2' will create a list below 'dest/src2'). The result is a list of tuples: (destination, [srcfiles,...]). This is the datatype expected by 'data_files' in setup.""" ## we will not add the 'dirname' part of srcdir to the destination src_dir, src_base = os.path.split(src) ## add the files of this directory result = [(os.path.join(prefix,src_base), [ os.path.join(src,f) for f in os.listdir(src) if os.path.isfile(os.path.join(src,f)) and not f in IGNORE_FILES ])] ## add the files in subdirectories for d in os.listdir(src): if os.path.isdir(os.path.join(src,d)) and not d in IGNORE_FILES: result.extend(listfiles(os.path.join(prefix,src_base),os.path.join(src,d))) return result def getdatafiles(prefix,dirs): filelist = [] for d in dirs: if os.path.isdir(d): filelist.extend(listfiles(prefix,d)) else: filelist.append((prefix, [d])) return filelist def get_language_files(prefix): """return a destination-file mapping for all compiled language files (*.po)""" mapping = [] ## find all language directories intl_dirs = [] for root,dirs,files in os.walk(os.getcwd()): if 'intl' in dirs: intl_dirs.append(os.path.join(root,'intl')) print intl_dirs for i_dir in intl_dirs: for lang_dir in [ os.path.join(i_dir,e) for e in os.listdir(i_dir) if os.path.isdir(os.path.join(i_dir,e)) and (not e in IGNORE_FILES) ]: mapping.append((os.path.join(prefix, os.path.basename(lang_dir),'LC_MESSAGES'), [ os.path.join(lang_dir,e) for e in os.listdir(lang_dir) if os.path.isfile(os.path.join(lang_dir,e)) and (e[-3:] == '.po') ])) return mapping setup( name = 'cryptobox-server', version = '0.3.0', description = 'webinterface for handling encrypted disks', author = 'Lars Kruse', author_email = 'devel@sumpfralle.de', maintainer = 'Lars Kruse', maintainer_email = 'devel@sumpfralle.de', license = 'GPL', url = 'http://cryptobox.org', packages = [ 'cryptobox', 'cryptobox.core', 'cryptobox.web', 'cryptobox.plugins', 'cryptobox.tests' ], data_files = getdatafiles(datadir, ['templates','www-data','lang','plugins']) + getdatafiles(confdir, ['conf-examples/cryptobox.conf']) + getdatafiles(os.path.join(confdir,'events.d'), ['event-scripts/README','event-scripts/_event_scripts_']) + getdatafiles(docdir, ['doc/html']) + getdatafiles(docdir, ['conf-examples','event-scripts','README','changelog','LICENSE','copyright','doc/html']) + get_language_files('share/locale'), package_dir = { '': 'src' }, scripts = [ 'bin/CryptoBoxWebserver', 'bin/CryptoBoxRootActions' ], classifiers = [ 'Development Status :: 2 - Beta', 'Environment :: Web Environment', 'Intended Audience :: End Users/Desktop', 'Intended Audience :: System Administrators', 'License :: OSI Approved :: GNU General Public License (GPL)', 'Topic :: System :: Systems Administration', 'Operating System :: POSIX', 'Operating System :: Unix', 'Programming Language :: Python'], )