nutools/lib/nulib/setup.py

95 lines
3.0 KiB
Python
Raw Normal View History

2018-04-26 23:19:17 +04:00
#!/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)