Add build configuration for Qt 4 and 5

This commit is contained in:
Ray Chason
2018-05-23 23:18:55 -04:00
committed by Pasi Kallinen
parent 6894e464d4
commit 3fc2373ca2

View File

@@ -33,10 +33,16 @@
#==============================================================================
# BUILD DECISIONS SECTION
#
# There are currently only 3 decisions that you have to make.
# There are currently only 4 decisions that you have to make.
# 1. 32-bit or 64-bit?
# 2. Where do you want your build to end up?
# 3. Do you want debug information in the executable?
# 4. Do you want additional GUI interfaces in the executable?
#
# Note that additional GUI interfaces may require external libraries.
# Qt is placed where the official installer places it.
# Other libraries are placed in a subdirectory of your home directory, either
# x86libs or x64libs depending on whether you're building for 64 bits.
#
#==============================================================================
# 1. 32-bit or 64-bit?
@@ -62,6 +68,26 @@ GAMEDIR = ../binary
DEBUGINFO = Y
#
#---------------------------------------------------------------
# 4. Do you want additional GUI interfaces in the executable?
# Make these Y to enable the GUIs. Win32 is always enabled,
# and is the default.
#
WANT_WIN_QT4 = N
# WANT_WIN_QT4 requires Qt 4 or Qt 5, see
# https://www.qt.io/download-open-source/
# Earlier versions of Qt are not compatible with Windows
# For Qt 5, use:
QT4_DIRECTORY = c:/Qt/Qt5.9.2/5.9.2/mingw53_32
HAVE_QT5 = Y
# For Qt 4, comment out the above two lines and use:
#QT4_DIRECTORY = c:/Qt/4.8.6
#HAVE_QT5 = N
# This marks the end of the BUILD DECISIONS section.
#==============================================================================
#
@@ -97,6 +123,8 @@ MSWSYS = ../sys/winnt
TTY = ../win/tty
# window port files (WIN32)
MSWIN = ../win/win32
# window port files (Qt4)
QT4 = ../win/Qt4
# Tile support files
WSHR = ../win/share
@@ -107,8 +135,12 @@ WSHR = ../win/share
OBJ = o
cc = gcc
cxx = g++
rc = windres
link = gcc
ifeq "$(WANT_WIN_QT4)" "Y"
link = g++
endif
#
#==========================================
@@ -159,6 +191,9 @@ RANDOM = $(OBJ)/random.o
#RANDOM =
WINPFLAG = -DTILES -DMSWIN_GRAPHICS -DWIN32CON -D_WIN32_IE=0x0400 -D_WIN32_WINNT=0x0501
ifeq "$(WANT_WIN_QT4)" "Y"
WINPFLAG += -DQT_GRAPHICS -DPIXMAPDIR='"."'
endif
# To store all the level files,
# help files, etc. in a single library file.
# USE_DLB = Y is left uncommented
@@ -193,6 +228,36 @@ CFLAGSBASE = -c $(cflags) -I$(INCL) $(WINPINC) $(cdebug)
conlibs = -lgdi32 -lwinmm
guilibs = -lcomctl32 -lwinmm
ifeq "$(WANT_WIN_QT4)" "Y"
# Might be either Qt 4 or Qt 5
ifeq "$(HAVE_QT5)" "Y"
guilibs += $(QT4_DIRECTORY)/lib/libQt5Core.a
guilibs += $(QT4_DIRECTORY)/lib/libQt5Gui.a
guilibs += $(QT4_DIRECTORY)/lib/libQt5Widgets.a
conlibs += $(QT4_DIRECTORY)/lib/libQt5Core.a
else
guilibs += $(QT4_DIRECTORY)/lib/libQtCore4.a
guilibs += $(QT4_DIRECTORY)/lib/libQtGui4.a
conlibs += $(QT4_DIRECTORY)/lib/libQtCore4.a
endif
endif
#==========================================
# Extra files needed for some ports
#==========================================
EXTRA_FILES =
ifeq "$(WANT_WIN_QT4)" "Y"
ifeq "$(HAVE_QT5)" "Y"
EXTRA_FILES += $(GAMEDIR)/Qt5Core.dll
EXTRA_FILES += $(GAMEDIR)/Qt5Gui.dll
EXTRA_FILES += $(GAMEDIR)/Qt5Widgets.dll
else
# TODO: define QT 4 DLLs here
EXTRA_FILES += $(GAMEDIR)/QtCore4.dll
EXTRA_FILES += $(GAMEDIR)/QtGui4.dll
endif
EXTRA_FILES += $(GAMEDIR)/rip.xpm
endif
#==========================================
# Util builds
@@ -208,6 +273,8 @@ LFLAGSU = $(LFLAGSBASEC)
CFLAGS = $(CFLAGSBASE) $(WINPFLAG) $(DLBFLG)
lflags = $(LFLAGSBASEC) $(linkdebuf)
CXXFLAGS = $(CFLAGS)
ifeq "$(USE_DLB)" "Y"
DLB = nhdat
else
@@ -320,12 +387,28 @@ GUIOBJ = $(O)mhaskyn.o $(O)mhdlg.o \
$(O)mhfont.o $(O)mhinput.o $(O)mhmain.o $(O)mhmap.o \
$(O)mhmenu.o $(O)mhmsgwnd.o $(O)mhrip.o $(O)mhsplash.o \
$(O)mhstatus.o $(O)mhtext.o $(O)mswproc.o $(O)winhack.o
ifeq "$(WANT_WIN_QT4)" "Y"
GUIOBJ += $(O)qt4bind.o $(O)qt4click.o $(O)qt4clust.o $(O)qt4delay.o \
$(O)qt4glyph.o $(O)qt4icon.o $(O)qt4inv.o $(O)qt4key.o $(O)qt4line.o \
$(O)qt4main.o $(O)qt4map.o $(O)qt4menu.o $(O)qt4msg.o $(O)qt4plsel.o \
$(O)qt4rip.o $(O)qt4set.o $(O)qt4stat.o $(O)qt4str.o $(O)qt4streq.o \
$(O)qt4svsel.o $(O)qt4win.o $(O)qt4xcmd.o $(O)qt4yndlg.o
endif
GUIHDR = $(MSWIN)/mhaskyn.h $(MSWIN)/mhdlg.h $(MSWIN)/mhfont.h \
$(MSWIN)/mhinput.h $(MSWIN)/mhmain.h $(MSWIN)/mhmap.h \
$(MSWIN)/mhmenu.h $(MSWIN)/mhmsg.h $(MSWIN)/mhmsgwnd.h \
$(MSWIN)/mhrip.h $(MSWIN)/mhstatus.h \
$(MSWIN)/mhtext.h $(MSWIN)/resource.h $(MSWIN)/winMS.h
ifeq "$(WANT_WIN_QT4)" "Y"
GUIHDR += $(QT4)/qt4bind.h $(QT4)/qt4click.h $(QT4)/qt4clust.h \
$(QT4)/qt4delay.h $(QT4)/qt4glyph.h $(QT4)/qt4icon.h $(QT4)/qt4inv.h \
$(QT4)/qt4kde0.h $(QT4)/qt4key.h $(QT4)/qt4line.h $(QT4)/qt4main.h \
$(QT4)/qt4map.h $(QT4)/qt4menu.h $(QT4)/qt4msg.h $(QT4)/qt4plsel.h \
$(QT4)/qt4rip.h $(QT4)/qt4set.h $(QT4)/qt4stat.h $(QT4)/qt4str.h \
$(QT4)/qt4streq.h $(QT4)/qt4svsel.h $(QT4)/qt4win.h $(QT4)/qt4xcmd.h \
$(QT4)/qt4yndlg.h
endif
KEYDLLS = $(GAMEDIR)/nhdefkey.dll $(GAMEDIR)/nh340key.dll $(GAMEDIR)/nhraykey.dll
@@ -385,7 +468,7 @@ DATABASE = $(DAT)/data.base
#================ RULES ==================
#==========================================
.SUFFIXES: .exe .o .til .uu .c .y .l
.SUFFIXES: .exe .o .til .uu .c .y .l .moc
#==========================================
# Rules for files in src
@@ -405,7 +488,7 @@ $(OBJ)/%.o : $(SSYS)/%.c
$(cc) $(CFLAGS) -o$@ $<
$(OBJ)/%.o : $(SSYS)/%.cpp
g++ $(CFLAGS) -std=c++11 -o$@ $<
$(cxx) $(CXXFLAGS) -std=c++11 -o$@ $<
#==========================================
# Rules for files in sys/winnt
@@ -451,6 +534,21 @@ $(OBJ)/%.o : $(TTY)/%.c
$(OBJ)/%.o : $(MSWIN)/%.c
$(cc) $(CFLAGS) -o$@ $<
#==========================================
# Rules for files in win/Qt4
#==========================================
ifeq "$(HAVE_QT5)" "Y"
QT4_CXXFLAGS = -std=c++11
else
QT4_CXXFLAGS =
endif
$(OBJ)/%.o : $(QT4)/%.cpp
$(cxx) $(CXXFLAGS) $(QT4_CXXFLAGS) -I$(MSWIN) -I$(QT4_DIRECTORY)/include -o$@ $<
$(QT4)/%.moc : $(QT4)/%.h
$(QT4_DIRECTORY)\bin\moc -o $@ $<
#==========================================
#=============== TARGETS ==================
#==========================================
@@ -472,7 +570,7 @@ default : install
all : install
install: graphicschk $(O)obj.tag $(GAMEDIR)/NetHack.exe $(GAMEDIR)/NetHackW.exe $(O)install.tag
install: graphicschk $(O)obj.tag $(GAMEDIR)/NetHack.exe $(GAMEDIR)/NetHackW.exe $(O)install.tag $(EXTRA_FILES)
@echo NetHack is up to date.
@echo Done.
@@ -1035,6 +1133,7 @@ spotless: clean
$(subst /,\,if exist $(U)recover.exe del $(U)recover.exe)
$(subst /,\,if exist $(DAT)/dlb.lst del $(DAT)/dlb.lst)
$(subst /,\,if exist nhdat. del nhdat.)
$(subst /,\,if exist $(QT4)/*.moc del $(QT4)/*.moc)
$(subst /,\,if exist $(DAT)/bogusmon del $(DAT)/bogusmon)
$(subst /,\,if exist $(DAT)/engrave del $(DAT)/engrave)
$(subst /,\,if exist $(DAT)/epitaph del $(DAT)/epitaph)
@@ -1081,6 +1180,40 @@ clean:
# OTHER DEPENDENCIES
#===================================================================
# Other files needed by some ports
$(GAMEDIR)/Qt5Core.dll : $(QT4_DIRECTORY)/bin/Qt5Core.dll
$(subst /,\,@copy $< $@ >nul)
$(GAMEDIR)/Qt5Gui.dll : $(QT4_DIRECTORY)/bin/Qt5Gui.dll
$(subst /,\,@copy $< $@ >nul)
$(GAMEDIR)/Qt5Widgets.dll : $(QT4_DIRECTORY)/bin/Qt5Widgets.dll
$(subst /,\,@copy $< $@ >nul)
$(GAMEDIR)/QtCore4.dll : $(QT4_DIRECTORY)/bin/QtCore4.dll
$(subst /,\,@copy $< $@ >nul)
$(GAMEDIR)/QtGui4.dll : $(QT4_DIRECTORY)/bin/QtGui4.dll
$(subst /,\,@copy $< $@ >nul)
$(GAMEDIR)/nhtiles.bmp : $(SRC)/tiles.bmp
$(subst /,\,@copy $< $@ >nul)
$(GAMEDIR)/rip.xpm : ../win/X11/rip.xpm
$(subst /,\,@copy $< $@ >nul)
# Dependencies on .moc files (for Qt 4 or 5)
$(OBJ)/qt4main.o : $(QT4)/qt4main.cpp $(QT4)/qt4main.moc $(QT4)/qt4kde0.moc
$(OBJ)/qt4map.o : $(QT4)/qt4map.cpp $(QT4)/qt4map.moc
$(OBJ)/qt4menu.o : $(QT4)/qt4menu.cpp $(QT4)/qt4menu.moc
$(OBJ)/qt4msg.o : $(QT4)/qt4msg.cpp $(QT4)/qt4msg.moc
$(OBJ)/qt4plsel.o : $(QT4)/qt4plsel.cpp $(QT4)/qt4plsel.moc
$(OBJ)/qt4set.o : $(QT4)/qt4set.cpp $(QT4)/qt4set.moc
$(OBJ)/qt4stat.o : $(QT4)/qt4stat.cpp $(QT4)/qt4stat.moc
$(OBJ)/qt4xcmd.o : $(QT4)/qt4xcmd.cpp $(QT4)/qt4xcmd.moc
$(OBJ)/qt4yndlg.o : $(QT4)/qt4yndlg.cpp $(QT4)/qt4yndlg.moc
#
# dat dependencies
#