# Makefile mods by Olaf Matthes for use with GCC 3.3
#
# This makefile is made for r10000. You can change r10000 to your
# processor type if you have problems. Just change and type
# 'make'
# 
# You will need to change the tck/tk paths if you want to recompile
# The GUI part.

# compile with GCC as n32 binary
EXECUTABLE=../bin/pd-n32
XF1=-mabi=n32 -mips4 -DN32 -funroll-loops -fomit-frame-pointer

# compile with GCC as o32 binary
#EXECUTABLE=../bin/pd-o32
#XF1=-mcpu=r4000 -mips3 -funroll-loops -fomit-frame-pointer

CC=gcc
OBJ_DIR = ../obj
BIN_DIR = ../bin
PDEXEC = $(BIN_DIR)/pd
EXT= pd_irix6
GUINAME= pd-gui

INSTALL_PREFIX = /usr/local
GFLAGS = -DINSTALL_PREFIX=\"$(INSTALL_PREFIX)\"

MANDIR = ${prefix}/man

MORECFLAGS = -DIRIX -DDL_OPEN -DUSEAPI_SGI -I/usr/X11R6/include -Wno-error

INCLUDE = -I. -I../tk/unix/include -I../tcl/unix/include
GINCLUDE = $(INCLUDE)
GLIB = ../tk/unix/lib/libtk8.4.a ../tcl/unix/lib/libtcl8.4.a -lm -lX11

LDFLAGS = $(XF1)
LIB = -laudio -lmd -lm -lpthread

OPT_CFLAGS = -O3
WARN_CFLAGS = -Wall -W -Werror -Wno-unused \
    -Wno-parentheses -Wno-switch
ARCH_CFLAGS = -DPD -DUNIX 

CFLAGS = $(ARCH_CFLAGS) $(WARN_CFLAGS) $(OPT_CFLAGS) $(MORECFLAGS) $(XF1)

# the sources

SYSSRC = s_midi_sgi.c s_audio_sgi.c

SRC = g_canvas.c g_graph.c g_text.c g_rtext.c g_array.c g_template.c g_io.c \
    g_scalar.c g_traversal.c g_guiconnect.c g_readwrite.c g_editor.c \
    g_all_guis.c g_bang.c g_hdial.c g_hslider.c g_mycanvas.c g_numbox.c \
    g_toggle.c g_vdial.c g_vslider.c g_vumeter.c \
    m_pd.c m_class.c m_obj.c m_atom.c m_memory.c m_binbuf.c \
    m_conf.c m_glob.c m_sched.c \
    s_main.c s_inter.c s_file.c s_print.c \
    s_loader.c s_path.c s_entry.c s_audio.c s_midi.c \
    d_ugen.c d_ctl.c d_arithmetic.c d_osc.c d_filter.c d_dac.c d_misc.c \
    d_math.c d_fft.c d_mayer_fft.c d_fftroutine.c d_array.c d_global.c \
    d_delay.c d_resample.c \
    x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \
    x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c d_soundfile.c \
    $(SYSSRC)


OBJ = $(SRC:.c=.o) 

GSRC =  t_main.c t_tkcmd.c

GOBJ = $(GSRC:.c=.o)

#
#  ------------------ targets ------------------------------------
#

.PHONY: pd gui pd-watchdog all

all: $(PDEXEC) $(BIN_DIR)/pd-watchdog $(BIN_DIR)/$(GUINAME) $(BIN_DIR)/pdsend \
    $(BIN_DIR)/pdreceive  $(BIN_DIR)/pd.tk externs

bin: $(PDEXEC) $(BIN_DIR)/pd-watchdog $(BIN_DIR)/$(GUINAME) $(BIN_DIR)/pdsend \
    $(BIN_DIR)/pdreceive  $(BIN_DIR)/pd.tk

.c.o:
	gcc $(CFLAGS) $(GFLAGS) $(INCLUDE) -c -o $(OBJ_DIR)/$*.o $*.c 

#$(OBJ) : %.o : %.c
#	$(CC) $(CFLAGS) $(GFLAGS) $(INCLUDE) -c -o $(OBJ_DIR)/$*.o $*.c 

#$(GOBJ) : %.o : %.c
#	$(CC) $(CFLAGS) $(GFLAGS) $(GINCLUDE) -c -o $(OBJ_DIR)/$*.o $*.c 

pd: $(PDEXEC)

gui: $(BIN_DIR)/$(GUINAME)

pd-watchdog: $(BIN_DIR)/pd-watchdog

$(BIN_DIR)/pd-watchdog: s_watchdog.c
	gcc -O2 $(STRIPFLAG) -o $(BIN_DIR)/pd-watchdog s_watchdog.c

$(BIN_DIR)/pdsend: u_pdsend.c
	gcc $(CFLAGS)  $(STRIPFLAG) -o $(BIN_DIR)/pdsend u_pdsend.c

$(BIN_DIR)/pdreceive: u_pdreceive.c
	gcc $(CFLAGS)  $(STRIPFLAG) -o $(BIN_DIR)/pdreceive u_pdreceive.c

$(PDEXEC): $(OBJ) 
	cd ../obj;  $(CC) $(LDFLAGS) $(DBG_CFLAGS) -o $(PDEXEC) $(OBJ) \
	$(LIB)

$(BIN_DIR)/pd-gui: $(GOBJ) $(GSRC)
	cd ../obj; $(CC) $(INCLUDE) -o $(BIN_DIR)/$(GUINAME) $(GOBJ) \
	$(GLIB)

$(BIN_DIR)/pd.tk: u_main.tk
	echo set pd_nt 2 > $(BIN_DIR)/pd.tk
	grep -v "set pd_nt" < u_main.tk >> $(BIN_DIR)/pd.tk

INSTDIR = $(DESTDIR)/$(INSTALL_PREFIX)
MANINSTDIR = $(DESTDIR)/$(MANDIR)

install:  all
	install -d $(INSTDIR)/lib/pd/bin
	install $(BIN_DIR)/$(GUINAME) $(INSTDIR)/lib/pd/bin/$(GUINAME)
	install $(BIN_DIR)/pd-watchdog $(INSTDIR)/lib/pd/bin/pd-watchdog
	install -m644 $(BIN_DIR)/pd.tk $(INSTDIR)/lib/pd/bin/pd.tk
	install -d $(INSTDIR)/bin
	install -m755 $(PDEXEC) $(INSTDIR)/bin/pd
	install -m 755 $(BIN_DIR)/pdsend $(INSTDIR)/bin/pdsend
	install -m 755 $(BIN_DIR)/pdreceive $(INSTDIR)/bin/pdreceive 
	install -d $(INSTDIR)/lib/pd/extra
	install -d $(INSTDIR)/lib/pd/externs
	install -m 644 $(EXTERNS) $(INSTDIR)/lib/pd/extra
	cp -r ../doc $(INSTDIR)/lib/pd/
	install -d $(INSTDIR)/include
	install -m644 m_pd.h $(INSTDIR)/include/m_pd.h
	install -d $(MANINSTDIR)/man1
	gzip < ../man/pd.1 >  $(MANINSTDIR)/man1/pd.1.gz
	chmod 644 $(MANINSTDIR)/man1/pd.1.gz
	gzip < ../man/pdsend.1 >  $(MANINSTDIR)/man1/pdsend.1.gz
	chmod 644 $(MANINSTDIR)/man1/pdsend.1.gz
	gzip < ../man/pdreceive.1 >  $(MANINSTDIR)/man1/pdreceive.1.gz
	chmod 644 $(MANINSTDIR)/man1/pdreceive.1.gz

local-clean:
	-rm -f ../obj/* $(BIN_DIR)/pd $(BIN_DIR)/$(GUINAME) $(BIN_DIR)/pdsend \
	    $(BIN_DIR)/pdreceive $(BIN_DIR)/pd-watchdog m_stamp.c
	-rm -f *~
	-(cd ../doc/6.externs; rm -f *.pd_linux)
	-rm -f makefile.dependencies
	touch makefile.dependencies
	chmod 666 makefile.dependencies

extra-clean:
	-rm -f `find ../extra/ -name "*.pd_*"`
	-rm -f tags

clean: extra-clean local-clean

distclean: clean
	rm -rf config.cache config.log config.status makefile tags \
	     autom4te-*.cache
	echo all: > makefile
	echo -e  "\t./configure" >> makefile
	echo -e "\tmake" >> makefile

tags: $(SRC) $(GSRC); ctags *.[ch]

depend: 
	$(CC) $(INCLUDE) $(CFLAGS) -M $(SRC) > makefile.dependencies

uninstall:
	-rm -r $(INSTDIR)/lib/pd
	-rm $(INSTDIR)/bin/pd
	-rm $(INSTDIR)/bin/pdsend
	-rm $(INSTDIR)/bin/pdreceive
	-rm $(INSTDIR)/include/m_pd.h
	-rm $(MANINSTDIR)/man/man1/pd.1.gz
	-rm $(MANINSTDIR)/man/man1/pdsend.1.gz
	-rm $(MANINSTDIR)/man/man1/pdreceive.1.gz

include makefile.dependencies