!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            = xilink
CFLAGS_EXTRA      = /Zc:forScope /Qstd=c++11
!elseif "$(QMAKESPEC)" == "win32-clang-msvc"
CXX               = clang-cl
LINKER            = lld-link
CFLAGS_EXTRA      = -fms-compatibility-version=19.00.23506 -Wno-microsoft-enum-value
!else
CXX               = cl
LINKER            = link
CFLAGS_EXTRA      = /MP /wd4577 $(CFLAGS_CRT)
!endif  # !win32-icc

CFLAGS_PCH        = -Yuqmake_pch.h -FIqmake_pch.h -Fpqmake_pch.pch
PCH_OBJECT        = qmake_pch.obj

CFLAGS_BARE = -c -Fo./ -Fdqmake.pdb \
              -W2 -nologo -O2 \
              $(CFLAGS_EXTRA) \
              -I$(QMKSRC) -I$(QMKSRC)\library -I$(QMKSRC)\generators -I$(QMKSRC)\generators\unix -I$(QMKSRC)\generators\win32 -I$(QMKSRC)\generators\mac \
              -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 \
              -I$(SOURCE_PATH)\mkspecs\$(QMAKESPEC)  \
              -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS \
              -DQT_VERSION_STR=\"$(QT_VERSION)\" -DQT_VERSION_MAJOR=$(QT_MAJOR_VERSION) -DQT_VERSION_MINOR=$(QT_MINOR_VERSION) -DQT_VERSION_PATCH=$(QT_PATCH_VERSION) \
              -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL \
              -DQT_NO_FOREACH -DUNICODE -D_ENABLE_EXTENDED_ALIGNED_STORAGE
CFLAGS   = $(CFLAGS_PCH) $(CFLAGS_BARE) $(CFLAGS)

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

LFLAGS	    =
LIBS        = ole32.lib advapi32.lib shell32.lib netapi32.lib
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

#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 \
	qbytearraylist.obj \
	qvsnprintf.obj \
	qbytearraymatcher.obj \
	qcalendar.obj \
	qdatetime.obj \
	qdir.obj \
	qdiriterator.obj \
	qfiledevice.obj \
	qfile.obj \
	qtemporaryfile.obj \
	qabstractfileengine.obj \
	qfsfileengine_win.obj \
	qsystemlibrary.obj \
	qfileinfo.obj \
	qendian.obj \
	qglobal.obj \
	qgregoriancalendar.obj \
	qhash.obj \
	qiodevice.obj \
	qringbuffer.obj \
	qdebug.obj \
	qlist.obj \
	qlocale.obj \
	qlocale_tools.obj \
	qlocale_win.obj \
	qversionnumber.obj \
	qmalloc.obj \
	qmap.obj \
	qoperatingsystemversion.obj \
	qoperatingsystemversion_win.obj \
	qregexp.obj \
	qromancalendar.obj \
	qutfcodec.obj \
	qstring.obj \
	qstringlist.obj \
	qstringbuilder.obj \
	qsystemerror.obj \
	qtextstream.obj \
	qdatastream.obj \
	quuid.obj \
	qrandom.obj \
	qsettings.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: $(BUILD_PATH)\bin\qmake.exe
binary: $(BUILD_PATH)\qmake\qmake.exe

$(BUILD_PATH)\bin\qmake.exe: $(OBJS) $(QTOBJS) qlibraryinfo.obj
	$(LINKER) $(LFLAGS) /OUT:$(BUILD_PATH)\bin\qmake.exe $(OBJS) $(QTOBJS) qlibraryinfo.obj $(PCH_OBJECT) $(LIBS)

$(BUILD_PATH)\qmake\qmake.exe: $(OBJS) $(QTOBJS) qlibraryinfo_final.obj
	$(LINKER) $(LFLAGS) /OUT:$(BUILD_PATH)\qmake\qmake.exe $(OBJS) $(QTOBJS) qlibraryinfo_final.obj $(PCH_OBJECT) $(LIBS)

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

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

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

$(OBJS): $(PCH_OBJECT)

$(QTOBJS): $(PCH_OBJECT)

qlibraryinfo.obj: $(PCH_OBJECT)
qlibraryinfo_final.obj: $(PCH_OBJECT)

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\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\serialization}.cpp{}.obj::
	$(CXX) $(CXXFLAGS) $<

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

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

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

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

qlibraryinfo_final.obj: $(SOURCE_PATH)\src\corelib\global\qlibraryinfo.cpp $(BUILD_PATH)\src\corelib\global\qconfig.cpp
	$(CXX) $(CXXFLAGS) -Foqlibraryinfo_final.obj $(SOURCE_PATH)\src\corelib\global\qlibraryinfo.cpp
