# -*- makefile -*-
#
# :mode=makefile:tabSize=4:indentSize=4:noTabs=false:
# :folding=explicit:collapseFolds=1:
#
# Main Makefile for building the Qt library, examples and tutorial.
#
# Version for OS/2, Innotek GCC and GNU Make
#

FORCEDEP=
CONTINUEONERROR=-i

HAVE_4OS2 := $(shell echo %@eval[2 + 2])
ifneq (4,$(HAVE_4OS2))
HAVE_4OS2 :=
endif

ECHO_EMPTY := $(if $(HAVE_4OS2),@echo .,@echo.)

.PHONY: private_headers

all: symlinks src-qmake src-moc sub-src sub-tutorial sub-tools sub-examples
	$(ECHO_EMPTY)
	@echo The Qt library is now built in lib
	@echo The Qt examples are built in the directories in examples
	@echo The Qt tutorials are built in the directories in tutorial
	$(ECHO_EMPTY)
	@echo Note: be sure to set the environment variable QTDIR to point
	@echo       to here or to wherever you move these directories.
	$(ECHO_EMPTY)
	@echo Enjoy!   - the Trolltech team
	$(ECHO_EMPTY)

symlinks: .qmake.cache private_headers
#	syncqt

src-qmake: symlinks qmake\Makefile
	$(MAKE) -C qmake

src-moc: src-qmake src\moc\Makefile $(FORCEDEP)
	$(MAKE) -C src\moc

src\moc\Makefile:
	cd src\moc & qmake 	
	
sub-src: src-qmake src-moc .qmake.cache src\Makefile $(FORCEDEP)
	$(MAKE) -C src

src\Makefile:
	cd src & qmake 	
	
sub-tutorial: sub-src tutorial\Makefile $(FORCEDEP)
	$(MAKE) -C tutorial $(CONTINUEONERROR)

tutorial\Makefile:
	cd tutorial & qmake 	
	
sub-examples: sub-src sub-tools examples\Makefile $(FORCEDEP)
	$(MAKE) -C examples $(CONTINUEONERROR)

examples\Makefile:
	cd examples & qmake 	
	
## @todo (dmik): later
#sub-extensions: sub-src $(FORCEDEP)
#	$(MAKE) -C extensions $(CONTINUEONERROR)
#
#sub-plugins: sub-src .qmake.cache $(FORCEDEP)
#	$(MAKE) -C plugins\src
#
#sub-tools: sub-plugins $(FORCEDEP)
#	$(MAKE) -C tools
sub-tools: tools\Makefile $(FORCEDEP)
	$(MAKE) -C tools

tools\Makefile:
	cd tools & qmake 	
	
clean:
	@if exist qmake\Makefile $(MAKE) -C qmake $(CONTINUEONERROR) clean
	@if exist src\moc\Makefile $(MAKE) -C src\moc $(CONTINUEONERROR) clean
	@if exist src\Makefile $(MAKE) -C src $(CONTINUEONERROR) clean
	@if exist tutorial\Makefile $(MAKE) -C tutorial $(CONTINUEONERROR) clean
	@if exist examples\Makefile $(MAKE) -C examples $(CONTINUEONERROR) clean
## @todo (dmik): later
#	@if exist extensions\Makefile $(MAKE) -C extensions $(CONTINUEONERROR) clean
#	@if exist plugins\src\Makefile $(MAKE) -C plugins\src $(CONTINUEONERROR) clean
	@if exist tools\Makefile $(MAKE) -C tools $(CONTINUEONERROR) clean

distclean: clean
	-del .qmake.cache

.qmake.cache:
	$(ECHO_EMPTY)
	@echo   Qt must first be configured using the "configure" script.
	$(ECHO_EMPTY)

FORCE:

# defines and rules to duplicate the private include headers

INCLUDE_PRIVATE 	= include\private
KERNEL_PH	= $(patsubst src/kernel/%,$(INCLUDE_PRIVATE)\\%,$(wildcard src/kernel/*_p.h))
WIDGETS_PH	= $(patsubst src/widgets/%,$(INCLUDE_PRIVATE)\\%,$(wildcard src/widgets/*_p.h))
DIALOGS_PH	= $(patsubst src/dialogs/%,$(INCLUDE_PRIVATE)\\%,$(wildcard src/dialogs/*_p.h))
TOOLS_PH 	= $(patsubst src/tools/%,$(INCLUDE_PRIVATE)\\%,$(wildcard src/tools/*_p.h))
CODECS_PH	= $(patsubst src/codecs/%,$(INCLUDE_PRIVATE)\\%,$(wildcard src/codecs/*_p.h))
STYLES_PH	= $(patsubst src/styles/%,$(INCLUDE_PRIVATE)\\%,$(wildcard src/styles/*_p.h))
NETWORK_PH	= $(patsubst src/network/%,$(INCLUDE_PRIVATE)\\%,$(wildcard src/network/*_p.h))
XML_PH		= $(patsubst src/xml/%,$(INCLUDE_PRIVATE)\\%,$(wildcard src/xml/*_p.h))
PRIVATE_HEADERS 	= $(KERNEL_PH) $(WIDGETS_PH) $(DIALOGS_PH) $(TOOLS_PH) $(CODECS_PH) $(STYLES_PH) $(NETWORK_PH) $(XML_PH)

COPY_HEADER = @(if not exist $(INCLUDE_PRIVATE) mkdir $(INCLUDE_PRIVATE)) & \
	(if not exist $@ echo updated > .private_headers) & (echo copy $< $@) & (copy $< $@ >nul 2>&1)

$(KERNEL_PH): $(INCLUDE_PRIVATE)\\%.h: src\kernel\\%.h
	$(COPY_HEADER)
$(WIDGETS_PH): $(INCLUDE_PRIVATE)\\%.h: src\widgets\\%.h
	$(COPY_HEADER)
$(DIALOGS_PH): $(INCLUDE_PRIVATE)\\%.h: src\dialogs\\%.h
	$(COPY_HEADER)
$(TOOLS_PH): $(INCLUDE_PRIVATE)\\%.h: src\tools\\%.h
	$(COPY_HEADER)
$(CODECS_PH): $(INCLUDE_PRIVATE)\\%.h: src\codecs\\%.h
	$(COPY_HEADER)
$(STYLES_PH): $(INCLUDE_PRIVATE)\\%.h: src\styles\\%.h
	$(COPY_HEADER)
$(NETWORK_PH): $(INCLUDE_PRIVATE)\\%.h: src\network\\%.h
	$(COPY_HEADER)
$(XML_PH): $(INCLUDE_PRIVATE)\\%.h: src\xml\\%.h
	$(COPY_HEADER)

private_headers: $(PRIVATE_HEADERS)
	@if not exist .private_headers echo updated > .private_headers
