mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-pkg
synced 2026-01-15 03:53:32 +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
|
||||
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
import argparse
|
||||
from sets import Set
|
||||
|
|
@ -13,8 +14,11 @@ def re_section(name):
|
|||
'.*?'
|
||||
'(?=[)',
|
||||
re.DOTALL)
|
||||
|
||||
# --------------------------------------------------------------------- helpers
|
||||
|
||||
def warning(*objs):
|
||||
print("WARNING: ", *objs, file=sys.stderr)
|
||||
|
||||
def proj_dir(name):
|
||||
return projs_root + '/' + name
|
||||
|
||||
|
|
@ -37,8 +41,40 @@ def get_section(path, section):
|
|||
file.close()
|
||||
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):
|
||||
if topdir and name == basename(realpath(topdir)):
|
||||
#print("top_name = ", top_name)
|
||||
if top_name and name == top_name:
|
||||
proj_root = topdir
|
||||
else:
|
||||
proj_root = projs_root + '/' + name
|
||||
|
|
@ -49,38 +85,9 @@ def get_value(name, section, key):
|
|||
file.close()
|
||||
return r
|
||||
|
||||
r = ()
|
||||
for conf in [ '/make/project.conf', '/doc/share/project.txt' ]:
|
||||
path = proj_root + conf
|
||||
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
|
||||
path = proj_root + '/make/project.conf'
|
||||
#print('path = ', path, 'top_name = ', top_name, 'name = ', name)
|
||||
return read_value(path, section, key)
|
||||
|
||||
# scope 0: no children
|
||||
# scope 1: children
|
||||
|
|
@ -93,10 +100,11 @@ def add_modules_from_project_txt(buf, visited, spec, section, key, add_self, sco
|
|||
spec = name
|
||||
if spec in buf:
|
||||
return
|
||||
if spec in visited:
|
||||
return
|
||||
#if spec in visited:
|
||||
# return
|
||||
visited.add(spec)
|
||||
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 scope == 1:
|
||||
subscope = 0
|
||||
|
|
@ -130,8 +138,10 @@ def get_libname(names):
|
|||
return ' '.join(reversed(vals))
|
||||
|
||||
def get_ldflags(names):
|
||||
#print(names)
|
||||
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 = ''
|
||||
for m in reversed(deps):
|
||||
libname = get_libname([m])
|
||||
|
|
@ -147,7 +157,7 @@ def cmd_test(args_):
|
|||
parser = argparse.ArgumentParser(description='Test')
|
||||
parser.add_argument('blah', default='', help='The blah argument')
|
||||
args=parser.parse_args(args_)
|
||||
print "blah = " + args.blah
|
||||
print("blah = " + args.blah)
|
||||
|
||||
def cmd_ldlibpath(args_):
|
||||
parser = argparse.ArgumentParser(description='ldlibpath')
|
||||
|
|
@ -158,19 +168,19 @@ def cmd_ldlibpath(args_):
|
|||
r = ''
|
||||
for m in deps:
|
||||
r = r + ':' + proj_dir(m) + '/lib'
|
||||
print r[1:]
|
||||
print(r[1:])
|
||||
|
||||
def cmd_libname(args_):
|
||||
parser = argparse.ArgumentParser(description='libname')
|
||||
parser.add_argument('module', nargs='*', help='Modules')
|
||||
args=parser.parse_args(args_)
|
||||
print get_libname(args.module)
|
||||
print(get_libname(args.module))
|
||||
|
||||
def cmd_ldflags(args_):
|
||||
parser = argparse.ArgumentParser(description='ldlibpath')
|
||||
parser.add_argument('module', nargs='*', help='Modules')
|
||||
args=parser.parse_args(args_)
|
||||
print get_ldflags(args.module)
|
||||
print(get_ldflags(args.module))
|
||||
|
||||
def cmd_cflags(args_):
|
||||
parser = argparse.ArgumentParser(description='ldlibpath')
|
||||
|
|
@ -181,7 +191,7 @@ def cmd_cflags(args_):
|
|||
r = ''
|
||||
for m in reversed(deps):
|
||||
r = r + ' -I' + proj_dir(m) + '/include'
|
||||
print r[1:]
|
||||
print(r[1:])
|
||||
|
||||
def cmd_path(args_):
|
||||
parser = argparse.ArgumentParser(description='path')
|
||||
|
|
@ -192,7 +202,7 @@ def cmd_path(args_):
|
|||
r = ''
|
||||
for m in deps:
|
||||
r = r + ':' + proj_dir(m) + '/bin'
|
||||
print r[1:]
|
||||
print(r[1:])
|
||||
|
||||
def cmd_pkg_requires(args_):
|
||||
parser = argparse.ArgumentParser(description='pkg-requires')
|
||||
|
|
@ -201,7 +211,10 @@ def cmd_pkg_requires(args_):
|
|||
args=parser.parse_args(args_)
|
||||
r = []
|
||||
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:
|
||||
dep = re.split('([=><]+)', spec)
|
||||
for i, item in enumerate(dep):
|
||||
|
|
@ -216,7 +229,7 @@ def cmd_pkg_requires(args_):
|
|||
else:
|
||||
raise Exception("Unknown version specifier in " + spec)
|
||||
r.append(' '.join(dep))
|
||||
print ', '.join(r)
|
||||
print(', '.join(r))
|
||||
|
||||
def cmd_proj_dir(args_):
|
||||
parser = argparse.ArgumentParser(description='proj-dir')
|
||||
|
|
@ -225,10 +238,11 @@ def cmd_proj_dir(args_):
|
|||
r = []
|
||||
for m in args.module:
|
||||
r.append(proj_dir(m))
|
||||
print ' '.join(r)
|
||||
print(' '.join(r))
|
||||
|
||||
# -------------------------------------------------------------------- here we go
|
||||
|
||||
warning("running ", ' '.join(sys.argv))
|
||||
global_args = []
|
||||
skip = 0
|
||||
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')
|
||||
args=parser.parse_args(global_args)
|
||||
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(sys.argv[(len(global_args) + 1)::])
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue