1#!amake
2#
3# Makefile to compile sswf (Script to SWF) with amake
4# Written by Alexis Wilke for Made to Order Software Corp (c) 2002-2009
5#
6# Copyright (c) 2002-2009 Made to Order Software Corp.
7#
8# Permission is hereby granted, free of charge, to any
9# person obtaining a copy of this software and
10# associated documentation files (the "Software"), to
11# deal in the Software without restriction, including
12# without limitation the rights to use, copy, modify,
13# merge, publish, distribute, sublicense, and/or sell
14# copies of the Software, and to permit persons to whom
15# the Software is furnished to do so, subject to the
16# following conditions:
17#
18# The above copyright notice and this permission notice
19# shall be included in all copies or substantial
20# portions of the Software.
21#
22# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
23# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24# LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
25# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
26# EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
28# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
29# ARISING FROM, OUT OF OR IN CONNECTION WITH THE
30# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31# SOFTWARE.
32#
33
34# Get the version from the libsswf-version.h file instead (we thus avoid
35# data duplication)
36#VERSION=x.y.z
37# The following ensures we can extract the version, it's not 100%
38# correct since if a 2nd number with the same form appears in the
39# version file then it will be returned too
40LIBSSWF_VERSION<=include/sswf/libsswf-version.h
41VERSION:=$(LIBSSWF_VERSION::[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*)
42
43
44# Let's ensure that all the necessary directories
45# exist from the start; this makes amake happier;
46# in MS-Windows 2000 you can test if a file exists
47# I'm not sure that's valid under older versions
48#for p in bin lib VC \
49		tmp\backup\src\tools tmp\object\src\tools \
50		tmp\backup\src\sswf tmp\object\src\sswf \
51		tmp\backup\src\lib tmp\object\src\lib \
52		tmp\backup\src\libas tmp\object\src\libas \
53		tmp\backup\src\libasas tmp\object\src\libasas \
54		tmp\backup\src\libasc tmp\object\src\libasc
55#shell if not exist $p mkdir $p
56#endfor
57
58CINCLUDEPATH:=include;src/sswf
59CSUFFIXES:=.c .c++ .cpp .cxx .h .h++ .hpp .s .S .l .y
60
61# By default, build the release now a days
62# Use export DEBUG=1 and export YYDEBUG=1 or specify these on the command
63# line (amake DEBUG=1 YYDEBUG=1)
64DEBUG?=0
65YYDEBUG?=0
66
67CC:=gcc
68CXX:=g++
69LD:=ld
70#if $(DEBUG) == 1
71CFLAGS:=-g -ggdb3 -Wall -Werror -DDEBUG=$(DEBUG) -DYYDEBUG=$(YYDEBUG) -Iinclude -I/AllDev/MinGW/3.3/include/freetype2
72#else
73CFLAGS:=-O2 -Wall -Werror -DDEBUG=$(DEBUG) -DYYDEBUG=$(YYDEBUG) -Iinclude -I/AllDev/MinGW/3.3/include/freetype2
74#endif
75CXXFLAGS:=$(CFLAGS)
76COPY:=cp -f
77RENAME:=rename
78RM:=rm -r
79RMDIR:=rmdir /s /q
80MKDIR:=mkdir
81AR:=ar
82YFLAGS:=-t		# enable -t for debug
83BISON:=bison
84
85LIBSRC:=$(wildcard src\lib\libsswf_*.c++)
86LIBASSRC:=$(wildcard src\libas\*.c++)
87LIBASASSRC:=$(wildcard src\libasas\*.c++)
88LIBASCSRC:=$(wildcard src\libasc\*.c++)   # when compiling on Win32 we have the asc_strings.c++
89RAWSSWFSRC:=$(wildcard src\sswf\*.[cy]*)
90SSWFSRC:=$(RAWSSWFSRC:-*~)	# no backup (some people will use ~ at the end of filenames)
91TOOLSSRC:=$(wildcard src\tools\*.c*)
92MISCSRC:=$(wildcard src\misc\*.c)
93
94
95LIBOBJ:=$(LIBSRC:*.c++=tmp\\object\\*.o:U)
96LIBASOBJ:=$(LIBASSRC:*.c++=tmp\\object\\*.o:U)
97LIBASASOBJ:=$(LIBASASSRC:*.c++=tmp\\object\\*.o:U)
98LIBASCOBJ:=$(LIBASCSRC:*.c++=tmp\\object\\*.o:U)
99SSWFOBJ:=$(SSWFSRC:*.*=tmp\\object\\*.o:U)
100TOOLSOBJ:=$(TOOLSSRC:*.*=tmp\\object\\*.o:U)
101MISCOBJ:=$(MISCSRC:*.*=tmp\\object\\*.o:U)
102
103SAMPLES:=new-anim dyn-button scroller web-site-anim
104
105
106
107EXE:=bin\\swf_dump.exe bin\\sswf.exe bin\\ft2sswf.exe bin\\asc.exe \
108		bin\\jpg2swf.exe
109all: $(EXE) $(EXE:*.exe=*-static.exe) bin\sswf-internal.exe lib\libsswf.a \
110		lib\libsswf_as.a lib\libsswf_asas.a lib\libsswf_asc.a .PHONY
111	@echo "Done!"
112
113
114bin\\swf_dump.exe: $(.TARGET:bin\\*.exe=tmp\\object\\src\\tools\\*.o)
115	$(CC) $(CFLAGS) -o $(.TARGET) $(.FIRSTSRC) -lz
116
117bin\\swf_dump-static.exe: $(.TARGET:bin\\*-static.exe=tmp\\object\\src\\tools\\*.o)
118	$(CC) -static $(CFLAGS) -o $(.TARGET) $(.FIRSTSRC) -lz
119
120
121bin\\ft2sswf.exe: $(.TARGET:bin\\*.exe=tmp\\object\\src\\tools\\*.o)
122	$(CC) $(CFLAGS) -o $(.TARGET) $(.FIRSTSRC) -lfreetype
123
124bin\\ft2sswf-static.exe: $(.TARGET:bin\\*-static.exe=tmp\\object\\src\\tools\\*.o)
125	$(CC) -static $(CFLAGS) -o $(.TARGET) $(.FIRSTSRC) -lfreetype -lz -lgw32c
126
127
128bin\\asc.exe: $(.TARGET:bin\\*.exe=tmp\\object\\src\\tools\\*.o) lib\\libsswf_as.a
129	$(CXX) $(CFLAGS) -o $(.TARGET) $(.FIRSTSRC) lib/libsswf_as.a
130
131bin\\asc-static.exe: $(.TARGET:bin\\*.exe=tmp\\object\\src\\tools\\*.o) lib\\libsswf_as-static.a
132	$(CXX) -static $(CFLAGS) -o $(.TARGET) $(.FIRSTSRC) lib/libsswf_as-static.a
133
134
135bin\\jpg2swf.exe: $(.TARGET:bin\\*.exe=tmp\\object\\src\\tools\\*.o) lib\\libsswf.a
136	$(CXX) $(CFLAGS) -o $(.TARGET) $(.FIRSTSRC) lib/libsswf.a -lm -lz -ljpeg -liconv
137
138bin\\jpg2swf-static.exe: $(.TARGET:bin\\*.exe=tmp\\object\\src\\tools\\*.o) lib\\libsswf-static.a
139	$(CXX) -static $(CFLAGS) -o $(.TARGET) $(.FIRSTSRC) lib/libsswf-static.a -lm -lz -ljpeg -liconv
140
141
142bin\\sswf.exe: $(.TARGET:bin\\*.exe=tmp\\object\\src\\sswf\\*.o) $(SSWFOBJ) lib\\libsswf.a lib\\libsswf_as.a lib\\libsswf_asas.a
143	$(CXX) $(CFLAGS) -o $(.TARGET) $(SSWFOBJ) lib/libsswf.a lib/libsswf_asas.a lib/libsswf_as.a -lm -lz -ljpeg -liconv
144
145bin\\sswf-static.exe: $(.TARGET:bin\\*.exe=tmp\\object\\src\\sswf\\*.o) $(SSWFOBJ:*.o=*-static.o) lib\\libsswf-static.a lib\\libsswf_as-static.a lib\\libsswf_asas-static.a
146	$(CXX) -static $(CFLAGS) -o $(.TARGET) $(SSWFOBJ:*.o=*-static.o) lib/libsswf-static.a lib/libsswf_asas-static.a lib/libsswf_as-static.a -lm -lz -ljpeg -liconv
147
148bin\\sswf-internal.exe: $(.TARGET:bin\\*.exe=tmp\\object\\src\\sswf\\*.o) $(SSWFOBJ:*.o=*-internal.o) lib\\libsswf-static.a lib\\libsswf_as-static.a lib\\libsswf_asas-static.a lib\\libsswf_asc-static.a
149	$(CXX) -static $(CFLAGS) -o $(.TARGET) $(SSWFOBJ:*.o=*-internal.o) lib/libsswf-static.a lib/libsswf_asas-static.a lib/libsswf_as-static.a lib/libsswf_asc-static.a -lm -lz -ljpeg -liconv
150
151
152
153
154
155
156lib\\libsswf.a: $(LIBOBJ)
157	$(AR) cr $(.TARGET) $(LIBOBJ)
158
159lib\\libsswf-static.a: $(LIBOBJ:*.o=*-static.o)
160	$(AR) cr $(.TARGET) $(LIBOBJ:*.o=*-static.o)
161
162
163lib\\libsswf_as.a: $(LIBASOBJ)
164	$(AR) cr $(.TARGET) $(LIBASOBJ)
165
166lib\\libsswf_as-static.a: $(LIBASOBJ:*.o=*-static.o)
167	$(AR) cr $(.TARGET) $(LIBASOBJ:*.o=*-static.o)
168
169
170lib\\libsswf_asas.a: $(LIBASASOBJ)
171	$(AR) cr $(.TARGET) $(LIBASASOBJ)
172
173lib\\libsswf_asas-static.a: $(LIBASASOBJ:*.o=*-static.o)
174	$(AR) cr $(.TARGET) $(LIBASASOBJ:*.o=*-static.o)
175
176
177lib\\libsswf_asc.a: $(LIBASCOBJ)
178	$(AR) cr $(.TARGET) $(LIBASCOBJ)
179
180lib\\libsswf_asc-static.a: $(LIBASCOBJ:*.o=*-static.o)
181	$(AR) cr $(.TARGET) $(LIBASCOBJ:*.o=*-static.o)
182
183
184
185
186ALLSRC:=$(LIBSRC) $(LIBASSRC) $(LIBASASSRC) $(LIBASCSRC) $(SSWFSRC) $(TOOLSSRC) $(MISCSRC)
187ALLCXXOBJ:=$(ALLSRC::*.c++=tmp\\object\\*.o) $(ALLSRC::*.c++=tmp\\object\\*-static.o)
188ALLCOBJ:=$(ALLSRC::*.c=tmp\\object\\*.o) $(ALLSRC::*.c=tmp\\object\\*-static.o)
189ALLYACCOBJ:=$(ALLSRC::*.y=tmp\\object\\*.o)
190ALLLEXOBJ:=$(ALLSRC::*.l=tmp\\object\\*.o)
191
192INTERNALCXXOBJ:=$(SSWFSRC::*.c++=tmp\\object\\*-internal.o)
193INTERNALCOBJ:=$(SSWFSRC::*.c=tmp\\object\\*-internal.o)
194
195
196$(ALLCXXOBJ): $(.TARGET:*-static.o=*.o:tmp\\object\\*.o=*.c++:I:src\\sswf\\sswf_grammar.h=tmp\\object\\src\\sswf\\sswf_grammar.h)
197	$(CXX) -c $(CXXFLAGS) $(.TARGET::*-static.o=>-DSTATIC_ICONV:U) -I$(.TARGET:tmp\\object\\*\\*\\*.o=tmp\\object\\*\\*) -o $(.TARGET) $(.FIRSTSRC)
198	@$(COPY) "$(.FIRSTSRC)" "tmp\\backup\\$(.FIRSTSRC)"
199
200$(ALLCOBJ): $(.TARGET:*-static.o=*.o:tmp\\object\\*.o=*.c:I)
201	$(CC) -c $(CFLAGS) $(.TARGET::*-static.o=>-DSTATIC_ICONV:U) -o $(.TARGET) $(.FIRSTSRC)
202	@$(COPY) "$(.FIRSTSRC)" "tmp\\backup\\$(.FIRSTSRC)"
203
204$(INTERNALCXXOBJ): $(.TARGET:*-internal.o=*.o:tmp\\object\\*.o=*.c++:I:src\\sswf\\sswf_grammar.h=tmp\\object\\src\\sswf\\sswf_grammar.h)
205	$(CXX) -c $(CXXFLAGS) -DSSWF_INTERNAL_ASC=1 $(.TARGET::*-internal.o=>-DSTATIC_ICONV:U) -I$(.TARGET:tmp\\object\\*\\*\\*.o=tmp\\object\\*\\*) -o $(.TARGET) $(.FIRSTSRC)
206	@$(COPY) "$(.FIRSTSRC)" "tmp\\backup\\$(.FIRSTSRC)"
207
208$(INTERNALCOBJ): $(.TARGET:*-internal.o=*.o:tmp\\object\\*.o=*.c:I)
209	$(CC) -c $(CFLAGS) -DSSWF_INTERNAL_ASC=1 $(.TARGET::*-internal.o=>-DSTATIC_ICONV:U) -o $(.TARGET) $(.FIRSTSRC)
210	@$(COPY) "$(.FIRSTSRC)" "tmp\\backup\\$(.FIRSTSRC)"
211
212
213
214
215
216
217tmp/object/src/sswf/%.o: tmp/object/src/sswf/%.c
218	$(CC) -c $(CFLAGS) -Isrc/sswf -o $(.TARGET) $(.IMPSRC)
219
220tmp/object/src/sswf/%-static.o: tmp/object/src/sswf/%.c
221	$(CC) -c $(CFLAGS) -DSTATIC_ICONV -Isrc/sswf -o $(.TARGET) $(.IMPSRC)
222
223tmp/object/src/sswf/%-internal.o: tmp/object/src/sswf/%.c
224	$(CC) -c $(CFLAGS) -DSSWF_INTERNAL_ASC=1 -DSTATIC_ICONV -Isrc/sswf -o $(.TARGET) $(.IMPSRC)
225
226tmp/object/src/sswf/%.c tmp/object/src/sswf/%.h: src/sswf/%.y $(.TARGET:tmp/object/*.c=*.y:-I) .PRECIOUS
227	$(BISON) -v -d $(YFLAGS) -b $(.TARGET:R) $(.IMPSRC) -o $(.TARGET:*.h=*.c)
228	@$(COPY) "$(.IMPSRC)" "tmp\\backup\\$(.IMPSRC)"
229
230
231#for sample in $(SAMPLES)
232$(sample): sswf.exe
233	cd samples\$(sample) & run
234#endfor
235
236samples: $(SAMPLES)
237	@echo Samples built successfully
238
239
240TOPACK_BIN:=bin\asc.exe bin\ft2sswf.exe bin\jpg2swf.exe bin\sswf.exe bin\swf_dump.exe
241TOPACK_LIB:=lib\libsswf.a lib\libsswf_as.a lib\libsswf_asas.a lib\libsswf_asc.a \
242	include\sswf\libsswf.h include\sswf\libsswf_c.h \
243	include\sswf\libsswf_as.h include\sswf\libsswf_asas.h include\sswf\libsswf_asc.h \
244	include\sswf\libsswf-version.h include\sswf\libsswf-config.h
245TOPACK_GRM:=VC\sswf_grammar.h VC\sswf_grammar.c
246TOPACK_ASIS:=VC\sswf_grammar.h VC\sswf_grammar.c $(SAMPLES:*=samples/*/run.bat)
247
248INCLUDES:=$(wildcard */*/*.h)
249TOPACK_SRC:=$(ALLSRC) $(INCLUDES) \
250		misc\sswf.vim misc\xswf.vim doc\CHANGES.txt dosamakefile
251
252MOD_PATH:=modules
253
254DST:=arch
255DST_DLL:=$(DST)\\mingw
256DST_STATIC:=$(DST)\\win32
257DST_SRC:=$(DST)\\mingw-3.3
258
259new_grammar: tmp\object\src\sswf\sswf_grammar.h tmp\object\src\sswf\sswf_grammar.c .PHONY
260	$(COPY) tmp\object\src\sswf\sswf_grammar.h VC\sswf_grammar.h
261	$(COPY) tmp\object\src\sswf\sswf_grammar.c VC\sswf_grammar.c
262
263
264tar packages: new_grammar $(TOPACK_BIN) $(TOPACK_BIN:*.exe=*-static.exe) bin\sswf-internal.exe \
265		$(TOPACK_LIB) $(TOPACK_LIB::*.a=*-static.a) .PHONY
266	-$(RMDIR) $(DST) 2>ignore.tmp
267	-$(RMDIR) $(MOD_PATH) 2>ignore.tmp
268	$(MKDIR) $(MOD_PATH)
269	REM
270	REM Create the archive with the dynamically compiled binaries (need .dll)
271	REM
272	$(MKDIR) $(DST_DLL)\bin
273	$(MKDIR) $(DST_DLL)\lib
274	$(MKDIR) $(DST_DLL)\include\sswf
275	strip $(TOPACK_BIN)
276	$(subst ",,$(TOPACK_BIN:*.exe=$(COPY) *.exe $(DST_DLL)\\[1]*.exe &))
277	$(subst ",,$(TOPACK_LIB:*.*=$(COPY) *.* $(DST_DLL)\\[1]*.* &))
278	tar cf tmp.tar $(DST_DLL:*\\\\*=*/*)
279	bzip2 -c9 tmp.tar >$(MOD_PATH)\$(DST_DLL:arch\\*=*)-$(VERSION)-bin.tar.bz2
280	REM
281	REM Create the archive with the static compiled binaries (don't need the .dll's)
282	REM
283	$(MKDIR) $(DST_STATIC)\bin
284	$(MKDIR) $(DST_STATIC)\lib
285	$(MKDIR) $(DST_STATIC)\installer
286	$(MKDIR) $(DST_STATIC)\include\sswf
287	$(MKDIR) $(DST_STATIC)\VC
288	strip $(TOPACK_BIN:*.exe=*-static.exe)
289	$(subst ",,$(TOPACK_BIN:*.exe=$(COPY) *-static.exe $(DST_STATIC)\\[1]*.exe &))
290	$(COPY) bin\sswf-internal.exe arch\win32\bin\sswf-internal.exe
291	$(subst ",,$(TOPACK_LIB:*.a=*-static.a:*.*=$(COPY) *.* $(DST_STATIC)\\[1]*.* &))
292	$(subst ",,$(TOPACK_GRM:*.*=$(COPY) *.* $(DST_STATIC)\\[1]*.* &))
293	makensis sswf-win32.nsi
294	mv sswf-$(VERSION)-win32-i686.exe $(DST_STATIC)/installer
295	tar cf tmp.tar $(DST_STATIC:*\\\\*=*/*)
296	bzip2 -c9 tmp.tar >$(MOD_PATH)\$(DST_STATIC:arch\\*=*)-$(VERSION)-bin.tar.bz2
297	REM
298	REM Create an archive with the source so we get the changes if any
299	REM
300	$(MKDIR) $(DST_SRC)\src\lib
301	$(MKDIR) $(DST_SRC)\src\libas
302	$(MKDIR) $(DST_SRC)\src\libasas
303	$(MKDIR) $(DST_SRC)\src\libasc
304	$(MKDIR) $(DST_SRC)\src\misc
305	$(MKDIR) $(DST_SRC)\src\sswf
306	$(MKDIR) $(DST_SRC)\src\tools
307	$(MKDIR) $(DST_SRC)\include\sswf
308	$(MKDIR) $(DST_SRC)\doc
309	$(MKDIR) $(DST_SRC)\misc
310	$(subst ",,$(TOPACK_SRC:*=$(COPY) * $(DST_SRC)\\[1]* &))
311	tar cf tmp.tar $(DST_SRC:*\\\\*=*/*) $(TOPACK_ASIS:*\\*\\*=*/*/*)
312	bzip2 -c9 tmp.tar >$(MOD_PATH)\$(DST_SRC:arch\\*=*)_sswf-$(VERSION)-src.tar.bz2
313	REM
314	REM Cleanup
315	REM
316	-$(RMDIR) $(DST)
317	-$(RM) tmp.tar
318
319LFWGE=$(wildcard *.c++)
320to_vc:
321	$(subst ",,$(LFWGE:*.c++=$(RENAME) *.c++ [1]*.cpp &))
322
323LFWBE=$(wildcard *.cpp)
324to_gcc:
325	$(subst ",,$(LFWBE:*.cpp=$(RENAME) *.cpp [1]*.c++ &)
326
327
328
329clobber: rmtarget .PHONY
330	-$(RMDIR) tmp 2>ignore.tmp
331	-$(RM) .amakeautodepend
332	@echo "Output packages not removed with amake clobber"
333
334clean cleaup: rmtarget .PHONY
335	-$(RMDIR) tmp/object 2>ignore.tmp
336
337rmtarget: .PHONY
338	-$(RMDIR) lib bin 2>ignore.tmp
339	-$(RM) core 2>ignore.tmp
340
341
342