[OE-core] [PATCH v2] libfm: upgrade to 1.1.0

Constantin Musca constantinx.musca at intel.com
Fri Dec 28 11:28:49 UTC 2012


On 12/27/2012 07:52 PM, Saul Wold wrote:
> On 12/27/2012 06:39 AM, Constantin Musca wrote:
>> libfm_fix_for_automake-1.12.patch: removed
>> - problem not reprodicible anymore
>>
>> configure_fix.patch: removed
>> - not used
>>
>> [Other changes]
>> - create a symbolic link from ${includedir}/libfm-1.0 to
>> ${includedir}/libfm (this is where pcmanfm looks)
>>
>> Signed-off-by: Constantin Musca <constantinx.musca at intel.com>
>> ---
>>   .../libfm/libfm-0.1.17/configure_fix.patch         | 19 ---------
>>   .../libfm-0.1.17/libfm_fix_for_automake-1.12.patch | 48 
>> ----------------------
>>   .../libfm/{libfm_0.1.17.bb => libfm_1.1.0.bb}      | 14 +++++--
>>   3 files changed, 10 insertions(+), 71 deletions(-)
>>   delete mode 100644 
>> meta/recipes-support/libfm/libfm-0.1.17/configure_fix.patch
>>   delete mode 100644 
>> meta/recipes-support/libfm/libfm-0.1.17/libfm_fix_for_automake-1.12.patch
>>   rename meta/recipes-support/libfm/{libfm_0.1.17.bb => 
>> libfm_1.1.0.bb} (71%)
>>
>> diff --git 
>> a/meta/recipes-support/libfm/libfm-0.1.17/configure_fix.patch 
>> b/meta/recipes-support/libfm/libfm-0.1.17/configure_fix.patch
>> deleted file mode 100644
>> index 351e6e7..0000000
>> --- a/meta/recipes-support/libfm/libfm-0.1.17/configure_fix.patch
>> +++ /dev/null
>> @@ -1,19 +0,0 @@
>> -Update configure.ac after docs removed in 0.1.16
>> -
>> -Upstream-Status: Pending
>> -
>> -Signed-off-by: Zhai Edwin <edwin.zhai at intel.com>
>> -Index: libfm-0.1.16/configure.ac
>> -===================================================================
>> ---- libfm-0.1.16.orig/configure.ac    2011-10-10 15:13:21.000000000 
>> +0800
>> -+++ libfm-0.1.16/configure.ac    2011-10-10 15:13:30.000000000 +0800
>> -@@ -153,9 +153,6 @@
>> -     data/Makefile
>> -     data/ui/Makefile
>> -     po/Makefile.in
>> --    docs/Makefile
>> --    docs/reference/Makefile
>> --    docs/reference/libfm/Makefile
>> -     libfm.pc
>> -     libfm-gtk.pc
>> - ])
>> diff --git 
>> a/meta/recipes-support/libfm/libfm-0.1.17/libfm_fix_for_automake-1.12.patch 
>> b/meta/recipes-support/libfm/libfm-0.1.17/libfm_fix_for_automake-1.12.patch 
>>
>> deleted file mode 100644
>> index 3efb4dd..0000000
>> --- 
>> a/meta/recipes-support/libfm/libfm-0.1.17/libfm_fix_for_automake-1.12.patch
>> +++ /dev/null
>> @@ -1,48 +0,0 @@
>> -Upstream-Status: Pending
>> -
>> -This patch fixes following kind of issues with automake 1.12
>> -| automake: warnings are treated as errors
>> -| data/ui/Makefile.am:21: warning: '%'-style pattern rules are a GNU 
>> make extension
>> -...
>> -| 
>> /srv/home/nitin/builds/build-gcc47/tmp/sysroots/x86_64-linux/usr/share/automake-1.12/am/ltlibrary.am: 
>> warning: 'libfm-gtk.la': linking libtool libraries using a non-POSIX
>> -| 
>> /srv/home/nitin/builds/build-gcc47/tmp/sysroots/x86_64-linux/usr/share/automake-1.12/am/ltlibrary.am: 
>> archiver requires 'AM_PROG_AR' in 'configure.ac'
>> -...
>> -| src/Makefile.am:21: warning: compiling 'glib-compat.c' with 
>> per-target flags requires 'AM_PROG_CC_C_O' in 'configure.ac'
>> -
>> -Signed-Off-By: Nitin A Kamble <nitin.a.kamble at intel.com>
>> -2012/05/03
>> -
>> -Index: libfm-0.1.17/configure.ac
>> -===================================================================
>> ---- libfm-0.1.17.orig/configure.ac
>> -+++ libfm-0.1.17/configure.ac
>> -@@ -4,11 +4,17 @@
>> - AC_PREREQ([2.63])
>> - AC_INIT([libfm], [0.1.17], [http://pcmanfm.sorceforge.net/])
>> - AM_INIT_AUTOMAKE([-Wall -Werror foreign])
>> -+
>> -+# automake 1.12 seems to require this, but automake 1.11 doesn't 
>> recognize it
>> -+m4_pattern_allow([AM_PROG_AR])
>> -+AM_PROG_AR
>> -+
>> - AC_CONFIG_MACRO_DIR(m4)
>> - AC_CONFIG_HEADERS([config.h])
>> -
>> - # Checks for programs.
>> - AC_PROG_CC
>> -+AM_PROG_CC_C_O
>> - AM_PROG_LIBTOOL
>> -
>> - # Checks for libraries.
>> -Index: libfm-0.1.17/data/ui/Makefile.am
>> -===================================================================
>> ---- libfm-0.1.17.orig/data/ui/Makefile.am
>> -+++ libfm-0.1.17/data/ui/Makefile.am
>> -@@ -18,6 +18,6 @@ EXTRA_DIST = \
>> -     $(NULL)
>> -
>> - # Purge GtkBuilder UI files
>> --%.ui: %.glade
>> -+.glade.ui:
>> -     cp $< $@
>> -     $(top_builddir)/src/xml-purge $@
>> diff --git a/meta/recipes-support/libfm/libfm_0.1.17.bb 
>> b/meta/recipes-support/libfm/libfm_1.1.0.bb
>> similarity index 71%
>> rename from meta/recipes-support/libfm/libfm_0.1.17.bb
>> rename to meta/recipes-support/libfm/libfm_1.1.0.bb
>> index 2cac361..95a2ca0 100644
>> --- a/meta/recipes-support/libfm/libfm_0.1.17.bb
>> +++ b/meta/recipes-support/libfm/libfm_1.1.0.bb
>> @@ -10,16 +10,22 @@ LIC_FILES_CHKSUM = 
>> "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
>>   SECTION = "x11/libs"
>>   DEPENDS = "glib-2.0 pango gtk+ menu-cache intltool-native"
>>
>> -PR = "r4"
>> +PR = "r0"
>>
>>   SRC_URI = "${SOURCEFORGE_MIRROR}/pcmanfm/libfm-${PV}.tar.gz \
>> -           file://libfm_fix_for_automake-1.12.patch \
>>              "
>>
>> -SRC_URI[md5sum] = "a97e03d973e6ac727f28d0934d6c9ad5"
>> -SRC_URI[sha256sum] = 
>> "1740681cff4cd4c5a2eaa9805d8898269cfb6a49a0bda0acb242def15bc7131b"
>> +SRC_URI[md5sum] = "a5bc8b8291cf810c659bfb3af378b5de"
>> +SRC_URI[sha256sum] = 
>> "b9426e588670b53570b808c49abd1d103863614dd3622559b8c3ef1392fe0b3d"
>>
>>   inherit autotools pkgconfig
>>
>> +do_install_append() {
>> +    cd ${D}/${includedir}
>> +    rm -rf ${BPN}
>> +    ln -s ${BPN}-1.0 ${BPN}
>> +    cd ${S}
>> +}
> This is not the correct way to do this kind of thing and I am not even 
> sure why you need to do this at all.  I tested unmodified libfm with 
> pcmanfm 1.1.0 and it worked correctly, I think all the extra linking 
> stuff was not needed at all.
>
> Looks like we can clean up the patches and simplify the recipe.
>
> Sau!
>
>
>> +
>>   PACKAGES += "${PN}-mime"
>>   FILES_${PN}-mime = "${datadir}/mime/"
>>
If you try to build unmodified libfm several times you will discover an 
error like this:
ERROR: Error executing a python function in 
/home/dev/yocto/poky/meta/recipes-support/libfm/libfm_1.1.0.bb:
OSError: [Errno 40] Too many levels of symbolic links: 
'/home/dev/yocto/poky-build/tmp/work/armv5te-poky-linux-gnueabi/libfm/1.1.0-r0/packages-split/libfm-dev/usr/include/libfm/libfm-1.0'

ERROR: The stack trace of python calls that resulted in this 
exception/failure was:
ERROR:   File "populate_packages", line 177, in <module>
ERROR:
ERROR:   File "populate_packages", line 147, in populate_packages
ERROR:
ERROR: The code that was being executed was:
ERROR:      0173:                bb.note("%s contains dangling symlink 
to %s" % (pkg, l))
ERROR:      0174:        d.setVar('RDEPENDS_' + pkg, 
bb.utils.join_deps(rdepends, commasep=False))
ERROR:      0175:
ERROR:      0176:
ERROR:  *** 0177:populate_packages(d)
ERROR:      0178:
ERROR: [From file: 'populate_packages', lineno: 177, function: <module>]
ERROR:      0143:                path = os.path.join(root, f)
ERROR:      0144:                rpath = path[len(inst_root):]
ERROR:      0145:                pkg_files[pkg].append(rpath)
ERROR:      0146:                try:
ERROR:  *** 0147:                    s = os.stat(path)
ERROR:      0148:                except OSError, (err, strerror):
ERROR:      0149:                    if err != errno.ENOENT:
ERROR:      0150:                        raise
ERROR:      0151:                    target = os.readlink(path)
ERROR: [From file: 'populate_packages', lineno: 147, function: 
populate_packages]
ERROR: Function failed: populate_packages
ERROR: Logfile of failure stored in: 
/home/dev/yocto/poky-build/tmp/work/armv5te-poky-linux-gnueabi/libfm/1.1.0-r0/temp/log.do_package.743


The files from the package dir look like this:
libfm/1.1.0-r0/package/usr/include:
total 8.0K
drwxr-xr-x 2 costin costin 4.0K Dec 28 11:48 libfm/
drwxr-xr-x 2 costin costin 4.0K Dec 28 11:48 libfm-1.0/
libfm/1.1.0-r0/package/usr/include/libfm:
total 0
lrwxrwxrwx 1 costin costin 9 Dec 28 11:48 libfm-1.0 -> libfm-1.0


The problem is that we have the following definition in src/Makefile.am:
     pkginclude_HEADERS = \
         $(LIBFM_INCLUDES) \
         $(LIBFM_GTK_INCLUDES) \
         $(NULL)

Automake autogenerates from this definition code that creates 
pkgincludedir which is (${includedir}/libfm}. Thus we have a race 
condition between the code that creates pkgincludedir and the code that 
tries to symlink ${includedir}/libfm-1.0 to ${includedir}/libfm. More 
details can be found in patch v3. I hope now everything is clear.


Cheers,
Constantin




More information about the Openembedded-core mailing list