!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$(SOURCE_PATH)/src/3rdparty/tinycbor/src \
              -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 \
	qcborstreamwriter.obj \
	qcborvalue.obj \
	qjsoncbor.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
