Sorry to have cluttered the list with all this nonsense, but I solved my problem all by my lonesome. It is all kludge, but it works. The elegant solution (I think) is to write a nice .configure script that will generate exactly the right makefile regardless of os and configuration, but I don't know how to do that.

So, in the meantime one way to link libraries when building Pd externs (this is for Mac, but it should be pretty much the same on any Unix outfit) is like this:
modify the file

'/'whatever'/Pd.etc/Contents/Resources/extra/makefile'

so that the first line reads:

'current: pd_darwin'

then in the section that sets the rules and recipes for building on make it looks so:

'pd_darwin: $(NAME).pd_darwin

.SUFFIXES: .pd_darwin

DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
    -Wno-unused -Wno-parentheses -Wno-switch

.c.pd_darwin:
    $(CC) -arch i386  $(DARWINCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
    $(CC) -arch i386 $(LIBS) -bundle -undefined suppress -flat_namespace \
        -o $*.pd_darwin $*.o
    rm -f $*.o'

I took out all the '.d_ppc' and '-arch ppc' stuff that's in the makefile that comes with Pd (vanilla) because I have an intel core so ppc junk is irrelevant. I changed .d_fat to .pd_darwin, because somebody who actually knows stuff (unlike me) told me that .pd_darwin is the current convention. The variable 'LINUXINCLUDE' is simply '-I../../src' and is here recycled from a previous definition in the makefile. It has nothing to do with linux whatsoever. It just tells the compiler to look at the Pd source code when you hit make on your external. The other big change I made is inserting the 'LIBS' variable in the second build phase instruction which I shall explain below. It is a simple matter to implement analogous modifications in the other unix-ish portions of the makefile, but I haven't tested it yet. I don't know anything about Windows...

Now that the pd makefile is ready to go, go into your extern project directory and make a makefile there that looks like so:

'NAME=awesomeExtern
CSYM=awesomeExtern

include /'whatever'/Pd.etc/Contents/Resources/extra/makefile  

DARWINCFLAGS += -I/path/to/awesome-library/headers etc.
LIBS = -L/path/to/awesome-library -lawesomelibrary etc.'

I put 'etc.' in there because there may be more than one header file or library that you want to use. You can discover what you need by putting

'pkg-config --cflags awesomelibraryA awesomelibraryB etc.'

into the command line. These return values are what you want to add (note the '+=') to the 'DARWINCFLAGS' variable. Likewise the return of

'pkg-config --libs awesomelibraryA awesomelibraryB etc.'

is what you want to be associated with the 'LIBS' variable. On Mac osx 5 (don't know about 6), the path is usually /opt/local/include and /opt/local/lib. On Unix/Linux I believe it is typically /usr/local/include and /usr/local/lib where libraries get installed.

Sorry if this is old-hat to all the C honchos out there and irrelevant to everyone else (as I suspect is the case). I'm sure it is about a million times easier if you use Xcode to develop your externs, but then you would have to use Xcode. If this is helpful/relevant to people I'd be happy to clean up this little tutorial and post it to the Pd wiki.

Best,
David


On 1/20/11 4:55 PM, david medine wrote:

OK, nuts to that. First, I must correct myself, the makefile I am referring to is in the Pd.etc.app/Contents/Resources/extra folder. (By the way, I am at home working on my Mac right now, I haven't tried this on my beastly linux box at all yet and so I am not sure what all the details of this issue are there off the top of my head.)

Also, I went ahead and dropped the -c flag from the makefile (this flag stops linking altogether when make is run) and apparently when you do this, the extern won't build at all! I think this has something to do with the fact that in this mode, gcc needs to link with all the Pd objects also, (because terminal tells me so...) but this explanation doesn't really make sense to me.

Does anyone know how to tweak the makefile (or any clean method, for that matter) so that one can link libraries to externals?
Thanks again,
David

On 1/20/11 4:02 PM, david medine wrote:
Dear folks,
Does anybody know a good way to link libraries in a Pd extern build? I am using plain ol' command line and makefiles. It would be nice to be able to do this without modifying the Makefile in the Pd.etc./Contents/Resources/ directory, but due to my general ignorance of programming lore, I don't really know how to do this. Any suggestions?
Thanks,
David Medine