mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-pkg
synced 2026-01-23 22:40:38 +01:00
projects.py: Fix ldflags, dependencies
- Don't include self in ldflags anymore - Disable endless loop detection, because it skip dependencies - Add function warning() Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
8f8b593fd7
commit
c009df6d62
1 changed files with 66 additions and 47 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
#!/usr/bin/python -u
|
#!/usr/bin/python -u
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
import sys
|
import sys
|
||||||
import argparse
|
import argparse
|
||||||
from sets import Set
|
from sets import Set
|
||||||
|
|
@ -13,8 +14,11 @@ def re_section(name):
|
||||||
'.*?'
|
'.*?'
|
||||||
'(?=[)',
|
'(?=[)',
|
||||||
re.DOTALL)
|
re.DOTALL)
|
||||||
|
|
||||||
# --------------------------------------------------------------------- helpers
|
# --------------------------------------------------------------------- helpers
|
||||||
|
|
||||||
|
def warning(*objs):
|
||||||
|
print("WARNING: ", *objs, file=sys.stderr)
|
||||||
|
|
||||||
def proj_dir(name):
|
def proj_dir(name):
|
||||||
return projs_root + '/' + name
|
return projs_root + '/' + name
|
||||||
|
|
||||||
|
|
@ -37,8 +41,40 @@ def get_section(path, section):
|
||||||
file.close()
|
file.close()
|
||||||
return r.rstrip()
|
return r.rstrip()
|
||||||
|
|
||||||
|
def read_value(path, section, key):
|
||||||
|
warning("opening ", path)
|
||||||
|
try:
|
||||||
|
file = open(path)
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
r = ()
|
||||||
|
if not len(section):
|
||||||
|
for line in file:
|
||||||
|
r = re.findall('^ *' + key + ' *= *(.*)', line)
|
||||||
|
if (len(r) > 0):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
in_section = False
|
||||||
|
pat = '[' + section + ']'
|
||||||
|
for line in file:
|
||||||
|
if (line.rstrip() == pat):
|
||||||
|
in_section = True
|
||||||
|
continue
|
||||||
|
if in_section:
|
||||||
|
if len(line) and line[0] == '[':
|
||||||
|
break
|
||||||
|
r = re.findall('^ *' + key + ' *= *(.*)', line)
|
||||||
|
if (len(r) > 0):
|
||||||
|
break
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
if len(r):
|
||||||
|
return r[0]
|
||||||
|
return None
|
||||||
|
|
||||||
def get_value(name, section, key):
|
def get_value(name, section, key):
|
||||||
if topdir and name == basename(realpath(topdir)):
|
#print("top_name = ", top_name)
|
||||||
|
if top_name and name == top_name:
|
||||||
proj_root = topdir
|
proj_root = topdir
|
||||||
else:
|
else:
|
||||||
proj_root = projs_root + '/' + name
|
proj_root = projs_root + '/' + name
|
||||||
|
|
@ -49,38 +85,9 @@ def get_value(name, section, key):
|
||||||
file.close()
|
file.close()
|
||||||
return r
|
return r
|
||||||
|
|
||||||
r = ()
|
path = proj_root + '/make/project.conf'
|
||||||
for conf in [ '/make/project.conf', '/doc/share/project.txt' ]:
|
#print('path = ', path, 'top_name = ', top_name, 'name = ', name)
|
||||||
path = proj_root + conf
|
return read_value(path, section, key)
|
||||||
try:
|
|
||||||
file = open(path)
|
|
||||||
except:
|
|
||||||
continue
|
|
||||||
if not len(section):
|
|
||||||
for line in file:
|
|
||||||
r = re.findall('^ *' + key + ' *= *(.*)', line)
|
|
||||||
if (len(r) > 0):
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
in_section = False
|
|
||||||
pat = '[' + section + ']'
|
|
||||||
for line in file:
|
|
||||||
if (line.rstrip() == pat):
|
|
||||||
in_section = True
|
|
||||||
continue
|
|
||||||
if in_section:
|
|
||||||
if len(line) and line[0] == '[':
|
|
||||||
break
|
|
||||||
r = re.findall('^ *' + key + ' *= *(.*)', line)
|
|
||||||
if (len(r) > 0):
|
|
||||||
break
|
|
||||||
file.close()
|
|
||||||
|
|
||||||
if len(r):
|
|
||||||
return r[0]
|
|
||||||
return ''
|
|
||||||
|
|
||||||
return None
|
|
||||||
|
|
||||||
# scope 0: no children
|
# scope 0: no children
|
||||||
# scope 1: children
|
# scope 1: children
|
||||||
|
|
@ -93,10 +100,11 @@ def add_modules_from_project_txt(buf, visited, spec, section, key, add_self, sco
|
||||||
spec = name
|
spec = name
|
||||||
if spec in buf:
|
if spec in buf:
|
||||||
return
|
return
|
||||||
if spec in visited:
|
#if spec in visited:
|
||||||
return
|
# return
|
||||||
visited.add(spec)
|
visited.add(spec)
|
||||||
deps = get_value(name, section, key)
|
deps = get_value(name, section, key)
|
||||||
|
warning("name = ", name, "section = ", section, "key = ", key, "deps = ", deps, "scope = ", scope, "visited = ", visited)
|
||||||
if deps and scope > 0:
|
if deps and scope > 0:
|
||||||
if scope == 1:
|
if scope == 1:
|
||||||
subscope = 0
|
subscope = 0
|
||||||
|
|
@ -130,8 +138,10 @@ def get_libname(names):
|
||||||
return ' '.join(reversed(vals))
|
return ' '.join(reversed(vals))
|
||||||
|
|
||||||
def get_ldflags(names):
|
def get_ldflags(names):
|
||||||
|
#print(names)
|
||||||
deps = get_modules_from_project_txt(names, 'pkg.required', 'build',
|
deps = get_modules_from_project_txt(names, 'pkg.required', 'build',
|
||||||
scope = 1, add_self=True, names_only=True)
|
scope = 1, add_self=False, names_only=True)
|
||||||
|
#print(deps)
|
||||||
r = ''
|
r = ''
|
||||||
for m in reversed(deps):
|
for m in reversed(deps):
|
||||||
libname = get_libname([m])
|
libname = get_libname([m])
|
||||||
|
|
@ -147,7 +157,7 @@ def cmd_test(args_):
|
||||||
parser = argparse.ArgumentParser(description='Test')
|
parser = argparse.ArgumentParser(description='Test')
|
||||||
parser.add_argument('blah', default='', help='The blah argument')
|
parser.add_argument('blah', default='', help='The blah argument')
|
||||||
args=parser.parse_args(args_)
|
args=parser.parse_args(args_)
|
||||||
print "blah = " + args.blah
|
print("blah = " + args.blah)
|
||||||
|
|
||||||
def cmd_ldlibpath(args_):
|
def cmd_ldlibpath(args_):
|
||||||
parser = argparse.ArgumentParser(description='ldlibpath')
|
parser = argparse.ArgumentParser(description='ldlibpath')
|
||||||
|
|
@ -158,19 +168,19 @@ def cmd_ldlibpath(args_):
|
||||||
r = ''
|
r = ''
|
||||||
for m in deps:
|
for m in deps:
|
||||||
r = r + ':' + proj_dir(m) + '/lib'
|
r = r + ':' + proj_dir(m) + '/lib'
|
||||||
print r[1:]
|
print(r[1:])
|
||||||
|
|
||||||
def cmd_libname(args_):
|
def cmd_libname(args_):
|
||||||
parser = argparse.ArgumentParser(description='libname')
|
parser = argparse.ArgumentParser(description='libname')
|
||||||
parser.add_argument('module', nargs='*', help='Modules')
|
parser.add_argument('module', nargs='*', help='Modules')
|
||||||
args=parser.parse_args(args_)
|
args=parser.parse_args(args_)
|
||||||
print get_libname(args.module)
|
print(get_libname(args.module))
|
||||||
|
|
||||||
def cmd_ldflags(args_):
|
def cmd_ldflags(args_):
|
||||||
parser = argparse.ArgumentParser(description='ldlibpath')
|
parser = argparse.ArgumentParser(description='ldlibpath')
|
||||||
parser.add_argument('module', nargs='*', help='Modules')
|
parser.add_argument('module', nargs='*', help='Modules')
|
||||||
args=parser.parse_args(args_)
|
args=parser.parse_args(args_)
|
||||||
print get_ldflags(args.module)
|
print(get_ldflags(args.module))
|
||||||
|
|
||||||
def cmd_cflags(args_):
|
def cmd_cflags(args_):
|
||||||
parser = argparse.ArgumentParser(description='ldlibpath')
|
parser = argparse.ArgumentParser(description='ldlibpath')
|
||||||
|
|
@ -181,7 +191,7 @@ def cmd_cflags(args_):
|
||||||
r = ''
|
r = ''
|
||||||
for m in reversed(deps):
|
for m in reversed(deps):
|
||||||
r = r + ' -I' + proj_dir(m) + '/include'
|
r = r + ' -I' + proj_dir(m) + '/include'
|
||||||
print r[1:]
|
print(r[1:])
|
||||||
|
|
||||||
def cmd_path(args_):
|
def cmd_path(args_):
|
||||||
parser = argparse.ArgumentParser(description='path')
|
parser = argparse.ArgumentParser(description='path')
|
||||||
|
|
@ -192,7 +202,7 @@ def cmd_path(args_):
|
||||||
r = ''
|
r = ''
|
||||||
for m in deps:
|
for m in deps:
|
||||||
r = r + ':' + proj_dir(m) + '/bin'
|
r = r + ':' + proj_dir(m) + '/bin'
|
||||||
print r[1:]
|
print(r[1:])
|
||||||
|
|
||||||
def cmd_pkg_requires(args_):
|
def cmd_pkg_requires(args_):
|
||||||
parser = argparse.ArgumentParser(description='pkg-requires')
|
parser = argparse.ArgumentParser(description='pkg-requires')
|
||||||
|
|
@ -201,7 +211,10 @@ def cmd_pkg_requires(args_):
|
||||||
args=parser.parse_args(args_)
|
args=parser.parse_args(args_)
|
||||||
r = []
|
r = []
|
||||||
for m in args.module:
|
for m in args.module:
|
||||||
deps = get_value(m, 'pkg.required', args.flavour).split(',')
|
value = get_value(m, 'pkg.required', args.flavour)
|
||||||
|
if not value:
|
||||||
|
continue
|
||||||
|
deps = value.split(',')
|
||||||
for spec in deps:
|
for spec in deps:
|
||||||
dep = re.split('([=><]+)', spec)
|
dep = re.split('([=><]+)', spec)
|
||||||
for i, item in enumerate(dep):
|
for i, item in enumerate(dep):
|
||||||
|
|
@ -216,7 +229,7 @@ def cmd_pkg_requires(args_):
|
||||||
else:
|
else:
|
||||||
raise Exception("Unknown version specifier in " + spec)
|
raise Exception("Unknown version specifier in " + spec)
|
||||||
r.append(' '.join(dep))
|
r.append(' '.join(dep))
|
||||||
print ', '.join(r)
|
print(', '.join(r))
|
||||||
|
|
||||||
def cmd_proj_dir(args_):
|
def cmd_proj_dir(args_):
|
||||||
parser = argparse.ArgumentParser(description='proj-dir')
|
parser = argparse.ArgumentParser(description='proj-dir')
|
||||||
|
|
@ -225,10 +238,11 @@ def cmd_proj_dir(args_):
|
||||||
r = []
|
r = []
|
||||||
for m in args.module:
|
for m in args.module:
|
||||||
r.append(proj_dir(m))
|
r.append(proj_dir(m))
|
||||||
print ' '.join(r)
|
print(' '.join(r))
|
||||||
|
|
||||||
# -------------------------------------------------------------------- here we go
|
# -------------------------------------------------------------------- here we go
|
||||||
|
|
||||||
|
warning("running ", ' '.join(sys.argv))
|
||||||
global_args = []
|
global_args = []
|
||||||
skip = 0
|
skip = 0
|
||||||
for a in sys.argv[1::]:
|
for a in sys.argv[1::]:
|
||||||
|
|
@ -250,7 +264,12 @@ parser.add_argument('--prefix', '-p', nargs='?', default = expanduser("~") +
|
||||||
parser.add_argument('arg', nargs='*', help='Command arguments')
|
parser.add_argument('arg', nargs='*', help='Command arguments')
|
||||||
args=parser.parse_args(global_args)
|
args=parser.parse_args(global_args)
|
||||||
projs_root = args.prefix
|
projs_root = args.prefix
|
||||||
topdir = args.topdir
|
if args.topdir:
|
||||||
|
topdir = args.topdir
|
||||||
|
top_name = read_value(topdir + '/make/project.conf', 'build', 'name')
|
||||||
|
if not top_name:
|
||||||
|
top_name = re.sub('-[0-9.-]*$', '', basename(realpath(topdir)))
|
||||||
|
|
||||||
cmd = getattr(sys.modules[__name__], 'cmd_' + args.cmd.replace('-', '_'))
|
cmd = getattr(sys.modules[__name__], 'cmd_' + args.cmd.replace('-', '_'))
|
||||||
cmd(sys.argv[(len(global_args) + 1)::])
|
cmd(sys.argv[(len(global_args) + 1)::])
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue