All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Arnaud Rébillout" <rebillout@syscom.ch>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH] lftp: new package.
Date: Mon, 02 Dec 2013 10:36:33 +0100	[thread overview]
Message-ID: <529C54A1.3050805@syscom.ch> (raw)
In-Reply-To: <52939017.20203@mind.be>

Hello Arnout,

On 11/25/2013 06:59 PM, Arnout Vandecappelle wrote:
> On 25/11/13 13:55, 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>
>> ---
>>   package/Config.in                                  |  1 +
>>   ...osix_fallocate-m4-check-for-cross-compile.patch | 32 +++++++++++
>>   ...02-Check-whether-posix_fallocate-compiles.patch | 55 
>> ++++++++++++++++++
>>   package/lftp/Config.in                             | 65 
>> ++++++++++++++++++++++
>>   package/lftp/lftp.mk                               | 54 
>> ++++++++++++++++++
>>   5 files changed, 207 insertions(+)
>>   create mode 100644 
>> package/lftp/0001-Fix-posix_fallocate-m4-check-for-cross-compile.patch
>>   create mode 100644 
>> package/lftp/0002-Check-whether-posix_fallocate-compiles.patch
>
>  Since these two patches actually fix the same problem, it's better to 
> squash them into a single patch.
OK.

>>   create mode 100644 package/lftp/Config.in
>>   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/0001-Fix-posix_fallocate-m4-check-for-cross-compile.patch 
>> b/package/lftp/0001-Fix-posix_fallocate-m4-check-for-cross-compile.patch
>> new file mode 100644
>> index 0000000..3c7209f
>> --- /dev/null
>> +++ 
>> b/package/lftp/0001-Fix-posix_fallocate-m4-check-for-cross-compile.patch
>> @@ -0,0 +1,32 @@
>> +From 8a49b00a4f746f0bdc1b2490a260f98e872d0e9c Mon Sep 17 00:00:00 2001
>> +From: =?UTF-8?q?Arnaud=20R=C3=A9billout?= <rebillout@syscom.ch>
>> +Date: Mon, 25 Nov 2013 11:03:59 +0100
>> +Subject: [PATCH 1/2] Fix posix_fallocate m4 check for cross-compile.
>> +MIME-Version: 1.0
>> +Content-Type: text/plain; charset=UTF-8
>> +Content-Transfer-Encoding: 8bit
>> +
>> +If we're cross-compiling, it's very unlikely that we use old glibc or
>> +AIX. So we assume that posix_fallocate works.
>> +
>> +Signed-off-by: Arnaud R?billout <rebillout@syscom.ch>
>> +---
>> + m4/lftp.m4 | 2 ++
>> + 1 file changed, 2 insertions(+)
>> +
>> +diff --git a/m4/lftp.m4 b/m4/lftp.m4
>> +index 6d7ad9c..c8efb28 100644
>> +--- a/m4/lftp.m4
>> ++++ b/m4/lftp.m4
>> +@@ -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
>> +--
>> +1.8.4.4
>> +
>> diff --git 
>> a/package/lftp/0002-Check-whether-posix_fallocate-compiles.patch 
>> b/package/lftp/0002-Check-whether-posix_fallocate-compiles.patch
>> new file mode 100644
>> index 0000000..b137a52
>> --- /dev/null
>> +++ b/package/lftp/0002-Check-whether-posix_fallocate-compiles.patch
>> @@ -0,0 +1,55 @@
>> +From 99674dbf332427b6e2778643af026133cc2edac6 Mon Sep 17 00:00:00 2001
>> +From: =?UTF-8?q?Arnaud=20R=C3=A9billout?= <rebillout@syscom.ch>
>> +Date: Mon, 25 Nov 2013 13:22:24 +0100
>> +Subject: [PATCH 2/2] Check whether posix_fallocate compiles.
>> +MIME-Version: 1.0
>> +Content-Type: text/plain; charset=UTF-8
>> +Content-Transfer-Encoding: 8bit
>> +
>> +uClibc doesn't provide posix_fallocate as of 0.9.33.2, but some patches
>> +exist to add this function.
>> +
>> +Therefore, the only way to know if posix_fallocate is present is to 
>> do a
>> +compile test.
>> +
>> +Signed-off-by: Arnaud R?billout <rebillout@syscom.ch>
>> +---
>> + m4/lftp.m4 | 15 +++++++++++++++
>> + 1 file changed, 15 insertions(+)
>> +
>> +diff --git a/m4/lftp.m4 b/m4/lftp.m4
>> +index c8efb28..d489bec 100644
>> +--- a/m4/lftp.m4
>> ++++ b/m4/lftp.m4
>> +@@ -244,6 +244,20 @@ AC_DEFUN([LFTP_ENVIRON_CHECK],[
>> +
>> + dnl Taken from dovecot
>> + AC_DEFUN([LFTP_POSIX_FALLOCATE_CHECK],[
>> ++   dnl * Ensure posix_fallocate is provided by the C library.
>> ++   AC_CACHE_CHECK([whether posix_fallocate() 
>> compiles],[i_cv_posix_fallocate_compiles],[
>> ++     AC_LINK_IFELSE([
>> ++       #include <fcntl.h>
>> ++       int main() {
>> ++         posix_fallocate(0, 0, 0);
>> ++       }
>> ++     ], [
>> ++       i_cv_posix_fallocate_compiles=yes
>> ++     ], [
>> ++       i_cv_posix_fallocate_compiles=no
>> ++     ])
>> ++   ])
>
>  I think it would be simpler to work the other way round: to the 
> AC_LINK_IFELSE in the cross-compiling branch of AC_TRY_RUN. Then you 
> don't need the additional variable, you can just write to 
> posix_fallocate_works.
>
>  Can you also send the patch upstream so they can comment on it?
OK, I've done that but I didn't receive a reply yet.


>
>> ++   if test x$i_cv_posix_fallocate_compiles = xyes; then
>> +    dnl * Old glibcs have broken posix_fallocate(). Make sure not to 
>> use it.
>> +    dnl * It may also be broken in AIX.
>> +    AC_CACHE_CHECK([whether posix_fallocate() 
>> works],[i_cv_posix_fallocate_works],[
>> +@@ -278,6 +292,7 @@ AC_DEFUN([LFTP_POSIX_FALLOCATE_CHECK],[
>> +    if test x$i_cv_posix_fallocate_works = xyes; then
>> +      AC_DEFINE(HAVE_POSIX_FALLOCATE, 1, [Define if you have a 
>> working posix_fallocate()])
>> +    fi
>> ++   fi
>> + ])
>> +
>> + AC_DEFUN([LFTP_POSIX_FADVISE_CHECK],[
>> +--
>> +1.8.4.4
>> +
>> diff --git a/package/lftp/Config.in b/package/lftp/Config.in
>> new file mode 100644
>> index 0000000..df4062a
>> --- /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 torrent command
>
>  Is it needed/useful to have all these options? Do they have a big 
> impact on size?

Yep, they save a significant amount of space.

Here are the mandatory things for lftp. Alltogether, it's 1080 Kb.
$ du -h output/target/usr/bin/lftp*
44K    output/target/usr/bin/lftp
4.0K    output/target/usr/bin/lftpget
$ du -h output/target/usr/lib/liblftp-* | grep -v -e '^0' -e 'la$'
276K    output/target/usr/lib/liblftp-jobs.so.0.0.0
512K    output/target/usr/lib/liblftp-tasks.so.0.0.0
$ du -h output/target/usr/lib/lftp/4.4.10/liblftp*
232K    output/target/usr/lib/lftp/4.4.10/liblftp-network.so
12K    output/target/usr/lib/lftp/4.4.10/liblftp-pty.so

Now come the things that can be disabled:
$ du -h output/target/usr/lib/lftp/4.4.10/* | grep -v liblftp
44K    output/target/usr/lib/lftp/4.4.10/cmd-mirror.so
16K    output/target/usr/lib/lftp/4.4.10/cmd-sleep.so
164K    output/target/usr/lib/lftp/4.4.10/cmd-torrent.so
24K    output/target/usr/lib/lftp/4.4.10/proto-file.so
32K    output/target/usr/lib/lftp/4.4.10/proto-fish.so
128K    output/target/usr/lib/lftp/4.4.10/proto-ftp.so
84K    output/target/usr/lib/lftp/4.4.10/proto-http.so
76K    output/target/usr/lib/lftp/4.4.10/proto-sftp.so

For my use case, I disable cmd-torrent, and all the proto except ftp 
(and proto-file, which can't be disabled).
It saves 356Kb. To me it's not a bad score.

In the Config file I offer the choice to disable/enable everything just 
for the sake of offering every option possible, but I agree that some 
options may be useless.
For example, cmd-sleep doesn't save much space, compared to the total 
size of lftp.

Tell me what you prefer about that. Also, if you prefer to present the 
options in a sub-menu instead of the main menu, or if you think a 
default setting should be set (like enabling ftp by defaut, because the 
name lftp suggests that it deals with ftp...).

>> +
>> +comment "Protocols"
>> +
>> +config BR2_PACKAGE_LFTP_PROTO_FISH
>> +    bool "FISH protocol"
>> +    default y
>> +    help
>> +      Enable FISH 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.mk b/package/lftp/lftp.mk
>> new file mode 100644
>> index 0000000..faf9f37
>> --- /dev/null
>> +++ b/package/lftp/lftp.mk
>> @@ -0,0 +1,54 @@
>> +################################################################################ 
>>
>> +#
>> +# lftp
>> +#
>> +################################################################################ 
>>
>> +
>> +LFTP_VERSION = 4.4.10
>> +LFTP_SITE    = http://lftp.yar.ru/ftp
>> +LFTP_LICENSE = GPLv3+
>> +LFTP_LICENSE_FILES = COPYING
>> +LFTP_AUTORECONF = YES
>> +LFTP_DEPENDENCIES  = readline zlib
>
>  Is the readline dependency required?
Yes it is, lftp is an interactive client. It won't compile without.

>
>> +
>> +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
>
>  What kind of data is stored there?  If it's help text, the user may 
> want it.

Here it is:

$ du -h output/target/usr/share/lftp/*
4.0K    output/target/usr/share/lftp/convert-mozilla-cookies
4.0K    output/target/usr/share/lftp/import-ncftp
4.0K    output/target/usr/share/lftp/import-netscape
4.0K    output/target/usr/share/lftp/verify-file
4.0K    output/target/usr/share/lftp/xdg-move

Some bash and per scripts, that seem to be dedicated to specific needs. 
I don't think it's useful for anyone using buildroot.

Best regards,
Arnaud

  reply	other threads:[~2013-12-02  9:36 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-25 12:55 [Buildroot] [PATCH v2] lftp: new package Arnaud Rébillout
2013-11-25 12:55 ` [Buildroot] [PATCH] " Arnaud Rébillout
2013-11-25 17:59   ` Arnout Vandecappelle
2013-12-02  9:36     ` Arnaud Rébillout [this message]
2013-12-02 22:04       ` Arnout Vandecappelle
2013-12-03  7:59         ` Arnaud Rébillout
2013-11-25 17:54 ` [Buildroot] [PATCH v2] " Arnout Vandecappelle
  -- strict thread matches above, loose matches on Subject: below --
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=529C54A1.3050805@syscom.ch \
    --to=rebillout@syscom.ch \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.