!if "$(SOURCE_PATH)" == ""
SOURCE_PATH = ..
!endif
!if "$(BUILD_PATH)" == ""
BUILD_PATH = ..
!endif

QMKSRC = $(SOURCE_PATH)\qmake

#
# per-compiler options
#
!if "$(QMAKESPEC)" == "win32-icc"
CXX               = icl
LINKER            = link
CFLAGS_EXTRA      = /Zc:forScope
!else
CXX               = cl
LINKER            = link
!  if "$(QMAKESPEC)" == "win32-msvc2005"
CFLAGS_EXTRA      = /Zc:wchar_t-
!  elseif "$(QMAKESPEC)" == "win32-msvc2008" || "$(QMAKESPEC)" == "win32-msvc2010" || "$(QMAKESPEC)" == "win32-msvc2012" || "$(QMAKESPEC)" == "win32-msvc2013"
CFLAGS_EXTRA      = /MP /D_CRT_SECURE_NO_WARNINGS /D_SCL_SECURE_NO_WARNINGS $(CFLAGS_CRT)
!  elseif "$(QMAKESPEC)" == "win32-msvc2015"
CFLAGS_EXTRA      = /MP /D_CRT_SECURE_NO_WARNINGS /D_SCL_SECURE_NO_WARNINGS /Zc:strictStrings /w44456 /w44457 /w44458 $(CFLAGS_CRT)
!  else
!    error Unsupported compiler for this Makefile
!  endif
!endif  # !win32-icc

CFLAGS_BARE = -c -Fo./ -Fdqmake.pdb \
              -W3 -nologo -O1 \
              $(CFLAGS_EXTRA) \
              -I$(QMKSRC) -I$(QMKSRC)\library -I$(QMKSRC)\generators -I$(QMKSRC)\generators\unix -I$(QMKSRC)\generators\win32 -I$(QMKSRC)\generators\mac -I$(QMKSRC)\generators\integrity \
              -I$(INC_PATH) -I$(INC_PATH)\QtCore -I$(INC_PATH)\QtCore\$(QT_VERSION) -I$(INC_PATH)\QtCore\$(QT_VERSION)\QtCore \
              -I$(BUILD_PATH)\src\corelib\global -DHAVE_QCONFIG_CPP \
              -I$(SOURCE_PATH)\mkspecs\$(QMAKESPEC)  \
              -I$(SOURCE_PATH)\tools\shared \
              -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL \
              -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_NO_COMPONENT -DQT_NO_COMPRESS \
              -DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DATASTREAM \
              -DUNICODE -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 -DQT_JSON_READONLY -DQT_NO_STANDARDPATHS
CFLAGS   = -Yuqmake_pch.h -FIqmake_pch.h -Fpqmake_pch.pch $(CFLAGS_BARE) $(CFLAGS)

CXXFLAGS_BARE = $(CFLAGS_BARE)
CXXFLAGS = $(CFLAGS)

LFLAGS	    =
LIBS	    = ole32.lib advapi32.lib shell32.lib
LINKQMAKE   = $(LINKER) $(LFLAGS) -OUT:qmake.exe $(OBJS) $(QTOBJS) $(LIBS)
ADDCLEAN    = qmake.pdb qmake.ilk

#qmake code
OBJS        = project.obj main.obj ioutils.obj proitems.obj qmakevfs.obj \
              qmakeglobals.obj qmakeparser.obj qmakeevaluator.obj qmakebuiltins.obj \
              makefile.obj unixmake.obj unixmake2.obj mingw_make.obj \
              option.obj winmakefile.obj projectgenerator.obj property.obj meta.obj \
              makefiledeps.obj metamakefile.obj xmloutput.obj \
              msvc_nmake.obj msvc_vcproj.obj msvc_vcxproj.obj \
              msvc_objectmodel.obj msbuild_objectmodel.obj registry.obj \
              cesdkhandler.obj

#qt code
QTOBJS= \
	qbitarray.obj \
	qbuffer.obj \
	qcryptographichash.obj \
	qfilesystementry.obj \
	qfilesystemengine.obj \
	qfilesystemengine_win.obj \
	qfilesystemiterator_win.obj \
	qfsfileengine.obj \
	qfsfileengine_iterator.obj \
	qarraydata.obj \
	qbytearray.obj \
	qvsnprintf.obj \
	qbytearraymatcher.obj \
	qdatetime.obj \
	qdir.obj \
	qdiriterator.obj \
	qfiledevice.obj \
	qfile.obj \
	qtemporaryfile.obj \
	qabstractfileengine.obj \
	qfsfileengine_win.obj \
	qsystemlibrary.obj \
	qfileinfo.obj \
	qglobal.obj \
	qhash.obj \
	qiodevice.obj \
	qdebug.obj \
	qlist.obj \
	qlinkedlist.obj \
	qlocale.obj \
	qlocale_tools.obj \
	qlocale_win.obj \
	qmalloc.obj \
	qmap.obj \
	qregexp.obj \
	qtextcodec.obj \
	qutfcodec.obj \
	qstring.obj \
	qstring_compat.obj \
	qstringlist.obj \
	qstringbuilder.obj \
	qsystemerror.obj \
	qtextstream.obj \
	qdatastream.obj \
	quuid.obj \
	qvector.obj \
	qsettings.obj \
	qlibraryinfo.obj \
	qvariant.obj \
	qsettings_win.obj \
	qmetatype.obj \
	qxmlstream.obj \
	qxmlutils.obj \
	qnumeric.obj \
	qlogging.obj \
	qjson.obj \
	qjsondocument.obj \
	qjsonparser.obj \
	qjsonarray.obj \
	qjsonobject.obj \
	qjsonvalue.obj

first all: qmake.exe

qmake.exe: $(OBJS) $(QTOBJS)
	$(LINKQMAKE) qmake_pch.obj
	-copy qmake.exe $(BUILD_PATH)\bin\qmake.exe

clean::
	-del $(QTOBJS)
	-del $(OBJS)
	-del qmake_pch.obj
	-del qmake_pch.pch
	-del qmake.pdb
	-del qmake.ilk
	-del qmake.tds

distclean:: clean
	-del qmake.exe
	-del $(BUILD_PATH)\bin\qmake.exe
	-del Makefile

.c.obj:
	$(CXX) $(CFLAGS) $<

.cpp.obj:
	$(CXX) $(CXXFLAGS) $<

.cc.obj:
	$(CXX) $(CXXFLAGS) $<

.cxx.obj:
	$(CXX) $(CXXFLAGS) $<

$(OBJS): qmake_pch.obj

$(QTOBJS): qmake_pch.obj

qlibraryinfo.obj: $(BUILD_PATH)\src\corelib\global\qconfig.cpp

qmake_pch.obj:
	$(CXX) $(CXXFLAGS_BARE) -c -Yc -Fpqmake_pch.pch -TP $(QMKSRC)\qmake_pch.h

{$(SOURCE_PATH)\qmake\library}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\qmake\generators\mac}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\qmake\generators\integrity}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\qmake\generators\unix}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\qmake\generators\win32}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\qmake\generators}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\qmake}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\src\3rdparty\md5}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\src\corelib\codecs}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\src\corelib\global}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\src\corelib\io}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\src\corelib\kernel}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\src\corelib\plugin}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\src\corelib\tools}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\src\corelib\xml}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\src\corelib\json}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

{$(SOURCE_PATH)\tools\shared\windows}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

# Make sure qstring_compat.obj isn't compiled with PCH enabled
qstring_compat.obj: $(SOURCE_PATH)\src\corelib\tools\qstring_compat.cpp
	$(CXX) -c $(CXXFLAGS_BARE) $(SOURCE_PATH)\src\corelib\tools\qstring_compat.cpp
