ANN: MikMod External (mod and mod-like playing library for MacOS X)

Tereza Snyder tereza at califex.com
Sat Sep 22 23:28:42 EDT 2007


On Sep 22, 2007, at 4:38 PM, Andre Garzia wrote:

> Aloha my friends,
> Now I bring to you folks an external ...

Congratulations Andre!

External mania is catching! but readers who've never made an external  
may want to skip the rest of this post.

Before you go off the deep end, Andre, here's a description of a  
problem I encountered last spring ( I reported it to Mark Waddingham  
but I don't know if he fixed it.) and how to get around it. If you  
ever get the compiler error I mention (especially if you try to add  
objective-c code to your external), keep this fix in mind.

----

I had an xCode project made with  External Creator V1.rev; let's call  
it "xxx6" (it was the sixth "xxx" project I'd made). Because it was  
nearly finished, I decided to rename the project "xxx". I first  
renamed the "xxx6.c" file, and as is my practice, rebuilt the project  
after I made the change. Even though renaming the file was was the  
*only* change I made, the build failed!

The error was with a "361: error: parse error before string constant"  
at the macro EXTERNAL_BEGIN_DECLARATIONS("xxx").

I preprocessed the file and looked at the macro expansion—everything  
was fine! I fiddled with every applicable project setting to no  
avail. I even posted to the xCode-Users mailList... but in the  
interest of simplicity I left out the critical bit of info when I  
described the problem: the macro contained another macro invocation,  
EXTERNAL_REFERENCE_LIBRARY, which was being expanded to include a  
fateful and erroneous:

extern "C"

but why? This was a C file, not C++ (which alone uses extern "C"  
declarations)! I looked at external.h and I saw that  
EXTERNAL_REFERENCE_LIBRARY, that contains the "extern" declaration,  
was being expanded if _MACOS was true, without any #ifdef for  
__cplusplus. When I changed:

#ifdef _MACOS

to:

#if defined(_MACOSX) && defined(__cplusplus)

in External.h, the build ran to successful completion. The question  
then became, "How was I able *ever* to get successful C builds?" The  
answer is that External Creator V1.rev creates a source file whose  
filetype for xCode is "sourcecode.cpp.cpp" even though the filename  
is "xxx.c".

When I renamed my source file, xCode reset its "filetype" to  
"sourcecode.c.c", thereby triggering the error on extern "C", which  
is recognized only in C++.

So there are two things to fix:  the conditional in external.h, and  
the script for building an xCode C project in External Creator V1.rev.

I am so glad I solved the puzzle at last—I would surely have  
recognized the problem sooner if I hadn't been off the C/C++ wagon  
for the last 3 years...


tereza





More information about the use-livecode mailing list