From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1OyoJn-0007O6-C3 for mharc-grub-devel@gnu.org; Thu, 23 Sep 2010 12:06:43 -0400 Received: from [140.186.70.92] (port=52458 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OyoJS-0007AY-Nc for grub-devel@gnu.org; Thu, 23 Sep 2010 12:06:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OyoJH-0007Ea-KS for grub-devel@gnu.org; Thu, 23 Sep 2010 12:06:17 -0400 Received: from mail-bw0-f41.google.com ([209.85.214.41]:59402) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OyoJH-0007EU-8f for grub-devel@gnu.org; Thu, 23 Sep 2010 12:06:11 -0400 Received: by bwz10 with SMTP id 10so1806679bwz.0 for ; Thu, 23 Sep 2010 09:06:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :x-enigmail-version:content-type; bh=VvwvRgW0Q1abConcrYYJkFTezqU90s+M143TcMop004=; b=AVSV622yBVDaHJRYglWg4eueoGZ171dGFBSk1ZSIG+P0y0PTL0KBqHSsiy6LqSJDt0 dQwf1SkqeKfQax/ZeZ6LF8QJ+ohj8fkXNJ3AlBurKD6qfPlv8r4oa1GjMhwlLBvCT5Pk t7fPAQcd7GMcQHEfNNrrNuos+oPWHsmahNKFM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:x-enigmail-version:content-type; b=HCoAJAvfOxNAz+E1f698rN2X4fEOzec/HwE0noVjojrOr65WITmF39vmSphBSwj29I 7ZCale8waR0hUlwKmjP2DRB4r/TtcaNbHb0FMDYFctByEOVU5nEe2uXi5zE87tR99/Rd 008WeqSntKUls3goUCcargmvyO5DMwGXCYjF4= Received: by 10.204.39.203 with SMTP id h11mr1330023bke.8.1285257969375; Thu, 23 Sep 2010 09:06:09 -0700 (PDT) Received: from debian.bg45.phnet (vpn-global-dhcp2-75.ethz.ch [129.132.209.75]) by mx.google.com with ESMTPS id 24sm751195bkr.7.2010.09.23.09.06.03 (version=TLSv1/SSLv3 cipher=RC4-MD5); Thu, 23 Sep 2010 09:06:06 -0700 (PDT) Message-ID: <4C9B65F1.10909@gmail.com> Date: Thu, 23 Sep 2010 16:36:33 +0200 From: =?UTF-8?B?VmxhZGltaXIgJ8+GLWNvZGVyL3BoY29kZXInIFNlcmJpbmVua28=?= User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.11) Gecko/20100805 Icedove/3.0.6 MIME-Version: 1.0 To: grub-devel@gnu.org References: <20100921183525.GP21862@riva.ucam.org> <20100923130819.GV21862@riva.ucam.org> In-Reply-To: <20100923130819.GV21862@riva.ucam.org> X-Enigmail-Version: 1.0.1 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="------------enig6550AEB39E9BC4D07339D854" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) Subject: Re: [PATCH] Re-enable grub-extras X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Sep 2010 16:06:41 -0000 This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig6550AEB39E9BC4D07339D854 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Go ahead for both trunk and extras On 09/23/2010 03:08 PM, Colin Watson wrote: > On Tue, Sep 21, 2010 at 07:35:30PM +0100, Colin Watson wrote: > =20 >> Here's a patch to re-enable grub-extras by allowing extra modules to >> provide Autogen definitions files. A few things to note: >> =20 > Vladimir commented on this on IRC, noting three problems. In reverse > order of complexity: > > 1) The GRUB_CONTRIB check in autogen.sh should also check for > grub-core/contrib. > > Fixed. > > 2) What's the problem with renaming g2hdr.bin to g2hdr.img? > > I know of at least one piece of software which expects the current file= > name: win32-loader, written by Robert and maintained in Debian. It > probably wouldn't be completely awful to change this, but it would be > nice not to need to. That said, perhaps g2hdr.bin could be a symlink t= o > g2hdr.img (which could be done in Makefile.common). I've updated my > patch to do this, and removed the extension-override facility from > gentpl.py. > > 3) It would be nice if extra modules could add new sources to existing > targets defined in one of the main definitions files: for example, i= t > would be useful to be able to add zfs to libgrub.a. > > This was the hard bit that took me a day or two to fix. > > Vladimir's original suggestion on IRC was to create a separate > libgrubzfs.a and arrange to link the utilities with that as well. When= > I looked into this, I decided that I didn't like this approach because > it simply pushes the problem of appending to an existing list up a > level; as far as the Autogen definitions go, there isn't a significant > difference between appending to grub_probe_LDADD and appending to > libgrub_a_SOURCES. I would prefer to solve this some other way. > > My preferred approach is to try not to expose any of the difficulties i= n > the definitions file, so that it can just look like this: > > library =3D { > name =3D libgrub.a; > common =3D contrib/zfs/zfs.c; > common =3D contrib/zfs/zfs_lzjb.c; > common =3D contrib/zfs/zfs_sha256.c; > common =3D contrib/zfs/zfs_fletcher.c; > cppflags =3D '$(ZFS_CPPFLAGS)'; > cflags =3D '$(ZFS_CFLAGS)'; > }; > > Doing this actually turned out to be very difficult because Autogen's > native macros aren't powerful enough: they can only really emit text > rather than using temporary storage, which means that you can't do > things like "look for all the library blocks with the same name and > concatenate them" or "append to _SOURCES variables if we've seen them > before". Some Automake variables can be handled with simple appends > while some of them have some boilerplate only at the start which > shouldn't be repeated; Automake variables must be initialised exactly > once on all possible intersections of conditional paths; and we should > also avoid generating duplicate rules. All these constraints make it a= > hard problem. > > Fortunately, Autogen supports embedding bits of Guile, which makes the > problem merely hard rather than impossible. I tried a few different > approaches, and the one that I found to be most practical is in the > following patch: effectively we remember whether we've seen a given > target before and treat it slightly differently, and furthermore we emi= t > initialisations for non-global variables to avoid problems with > Automake's restrictions on variable initialisation. > > For now, I only implemented this for 'library' blocks, so something tha= t > wants to compile extra files into the GRUB kernel for example will be > out of luck. If people feel this is an onerous restriction then it's > fairly easy to fix; I was just trying not to change too much at once, > particularly for paths I wasn't going to test. > > Doing this involved feeding all the files relevant to a given Automake > input stream to Autogen in one go, so I eliminated Makefile.gcry.am. > > This was an exercise in programming in six languages at once (Python, > Autogen native macros, Guile, Autogen definitions, Automake, and make).= > I found it to be a bit much, and my impression is that Autogen got in > the way more than it helped. I suggest that after 1.99 we should look > at having a Python program generate Automake input directly, which woul= d > avoid many contortions and allow us to improve the output (it could > merge the multiple _SOURCES lines into just one per conditional path, > for instance). The .def file format is of course just fine as it is, > and could easily be preserved. > > =20 >> * Extra modules may also provide Makefile.common with literal Automa= ke >> input, for those cases where it's too hard to cram things into >> Autogen. >> =20 > I also added Makefile.core.common and Makefile.util.common (starting to= > run out of good names) for literal Automake input that should only be > used in grub-core or at the top level respectively. ntldr-img needed > the former. > > Once again, the required patches to grub-extras modules are attached. > > 2010-09-22 Colin Watson > > Re-enable grub-extras. > > * autogen.sh: Create symlinks to ${GRUB_CONTRIB} if necessary to > avoid confusing Automake. Run autogen only twice, once for the top > level and once for grub-core. Add Makefile.util.def and > Makefile.core.def from extra modules to the appropriate autogen > invocations. If Makefile.common exists in an extra module, include > it in both Makefile.util.am and grub-core/Makefile.core.am; > similarly, include any Makefile.util.common file in Makefile.util.am > and any Makefile.core.common file in grub-core/Makefile.core.am. > * conf/Makefile.common ($(top_srcdir)/grub-core/Makefile.core.am): > Depend on $(top_srcdir)/grub-core/Makefile.gcry.def. > ($(top_srcdir)/grub-core/Makefile.gcry.def): Remove. > * grub-core/Makefile.am: Remove inclusion of Makefile.gcry.am. > > * gentpl.py (gvar_add): Turn GVARS into a set. > (global_variable_initializers): Sort global variables on output. > (vars_init): New function. > (first_time): Likewise. > (library): Ensure that non-global variable initialisations are > emitted before the first time we emit code for a library block. > Append to variables rather than setting them. Only emit > noinst_LIBRARIES, BUILT_SOURCES, and CLEANFILES the first time for > each conditional path. > (program): installdir() emits an Autogen macro, so must be passed to > var_add rather than gvar_add. > (data): Likewise. > (script): Likewise. > (rules): New function, centralising handling for different target > types. Set up Guile association lists for first_time and vars_init, > and send most output to a diversion so that variable initialisations > can be emitted first. > (module_rules): Use new rules function. > (kernel_rules): Likewise. > (image_rules): Likewise. > (library_rules): Likewise. > (program_rules): Likewise. > (script_rules): Likewise. > (data_rules): Likewise. > > * configure.ac: Add AC_PROG_LN_S, for the benefit of ntldr-img. > > * .bzrignore: Add contrib and grub-core/contrib. Remove > grub-core/Makefile.gcry.am. > > =3D=3D=3D modified file '.bzrignore' > --- .bzrignore 2010-09-20 13:03:47 +0000 > +++ .bzrignore 2010-09-22 13:07:15 +0000 > @@ -104,9 +104,10 @@ grub-core/lib/libgcrypt-grub > **/.deps-core > **/.dirstamp > Makefile.util.am > +contrib > grub-core/Makefile.core.am > -grub-core/Makefile.gcry.am > grub-core/Makefile.gcry.def > +grub-core/contrib > grub-core/genmod.sh > grub-core/gensyminfo.sh > grub-core/*.module > > =3D=3D=3D modified file 'autogen.sh' > --- autogen.sh 2010-08-23 08:37:29 +0000 > +++ autogen.sh 2010-09-23 10:36:52 +0000 > @@ -14,9 +14,50 @@ echo "Creating Makefile.tpl..." > python gentpl.py | sed -e '/^$/{N;/^\n$/D;}' > Makefile.tpl > =20 > echo "Running autogen..." > -autogen -T Makefile.tpl Makefile.util.def | sed -e '/^$/{N;/^\n$/D;}' = > Makefile.util.am > -autogen -T Makefile.tpl grub-core/Makefile.core.def | sed -e '/^$/{N;/= ^\n$/D;}' > grub-core/Makefile.core.am > -autogen -T Makefile.tpl grub-core/Makefile.gcry.def | sed -e '/^$/{N;/= ^\n$/D;}' > grub-core/Makefile.gcry.am > + > +# Automake doesn't like including files from a path outside the projec= t. > +rm -f contrib grub-core/contrib > +if [ "x${GRUB_CONTRIB}" !=3D x ]; then > + [ "${GRUB_CONTRIB}" =3D contrib ] || ln -s "${GRUB_CONTRIB}" contrib= > + [ "${GRUB_CONTRIB}" =3D grub-core/contrib ] || ln -s ../contrib grub= -core/contrib > +fi > + > +UTIL_DEFS=3DMakefile.util.def > +CORE_DEFS=3D'grub-core/Makefile.core.def grub-core/Makefile.gcry.def' > + > +for extra in contrib/*/Makefile.util.def; do > + if test -e "$extra"; then > + UTIL_DEFS=3D"$UTIL_DEFS $extra" > + fi > +done > + > +for extra in contrib/*/Makefile.core.def; do > + if test -e "$extra"; then > + CORE_DEFS=3D"$CORE_DEFS $extra" > + fi > +done > + > +cat $UTIL_DEFS | autogen -T Makefile.tpl | sed -e '/^$/{N;/^\n$/D;}' >= Makefile.util.am > +cat $CORE_DEFS | autogen -T Makefile.tpl | sed -e '/^$/{N;/^\n$/D;}' >= grub-core/Makefile.core.am > + > +for extra in contrib/*/Makefile.common; do > + if test -e "$extra"; then > + echo "include $extra" >> Makefile.util.am > + echo "include $extra" >> grub-core/Makefile.core.am > + fi > +done > + > +for extra in contrib/*/Makefile.util.common; do > + if test -e "$extra"; then > + echo "include $extra" >> Makefile.util.am > + fi > +done > + > +for extra in contrib/*/Makefile.core.common; do > + if test -e "$extra"; then > + echo "include $extra" >> grub-core/Makefile.core.am > + fi > +done > =20 > echo "Saving timestamps..." > echo timestamp > stamp-h.in > > =3D=3D=3D modified file 'conf/Makefile.common' > --- conf/Makefile.common 2010-09-21 12:37:50 +0000 > +++ conf/Makefile.common 2010-09-22 13:09:44 +0000 > @@ -146,11 +146,7 @@ $(top_srcdir)/Makefile.util.am: $(top_sr > mv $@.new $@ > =20 > .PRECIOUS: $(top_srcdir)/grub-core/Makefile.core.am > -$(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/grub-core/Make= file.core.def $(top_srcdir)/Makefile.tpl > - autogen -T $(top_srcdir)/Makefile.tpl $< | sed -e '/^$$/{N;/^\\n$$/D;= }' > $@.new || (rm -f $@.new; exit 1) > - mv $@.new $@ > - > -.PRECIOUS: $(top_srcdir)/grub-core/Makefile.gcry.am > -$(top_srcdir)/grub-core/Makefile.gcry.am: $(top_srcdir)/grub-core/Make= file.gcry.def $(top_srcdir)/Makefile.tpl > - autogen -T $(top_srcdir)/Makefile.tpl $< | sed -e '/^$$/{N;/^\\n$$/D;= }' > $@.new || (rm -f $@.new; exit 1) > +$(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/grub-core/Make= file.core.def $(top_srcdir)/grub-core/Makefile.gcry.def $(top_srcdir)/Mak= efile.tpl > + if [ "x$$GRUB_CONTRIB" !=3D x ]; then echo "You need to run ./autogen= =2Esh manually." >&2; exit 1; fi > + autogen -T $(top_srcdir)/Makefile.tpl $(top_srcdir)/grub-core/Makefil= e.core.def $(top_srcdir)/grub-core/Makefile.gcry.def | sed -e '/^$$/{N;/^= \\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) > mv $@.new $@ > > =3D=3D=3D modified file 'configure.ac' > --- configure.ac 2010-09-21 09:42:30 +0000 > +++ configure.ac 2010-09-22 12:11:35 +0000 > @@ -235,6 +235,7 @@ AC_PROG_LEX > AC_PROG_YACC > AC_PROG_MAKE_SET > AC_PROG_MKDIR_P > +AC_PROG_LN_S > =20 > if test "x$LEX" =3D "x:"; then > AC_MSG_ERROR([flex is not found]) > > =3D=3D=3D modified file 'gentpl.py' > --- gentpl.py 2010-09-19 13:24:45 +0000 > +++ gentpl.py 2010-09-22 21:01:22 +0000 > @@ -70,16 +70,15 @@ for platform in GRUB_PLATFORMS: > # > # Global variables > # > -GVARS =3D [] > +GVARS =3D set() > =20 > def gvar_add(var, value): > - if var not in GVARS: > - GVARS.append(var) > + GVARS.add(var) > return var + " +=3D " + value + "\n" > =20 > def global_variable_initializers(): > r =3D "" > - for var in GVARS: > + for var in sorted(GVARS): > r +=3D var + " ?=3D \n" > return r > =20 > @@ -87,6 +86,16 @@ def global_variable_initializers(): > # Per PROGRAM/SCRIPT variables=20 > # > =20 > +def vars_init(*var_list): > + r =3D "[+ IF (if (not (assoc-ref seen-vars (get \".name\"))) \"see= n\") +]" > + r +=3D "[+ (out-suspend \"v\") +]" > + for var in var_list: > + r +=3D var + " =3D \n" > + r +=3D "[+ (out-resume \"v\") +]" > + r +=3D "[+ (set! seen-vars (assoc-set! seen-vars (get \".name\") 0= )) +]" > + r +=3D "[+ ENDIF +]" > + return first_time(r) > + > def var_set(var, value): > return var + " =3D " + value + "\n" > =20 > @@ -257,6 +266,15 @@ def platform_ccasflags(p): return platfo > def platform_stripflags(p): return platform_specific_values(p, "_strip= flags", "stripflags") > def platform_objcopyflags(p): return platform_specific_values(p, "_obj= copyflags", "objcopyflags") > =20 > +# > +# Emit snippet only the first time through for the current name. > +# > +def first_time(snippet): > + r =3D "[+ IF (if (not (assoc-ref seen-target (get \".name\"))) \"s= een\") +]" > + r +=3D snippet > + r +=3D "[+ ENDIF +]" > + return r > + > def module(platform): > r =3D set_canonical_name_suffix(".module") > =20 > @@ -341,18 +359,25 @@ fi > =20 > def library(platform): > r =3D set_canonical_name_suffix("") > - r +=3D gvar_add("noinst_LIBRARIES", "[+ name +]") > - r +=3D var_set(cname() + "_SOURCES", platform_sources(platform)) > - r +=3D var_set("nodist_" + cname() + "_SOURCES", platform_nodist_s= ources(platform)) > - r +=3D var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_LIBRARY= ) " + platform_cflags(platform)) > - r +=3D var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_L= IBRARY) " + platform_cppflags(platform)) > - r +=3D var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAG= S_LIBRARY) " + platform_ccasflags(platform)) > - # r +=3D var_set(cname() + "_DEPENDENCIES", platform_dependencies(= platform) + " " + platform_ldadd(platform)) > =20 > - r +=3D gvar_add("EXTRA_DIST", extra_dist()) > - r +=3D gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES= )") > - r +=3D gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)")= > + r +=3D vars_init(cname() + "_SOURCES", > + "nodist_" + cname() + "_SOURCES", > + cname() + "_CFLAGS", > + cname() + "_CPPFLAGS", > + cname() + "_CCASFLAGS") > + # cname() + "_DEPENDENCIES") > =20 > + r +=3D first_time(gvar_add("noinst_LIBRARIES", "[+ name +]")) > + r +=3D var_add(cname() + "_SOURCES", platform_sources(platform)) > + r +=3D var_add("nodist_" + cname() + "_SOURCES", platform_nodist_s= ources(platform)) > + r +=3D var_add(cname() + "_CFLAGS", first_time("$(AM_CFLAGS) $(CFL= AGS_LIBRARY) ") + platform_cflags(platform)) > + r +=3D var_add(cname() + "_CPPFLAGS", first_time("$(AM_CPPFLAGS) $= (CPPFLAGS_LIBRARY) ") + platform_cppflags(platform)) > + r +=3D var_add(cname() + "_CCASFLAGS", first_time("$(AM_CCASFLAGS)= $(CCASFLAGS_LIBRARY) ") + platform_ccasflags(platform)) > + # r +=3D var_add(cname() + "_DEPENDENCIES", platform_dependencies(= platform) + " " + platform_ldadd(platform)) > + > + r +=3D gvar_add("EXTRA_DIST", extra_dist()) > + r +=3D first_time(gvar_add("BUILT_SOURCES", "$(nodist_" + cname() = + "_SOURCES)")) > + r +=3D first_time(gvar_add("CLEANFILES", "$(nodist_" + cname() + "= _SOURCES)")) > return r > =20 > def installdir(default=3D"bin"): > @@ -376,7 +401,7 @@ def program(platform, test=3DFalse): > r +=3D gvar_add("check_PROGRAMS", "[+ name +]") > r +=3D gvar_add("TESTS", "[+ name +]") > r +=3D "[+ ELSE +]" > - r +=3D gvar_add(installdir() + "_PROGRAMS", "[+ name +]") > + r +=3D var_add(installdir() + "_PROGRAMS", "[+ name +]") > r +=3D "[+ IF mansection +]" + manpage() + "[+ ENDIF +]" > r +=3D "[+ ENDIF +]" > =20 > @@ -397,7 +422,7 @@ def program(platform, test=3DFalse): > def data(platform): > r =3D gvar_add("EXTRA_DIST", platform_sources(platform)) > r +=3D gvar_add("EXTRA_DIST", extra_dist()) > - r +=3D gvar_add(installdir() + "_DATA", platform_sources(platform)= ) > + r +=3D var_add(installdir() + "_DATA", platform_sources(platform))= > return r > =20 > def script(platform): > @@ -405,7 +430,7 @@ def script(platform): > r +=3D gvar_add("check_SCRIPTS", "[+ name +]") > r +=3D gvar_add ("TESTS", "[+ name +]") > r +=3D "[+ ELSE +]" > - r +=3D gvar_add(installdir() + "_SCRIPTS", "[+ name +]") > + r +=3D var_add(installdir() + "_SCRIPTS", "[+ name +]") > r +=3D "[+ IF mansection +]" + manpage() + "[+ ENDIF +]" > r +=3D "[+ ENDIF +]" > =20 > @@ -418,33 +443,43 @@ chmod a+x [+ name +] > r +=3D gvar_add("dist_noinst_DATA", platform_sources(platform)) > return r > =20 > +def rules(target, closure): > + # Create association lists for the benefit of first_time and vars_= init. > + r =3D "[+ (define seen-target '()) +]" > + r +=3D "[+ (define seen-vars '()) +]" > + # Most output goes to a diversion. This allows us to emit variabl= e > + # initializations before everything else. > + r +=3D "[+ (out-push-new) +]" > + > + r +=3D "[+ FOR " + target + " +]" > + r +=3D foreach_enabled_platform( > + lambda p: under_platform_specific_conditionals(p, closure(p)))= > + # Remember that we've seen this target. > + r +=3D "[+ (set! seen-target (assoc-set! seen-target (get \".name\= ") 0)) +]" > + r +=3D "[+ ENDFOR +]" > + r +=3D "[+ (out-pop #t) +]" > + return r > + > def module_rules(): > - return "[+ FOR module +]" + foreach_enabled_platform( > - lambda p: under_platform_specific_conditionals(p, module(p))) = + "[+ ENDFOR +]" > + return rules("module", module) > =20 > def kernel_rules(): > - return "[+ FOR kernel +]" + foreach_enabled_platform( > - lambda p: under_platform_specific_conditionals(p, kernel(p))) = + "[+ ENDFOR +]" > + return rules("kernel", kernel) > =20 > def image_rules(): > - return "[+ FOR image +]" + foreach_enabled_platform( > - lambda p: under_platform_specific_conditionals(p, image(p))) += "[+ ENDFOR +]" > + return rules("image", image) > =20 > def library_rules(): > - return "[+ FOR library +]" + foreach_enabled_platform( > - lambda p: under_platform_specific_conditionals(p, library(p)))= + "[+ ENDFOR +]" > + return rules("library", library) > =20 > def program_rules(): > - return "[+ FOR program +]" + foreach_enabled_platform( > - lambda p: under_platform_specific_conditionals(p, program(p)))= + "[+ ENDFOR +]" > + return rules("program", program) > =20 > def script_rules(): > - return "[+ FOR script +]" + foreach_enabled_platform( > - lambda p: under_platform_specific_conditionals(p, script(p))) = + "[+ ENDFOR +]" > + return rules("script", script) > =20 > def data_rules(): > - return "[+ FOR data +]" + foreach_enabled_platform( > - lambda p: under_platform_specific_conditionals(p, data(p))) + = "[+ ENDFOR +]" > + return rules("data", data) > =20 > print "[+ AutoGen5 template +]\n" > a =3D module_rules() > > =3D=3D=3D modified file 'grub-core/Makefile.am' > --- grub-core/Makefile.am 2010-09-19 20:22:43 +0000 > +++ grub-core/Makefile.am 2010-09-22 13:11:11 +0000 > @@ -51,7 +51,6 @@ grub_script.yy.c: grub_script.yy.h > CLEANFILES +=3D grub_script.yy.c grub_script.yy.h > =20 > include $(srcdir)/Makefile.core.am > -include $(srcdir)/Makefile.gcry.am > =20 > KERNEL_HEADER_FILES +=3D $(top_srcdir)/include/grub/cache.h > KERNEL_HEADER_FILES +=3D $(top_srcdir)/include/grub/command.h > > =20 --=20 Regards Vladimir '=CF=86-coder/phcoder' Serbinenko --------------enig6550AEB39E9BC4D07339D854 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iF4EAREKAAYFAkybZfkACgkQNak7dOguQgmDpAD/YDufMp8eUz5P+umEbSkpxarB VUd/2RzvjQ5TxLriWisBAK5nBp6vaW3g9j4i0E5oP+1J29uZKTdn/usBQt4kaTHM =h+ic -----END PGP SIGNATURE----- --------------enig6550AEB39E9BC4D07339D854--