Message ID | 20240625191513.22142-1-sreejith.ravi087@gmail.com |
---|---|
State | New |
Headers | show |
Series | package.bbclass: Add Requires.private field in package_do_pkgconfig() | expand |
On Tue, 2024-06-25 at 19:15 +0000, Sreejith Ravi via lists.openembedded.org wrote: > Currently, the package_do_pkgconfig() only handles the "Requires" key > field from the .pc file and ignores the "Requires.private" field while > generating the dev dependency chain. This results in a broken dependency > list and requires the installation of recommended packages to resolve > the build dependencies when using the dev IPKs. This increases the > hard disk space usage and download time and installs many unnecessary > packages as part of the recommendations. > > This patch ensures that the "Requires.private" field is also considered > when creating the dependency list for the dev IPKs. With this, the dev > IPK will have the proper dependencies listed, eliminating the need to > install recommended packages to resolve the build time dependencies. > > Example: usr/lib/pkgconfig/libical.pc > ---------- > Libs: -L${libdir} -lical -licalss -licalvcal > Libs.private: -lpthread > Requires.private: icu-i18n > ---------- > Depends field generated for libical-dev > Depends: glib-2.0-dev, libical (= 3.0.7-r0) > ------------ > > When trying to resolve the build time dependency with libical > package using “-dev” ipk generated, it will throw the below error. > ----------- > Package icu-i18n was not found in the pkg-config search path. > Perhaps you should add the directory containing `icu-i18n.pc' > to the PKG_CONFIG_PATH environment variable > Package 'icu-i18n', required by 'libical', not found > ----------- > > This patch will fix the broken dependency list. > > ------- > libical-dev depends field generated with this patch > Depends: glib-2.0-dev, icu-dev, libical (= 3.0.7-r0) > ------- > > Other examples of packages generated with broken dev dependency. > > libflac-dev : https://packages.debian.org/sid/libflac-dev > Without patch: > Depends: flac (= 1.3.3-r0), libflac, libflac++ > with patch: > Depends: flac (= 1.3.3-r0), libflac, libflac++, libogg-dev > > libglib2.0-dev : https://packages.debian.org/buster/libglib2.0-dev > without patch: > Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev > with patch: > Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev, > util-linux-dev, zlib-dev > > Signed-off-by: Sreejith Ravi <sreejith.ravi087@gmail.com> > --- > meta/classes/package.bbclass | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass > index 67351b2510..084fe428e5 100644 > --- a/meta/classes/package.bbclass > +++ b/meta/classes/package.bbclass > @@ -2182,7 +2182,7 @@ python package_do_pkgconfig () { > if m: > hdr = m.group(1) > exp = pd.expand(m.group(2)) > - if hdr == 'Requires': > + if hdr == 'Requires' or hdr == 'Requires.private': > pkgconfig_needed[pkg] += exp.replace(',', ' ').split() > continue > m = var_re.match(l) > As I understand it, Requires.private are only needed for static linking so shouldn't this dependency just be added to the -staticdev package? The -dev package wouldn't contain a static library anyway. Did you have static libraries enabled? Cheers, Richard
No, static libraries were not enabled. I am using only the -dev IPK, which has only the shared libraries. With this change, it is successfully building. Also, if it links to the static library, it will fail as I am not installing the static IPK. In the latest pkgconf commit, it looks like Requires.private is needed for header inclusion also: https://github.com/pkgconf/pkgconf/commit/2d26db3a984e7a69cedc6274c22119de4bcf1b40 Cheers Sreejith On Tue, Jun 25, 2024 at 10:41 PM Richard Purdie < richard.purdie@linuxfoundation.org> wrote: > On Tue, 2024-06-25 at 19:15 +0000, Sreejith Ravi via > lists.openembedded.org wrote: > > Currently, the package_do_pkgconfig() only handles the "Requires" key > > field from the .pc file and ignores the "Requires.private" field while > > generating the dev dependency chain. This results in a broken dependency > > list and requires the installation of recommended packages to resolve > > the build dependencies when using the dev IPKs. This increases the > > hard disk space usage and download time and installs many unnecessary > > packages as part of the recommendations. > > > > This patch ensures that the "Requires.private" field is also considered > > when creating the dependency list for the dev IPKs. With this, the dev > > IPK will have the proper dependencies listed, eliminating the need to > > install recommended packages to resolve the build time dependencies. > > > > Example: usr/lib/pkgconfig/libical.pc > > ---------- > > Libs: -L${libdir} -lical -licalss -licalvcal > > Libs.private: -lpthread > > Requires.private: icu-i18n > > ---------- > > Depends field generated for libical-dev > > Depends: glib-2.0-dev, libical (= 3.0.7-r0) > > ------------ > > > > When trying to resolve the build time dependency with libical > > package using “-dev” ipk generated, it will throw the below error. > > ----------- > > Package icu-i18n was not found in the pkg-config search path. > > Perhaps you should add the directory containing `icu-i18n.pc' > > to the PKG_CONFIG_PATH environment variable > > Package 'icu-i18n', required by 'libical', not found > > ----------- > > > > This patch will fix the broken dependency list. > > > > ------- > > libical-dev depends field generated with this patch > > Depends: glib-2.0-dev, icu-dev, libical (= 3.0.7-r0) > > ------- > > > > Other examples of packages generated with broken dev dependency. > > > > libflac-dev : https://packages.debian.org/sid/libflac-dev > > Without patch: > > Depends: flac (= 1.3.3-r0), libflac, libflac++ > > with patch: > > Depends: flac (= 1.3.3-r0), libflac, libflac++, libogg-dev > > > > libglib2.0-dev : https://packages.debian.org/buster/libglib2.0-dev > > without patch: > > Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev > > with patch: > > Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev, > > util-linux-dev, zlib-dev > > > > Signed-off-by: Sreejith Ravi <sreejith.ravi087@gmail.com> > > --- > > meta/classes/package.bbclass | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass > > index 67351b2510..084fe428e5 100644 > > --- a/meta/classes/package.bbclass > > +++ b/meta/classes/package.bbclass > > @@ -2182,7 +2182,7 @@ python package_do_pkgconfig () { > > if m: > > hdr = m.group(1) > > exp = pd.expand(m.group(2)) > > - if hdr == 'Requires': > > + if hdr == 'Requires' or hdr == > 'Requires.private': > > pkgconfig_needed[pkg] += > exp.replace(',', ' ').split() > > continue > > m = var_re.match(l) > > > > > As I understand it, Requires.private are only needed for static linking > so shouldn't this dependency just be added to the -staticdev package? > The -dev package wouldn't contain a static library anyway. Did you have > static libraries enabled? > > Cheers, > > Richard > > >
On Wed, 2024-06-26 at 10:07 +0100, Sreejith Ravi wrote: > No, static libraries were not enabled. I am using only the -dev IPK, > which has only the shared libraries. With this change, it is > successfully building. Also, if it links to the static library, it > will fail as I am not installing the static IPK. > > In the latest pkgconf commit, it looks like Requires.private is > needed for header inclusion also: > https://github.com/pkgconf/pkgconf/commit/2d26db3a984e7a69cedc6274c22119de4bcf1b40 We standardised on and use pkgconfig which does say Requires.private is for static linking. If pkg-conf wants to change the "standard" I really wish they'd use a different file extension so we didn't have two incompatible implementations :( I'm reluctant to try and mix both tools since they behave differently and one form will end up being broken. We should mention to them this change of behaviour makes the compatibility situation worse. Cheers, Richard
On Wed, 2024-06-26 at 13:41 +0100, Richard Purdie via lists.openembedded.org wrote: > On Wed, 2024-06-26 at 10:07 +0100, Sreejith Ravi wrote: > > No, static libraries were not enabled. I am using only the -dev > > IPK, > > which has only the shared libraries. With this change, it is > > successfully building. Also, if it links to the static library, it > > will fail as I am not installing the static IPK. > > > > In the latest pkgconf commit, it looks like Requires.private is > > needed for header inclusion also: > > https://github.com/pkgconf/pkgconf/commit/2d26db3a984e7a69cedc6274c22119de4bcf1b40 > > We standardised on and use pkgconfig which does say Requires.private > is > for static linking. > > If pkg-conf wants to change the "standard" I really wish they'd use a > different file extension so we didn't have two incompatible > implementations :( > > I'm reluctant to try and mix both tools since they behave differently > and one form will end up being broken. > > We should mention to them this change of behaviour makes the > compatibility situation worse. I did more investigation on this one including looking at the pkg- config guide from freedesktop: https://people.freedesktop.org/~dbn/pkg-config-guide.html I suspect you're probably right that this is needed for headers usage. It is worth noting that change is just fixing documentation so this could well have been the case for a long time. It all is a bit unclear but we should probably take the patch assuming it passes testing. Cheers, Richard
On Tue, 2024-06-25 at 19:15 +0000, Sreejith Ravi via lists.openembedded.org wrote: > Currently, the package_do_pkgconfig() only handles the "Requires" key > field from the .pc file and ignores the "Requires.private" field > while > generating the dev dependency chain. This results in a broken > dependency > list and requires the installation of recommended packages to resolve > the build dependencies when using the dev IPKs. This increases the > hard disk space usage and download time and installs many unnecessary > packages as part of the recommendations. > > This patch ensures that the "Requires.private" field is also > considered > when creating the dependency list for the dev IPKs. With this, the > dev > IPK will have the proper dependencies listed, eliminating the need to > install recommended packages to resolve the build time dependencies. > > Example: usr/lib/pkgconfig/libical.pc > ---------- > Libs: -L${libdir} -lical -licalss -licalvcal > Libs.private: -lpthread > Requires.private: icu-i18n > ---------- > Depends field generated for libical-dev > Depends: glib-2.0-dev, libical (= 3.0.7-r0) > ------------ > > When trying to resolve the build time dependency with libical > package using “-dev” ipk generated, it will throw the below error. > ----------- > Package icu-i18n was not found in the pkg-config search path. > Perhaps you should add the directory containing `icu-i18n.pc' > to the PKG_CONFIG_PATH environment variable > Package 'icu-i18n', required by 'libical', not found > ----------- > > This patch will fix the broken dependency list. > > ------- > libical-dev depends field generated with this patch > Depends: glib-2.0-dev, icu-dev, libical (= 3.0.7-r0) > ------- > > Other examples of packages generated with broken dev dependency. > > libflac-dev : https://packages.debian.org/sid/libflac-dev > Without patch: > Depends: flac (= 1.3.3-r0), libflac, libflac++ > with patch: > Depends: flac (= 1.3.3-r0), libflac, libflac++, libogg-dev > > libglib2.0-dev : https://packages.debian.org/buster/libglib2.0-dev > without patch: > Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev > with patch: > Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev, > util-linux-dev, zlib-dev > > Signed-off-by: Sreejith Ravi <sreejith.ravi087@gmail.com> > --- > meta/classes/package.bbclass | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/meta/classes/package.bbclass > b/meta/classes/package.bbclass > index 67351b2510..084fe428e5 100644 > --- a/meta/classes/package.bbclass > +++ b/meta/classes/package.bbclass > @@ -2182,7 +2182,7 @@ python package_do_pkgconfig () { > if m: > hdr = m.group(1) > exp = pd.expand(m.group(2)) > - if hdr == 'Requires': > + if hdr == 'Requires' or hdr == > 'Requires.private': > pkgconfig_needed[pkg] += > exp.replace(',', ' ').split() > continue > m = var_re.match(l) > Unfortunately this patch fails to apply. This is not a patch against master and obviously hasn't need tested there. Cheers, Richard
Patch is created from the Kirkstone branch. Cheers Sreejith On Wed, Jun 26, 2024 at 2:37 PM Richard Purdie <rpurdie@rpsys.net> wrote: > On Tue, 2024-06-25 at 19:15 +0000, Sreejith Ravi via > lists.openembedded.org wrote: > > Currently, the package_do_pkgconfig() only handles the "Requires" key > > field from the .pc file and ignores the "Requires.private" field > > while > > generating the dev dependency chain. This results in a broken > > dependency > > list and requires the installation of recommended packages to resolve > > the build dependencies when using the dev IPKs. This increases the > > hard disk space usage and download time and installs many unnecessary > > packages as part of the recommendations. > > > > This patch ensures that the "Requires.private" field is also > > considered > > when creating the dependency list for the dev IPKs. With this, the > > dev > > IPK will have the proper dependencies listed, eliminating the need to > > install recommended packages to resolve the build time dependencies. > > > > Example: usr/lib/pkgconfig/libical.pc > > ---------- > > Libs: -L${libdir} -lical -licalss -licalvcal > > Libs.private: -lpthread > > Requires.private: icu-i18n > > ---------- > > Depends field generated for libical-dev > > Depends: glib-2.0-dev, libical (= 3.0.7-r0) > > ------------ > > > > When trying to resolve the build time dependency with libical > > package using “-dev” ipk generated, it will throw the below error. > > ----------- > > Package icu-i18n was not found in the pkg-config search path. > > Perhaps you should add the directory containing `icu-i18n.pc' > > to the PKG_CONFIG_PATH environment variable > > Package 'icu-i18n', required by 'libical', not found > > ----------- > > > > This patch will fix the broken dependency list. > > > > ------- > > libical-dev depends field generated with this patch > > Depends: glib-2.0-dev, icu-dev, libical (= 3.0.7-r0) > > ------- > > > > Other examples of packages generated with broken dev dependency. > > > > libflac-dev : https://packages.debian.org/sid/libflac-dev > > Without patch: > > Depends: flac (= 1.3.3-r0), libflac, libflac++ > > with patch: > > Depends: flac (= 1.3.3-r0), libflac, libflac++, libogg-dev > > > > libglib2.0-dev : https://packages.debian.org/buster/libglib2.0-dev > > without patch: > > Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev > > with patch: > > Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev, > > util-linux-dev, zlib-dev > > > > Signed-off-by: Sreejith Ravi <sreejith.ravi087@gmail.com> > > --- > > meta/classes/package.bbclass | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/meta/classes/package.bbclass > > b/meta/classes/package.bbclass > > index 67351b2510..084fe428e5 100644 > > --- a/meta/classes/package.bbclass > > +++ b/meta/classes/package.bbclass > > @@ -2182,7 +2182,7 @@ python package_do_pkgconfig () { > > if m: > > hdr = m.group(1) > > exp = pd.expand(m.group(2)) > > - if hdr == 'Requires': > > + if hdr == 'Requires' or hdr == > > 'Requires.private': > > pkgconfig_needed[pkg] += > > exp.replace(',', ' ').split() > > continue > > m = var_re.match(l) > > > > Unfortunately this patch fails to apply. This is not a patch against > master and obviously hasn't need tested there. > > Cheers, > > Richard > >
The reason for the failure in master is that the functionality has been moved from package.bbclass to package.py. I have created the patch for master and sent it for review. Cheers Sreejith On Wed, Jun 26, 2024 at 2:40 PM Sreejith Ravi via lists.openembedded.org <sreejith.ravi087=gmail.com@lists.openembedded.org> wrote: > Patch is created from the Kirkstone branch. > > Cheers > Sreejith > > On Wed, Jun 26, 2024 at 2:37 PM Richard Purdie <rpurdie@rpsys.net> wrote: > >> On Tue, 2024-06-25 at 19:15 +0000, Sreejith Ravi via >> lists.openembedded.org wrote: >> > Currently, the package_do_pkgconfig() only handles the "Requires" key >> > field from the .pc file and ignores the "Requires.private" field >> > while >> > generating the dev dependency chain. This results in a broken >> > dependency >> > list and requires the installation of recommended packages to resolve >> > the build dependencies when using the dev IPKs. This increases the >> > hard disk space usage and download time and installs many unnecessary >> > packages as part of the recommendations. >> > >> > This patch ensures that the "Requires.private" field is also >> > considered >> > when creating the dependency list for the dev IPKs. With this, the >> > dev >> > IPK will have the proper dependencies listed, eliminating the need to >> > install recommended packages to resolve the build time dependencies. >> > >> > Example: usr/lib/pkgconfig/libical.pc >> > ---------- >> > Libs: -L${libdir} -lical -licalss -licalvcal >> > Libs.private: -lpthread >> > Requires.private: icu-i18n >> > ---------- >> > Depends field generated for libical-dev >> > Depends: glib-2.0-dev, libical (= 3.0.7-r0) >> > ------------ >> > >> > When trying to resolve the build time dependency with libical >> > package using “-dev” ipk generated, it will throw the below error. >> > ----------- >> > Package icu-i18n was not found in the pkg-config search path. >> > Perhaps you should add the directory containing `icu-i18n.pc' >> > to the PKG_CONFIG_PATH environment variable >> > Package 'icu-i18n', required by 'libical', not found >> > ----------- >> > >> > This patch will fix the broken dependency list. >> > >> > ------- >> > libical-dev depends field generated with this patch >> > Depends: glib-2.0-dev, icu-dev, libical (= 3.0.7-r0) >> > ------- >> > >> > Other examples of packages generated with broken dev dependency. >> > >> > libflac-dev : https://packages.debian.org/sid/libflac-dev >> > Without patch: >> > Depends: flac (= 1.3.3-r0), libflac, libflac++ >> > with patch: >> > Depends: flac (= 1.3.3-r0), libflac, libflac++, libogg-dev >> > >> > libglib2.0-dev : https://packages.debian.org/buster/libglib2.0-dev >> > without patch: >> > Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev >> > with patch: >> > Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev, >> > util-linux-dev, zlib-dev >> > >> > Signed-off-by: Sreejith Ravi <sreejith.ravi087@gmail.com> >> > --- >> > meta/classes/package.bbclass | 2 +- >> > 1 file changed, 1 insertion(+), 1 deletion(-) >> > >> > diff --git a/meta/classes/package.bbclass >> > b/meta/classes/package.bbclass >> > index 67351b2510..084fe428e5 100644 >> > --- a/meta/classes/package.bbclass >> > +++ b/meta/classes/package.bbclass >> > @@ -2182,7 +2182,7 @@ python package_do_pkgconfig () { >> > if m: >> > hdr = m.group(1) >> > exp = pd.expand(m.group(2)) >> > - if hdr == 'Requires': >> > + if hdr == 'Requires' or hdr == >> > 'Requires.private': >> > pkgconfig_needed[pkg] += >> > exp.replace(',', ' ').split() >> > continue >> > m = var_re.match(l) >> > >> >> Unfortunately this patch fails to apply. This is not a patch against >> master and obviously hasn't need tested there. >> >> Cheers, >> >> Richard >> >> > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#201165): > https://lists.openembedded.org/g/openembedded-core/message/201165 > Mute This Topic: https://lists.openembedded.org/mt/106876780/8634312 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [ > sreejith.ravi087@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- > >
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index 67351b2510..084fe428e5 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass @@ -2182,7 +2182,7 @@ python package_do_pkgconfig () { if m: hdr = m.group(1) exp = pd.expand(m.group(2)) - if hdr == 'Requires': + if hdr == 'Requires' or hdr == 'Requires.private': pkgconfig_needed[pkg] += exp.replace(',', ' ').split() continue m = var_re.match(l)
Currently, the package_do_pkgconfig() only handles the "Requires" key field from the .pc file and ignores the "Requires.private" field while generating the dev dependency chain. This results in a broken dependency list and requires the installation of recommended packages to resolve the build dependencies when using the dev IPKs. This increases the hard disk space usage and download time and installs many unnecessary packages as part of the recommendations. This patch ensures that the "Requires.private" field is also considered when creating the dependency list for the dev IPKs. With this, the dev IPK will have the proper dependencies listed, eliminating the need to install recommended packages to resolve the build time dependencies. Example: usr/lib/pkgconfig/libical.pc ---------- Libs: -L${libdir} -lical -licalss -licalvcal Libs.private: -lpthread Requires.private: icu-i18n ---------- Depends field generated for libical-dev Depends: glib-2.0-dev, libical (= 3.0.7-r0) ------------ When trying to resolve the build time dependency with libical package using “-dev” ipk generated, it will throw the below error. ----------- Package icu-i18n was not found in the pkg-config search path. Perhaps you should add the directory containing `icu-i18n.pc' to the PKG_CONFIG_PATH environment variable Package 'icu-i18n', required by 'libical', not found ----------- This patch will fix the broken dependency list. ------- libical-dev depends field generated with this patch Depends: glib-2.0-dev, icu-dev, libical (= 3.0.7-r0) ------- Other examples of packages generated with broken dev dependency. libflac-dev : https://packages.debian.org/sid/libflac-dev Without patch: Depends: flac (= 1.3.3-r0), libflac, libflac++ with patch: Depends: flac (= 1.3.3-r0), libflac, libflac++, libogg-dev libglib2.0-dev : https://packages.debian.org/buster/libglib2.0-dev without patch: Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev with patch: Depends: libffi-dev, libglib-2.0-0 (= 1:2.62.6-r0), libpcre-dev, util-linux-dev, zlib-dev Signed-off-by: Sreejith Ravi <sreejith.ravi087@gmail.com> --- meta/classes/package.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)