From 5242f329bee8bdd62fd8846a0ac4f09765f038fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sun, 29 Jul 2018 15:34:13 +0200 Subject: [PATCH 01/28] Added Scheme level binding for mdb_del. --- modules/lmdb/lmdb.scm | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/modules/lmdb/lmdb.scm b/modules/lmdb/lmdb.scm index 789c31f0..c7f50bfe 100644 --- a/modules/lmdb/lmdb.scm +++ b/modules/lmdb/lmdb.scm @@ -183,6 +183,11 @@ c-declare-end (define lmdb:index-first (c-lambda ((pointer void)) int "_mdb_index_first")) (define lmdb:index-next (c-lambda ((pointer void)) int "_mdb_index_next")) +(define (lmdb:delete! m u8key) + ((c-lambda ((pointer void) scheme-object int) int + "___result=_mdb_del(___arg1, ___CAST(void*,___BODY_AS(___arg2,___tSUBTYPED)), ___arg3);") + m u8key (u8vector-length u8key))) + ;; main interface (define (lmdb-delete fname) @@ -219,6 +224,13 @@ c-declare-end (u8val (if vlen (make-u8vector vlen) #f))) (if u8val (begin (lmdb:value m u8val) (decode u8val)) #f))) +(define (lmdb-delete! mm key) + (lmdb:log 2 "lmdb-delete!" mm " " key) + (let* ((m (car mm)) + (encode (cadr mm)) + (u8key (encode key))) + (lmdb:delete! m u8key))) + (define (lmdb-close mm) (lmdb:log 2 "lmdb-close " mm) (let ((ctx (cadddr mm))) From dde5b324bf8ea28900b76941b0c2b90980e5aa53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Wed, 15 May 2019 16:17:45 +0200 Subject: [PATCH 02/28] Update gambit to version 4.9.2 --- languages/scm.c | 4 ++-- libraries/libgambit/make.sh | 7 +++++-- modules/config/LIBRARIES | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/languages/scm.c b/languages/scm.c index ff0805f9..d35a975c 100644 --- a/languages/scm.c +++ b/languages/scm.c @@ -8,9 +8,9 @@ #define DMSG(fmt...) #endif -#define ___VERSION 407009 +#define ___VERSION 409002 #include -#define LINKER ____20_@SCM_LINKER@ +#define LINKER ___LNK_@SCM_LINKER@ ___BEGIN_C_LINKAGE extern ___mod_or_lnk LINKER (___global_state_struct*); ___END_C_LINKAGE diff --git a/libraries/libgambit/make.sh b/libraries/libgambit/make.sh index 60706396..21b78c02 100755 --- a/libraries/libgambit/make.sh +++ b/libraries/libgambit/make.sh @@ -1,5 +1,8 @@ -PKGURL=https://github.com/gambit/gambit/archive/v4.8.5.tar.gz -PKGHASH=08d129513d04970f30302f28cac17c4e21a25a6b +# DON'T TRY 4.9.3 gambit issue #384 define-syntax is broken +# PKGURL=https://www.iro.umontreal.ca/~gambit/download/gambit/v4.9/source/gambit-v4_9_3.tgz +# PKGHASH=a3f836f732f367601d0df8bedb8e1324a14c413b +PKGURL=https://www.iro.umontreal.ca/~gambit/download/gambit/v4.9/source/gambit-v4_9_2.tgz +PKGHASH=70c2e66cdbaf544afdcfa6d396c37f72ec67e934 package_download $PKGURL $PKGHASH diff --git a/modules/config/LIBRARIES b/modules/config/LIBRARIES index 112767d2..ba1da9f2 100644 --- a/modules/config/LIBRARIES +++ b/modules/config/LIBRARIES @@ -1 +1 @@ -libgambc liblambdanative +libgambit liblambdanative From 28170f6396f034983fdae15e8b4885200a9d3e64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sun, 19 May 2019 17:12:20 +0200 Subject: [PATCH 03/28] update experimental libgamit --- libraries/libgambit/make.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libraries/libgambit/make.sh b/libraries/libgambit/make.sh index 60706396..48668af5 100755 --- a/libraries/libgambit/make.sh +++ b/libraries/libgambit/make.sh @@ -1,3 +1,9 @@ +# DON'T TRY 4.9.3 gambit issue #384 define-syntax is broken +# see https://github.com/gambit/gambit/issues/384 +# PKGURL=https://www.iro.umontreal.ca/~gambit/download/gambit/v4.9/source/gambit-v4_9_3.tgz +# PKGHASH=a3f836f732f367601d0df8bedb8e1324a14c413b +PKGURL=https://www.iro.umontreal.ca/~gambit/download/gambit/v4.9/source/gambit-v4_9_2.tgz +PKGHASH=70c2e66cdbaf544afdcfa6d396c37f72ec67e934 PKGURL=https://github.com/gambit/gambit/archive/v4.8.5.tar.gz PKGHASH=08d129513d04970f30302f28cac17c4e21a25a6b From f802f9fec981756bd8231edb34c0d77a7d9d34b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Tue, 21 May 2019 14:32:27 +0200 Subject: [PATCH 04/28] Do not treat syntax-case module special anymore. This should be dealt with in a different way. Simply recompiling each time wasts too much developer time. A better way needs to be figured out. --- languages/scm.sh | 19 +------------------ modules/syntax-case/syntax-case.scm | 2 +- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/languages/scm.sh b/languages/scm.sh index 20350f5a..435cdb39 100644 --- a/languages/scm.sh +++ b/languages/scm.sh @@ -30,11 +30,7 @@ compile_payload_scm() scm_coresrcs= scm_auxsrcs= for m in $modules; do - if [ $m = "syntax-case" ]; then - scm_modsrc="$SYS_HOSTPREFIX/lib/syntax-case.scm" - else - scm_modsrc=`locatefile modules/$m/$m.scm silent` - fi + scm_modsrc=`locatefile modules/$m/$m.scm silent` if [ `string_contains "$scm_coremodules" " $m "` = yes ]; then scm_coresrcs="$scm_coresrcs $scm_modsrc" else @@ -65,19 +61,6 @@ compile_payload_scm() payload_cdefs="$payload_cdefs -DSTANDALONE" fi #-------- - # syntax-case special-case - if [ `string_contains "$modules" "syntax-case"` = yes ]; then - if [ ! -f ${SYS_HOSTPREFIX}/lib/gambcext.tmp ]; then - echo " => compiling syntax-case dynamic library.." - veval "$SYS_GSC -dynamic -o ${SYS_HOSTPREFIX}/lib/gambcext.o1 ${SYS_HOSTPREFIX}/lib/syntax-case.scm" - mv ${SYS_HOSTPREFIX}/lib/gambcext.o1 ${SYS_HOSTPREFIX}/lib/gambcext.tmp - fi - assertfile ${SYS_HOSTPREFIX}/lib/gambcext.tmp - cp ${SYS_HOSTPREFIX}/lib/gambcext.tmp ${SYS_HOSTPREFIX}/lib/gambcext.o1 - else - rmifexists ${SYS_HOSTPREFIX}/lib/gambcext.o1 - fi - #-------- # compile scheme source files mkdir -p "$SYS_PREFIX/build" scm_csrcs= diff --git a/modules/syntax-case/syntax-case.scm b/modules/syntax-case/syntax-case.scm index 74b09a45..1ac52b61 100644 --- a/modules/syntax-case/syntax-case.scm +++ b/modules/syntax-case/syntax-case.scm @@ -1,2 +1,2 @@ ;; This is just a dummy - the real file is included from $SYS_HOSTPREFIX/lib/syntax-case.scm if needed. -#t +(include "~~/lib/syntax-case.scm") From cc258f0c29f4f13c3513ed78c686533d3c8c0238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Tue, 4 Jun 2019 14:33:24 +0200 Subject: [PATCH 05/28] Include unistd.h to silence warning wrt readlink on Linux. --- libraries/liblambdanative/system.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/liblambdanative/system.c b/libraries/liblambdanative/system.c index 4a8f77b2..db646096 100644 --- a/libraries/liblambdanative/system.c +++ b/libraries/liblambdanative/system.c @@ -46,6 +46,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #endif +#if defined(LINUX) +#include +#endif + #ifdef WIN32 #include #endif From b63b2a52908e11407f2d5b86d7da040013a2d419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sat, 13 Jul 2019 13:44:25 +0200 Subject: [PATCH 06/28] Add support for libmagic. Not sure that this is the best implementation to use. I just needed any. TODO: Figure out how to rename the file upon package_download. The basename "5.18.tar.gz" appears meaningless and may conflict. --- libraries/libmagic/LIB_DEPENDS | 1 + libraries/libmagic/make.sh | 76 ++++++++++++++++++++++++++++ libraries/libpcre/make.sh | 31 ++++++++++++ modules/magic/LIBRARIES | 1 + modules/magic/magic.scm | 91 ++++++++++++++++++++++++++++++++++ 5 files changed, 200 insertions(+) create mode 100644 libraries/libmagic/LIB_DEPENDS create mode 100644 libraries/libmagic/make.sh create mode 100644 libraries/libpcre/make.sh create mode 100644 modules/magic/LIBRARIES create mode 100644 modules/magic/magic.scm diff --git a/libraries/libmagic/LIB_DEPENDS b/libraries/libmagic/LIB_DEPENDS new file mode 100644 index 00000000..ac5eec4a --- /dev/null +++ b/libraries/libmagic/LIB_DEPENDS @@ -0,0 +1 @@ +libpcre diff --git a/libraries/libmagic/make.sh b/libraries/libmagic/make.sh new file mode 100644 index 00000000..eb741fdc --- /dev/null +++ b/libraries/libmagic/make.sh @@ -0,0 +1,76 @@ +PKGURL=https://github.com/threatstack/libmagic/archive/5.18.tar.gz +PKGHASH=ce734a1cc24bddbfd8b21f4ffdfe721ab74eeed9 + +package_download $PKGURL $PKGHASH +package_patch + +EXTRACONF= + +if [ "$SYS_PLATFORM" != "$SYS_HOSTPLATFORM" ]; then + EXTRACONF="$EXTRACONF --host=$SYS_ARCH" +fi + +# pretend libgnurx exists by masking libpcre + +test -L $SYS_PREFIX/include/regex.h || ln -s pcreposix.h $SYS_PREFIX/include/regex.h + +# Mabye instead of fooling the package, it should be patched +rmifexists $SYS_PREFIX/lib/libgnurx.a +rmifexists $SYS_PREFIX/lib/libgnurx +mkdir $SYS_PREFIX/lib/libgnurx +( cd $SYS_PREFIX/lib/libgnurx + mkdir a + cd a + $SYS_AR -x ../../libpcre.a + cd .. + mkdir b + cd b + $SYS_AR -x ../../libpcreposix.a + cd .. + $SYS_AR rc ../libgnurx.a a/*.o b/*.o +) + +rm -r $SYS_PREFIX/lib/libgnurx + +if [ `file --version|head -1` != file-5.18 ]; then + if [ ! -f $SYS_HOSTPREFIX/bin/file ]; then + ./configure --enable-static --disable-shared 'CFLAGS=-fPIC -O3 -DPCRE_STATIC' + package_make + cp src/file $SYS_HOSTPREFIX/bin || exit 1 + package_cleanup + package_download $PKGURL $PKGHASH + package_patch + fi + FILE_COMPILE=$SYS_HOSTPREFIX/bin/file +fi + +# configure + +if [ "$SYS_PLATFORM" != "$SYS_HOSTPLATFORM" -a "X$FILE_COMPILE" != "X" ]; then + echo patching magic/Makefile.in to use $FILE_COMPILE + sed -i -es%'@IS_CROSS_COMPILE_TRUE@FILE_COMPILE = file${EXEEXT}'%"@IS_CROSS_COMPILE_TRUE@FILE_COMPILE = ${FILE_COMPILE}"% magic/Makefile.in +fi + +package_configure --enable-static --disable-shared $EXTRACONF "'CFLAGS=-fPIC -O3 -DPCRE_STATIC'" + + +# build + +package_make + +# install + +cp src/.libs/libmagic.a $SYS_PREFIX/lib +cp src/magic.h $SYS_PREFIX/include +test -f src/file.exe && cp src/file.exe $SYS_PREFIX/bin +test -d $SYS_PREFIX/etc || mkdir $SYS_PREFIX/etc +cp magic/magic.mgc $SYS_PREFIX/etc + +# Cleanup the fooling +rm -f $SYS_PREFIX/lib/libgnurx.a $SYS_PREFIX/include/regex.h + +package_cleanup + +unset EXTRACONF + +#eof diff --git a/libraries/libpcre/make.sh b/libraries/libpcre/make.sh new file mode 100644 index 00000000..db0fbbec --- /dev/null +++ b/libraries/libpcre/make.sh @@ -0,0 +1,31 @@ +PKGURL=https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz +PKGHASH=8f36ed69d3e938972fc511c19bfaa0ff27ff1d71 + +package_download $PKGURL $PKGHASH + +package_patch + +EXTRACONF="--enable-utf --enable-jit " + +if [ "$SYS_PLATFORM" != "$SYS_HOSTPLATFORM" ]; then + EXTRACONF="$EXTRACONF --host=$SYS_ARCH" +fi + +# configure + +package_configure $EXTRACONF + +# build + +NOQUIET=yes package_make + +# install + +cp .libs/libpcre.a .libs/libpcreposix.a $SYS_PREFIX/lib || exit 1 +cp pcre.h pcreposix.h pcrecpparg.h pcre_scanner.h pcre_stringpiece.h $SYS_PREFIX/include || exit 1 + +package_cleanup + +unset EXTRACONF + +#eof diff --git a/modules/magic/LIBRARIES b/modules/magic/LIBRARIES new file mode 100644 index 00000000..8e7ce758 --- /dev/null +++ b/modules/magic/LIBRARIES @@ -0,0 +1 @@ +libmagic diff --git a/modules/magic/magic.scm b/modules/magic/magic.scm new file mode 100644 index 00000000..0e1dbbad --- /dev/null +++ b/modules/magic/magic.scm @@ -0,0 +1,91 @@ +#| +LambdaNative - a cross-platform Scheme framework +Copyright (c) 2009-2014, University of British Columbia +Copyright (c) 2019 by Joerg F. Wittenberger +All rights reserved. + +Redistribution and use in source and binary forms, with or +without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the following +disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials +provided with the distribution. + +* Neither the name of the University of British Columbia nor +the names of its contributors may be used to endorse or +promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +|# + +;; minimal bindings to libmagic + +(c-declare #< +EOF +) + +(define-macro (define-c-constant name type value) + `(define ,name ((c-lambda () ,type ,(string-append "___result = " value ";"))))) + +(define-c-constant MAGIC_NONE int "MAGIC_NONE") +(define-c-constant MAGIC_DEBUG int "MAGIC_DEBUG") +(define-c-constant MAGIC_SYMLINK int "MAGIC_SYMLINK") +(define-c-constant MAGIC_COMPRESS int "MAGIC_COMPRESS") +(define-c-constant MAGIC_DEVICES int "MAGIC_DEVICES") +(define-c-constant MAGIC_MIME int "MAGIC_MIME") +(define-c-constant MAGIC_CONTINUE int "MAGIC_CONTINUE") +(define-c-constant MAGIC_CHECK int "MAGIC_CHECK") +(define-c-constant MAGIC_PRESERVE_ATIME int "MAGIC_PRESERVE_ATIME") +(define-c-constant MAGIC_RAW int "MAGIC_RAW") +(define-c-constant MAGIC_ERROR int "MAGIC_ERROR") + +(define magic-open + (c-lambda (int) (pointer void) "magic_open")) + +(define magic-load + (c-lambda ((pointer void) char-string) int "magic_load")) + +(define magic-error + (c-lambda ((pointer void)) char-string "magic_error")) + +(define magic-file + (c-lambda ((pointer void) char-string) char-string "magic_file")) + +(define (magic-buffer ptr u8data) + ((c-lambda + ((pointer void) scheme-object int) + char-string + "___result = (char*)magic_buffer(___arg1, ___BODY_AS(___arg2,___tSUBTYPED), ___arg3);") + ptr u8data (u8vector-length u8data))) + +(define magic-close + (c-lambda ((pointer void)) void "magic_close")) + +(define magic-setflags + (c-lambda ((pointer void) int) int "magic_setflags")) + +(define magic-errno + (c-lambda ((pointer void)) int "magic_errno")) + +;; eof From ea4b93b96945b1fc9669f8cb381639f5d048aaed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sat, 13 Jul 2019 14:23:29 +0200 Subject: [PATCH 07/28] Add support for libmagic. Not sure that this is the best implementation to use. I just needed any. TODO: Figure out how to rename the file upon package_download. The basename "5.18.tar.gz" appears meaningless and may conflict. --- libraries/libmagic/LIB_DEPENDS | 1 + libraries/libmagic/make.sh | 76 ++++++++++++++++++++++++++++ libraries/libpcre/make.sh | 31 ++++++++++++ modules/magic/LIBRARIES | 1 + modules/magic/magic.scm | 91 ++++++++++++++++++++++++++++++++++ 5 files changed, 200 insertions(+) create mode 100644 libraries/libmagic/LIB_DEPENDS create mode 100644 libraries/libmagic/make.sh create mode 100644 libraries/libpcre/make.sh create mode 100644 modules/magic/LIBRARIES create mode 100644 modules/magic/magic.scm diff --git a/libraries/libmagic/LIB_DEPENDS b/libraries/libmagic/LIB_DEPENDS new file mode 100644 index 00000000..ac5eec4a --- /dev/null +++ b/libraries/libmagic/LIB_DEPENDS @@ -0,0 +1 @@ +libpcre diff --git a/libraries/libmagic/make.sh b/libraries/libmagic/make.sh new file mode 100644 index 00000000..eb741fdc --- /dev/null +++ b/libraries/libmagic/make.sh @@ -0,0 +1,76 @@ +PKGURL=https://github.com/threatstack/libmagic/archive/5.18.tar.gz +PKGHASH=ce734a1cc24bddbfd8b21f4ffdfe721ab74eeed9 + +package_download $PKGURL $PKGHASH +package_patch + +EXTRACONF= + +if [ "$SYS_PLATFORM" != "$SYS_HOSTPLATFORM" ]; then + EXTRACONF="$EXTRACONF --host=$SYS_ARCH" +fi + +# pretend libgnurx exists by masking libpcre + +test -L $SYS_PREFIX/include/regex.h || ln -s pcreposix.h $SYS_PREFIX/include/regex.h + +# Mabye instead of fooling the package, it should be patched +rmifexists $SYS_PREFIX/lib/libgnurx.a +rmifexists $SYS_PREFIX/lib/libgnurx +mkdir $SYS_PREFIX/lib/libgnurx +( cd $SYS_PREFIX/lib/libgnurx + mkdir a + cd a + $SYS_AR -x ../../libpcre.a + cd .. + mkdir b + cd b + $SYS_AR -x ../../libpcreposix.a + cd .. + $SYS_AR rc ../libgnurx.a a/*.o b/*.o +) + +rm -r $SYS_PREFIX/lib/libgnurx + +if [ `file --version|head -1` != file-5.18 ]; then + if [ ! -f $SYS_HOSTPREFIX/bin/file ]; then + ./configure --enable-static --disable-shared 'CFLAGS=-fPIC -O3 -DPCRE_STATIC' + package_make + cp src/file $SYS_HOSTPREFIX/bin || exit 1 + package_cleanup + package_download $PKGURL $PKGHASH + package_patch + fi + FILE_COMPILE=$SYS_HOSTPREFIX/bin/file +fi + +# configure + +if [ "$SYS_PLATFORM" != "$SYS_HOSTPLATFORM" -a "X$FILE_COMPILE" != "X" ]; then + echo patching magic/Makefile.in to use $FILE_COMPILE + sed -i -es%'@IS_CROSS_COMPILE_TRUE@FILE_COMPILE = file${EXEEXT}'%"@IS_CROSS_COMPILE_TRUE@FILE_COMPILE = ${FILE_COMPILE}"% magic/Makefile.in +fi + +package_configure --enable-static --disable-shared $EXTRACONF "'CFLAGS=-fPIC -O3 -DPCRE_STATIC'" + + +# build + +package_make + +# install + +cp src/.libs/libmagic.a $SYS_PREFIX/lib +cp src/magic.h $SYS_PREFIX/include +test -f src/file.exe && cp src/file.exe $SYS_PREFIX/bin +test -d $SYS_PREFIX/etc || mkdir $SYS_PREFIX/etc +cp magic/magic.mgc $SYS_PREFIX/etc + +# Cleanup the fooling +rm -f $SYS_PREFIX/lib/libgnurx.a $SYS_PREFIX/include/regex.h + +package_cleanup + +unset EXTRACONF + +#eof diff --git a/libraries/libpcre/make.sh b/libraries/libpcre/make.sh new file mode 100644 index 00000000..db0fbbec --- /dev/null +++ b/libraries/libpcre/make.sh @@ -0,0 +1,31 @@ +PKGURL=https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz +PKGHASH=8f36ed69d3e938972fc511c19bfaa0ff27ff1d71 + +package_download $PKGURL $PKGHASH + +package_patch + +EXTRACONF="--enable-utf --enable-jit " + +if [ "$SYS_PLATFORM" != "$SYS_HOSTPLATFORM" ]; then + EXTRACONF="$EXTRACONF --host=$SYS_ARCH" +fi + +# configure + +package_configure $EXTRACONF + +# build + +NOQUIET=yes package_make + +# install + +cp .libs/libpcre.a .libs/libpcreposix.a $SYS_PREFIX/lib || exit 1 +cp pcre.h pcreposix.h pcrecpparg.h pcre_scanner.h pcre_stringpiece.h $SYS_PREFIX/include || exit 1 + +package_cleanup + +unset EXTRACONF + +#eof diff --git a/modules/magic/LIBRARIES b/modules/magic/LIBRARIES new file mode 100644 index 00000000..8e7ce758 --- /dev/null +++ b/modules/magic/LIBRARIES @@ -0,0 +1 @@ +libmagic diff --git a/modules/magic/magic.scm b/modules/magic/magic.scm new file mode 100644 index 00000000..0e1dbbad --- /dev/null +++ b/modules/magic/magic.scm @@ -0,0 +1,91 @@ +#| +LambdaNative - a cross-platform Scheme framework +Copyright (c) 2009-2014, University of British Columbia +Copyright (c) 2019 by Joerg F. Wittenberger +All rights reserved. + +Redistribution and use in source and binary forms, with or +without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the following +disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials +provided with the distribution. + +* Neither the name of the University of British Columbia nor +the names of its contributors may be used to endorse or +promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +|# + +;; minimal bindings to libmagic + +(c-declare #< +EOF +) + +(define-macro (define-c-constant name type value) + `(define ,name ((c-lambda () ,type ,(string-append "___result = " value ";"))))) + +(define-c-constant MAGIC_NONE int "MAGIC_NONE") +(define-c-constant MAGIC_DEBUG int "MAGIC_DEBUG") +(define-c-constant MAGIC_SYMLINK int "MAGIC_SYMLINK") +(define-c-constant MAGIC_COMPRESS int "MAGIC_COMPRESS") +(define-c-constant MAGIC_DEVICES int "MAGIC_DEVICES") +(define-c-constant MAGIC_MIME int "MAGIC_MIME") +(define-c-constant MAGIC_CONTINUE int "MAGIC_CONTINUE") +(define-c-constant MAGIC_CHECK int "MAGIC_CHECK") +(define-c-constant MAGIC_PRESERVE_ATIME int "MAGIC_PRESERVE_ATIME") +(define-c-constant MAGIC_RAW int "MAGIC_RAW") +(define-c-constant MAGIC_ERROR int "MAGIC_ERROR") + +(define magic-open + (c-lambda (int) (pointer void) "magic_open")) + +(define magic-load + (c-lambda ((pointer void) char-string) int "magic_load")) + +(define magic-error + (c-lambda ((pointer void)) char-string "magic_error")) + +(define magic-file + (c-lambda ((pointer void) char-string) char-string "magic_file")) + +(define (magic-buffer ptr u8data) + ((c-lambda + ((pointer void) scheme-object int) + char-string + "___result = (char*)magic_buffer(___arg1, ___BODY_AS(___arg2,___tSUBTYPED), ___arg3);") + ptr u8data (u8vector-length u8data))) + +(define magic-close + (c-lambda ((pointer void)) void "magic_close")) + +(define magic-setflags + (c-lambda ((pointer void) int) int "magic_setflags")) + +(define magic-errno + (c-lambda ((pointer void)) int "magic_errno")) + +;; eof From 4fa3909d2bb038ba9bbca2bfb0e00aa8ac428c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sat, 13 Jul 2019 15:15:19 +0200 Subject: [PATCH 08/28] Update openssl to 1.1.c --- libraries/libcrypto/make.sh | 32 ++++++++++++++++++++++++----- libraries/libcrypto/sigatomic.patch | 12 +++++------ modules/httpsclient/httpsclient.scm | 5 ++++- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/libraries/libcrypto/make.sh b/libraries/libcrypto/make.sh index 9aeca290..fec37320 100755 --- a/libraries/libcrypto/make.sh +++ b/libraries/libcrypto/make.sh @@ -1,5 +1,5 @@ -PKGURL=https://www.openssl.org/source/openssl-1.0.2n.tar.gz -PKGHASH=0ca2957869206de193603eca6d89f532f61680b1 +PKGURL=https://www.openssl.org/source/openssl-1.1.1c.tar.gz +PKGHASH=71b830a077276cbeccc994369538617a21bee808 package_download $PKGURL $PKGHASH @@ -25,14 +25,36 @@ linux*) EXTRACONF=linux-generic32 fi ;; +android*) + EXTRACONF="android-arm -D__ANDROID_API__=$SYS_ANDROIDAPI" + XX_ANDROID_NDK_HOME=`find $SYS_PREFIX -name AndroidVersion.txt 2> /dev/null` + export ANDROID_NDK_HOME=`dirname $XX_ANDROID_NDK_HOME` + echo SYS_ANDROIDNDK $SYS_ANDROIDNDK ANDROID_NDK_HOME: $ANDROID_NDK_HOME + # export ANDROID_NDK_HOME=$ANDROIDNDK + PATH=`ls -d $SYS_PREFIX/android-ndk-*-toolchain/bin`:$PATH + # FIXME: This was better `clang` as Android is supposed to phase + # out gcc. But that would be inconsistent with the ndk in use. + EXTRACONF="$EXTRACONF CC=gcc" + echo PATH: $PATH +;; *) EXTRACONF=BSD-generic32 ;; esac -cp Configure configure # openssl ships a Configure script -NOQUIET=yes package_configure --openssldir="$SYS_PREFIX" $EXTRACONF no-shared no-threads no-zlib no-asm no-dso no-sse2 -package_make build_ssl build_crypto +case $SYS_PLATFORM in + # Openssl 1.1.x appears take great care to defeat the use of + # `package_configure` from lambdanative when cross compiling for + # Android. + android) + ./Configure --openssldir="$SYS_PREFIX" no-shared no-threads no-zlib no-asm no-dso no-sse2 $EXTRACONF # CC=$SYS_CC + ;; + *) + cp Configure configure # openssl ships a Configure script + NOQUIET=yes package_configure --openssldir="$SYS_PREFIX" no-shared no-threads no-zlib no-asm no-dso no-sse2 $EXTRACONF # CC=$SYS_CC +;; +esac +package_make build_libs cp *.a $SYS_PREFIX/lib cp -L -R include/openssl $SYS_PREFIX/include diff --git a/libraries/libcrypto/sigatomic.patch b/libraries/libcrypto/sigatomic.patch index 4f5ea75e..852185f4 100644 --- a/libraries/libcrypto/sigatomic.patch +++ b/libraries/libcrypto/sigatomic.patch @@ -1,12 +1,12 @@ ---- crypto/ui/ui_openssl.c 2011-12-05 10:56:19.000000000 -0800 -+++ crypto/ui/ui_openssl.c 2011-12-05 10:57:56.000000000 -0800 -@@ -410,7 +410,8 @@ - return 1; - } +--- crypto/ui/ui_openssl.c 2019-07-05 13:46:15.773249717 +0200 ++++ crypto/ui/ui_openssl.c 2019-07-05 13:51:13.259387480 +0200 +@@ -274,7 +274,8 @@ + return 1; + } -static volatile sig_atomic_t intr_signal; +//static volatile sig_atomic_t intr_signal; +static volatile int intr_signal; - #endif + # endif static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) diff --git a/modules/httpsclient/httpsclient.scm b/modules/httpsclient/httpsclient.scm index e41c0785..e1f0a5ca 100644 --- a/modules/httpsclient/httpsclient.scm +++ b/modules/httpsclient/httpsclient.scm @@ -118,8 +118,11 @@ static int httpsclient_open(char *host, int port, int use_keys, char *cert, char } SSL_load_error_strings(); SSL_library_init(); +#if OPENSSL_VERSION_NUMBER < 0x1010103fL ctx = SSL_CTX_new(SSLv23_client_method()); - // ctx = SSL_CTX_new(TLS_client_method()); +#else + ctx = SSL_CTX_new(TLS_client_method()); +#endif if ( ctx == NULL ) { return 0; } SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2); //disable SSLv2 SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3); From 220cf6a57d6832ca6ad1dd4c65b43552a080fb77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sat, 13 Jul 2019 20:45:33 +0200 Subject: [PATCH 09/28] Minor improvements to build process. - avoid repeated check for xetex once it is found working - tell _where_ a packages is compiled from to avoid confusion --- make.sh | 4 +++- scripts/compile.sh | 1 + scripts/package.sh | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/make.sh b/make.sh index eea2c9c7..b3c3e644 100755 --- a/make.sh +++ b/make.sh @@ -1328,6 +1328,8 @@ END rm -rf $chkdir if [ $USE_XETEX = no ]; then echo " ** Using GD to render strings" + else + touch $SYS_HOSTPREFIX/.use_xetex fi } @@ -1348,7 +1350,7 @@ make_toolcheck() asserttool grep wget zip tar sed tr cut tail head find # language asserttool autoconf make gcc patch - if [ `is_gui_app` = "yes" ]; then + if [ `is_gui_app` = "yes" -a ! -f $SYS_HOSTPREFIX/.use_xetex ]; then make_xelatexcheck fi # platform specific tools diff --git a/scripts/compile.sh b/scripts/compile.sh index 24f4d294..d9c1de52 100644 --- a/scripts/compile.sh +++ b/scripts/compile.sh @@ -6,6 +6,7 @@ compile_init() { languages= compile_init_dirs=`echo "$SYS_PATH" | tr ':' '\n'` + # vecho "searching supported languages in $compile_init_dirs" for compile_init_dir in $compile_init_dirs; do if [ -d $compile_init_dir/languages ]; then compile_init_lngs=`ls -1 $compile_init_dir/languages/*.sh` diff --git a/scripts/package.sh b/scripts/package.sh index 4fd362de..cadf43f4 100644 --- a/scripts/package.sh +++ b/scripts/package.sh @@ -208,7 +208,7 @@ package_download() package_configure() { - echo " => configuring source.." + echo " => configuring source in" `pwd` ... pkg_conf_opt=$@ pkg_ccdir=`echo "$SYS_CC" | cut -f 1 -d " "` pkg_ccdir=`dirname ${pkg_ccdir}` From 093af1224f669446adecfead27f164f75d727af1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Tue, 16 Jul 2019 10:43:58 +0200 Subject: [PATCH 10/28] exclude devcryptoeng for macosx --- libraries/libcrypto/make.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/libcrypto/make.sh b/libraries/libcrypto/make.sh index fec37320..aac908fd 100755 --- a/libraries/libcrypto/make.sh +++ b/libraries/libcrypto/make.sh @@ -37,6 +37,8 @@ android*) EXTRACONF="$EXTRACONF CC=gcc" echo PATH: $PATH ;; +macosx) + EXTRACONF="BSD-generic32 no-devcryptoeng" *) EXTRACONF=BSD-generic32 ;; From a933c5d69adc8405a3f9c42d6ae9773985592a70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Tue, 6 Aug 2019 22:01:35 +0200 Subject: [PATCH 11/28] allow libiconv cross-compile for win32 on linux using mingw32 --- libraries/libiconv/defs.h | 21 +++++++++++++++++++++ libraries/libiconv/iconv.h | 13 +++++++++++++ 2 files changed, 34 insertions(+) diff --git a/libraries/libiconv/defs.h b/libraries/libiconv/defs.h index 410f20c2..3e1dbb24 100644 --- a/libraries/libiconv/defs.h +++ b/libraries/libiconv/defs.h @@ -18,6 +18,27 @@ #define _LIBICONV_DEFS_H_ #include +#include + +#ifdef _WIN32 + typedef uint8_t u_int8_t; + typedef uint16_t u_int16_t; + typedef uint32_t u_int32_t; + // wild guesses + typedef unsigned short u_short; + typedef unsigned char u_char; + +# ifndef __BEGIN_DECLS +# ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +# else +# define __BEGIN_DECLS +# define __END_DECLS +# endif +# endif + +#endif /* * Internally we use our own UNICODE character to be independent on diff --git a/libraries/libiconv/iconv.h b/libraries/libiconv/iconv.h index ace263ae..983b6e4f 100644 --- a/libraries/libiconv/iconv.h +++ b/libraries/libiconv/iconv.h @@ -21,6 +21,19 @@ typedef void * iconv_t; +#ifdef _WIN32 +# ifndef __BEGIN_DECLS +# ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +# else +# define __BEGIN_DECLS +# define __END_DECLS +# endif +# endif + +#endif + __BEGIN_DECLS iconv_t iconv_open(const char *to, const char *from); //iconv_t iconv_open(char *to, char *from); From 69685219edf1eea588ef98a649127821dd408f4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Thu, 15 Aug 2019 20:38:12 +0200 Subject: [PATCH 12/28] Compare string in sh with '=' not '==' --- targets/android/build-binary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/android/build-binary b/targets/android/build-binary index 1d378475..93aa4b2c 100755 --- a/targets/android/build-binary +++ b/targets/android/build-binary @@ -200,7 +200,7 @@ for m in $modules; do for pubclass in $pubclasses; do pubclassfile="`basename $pubclass | sed 's/ANDROID_java_public_//'`.java" echo " $pubclassfile.." - if [ `echo $pubclass | cut -d . -f 2` == "in" ]; then + if [ "`echo $pubclass | cut -d . -f 2`" = "in" ]; then pubclassfile=`echo $pubclassfile | sed 's/.in//'` ac_output $pubclass $appdir/$pubclassfile else From 7871d118a10d969eb7edb464fa0434adcba4ab7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Thu, 15 Aug 2019 21:52:37 +0200 Subject: [PATCH 13/28] Avoid building engines not available on wingw --- libraries/libcrypto/make.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/libcrypto/make.sh b/libraries/libcrypto/make.sh index 75068cdb..d32a13a5 100755 --- a/libraries/libcrypto/make.sh +++ b/libraries/libcrypto/make.sh @@ -9,7 +9,7 @@ rmifexists $SYS_PREFIX/include/openssl EXTRACONF= case $SYS_PLATFORM in win32*) - EXTRACONF=mingw + EXTRACONF="no-engine mingw" ;; linux486*) EXTRACONF=linux-generic32 From 554df3ce32a9f26e1c12576a46a1415b6749e0b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Thu, 15 Aug 2019 21:59:20 +0200 Subject: [PATCH 14/28] Overwrite make-thread with make-safe-thread Overwriting should IMHO not cause any harm. However doing so make it much easier to use other libraries written for gambit as it and still learn about exceptions. --- modules/ln_core/log.scm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/ln_core/log.scm b/modules/ln_core/log.scm index c080b0f5..6f7f2478 100644 --- a/modules/ln_core/log.scm +++ b/modules/ln_core/log.scm @@ -141,7 +141,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. (string-mapconcat (reverse tmp) ": "))) (define (log:exception-handler e) - (log-error (thread-name (current-thread)) ": "(exception->string e)) + (log-error (thread-name (current-thread)) ": " (exception->string e)) (log-trace (current-thread)) (log-error "HALT") (exit)) @@ -150,9 +150,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. (current-exception-handler log:exception-handler) ;; catch exceptions in threads -(define (make-safe-thread p . name) - (let ((p2 (lambda () (current-exception-handler log:exception-handler) (p)))) - (make-thread p2 (if (fx= (length name) 1) (car name) 'unnamed_thread)))) +(define make-safe-thread + (let ((make-thread make-thread)) + (lambda (p . name) + (let ((p2 (lambda () (current-exception-handler log:exception-handler) (p)))) + (make-thread p2 (if (fx= (length name) 1) (car name) 'unnamed_thread)))))) + +(set! make-thread make-safe-thread) ;; trim files in log directory (log-folder-cleanup) From 8845ccc4e608754a51eafb8a1c146beb8753d654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Thu, 15 Aug 2019 22:09:58 +0200 Subject: [PATCH 15/28] At least produce a debug log entry when quirc failes to decode. So far I've been unable to get any useful results from quirc. The silent fail however is not nice when debugging. --- modules/quirc/quirc.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/quirc/quirc.scm b/modules/quirc/quirc.scm index db980ea3..e06e6d72 100644 --- a/modules/quirc/quirc.scm +++ b/modules/quirc/quirc.scm @@ -103,7 +103,10 @@ end-of-c-declare (let loop ((i 0)(res '())) (if (= i n) res (let* ((decoderes (quirc_extract_and_decode q i)) - (u8len (if (fx= decoderes QUIRC_SUCCESS) (quirc_decoded_len) #f)) + (u8len (if (fx= decoderes QUIRC_SUCCESS) (quirc_decoded_len) + (begin + (log-debug "Quirc image nr " 1 n ": " ((c-lambda (int) char-string "quirc_strerror") decoderes)) + #f))) (u8data (if u8len (make-u8vector u8len 0) #f))) (if u8data (quirc_decoded_data u8data)) (loop (fx+ i 1) (append res (if u8data (list u8data) '())))))))) From 79398d76839e72d994eb1fcb7c1eda06553dc609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Thu, 29 Aug 2019 17:02:18 +0200 Subject: [PATCH 16/28] Handle compilation and permissions for ANDROIDAPI>22. Since Marshmallow permissions are not automatically granted as specified in the Manifest. As a consequence LN apps die when accessing the SDCard, e.g. when unpacking embedded files. This patch adds a fragile hack to enable an ifdef-alike trick to exclude code portions when targeting older APIs and uses it to request the permission at startup. Plus create the system-directory if it does not already exists. --- loaders/android/bootstrap.java.in | 12 +++++++++++- make.sh | 1 + modules/ln_core/packtool.scm | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/loaders/android/bootstrap.java.in b/loaders/android/bootstrap.java.in index 7a27b643..73963b90 100644 --- a/loaders/android/bootstrap.java.in +++ b/loaders/android/bootstrap.java.in @@ -75,6 +75,7 @@ public class @SYS_APPNAME@ extends Activity implements @ANDROID_JAVA_IMPLEMENTS@ //Variable declarations needed for modules, e.g. gps @ANDROID_JAVA_VARIABLES@ + int idle_tmScheduleRate = 250; Timer idle_tm = new Timer(); TimerTask idle_task = new TimerTask() { public void run() { @@ -109,11 +110,20 @@ public class @SYS_APPNAME@ extends Activity implements @ANDROID_JAVA_IMPLEMENTS@ mGLView = new xGLSurfaceView(this); setContentView(mGLView); mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); + + /* Included @IF_ANDROIDAPI_GT_22@ + if (getApplicationContext().checkCallingOrSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) + != android.content.pm.PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[] { android.Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1); + // startActivity(new Intent(android.provider.Settings.ACTION_MEMORY_CARD_SETTINGS).setData(Uri.parse("package:"+"@SYS_PACKAGE_DOT@"))); + } + /* end of IF_ANDROIDAPI_GT_22 */ + // Additions needed by modules, e.g. gps @ANDROID_JAVA_ONCREATE@ // start EVENT_IDLE - idle_tm.scheduleAtFixedRate(idle_task, 0, 250); + if(idle_tmScheduleRate > 0) idle_tm.scheduleAtFixedRate(idle_task, 0, idle_tmScheduleRate); nativeInstanceInit(); } diff --git a/make.sh b/make.sh index 2abcfad2..cffddf7b 100755 --- a/make.sh +++ b/make.sh @@ -1032,6 +1032,7 @@ make_setup_target() ac_subst SYS_APPVERSION ac_subst SYS_APPVERSIONCODE ac_subst SYS_ANDROIDAPI + ac_subst IF_ANDROIDAPI_GT_22 "`if [$SYS_ANDROIDAPI -lt 23]; then echo 'commented out:'; else echo 'active here:*/'; fi`" ac_subst SYS_ANDROIDSDK ac_subst SYS_ANDROIDNDK ac_subst SYS_ANDROIDARCH diff --git a/modules/ln_core/packtool.scm b/modules/ln_core/packtool.scm index 2952c3e4..8b6f8dff 100644 --- a/modules/ln_core/packtool.scm +++ b/modules/ln_core/packtool.scm @@ -56,6 +56,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;; extract an embedded file (define (packtool-unpack file cdata overwrite) + (let ((rootpath (system-directory))) + (if (not (file-exists? rootpath)) (create-directory rootpath))) (let ((path (packtool:prep file))) (if (or overwrite (not (file-exists? path))) (let ((data (u8vector-decompress cdata))) From 6a2bcdc0e161f9fecfae4554b4077f88e1921006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Thu, 29 Aug 2019 21:26:29 +0200 Subject: [PATCH 17/28] Do not break syntax highlighting by `ifdef` alike trick. --- loaders/android/bootstrap.java.in | 2 +- make.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/loaders/android/bootstrap.java.in b/loaders/android/bootstrap.java.in index 73963b90..fe55ef6e 100644 --- a/loaders/android/bootstrap.java.in +++ b/loaders/android/bootstrap.java.in @@ -111,7 +111,7 @@ public class @SYS_APPNAME@ extends Activity implements @ANDROID_JAVA_IMPLEMENTS@ setContentView(mGLView); mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); - /* Included @IF_ANDROIDAPI_GT_22@ + @IF_ANDROIDAPI_GT_22@ if (getApplicationContext().checkCallingOrSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != android.content.pm.PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[] { android.Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1); diff --git a/make.sh b/make.sh index cffddf7b..d10799ff 100755 --- a/make.sh +++ b/make.sh @@ -1032,7 +1032,7 @@ make_setup_target() ac_subst SYS_APPVERSION ac_subst SYS_APPVERSIONCODE ac_subst SYS_ANDROIDAPI - ac_subst IF_ANDROIDAPI_GT_22 "`if [$SYS_ANDROIDAPI -lt 23]; then echo 'commented out:'; else echo 'active here:*/'; fi`" + ac_subst IF_ANDROIDAPI_GT_22 "`if [ $SYS_ANDROIDAPI -lt 23 ]; then echo '/* commented out:'; else echo '/* active here: */'; fi`" ac_subst SYS_ANDROIDSDK ac_subst SYS_ANDROIDNDK ac_subst SYS_ANDROIDARCH From 8dd443244bfad6416011eb1e410818b7d21a3a51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Wed, 4 Sep 2019 23:17:13 +0200 Subject: [PATCH 18/28] Name mutex's to ease debugging. --- modules/eventloop/eventloop.scm | 2 +- modules/ln_core/log.scm | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/eventloop/eventloop.scm b/modules/eventloop/eventloop.scm index ff53b756..b99d6f88 100644 --- a/modules/eventloop/eventloop.scm +++ b/modules/eventloop/eventloop.scm @@ -148,7 +148,7 @@ end-of-c-declare (let ((ret (car event:fifo))) (set! event:fifo (cdr event:fifo)) ret) #f)) -(define eventloop:mutex (make-mutex)) +(define eventloop:mutex (make-mutex 'eventloop)) (define (eventloop:grab!) (mutex-lock! eventloop:mutex)) (define (eventloop:release!) (mutex-unlock! eventloop:mutex)) diff --git a/modules/ln_core/log.scm b/modules/ln_core/log.scm index 6f7f2478..ce746955 100644 --- a/modules/ln_core/log.scm +++ b/modules/ln_core/log.scm @@ -38,7 +38,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;; logger ;; we are logging from different threads -(define log:mutex (make-mutex)) +(define log:mutex (make-mutex 'log)) (define (log:grab!) (mutex-lock! log:mutex)) (define (log:release!) (mutex-unlock! log:mutex)) @@ -142,8 +142,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. (define (log:exception-handler e) (log-error (thread-name (current-thread)) ": " (exception->string e)) - (log-trace (current-thread)) + (when (deadlock-exception? e) + (log-error "HALT") + (exit)) + ;;(log-trace (current-thread)) ;; Seems not to work at least for deadlock-exception? (log-error "HALT") + ;; FIXME: this looks wrong (exit)) ;; catch primordial thread exceptions From e4a937232bc59f46eb9bc44e2a4fd1f57b204322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Thu, 5 Sep 2019 19:50:07 +0200 Subject: [PATCH 19/28] Err on usability wrt. clipboard content. On linux and wind32 the code does so far not know wheter or not the clipboard has any content. That's NOT changed by this patch. However it's IMHO better to provide a false positive claiming content (thus suggesting to the user to paste is even though that would fail) than falsely claim nothing available thus preventing avail content to be pasted. --- modules/clipboard/clipboard.scm | 8 +++++++- modules/ln_core/log.scm | 6 +----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/modules/clipboard/clipboard.scm b/modules/clipboard/clipboard.scm index 1abc8995..8d3ed529 100644 --- a/modules/clipboard/clipboard.scm +++ b/modules/clipboard/clipboard.scm @@ -225,7 +225,13 @@ int clipboard_hascontent(){ return macosx_clipboard_hascontent(); #endif - return 0; + /* FIXME: Actually check win32 and linux. However it's bettert to + * provide a false positive claiming content (thus suggesting to the + * user to paste is even though that would fail) than falsely claim + * nothing available thus preventing avail content to be pasted. + */ + + return 1; } end-of-c-declare diff --git a/modules/ln_core/log.scm b/modules/ln_core/log.scm index ce746955..2bf7ef98 100644 --- a/modules/ln_core/log.scm +++ b/modules/ln_core/log.scm @@ -142,12 +142,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. (define (log:exception-handler e) (log-error (thread-name (current-thread)) ": " (exception->string e)) - (when (deadlock-exception? e) - (log-error "HALT") - (exit)) - ;;(log-trace (current-thread)) ;; Seems not to work at least for deadlock-exception? + (log-trace (current-thread)) (log-error "HALT") - ;; FIXME: this looks wrong (exit)) ;; catch primordial thread exceptions From b936245adac0c1cc86e3345c3869fcc284bd0361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Fri, 6 Sep 2019 20:31:07 +0200 Subject: [PATCH 20/28] Enable use of cond-expand depending on SYS_PLATFORM. This change allows to use things like (cond-expand (android ...code applicable on android targets only...) (linux ...code applicable on linux targets only...) (else ...code applicable on all other targets...)) NB: 1. According to SRFI-0 `cond-expand` is only mandatory on top level. 2. Most Scheme implementations (i.e., all I know of), including gambit allow the use of `cond-expand` everywhere. 3. With this change all uses of `app:android?` at runtime could eventually be replaced by compile time code expansion. --- languages/scm.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/languages/scm.sh b/languages/scm.sh index 435cdb39..68128c9c 100644 --- a/languages/scm.sh +++ b/languages/scm.sh @@ -52,6 +52,7 @@ compile_payload_scm() else scm_opts="(declare (block)(not safe)(standard-bindings)(extended-bindings))" fi + scm_opts="${scm_opts}(define-cond-expand-feature $SYS_PLATFORM)" # support global macro definitions if [ -f "${SYS_HOSTPREFIX}/lib/global-macros.scm" ]; then scm_opts="${scm_opts}(include \\\"~~lib/global-macros.scm\\\")" From 2e8d26b9e8c00dd394066fb15e062e7236f985f0 Mon Sep 17 00:00:00 2001 From: 0-8-15 Date: Sun, 8 Sep 2019 01:04:15 +0200 Subject: [PATCH 21/28] LN_STORE: Name mutex with the symbol they are bound to. (#262) --- modules/ln_store/data.scm | 2 +- modules/rupi/rupicore.scm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/ln_store/data.scm b/modules/ln_store/data.scm index 83defd9d..e918669b 100644 --- a/modules/ln_store/data.scm +++ b/modules/ln_store/data.scm @@ -43,7 +43,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. (store:setlocal! store "extern:clear!" proc)) ;; thread-safe access to data stores -(define store:mutex (make-mutex)) +(define store:mutex (make-mutex 'store:mutex)) (define (store:grab!) (mutex-lock! store:mutex)) (define (store:release!) (mutex-unlock! store:mutex)) diff --git a/modules/rupi/rupicore.scm b/modules/rupi/rupicore.scm index 9912ab94..7bb1e898 100644 --- a/modules/rupi/rupicore.scm +++ b/modules/rupi/rupicore.scm @@ -124,7 +124,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;; %%%%%%%%%%%%%%%%%%%%%%%%%%% ;; client -(define rupi:mutex (make-mutex)) +(define rupi:mutex (make-mutex 'rupi:mutex)) (define (rupi:grab!) (mutex-lock! rupi:mutex)) (define (rupi:release!) (mutex-unlock! rupi:mutex)) From 7e63385115cf4ae2df6e535fea4154160cd6fc9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sun, 22 Sep 2019 20:16:08 +0200 Subject: [PATCH 22/28] Disable vpx on win32 since it did not build with it. --- libraries/libgd/make.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/libgd/make.sh b/libraries/libgd/make.sh index 520c7307..90baeb1f 100755 --- a/libraries/libgd/make.sh +++ b/libraries/libgd/make.sh @@ -8,7 +8,7 @@ EXTRACONF= if [ ! $SYS_PLATFORM = $SYS_HOSTPLATFORM ]; then EXTRACONF=--host=$SYS_ARCH fi -if [ $SYS_PLATFORM = android ]; then +if [ $SYS_PLATFORM = android -o $SYS_PLATFORM = win32 ]; then EXTRACONF="$EXTRACONF --without-vpx" fi From c4dddb9bef58e9ad25d5b3e0c9cef114f57d8359 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sun, 22 Sep 2019 20:19:29 +0200 Subject: [PATCH 23/28] Changes to windows build. --- libraries/libmagic/make.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/libmagic/make.sh b/libraries/libmagic/make.sh index eb741fdc..f51f5a5d 100644 --- a/libraries/libmagic/make.sh +++ b/libraries/libmagic/make.sh @@ -51,7 +51,7 @@ if [ "$SYS_PLATFORM" != "$SYS_HOSTPLATFORM" -a "X$FILE_COMPILE" != "X" ]; then sed -i -es%'@IS_CROSS_COMPILE_TRUE@FILE_COMPILE = file${EXEEXT}'%"@IS_CROSS_COMPILE_TRUE@FILE_COMPILE = ${FILE_COMPILE}"% magic/Makefile.in fi -package_configure --enable-static --disable-shared $EXTRACONF "'CFLAGS=-fPIC -O3 -DPCRE_STATIC'" +package_configure --enable-static --disable-shared $EXTRACONF "'CFLAGS=-fPIC -O3 -DPCRE_STATIC -DNOSHLWAPI'" # build From 3366268b1b341d6be2f333970c6e83fccf0571ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sun, 22 Sep 2019 21:52:27 +0200 Subject: [PATCH 24/28] add patch for win32 --- .../libmagic/no_use_PathRemoveFileSpecA.patch | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 libraries/libmagic/no_use_PathRemoveFileSpecA.patch diff --git a/libraries/libmagic/no_use_PathRemoveFileSpecA.patch b/libraries/libmagic/no_use_PathRemoveFileSpecA.patch new file mode 100644 index 00000000..1cc92504 --- /dev/null +++ b/libraries/libmagic/no_use_PathRemoveFileSpecA.patch @@ -0,0 +1,20 @@ +--- src/magic.original.c 2014-08-28 17:53:19.000000000 +0200 ++++ src/magic.c 2019-08-07 17:56:04.790561769 +0200 +@@ -175,7 +175,16 @@ + LPTSTR dllpath = malloc(sizeof(*dllpath) * (MAX_PATH + 1)); + dllpath[MAX_PATH] = 0; /* just in case long path gets truncated and not null terminated */ + if (GetModuleFileNameA(NULL, dllpath, MAX_PATH)){ +- PathRemoveFileSpecA(dllpath); ++ // PathRemoveFileSpecA(dllpath); ++ { ++ // PathRemoveFileSpecA is not avail on mingw ++ int i = strlen(dllpath); ++ while(i>0) { ++ if(dllpath[i] == '\\') break; ++ dllpath[i--] = '\0'; ++ } ++ dllpath[i] = '\0'; ++ } + if (strlen(dllpath) > 3 && + stricmp(&dllpath[strlen(dllpath) - 3], "bin") == 0) { + if (asprintf(&tmppath, From 9189dfaf141da26fd62caff6e1f8f417929ff5d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sun, 22 Sep 2019 21:53:58 +0200 Subject: [PATCH 25/28] was the EMBED file forgotton? --- modules/magic/EMBED | 1 + 1 file changed, 1 insertion(+) create mode 100644 modules/magic/EMBED diff --git a/modules/magic/EMBED b/modules/magic/EMBED new file mode 100644 index 00000000..97187ed6 --- /dev/null +++ b/modules/magic/EMBED @@ -0,0 +1 @@ +lib/magic.mgc From bfcdab235c248fff213cdd48d818f50cceee466e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sun, 22 Sep 2019 20:30:45 +0200 Subject: [PATCH 26/28] libpcre: enable compile with clang --- libraries/libpcre/make.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libraries/libpcre/make.sh b/libraries/libpcre/make.sh index db0fbbec..4a73775b 100644 --- a/libraries/libpcre/make.sh +++ b/libraries/libpcre/make.sh @@ -13,7 +13,11 @@ fi # configure -package_configure $EXTRACONF +lncc=`echo $SYS_CC| cut -d ' ' -f 1` +case $lncc in + *clang) deflncxx="CXX=${lncc}++" ;; +esac +package_configure $EXTRACONF "CC=$lncc $deflncxx" # build @@ -26,6 +30,7 @@ cp pcre.h pcreposix.h pcrecpparg.h pcre_scanner.h pcre_stringpiece.h $SYS_PREFIX package_cleanup +unsset deflncxx unset EXTRACONF #eof From f8f278c12919b93b217fba82e6dc5a9a0b52c34d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Sun, 22 Sep 2019 23:29:30 +0200 Subject: [PATCH 27/28] Use embedded magic.mgc by default --- modules/magic/magic.scm | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/modules/magic/magic.scm b/modules/magic/magic.scm index 0e1dbbad..7a75bdaa 100644 --- a/modules/magic/magic.scm +++ b/modules/magic/magic.scm @@ -63,8 +63,19 @@ EOF (define magic-open (c-lambda (int) (pointer void) "magic_open")) -(define magic-load - (c-lambda ((pointer void) char-string) int "magic_load")) +(define (magic-load file) + (define magic-load* + (c-lambda ((pointer void) char-string) int "magic_load")) + (cond + ((or (string? file) (not file)) + (magic-load* file)) + ;; Load the embedded magic.mgc + (else + (let ((embedded (string-append + (system-directory) (system-pathseparator) + "lib" (system-pathseparator) "magic.mgc"))) + (if (not (magic-load* embedded)) + (log-error "magic: couldn't load embedded magic.mgc")))))) (define magic-error (c-lambda ((pointer void)) char-string "magic_error")) From dccce2def5b4bd1499465d35240da84f683b8cad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20F=2E=20Wittenberger?= Date: Thu, 26 Sep 2019 13:17:48 +0200 Subject: [PATCH 28/28] Load embedded magic.mgc if called with #t --- modules/magic/magic.scm | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/modules/magic/magic.scm b/modules/magic/magic.scm index 0e1dbbad..7a75bdaa 100644 --- a/modules/magic/magic.scm +++ b/modules/magic/magic.scm @@ -63,8 +63,19 @@ EOF (define magic-open (c-lambda (int) (pointer void) "magic_open")) -(define magic-load - (c-lambda ((pointer void) char-string) int "magic_load")) +(define (magic-load file) + (define magic-load* + (c-lambda ((pointer void) char-string) int "magic_load")) + (cond + ((or (string? file) (not file)) + (magic-load* file)) + ;; Load the embedded magic.mgc + (else + (let ((embedded (string-append + (system-directory) (system-pathseparator) + "lib" (system-pathseparator) "magic.mgc"))) + (if (not (magic-load* embedded)) + (log-error "magic: couldn't load embedded magic.mgc")))))) (define magic-error (c-lambda ((pointer void)) char-string "magic_error"))