Implement a qmake-based build for Subsurface

This is working for me, but requires a bit more testing. To build,
run:
  qmake [options]

Where options might be:
  V=1               disable "silent" build
  LIBDCDEVEL=1      use side-by-side libdivecomputer
  INCLUDEPATH+=xxx  add -Ixxx (e.g., INCLUDEPATH+=/usr/local/marble/include)
  LIBS+=xxx         add xxx to the linker flags (e.g. LIBS+=-L/usr/local/marble/lib)
  or any other qmake option, including debug and release options

If your distribution is already using qtchooser in place of qmake, you
may need to pass an extra option to qmake to select the a
cross-build. For example:

  qmake -qt=i686-w64-mingw32-qt4

If your distribution is not yet using qtchooser, then you need to file
a bug report requesting it and you need to run the full path to qmake.

Note:
 - there are some ### left in the buildsystem

Signed-off-by: Thiago Macieira <thiago@macieira.org>
This commit is contained in:
Thiago Macieira 2013-10-06 17:52:34 -07:00
parent 2e43769108
commit 67e49d6480
5 changed files with 251 additions and 5 deletions

6
.gitignore vendored
View file

@ -33,3 +33,9 @@ ui_*
/subsurface.includes
*.kdev4
callgrind.out.*
.rcc
.moc
.uic
.obj
subsurface.pro.user*

View file

@ -7,20 +7,20 @@ BROWSER = firefox
all: doc $(addprefix $(DOCNAME).,pdf text)
doc: $(HTMLDOC)
doc: $(OUT)$(HTMLDOC)
$(DOCNAME).text: $(DOCSOURCE)
$(OUT)$(DOCNAME).text: $(DOCSOURCE)
$(A2X) -f text $<
$(DOCNAME).pdf: $(DOCSOURCE)
$(OUT)$(DOCNAME).pdf: $(DOCSOURCE)
$(A2X) -f pdf $<
$(HTMLDOC): $(DOCSOURCE)
$(OUT)$(HTMLDOC): $(DOCSOURCE)
@echo "if asciidoc isn't found no HTML documentation is produced but Subsurface is still functional"
$(ASCIIDOC) $< || true
# Alternatively::
$(DOCNAME).xhtml: $(DOCSOURCE)
$(OUT)$(DOCNAME).xhtml: $(DOCSOURCE)
$(A2X) --icons -f xhtml $<
show: $(HTMLDOC)

95
subsurface-configure.pri Normal file
View file

@ -0,0 +1,95 @@
#
# Global settings
#
# Set some C constructs to be diagnosed as errors:
# - calling implicit functions
# - casting from integers to pointers or vice-versa without an explicit cast
# Also turn on C99 mode with GNU extensions
*-g++*: QMAKE_CFLAGS += -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast -Werror=implicit-int
!win32-msvc*: QMAKE_CFLAGS += -std=gnu99
# Check if we have pkg-config
equals($$QMAKE_HOST.os, "Windows"):NUL=NUL
else:NUL=/dev/null
system(pkg-config --version 2>$$NUL >$$NUL) {
CONFIG += link_pkgconfig
} else {
message("pkg-config not found, no detection performed. See README for details")
}
#
# Find libdivecomputer
#
!isEmpty(LIBDCDEVEL) {
# find it next to our sources
INCLUDEPATH += ../libdivecomputer/include
LIBS += -L../libdivecomputer/src/.libs -ldivecomputer
} else:exists(/usr/local/lib/libdivecomputer.a) {
LIBS += -L/usr/local/lib -ldivecomputer
} else:exists(/usr/local/lib64/libdivecomputer.a) {
LIBS += -L/usr/local/lib64 -ldivecomputer
} else:link_pkgconfig {
# find it via pkg-config
PKGCONFIG += libdivecomputer
}
# Libusb-1.0 is only required if libdivecomputer was built with it.
# And libdivecomputer is only built with it if libusb-1.0 is
# installed. So get libusb if it exists, but don't complain
# about it if it doesn't.
#link_pkgconfig: packagesExist(libusb-1.0): PKGCONFIG += libusb-1.0
#
# Find libxml2 and libxslt
#
# They come with shell scripts that contain the information we need, so we just
# run them. They also come with pkg-config files, but those are missing on
# Mac (where they are part of the XCode-supplied tools).
#
XML2_CFLAGS = $$system(xml2-config --cflags 2>$$NUL)
XSLT_CFLAGS = $$system(xslt-config --cflags 2>$$NUL)
XML2_LIBS = $$system(xml2-config --libs 2>$$NUL)
XSLT_LIBS = $$system(xslt-config --libs 2>$$NUL)
link_pkgconfig {
isEmpty(XML2_CFLAGS)|isEmpty(XML2_LIBS): \
error("Could not find libxml2. Did you forget to install it?")
isEmpty(XSLT_CFLAGS)|isEmpty(XSLT_LIBS): \
error("Could not find libxslt. Did you forget to install it?")
}
QMAKE_CFLAGS *= $$XML2_CFLAGS $$XSLT_CFLAGS
QMAKE_CXXFLAGS *= $$XML2_CFLAGS $$XSLT_CFLAGS
LIBS *= $$XML2_LIBS $$XSLT_LIBS
#
# Find other pkg-config-based projects
# We're searching for:
# libzip
# sqlite3
link_pkgconfig: PKGCONFIG += libzip sqlite3
#
# Find libmarble
#
# Before Marble 4.9, the GeoDataTreeModel.h header wasn't installed
# Check if it's present by trying to compile
# ### FIXME: implement that
win32: CONFIG(debug, debug|release): LIBS += -lmarblewidgetd
else: LIBS += -lmarblewidget
#
# Platform-specific changes
#
win32 {
LIBS += -lwsock32
DEFINES -= UNICODE
}
#
# misc
#
!equals(V, 1): CONFIG += silent
MOC_DIR = .moc
UI_DIR = .uic
RCC_DIR = .rcc
OBJECTS_DIR = .obj

View file

@ -0,0 +1,16 @@
# Generate the version.h file
VERSION_FILE = version.h
exists(.git/HEAD): {
GIT_HEAD = .git/HEAD
VERSION_SCRIPT = $$PWD/scripts/get-version
version_h.depends = $$VERSION_SCRIPT
version_h.commands = echo \\$${LITERAL_HASH}define VERSION_STRING \\\"`$$VERSION_SCRIPT linux`\\\" > ${QMAKE_FILE_OUT}
version_h.input = GIT_HEAD
version_h.output = $$VERSION_FILE
version_h.variable_out = GENERATED_FILES
version_h.CONFIG = ignore_no_exist
QMAKE_EXTRA_COMPILERS += version_h
} else {
# This is probably a package
system(echo \\$${LITERAL_HASH}define VERSION_STRING \\\"$$VERSION\\\" > $$VERSION_FILE)
}

129
subsurface.pro Normal file
View file

@ -0,0 +1,129 @@
include(subsurface-configure.pri)
QT = core gui network webkit svg
INCLUDEPATH += qt-ui $$PWD
VERSION = 3.1
HEADERS = \
color.h \
deco.h \
device.h \
display.h \
dive.h \
divelist.h \
file.h \
flag.h \
gettextfromc.h \
gettext.h \
helpers.h \
libdivecomputer.h \
planner.h \
pref.h \
profile.h \
qt-gui.h \
qthelper.h \
qt-ui/about.h \
qt-ui/completionmodels.h \
qt-ui/divecomputermanagementdialog.h \
qt-ui/divelistview.h \
qt-ui/diveplanner.h \
qt-ui/downloadfromdivecomputer.h \
qt-ui/globe.h \
qt-ui/graphicsview-common.h \
qt-ui/kmessagewidget.h \
qt-ui/maintab.h \
qt-ui/mainwindow.h \
qt-ui/modeldelegates.h \
qt-ui/models.h \
qt-ui/plotareascene.h \
qt-ui/preferences.h \
qt-ui/printdialog.h \
qt-ui/printlayout.h \
qt-ui/printoptions.h \
qt-ui/profilegraphics.h \
qt-ui/simplewidgets.h \
qt-ui/starwidget.h \
qt-ui/subsurfacewebservices.h \
qt-ui/tableview.h \
satellite.h \
sha1.h \
statistics.h \
subsurface-icon.h \
subsurfacestartup.h \
uemis.h \
webservice.h
SOURCES = \
deco.c \
device.c \
dive.c \
divelist.c \
equipment.c \
file.c \
gettextfromc.cpp \
libdivecomputer.c \
main.cpp \
parse-xml.c \
planner.c \
profile.c \
qt-gui.cpp \
qthelper.cpp \
qt-ui/about.cpp \
qt-ui/completionmodels.cpp \
qt-ui/divecomputermanagementdialog.cpp \
qt-ui/divelistview.cpp \
qt-ui/diveplanner.cpp \
qt-ui/downloadfromdivecomputer.cpp \
qt-ui/globe.cpp \
qt-ui/graphicsview-common.cpp \
qt-ui/kmessagewidget.cpp \
qt-ui/maintab.cpp \
qt-ui/mainwindow.cpp \
qt-ui/modeldelegates.cpp \
qt-ui/models.cpp \
qt-ui/plotareascene.cpp \
qt-ui/preferences.cpp \
qt-ui/printdialog.cpp \
qt-ui/printlayout.cpp \
qt-ui/printoptions.cpp \
qt-ui/profilegraphics.cpp \
qt-ui/simplewidgets.cpp \
qt-ui/starwidget.cpp \
qt-ui/subsurfacewebservices.cpp \
qt-ui/tableview.cpp \
save-xml.c \
sha1.c \
statistics.c \
subsurfacestartup.c \
time.c \
uemis.c \
uemis-downloader.c
linux*: SOURCES += linux.c
mac: SOURCES += macos.c
win32: SOURCES += windows.c
FORMS = \
qt-ui/about.ui \
qt-ui/divecomputermanagementdialog.ui \
qt-ui/diveplanner.ui \
qt-ui/downloadfromdivecomputer.ui \
qt-ui/maintab.ui \
qt-ui/mainwindow.ui \
qt-ui/preferences.ui \
qt-ui/printoptions.ui \
qt-ui/renumber.ui \
qt-ui/subsurfacewebservices.ui \
qt-ui/tableview.ui
RESOURCES = subsurface.qrc
TRANSLATIONS = subsurface_de.ts
doc.commands = $(CHK_DIR_EXISTS) Documentation || $(MKDIR) Documentation
doc.commands += $$escape_expand(\\n\\t)$(MAKE) -C $$PWD/Documentation OUT=$$OUT_PWD/Documentation doc
all.depends += doc
QMAKE_EXTRA_TARGETS += doc all
include(subsurface-gen-version.pri)