skalibs: new package

This new package provides skalibs, a collection of free software / open
source C development files used for building all softwares from
skarnet.org.

Note that, though skalibs (and all skarnet softwares) follows the
"./configure; make; make install" convention, it does not behave like a
traditional autotools project:

 - static libraries are installed in $prefix/usr/lib/skalibs.
 - pkg-config and libtool are not used: instead a custom system called
   "sysdeps" is used and locations to libraries and headers are to be
   passed explicitly via options of the './configure' script.

The host variant is provided to allow building the host variants of the
other skarnet softwares.

Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
[Thomas: remove post install target hook, do it directly in the target
installation commands.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
Eric Le Bihan 2016-12-19 22:29:07 +01:00 committed by Thomas Petazzoni
parent 006a328ad6
commit 332360e342
6 changed files with 215 additions and 0 deletions

View File

@ -1367,6 +1367,7 @@ endif
source "package/qhull/Config.in"
source "package/qlibc/Config.in"
source "package/shapelib/Config.in"
source "package/skalibs/Config.in"
source "package/sphinxbase/Config.in"
source "package/startup-notification/Config.in"
source "package/tinycbor/Config.in"

View File

@ -0,0 +1,95 @@
From 1e6f0b094c6ce6454be572704b866d2ce0962e59 Mon Sep 17 00:00:00 2001
From: Eric Le Bihan <eric.le.bihan.dev@free.fr>
Date: Sun, 4 Dec 2016 19:10:40 +0100
Subject: [PATCH] No runtime tests for endianness
Replace build and execution of runtime test programs for determining
the endianness of the target with compile time test programs.
This improves support for cross-compilation.
Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
---
configure | 15 +++++++++++----
src/sysdeps/trybigendian.c | 16 ++++++++++++++++
src/sysdeps/trylittleendian.c | 16 ++++++++++++++++
3 files changed, 43 insertions(+), 4 deletions(-)
create mode 100644 src/sysdeps/trybigendian.c
create mode 100644 src/sysdeps/trylittleendian.c
diff --git a/configure b/configure
index 1579025..4da9c5e 100755
--- a/configure
+++ b/configure
@@ -463,13 +463,20 @@ EOF
fi
exec 3>&-
- echo "Checking system endianness..."
- $CC_AUTO $CPPFLAGS_AUTO $CFLAGS_AUTO -o tryendianness src/sysdeps/tryendianness.c
- endianness=$(./tryendianness) || fail "$0: unable to determine endianness"
+ echo "Checking system endianness..."
+ if $CC_AUTO $CPPFLAGS_AUTO $CFLAGS_AUTO -o trybigendian src/sysdeps/trybigendian.c 2>/dev/null; then
+ endianness=big
+ else
+ if $CC_AUTO $CPPFLAGS_AUTO $CFLAGS_AUTO -o trylittleendian src/sysdeps/trylittleendian.c 2>/dev/null; then
+ endianness=little
+ else
+ fail "$0: unable to determine endianness"
+ fi
+ fi
echo "endianness: $endianness" >> $sysdeps/sysdeps
echo "#define ${package_macro_name}_ENDIANNESS \"$endianness\"" >> $sysdeps/sysdeps.h
echo " ... $endianness"
- rm -f tryendianness
+ rm -f trybigendian trylittleendian
trytypesize ushort USHORT "unsigned short"
trytypesize uint UINT "unsigned int"
diff --git a/src/sysdeps/trybigendian.c b/src/sysdeps/trybigendian.c
new file mode 100644
index 0000000..d857572
--- /dev/null
+++ b/src/sysdeps/trybigendian.c
@@ -0,0 +1,16 @@
+#if defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN) || \
+ defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || \
+ defined(__BIG_ENDIAN) || \
+ defined(__ARMEB__) || \
+ defined(__THUMBEB__) || \
+ defined(__AARCH64EB__) || \
+ defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__)
+#define YEAH
+#else
+#error "not big endian"
+#endif
+
+int main(void)
+{
+ return 0;
+}
diff --git a/src/sysdeps/trylittleendian.c b/src/sysdeps/trylittleendian.c
new file mode 100644
index 0000000..eba065a
--- /dev/null
+++ b/src/sysdeps/trylittleendian.c
@@ -0,0 +1,16 @@
+#if defined(__BYTE_ORDER) && (__BYTE_ORDER == __LITTLE_ENDIAN) || \
+ defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || \
+ defined(__LITTLE_ENDIAN) || \
+ defined(__ARMEL__) || \
+ defined(__THUMBEL__) || \
+ defined(__AARCH64EL__) || \
+ defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__)
+#define YEAH
+#else
+#error "not little endian"
+#endif
+
+int main(void)
+{
+ return 0;
+}
--
2.5.5

View File

@ -0,0 +1,54 @@
From d868600a3f437750bc44a783d677a25a48100096 Mon Sep 17 00:00:00 2001
From: Eric Le Bihan <eric.le.bihan.dev@free.fr>
Date: Sun, 4 Dec 2016 19:11:25 +0100
Subject: [PATCH] No runtime tests for type sizes
Replace build and execution of runtime test programs for determining
some type sizes of the target with compile time test programs.
This improves support for cross-compilation.
Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
---
configure | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/configure b/configure
index 4da9c5e..b5926ca 100755
--- a/configure
+++ b/configure
@@ -157,10 +157,28 @@ choose () {
trytypesize () {
echo "Checking size of $3..."
- $CC_AUTO $CPPFLAGS_AUTO $CFLAGS_AUTO $LDFLAGS_AUTO -o trysizeof$1 src/sysdeps/trysizeof$1.c
- type_size=$(./trysizeof$1) || fail "$0: unable to determine size of $3"
+ r=false
+ type_size=0
+ while true; do
+ cat<<EOF>trysizeof$1.c
+#include <sys/types.h>
+
+int main(void)
+{
+ static int v = 1 / !!((sizeof($3) == $type_size));
+ return 0;
+}
+EOF
+ if $CC_AUTO $CPPFLAGS_AUTO $CFLAGS_AUTO $LDFLAGS_AUTO -o trysizeof$1 trysizeof$1.c 2>/dev/null; then
+ r=true
+ break
+ fi
+ type_size=$(expr $type_size + 1)
+ test $type_size -le 16 || break
+ done
+ test $r = true || fail "$0: unable to determine size of $3"
type_bits=$(expr 8 \* $type_size)
- rm -f trysizeof$1
+ rm -f trysizeof$1 trysizeof$1.c
echo "sizeof$1: $type_size" >> $sysdeps/sysdeps
echo "#define ${package_macro_name}_SIZEOF$2 $type_size" >> $sysdeps/sysdeps.h
echo "#define ${package_macro_name}_$2_BITS $type_bits" >> $sysdeps/sysdeps.h
--
2.5.5

View File

@ -0,0 +1,9 @@
config BR2_PACKAGE_SKALIBS
bool "skalibs"
depends on BR2_USE_MMU # fork()
help
skalibs is a package centralizing the FOSS C development
files used for building all software at skarnet.org:
it contains essentially general-purpose libraries.
http://skarnet.org/software/skalibs/

View File

@ -0,0 +1,2 @@
# Locally generated
sha256 0708172bc2ec9825f8a4f312d35f8dcd94da5f291425a598c33c873b3de77df8 skalibs-2.4.0.2.tar.gz

View File

@ -0,0 +1,54 @@
################################################################################
#
# skalibs
#
################################################################################
SKALIBS_VERSION = 2.4.0.2
SKALIBS_SITE = http://skarnet.org/software/skalibs
SKALIBS_LICENSE = ISC
SKALIBS_LICENSE_FILES = COPYING
SKALIBS_INSTALL_STAGING = YES
SKALIBS_CONF_OPTS = \
--prefix=/usr \
--with-default-path=/sbin:/usr/sbin:/bin:/usr/bin \
$(SHARED_STATIC_LIBS_OPTS)
define SKALIBS_CONFIGURE_CMDS
(cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure $(SKALIBS_CONF_OPTS))
endef
define SKALIBS_BUILD_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
endef
define SKALIBS_INSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install
rm -rf $(TARGET_DIR)/usr/lib/skalibs
endef
define SKALIBS_INSTALL_STAGING_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install
endef
HOST_SKALIBS_CONF_OPTS = \
--prefix=$(HOST_DIR)/usr \
--disable-static \
--enable-shared \
--disable-allstatic
define HOST_SKALIBS_CONFIGURE_CMDS
(cd $(@D); $(HOST_CONFIGURE_OPTS) ./configure $(HOST_SKALIBS_CONF_OPTS))
endef
define HOST_SKALIBS_BUILD_CMDS
$(HOST_MAKE_ENV) $(MAKE) -C $(@D)
endef
define HOST_SKALIBS_INSTALL_CMDS
$(HOST_MAKE_ENV) $(MAKE) -C $(@D) install
endef
$(eval $(generic-package))
$(eval $(host-generic-package))