mirror of https://github.com/Icinga/icinga2.git
Removed SQLite.
This commit is contained in:
parent
132a62f4eb
commit
6c580aeb4a
42
configure.ac
42
configure.ac
|
@ -26,8 +26,6 @@ AC_CONFIG_HEADERS([config.h])
|
||||||
AM_INIT_AUTOMAKE($PACKAGE,$VERSION)
|
AM_INIT_AUTOMAKE($PACKAGE,$VERSION)
|
||||||
#AM_SILENT_RULES([yes])
|
#AM_SILENT_RULES([yes])
|
||||||
|
|
||||||
AC_CONFIG_SUBDIRS([third-party/sqlite])
|
|
||||||
|
|
||||||
AC_PROG_CXX
|
AC_PROG_CXX
|
||||||
AC_LANG_CPLUSPLUS
|
AC_LANG_CPLUSPLUS
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
|
@ -64,39 +62,6 @@ AC_CHECK_LIB(socket, getsockname)
|
||||||
AC_CHECK_LIB(ws2_32, getsockname)
|
AC_CHECK_LIB(ws2_32, getsockname)
|
||||||
AC_CHECK_LIB(shlwapi, PathRemoveFileSpecA)
|
AC_CHECK_LIB(shlwapi, PathRemoveFileSpecA)
|
||||||
|
|
||||||
AC_CHECK_LIB(sqlite3, sqlite3_open)
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([for SQLite3])
|
|
||||||
AC_LANG_PUSH(C)
|
|
||||||
AC_COMPILE_IFELSE(
|
|
||||||
AC_LANG_PROGRAM([[#include <sqlite3.h>]], []),
|
|
||||||
[
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
bundled_sqlite3=no
|
|
||||||
],
|
|
||||||
[
|
|
||||||
AC_MSG_ERROR([no])
|
|
||||||
bundled_sqlite3=yes
|
|
||||||
]
|
|
||||||
)
|
|
||||||
AC_LANG_POP(C)
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(bundled-sqlite3,
|
|
||||||
[ --disable-bundled-sqlite3
|
|
||||||
disables building the bundled sqlite3 library],
|
|
||||||
[bundled_sqlite3=$enableval])
|
|
||||||
AM_CONDITIONAL([USE_BUNDLED_SQLITE3], [test "$bundled_sqlite3" = yes])
|
|
||||||
|
|
||||||
if test "$bundled_sqlite3" = yes; then
|
|
||||||
SQLITE3_LDFLAGS=${top_builddir}/third-party/sqlite/libsqlite3.la
|
|
||||||
SQLITE3_CPPFLAGS=-I${top_srcdir}/third-party/sqlite
|
|
||||||
else
|
|
||||||
SQLITE3_LDFLAGS=
|
|
||||||
SQLITE3_CPPFLAGS=
|
|
||||||
fi
|
|
||||||
AC_SUBST([SQLITE3_LDFLAGS])
|
|
||||||
AC_SUBST([SQLITE3_CPPFLAGS])
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
Makefile
|
||||||
compat/Makefile
|
compat/Makefile
|
||||||
|
@ -117,12 +82,6 @@ Doxyfile
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
if test "$bundled_sqlite3" = yes; then
|
|
||||||
sqlite3_msg="bundled"
|
|
||||||
else
|
|
||||||
sqlite3_msg="system-provided"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! test -z "$LTDLDEPS"; then
|
if ! test -z "$LTDLDEPS"; then
|
||||||
ltdl_msg="bundled"
|
ltdl_msg="bundled"
|
||||||
else
|
else
|
||||||
|
@ -131,6 +90,5 @@ fi
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
Libraries:
|
Libraries:
|
||||||
sqlite3: $sqlite3_msg
|
|
||||||
ltdl: $ltdl_msg
|
ltdl: $ltdl_msg
|
||||||
"
|
"
|
||||||
|
|
|
@ -1,11 +1,6 @@
|
||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
if USE_BUNDLED_SQLITE3
|
|
||||||
BUNDLED_SQLITE3=sqlite
|
|
||||||
endif
|
|
||||||
|
|
||||||
SUBDIRS = \
|
SUBDIRS = \
|
||||||
ltdl \
|
ltdl \
|
||||||
$(BUNDLED_SQLITE3) \
|
|
||||||
cJSON \
|
cJSON \
|
||||||
mmatch
|
mmatch
|
||||||
|
|
|
@ -1,236 +0,0 @@
|
||||||
Installation Instructions
|
|
||||||
*************************
|
|
||||||
|
|
||||||
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
|
|
||||||
Software Foundation, Inc.
|
|
||||||
|
|
||||||
This file is free documentation; the Free Software Foundation gives
|
|
||||||
unlimited permission to copy, distribute and modify it.
|
|
||||||
|
|
||||||
Basic Installation
|
|
||||||
==================
|
|
||||||
|
|
||||||
These are generic installation instructions.
|
|
||||||
|
|
||||||
The `configure' shell script attempts to guess correct values for
|
|
||||||
various system-dependent variables used during compilation. It uses
|
|
||||||
those values to create a `Makefile' in each directory of the package.
|
|
||||||
It may also create one or more `.h' files containing system-dependent
|
|
||||||
definitions. Finally, it creates a shell script `config.status' that
|
|
||||||
you can run in the future to recreate the current configuration, and a
|
|
||||||
file `config.log' containing compiler output (useful mainly for
|
|
||||||
debugging `configure').
|
|
||||||
|
|
||||||
It can also use an optional file (typically called `config.cache'
|
|
||||||
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
|
||||||
the results of its tests to speed up reconfiguring. (Caching is
|
|
||||||
disabled by default to prevent problems with accidental use of stale
|
|
||||||
cache files.)
|
|
||||||
|
|
||||||
If you need to do unusual things to compile the package, please try
|
|
||||||
to figure out how `configure' could check whether to do them, and mail
|
|
||||||
diffs or instructions to the address given in the `README' so they can
|
|
||||||
be considered for the next release. If you are using the cache, and at
|
|
||||||
some point `config.cache' contains results you don't want to keep, you
|
|
||||||
may remove or edit it.
|
|
||||||
|
|
||||||
The file `configure.ac' (or `configure.in') is used to create
|
|
||||||
`configure' by a program called `autoconf'. You only need
|
|
||||||
`configure.ac' if you want to change it or regenerate `configure' using
|
|
||||||
a newer version of `autoconf'.
|
|
||||||
|
|
||||||
The simplest way to compile this package is:
|
|
||||||
|
|
||||||
1. `cd' to the directory containing the package's source code and type
|
|
||||||
`./configure' to configure the package for your system. If you're
|
|
||||||
using `csh' on an old version of System V, you might need to type
|
|
||||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
|
||||||
`configure' itself.
|
|
||||||
|
|
||||||
Running `configure' takes awhile. While running, it prints some
|
|
||||||
messages telling which features it is checking for.
|
|
||||||
|
|
||||||
2. Type `make' to compile the package.
|
|
||||||
|
|
||||||
3. Optionally, type `make check' to run any self-tests that come with
|
|
||||||
the package.
|
|
||||||
|
|
||||||
4. Type `make install' to install the programs and any data files and
|
|
||||||
documentation.
|
|
||||||
|
|
||||||
5. You can remove the program binaries and object files from the
|
|
||||||
source code directory by typing `make clean'. To also remove the
|
|
||||||
files that `configure' created (so you can compile the package for
|
|
||||||
a different kind of computer), type `make distclean'. There is
|
|
||||||
also a `make maintainer-clean' target, but that is intended mainly
|
|
||||||
for the package's developers. If you use it, you may have to get
|
|
||||||
all sorts of other programs in order to regenerate files that came
|
|
||||||
with the distribution.
|
|
||||||
|
|
||||||
Compilers and Options
|
|
||||||
=====================
|
|
||||||
|
|
||||||
Some systems require unusual options for compilation or linking that the
|
|
||||||
`configure' script does not know about. Run `./configure --help' for
|
|
||||||
details on some of the pertinent environment variables.
|
|
||||||
|
|
||||||
You can give `configure' initial values for configuration parameters
|
|
||||||
by setting variables in the command line or in the environment. Here
|
|
||||||
is an example:
|
|
||||||
|
|
||||||
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
|
|
||||||
|
|
||||||
*Note Defining Variables::, for more details.
|
|
||||||
|
|
||||||
Compiling For Multiple Architectures
|
|
||||||
====================================
|
|
||||||
|
|
||||||
You can compile the package for more than one kind of computer at the
|
|
||||||
same time, by placing the object files for each architecture in their
|
|
||||||
own directory. To do this, you must use a version of `make' that
|
|
||||||
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
|
||||||
directory where you want the object files and executables to go and run
|
|
||||||
the `configure' script. `configure' automatically checks for the
|
|
||||||
source code in the directory that `configure' is in and in `..'.
|
|
||||||
|
|
||||||
If you have to use a `make' that does not support the `VPATH'
|
|
||||||
variable, you have to compile the package for one architecture at a
|
|
||||||
time in the source code directory. After you have installed the
|
|
||||||
package for one architecture, use `make distclean' before reconfiguring
|
|
||||||
for another architecture.
|
|
||||||
|
|
||||||
Installation Names
|
|
||||||
==================
|
|
||||||
|
|
||||||
By default, `make install' installs the package's commands under
|
|
||||||
`/usr/local/bin', include files under `/usr/local/include', etc. You
|
|
||||||
can specify an installation prefix other than `/usr/local' by giving
|
|
||||||
`configure' the option `--prefix=PREFIX'.
|
|
||||||
|
|
||||||
You can specify separate installation prefixes for
|
|
||||||
architecture-specific files and architecture-independent files. If you
|
|
||||||
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
|
|
||||||
PREFIX as the prefix for installing programs and libraries.
|
|
||||||
Documentation and other data files still use the regular prefix.
|
|
||||||
|
|
||||||
In addition, if you use an unusual directory layout you can give
|
|
||||||
options like `--bindir=DIR' to specify different values for particular
|
|
||||||
kinds of files. Run `configure --help' for a list of the directories
|
|
||||||
you can set and what kinds of files go in them.
|
|
||||||
|
|
||||||
If the package supports it, you can cause programs to be installed
|
|
||||||
with an extra prefix or suffix on their names by giving `configure' the
|
|
||||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
|
||||||
|
|
||||||
Optional Features
|
|
||||||
=================
|
|
||||||
|
|
||||||
Some packages pay attention to `--enable-FEATURE' options to
|
|
||||||
`configure', where FEATURE indicates an optional part of the package.
|
|
||||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
|
||||||
is something like `gnu-as' or `x' (for the X Window System). The
|
|
||||||
`README' should mention any `--enable-' and `--with-' options that the
|
|
||||||
package recognizes.
|
|
||||||
|
|
||||||
For packages that use the X Window System, `configure' can usually
|
|
||||||
find the X include and library files automatically, but if it doesn't,
|
|
||||||
you can use the `configure' options `--x-includes=DIR' and
|
|
||||||
`--x-libraries=DIR' to specify their locations.
|
|
||||||
|
|
||||||
Specifying the System Type
|
|
||||||
==========================
|
|
||||||
|
|
||||||
There may be some features `configure' cannot figure out automatically,
|
|
||||||
but needs to determine by the type of machine the package will run on.
|
|
||||||
Usually, assuming the package is built to be run on the _same_
|
|
||||||
architectures, `configure' can figure that out, but if it prints a
|
|
||||||
message saying it cannot guess the machine type, give it the
|
|
||||||
`--build=TYPE' option. TYPE can either be a short name for the system
|
|
||||||
type, such as `sun4', or a canonical name which has the form:
|
|
||||||
|
|
||||||
CPU-COMPANY-SYSTEM
|
|
||||||
|
|
||||||
where SYSTEM can have one of these forms:
|
|
||||||
|
|
||||||
OS KERNEL-OS
|
|
||||||
|
|
||||||
See the file `config.sub' for the possible values of each field. If
|
|
||||||
`config.sub' isn't included in this package, then this package doesn't
|
|
||||||
need to know the machine type.
|
|
||||||
|
|
||||||
If you are _building_ compiler tools for cross-compiling, you should
|
|
||||||
use the option `--target=TYPE' to select the type of system they will
|
|
||||||
produce code for.
|
|
||||||
|
|
||||||
If you want to _use_ a cross compiler, that generates code for a
|
|
||||||
platform different from the build platform, you should specify the
|
|
||||||
"host" platform (i.e., that on which the generated programs will
|
|
||||||
eventually be run) with `--host=TYPE'.
|
|
||||||
|
|
||||||
Sharing Defaults
|
|
||||||
================
|
|
||||||
|
|
||||||
If you want to set default values for `configure' scripts to share, you
|
|
||||||
can create a site shell script called `config.site' that gives default
|
|
||||||
values for variables like `CC', `cache_file', and `prefix'.
|
|
||||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
|
||||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
|
||||||
`CONFIG_SITE' environment variable to the location of the site script.
|
|
||||||
A warning: not all `configure' scripts look for a site script.
|
|
||||||
|
|
||||||
Defining Variables
|
|
||||||
==================
|
|
||||||
|
|
||||||
Variables not defined in a site shell script can be set in the
|
|
||||||
environment passed to `configure'. However, some packages may run
|
|
||||||
configure again during the build, and the customized values of these
|
|
||||||
variables may be lost. In order to avoid this problem, you should set
|
|
||||||
them in the `configure' command line, using `VAR=value'. For example:
|
|
||||||
|
|
||||||
./configure CC=/usr/local2/bin/gcc
|
|
||||||
|
|
||||||
causes the specified `gcc' to be used as the C compiler (unless it is
|
|
||||||
overridden in the site shell script). Here is a another example:
|
|
||||||
|
|
||||||
/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
|
||||||
|
|
||||||
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
|
|
||||||
configuration-related scripts to be executed by `/bin/bash'.
|
|
||||||
|
|
||||||
`configure' Invocation
|
|
||||||
======================
|
|
||||||
|
|
||||||
`configure' recognizes the following options to control how it operates.
|
|
||||||
|
|
||||||
`--help'
|
|
||||||
`-h'
|
|
||||||
Print a summary of the options to `configure', and exit.
|
|
||||||
|
|
||||||
`--version'
|
|
||||||
`-V'
|
|
||||||
Print the version of Autoconf used to generate the `configure'
|
|
||||||
script, and exit.
|
|
||||||
|
|
||||||
`--cache-file=FILE'
|
|
||||||
Enable the cache: use and save the results of the tests in FILE,
|
|
||||||
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
|
||||||
disable caching.
|
|
||||||
|
|
||||||
`--config-cache'
|
|
||||||
`-C'
|
|
||||||
Alias for `--cache-file=config.cache'.
|
|
||||||
|
|
||||||
`--quiet'
|
|
||||||
`--silent'
|
|
||||||
`-q'
|
|
||||||
Do not print messages saying which checks are being made. To
|
|
||||||
suppress all normal output, redirect it to `/dev/null' (any error
|
|
||||||
messages will still be shown).
|
|
||||||
|
|
||||||
`--srcdir=DIR'
|
|
||||||
Look for the package's source code in directory DIR. Usually
|
|
||||||
`configure' can determine that directory automatically.
|
|
||||||
|
|
||||||
`configure' also accepts some other, not widely useful, options. Run
|
|
||||||
`configure --help' for more details.
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
|
|
||||||
AM_CFLAGS = @THREADSAFE_FLAGS@ @DYNAMIC_EXTENSION_FLAGS@ -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE
|
|
||||||
|
|
||||||
lib_LTLIBRARIES = libsqlite3.la
|
|
||||||
libsqlite3_la_SOURCES = sqlite3.c
|
|
||||||
libsqlite3_la_LDFLAGS = -no-undefined -version-info 8:6:8
|
|
||||||
|
|
||||||
bin_PROGRAMS = sqlite3
|
|
||||||
sqlite3_SOURCES = shell.c sqlite3.h
|
|
||||||
sqlite3_LDADD = $(top_builddir)/libsqlite3.la @READLINE_LIBS@
|
|
||||||
sqlite3_DEPENDENCIES = $(top_builddir)/libsqlite3.la
|
|
||||||
|
|
||||||
include_HEADERS = sqlite3.h sqlite3ext.h
|
|
||||||
|
|
||||||
EXTRA_DIST = sqlite3.pc sqlite3.1 tea
|
|
||||||
pkgconfigdir = ${libdir}/pkgconfig
|
|
||||||
pkgconfig_DATA = sqlite3.pc
|
|
||||||
|
|
||||||
man_MANS = sqlite3.1
|
|
|
@ -1,32 +0,0 @@
|
||||||
|
|
||||||
This package contains:
|
|
||||||
|
|
||||||
* the SQLite library amalgamation (single file) source code distribution,
|
|
||||||
* the shell.c file used to build the sqlite3 shell too, and
|
|
||||||
* the sqlite3.h and sqlite3ext.h header files required to link programs
|
|
||||||
and sqlite extensions against the installed libary.
|
|
||||||
* autoconf/automake installation infrastucture.
|
|
||||||
|
|
||||||
The generic installation instructions for autoconf/automake are found
|
|
||||||
in the INSTALL file.
|
|
||||||
|
|
||||||
The following SQLite specific boolean options are supported:
|
|
||||||
|
|
||||||
--enable-readline use readline in shell tool [default=yes]
|
|
||||||
--enable-threadsafe build a thread-safe library [default=yes]
|
|
||||||
--enable-dynamic-extensions support loadable extensions [default=yes]
|
|
||||||
|
|
||||||
The default value for the CFLAGS variable (options passed to the C
|
|
||||||
compiler) includes debugging symbols in the build, resulting in larger
|
|
||||||
binaries than are necessary. Override it on the configure command
|
|
||||||
line like this:
|
|
||||||
|
|
||||||
$ CFLAGS="-Os" ./configure
|
|
||||||
|
|
||||||
to produce a smaller installation footprint.
|
|
||||||
|
|
||||||
Other SQLite compilation parameters can also be set using CFLAGS. For
|
|
||||||
example:
|
|
||||||
|
|
||||||
$ CFLAGS="-Os -DSQLITE_OMIT_TRIGGERS" ./configure
|
|
||||||
|
|
|
@ -1,108 +0,0 @@
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
# Supports the following non-standard switches.
|
|
||||||
#
|
|
||||||
# --enable-threadsafe
|
|
||||||
# --enable-readline
|
|
||||||
# --enable-dynamic-extensions
|
|
||||||
#
|
|
||||||
|
|
||||||
AC_PREREQ(2.61)
|
|
||||||
AC_INIT(sqlite, 3.7.12.1, http://www.sqlite.org)
|
|
||||||
AC_CONFIG_SRCDIR([sqlite3.c])
|
|
||||||
|
|
||||||
# Use automake.
|
|
||||||
AM_INIT_AUTOMAKE([foreign])
|
|
||||||
|
|
||||||
AC_SYS_LARGEFILE
|
|
||||||
|
|
||||||
# Check for required programs.
|
|
||||||
AC_PROG_CC
|
|
||||||
AC_PROG_RANLIB
|
|
||||||
AC_PROG_LIBTOOL
|
|
||||||
AC_PROG_MKDIR_P
|
|
||||||
|
|
||||||
# Check for library functions that SQLite can optionally use.
|
|
||||||
AC_CHECK_FUNCS([fdatasync usleep fullfsync localtime_r gmtime_r])
|
|
||||||
AC_FUNC_STRERROR_R
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([Makefile sqlite3.pc])
|
|
||||||
AC_SUBST(BUILD_CFLAGS)
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
# --enable-readline
|
|
||||||
#
|
|
||||||
AC_ARG_ENABLE(readline, [AS_HELP_STRING(
|
|
||||||
[--enable-readline],
|
|
||||||
[use readline in shell tool (yes, no) [default=yes]])],
|
|
||||||
[], [enable_readline=yes])
|
|
||||||
if test x"$enable_readline" != xno ; then
|
|
||||||
sLIBS=$LIBS
|
|
||||||
LIBS=""
|
|
||||||
AC_SEARCH_LIBS(tgetent, curses ncurses ncursesw, [], [])
|
|
||||||
AC_SEARCH_LIBS(readline, readline, [], [enable_readline=no])
|
|
||||||
AC_CHECK_FUNCS(readline, [], [])
|
|
||||||
READLINE_LIBS=$LIBS
|
|
||||||
LIBS=$sLIBS
|
|
||||||
fi
|
|
||||||
AC_SUBST(READLINE_LIBS)
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
# --enable-threadsafe
|
|
||||||
#
|
|
||||||
AC_ARG_ENABLE(threadsafe, [AS_HELP_STRING(
|
|
||||||
[--enable-threadsafe], [build a thread-safe library [default=yes]])],
|
|
||||||
[], [enable_threadsafe=yes])
|
|
||||||
THREADSAFE_FLAGS=-DSQLITE_THREADSAFE=0
|
|
||||||
if test x"$enable_threadsafe" != "xno"; then
|
|
||||||
THREADSAFE_FLAGS="-D_REENTRANT=1 -DSQLITE_THREADSAFE=1"
|
|
||||||
AC_SEARCH_LIBS(pthread_create, pthread)
|
|
||||||
fi
|
|
||||||
AC_SUBST(THREADSAFE_FLAGS)
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
# --enable-dynamic-extensions
|
|
||||||
#
|
|
||||||
AC_ARG_ENABLE(dynamic-extensions, [AS_HELP_STRING(
|
|
||||||
[--enable-dynamic-extensions], [support loadable extensions [default=yes]])],
|
|
||||||
[], [enable_dynamic_extensions=yes])
|
|
||||||
if test x"$enable_dynamic_extensions" != "xno"; then
|
|
||||||
AC_SEARCH_LIBS(dlopen, dl)
|
|
||||||
else
|
|
||||||
DYNAMIC_EXTENSION_FLAGS=-DSQLITE_OMIT_LOAD_EXTENSION=1
|
|
||||||
fi
|
|
||||||
AC_MSG_CHECKING([for whether to support dynamic extensions])
|
|
||||||
AC_MSG_RESULT($enable_dynamic_extensions)
|
|
||||||
AC_SUBST(DYNAMIC_EXTENSION_FLAGS)
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS(posix_fallocate)
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
# UPDATE: Maybe it's better if users just set CFLAGS before invoking
|
|
||||||
# configure. This option doesn't really add much...
|
|
||||||
#
|
|
||||||
# --enable-tempstore
|
|
||||||
#
|
|
||||||
# AC_ARG_ENABLE(tempstore, [AS_HELP_STRING(
|
|
||||||
# [--enable-tempstore],
|
|
||||||
# [in-memory temporary tables (never, no, yes, always) [default=no]])],
|
|
||||||
# [], [enable_tempstore=no])
|
|
||||||
# AC_MSG_CHECKING([for whether or not to store temp tables in-memory])
|
|
||||||
# case "$enable_tempstore" in
|
|
||||||
# never ) TEMP_STORE=0 ;;
|
|
||||||
# no ) TEMP_STORE=1 ;;
|
|
||||||
# always ) TEMP_STORE=3 ;;
|
|
||||||
# yes ) TEMP_STORE=3 ;;
|
|
||||||
# * )
|
|
||||||
# TEMP_STORE=1
|
|
||||||
# enable_tempstore=yes
|
|
||||||
# ;;
|
|
||||||
# esac
|
|
||||||
# AC_MSG_RESULT($enable_tempstore)
|
|
||||||
# AC_SUBST(TEMP_STORE)
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
AC_OUTPUT
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,229 +0,0 @@
|
||||||
.\" Hey, EMACS: -*- nroff -*-
|
|
||||||
.\" First parameter, NAME, should be all caps
|
|
||||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
|
||||||
.\" other parameters are allowed: see man(7), man(1)
|
|
||||||
.TH SQLITE3 1 "Mon Apr 15 23:49:17 2002"
|
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
|
||||||
.\"
|
|
||||||
.\" Some roff macros, for reference:
|
|
||||||
.\" .nh disable hyphenation
|
|
||||||
.\" .hy enable hyphenation
|
|
||||||
.\" .ad l left justify
|
|
||||||
.\" .ad b justify to both left and right margins
|
|
||||||
.\" .nf disable filling
|
|
||||||
.\" .fi enable filling
|
|
||||||
.\" .br insert line break
|
|
||||||
.\" .sp <n> insert n+1 empty lines
|
|
||||||
.\" for manpage-specific macros, see man(7)
|
|
||||||
.SH NAME
|
|
||||||
.B sqlite3
|
|
||||||
\- A command line interface for SQLite version 3
|
|
||||||
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B sqlite3
|
|
||||||
.RI [ options ]
|
|
||||||
.RI [ databasefile ]
|
|
||||||
.RI [ SQL ]
|
|
||||||
|
|
||||||
.SH SUMMARY
|
|
||||||
.PP
|
|
||||||
.B sqlite3
|
|
||||||
is a terminal-based front-end to the SQLite library that can evaluate
|
|
||||||
queries interactively and display the results in multiple formats.
|
|
||||||
.B sqlite3
|
|
||||||
can also be used within shell scripts and other applications to provide
|
|
||||||
batch processing features.
|
|
||||||
|
|
||||||
.SH DESCRIPTION
|
|
||||||
To start a
|
|
||||||
.B sqlite3
|
|
||||||
interactive session, invoke the
|
|
||||||
.B sqlite3
|
|
||||||
command and optionally provide the name of a database file. If the
|
|
||||||
database file does not exist, it will be created. If the database file
|
|
||||||
does exist, it will be opened.
|
|
||||||
|
|
||||||
For example, to create a new database file named "mydata.db", create
|
|
||||||
a table named "memos" and insert a couple of records into that table:
|
|
||||||
.sp
|
|
||||||
$
|
|
||||||
.B sqlite3 mydata.db
|
|
||||||
.br
|
|
||||||
SQLite version 3.1.3
|
|
||||||
.br
|
|
||||||
Enter ".help" for instructions
|
|
||||||
.br
|
|
||||||
sqlite>
|
|
||||||
.B create table memos(text, priority INTEGER);
|
|
||||||
.br
|
|
||||||
sqlite>
|
|
||||||
.B insert into memos values('deliver project description', 10);
|
|
||||||
.br
|
|
||||||
sqlite>
|
|
||||||
.B insert into memos values('lunch with Christine', 100);
|
|
||||||
.br
|
|
||||||
sqlite>
|
|
||||||
.B select * from memos;
|
|
||||||
.br
|
|
||||||
deliver project description|10
|
|
||||||
.br
|
|
||||||
lunch with Christine|100
|
|
||||||
.br
|
|
||||||
sqlite>
|
|
||||||
.sp
|
|
||||||
|
|
||||||
If no database name is supplied, the ATTACH sql command can be used
|
|
||||||
to attach to existing or create new database files. ATTACH can also
|
|
||||||
be used to attach to multiple databases within the same interactive
|
|
||||||
session. This is useful for migrating data between databases,
|
|
||||||
possibly changing the schema along the way.
|
|
||||||
|
|
||||||
Optionally, a SQL statement or set of SQL statements can be supplied as
|
|
||||||
a single argument. Multiple statements should be separated by
|
|
||||||
semi-colons.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
.sp
|
|
||||||
$
|
|
||||||
.B sqlite3 -line mydata.db 'select * from memos where priority > 20;'
|
|
||||||
.br
|
|
||||||
text = lunch with Christine
|
|
||||||
.br
|
|
||||||
priority = 100
|
|
||||||
.br
|
|
||||||
.sp
|
|
||||||
|
|
||||||
.SS SQLITE META-COMMANDS
|
|
||||||
.PP
|
|
||||||
The interactive interpreter offers a set of meta-commands that can be
|
|
||||||
used to control the output format, examine the currently attached
|
|
||||||
database files, or perform administrative operations upon the
|
|
||||||
attached databases (such as rebuilding indices). Meta-commands are
|
|
||||||
always prefixed with a dot (.).
|
|
||||||
|
|
||||||
A list of available meta-commands can be viewed at any time by issuing
|
|
||||||
the '.help' command. For example:
|
|
||||||
.sp
|
|
||||||
sqlite>
|
|
||||||
.B .help
|
|
||||||
.nf
|
|
||||||
.cc |
|
|
||||||
.databases List names and files of attached databases
|
|
||||||
.dump ?TABLE? ... Dump the database in an SQL text format
|
|
||||||
.echo ON|OFF Turn command echo on or off
|
|
||||||
.exit Exit this program
|
|
||||||
.explain ON|OFF Turn output mode suitable for EXPLAIN on or off.
|
|
||||||
.header(s) ON|OFF Turn display of headers on or off
|
|
||||||
.help Show this message
|
|
||||||
.import FILE TABLE Import data from FILE into TABLE
|
|
||||||
.indices TABLE Show names of all indices on TABLE
|
|
||||||
.mode MODE ?TABLE? Set output mode where MODE is one of:
|
|
||||||
csv Comma-separated values
|
|
||||||
column Left-aligned columns. (See .width)
|
|
||||||
html HTML <table> code
|
|
||||||
insert SQL insert statements for TABLE
|
|
||||||
line One value per line
|
|
||||||
list Values delimited by .separator string
|
|
||||||
tabs Tab-separated values
|
|
||||||
tcl TCL list elements
|
|
||||||
.nullvalue STRING Print STRING in place of NULL values
|
|
||||||
.output FILENAME Send output to FILENAME
|
|
||||||
.output stdout Send output to the screen
|
|
||||||
.prompt MAIN CONTINUE Replace the standard prompts
|
|
||||||
.quit Exit this program
|
|
||||||
.read FILENAME Execute SQL in FILENAME
|
|
||||||
.schema ?TABLE? Show the CREATE statements
|
|
||||||
.separator STRING Change separator used by output mode and .import
|
|
||||||
.show Show the current values for various settings
|
|
||||||
.tables ?PATTERN? List names of tables matching a LIKE pattern
|
|
||||||
.timeout MS Try opening locked tables for MS milliseconds
|
|
||||||
.width NUM NUM ... Set column widths for "column" mode
|
|
||||||
sqlite>
|
|
||||||
|cc .
|
|
||||||
.sp
|
|
||||||
.fi
|
|
||||||
|
|
||||||
.SH OPTIONS
|
|
||||||
.B sqlite3
|
|
||||||
has the following options:
|
|
||||||
.TP
|
|
||||||
.BI \-init\ file
|
|
||||||
Read and execute commands from
|
|
||||||
.I file
|
|
||||||
, which can contain a mix of SQL statements and meta-commands.
|
|
||||||
.TP
|
|
||||||
.B \-echo
|
|
||||||
Print commands before execution.
|
|
||||||
.TP
|
|
||||||
.B \-[no]header
|
|
||||||
Turn headers on or off.
|
|
||||||
.TP
|
|
||||||
.B \-column
|
|
||||||
Query results will be displayed in a table like form, using
|
|
||||||
whitespace characters to separate the columns and align the
|
|
||||||
output.
|
|
||||||
.TP
|
|
||||||
.B \-html
|
|
||||||
Query results will be output as simple HTML tables.
|
|
||||||
.TP
|
|
||||||
.B \-line
|
|
||||||
Query results will be displayed with one value per line, rows
|
|
||||||
separated by a blank line. Designed to be easily parsed by
|
|
||||||
scripts or other programs
|
|
||||||
.TP
|
|
||||||
.B \-list
|
|
||||||
Query results will be displayed with the separator (|, by default)
|
|
||||||
character between each field value. The default.
|
|
||||||
.TP
|
|
||||||
.BI \-separator\ separator
|
|
||||||
Set output field separator. Default is '|'.
|
|
||||||
.TP
|
|
||||||
.BI \-nullvalue\ string
|
|
||||||
Set string used to represent NULL values. Default is ''
|
|
||||||
(empty string).
|
|
||||||
.TP
|
|
||||||
.B \-version
|
|
||||||
Show SQLite version.
|
|
||||||
.TP
|
|
||||||
.B \-help
|
|
||||||
Show help on options and exit.
|
|
||||||
|
|
||||||
|
|
||||||
.SH INIT FILE
|
|
||||||
.B sqlite3
|
|
||||||
reads an initialization file to set the configuration of the
|
|
||||||
interactive environment. Throughout initialization, any previously
|
|
||||||
specified setting can be overridden. The sequence of initialization is
|
|
||||||
as follows:
|
|
||||||
|
|
||||||
o The default configuration is established as follows:
|
|
||||||
|
|
||||||
.sp
|
|
||||||
.nf
|
|
||||||
.cc |
|
|
||||||
mode = LIST
|
|
||||||
separator = "|"
|
|
||||||
main prompt = "sqlite> "
|
|
||||||
continue prompt = " ...> "
|
|
||||||
|cc .
|
|
||||||
.sp
|
|
||||||
.fi
|
|
||||||
|
|
||||||
o If the file
|
|
||||||
.B ~/.sqliterc
|
|
||||||
exists, it is processed first.
|
|
||||||
can be found in the user's home directory, it is
|
|
||||||
read and processed. It should generally only contain meta-commands.
|
|
||||||
|
|
||||||
o If the -init option is present, the specified file is processed.
|
|
||||||
|
|
||||||
o All other command line options are processed.
|
|
||||||
|
|
||||||
.SH SEE ALSO
|
|
||||||
http://www.sqlite.org/
|
|
||||||
.br
|
|
||||||
The sqlite-doc package
|
|
||||||
.SH AUTHOR
|
|
||||||
This manual page was originally written by Andreas Rottmann
|
|
||||||
<rotty@debian.org>, for the Debian GNU/Linux system (but may be used
|
|
||||||
by others). It was subsequently revised by Bill Bumgarner <bbum@mac.com>.
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,13 +0,0 @@
|
||||||
# Package Information for pkg-config
|
|
||||||
|
|
||||||
prefix=/tmp/i2
|
|
||||||
exec_prefix=${prefix}
|
|
||||||
libdir=${exec_prefix}/lib
|
|
||||||
includedir=${prefix}/include
|
|
||||||
|
|
||||||
Name: SQLite
|
|
||||||
Description: SQL database engine
|
|
||||||
Version: 3.7.12.1
|
|
||||||
Libs: -L${libdir} -lsqlite3
|
|
||||||
Libs.private: -ldl -lpthread
|
|
||||||
Cflags: -I${includedir}
|
|
|
@ -1,447 +0,0 @@
|
||||||
/*
|
|
||||||
** 2006 June 7
|
|
||||||
**
|
|
||||||
** The author disclaims copyright to this source code. In place of
|
|
||||||
** a legal notice, here is a blessing:
|
|
||||||
**
|
|
||||||
** May you do good and not evil.
|
|
||||||
** May you find forgiveness for yourself and forgive others.
|
|
||||||
** May you share freely, never taking more than you give.
|
|
||||||
**
|
|
||||||
*************************************************************************
|
|
||||||
** This header file defines the SQLite interface for use by
|
|
||||||
** shared libraries that want to be imported as extensions into
|
|
||||||
** an SQLite instance. Shared libraries that intend to be loaded
|
|
||||||
** as extensions by SQLite should #include this file instead of
|
|
||||||
** sqlite3.h.
|
|
||||||
*/
|
|
||||||
#ifndef _SQLITE3EXT_H_
|
|
||||||
#define _SQLITE3EXT_H_
|
|
||||||
#include "sqlite3.h"
|
|
||||||
|
|
||||||
typedef struct sqlite3_api_routines sqlite3_api_routines;
|
|
||||||
|
|
||||||
/*
|
|
||||||
** The following structure holds pointers to all of the SQLite API
|
|
||||||
** routines.
|
|
||||||
**
|
|
||||||
** WARNING: In order to maintain backwards compatibility, add new
|
|
||||||
** interfaces to the end of this structure only. If you insert new
|
|
||||||
** interfaces in the middle of this structure, then older different
|
|
||||||
** versions of SQLite will not be able to load each others' shared
|
|
||||||
** libraries!
|
|
||||||
*/
|
|
||||||
struct sqlite3_api_routines {
|
|
||||||
void * (*aggregate_context)(sqlite3_context*,int nBytes);
|
|
||||||
int (*aggregate_count)(sqlite3_context*);
|
|
||||||
int (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*));
|
|
||||||
int (*bind_double)(sqlite3_stmt*,int,double);
|
|
||||||
int (*bind_int)(sqlite3_stmt*,int,int);
|
|
||||||
int (*bind_int64)(sqlite3_stmt*,int,sqlite_int64);
|
|
||||||
int (*bind_null)(sqlite3_stmt*,int);
|
|
||||||
int (*bind_parameter_count)(sqlite3_stmt*);
|
|
||||||
int (*bind_parameter_index)(sqlite3_stmt*,const char*zName);
|
|
||||||
const char * (*bind_parameter_name)(sqlite3_stmt*,int);
|
|
||||||
int (*bind_text)(sqlite3_stmt*,int,const char*,int n,void(*)(void*));
|
|
||||||
int (*bind_text16)(sqlite3_stmt*,int,const void*,int,void(*)(void*));
|
|
||||||
int (*bind_value)(sqlite3_stmt*,int,const sqlite3_value*);
|
|
||||||
int (*busy_handler)(sqlite3*,int(*)(void*,int),void*);
|
|
||||||
int (*busy_timeout)(sqlite3*,int ms);
|
|
||||||
int (*changes)(sqlite3*);
|
|
||||||
int (*close)(sqlite3*);
|
|
||||||
int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,
|
|
||||||
int eTextRep,const char*));
|
|
||||||
int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,
|
|
||||||
int eTextRep,const void*));
|
|
||||||
const void * (*column_blob)(sqlite3_stmt*,int iCol);
|
|
||||||
int (*column_bytes)(sqlite3_stmt*,int iCol);
|
|
||||||
int (*column_bytes16)(sqlite3_stmt*,int iCol);
|
|
||||||
int (*column_count)(sqlite3_stmt*pStmt);
|
|
||||||
const char * (*column_database_name)(sqlite3_stmt*,int);
|
|
||||||
const void * (*column_database_name16)(sqlite3_stmt*,int);
|
|
||||||
const char * (*column_decltype)(sqlite3_stmt*,int i);
|
|
||||||
const void * (*column_decltype16)(sqlite3_stmt*,int);
|
|
||||||
double (*column_double)(sqlite3_stmt*,int iCol);
|
|
||||||
int (*column_int)(sqlite3_stmt*,int iCol);
|
|
||||||
sqlite_int64 (*column_int64)(sqlite3_stmt*,int iCol);
|
|
||||||
const char * (*column_name)(sqlite3_stmt*,int);
|
|
||||||
const void * (*column_name16)(sqlite3_stmt*,int);
|
|
||||||
const char * (*column_origin_name)(sqlite3_stmt*,int);
|
|
||||||
const void * (*column_origin_name16)(sqlite3_stmt*,int);
|
|
||||||
const char * (*column_table_name)(sqlite3_stmt*,int);
|
|
||||||
const void * (*column_table_name16)(sqlite3_stmt*,int);
|
|
||||||
const unsigned char * (*column_text)(sqlite3_stmt*,int iCol);
|
|
||||||
const void * (*column_text16)(sqlite3_stmt*,int iCol);
|
|
||||||
int (*column_type)(sqlite3_stmt*,int iCol);
|
|
||||||
sqlite3_value* (*column_value)(sqlite3_stmt*,int iCol);
|
|
||||||
void * (*commit_hook)(sqlite3*,int(*)(void*),void*);
|
|
||||||
int (*complete)(const char*sql);
|
|
||||||
int (*complete16)(const void*sql);
|
|
||||||
int (*create_collation)(sqlite3*,const char*,int,void*,
|
|
||||||
int(*)(void*,int,const void*,int,const void*));
|
|
||||||
int (*create_collation16)(sqlite3*,const void*,int,void*,
|
|
||||||
int(*)(void*,int,const void*,int,const void*));
|
|
||||||
int (*create_function)(sqlite3*,const char*,int,int,void*,
|
|
||||||
void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
|
|
||||||
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
|
|
||||||
void (*xFinal)(sqlite3_context*));
|
|
||||||
int (*create_function16)(sqlite3*,const void*,int,int,void*,
|
|
||||||
void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
|
|
||||||
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
|
|
||||||
void (*xFinal)(sqlite3_context*));
|
|
||||||
int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*);
|
|
||||||
int (*data_count)(sqlite3_stmt*pStmt);
|
|
||||||
sqlite3 * (*db_handle)(sqlite3_stmt*);
|
|
||||||
int (*declare_vtab)(sqlite3*,const char*);
|
|
||||||
int (*enable_shared_cache)(int);
|
|
||||||
int (*errcode)(sqlite3*db);
|
|
||||||
const char * (*errmsg)(sqlite3*);
|
|
||||||
const void * (*errmsg16)(sqlite3*);
|
|
||||||
int (*exec)(sqlite3*,const char*,sqlite3_callback,void*,char**);
|
|
||||||
int (*expired)(sqlite3_stmt*);
|
|
||||||
int (*finalize)(sqlite3_stmt*pStmt);
|
|
||||||
void (*free)(void*);
|
|
||||||
void (*free_table)(char**result);
|
|
||||||
int (*get_autocommit)(sqlite3*);
|
|
||||||
void * (*get_auxdata)(sqlite3_context*,int);
|
|
||||||
int (*get_table)(sqlite3*,const char*,char***,int*,int*,char**);
|
|
||||||
int (*global_recover)(void);
|
|
||||||
void (*interruptx)(sqlite3*);
|
|
||||||
sqlite_int64 (*last_insert_rowid)(sqlite3*);
|
|
||||||
const char * (*libversion)(void);
|
|
||||||
int (*libversion_number)(void);
|
|
||||||
void *(*malloc)(int);
|
|
||||||
char * (*mprintf)(const char*,...);
|
|
||||||
int (*open)(const char*,sqlite3**);
|
|
||||||
int (*open16)(const void*,sqlite3**);
|
|
||||||
int (*prepare)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
|
|
||||||
int (*prepare16)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
|
|
||||||
void * (*profile)(sqlite3*,void(*)(void*,const char*,sqlite_uint64),void*);
|
|
||||||
void (*progress_handler)(sqlite3*,int,int(*)(void*),void*);
|
|
||||||
void *(*realloc)(void*,int);
|
|
||||||
int (*reset)(sqlite3_stmt*pStmt);
|
|
||||||
void (*result_blob)(sqlite3_context*,const void*,int,void(*)(void*));
|
|
||||||
void (*result_double)(sqlite3_context*,double);
|
|
||||||
void (*result_error)(sqlite3_context*,const char*,int);
|
|
||||||
void (*result_error16)(sqlite3_context*,const void*,int);
|
|
||||||
void (*result_int)(sqlite3_context*,int);
|
|
||||||
void (*result_int64)(sqlite3_context*,sqlite_int64);
|
|
||||||
void (*result_null)(sqlite3_context*);
|
|
||||||
void (*result_text)(sqlite3_context*,const char*,int,void(*)(void*));
|
|
||||||
void (*result_text16)(sqlite3_context*,const void*,int,void(*)(void*));
|
|
||||||
void (*result_text16be)(sqlite3_context*,const void*,int,void(*)(void*));
|
|
||||||
void (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*));
|
|
||||||
void (*result_value)(sqlite3_context*,sqlite3_value*);
|
|
||||||
void * (*rollback_hook)(sqlite3*,void(*)(void*),void*);
|
|
||||||
int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,
|
|
||||||
const char*,const char*),void*);
|
|
||||||
void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*));
|
|
||||||
char * (*snprintf)(int,char*,const char*,...);
|
|
||||||
int (*step)(sqlite3_stmt*);
|
|
||||||
int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,
|
|
||||||
char const**,char const**,int*,int*,int*);
|
|
||||||
void (*thread_cleanup)(void);
|
|
||||||
int (*total_changes)(sqlite3*);
|
|
||||||
void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*);
|
|
||||||
int (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*);
|
|
||||||
void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,
|
|
||||||
sqlite_int64),void*);
|
|
||||||
void * (*user_data)(sqlite3_context*);
|
|
||||||
const void * (*value_blob)(sqlite3_value*);
|
|
||||||
int (*value_bytes)(sqlite3_value*);
|
|
||||||
int (*value_bytes16)(sqlite3_value*);
|
|
||||||
double (*value_double)(sqlite3_value*);
|
|
||||||
int (*value_int)(sqlite3_value*);
|
|
||||||
sqlite_int64 (*value_int64)(sqlite3_value*);
|
|
||||||
int (*value_numeric_type)(sqlite3_value*);
|
|
||||||
const unsigned char * (*value_text)(sqlite3_value*);
|
|
||||||
const void * (*value_text16)(sqlite3_value*);
|
|
||||||
const void * (*value_text16be)(sqlite3_value*);
|
|
||||||
const void * (*value_text16le)(sqlite3_value*);
|
|
||||||
int (*value_type)(sqlite3_value*);
|
|
||||||
char *(*vmprintf)(const char*,va_list);
|
|
||||||
/* Added ??? */
|
|
||||||
int (*overload_function)(sqlite3*, const char *zFuncName, int nArg);
|
|
||||||
/* Added by 3.3.13 */
|
|
||||||
int (*prepare_v2)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
|
|
||||||
int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
|
|
||||||
int (*clear_bindings)(sqlite3_stmt*);
|
|
||||||
/* Added by 3.4.1 */
|
|
||||||
int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,
|
|
||||||
void (*xDestroy)(void *));
|
|
||||||
/* Added by 3.5.0 */
|
|
||||||
int (*bind_zeroblob)(sqlite3_stmt*,int,int);
|
|
||||||
int (*blob_bytes)(sqlite3_blob*);
|
|
||||||
int (*blob_close)(sqlite3_blob*);
|
|
||||||
int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,
|
|
||||||
int,sqlite3_blob**);
|
|
||||||
int (*blob_read)(sqlite3_blob*,void*,int,int);
|
|
||||||
int (*blob_write)(sqlite3_blob*,const void*,int,int);
|
|
||||||
int (*create_collation_v2)(sqlite3*,const char*,int,void*,
|
|
||||||
int(*)(void*,int,const void*,int,const void*),
|
|
||||||
void(*)(void*));
|
|
||||||
int (*file_control)(sqlite3*,const char*,int,void*);
|
|
||||||
sqlite3_int64 (*memory_highwater)(int);
|
|
||||||
sqlite3_int64 (*memory_used)(void);
|
|
||||||
sqlite3_mutex *(*mutex_alloc)(int);
|
|
||||||
void (*mutex_enter)(sqlite3_mutex*);
|
|
||||||
void (*mutex_free)(sqlite3_mutex*);
|
|
||||||
void (*mutex_leave)(sqlite3_mutex*);
|
|
||||||
int (*mutex_try)(sqlite3_mutex*);
|
|
||||||
int (*open_v2)(const char*,sqlite3**,int,const char*);
|
|
||||||
int (*release_memory)(int);
|
|
||||||
void (*result_error_nomem)(sqlite3_context*);
|
|
||||||
void (*result_error_toobig)(sqlite3_context*);
|
|
||||||
int (*sleep)(int);
|
|
||||||
void (*soft_heap_limit)(int);
|
|
||||||
sqlite3_vfs *(*vfs_find)(const char*);
|
|
||||||
int (*vfs_register)(sqlite3_vfs*,int);
|
|
||||||
int (*vfs_unregister)(sqlite3_vfs*);
|
|
||||||
int (*xthreadsafe)(void);
|
|
||||||
void (*result_zeroblob)(sqlite3_context*,int);
|
|
||||||
void (*result_error_code)(sqlite3_context*,int);
|
|
||||||
int (*test_control)(int, ...);
|
|
||||||
void (*randomness)(int,void*);
|
|
||||||
sqlite3 *(*context_db_handle)(sqlite3_context*);
|
|
||||||
int (*extended_result_codes)(sqlite3*,int);
|
|
||||||
int (*limit)(sqlite3*,int,int);
|
|
||||||
sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*);
|
|
||||||
const char *(*sql)(sqlite3_stmt*);
|
|
||||||
int (*status)(int,int*,int*,int);
|
|
||||||
int (*backup_finish)(sqlite3_backup*);
|
|
||||||
sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*);
|
|
||||||
int (*backup_pagecount)(sqlite3_backup*);
|
|
||||||
int (*backup_remaining)(sqlite3_backup*);
|
|
||||||
int (*backup_step)(sqlite3_backup*,int);
|
|
||||||
const char *(*compileoption_get)(int);
|
|
||||||
int (*compileoption_used)(const char*);
|
|
||||||
int (*create_function_v2)(sqlite3*,const char*,int,int,void*,
|
|
||||||
void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
|
|
||||||
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
|
|
||||||
void (*xFinal)(sqlite3_context*),
|
|
||||||
void(*xDestroy)(void*));
|
|
||||||
int (*db_config)(sqlite3*,int,...);
|
|
||||||
sqlite3_mutex *(*db_mutex)(sqlite3*);
|
|
||||||
int (*db_status)(sqlite3*,int,int*,int*,int);
|
|
||||||
int (*extended_errcode)(sqlite3*);
|
|
||||||
void (*log)(int,const char*,...);
|
|
||||||
sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64);
|
|
||||||
const char *(*sourceid)(void);
|
|
||||||
int (*stmt_status)(sqlite3_stmt*,int,int);
|
|
||||||
int (*strnicmp)(const char*,const char*,int);
|
|
||||||
int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*);
|
|
||||||
int (*wal_autocheckpoint)(sqlite3*,int);
|
|
||||||
int (*wal_checkpoint)(sqlite3*,const char*);
|
|
||||||
void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*);
|
|
||||||
int (*blob_reopen)(sqlite3_blob*,sqlite3_int64);
|
|
||||||
int (*vtab_config)(sqlite3*,int op,...);
|
|
||||||
int (*vtab_on_conflict)(sqlite3*);
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
** The following macros redefine the API routines so that they are
|
|
||||||
** redirected throught the global sqlite3_api structure.
|
|
||||||
**
|
|
||||||
** This header file is also used by the loadext.c source file
|
|
||||||
** (part of the main SQLite library - not an extension) so that
|
|
||||||
** it can get access to the sqlite3_api_routines structure
|
|
||||||
** definition. But the main library does not want to redefine
|
|
||||||
** the API. So the redefinition macros are only valid if the
|
|
||||||
** SQLITE_CORE macros is undefined.
|
|
||||||
*/
|
|
||||||
#ifndef SQLITE_CORE
|
|
||||||
#define sqlite3_aggregate_context sqlite3_api->aggregate_context
|
|
||||||
#ifndef SQLITE_OMIT_DEPRECATED
|
|
||||||
#define sqlite3_aggregate_count sqlite3_api->aggregate_count
|
|
||||||
#endif
|
|
||||||
#define sqlite3_bind_blob sqlite3_api->bind_blob
|
|
||||||
#define sqlite3_bind_double sqlite3_api->bind_double
|
|
||||||
#define sqlite3_bind_int sqlite3_api->bind_int
|
|
||||||
#define sqlite3_bind_int64 sqlite3_api->bind_int64
|
|
||||||
#define sqlite3_bind_null sqlite3_api->bind_null
|
|
||||||
#define sqlite3_bind_parameter_count sqlite3_api->bind_parameter_count
|
|
||||||
#define sqlite3_bind_parameter_index sqlite3_api->bind_parameter_index
|
|
||||||
#define sqlite3_bind_parameter_name sqlite3_api->bind_parameter_name
|
|
||||||
#define sqlite3_bind_text sqlite3_api->bind_text
|
|
||||||
#define sqlite3_bind_text16 sqlite3_api->bind_text16
|
|
||||||
#define sqlite3_bind_value sqlite3_api->bind_value
|
|
||||||
#define sqlite3_busy_handler sqlite3_api->busy_handler
|
|
||||||
#define sqlite3_busy_timeout sqlite3_api->busy_timeout
|
|
||||||
#define sqlite3_changes sqlite3_api->changes
|
|
||||||
#define sqlite3_close sqlite3_api->close
|
|
||||||
#define sqlite3_collation_needed sqlite3_api->collation_needed
|
|
||||||
#define sqlite3_collation_needed16 sqlite3_api->collation_needed16
|
|
||||||
#define sqlite3_column_blob sqlite3_api->column_blob
|
|
||||||
#define sqlite3_column_bytes sqlite3_api->column_bytes
|
|
||||||
#define sqlite3_column_bytes16 sqlite3_api->column_bytes16
|
|
||||||
#define sqlite3_column_count sqlite3_api->column_count
|
|
||||||
#define sqlite3_column_database_name sqlite3_api->column_database_name
|
|
||||||
#define sqlite3_column_database_name16 sqlite3_api->column_database_name16
|
|
||||||
#define sqlite3_column_decltype sqlite3_api->column_decltype
|
|
||||||
#define sqlite3_column_decltype16 sqlite3_api->column_decltype16
|
|
||||||
#define sqlite3_column_double sqlite3_api->column_double
|
|
||||||
#define sqlite3_column_int sqlite3_api->column_int
|
|
||||||
#define sqlite3_column_int64 sqlite3_api->column_int64
|
|
||||||
#define sqlite3_column_name sqlite3_api->column_name
|
|
||||||
#define sqlite3_column_name16 sqlite3_api->column_name16
|
|
||||||
#define sqlite3_column_origin_name sqlite3_api->column_origin_name
|
|
||||||
#define sqlite3_column_origin_name16 sqlite3_api->column_origin_name16
|
|
||||||
#define sqlite3_column_table_name sqlite3_api->column_table_name
|
|
||||||
#define sqlite3_column_table_name16 sqlite3_api->column_table_name16
|
|
||||||
#define sqlite3_column_text sqlite3_api->column_text
|
|
||||||
#define sqlite3_column_text16 sqlite3_api->column_text16
|
|
||||||
#define sqlite3_column_type sqlite3_api->column_type
|
|
||||||
#define sqlite3_column_value sqlite3_api->column_value
|
|
||||||
#define sqlite3_commit_hook sqlite3_api->commit_hook
|
|
||||||
#define sqlite3_complete sqlite3_api->complete
|
|
||||||
#define sqlite3_complete16 sqlite3_api->complete16
|
|
||||||
#define sqlite3_create_collation sqlite3_api->create_collation
|
|
||||||
#define sqlite3_create_collation16 sqlite3_api->create_collation16
|
|
||||||
#define sqlite3_create_function sqlite3_api->create_function
|
|
||||||
#define sqlite3_create_function16 sqlite3_api->create_function16
|
|
||||||
#define sqlite3_create_module sqlite3_api->create_module
|
|
||||||
#define sqlite3_create_module_v2 sqlite3_api->create_module_v2
|
|
||||||
#define sqlite3_data_count sqlite3_api->data_count
|
|
||||||
#define sqlite3_db_handle sqlite3_api->db_handle
|
|
||||||
#define sqlite3_declare_vtab sqlite3_api->declare_vtab
|
|
||||||
#define sqlite3_enable_shared_cache sqlite3_api->enable_shared_cache
|
|
||||||
#define sqlite3_errcode sqlite3_api->errcode
|
|
||||||
#define sqlite3_errmsg sqlite3_api->errmsg
|
|
||||||
#define sqlite3_errmsg16 sqlite3_api->errmsg16
|
|
||||||
#define sqlite3_exec sqlite3_api->exec
|
|
||||||
#ifndef SQLITE_OMIT_DEPRECATED
|
|
||||||
#define sqlite3_expired sqlite3_api->expired
|
|
||||||
#endif
|
|
||||||
#define sqlite3_finalize sqlite3_api->finalize
|
|
||||||
#define sqlite3_free sqlite3_api->free
|
|
||||||
#define sqlite3_free_table sqlite3_api->free_table
|
|
||||||
#define sqlite3_get_autocommit sqlite3_api->get_autocommit
|
|
||||||
#define sqlite3_get_auxdata sqlite3_api->get_auxdata
|
|
||||||
#define sqlite3_get_table sqlite3_api->get_table
|
|
||||||
#ifndef SQLITE_OMIT_DEPRECATED
|
|
||||||
#define sqlite3_global_recover sqlite3_api->global_recover
|
|
||||||
#endif
|
|
||||||
#define sqlite3_interrupt sqlite3_api->interruptx
|
|
||||||
#define sqlite3_last_insert_rowid sqlite3_api->last_insert_rowid
|
|
||||||
#define sqlite3_libversion sqlite3_api->libversion
|
|
||||||
#define sqlite3_libversion_number sqlite3_api->libversion_number
|
|
||||||
#define sqlite3_malloc sqlite3_api->malloc
|
|
||||||
#define sqlite3_mprintf sqlite3_api->mprintf
|
|
||||||
#define sqlite3_open sqlite3_api->open
|
|
||||||
#define sqlite3_open16 sqlite3_api->open16
|
|
||||||
#define sqlite3_prepare sqlite3_api->prepare
|
|
||||||
#define sqlite3_prepare16 sqlite3_api->prepare16
|
|
||||||
#define sqlite3_prepare_v2 sqlite3_api->prepare_v2
|
|
||||||
#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2
|
|
||||||
#define sqlite3_profile sqlite3_api->profile
|
|
||||||
#define sqlite3_progress_handler sqlite3_api->progress_handler
|
|
||||||
#define sqlite3_realloc sqlite3_api->realloc
|
|
||||||
#define sqlite3_reset sqlite3_api->reset
|
|
||||||
#define sqlite3_result_blob sqlite3_api->result_blob
|
|
||||||
#define sqlite3_result_double sqlite3_api->result_double
|
|
||||||
#define sqlite3_result_error sqlite3_api->result_error
|
|
||||||
#define sqlite3_result_error16 sqlite3_api->result_error16
|
|
||||||
#define sqlite3_result_int sqlite3_api->result_int
|
|
||||||
#define sqlite3_result_int64 sqlite3_api->result_int64
|
|
||||||
#define sqlite3_result_null sqlite3_api->result_null
|
|
||||||
#define sqlite3_result_text sqlite3_api->result_text
|
|
||||||
#define sqlite3_result_text16 sqlite3_api->result_text16
|
|
||||||
#define sqlite3_result_text16be sqlite3_api->result_text16be
|
|
||||||
#define sqlite3_result_text16le sqlite3_api->result_text16le
|
|
||||||
#define sqlite3_result_value sqlite3_api->result_value
|
|
||||||
#define sqlite3_rollback_hook sqlite3_api->rollback_hook
|
|
||||||
#define sqlite3_set_authorizer sqlite3_api->set_authorizer
|
|
||||||
#define sqlite3_set_auxdata sqlite3_api->set_auxdata
|
|
||||||
#define sqlite3_snprintf sqlite3_api->snprintf
|
|
||||||
#define sqlite3_step sqlite3_api->step
|
|
||||||
#define sqlite3_table_column_metadata sqlite3_api->table_column_metadata
|
|
||||||
#define sqlite3_thread_cleanup sqlite3_api->thread_cleanup
|
|
||||||
#define sqlite3_total_changes sqlite3_api->total_changes
|
|
||||||
#define sqlite3_trace sqlite3_api->trace
|
|
||||||
#ifndef SQLITE_OMIT_DEPRECATED
|
|
||||||
#define sqlite3_transfer_bindings sqlite3_api->transfer_bindings
|
|
||||||
#endif
|
|
||||||
#define sqlite3_update_hook sqlite3_api->update_hook
|
|
||||||
#define sqlite3_user_data sqlite3_api->user_data
|
|
||||||
#define sqlite3_value_blob sqlite3_api->value_blob
|
|
||||||
#define sqlite3_value_bytes sqlite3_api->value_bytes
|
|
||||||
#define sqlite3_value_bytes16 sqlite3_api->value_bytes16
|
|
||||||
#define sqlite3_value_double sqlite3_api->value_double
|
|
||||||
#define sqlite3_value_int sqlite3_api->value_int
|
|
||||||
#define sqlite3_value_int64 sqlite3_api->value_int64
|
|
||||||
#define sqlite3_value_numeric_type sqlite3_api->value_numeric_type
|
|
||||||
#define sqlite3_value_text sqlite3_api->value_text
|
|
||||||
#define sqlite3_value_text16 sqlite3_api->value_text16
|
|
||||||
#define sqlite3_value_text16be sqlite3_api->value_text16be
|
|
||||||
#define sqlite3_value_text16le sqlite3_api->value_text16le
|
|
||||||
#define sqlite3_value_type sqlite3_api->value_type
|
|
||||||
#define sqlite3_vmprintf sqlite3_api->vmprintf
|
|
||||||
#define sqlite3_overload_function sqlite3_api->overload_function
|
|
||||||
#define sqlite3_prepare_v2 sqlite3_api->prepare_v2
|
|
||||||
#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2
|
|
||||||
#define sqlite3_clear_bindings sqlite3_api->clear_bindings
|
|
||||||
#define sqlite3_bind_zeroblob sqlite3_api->bind_zeroblob
|
|
||||||
#define sqlite3_blob_bytes sqlite3_api->blob_bytes
|
|
||||||
#define sqlite3_blob_close sqlite3_api->blob_close
|
|
||||||
#define sqlite3_blob_open sqlite3_api->blob_open
|
|
||||||
#define sqlite3_blob_read sqlite3_api->blob_read
|
|
||||||
#define sqlite3_blob_write sqlite3_api->blob_write
|
|
||||||
#define sqlite3_create_collation_v2 sqlite3_api->create_collation_v2
|
|
||||||
#define sqlite3_file_control sqlite3_api->file_control
|
|
||||||
#define sqlite3_memory_highwater sqlite3_api->memory_highwater
|
|
||||||
#define sqlite3_memory_used sqlite3_api->memory_used
|
|
||||||
#define sqlite3_mutex_alloc sqlite3_api->mutex_alloc
|
|
||||||
#define sqlite3_mutex_enter sqlite3_api->mutex_enter
|
|
||||||
#define sqlite3_mutex_free sqlite3_api->mutex_free
|
|
||||||
#define sqlite3_mutex_leave sqlite3_api->mutex_leave
|
|
||||||
#define sqlite3_mutex_try sqlite3_api->mutex_try
|
|
||||||
#define sqlite3_open_v2 sqlite3_api->open_v2
|
|
||||||
#define sqlite3_release_memory sqlite3_api->release_memory
|
|
||||||
#define sqlite3_result_error_nomem sqlite3_api->result_error_nomem
|
|
||||||
#define sqlite3_result_error_toobig sqlite3_api->result_error_toobig
|
|
||||||
#define sqlite3_sleep sqlite3_api->sleep
|
|
||||||
#define sqlite3_soft_heap_limit sqlite3_api->soft_heap_limit
|
|
||||||
#define sqlite3_vfs_find sqlite3_api->vfs_find
|
|
||||||
#define sqlite3_vfs_register sqlite3_api->vfs_register
|
|
||||||
#define sqlite3_vfs_unregister sqlite3_api->vfs_unregister
|
|
||||||
#define sqlite3_threadsafe sqlite3_api->xthreadsafe
|
|
||||||
#define sqlite3_result_zeroblob sqlite3_api->result_zeroblob
|
|
||||||
#define sqlite3_result_error_code sqlite3_api->result_error_code
|
|
||||||
#define sqlite3_test_control sqlite3_api->test_control
|
|
||||||
#define sqlite3_randomness sqlite3_api->randomness
|
|
||||||
#define sqlite3_context_db_handle sqlite3_api->context_db_handle
|
|
||||||
#define sqlite3_extended_result_codes sqlite3_api->extended_result_codes
|
|
||||||
#define sqlite3_limit sqlite3_api->limit
|
|
||||||
#define sqlite3_next_stmt sqlite3_api->next_stmt
|
|
||||||
#define sqlite3_sql sqlite3_api->sql
|
|
||||||
#define sqlite3_status sqlite3_api->status
|
|
||||||
#define sqlite3_backup_finish sqlite3_api->backup_finish
|
|
||||||
#define sqlite3_backup_init sqlite3_api->backup_init
|
|
||||||
#define sqlite3_backup_pagecount sqlite3_api->backup_pagecount
|
|
||||||
#define sqlite3_backup_remaining sqlite3_api->backup_remaining
|
|
||||||
#define sqlite3_backup_step sqlite3_api->backup_step
|
|
||||||
#define sqlite3_compileoption_get sqlite3_api->compileoption_get
|
|
||||||
#define sqlite3_compileoption_used sqlite3_api->compileoption_used
|
|
||||||
#define sqlite3_create_function_v2 sqlite3_api->create_function_v2
|
|
||||||
#define sqlite3_db_config sqlite3_api->db_config
|
|
||||||
#define sqlite3_db_mutex sqlite3_api->db_mutex
|
|
||||||
#define sqlite3_db_status sqlite3_api->db_status
|
|
||||||
#define sqlite3_extended_errcode sqlite3_api->extended_errcode
|
|
||||||
#define sqlite3_log sqlite3_api->log
|
|
||||||
#define sqlite3_soft_heap_limit64 sqlite3_api->soft_heap_limit64
|
|
||||||
#define sqlite3_sourceid sqlite3_api->sourceid
|
|
||||||
#define sqlite3_stmt_status sqlite3_api->stmt_status
|
|
||||||
#define sqlite3_strnicmp sqlite3_api->strnicmp
|
|
||||||
#define sqlite3_unlock_notify sqlite3_api->unlock_notify
|
|
||||||
#define sqlite3_wal_autocheckpoint sqlite3_api->wal_autocheckpoint
|
|
||||||
#define sqlite3_wal_checkpoint sqlite3_api->wal_checkpoint
|
|
||||||
#define sqlite3_wal_hook sqlite3_api->wal_hook
|
|
||||||
#define sqlite3_blob_reopen sqlite3_api->blob_reopen
|
|
||||||
#define sqlite3_vtab_config sqlite3_api->vtab_config
|
|
||||||
#define sqlite3_vtab_on_conflict sqlite3_api->vtab_on_conflict
|
|
||||||
#endif /* SQLITE_CORE */
|
|
||||||
|
|
||||||
#define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api = 0;
|
|
||||||
#define SQLITE_EXTENSION_INIT2(v) sqlite3_api = v;
|
|
||||||
|
|
||||||
#endif /* _SQLITE3EXT_H_ */
|
|
|
@ -1,36 +0,0 @@
|
||||||
This is the SQLite extension for Tcl using the Tcl Extension
|
|
||||||
Architecture (TEA). For additional information on SQLite see
|
|
||||||
|
|
||||||
http://www.sqlite.org/
|
|
||||||
|
|
||||||
|
|
||||||
UNIX BUILD
|
|
||||||
==========
|
|
||||||
|
|
||||||
Building under most UNIX systems is easy, just run the configure script
|
|
||||||
and then run make. For more information about the build process, see
|
|
||||||
the tcl/unix/README file in the Tcl src dist. The following minimal
|
|
||||||
example will install the extension in the /opt/tcl directory.
|
|
||||||
|
|
||||||
$ cd sqlite-*-tea
|
|
||||||
$ ./configure --prefix=/opt/tcl
|
|
||||||
$ make
|
|
||||||
$ make install
|
|
||||||
|
|
||||||
WINDOWS BUILD
|
|
||||||
=============
|
|
||||||
|
|
||||||
The recommended method to build extensions under windows is to use the
|
|
||||||
Msys + Mingw build process. This provides a Unix-style build while
|
|
||||||
generating native Windows binaries. Using the Msys + Mingw build tools
|
|
||||||
means that you can use the same configure script as per the Unix build
|
|
||||||
to create a Makefile. See the tcl/win/README file for the URL of
|
|
||||||
the Msys + Mingw download.
|
|
||||||
|
|
||||||
If you have VC++ then you may wish to use the files in the win
|
|
||||||
subdirectory and build the extension using just VC++. These files have
|
|
||||||
been designed to be as generic as possible but will require some
|
|
||||||
additional maintenance by the project developer to synchronise with
|
|
||||||
the TEA configure.in and Makefile.in files. Instructions for using the
|
|
||||||
VC++ makefile are written in the first part of the Makefile.vc
|
|
||||||
file.
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +0,0 @@
|
||||||
The author disclaims copyright to this source code. In place of
|
|
||||||
a legal notice, here is a blessing:
|
|
||||||
|
|
||||||
May you do good and not evil.
|
|
||||||
May you find forgiveness for yourself and forgive others.
|
|
||||||
May you share freely, never taking more than you give.
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,420 +0,0 @@
|
||||||
# makefile.vc -- -*- Makefile -*-
|
|
||||||
#
|
|
||||||
# Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+)
|
|
||||||
#
|
|
||||||
# This makefile is based upon the Tcl 8.4 Makefile.vc and modified to
|
|
||||||
# make it suitable as a general package makefile. Look for the word EDIT
|
|
||||||
# which marks sections that may need modification. As a minumum you will
|
|
||||||
# need to change the PROJECT, DOTVERSION and DLLOBJS variables to values
|
|
||||||
# relevant to your package.
|
|
||||||
#
|
|
||||||
# See the file "license.terms" for information on usage and redistribution
|
|
||||||
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|
||||||
#
|
|
||||||
# Copyright (c) 1995-1996 Sun Microsystems, Inc.
|
|
||||||
# Copyright (c) 1998-2000 Ajuba Solutions.
|
|
||||||
# Copyright (c) 2001 ActiveState Corporation.
|
|
||||||
# Copyright (c) 2001-2002 David Gravereaux.
|
|
||||||
# Copyright (c) 2003 Pat Thoyts
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
# RCS: @(#)$Id: makefile.vc,v 1.4 2004/07/26 08:22:05 patthoyts Exp $
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
!if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCToolkitInstallDir)
|
|
||||||
MSG = ^
|
|
||||||
You will need to run vcvars32.bat from Developer Studio, first, to setup^
|
|
||||||
the environment. Jump to this line to read the new instructions.
|
|
||||||
!error $(MSG)
|
|
||||||
!endif
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# HOW TO USE this makefile:
|
|
||||||
#
|
|
||||||
# 1) It is now necessary to have %MSVCDir% set in the environment. This is
|
|
||||||
# used as a check to see if vcvars32.bat had been run prior to running
|
|
||||||
# nmake or during the installation of Microsoft Visual C++, MSVCDir had
|
|
||||||
# been set globally and the PATH adjusted. Either way is valid.
|
|
||||||
#
|
|
||||||
# You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin
|
|
||||||
# directory to setup the proper environment, if needed, for your current
|
|
||||||
# setup. This is a needed bootstrap requirement and allows the swapping of
|
|
||||||
# different environments to be easier.
|
|
||||||
#
|
|
||||||
# 2) To use the Platform SDK (not expressly needed), run setenv.bat after
|
|
||||||
# vcvars32.bat according to the instructions for it. This can also turn on
|
|
||||||
# the 64-bit compiler, if your SDK has it.
|
|
||||||
#
|
|
||||||
# 3) Targets are:
|
|
||||||
# all -- Builds everything.
|
|
||||||
# <project> -- Builds the project (eg: nmake sample)
|
|
||||||
# test -- Builds and runs the test suite.
|
|
||||||
# install -- Installs the built binaries and libraries to $(INSTALLDIR)
|
|
||||||
# in an appropriate subdirectory.
|
|
||||||
# clean/realclean/distclean -- varying levels of cleaning.
|
|
||||||
#
|
|
||||||
# 4) Macros usable on the commandline:
|
|
||||||
# INSTALLDIR=<path>
|
|
||||||
# Sets where to install Tcl from the built binaries.
|
|
||||||
# C:\Progra~1\Tcl is assumed when not specified.
|
|
||||||
#
|
|
||||||
# OPTS=static,msvcrt,staticpkg,threads,symbols,profile,loimpact,none
|
|
||||||
# Sets special options for the core. The default is for none.
|
|
||||||
# Any combination of the above may be used (comma separated).
|
|
||||||
# 'none' will over-ride everything to nothing.
|
|
||||||
#
|
|
||||||
# static = Builds a static library of the core instead of a
|
|
||||||
# dll. The shell will be static (and large), as well.
|
|
||||||
# msvcrt = Effects the static option only to switch it from
|
|
||||||
# using libcmt(d) as the C runtime [by default] to
|
|
||||||
# msvcrt(d). This is useful for static embedding
|
|
||||||
# support.
|
|
||||||
# staticpkg = Effects the static option only to switch
|
|
||||||
# tclshXX.exe to have the dde and reg extension linked
|
|
||||||
# inside it.
|
|
||||||
# threads = Turns on full multithreading support.
|
|
||||||
# thrdalloc = Use the thread allocator (shared global free pool).
|
|
||||||
# symbols = Adds symbols for step debugging.
|
|
||||||
# profile = Adds profiling hooks. Map file is assumed.
|
|
||||||
# loimpact = Adds a flag for how NT treats the heap to keep memory
|
|
||||||
# in use, low. This is said to impact alloc performance.
|
|
||||||
#
|
|
||||||
# STATS=memdbg,compdbg,none
|
|
||||||
# Sets optional memory and bytecode compiler debugging code added
|
|
||||||
# to the core. The default is for none. Any combination of the
|
|
||||||
# above may be used (comma separated). 'none' will over-ride
|
|
||||||
# everything to nothing.
|
|
||||||
#
|
|
||||||
# memdbg = Enables the debugging memory allocator.
|
|
||||||
# compdbg = Enables byte compilation logging.
|
|
||||||
#
|
|
||||||
# MACHINE=(IX86|IA64|ALPHA)
|
|
||||||
# Set the machine type used for the compiler, linker, and
|
|
||||||
# resource compiler. This hook is needed to tell the tools
|
|
||||||
# when alternate platforms are requested. IX86 is the default
|
|
||||||
# when not specified.
|
|
||||||
#
|
|
||||||
# TMP_DIR=<path>
|
|
||||||
# OUT_DIR=<path>
|
|
||||||
# Hooks to allow the intermediate and output directories to be
|
|
||||||
# changed. $(OUT_DIR) is assumed to be
|
|
||||||
# $(BINROOT)\(Release|Debug) based on if symbols are requested.
|
|
||||||
# $(TMP_DIR) will de $(OUT_DIR)\<buildtype> by default.
|
|
||||||
#
|
|
||||||
# TESTPAT=<file>
|
|
||||||
# Reads the tests requested to be run from this file.
|
|
||||||
#
|
|
||||||
# CFG_ENCODING=encoding
|
|
||||||
# name of encoding for configuration information. Defaults
|
|
||||||
# to cp1252
|
|
||||||
#
|
|
||||||
# 5) Examples:
|
|
||||||
#
|
|
||||||
# Basic syntax of calling nmake looks like this:
|
|
||||||
# nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]]
|
|
||||||
#
|
|
||||||
# Standard (no frills)
|
|
||||||
# c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat
|
|
||||||
# Setting environment for using Microsoft Visual C++ tools.
|
|
||||||
# c:\tcl_src\win\>nmake -f makefile.vc all
|
|
||||||
# c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl
|
|
||||||
#
|
|
||||||
# Building for Win64
|
|
||||||
# c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat
|
|
||||||
# Setting environment for using Microsoft Visual C++ tools.
|
|
||||||
# c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL
|
|
||||||
# Targeting Windows pre64 RETAIL
|
|
||||||
# c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64
|
|
||||||
#
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
#==============================================================================
|
|
||||||
###############################################################################
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
!if !exist("makefile.vc")
|
|
||||||
MSG = ^
|
|
||||||
You must run this makefile only from the directory it is in.^
|
|
||||||
Please `cd` to its location first.
|
|
||||||
!error $(MSG)
|
|
||||||
!endif
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
# Project specific information (EDIT)
|
|
||||||
#
|
|
||||||
# You should edit this with the name and version of your project. This
|
|
||||||
# information is used to generate the name of the package library and
|
|
||||||
# it's install location.
|
|
||||||
#
|
|
||||||
# For example, the sample extension is going to build sample04.dll and
|
|
||||||
# would install it into $(INSTALLDIR)\lib\sample04
|
|
||||||
#
|
|
||||||
# You need to specify the object files that need to be linked into your
|
|
||||||
# binary here.
|
|
||||||
#
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
PROJECT = sample
|
|
||||||
!include "rules.vc"
|
|
||||||
|
|
||||||
DOTVERSION = 0.5
|
|
||||||
VERSION = $(DOTVERSION:.=)
|
|
||||||
STUBPREFIX = $(PROJECT)stub
|
|
||||||
|
|
||||||
DLLOBJS = \
|
|
||||||
$(TMP_DIR)\tclsample.obj \
|
|
||||||
$(TMP_DIR)\sample.obj
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
# Target names and paths ( shouldn't need changing )
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
BINROOT = .
|
|
||||||
ROOT = ..
|
|
||||||
|
|
||||||
PRJIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
|
|
||||||
PRJLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
|
|
||||||
PRJLIB = $(OUT_DIR)\$(PRJLIBNAME)
|
|
||||||
|
|
||||||
PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
|
|
||||||
PRJSTUBLIB = $(OUT_DIR)\$(PRJSTUBLIBNAME)
|
|
||||||
|
|
||||||
### Make sure we use backslash only.
|
|
||||||
PRJ_INSTALL_DIR = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION)
|
|
||||||
LIB_INSTALL_DIR = $(PRJ_INSTALL_DIR)
|
|
||||||
BIN_INSTALL_DIR = $(PRJ_INSTALL_DIR)
|
|
||||||
DOC_INSTALL_DIR = $(PRJ_INSTALL_DIR)
|
|
||||||
SCRIPT_INSTALL_DIR = $(PRJ_INSTALL_DIR)
|
|
||||||
INCLUDE_INSTALL_DIR = $(_TCLDIR)\include
|
|
||||||
|
|
||||||
### The following paths CANNOT have spaces in them.
|
|
||||||
GENERICDIR = $(ROOT)\generic
|
|
||||||
WINDIR = $(ROOT)\win
|
|
||||||
LIBDIR = $(ROOT)\library
|
|
||||||
DOCDIR = $(ROOT)\doc
|
|
||||||
TOOLSDIR = $(ROOT)\tools
|
|
||||||
COMPATDIR = $(ROOT)\compat
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# Compile flags
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
|
|
||||||
!if !$(DEBUG)
|
|
||||||
!if $(OPTIMIZING)
|
|
||||||
### This cranks the optimization level to maximize speed
|
|
||||||
cdebug = -O2 -Op -Gs
|
|
||||||
!else
|
|
||||||
cdebug =
|
|
||||||
!endif
|
|
||||||
!else if "$(MACHINE)" == "IA64"
|
|
||||||
### Warnings are too many, can't support warnings into errors.
|
|
||||||
cdebug = -Z7 -Od -GZ
|
|
||||||
!else
|
|
||||||
cdebug = -Z7 -WX -Od -GZ
|
|
||||||
!endif
|
|
||||||
|
|
||||||
### Declarations common to all compiler options
|
|
||||||
cflags = -nologo -c -W3 -YX -Fp$(TMP_DIR)^\
|
|
||||||
|
|
||||||
!if $(PENT_0F_ERRATA)
|
|
||||||
cflags = $(cflags) -QI0f
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if $(ITAN_B_ERRATA)
|
|
||||||
cflags = $(cflags) -QIA64_Bx
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if $(MSVCRT)
|
|
||||||
!if $(DEBUG)
|
|
||||||
crt = -MDd
|
|
||||||
!else
|
|
||||||
crt = -MD
|
|
||||||
!endif
|
|
||||||
!else
|
|
||||||
!if $(DEBUG)
|
|
||||||
crt = -MTd
|
|
||||||
!else
|
|
||||||
crt = -MT
|
|
||||||
!endif
|
|
||||||
!endif
|
|
||||||
|
|
||||||
INCLUDES = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)"
|
|
||||||
BASE_CLFAGS = $(cflags) $(cdebug) $(crt) $(INCLUDES)
|
|
||||||
CON_CFLAGS = $(cflags) $(cdebug) $(crt) -DCONSOLE
|
|
||||||
TCL_CFLAGS = -DUSE_TCL_STUBS -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \
|
|
||||||
$(BASE_CLFAGS) $(OPTDEFINES)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# Link flags
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
|
|
||||||
!if $(DEBUG)
|
|
||||||
ldebug = -debug:full -debugtype:cv
|
|
||||||
!else
|
|
||||||
ldebug = -release -opt:ref -opt:icf,3
|
|
||||||
!endif
|
|
||||||
|
|
||||||
### Declarations common to all linker options
|
|
||||||
lflags = -nologo -machine:$(MACHINE) $(ldebug)
|
|
||||||
|
|
||||||
!if $(PROFILE)
|
|
||||||
lflags = $(lflags) -profile
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if $(ALIGN98_HACK) && !$(STATIC_BUILD)
|
|
||||||
### Align sections for PE size savings.
|
|
||||||
lflags = $(lflags) -opt:nowin98
|
|
||||||
!else if !$(ALIGN98_HACK) && $(STATIC_BUILD)
|
|
||||||
### Align sections for speed in loading by choosing the virtual page size.
|
|
||||||
lflags = $(lflags) -align:4096
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if $(LOIMPACT)
|
|
||||||
lflags = $(lflags) -ws:aggressive
|
|
||||||
!endif
|
|
||||||
|
|
||||||
dlllflags = $(lflags) -dll
|
|
||||||
conlflags = $(lflags) -subsystem:console
|
|
||||||
guilflags = $(lflags) -subsystem:windows
|
|
||||||
baselibs = $(TCLSTUBLIB)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# TclTest flags
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
|
|
||||||
!IF "$(TESTPAT)" != ""
|
|
||||||
TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT)
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# Project specific targets (EDIT)
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
|
|
||||||
all: setup $(PROJECT)
|
|
||||||
$(PROJECT): setup $(PRJLIB)
|
|
||||||
install: install-binaries install-libraries install-docs
|
|
||||||
|
|
||||||
# Tests need to ensure we load the right dll file we
|
|
||||||
# have to handle the output differently on Win9x.
|
|
||||||
#
|
|
||||||
!if "$(OS)" == "Windows_NT" || "$(MSVCDIR)" == "IDE"
|
|
||||||
test: setup $(PROJECT)
|
|
||||||
set TCL_LIBRARY=$(ROOT)/library
|
|
||||||
$(TCLSH) <<
|
|
||||||
load $(PRJLIB:\=/)
|
|
||||||
cd "$(ROOT)/tests"
|
|
||||||
set argv "$(TESTFLAGS)"
|
|
||||||
source all.tcl
|
|
||||||
<<
|
|
||||||
!else
|
|
||||||
test: setup $(PROJECT)
|
|
||||||
echo Please wait while the test results are collected
|
|
||||||
set TCL_LIBRARY=$(ROOT)/library
|
|
||||||
$(TCLSH) << >tests.log
|
|
||||||
load $(PRJLIB:\=/)
|
|
||||||
cd "$(ROOT)/tests"
|
|
||||||
set argv "$(TESTFLAGS)"
|
|
||||||
source all.tcl
|
|
||||||
<<
|
|
||||||
type tests.log | more
|
|
||||||
!endif
|
|
||||||
|
|
||||||
setup:
|
|
||||||
@if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR)
|
|
||||||
@if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR)
|
|
||||||
|
|
||||||
$(PRJLIB): $(DLLOBJS)
|
|
||||||
$(link32) $(dlllflags) -out:$@ $(baselibs) @<<
|
|
||||||
$**
|
|
||||||
<<
|
|
||||||
-@del $*.exp
|
|
||||||
|
|
||||||
$(PRJSTUBLIB): $(PRJSTUBOBJS)
|
|
||||||
$(lib32) -nologo -out:$@ $(PRJSTUBOBJS)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# Implicit rules
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
|
|
||||||
{$(WINDIR)}.c{$(TMP_DIR)}.obj::
|
|
||||||
$(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
|
|
||||||
$<
|
|
||||||
<<
|
|
||||||
|
|
||||||
{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
|
|
||||||
$(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
|
|
||||||
$<
|
|
||||||
<<
|
|
||||||
|
|
||||||
{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
|
|
||||||
$(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
|
|
||||||
$<
|
|
||||||
<<
|
|
||||||
|
|
||||||
{$(WINDIR)}.rc{$(TMP_DIR)}.res:
|
|
||||||
$(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \
|
|
||||||
!if $(DEBUG)
|
|
||||||
-d DEBUG \
|
|
||||||
!endif
|
|
||||||
!if $(TCL_THREADS)
|
|
||||||
-d TCL_THREADS \
|
|
||||||
!endif
|
|
||||||
!if $(STATIC_BUILD)
|
|
||||||
-d STATIC_BUILD \
|
|
||||||
!endif
|
|
||||||
$<
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
.SUFFIXES:.c .rc
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# Installation. (EDIT)
|
|
||||||
#
|
|
||||||
# You may need to modify this section to reflect the final distribution
|
|
||||||
# of your files and possibly to generate documentation.
|
|
||||||
#
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
|
|
||||||
install-binaries:
|
|
||||||
@echo Installing binaries to '$(SCRIPT_INSTALL_DIR)'
|
|
||||||
@if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)"
|
|
||||||
@$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL
|
|
||||||
|
|
||||||
### Automatic creation of pkgIndex
|
|
||||||
#install-libraries:
|
|
||||||
# @echo Installing library files to '$(SCRIPT_INSTALL_DIR)'
|
|
||||||
# @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
|
|
||||||
# @echo cd "$(SCRIPT_INSTALL_DIR:\=/)" ; pkg_mkIndex . | $(TCLSH)
|
|
||||||
|
|
||||||
### Manual creation of pkgIndex
|
|
||||||
### Normally the ifneeded command would be:
|
|
||||||
### package ifneeded $(PROJECT) $(DOTVERSION) \
|
|
||||||
### [list load [file join $$dir $(PROJECT)$(VERSION).$(EXT)]]
|
|
||||||
### but this project has been named oddly. It has Sample_Init but provides
|
|
||||||
### the Tclsha1 package.
|
|
||||||
install-libraries:
|
|
||||||
@echo Installing libraries to '$(SCRIPT_INSTALL_DIR)'
|
|
||||||
@if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)"
|
|
||||||
@echo Installing package index in '$(SCRIPT_INSTALL_DIR)'
|
|
||||||
@type << >"$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl"
|
|
||||||
# Hand-crafted pkgIndex.tcl
|
|
||||||
package ifneeded Tclsha1 $(DOTVERSION) [list load [file join $$dir $(PROJECT)$(VERSION).$(EXT)] Sample]
|
|
||||||
<<
|
|
||||||
|
|
||||||
install-docs:
|
|
||||||
@echo Installing documentation files to '$(DOC_INSTALL_DIR)'
|
|
||||||
@if exist $(DOCDIR) $(CPY) $(DOCDIR)\*.n "$(DOC_INSTALL_DIR)"
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# Clean up
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR)
|
|
||||||
@if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc
|
|
||||||
|
|
||||||
realclean: clean
|
|
||||||
@if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR)
|
|
||||||
|
|
||||||
distclean: realclean
|
|
||||||
@if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe
|
|
||||||
@if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj
|
|
|
@ -1,355 +0,0 @@
|
||||||
/* ----------------------------------------------------------------------------
|
|
||||||
* nmakehlp.c --
|
|
||||||
*
|
|
||||||
* This is used to fix limitations within nmake and the environment.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2002 by David Gravereaux.
|
|
||||||
* Copyright (c) 2003 by Patrick Thoyts
|
|
||||||
*
|
|
||||||
* See the file "license.terms" for information on usage and redistribution
|
|
||||||
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|
||||||
*
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
* RCS: @(#) $Id: nmakehlp.c,v 1.2 2003/10/01 14:56:00 patthoyts Exp $
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#include <windows.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#pragma comment (lib, "user32.lib")
|
|
||||||
#pragma comment (lib, "kernel32.lib")
|
|
||||||
|
|
||||||
/* protos */
|
|
||||||
int CheckForCompilerFeature (const char *option);
|
|
||||||
int CheckForLinkerFeature (const char *option);
|
|
||||||
int IsIn (const char *string, const char *substring);
|
|
||||||
DWORD WINAPI ReadFromPipe (LPVOID args);
|
|
||||||
int GetVersionFromHeader(const char *tclh, const char *tkh);
|
|
||||||
|
|
||||||
/* globals */
|
|
||||||
typedef struct {
|
|
||||||
HANDLE pipe;
|
|
||||||
char buffer[1000];
|
|
||||||
} pipeinfo;
|
|
||||||
|
|
||||||
pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'};
|
|
||||||
pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* exitcodes: 0 == no, 1 == yes, 2 == error */
|
|
||||||
int
|
|
||||||
main (int argc, char *argv[])
|
|
||||||
{
|
|
||||||
char msg[300];
|
|
||||||
DWORD dwWritten;
|
|
||||||
int chars;
|
|
||||||
|
|
||||||
if (argc > 1 && *argv[1] == '-') {
|
|
||||||
switch (*(argv[1]+1)) {
|
|
||||||
case 'c':
|
|
||||||
if (argc != 3) {
|
|
||||||
chars = wsprintf(msg, "usage: %s -c <compiler option>\n"
|
|
||||||
"Tests for whether cl.exe supports an option\n"
|
|
||||||
"exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
|
|
||||||
WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
return CheckForCompilerFeature(argv[2]);
|
|
||||||
case 'l':
|
|
||||||
if (argc != 3) {
|
|
||||||
chars = wsprintf(msg, "usage: %s -l <linker option>\n"
|
|
||||||
"Tests for whether link.exe supports an option\n"
|
|
||||||
"exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
|
|
||||||
WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
return CheckForLinkerFeature(argv[2]);
|
|
||||||
case 'f':
|
|
||||||
if (argc == 2) {
|
|
||||||
chars = wsprintf(msg, "usage: %s -f <string> <substring>\n"
|
|
||||||
"Find a substring within another\n"
|
|
||||||
"exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
|
|
||||||
WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
|
|
||||||
return 2;
|
|
||||||
} else if (argc == 3) {
|
|
||||||
/* if the string is blank, there is no match */
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
return IsIn(argv[2], argv[3]);
|
|
||||||
}
|
|
||||||
case 'v':
|
|
||||||
if (argc != 4) {
|
|
||||||
chars = wsprintf(msg, "usage: %s -v <tcl.h> <tk.h>\n"
|
|
||||||
"Search for versions from the tcl and tk headers.",
|
|
||||||
argv[0]);
|
|
||||||
WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return GetVersionFromHeader(argv[2], argv[3]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
chars = wsprintf(msg, "usage: %s -c|-l|-f ...\n"
|
|
||||||
"This is a little helper app to equalize shell differences between WinNT and\n"
|
|
||||||
"Win9x and get nmake.exe to accomplish its job.\n",
|
|
||||||
argv[0]);
|
|
||||||
WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
CheckForCompilerFeature (const char *option)
|
|
||||||
{
|
|
||||||
STARTUPINFO si;
|
|
||||||
PROCESS_INFORMATION pi;
|
|
||||||
SECURITY_ATTRIBUTES sa;
|
|
||||||
DWORD threadID;
|
|
||||||
char msg[300];
|
|
||||||
BOOL ok;
|
|
||||||
HANDLE hProcess, h, pipeThreads[2];
|
|
||||||
char cmdline[100];
|
|
||||||
|
|
||||||
hProcess = GetCurrentProcess();
|
|
||||||
|
|
||||||
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
|
|
||||||
ZeroMemory(&si, sizeof(STARTUPINFO));
|
|
||||||
si.cb = sizeof(STARTUPINFO);
|
|
||||||
si.dwFlags = STARTF_USESTDHANDLES;
|
|
||||||
si.hStdInput = INVALID_HANDLE_VALUE;
|
|
||||||
|
|
||||||
ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
|
|
||||||
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
|
|
||||||
sa.lpSecurityDescriptor = NULL;
|
|
||||||
sa.bInheritHandle = FALSE;
|
|
||||||
|
|
||||||
/* create a non-inheritible pipe. */
|
|
||||||
CreatePipe(&Out.pipe, &h, &sa, 0);
|
|
||||||
|
|
||||||
/* dupe the write side, make it inheritible, and close the original. */
|
|
||||||
DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput,
|
|
||||||
0, TRUE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
|
|
||||||
|
|
||||||
/* Same as above, but for the error side. */
|
|
||||||
CreatePipe(&Err.pipe, &h, &sa, 0);
|
|
||||||
DuplicateHandle(hProcess, h, hProcess, &si.hStdError,
|
|
||||||
0, TRUE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
|
|
||||||
|
|
||||||
/* base command line */
|
|
||||||
strcpy(cmdline, "cl.exe -nologo -c -TC -Fdtemp ");
|
|
||||||
/* append our option for testing */
|
|
||||||
strcat(cmdline, option);
|
|
||||||
/* filename to compile, which exists, but is nothing and empty. */
|
|
||||||
strcat(cmdline, " nul");
|
|
||||||
|
|
||||||
ok = CreateProcess(
|
|
||||||
NULL, /* Module name. */
|
|
||||||
cmdline, /* Command line. */
|
|
||||||
NULL, /* Process handle not inheritable. */
|
|
||||||
NULL, /* Thread handle not inheritable. */
|
|
||||||
TRUE, /* yes, inherit handles. */
|
|
||||||
DETACHED_PROCESS, /* No console for you. */
|
|
||||||
NULL, /* Use parent's environment block. */
|
|
||||||
NULL, /* Use parent's starting directory. */
|
|
||||||
&si, /* Pointer to STARTUPINFO structure. */
|
|
||||||
&pi); /* Pointer to PROCESS_INFORMATION structure. */
|
|
||||||
|
|
||||||
if (!ok) {
|
|
||||||
DWORD err = GetLastError();
|
|
||||||
int chars = wsprintf(msg, "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
|
|
||||||
|
|
||||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS |
|
|
||||||
FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID) &msg[chars],
|
|
||||||
(300-chars), 0);
|
|
||||||
WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, strlen(msg), &err, NULL);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* close our references to the write handles that have now been inherited. */
|
|
||||||
CloseHandle(si.hStdOutput);
|
|
||||||
CloseHandle(si.hStdError);
|
|
||||||
|
|
||||||
WaitForInputIdle(pi.hProcess, 5000);
|
|
||||||
CloseHandle(pi.hThread);
|
|
||||||
|
|
||||||
/* start the pipe reader threads. */
|
|
||||||
pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
|
|
||||||
pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
|
|
||||||
|
|
||||||
/* block waiting for the process to end. */
|
|
||||||
WaitForSingleObject(pi.hProcess, INFINITE);
|
|
||||||
CloseHandle(pi.hProcess);
|
|
||||||
|
|
||||||
/* clean up temporary files before returning */
|
|
||||||
DeleteFile("temp.idb");
|
|
||||||
DeleteFile("temp.pdb");
|
|
||||||
|
|
||||||
/* wait for our pipe to get done reading, should it be a little slow. */
|
|
||||||
WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
|
|
||||||
CloseHandle(pipeThreads[0]);
|
|
||||||
CloseHandle(pipeThreads[1]);
|
|
||||||
|
|
||||||
/* look for the commandline warning code in both streams. */
|
|
||||||
return !(strstr(Out.buffer, "D4002") != NULL || strstr(Err.buffer, "D4002") != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
CheckForLinkerFeature (const char *option)
|
|
||||||
{
|
|
||||||
STARTUPINFO si;
|
|
||||||
PROCESS_INFORMATION pi;
|
|
||||||
SECURITY_ATTRIBUTES sa;
|
|
||||||
DWORD threadID;
|
|
||||||
char msg[300];
|
|
||||||
BOOL ok;
|
|
||||||
HANDLE hProcess, h, pipeThreads[2];
|
|
||||||
char cmdline[100];
|
|
||||||
|
|
||||||
hProcess = GetCurrentProcess();
|
|
||||||
|
|
||||||
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
|
|
||||||
ZeroMemory(&si, sizeof(STARTUPINFO));
|
|
||||||
si.cb = sizeof(STARTUPINFO);
|
|
||||||
si.dwFlags = STARTF_USESTDHANDLES;
|
|
||||||
si.hStdInput = INVALID_HANDLE_VALUE;
|
|
||||||
|
|
||||||
ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
|
|
||||||
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
|
|
||||||
sa.lpSecurityDescriptor = NULL;
|
|
||||||
sa.bInheritHandle = TRUE;
|
|
||||||
|
|
||||||
/* create a non-inheritible pipe. */
|
|
||||||
CreatePipe(&Out.pipe, &h, &sa, 0);
|
|
||||||
|
|
||||||
/* dupe the write side, make it inheritible, and close the original. */
|
|
||||||
DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput,
|
|
||||||
0, TRUE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
|
|
||||||
|
|
||||||
/* Same as above, but for the error side. */
|
|
||||||
CreatePipe(&Err.pipe, &h, &sa, 0);
|
|
||||||
DuplicateHandle(hProcess, h, hProcess, &si.hStdError,
|
|
||||||
0, TRUE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
|
|
||||||
|
|
||||||
/* base command line */
|
|
||||||
strcpy(cmdline, "link.exe -nologo ");
|
|
||||||
/* append our option for testing */
|
|
||||||
strcat(cmdline, option);
|
|
||||||
/* filename to compile, which exists, but is nothing and empty. */
|
|
||||||
// strcat(cmdline, " nul");
|
|
||||||
|
|
||||||
ok = CreateProcess(
|
|
||||||
NULL, /* Module name. */
|
|
||||||
cmdline, /* Command line. */
|
|
||||||
NULL, /* Process handle not inheritable. */
|
|
||||||
NULL, /* Thread handle not inheritable. */
|
|
||||||
TRUE, /* yes, inherit handles. */
|
|
||||||
DETACHED_PROCESS, /* No console for you. */
|
|
||||||
NULL, /* Use parent's environment block. */
|
|
||||||
NULL, /* Use parent's starting directory. */
|
|
||||||
&si, /* Pointer to STARTUPINFO structure. */
|
|
||||||
&pi); /* Pointer to PROCESS_INFORMATION structure. */
|
|
||||||
|
|
||||||
if (!ok) {
|
|
||||||
DWORD err = GetLastError();
|
|
||||||
int chars = wsprintf(msg, "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err);
|
|
||||||
|
|
||||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS |
|
|
||||||
FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID) &msg[chars],
|
|
||||||
(300-chars), 0);
|
|
||||||
WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, strlen(msg), &err, NULL);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* close our references to the write handles that have now been inherited. */
|
|
||||||
CloseHandle(si.hStdOutput);
|
|
||||||
CloseHandle(si.hStdError);
|
|
||||||
|
|
||||||
WaitForInputIdle(pi.hProcess, 5000);
|
|
||||||
CloseHandle(pi.hThread);
|
|
||||||
|
|
||||||
/* start the pipe reader threads. */
|
|
||||||
pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID);
|
|
||||||
pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID);
|
|
||||||
|
|
||||||
/* block waiting for the process to end. */
|
|
||||||
WaitForSingleObject(pi.hProcess, INFINITE);
|
|
||||||
CloseHandle(pi.hProcess);
|
|
||||||
|
|
||||||
/* wait for our pipe to get done reading, should it be a little slow. */
|
|
||||||
WaitForMultipleObjects(2, pipeThreads, TRUE, 500);
|
|
||||||
CloseHandle(pipeThreads[0]);
|
|
||||||
CloseHandle(pipeThreads[1]);
|
|
||||||
|
|
||||||
/* look for the commandline warning code in the stderr stream. */
|
|
||||||
return !(strstr(Out.buffer, "LNK1117") != NULL || strstr(Err.buffer, "LNK1117") != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD WINAPI
|
|
||||||
ReadFromPipe (LPVOID args)
|
|
||||||
{
|
|
||||||
pipeinfo *pi = (pipeinfo *) args;
|
|
||||||
char *lastBuf = pi->buffer;
|
|
||||||
DWORD dwRead;
|
|
||||||
BOOL ok;
|
|
||||||
|
|
||||||
again:
|
|
||||||
ok = ReadFile(pi->pipe, lastBuf, 25, &dwRead, 0L);
|
|
||||||
if (!ok || dwRead == 0) {
|
|
||||||
CloseHandle(pi->pipe);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
lastBuf += dwRead;
|
|
||||||
goto again;
|
|
||||||
|
|
||||||
return 0; /* makes the compiler happy */
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
IsIn (const char *string, const char *substring)
|
|
||||||
{
|
|
||||||
return (strstr(string, substring) != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static double
|
|
||||||
ReadVersionFromHeader(const char *file, const char *macro)
|
|
||||||
{
|
|
||||||
double d = 0.0;
|
|
||||||
CHAR szBuffer[100];
|
|
||||||
LPSTR p;
|
|
||||||
DWORD cbBuffer = 100;
|
|
||||||
FILE *fp = fopen(file, "r");
|
|
||||||
if (fp != NULL) {
|
|
||||||
while (fgets(szBuffer, cbBuffer, fp) != NULL) {
|
|
||||||
if ((p = strstr(szBuffer, macro)) != NULL) {
|
|
||||||
while (*p && !isdigit(*p)) ++p;
|
|
||||||
d = strtod(p, NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
}
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
GetVersionFromHeader(const char *tclh, const char *tkh)
|
|
||||||
{
|
|
||||||
double dTcl = 0.0, dTk = 0.0;
|
|
||||||
|
|
||||||
if (tclh != NULL)
|
|
||||||
dTcl = ReadVersionFromHeader(tclh, "TCL_VERSION");
|
|
||||||
if (tkh != NULL)
|
|
||||||
dTk = ReadVersionFromHeader(tkh, "TK_VERSION");
|
|
||||||
|
|
||||||
if (dTcl > 0 || dTk > 0) {
|
|
||||||
FILE *ofp = fopen("version.vc", "w");
|
|
||||||
if (dTcl > 0)
|
|
||||||
fprintf(ofp, "TCL_DOTVERSION\t= %0.1f\nTCL_VERSION\t= %u\n",
|
|
||||||
dTcl, (int)(dTcl * 10.0));
|
|
||||||
if (dTk > 0)
|
|
||||||
fprintf(ofp, "TK_DOTVERSION\t= %0.1f\nTK_VERSION\t= %u\n",
|
|
||||||
dTk, (int)(dTk * 10.0));
|
|
||||||
fclose(ofp);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
|
@ -1,436 +0,0 @@
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# rules.vc --
|
|
||||||
#
|
|
||||||
# Microsoft Visual C++ makefile include for decoding the commandline
|
|
||||||
# macros. This file does not need editing to build Tcl.
|
|
||||||
#
|
|
||||||
# This version is modified from the Tcl source version to support
|
|
||||||
# building extensions using nmake.
|
|
||||||
#
|
|
||||||
# See the file "license.terms" for information on usage and redistribution
|
|
||||||
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|
||||||
#
|
|
||||||
# Copyright (c) 2001-2002 David Gravereaux.
|
|
||||||
# Copyright (c) 2003 Patrick Thoyts
|
|
||||||
#
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# RCS: @(#) $Id: rules.vc,v 1.3 2004/07/04 23:15:23 patthoyts Exp $
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
!ifndef _RULES_VC
|
|
||||||
_RULES_VC = 1
|
|
||||||
|
|
||||||
cc32 = $(CC) # built-in default.
|
|
||||||
link32 = link
|
|
||||||
lib32 = lib
|
|
||||||
rc32 = $(RC) # built-in default.
|
|
||||||
|
|
||||||
!ifndef INSTALLDIR
|
|
||||||
### Assume the normal default.
|
|
||||||
_INSTALLDIR = C:\Program Files\Tcl
|
|
||||||
!else
|
|
||||||
### Fix the path separators.
|
|
||||||
_INSTALLDIR = $(INSTALLDIR:/=\)
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!ifndef MACHINE
|
|
||||||
MACHINE = IX86
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!ifndef CFG_ENCODING
|
|
||||||
CFG_ENCODING = \"cp1252\"
|
|
||||||
!endif
|
|
||||||
|
|
||||||
#----------------------------------------------------------
|
|
||||||
# Set the proper copy method to avoid overwrite questions
|
|
||||||
# to the user when copying files and selecting the right
|
|
||||||
# "delete all" method.
|
|
||||||
#----------------------------------------------------------
|
|
||||||
|
|
||||||
!if "$(OS)" == "Windows_NT"
|
|
||||||
RMDIR = rmdir /S /Q
|
|
||||||
!if ![ver | find "4.0" > nul]
|
|
||||||
CPY = echo y | xcopy /i
|
|
||||||
!else
|
|
||||||
CPY = xcopy /i /y
|
|
||||||
!endif
|
|
||||||
!else
|
|
||||||
CPY = xcopy /i
|
|
||||||
RMDIR = deltree /Y
|
|
||||||
!endif
|
|
||||||
|
|
||||||
|
|
||||||
!message ===============================================================================
|
|
||||||
|
|
||||||
#----------------------------------------------------------
|
|
||||||
# build the helper app we need to overcome nmake's limiting
|
|
||||||
# environment.
|
|
||||||
#----------------------------------------------------------
|
|
||||||
|
|
||||||
!if !exist(nmakehlp.exe)
|
|
||||||
!if [$(cc32) -nologo -ML nmakehlp.c -link -subsystem:console > nul]
|
|
||||||
!endif
|
|
||||||
!endif
|
|
||||||
|
|
||||||
#----------------------------------------------------------
|
|
||||||
# Test for compiler features
|
|
||||||
#----------------------------------------------------------
|
|
||||||
|
|
||||||
### test for optimizations
|
|
||||||
!if [nmakehlp -c -Otip]
|
|
||||||
!message *** Compiler has 'Optimizations'
|
|
||||||
OPTIMIZING = 1
|
|
||||||
!else
|
|
||||||
!message *** Compiler doesn't have 'Optimizations'
|
|
||||||
OPTIMIZING = 0
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if "$(MACHINE)" == "IX86"
|
|
||||||
### test for pentium errata
|
|
||||||
!if [nmakehlp -c -QI0f]
|
|
||||||
!message *** Compiler has 'Pentium 0x0f fix'
|
|
||||||
PENT_0F_ERRATA = 1
|
|
||||||
!else
|
|
||||||
!message *** Compiler doesn't have 'Pentium 0x0f fix'
|
|
||||||
PENT_0F_ERRATA = 0
|
|
||||||
!endif
|
|
||||||
### test for -align:4096, when align:512 will do.
|
|
||||||
!if [nmakehlp -l -opt:nowin98]
|
|
||||||
!message *** Linker has 'Win98 alignment problem'
|
|
||||||
ALIGN98_HACK = 1
|
|
||||||
!else
|
|
||||||
!message *** Linker doesn't have 'Win98 alignment problem'
|
|
||||||
ALIGN98_HACK = 0
|
|
||||||
!endif
|
|
||||||
!else
|
|
||||||
PENT_0F_ERRATA = 0
|
|
||||||
ALIGN98_HACK = 0
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if "$(MACHINE)" == "IA64"
|
|
||||||
### test for Itanium errata
|
|
||||||
!if [nmakehlp -c -QIA64_Bx]
|
|
||||||
!message *** Compiler has 'B-stepping errata workarounds'
|
|
||||||
ITAN_B_ERRATA = 1
|
|
||||||
!else
|
|
||||||
!message *** Compiler doesn't have 'B-stepping errata workarounds'
|
|
||||||
ITAN_B_ERRATA = 0
|
|
||||||
!endif
|
|
||||||
!else
|
|
||||||
ITAN_B_ERRATA = 0
|
|
||||||
!endif
|
|
||||||
|
|
||||||
#----------------------------------------------------------
|
|
||||||
# Decode the options requested.
|
|
||||||
#----------------------------------------------------------
|
|
||||||
|
|
||||||
!if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"]
|
|
||||||
STATIC_BUILD = 0
|
|
||||||
TCL_THREADS = 0
|
|
||||||
DEBUG = 0
|
|
||||||
PROFILE = 0
|
|
||||||
MSVCRT = 0
|
|
||||||
LOIMPACT = 0
|
|
||||||
TCL_USE_STATIC_PACKAGES = 0
|
|
||||||
USE_THREAD_ALLOC = 0
|
|
||||||
!else
|
|
||||||
!if [nmakehlp -f $(OPTS) "static"]
|
|
||||||
!message *** Doing static
|
|
||||||
STATIC_BUILD = 1
|
|
||||||
!else
|
|
||||||
STATIC_BUILD = 0
|
|
||||||
!endif
|
|
||||||
!if [nmakehlp -f $(OPTS) "msvcrt"]
|
|
||||||
!message *** Doing msvcrt
|
|
||||||
MSVCRT = 1
|
|
||||||
!else
|
|
||||||
MSVCRT = 0
|
|
||||||
!endif
|
|
||||||
!if [nmakehlp -f $(OPTS) "staticpkg"]
|
|
||||||
!message *** Doing staticpkg
|
|
||||||
TCL_USE_STATIC_PACKAGES = 1
|
|
||||||
!else
|
|
||||||
TCL_USE_STATIC_PACKAGES = 0
|
|
||||||
!endif
|
|
||||||
!if [nmakehlp -f $(OPTS) "threads"]
|
|
||||||
!message *** Doing threads
|
|
||||||
TCL_THREADS = 1
|
|
||||||
!else
|
|
||||||
TCL_THREADS = 0
|
|
||||||
!endif
|
|
||||||
!if [nmakehlp -f $(OPTS) "symbols"]
|
|
||||||
!message *** Doing symbols
|
|
||||||
DEBUG = 1
|
|
||||||
!else
|
|
||||||
DEBUG = 0
|
|
||||||
!endif
|
|
||||||
!if [nmakehlp -f $(OPTS) "profile"]
|
|
||||||
!message *** Doing profile
|
|
||||||
PROFILE = 1
|
|
||||||
!else
|
|
||||||
PROFILE = 0
|
|
||||||
!endif
|
|
||||||
!if [nmakehlp -f $(OPTS) "loimpact"]
|
|
||||||
!message *** Doing loimpact
|
|
||||||
LOIMPACT = 1
|
|
||||||
!else
|
|
||||||
LOIMPACT = 0
|
|
||||||
!endif
|
|
||||||
!if [nmakehlp -f $(OPTS) "thrdalloc"]
|
|
||||||
!message *** Doing thrdalloc
|
|
||||||
USE_THREAD_ALLOC = 1
|
|
||||||
!else
|
|
||||||
USE_THREAD_ALLOC = 0
|
|
||||||
!endif
|
|
||||||
!endif
|
|
||||||
|
|
||||||
|
|
||||||
!if !$(STATIC_BUILD)
|
|
||||||
# Make sure we don't build overly fat DLLs.
|
|
||||||
MSVCRT = 1
|
|
||||||
# We shouldn't statically put the extensions inside the shell when dynamic.
|
|
||||||
TCL_USE_STATIC_PACKAGES = 0
|
|
||||||
!endif
|
|
||||||
|
|
||||||
|
|
||||||
#----------------------------------------------------------
|
|
||||||
# Figure-out how to name our intermediate and output directories.
|
|
||||||
# We wouldn't want different builds to use the same .obj files
|
|
||||||
# by accident.
|
|
||||||
#----------------------------------------------------------
|
|
||||||
|
|
||||||
SUFX = tsgx
|
|
||||||
|
|
||||||
!if $(DEBUG)
|
|
||||||
BUILDDIRTOP = Debug
|
|
||||||
DBGX = g
|
|
||||||
!else
|
|
||||||
BUILDDIRTOP = Release
|
|
||||||
DBGX =
|
|
||||||
SUFX = $(SUFX:g=)
|
|
||||||
!endif
|
|
||||||
|
|
||||||
TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX
|
|
||||||
|
|
||||||
!if !$(STATIC_BUILD)
|
|
||||||
TMP_DIRFULL = $(TMP_DIRFULL:Static=)
|
|
||||||
SUFX = $(SUFX:s=)
|
|
||||||
EXT = dll
|
|
||||||
!if $(MSVCRT)
|
|
||||||
TMP_DIRFULL = $(TMP_DIRFULL:X=)
|
|
||||||
SUFX = $(SUFX:x=)
|
|
||||||
!endif
|
|
||||||
!else
|
|
||||||
TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=)
|
|
||||||
EXT = lib
|
|
||||||
!if !$(MSVCRT)
|
|
||||||
TMP_DIRFULL = $(TMP_DIRFULL:X=)
|
|
||||||
SUFX = $(SUFX:x=)
|
|
||||||
!endif
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if !$(TCL_THREADS)
|
|
||||||
TMP_DIRFULL = $(TMP_DIRFULL:Threaded=)
|
|
||||||
SUFX = $(SUFX:t=)
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!ifndef TMP_DIR
|
|
||||||
TMP_DIR = $(TMP_DIRFULL)
|
|
||||||
!ifndef OUT_DIR
|
|
||||||
OUT_DIR = .\$(BUILDDIRTOP)
|
|
||||||
!endif
|
|
||||||
!else
|
|
||||||
!ifndef OUT_DIR
|
|
||||||
OUT_DIR = $(TMP_DIR)
|
|
||||||
!endif
|
|
||||||
!endif
|
|
||||||
|
|
||||||
|
|
||||||
#----------------------------------------------------------
|
|
||||||
# Decode the statistics requested.
|
|
||||||
#----------------------------------------------------------
|
|
||||||
|
|
||||||
!if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"]
|
|
||||||
TCL_MEM_DEBUG = 0
|
|
||||||
TCL_COMPILE_DEBUG = 0
|
|
||||||
!else
|
|
||||||
!if [nmakehlp -f $(STATS) "memdbg"]
|
|
||||||
!message *** Doing memdbg
|
|
||||||
TCL_MEM_DEBUG = 1
|
|
||||||
!else
|
|
||||||
TCL_MEM_DEBUG = 0
|
|
||||||
!endif
|
|
||||||
!if [nmakehlp -f $(STATS) "compdbg"]
|
|
||||||
!message *** Doing compdbg
|
|
||||||
TCL_COMPILE_DEBUG = 1
|
|
||||||
!else
|
|
||||||
TCL_COMPILE_DEBUG = 0
|
|
||||||
!endif
|
|
||||||
!endif
|
|
||||||
|
|
||||||
|
|
||||||
#----------------------------------------------------------
|
|
||||||
# Set our defines now armed with our options.
|
|
||||||
#----------------------------------------------------------
|
|
||||||
|
|
||||||
OPTDEFINES = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING)
|
|
||||||
|
|
||||||
!if $(TCL_MEM_DEBUG)
|
|
||||||
OPTDEFINES = -DTCL_MEM_DEBUG
|
|
||||||
!endif
|
|
||||||
!if $(TCL_COMPILE_DEBUG)
|
|
||||||
OPTDEFINES = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS
|
|
||||||
!endif
|
|
||||||
!if $(TCL_THREADS)
|
|
||||||
OPTDEFINES = $(OPTDEFINES) -DTCL_THREADS=1
|
|
||||||
!if $(USE_THREAD_ALLOC)
|
|
||||||
OPTDEFINES = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1
|
|
||||||
!endif
|
|
||||||
!endif
|
|
||||||
!if $(STATIC_BUILD)
|
|
||||||
OPTDEFINES = $(OPTDEFINES) -DSTATIC_BUILD
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if $(DEBUG)
|
|
||||||
OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_DEBUG
|
|
||||||
!elseif $(OPTIMIZING)
|
|
||||||
OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED
|
|
||||||
!endif
|
|
||||||
!if $(PROFILE)
|
|
||||||
OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_PROFILED
|
|
||||||
!endif
|
|
||||||
!if "$(MACHINE)" == "IA64"
|
|
||||||
OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_DO64BIT
|
|
||||||
!endif
|
|
||||||
|
|
||||||
|
|
||||||
#----------------------------------------------------------
|
|
||||||
# Get common info used when building extensions.
|
|
||||||
#----------------------------------------------------------
|
|
||||||
|
|
||||||
!if "$(PROJECT)" != "tcl"
|
|
||||||
|
|
||||||
# If INSTALLDIR set to tcl root dir then reset to the lib dir.
|
|
||||||
!if exist("$(_INSTALLDIR)\include\tcl.h")
|
|
||||||
_INSTALLDIR=$(_INSTALLDIR)\lib
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if !defined(TCLDIR)
|
|
||||||
!if exist("$(_INSTALLDIR)\..\include\tcl.h")
|
|
||||||
TCLINSTALL = 1
|
|
||||||
_TCLDIR = $(_INSTALLDIR)\..
|
|
||||||
_TCL_H = $(_INSTALLDIR)\..\include\tcl.h
|
|
||||||
TCLDIR = $(_INSTALLDIR)\..
|
|
||||||
!else
|
|
||||||
MSG=^
|
|
||||||
Failed to find tcl.h. Set the TCLDIR macro.
|
|
||||||
!error $(MSG)
|
|
||||||
!endif
|
|
||||||
!else
|
|
||||||
_TCLDIR = $(TCLDIR:/=\)
|
|
||||||
!if exist("$(_TCLDIR)\include\tcl.h")
|
|
||||||
TCLINSTALL = 1
|
|
||||||
_TCL_H = $(_TCLDIR)\include\tcl.h
|
|
||||||
!elseif exist("$(_TCLDIR)\generic\tcl.h")
|
|
||||||
TCLINSTALL = 0
|
|
||||||
_TCL_H = $(_TCLDIR)\generic\tcl.h
|
|
||||||
!else
|
|
||||||
MSG =^
|
|
||||||
Failed to find tcl.h. The TCLDIR macro does not appear correct.
|
|
||||||
!error $(MSG)
|
|
||||||
!endif
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if [nmakehlp -v $(_TCL_H) ""] == 0
|
|
||||||
!include version.vc
|
|
||||||
!else
|
|
||||||
TCL_DOTVERSION = 8.5
|
|
||||||
TCL_VERSION = $(TCL_DOTVERSION:.=)
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if $(TCLINSTALL)
|
|
||||||
TCLSH = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe"
|
|
||||||
TCLSTUBLIB = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib"
|
|
||||||
TCLIMPLIB = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib"
|
|
||||||
TCL_LIBRARY = $(_TCLDIR)\lib
|
|
||||||
TCL_INCLUDES = -I"$(_TCLDIR)\include"
|
|
||||||
!else
|
|
||||||
TCLSH = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe"
|
|
||||||
TCLSTUBLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib"
|
|
||||||
TCLIMPLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib"
|
|
||||||
TCL_LIBRARY = $(_TCLDIR)\library
|
|
||||||
TCL_INCLUDES = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win"
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!endif
|
|
||||||
|
|
||||||
#----------------------------------------------------------
|
|
||||||
# Get Tk info for building extensions.
|
|
||||||
#----------------------------------------------------------
|
|
||||||
|
|
||||||
!if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk"
|
|
||||||
|
|
||||||
!if !defined(TKDIR)
|
|
||||||
!if exist("$(_INSTALLDIR)\..\include\tk.h")
|
|
||||||
TKINSTALL = 1
|
|
||||||
_TKDIR = $(_INSTALLDIR)\..
|
|
||||||
_TK_H = $(_TKDIR)\include\tk.h
|
|
||||||
TKDIR = $(_TKDIR)
|
|
||||||
!elseif exist("$(_TCLDIR)\include\tk.h")
|
|
||||||
TKINSTALL = 1
|
|
||||||
_TKDIR = $(_TCLDIR)
|
|
||||||
_TK_H = $(_TKDIR)\include\tk.h
|
|
||||||
TKDIR = $(_TKDIR)
|
|
||||||
!else
|
|
||||||
MSG =^
|
|
||||||
Failed to find tk.h. Set the TKDIR macro.
|
|
||||||
!error $(MSG)
|
|
||||||
!endif
|
|
||||||
!else
|
|
||||||
_TKDIR = $(TKDIR:/=\)
|
|
||||||
!if exist("$(_TKDIR)\include\tk.h")
|
|
||||||
TKINSTALL = 1
|
|
||||||
_TK_H = $(_TKDIR)\include\tk.h
|
|
||||||
!elseif exist("$(_TKDIR)\generic\tk.h")
|
|
||||||
TKINSTALL = 0
|
|
||||||
_TK_H = $(_TKDIR)\generic\tk.h
|
|
||||||
!else
|
|
||||||
MSG =^
|
|
||||||
Failed to find tk.h. The TKDIR macro does not appear correct.
|
|
||||||
!error $(MSG)
|
|
||||||
!endif
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if [nmakehlp -v $(_TCL_H) $(_TK_H)] == 0
|
|
||||||
!include version.vc
|
|
||||||
!else
|
|
||||||
TK_DOTVERSION = 8.5
|
|
||||||
TK_VERSION = $(TK_DOTVERSION:.=)
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!if $(TKINSTALL)
|
|
||||||
WISH = "$(_TKDIR)\bin\wish$(TK_VERSION)$(SUFX).exe"
|
|
||||||
TKSTUBLIB = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib"
|
|
||||||
TKIMPLIB = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib"
|
|
||||||
TK_INCLUDES = -I"$(_TKDIR)\include"
|
|
||||||
!else
|
|
||||||
WISH = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)$(SUFX).exe"
|
|
||||||
TKSTUBLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib"
|
|
||||||
TKIMPLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib"
|
|
||||||
TK_INCLUDES = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib"
|
|
||||||
!endif
|
|
||||||
|
|
||||||
!endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#----------------------------------------------------------
|
|
||||||
# Display stats being used.
|
|
||||||
#----------------------------------------------------------
|
|
||||||
|
|
||||||
!message *** Intermediate directory will be '$(TMP_DIR)'
|
|
||||||
!message *** Output directory will be '$(OUT_DIR)'
|
|
||||||
!message *** Suffix for binaries will be '$(SUFX)'
|
|
||||||
!message *** Optional defines are '$(OPTDEFINES)'
|
|
||||||
|
|
||||||
!endif
|
|
Loading…
Reference in New Issue