package/libpagekite: new package

libpagekite is a C implementation of the backend of the PageKite relay
protocol. It allows external access to embedded devices without public
IP address.

There is a bundled version of libev but we prefer to use the global
libev library.

Although the configure script has a --without-openssl option, it
doesn't actually build without openssl.

Patch 0001-configure.ac-fix-handling-of-with.patch is needed because
we want to explicitly pass --with and --without options, even if they
are the default. The way the AC_ARG_WITH macros were used, --with and
--without both had the effect of enabling the option.

Patch 0002-configure.ac-use-AS_HELP_STRING-for-with-openssl.patch is
not needed for Buildroot, but it is part of the same upstream PR and
would generate a conflict for the next patch.

Patch 0003-configure.ac-use-pkg-config-for-openssl.patch is needed to
pass -lz (needed by openssl) in static compilation.

Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Reviewed-by: Romain Naour <romain.naour@smile.fr>
[Thomas:
 - As noticed by Romain Naour, fix the prompt of the package in the
   Config.in
 - Add entry to DEVELOPERS file
 - Drop the dependency on BR2_bfin, since this architecture has been
   dropped from Buildroot.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Arnout Vandecappelle (Essensium/Mind) 2018-02-16 16:21:25 +01:00 committed by Thomas Petazzoni
parent eb7489dc79
commit 5c952178b7
8 changed files with 303 additions and 0 deletions

View File

@ -196,6 +196,7 @@ F: package/dehydrated/
F: package/freescale-imx/firmware-imx/
F: package/freescale-imx/imx-lib/
F: package/gstreamer/gst-fsl-plugins/
F: package/libpagekite/
F: package/lua-bit32/
F: package/owfs/
F: package/python-bottle/

View File

@ -1558,6 +1558,7 @@ menu "Networking"
source "package/liboauth/Config.in"
source "package/liboping/Config.in"
source "package/libosip2/Config.in"
source "package/libpagekite/Config.in"
source "package/libpcap/Config.in"
source "package/libpjsip/Config.in"
source "package/librsync/Config.in"

View File

@ -0,0 +1,76 @@
From dbb7ea56148949412b18770967022455f3e5cb63 Mon Sep 17 00:00:00 2001
From: "Arnout Vandecappelle (Essensium/Mind)" <arnout@mind.be>
Date: Fri, 16 Feb 2018 11:45:21 +0100
Subject: [PATCH] configure.ac: fix handling of --with-*
The 'action-if-given' argument of AC_ARG_WITH is executed whenever the
--with- or --without- option is given. Setting e.g. with_tests=yes in
that branch causes the argument '--without-tests' to *enable* the tests
instead of disabling them.
In most cases, the third and fourth argument can simply be skipped
since they are optional. We only need them in the cases where we use a
different variable than with_foo, or where we want to default to yes
instead of defaulting to empty.
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Upstream status: pull request sent:
https://github.com/pagekite/libpagekite/pull/49
---
configure.ac | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/configure.ac b/configure.ac
index aa4eb9c..130752a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -34,18 +34,15 @@ AC_ARG_WITH(openssl,[ --with-openssl=DIR Use optional openssl libs and inclu
AC_ARG_WITH(tests,
[AS_HELP_STRING([--with-tests],
- [Compile libpagekite unit tests])],
- [with_tests=yes], [])
+ [Compile libpagekite unit tests])])
AC_ARG_WITH(debug-traces,
[AS_HELP_STRING([--with-debug-traces],
- [Compile libpagekite debug function traces])],
- [with_debug_traces=yes], [])
+ [Compile libpagekite debug function traces])])
AC_ARG_WITH(debug-canaries,
[AS_HELP_STRING([--with-debug-canaries],
- [Compile libpagekite debug memory canaries])],
- [with_debug_canaries=yes], [])
+ [Compile libpagekite debug memory canaries])])
AC_ARG_WITH(lua,
[AS_HELP_STRING([--without-lua],
@@ -55,7 +52,7 @@ AC_ARG_WITH(lua,
AC_ARG_WITH(os-libev,
[AS_HELP_STRING([--without-os-libev],
[Use embedded libev, not the OS-provided library])],
- [use_libev=no], [])
+ [use_libev="$withval"], [])
AC_ARG_WITH(ipv6,
[AS_HELP_STRING([--without-ipv6],
@@ -70,12 +67,12 @@ AC_ARG_WITH(java,
AC_ARG_WITH(agpl-relay,
[AS_HELP_STRING([--with-agpl-relay],
[Compile libpagekite relay support (AGPLv3 code)])],
- [with_relay=yes], [with_relay=no])
+ [with_relay="$withval"], [with_relay=no])
AC_ARG_WITH(ds-logfmt,
[AS_HELP_STRING([--with-ds-logfmt],
[Compile libpagekite with DigitalSTROM log format.])],
- [with_ds_logfmt=yes], [with_ds_logfmt=no])
+ [with_ds_logfmt="$withval"], [with_ds_logfmt=no])
# Checks for programs.
--
2.15.1

View File

@ -0,0 +1,28 @@
From cb20efae0e2ca86dd48c603b61d9c20225ebcd3d Mon Sep 17 00:00:00 2001
From: "Arnout Vandecappelle (Essensium/Mind)" <arnout@mind.be>
Date: Fri, 16 Feb 2018 12:06:28 +0100
Subject: [PATCH] configure.ac: use AS_HELP_STRING for --with-openssl
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
configure.ac | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 130752a..4874c0b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,7 +17,9 @@ use_openssl="yes"
use_libev="yes"
specialssldir=""
-AC_ARG_WITH(openssl,[ --with-openssl=DIR Use optional openssl libs and includes from [DIR]/lib/ and [DIR]/include/openssl/],
+AC_ARG_WITH(openssl,
+ [AS_HELP_STRING([--with-openssl=DIR],
+ [Use optional openssl libs and includes from [DIR]/lib/ and [DIR]/include/openssl/])],
[ case "$with_openssl" in
yes)
;;
--
2.15.1

View File

@ -0,0 +1,137 @@
From 6a8b5ee14acee6c258bbaeb8b148ee0dd0d62d3d Mon Sep 17 00:00:00 2001
From: "Arnout Vandecappelle (Essensium/Mind)" <arnout@mind.be>
Date: Fri, 16 Feb 2018 15:36:59 +0100
Subject: [PATCH] configure.ac: use pkg-config for openssl
It is better to use pkg-config to detect openssl if that is possible.
pkg-config will add e.g. -lz and -ldl when needed. If pkg-config
fails, fall back to the old approach of detecting headers and libs.
Some of the additional openssl support (e.g. adding -ldl) is moved
inside the non-pkg-config path.
Since AC_CHECK_LIBS adds the library found to LIBS, do the same in
the pkg-config case. Normally the Makefile.am should instead use
OPENSSL_LIBS where needed, but this is not done consistently.
When --with-openssl=DIR is given, still perform the test (both with
pkg-config and by checking headers and libs). I.e., remove
$specialssldir.
While we're at it, simplify the headers checks by merging them into a
single AC_CHECK_HEADERS.
Note that it is (still) not an error when openssl is not found,
although the build will then fail.
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
configure.ac | 67 ++++++++++++++++++++++--------------------------------------
1 file changed, 24 insertions(+), 43 deletions(-)
diff --git a/configure.ac b/configure.ac
index 4874c0b..ccab9f4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,7 +16,6 @@ AC_CANONICAL_HOST
use_openssl="yes"
use_libev="yes"
-specialssldir=""
AC_ARG_WITH(openssl,
[AS_HELP_STRING([--with-openssl=DIR],
[Use optional openssl libs and includes from [DIR]/lib/ and [DIR]/include/openssl/])],
@@ -27,7 +26,6 @@ AC_ARG_WITH(openssl,
use_openssl="no"
;;
*)
- specialssldir="$with_openssl"
LDFLAGS="$LDFLAGS -L$with_openssl/lib"
CPPFLAGS="-I$with_openssl/include $CPPFLAGS"
;;
@@ -139,59 +137,42 @@ AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
AC_FUNC_REALLOC
AC_CHECK_FUNCS([clock_gettime dup2 gethostbyname gettimeofday inet_ntoa malloc memmove memset select socket strcasecmp strchr strdup strerror strncasecmp strrchr uname sched_yield pthread_yield pthread_yield_np])
-# OpenSSL requires dlopen on some platforms
-AC_SEARCH_LIBS(dlopen, dl)
-
# If they didn't specify it, we try to find it
-if test "$use_openssl" = "yes" -a -z "$specialssldir" ; then
- AC_CHECK_HEADER(openssl/ssl.h,,
+if test "$use_openssl" = "yes" ; then
+ # First try pkg-config; fall back to headers/libs check
+ PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.0.0],
+ [LIBS="$OPENSSL_LIBS $LIBS"],
+ [AC_CHECK_HEADERS([openssl/ssl.h openssl/err.h openssl/rand.h],,
[ use_openssl="no"
- AC_MSG_WARN([Failed to find openssl/ssl.h so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument]) ])
-
- if test "$use_openssl" = "yes"; then
- AC_CHECK_HEADER(openssl/err.h,,
- [ use_openssl="no"
- AC_MSG_WARN([Failed to find openssl/err.h so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument]) ])
- fi
-
- if test "$use_openssl" = "yes"; then
- AC_CHECK_HEADER(openssl/rand.h,,
- [ use_openssl="no"
- AC_MSG_WARN([Failed to find openssl/rand.h so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument]) ])
- fi
-
- if test "$use_openssl" = "yes"; then
- AC_CHECK_LIB(crypto, BIO_int_ctrl,
- [],
- [ use_openssl="no"
- AC_MSG_WARN([Failed to find libcrypto so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument]) ])
- fi
-
- if test "$use_openssl" = "yes"; then
- AC_CHECK_LIB(ssl, SSL_new,
- [],
- [ use_openssl="no"
- AC_MSG_WARN([Failed to find libssl so OpenSSL will not be used.
+ AC_MSG_WARN([Failed to find openssl headers so OpenSSL will not be used.
If it is installed you can try the --with-openssl=DIR argument]) ])
- fi
+ if test "$use_openssl" = "yes"; then
+ AC_CHECK_LIB(crypto, BIO_int_ctrl, [],
+ [ use_openssl="no"
+ AC_MSG_WARN([Failed to find libcrypto so OpenSSL will not be used.
+If it is installed you can try the --with-openssl=DIR argument]) ])
+ fi
+ if test "$use_openssl" = "yes"; then
+ AC_CHECK_LIB(ssl, SSL_new, [],
+ [ use_openssl="no"
+ AC_MSG_WARN([Failed to find libssl so OpenSSL will not be used.
+If it is installed you can try the --with-openssl=DIR argument]) ])
+ fi
+ if test "$use_openssl" = "yes"; then
+ # OpenSSL requires dlopen on some platforms
+ AC_SEARCH_LIBS(dlopen, dl)
+ OPENSSL_LIBS="-lssl -lcrypto"
+ fi])
fi
-OPENSSL_CFLAGS=""
-OPENSSL_LIBS=""
if test "$use_openssl" = "yes"; then
AC_DEFINE([HAVE_OPENSSL], [1], [Define to 1 if you have OpenSSL.])
- OPENSSL_LIBS="-lssl -lcrypto"
# Define in Makefile also.
HAVE_OPENSSL=yes
- AC_SUBST(HAVE_OPENSSL)
fi
AC_SUBST([OPENSSL_CFLAGS])
AC_SUBST([OPENSSL_LIBS])
-
+AC_SUBST([HAVE_OPENSSL])
LIBEV_CFLAGS=""
--
2.15.1

View File

@ -0,0 +1,24 @@
config BR2_PACKAGE_LIBPAGEKITE
bool "libpagekite"
depends on BR2_TOOLCHAIN_HAS_THREADS
select BR2_PACKAGE_LIBEV
select BR2_PACKAGE_OPENSSL
help
PageKite is a protocol for dynamic, tunneled reverse proxying
of arbitrary TCP byte streams. It is particularly well suited
for making a HTTP server on a device without a public IP
address visible to the wider Internet, but can also be used
for a variety of other things, including SSH access.
libpagekite is a tight, fast implementation of the PageKite
protocol in C, suitable for high-performance or embedded
applications.
In addition to the libpagekite library, this package installs
the pagekitec, sshkite and httpkite tools.
https://pagekite.net
https://github.com/pagekite/libpagekite
comment "libpagekite needs a toolchain with threads"
depends on !BR2_TOOLCHAIN_HAS_THREADS

View File

@ -0,0 +1,7 @@
# Locally calculated
sha256 df95bfe95c04b6908e835e13444c1c1883765926f1265e0d2223c42d3c59a4c2 libpagekite-v0.91.171102.tar.gz
# License files, locally calculated
sha256 ba443b9c9d4273d06aae3e147e9ad1ec199cc9c23455f486a039536d47f57eed doc/COPYING.md
sha256 4a271d0bb6bb6e0bac880efddb46da73e6df3dcf0d9ca08a945a232f8ab882ef doc/LICENSE-2.0.txt
sha256 8e0f770cabe772d67d36469f6bf413afd2dcfa6ac37acfc65f770cf3a134106d doc/AGPLv3.txt

View File

@ -0,0 +1,29 @@
################################################################################
#
# libpagekite
#
################################################################################
LIBPAGEKITE_VERSION = v0.91.171102
LIBPAGEKITE_SITE = $(call github,pagekite,libpagekite,$(LIBPAGEKITE_VERSION))
# pkrelay is AGPL-3.0+ but is not built
LIBPAGEKITE_LICENSE = Apache-2.0 or AGPL-3.0+
LIBPAGEKITE_LICENSE_FILES = doc/COPYING.md doc/LICENSE-2.0.txt doc/AGPLv3.txt
LIBPAGEKITE_DEPENDENCIES = host-pkgconf libev openssl
LIBPAGEKITE_INSTALL_STAGING = YES
# Sources from git, no configure included
# 0001-configure.ac-fix-handling-of-with-os-libev.patch touches configure.ac
LIBPAGEKITE_AUTORECONF = YES
LIBPAGEKITE_CONF_OPTS = \
--with-openssl \
--without-tests \
--with-os-libev \
--without-java \
--without-agpl-relay \
--without-ds-logfmt
$(eval $(autotools-package))