diff --git a/languages/scm.sh b/languages/scm.sh index 20350f5a..68128c9c 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 @@ -56,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\\\")" @@ -65,19 +62,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/libraries/libgambit/make.sh b/libraries/libgambit/make.sh old mode 100755 new mode 100644 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 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..f51f5a5d --- /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 -DNOSHLWAPI'" + + +# 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/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, diff --git a/libraries/libpcre/make.sh b/libraries/libpcre/make.sh new file mode 100644 index 00000000..4a73775b --- /dev/null +++ b/libraries/libpcre/make.sh @@ -0,0 +1,36 @@ +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 + +lncc=`echo $SYS_CC| cut -d ' ' -f 1` +case $lncc in + *clang) deflncxx="CXX=${lncc}++" ;; +esac +package_configure $EXTRACONF "CC=$lncc $deflncxx" + +# 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 + +unsset deflncxx +unset EXTRACONF + +#eof diff --git a/make.sh b/make.sh index 27c3f7c7..58107f7b 100755 --- a/make.sh +++ b/make.sh @@ -37,7 +37,7 @@ # make_debug=yes -dmsg_make() +dmsg_make() { if [ ! "X$scm_debug" = X ]; then echo "MAKE_DEBUG: $@" @@ -154,7 +154,7 @@ resetstate() ;; esac fi -} +} ################################# # misc file and directory support @@ -184,7 +184,7 @@ newersourceindir() dir=`dirname $1` srcfiles= for l in $languages; do - srcfiles="$srcfiles "`ls -1 $dir/*.$l 2> /dev/null` + srcfiles="$srcfiles "`ls -1 $dir/*.$l 2> /dev/null` done for src in $srcfiles; do if `test "$src" -nt "$tgt"`; then @@ -221,7 +221,7 @@ newerindir() ac_cache="$SYS_TMPDIR/tmp.subst" -ac_reset() +ac_reset() { if [ -f $ac_cache ]; then rm $ac_cache @@ -236,7 +236,7 @@ ac_subst() substcmd="$ac_tool $ac_cache $1 \"`eval $paramcmd`\"" else substcmd="$ac_tool $ac_cache $1 \"$2\"" - fi + fi eval $substcmd } @@ -246,7 +246,7 @@ ac_output() infile=`echo "${1}" | sed 's/\.in$//'`.in if [ "X$2" = "X" ]; then outfile=$1 - else + else outfile=$2 fi assertfile $infile "substitution source file $infile not found" @@ -310,7 +310,7 @@ filter_entries() if [ ! "X$includes" = "X" ]; then included=no for tmp in `echo "$includes" | tr '+' ' '`; do - if [ "X$tmp" = "X$filter" ]; then + if [ "X$tmp" = "X$filter" ]; then included=yes fi done @@ -322,7 +322,7 @@ filter_entries() if [ ! "X$excludes" = "X" ]; then excluded=no for tmp in `echo "$excludes" | tr '!' ' '`; do - if [ "X$tmp" = "X$filter" ]; then + if [ "X$tmp" = "X$filter" ]; then excluded=yes fi done @@ -531,7 +531,7 @@ make_textures() tgtdir=$SYS_PREFIXROOT/build/$SYS_APPNAME/textures mkdir -p $tgtdir srcdir="$appsrcdir/textures" - if [ -d $srcdir ]; then + if [ -d $srcdir ]; then make_texturedir "$srcdir" "main-" fi for m in $modules; do @@ -550,15 +550,15 @@ make_fontfile() if [ `isnewer $srcfile $incfile` = "yes" ]; then while read line; do fline=`echo "$line" | sed '/^#/d'` - if [ "$fline" ]; then + if [ "$fline" ]; then fontname=`echo "$fline" | cut -f 1 -d " "` font=`locatefile fonts/$fontname` - assertfile $font + assertfile $font bits=`echo "$fline" | cut -f 2 -d " "` - if [ "X$bits" = "X7" ]; then + if [ "X$bits" = "X7" ]; then bits=`locatefile fonts/ascii7.set` else - if [ "X$bits" = "X8" ]; then + if [ "X$bits" = "X8" ]; then bits=`locatefile fonts/ascii8.set` else bits=`locatefile fonts/$bits` @@ -585,7 +585,7 @@ make_fonts() tgtdir=$SYS_PREFIXROOT/build/$SYS_APPNAME/fonts mkdir -p $tgtdir srcfile="$appsrcdir/FONTS" - if [ -f $srcfile ]; then + if [ -f $srcfile ]; then make_fontfile "$srcfile" "main-" fi for m in $modules; do @@ -638,9 +638,9 @@ make_string_latex() cat > tmp.tex << __EOF \batchmode \documentclass{article} -\makeatletter -\renewcommand{\Large}{\@setfontsize\Large{$size}{$size}} -\makeatother +\makeatletter +\renewcommand{\Large}{\@setfontsize\Large{$size}{$size}} +\makeatother \usepackage{fontspec} \usepackage{xunicode} %\fontspec [ Path = $fontpath ]{$fontname} @@ -681,7 +681,7 @@ make_stringfile() cat $srcfile | sed '/^#/d' > $SYS_TMPDIR/tmp.STRINGS echo >> $SYS_TMPDIR/tmp.STRINGS while read -r fline; do - if [ "$fline" ]; then + if [ "$fline" ]; then fontname=`eval "getparam 1 $fline"` font=`locatefile fonts/$fontname` assertfile $font @@ -693,7 +693,7 @@ make_stringfile() string_srcs="$string_srcs $scmfile" if [ `isnewer $srcfile $scmfile` = "yes" ]; then echo " => $name.." - if [ "$USE_XETEX" = "yes" ]; then + if [ "$USE_XETEX" = "yes" ]; then make_string_latex $font $size "$label" $name $scmfile $opt else make_string_gd $font $size "$label" $name $scmfile @@ -712,7 +712,7 @@ make_strings() tgtdir=$SYS_PREFIXROOT/build/$SYS_APPNAME/strings mkdir -p $tgtdir srcfile="$appsrcdir/STRINGS" - if [ -f $srcfile ]; then + if [ -f $srcfile ]; then make_stringfile "$srcfile" "main-" fi for m in $modules; do @@ -757,7 +757,7 @@ make_sounds() make_soundfile=$1 echo " => processing sounds needed for $SYS_APPNAME.." srcdir="$appsrcdir/sounds" - if [ -d "$srcdir" ]; then + if [ -d "$srcdir" ]; then make_sounddir "$srcdir" $make_soundfile fi for m in $modules; do @@ -790,10 +790,10 @@ add_items() xis=`locatefile $itemname/$newi/$capitemname silent` if [ ! "X$xis" = "X" ] && [ -f "$xis" ]; then add_items `cat "$xis"` - fi + fi fi else - if [ $newi = $optnewi ]; then + if [ $newi = $optnewi ]; then assert "$newi in $itemname not found" else echo "INFO: optional $newi in $itemname not found, skipping" @@ -842,8 +842,8 @@ make_setup_profile() SYS_PREFIXROOT=`pwd`"-cache" if [ ! -d $SYS_PREFIXROOT ]; then case $SYS_HOSTPLATFORM in - macosx) - SYS_PREFIXROOT=$HOME/Library/Caches/lambdanative + macosx) + SYS_PREFIXROOT=$HOME/Library/Caches/lambdanative ;; *) if [ "X$XDG_CACHE_HOME" = "X" ]; then @@ -875,7 +875,7 @@ make_setup_profile() fi mkdir -p $SYS_PREFIXROOT/packages mkdir -p $SYS_PREFIXROOT/build - SYS_ANDROIDAPI=$ANDROIDAPI + SYS_ANDROIDAPI=$ANDROIDAPI SYS_ANDROIDSDK=$ANDROIDSDK SYS_ANDROIDNDK=$ANDROIDNDK SYS_ANDROIDARCH=$ANDROIDARCH @@ -887,7 +887,7 @@ make_setup_profile() echo $SYS_BUILDHASH SYS_BUILDEPOCH=`date +"%s"` # build the subtool - if ! `test -x $SYS_HOSTPREFIX/bin/subtool` || + if ! `test -x $SYS_HOSTPREFIX/bin/subtool` || `test tools/subtool/subtool.c -nt $SYS_HOSTPREFIX/bin/subtool`; then flags= if [ $SYS_HOSTPLATFORM = win32 ]; then @@ -935,7 +935,7 @@ make_setup_profile() libraries=$libraries" "`cat "$xlibs"` fi appsrcdirs="$appsrcdirs plugins/$p" - done + done libraries=`filter_entries $SYS_PLATFORM $libraries` tool_libraries= if [ "$SYS_HOSTPLATFORM" = "$SYS_PLATFORM" ]; then @@ -1126,7 +1126,7 @@ make_install_tool() if [ -x "$binary" ]; then echo "==> installing $SYS_APPNAME as a lambdanative tool" cp "$binary" $SYS_PREFIX/bin - else + else echo "Error: No binary found [$binary]" fi setstate @@ -1238,7 +1238,7 @@ make_library() assertfile "$libdir" if [ -f "$libdir/LIB_DEPENDS" ]; then dlibs=`cat $libdir/LIB_DEPENDS` - filtered_dlibs=`filter_entries $SYS_PLATFORM $dlibs` + filtered_dlibs=`filter_entries $SYS_PLATFORM $dlibs` for dlib in $filtered_dlibs; do make_library $dlib "(dependency)" done @@ -1254,12 +1254,12 @@ make_library() else ac_output build.sh quiet= - if [ "X$SYS_VERBOSE" = "X" ]; then + if [ "X$SYS_VERBOSE" = "X" ]; then quiet="> /dev/null 2> /dev/null" fi veval "$SYS_ENV sh build.sh $quiet" rm build.sh - fi + fi cd $here fi } @@ -1347,9 +1347,9 @@ make_toolcheck() { setstate TOOLCHECK echo "==> checking for required tools.." - # basic + # basic asserttool grep wget zip tar sed tr cut tail head find - # language + # language asserttool autoconf make gcc patch if [ `is_gui_app` = "yes" -a ! -f $SYS_TMPDIR/.use_xetex ]; then make_xelatexcheck @@ -1382,13 +1382,13 @@ make_lntoolcheck() . $SYS_TMPDIR/config.cache rmifexists $SYS_TMPDIR/tmp.subst make_setup silent - make_libraries + make_libraries make_payload make_executable make_install_tool SYS_CPU=$tmp_sys_cpu fi - done + done if [ -f $SYS_TMPDIR/tmp.config.cache ]; then mv $SYS_TMPDIR/tmp.config.cache $SYS_TMPDIR/config.cache . $SYS_TMPDIR/config.cache @@ -1411,7 +1411,7 @@ make_gcc() gcc_ball="gcc-${gcc_version}.tar.gz" gcc_prefix=$SYS_PREFIXROOT/gcc/$SYS_HOSTPLATFORM/gcc-${gcc_version} tgt=$SYS_PREFIXROOT/packages/$gcc_ball - if [ ! -f "$tgt" ]; then + if [ ! -f "$tgt" ]; then echo " => downloading $gcc_ball.." veval "wget ftp://ftp.gnu.org/gnu/gcc/gcc-${gcc_version}/$gcc_ball -O $tgt" fi @@ -1445,7 +1445,7 @@ smoke_result() echo "$1 $2" >> $SYS_TMPDIR/smoke.result } -smoke_one() +smoke_one() { smoker=$1 echo "SMOKING $smoker.." @@ -1466,7 +1466,7 @@ smoke_one() echo "=> Configured $SYS_APPNAME for platform $SYS_PLATFORM." echo "=> Building $SYS_APPNAME.." make_setup silent - make_libraries + make_libraries if [ `is_gui_app` = "yes" ]; then make_textures make_fonts @@ -1483,7 +1483,7 @@ smoke_one() smoke_result $smoker "**FAIL" echo "ERROR: make failed" return - fi + fi appdir=`ls -1d $SYS_HOSTPREFIX/${SYS_APPNAME}${SYS_APPFIX}` appexe=`ls -1 $SYS_HOSTPREFIX/${SYS_APPNAME}${SYS_APPFIX}/${SYS_APPNAME}*` appexelocal="./"`basename $appexe` @@ -1644,7 +1644,7 @@ if [ "X$make_argument" = "Xall" ] && [ -f "targets/$SYS_PLATFORM/make_argument" fi case "$make_argument" in -clean) +clean) rm -rf $SYS_TMPDIR/tmp.?????? 2> /dev/null make_clean ;; 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/config/LIBRARIES b/modules/config/LIBRARIES index 112767d2..ba1da9f2 100644 --- a/modules/config/LIBRARIES +++ b/modules/config/LIBRARIES @@ -1 +1 @@ -libgambc liblambdanative +libgambit liblambdanative 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..2bf7ef98 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)) 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/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 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..7a75bdaa --- /dev/null +++ b/modules/magic/magic.scm @@ -0,0 +1,102 @@ +#| +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 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")) + +(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 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)) 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")