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
next prev parent 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox