mirror of
https://github.com/sqlite/sqlite.git
synced 2024-11-24 08:07:42 +01:00
6d443b0d74
FossilOrigin-Name: ee9eb8b157c93b33a8ac201c31169cdd1d2cf2f21da92f7a6a418a41e5a50b7b
371 lines
11 KiB
Makefile
371 lines
11 KiB
Makefile
#!/usr/bin/make
|
|
# ^^^^ help out editors which guess this file's type.
|
|
#
|
|
# Makefile for SQLITE
|
|
#
|
|
# This makefile is intended to be configured automatically using the
|
|
# configure script.
|
|
#
|
|
# The docs for many of its variables are in the primary static
|
|
# makefile, main.mk (which this one includes at runtime).
|
|
#
|
|
.POSIX: #maintenance reminder: X:=Y is not POSIX-portable
|
|
all:
|
|
########################################################################
|
|
#
|
|
# Known TODOs/FIXMEs/TOIMPROVEs for the autosetup port, in no
|
|
# particular order...
|
|
#
|
|
# - TEA pieces.
|
|
#
|
|
# - Replace the autotools-specific distribution deliverable(s).
|
|
#
|
|
# - Confirm whether cross-compilation works and patch it
|
|
# appropriately.
|
|
#
|
|
# Maintenance reminders:
|
|
#
|
|
# - This makefile should remain as POSIX-make-compatible as possible:
|
|
# https://pubs.opengroup.org/onlinepubs/9799919799/utilities/make.html
|
|
#
|
|
# - The naming convention of some vars, using periods instead of
|
|
# underscores, though unconventional, was selected for a couple of
|
|
# reasons: 1) Personal taste (for which there is no accounting). 2)
|
|
# It is thought to help defend against inadvertent injection of
|
|
# those vars via environment variables (because X.Y is not a legal
|
|
# environment variable name). "Feature or bug?" is debatable and
|
|
# this naming convention may be reverted if it causes any grief.
|
|
#
|
|
|
|
#
|
|
# The top-most directory of the source tree. This is the directory
|
|
# that contains this "Makefile.in" and the "configure" script.
|
|
#
|
|
TOP = @abs_top_srcdir@
|
|
#
|
|
# Just testing some default dir expansions...
|
|
# srcdir = @srcdir@
|
|
# builddir = @builddir@
|
|
# top_srcdir = @top_srcdir@
|
|
# abs_top_srcdir = @abs_top_srcdir@
|
|
# abs_top_builddir = @abs_top_builddir@
|
|
#
|
|
|
|
#
|
|
# Autotools-conventional vars which are used by package installation
|
|
# rules in main.mk.
|
|
#
|
|
# Autosetup allows the various XYZdir vars to be overridden at
|
|
# configure-time with, e.g. --libdir=X and --mandir=Y. However,
|
|
# defining them at configure-time, instead of at make-time, leads to
|
|
# later awkwardness:
|
|
#
|
|
# $ ./configure --prefix=/usr
|
|
# $ make prefix=/bar
|
|
#
|
|
# In that invocation, libdir will be /usr/foo, not /bar/foo as it
|
|
# normally should, unless the user _also_ passes libdir=... to make.
|
|
#
|
|
# In 99%+ of use cases, setting prefix=X has the desired effect of
|
|
# calculating conventional defaults for various other dirs, like
|
|
# $prefix/lib, $prefix/include, etc. If, however, we export those at
|
|
# configure-time, the passing prefix=... to make will update only
|
|
# $prefix and none of its derived dirs.
|
|
#
|
|
# Because it is more important (for our use cases) that these vars be
|
|
# overridable via a make invocation than a configure invocation, and
|
|
# they conventionally derive from $(prefix) in all but the most exotic
|
|
# of use cases, we do not export the configure-defined overrides of
|
|
# those vars to this makefile. Instead, we export only $prefix and
|
|
# its derived vars are set to their conventional default values in
|
|
# main.mk, which users can then override at make-time as needed.
|
|
# Overriding $prefix via make will also calculate any derived vars, as
|
|
# one would expect, unless each is specifically overridden.
|
|
#
|
|
# For completeness's sake, the aforementioned conventional vars which
|
|
# are relevant to our installation rules are:
|
|
#
|
|
# datadir = $(prefix)/share
|
|
# mandir = $(datadir)/man
|
|
# includedir = $(prefix)/include
|
|
# exec_prefix = $(prefix)
|
|
# bindir = $(exec_prefix)/bin
|
|
# libdir = $(exec_prefix)/lib
|
|
#
|
|
# Our builds do not require any of their relatives:
|
|
#
|
|
# sbindir = $(exec_prefix)/sbin
|
|
# sysconfdir = /etc
|
|
# sharedstatedir = $(prefix)/com
|
|
# localstatedir = /var
|
|
# runstatedir = /run
|
|
# infodir = $(datadir)/info
|
|
# libexecdir = $(exec_prefix)/libexec
|
|
#
|
|
prefix = @prefix@
|
|
datadir = @datadir@
|
|
mandir = @mandir@
|
|
includedir = @includedir@
|
|
exec_prefix = @exec_prefix@
|
|
bindir = @bindir@
|
|
libdir = @libdir@
|
|
|
|
INSTALL = @BIN_INSTALL@
|
|
AR = @AR@
|
|
AR.flags = cr # TODO? Add a configure test to determine this?
|
|
CC = @CC@
|
|
B.cc = @CC_FOR_BUILD@ @BUILD_CFLAGS@
|
|
T.cc = $(CC)
|
|
#
|
|
# CFLAGS is problematic because it is frequently overridden when
|
|
# invoking make, which loses things like -fPIC. So... let's avoid
|
|
# using it directly and instead add a level of indirection. We
|
|
# combine CFLAGS and CPPFLAGS here because that's the way the legacy
|
|
# build did it.
|
|
#
|
|
CFLAGS = @CFLAGS@ @CPPFLAGS@
|
|
#
|
|
# CFLAGS.core is documented in main.mk.
|
|
#
|
|
CFLAGS.core = @SH_CFLAGS@
|
|
LDFLAGS.shobj = @SHOBJ_LDFLAGS@
|
|
LDFLAGS.zlib = @LDFLAGS_ZLIB@
|
|
LDFLAGS.math = @LDFLAGS_MATH@
|
|
LDFLAGS.rpath = @LDFLAGS_RPATH@
|
|
LDFLAGS.pthread = @LDFLAGS_PTHREAD@
|
|
LDFLAGS.dlopen = @LDFLAGS_DLOPEN@
|
|
LDFLAGS.readline = @LDFLAGS_READLINE@
|
|
CFLAGS.readline = @CFLAGS_READLINE@
|
|
LDFLAGS.icu = @LDFLAGS_ICU@
|
|
LDFLAGS.soname.libsqlite3 = @LDFLAGS_SONAME_LIBSQLITE3@
|
|
ENABLE_SHARED = @ENABLE_SHARED@
|
|
ENABLE_STATIC = @ENABLE_STATIC@
|
|
HAVE_WASI_SDK = @HAVE_WASI_SDK@
|
|
|
|
T.cc.sqlite = $(T.cc) @TARGET_DEBUG@
|
|
|
|
#
|
|
# Define -D_HAVE_SQLITE_CONFIG_H so that the code knows it
|
|
# can include the generated sqlite_cfg.h.
|
|
#
|
|
T.cc.sqlite += -D_HAVE_SQLITE_CONFIG_H -DBUILD_sqlite
|
|
#
|
|
# -I$(prefix)/include is primarily so that the ICU
|
|
# headers can be found.
|
|
#
|
|
T.cc.sqlite += -I$(prefix)/include
|
|
|
|
#
|
|
# main.mk will fill out T.cc.sqlite with some flags common to all builds.
|
|
|
|
#
|
|
# $(JIMSH) and $(CFLAGS.jimsh) are documented in main.mk. $(JIMSH)
|
|
# must start with a path component so that it can be invoked as a
|
|
# shell command.
|
|
#
|
|
CFLAGS.jimsh = @CFLAGS_JIMSH@
|
|
JIMSH = ./jimsh$(TEXE)
|
|
|
|
#
|
|
# $(B.tclsh) is documented in main.mk.
|
|
#
|
|
B.tclsh = @BTCLSH@
|
|
$(B.tclsh):
|
|
|
|
#
|
|
# $(CFLAGS.libsqlite3) is documented in main.mk.
|
|
#
|
|
CFLAGS.libsqlite3 = -DSQLITE_TEMP_STORE=@TEMP_STORE@
|
|
|
|
#
|
|
# $(OPT_FEATURE_FLAGS) is documented in main.mk.
|
|
#
|
|
# The appending of $(OPTIONS) to $(OPT_FEATURE_FLAGS) is historical
|
|
# and somewhat confusing because there's another var, $(OPTS), which
|
|
# has a similar (but not identical) role.
|
|
#
|
|
OPT_FEATURE_FLAGS = @OPT_FEATURE_FLAGS@ $(OPTIONS)
|
|
|
|
#
|
|
# Version (X.Y.Z) number for the SQLite being compiled.
|
|
#
|
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
|
|
|
#
|
|
# Filename extensions for binaries and libraries
|
|
#
|
|
B.exe = @BUILD_EXEEXT@
|
|
T.exe = @TARGET_EXEEXT@
|
|
B.dll = @BUILD_DLLEXT@
|
|
T.dll = @TARGET_DLLEXT@
|
|
B.lib = @BUILD_LIBEXT@
|
|
T.lib = @TARGET_LIBEXT@
|
|
|
|
#
|
|
# $(HAVE_TCL) is 1 if the configure script was able to locate the
|
|
# tclConfig.sh file, else it is 0. When this variable is 1, the TCL
|
|
# extension library (libtclsqlite3.so) and related testing apps are
|
|
# built.
|
|
#
|
|
HAVE_TCL = @HAVE_TCL@
|
|
|
|
#
|
|
# $(TCLSH_CMD) is the command to use for tclsh - normally just
|
|
# "tclsh", but we may know the specific version we want to use. This
|
|
# must point to a canonical TCL interpreter, not JimTCL.
|
|
#
|
|
TCLSH_CMD = @TCLSH_CMD@
|
|
TCL_CONFIG_SH = @TCL_CONFIG_SH@
|
|
|
|
#
|
|
# TCL config info from tclConfig.sh
|
|
#
|
|
# We have to inject this differently in main.mk to accommodate static
|
|
# makefiles, so we don't currently bother to export it here. This
|
|
# block is retained in case we decide that we do indeed need to export
|
|
# it at configure-time instead of calculate it at make-time.
|
|
#
|
|
#TCL_INCLUDE_SPEC = @TCL_INCLUDE_SPEC@
|
|
#TCL_LIB_SPEC = @TCL_LIB_SPEC@
|
|
#TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@
|
|
#TCL_EXEC_PREFIX = @TCL_EXEC_PREFIX@
|
|
#TCL_VERSION = @TCL_VERSION@
|
|
#
|
|
# $(TCLLIB_RPATH) is calculated by the configure script. Its counterpart
|
|
# in tclConfig.sh (TCL_LD_SEARCH_FLAGS) is defined in such a way as to
|
|
# make it incompatible with static makefiles.
|
|
#
|
|
#TCLLIB_RPATH = @TCLLIB_RPATH@
|
|
#
|
|
# $(TCLLIBDIR) = where to install the tcl plugin. If this is empty, it
|
|
# is calculated at make-time by the targets which need it but we
|
|
# export it here so that it can be set at configure-time, so that
|
|
# clients are not required to pass it at make-time, or set it in their
|
|
# environment, to override it.
|
|
#
|
|
TCLLIBDIR = @TCLLIBDIR@
|
|
|
|
#
|
|
# Additional options when running tests using testrunner.tcl
|
|
# This is usually either blank, or else --status
|
|
#
|
|
TSTRNNR_OPTS = @TSTRNNR_OPTS@
|
|
|
|
#
|
|
# If gcov support was enabled by the configure script, add the appropriate
|
|
# flags here. It's not always as easy as just having the user add the right
|
|
# CFLAGS / LDFLAGS, because libtool wants to use CFLAGS when linking, which
|
|
# causes build errors with -fprofile-arcs -ftest-coverage with some GCCs.
|
|
# Supposedly GCC does the right thing if you use --coverage, but in
|
|
# practice it still fails. See:
|
|
#
|
|
# http://www.mail-archive.com/debian-gcc@lists.debian.org/msg26197.html
|
|
#
|
|
# for more info.
|
|
#
|
|
CFLAGS.gcov1 = -DSQLITE_COVERAGE_TEST=1 -fprofile-arcs -ftest-coverage
|
|
LDFLAGS.gcov1 = -lgcov
|
|
USE_GCOV = @USE_GCOV@
|
|
T.compile.extras = $(CFLAGS.gcov$(USE_GCOV))
|
|
T.link.extras = $(LDFLAGS.gcov$(USE_GCOV))
|
|
|
|
#
|
|
# Vars with the AS_ prefix are specifically related to AutoSetup.
|
|
#
|
|
# AS_AUTO_DEF is the main configure script.
|
|
#
|
|
AS_AUTO_DEF = $(TOP)/auto.def
|
|
#
|
|
# Shell commands to re-run $(TOP)/configure with the same args it was
|
|
# invoked with to produce this makefile.
|
|
#
|
|
AS_AUTORECONFIG = @SQLITE_AUTORECONFIG@
|
|
|
|
USE_AMALGAMATION ?= @USE_AMALGAMATION@
|
|
AMALGAMATION_GEN_FLAGS ?= --linemacros=@AMALGAMATION_LINE_MACROS@
|
|
|
|
#
|
|
# CFLAGS for sqlite3$(T.exe)
|
|
#
|
|
SHELL_OPT ?= @OPT_SHELL@
|
|
|
|
Makefile: $(TOP)/Makefile.in $(AS_AUTO_DEF)
|
|
$(AS_AUTORECONFIG)
|
|
@touch $@
|
|
|
|
sqlite3.pc: $(TOP)/sqlite3.pc.in $(AS_AUTO_DEF)
|
|
$(AS_AUTORECONFIG)
|
|
@touch $@
|
|
install: install-pc # defined in main.mk
|
|
|
|
sqlite_cfg.h: $(TOP)/sqlite_cfg.h.in $(AS_AUTO_DEF)
|
|
$(AS_AUTORECONFIG)
|
|
@touch $@
|
|
|
|
#
|
|
# Fiddle app
|
|
#
|
|
# EMCC_WRAPPER must refer to the genuine emcc binary, or a
|
|
# call-compatible wrapper, e.g. $(TOP)/tool/emcc.sh. If it's empty,
|
|
# build components requiring Emscripten will not build.
|
|
#
|
|
# Achtung: though _this_ makefile is POSIX-make compatible, the fiddle
|
|
# build requires GNU make.
|
|
#
|
|
EMCC_WRAPPER = @EMCC_WRAPPER@
|
|
fiddle: sqlite3.c shell.c
|
|
@if [ x = "x$(EMCC_WRAPPER)" ]; then \
|
|
echo "Emscripten SDK not found by configure. Cannot build fiddle." 1&>2; \
|
|
exit 1; \
|
|
fi
|
|
$(MAKE) -C ext/wasm fiddle emcc_opt=-Os
|
|
|
|
#
|
|
# Spell-checking for source comments
|
|
# The sources checked are either C sources or C source templates.
|
|
# Their comments are extracted and processed through aspell using
|
|
# a custom dictionary that contains scads of odd identifiers that
|
|
# find their way into the comments.
|
|
#
|
|
# Currently, this target is setup to be "made" in-tree only.
|
|
# The output is ephemeral. Redirect it to guide spelling fixups,
|
|
# either to correct spelling or add words to tool/custom.txt.
|
|
#
|
|
./custom.rws: ./tool/custom.txt
|
|
@echo 'Updating custom dictionary from tool/custom.txt'
|
|
aspell --lang=en create master ./custom.rws < ./tool/custom.txt
|
|
# Note that jimsh does not work here:
|
|
# https://github.com/msteveb/jimtcl/issues/319
|
|
misspell: ./custom.rws has_tclsh84
|
|
$(TCLSH_CMD) ./tool/spellsift.tcl ./src/*.c ./src/*.h ./src/*.in
|
|
|
|
#
|
|
# clean/distclean are mostly defined in main.mk. In this makefile we
|
|
# perform cleanup known to be relevant to (only) the autosetup-driven
|
|
# build.
|
|
#
|
|
#clean-autosetup:
|
|
# -if [ -f ext/wasm/GNUmakefile ]; then \
|
|
# gmake --no-print-directory --ignore-errors -C ext/wasm clean; \
|
|
# fi >/dev/null 2>&1; true
|
|
#clean: clean-autosetup
|
|
|
|
distclean-autosetup: clean
|
|
rm -f sqlite_cfg.h config.log config.status config.defines.* Makefile sqlite3.pc
|
|
rm -f $(TOP)/tool/emcc.sh
|
|
rm -f libsqlite3*$(T.dll)
|
|
rm -f jimsh0*
|
|
# -if [ -f ext/wasm/GNUmakefile ]; then \
|
|
# gmake --no-print-directory --ignore-errors -C ext/wasm distclean; \
|
|
# fi >/dev/null 2>&1; true
|
|
distclean: distclean-autosetup
|
|
|
|
#
|
|
# tool/version-info: a utility for emitting sqlite3 version info
|
|
# in various forms.
|
|
#
|
|
version-info$(T.exe): $(TOP)/tool/version-info.c Makefile sqlite3.h
|
|
$(T.link) $(ST_OPT) -o $@ $(TOP)/tool/version-info.c
|
|
|
|
include $(TOP)/main.mk
|