X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-grovel%2Fdef-to-lisp.lisp;h=b16560ba14e0cc14dce1f61f84464ad9da2ec9a3;hb=8dd43b84a688fde72f6d957c59f7207d539990f7;hp=b73553f07d73bdd2d1b7c34b0f1d03ec7ef99392;hpb=1f7401c39a46466c307938c8f6cf7db224741981;p=sbcl.git diff --git a/contrib/sb-grovel/def-to-lisp.lisp b/contrib/sb-grovel/def-to-lisp.lisp index b73553f..b16560b 100644 --- a/contrib/sb-grovel/def-to-lisp.lisp +++ b/contrib/sb-grovel/def-to-lisp.lisp @@ -19,7 +19,7 @@ c-name c-el-name) ;; length (if distrust-length - (format stream "printf(\"nil\");") + (format stream "printf(\"|CL|:|NIL|\");") (format stream "{ ~A t;printf(\"%d\",(sizeof t.~A));}~%" c-name c-el-name)) (format stream "printf(\")\\n\");~%"))))) @@ -50,8 +50,12 @@ printf(\"(in-package ~S)\\\n\");~%" package-name) (destructuring-bind (type lispname cname &optional doc) def (cond ((eq type :integer) (format stream - "printf(\"(cl:defconstant ~A %d \\\"~A\\\")\\\n\",~A);~%" - lispname doc cname)) + "#ifdef ~A~%~ + printf(\"(cl:defconstant ~A %d \\\"~A\\\")\\\n\",~A);~%~ + #else~%~ + printf(\"(sb-int:style-warn \\\"Couln't grovel definition for ~A (unknown to the C compiler).\\\")\\n\");~%~ + #endif~%" + cname lispname doc cname cname)) ((eq type :type) (format stream "printf(\"(sb-alien:define-alien-type ~A (sb-alien:%ssigned %d))\\\n\",SIGNED_(~A),8*(sizeof(~A)));~%" @@ -100,8 +104,12 @@ printf(\"(in-package ~S)\\\n\");~%" package-name) (funcall (intern "C-CONSTANTS-EXTRACT" (find-package "SB-GROVEL")) filename tmp-c-source (constants-package component)) (and - (= (run-shell-command "gcc -o ~S ~S" (namestring tmp-a-dot-out) - (namestring tmp-c-source)) 0) + (= (run-shell-command "gcc ~A -o ~S ~S" + (if (sb-ext:posix-getenv "EXTRA_CFLAGS") + (sb-ext:posix-getenv "EXTRA_CFLAGS") + "") + (namestring tmp-a-dot-out) + (namestring tmp-c-source)) 0) (= (run-shell-command "~A >~A" (namestring tmp-a-dot-out) (namestring tmp-constants)) 0)