public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
* 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox