Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] LFTP: a sophisticated ftp/sftp/http/fish client with few dependencies
@ 2013-11-21 15:16 Arnaud Rébillout
  2013-11-21 15:16 ` [Buildroot] [PATCH] lftp: new package Arnaud Rébillout
  0 siblings, 1 reply; 12+ messages in thread
From: Arnaud Rébillout @ 2013-11-21 15:16 UTC (permalink / raw)
  To: buildroot

Hello all,

if you're interested, here comes a patch to add LFTP to the buildroot packages.

LFTP is a versatile and reliable FTP/SFTP/HTTP/FISH client. It has a mirror mode, which is very useful to backup some data on a remote server. It also supports bittorrent protocol.

The software itself has been around for quite a long time (1993, so it's 20 years old now!), and it's still actively maintained.

The architecture is modular, and the different protocols and commands can be compiled as libraries. Therefore it's possible to put only what's needed on the target, and save space.

And since I used it, it's been working great, it's far better than the GVFS/rsync couple I used before to backup some data.

I hope this can be useful for someone out there,
Best regards,
Arnaud.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH] lftp: new package.
  2013-11-21 15:16 [Buildroot] LFTP: a sophisticated ftp/sftp/http/fish client with few dependencies Arnaud Rébillout
@ 2013-11-21 15:16 ` Arnaud Rébillout
  2013-11-21 15:42   ` Thomas Petazzoni
  0 siblings, 1 reply; 12+ messages in thread
From: Arnaud Rébillout @ 2013-11-21 15:16 UTC (permalink / raw)
  To: buildroot

LFTP is a sophisticated ftp/http client, and a file transfer program
supporting a number of network protocols. Like BASH, it has job
control and uses the readline library for input. It has bookmarks,
a built-in mirror command, and can transfer several files in parallel.
It was designed with reliability in mind.

Signed-off-by: Arnaud R?billout <rebillout@syscom.ch>
---
 package/Config.in                               |  1 +
 package/lftp/Config.in                          | 65 ++++++++++++++++++
 package/lftp/lftp-disable-posix_fallocate.patch | 21 ++++++
 package/lftp/lftp.mk                            | 87 +++++++++++++++++++++++++
 4 files changed, 174 insertions(+)
 create mode 100644 package/lftp/Config.in
 create mode 100644 package/lftp/lftp-disable-posix_fallocate.patch
 create mode 100644 package/lftp/lftp.mk

diff --git a/package/Config.in b/package/Config.in
index 311cc6c..bcaa8f3 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -814,6 +814,7 @@ source "package/iputils/Config.in"
 source "package/iw/Config.in"
 source "package/kismet/Config.in"
 source "package/knock/Config.in"
+source "package/lftp/Config.in"
 source "package/lighttpd/Config.in"
 source "package/linknx/Config.in"
 source "package/links/Config.in"
diff --git a/package/lftp/Config.in b/package/lftp/Config.in
new file mode 100644
index 0000000..93de861
--- /dev/null
+++ b/package/lftp/Config.in
@@ -0,0 +1,65 @@
+config BR2_PACKAGE_LFTP
+	bool "lftp"
+	depends on BR2_USE_WCHAR
+	depends on BR2_INSTALL_LIBSTDCPP
+	select BR2_PACKAGE_READLINE
+	select BR2_PACKAGE_ZLIB
+	select BR2_PACKAGE_GNUTLS if !BR2_PACKAGE_OPENSSL
+	help
+	  LFTP is a sophisticated ftp/http client, and a file transfer program
+	  supporting a number of network protocols. Like BASH, it has job
+	  control and uses the readline library for input. It has bookmarks,
+	  a built-in mirror command, and can transfer several files in parallel.
+	  It was designed with reliability in mind.
+
+	  http://lftp.yar.ru/
+
+if BR2_PACKAGE_LFTP
+
+comment "Commands"
+
+config BR2_PACKAGE_LFTP_CMD_MIRROR
+	bool "Mirror command"
+	help
+	  Enable mirror command
+
+config BR2_PACKAGE_LFTP_CMD_SLEEP
+	bool "Sleep command"
+	help
+	  Enable sleep command
+
+config BR2_PACKAGE_LFTP_CMD_TORRENT
+	bool "Torrent command"
+	help
+	  Enable torren command
+
+comment "Protocols"
+
+config BR2_PACKAGE_LFTP_PROTO_FISH
+	bool "FISH protocol"
+	default y
+	help
+	  Enable FILE protocol
+
+config BR2_PACKAGE_LFTP_PROTO_FTP
+	bool "FTP protocol"
+	default y
+	help
+	  Enable FTP protocol
+
+config BR2_PACKAGE_LFTP_PROTO_HTTP
+	bool "HTTP protocol"
+	default y
+	help
+	  Enable HTTP protocol
+
+config BR2_PACKAGE_LFTP_PROTO_SFTP
+	bool "SFTP protocol"
+	default y
+	help
+	  Enable SFTP protocol
+
+endif  # BR2_PACKAGE_LFTP
+
+comment "lftp requires a toolchain w/ C++, wchar"
+	depends on !(BR2_USE_WCHAR && BR2_INSTALL_LIBSTDCPP)
diff --git a/package/lftp/lftp-disable-posix_fallocate.patch b/package/lftp/lftp-disable-posix_fallocate.patch
new file mode 100644
index 0000000..29bb780
--- /dev/null
+++ b/package/lftp/lftp-disable-posix_fallocate.patch
@@ -0,0 +1,21 @@
+diff -pruN lftp-4.4.10.orig/configure lftp-4.4.10/configure
+--- lftp-4.4.10.orig/configure	2013-10-31 15:40:04.716111900 +0100
++++ lftp-4.4.10/configure	2013-10-31 15:41:37.431445424 +0100
+@@ -48870,10 +48870,13 @@ if ${i_cv_posix_fallocate_works+:} false
+ else
+ 
+      if test "$cross_compiling" = yes; then :
+-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error $? "cannot run test program while cross compiling
+-See \`config.log' for more details" "$LINENO" 5; }
++#  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++#$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++#as_fn_error $? "cannot run test program while cross compiling
++#See \`config.log' for more details" "$LINENO" 5; }
++
++# Can't test, assume it doesn't work
++i_cv_posix_fallocate_works=no
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
diff --git a/package/lftp/lftp.mk b/package/lftp/lftp.mk
new file mode 100644
index 0000000..1ee8e89
--- /dev/null
+++ b/package/lftp/lftp.mk
@@ -0,0 +1,87 @@
+################################################################################
+#
+# lftp
+#
+################################################################################
+
+LFTP_VERSION = 4.4.10
+LFTP_SOURCE  = lftp-$(LFTP_VERSION).tar.gz
+LFTP_SITE    = http://lftp.yar.ru/ftp
+LFTP_LICENSE = GPLv3+
+LFTP_LICENSE_FILES = COPYING
+LFTP_DEPENDENCIES  = readline zlib
+
+LFTP_CONF_OPT += --with-modules
+
+ifeq ($(BR2_PACKAGE_GNUTLS),y)
+LFTP_DEPENDENCIES += gnutls
+LFTP_CONF_OPT += --with-gnutls
+else
+LFTP_CONF_OPT += --without-gnutls
+endif
+
+ifeq ($(BR2_PACKAGE_OPENSSL),y)
+LFTP_DEPENDENCIES += openssl
+LFTP_CONF_OPT += --with-openssl
+else
+LFTP_CONF_OPT += --without-openssl
+endif
+
+# Remove /usr/share/lftp
+define LFTP_REMOVE_DATA
+        $(RM) -fr $(TARGET_DIR)/usr/share/lftp
+endef
+LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_DATA
+
+# Optional commands
+ifneq ($(BR2_PACKAGE_LFTP_CMD_MIRROR),y)
+define LFTP_REMOVE_CMD_MIRROR
+	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/cmd-mirror.so
+endef
+LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_CMD_MIRROR
+endif
+
+ifneq ($(BR2_PACKAGE_LFTP_CMD_SLEEP),y)
+define LFTP_REMOVE_CMD_SLEEP
+	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/cmd-sleep.so
+endef
+LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_CMD_SLEEP
+endif
+
+ifneq ($(BR2_PACKAGE_LFTP_CMD_TORRENT),y)
+define LFTP_REMOVE_CMD_TORRENT
+	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/cmd-torrent.so
+endef
+LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_CMD_TORRENT
+endif
+
+# Optional protocols
+ifneq ($(BR2_PACKAGE_LFTP_PROTO_FISH),y)
+define LFTP_REMOVE_PROTO_FISH
+	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/proto-fish.so
+endef
+LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_PROTO_FISH
+endif
+
+ifneq ($(BR2_PACKAGE_LFTP_PROTO_FTP),y)
+define LFTP_REMOVE_PROTO_FTP
+	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/proto-ftp.so
+endef
+LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_PROTO_FTP
+endif
+
+ifneq ($(BR2_PACKAGE_LFTP_PROTO_HTTP),y)
+define LFTP_REMOVE_PROTO_HTTP
+	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/proto-http.so
+endef
+LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_PROTO_HTTP
+endif
+
+ifneq ($(BR2_PACKAGE_LFTP_PROTO_SFTP),y)
+define LFTP_REMOVE_PROTO_SFTP
+	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/proto-sftp.so
+endef
+LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_PROTO_SFTP
+endif
+
+$(eval $(autotools-package))
-- 
1.8.4.3

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH] lftp: new package.
  2013-11-21 15:16 ` [Buildroot] [PATCH] lftp: new package Arnaud Rébillout
@ 2013-11-21 15:42   ` Thomas Petazzoni
  2013-11-21 16:17     ` Arnaud Rébillout
  2013-11-25 13:19     ` Arnaud Rébillout
  0 siblings, 2 replies; 12+ messages in thread
From: Thomas Petazzoni @ 2013-11-21 15:42 UTC (permalink / raw)
  To: buildroot

Dear Arnaud R?billout,

On Thu, 21 Nov 2013 16:16:11 +0100, Arnaud R?billout wrote:
> LFTP is a sophisticated ftp/http client, and a file transfer program
> supporting a number of network protocols. Like BASH, it has job
> control and uses the readline library for input. It has bookmarks,
> a built-in mirror command, and can transfer several files in parallel.
> It was designed with reliability in mind.
> 
> Signed-off-by: Arnaud R?billout <rebillout@syscom.ch>

Thanks, looks pretty good! A few comments below.


> +config BR2_PACKAGE_LFTP_CMD_TORRENT
> +	bool "Torrent command"
> +	help
> +	  Enable torren command

Typo.

> +
> +comment "Protocols"
> +
> +config BR2_PACKAGE_LFTP_PROTO_FISH
> +	bool "FISH protocol"
> +	default y
> +	help
> +	  Enable FILE protocol

FILE ? or FISH ?

> +
> +config BR2_PACKAGE_LFTP_PROTO_FTP
> +	bool "FTP protocol"
> +	default y
> +	help
> +	  Enable FTP protocol
> +
> +config BR2_PACKAGE_LFTP_PROTO_HTTP
> +	bool "HTTP protocol"
> +	default y
> +	help
> +	  Enable HTTP protocol
> +
> +config BR2_PACKAGE_LFTP_PROTO_SFTP
> +	bool "SFTP protocol"
> +	default y
> +	help
> +	  Enable SFTP protocol

Is the dependency on OpenSSL or GnuTLS always needed? Or is it only
needed if you enable SFTP or some specific protocol?

> diff --git a/package/lftp/lftp-disable-posix_fallocate.patch b/package/lftp/lftp-disable-posix_fallocate.patch
> new file mode 100644
> index 0000000..29bb780
> --- /dev/null
> +++ b/package/lftp/lftp-disable-posix_fallocate.patch
> @@ -0,0 +1,21 @@
> +diff -pruN lftp-4.4.10.orig/configure lftp-4.4.10/configure
> +--- lftp-4.4.10.orig/configure	2013-10-31 15:40:04.716111900 +0100
> ++++ lftp-4.4.10/configure	2013-10-31 15:41:37.431445424 +0100

All patches need a description + Signed-off-by.

Moreover, we typically don't patch the configure script, but the source
of it, i.e configure.in or configure.ac, and we mark the package as
<pkg>_AUTORECONF = YES.

> +@@ -48870,10 +48870,13 @@ if ${i_cv_posix_fallocate_works+:} false
> + else
> + 
> +      if test "$cross_compiling" = yes; then :
> +-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
> +-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
> +-as_fn_error $? "cannot run test program while cross compiling
> +-See \`config.log' for more details" "$LINENO" 5; }
> ++#  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
> ++#$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
> ++#as_fn_error $? "cannot run test program while cross compiling
> ++#See \`config.log' for more details" "$LINENO" 5; }
> ++
> ++# Can't test, assume it doesn't work
> ++i_cv_posix_fallocate_works=no
> + else
> +   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> + /* end confdefs.h.  */

Can you detail the posix_fallocate() problem you've seen? Maybe we can
solve it in a different/nicer way.

> diff --git a/package/lftp/lftp.mk b/package/lftp/lftp.mk
> new file mode 100644
> index 0000000..1ee8e89
> --- /dev/null
> +++ b/package/lftp/lftp.mk
> @@ -0,0 +1,87 @@
> +################################################################################
> +#
> +# lftp
> +#
> +################################################################################
> +
> +LFTP_VERSION = 4.4.10
> +LFTP_SOURCE  = lftp-$(LFTP_VERSION).tar.gz

This last line is not needed, as it is the default.

> +LFTP_SITE    = http://lftp.yar.ru/ftp
> +LFTP_LICENSE = GPLv3+
> +LFTP_LICENSE_FILES = COPYING
> +LFTP_DEPENDENCIES  = readline zlib
> +
> +LFTP_CONF_OPT += --with-modules
> +
> +ifeq ($(BR2_PACKAGE_GNUTLS),y)
> +LFTP_DEPENDENCIES += gnutls
> +LFTP_CONF_OPT += --with-gnutls
> +else
> +LFTP_CONF_OPT += --without-gnutls
> +endif
> +
> +ifeq ($(BR2_PACKAGE_OPENSSL),y)
> +LFTP_DEPENDENCIES += openssl
> +LFTP_CONF_OPT += --with-openssl
> +else
> +LFTP_CONF_OPT += --without-openssl
> +endif
> +
> +# Remove /usr/share/lftp
> +define LFTP_REMOVE_DATA
> +        $(RM) -fr $(TARGET_DIR)/usr/share/lftp
> +endef
> +LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_DATA
> +
> +# Optional commands
> +ifneq ($(BR2_PACKAGE_LFTP_CMD_MIRROR),y)
> +define LFTP_REMOVE_CMD_MIRROR
> +	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/cmd-mirror.so
> +endef
> +LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_CMD_MIRROR
> +endif
> +
> +ifneq ($(BR2_PACKAGE_LFTP_CMD_SLEEP),y)
> +define LFTP_REMOVE_CMD_SLEEP
> +	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/cmd-sleep.so
> +endef
> +LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_CMD_SLEEP
> +endif
> +
> +ifneq ($(BR2_PACKAGE_LFTP_CMD_TORRENT),y)
> +define LFTP_REMOVE_CMD_TORRENT
> +	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/cmd-torrent.so
> +endef
> +LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_CMD_TORRENT
> +endif
> +
> +# Optional protocols
> +ifneq ($(BR2_PACKAGE_LFTP_PROTO_FISH),y)
> +define LFTP_REMOVE_PROTO_FISH
> +	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/proto-fish.so
> +endef
> +LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_PROTO_FISH
> +endif
> +
> +ifneq ($(BR2_PACKAGE_LFTP_PROTO_FTP),y)
> +define LFTP_REMOVE_PROTO_FTP
> +	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/proto-ftp.so
> +endef
> +LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_PROTO_FTP
> +endif
> +
> +ifneq ($(BR2_PACKAGE_LFTP_PROTO_HTTP),y)
> +define LFTP_REMOVE_PROTO_HTTP
> +	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/proto-http.so
> +endef
> +LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_PROTO_HTTP
> +endif
> +
> +ifneq ($(BR2_PACKAGE_LFTP_PROTO_SFTP),y)
> +define LFTP_REMOVE_PROTO_SFTP
> +	$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/proto-sftp.so
> +endef
> +LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_PROTO_SFTP
> +endif

I think this can be factorized in a nicer way:

LFTP_FILES_TO_REMOVE-$(BR2_PACKAGE_LFTP_CMD_MIRROR) += cmd-mirror
LFTP_FILES_TO_REMOVE-$(BR2_PACKAGE_LFTP_CMD_SLEEP) += cmd-sleep
LFTP_FILES_TO_REMOVE-$(BR2_PACKAGE_LFTP_CMD_TORRENT) += cmd-torrent
LFTP_FILES_TO_REMOVE-$(BR2_PACKAGE_LFTP_PROTO_FISH) += proto-fish
LFTP_FILES_TO_REMOVE-$(BR2_PACKAGE_LFTP_PROTO_FTP) += proto-ftp
LFTP_FILES_TO_REMOVE-$(BR2_PACKAGE_LFTP_PROTO_HTTP) += proto-http
LFTP_FILES_TO_REMOVE-$(BR2_PACKAGE_LFTP_PROTO_SFTP) += proto-sftp

define LFTP_REMOVE_FILES
	for f in $(LFTP_FILES_TO_REMOVE-y) ; do \
		$(RM) -f $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/$$f ; \
	done
endef

LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_FILES

or in a slightly more make-style way (but maybe not so readable) :

define LFTP_REMOVE_FILES
	$(if $(LFTP_FILES_TO_REMOVE-y), \
		$(RM) -f $(addprefix $(TARGET_DIR)/usr/lib/lftp/$(LFTP_VERSION)/,$(LFTP_FILES_TO_REMOVE-y)))
endef

LFTP_POST_INSTALL_TARGET_HOOKS += LFTP_REMOVE_FILES

Best regards,

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH] lftp: new package.
  2013-11-21 15:42   ` Thomas Petazzoni
@ 2013-11-21 16:17     ` Arnaud Rébillout
  2013-11-21 17:12       ` Thomas Petazzoni
  2013-11-25 13:19     ` Arnaud Rébillout
  1 sibling, 1 reply; 12+ messages in thread
From: Arnaud Rébillout @ 2013-11-21 16:17 UTC (permalink / raw)
  To: buildroot

Hi Thomas,

thanks for your comments, I'll send a second revision with everything fixed.

> Can you detail the posix_fallocate() problem you've seen? Maybe we can
> solve it in a different/nicer way.

Here is a piece of the m4 file which describes the macro 
(lftp-4.4.10/m4/lftp.m4, line 246):

> AC_DEFINE(HAVE_POSIX_FALLOCATE, 1, [Define if you have a working 
> posix_fallocate()])
> AC_DEFUN([LFTP_POSIX_FALLOCATE_CHECK],[
>    dnl * Old glibcs have broken posix_fallocate(). Make sure not to 
> use it.
>    dnl * It may also be broken in AIX.

In order to test that, the configure script compiles and runs a piece of 
C code.

There's two problems with that.

First, the code won't compile because uClibc doesn't define 
posix_fallocate. To solve that, we can fix the m4 macro with a #define.
It's quite easy, though I don't know exactly how to do it properly.

But after that comes the second problem: the test is supposed to run 
this piece of code. How are we supposed to run cross-compiled code on 
the host ?
I can imagine it's a typical problem, but I don't know how it's supposed 
to be handled.


Regards,
Arnaud.


-- 
Arnaud R?billout
/D?veloppeur software/

SYSCOM Instruments SA,
Rue de l?Industrie 21,
1450 Ste-Croix, SUISSE
Tel : +41 (0) 24 455 44 11
Fax : +41 (0) 24 454 45 60
Visit us at www.syscom.ch <http://www.syscom.ch>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20131121/e39d8e1f/attachment.html>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH] lftp: new package.
  2013-11-21 16:17     ` Arnaud Rébillout
@ 2013-11-21 17:12       ` Thomas Petazzoni
  2013-11-21 21:54         ` Arnout Vandecappelle
  0 siblings, 1 reply; 12+ messages in thread
From: Thomas Petazzoni @ 2013-11-21 17:12 UTC (permalink / raw)
  To: buildroot

Dear Arnaud R?billout,

On Thu, 21 Nov 2013 17:17:39 +0100, Arnaud R?billout wrote:

> thanks for your comments, I'll send a second revision with everything fixed.

Thanks!

> > Can you detail the posix_fallocate() problem you've seen? Maybe we can
> > solve it in a different/nicer way.
> 
> Here is a piece of the m4 file which describes the macro 
> (lftp-4.4.10/m4/lftp.m4, line 246):
> 
> > AC_DEFINE(HAVE_POSIX_FALLOCATE, 1, [Define if you have a working 
> > posix_fallocate()])
> > AC_DEFUN([LFTP_POSIX_FALLOCATE_CHECK],[
> >    dnl * Old glibcs have broken posix_fallocate(). Make sure not to 
> > use it.
> >    dnl * It may also be broken in AIX.
> 
> In order to test that, the configure script compiles and runs a piece of 
> C code.
> 
> There's two problems with that.
> 
> First, the code won't compile because uClibc doesn't define 
> posix_fallocate. To solve that, we can fix the m4 macro with a #define.
> It's quite easy, though I don't know exactly how to do it properly.

Depends on the uClibc version. The official 0.9.33.2 version indeed
does not have posix_fallocate(), but we have a patch in Buildroot that
adds it. However, it is not available for uClibc-based external
toolchains, so we can't just assume posix_fallocate() is always here.

> But after that comes the second problem: the test is supposed to run 
> this piece of code. How are we supposed to run cross-compiled code on 
> the host ?
> I can imagine it's a typical problem, but I don't know how it's supposed 
> to be handled.

Yes, that's a typical problem, and of course, we cannot use configure
scripts that try to run programs compiled for the target on the build
machine.

I believe we have two solutions here:

 (1) Find the configure variable that can be passed in the configure
     environment to tell configure that posix_fallocate() is not
     available. Set it to "available" when a glibc/eglibc toolchain is
     used and "not available" when an uClibc toolchain is used.

 (2) Or, better, improve the configure test to be able to only do the
     compile test and not the execution test, and assume that if a
     posix_fallocate() program builds, then it means that it works. We
     don't use those old glibcs or AIX that have broken
     posix_fallocate().

Best regards,

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH] lftp: new package.
  2013-11-21 17:12       ` Thomas Petazzoni
@ 2013-11-21 21:54         ` Arnout Vandecappelle
  2013-11-21 22:00           ` Thomas Petazzoni
  0 siblings, 1 reply; 12+ messages in thread
From: Arnout Vandecappelle @ 2013-11-21 21:54 UTC (permalink / raw)
  To: buildroot

On 21/11/13 18:12, Thomas Petazzoni wrote:
> Dear Arnaud R?billout,
>
> On Thu, 21 Nov 2013 17:17:39 +0100, Arnaud R?billout wrote:
>
[snip]
>> But after that comes the second problem: the test is supposed to run
>> this piece of code. How are we supposed to run cross-compiled code on
>> the host ?
>> I can imagine it's a typical problem, but I don't know how it's supposed
>> to be handled.
>
> Yes, that's a typical problem, and of course, we cannot use configure
> scripts that try to run programs compiled for the target on the build
> machine.
>
> I believe we have two solutions here:
>
>   (1) Find the configure variable that can be passed in the configure
>       environment to tell configure that posix_fallocate() is not
>       available. Set it to "available" when a glibc/eglibc toolchain is
>       used and "not available" when an uClibc toolchain is used.
>
>   (2) Or, better, improve the configure test to be able to only do the
>       compile test and not the execution test, and assume that if a
>       posix_fallocate() program builds, then it means that it works. We
>       don't use those old glibcs or AIX that have broken
>       posix_fallocate().

  You can give AC_TRY_RUN a fourth argument with actions to take when 
cross-compiling. These actions are taken when compilation was successful. 
Basically, the following patch should work:

----------------------------------
Fix support for cross-compilation.

The check for posix_fallocate doesn't handle the cross-compilation case. 
Assume that it works, because cross-compilation for AIX or old glibc is 
unlikely.

Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
diff -Nrup lftp-4.4.10.orig/m4/lftp.m4 lftp-4.4.10/m4/lftp.m4
--- lftp-4.4.10.orig/m4/lftp.m4 2013-03-19 13:25:50.000000000 +0100
+++ lftp-4.4.10/m4/lftp.m4      2013-11-21 22:46:27.776820935 +0100
@@ -271,6 +271,8 @@ AC_DEFUN([LFTP_POSIX_FALLOCATE_CHECK],[
         i_cv_posix_fallocate_works=yes
       ], [
         i_cv_posix_fallocate_works=no
+     ], [
+       i_cv_posix_fallocate_works=yes
       ])
     ])
     if test x$i_cv_posix_fallocate_works = xyes; then
----------------------------------


  But of course I haven't tested it :-)

  If this patch is OK, can you also upstream it?

  Don't forget to add your own SOB BTW.

  Regards,
  Arnout




-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH] lftp: new package.
  2013-11-21 21:54         ` Arnout Vandecappelle
@ 2013-11-21 22:00           ` Thomas Petazzoni
  2013-11-21 22:19             ` Arnout Vandecappelle
  0 siblings, 1 reply; 12+ messages in thread
From: Thomas Petazzoni @ 2013-11-21 22:00 UTC (permalink / raw)
  To: buildroot

Dear Arnout Vandecappelle,

On Thu, 21 Nov 2013 22:54:24 +0100, Arnout Vandecappelle wrote:

>   You can give AC_TRY_RUN a fourth argument with actions to take when 
> cross-compiling. These actions are taken when compilation was successful. 
> Basically, the following patch should work:
> 
> ----------------------------------
> Fix support for cross-compilation.
> 
> The check for posix_fallocate doesn't handle the cross-compilation case. 
> Assume that it works, because cross-compilation for AIX or old glibc is 
> unlikely.
> 
> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
> ---
> diff -Nrup lftp-4.4.10.orig/m4/lftp.m4 lftp-4.4.10/m4/lftp.m4
> --- lftp-4.4.10.orig/m4/lftp.m4 2013-03-19 13:25:50.000000000 +0100
> +++ lftp-4.4.10/m4/lftp.m4      2013-11-21 22:46:27.776820935 +0100
> @@ -271,6 +271,8 @@ AC_DEFUN([LFTP_POSIX_FALLOCATE_CHECK],[
>          i_cv_posix_fallocate_works=yes
>        ], [
>          i_cv_posix_fallocate_works=no
> +     ], [
> +       i_cv_posix_fallocate_works=yes
>        ])
>      ])
>      if test x$i_cv_posix_fallocate_works = xyes; then
> ----------------------------------

Seeing this, I believe that passing i_cv_posix_fallocate_works=yes in
the ./configure environment is a better solution.

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH] lftp: new package.
  2013-11-21 22:00           ` Thomas Petazzoni
@ 2013-11-21 22:19             ` Arnout Vandecappelle
  2013-11-22  8:15               ` Thomas Petazzoni
  0 siblings, 1 reply; 12+ messages in thread
From: Arnout Vandecappelle @ 2013-11-21 22:19 UTC (permalink / raw)
  To: buildroot

On 21/11/13 23:00, Thomas Petazzoni wrote:
> Dear Arnout Vandecappelle,
>
> On Thu, 21 Nov 2013 22:54:24 +0100, Arnout Vandecappelle wrote:
>
>>    You can give AC_TRY_RUN a fourth argument with actions to take when
>> cross-compiling. These actions are taken when compilation was successful.
>> Basically, the following patch should work:
>>
>> ----------------------------------
>> Fix support for cross-compilation.
>>
>> The check for posix_fallocate doesn't handle the cross-compilation case.
>> Assume that it works, because cross-compilation for AIX or old glibc is
>> unlikely.
>>
>> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
>> ---
>> diff -Nrup lftp-4.4.10.orig/m4/lftp.m4 lftp-4.4.10/m4/lftp.m4
>> --- lftp-4.4.10.orig/m4/lftp.m4 2013-03-19 13:25:50.000000000 +0100
>> +++ lftp-4.4.10/m4/lftp.m4      2013-11-21 22:46:27.776820935 +0100
>> @@ -271,6 +271,8 @@ AC_DEFUN([LFTP_POSIX_FALLOCATE_CHECK],[
>>           i_cv_posix_fallocate_works=yes
>>         ], [
>>           i_cv_posix_fallocate_works=no
>> +     ], [
>> +       i_cv_posix_fallocate_works=yes
>>         ])
>>       ])
>>       if test x$i_cv_posix_fallocate_works = xyes; then
>> ----------------------------------
>
> Seeing this, I believe that passing i_cv_posix_fallocate_works=yes in
> the ./configure environment is a better solution.

  But that wouldn't detect the uClibc case when posix_fallocate isn't 
available...

  Regards,
  Arnout


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH] lftp: new package.
  2013-11-21 22:19             ` Arnout Vandecappelle
@ 2013-11-22  8:15               ` Thomas Petazzoni
  2013-11-22  9:20                 ` Arnout Vandecappelle
  0 siblings, 1 reply; 12+ messages in thread
From: Thomas Petazzoni @ 2013-11-22  8:15 UTC (permalink / raw)
  To: buildroot

Dear Arnout Vandecappelle,

On Thu, 21 Nov 2013 23:19:10 +0100, Arnout Vandecappelle wrote:

> > Seeing this, I believe that passing i_cv_posix_fallocate_works=yes in
> > the ./configure environment is a better solution.
> 
>   But that wouldn't detect the uClibc case when posix_fallocate isn't 
> available...

I thought there were two tests, with two different variables:

 * One testing if a program with posix_fallocate() can be *compiled*.
   This test we need to let it as it is.
 
 * One testing if a program with posix_fallocate() can *run*. This test
   we need to tell the configure script to just assume that
   posix_fallocate() works (but of course, making the assumption that
   a failure on the previous test will make the configure conclude that
   posix_fallocate is not available).

Best regards,

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH] lftp: new package.
  2013-11-22  8:15               ` Thomas Petazzoni
@ 2013-11-22  9:20                 ` Arnout Vandecappelle
  2013-11-25 13:06                   ` Arnaud Rébillout
  0 siblings, 1 reply; 12+ messages in thread
From: Arnout Vandecappelle @ 2013-11-22  9:20 UTC (permalink / raw)
  To: buildroot

On 22/11/13 09:15, Thomas Petazzoni wrote:
> Dear Arnout Vandecappelle,
>
> On Thu, 21 Nov 2013 23:19:10 +0100, Arnout Vandecappelle wrote:
>
>>> Seeing this, I believe that passing i_cv_posix_fallocate_works=yes in
>>> the ./configure environment is a better solution.
>>
>>    But that wouldn't detect the uClibc case when posix_fallocate isn't
>> available...
>
> I thought there were two tests, with two different variables:
>
>   * One testing if a program with posix_fallocate() can be *compiled*.
>     This test we need to let it as it is.
>
>   * One testing if a program with posix_fallocate() can *run*. This test
>     we need to tell the configure script to just assume that
>     posix_fallocate() works (but of course, making the assumption that
>     a failure on the previous test will make the configure conclude that
>     posix_fallocate is not available).

  Well, yes, there are two tests in configure, but only a single macro in 
lftp.m4. AC_TRY_RUN compiles the first argument and then tries to run it 
(if not cross-compiling). The second argument is executed if the run 
succeeds, the third argument if the compilation or the run fails, the 
fourth argument if compilation succeeds but it cannot be ran because 
you're cross-compiling.

  There are a number of other instances of AC_TRY_RUN in the lftp 
configure scripts, but the others all have the fourth argument.

  Regards,
  Arnout


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH] lftp: new package.
  2013-11-22  9:20                 ` Arnout Vandecappelle
@ 2013-11-25 13:06                   ` Arnaud Rébillout
  0 siblings, 0 replies; 12+ messages in thread
From: Arnaud Rébillout @ 2013-11-25 13:06 UTC (permalink / raw)
  To: buildroot

On 11/22/2013 10:20 AM, Arnout Vandecappelle wrote:
>
>  Well, yes, there are two tests in configure, but only a single macro 
> in lftp.m4. AC_TRY_RUN compiles the first argument and then tries to 
> run it (if not cross-compiling). The second argument is executed if 
> the run succeeds, the third argument if the compilation or the run 
> fails, the fourth argument if compilation succeeds but it cannot be 
> ran because you're cross-compiling.
>
>  There are a number of other instances of AC_TRY_RUN in the lftp 
> configure scripts, but the others all have the fourth argument.

I tried to add a 4th argument to the AC_TRY_RUN as you suggested in a 
previous mail:

> +     ], [
> +       i_cv_posix_fallocate_works=yes 

But in case of cross-compiation, it always returns yes, even if 
posix_fallocate is not defined by the libc: autotools don't even try to 
compile in case of cross-compile.
So it looks like a compile tested is needed in addition to the run test.


I just sent a second revision of the patch with the compile test added. 
I tried it on two different buildroot repo, one with posix_fallocate, 
and the other without posix_fallocate. It's working good.


Best regards,
Arnaud

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH] lftp: new package.
  2013-11-21 15:42   ` Thomas Petazzoni
  2013-11-21 16:17     ` Arnaud Rébillout
@ 2013-11-25 13:19     ` Arnaud Rébillout
  1 sibling, 0 replies; 12+ messages in thread
From: Arnaud Rébillout @ 2013-11-25 13:19 UTC (permalink / raw)
  To: buildroot

Dear Thomas,

On 11/21/2013 04:42 PM, Thomas Petazzoni wrote:
> Is the dependency on OpenSSL or GnuTLS always needed? Or is it only
> needed if you enable SFTP or some specific protocol?

It's a compile-time dependency, since lftp doesn't permit to select what 
component should be built.

About the run-time, I'm not sure, but I checked a little bit the lftp 
modules.
There are two libraries, liblftp-network.so and liblftp-pty.so, that are 
needed for lftp. Both these libraries seems to need a crypto library.

readelf -d liblftp-network.so | grep Shared
  0x00000001 (NEEDED)                     Shared library: [libssl.so.1.0.0]
  0x00000001 (NEEDED)                     Shared library: 
[libcrypto.so.1.0.0]
  0x00000001 (NEEDED)                     Shared library: [libutil.so.0]
  0x00000001 (NEEDED)                     Shared library: [libncurses.so.5]
  0x00000001 (NEEDED)                     Shared library: [libdl.so.0]
  0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]
  0x00000001 (NEEDED)                     Shared library: [libm.so.0]
  0x00000001 (NEEDED)                     Shared library: [libc.so.0]
  0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
/
/From my point of view, it means that we can't get rid of OpenSSL or GnuTLS.


Best regards,
Arnaud

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20131125/e9b7e2eb/attachment.html>

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2013-11-25 13:19 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-21 15:16 [Buildroot] LFTP: a sophisticated ftp/sftp/http/fish client with few dependencies Arnaud Rébillout
2013-11-21 15:16 ` [Buildroot] [PATCH] lftp: new package Arnaud Rébillout
2013-11-21 15:42   ` Thomas Petazzoni
2013-11-21 16:17     ` Arnaud Rébillout
2013-11-21 17:12       ` Thomas Petazzoni
2013-11-21 21:54         ` Arnout Vandecappelle
2013-11-21 22:00           ` Thomas Petazzoni
2013-11-21 22:19             ` Arnout Vandecappelle
2013-11-22  8:15               ` Thomas Petazzoni
2013-11-22  9:20                 ` Arnout Vandecappelle
2013-11-25 13:06                   ` Arnaud Rébillout
2013-11-25 13:19     ` Arnaud Rébillout

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox