1 ifeq "$(SOURCE_PATH)" ""
7 ifeq "$(BUILD_PATH)" ""
12 # specific stuff for mingw g++ make
16 -I. -Igenerators -Igenerators/unix \
17 -Igenerators/win32 -Igenerators/mac \
18 -I$(BUILD_PATH)/include -I$(BUILD_PATH)/include/QtCore \
19 -I$(SOURCE_PATH)/include -I$(SOURCE_PATH)/include/QtCore \
20 -I$(BUILD_PATH)/src/corelib/global \
21 -I$(BUILD_PATH)/include/QtScript \
22 -I$(SOURCE_PATH)/mkspecs/win32-g++ \
23 -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_LITE_COMPONENT -DQT_NO_PCRE \
24 -DQT_NODLL -DQT_NO_STL -DQT_NO_COMPRESS -DUNICODE -DHAVE_QCONFIG_CPP \
25 -DQT_BUILD_QMAKE -DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DATASTREAM
29 LINKQMAKE = g++ $(LFLAGS) -o qmake.exe $(OBJS) $(QTOBJS) $(LIBS)
34 OBJS = project.o main.o makefile.o unixmake.o unixmake2.o mingw_make.o \
35 option.o winmakefile.o projectgenerator.o property.o meta.o \
36 makefiledeps.o metamakefile.o xmloutput.o pbuilder_pbx.o \
37 borland_bmake.o msvc_nmake.o msvc_dsp.o msvc_vcproj.o \
40 ifdef QMAKE_OPENSOURCE_EDITION
41 CFLAGS += -DQMAKE_OPENSOURCE_EDITION
49 qcryptographichash.o \
59 qabstractfileengine.o \
61 qfsfileengine_iterator.o \
63 qfsfileengine_iterator_win.o \
92 qscriptecmaboolean.o \
95 qscriptecmafunction.o \
100 qscriptecmaregexp.o \
101 qscriptecmastring.o \
106 qscriptengineagent.o \
107 qscriptextenumeration.o \
108 qscriptextvariant.o \
110 qscriptcontextinfo.o \
116 qscriptprettypretty.o \
117 qscriptsyntaxchecker.o \
119 qscriptclasspropertyiterator.o \
123 qscriptvalueiterator.o \
124 qscriptvalueiteratorimpl.o
127 qmake.exe: $(OBJS) $(QTOBJS)
129 -copy qmake.exe $(BUILD_PATH)\bin\qmake.exe
131 Makefile: Makefile.win32-g++
132 @echo "Out of date, please rerun configure"
135 -del $(OBJS) $(QTOBJS) $(ADDCLEAN)
144 $(CXX) $(CXXFLAGS) $<
146 qconfig.o: $(BUILD_PATH)/src/corelib/global/qconfig.cpp
147 $(CXX) $(CXXFLAGS) $(BUILD_PATH)/src/corelib/global/qconfig.cpp
149 qsettings_win.o: $(SOURCE_PATH)/src/corelib/io/qsettings_win.cpp
150 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qsettings_win.cpp
152 qsettings.o: $(SOURCE_PATH)/src/corelib/io/qsettings.cpp
153 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qsettings.cpp
155 qvariant.o: $(SOURCE_PATH)/src/corelib/kernel/qvariant.cpp
156 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/kernel/qvariant.cpp
158 qurl.o: $(SOURCE_PATH)/src/corelib/io/qurl.cpp
159 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qurl.cpp
161 qtextstream.o: $(SOURCE_PATH)/src/corelib/io/qtextstream.cpp
162 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qtextstream.cpp
164 qdatastream.o: $(SOURCE_PATH)/src/corelib/io/qdatastream.cpp
165 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qdatastream.cpp
167 qiodevice.o: $(SOURCE_PATH)/src/corelib/io/qiodevice.cpp
168 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qiodevice.cpp
170 qlibraryinfo.o: $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp
171 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp
173 qnumeric.o: $(SOURCE_PATH)/src/corelib/global/qnumeric.cpp
174 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/global/qnumeric.cpp
176 qmalloc.o: $(SOURCE_PATH)/src/corelib/global/qmalloc.cpp
177 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/global/qmalloc.cpp
179 qglobal.o: $(SOURCE_PATH)/src/corelib/global/qglobal.cpp
180 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/global/qglobal.cpp
182 qhash.o: $(SOURCE_PATH)/src/corelib/tools/qhash.cpp
183 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qhash.cpp
185 qbytearray.o: $(SOURCE_PATH)/src/corelib/tools/qbytearray.cpp
186 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qbytearray.cpp
188 qcryptographichash.o: $(SOURCE_PATH)/src/corelib/tools/qcryptographichash.cpp
189 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qcryptographichash.cpp
191 qvsnprintf.o: $(SOURCE_PATH)/src/corelib/tools/qvsnprintf.cpp
192 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qvsnprintf.cpp
194 qbytearraymatcher.o: $(SOURCE_PATH)/src/corelib/tools/qbytearraymatcher.cpp
195 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qbytearraymatcher.cpp
197 qutfcodec.o: $(SOURCE_PATH)/src/corelib/codecs/qutfcodec.cpp
198 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/codecs/qutfcodec.cpp
200 qstring.o: $(SOURCE_PATH)/src/corelib/tools/qstring.cpp
201 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qstring.cpp
203 qlocale.o: $(SOURCE_PATH)/src/corelib/tools/qlocale.cpp
204 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qlocale.cpp
206 quuid.o: $(SOURCE_PATH)/src/corelib/plugin/quuid.cpp
207 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/plugin/quuid.cpp
209 qbuffer.o: $(SOURCE_PATH)/src/corelib/io/qbuffer.cpp
210 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qbuffer.cpp
212 qlist.o: $(SOURCE_PATH)/src/corelib/tools/qlist.cpp
213 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qlist.cpp
215 qlinkedlist.o: $(SOURCE_PATH)/src/corelib/tools/qlinkedlist.cpp
216 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qlinkedlist.cpp
218 qfile.o: $(SOURCE_PATH)/src/corelib/io/qfile.cpp
219 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qfile.cpp
221 qtemporaryfile.o: $(SOURCE_PATH)/src/corelib/io/qtemporaryfile.cpp
222 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qtemporaryfile.cpp
224 qabstractfileengine.o: $(SOURCE_PATH)/src/corelib/io/qabstractfileengine.cpp
225 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qabstractfileengine.cpp
227 qfsfileengine_win.o: $(SOURCE_PATH)/src/corelib/io/qfsfileengine_win.cpp
228 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qfsfileengine_win.cpp
230 qfsfileengine_iterator_win.o: $(SOURCE_PATH)/src/corelib/io/qfsfileengine_iterator_win.cpp
231 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qfsfileengine_iterator_win.cpp
233 qfsfileengine.o: $(SOURCE_PATH)/src/corelib/io/qfsfileengine.cpp
234 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qfsfileengine.cpp
236 qfsfileengine_iterator.o: $(SOURCE_PATH)/src/corelib/io/qfsfileengine_iterator.cpp
237 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qfsfileengine_iterator.cpp
239 qtextcodec.o: $(SOURCE_PATH)/src/corelib/codecs/qtextcodec.cpp
240 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/codecs/qtextcodec.cpp
242 qregexp.o: $(SOURCE_PATH)/src/corelib/tools/qregexp.cpp
243 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qregexp.cpp
245 qvector.o: $(SOURCE_PATH)/src/corelib/tools/qvector.cpp
246 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qvector.cpp
248 qbitarray.o: $(SOURCE_PATH)/src/corelib/tools/qbitarray.cpp
249 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qbitarray.cpp
251 qdir.o: $(SOURCE_PATH)/src/corelib/io/qdir.cpp
252 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qdir.cpp
254 qdiriterator.o: $(SOURCE_PATH)/src/corelib/io/qdiriterator.cpp
255 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qdiriterator.cpp
257 qmetatype.o: $(SOURCE_PATH)/src/corelib/kernel/qmetatype.cpp
258 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/kernel/qmetatype.cpp
260 qfileinfo.o: $(SOURCE_PATH)/src/corelib/io/qfileinfo.cpp
261 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qfileinfo.cpp
263 qdatetime.o: $(SOURCE_PATH)/src/corelib/tools/qdatetime.cpp
264 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qdatetime.cpp
266 qstringlist.o: $(SOURCE_PATH)/src/corelib/tools/qstringlist.cpp
267 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qstringlist.cpp
269 qmap.o: $(SOURCE_PATH)/src/corelib/tools/qmap.cpp
270 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qmap.cpp
272 makefile.o: $(SOURCE_PATH)/qmake/generators/makefile.cpp
273 $(CXX) $(CXXFLAGS) generators/makefile.cpp
275 unixmake.o: $(SOURCE_PATH)/qmake/generators/unix/unixmake.cpp
276 $(CXX) $(CXXFLAGS) generators/unix/unixmake.cpp
278 unixmake2.o: $(SOURCE_PATH)/qmake/generators/unix/unixmake2.cpp
279 $(CXX) $(CXXFLAGS) generators/unix/unixmake2.cpp
281 winmakefile.o: $(SOURCE_PATH)/qmake/generators/win32/winmakefile.cpp
282 $(CXX) $(CXXFLAGS) generators/win32/winmakefile.cpp
284 borland_bmake.o: $(SOURCE_PATH)/qmake/generators/win32/borland_bmake.cpp
285 $(CXX) $(CXXFLAGS) generators/win32/borland_bmake.cpp
287 mingw_make.o: $(SOURCE_PATH)/qmake/generators/win32/mingw_make.cpp
288 $(CXX) $(CXXFLAGS) generators/win32/mingw_make.cpp
290 msvc_nmake.o: $(SOURCE_PATH)/qmake/generators/win32/msvc_nmake.cpp
291 $(CXX) $(CXXFLAGS) generators/win32/msvc_nmake.cpp
293 msvc_dsp.o: $(SOURCE_PATH)/qmake/generators/win32/msvc_dsp.cpp
294 $(CXX) $(CXXFLAGS) generators/win32/msvc_dsp.cpp
296 msvc_vcproj.o: $(SOURCE_PATH)/qmake/generators/win32/msvc_vcproj.cpp
297 $(CXX) $(CXXFLAGS) generators/win32/msvc_vcproj.cpp
299 msvc_objectmodel.o: $(SOURCE_PATH)/qmake/generators/win32/msvc_objectmodel.cpp
300 $(CXX) $(CXXFLAGS) generators/win32/msvc_objectmodel.cpp
302 project.o: $(SOURCE_PATH)/qmake/project.cpp $(SOURCE_PATH)/qmake/project.h $(SOURCE_PATH)/qmake/option.h
303 $(CXX) $(CXXFLAGS) project.cpp
305 meta.o: $(SOURCE_PATH)/qmake/meta.cpp $(SOURCE_PATH)/qmake/project.h $(SOURCE_PATH)/qmake/option.h
306 $(CXX) $(CXXFLAGS) meta.cpp
308 main.o: $(SOURCE_PATH)/qmake/main.cpp $(SOURCE_PATH)/qmake/project.h
309 $(CXX) $(CXXFLAGS) main.cpp
311 option.o: $(SOURCE_PATH)/qmake/option.cpp $(SOURCE_PATH)/qmake/option.h
312 $(CXX) $(CXXFLAGS) option.cpp
314 property.o: $(SOURCE_PATH)/qmake/property.cpp $(SOURCE_PATH)/qmake/project.h $(SOURCE_PATH)/qmake/option.h
315 $(CXX) $(CXXFLAGS) property.cpp
317 projectgenerator.o: $(SOURCE_PATH)/qmake/generators/projectgenerator.cpp
318 $(CXX) $(CXXFLAGS) generators/projectgenerator.cpp
320 pbuilder_pbx.o: $(SOURCE_PATH)/qmake/generators/mac/pbuilder_pbx.cpp
321 $(CXX) $(CXXFLAGS) generators/mac/pbuilder_pbx.cpp
323 makefiledeps.o: $(SOURCE_PATH)/qmake/generators/makefiledeps.cpp
324 $(CXX) $(CXXFLAGS) generators/makefiledeps.cpp
326 metamakefile.o: $(SOURCE_PATH)/qmake/generators/metamakefile.cpp
327 $(CXX) $(CXXFLAGS) generators/metamakefile.cpp
329 xmloutput.o: $(SOURCE_PATH)/qmake/generators/xmloutput.cpp
330 $(CXX) $(CXXFLAGS) generators/xmloutput.cpp
332 qscriptasm.o: $(SOURCE_PATH)\src\script\qscriptasm.cpp
333 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\script\qscriptasm.cpp
335 qscriptast.o: $(SOURCE_PATH)\src\script\qscriptast.cpp
336 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\script\qscriptast.cpp
338 qscriptastvisitor.o: $(SOURCE_PATH)\src\script\qscriptastvisitor.cpp
339 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\script\qscriptastvisitor.cpp
341 qscriptcompiler.o: $(SOURCE_PATH)\src\script\qscriptcompiler.cpp
342 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\script\qscriptcompiler.cpp
344 qscriptecmaarray.o: $(SOURCE_PATH)\src\script\qscriptecmaarray.cpp
345 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\script\qscriptecmaarray.cpp
347 qscriptecmaboolean.o: $(SOURCE_PATH)/src/script/qscriptecmaboolean.cpp
348 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptecmaboolean.cpp
350 qscriptecmacore.o: $(SOURCE_PATH)/src/script/qscriptecmacore.cpp
351 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptecmacore.cpp
353 qscriptecmadate.o: $(SOURCE_PATH)/src/script/qscriptecmadate.cpp
354 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptecmadate.cpp
356 qscriptecmafunction.o: $(SOURCE_PATH)/src/script/qscriptecmafunction.cpp
357 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptecmafunction.cpp
359 qscriptecmaglobal.o: $(SOURCE_PATH)/src/script/qscriptecmaglobal.cpp
360 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptecmaglobal.cpp
362 qscriptecmamath.o: $(SOURCE_PATH)/src/script/qscriptecmamath.cpp
363 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptecmamath.cpp
365 qscriptecmanumber.o: $(SOURCE_PATH)/src/script/qscriptecmanumber.cpp
366 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptecmanumber.cpp
368 qscriptecmaobject.o: $(SOURCE_PATH)/src/script/qscriptecmaobject.cpp
369 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptecmaobject.cpp
371 qscriptecmaregexp.o: $(SOURCE_PATH)/src/script/qscriptecmaregexp.cpp
372 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptecmaregexp.cpp
374 qscriptecmastring.o: $(SOURCE_PATH)/src/script/qscriptecmastring.cpp
375 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptecmastring.cpp
377 qscriptecmaerror.o: $(SOURCE_PATH)/src/script/qscriptecmaerror.cpp
378 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptecmaerror.cpp
380 qscriptcontext_p.o: $(SOURCE_PATH)/src/script/qscriptcontext_p.cpp
381 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptcontext_p.cpp
383 qscriptengine.o: $(SOURCE_PATH)/src/script/qscriptengine.cpp
384 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptengine.cpp
386 qscriptengine_p.o: $(SOURCE_PATH)/src/script/qscriptengine_p.cpp
387 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptengine_p.cpp
389 qscriptengineagent.o: $(SOURCE_PATH)/src/script/qscriptengineagent.cpp
390 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptengineagent.cpp
392 qscriptextenumeration.o: $(SOURCE_PATH)/src/script/qscriptextenumeration.cpp
393 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptextenumeration.cpp
395 qscriptextvariant.o: $(SOURCE_PATH)/src/script/qscriptextvariant.cpp
396 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptextvariant.cpp
398 qscriptcontext.o: $(SOURCE_PATH)/src/script/qscriptcontext.cpp
399 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptcontext.cpp
401 qscriptcontextinfo.o: $(SOURCE_PATH)/src/script/qscriptcontextinfo.cpp
402 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptcontextinfo.cpp
404 qscriptfunction.o: $(SOURCE_PATH)/src/script/qscriptfunction.cpp
405 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptfunction.cpp
407 qscriptgrammar.o: $(SOURCE_PATH)/src/script/qscriptgrammar.cpp
408 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptgrammar.cpp
410 qscriptlexer.o: $(SOURCE_PATH)/src/script/qscriptlexer.cpp
411 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptlexer.cpp
413 qscriptclassdata.o: $(SOURCE_PATH)/src/script/qscriptclassdata.cpp
414 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptclassdata.cpp
416 qscriptparser.o: $(SOURCE_PATH)/src/script/qscriptparser.cpp
417 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptparser.cpp
419 qscriptprettypretty.o: $(SOURCE_PATH)/src/script/qscriptprettypretty.cpp
420 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptprettypretty.cpp
422 qscriptsyntaxchecker.o: $(SOURCE_PATH)/src/script/qscriptsyntaxchecker.cpp
423 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptsyntaxchecker.cpp
425 qscriptclass.o: $(SOURCE_PATH)/src/script/qscriptclass.cpp
426 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptclass.cpp
428 qscriptclasspropertyiterator.o: $(SOURCE_PATH)/src/script/qscriptclasspropertyiterator.cpp
429 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptclasspropertyiterator.cpp
431 qscriptstring.o: $(SOURCE_PATH)/src/script/qscriptstring.cpp
432 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptstring.cpp
434 qscriptvalue.o: $(SOURCE_PATH)/src/script/qscriptvalue.cpp
435 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptvalue.cpp
437 qscriptvalueimpl.o: $(SOURCE_PATH)/src/script/qscriptvalueimpl.cpp
438 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptvalueimpl.cpp
440 qscriptvalueiterator.o: $(SOURCE_PATH)/src/script/qscriptvalueiterator.cpp
441 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptvalueiterator.cpp
443 qscriptvalueiteratorimpl.o: $(SOURCE_PATH)/src/script/qscriptvalueiteratorimpl.cpp
444 $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/script/qscriptvalueiteratorimpl.cpp