diff mbox

[v2,13/15] erlang-p1-iconv: new package.

Message ID 1415366931-6870-14-git-send-email-johan.oudinet@gmail.com
State Superseded
Headers show

Commit Message

Johan Oudinet Nov. 7, 2014, 1:28 p.m. UTC
Signed-off-by: Johan Oudinet <johan.oudinet@gmail.com>
---
 package/Config.in                          |  1 +
 package/erlang-p1-iconv/Config.in          |  6 ++++++
 package/erlang-p1-iconv/erlang-p1-iconv.mk | 17 +++++++++++++++++
 3 files changed, 24 insertions(+)
 create mode 100644 package/erlang-p1-iconv/Config.in
 create mode 100644 package/erlang-p1-iconv/erlang-p1-iconv.mk

Comments

Yann E. MORIN Nov. 10, 2014, 4:37 p.m. UTC | #1
Johan, All,

On 2014-11-07 14:28 +0100, Johan Oudinet spake thusly:
> Signed-off-by: Johan Oudinet <johan.oudinet@gmail.com>
> ---
>  package/Config.in                          |  1 +
>  package/erlang-p1-iconv/Config.in          |  6 ++++++
>  package/erlang-p1-iconv/erlang-p1-iconv.mk | 17 +++++++++++++++++
>  3 files changed, 24 insertions(+)
>  create mode 100644 package/erlang-p1-iconv/Config.in
>  create mode 100644 package/erlang-p1-iconv/erlang-p1-iconv.mk
[--SNIP--]

While I was reviewing the other patches, I got a build failure with this
package (long lines may have got split in the copy-paste):

Compiling c_src/iconv.c
/home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
cannot find -lerl_interface
/home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
cannot find -lei
/home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
cannot find -lerl_interface
/home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
cannot find -lei
collect2: error: ld returned 1 exit status
ERROR: sh(/home/ymorin/dev/buildroot/O/host/usr/bin/armv6-rpi-linux-gnueabihf-gcc
c_src/iconv.o
-L/home/ymorin/dev/buildroot/O/target/usr/lib/erlang/lib/erl_interface-/lib
-lerl_interface -lei  -shared
-L/home/ymorin/dev/buildroot/O/target/usr/lib/erlang/lib/erl_interface-/lib
-lerl_interface -lei -o priv/lib/iconv.so)
failed with return code 1 and the following output:
/home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
cannot find -lerl_interface
/home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
cannot find -lei
/home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
cannot find -lerl_interface
/home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
cannot find -lei
collect2: error: ld returned 1 exit status

ERROR: compile failed while processing
/home/ymorin/dev/buildroot/O/build/erlang-p1-iconv-dff5ee5: rebar_abort

Here is my defconfig file:

BR2_armeb=y
BR2_arm1176jzf_s=y
BR2_ARM_EABIHF=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_PATH="/home/ymorin/x-tools/armv6-rpi-linux-gnueabihf"
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="armv6-rpi-linux-gnueabihf"
BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_12=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
# BR2_TOOLCHAIN_EXTERNAL_INET_RPC is not set
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_PACKAGE_ERLANG=y
BR2_PACKAGE_EJABBERD=y

Since I'm using a local toolchain, you won't be able to reproduce. I'll
try to use one of the pre-built toolchains.

Regards,
Yann E. MORIN.
Yann E. MORIN Nov. 10, 2014, 5:30 p.m. UTC | #2
Johan, All,

On 2014-11-10 17:37 +0100, Yann E. MORIN spake thusly:
> On 2014-11-07 14:28 +0100, Johan Oudinet spake thusly:
> > Signed-off-by: Johan Oudinet <johan.oudinet@gmail.com>
> > ---
> >  package/Config.in                          |  1 +
> >  package/erlang-p1-iconv/Config.in          |  6 ++++++
> >  package/erlang-p1-iconv/erlang-p1-iconv.mk | 17 +++++++++++++++++
> >  3 files changed, 24 insertions(+)
> >  create mode 100644 package/erlang-p1-iconv/Config.in
> >  create mode 100644 package/erlang-p1-iconv/erlang-p1-iconv.mk
> [--SNIP--]
> 
> While I was reviewing the other patches, I got a build failure with this
> package (long lines may have got split in the copy-paste):
> 
> Compiling c_src/iconv.c
> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> cannot find -lerl_interface
> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> cannot find -lei
> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> cannot find -lerl_interface
> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> cannot find -lei
> collect2: error: ld returned 1 exit status
> ERROR: sh(/home/ymorin/dev/buildroot/O/host/usr/bin/armv6-rpi-linux-gnueabihf-gcc
> c_src/iconv.o
> -L/home/ymorin/dev/buildroot/O/target/usr/lib/erlang/lib/erl_interface-/lib
> -lerl_interface -lei  -shared
> -L/home/ymorin/dev/buildroot/O/target/usr/lib/erlang/lib/erl_interface-/lib
> -lerl_interface -lei -o priv/lib/iconv.so)
> failed with return code 1 and the following output:
> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> cannot find -lerl_interface
> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> cannot find -lei
> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> cannot find -lerl_interface
> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> cannot find -lei
> collect2: error: ld returned 1 exit status
> 
> ERROR: compile failed while processing
> /home/ymorin/dev/buildroot/O/build/erlang-p1-iconv-dff5ee5: rebar_abort
> 
> Here is my defconfig file:
> 
> BR2_armeb=y
> BR2_arm1176jzf_s=y
> BR2_ARM_EABIHF=y
> BR2_TOOLCHAIN_EXTERNAL=y
> BR2_TOOLCHAIN_EXTERNAL_PATH="/home/ymorin/x-tools/armv6-rpi-linux-gnueabihf"
> BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="armv6-rpi-linux-gnueabihf"
> BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_12=y
> BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
> # BR2_TOOLCHAIN_EXTERNAL_INET_RPC is not set
> BR2_TOOLCHAIN_EXTERNAL_CXX=y
> BR2_PACKAGE_ERLANG=y
> BR2_PACKAGE_EJABBERD=y

I still get the same error with this defconfig:

BR2_armeb=y
BR2_cortex_a9=y
BR2_ARM_EABIHF=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_ERLANG=y
BR2_PACKAGE_EJABBERD=y

But I can see the missing libs to be present, except the path to them is
not specified in the compile line:
    staging/usr/lib/erlang/usr/lib/liberl_interface.a
    staging/usr/lib/erlang/usr/lib/libei.a

Except it seems weird to have ".../erlang/usr/lib/..." to begin with.

Regards,
Yann E. MORIN.
Johan Oudinet Nov. 11, 2014, 3:30 a.m. UTC | #3
Yann, All,

On Mon, Nov 10, 2014 at 6:30 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>> Compiling c_src/iconv.c
>> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
>> cannot find -lerl_interface
>> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
>> cannot find -lei
>> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
>> cannot find -lerl_interface
>> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
>> cannot find -lei
>> collect2: error: ld returned 1 exit status
>> ERROR: sh(/home/ymorin/dev/buildroot/O/host/usr/bin/armv6-rpi-linux-gnueabihf-gcc
>> c_src/iconv.o
>> -L/home/ymorin/dev/buildroot/O/target/usr/lib/erlang/lib/erl_interface-/lib
>> -lerl_interface -lei  -shared
>> -L/home/ymorin/dev/buildroot/O/target/usr/lib/erlang/lib/erl_interface-/lib
>> -lerl_interface -lei -o priv/lib/iconv.so)
>> failed with return code 1 and the following output:
>> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
>> cannot find -lerl_interface
>> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
>> cannot find -lei
>> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
>> cannot find -lerl_interface
>> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
>> cannot find -lei
>> collect2: error: ld returned 1 exit status

I've seen this error few times when compiling several rebar packages.
As a workaround, I run `make erlang-dirclean'.
I'm not 100% sure of the reason for this error but I suspect that old
versions of rebar remove such libraries after compiling, which leads
to an error on the next compilation.
Yann E. MORIN Nov. 11, 2014, 10:04 a.m. UTC | #4
On 2014-11-11 04:30 +0100, Johan Oudinet spake thusly:
> Yann, All,
> 
> On Mon, Nov 10, 2014 at 6:30 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> >> Compiling c_src/iconv.c
> >> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> >> cannot find -lerl_interface
> >> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> >> cannot find -lei
> >> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> >> cannot find -lerl_interface
> >> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> >> cannot find -lei
> >> collect2: error: ld returned 1 exit status
> >> ERROR: sh(/home/ymorin/dev/buildroot/O/host/usr/bin/armv6-rpi-linux-gnueabihf-gcc
> >> c_src/iconv.o
> >> -L/home/ymorin/dev/buildroot/O/target/usr/lib/erlang/lib/erl_interface-/lib
> >> -lerl_interface -lei  -shared
> >> -L/home/ymorin/dev/buildroot/O/target/usr/lib/erlang/lib/erl_interface-/lib
> >> -lerl_interface -lei -o priv/lib/iconv.so)
> >> failed with return code 1 and the following output:
> >> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> >> cannot find -lerl_interface
> >> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> >> cannot find -lei
> >> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> >> cannot find -lerl_interface
> >> /home/ymorin/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.1/../../../../armv6-rpi-linux-gnueabihf/bin/ld.bfd:
> >> cannot find -lei
> >> collect2: error: ld returned 1 exit status
> 
> I've seen this error few times when compiling several rebar packages.
> As a workaround, I run `make erlang-dirclean'.
> I'm not 100% sure of the reason for this error but I suspect that old
> versions of rebar remove such libraries after compiling, which leads
> to an error on the next compilation.

Well, that error happened from a completely clean build dir, so it is
not OK do have to rebuild erlang in this case (it might have been OK
when doing rebuilds, but even so, we'd prefer to avoid that).

And now I suspect I know why it hapenned: I am building out-of-tree, so
the comment I made on your patch 2/2 might be kicking in:

    ---8<---
    > +EI_VSN_FILE=output/build/erlang-$ERLANG_VSN/lib/erl_interface/vsn.mk

    That does not work for out-of-tree builds. You should use something
    like:
        EI_VSN_FILE="${O}/build/erlang-$ERLANG_VSN/lib/erl_interface/vsn.mk"
    ---8<---

Anyway, I'll continue investigating this series.

Regards,
Yann E. MORIN.
diff mbox

Patch

diff --git a/package/Config.in b/package/Config.in
index 8abd6a6..bda3674 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -395,6 +395,7 @@  if BR2_PACKAGE_ERLANG
 menu "Erlang libraries/modules"
 	source "package/erlang-goldrush/Config.in"
 	source "package/erlang-lager/Config.in"
+	source "package/erlang-p1-iconv/Config.in"
 	source "package/erlang-p1-sip/Config.in"
 	source "package/erlang-p1-stringprep/Config.in"
 	source "package/erlang-p1-stun/Config.in"
diff --git a/package/erlang-p1-iconv/Config.in b/package/erlang-p1-iconv/Config.in
new file mode 100644
index 0000000..53876bf
--- /dev/null
+++ b/package/erlang-p1-iconv/Config.in
@@ -0,0 +1,6 @@ 
+config BR2_PACKAGE_ERLANG_P1_ICONV
+	bool "erlang-p1-iconv"
+	depends on BR2_PACKAGE_ERLANG
+	select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE
+	help
+	  Erlang interface to libiconv
diff --git a/package/erlang-p1-iconv/erlang-p1-iconv.mk b/package/erlang-p1-iconv/erlang-p1-iconv.mk
new file mode 100644
index 0000000..e810a9d
--- /dev/null
+++ b/package/erlang-p1-iconv/erlang-p1-iconv.mk
@@ -0,0 +1,17 @@ 
+################################################################################
+#
+# erlang-p1-iconv
+#
+################################################################################
+
+ERLANG_P1_ICONV_VERSION = dff5ee5
+ERLANG_P1_ICONV_SITE = $(call github,processone,eiconv,$(ERLANG_P1_ICONV_VERSION))
+ERLANG_P1_ICONV_LICENSE = GPLv2+
+ERLANG_P1_ICONV_LICENSE_FILES = COPYING
+ERLANG_P1_ICONV_DEPENDENCIES = erlang
+
+ifeq ($(BR2_PACKAGE_LIBICONV),y)
+ERLANG_P1_ICONV_DEPENDENCIES += libiconv
+endif
+
+$(eval $(rebar-package))