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 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.