mescc: Tinycc support: Sizeof struct destruct.
[mes.git] / scripts / mescc
index eb7d4b9be83dc0c8e58f1f203b7791cb49d4301c..2c4c1bd94aae5bc5921a50e0361702366fec674c 100755 (executable)
@@ -1,10 +1,10 @@
 #! /bin/sh
 # -*-scheme-*-
-mes_p=$(type -p mes)
+mes_p=$(command -v mes)
 if [ '(' -z "$mes_p" -a -z "$MES" ')' -o "$MES" = "guile" -o "$MES" = "mes.guile" ]; then
     GODIR=${GODIR-@GODIR@}
     GUILEDIR=${GUILEDIR-@GUILEDIR@}
-    [ "$GODIR" = @"GODIR"@ ] && GODIR=$(dirname $0)
+    [ "$GODIR" = @"GODIR"@ ] && GODIR=$(dirname $0)/../guile
     [ "$GUILEDIR" = @"GUILEDIR"@ ] && GUILEDIR=$(dirname $0)/../guile
     export GUILE_AUTO_COMPILE=${GUILE_AUTO_COMPILE-0}
     GUILE_LOAD_COMPILED_PATH=$GODIR:$GUILE_LOAD_COMPILED_PATH
@@ -12,15 +12,16 @@ if [ '(' -z "$mes_p" -a -z "$MES" ')' -o "$MES" = "guile" -o "$MES" = "mes.guile
 else
     MES=${MES-$(dirname $0)/mes}
     PREFIX=${PREFIX-@PREFIX@}
-    MES_PREFIX=${MES_PREFIX-$PREFIX}
     if [ "$MES_PREFIX" = @PREFIX""@ ]
     then
         MES_PREFIX=$(cd $(dirname $0)/.. && pwd)
         export MES_PREFIX
+    else
+        MES_PREFIX=${MES_PREFIX-$PREFIX/share/mes}
     fi
     MES_MODULEDIR=${MES_MODULEDIR-$MES_PREFIX/"module"}
     export MES_MODULEDIR
-    $MES -s $0 "$@"
+    exec ${MES-mes} -e '(mescc)' -s $0 "$@"
     exit $?
 fi
 !#
@@ -63,7 +64,8 @@ GUILE='~/src/guile-1.8/build/pre-inst-guile --debug -q' scripts/mescc
 
 (cond-expand
  (mes
-  (define %scheme "mes"))
+  (define %scheme "mes")
+  (define (set-port-encoding! port encoding) #t))
  (guile-2
   (define %scheme "guile")
   (define-macro (mes-use-module . rest) #t)
@@ -153,16 +155,19 @@ Environment variables:
 
 (define (ast? o)
   (or (string-suffix? ".E" o)
-      (string-suffix? (string-append "." %scheme "-E") o)))
+      (string-suffix? (string-append "." %scheme "-E") o)
+      (string-suffix? "-E" o)))
 
 (define (object? o)
   (or (string-suffix? ".o" o)
-      (string-suffix? (string-append "." %scheme "-o") o)))
+      (string-suffix? (string-append "." %scheme "-o") o)
+      (string-suffix? "-o" o)))
 
 (define (main args)
   (let* ((options (parse-opts args))
          (files (option-ref options '() '()))
          (file (car files))
+         (file-name (car (string-split (basename file) #\.)))
          (preprocess? (option-ref options 'E #f))
          (compile? (option-ref options 'c #f))
          (debug-info? (option-ref options 'g #f))
@@ -188,17 +193,15 @@ Environment variables:
         (if (and (not compile?)
                  (not preprocess?)) (set-port-encoding! (current-output-port) "ISO-8859-1"))
         (cond ((pair? objects) (let ((objects (map read-object objects)))
-                                 (if compile? (objects->M1 objects)
-                                     (objects->elf objects))))
+                                 (if compile? (objects->M1 file-name objects)
+                                     (objects->elf file objects))))
               ((pair? asts) (let* ((infos (map main:ast->info asts))
                                    (objects (map info->object infos)))
-                              (if compile? (objects->M1 objects)
-                                  (objects->elf objects))))
+                              (if compile? (objects->M1 file-name objects)
+                                  (objects->elf file objects))))
               ((pair? sources) (if preprocess? (map (source->ast pretty-print/write defines includes) sources)
                                    (let* ((infos (map (source->info defines includes) sources))
                                           (objects (map info->object infos)))
-                                     (if compile? (objects->M1 objects)
-                                         (objects->elf objects))))))))))
-
-(main (command-line))
+                                     (if compile? (objects->M1 file-name objects)
+                                         (objects->elf file objects))))))))))
 'done