summaryrefslogtreecommitdiffstats
path: root/Configure.mk
diff options
context:
space:
mode:
Diffstat (limited to 'Configure.mk')
-rw-r--r--Configure.mk195
1 files changed, 195 insertions, 0 deletions
diff --git a/Configure.mk b/Configure.mk
new file mode 100644
index 000000000..3d5e5c978
--- /dev/null
+++ b/Configure.mk
@@ -0,0 +1,195 @@
+# -*- Makefile -*-
+# This file contains the detection rules
+all:
+
+PKGCONFIG=pkg-config
+XML2CONFIG=xml2-config
+XSLCONFIG=xslt-config
+QMAKE=qmake
+MOC=moc
+UIC=uic
+
+CONFIGFILE = config.cache
+ifeq ($(CONFIGURING),1)
+
+# Detect the target system
+# Ask the compiler what OS it's producing files for
+UNAME := $(shell $(CC) -dumpmachine 2>&1 | grep -E -o "linux|darwin|win|gnu|kfreebsd")
+
+# find libdivecomputer
+# First deal with the cross compile environment and with Mac.
+# For the native case, Linus doesn't want to trust pkg-config given
+# how young libdivecomputer still is - so we check the typical
+# subdirectories of /usr/local and /usr and then we give up. You can
+# override by simply setting it here
+#
+ifeq ($(CC), i686-w64-mingw32-gcc)
+# ok, we are cross building for Windows
+ LIBDIVECOMPUTERINCLUDES = $(shell $(PKGCONFIG) --cflags libdivecomputer)
+ LIBDIVECOMPUTERARCHIVE = $(shell $(PKGCONFIG) --libs libdivecomputer)
+ RESFILE = packaging/windows/subsurface.res
+ LDFLAGS += -Wl,-subsystem,windows
+ LIBWINSOCK = -lwsock32
+else ifeq ($(UNAME), darwin)
+ LIBDIVECOMPUTERINCLUDES = $(shell $(PKGCONFIG) --cflags libdivecomputer)
+ LIBDIVECOMPUTERARCHIVE = $(shell $(PKGCONFIG) --libs libdivecomputer)
+else
+libdc-local := $(wildcard /usr/local/lib/libdivecomputer.a)
+libdc-local64 := $(wildcard /usr/local/lib64/libdivecomputer.a)
+libdc-usr := $(wildcard /usr/lib/libdivecomputer.a)
+libdc-usr64 := $(wildcard /usr/lib64/libdivecomputer.a)
+
+ifneq ($(LIBDCDEVEL),)
+ LIBDIVECOMPUTERDIR = ../libdivecomputer
+ LIBDIVECOMPUTERINCLUDES = -I$(LIBDIVECOMPUTERDIR)/include
+ LIBDIVECOMPUTERARCHIVE = $(LIBDIVECOMPUTERDIR)/src/.libs/libdivecomputer.a
+else ifneq ($(strip $(libdc-local)),)
+ LIBDIVECOMPUTERDIR = /usr/local
+ LIBDIVECOMPUTERINCLUDES = -I$(LIBDIVECOMPUTERDIR)/include
+ LIBDIVECOMPUTERARCHIVE = $(LIBDIVECOMPUTERDIR)/lib/libdivecomputer.a
+else ifneq ($(strip $(libdc-local64)),)
+ LIBDIVECOMPUTERDIR = /usr/local
+ LIBDIVECOMPUTERINCLUDES = -I$(LIBDIVECOMPUTERDIR)/include
+ LIBDIVECOMPUTERARCHIVE = $(LIBDIVECOMPUTERDIR)/lib64/libdivecomputer.a
+else ifneq ($(strip $(libdc-usr)),)
+ LIBDIVECOMPUTERDIR = /usr
+ LIBDIVECOMPUTERINCLUDES = -I$(LIBDIVECOMPUTERDIR)/include
+ LIBDIVECOMPUTERARCHIVE = $(LIBDIVECOMPUTERDIR)/lib/libdivecomputer.a
+else ifneq ($(strip $(libdc-usr64)),)
+ LIBDIVECOMPUTERDIR = /usr
+ LIBDIVECOMPUTERINCLUDES = -I$(LIBDIVECOMPUTERDIR)/include
+ LIBDIVECOMPUTERARCHIVE = $(LIBDIVECOMPUTERDIR)/lib64/libdivecomputer.a
+else
+$(error Cannot find libdivecomputer - please edit Makefile)
+endif
+endif
+
+# 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.
+LIBUSB = $(shell $(PKGCONFIG) --libs libusb-1.0 2> /dev/null)
+
+# Find qmake. Rules are:
+# - use qmake if it is in $PATH
+# [qmake -query QT_VERSION will fail if it's Qt 3's qmake]
+# - if that fails, try qmake-qt4
+# - if that fails, print an error
+# We specifically do not search for qmake-qt5 since that is not supposed
+# to exist.
+QMAKE = $(shell { qmake -query QT_VERSION >/dev/null 2>&1 && echo qmake; } || \
+ { qmake-qt4 -v >/dev/null 2>&1 && echo qmake-qt4; })
+ifeq ($(strip $(QMAKE)),)
+$(error Could not find qmake or qmake-qt4 in $$PATH or they failed)
+endif
+
+# Use qmake to find out which Qt version we are building for.
+QT_VERSION_MAJOR = $(shell $(QMAKE) -query QT_VERSION | cut -d. -f1)
+ifeq ($(QT_VERSION_MAJOR), 5)
+# QT_MODULES = Qt5Widgets Qt5Svg
+# QT_CORE = Qt5Core
+# QTBINDIR = $(shell $(QMAKE) -query QT_HOST_BINS)
+# # Tool paths are not stored in .pc files in Qt 5.0
+# MOC = $(QTBINDIR)/moc
+# UIC = $(QTBINDIR)/uic
+# RCC = $(QTBINDIR)/rcc
+# if qmake is qt5, try to get the qt4 one.
+ QMAKE = { qmake-qt4 -v >/dev/null 2>&1 && echo qmake-qt4; }
+#else
+endif
+
+ifeq ($(strip $(QMAKE)),)
+$(error Could not find qmake or qmake-qt4 in $$PATH for the Qt4 version they failed)
+endif
+
+ QT_MODULES = QtGui QtSvg
+ QT_CORE = QtCore
+ MOC = $(shell $(PKGCONFIG) --variable=moc_location QtCore)
+ UIC = $(shell $(PKGCONFIG) --variable=uic_location QtGui)
+ RCC = $(shell $(PKGCONFIG) --variable=rcc_location QtGui)
+#endif
+
+# we need GLIB2CFLAGS for gettext
+QTCXXFLAGS = $(shell $(PKGCONFIG) --cflags $(QT_MODULES)) $(GLIB2CFLAGS)
+LIBQT = $(shell $(PKGCONFIG) --libs $(QT_MODULES))
+ifneq ($(filter reduce_relocations, $(shell $(PKGCONFIG) --variable qt_config $(QT_CORE))), )
+ QTCXXFLAGS += -fPIE
+endif
+
+LIBGTK = $(shell $(PKGCONFIG) --libs gtk+-2.0 glib-2.0)
+ifneq (,$(filter $(UNAME),linux kfreebsd gnu))
+ LIBGCONF2 = $(shell $(PKGCONFIG) --libs gconf-2.0)
+ GCONF2CFLAGS = $(shell $(PKGCONFIG) --cflags gconf-2.0)
+else ifeq ($(UNAME), darwin)
+ LIBGTK += $(shell $(PKGCONFIG) --libs gtk-mac-integration) -framework CoreFoundation -framework CoreServices
+ GTKCFLAGS += $(shell $(PKGCONFIG) --cflags gtk-mac-integration)
+ GTK_MAC_BUNDLER = ~/.local/bin/gtk-mac-bundler
+endif
+
+LIBDIVECOMPUTERCFLAGS = $(LIBDIVECOMPUTERINCLUDES)
+LIBDIVECOMPUTER = $(LIBDIVECOMPUTERARCHIVE) $(LIBUSB)
+
+LIBXML2 = $(shell $(XML2CONFIG) --libs)
+LIBXSLT = $(shell $(XSLCONFIG) --libs)
+XML2CFLAGS = $(shell $(XML2CONFIG) --cflags)
+GLIB2CFLAGS = $(shell $(PKGCONFIG) --cflags glib-2.0)
+GTKCFLAGS += $(shell $(PKGCONFIG) --cflags gtk+-2.0)
+XSLCFLAGS = $(shell $(XSLCONFIG) --cflags)
+OSMGPSMAPFLAGS += $(shell $(PKGCONFIG) --cflags osmgpsmap 2> /dev/null)
+LIBOSMGPSMAP += $(shell $(PKGCONFIG) --libs osmgpsmap 2> /dev/null)
+LIBSOUPCFLAGS = $(shell $(PKGCONFIG) --cflags libsoup-2.4)
+LIBSOUP = $(shell $(PKGCONFIG) --libs libsoup-2.4)
+
+LIBZIP = $(shell $(PKGCONFIG) --libs libzip 2> /dev/null)
+ZIPFLAGS = $(strip $(shell $(PKGCONFIG) --cflags libzip 2> /dev/null))
+
+LIBSQLITE3 = $(shell $(PKGCONFIG) --libs sqlite3 2> /dev/null)
+SQLITE3FLAGS = $(strip $(shell $(PKGCONFIG) --cflags sqlite3))
+
+# Write the configure file
+all: configure
+configure $(CONFIGURE): Configure.mk
+ @echo "\
+ CONFIGURED = 1\\\
+ UNAME = $(UNAME)\\\
+ LIBDIVECOMPUTERDIR = $(LIBDIVECOMPUTERDIR)\\\
+ LIBDIVECOMPUTERCFLAGS = $(LIBDIVECOMPUTERCFLAGS)\\\
+ LIBDIVECOMPUTER = $(LIBDIVECOMPUTER)\\\
+ LIBWINSOCK = $(LIBWINSOCK)\\\
+ LDFLAGS = $(LDFLAGS)\\\
+ RESFILE = $(RESFILE)\\\
+ LIBQT = $(LIBQT)\\\
+ QTCXXFLAGS = $(QTCXXFLAGS)\\\
+ MOC = $(MOC)\\\
+ UIC = $(UIC)\\\
+ RCC = $(RCC)\\\
+ LIBGTK = $(LIBGTK)\\\
+ GTKCFLAGS = $(GTKCFLAGS)\\\
+ LIBGCONF2 = $(LIBGCONF2)\\\
+ GCONF2CFLAGS = $(GCONF2CFLAGS)\\\
+ GTK_MAC_BUNDLER = $(GTK_MAC_BUNDLER)\\\
+ LIBXML2 = $(LIBXML2)\\\
+ LIBXSLT = $(LIBXSLT)\\\
+ XML2CFLAGS = $(XML2CFLAGS)\\\
+ GLIB2CFLAGS = $(GLIB2CFLAGS)\\\
+ XSLCFLAGS = $(XSLCFLAGS)\\\
+ OSMGPSMAPFLAGS = $(OSMGPSMAPFLAGS)\\\
+ LIBOSMGPSMAP = $(LIBOSMGPSMAP)\\\
+ LIBSOUPCFLAGS = $(LIBSOUPCFLAGS)\\\
+ LIBSOUP = $(LIBSOUP)\\\
+ LIBZIP = $(LIBZIP)\\\
+ ZIPFLAGS = $(ZIPFLAGS)\\\
+ LIBSQLITE3 = $(LIBSQLITE3)\\\
+ SQLITE3FLAGS = $(SQLITE3FLAGS)\\\
+ " | tr '\\' '\n' > $(CONFIGFILE)
+
+else
+configure $(CONFIGFILE): Configure.mk
+ @test -e $(CONFIGFILE) && echo Reconfiguring.. || echo Configuring...
+ @$(MAKE) CONFIGURING=1 configure
+ @echo Done
+
+-include $(CONFIGFILE)
+endif
+
+.PHONY: configure all