1#
2# Copyright 2008 Google Inc.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7# 
8# http://www.apache.org/licenses/LICENSE-2.0
9# 
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16# Microsoft Windows namke file which builds the cmockery library and example 
17# applications.
18#
19# To use this makefile...
20# Select Start->Run and run "cmd.exe" to open the command line.
21# Run "vsvars.bat" located in Microsoft Visual Studio's directory.
22# Run "nmake" to build the cmockery library and example applications.
23# Run "nmake clean" to delete all files built by this makefile.
24
25# Target directories.
26!IFNDEF EXECUTABLE_DIR
27EXECUTABLE_DIR=.
28!ENDIF # EXECUTABLE_DIR
29
30!IFNDEF LIBRARY_DIR
31LIBRARY_DIR=.
32!ENDIF # LIBRARY_DIR
33
34!IFNDEF INSTALL_DIR
35INSTALL_DIR=..\0_1_2
36!ENDIF # INSTALL_DIR
37
38!IFNDEF OBJECT_DIR
39OBJECT_DIR=.
40!ENDIF # OBJECT_DIR
41
42# Tools
43!IFNDEF LIBTOOL
44LIBTOOL=lib.exe
45!ENDIF # LIBTOOL
46
47!IFNDEF LINK
48LINK=link.exe
49!ENDIF # LINK
50
51# Source directories.
52LIBRARY_SOURCE_DIRECTORY=..\src
53EXAMPLE_SOURCE_DIRECTORY=..\src\example
54
55# Compiler flags and commands.
56CC_COMMAND=$(CC) /nologo /c /D_WIN32_WINNT=0x501 \
57	/I$(LIBRARY_SOURCE_DIRECTORY)\google $(CFLAGS) $(**) /Fo$(@)
58CC_COMMAND_UNIT_TEST=$(CC_COMMAND) /DUNIT_TESTING=1 \
59	/I$(EXAMPLE_SOURCE_DIRECTORY)
60
61LIBLINKFLAGS=/NOLOGO
62
63# Library archiver flags and command.
64LIB_COMMAND=$(LIBTOOL) $(LIBLINKFLAGS) $(LIBFLAGS) $(**) /OUT:$(@)
65
66# Linker flags and command. 
67LINK_COMMAND=$(LINK) $(LIBLINKFLAGS) /SUBSYSTEM:console \
68	libcmt.lib kernel32.lib /NODEFAULTLIB:libc.lib \
69	$(LFLAGS) $(**) /OUT:$(@)
70
71.SUFFIXES: .exe .lib .obj .c
72
73all: $(EXECUTABLE_DIR) $(LIBRARY_DIR) $(OBJECT_DIR) \
74	$(LIBRARY_DIR)\cmockery.lib examples
75
76$(EXECUTABLE_DIR):
77	mkdir $@
78
79!IF "$(LIBRARY_DIR)" != "$(EXECUTABLE_DIR)"
80$(LIBRARY_DIR):
81	mkdir $*
82!ENDIF
83
84!IF "$(OBJECT_DIR)" != "$(LIBRARY_DIR)" && \
85	"$(OBJECT_DIR)" != "$(EXECUTABLE_DIR)"
86$(OBJECT_DIR):
87	mkdir $@
88!ENDIF
89
90examples: \
91	$(EXECUTABLE_DIR)\calculator.exe \
92	$(EXECUTABLE_DIR)\calculator_test.exe \
93	$(EXECUTABLE_DIR)\allocate_module_test.exe \
94	$(EXECUTABLE_DIR)\assert_macro_test.exe \
95	$(EXECUTABLE_DIR)\customer_database_test.exe \
96	$(EXECUTABLE_DIR)\key_value_test.exe \
97	$(EXECUTABLE_DIR)\product_database_test.exe \
98	$(EXECUTABLE_DIR)\run_tests.exe
99
100install:
101	mkdir -p $(INSTALL_DIR)\lib
102	mkdir -p $(INSTALL_DIR)\include\google
103	cp -f $(LIBRARY_DIR)\cmockery.lib $(INSTALL_DIR)\lib
104	cp -f $(LIBRARY_SOURCE_DIRECTORY)\google\cmockery.h $(INSTALL_DIR)\include\google
105
106clean:
107	-cmd /c "@for %A in (\
108		$(LIBRARY_DIR)\cmockery.lib \
109			$(OBJECT_DIR)\cmockery.obj \
110		$(EXECUTABLE_DIR)\calculator.exe \
111			$(OBJECT_DIR)\calculator.obj \
112		$(EXECUTABLE_DIR)\calculator_test.exe \
113			$(OBJECT_DIR)\calculator_test.obj \
114			$(OBJECT_DIR)\calculator_test-calculator.obj \
115		$(EXECUTABLE_DIR)\allocate_module_test.exe \
116			$(OBJECT_DIR)\allocate_module_test.obj \
117			$(OBJECT_DIR)\allocate_module.obj \
118		$(EXECUTABLE_DIR)\assert_macro_test.exe \
119			$(OBJECT_DIR)\assert_macro_test.obj \
120			$(OBJECT_DIR)\assert_macro.obj \
121		$(EXECUTABLE_DIR)\customer_database_test.exe \
122			$(OBJECT_DIR)\customer_database_test.obj \
123			$(OBJECT_DIR)\customer_database.obj \
124		$(EXECUTABLE_DIR)\key_value_test.exe \
125			$(OBJECT_DIR)\key_value_test.obj \
126			$(OBJECT_DIR)\key_value.obj \
127		$(EXECUTABLE_DIR)\product_database_test.exe \
128			$(OBJECT_DIR)\product_database_test.obj \
129			$(OBJECT_DIR)\product_database.obj \
130		$(EXECUTABLE_DIR)\run_tests.exe \
131			$(OBJECT_DIR)\run_tests.obj) do @del %A 2>NUL"
132	-rmdir $(EXECUTABLE_DIR) $(OBJECT_DIR) $(LIBRARY_DIR) 2>NUL
133
134# Rules for the cmockery library.
135$(LIBRARY_DIR)\cmockery.lib: $(OBJECT_DIR)\cmockery.obj
136$(OBJECT_DIR)\cmockery.obj: $(LIBRARY_SOURCE_DIRECTORY)\cmockery.c
137
138# Rules for the calculator application.
139$(EXECUTABLE_DIR)\calculator.exe: $(OBJECT_DIR)\calculator.obj
140
141$(OBJECT_DIR)\calculator.obj: $(EXAMPLE_SOURCE_DIRECTORY)\calculator.c
142	$(CC_COMMAND)
143
144# Rules for the calculator test application.
145$(EXECUTABLE_DIR)\calculator_test.exe: \
146		$(OBJECT_DIR)\calculator_test.obj \
147		$(OBJECT_DIR)\calculator_test-calculator.obj \
148		$(LIBRARY_DIR)\cmockery.lib
149	$(LINK_COMMAND)
150
151$(OBJECT_DIR)\calculator_test.obj: \
152	$(EXAMPLE_SOURCE_DIRECTORY)\calculator_test.c
153
154$(OBJECT_DIR)\calculator_test-calculator.obj: \
155	$(EXAMPLE_SOURCE_DIRECTORY)\calculator.c
156	$(CC_COMMAND_UNIT_TEST)
157
158# Sample code applications.
159$(EXECUTABLE_DIR)\allocate_module_test.exe: \
160		$(OBJECT_DIR)\allocate_module_test.obj \
161		$(OBJECT_DIR)\allocate_module.obj \
162		$(LIBRARY_DIR)\cmockery.lib
163	$(LINK_COMMAND)
164
165$(OBJECT_DIR)\allocate_module_test.obj: \
166	$(EXAMPLE_SOURCE_DIRECTORY)\allocate_module_test.c
167$(OBJECT_DIR)\allocate_module.obj: \
168	$(EXAMPLE_SOURCE_DIRECTORY)\allocate_module.c
169
170$(EXECUTABLE_DIR)\assert_macro_test.exe: \
171		$(OBJECT_DIR)\assert_macro_test.obj \
172		$(OBJECT_DIR)\assert_macro.obj \
173		$(LIBRARY_DIR)\cmockery.lib
174	$(LINK_COMMAND)
175
176$(OBJECT_DIR)\assert_macro_test.obj: \
177	$(EXAMPLE_SOURCE_DIRECTORY)\assert_macro_test.c
178$(OBJECT_DIR)\assert_macro.obj: $(EXAMPLE_SOURCE_DIRECTORY)\assert_macro.c
179
180$(EXECUTABLE_DIR)\customer_database_test.exe: \
181		$(OBJECT_DIR)\customer_database_test.obj \
182		$(OBJECT_DIR)\customer_database.obj \
183		$(LIBRARY_DIR)\cmockery.lib
184	$(LINK_COMMAND)
185
186$(OBJECT_DIR)\customer_database_test.obj: \
187	$(EXAMPLE_SOURCE_DIRECTORY)\customer_database_test.c
188$(OBJECT_DIR)\customer_database.obj: \
189	$(EXAMPLE_SOURCE_DIRECTORY)\customer_database.c
190
191$(EXECUTABLE_DIR)\key_value_test.exe: \
192		$(OBJECT_DIR)\key_value_test.obj \
193		$(OBJECT_DIR)\key_value.obj \
194		$(LIBRARY_DIR)\cmockery.lib
195	$(LINK_COMMAND)
196
197$(OBJECT_DIR)\key_value_test.obj: $(EXAMPLE_SOURCE_DIRECTORY)\key_value_test.c
198$(OBJECT_DIR)\key_value.obj: $(EXAMPLE_SOURCE_DIRECTORY)\key_value.c
199
200$(EXECUTABLE_DIR)\product_database_test.exe: \
201		$(OBJECT_DIR)\product_database_test.obj \
202		$(OBJECT_DIR)\product_database.obj \
203		$(LIBRARY_DIR)\cmockery.lib
204	$(LINK_COMMAND)
205
206$(OBJECT_DIR)\product_database_test.obj: \
207	$(EXAMPLE_SOURCE_DIRECTORY)\product_database_test.c
208$(OBJECT_DIR)\product_database.obj: \
209	$(EXAMPLE_SOURCE_DIRECTORY)\product_database.c
210
211$(EXECUTABLE_DIR)\run_tests.exe: \
212		$(OBJECT_DIR)\run_tests.obj $(LIBRARY_DIR)\cmockery.lib
213	$(LINK_COMMAND)
214
215$(OBJECT_DIR)\run_tests.obj: $(EXAMPLE_SOURCE_DIRECTORY)\run_tests.c
216
217# Inference rules.
218{$(OBJECT_DIR)\}.obj{$(EXECUTABLE_DIR)\}.exe:
219	$(LINK_COMMAND)
220
221{$(OBJECT_DIR)\}.obj{$(LIBRARY_DIR)\}.lib:
222	$(LIB_COMMAND)
223
224{$(LIBRARY_SOURCE_DIRECTORY)\}.c{$(OBJECT_DIR)\}.obj:
225	$(CC_COMMAND)
226
227{$(EXAMPLE_SOURCE_DIRECTORY)\}.c{$(OBJECT_DIR)\}.obj:
228	$(CC_COMMAND_UNIT_TEST)
229