123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- #!/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).
- #
- 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... we 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 and many builds rely on that. See main.mk for more
- # details.
- #
- # Historical note: the pre-3.48 build only honored CPPFLAGS at
- # configure-time, and expanded them into the generated Makefile. There
- # are, in that build, no uses of CPPFLAGS in the configure-expanded
- # Makefile. Ergo: if a client configures with CPPFLAGS=... and then
- # explicitly passes CFLAGS=... to make, the CPPFLAGS will be
- # lost. That behavior is retained in 3.48+ because also honoring
- # CPPFLAGS at make-time may have undesired side effects on any number
- # of builds.
- #
- CFLAGS = @CFLAGS@ @CPPFLAGS@
- #
- # $(LDFLAGS.configure) represents any LDFLAGS=... the client passes to
- # configure. See main.mk.
- #
- LDFLAGS.configure = @LDFLAGS@
- #
- # CFLAGS.core is documented in main.mk.
- #
- CFLAGS.core = @SH_CFLAGS@
- LDFLAGS.shlib = @SH_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@
- CFLAGS.icu = @CFLAGS_ICU@
- LDFLAGS.libsqlite3.soname = @LDFLAGS_LIBSQLITE3_SONAME@
- 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.
- #
- # main.mk will fill out T.cc.sqlite with additional flags common to
- # all builds.
- #
- T.cc.sqlite += -D_HAVE_SQLITE_CONFIG_H -DBUILD_sqlite
- #
- # $(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@
- #
- # $(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@
- LINK_TOOLS_DYNAMICALLY ?= @LINK_TOOLS_DYNAMICALLY@
- 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: $(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
|