makefile.in 9.93 KB
Newer Older
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
1
2
3
4
5
6
7
# On Mac OS X, this needs to be defined to enable dlopen and weak linking
# support.  Its safe on other platforms since gcc only checks this env var on
# Apple's gcc.  <hans@at.or.at>
ifeq ($(shell uname -s),Darwin)
export MACOSX_DEPLOYMENT_TARGET = 10.3
endif

Miller Puckette's avatar
Miller Puckette committed
8
9
10
VPATH = ../obj:./
OBJ_DIR = ../obj
BIN_DIR = ../bin
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
11
PDEXEC = $(BIN_DIR)/@PDEXEC@
Miller Puckette's avatar
Miller Puckette committed
12
13
14
15
16
17
18
19
20
21
22
23
24
25
EXT= @EXT@
GUINAME= @GUINAME@

prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
includedir = @includedir@
libdir = @libdir@
mandir = @mandir@

GFLAGS = -DINSTALL_PREFIX=\"$(prefix)\"

# varibles to match packages/Makefile.buildlayout so that they can be easily
# overridden when building Pd-extended builds. <hans@at.or.at>
26
libpddir = $(libdir)/pd-l2ork
Miller Puckette's avatar
Miller Puckette committed
27
28
29
30
31
pddocdir = $(libpddir)/doc
libpdbindir = $(libpddir)/bin

CPPFLAGS = @CPPFLAGS@
MORECFLAGS = @MORECFLAGS@
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
32
33
34
35
36
37
# if on 10.6/Intel, then build GUI as 32-bit
ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 10)
  GINCLUDE = -arch i386 $(CPPFLAGS) -framework Tcl -framework Tk
else
  GINCLUDE = $(CPPFLAGS) @GUIFLAGS@
endif
Miller Puckette's avatar
Miller Puckette committed
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
GLIB = @LIBS@

LDFLAGS = @LDFLAGS@
LIB =  @PDLIB@

WARN_CFLAGS = -Wall -W -Wstrict-prototypes \
    -Wno-unused -Wno-parentheses -Wno-switch
ARCH_CFLAGS = -DPD 

CFLAGS = @CFLAGS@ $(ARCH_CFLAGS) $(WARN_CFLAGS) $(CPPFLAGS) $(MORECFLAGS)

# the sources

SYSSRC += @SYSSRC@

ASIOSRC = @ASIOSRC@

ASIOOBJ = $(ASIOSRC:.cpp=.o)

Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
57
58
59
60
61
62
# these files cause a warning when using auto-vectorization:
# "warning: dereferencing type-punned pointer will break strict-aliasing rules"
TYPE_PUNNING_SRC = d_ctl.c d_array.c d_delay.c d_filter.c d_math.c d_osc.c d_soundfile.c

# these are safe for full gcc 4.x optimization
OPT_SAFE_SRC = g_canvas.c g_graph.c g_text.c g_rtext.c g_array.c g_template.c g_io.c \
Miller Puckette's avatar
Miller Puckette committed
63
    g_scalar.c g_traversal.c g_guiconnect.c g_readwrite.c g_editor.c \
64
    g_undo.c g_all_guis.c g_bang.c g_hdial.c g_hslider.c g_mycanvas.c g_numbox.c \
65
    g_toggle.c g_vdial.c g_vslider.c g_vumeter.c g_magicglass.c \
Miller Puckette's avatar
Miller Puckette committed
66
67
68
    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 \
69
    s_loader.c s_path.c s_entry.c s_audio.c s_midi.c\
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
70
71
72
    d_ugen.c d_arithmetic.c d_dac.c d_misc.c \
    d_fft.c d_global.c \
    d_resample.c \
Miller Puckette's avatar
Miller Puckette committed
73
    x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \
74
    x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c x_list.c x_preset.c\
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
75
	import.c \
Miller Puckette's avatar
Miller Puckette committed
76
77
    $(SYSSRC)

Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
78
79
80
81
SRC = $(TYPE_PUNNING_SRC) $(OPT_SAFE_SRC)

TYPE_PUNNING_OBJ = $(TYPE_PUNNING_SRC:.c=.o) 
OPT_SAFE_OBJ = $(OPT_SAFE_SRC:.c=.o) 
Miller Puckette's avatar
Miller Puckette committed
82
83
OBJ = $(SRC:.c=.o) 

Miller Puckette's avatar
Miller Puckette committed
84
GSRC =  @GUISRC@
Miller Puckette's avatar
Miller Puckette committed
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107

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

# get version from m_pd.h to use in doc/1.manual/1.introduction.txt
PD_MAJOR_VERSION := $(shell grep PD_MAJOR_VERSION m_pd.h | \
	sed 's|^.define *PD_MAJOR_VERSION *\([0-9]*\).*|\1|' )
PD_MINOR_VERSION := $(shell grep PD_MINOR_VERSION m_pd.h | \
	sed 's|^.define *PD_MINOR_VERSION *\([0-9]*\).*|\1|' )
PD_BUGFIX_VERSION := $(shell grep PD_BUGFIX_VERSION m_pd.h | \
	sed 's|^.define *PD_BUGFIX_VERSION *\([0-9]*\).*|\1|' )
PD_TEST_VERSION := $(shell grep PD_TEST_VERSION m_pd.h | \
	sed 's|^.define *PD_TEST_VERSION *"\(.*\)".*|\1|' )
PD_VERSION := $(PD_MAJOR_VERSION).$(PD_MINOR_VERSION).$(PD_BUGFIX_VERSION)
ifneq ($(PD_TEST_VERSION),)
	PD_VERSION := $(PD_VERSION)-$(PD_TEST_VERSION)
endif

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

.PHONY: pd gui externs all

Miller Puckette's avatar
Miller Puckette committed
108
all: pd $(BIN_DIR)/pd-watchdog gui $(BIN_DIR)/pdsend \
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
109
    $(BIN_DIR)/pdreceive externs
Miller Puckette's avatar
Miller Puckette committed
110

Miller Puckette's avatar
Miller Puckette committed
111
bin: pd $(BIN_DIR)/pd-watchdog gui $(BIN_DIR)/pdsend \
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
112
113
114
115
    $(BIN_DIR)/pdreceive

$(OPT_SAFE_OBJ) : %.o : %.c
	$(CC) $(CFLAGS) $(OPT_CFLAGS) $(GFLAGS) $(INCLUDE) -c -o $(OBJ_DIR)/$*.o $*.c 
Miller Puckette's avatar
Miller Puckette committed
116

Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
117
$(TYPE_PUNNING_OBJ) : %.o : %.c
Miller Puckette's avatar
Miller Puckette committed
118
119
120
121
122
123
124
125
126
127
	$(CC) $(CFLAGS) $(GFLAGS) $(INCLUDE) -c -o $(OBJ_DIR)/$*.o $*.c 

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

$(ASIOOBJ): %.o : %.cpp
	$(CXX) $(CFLAGS) $(INCLUDE) -c -o $(OBJ_DIR)/$*.o $*.cpp

pd: $(PDEXEC)

Miller Puckette's avatar
Miller Puckette committed
128
ifneq ($(GSRC),)
Miller Puckette's avatar
Miller Puckette committed
129
gui: $(BIN_DIR)/$(GUINAME)
Miller Puckette's avatar
Miller Puckette committed
130
131
132
else
gui:
endif
Miller Puckette's avatar
Miller Puckette committed
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149

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

$(BIN_DIR):
	test -d $(BIN_DIR) || mkdir -p $(BIN_DIR)

$(BIN_DIR)/pd-watchdog: s_watchdog.c $(BIN_DIR)
	$(CC) $(CFLAGS) $(STRIPFLAG) -o $(BIN_DIR)/pd-watchdog s_watchdog.c

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

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

$(PDEXEC): $(OBJ) $(BIN_DIR)
	cd ../obj;  $(CC) $(LDFLAGS) $(DBG_CFLAGS) -o $(PDEXEC) $(OBJ) $(LIB)
Miller Puckette's avatar
Miller Puckette committed
150

Miller Puckette's avatar
Miller Puckette committed
151
152
153
$(BIN_DIR)/pd-gui: $(GOBJ) $(GSRC)
	cd ../obj; $(CC) $(INCLUDE) -o $(BIN_DIR)/$(GUINAME) $(GOBJ) $(GLIB)

Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
154
155
156
157
158
159
# if on 10.6/Intel, then force build GUI as 32-bit
ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 10)
  ARCH_FLAG = -arch i386
else
  ARCH_FLAG = 
endif
Miller Puckette's avatar
Miller Puckette committed
160
161
#this is for Max OSX only...
$(BIN_DIR)/libPdTcl.dylib: $(GOBJ) $(GSRC)
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
162
	cd ../obj && $(CC) $(ARCH_FLAG) $(CFLAGS) -dynamiclib -read_only_relocs warning  \
Miller Puckette's avatar
Miller Puckette committed
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
		-o $(BIN_DIR)/libPdTcl.dylib $(GOBJ)  \
		-F@TCLTK_FRAMEWORKS_PATH@ \
		-framework Tcl  -framework Tk  -framework System  \
		-Wl,-install_name,@executable_path/../Resources/bin/libPdTcl.dylib
	install_name_tool -change @TCLTK_FRAMEWORKS_PATH@/Tcl.framework/Versions/8.4/Tcl\
		 @executable_path/../Frameworks/Tcl.framework/Versions/8.4/Tcl \
		 -change @TCLTK_FRAMEWORKS_PATH@/Tk.framework/Versions/8.4/Tk \
		 @executable_path/../Frameworks/Tk.framework/Versions/8.4/Tk \
		../bin/libPdTcl.dylib

# this is for Windows/MinGW (only?)
$(BIN_DIR)/pdtcl.dll: $(GOBJ)
	cd $(BIN_DIR); dllwrap --export-all-symbols --output-def pdtcl.def \
	--output-lib=pdtcl.a --dllname=$(GUINAME) $(OBJ_DIR)/t_tkcmd.o $(LIB) $(GLIB)
	strip --strip-unneeded $(BIN_DIR)/pdtcl.dll

externs: 
	make -C ../extra/bonk~    @EXTERNTARGET@
	make -C ../extra/choice   @EXTERNTARGET@
	make -C ../extra/expr~    @EXTERNTARGET@
	make -C ../extra/fiddle~  @EXTERNTARGET@
	make -C ../extra/loop~    @EXTERNTARGET@
	make -C ../extra/lrshift~ @EXTERNTARGET@
	make -C ../extra/pique    @EXTERNTARGET@
	make -C ../extra/sigmund~ @EXTERNTARGET@
Miller Puckette's avatar
Miller Puckette committed
188
189
	make -C ../extra/pd~      @EXTERNTARGET@
	make -C ../extra/stdout   @EXTERNTARGET@
Miller Puckette's avatar
Miller Puckette committed
190
191
192

BINARYMODE=@binarymode@

Miller Puckette's avatar
Miller Puckette committed
193
ABOUT_FILE=$(DESTDIR)$(pddocdir)/1.manual/1.introduction.txt
Miller Puckette's avatar
Miller Puckette committed
194
install:  all
Miller Puckette's avatar
Miller Puckette committed
195
196
197
	install -d $(DESTDIR)$(libpdbindir)
	install $(BIN_DIR)/$(GUINAME) $(DESTDIR)$(libpdbindir)/$(GUINAME)
	install $(BIN_DIR)/pd-watchdog $(DESTDIR)$(libpdbindir)/pd-watchdog
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
198
199
200
	install -m644 pd.tk $(DESTDIR)$(libpdbindir)/pd.tk
	install -m644 pkgIndex.tcl $(DESTDIR)$(libpdbindir)/pkgIndex.tcl
	install -m644 helpbrowser.tcl $(DESTDIR)$(libpdbindir)/helpbrowser.tcl
Miller Puckette's avatar
Miller Puckette committed
201
	install -d $(DESTDIR)$(bindir)
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
202
	install $(BINARYMODE) $(PDEXEC) $(DESTDIR)$(bindir)/@PDEXEC@
203
204
205
# kludge to allow pd~ to work by default in pd-l2ork
	rm -f $(DESTDIR)$(libpddir)/pd
	ln -s $(bindir)/pd-l2ork $(DESTDIR)$(libpddir)/pd
Miller Puckette's avatar
Miller Puckette committed
206
207
208
209
	install -m755 $(BIN_DIR)/pdsend $(DESTDIR)$(bindir)/pdsend
	install -m755 $(BIN_DIR)/pdreceive $(DESTDIR)$(bindir)/pdreceive 
	for dir in $(shell ls -1 ../doc | grep -v CVS); do \
		echo "installing $$dir"; \
Miller Puckette's avatar
Miller Puckette committed
210
211
		install -d $(DESTDIR)$(pddocdir)/$$dir ; \
		install -m644 -p ../doc/$$dir/*.* $(DESTDIR)$(pddocdir)/$$dir ; \
Miller Puckette's avatar
Miller Puckette committed
212
213
214
	done
	for dir in $(shell ls -1 ../doc/7.stuff | grep -v CVS); do \
		echo "installing 7.stuff/$$dir"; \
Miller Puckette's avatar
Miller Puckette committed
215
216
217
		install -d $(DESTDIR)$(pddocdir)/7.stuff/$$dir ; \
		install -m644 -p ../doc/7.stuff/$$dir/*.* \
                    $(DESTDIR)$(pddocdir)/7.stuff/$$dir ; \
Miller Puckette's avatar
Miller Puckette committed
218
219
	done
	mv $(ABOUT_FILE) $(ABOUT_FILE).tmp
220
	cat $(ABOUT_FILE).tmp | sed 's|PD_VERSION|Pd-l2ork version $(PD_TEST_VERSION)|' \
Miller Puckette's avatar
Miller Puckette committed
221
222
		> $(ABOUT_FILE)
	rm $(ABOUT_FILE).tmp
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
223
	rsync -ax --exclude=.git --exclude=.svn ../extra $(DESTDIR)$(libpddir)/
224
225
226
227
228
229
	install -d $(DESTDIR)$(includedir)/pdl2ork
	install -m644 m_pd.h $(DESTDIR)$(includedir)/pdl2ork/m_pd.h
	install -m644 m_imp.h $(DESTDIR)$(includedir)/pdl2ork/m_imp.h
	install -m644 g_canvas.h $(DESTDIR)$(includedir)/pdl2ork/g_canvas.h
	install -m644 s_stuff.h $(DESTDIR)$(includedir)/pdl2ork/s_stuff.h
	install -m644 g_all_guis.h $(DESTDIR)$(includedir)/pdl2ork/g_all_guis.h
Miller Puckette's avatar
Miller Puckette committed
230
	install -d $(DESTDIR)$(mandir)/man1
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
231
232
	gzip < ../man/pd.1 >  $(DESTDIR)$(mandir)/man1/@PDEXEC@.1.gz
	chmod 644 $(DESTDIR)$(mandir)/man1/@PDEXEC@.1.gz
Miller Puckette's avatar
Miller Puckette committed
233
234
235
236
237
238
	gzip < ../man/pdsend.1 >  $(DESTDIR)$(mandir)/man1/pdsend.1.gz
	chmod 644 $(DESTDIR)$(mandir)/man1/pdsend.1.gz
	gzip < ../man/pdreceive.1 >  $(DESTDIR)$(mandir)/man1/pdreceive.1.gz
	chmod 644 $(DESTDIR)$(mandir)/man1/pdreceive.1.gz
	@echo "Pd install succeeded."

Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
239
240
241
local-clean:	
	-rm -f -- $(OBJ)
	-rm -f ../obj/* $(PDEXEC) $(BIN_DIR)/$(GUINAME) $(BIN_DIR)/pdsend \
Miller Puckette's avatar
Miller Puckette committed
242
	    $(BIN_DIR)/pdreceive $(BIN_DIR)/pd-watchdog m_stamp.c
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
243
	-rm -f -- *~
Miller Puckette's avatar
Miller Puckette committed
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
	-(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 -f config.cache config.log config.status makefile tags \
		autom4te.cache/output.* autom4te.cache/traces.* autom4te.cache/requests
	-rmdir autom4te.cache
	-rm -rf autom4te-*.cache

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

depend: makefile.dependencies

makefile.dependencies: makefile
	$(CC) $(CPPFLAGS) -M $(SRC) > makefile.dependencies

uninstall:
Miller Puckette's avatar
Miller Puckette committed
269
	rm -f -r $(DESTDIR)$(libpddir)
Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
270
	rm -f $(DESTDIR)$(bindir)/@PDEXEC@
Miller Puckette's avatar
Miller Puckette committed
271
272
	rm -f $(DESTDIR)$(bindir)/pdsend
	rm -f $(DESTDIR)$(bindir)/pdreceive
273
	rm -f -r $(DESTDIR)$(includedir)/pdl2ork/
Miller Puckette's avatar
Miller Puckette committed
274
275
276
277
278
279
280
	rm -f $(DESTDIR)$(mandir)/man1/pd.1.gz
	rm -f $(DESTDIR)$(mandir)/man1/pdsend.1.gz
	rm -f $(DESTDIR)$(mandir)/man1/pdreceive.1.gz

include makefile.dependencies


Hans-Christoph Steiner's avatar
Hans-Christoph Steiner committed
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
TAGS: etags

etags:
	etags *.h $(SRC) $(SYSSRC)
	etags --append --language=none --regex="/proc[ \t]+\([^ \t]+\)/\1/" pd.tk *.tcl
	find /usr/include -type f -name \*.h -exec etags -a '{}' \;
	make etags_`uname -s`

etags_Darwin:
	find /System/Library/Frameworks  -type f -name \*.h -exec etags -a '{}' \;
	find /Library/Frameworks  -type f -name \*.h -exec etags -a '{}' \;
	find /sw/include -type f -name \*.h -exec etags -a '{}' \;

etags_Linux:

etags_MINGW:
	find /usr/local/include/ -type f -name \*.h -exec etags -a '{}' \;





Miller Puckette's avatar
Miller Puckette committed
303
304
305
306
307