* compile error for handwritten "perl-RPM2", 'RPM_GNUC_NULL_TERMINATED' error
@ 2016-11-08 8:55 Robert P. J. Day
2016-11-08 11:17 ` Robert P. J. Day
0 siblings, 1 reply; 4+ messages in thread
From: Robert P. J. Day @ 2016-11-08 8:55 UTC (permalink / raw)
To: OE Core mailing list
following on my earlier post, here's the specific issue i'm
tackling. having found no existing OE recipe equivalent to a centos
"perl-RPM2" RPM, i wrote my own. here's the info about that RH RPM on
my fedora system, so i know what the final result should look like:
$ rpm -ql perl-RPM2
/usr/lib64/perl5/vendor_perl/RPM2.pm
/usr/lib64/perl5/vendor_perl/auto/RPM2
/usr/lib64/perl5/vendor_perl/auto/RPM2/RPM2.so
/usr/share/doc/perl-RPM2
/usr/share/doc/perl-RPM2/Changes
/usr/share/doc/perl-RPM2/README
/usr/share/man/man3/RPM2.3pm.gz
$
so, as before, track down the source at cpan:
https://metacpan.org/pod/RPM2
and write a boilerplate recipe, "perl-rpm2", containing the following
line since it's an older style recipe:
inherit cpan_build
fetching works fine:
$ bitbake -c fetchall perl-rpm2
but here's the problem:
$ bitbake perl-rpm2
... snip ...
| DEBUG: Executing shell function do_compile
| Copying lib/RPM2.pm -> blib/lib/RPM2.pm
| lib/RPM2.xs -> lib/RPM2.c
| powerpc-poky-linux-gcc -m32 -mhard-float -mcpu=7400 -mno-spe
--sysroot=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc
-I/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/lib/perl/5.22.1/CORE
-DVERSION="1.3" -DXS_VERSION="1.3" -fPIC -DRPM2_API=5004
-I/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm
-c -O2 -pipe -g -feliminate-unused-debug-types
-fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/work/ppc7400-poky-linux/perl/5.22.1-r0=/usr/src/debug/perl/5.22.1-r0
-fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/x86_64-linux=
-fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc=
-DDEBIAN -D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -O2
-pipe -g -feliminate-unused-debug-types
-fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/work/ppc7400-poky-linux/perl-rpm2/1.3-r0=/usr/src/debug/perl-rpm2/1.3-r0
-fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/x86_64-linux=
-fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc=
-O2 -o lib/RPM2.o lib/RPM2.c
| In file included from
/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmcli.h:9:0,
| from lib/RPM2.xs:3:
|
/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmmacro.h:
In function 'rpmExpand':
|
/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmmacro.h:249:2:
error: expected declaration specifiers before
'RPM_GNUC_NULL_TERMINATED'
| RPM_GNUC_NULL_TERMINATED
| ^~~~~~~~~~~~~~~~~~~~~~~~
|
/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmmacro.h:260:2:
error: expected '=', ',', ';', 'asm' or '__attribute__' before
'RPM_GNUC_NULL_TERMINATED'
| RPM_GNUC_NULL_TERMINATED
| ^~~~~~~~~~~~~~~~~~~~~~~~
... big snip, lots more errors ...
that looks like that macro isn't defined -- on my fedora system,
it's defined as part of the "rpm-devel" rpm, which loads up
/usr/include/rpm/ with all sorts of rpm-related header files.
so if i pop back to the build directory for "rpm" and check
"deploy-rpms", sure enough:
$ rpm -qpl rpm-dev-5.4.16-r0.ppc7400.rpm
warning: rpm-dev-5.4.16-r0.ppc7400.rpm: Header V4 DSA/SHA1 Signature,
key ID e638bdb5: NOKEY
/usr
/usr/include
/usr/include/rpm
/usr/include/rpm/argv.h
/usr/include/rpm/mire.h
/usr/include/rpm/pkgio.h
/usr/include/rpm/rpm46compat.h
/usr/include/rpm/rpm4compat.h
/usr/include/rpm/rpmbf.h
/usr/include/rpm/rpmbuild.h
/usr/include/rpm/rpmcb.h
/usr/include/rpm/rpmcli.h
/usr/include/rpm/rpmconstant.h
/usr/include/rpm/rpmdb.h
/usr/include/rpm/rpmds.h
/usr/include/rpm/rpmevr.h
/usr/include/rpm/rpmfi.h
/usr/include/rpm/rpmgi.h
/usr/include/rpm/rpmio.h
/usr/include/rpm/rpmiotypes.h
/usr/include/rpm/rpmlog.h
/usr/include/rpm/rpmmacro.h
/usr/include/rpm/rpmns.h
/usr/include/rpm/rpmpgp.h
/usr/include/rpm/rpmps.h
/usr/include/rpm/rpmrc.h
/usr/include/rpm/rpmspec.h
/usr/include/rpm/rpmsw.h
/usr/include/rpm/rpmtag.h
/usr/include/rpm/rpmte.h
/usr/include/rpm/rpmts.h
/usr/include/rpm/rpmtypes.h
/usr/include/rpm/rpmutil.h
... more ...
so, later this morning, i'm going to take the obvious approach and
install "rpm-dev" to see if that fixes things (and subsequently add
that dependency to the perl-rpm2 recipe).
does that make sense? it *seems* clear that to build perl-rpm2, i'll
need the rpm-dev package installed. am i on the right track here?
rday
--
========================================================================
Robert P. J. Day Ottawa, Ontario, CANADA
http://crashcourse.ca
Twitter: http://twitter.com/rpjday
LinkedIn: http://ca.linkedin.com/in/rpjday
========================================================================
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: compile error for handwritten "perl-RPM2", 'RPM_GNUC_NULL_TERMINATED' error 2016-11-08 8:55 compile error for handwritten "perl-RPM2", 'RPM_GNUC_NULL_TERMINATED' error Robert P. J. Day @ 2016-11-08 11:17 ` Robert P. J. Day 2016-11-08 18:37 ` Tim Orling 0 siblings, 1 reply; 4+ messages in thread From: Robert P. J. Day @ 2016-11-08 11:17 UTC (permalink / raw) To: OE Core mailing list replying to my earlier post with additional info ... man, i want to debug this ... On Tue, 8 Nov 2016, Robert P. J. Day wrote: > following on my earlier post, here's the specific issue i'm > tackling. having found no existing OE recipe equivalent to a centos > "perl-RPM2" RPM, i wrote my own. here's the info about that RH RPM on > my fedora system, so i know what the final result should look like: > > $ rpm -ql perl-RPM2 > /usr/lib64/perl5/vendor_perl/RPM2.pm > /usr/lib64/perl5/vendor_perl/auto/RPM2 > /usr/lib64/perl5/vendor_perl/auto/RPM2/RPM2.so > /usr/share/doc/perl-RPM2 > /usr/share/doc/perl-RPM2/Changes > /usr/share/doc/perl-RPM2/README > /usr/share/man/man3/RPM2.3pm.gz > $ > > so, as before, track down the source at cpan: > > https://metacpan.org/pod/RPM2 > > and write a boilerplate recipe, "perl-rpm2", containing the following > line since it's an older style recipe: > > inherit cpan_build > > fetching works fine: > > $ bitbake -c fetchall perl-rpm2 > > but here's the problem: > > $ bitbake perl-rpm2 > > ... snip ... > > | DEBUG: Executing shell function do_compile > | Copying lib/RPM2.pm -> blib/lib/RPM2.pm > | lib/RPM2.xs -> lib/RPM2.c > | powerpc-poky-linux-gcc -m32 -mhard-float -mcpu=7400 -mno-spe > --sysroot=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc > -I/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/lib/perl/5.22.1/CORE > -DVERSION="1.3" -DXS_VERSION="1.3" -fPIC -DRPM2_API=5004 > -I/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm > -c -O2 -pipe -g -feliminate-unused-debug-types > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/work/ppc7400-poky-linux/perl/5.22.1-r0=/usr/src/debug/perl/5.22.1-r0 > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/x86_64-linux= > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc= > -DDEBIAN -D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe > -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -O2 > -pipe -g -feliminate-unused-debug-types > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/work/ppc7400-poky-linux/perl-rpm2/1.3-r0=/usr/src/debug/perl-rpm2/1.3-r0 > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/x86_64-linux= > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc= > -O2 -o lib/RPM2.o lib/RPM2.c > | In file included from > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmcli.h:9:0, > | from lib/RPM2.xs:3: > | > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmmacro.h: > In function 'rpmExpand': > | > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmmacro.h:249:2: > error: expected declaration specifiers before > 'RPM_GNUC_NULL_TERMINATED' > | RPM_GNUC_NULL_TERMINATED > | ^~~~~~~~~~~~~~~~~~~~~~~~ > | > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmmacro.h:260:2: > error: expected '=', ',', ';', 'asm' or '__attribute__' before > 'RPM_GNUC_NULL_TERMINATED' > | RPM_GNUC_NULL_TERMINATED > | ^~~~~~~~~~~~~~~~~~~~~~~~ > > ... big snip, lots more errors ... ok, here's my wildly-uneducated record of what is going on: first, unpacking and configuring perl-RPM2 source (and running XS processor) gives me the source file "lib/RPM2.c" (which is what is generating the first build error above), which includes the header file: #include <rpm/rpmcli.h> next, wander over to the qemuppc sysroot, to usr/include/rpm/, to check out that header file, which contains (among other things): #include <popt.h> #include <rpmmacro.h> <----- there #include <rpmtypes.h> #include <rpmtag.h> #include <rpmps.h> #include <rpmrc.h> #include <rpmfi.h> /* XXX rpmfileAttrs */ #include <rpmts.h> /* XXX rpmdepFlags * next, in the same directory, examine rpmmacro.h, which contains: #if defined(_MACRO_INTERNAL) #include <rpmiotypes.h> ... snip ... at this point, inclusion is now conditional on _MACRO_INTERNAL, so move on to rpmiotypes.h, which contains: #include <rpmutil.h> and finally visit that header file in the qemuppc sysroot to find: #if __GNUC__ >= 4 #define RPM_GNUC_NULL_TERMINATED __attribute__((__sentinel__)) #else #define RPM_GNUC_NULL_TERMINATED #endif where we find the definition of that macro. now, is it my imagination, or could a lot of this compile-time error be resolved by simply defining the macro "_MACRO_INTERNAL" for the build? and if so, what is the proper way to add that setting to the compile step for this recipe? would i use the standard EXTRA_* variables? or are there perl-specific variables one would use when build CPAN recipes? or am i totally off-track here? rday -- ======================================================================== Robert P. J. Day Ottawa, Ontario, CANADA http://crashcourse.ca Twitter: http://twitter.com/rpjday LinkedIn: http://ca.linkedin.com/in/rpjday ======================================================================== ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: compile error for handwritten "perl-RPM2", 'RPM_GNUC_NULL_TERMINATED' error 2016-11-08 11:17 ` Robert P. J. Day @ 2016-11-08 18:37 ` Tim Orling 2016-11-08 19:16 ` Robert P. J. Day 0 siblings, 1 reply; 4+ messages in thread From: Tim Orling @ 2016-11-08 18:37 UTC (permalink / raw) To: Robert P. J. Day; +Cc: OE Core mailing list [-- Attachment #1: Type: text/plain, Size: 7328 bytes --] NOTE: by convention, OE perl recipes follow debian naming so this should be librpm2-perl_1.3.bb Obviously, in your own layer you are free to do what you want, but it will require the name change if you want it to go into meta-perl. For dependencies, since you are looking at CentOS rpms, you can look at, e.g. [0] to see the DEPENDS (BuildRequires:) and RDEPENDS (Requires:). This would have shown you the need for rpm-devel. I also use metacpan, e.g. [1], to look for dependencies in perl modules. It also has a very slick ElasticSearch JSON API that you can use to automatically query data [2]. To pass in the extra variables, for 'inherit cpan' you probably need to set EXTRA_CPANFLAGS [3] or for 'inherit cpan_build' EXTRA_CPAN_BUILD_FLAGS [4], e.g. [5]. You might want to file a documentation bug for the next release? [0] http://pkgs.fedoraproject.org/cgit/rpms/perl-RPM2.git/tree/perl-RPM2.spec?h=epel7 [1] https://metacpan.org/pod/RPM2 [2] https://github.com/metacpan/metacpan-api/blob/master/docs/API-docs.md [3] http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/classes/cpan.bbclass#n20 [4] http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/classes/cpan_build.bbclass#n21 [5] http://git.openembedded.org/meta-openembedded/tree/meta-perl/recipes-perl/libxml/libxml-libxml-perl_2.0121.bb#n37 On Tue, Nov 8, 2016 at 3:17 AM, Robert P. J. Day <rpjday@crashcourse.ca> wrote: > > replying to my earlier post with additional info ... man, i want to > debug this ... > > On Tue, 8 Nov 2016, Robert P. J. Day wrote: > > > following on my earlier post, here's the specific issue i'm > > tackling. having found no existing OE recipe equivalent to a centos > > "perl-RPM2" RPM, i wrote my own. here's the info about that RH RPM on > > my fedora system, so i know what the final result should look like: > > > > $ rpm -ql perl-RPM2 > > /usr/lib64/perl5/vendor_perl/RPM2.pm > > /usr/lib64/perl5/vendor_perl/auto/RPM2 > > /usr/lib64/perl5/vendor_perl/auto/RPM2/RPM2.so > > /usr/share/doc/perl-RPM2 > > /usr/share/doc/perl-RPM2/Changes > > /usr/share/doc/perl-RPM2/README > > /usr/share/man/man3/RPM2.3pm.gz > > $ > > > > so, as before, track down the source at cpan: > > > > https://metacpan.org/pod/RPM2 > > > > and write a boilerplate recipe, "perl-rpm2", containing the following > > line since it's an older style recipe: > > > > inherit cpan_build > > > > fetching works fine: > > > > $ bitbake -c fetchall perl-rpm2 > > > > but here's the problem: > > > > $ bitbake perl-rpm2 > > > > ... snip ... > > > > | DEBUG: Executing shell function do_compile > > | Copying lib/RPM2.pm -> blib/lib/RPM2.pm > > | lib/RPM2.xs -> lib/RPM2.c > > | powerpc-poky-linux-gcc -m32 -mhard-float -mcpu=7400 -mno-spe > > --sysroot=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc > > -I/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/ > usr/lib/perl/5.22.1/CORE > > -DVERSION="1.3" -DXS_VERSION="1.3" -fPIC -DRPM2_API=5004 > > -I/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/ > usr/include/rpm > > -c -O2 -pipe -g -feliminate-unused-debug-types > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/ > tmp/work/ppc7400-poky-linux/perl/5.22.1-r0=/usr/src/debug/perl/5.22.1-r0 > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/ > tmp/sysroots/x86_64-linux= > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/ > tmp/sysroots/qemuppc= > > -DDEBIAN -D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe > > -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -O2 > > -pipe -g -feliminate-unused-debug-types > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/ > tmp/work/ppc7400-poky-linux/perl-rpm2/1.3-r0=/usr/src/ > debug/perl-rpm2/1.3-r0 > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/ > tmp/sysroots/x86_64-linux= > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/ > tmp/sysroots/qemuppc= > > -O2 -o lib/RPM2.o lib/RPM2.c > > | In file included from > > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/ > usr/include/rpm/rpmcli.h:9:0, > > | from lib/RPM2.xs:3: > > | > > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/ > usr/include/rpm/rpmmacro.h: > > In function 'rpmExpand': > > | > > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/ > usr/include/rpm/rpmmacro.h:249:2: > > error: expected declaration specifiers before > > 'RPM_GNUC_NULL_TERMINATED' > > | RPM_GNUC_NULL_TERMINATED > > | ^~~~~~~~~~~~~~~~~~~~~~~~ > > | > > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/ > usr/include/rpm/rpmmacro.h:260:2: > > error: expected '=', ',', ';', 'asm' or '__attribute__' before > > 'RPM_GNUC_NULL_TERMINATED' > > | RPM_GNUC_NULL_TERMINATED > > | ^~~~~~~~~~~~~~~~~~~~~~~~ > > > > ... big snip, lots more errors ... > > ok, here's my wildly-uneducated record of what is going on: > > first, unpacking and configuring perl-RPM2 source (and running XS > processor) gives me the source file "lib/RPM2.c" (which is what is > generating the first build error above), which includes the header > file: > > #include <rpm/rpmcli.h> > > next, wander over to the qemuppc sysroot, to usr/include/rpm/, to > check out that header file, which contains (among other things): > > #include <popt.h> > #include <rpmmacro.h> <----- there > #include <rpmtypes.h> > #include <rpmtag.h> > #include <rpmps.h> > #include <rpmrc.h> > #include <rpmfi.h> /* XXX rpmfileAttrs */ > #include <rpmts.h> /* XXX rpmdepFlags * > > next, in the same directory, examine rpmmacro.h, which contains: > > #if defined(_MACRO_INTERNAL) > #include <rpmiotypes.h> > ... snip ... > > at this point, inclusion is now conditional on _MACRO_INTERNAL, so > move on to rpmiotypes.h, which contains: > > #include <rpmutil.h> > > and finally visit that header file in the qemuppc sysroot to find: > > #if __GNUC__ >= 4 > #define RPM_GNUC_NULL_TERMINATED __attribute__((__sentinel__)) > #else > #define RPM_GNUC_NULL_TERMINATED > #endif > > where we find the definition of that macro. > > now, is it my imagination, or could a lot of this compile-time error > be resolved by simply defining the macro "_MACRO_INTERNAL" for the > build? and if so, what is the proper way to add that setting to the > compile step for this recipe? > > would i use the standard EXTRA_* variables? or are there > perl-specific variables one would use when build CPAN recipes? or am i > totally off-track here? > > rday > > -- > > ======================================================================== > Robert P. J. Day Ottawa, Ontario, CANADA > http://crashcourse.ca > > Twitter: http://twitter.com/rpjday > LinkedIn: http://ca.linkedin.com/in/rpjday > ======================================================================== > > > > -- > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-core > [-- Attachment #2: Type: text/html, Size: 10037 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: compile error for handwritten "perl-RPM2", 'RPM_GNUC_NULL_TERMINATED' error 2016-11-08 18:37 ` Tim Orling @ 2016-11-08 19:16 ` Robert P. J. Day 0 siblings, 0 replies; 4+ messages in thread From: Robert P. J. Day @ 2016-11-08 19:16 UTC (permalink / raw) To: Tim Orling; +Cc: OE Core mailing list [-- Attachment #1: Type: text/plain, Size: 9049 bytes --] On Tue, 8 Nov 2016, Tim Orling wrote: > NOTE: by convention, OE perl recipes follow debian naming so this > should be librpm2-perl_1.3.bb. Obviously, in your own layer you are > free to do what you want, but it will require the name change if you > want it to go into meta-perl. i had noticed the naming convention after i started writing those recipes, it won't be hard to go back and rename. i hadn't planned submitting anything upstream, but maybe after all that work, i might as well, so no one else has to go through the same effort. > For dependencies, since you are looking at CentOS rpms, you can look > at, e.g. [0] to see the DEPENDS (BuildRequires:) and RDEPENDS > (Requires:). This would have shown you the need for rpm-devel. true enough ... it didn't take long to realize i needed the rpm devel package installed for this. > I also use metacpan, e.g. [1], to look for dependencies in perl > modules. It also has a very slick ElasticSearch JSON API that you > can use to automatically query data [2]. i'd noticed that as well ... still playing with it. > To pass in the extra variables, for 'inherit cpan' you probably need > to set EXTRA_CPANFLAGS [3] or for 'inherit cpan_build' > EXTRA_CPAN_BUILD_FLAGS [4], e.g. [5]. except i'm not sure what those variables are for ... it *appears* they're for Perl-related settings, not simple toolchain-related settings. i will have to read further to understand precisely what the purpose of those variables is. > You might want to file a documentation bug for the next release? not sure what this means, i'm still trying to debug this issue before i try to submit anything official. :-) > [0] http://pkgs.fedoraproject.org/cgit/rpms/perl-RPM2.git/tree/perl-RPM2.spec?h=epel7 > [1] https://metacpan.org/pod/RPM2 > [2] https://github.com/metacpan/metacpan-api/blob/master/docs/API-docs.md > [3] http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/classes/cpan.bbclass#n20 > [4] http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/classes/cpan_build.bbclass#n21 > [5] http://git.openembedded.org/meta-openembedded/tree/meta-perl/recipes-perl/libxml/libxml-libxml-perl_2.0121.bb#n37 > > On Tue, Nov 8, 2016 at 3:17 AM, Robert P. J. Day <rpjday@crashcourse.ca> wrote: > > replying to my earlier post with additional info ... man, i want to > debug this ... > > On Tue, 8 Nov 2016, Robert P. J. Day wrote: > > > following on my earlier post, here's the specific issue i'm > > tackling. having found no existing OE recipe equivalent to a centos > > "perl-RPM2" RPM, i wrote my own. here's the info about that RH RPM on > > my fedora system, so i know what the final result should look like: > > > > $ rpm -ql perl-RPM2 > > /usr/lib64/perl5/vendor_perl/RPM2.pm > > /usr/lib64/perl5/vendor_perl/auto/RPM2 > > /usr/lib64/perl5/vendor_perl/auto/RPM2/RPM2.so > > /usr/share/doc/perl-RPM2 > > /usr/share/doc/perl-RPM2/Changes > > /usr/share/doc/perl-RPM2/README > > /usr/share/man/man3/RPM2.3pm.gz > > $ > > > > so, as before, track down the source at cpan: > > > > https://metacpan.org/pod/RPM2 > > > > and write a boilerplate recipe, "perl-rpm2", containing the following > > line since it's an older style recipe: > > > > inherit cpan_build > > > > fetching works fine: > > > > $ bitbake -c fetchall perl-rpm2 > > > > but here's the problem: > > > > $ bitbake perl-rpm2 > > > > ... snip ... > > > > | DEBUG: Executing shell function do_compile > > | Copying lib/RPM2.pm -> blib/lib/RPM2.pm > > | lib/RPM2.xs -> lib/RPM2.c > > | powerpc-poky-linux-gcc -m32 -mhard-float -mcpu=7400 -mno-spe > > --sysroot=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc > > -I/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/lib/perl/5.22.1/CORE > > -DVERSION="1.3" -DXS_VERSION="1.3" -fPIC -DRPM2_API=5004 > > -I/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm > > -c -O2 -pipe -g -feliminate-unused-debug-types > > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/work/ppc7400-poky-linux/perl/5.22.1-r0=/usr/src/debug/perl/5.22.1-r0 > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/x86_64-linux= > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc= > > -DDEBIAN -D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe > > -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -O2 > > -pipe -g -feliminate-unused-debug-types > > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/work/ppc7400-poky-linux/perl-rpm2/1.3-r0=/usr/src/debug/perl-rpm2/1.3-r0 > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/x86_64-linux= > > -fdebug-prefix-map=/home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc= > > -O2 -o lib/RPM2.o lib/RPM2.c > > | In file included from > > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmcli.h:9:0, > > | from lib/RPM2.xs:3: > > | > > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmmacro.h: > > In function 'rpmExpand': > > | > > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmmacro.h:249:2: > > error: expected declaration specifiers before > > 'RPM_GNUC_NULL_TERMINATED' > > | RPM_GNUC_NULL_TERMINATED > > | ^~~~~~~~~~~~~~~~~~~~~~~~ > > | > > /home/rpjday/oe/builds/msm_qemuppc/tmp/sysroots/qemuppc/usr/include/rpm/rpmmacro.h:260:2: > > error: expected '=', ',', ';', 'asm' or '__attribute__' before > > 'RPM_GNUC_NULL_TERMINATED' > > | RPM_GNUC_NULL_TERMINATED > > | ^~~~~~~~~~~~~~~~~~~~~~~~ > > > > ... big snip, lots more errors ... > > ok, here's my wildly-uneducated record of what is going on: > > first, unpacking and configuring perl-RPM2 source (and running XS > processor) gives me the source file "lib/RPM2.c" (which is what is > generating the first build error above), which includes the header > file: > > #include <rpm/rpmcli.h> > > next, wander over to the qemuppc sysroot, to usr/include/rpm/, to > check out that header file, which contains (among other things): > > #include <popt.h> > #include <rpmmacro.h> <----- there > #include <rpmtypes.h> > #include <rpmtag.h> > #include <rpmps.h> > #include <rpmrc.h> > #include <rpmfi.h> /* XXX rpmfileAttrs */ > #include <rpmts.h> /* XXX rpmdepFlags * > > next, in the same directory, examine rpmmacro.h, which contains: > > #if defined(_MACRO_INTERNAL) > #include <rpmiotypes.h> > ... snip ... > > at this point, inclusion is now conditional on _MACRO_INTERNAL, so > move on to rpmiotypes.h, which contains: > > #include <rpmutil.h> > > and finally visit that header file in the qemuppc sysroot to find: > > #if __GNUC__ >= 4 > #define RPM_GNUC_NULL_TERMINATED __attribute__((__sentinel__)) > #else > #define RPM_GNUC_NULL_TERMINATED > #endif > > where we find the definition of that macro. > > now, is it my imagination, or could a lot of this compile-time error > be resolved by simply defining the macro "_MACRO_INTERNAL" for the > build? and if so, what is the proper way to add that setting to the > compile step for this recipe? > > would i use the standard EXTRA_* variables? or are there > perl-specific variables one would use when build CPAN recipes? or am i > totally off-track here? > > rday > > -- > > ======================================================================== > Robert P. J. Day Ottawa, Ontario, CANADA > http://crashcourse.ca > > Twitter: http://twitter.com/rpjday > LinkedIn: http://ca.linkedin.com/in/rpjday > ======================================================================== > > > > -- > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-core > > > > -- ======================================================================== Robert P. J. Day Ottawa, Ontario, CANADA http://crashcourse.ca Twitter: http://twitter.com/rpjday LinkedIn: http://ca.linkedin.com/in/rpjday ======================================================================== ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-11-08 19:17 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-11-08 8:55 compile error for handwritten "perl-RPM2", 'RPM_GNUC_NULL_TERMINATED' error Robert P. J. Day 2016-11-08 11:17 ` Robert P. J. Day 2016-11-08 18:37 ` Tim Orling 2016-11-08 19:16 ` Robert P. J. Day
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.