You may have noticed that running make is a little slow. Every time that it is loaded, it will try to detect everything again. So, instead, save the output and reload it the next time. This is implemented by adding a rule that (re-)creates the config.cache file, which is included by make. If the file doesn't exist yet, make will first run the rule which creates it, then reload itself. You can also cause it to reconfigure by running "make configure". Signed-off-by: Thiago Macieira <thiago@macieira.org>
161 lines
5.7 KiB
Makefile
161 lines
5.7 KiB
Makefile
# -*- 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)
|
|
|
|
# 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
|
|
else
|
|
QT_MODULES = QtGui QtSvg
|
|
QT_CORE = QtCore
|
|
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) \\\
|
|
LIBQT = $(LIBQT) \\\
|
|
QTCXXFLAGS = $(QTCXXFLAGS) \\\
|
|
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) \\\
|
|
" | sed 's,\\,\n,g' > $(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
|