95 lines
3.0 KiB
Python
Executable File
95 lines
3.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: utf-8 mode: python -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
|
|
NAME = 'nulib'
|
|
VERSION = None
|
|
DESCRIPTION = 'Librairies python de nulib'
|
|
AUTHOR = 'Jephte CLAIN'
|
|
EMAIL = 'Jephte.Clain@univ-reunion.fr'
|
|
MODULES = ()
|
|
SRCDIR = 'python'
|
|
PACKAGE_DIR = {'': SRCDIR}
|
|
PACKAGE_DATA = {}
|
|
PACKAGES = []
|
|
SCRIPTS = []
|
|
|
|
import os, sys, re, fnmatch, tempfile, atexit, shutil
|
|
from os import path
|
|
NULIBDIR = path.dirname(path.abspath(__file__))
|
|
|
|
################################################################################
|
|
|
|
RE_VERSION = re.compile(r'(\d+(?:\.\d+)*)(?:-r(\d+/\d+/\d+))?')
|
|
def get_version(basedir=None):
|
|
if basedir is None:
|
|
basedir = path.split(path.abspath(sys.argv[0]))[0]
|
|
version_txt = path.join(basedir, 'VERSION.txt')
|
|
if not path.isfile(version_txt): return ''
|
|
try:
|
|
inf = open(version_txt, 'rb')
|
|
try: line = inf.readline()
|
|
finally: inf.close()
|
|
except:
|
|
return ''
|
|
mo = RE_VERSION.match(line)
|
|
if not mo: return ''
|
|
return mo.group(1)
|
|
|
|
def findf(spec, bp):
|
|
"""Transformer le package bp en chemin, puis chercher récursivement les
|
|
fichiers correspondant à la spécification spec à partir de SRCDIR/bp
|
|
"""
|
|
files = []
|
|
bp = bp.replace(".", "/")
|
|
bpdir = path.join(SRCDIR, bp)
|
|
bpnames = os.listdir(bpdir)
|
|
for specname in fnmatch.filter(bpnames, spec):
|
|
specfile = path.join(bpdir, specname)
|
|
if path.isfile(specfile):
|
|
files.append(specname)
|
|
else:
|
|
for dirpath, dirnames, filenames in os.walk(specfile):
|
|
dirnames.remove('.svn')
|
|
dirpath = dirpath[len(bpdir)+1:]
|
|
files.extend([path.join(dirpath, filename) for filename in filenames])
|
|
return files
|
|
|
|
def fixp(p, bp):
|
|
"""Transformer le package bp en chemin, puis exprimer le chemin relatif p
|
|
par rapport au chemin du package, puis ajouter SRCDIR/ devant le chemin
|
|
"""
|
|
bp = bp.replace(".", "/")
|
|
return path.join(SRCDIR, bp, p)
|
|
def addp(name, data=()):
|
|
"""Ajouter un package, avec ses fichiers de données
|
|
"""
|
|
global PACKAGES, PACKAGE_DATA
|
|
PACKAGES.append(name)
|
|
if data:
|
|
files = []
|
|
for spec in data:
|
|
files.extend(findf(spec, name))
|
|
PACKAGE_DATA[name] = files
|
|
def adds(name, scripts=()):
|
|
"""Ajouter des scripts contenus dans un package
|
|
"""
|
|
global SCRIPTS
|
|
if scripts:
|
|
SCRIPTS.extend(map(lambda s: fixp(s, name), scripts))
|
|
|
|
if VERSION is None: VERSION = get_version()
|
|
#addp(module)
|
|
|
|
if __name__ == '__main__':
|
|
from distutils.core import setup
|
|
setup(name=NAME, version=VERSION,
|
|
description=DESCRIPTION, author=AUTHOR, author_email=EMAIL,
|
|
py_modules=MODULES,
|
|
package_dir=PACKAGE_DIR, package_data=PACKAGE_DATA, packages=PACKAGES,
|
|
scripts=SCRIPTS,
|
|
)
|
|
# nettoyer le répertoire build/ en cas de succès
|
|
builddir = path.join(NULIBDIR, "build")
|
|
if path.isdir(builddir):
|
|
atexit.register(shutil.rmtree, builddir)
|