emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Possible fix for :includes header argument in org-babel C source blo


From: Kévin Le Gouguec
Subject: Re: Possible fix for :includes header argument in org-babel C source blocks
Date: Thu, 28 May 2020 00:20:49 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Hi,

Bastien <bzg@gnu.org> writes:

> Brandon Guttersohn <brandon@guttersohn.org> writes:
>
>> Hey all, I think I may have a small fix for executing C source blocks
>> in org-babel. Or, possibly just a bad case of user error.
>>
>> The issue (in emacs 27 with -q) is that it doesn't seem possible to
>> specify non-system header files with the :includes header argument.
>>
>> [...]
>>
>> The attached patch will wrap filenames in quotes if they do not begin
>> with "<", and works for me.
>
> Thanks for reporting this and for suggesting this patch, I think it is
> good enough.  I have applied it to the master branch of Org:
>
> https://code.orgmode.org/bzg/org-mode/commit/44cb98fdb6
>
> Best,

I think this commit might have broken test ob-C/string-var: running
"make test" on master (516c038e5) right now I get:

> Test ob-C/string-var condition:
>     (wrong-type-argument sequencep <iostream>)
>    FAILED    8/834  ob-C/string-var (0.004651 sec)

The following patch fixes the test:

diff --git a/lisp/ob-C.el b/lisp/ob-C.el
index c3e72c680..ae7b2ed1c 100644
--- a/lisp/ob-C.el
+++ b/lisp/ob-C.el
@@ -233,6 +233,7 @@ its header arguments."
                ;; includes
                (mapconcat
                 (lambda (inc)
+                  (when (symbolp inc) (setq inc (symbol-name inc)))
                   (if (string-prefix-p "<" inc)
                       (format "#include %s" inc)
                     (format "#include \"%s\"" inc)))
I don't know if it's the best way forward; another way to make the test
pass is double-quoting "<iostream>" and "<cstring>" in ob-C-test.org:

diff --git a/testing/examples/ob-C-test.org b/testing/examples/ob-C-test.org
index 0faf630b9..efae02a19 100644
--- a/testing/examples/ob-C-test.org
+++ b/testing/examples/ob-C-test.org
@@ -38,7 +38,7 @@
 #+end_src
 
 #+source: string_var
-#+begin_src cpp :var q="word" :includes '(<iostream> <cstring>) :results silent
+#+begin_src cpp :var q="word" :includes '("<iostream>" "<cstring>") :results 
silent
   std::cout << q << ' ' << std::strlen(q);
   return 0;
 #+end_src
I guess there might be some people out there who will expect things to
keep working without double-quotes?  I have never used Babel, so I have
no idea…

I hope this has not already been brought up; apologies if so.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]