# flext - C++ layer for Max/MSP and pd (pure data) externals # Copyright (c) 2001-2003 Thomas Grill (xovo@gmx.net) # # Makefile for gcc @ darwin # # usage: # to build run "make -f makefile.pd-darwin" # to install (as root), do "make -f makefile.pd-darwin install" # CONFIG=config-pd-darwin.txt include ${CONFIG} # compiler+linker stuff INCLUDES=${PDPATH} FLAGS=-DFLEXT_SYS=2 ${UFLAGS} # compiler flags for optimized build CFLAGS=-O2 # compiler flags for debug build CFLAGS_D=-g # additional flags for threading CFLAGS_T=-DFLEXT_THREADS # additional flags for shared library CFLAGS_S=-DFLEXT_SHARED -DFLEXT_EXPORTS # flags for shared linking LSHFLAGS= -dylib -dynamic -flat_namespace -undefined suppress # frameworks #FRAMEWORKS=Carbon veclib # ---------------------------------------------- # the rest can stay untouched # ---------------------------------------------- NAME=flext SRCDIR=./source # all the source files from the package include make-files.txt ifdef SNDOBJ INCLUDES+=$(SNDOBJ) SRCS+=$(SRCS_SNDOBJ) HDRS+=$(HDRS_SNDOBJ) endif ifdef STK INCLUDES+=$(STK) SRCS+=$(SRCS_STK) HDRS+=$(HDRS_STK) endif MAKEFILE=makefile.pd-darwin TARGET=$(TARGDIR)/lib$(NAME).a TARGET_D=$(TARGDIR)/lib$(NAME)_d.a TARGET_T=$(TARGDIR)/lib$(NAME)_t.a TARGET_TD=$(TARGDIR)/lib$(NAME)_td.a TARGET_S=$(TARGDIR)/lib$(NAME).dylib TARGET_SD=$(TARGDIR)/lib$(NAME)_d.dylib all: $(TARGDIR) $(TARGET) $(TARGET_D) $(TARGET_T) $(TARGET_TD) $(TARGET_S) $(TARGET_SD) $(TARGDIR): mkdir $(TARGDIR) $(patsubst %,$(SRCDIR)/%,$(SRCS)): $(patsubst %,$(SRCDIR)/%,$(HDRS)) $(patsubst %,$(SRCDIR)/%,$(IHDRS)) $(MAKEFILE) $(CONFIG) touch $@ $(TARGDIR)/%.o : $(SRCDIR)/%.cpp $(CXX) -c -dynamic $(CFLAGS) $(FLAGS) $(patsubst %,-I%,$(INCLUDES) $(SRCDIR)) $(patsubst %,-F%,$(FRAMEWORKS)) $< -o $@ $(TARGDIR)/%.do : $(SRCDIR)/%.cpp $(CXX) -c -dynamic $(CFLAGS_D) $(FLAGS) $(patsubst %,-I%,$(INCLUDES) $(SRCDIR)) $(patsubst %,-F%,$(FRAMEWORKS)) $< -o $@ $(TARGDIR)/%.to : $(SRCDIR)/%.cpp $(CXX) -c -dynamic $(CFLAGS) $(CFLAGS_T) $(FLAGS) $(patsubst %,-I%,$(INCLUDES) $(SRCDIR)) $(patsubst %,-F%,$(FRAMEWORKS)) $< -o $@ $(TARGDIR)/%.tdo : $(SRCDIR)/%.cpp $(CXX) -c -dynamic $(CFLAGS_D) $(CFLAGS_T) $(FLAGS) $(patsubst %,-I%,$(INCLUDES) $(SRCDIR)) $(patsubst %,-F%,$(FRAMEWORKS)) $< -o $@ $(TARGDIR)/%.so : $(SRCDIR)/%.cpp $(CXX) -c -dynamic $(CFLAGS) $(CFLAGS_T) $(CFLAGS_S) $(FLAGS) $(patsubst %,-I%,$(INCLUDES) $(SRCDIR)) $(patsubst %,-F%,$(FRAMEWORKS)) $< -o $@ $(TARGDIR)/%.sdo : $(SRCDIR)/%.cpp $(CXX) -c -dynamic $(CFLAGS_D) $(CFLAGS_T) $(CFLAGS_S) $(FLAGS) $(patsubst %,-I%,$(INCLUDES) $(SRCDIR)) $(patsubst %,-F%,$(FRAMEWORKS)) $< -o $@ $(TARGET) : $(patsubst %.cpp,$(TARGDIR)/%.o,$(SRCS)) libtool -static -o $@ $^ $(TARGET_D) : $(patsubst %.cpp,$(TARGDIR)/%.do,$(SRCS)) libtool -static -o $@ $^ $(TARGET_T) : $(patsubst %.cpp,$(TARGDIR)/%.to,$(SRCS)) libtool -static -o $@ $^ $(TARGET_TD) : $(patsubst %.cpp,$(TARGDIR)/%.tdo,$(SRCS)) libtool -static -o $@ $^ $(TARGET_S) : $(patsubst %.cpp,$(TARGDIR)/%.so,$(SRCS)) ld $(LSHFLAGS) -o $@ $^ -ldylib1.o -lgcc -lstdc++ $(patsubst %,-framework %,$(FRAMEWORKS)) $(TARGET_SD) : $(patsubst %.cpp,$(TARGDIR)/%.sdo,$(SRCS)) ld $(LSHFLAGS) -o $@ $^ -ldylib1.o -lgcc -lstdc++ $(patsubst %,-framework %,$(FRAMEWORKS)) .PHONY: clean install clean: rm -f $(TARGDIR)/*.{o,do,to,tdo,so,sdo} $(TARGET) $(TARGET_D) $(TARGET_T) $(TARGET_TD) $(TARGET_S) $(TARGET_SD) ifdef INSTDIR $(INSTDIR): -mkdir $(INSTDIR) install:: $(INSTDIR) endif install:: $(TARGET) $(TARGET_D) $(TARGET_T) $(TARGET_TD) $(TARGET_S) $(TARGET_SD) $(patsubst %,$(SRCDIR)/%,$(HDRS)) cp $^ $(INSTDIR) mv $(INSTDIR)/lib*.dylib /usr/local/lib ranlib $(INSTDIR)/*.a # have to rerun ranlib at install dir ?! #make compatibility links for old-style naming for i in $(foreach f,$(notdir $(filter %.a,$^)),$(patsubst lib%.a,%,$(f))); do rm -f $(INSTDIR)/$$i.a && ln -sf lib$$i.a $(INSTDIR)/$$i.a; done # chmod 755 $(patsubst %,$(INSTDIR)/%,$(notdir $^)) # chgrp admin $(patsubst %,$(INSTDIR)/%,$(notdir $^))