From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1Qqiow-0008WQ-4k for garchives@archives.gentoo.org; Tue, 09 Aug 2011 09:41:58 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 64BB721C241; Tue, 9 Aug 2011 09:41:46 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 1227A21C234 for ; Tue, 9 Aug 2011 09:41:45 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 710981B4057 for ; Tue, 9 Aug 2011 09:41:45 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 29C7A8004B for ; Tue, 9 Aug 2011 09:41:44 +0000 (UTC) From: "Sebastian Parborg" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Sebastian Parborg" Message-ID: <6cccf68576fde668220b8e1149c797d38e4b8982.darkdefender@gentoo> Subject: [gentoo-commits] proj/ebuildgen:master commit in: /, filetypes/ X-VCS-Repository: proj/ebuildgen X-VCS-Files: filetypes/autoconf.py filetypes/automake.py filetypes/ctypefiles.py scanfiles.py X-VCS-Directories: / filetypes/ X-VCS-Committer: darkdefender X-VCS-Committer-Name: Sebastian Parborg X-VCS-Revision: 6cccf68576fde668220b8e1149c797d38e4b8982 Date: Tue, 9 Aug 2011 09:41:44 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: 94a83c6bbb832f728907e3ee83fbd196 commit: 6cccf68576fde668220b8e1149c797d38e4b8982 Author: Sebastian Parborg gmail com> AuthorDate: Tue Aug 2 00:02:39 2011 +0000 Commit: Sebastian Parborg gmail com> CommitDate: Tue Aug 2 00:02:39 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/ebuildgen.git= ;a=3Dcommit;h=3D6cccf685 Added some basic support for include flags and m4_include --- filetypes/autoconf.py | 15 ++++++++++++--- filetypes/automake.py | 25 ++++++++++++++++++++----- filetypes/ctypefiles.py | 17 +++++++++-------- scanfiles.py | 22 +++++++++++++--------- 4 files changed, 54 insertions(+), 25 deletions(-) diff --git a/filetypes/autoconf.py b/filetypes/autoconf.py index 9b9dba0..71ec0b2 100644 --- a/filetypes/autoconf.py +++ b/filetypes/autoconf.py @@ -357,7 +357,7 @@ def scanacfile(acfile): =20 from filetypes.acif import parseif =20 -def output(inputlst): +def output(inputlst,topdir): variables =3D dict() iflst =3D [] for item in inputlst: @@ -397,6 +397,11 @@ def output(inputlst): #"!" =3D=3D not zero/defined, "" zero/not define= d if_state[1][var] =3D "true" =20 + elif item[0] =3D=3D "m4_include": + newvar,newiflst =3D output(scanacfile(openfile(topdir + item= [1])),topdir) + variables.update(newvar) + iflst +=3D newiflst + #for variable in variables: #print(variable) #print(variables[variable]) @@ -466,5 +471,9 @@ def convnames(string): #strip none alfanumeric chars = and replace them with "_" return newstr =20 #this is no a good name, come up with a better one! -def scanac(acfile): - return output(scanacfile(acfile)) +def scanac(acfile,topdir): + return output(scanacfile(acfile),topdir) + +def openfile(ofile): + with open(ofile, encoding=3D"utf-8", errors=3D"replace") as inputfil= e: + return inputfile.read() =20 diff --git a/filetypes/automake.py b/filetypes/automake.py index d338b71..3bd061e 100644 --- a/filetypes/automake.py +++ b/filetypes/automake.py @@ -253,6 +253,8 @@ def scanamfile(amfile): =20 def initscan(amfile,iflst): useflag_sources =3D {} #{source: [useflag, value]} + incflag_sources =3D {} #{source: [include flags]} + top_dir =3D os.path.split(amfile)[0] + "/" =20 def scan(amfile): curdir =3D os.path.split(amfile)[0] + "/" @@ -260,6 +262,7 @@ def initscan(amfile,iflst): #print(amfile) =20 def sources_to_scan(amlist,curdir): + incflags =3D [] sources =3D [] extra_sources =3D [] #perhaps use set() here to eliminate the possibilty of dupli= cates? @@ -278,12 +281,23 @@ def initscan(amfile,iflst): for file in ifstate[1][item.strip("@= ")]: for src in extra_sources: if file.split(".")[0] =3D=3D= src.split(".")[0]: - useflag_sources.update({= curdir + src : ifstate[0]}) + useflag_sources[curdir += src] =3D ifstate[0] + incflag_sources[curdir += src] =3D incflags =20 for src in extra_sources: if item.split(".")[0] =3D=3D src.split(".")[= 0]: sources +=3D [src] =20 + if variable.split("_")[-1] =3D=3D "CFLAGS": + for item in amlist[0][variable]: + if item[:2] =3D=3D "-I": + if item[2:] =3D=3D "$(top_srcdir)" or item[2= :] =3D=3D "$(srcdir)": + incflags +=3D [top_dir] + elif item[2] =3D=3D "/": + incflags +=3D [item[2:]] + else: + incflags +=3D [curdir + item[2:]] + if "SUBDIRS" in amlist[0]: for dir in amlist[0]["SUBDIRS"]: sources +=3D scan(curdir + dir + "/Makefile.am") @@ -291,7 +305,7 @@ def initscan(amfile,iflst): for lst in amlist[1]: if lst[0] =3D=3D "SUBDIRS": for dir in lst[1]: - sources +=3D scan(curdir + dir + "/Makefile.am") + sources +=3D scan(curdir + dir + "/Makefile.am") =20 for ifstatement in amlist[2]: #print(ifstatement) @@ -300,24 +314,25 @@ def initscan(amfile,iflst): if ifstatement[0] =3D=3D "!": if item[1][ifstatement.lstrip("!")] =3D=3D "= false": for src in sources_to_scan(amlist[2][ifs= tatement],curdir): - useflag_sources.update({src : item[0= ]}) + useflag_sources[src] =3D item[0] =20 elif item[1][ifstatement] =3D=3D "true": for src in sources_to_scan(amlist[2][ifstate= ment],curdir): - useflag_sources.update({src : item[0]}) + useflag_sources[src] =3D item[0] =20 #add filepath dirsources =3D [] for source in sources: if os.path.split(source)[0] =3D=3D "": dirsources +=3D [curdir + source] + incflag_sources[curdir + source] =3D incflags else: dirsources +=3D [source] =20 return dirsources =20 return sources_to_scan(amlist,curdir) - return scan(amfile),useflag_sources + return scan(amfile),useflag_sources,incflag_sources =20 def openfile(ofile): with open(ofile, encoding=3D"utf-8", errors=3D"replace") as inputfil= e: diff --git a/filetypes/ctypefiles.py b/filetypes/ctypefiles.py index ef6cbc5..e6b9624 100644 --- a/filetypes/ctypefiles.py +++ b/filetypes/ctypefiles.py @@ -4,7 +4,7 @@ from ply import yacc =20 #lex stuff begins here =20 -def scanincludes(string,inclst,curdir): +def scanincludes(string,inclst,curdir,incpaths): """Scan ctype files for #includes =20 Adds and returns new includes to the supplied include list @@ -103,7 +103,7 @@ def scanincludes(string,inclst,curdir): """ includes : includes linc """ - if islocalinc(p[2],curdir): + if islocalinc(p[2],curdir,incpaths): p[1][1].add(p[2]) else: p[1][0].add(p[2]) @@ -142,7 +142,7 @@ def scanincludes(string,inclst,curdir): "includes : linc" locinc =3D set() locinc.add(p[1]) - if islocalinc(p[1], curdir): + if islocalinc(p[1], curdir, incpaths): p[0] =3D [set(),locinc,{}] else: p[0] =3D [locinc,set(),{}] @@ -168,18 +168,19 @@ def scanincludes(string,inclst,curdir): newinclst =3D addnewincludes(newinclst,inclst) return(newinclst) =20 -def islocalinc(inc, curdir): +def islocalinc(inc, curdir, incpaths): """Checks if this is a local include =20 Checks if the file can be found with the path that is supplied. If not this is probably a global include and thus return False """ + incpaths +=3D [curdir + "/"] =20 - if glob.glob(curdir + "/" + inc) =3D=3D []: - return False - else: - return True + for incpath in incpaths: + if not glob.glob(incpath + inc) =3D=3D []: + return True =20 + return False =20 def addnewincludes(inclist1,inclist2): """Adds new includes to the first inclist and return it diff --git a/scanfiles.py b/scanfiles.py index a14200f..584158b 100644 --- a/scanfiles.py +++ b/scanfiles.py @@ -80,11 +80,14 @@ def scanautotoolsdeps(acfile,amfile): returns. """ #these are not really useflags yet. So perhaps change name? - useflags, iflst =3D scanac(openfile(acfile)) - srcfiles, src_useflag =3D initscan(amfile, iflst) + topdir =3D os.path.split(amfile)[0] + "/" + useflags, iflst =3D scanac(openfile(acfile),topdir) + srcfiles, src_useflag, src_incflag =3D initscan(amfile, iflst) =20 + #print(iflst) + #print(srcfiles) #standard includes - includes =3D scanfilelist(srcfiles) + includes =3D scanfilelist(srcfiles,src_incflag) =20 def inter_useflag(uselst): if uselst[1] =3D=3D "yes" or uselst[1] =3D=3D "!no": @@ -106,12 +109,12 @@ def scanautotoolsdeps(acfile,amfile): useargs[usearg] =3D [src] =20 for usearg in useargs: - useargs[usearg] =3D scanfilelist(useargs[usearg]) + useargs[usearg] =3D scanfilelist(useargs[usearg],src_incflag) =20 print(useargs) - #print(includes) + print(includes) =20 -def scanfilelist(filelist): +def scanfilelist(filelist,src_incflag): """ Scan files in filelist for #includes =20 returns a includes list with this structure: @@ -126,9 +129,10 @@ def scanfilelist(filelist): =20 for file in filelist: #print(file) + incpaths =3D src_incflag[file] filestring =3D openfile(file) if not filestring =3D=3D None: - inclst =3D scanincludes(filestring,inclst,os.path.split(file= )[0]) + inclst =3D scanincludes(filestring,inclst,os.path.split(file= )[0],incpaths) =20 return(inclst) =20 @@ -159,5 +163,5 @@ def openfile(file): except IOError: print('cannot open', file) =20 -#scanautotoolsdeps("/usr/portage/distfiles/svn-src/moc/trunk/configure.i= n","/usr/portage/distfiles/svn-src/moc/trunk/Makefile.am") -print(scanfilelist(["/usr/portage/distfiles/svn-src/moc/trunk/decoder_pl= ugins/sidplay2/sidplay2.h"])) +scanautotoolsdeps("/usr/portage/distfiles/svn-src/moc/trunk/configure.in= ","/usr/portage/distfiles/svn-src/moc/trunk/Makefile.am") +#print(scanfilelist(["/usr/portage/distfiles/svn-src/moc/trunk/decoder_p= lugins/sidplay2/sidplay2.h"]))