autoconf
This commit is contained in:
parent
aec5d830a8
commit
1f366b4cd4
42 changed files with 30950 additions and 1097 deletions
197
.clang-format
Normal file
197
.clang-format
Normal file
|
@ -0,0 +1,197 @@
|
|||
# Basic .clang-format
|
||||
---
|
||||
BasedOnStyle: WebKit
|
||||
AlignAfterOpenBracket: DontAlign
|
||||
AlignConsecutiveAssignments: false
|
||||
AlignConsecutiveDeclarations: false
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: false
|
||||
AlignTrailingComments: true
|
||||
AllowAllArgumentsOnNextLine: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AllowShortBlocksOnASingleLine: Never
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: InlineOnly
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterReturnType: TopLevelDefinitions
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: MultiLine
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: WebKit
|
||||
BreakBeforeTernaryOperators: false
|
||||
# TODO: BreakStringLiterals can cause very strange formatting so turn it off?
|
||||
BreakStringLiterals: false
|
||||
# Prefer:
|
||||
# some_var = function(arg1,
|
||||
# arg2)
|
||||
# over:
|
||||
# some_var =
|
||||
# function(arg1, arg2)
|
||||
PenaltyBreakAssignment: 100
|
||||
# Prefer:
|
||||
# some_long_function(arg1, arg2
|
||||
# arg3)
|
||||
# over:
|
||||
# some_long_function(
|
||||
# arg1, arg2, arg3)
|
||||
PenaltyBreakBeforeFirstCallParameter: 100
|
||||
CompactNamespaces: true
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
ForEachMacros:
|
||||
- ARB_ARRFOREACH
|
||||
- ARB_ARRFOREACH_REVWCOND
|
||||
- ARB_ARRFOREACH_REVERSE
|
||||
- ARB_FOREACH
|
||||
- ARB_FOREACH_FROM
|
||||
- ARB_FOREACH_SAFE
|
||||
- ARB_FOREACH_REVERSE
|
||||
- ARB_FOREACH_REVERSE_FROM
|
||||
- ARB_FOREACH_REVERSE_SAFE
|
||||
- BIT_FOREACH_ISCLR
|
||||
- BIT_FOREACH_ISSET
|
||||
- CPU_FOREACH
|
||||
- CPU_FOREACH_ISCLR
|
||||
- CPU_FOREACH_ISSET
|
||||
- FOREACH_THREAD_IN_PROC
|
||||
- FOREACH_PROC_IN_SYSTEM
|
||||
- FOREACH_PRISON_CHILD
|
||||
- FOREACH_PRISON_DESCENDANT
|
||||
- FOREACH_PRISON_DESCENDANT_LOCKED
|
||||
- FOREACH_PRISON_DESCENDANT_LOCKED_LEVEL
|
||||
- MNT_VNODE_FOREACH_ALL
|
||||
- MNT_VNODE_FOREACH_ACTIVE
|
||||
- RB_FOREACH
|
||||
- RB_FOREACH_FROM
|
||||
- RB_FOREACH_SAFE
|
||||
- RB_FOREACH_REVERSE
|
||||
- RB_FOREACH_REVERSE_FROM
|
||||
- RB_FOREACH_REVERSE_SAFE
|
||||
- SLIST_FOREACH
|
||||
- SLIST_FOREACH_FROM
|
||||
- SLIST_FOREACH_FROM_SAFE
|
||||
- SLIST_FOREACH_SAFE
|
||||
- SLIST_FOREACH_PREVPTR
|
||||
- SPLAY_FOREACH
|
||||
- LIST_FOREACH
|
||||
- LIST_FOREACH_FROM
|
||||
- LIST_FOREACH_FROM_SAFE
|
||||
- LIST_FOREACH_SAFE
|
||||
- STAILQ_FOREACH
|
||||
- STAILQ_FOREACH_FROM
|
||||
- STAILQ_FOREACH_FROM_SAFE
|
||||
- STAILQ_FOREACH_SAFE
|
||||
- TAILQ_FOREACH
|
||||
- TAILQ_FOREACH_FROM
|
||||
- TAILQ_FOREACH_FROM_SAFE
|
||||
- TAILQ_FOREACH_REVERSE
|
||||
- TAILQ_FOREACH_REVERSE_FROM
|
||||
- TAILQ_FOREACH_REVERSE_FROM_SAFE
|
||||
- TAILQ_FOREACH_REVERSE_SAFE
|
||||
- TAILQ_FOREACH_SAFE
|
||||
- VM_MAP_ENTRY_FOREACH
|
||||
- VM_PAGE_DUMP_FOREACH
|
||||
IndentCaseLabels: false
|
||||
IndentPPDirectives: None
|
||||
Language: Cpp
|
||||
NamespaceIndentation: None
|
||||
PointerAlignment: Right
|
||||
ContinuationIndentWidth: 4
|
||||
IndentWidth: 4
|
||||
TabWidth: 4
|
||||
ColumnLimit: 80
|
||||
UseTab: Never
|
||||
SpaceAfterCStyleCast: false
|
||||
IncludeBlocks: Regroup
|
||||
IncludeCategories:
|
||||
- Regex: '^\"opt_.*\.h\"'
|
||||
Priority: 1
|
||||
SortPriority: 10
|
||||
- Regex: '^<sys/cdefs\.h>'
|
||||
Priority: 2
|
||||
SortPriority: 20
|
||||
- Regex: '^<sys/types\.h>'
|
||||
Priority: 2
|
||||
SortPriority: 21
|
||||
- Regex: '^<sys/param\.h>'
|
||||
Priority: 2
|
||||
SortPriority: 22
|
||||
- Regex: '^<sys/systm\.h>'
|
||||
Priority: 2
|
||||
SortPriority: 23
|
||||
- Regex: '^<sys.*/'
|
||||
Priority: 2
|
||||
SortPriority: 24
|
||||
- Regex: '^<vm/vm\.h>'
|
||||
Priority: 3
|
||||
SortPriority: 30
|
||||
- Regex: '^<vm/'
|
||||
Priority: 3
|
||||
SortPriority: 31
|
||||
- Regex: '^<machine/'
|
||||
Priority: 4
|
||||
SortPriority: 40
|
||||
- Regex: '^<(x86|amd64|i386|xen)/'
|
||||
Priority: 5
|
||||
SortPriority: 50
|
||||
- Regex: '^<dev/'
|
||||
Priority: 6
|
||||
SortPriority: 60
|
||||
- Regex: '^<net.*/'
|
||||
Priority: 7
|
||||
SortPriority: 70
|
||||
- Regex: '^<protocols/'
|
||||
Priority: 7
|
||||
SortPriority: 71
|
||||
- Regex: '^<(fs|nfs(|client|server)|ufs)/'
|
||||
Priority: 8
|
||||
SortPriority: 80
|
||||
- Regex: '^<[^/].*\.h'
|
||||
Priority: 9
|
||||
SortPriority: 90
|
||||
- Regex: '^\".*\.h\"'
|
||||
Priority: 10
|
||||
SortPriority: 100
|
||||
# LLVM's header include ordering style is almost the exact opposite of ours.
|
||||
# Unfortunately, they have hard-coded their preferences into clang-format.
|
||||
# Clobbering this regular expression to avoid matching prevents non-system
|
||||
# headers from being forcibly moved to the top of the include list.
|
||||
# http://llvm.org/docs/CodingStandards.html#include-style
|
||||
IncludeIsMainRegex: 'BLAH_DONT_MATCH_ANYTHING'
|
||||
SortIncludes: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||
TypenameMacros:
|
||||
- ARB_ELMTYPE
|
||||
- ARB_HEAD
|
||||
- ARB8_HEAD
|
||||
- ARB16_HEAD
|
||||
- ARB32_HEAD
|
||||
- ARB_ENTRY
|
||||
- ARB8_ENTRY
|
||||
- ARB16_ENTRY
|
||||
- ARB32_ENTRY
|
||||
- LIST_CLASS_ENTRY
|
||||
- LIST_CLASS_HEAD
|
||||
- LIST_ENTRY
|
||||
- LIST_HEAD
|
||||
- QUEUE_TYPEOF
|
||||
- RB_ENTRY
|
||||
- RB_HEAD
|
||||
- SLIST_CLASS_HEAD
|
||||
- SLIST_CLASS_ENTRY
|
||||
- SLIST_HEAD
|
||||
- SLIST_ENTRY
|
||||
- SMR_POINTER
|
||||
- SPLAY_ENTRY
|
||||
- SPLAY_HEAD
|
||||
- STAILQ_CLASS_ENTRY
|
||||
- STAILQ_CLASS_HEAD
|
||||
- STAILQ_ENTRY
|
||||
- STAILQ_HEAD
|
||||
- TAILQ_CLASS_ENTRY
|
||||
- TAILQ_CLASS_HEAD
|
||||
- TAILQ_ENTRY
|
||||
- TAILQ_HEAD
|
149
.clang-tidy
Normal file
149
.clang-tidy
Normal file
|
@ -0,0 +1,149 @@
|
|||
# Generated from CLion Inspection settings
|
||||
#bugprone-reserved-identifier,
|
||||
---
|
||||
Checks: '-*,
|
||||
-deprecated-non-prototype
|
||||
bugprone-argument-comment,
|
||||
bugprone-assert-side-effect,
|
||||
bugprone-bad-signal-to-kill-thread,
|
||||
bugprone-branch-clone,
|
||||
bugprone-copy-constructor-init,
|
||||
bugprone-dangling-handle,
|
||||
bugprone-dynamic-static-initializers,
|
||||
bugprone-fold-init-type,
|
||||
bugprone-forward-declaration-namespace,
|
||||
bugprone-forwarding-reference-overload,
|
||||
bugprone-inaccurate-erase,
|
||||
bugprone-incorrect-roundings,
|
||||
bugprone-integer-division,
|
||||
bugprone-lambda-function-name,
|
||||
bugprone-macro-parentheses,
|
||||
bugprone-macro-repeated-side-effects,
|
||||
bugprone-misplaced-operator-in-strlen-in-alloc,
|
||||
bugprone-misplaced-pointer-arithmetic-in-alloc,
|
||||
bugprone-misplaced-widening-cast,
|
||||
bugprone-move-forwarding-reference,
|
||||
bugprone-multiple-statement-macro,
|
||||
bugprone-no-escape,
|
||||
bugprone-not-null-terminated-result,
|
||||
bugprone-parent-virtual-call,
|
||||
bugprone-posix-return,
|
||||
bugprone-sizeof-container,
|
||||
bugprone-sizeof-expression,
|
||||
bugprone-spuriously-wake-up-functions,
|
||||
bugprone-string-constructor,
|
||||
bugprone-string-integer-assignment,
|
||||
bugprone-string-literal-with-embedded-nul,
|
||||
bugprone-suspicious-enum-usage,
|
||||
bugprone-suspicious-include,
|
||||
bugprone-suspicious-memset-usage,
|
||||
bugprone-suspicious-missing-comma,
|
||||
bugprone-suspicious-semicolon,
|
||||
bugprone-suspicious-string-compare,
|
||||
bugprone-suspicious-memory-comparison,
|
||||
bugprone-suspicious-realloc-usage,
|
||||
bugprone-swapped-arguments,
|
||||
bugprone-terminating-continue,
|
||||
bugprone-throw-keyword-missing,
|
||||
bugprone-too-small-loop-variable,
|
||||
bugprone-undefined-memory-manipulation,
|
||||
bugprone-undelegated-constructor,
|
||||
bugprone-unhandled-self-assignment,
|
||||
bugprone-unused-raii,
|
||||
bugprone-unused-return-value,
|
||||
bugprone-use-after-move,
|
||||
bugprone-virtual-near-miss,
|
||||
cert-dcl21-cpp,
|
||||
cert-dcl58-cpp,
|
||||
cert-err34-c,
|
||||
cert-err52-cpp,
|
||||
cert-err60-cpp,
|
||||
cert-flp30-c,
|
||||
cert-msc50-cpp,
|
||||
cert-msc51-cpp,
|
||||
cert-str34-c,
|
||||
cppcoreguidelines-interfaces-global-init,
|
||||
cppcoreguidelines-narrowing-conversions,
|
||||
cppcoreguidelines-pro-type-member-init,
|
||||
cppcoreguidelines-pro-type-static-cast-downcast,
|
||||
cppcoreguidelines-slicing,
|
||||
google-default-arguments,
|
||||
google-explicit-constructor,
|
||||
google-runtime-operator,
|
||||
hicpp-exception-baseclass,
|
||||
hicpp-multiway-paths-covered,
|
||||
misc-misplaced-const,
|
||||
misc-new-delete-overloads,
|
||||
misc-no-recursion,
|
||||
misc-non-copyable-objects,
|
||||
misc-throw-by-value-catch-by-reference,
|
||||
misc-unconventional-assign-operator,
|
||||
misc-uniqueptr-reset-release,
|
||||
modernize-avoid-bind,
|
||||
modernize-concat-nested-namespaces,
|
||||
modernize-deprecated-headers,
|
||||
modernize-deprecated-ios-base-aliases,
|
||||
modernize-loop-convert,
|
||||
modernize-make-shared,
|
||||
modernize-make-unique,
|
||||
modernize-pass-by-value,
|
||||
modernize-raw-string-literal,
|
||||
modernize-redundant-void-arg,
|
||||
modernize-replace-auto-ptr,
|
||||
modernize-replace-disallow-copy-and-assign-macro,
|
||||
modernize-replace-random-shuffle,
|
||||
modernize-return-braced-init-list,
|
||||
modernize-shrink-to-fit,
|
||||
modernize-unary-static-assert,
|
||||
modernize-use-auto,
|
||||
modernize-use-bool-literals,
|
||||
modernize-use-emplace,
|
||||
modernize-use-equals-default,
|
||||
modernize-use-equals-delete,
|
||||
modernize-use-nodiscard,
|
||||
modernize-use-noexcept,
|
||||
modernize-use-nullptr,
|
||||
modernize-use-override,
|
||||
modernize-use-transparent-functors,
|
||||
modernize-use-uncaught-exceptions,
|
||||
mpi-buffer-deref,
|
||||
mpi-type-mismatch,
|
||||
openmp-use-default-none,
|
||||
performance-faster-string-find,
|
||||
performance-for-range-copy,
|
||||
performance-implicit-conversion-in-loop,
|
||||
performance-inefficient-algorithm,
|
||||
performance-inefficient-string-concatenation,
|
||||
performance-inefficient-vector-operation,
|
||||
performance-move-const-arg,
|
||||
performance-move-constructor-init,
|
||||
performance-no-automatic-move,
|
||||
performance-noexcept-move-constructor,
|
||||
performance-trivially-destructible,
|
||||
performance-type-promotion-in-math-fn,
|
||||
performance-unnecessary-copy-initialization,
|
||||
performance-unnecessary-value-param,
|
||||
portability-simd-intrinsics,
|
||||
readability-avoid-const-params-in-decls,
|
||||
readability-const-return-type,
|
||||
readability-container-size-empty,
|
||||
readability-convert-member-functions-to-static,
|
||||
readability-delete-null-pointer,
|
||||
readability-deleted-default,
|
||||
readability-inconsistent-declaration-parameter-name,
|
||||
readability-make-member-function-const,
|
||||
readability-misleading-indentation,
|
||||
readability-misplaced-array-index,
|
||||
readability-non-const-parameter,
|
||||
readability-redundant-control-flow,
|
||||
readability-redundant-declaration,
|
||||
readability-redundant-function-ptr-dereference,
|
||||
readability-redundant-smartptr-get,
|
||||
readability-redundant-string-cstr,
|
||||
readability-redundant-string-init,
|
||||
readability-simplify-subscript-expr,
|
||||
readability-static-accessed-through-instance,
|
||||
readability-static-definition-in-anonymous-namespace,
|
||||
readability-string-compare,
|
||||
readability-uniqueptr-delete-release,
|
||||
readability-use-anyofallof'
|
5
.envrc
Normal file
5
.envrc
Normal file
|
@ -0,0 +1,5 @@
|
|||
if ! has nix_direnv_version || ! nix_direnv_version 3.0.4; then
|
||||
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.4/direnvrc" "sha256-DzlYZ33mWF/Gs8DDeyjr8mnVmQGx7ASYqA5WlxwvBG4="
|
||||
fi
|
||||
watch_file devShell.nix shell.nix flake.nix
|
||||
use flake || use nix
|
14
.gitignore
vendored
14
.gitignore
vendored
|
@ -1,4 +1,10 @@
|
|||
*.a
|
||||
*.so
|
||||
src/*.o
|
||||
src/example
|
||||
build_unix/**
|
||||
*~
|
||||
TAGS
|
||||
tags
|
||||
.direnv/
|
||||
.idea/
|
||||
dist/autom4te.cache/
|
||||
dist/config.hin
|
||||
dist/configure
|
||||
dist/config.log
|
||||
|
|
39
Makefile
39
Makefile
|
@ -1,39 +0,0 @@
|
|||
LDFLAGS = -pthread
|
||||
CFLAGS = \
|
||||
-g -D_GNU_SOURCE \
|
||||
-I. -I./src -I./debug -I./include -I./examples -I./tests \
|
||||
-fPIC \
|
||||
|
||||
CFLAGS += -Wall
|
||||
CFLAGS += -O3
|
||||
#CFLAGS += -fsanitize=address -fuse-ld=gold
|
||||
|
||||
SKIPLIST = src/skiplist.o
|
||||
SHARED_LIB = libskiplist.so
|
||||
STATIC_LIB = libskiplist.a
|
||||
|
||||
EXAMPLE = \
|
||||
src/example.o \
|
||||
$(STATIC_LIB) \
|
||||
|
||||
PROGRAMS = \
|
||||
src/example \
|
||||
libskiplist.so \
|
||||
libskiplist.a \
|
||||
|
||||
all: $(PROGRAMS)
|
||||
|
||||
libskiplist.so: $(SKIPLIST)
|
||||
$(CC) -shared $(LDBFALGS) -o $(SHARED_LIB) $(SKIPLIST)
|
||||
|
||||
libskiplist.a: $(SKIPLIST)
|
||||
ar rcs $(STATIC_LIB) $(SKIPLIST)
|
||||
|
||||
src/example: $(EXAMPLE)
|
||||
$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
|
||||
|
||||
format:
|
||||
clang-format -i src/*.[ch]
|
||||
|
||||
clean:
|
||||
rm -rf $(PROGRAMS) ./*.o ./*.so ./*/*.o ./*/*.so
|
|
@ -1,3 +1,8 @@
|
|||
# skiplist
|
||||
|
||||
Concurrent, lock-free Skip List in ANSI C99.
|
||||
Concurrent, lock-free Skip List in ANSI C99.
|
||||
|
||||
* Portions of this code are derived from work copyrighted by Jung-Sang Ahn
|
||||
* 2017-2024 Jung-Sang Ahn <jungsang.ahn@gmail.com> and made available under the
|
||||
* MIT License. (see: https://github.com/greensky00 Skiplist version: 0.2.9)
|
||||
*
|
||||
|
|
203
dist/Makefile.in
vendored
Normal file
203
dist/Makefile.in
vendored
Normal file
|
@ -0,0 +1,203 @@
|
|||
# SkipList
|
||||
|
||||
srcdir= @srcdir@/../src
|
||||
tstdir= @srcdir@/../test
|
||||
distdir= @srcdir@/../dist
|
||||
builddir=.
|
||||
|
||||
##################################################
|
||||
# Installation directories and permissions.
|
||||
##################################################
|
||||
prefix= @prefix@
|
||||
exec_prefix= @exec_prefix@
|
||||
bindir= @bindir@
|
||||
includedir= @includedir@
|
||||
libdir= @libdir@
|
||||
docdir= $(prefix)/docs
|
||||
|
||||
dmode= 755
|
||||
emode= 555
|
||||
fmode= 444
|
||||
|
||||
transform=@program_transform_name@
|
||||
|
||||
##################################################
|
||||
# Paths for standard user-level commands.
|
||||
##################################################
|
||||
SHELL= @db_cv_path_sh@
|
||||
ar= @db_cv_path_ar@
|
||||
awk= @db_cv_path_awk@
|
||||
chmod= @db_cv_path_chmod@
|
||||
cp= @db_cv_path_cp@
|
||||
depend= @db_cv_path_makedepend@
|
||||
grep= @db_cv_path_grep@
|
||||
ln= @db_cv_path_ln@
|
||||
mkdir= @db_cv_path_mkdir@
|
||||
ranlib= @db_cv_path_ranlib@
|
||||
rm= @db_cv_path_rm@
|
||||
rpm= @db_cv_path_rpm@
|
||||
sed= @db_cv_path_sed@
|
||||
perl= @db_cv_path_perl@
|
||||
splint= @db_cv_path_splint@
|
||||
strip= @db_cv_path_strip@
|
||||
|
||||
##################################################
|
||||
# General library information.
|
||||
##################################################
|
||||
DEF_LIB= @DEFAULT_LIB@
|
||||
INSTALLER= @INSTALLER@
|
||||
LIBTOOL= @LIBTOOL@
|
||||
POSTLINK= @POSTLINK@
|
||||
SOLINK= @MAKEFILE_SOLINK@
|
||||
SOFLAGS= @SOFLAGS@
|
||||
LIBMAJOR= @SKIPLIST_VERSION_MAJOR@
|
||||
LIBVERSION= @SKIPLIST_VERSION_MAJOR@.@SKIPLIST_VERSION_MINOR@
|
||||
CPPFLAGS= -I$(builddir) -I$(srcdir) @CPPFLAGS@
|
||||
|
||||
##################################################
|
||||
# C
|
||||
##################################################
|
||||
CFLAGS= -c $(CPPFLAGS) @CFLAGS@
|
||||
CC= @MAKEFILE_CC@
|
||||
CCLINK= @MAKEFILE_CCLINK@
|
||||
|
||||
LDFLAGS= @LDFLAGS@
|
||||
LIBS= @LIBS@
|
||||
LIBSO_LIBS= @LIBSO_LIBS@
|
||||
|
||||
libskiplist_base= libskiplist
|
||||
libskiplist= $(libskiplist_base).a
|
||||
libskiplist_version= $(libskiplist_base)-$(LIBVERSION).a
|
||||
libso= $(libskiplist_base)-$(LIBVERSION)@SOSUFFIX@
|
||||
libso_target= $(libskiplist_base)-$(LIBVERSION).la
|
||||
libso_default= $(libskiplist_base)@SOSUFFIX@
|
||||
libso_major= $(libskiplist_base)-$(LIBMAJOR)@SOSUFFIX@
|
||||
|
||||
##################################################
|
||||
# Source file lists.
|
||||
##################################################
|
||||
|
||||
C_FILES=\
|
||||
$(srcdir)/skiplist.c
|
||||
|
||||
##################################################
|
||||
# Object and utility lists.
|
||||
##################################################
|
||||
|
||||
C_OBJS=\
|
||||
skiplist@o@
|
||||
|
||||
##################################################
|
||||
# List of files installed into the library directory.
|
||||
##################################################
|
||||
LIB_INSTALL_FILE_LIST=\
|
||||
$(libdbsql) \
|
||||
$(libso) \
|
||||
$(libso_default) \
|
||||
$(libso_major) \
|
||||
$(libdbsql_version) \
|
||||
$(libso_target) \
|
||||
$(libtso) \
|
||||
$(libtso_default) \
|
||||
$(libtso_major) \
|
||||
$(libtso_static) \
|
||||
$(libtso_target)
|
||||
|
||||
##################################################
|
||||
# We're building a standard library or a RPM file hierarchy.
|
||||
# Note: "all" must be the first target in the Makefile.
|
||||
##################################################
|
||||
all: @BUILD_TARGET@
|
||||
|
||||
install-strip install: all @INSTALL_TARGET@
|
||||
|
||||
##################################################
|
||||
# Library build.
|
||||
##################################################
|
||||
library_build: $(libso_target) $(libtso_target)
|
||||
|
||||
# Static C library named libskiplist.a.
|
||||
$(libskiplist): $(DEF_LIB)
|
||||
$(rm) -f $@
|
||||
test ! -f .libs/$(libskiplist_version) || \
|
||||
$(ln) -s .libs/$(libskiplist_version) $@
|
||||
test -f .libs/$(libskiplist_version) || \
|
||||
(test -f $(libskiplist_version) &&
|
||||
$(ln) -s $(libskiplist_version) $@)
|
||||
|
||||
# Real static C library.
|
||||
$(libskiplist_version): skiplist.h $(C_OBJS)
|
||||
$(ar) cr $@ $(C_OBJS)
|
||||
test ! -f $(ranlib) || $(ranlib) $@
|
||||
|
||||
# Shared C library.
|
||||
$(libso_target): skiplist.h $(C_OBJS)
|
||||
$(SOLINK) $(SOFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) $(LIBSO_LIBS)
|
||||
|
||||
##################################################
|
||||
# Testing.
|
||||
##################################################
|
||||
test: test@o@ munit@o@
|
||||
$(CCLINK) -o $@ $(LDFLAGS) \
|
||||
test@o@ $(DEF_LIB) $(LIBS)
|
||||
$(POSTLINK) $@
|
||||
|
||||
check: test
|
||||
./test
|
||||
|
||||
##################################################
|
||||
# Remaining standard Makefile targets.
|
||||
##################################################
|
||||
|
||||
CLEAN_LIST=\
|
||||
$(builddir)/example \
|
||||
$(tstdir)/test $(tstdir)/*.o
|
||||
|
||||
mostly-clean clean:
|
||||
$(rm) -rf $(C_OBJS)
|
||||
$(rm) -rf *.exe $(CLEAN_LIST)
|
||||
$(rm) -rf tags *@o@ *~ *.o *.o.lock *.lo core *.core *.loT
|
||||
$(rm) -rf .libs $(LIB_INSTALL_FILE_LIST)
|
||||
|
||||
REALCLEAN_LIST=\
|
||||
Makefile config.cache config.log config.status \
|
||||
configure.lineno skiplist.h
|
||||
|
||||
distclean maintainer-clean realclean: clean
|
||||
$(rm) -rf $(REALCLEAN_LIST)
|
||||
$(rm) -rf libtool
|
||||
|
||||
LIBTOOL_DEPS = @LIBTOOL_DEPS@
|
||||
libtool: $(LIBTOOL_DEPS)
|
||||
$(SHELL) ./deps/config.status $(builddir)/libtool
|
||||
|
||||
check dvi info obj TAGS:
|
||||
@echo "$@: make target not supported" && true
|
||||
|
||||
dist:
|
||||
@echo "$@: make target not supported" && false
|
||||
|
||||
##################################################
|
||||
# Example programs for C.
|
||||
##################################################
|
||||
|
||||
example: $(DEF_LIB) example@o@
|
||||
$(CCLINK) -o $@ $(LDFLAGS) \
|
||||
example@o@ $(DEF_LIB) $(LIBS)
|
||||
$(POSTLINK) $@
|
||||
|
||||
##################################################
|
||||
# C
|
||||
##################################################
|
||||
|
||||
example@o@: $(srcdir)/example.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
|
||||
skiplist@o@: $(srcdir)/skiplist.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
|
||||
munit@o@: $(tstdir)/munit.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
|
||||
test@o@: $(tstdir)/test.c
|
||||
$(CC) $(CFLAGS) $?
|
9
dist/RELEASE
vendored
Normal file
9
dist/RELEASE
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
SKIPLIST_VERSION_MAJOR=0
|
||||
SKIPLIST_VERSION_MINOR=0
|
||||
SKIPLIST_VERSION_PATCH=1
|
||||
SKIPLIST_VERSION="$SKIPLIST_VERSION_MAJOR.$SKIPLIST_VERSION_MINOR.$SKIPLIST_VERSION_PATCH"
|
||||
|
||||
SKIPLIST_VERSION_UNIQUE_NAME=`printf "_%d%03d" $SKIPLIST_VERSION_MAJOR $SKIPLIST_VERSION_MINOR`
|
||||
|
||||
SKIPLIST_RELEASE_DATE=`date "+%B %e, %Y"`
|
||||
SKIPLIST_VERSION_STRING="A skiplist $SKIPLIST_VERSION: ($SKIPLIST_RELEASE_DATE)"
|
26
dist/aclocal/config.m4
vendored
Normal file
26
dist/aclocal/config.m4
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
# Features we don't test for, but want the #defines to exist for
|
||||
# other ports.
|
||||
AH_TEMPLATE(DBSQL_WIN32,
|
||||
[We use DBSQL_WIN32 much as one would use _WIN32 -- to specify that
|
||||
we're using an operating system environment that supports Win32
|
||||
calls and semantics. We don't use _WIN32 because Cygwin/GCC also
|
||||
defines _WIN32, even though Cygwin/GCC closely emulates the Unix
|
||||
environment.])
|
||||
|
||||
AH_TEMPLATE(HAVE_FILESYSTEM_NOTZERO,
|
||||
[Define to 1 if allocated filesystem blocks are not zeroed.])
|
||||
|
||||
AH_TEMPLATE(HAVE_UNLINK_WITH_OPEN_FAILURE,
|
||||
[Define to 1 if unlink of file with open file descriptors will fail.])
|
||||
|
||||
AH_BOTTOM([/*
|
||||
* Exit success/failure macros.
|
||||
*/
|
||||
#ifndef HAVE_EXIT_SUCCESS
|
||||
#define EXIT_FAILURE 1
|
||||
#define EXIT_SUCCESS 0
|
||||
#endif
|
||||
|
||||
#ifdef DBSQL_WIN32
|
||||
#include "win_dbsql.h"
|
||||
#endif])
|
313
dist/aclocal/cxx.m4
vendored
Normal file
313
dist/aclocal/cxx.m4
vendored
Normal file
|
@ -0,0 +1,313 @@
|
|||
# C++ language checks
|
||||
|
||||
AC_DEFUN(AC_CXX_STDHEADERS, [
|
||||
AC_SUBST(cxx_have_stdheaders)
|
||||
AC_MSG_CHECKING(whether C++ supports the ISO C++ standard includes)
|
||||
AC_LANG_SAVE
|
||||
AC_LANG([C++])
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE(
|
||||
[[#include <iostream>]],
|
||||
[[std::ostream *o; return 0;]])],
|
||||
db_cv_cxx_have_stdheaders=yes, db_cv_cxx_have_stdheaders=no)
|
||||
AC_LANG_RESTORE
|
||||
AC_MSG_RESULT($db_cv_cxx_have_stdheaders)
|
||||
if test "$db_cv_cxx_have_stdheaders" = yes; then
|
||||
cxx_have_stdheaders="#define HAVE_CXX_STDHEADERS 1"
|
||||
fi])
|
||||
|
||||
AC_DEFUN(AC_CXX_WSTRING, [
|
||||
AC_MSG_CHECKING(whether C++ supports the wstring class)
|
||||
AC_SUBST(WSTRING_decl)
|
||||
AC_LANG_SAVE
|
||||
AC_LANG([C++])
|
||||
AC_LINK_IFELSE(AC_LANG_SOURCE(
|
||||
[[#include <string>]],
|
||||
[[using std::wstring;
|
||||
wstring ws; ws.find_first_of(ws);]]),
|
||||
[WSTRING_decl="#define HAVE_WSTRING 1" ;
|
||||
AC_MSG_RESULT(yes)],
|
||||
[WSTRING_decl="#undef HAVE_WSTRING" ;
|
||||
AC_MSG_RESULT(no)])
|
||||
AC_LANG_RESTORE
|
||||
])
|
||||
|
||||
AC_DEFUN(AC_CXX_SUPPORTS_TEMPLATES, [
|
||||
AC_MSG_CHECKING(whether the C++ compiler supports templates for STL)
|
||||
AC_LANG_SAVE
|
||||
AC_LANG([C++])
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
]], [[
|
||||
using std::string;
|
||||
using std::vector;
|
||||
namespace dbstl_configure_test {
|
||||
|
||||
template<typename T1, typename T2 = int>
|
||||
class MyClass
|
||||
{
|
||||
public:
|
||||
explicit MyClass(int i) { imem = i;}
|
||||
|
||||
MyClass(const T1& t1, const T2& t2, int i)
|
||||
{
|
||||
mem1 = t1;
|
||||
mem2 = t2;
|
||||
imem = i;
|
||||
}
|
||||
|
||||
template <typename T3>
|
||||
T2 templ_mem_func(T1 t1, T3 t3)
|
||||
{
|
||||
mem2 = t1;
|
||||
T3 t32 = t3;
|
||||
T2 t2;
|
||||
return t2;
|
||||
}
|
||||
|
||||
double templ_mem_func(T1 t1, double t3)
|
||||
{
|
||||
mem1 = t1;
|
||||
double t32 = t3;
|
||||
return t3;
|
||||
}
|
||||
|
||||
template <typename ReturnType, typename T7, typename T8>
|
||||
ReturnType templ_mem_func(T7, T8);
|
||||
|
||||
operator T1() const {return mem1;}
|
||||
private:
|
||||
T1 mem1;
|
||||
T2 mem2;
|
||||
int imem;
|
||||
};
|
||||
|
||||
template<typename T1, typename T2>
|
||||
template <typename ReturnType, typename T7, typename T8>
|
||||
ReturnType MyClass<T1, T2>::templ_mem_func(T7, T8)
|
||||
{
|
||||
ReturnType rt;
|
||||
return rt;
|
||||
}
|
||||
|
||||
template<>
|
||||
class MyClass<double, float>
|
||||
{
|
||||
public:
|
||||
explicit MyClass(int i) { imem = i;}
|
||||
|
||||
MyClass(const double& t1, const float& t2, int i)
|
||||
{
|
||||
mem1 = t1;
|
||||
mem2 = t2;
|
||||
imem = i;
|
||||
}
|
||||
|
||||
template <typename T3>
|
||||
float templ_mem_func(double t1, T3 t3)
|
||||
{
|
||||
mem2 = t1;
|
||||
T3 t32 = t3;
|
||||
float t2;
|
||||
return t2;
|
||||
}
|
||||
|
||||
double templ_mem_func(double t1, double t3)
|
||||
{
|
||||
mem1 = t1;
|
||||
double t32 = t3;
|
||||
return t3;
|
||||
}
|
||||
|
||||
template <typename ReturnType, typename T7, typename T8>
|
||||
ReturnType templ_mem_func(T7, T8);
|
||||
|
||||
operator double() const {return mem1;}
|
||||
private:
|
||||
double mem1;
|
||||
float mem2;
|
||||
int imem;
|
||||
};
|
||||
|
||||
template <typename ReturnType, typename T7, typename T8>
|
||||
ReturnType MyClass<double, float>::templ_mem_func(T7, T8)
|
||||
{
|
||||
ReturnType rt;
|
||||
return rt;
|
||||
}
|
||||
|
||||
template <typename T1, typename T2>
|
||||
class MyClass2 {
|
||||
public:
|
||||
MyClass2(const T1& t1, const T2&t2){}
|
||||
};
|
||||
|
||||
// partial specialization: both template parameters have same type
|
||||
template <typename T>
|
||||
class MyClass2<T,T> {
|
||||
public:
|
||||
MyClass2(const T& t1, const T&t2){}
|
||||
};
|
||||
|
||||
// partial specialization: second type is int
|
||||
template <typename T>
|
||||
class MyClass2<T,int> {
|
||||
public:
|
||||
MyClass2(const T& t1, const int&t2){}
|
||||
};
|
||||
|
||||
// partial specialization: both template parameters are pointer types
|
||||
template <typename T1, typename T2>
|
||||
class MyClass2<T1*,T2*> {
|
||||
public:
|
||||
MyClass2(const T1* t1, const T2*t2){}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class MyClass2<T*,T*> {
|
||||
public:
|
||||
MyClass2(const T* t1, const T*t2){}
|
||||
};
|
||||
|
||||
template <typename T4, typename T5>
|
||||
int part_spec_func(T4 t4, T5 t5)
|
||||
{
|
||||
// Zero Initialization should work.
|
||||
T4 t44 = T4();
|
||||
T5 t55 = T5();
|
||||
|
||||
t44 = t4;
|
||||
t55 = t5;
|
||||
}
|
||||
|
||||
template <typename T4>
|
||||
int part_spec_func(T4 t4, std::vector<T4> t55)
|
||||
{
|
||||
T4 t44 = t4;
|
||||
std::vector<T4> abc = t55;
|
||||
}
|
||||
|
||||
// maximum of two int values
|
||||
inline int const& max (int const& a, int const& b)
|
||||
{
|
||||
return a<b?b:a;
|
||||
}
|
||||
|
||||
// maximum of two values of any type
|
||||
template <typename T1, typename T2>
|
||||
inline T2 const max (T1 const& a, T2 const& b)
|
||||
{
|
||||
return a<b?b:a;
|
||||
}
|
||||
// maximum of two values of any type
|
||||
template <typename T>
|
||||
inline T const& max (T const& a, T const& b)
|
||||
{
|
||||
return a<b?b:a;
|
||||
}
|
||||
|
||||
// maximum of three values of any type
|
||||
template <typename T>
|
||||
inline T const& max (T const& a, T const& b, T const& c)
|
||||
{
|
||||
return max (max(a,b), c);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
class Base {
|
||||
public:
|
||||
void exit2(){}
|
||||
Base(){}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class Derived : public Base<T> {
|
||||
public:
|
||||
// Call Base<T>() explicitly here, otherwise can't access it.
|
||||
// Kind of like this->.
|
||||
Derived() : Base<T>(){}
|
||||
|
||||
void foo() {
|
||||
this->exit2();
|
||||
}
|
||||
};
|
||||
|
||||
} // dbstl_configure_test
|
||||
|
||||
using namespace dbstl_configure_test;], [
|
||||
char cc = 'a';
|
||||
int i = 4;
|
||||
double pi = 3.14;
|
||||
float gold = 0.618;
|
||||
|
||||
MyClass2<int,float> mif(i, gold); // uses MyClass2<T1,T2>
|
||||
MyClass2<float,float> mff(gold, gold); // uses MyClass2<T,T>
|
||||
MyClass2<float,int> mfi(gold, i); // uses MyClass2<T,int>
|
||||
MyClass2<int*,float*> mp(&i, &gold); // uses MyClass2<T1*,T2*>
|
||||
MyClass2<int*,int*> m(&i, &i); // uses MyClass2<T*, T*>
|
||||
|
||||
MyClass<char> obj1(i);
|
||||
obj1.templ_mem_func(cc, pi);
|
||||
obj1.templ_mem_func(cc, gold);
|
||||
obj1.templ_mem_func(i, pi);
|
||||
obj1.templ_mem_func(cc, cc);
|
||||
char ch = (char)obj1;
|
||||
|
||||
string str1("abc"), str2("def");
|
||||
MyClass<const char*, std::string> obj2(str1.c_str(), str2, i);
|
||||
obj2.templ_mem_func("klm", str2);
|
||||
obj2.templ_mem_func("hij", pi);
|
||||
|
||||
// Use j to help distinguish, otherwise unable to use the one defined
|
||||
// outside of class body.
|
||||
int j = obj2.templ_mem_func<int, char, char>(cc, cc);
|
||||
// Call explicitly.
|
||||
obj2.templ_mem_func<int, float, double>(gold, pi);
|
||||
const char *pch = (const char*)obj2;
|
||||
|
||||
MyClass<double, float> obj3(pi, gold, i);
|
||||
obj3.templ_mem_func(pi, i);
|
||||
obj3.templ_mem_func(pi, str1);
|
||||
obj3.templ_mem_func(pi, pi);
|
||||
obj3.templ_mem_func(cc, pi);
|
||||
obj3.templ_mem_func(cc, cc);
|
||||
double tmpd = (double)obj3;
|
||||
|
||||
MyClass<double, float> obj4(i);
|
||||
obj4.templ_mem_func(pi, i);
|
||||
obj4.templ_mem_func(pi, str1);
|
||||
obj4.templ_mem_func(pi, pi);
|
||||
obj4.templ_mem_func(gold, pi);
|
||||
tmpd = (double)obj4;
|
||||
|
||||
// Function template partial specialization.
|
||||
part_spec_func(pi, gold);
|
||||
part_spec_func(gold, i);
|
||||
part_spec_func(str1, str2);
|
||||
std::vector<std::string> strv;
|
||||
part_spec_func(str1, strv);
|
||||
std::vector<double> dblv;
|
||||
part_spec_func(pi, dblv);
|
||||
|
||||
// Function template overloads and explicit call and deduction.
|
||||
dbstl_configure_test::max(7, 42, 68); // calls the template for three arguments
|
||||
dbstl_configure_test::max(7.0, 42.0); // calls max<double> (by argument deduction)
|
||||
dbstl_configure_test::max('a', 'b'); // calls max<char> (by argument deduction)
|
||||
dbstl_configure_test::max(7, 42.0);
|
||||
dbstl_configure_test::max<double>(4,4.2); // instantiate T as double
|
||||
dbstl_configure_test::max(7, 42); // calls the nontemplate for two ints
|
||||
dbstl_configure_test::max<>(7, 42); // calls max<int> (by argument deduction)
|
||||
dbstl_configure_test::max<double, double>(7, 42); // calls max<double> (no argument deduction)
|
||||
dbstl_configure_test::max('a', 42.7); // calls the nontemplate for two ints
|
||||
|
||||
Base<double> bobj;
|
||||
bobj.exit2();
|
||||
// Using this-> to access base class members.
|
||||
Derived<double> dobj;
|
||||
dobj.foo();
|
||||
dobj.exit2();
|
||||
]])], AC_MSG_RESULT(yes), AC_MSG_ERROR(no))
|
||||
|
||||
AC_LANG_RESTORE
|
||||
])
|
19
dist/aclocal/gcc.m4
vendored
Normal file
19
dist/aclocal/gcc.m4
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
# Version 2.96 of gcc (shipped with RedHat Linux 7.[01] and Mandrake) had
|
||||
# serious problems.
|
||||
AC_DEFUN(AC_GCC_CONFIG1, [
|
||||
AC_CACHE_CHECK([whether we are using gcc version 2.96],
|
||||
db_cv_gcc_2_96, [
|
||||
db_cv_gcc_2_96=no
|
||||
if test "$GCC" = "yes"; then
|
||||
GCC_VERSION=`${MAKEFILE_CC} --version`
|
||||
case ${GCC_VERSION} in
|
||||
2.96*)
|
||||
db_cv_gcc_2_96=yes;;
|
||||
esac
|
||||
fi])
|
||||
if test "$db_cv_gcc_2_96" = "yes"; then
|
||||
CFLAGS=`echo "$CFLAGS" | sed 's/-O2/-O/'`
|
||||
CXXFLAGS=`echo "$CXXFLAGS" | sed 's/-O2/-O/'`
|
||||
AC_MSG_WARN([INSTALLED GCC COMPILER HAS SERIOUS BUGS; PLEASE UPGRADE.])
|
||||
AC_MSG_WARN([GCC OPTIMIZATION LEVEL SET TO -O.])
|
||||
fi])
|
8400
dist/aclocal/libtool.m4
vendored
Normal file
8400
dist/aclocal/libtool.m4
vendored
Normal file
File diff suppressed because it is too large
Load diff
437
dist/aclocal/ltoptions.m4
vendored
Normal file
437
dist/aclocal/ltoptions.m4
vendored
Normal file
|
@ -0,0 +1,437 @@
|
|||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free
|
||||
# Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 8 ltoptions.m4
|
||||
|
||||
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||
AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
|
||||
|
||||
|
||||
# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
|
||||
# ------------------------------------------
|
||||
m4_define([_LT_MANGLE_OPTION],
|
||||
[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
|
||||
|
||||
|
||||
# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
|
||||
# ---------------------------------------
|
||||
# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
|
||||
# matching handler defined, dispatch to it. Other OPTION-NAMEs are
|
||||
# saved as a flag.
|
||||
m4_define([_LT_SET_OPTION],
|
||||
[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
|
||||
m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
|
||||
_LT_MANGLE_DEFUN([$1], [$2]),
|
||||
[m4_warning([Unknown $1 option '$2'])])[]dnl
|
||||
])
|
||||
|
||||
|
||||
# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
|
||||
# ------------------------------------------------------------
|
||||
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
||||
m4_define([_LT_IF_OPTION],
|
||||
[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
|
||||
|
||||
|
||||
# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
|
||||
# -------------------------------------------------------
|
||||
# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
|
||||
# are set.
|
||||
m4_define([_LT_UNLESS_OPTIONS],
|
||||
[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
|
||||
[m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
|
||||
[m4_define([$0_found])])])[]dnl
|
||||
m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
|
||||
])[]dnl
|
||||
])
|
||||
|
||||
|
||||
# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
|
||||
# ----------------------------------------
|
||||
# OPTION-LIST is a space-separated list of Libtool options associated
|
||||
# with MACRO-NAME. If any OPTION has a matching handler declared with
|
||||
# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
|
||||
# the unknown option and exit.
|
||||
m4_defun([_LT_SET_OPTIONS],
|
||||
[# Set options
|
||||
m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
|
||||
[_LT_SET_OPTION([$1], _LT_Option)])
|
||||
|
||||
m4_if([$1],[LT_INIT],[
|
||||
dnl
|
||||
dnl Simply set some default values (i.e off) if boolean options were not
|
||||
dnl specified:
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
|
||||
])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
|
||||
])
|
||||
dnl
|
||||
dnl If no reference was made to various pairs of opposing options, then
|
||||
dnl we run the default mode handler for the pair. For example, if neither
|
||||
dnl 'shared' nor 'disable-shared' was passed, we enable building of shared
|
||||
dnl archives by default:
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
|
||||
[_LT_ENABLE_FAST_INSTALL])
|
||||
_LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
|
||||
[_LT_WITH_AIX_SONAME([aix])])
|
||||
])
|
||||
])# _LT_SET_OPTIONS
|
||||
|
||||
|
||||
## --------------------------------- ##
|
||||
## Macros to handle LT_INIT options. ##
|
||||
## --------------------------------- ##
|
||||
|
||||
# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
|
||||
# -----------------------------------------
|
||||
m4_define([_LT_MANGLE_DEFUN],
|
||||
[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
|
||||
|
||||
|
||||
# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
|
||||
# -----------------------------------------------
|
||||
m4_define([LT_OPTION_DEFINE],
|
||||
[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
|
||||
])# LT_OPTION_DEFINE
|
||||
|
||||
|
||||
# dlopen
|
||||
# ------
|
||||
LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
|
||||
])
|
||||
|
||||
AU_DEFUN([AC_LIBTOOL_DLOPEN],
|
||||
[_LT_SET_OPTION([LT_INIT], [dlopen])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||
put the 'dlopen' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
|
||||
|
||||
|
||||
# win32-dll
|
||||
# ---------
|
||||
# Declare package support for building win32 dll's.
|
||||
LT_OPTION_DEFINE([LT_INIT], [win32-dll],
|
||||
[enable_win32_dll=yes
|
||||
|
||||
case $host in
|
||||
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
|
||||
AC_CHECK_TOOL(AS, as, false)
|
||||
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
||||
AC_CHECK_TOOL(OBJDUMP, objdump, false)
|
||||
;;
|
||||
esac
|
||||
|
||||
test -z "$AS" && AS=as
|
||||
_LT_DECL([], [AS], [1], [Assembler program])dnl
|
||||
|
||||
test -z "$DLLTOOL" && DLLTOOL=dlltool
|
||||
_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
|
||||
|
||||
test -z "$OBJDUMP" && OBJDUMP=objdump
|
||||
_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
|
||||
])# win32-dll
|
||||
|
||||
AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
|
||||
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
_LT_SET_OPTION([LT_INIT], [win32-dll])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||
put the 'win32-dll' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
|
||||
|
||||
|
||||
# _LT_ENABLE_SHARED([DEFAULT])
|
||||
# ----------------------------
|
||||
# implement the --enable-shared flag, and supports the 'shared' and
|
||||
# 'disable-shared' LT_INIT options.
|
||||
# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
|
||||
m4_define([_LT_ENABLE_SHARED],
|
||||
[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||
AC_ARG_ENABLE([shared],
|
||||
[AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
|
||||
[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
|
||||
[p=${PACKAGE-default}
|
||||
case $enableval in
|
||||
yes) enable_shared=yes ;;
|
||||
no) enable_shared=no ;;
|
||||
*)
|
||||
enable_shared=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
|
||||
for pkg in $enableval; do
|
||||
IFS=$lt_save_ifs
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_shared=yes
|
||||
fi
|
||||
done
|
||||
IFS=$lt_save_ifs
|
||||
;;
|
||||
esac],
|
||||
[enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
|
||||
|
||||
_LT_DECL([build_libtool_libs], [enable_shared], [0],
|
||||
[Whether or not to build shared libraries])
|
||||
])# _LT_ENABLE_SHARED
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
|
||||
|
||||
# Old names:
|
||||
AC_DEFUN([AC_ENABLE_SHARED],
|
||||
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_DISABLE_SHARED],
|
||||
[_LT_SET_OPTION([LT_INIT], [disable-shared])
|
||||
])
|
||||
|
||||
AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
|
||||
AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AM_ENABLE_SHARED], [])
|
||||
dnl AC_DEFUN([AM_DISABLE_SHARED], [])
|
||||
|
||||
|
||||
|
||||
# _LT_ENABLE_STATIC([DEFAULT])
|
||||
# ----------------------------
|
||||
# implement the --enable-static flag, and support the 'static' and
|
||||
# 'disable-static' LT_INIT options.
|
||||
# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
|
||||
m4_define([_LT_ENABLE_STATIC],
|
||||
[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||
AC_ARG_ENABLE([static],
|
||||
[AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
|
||||
[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
|
||||
[p=${PACKAGE-default}
|
||||
case $enableval in
|
||||
yes) enable_static=yes ;;
|
||||
no) enable_static=no ;;
|
||||
*)
|
||||
enable_static=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
|
||||
for pkg in $enableval; do
|
||||
IFS=$lt_save_ifs
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_static=yes
|
||||
fi
|
||||
done
|
||||
IFS=$lt_save_ifs
|
||||
;;
|
||||
esac],
|
||||
[enable_static=]_LT_ENABLE_STATIC_DEFAULT)
|
||||
|
||||
_LT_DECL([build_old_libs], [enable_static], [0],
|
||||
[Whether or not to build static libraries])
|
||||
])# _LT_ENABLE_STATIC
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
|
||||
|
||||
# Old names:
|
||||
AC_DEFUN([AC_ENABLE_STATIC],
|
||||
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_DISABLE_STATIC],
|
||||
[_LT_SET_OPTION([LT_INIT], [disable-static])
|
||||
])
|
||||
|
||||
AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
|
||||
AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AM_ENABLE_STATIC], [])
|
||||
dnl AC_DEFUN([AM_DISABLE_STATIC], [])
|
||||
|
||||
|
||||
|
||||
# _LT_ENABLE_FAST_INSTALL([DEFAULT])
|
||||
# ----------------------------------
|
||||
# implement the --enable-fast-install flag, and support the 'fast-install'
|
||||
# and 'disable-fast-install' LT_INIT options.
|
||||
# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
|
||||
m4_define([_LT_ENABLE_FAST_INSTALL],
|
||||
[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
|
||||
AC_ARG_ENABLE([fast-install],
|
||||
[AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
|
||||
[optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
|
||||
[p=${PACKAGE-default}
|
||||
case $enableval in
|
||||
yes) enable_fast_install=yes ;;
|
||||
no) enable_fast_install=no ;;
|
||||
*)
|
||||
enable_fast_install=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
|
||||
for pkg in $enableval; do
|
||||
IFS=$lt_save_ifs
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_fast_install=yes
|
||||
fi
|
||||
done
|
||||
IFS=$lt_save_ifs
|
||||
;;
|
||||
esac],
|
||||
[enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
|
||||
|
||||
_LT_DECL([fast_install], [enable_fast_install], [0],
|
||||
[Whether or not to optimize for fast installation])dnl
|
||||
])# _LT_ENABLE_FAST_INSTALL
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
|
||||
|
||||
# Old names:
|
||||
AU_DEFUN([AC_ENABLE_FAST_INSTALL],
|
||||
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
|
||||
the 'fast-install' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
AU_DEFUN([AC_DISABLE_FAST_INSTALL],
|
||||
[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
|
||||
the 'disable-fast-install' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
|
||||
dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
|
||||
|
||||
|
||||
# _LT_WITH_AIX_SONAME([DEFAULT])
|
||||
# ----------------------------------
|
||||
# implement the --with-aix-soname flag, and support the `aix-soname=aix'
|
||||
# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
|
||||
# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'.
|
||||
m4_define([_LT_WITH_AIX_SONAME],
|
||||
[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
|
||||
shared_archive_member_spec=
|
||||
case $host,$enable_shared in
|
||||
power*-*-aix[[5-9]]*,yes)
|
||||
AC_MSG_CHECKING([which variant of shared library versioning to provide])
|
||||
AC_ARG_WITH([aix-soname],
|
||||
[AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
|
||||
[shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
|
||||
[case $withval in
|
||||
aix|svr4|both)
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR([Unknown argument to --with-aix-soname])
|
||||
;;
|
||||
esac
|
||||
lt_cv_with_aix_soname=$with_aix_soname],
|
||||
[AC_CACHE_VAL([lt_cv_with_aix_soname],
|
||||
[lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
|
||||
with_aix_soname=$lt_cv_with_aix_soname])
|
||||
AC_MSG_RESULT([$with_aix_soname])
|
||||
if test aix != "$with_aix_soname"; then
|
||||
# For the AIX way of multilib, we name the shared archive member
|
||||
# based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
|
||||
# and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
|
||||
# Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
|
||||
# the AIX toolchain works better with OBJECT_MODE set (default 32).
|
||||
if test 64 = "${OBJECT_MODE-32}"; then
|
||||
shared_archive_member_spec=shr_64
|
||||
else
|
||||
shared_archive_member_spec=shr
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
with_aix_soname=aix
|
||||
;;
|
||||
esac
|
||||
|
||||
_LT_DECL([], [shared_archive_member_spec], [0],
|
||||
[Shared archive member basename, for filename based shared library versioning on AIX])dnl
|
||||
])# _LT_WITH_AIX_SONAME
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
|
||||
|
||||
|
||||
# _LT_WITH_PIC([MODE])
|
||||
# --------------------
|
||||
# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
|
||||
# LT_INIT options.
|
||||
# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'.
|
||||
m4_define([_LT_WITH_PIC],
|
||||
[AC_ARG_WITH([pic],
|
||||
[AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
|
||||
[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
|
||||
[lt_p=${PACKAGE-default}
|
||||
case $withval in
|
||||
yes|no) pic_mode=$withval ;;
|
||||
*)
|
||||
pic_mode=default
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
|
||||
for lt_pkg in $withval; do
|
||||
IFS=$lt_save_ifs
|
||||
if test "X$lt_pkg" = "X$lt_p"; then
|
||||
pic_mode=yes
|
||||
fi
|
||||
done
|
||||
IFS=$lt_save_ifs
|
||||
;;
|
||||
esac],
|
||||
[pic_mode=m4_default([$1], [default])])
|
||||
|
||||
_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
|
||||
])# _LT_WITH_PIC
|
||||
|
||||
LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
|
||||
LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
|
||||
|
||||
# Old name:
|
||||
AU_DEFUN([AC_LIBTOOL_PICMODE],
|
||||
[_LT_SET_OPTION([LT_INIT], [pic-only])
|
||||
AC_DIAGNOSE([obsolete],
|
||||
[$0: Remove this warning and the call to _LT_SET_OPTION when you
|
||||
put the 'pic-only' option into LT_INIT's first parameter.])
|
||||
])
|
||||
|
||||
dnl aclocal-1.4 backwards compatibility:
|
||||
dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
|
||||
|
||||
## ----------------- ##
|
||||
## LTDL_INIT Options ##
|
||||
## ----------------- ##
|
||||
|
||||
m4_define([_LTDL_MODE], [])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
|
||||
[m4_define([_LTDL_MODE], [nonrecursive])])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [recursive],
|
||||
[m4_define([_LTDL_MODE], [recursive])])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [subproject],
|
||||
[m4_define([_LTDL_MODE], [subproject])])
|
||||
|
||||
m4_define([_LTDL_TYPE], [])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [installable],
|
||||
[m4_define([_LTDL_TYPE], [installable])])
|
||||
LT_OPTION_DEFINE([LTDL_INIT], [convenience],
|
||||
[m4_define([_LTDL_TYPE], [convenience])])
|
123
dist/aclocal/ltsugar.m4
vendored
Normal file
123
dist/aclocal/ltsugar.m4
vendored
Normal file
|
@ -0,0 +1,123 @@
|
|||
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
|
||||
#
|
||||
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
|
||||
# Written by Gary V. Vaughan, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 6 ltsugar.m4
|
||||
|
||||
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||
AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
|
||||
|
||||
|
||||
# lt_join(SEP, ARG1, [ARG2...])
|
||||
# -----------------------------
|
||||
# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
|
||||
# associated separator.
|
||||
# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
|
||||
# versions in m4sugar had bugs.
|
||||
m4_define([lt_join],
|
||||
[m4_if([$#], [1], [],
|
||||
[$#], [2], [[$2]],
|
||||
[m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
|
||||
m4_define([_lt_join],
|
||||
[m4_if([$#$2], [2], [],
|
||||
[m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
|
||||
|
||||
|
||||
# lt_car(LIST)
|
||||
# lt_cdr(LIST)
|
||||
# ------------
|
||||
# Manipulate m4 lists.
|
||||
# These macros are necessary as long as will still need to support
|
||||
# Autoconf-2.59 which quotes differently.
|
||||
m4_define([lt_car], [[$1]])
|
||||
m4_define([lt_cdr],
|
||||
[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
|
||||
[$#], 1, [],
|
||||
[m4_dquote(m4_shift($@))])])
|
||||
m4_define([lt_unquote], $1)
|
||||
|
||||
|
||||
# lt_append(MACRO-NAME, STRING, [SEPARATOR])
|
||||
# ------------------------------------------
|
||||
# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
|
||||
# Note that neither SEPARATOR nor STRING are expanded; they are appended
|
||||
# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
|
||||
# No SEPARATOR is output if MACRO-NAME was previously undefined (different
|
||||
# than defined and empty).
|
||||
#
|
||||
# This macro is needed until we can rely on Autoconf 2.62, since earlier
|
||||
# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
|
||||
m4_define([lt_append],
|
||||
[m4_define([$1],
|
||||
m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
|
||||
|
||||
|
||||
|
||||
# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
|
||||
# ----------------------------------------------------------
|
||||
# Produce a SEP delimited list of all paired combinations of elements of
|
||||
# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
|
||||
# has the form PREFIXmINFIXSUFFIXn.
|
||||
# Needed until we can rely on m4_combine added in Autoconf 2.62.
|
||||
m4_define([lt_combine],
|
||||
[m4_if(m4_eval([$# > 3]), [1],
|
||||
[m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
|
||||
[[m4_foreach([_Lt_prefix], [$2],
|
||||
[m4_foreach([_Lt_suffix],
|
||||
]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
|
||||
[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
|
||||
|
||||
|
||||
# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
|
||||
# -----------------------------------------------------------------------
|
||||
# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
|
||||
# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
|
||||
m4_define([lt_if_append_uniq],
|
||||
[m4_ifdef([$1],
|
||||
[m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
|
||||
[lt_append([$1], [$2], [$3])$4],
|
||||
[$5])],
|
||||
[lt_append([$1], [$2], [$3])$4])])
|
||||
|
||||
|
||||
# lt_dict_add(DICT, KEY, VALUE)
|
||||
# -----------------------------
|
||||
m4_define([lt_dict_add],
|
||||
[m4_define([$1($2)], [$3])])
|
||||
|
||||
|
||||
# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
|
||||
# --------------------------------------------
|
||||
m4_define([lt_dict_add_subkey],
|
||||
[m4_define([$1($2:$3)], [$4])])
|
||||
|
||||
|
||||
# lt_dict_fetch(DICT, KEY, [SUBKEY])
|
||||
# ----------------------------------
|
||||
m4_define([lt_dict_fetch],
|
||||
[m4_ifval([$3],
|
||||
m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
|
||||
m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
|
||||
|
||||
|
||||
# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
|
||||
# -----------------------------------------------------------------
|
||||
m4_define([lt_if_dict_fetch],
|
||||
[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
|
||||
[$5],
|
||||
[$6])])
|
||||
|
||||
|
||||
# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
|
||||
# --------------------------------------------------------------
|
||||
m4_define([lt_dict_filter],
|
||||
[m4_if([$5], [], [],
|
||||
[lt_join(m4_quote(m4_default([$4], [[, ]])),
|
||||
lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
|
||||
[lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
|
||||
])
|
24
dist/aclocal/ltversion.m4
vendored
Normal file
24
dist/aclocal/ltversion.m4
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
# ltversion.m4 -- version numbers -*- Autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
|
||||
# Inc.
|
||||
# Written by Scott James Remnant, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# @configure_input@
|
||||
|
||||
# serial 4245 ltversion.m4
|
||||
# This file is part of GNU Libtool
|
||||
|
||||
m4_define([LT_PACKAGE_VERSION], [2.4.7])
|
||||
m4_define([LT_PACKAGE_REVISION], [2.4.7])
|
||||
|
||||
AC_DEFUN([LTVERSION_VERSION],
|
||||
[macro_version='2.4.7'
|
||||
macro_revision='2.4.7'
|
||||
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
|
||||
_LT_DECL(, macro_revision, 0)
|
||||
])
|
99
dist/aclocal/lt~obsolete.m4
vendored
Normal file
99
dist/aclocal/lt~obsolete.m4
vendored
Normal file
|
@ -0,0 +1,99 @@
|
|||
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
|
||||
#
|
||||
# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free
|
||||
# Software Foundation, Inc.
|
||||
# Written by Scott James Remnant, 2004.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 5 lt~obsolete.m4
|
||||
|
||||
# These exist entirely to fool aclocal when bootstrapping libtool.
|
||||
#
|
||||
# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN),
|
||||
# which have later been changed to m4_define as they aren't part of the
|
||||
# exported API, or moved to Autoconf or Automake where they belong.
|
||||
#
|
||||
# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
|
||||
# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
|
||||
# using a macro with the same name in our local m4/libtool.m4 it'll
|
||||
# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
|
||||
# and doesn't know about Autoconf macros at all.)
|
||||
#
|
||||
# So we provide this file, which has a silly filename so it's always
|
||||
# included after everything else. This provides aclocal with the
|
||||
# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
|
||||
# because those macros already exist, or will be overwritten later.
|
||||
# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
|
||||
#
|
||||
# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
|
||||
# Yes, that means every name once taken will need to remain here until
|
||||
# we give up compatibility with versions before 1.7, at which point
|
||||
# we need to keep only those names which we still refer to.
|
||||
|
||||
# This is to help aclocal find these macros, as it can't see m4_define.
|
||||
AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
|
||||
|
||||
m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
|
||||
m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
|
||||
m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
|
||||
m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
|
||||
m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
|
||||
m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
|
||||
m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
|
||||
m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
|
||||
m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
|
||||
m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
|
||||
m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
|
||||
m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
|
||||
m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
|
||||
m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
|
||||
m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
|
||||
m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
|
||||
m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
|
||||
m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
|
||||
m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
|
||||
m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
|
||||
m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
|
||||
m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
|
||||
m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
|
||||
m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
|
||||
m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
|
||||
m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
|
||||
m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
|
||||
m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
|
||||
m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
|
||||
m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
|
||||
m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
|
||||
m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
|
||||
m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
|
||||
m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
|
||||
m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
|
||||
m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
|
||||
m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
|
||||
m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
|
||||
m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
|
||||
m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
|
||||
m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
|
||||
m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
|
||||
m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
|
||||
m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
|
45
dist/aclocal/options.m4
vendored
Normal file
45
dist/aclocal/options.m4
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
# $Id: options.ac 7 2007-02-03 13:34:17Z gburd $
|
||||
|
||||
# Process user-specified options.
|
||||
AC_DEFUN(AM_OPTIONS_SET, [
|
||||
|
||||
|
||||
AC_MSG_CHECKING(if --disable-statistics option specified)
|
||||
AC_ARG_ENABLE(statistics,
|
||||
AS_HELP_STRING([--disable-statistics],
|
||||
[Do not build statistics support.]),, enableval="yes")
|
||||
db_cv_build_statistics="$enableval"
|
||||
case "$enableval" in
|
||||
no) AC_MSG_RESULT(yes);;
|
||||
yes) AC_MSG_RESULT(no);;
|
||||
esac
|
||||
|
||||
AC_MSG_CHECKING(if --enable-posixmutexes option specified)
|
||||
AC_ARG_ENABLE(posixmutexes,
|
||||
[AS_HELP_STRING([--enable-posixmutexes],
|
||||
[Force use of POSIX standard mutexes.])],
|
||||
[db_cv_posixmutexes="$enable_posixmutexes"], [db_cv_posixmutexes="no"])
|
||||
AC_MSG_RESULT($db_cv_posixmutexes)
|
||||
|
||||
AC_MSG_CHECKING(if --enable-debug option specified)
|
||||
AC_ARG_ENABLE(debug,
|
||||
[AS_HELP_STRING([--enable-debug],
|
||||
[Build a debugging version.])],
|
||||
[db_cv_debug="$enable_debug"], [db_cv_debug="no"])
|
||||
AC_MSG_RESULT($db_cv_debug)
|
||||
|
||||
AC_MSG_CHECKING(if --enable-diagnostic option specified)
|
||||
AC_ARG_ENABLE(diagnostic,
|
||||
[AS_HELP_STRING([--enable-diagnostic],
|
||||
[Build a version with run-time diagnostics.])],
|
||||
[db_cv_diagnostic="$enable_diagnostic"], [db_cv_diagnostic="no"])
|
||||
AC_MSG_RESULT($db_cv_diagnostic)
|
||||
|
||||
AC_MSG_CHECKING(if --enable-test option specified)
|
||||
AC_ARG_ENABLE(test,
|
||||
[AS_HELP_STRING([--enable-test],
|
||||
[Configure to run the test suite.])],
|
||||
[db_cv_test="$enable_test"], [db_cv_test="no"])
|
||||
AC_MSG_RESULT($db_cv_test)
|
||||
|
||||
])
|
113
dist/aclocal/programs.m4
vendored
Normal file
113
dist/aclocal/programs.m4
vendored
Normal file
|
@ -0,0 +1,113 @@
|
|||
# $Id: programs.ac 7 2007-02-03 13:34:17Z gburd $
|
||||
|
||||
# Check for programs used in building/installation.
|
||||
AC_DEFUN(AM_PROGRAMS_SET, [
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_ar, ar, missing_ar)
|
||||
if test "$db_cv_path_ar" = missing_ar; then
|
||||
AC_MSG_ERROR([No ar utility found.])
|
||||
fi
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_chmod, chmod, missing_chmod)
|
||||
if test "$db_cv_path_chmod" = missing_chmod; then
|
||||
AC_MSG_ERROR([No chmod utility found.])
|
||||
fi
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_sed, sed, missing_sed)
|
||||
if test "$db_cv_path_sed" = missing_sed; then
|
||||
AC_MSG_ERROR([No sed utility found.])
|
||||
fi
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_makedepend, makedepend, missing_makedepend)
|
||||
if test "$db_cv_path_makedepend" = missing_makedepend; then
|
||||
AC_MSG_RESULT([no])
|
||||
db_cv_path_makedepend=echo
|
||||
fi
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_splint, splint, missing_splint)
|
||||
if test "$db_cv_path_splint" = missing_splint; then
|
||||
AC_MSG_RESULT([no])
|
||||
db_cv_path_splint=echo
|
||||
fi
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_python, python, missing_python)
|
||||
if test "$db_cv_path_python" = missing_python; then
|
||||
AC_MSG_RESULT([no])
|
||||
db_cv_path_python=echo
|
||||
fi
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_grep, grep, missing_grep)
|
||||
if test "$db_cv_path_grep" = missing_grep; then
|
||||
AC_MSG_ERROR([No grep utility found.])
|
||||
fi
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_awk, awk, missing_awk)
|
||||
if test "$db_cv_path_awk" = missing_awk; then
|
||||
AC_MSG_ERROR([No awk utility found.])
|
||||
fi
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_cp, cp, missing_cp)
|
||||
if test "$db_cv_path_cp" = missing_cp; then
|
||||
AC_MSG_ERROR([No cp utility found.])
|
||||
fi
|
||||
|
||||
if test "$db_cv_rpm" = "yes"; then
|
||||
AC_CHECK_TOOL(path_ldconfig, ldconfig, missing_ldconfig)
|
||||
AC_PATH_PROG(db_cv_path_ldconfig, $path_ldconfig, missing_ldconfig)
|
||||
if test "$db_cv_path_ldconfig" != missing_ldconfig; then
|
||||
RPM_POST_INSTALL="%post -p $db_cv_path_ldconfig"
|
||||
RPM_POST_UNINSTALL="%postun -p $db_cv_path_ldconfig"
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_ln, ln, missing_ln)
|
||||
if test "$db_cv_path_ln" = missing_ln; then
|
||||
AC_MSG_ERROR([No ln utility found.])
|
||||
fi
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_mkdir, mkdir, missing_mkdir)
|
||||
if test "$db_cv_path_mkdir" = missing_mkdir; then
|
||||
AC_MSG_ERROR([No mkdir utility found.])
|
||||
fi
|
||||
|
||||
# We need a complete path for ranlib, because it doesn't exist on some
|
||||
# architectures because the ar utility packages the library itself.
|
||||
AC_CHECK_TOOL(path_ranlib, ranlib, missing_ranlib)
|
||||
AC_PATH_PROG(db_cv_path_ranlib, $path_ranlib, missing_ranlib)
|
||||
|
||||
AC_CHECK_TOOL(db_cv_path_rm, rm, missing_rm)
|
||||
if test "$db_cv_path_rm" = missing_rm; then
|
||||
AC_MSG_ERROR([No rm utility found.])
|
||||
fi
|
||||
|
||||
if test "$db_cv_rpm" = "yes"; then
|
||||
AC_CHECK_TOOL(db_cv_path_rpm, rpm, missing_rpm)
|
||||
if test "$db_cv_path_rpm" = missing_rpm; then
|
||||
AC_MSG_ERROR([No rpm utility found.])
|
||||
fi
|
||||
fi
|
||||
|
||||
# We need a complete path for sh, because some implementations of make
|
||||
# get upset if SHELL is set to just the command name.
|
||||
AC_CHECK_TOOL(path_sh, sh, missing_sh)
|
||||
AC_PATH_PROG(db_cv_path_sh, $path_sh, missing_sh)
|
||||
if test "$db_cv_path_sh" = missing_sh; then
|
||||
AC_MSG_ERROR([No sh utility found.])
|
||||
fi
|
||||
|
||||
# Don't strip the binaries if --enable-debug was specified.
|
||||
if test "$db_cv_debug" = yes; then
|
||||
db_cv_path_strip=debug_build_no_strip
|
||||
else
|
||||
AC_CHECK_TOOL(path_strip, strip, missing_strip)
|
||||
AC_PATH_PROG(db_cv_path_strip, $path_strip, missing_strip)
|
||||
fi
|
||||
|
||||
if test "$db_cv_test" = "yes"; then
|
||||
AC_CHECK_TOOL(db_cv_path_kill, kill, missing_kill)
|
||||
if test "$db_cv_path_kill" = missing_kill; then
|
||||
AC_MSG_ERROR([No kill utility found.])
|
||||
fi
|
||||
fi
|
||||
|
||||
])
|
47
dist/aclocal/readline.m4
vendored
Normal file
47
dist/aclocal/readline.m4
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
# $Id: readline.ac 7 2007-02-03 13:34:17Z gburd $
|
||||
|
||||
# Find a readline compatible library.
|
||||
|
||||
AC_DEFUN([VL_LIB_READLINE], [
|
||||
AC_CACHE_CHECK([for a readline compatible library],
|
||||
vl_cv_lib_readline, [
|
||||
ORIG_LIBS="$LIBS"
|
||||
for readline_lib in readline edit editline; do
|
||||
for termcap_lib in "" termcap curses ncurses; do
|
||||
if test -z "$termcap_lib"; then
|
||||
TRY_LIB="-l$readline_lib"
|
||||
else
|
||||
TRY_LIB="-l$readline_lib -l$termcap_lib"
|
||||
fi
|
||||
LIBS="$ORIG_LIBS $TRY_LIB"
|
||||
AC_TRY_LINK_FUNC(readline, vl_cv_lib_readline="$TRY_LIB")
|
||||
if test -n "$vl_cv_lib_readline"; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test -n "$vl_cv_lib_readline"; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test -z "$vl_cv_lib_readline"; then
|
||||
vl_cv_lib_readline="no"
|
||||
LIBS="$ORIG_LIBS"
|
||||
fi
|
||||
])
|
||||
|
||||
if test "$vl_cv_lib_readline" != "no"; then
|
||||
AC_DEFINE(HAVE_LIBREADLINE, 1,
|
||||
[Define if you have a readline compatible library])
|
||||
AC_CHECK_HEADERS(readline.h readline/readline.h)
|
||||
AC_CACHE_CHECK([whether readline supports history],
|
||||
vl_cv_lib_readline_history, [
|
||||
vl_cv_lib_readline_history="no"
|
||||
AC_TRY_LINK_FUNC(add_history, vl_cv_lib_readline_history="yes")
|
||||
])
|
||||
if test "$vl_cv_lib_readline_history" = "yes"; then
|
||||
AC_DEFINE(HAVE_READLINE_HISTORY, 1,
|
||||
[Define if your readline library has \`add_history'])
|
||||
AC_CHECK_HEADERS(history.h readline/history.h)
|
||||
fi
|
||||
fi
|
||||
])dnl
|
75
dist/aclocal/sosuffix.m4
vendored
Normal file
75
dist/aclocal/sosuffix.m4
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
# $Id$
|
||||
# Determine shared object suffixes.
|
||||
#
|
||||
# Our method is to use the libtool variable $library_names_spec,
|
||||
# set by using LT_INIT. This variable is a snippet of shell
|
||||
# defined in terms of $versuffix, $release, $libname and $module
|
||||
# We want to eval it and grab the suffix used for shared objects.
|
||||
# By setting $module to yes/no, we obtain the suffixes
|
||||
# used to create dlloadable, or java loadable modules.
|
||||
# On many (*nix) systems, these all evaluate to .so, but there
|
||||
# are some notable exceptions.
|
||||
# Before calling this macro, libtool must have been configured.
|
||||
|
||||
# This macro is used internally to discover the suffix for the current
|
||||
# settings of $module. The result is stored in $_SOSUFFIX.
|
||||
AC_DEFUN(_SOSUFFIX_INTERNAL, [
|
||||
versuffix=""
|
||||
release=""
|
||||
libname=libfoo
|
||||
eval _SOSUFFIX=\"$shrext_cmds\"
|
||||
if test "$_SOSUFFIX" = "" ; then
|
||||
_SOSUFFIX=".so"
|
||||
if test "$enable_shared" != "yes"; then
|
||||
if test "$_SOSUFFIX_MESSAGE" = ""; then
|
||||
_SOSUFFIX_MESSAGE=yes
|
||||
AC_MSG_WARN([libtool may not know about this architecture.])
|
||||
AC_MSG_WARN([assuming $_SOSUFFIX suffix for dynamic libraries.])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
# SOSUFFIX_CONFIG will set the variable SOSUFFIX to be the
|
||||
# shared library extension used for general linking, not dlopen.
|
||||
AC_DEFUN(SOSUFFIX_CONFIG, [
|
||||
AC_MSG_CHECKING([SOSUFFIX from libtool])
|
||||
module=no
|
||||
_SOSUFFIX_INTERNAL
|
||||
SOSUFFIX=$_SOSUFFIX
|
||||
AC_MSG_RESULT($SOSUFFIX)
|
||||
AC_SUBST(SOSUFFIX)
|
||||
])
|
||||
|
||||
# MODSUFFIX_CONFIG will set the variable MODSUFFIX to be the
|
||||
# shared library extension used for dlopen'ed modules.
|
||||
# To discover this, we set $module, simulating libtool's -module option.
|
||||
AC_DEFUN(MODSUFFIX_CONFIG, [
|
||||
AC_MSG_CHECKING([MODSUFFIX from libtool])
|
||||
module=yes
|
||||
_SOSUFFIX_INTERNAL
|
||||
MODSUFFIX=$_SOSUFFIX
|
||||
AC_MSG_RESULT($MODSUFFIX)
|
||||
AC_SUBST(MODSUFFIX)
|
||||
])
|
||||
|
||||
# JMODSUFFIX_CONFIG will set the variable JMODSUFFIX to be the
|
||||
# shared library extension used JNI modules opened by Java.
|
||||
# To discover this, we set $jnimodule, simulating libtool's -shrext option.
|
||||
##########################################################################
|
||||
# Robert Boehne: Not much point in this macro any more because apparently
|
||||
# Darwin is the only OS that wants or needs the .jnilib extension.
|
||||
##########################################################################
|
||||
AC_DEFUN(JMODSUFFIX_CONFIG, [
|
||||
AC_MSG_CHECKING([JMODSUFFIX from libtool])
|
||||
module=yes
|
||||
_SOSUFFIX_INTERNAL
|
||||
if test `uname` = "Darwin"; then
|
||||
JMODSUFFIX=".jnilib"
|
||||
else
|
||||
JMODSUFFIX=$_SOSUFFIX
|
||||
fi
|
||||
AC_MSG_RESULT($JMODSUFFIX)
|
||||
AC_SUBST(JMODSUFFIX)
|
||||
])
|
||||
|
128
dist/aclocal/tcl.m4
vendored
Normal file
128
dist/aclocal/tcl.m4
vendored
Normal file
|
@ -0,0 +1,128 @@
|
|||
# $Id: tcl.ac 7 2007-02-03 13:34:17Z gburd $
|
||||
|
||||
# The SC_* macros in this file are from the unix/tcl.m4 files in the Tcl
|
||||
# 8.3.0 distribution, with some minor changes. For this reason, license
|
||||
# terms for the Berkeley DB distribution dist/aclocal/tcl.m4 file are as
|
||||
# follows (copied from the license.terms file in the Tcl 8.3 distribution):
|
||||
#
|
||||
# This software is copyrighted by the Regents of the University of
|
||||
# California, Sun Microsystems, Inc., Scriptics Corporation,
|
||||
# and other parties. The following terms apply to all files associated
|
||||
# with the software unless explicitly disclaimed in individual files.
|
||||
#
|
||||
# The authors hereby grant permission to use, copy, modify, distribute,
|
||||
# and license this software and its documentation for any purpose, provided
|
||||
# that existing copyright notices are retained in all copies and that this
|
||||
# notice is included verbatim in any distributions. No written agreement,
|
||||
# license, or royalty fee is required for any of the authorized uses.
|
||||
# Modifications to this software may be copyrighted by their authors
|
||||
# and need not follow the licensing terms described here, provided that
|
||||
# the new terms are clearly indicated on the first page of each file where
|
||||
# they apply.
|
||||
#
|
||||
# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
|
||||
# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
|
||||
# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
|
||||
# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
|
||||
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
|
||||
# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
|
||||
# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
|
||||
# MODIFICATIONS.
|
||||
#
|
||||
# GOVERNMENT USE: If you are acquiring this software on behalf of the
|
||||
# U.S. government, the Government shall have only "Restricted Rights"
|
||||
# in the software and related documentation as defined in the Federal
|
||||
# Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
|
||||
# are acquiring the software on behalf of the Department of Defense, the
|
||||
# software shall be classified as "Commercial Computer Software" and the
|
||||
# Government shall have only "Restricted Rights" as defined in Clause
|
||||
# 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the
|
||||
# authors grant the U.S. Government and others acting in its behalf
|
||||
# permission to use and distribute the software in accordance with the
|
||||
# terms specified in this license.
|
||||
|
||||
AC_DEFUN(SC_PATH_TCLCONFIG, [
|
||||
AC_CACHE_VAL(ac_cv_c_tclconfig,[
|
||||
|
||||
# First check to see if --with-tclconfig was specified.
|
||||
if test x"${with_tclconfig}" != x; then
|
||||
if test -f "${with_tclconfig}/tclConfig.sh" ; then
|
||||
ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)`
|
||||
else
|
||||
AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
|
||||
fi
|
||||
fi
|
||||
|
||||
# check in a few common install locations
|
||||
if test x"${ac_cv_c_tclconfig}" = x ; then
|
||||
for i in `ls -d /usr/local/lib 2>/dev/null` ; do
|
||||
if test -f "$i/tclConfig.sh" ; then
|
||||
ac_cv_c_tclconfig=`(cd $i; pwd)`
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
])
|
||||
|
||||
if test x"${ac_cv_c_tclconfig}" = x ; then
|
||||
TCL_BIN_DIR="# no Tcl configs found"
|
||||
AC_MSG_ERROR(can't find Tcl configuration definitions)
|
||||
else
|
||||
TCL_BIN_DIR=${ac_cv_c_tclconfig}
|
||||
fi
|
||||
AC_SUBST(TCL_BIN_DIR)
|
||||
])
|
||||
|
||||
AC_DEFUN(SC_LOAD_TCLCONFIG, [
|
||||
AC_MSG_CHECKING([for existence of $TCL_BIN_DIR/tclConfig.sh])
|
||||
|
||||
if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then
|
||||
AC_MSG_RESULT([loading])
|
||||
. $TCL_BIN_DIR/tclConfig.sh
|
||||
else
|
||||
AC_MSG_RESULT([file not found])
|
||||
fi
|
||||
|
||||
# DBSQL requires at least version 8.4.
|
||||
if test ${TCL_MAJOR_VERSION} -lt 8 \
|
||||
-o ${TCL_MAJOR_VERSION} -eq 8 -a ${TCL_MINOR_VERSION} -lt 4; then
|
||||
AC_MSG_ERROR([Berkeley DB requires Tcl version 8.4 or better.])
|
||||
fi
|
||||
|
||||
if test x"$TCL_INCLUDE_SPEC" != x; then
|
||||
TCL_CFLAGS="$TCL_INCLUDE_SPEC"
|
||||
fi
|
||||
|
||||
AC_SUBST(TCL_LD_FLAGS)
|
||||
AC_SUBST(TCL_LIBS)
|
||||
AC_SUBST(TCL_LIB_SPEC)
|
||||
])
|
||||
|
||||
# Optional Tcl API.
|
||||
AC_DEFUN(AM_TCL_LOAD, [
|
||||
if test "$db_cv_tcl" = "yes"; then
|
||||
if test `$LIBTOOL_PROG --config | grep build_libtool_libs | grep no` 2>/dev/null; then
|
||||
AC_MSG_ERROR([Tcl requires shared libraries])
|
||||
fi
|
||||
|
||||
SC_PATH_TCLCONFIG
|
||||
SC_LOAD_TCLCONFIG
|
||||
|
||||
if test x"$TCL_INCLUDE_SPEC" != x && test -f "$TCL_INCLUDE_SPEC/tcl.h"; then
|
||||
TCL_CFLAGS="${TCL_CFLAGS} -I$TCL_INCLUDE_SPEC"
|
||||
fi
|
||||
|
||||
INSTALL_LIBS="${INSTALL_LIBS} \$(libtso_target)"
|
||||
|
||||
TCL_TCLSH="${TCL_PREFIX}/bin/tclsh${TCL_VERSION}"
|
||||
|
||||
AC_SUBST(TCL_SRC_DIR)
|
||||
AC_SUBST(TCL_LIB_FILE)
|
||||
AC_SUBST(TCL_CFLAGS)
|
||||
AC_SUBST(TCL_TCLSH)
|
||||
fi])
|
218
dist/aclocal/types.m4
vendored
Normal file
218
dist/aclocal/types.m4
vendored
Normal file
|
@ -0,0 +1,218 @@
|
|||
# $Id$
|
||||
|
||||
# Check the sizes we know about, and see if any of them match what's needed.
|
||||
#
|
||||
# Prefer ints to anything else, because read, write and others historically
|
||||
# returned an int.
|
||||
AC_DEFUN(AM_SEARCH_USIZES, [
|
||||
case "$3" in
|
||||
"$ac_cv_sizeof_unsigned_int")
|
||||
$1="typedef unsigned int $2;";;
|
||||
"$ac_cv_sizeof_unsigned_char")
|
||||
$1="typedef unsigned char $2;";;
|
||||
"$ac_cv_sizeof_unsigned_short")
|
||||
$1="typedef unsigned short $2;";;
|
||||
"$ac_cv_sizeof_unsigned_long")
|
||||
$1="typedef unsigned long $2;";;
|
||||
"$ac_cv_sizeof_unsigned_long_long")
|
||||
$1="typedef unsigned long long $2;";;
|
||||
*)
|
||||
if test "$4" != "notfatal"; then
|
||||
AC_MSG_ERROR([No unsigned $3-byte integral type])
|
||||
fi;;
|
||||
esac])
|
||||
AC_DEFUN(AM_SEARCH_SSIZES, [
|
||||
case "$3" in
|
||||
"$ac_cv_sizeof_int")
|
||||
$1="typedef int $2;";;
|
||||
"$ac_cv_sizeof_char")
|
||||
$1="typedef char $2;";;
|
||||
"$ac_cv_sizeof_short")
|
||||
$1="typedef short $2;";;
|
||||
"$ac_cv_sizeof_long")
|
||||
$1="typedef long $2;";;
|
||||
"$ac_cv_sizeof_long_long")
|
||||
$1="typedef long long $2;";;
|
||||
*)
|
||||
if test "$4" != "notfatal"; then
|
||||
AC_MSG_ERROR([No signed $3-byte integral type])
|
||||
fi;;
|
||||
esac])
|
||||
|
||||
# Check for the standard system types.
|
||||
AC_DEFUN(AM_TYPES, [
|
||||
|
||||
# db.h includes <sys/types.h> and <stdio.h>, not the other default includes
|
||||
# autoconf usually includes. For that reason, we specify a set of includes
|
||||
# for all type checking tests. [#5060]
|
||||
#
|
||||
# C99 says types should be in <stdint.h>; include <stdint.h> if it exists.
|
||||
#
|
||||
# Some systems have types in <stddef.h>; include <stddef.h> if it exists.
|
||||
#
|
||||
# IBM's OS/390 and z/OS releases have types in <inttypes.h> not also found
|
||||
# in <sys/types.h>; include <inttypes.h> if it exists.
|
||||
db_includes="#include <sys/types.h>"
|
||||
AC_SUBST(inttypes_h_decl)
|
||||
AC_CHECK_HEADER(inttypes.h, [
|
||||
db_includes="$db_includes
|
||||
#include <inttypes.h>"
|
||||
inttypes_h_decl="#include <inttypes.h>"])
|
||||
|
||||
# IRIX has stdint.h that is only available when using c99 (i.e. __c99
|
||||
# is defined). Problem with having it in a public header is that a c++
|
||||
# compiler cannot #include <db.h> if db.h #includes stdint.h, so we
|
||||
# need to check that stdint.h is available for all cases. Also the
|
||||
# IRIX compiler does not exit with a non-zero exit code when it sees
|
||||
# #error, so we actually need to use the header for the compiler to fail.
|
||||
AC_SUBST(stdint_h_decl)
|
||||
AC_MSG_CHECKING(for stdint.h)
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
#include <stdint.h>
|
||||
int main() {
|
||||
uint_least8_t x=0;
|
||||
return x;
|
||||
}]])],[AC_MSG_RESULT(yes)
|
||||
if test "$db_cv_cxx" = "yes"; then
|
||||
AC_MSG_CHECKING([if stdint.h can be used by C++])
|
||||
AC_LANG_PUSH(C++)
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
#include <stdint.h>
|
||||
int main() {
|
||||
uint_least8_t x=0;
|
||||
return x;
|
||||
}]])],[AC_MSG_RESULT(yes)
|
||||
stdint_h_decl="#include <stdint.h>"
|
||||
db_includes="$db_includes
|
||||
#include <stdint.h>"
|
||||
],[AC_MSG_RESULT(no)
|
||||
stdint_h_decl="#ifndef __cplusplus
|
||||
#include <stdint.h>
|
||||
#endif"
|
||||
db_includes="$db_includes
|
||||
#ifndef __cplusplus
|
||||
#include <stdint.h>
|
||||
#endif"
|
||||
])
|
||||
AC_LANG_POP
|
||||
else
|
||||
stdint_h_decl="#include <stdint.h>"
|
||||
db_includes="$db_includes
|
||||
#include <stdint.h>"
|
||||
fi],[AC_MSG_RESULT(no)])
|
||||
|
||||
AC_SUBST(stddef_h_decl)
|
||||
AC_CHECK_HEADER(stddef.h, [
|
||||
db_includes="$db_includes
|
||||
#include <stddef.h>"
|
||||
stddef_h_decl="#include <stddef.h>"])
|
||||
AC_SUBST(unistd_h_decl)
|
||||
AC_CHECK_HEADER(unistd.h, [
|
||||
db_includes="$db_includes
|
||||
#include <unistd.h>"
|
||||
unistd_h_decl="#include <unistd.h>"])
|
||||
db_includes="$db_includes
|
||||
#include <stdio.h>"
|
||||
|
||||
# We need to know the sizes of various objects on this system.
|
||||
AC_CHECK_SIZEOF(char,, $db_includes)
|
||||
AC_CHECK_SIZEOF(unsigned char,, $db_includes)
|
||||
AC_CHECK_SIZEOF(short,, $db_includes)
|
||||
AC_CHECK_SIZEOF(unsigned short,, $db_includes)
|
||||
AC_CHECK_SIZEOF(int,, $db_includes)
|
||||
AC_CHECK_SIZEOF(unsigned int,, $db_includes)
|
||||
AC_CHECK_SIZEOF(long,, $db_includes)
|
||||
AC_CHECK_SIZEOF(unsigned long,, $db_includes)
|
||||
AC_CHECK_SIZEOF(long long,, $db_includes)
|
||||
AC_CHECK_SIZEOF(unsigned long long,, $db_includes)
|
||||
AC_CHECK_SIZEOF(char *,, $db_includes)
|
||||
AC_CHECK_SIZEOF(long double,, $db_includes)
|
||||
|
||||
# We look for u_char, u_short, u_int, u_long -- if we can't find them,
|
||||
# we create our own.
|
||||
AC_SUBST(u_char_decl)
|
||||
AC_CHECK_TYPE(u_char,,
|
||||
[u_char_decl="typedef unsigned char u_char;"], $db_includes)
|
||||
|
||||
AC_SUBST(u_short_decl)
|
||||
AC_CHECK_TYPE(u_short,,
|
||||
[u_short_decl="typedef unsigned short u_short;"], $db_includes)
|
||||
|
||||
AC_SUBST(u_int_decl)
|
||||
AC_CHECK_TYPE(u_int,,
|
||||
[u_int_decl="typedef unsigned int u_int;"], $db_includes)
|
||||
|
||||
AC_SUBST(u_long_decl)
|
||||
AC_CHECK_TYPE(u_long,,
|
||||
[u_long_decl="typedef unsigned long u_long;"], $db_includes)
|
||||
|
||||
# We look for fixed-size variants of u_char, u_short, u_int, u_long as well.
|
||||
AC_SUBST(u_int8_decl)
|
||||
AC_CHECK_TYPE(u_int8_t,,
|
||||
[AM_SEARCH_USIZES(u_int8_decl, u_int8_t, 1)], $db_includes)
|
||||
|
||||
AC_SUBST(u_int16_decl)
|
||||
AC_CHECK_TYPE(u_int16_t,,
|
||||
[AM_SEARCH_USIZES(u_int16_decl, u_int16_t, 2)], $db_includes)
|
||||
|
||||
AC_SUBST(int16_decl)
|
||||
AC_CHECK_TYPE(int16_t,,
|
||||
[AM_SEARCH_SSIZES(int16_decl, int16_t, 2)], $db_includes)
|
||||
|
||||
AC_SUBST(u_int32_decl)
|
||||
AC_CHECK_TYPE(u_int32_t,,
|
||||
[AM_SEARCH_USIZES(u_int32_decl, u_int32_t, 4)], $db_includes)
|
||||
|
||||
AC_SUBST(int32_decl)
|
||||
AC_CHECK_TYPE(int32_t,,
|
||||
[AM_SEARCH_SSIZES(int32_decl, int32_t, 4)], $db_includes)
|
||||
|
||||
AC_SUBST(u_int64_decl)
|
||||
AC_CHECK_TYPE(u_int64_t,,
|
||||
[AM_SEARCH_USIZES(u_int64_decl, u_int64_t, 8, notfatal)], $db_includes)
|
||||
|
||||
AC_SUBST(int64_decl)
|
||||
AC_CHECK_TYPE(int64_t,,
|
||||
[AM_SEARCH_SSIZES(int64_decl, int64_t, 8, notfatal)], $db_includes)
|
||||
|
||||
AC_SUBST(long_double_decl)
|
||||
AC_CHECK_TYPE(long double,
|
||||
[long_double_decl="typedef long double long_double_t;"],
|
||||
[long_double_decl="typedef long double long_double_t;"], $db_includes)
|
||||
|
||||
# No currently autoconf'd systems lack FILE, off_t pid_t, size_t, time_t.
|
||||
#
|
||||
# We require them, we don't try to substitute our own if we can't find them.
|
||||
AC_SUBST(FILE_t_decl)
|
||||
AC_CHECK_TYPE(FILE *,, AC_MSG_ERROR([No FILE type.]), $db_includes)
|
||||
AC_SUBST(off_t_decl)
|
||||
AC_CHECK_TYPE(off_t,, AC_MSG_ERROR([No off_t type.]), $db_includes)
|
||||
AC_SUBST(pid_t_decl)
|
||||
AC_CHECK_TYPE(pid_t,, AC_MSG_ERROR([No pid_t type.]), $db_includes)
|
||||
AC_SUBST(size_t_decl)
|
||||
AC_CHECK_TYPE(size_t,, AC_MSG_ERROR([No size_t type.]), $db_includes)
|
||||
AC_SUBST(time_t_decl)
|
||||
AC_CHECK_TYPE(time_t,, AC_MSG_ERROR([No time_t type.]), $db_includes)
|
||||
|
||||
# Check for ssize_t -- if none exists, find a signed integral type that's
|
||||
# the same size as a size_t.
|
||||
AC_CHECK_SIZEOF(size_t,, $db_includes)
|
||||
AC_SUBST(ssize_t_decl)
|
||||
AC_CHECK_TYPE(ssize_t,,
|
||||
[AM_SEARCH_SSIZES(ssize_t_decl, ssize_t, $ac_cv_sizeof_size_t)],
|
||||
$db_includes)
|
||||
|
||||
# Check for uintmax_t -- if none exists, find the largest unsigned integral
|
||||
# type available.
|
||||
AC_SUBST(uintmax_t_decl)
|
||||
AC_CHECK_TYPE(uintmax_t,, [AC_CHECK_TYPE(unsigned long long,
|
||||
[uintmax_t_decl="typedef unsigned long long uintmax_t;"],
|
||||
[uintmax_t_decl="typedef unsigned long uintmax_t;"], $db_includes)])
|
||||
|
||||
# Check for uintptr_t -- if none exists, find an integral type which is
|
||||
# the same size as a pointer.
|
||||
AC_SUBST(uintptr_t_decl)
|
||||
AC_CHECK_TYPE(uintptr_t,,
|
||||
[AM_SEARCH_USIZES(uintptr_t_decl, uintptr_t, $ac_cv_sizeof_char_p)])
|
||||
|
||||
])
|
1803
dist/config.guess
vendored
Executable file
1803
dist/config.guess
vendored
Executable file
File diff suppressed because it is too large
Load diff
1895
dist/config.sub
vendored
Executable file
1895
dist/config.sub
vendored
Executable file
File diff suppressed because it is too large
Load diff
477
dist/configure.ac
vendored
Normal file
477
dist/configure.ac
vendored
Normal file
|
@ -0,0 +1,477 @@
|
|||
# SkipList
|
||||
#
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
PACKAGE=skiplist
|
||||
AC_INIT([SKIPLIST],[__EDIT_SKIPLIST_VERSION__],[support@skiplist.org],[skiplist-__EDIT_SKIPLIST_VERSION__])
|
||||
AC_LANG(C)
|
||||
AC_CONFIG_SRCDIR([../src/skiplist.c])
|
||||
AC_CONFIG_HEADERS([skiplist_config.h:config.hin])
|
||||
|
||||
# Configure setup.
|
||||
AC_CANONICAL_HOST()
|
||||
AC_ARG_PROGRAM()
|
||||
|
||||
# Don't build in the top-level or dist directories.
|
||||
AC_MSG_CHECKING(if building in the top-level or dist directories)
|
||||
if [ test -d build_unix -o -d aclocal ] ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_MSG_ERROR(
|
||||
[SKIPLIST should not be built in the top-level or dist directories.])
|
||||
fi
|
||||
AC_MSG_RESULT(no)
|
||||
|
||||
# Substitution variables.
|
||||
AC_SUBST(ADDITIONAL_INCS)
|
||||
AC_SUBST(ADDITIONAL_LANG)
|
||||
AC_SUBST(ADDITIONAL_OBJS)
|
||||
AC_SUBST(ADDITIONAL_PROGS)
|
||||
AC_SUBST(BUILD_TARGET)
|
||||
AC_SUBST(CFLAGS)
|
||||
AC_SUBST(CONFIGURATION_ARGS)
|
||||
AC_SUBST(CONFIGURATION_PATH)
|
||||
AC_SUBST(CPPFLAGS)
|
||||
AC_SUBST(CXX)
|
||||
AC_SUBST(CXXFLAGS)
|
||||
AC_SUBST(DEFAULT_LIB)
|
||||
AC_SUBST(ENCODING)
|
||||
AC_SUBST(INSTALLER)
|
||||
AC_SUBST(INSTALL_LIBS)
|
||||
AC_SUBST(INSTALL_TARGET)
|
||||
AC_SUBST(LDFLAGS)
|
||||
AC_SUBST(LIBS)
|
||||
AC_SUBST(LIBSO_LIBS)
|
||||
AC_SUBST(LIBTOOL)
|
||||
AC_SUBST(LIBTSO_LIBS)
|
||||
AC_SUBST(LIBTSO_MODSUFFIX)
|
||||
AC_SUBST(LIBTSO_MODULE)
|
||||
AC_SUBST(LIBXSO_LIBS)
|
||||
AC_SUBST(LOAD_LIBS)
|
||||
AC_SUBST(MAKEFILE_CC)
|
||||
AC_SUBST(MAKEFILE_CCLINK)
|
||||
AC_SUBST(MAKEFILE_CXX)
|
||||
AC_SUBST(MAKEFILE_CXXLINK)
|
||||
AC_SUBST(MAKEFILE_SOLINK)
|
||||
AC_SUBST(MAKEFILE_XSOLINK)
|
||||
AC_SUBST(OSDIR)
|
||||
AC_SUBST(PATH_SEPARATOR)
|
||||
AC_SUBST(POSTLINK)
|
||||
AC_SUBST(REPLACEMENT_OBJS)
|
||||
AC_SUBST(RPC_CLIENT_OBJS)
|
||||
AC_SUBST(RPM_BUILD)
|
||||
AC_SUBST(RPM_POST_INSTALL)
|
||||
AC_SUBST(RPM_POST_UNINSTALL)
|
||||
AC_SUBST(SOFLAGS)
|
||||
AC_SUBST(o)
|
||||
|
||||
# RPM needs the current absolute path.
|
||||
# RPM needs the list of original arguments, but we don't include the RPM
|
||||
# option itself.
|
||||
CONFIGURATION_PATH=${PWD-`pwd`}
|
||||
CONFIGURATION_ARGS=`echo "$*" | sed -e 's/--with-rpm[[^ ]]*//'`
|
||||
|
||||
# Set the default installation location.
|
||||
AC_PREFIX_DEFAULT(/usr/local/SKIPLIST.__EDIT_SKIPLIST_VERSION_MAJOR__.__EDIT_SKIPLIST_VERSION_MINOR__)
|
||||
|
||||
# Configure the version information.
|
||||
AC_SUBST(SKIPLIST_VERSION_MAJOR)
|
||||
SKIPLIST_VERSION_MAJOR="__EDIT_SKIPLIST_VERSION_MAJOR__"
|
||||
AC_SUBST(SKIPLIST_VERSION_MINOR)
|
||||
SKIPLIST_VERSION_MINOR="__EDIT_SKIPLIST_VERSION_MINOR__"
|
||||
AC_SUBST(SKIPLIST_VERSION_PATCH)
|
||||
SKIPLIST_VERSION_PATCH="__EDIT_SKIPLIST_VERSION_PATCH__"
|
||||
AC_SUBST(SKIPLIST_VERSION_STRING)
|
||||
SKIPLIST_VERSION_STRING='"__EDIT_SKIPLIST_VERSION_STRING__"'
|
||||
AC_SUBST(SKIPLIST_VERSION_UNIQUE_NAME)
|
||||
|
||||
# Process all options before using them.
|
||||
AM_OPTIONS_SET
|
||||
|
||||
# Set some #defines based on configuration options.
|
||||
if test "$db_cv_diagnostic" = "yes"; then
|
||||
AC_DEFINE(DIAGNOSTIC)
|
||||
AH_TEMPLATE(DIAGNOSTIC,
|
||||
[Define to 1 if you want a version with run-time diagnostic checking.])
|
||||
fi
|
||||
if test "$db_cv_test" = "yes"; then
|
||||
AC_DEFINE(CONFIG_TEST)
|
||||
AH_TEMPLATE(CONFIG_TEST,
|
||||
[Define to 1 if you want to build a version for running the test suite.])
|
||||
fi
|
||||
|
||||
# Check for programs used in building and installation.
|
||||
AM_PROGRAMS_SET
|
||||
AC_PROG_INSTALL
|
||||
|
||||
# RPM support: change the standard make and install targets
|
||||
if test "$db_cv_rpm" = "yes"; then
|
||||
BUILD_TARGET="rpm_build"
|
||||
|
||||
# Check if we are running RPM version 3 or 4.
|
||||
case "`rpm --version`" in
|
||||
*version\ 4*)
|
||||
RPM_BUILD="rpmbuild"
|
||||
echo "_topdir $CONFIGURATION_PATH" > rpm-macro-defines;;
|
||||
*version\ 3*)
|
||||
RPM_BUILD="rpm"
|
||||
echo "topdir: $CONFIGURATION_PATH" > rpm-macro-defines;;
|
||||
esac
|
||||
INSTALL_TARGET="rpm_install"
|
||||
else
|
||||
BUILD_TARGET="library_build"
|
||||
INSTALL_TARGET="library_install"
|
||||
fi
|
||||
|
||||
# This is where we handle stuff that autoconf can't handle: compiler,
|
||||
# preprocessor and load flags, libraries that the standard tests don't
|
||||
# look for. The default optimization is -O. We would like to set the
|
||||
# default optimization for systems using gcc to -O2, but we can't. By
|
||||
# the time we know we're using gcc, it's too late to set optimization
|
||||
# flags.
|
||||
#
|
||||
# There are additional libraries we need for some compiler/architecture
|
||||
# combinations.
|
||||
#
|
||||
# Some architectures require DB to be compiled with special flags and/or
|
||||
# libraries for threaded applications
|
||||
#
|
||||
# The makefile CC may be different than the CC used in config testing,
|
||||
# because the makefile CC may be set to use $(LIBTOOL).
|
||||
#
|
||||
# XXX
|
||||
# Don't override anything if it's already set from the environment.
|
||||
optimize_def="-O"
|
||||
case "$host_os" in
|
||||
aix4.3.*|aix5*)
|
||||
optimize_def="-O2"
|
||||
CC=${CC-"xlc_r"}
|
||||
CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"
|
||||
LDFLAGS="$LDFLAGS -Wl,-brtl";;
|
||||
bsdi3*) optimize_def="-O2"
|
||||
CC=${CC-"shlicc2"}
|
||||
LIBS="$LIBS -lipc";;
|
||||
bsdi*) optimize_def="-O2";;
|
||||
cygwin*)
|
||||
optimize_def="-O2"
|
||||
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_REENTRANT";;
|
||||
freebsd*)
|
||||
optimize_def="-O2"
|
||||
CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"
|
||||
LDFLAGS="$LDFLAGS -pthread";;
|
||||
gnu*|k*bsd*-gnu|linux*)
|
||||
optimize_def="-O2"
|
||||
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_REENTRANT";;
|
||||
hpux*) CPPFLAGS="$CPPFLAGS -D_REENTRANT";;
|
||||
irix*) optimize_def="-O2"
|
||||
CPPFLAGS="$CPPFLAGS -D_SGI_MP_SOURCE";;
|
||||
mpeix*) CPPFLAGS="$CPPFLAGS -D_POSIX_SOURCE -D_SOCKET_SOURCE"
|
||||
LIBS="$LIBS -lsocket -lsvipc";;
|
||||
osf*) CPPFLAGS="$CPPFLAGS -pthread";;
|
||||
*qnx*) AC_DEFINE(HAVE_QNX)
|
||||
AH_TEMPLATE(HAVE_QNX, [Define to 1 if building on QNX.]);;
|
||||
solaris*)
|
||||
CPPFLAGS="$CPPFLAGS -D_REENTRANT";;
|
||||
esac
|
||||
|
||||
# Set CFLAGS/CXXFLAGS. We MUST set the flags before we call autoconf
|
||||
# compiler configuration macros, because if we don't, they set CFLAGS
|
||||
# to no optimization and -g, which isn't what we want.
|
||||
if test "$db_cv_debug" = "no"; then
|
||||
CFLAGS=${CFLAGS-$optimize_def}
|
||||
fi
|
||||
CXXFLAGS=${CXXFLAGS-"$CFLAGS"}
|
||||
|
||||
# If the user wants a TCL library interface setup for testing, add
|
||||
# -DCONFIG_TEST to the CFLAGS value.
|
||||
if test "$db_cv_test" = "yes"; then
|
||||
AC_DEFINE(CONFIG_TEST)
|
||||
AH_TEMPLATE(CONFIG_TEST,
|
||||
[Define to 1 if you want a TCL API with test support.])
|
||||
|
||||
CFLAGS="$CFLAGS -DCONFIG_TEST"
|
||||
CXXFLAGS="$CXXFLAGS -DCONFIG_TEST"
|
||||
db_cv_build_tcl_test_objs=TCL_TEST_OBJS
|
||||
else
|
||||
db_cv_build_tcl_test_objs=
|
||||
fi
|
||||
AC_SUBST(db_cv_build_tcl_test_objs)
|
||||
|
||||
|
||||
# If the user wants a debugging environment, add -g to the CFLAGS value.
|
||||
#
|
||||
# XXX
|
||||
# Some compilers can't mix optimizing and debug flags. The only way to
|
||||
# handle this is to specify CFLAGS in the environment before configuring.
|
||||
if test "$db_cv_debug" = "yes"; then
|
||||
AC_DEFINE(DEBUG)
|
||||
AH_TEMPLATE(DEBUG, [Define to 1 if you want a debugging version.])
|
||||
|
||||
CFLAGS="$CFLAGS -g"
|
||||
CXXFLAGS="$CXXFLAGS -g"
|
||||
db_cv_build_type=debug
|
||||
else
|
||||
db_cv_build_type=release
|
||||
fi
|
||||
AC_SUBST(db_cv_build_type)
|
||||
|
||||
# The default compiler is cc (NOT gcc), the default CFLAGS is as specified
|
||||
# above, NOT what is set by AC_PROG_CC, as it won't set optimization flags
|
||||
# for any compiler other than gcc.
|
||||
AC_PROG_CC(cc gcc)
|
||||
|
||||
# Checks for compiler characteristics.
|
||||
AC_SUBST(DB_PROTO1)
|
||||
AC_SUBST(DB_PROTO2)
|
||||
|
||||
# Clear __P, some other systems use it too.
|
||||
DB_PROTO1="#undef __P"
|
||||
if test "$ac_cv_prog_cc_c89" = "no"; then
|
||||
DB_PROTO2="#define __P(protos) ()"
|
||||
else
|
||||
DB_PROTO2="#define __P(protos) protos"
|
||||
fi
|
||||
|
||||
# Check for "const" and "inline" keywords.
|
||||
AC_C_CONST
|
||||
AC_SUBST(DB_CONST)
|
||||
if test "$ac_cv_c_const" != "yes"; then
|
||||
DB_CONST="#define const"
|
||||
fi
|
||||
AC_C_INLINE
|
||||
|
||||
# Because of shared library building, the ${CC} used for config tests
|
||||
# may be different than the ${CC} we want to put in the Makefile.
|
||||
# The latter is known as ${MAKEFILE_CC} in this script.
|
||||
MAKEFILE_CC="${CC}"
|
||||
MAKEFILE_CCLINK="${CC}"
|
||||
MAKEFILE_CXX="nocxx"
|
||||
MAKEFILE_CXXLINK="nocxx"
|
||||
|
||||
# See if we need the C++ compiler at all. If so, we'd like to find one that
|
||||
# interoperates with the C compiler we chose. Since we prefered cc over gcc,
|
||||
# we'll also prefer the vendor's compiler over g++/gcc. If we're wrong, the
|
||||
# user can set CC and CXX in their environment before running configure.
|
||||
#
|
||||
# AC_PROG_CXX sets CXX, but it uses $CXX and $CCC (in that order) as its
|
||||
# first choices.
|
||||
if test "$db_cv_cxx" = "yes"; then
|
||||
if test "$GCC" != "yes"; then
|
||||
case "$host_os" in
|
||||
aix*) AC_CHECK_TOOL(CCC, xlC_r)
|
||||
LIBXSO_LIBS="-lC_r $LIBXSO_LIBS"
|
||||
LIBS="-lC_r $LIBS";;
|
||||
hpux*) AC_CHECK_TOOL(CCC, aCC);;
|
||||
irix*) AC_CHECK_TOOL(CCC, CC);;
|
||||
osf*) AC_CHECK_TOOL(CCC, cxx);;
|
||||
solaris*) AC_CHECK_TOOL(CCC, CC);;
|
||||
esac
|
||||
fi
|
||||
AC_PROG_CXX
|
||||
###### WORKAROUND: SEE SR #7938
|
||||
AC_PROG_CXXCPP
|
||||
###############################
|
||||
AC_CXX_STDHEADERS
|
||||
MAKEFILE_CXX="${CXX}"
|
||||
MAKEFILE_CXXLINK="${CXX}"
|
||||
fi
|
||||
|
||||
# Do some gcc specific configuration.
|
||||
AC_GCC_CONFIG1
|
||||
|
||||
# We need the -Kthread/-pthread flag when compiling on SCO/Caldera's UnixWare
|
||||
# and OpenUNIX releases. We can't make the test until we know which compiler
|
||||
# we're using.
|
||||
case "$host_os" in
|
||||
sysv5UnixWare*|sysv5OpenUNIX8*)
|
||||
if test "$GCC" == "yes"; then
|
||||
CPPFLAGS="$CPPFLAGS -pthread"
|
||||
LDFLAGS="$LDFLAGS -pthread"
|
||||
else
|
||||
CPPFLAGS="$CPPFLAGS -Kthread"
|
||||
LDFLAGS="$LDFLAGS -Kthread"
|
||||
fi;;
|
||||
esac
|
||||
|
||||
# Export our compiler preferences for the libtool configuration.
|
||||
export CC CCC
|
||||
CCC=CXX
|
||||
|
||||
# Libtool configuration.
|
||||
LT_INIT
|
||||
AC_SUBST([LIBTOOL_DEPS])
|
||||
|
||||
SOFLAGS="-rpath \$(libdir)"
|
||||
LIBTOOL_PROG="${SHELL} ./libtool"
|
||||
|
||||
# Set SOSUFFIX and friends
|
||||
SOSUFFIX_CONFIG
|
||||
MODSUFFIX_CONFIG
|
||||
|
||||
INSTALLER="\$(LIBTOOL) --mode=install cp -p"
|
||||
|
||||
MAKEFILE_CC="\$(LIBTOOL) --mode=compile ${MAKEFILE_CC}"
|
||||
MAKEFILE_SOLINK="\$(LIBTOOL) --mode=link ${MAKEFILE_CCLINK} -avoid-version"
|
||||
MAKEFILE_CCLINK="\$(LIBTOOL) --mode=link ${MAKEFILE_CCLINK}"
|
||||
MAKEFILE_CXX="\$(LIBTOOL) --mode=compile ${MAKEFILE_CXX}"
|
||||
MAKEFILE_XSOLINK="\$(LIBTOOL) --mode=link ${MAKEFILE_CXXLINK} -avoid-version"
|
||||
MAKEFILE_CXXLINK="\$(LIBTOOL) --mode=link ${MAKEFILE_CXXLINK}"
|
||||
|
||||
LIBTOOL="\$(SHELL) ./libtool"
|
||||
|
||||
case "$host_os" in
|
||||
cygwin*)
|
||||
MAKEFILE_SOLINK="$MAKEFILE_SOLINK -no-undefined"
|
||||
MAKEFILE_XSOLINK="$MAKEFILE_XSOLINK -no-undefined";;
|
||||
esac
|
||||
|
||||
# Configure for shared libraries, static libraries, or both. If both are
|
||||
# configured, build the utilities and example programs with shared versions.
|
||||
#
|
||||
# $o is set to ".o" or ".lo", and is the file suffix used in the Makefile
|
||||
# instead of .o
|
||||
if test `$LIBTOOL_PROG --config |
|
||||
grep build_libtool_libs | grep no` 2>/dev/null; then
|
||||
enable_shared="no"
|
||||
else
|
||||
enable_shared="yes"
|
||||
fi
|
||||
if test `$LIBTOOL_PROG --config |
|
||||
grep build_old_libs | grep no` 2>/dev/null; then
|
||||
enable_static="no"
|
||||
else
|
||||
enable_static="yes"
|
||||
fi
|
||||
|
||||
# C
|
||||
if test "$enable_shared" = "no"; then
|
||||
DEFAULT_LIB="\$(libskiplist_version)"
|
||||
POSTLINK=": "
|
||||
o=".o"
|
||||
else
|
||||
DEFAULT_LIB="\$(libso_target)"
|
||||
POSTLINK="\$(LIBTOOL) --mode=execute true"
|
||||
o=".lo"
|
||||
fi
|
||||
INSTALL_LIBS="$DEFAULT_LIB"
|
||||
if test "$enable_static" = "yes"; then
|
||||
INSTALL_LIBS="$INSTALL_LIBS \$(libdb)"
|
||||
fi
|
||||
|
||||
# Apple's Mac OS/X had to rename shared libraries, so much for standards.
|
||||
case "$host_os" in
|
||||
darwin*)
|
||||
LIBTSO_MODULE=""
|
||||
LIBTSO_MODSUFFIX=".dylib"
|
||||
;;
|
||||
*)
|
||||
LIBTSO_MODULE="-module"
|
||||
LIBTSO_MODSUFFIX=@MODSUFFIX@
|
||||
;;
|
||||
esac
|
||||
|
||||
AM_TCL_LOAD
|
||||
|
||||
# You can disable pieces of functionality to save space.
|
||||
|
||||
# The stat code.
|
||||
if test "$db_cv_build_statistics" = "yes"; then
|
||||
AC_DEFINE(HAVE_STATISTICS)
|
||||
AH_TEMPLATE(HAVE_STATISTICS,
|
||||
[Define to 1 if building statistics support.])
|
||||
fi
|
||||
|
||||
# Checks for include files, structures, C types.
|
||||
AC_HEADER_STAT
|
||||
AC_CHECK_HEADERS_ONCE([sys/time.h])
|
||||
# End of obsolete code.
|
||||
|
||||
AC_HEADER_DIRENT
|
||||
AC_CHECK_HEADERS(sys/select.h sys/time.h sys/fcntl.h)
|
||||
AC_CHECK_MEMBERS([struct stat.st_blksize])
|
||||
AM_TYPES
|
||||
|
||||
AC_CACHE_CHECK([for ANSI C exit success/failure values], db_cv_exit_defines, [
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE(
|
||||
[[#include <stdlib.h>]],
|
||||
[[return (EXIT_SUCCESS);]])],
|
||||
[db_cv_exit_defines=yes],[db_cv_exit_defines=no])])
|
||||
if test "$db_cv_exit_defines" = "yes"; then
|
||||
AC_DEFINE(HAVE_EXIT_SUCCESS)
|
||||
AH_TEMPLATE(HAVE_EXIT_SUCCESS,
|
||||
[Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines.])
|
||||
fi
|
||||
|
||||
# Test for various functions/libraries that the test and example programs use:
|
||||
# sched_yield function
|
||||
# pthreads, socket and math libraries
|
||||
AC_CHECK_FUNC(sched_yield,,
|
||||
AC_SEARCH_LIBS(sched_yield, rt, LOAD_LIBS="$LOAD_LIBS -lrt"))
|
||||
|
||||
# XXX
|
||||
# We can't check for pthreads in the same way we did the test for sched_yield
|
||||
# because the Solaris C library includes pthread interfaces which are not
|
||||
# thread-safe. For that reason we always add -lpthread if we find a pthread
|
||||
# library. Also we can't depend on any specific call existing (pthread_create,
|
||||
# for example), as it may be #defined in an include file -- OSF/1 (Tru64) has
|
||||
# this problem.
|
||||
AC_CHECK_LIB([pthread],[main],[LOAD_LIBS="$LOAD_LIBS -lpthread"],[],[])ac_cv_lib_pthread=ac_cv_lib_pthread_main
|
||||
|
||||
|
||||
# We use sqrt() so we need the math library -lm
|
||||
AC_CHECK_LIB([m],[main],[LIBS="$LIBS -lm"],[],[])ac_cv_lib_m=ac_cv_lib_m_main
|
||||
|
||||
|
||||
# Checks for system functions for which we have replacements.
|
||||
AC_REPLACE_FUNCS(getopt memcmp memcpy memmove strdup strndup strerror)
|
||||
AC_REPLACE_FUNCS(snprintf localtime_r strcasecmp strncasecmp)
|
||||
AC_REPLACE_FUNCS(srand48_r lrand48_r)
|
||||
|
||||
# Check for system functions we use.
|
||||
AC_CHECK_FUNCS(usleep)
|
||||
|
||||
# A/UX has a broken getopt(3).
|
||||
case "$host_os" in
|
||||
aux*) AC_LIBOBJ([getopt]);;
|
||||
esac
|
||||
|
||||
# Apple's Mac OS/X complains about long doubles, make it stop.
|
||||
case "$host_os" in
|
||||
darwin*)
|
||||
CFLAGS="$CFLAGS -Wno-long-double -no-cpp-precomp"
|
||||
;;
|
||||
esac
|
||||
|
||||
# We need to add the additional object files into the Makefile with the correct
|
||||
# suffix. We can't use $LTLIBOBJS itself, because that variable has $U encoded
|
||||
# in it for automake, and that's not what we want.
|
||||
REPLACEMENT_OBJS=`echo "$LIB@&t@OBJS" |
|
||||
sed "s,\.[[^.]]* ,$o ,g;s,\.[[^.]]*$,$o,"`
|
||||
|
||||
# This is necessary so that .o files in LIBOBJS are also built via
|
||||
# the ANSI2KNR-filtering rules.
|
||||
LIB@&t@OBJS=`echo "$LIB@&t@OBJS" |
|
||||
sed 's,\.[[^.]]* ,$U&,g;s,\.[[^.]]*$,$U&,'`
|
||||
LTLIBOBJS=`echo "$LIB@&t@OBJS" |
|
||||
sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`
|
||||
AC_SUBST(LTLIBOBJS)
|
||||
|
||||
# Initial output file list.
|
||||
CREATE_LIST="Makefile"
|
||||
|
||||
# MinGW needs win_db.h.
|
||||
if test "$db_cv_mingw" = "yes"; then
|
||||
CREATE_LIST="$CREATE_LIST
|
||||
win_db.h:$srcdir/win_skiplist.in"
|
||||
fi
|
||||
|
||||
# Create the skiplist.h file from a source file and a list of global function
|
||||
# prototypes.
|
||||
CREATE_LIST="$CREATE_LIST
|
||||
skiplist.h:$srcdir/../src/skiplist.in"
|
||||
|
||||
if test "$db_cv_rpm" = "yes"; then
|
||||
CREATE_LIST="$CREATE_LIST db.spec:../dist/skiplist.spec.in"
|
||||
fi
|
||||
|
||||
AC_CONFIG_FILES($CREATE_LIST)
|
||||
AC_OUTPUT
|
541
dist/install-sh
vendored
Executable file
541
dist/install-sh
vendored
Executable file
|
@ -0,0 +1,541 @@
|
|||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2020-11-14.01; # UTC
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# 'make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch.
|
||||
|
||||
tab=' '
|
||||
nl='
|
||||
'
|
||||
IFS=" $tab$nl"
|
||||
|
||||
# Set DOITPROG to "echo" to test this script.
|
||||
|
||||
doit=${DOITPROG-}
|
||||
doit_exec=${doit:-exec}
|
||||
|
||||
# Put in absolute file names if you don't have them in your path;
|
||||
# or use environment vars.
|
||||
|
||||
chgrpprog=${CHGRPPROG-chgrp}
|
||||
chmodprog=${CHMODPROG-chmod}
|
||||
chownprog=${CHOWNPROG-chown}
|
||||
cmpprog=${CMPPROG-cmp}
|
||||
cpprog=${CPPROG-cp}
|
||||
mkdirprog=${MKDIRPROG-mkdir}
|
||||
mvprog=${MVPROG-mv}
|
||||
rmprog=${RMPROG-rm}
|
||||
stripprog=${STRIPPROG-strip}
|
||||
|
||||
posix_mkdir=
|
||||
|
||||
# Desired mode of installed file.
|
||||
mode=0755
|
||||
|
||||
# Create dirs (including intermediate dirs) using mode 755.
|
||||
# This is like GNU 'install' as of coreutils 8.32 (2020).
|
||||
mkdir_umask=22
|
||||
|
||||
backupsuffix=
|
||||
chgrpcmd=
|
||||
chmodcmd=$chmodprog
|
||||
chowncmd=
|
||||
mvcmd=$mvprog
|
||||
rmcmd="$rmprog -f"
|
||||
stripcmd=
|
||||
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dst_arg=
|
||||
|
||||
copy_on_change=false
|
||||
is_target_a_directory=possibly
|
||||
|
||||
usage="\
|
||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
-c (ignored)
|
||||
-C install only if different (preserve data modification time)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-p pass -p to $cpprog.
|
||||
-s $stripprog installed files.
|
||||
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||
RMPROG STRIPPROG
|
||||
|
||||
By default, rm is invoked with -f; when overridden with RMPROG,
|
||||
it's up to you to specify -f if you want it.
|
||||
|
||||
If -S is not specified, no backups are attempted.
|
||||
|
||||
Email bug reports to bug-automake@gnu.org.
|
||||
Automake home page: https://www.gnu.org/software/automake/
|
||||
"
|
||||
|
||||
while test $# -ne 0; do
|
||||
case $1 in
|
||||
-c) ;;
|
||||
|
||||
-C) copy_on_change=true;;
|
||||
|
||||
-d) dir_arg=true;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) mode=$2
|
||||
case $mode in
|
||||
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
|
||||
echo "$0: invalid mode: $mode" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift;;
|
||||
|
||||
-p) cpprog="$cpprog -p";;
|
||||
|
||||
-s) stripcmd=$stripprog;;
|
||||
|
||||
-S) backupsuffix="$2"
|
||||
shift;;
|
||||
|
||||
-t)
|
||||
is_target_a_directory=always
|
||||
dst_arg=$2
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-T) is_target_a_directory=never;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
--) shift
|
||||
break;;
|
||||
|
||||
-*) echo "$0: invalid option: $1" >&2
|
||||
exit 1;;
|
||||
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# We allow the use of options -d and -T together, by making -d
|
||||
# take the precedence; this is for compatibility with GNU install.
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
if test -n "$dst_arg"; then
|
||||
echo "$0: target directory not allowed when installing a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||
# When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dst_arg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dst_arg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dst_arg=$arg
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call 'install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
if test $# -gt 1 || test "$is_target_a_directory" = always; then
|
||||
if test ! -d "$dst_arg"; then
|
||||
echo "$0: $dst_arg: Is not a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
do_exit='(exit $ret); exit $ret'
|
||||
trap "ret=129; $do_exit" 1
|
||||
trap "ret=130; $do_exit" 2
|
||||
trap "ret=141; $do_exit" 13
|
||||
trap "ret=143; $do_exit" 15
|
||||
|
||||
# Set umask so as not to create temps with too-generous modes.
|
||||
# However, 'strip' requires both read and write access to temps.
|
||||
case $mode in
|
||||
# Optimize common cases.
|
||||
*644) cp_umask=133;;
|
||||
*755) cp_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw='% 200'
|
||||
fi
|
||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||
*)
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw=,u+rw
|
||||
fi
|
||||
cp_umask=$mode$u_plus_rw;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $src in
|
||||
-* | [=\(\)!]) src=./$src;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
dstdir=$dst
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
# Don't chown directories that already exist.
|
||||
if test $dstdir_status = 0; then
|
||||
chowncmd=""
|
||||
fi
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dst_arg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
dst=$dst_arg
|
||||
|
||||
# If destination is a directory, append the input filename.
|
||||
if test -d "$dst"; then
|
||||
if test "$is_target_a_directory" = never; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dstdir=$dst
|
||||
dstbase=`basename "$src"`
|
||||
case $dst in
|
||||
*/) dst=$dst$dstbase;;
|
||||
*) dst=$dst/$dstbase;;
|
||||
esac
|
||||
dstdir_status=0
|
||||
else
|
||||
dstdir=`dirname "$dst"`
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
case $dstdir in
|
||||
*/) dstdirslash=$dstdir;;
|
||||
*) dstdirslash=$dstdir/;;
|
||||
esac
|
||||
|
||||
obsolete_mkdir_used=false
|
||||
|
||||
if test $dstdir_status != 0; then
|
||||
case $posix_mkdir in
|
||||
'')
|
||||
# With -d, create the new directory with the user-specified mode.
|
||||
# Otherwise, rely on $mkdir_umask.
|
||||
if test -n "$dir_arg"; then
|
||||
mkdir_mode=-m$mode
|
||||
else
|
||||
mkdir_mode=
|
||||
fi
|
||||
|
||||
posix_mkdir=false
|
||||
# The $RANDOM variable is not portable (e.g., dash). Use it
|
||||
# here however when possible just to lower collision chance.
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
|
||||
trap '
|
||||
ret=$?
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
|
||||
exit $ret
|
||||
' 0
|
||||
|
||||
# Because "mkdir -p" follows existing symlinks and we likely work
|
||||
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
||||
# directory is successfully created first before we actually test
|
||||
# 'mkdir -p'.
|
||||
if (umask $mkdir_umask &&
|
||||
$mkdirprog $mkdir_mode "$tmpdir" &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
test_tmpdir="$tmpdir/a"
|
||||
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac
|
||||
|
||||
if
|
||||
$posix_mkdir && (
|
||||
umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||
)
|
||||
then :
|
||||
else
|
||||
|
||||
# mkdir does not conform to POSIX,
|
||||
# or it failed possibly due to a race condition. Create the
|
||||
# directory the slow way, step by step, checking for races as we go.
|
||||
|
||||
case $dstdir in
|
||||
/*) prefix='/';;
|
||||
[-=\(\)!]*) prefix='./';;
|
||||
*) prefix='';;
|
||||
esac
|
||||
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
set -f
|
||||
set fnord $dstdir
|
||||
shift
|
||||
set +f
|
||||
IFS=$oIFS
|
||||
|
||||
prefixes=
|
||||
|
||||
for d
|
||||
do
|
||||
test X"$d" = X && continue
|
||||
|
||||
prefix=$prefix$d
|
||||
if test -d "$prefix"; then
|
||||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
else
|
||||
case $prefix in
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||
*) qprefix=$prefix;;
|
||||
esac
|
||||
prefixes="$prefixes '$qprefix'"
|
||||
fi
|
||||
fi
|
||||
prefix=$prefix/
|
||||
done
|
||||
|
||||
if test -n "$prefixes"; then
|
||||
# Don't fail if two instances are running concurrently.
|
||||
(umask $mkdir_umask &&
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||
test -d "$dstdir" || exit 1
|
||||
obsolete_mkdir_used=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||
else
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=${dstdirslash}_inst.$$_
|
||||
rmtmp=${dstdirslash}_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
(umask $cp_umask &&
|
||||
{ test -z "$stripcmd" || {
|
||||
# Create $dsttmp read-write so that cp doesn't create it read-only,
|
||||
# which would cause strip to fail.
|
||||
if test -z "$doit"; then
|
||||
: >"$dsttmp" # No need to fork-exec 'touch'.
|
||||
else
|
||||
$doit touch "$dsttmp"
|
||||
fi
|
||||
}
|
||||
} &&
|
||||
$doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||
|
||||
# If -C, don't bother to copy if it wouldn't change the file.
|
||||
if $copy_on_change &&
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||
set -f &&
|
||||
set X $old && old=:$2:$4:$5:$6 &&
|
||||
set X $new && new=:$2:$4:$5:$6 &&
|
||||
set +f &&
|
||||
test "$old" = "$new" &&
|
||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||
then
|
||||
rm -f "$dsttmp"
|
||||
else
|
||||
# If $backupsuffix is set, and the file being installed
|
||||
# already exists, attempt a backup. Don't worry if it fails,
|
||||
# e.g., if mv doesn't support -f.
|
||||
if test -n "$backupsuffix" && test -f "$dst"; then
|
||||
$doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
|
||||
fi
|
||||
|
||||
# Rename the file to the real destination.
|
||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
{
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
test ! -f "$dst" ||
|
||||
$doit $rmcmd "$dst" 2>/dev/null ||
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||
{ $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dst"
|
||||
}
|
||||
fi || exit 1
|
||||
|
||||
trap '' 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
11436
dist/ltmain.sh
vendored
Normal file
11436
dist/ltmain.sh
vendored
Normal file
File diff suppressed because it is too large
Load diff
27
dist/reconfig
vendored
Executable file
27
dist/reconfig
vendored
Executable file
|
@ -0,0 +1,27 @@
|
|||
#!/bin/sh -
|
||||
#
|
||||
|
||||
[ -d build_unix ] && {
|
||||
echo 'You cannot build in the top-level directory.'
|
||||
exit 1
|
||||
}
|
||||
[ -d aclocal ] && {
|
||||
echo 'You cannot build in the dist directory.'
|
||||
exit 1
|
||||
}
|
||||
args=""
|
||||
#args="--disable-shared $args"
|
||||
#args="--disable-static $args"
|
||||
args="--enable-debug $args"
|
||||
args="--enable-diagnostic $args"
|
||||
args="--enable-test $args"
|
||||
|
||||
# On NixOS enable:
|
||||
CFLAGS="${NIX_CFLAGS_COMPILE} -O0 -g -DDEBUG"
|
||||
LDLAGS="${NIX_LDFLAGS}"
|
||||
echo "env $cppflags $ldflags $libs ../dist/configure -C $args"
|
||||
env $cppflags $ldflags $libs sh ../dist/configure -C $args
|
||||
|
||||
rm -f tags
|
||||
ln -s ../dist/tags tags
|
||||
mkdir -p .libs && true
|
4
dist/s_all
vendored
Executable file
4
dist/s_all
vendored
Executable file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh -
|
||||
|
||||
sh s_perm
|
||||
sh s_config
|
32
dist/s_config
vendored
Executable file
32
dist/s_config
vendored
Executable file
|
@ -0,0 +1,32 @@
|
|||
#!/bin/sh -x
|
||||
# Build the autoconfiguration files.
|
||||
|
||||
trap 'rm -f aclocal.m4 ; exit 0' 0 1 2 3 13 15
|
||||
|
||||
. ./RELEASE
|
||||
|
||||
echo "autoconf: building aclocal.m4..."
|
||||
cat aclocal/*.m4 > aclocal.m4
|
||||
|
||||
echo "autoconf: running autoheader to build config.hin..."
|
||||
rm -f config.hin
|
||||
autoheader --warnings=all
|
||||
chmod 444 config.hin
|
||||
|
||||
echo "autoconf: running autoconf to build configure"
|
||||
rm -f configure
|
||||
autoconf
|
||||
|
||||
# Edit version information we couldn't pre-compute.
|
||||
(echo "1,\$s/__EDIT_SKIPLIST_VERSION_MAJOR__/$SKIPLIST_VERSION_MAJOR/g" &&
|
||||
echo "1,\$s/__EDIT_SKIPLIST_VERSION_MINOR__/$SKIPLIST_VERSION_MINOR/g" &&
|
||||
echo "1,\$s/__EDIT_SKIPLIST_VERSION_PATCH__/$SKIPLIST_VERSION_PATCH/g" &&
|
||||
echo "1,\$s/__EDIT_SKIPLIST_VERSION_STRING__/$SKIPLIST_VERSION_STRING/g" &&
|
||||
echo "1,\$s/__EDIT_SKIPLIST_VERSION__/$SKIPLIST_VERSION/g" &&
|
||||
echo "w" &&
|
||||
echo "q") | ed -s configure
|
||||
|
||||
rm -rf autom4te.cache
|
||||
chmod 555 configure
|
||||
|
||||
chmod 555 config.guess config.sub install-sh
|
23
dist/s_perm
vendored
Executable file
23
dist/s_perm
vendored
Executable file
|
@ -0,0 +1,23 @@
|
|||
#!/bin/sh -
|
||||
|
||||
d=..
|
||||
echo 'Updating skiplist source tree permissions...'
|
||||
|
||||
run()
|
||||
{
|
||||
#echo " $1 ($2)"
|
||||
if [ -f "$d/$1" ]; then
|
||||
chmod "$2" "$d/$1"
|
||||
else
|
||||
echo "$d/$1: no such file or directory"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
run dist/config.guess 555
|
||||
run dist/config.sub 555
|
||||
run dist/configure 555
|
||||
run dist/install-sh 555
|
||||
run dist/s_all 555
|
||||
run dist/s_config 555
|
||||
run dist/s_perm 555
|
61
flake.lock
Normal file
61
flake.lock
Normal file
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1709126324,
|
||||
"narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "d465f4819400de7c8d874d50b982301f28a84605",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1709780214,
|
||||
"narHash": "sha256-p4iDKdveHMhfGAlpxmkCtfQO3WRzmlD11aIcThwPqhk=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "f945939fd679284d736112d3d5410eb867f3b31c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
49
flake.nix
Normal file
49
flake.nix
Normal file
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
description = "A Concurrent Skip List library for key/value pairs.";
|
||||
|
||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||
|
||||
outputs =
|
||||
{ self
|
||||
, nixpkgs
|
||||
, flake-utils
|
||||
, ...
|
||||
}:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
# pkgs = nixpkgs.legacyPackages.${system};
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
config = { allowUnfree = true; };
|
||||
};
|
||||
in
|
||||
{
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = with pkgs; [
|
||||
autoconf
|
||||
bashInteractive
|
||||
ed
|
||||
gdb
|
||||
clang-tools
|
||||
meson
|
||||
];
|
||||
};
|
||||
buildInputs = with pkgs; [
|
||||
glibc
|
||||
];
|
||||
nativeBuildInputs = with pkgs.buildPackages; [
|
||||
act
|
||||
binutils
|
||||
coreutils
|
||||
gcc
|
||||
gettext
|
||||
libtool
|
||||
m4
|
||||
make
|
||||
perl
|
||||
pkg-config
|
||||
ripgrep
|
||||
];
|
||||
});
|
||||
}
|
250
src/example.c
250
src/example.c
|
@ -1,150 +1,156 @@
|
|||
#include "skiplist.h"
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "skiplist.h"
|
||||
|
||||
// Define a node that contains key and value pair.
|
||||
struct my_node {
|
||||
// Metadata for skiplist node.
|
||||
sl_node snode;
|
||||
// My data here: {int, int} pair.
|
||||
int key;
|
||||
int value;
|
||||
// Metadata for skiplist node.
|
||||
sl_node snode;
|
||||
// My data here: {int, int} pair.
|
||||
int key;
|
||||
int value;
|
||||
};
|
||||
|
||||
// Define a comparison function for `my_node`.
|
||||
static int my_cmp(sl_node *a, sl_node *b, void *aux) {
|
||||
// Get `my_node` from skiplist node `a` and `b`.
|
||||
struct my_node *aa, *bb;
|
||||
aa = _get_entry(a, struct my_node, snode);
|
||||
bb = _get_entry(b, struct my_node, snode);
|
||||
static int
|
||||
my_cmp(sl_node *a, sl_node *b, void *aux)
|
||||
{
|
||||
// Get `my_node` from skiplist node `a` and `b`.
|
||||
struct my_node *aa, *bb;
|
||||
aa = sl_get_entry(a, struct my_node, snode);
|
||||
bb = sl_get_entry(b, struct my_node, snode);
|
||||
|
||||
// aa < bb: return neg
|
||||
// aa == bb: return 0
|
||||
// aa > bb: return pos
|
||||
if (aa->key < bb->key)
|
||||
return -1;
|
||||
if (aa->key > bb->key)
|
||||
return 1;
|
||||
return 0;
|
||||
// aa < bb: return neg
|
||||
// aa == bb: return 0
|
||||
// aa > bb: return pos
|
||||
if (aa->key < bb->key)
|
||||
return -1;
|
||||
if (aa->key > bb->key)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define NUM_NODES 10000
|
||||
|
||||
int main() {
|
||||
// seed the PRNG
|
||||
srandom((unsigned)(time(NULL) | getpid()));
|
||||
int
|
||||
main()
|
||||
{
|
||||
// seed the PRNG
|
||||
srandom((unsigned)(time(NULL) | getpid()));
|
||||
|
||||
sl_raw slist;
|
||||
sl_raw slist;
|
||||
|
||||
// Initialize skiplist.
|
||||
sl_init(&slist, my_cmp);
|
||||
// Initialize skiplist.
|
||||
sl_init(&slist, my_cmp);
|
||||
|
||||
// << Insertion >>
|
||||
// Allocate & insert NUM_NODES KV pairs: {0, 0}, {1, 10}, {2, 20}.
|
||||
struct my_node *nodes[NUM_NODES];
|
||||
for (int i = 0; i < NUM_NODES; ++i) {
|
||||
// Allocate memory.
|
||||
nodes[i] = (struct my_node *)malloc(sizeof(struct my_node));
|
||||
// Initialize node.
|
||||
sl_init_node(&nodes[i]->snode);
|
||||
// Assign key and value.
|
||||
nodes[i]->key = i;
|
||||
nodes[i]->value = i * 10;
|
||||
// Insert into skiplist.
|
||||
sl_insert(&slist, &nodes[i]->snode);
|
||||
}
|
||||
|
||||
// << Point lookup >>
|
||||
for (int i = 0; i < NUM_NODES; ++i) {
|
||||
// Define a query.
|
||||
struct my_node query;
|
||||
int min = 1, max = NUM_NODES - 1;
|
||||
int k = min + random() / (RAND_MAX / (max - min + 1) + 1);
|
||||
query.key = k;
|
||||
// Find a skiplist node `cursor`.
|
||||
sl_node *cursor = sl_find(&slist, &query.snode);
|
||||
// If `cursor` is NULL, key doesn't exist.
|
||||
if (!cursor)
|
||||
continue;
|
||||
// Get `my_node` from `cursor`.
|
||||
// Note: found->snode == *cursor
|
||||
struct my_node *found = _get_entry(cursor, struct my_node, snode);
|
||||
printf("[point lookup] key: %d, value: %d\n", found->key, found->value);
|
||||
if (found->key != found->value / 10) {
|
||||
printf("FAILURE: key: %d * 10 != value: %d\n", found->key, found->value);
|
||||
exit(-1);
|
||||
// << Insertion >>
|
||||
// Allocate & insert NUM_NODES KV pairs: {0, 0}, {1, 10}, {2, 20}.
|
||||
struct my_node *nodes[NUM_NODES];
|
||||
for (int i = 0; i < NUM_NODES; ++i) {
|
||||
// Allocate memory.
|
||||
nodes[i] = (struct my_node *)malloc(sizeof(struct my_node));
|
||||
// Initialize node.
|
||||
sl_init_node(&nodes[i]->snode);
|
||||
// Assign key and value.
|
||||
nodes[i]->key = i;
|
||||
nodes[i]->value = i * 10;
|
||||
// Insert into skiplist.
|
||||
sl_insert(&slist, &nodes[i]->snode);
|
||||
}
|
||||
// Release `cursor` (== &found->snode).
|
||||
// Other thread cannot free `cursor` until `cursor` is released.
|
||||
sl_release_node(cursor);
|
||||
}
|
||||
|
||||
// << Erase >>
|
||||
// Erase the KV pair for key 1: {1, 10}.
|
||||
{
|
||||
// Define a query.
|
||||
struct my_node query;
|
||||
query.key = 1;
|
||||
// Find a skiplist node `cursor`.
|
||||
sl_node *cursor = sl_find(&slist, &query.snode);
|
||||
// Get `my_node` from `cursor`.
|
||||
// Note: found->snode == *cursor
|
||||
struct my_node *found = _get_entry(cursor, struct my_node, snode);
|
||||
printf("[erase] key: %d, value: %d\n", found->key, found->value);
|
||||
|
||||
// Detach `found` from skiplist.
|
||||
sl_erase_node(&slist, &found->snode);
|
||||
// Release `found`, to free its memory.
|
||||
sl_release_node(&found->snode);
|
||||
// Free `found` after it becomes safe.
|
||||
sl_wait_for_free(&found->snode);
|
||||
sl_free_node(&found->snode);
|
||||
free(found);
|
||||
}
|
||||
|
||||
// << Iteration >>
|
||||
{
|
||||
// Get the first cursor.
|
||||
sl_node *cursor = sl_begin(&slist);
|
||||
while (cursor) {
|
||||
// Get `entry` from `cursor`.
|
||||
// Note: entry->snode == *cursor
|
||||
struct my_node *entry = _get_entry(cursor, struct my_node, snode);
|
||||
printf("[iteration] key: %d, value: %d\n", entry->key, entry->value);
|
||||
// Get next `cursor`.
|
||||
cursor = sl_next(&slist, cursor);
|
||||
// Release `entry`.
|
||||
sl_release_node(&entry->snode);
|
||||
// << Point lookup >>
|
||||
for (int i = 0; i < NUM_NODES; ++i) {
|
||||
// Define a query.
|
||||
struct my_node query;
|
||||
int min = 1, max = NUM_NODES - 1;
|
||||
int k = min + random() / (RAND_MAX / (max - min + 1) + 1);
|
||||
query.key = k;
|
||||
// Find a skiplist node `cursor`.
|
||||
sl_node *cursor = sl_find(&slist, &query.snode);
|
||||
// If `cursor` is NULL, key doesn't exist.
|
||||
if (!cursor)
|
||||
continue;
|
||||
// Get `my_node` from `cursor`.
|
||||
// Note: found->snode == *cursor
|
||||
struct my_node *found = sl_get_entry(cursor, struct my_node, snode);
|
||||
printf("[point lookup] key: %d, value: %d\n", found->key, found->value);
|
||||
if (found->key != found->value / 10) {
|
||||
printf("FAILURE: key: %d * 10 != value: %d\n", found->key,
|
||||
found->value);
|
||||
exit(-1);
|
||||
}
|
||||
// Release `cursor` (== &found->snode).
|
||||
// Other thread cannot free `cursor` until `cursor` is released.
|
||||
sl_release_node(cursor);
|
||||
}
|
||||
}
|
||||
|
||||
// << Destroy >>
|
||||
{
|
||||
// Iterate and free all nodes.
|
||||
sl_node *cursor = sl_begin(&slist);
|
||||
while (cursor) {
|
||||
struct my_node *entry = _get_entry(cursor, struct my_node, snode);
|
||||
printf("[destroy] key: %d, value: %d\n", entry->key, entry->value);
|
||||
// Get next `cursor`.
|
||||
cursor = sl_next(&slist, cursor);
|
||||
// << Erase >>
|
||||
// Erase the KV pair for key 1: {1, 10}.
|
||||
{
|
||||
// Define a query.
|
||||
struct my_node query;
|
||||
query.key = 1;
|
||||
// Find a skiplist node `cursor`.
|
||||
sl_node *cursor = sl_find(&slist, &query.snode);
|
||||
// Get `my_node` from `cursor`.
|
||||
// Note: found->snode == *cursor
|
||||
struct my_node *found = sl_get_entry(cursor, struct my_node, snode);
|
||||
printf("[erase] key: %d, value: %d\n", found->key, found->value);
|
||||
|
||||
// Detach `entry` from skiplist.
|
||||
sl_erase_node(&slist, &entry->snode);
|
||||
// Release `entry`, to free its memory.
|
||||
sl_release_node(&entry->snode);
|
||||
// Free `entry` after it becomes safe.
|
||||
sl_wait_for_free(&entry->snode);
|
||||
sl_free_node(&entry->snode);
|
||||
free(entry);
|
||||
// Detach `found` from skiplist.
|
||||
sl_erase_node(&slist, &found->snode);
|
||||
// Release `found`, to free its memory.
|
||||
sl_release_node(&found->snode);
|
||||
// Free `found` after it becomes safe.
|
||||
sl_wait_for_free(&found->snode);
|
||||
sl_free_node(&found->snode);
|
||||
free(found);
|
||||
}
|
||||
}
|
||||
|
||||
// Free skiplist.
|
||||
sl_free(&slist);
|
||||
// << Iteration >>
|
||||
{
|
||||
// Get the first cursor.
|
||||
sl_node *cursor = sl_begin(&slist);
|
||||
while (cursor) {
|
||||
// Get `entry` from `cursor`.
|
||||
// Note: entry->snode == *cursor
|
||||
struct my_node *entry = sl_get_entry(cursor, struct my_node, snode);
|
||||
printf("[iteration] key: %d, value: %d\n", entry->key,
|
||||
entry->value);
|
||||
// Get next `cursor`.
|
||||
cursor = sl_next(&slist, cursor);
|
||||
// Release `entry`.
|
||||
sl_release_node(&entry->snode);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
// << Destroy >>
|
||||
{
|
||||
// Iterate and free all nodes.
|
||||
sl_node *cursor = sl_begin(&slist);
|
||||
while (cursor) {
|
||||
struct my_node *entry = sl_get_entry(cursor, struct my_node, snode);
|
||||
printf("[destroy] key: %d, value: %d\n", entry->key, entry->value);
|
||||
// Get next `cursor`.
|
||||
cursor = sl_next(&slist, cursor);
|
||||
|
||||
// Detach `entry` from skiplist.
|
||||
sl_erase_node(&slist, &entry->snode);
|
||||
// Release `entry`, to free its memory.
|
||||
sl_release_node(&entry->snode);
|
||||
// Free `entry` after it becomes safe.
|
||||
sl_wait_for_free(&entry->snode);
|
||||
sl_free_node(&entry->snode);
|
||||
free(entry);
|
||||
}
|
||||
}
|
||||
|
||||
// Free skiplist.
|
||||
sl_free(&slist);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
1907
src/skiplist.c
1907
src/skiplist.c
File diff suppressed because it is too large
Load diff
|
@ -2,16 +2,17 @@
|
|||
* Copyright 2024-present Gregory Burd <greg@burd.me> All rights reserved.
|
||||
*
|
||||
* Portions of this code are derived from work copyrighted by Jung-Sang Ahn
|
||||
* 2017-2024 Jung-Sang Ahn <jungsang.ahn@gmail.com> and made available under the
|
||||
* MIT License. (see: https://github.com/greensky00 Skiplist version: 0.2.9)
|
||||
* 2017-2024 Jung-Sang Ahn <jungsang.ahn@gmail.com> and made available under
|
||||
* the MIT License. (see: https://github.com/greensky00 Skiplist version:
|
||||
* 0.2.9)
|
||||
*
|
||||
* MIT License
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
|
@ -21,9 +22,9 @@
|
|||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef SKIPLIST_H__
|
||||
|
@ -34,8 +35,6 @@
|
|||
|
||||
#define SKIPLIST_MAX_LAYER (64)
|
||||
|
||||
struct _sl_node;
|
||||
|
||||
// #define _STL_ATOMIC (1)
|
||||
#ifdef __APPLE__
|
||||
#define _STL_ATOMIC (1)
|
||||
|
@ -51,13 +50,13 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
typedef struct _sl_node {
|
||||
atm_node_ptr *next;
|
||||
atm_bool is_fully_linked;
|
||||
atm_bool being_modified;
|
||||
atm_bool removed;
|
||||
uint8_t top_layer; // 0: bottom
|
||||
atm_uint16_t ref_count;
|
||||
atm_uint32_t accessing_next;
|
||||
atm_node_ptr *next;
|
||||
atm_bool is_fully_linked;
|
||||
atm_bool being_modified;
|
||||
atm_bool removed;
|
||||
uint8_t top_layer; // 0: bottom
|
||||
atm_uint16_t ref_count;
|
||||
atm_uint32_t accessing_next;
|
||||
} sl_node;
|
||||
|
||||
// *a < *b : return neg
|
||||
|
@ -66,26 +65,26 @@ typedef struct _sl_node {
|
|||
typedef int sl_cmp_t(sl_node *a, sl_node *b, void *aux);
|
||||
|
||||
typedef struct {
|
||||
size_t fanout;
|
||||
size_t maxLayer;
|
||||
void *aux;
|
||||
size_t fanout;
|
||||
size_t maxLayer;
|
||||
void *aux;
|
||||
} sl_raw_config;
|
||||
|
||||
typedef struct {
|
||||
sl_node head;
|
||||
sl_node tail;
|
||||
sl_cmp_t *cmp_func;
|
||||
void *aux;
|
||||
atm_uint32_t num_entries;
|
||||
atm_uint32_t *layer_entries;
|
||||
atm_uint8_t top_layer;
|
||||
uint8_t fanout;
|
||||
uint8_t max_layer;
|
||||
sl_node head;
|
||||
sl_node tail;
|
||||
sl_cmp_t *cmp_func;
|
||||
void *aux;
|
||||
atm_uint32_t num_entries;
|
||||
atm_uint32_t *layer_entries;
|
||||
atm_uint8_t top_layer;
|
||||
uint8_t fanout;
|
||||
uint8_t max_layer;
|
||||
} sl_raw;
|
||||
|
||||
#ifndef _get_entry
|
||||
#define _get_entry(ELEM, STRUCT, MEMBER) \
|
||||
((STRUCT *)((uint8_t *)(ELEM)-offsetof(STRUCT, MEMBER)))
|
||||
#ifndef sl_get_entry
|
||||
#define sl_get_entry(ELEM, STRUCT, MEMBER) \
|
||||
((STRUCT *)((uint8_t *)(ELEM)-offsetof(STRUCT, MEMBER)))
|
||||
#endif
|
||||
|
||||
void sl_init(sl_raw *slist, sl_cmp_t *cmp_func);
|
||||
|
|
24
src/skiplist.in
Normal file
24
src/skiplist.in
Normal file
|
@ -0,0 +1,24 @@
|
|||
#ifndef _SKIPLIST_H_
|
||||
#define _SKIPLIST_H_
|
||||
|
||||
@inttypes_h_decl@
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
@DB_CONST@
|
||||
@DB_PROTO1@
|
||||
@DB_PROTO2@
|
||||
|
||||
#define SKIPLIST_VERSION_MAJOR @SKIPLIST_VERSION_MAJOR@
|
||||
#define SKIPLIST_VERSION_MINOR @SKIPLIST_VERSION_MINOR@
|
||||
#define SKIPLIST_VERSION_PATCH @SKIPLIST_VERSION_PATCH@
|
||||
#define SKIPLIST_VERSION_STRING @SKIPLIST_VERSION_STRING@
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !_SKIPLIST_H_ */
|
|
@ -37,8 +37,8 @@
|
|||
#include "skiplist.h"
|
||||
|
||||
struct dbg_node {
|
||||
skiplist_node snode;
|
||||
int value;
|
||||
skiplist_node snode;
|
||||
int value;
|
||||
};
|
||||
|
||||
#if __SL_DEBUG >= 1
|
||||
|
@ -67,43 +67,51 @@ struct dbg_node {
|
|||
#error "unknown debugging level"
|
||||
#endif
|
||||
|
||||
inline void __sld_rt_ins(int error_code, skiplist_node *node, int top_layer,
|
||||
int cur_layer) {
|
||||
dbg_node *ddd = _get_entry(node, dbg_node, snode);
|
||||
printf("[INS] retry (code %d) "
|
||||
"%p (top %d, cur %d) %d\n",
|
||||
error_code, node, top_layer, cur_layer, ddd->value);
|
||||
inline void
|
||||
__sld_rt_ins(int error_code, skiplist_node *node, int top_layer, int cur_layer)
|
||||
{
|
||||
dbg_node *ddd = sl_get_entry(node, dbg_node, snode);
|
||||
printf("[INS] retry (code %d) "
|
||||
"%p (top %d, cur %d) %d\n",
|
||||
error_code, node, top_layer, cur_layer, ddd->value);
|
||||
}
|
||||
|
||||
inline void __sld_nc_ins(skiplist_node *node, skiplist_node *next_node,
|
||||
int top_layer, int cur_layer) {
|
||||
dbg_node *ddd = _get_entry(node, dbg_node, snode);
|
||||
dbg_node *ddd_next = _get_entry(next_node, dbg_node, snode);
|
||||
inline void
|
||||
__sld_nc_ins(skiplist_node *node, skiplist_node *next_node, int top_layer,
|
||||
int cur_layer)
|
||||
{
|
||||
dbg_node *ddd = sl_get_entry(node, dbg_node, snode);
|
||||
dbg_node *ddd_next = sl_get_entry(next_node, dbg_node, snode);
|
||||
|
||||
printf("[INS] next node changed, "
|
||||
"%p %p (top %d, cur %d) %d %d\n",
|
||||
node, next_node, top_layer, cur_layer, ddd->value, ddd_next->value);
|
||||
printf("[INS] next node changed, "
|
||||
"%p %p (top %d, cur %d) %d %d\n",
|
||||
node, next_node, top_layer, cur_layer, ddd->value, ddd_next->value);
|
||||
}
|
||||
|
||||
inline void __sld_rt_rmv(int error_code, skiplist_node *node, int top_layer,
|
||||
int cur_layer) {
|
||||
dbg_node *ddd = _get_entry(node, dbg_node, snode);
|
||||
printf("[RMV] retry (code %d) "
|
||||
"%p (top %d, cur %d) %d\n",
|
||||
error_code, node, top_layer, cur_layer, ddd->value);
|
||||
inline void
|
||||
__sld_rt_rmv(int error_code, skiplist_node *node, int top_layer, int cur_layer)
|
||||
{
|
||||
dbg_node *ddd = sl_get_entry(node, dbg_node, snode);
|
||||
printf("[RMV] retry (code %d) "
|
||||
"%p (top %d, cur %d) %d\n",
|
||||
error_code, node, top_layer, cur_layer, ddd->value);
|
||||
}
|
||||
|
||||
inline void __sld_nc_rmv(skiplist_node *node, skiplist_node *next_node,
|
||||
int top_layer, int cur_layer) {
|
||||
dbg_node *ddd = _get_entry(node, dbg_node, snode);
|
||||
dbg_node *ddd_next = _get_entry(next_node, dbg_node, snode);
|
||||
inline void
|
||||
__sld_nc_rmv(skiplist_node *node, skiplist_node *next_node, int top_layer,
|
||||
int cur_layer)
|
||||
{
|
||||
dbg_node *ddd = sl_get_entry(node, dbg_node, snode);
|
||||
dbg_node *ddd_next = sl_get_entry(next_node, dbg_node, snode);
|
||||
|
||||
printf("[RMV] next node changed, "
|
||||
"%p %p (top %d, cur %d) %d %d\n",
|
||||
node, next_node, top_layer, cur_layer, ddd->value, ddd_next->value);
|
||||
printf("[RMV] next node changed, "
|
||||
"%p %p (top %d, cur %d) %d %d\n",
|
||||
node, next_node, top_layer, cur_layer, ddd->value, ddd_next->value);
|
||||
}
|
||||
|
||||
inline void __sld_bm(skiplist_node *node) {
|
||||
dbg_node *ddd = _get_entry(node, dbg_node, snode);
|
||||
printf("[RMV] node is being modified %d\n", ddd->value);
|
||||
inline void
|
||||
__sld_bm(skiplist_node *node)
|
||||
{
|
||||
dbg_node *ddd = sl_get_entry(node, dbg_node, snode);
|
||||
printf("[RMV] node is being modified %d\n", ddd->value);
|
||||
}
|
||||
|
|
97
src/sldbg.h
Normal file
97
src/sldbg.h
Normal file
|
@ -0,0 +1,97 @@
|
|||
#if __SL_DEBUG > 0
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#if __SL_DEBUG >= 1
|
||||
#define __SLD_ASSERT(cond) assert(cond)
|
||||
#define __SLD_(b) b
|
||||
#elif __SL_DEBUG >= 2
|
||||
#define __SLD_P(args...) printf(args)
|
||||
#elif __SL_DEBUG >= 3
|
||||
typedef struct dbg_node {
|
||||
sl_node snode;
|
||||
int value;
|
||||
} dbg_node_t;
|
||||
|
||||
inline void
|
||||
__sld_rt_ins(int error_code, sl_node *node, int top_layer, int cur_layer)
|
||||
{
|
||||
dbg_node_t *ddd = sl_get_entry(node, dbg_node_t, snode);
|
||||
printf("[INS] retry (code %d) "
|
||||
"%p (top %d, cur %d) %d\n",
|
||||
error_code, node, top_layer, cur_layer, ddd->value);
|
||||
}
|
||||
|
||||
inline void
|
||||
__sld_nc_ins(sl_node *node, sl_node *next_node, int top_layer, int cur_layer)
|
||||
{
|
||||
dbg_node_t *ddd = sl_get_entry(node, dbg_node_t, snode);
|
||||
dbg_node_t *ddd_next = sl_get_entry(next_node, dbg_node_t, snode);
|
||||
|
||||
printf("[INS] next node changed, "
|
||||
"%p %p (top %d, cur %d) %d %d\n",
|
||||
node, next_node, top_layer, cur_layer, ddd->value, ddd_next->value);
|
||||
}
|
||||
|
||||
inline void
|
||||
__sld_rt_rmv(int error_code, sl_node *node, int top_layer, int cur_layer)
|
||||
{
|
||||
dbg_node_t *ddd = sl_get_entry(node, dbg_node_t, snode);
|
||||
printf("[RMV] retry (code %d) "
|
||||
"%p (top %d, cur %d) %d\n",
|
||||
error_code, node, top_layer, cur_layer, ddd->value);
|
||||
}
|
||||
|
||||
inline void
|
||||
__sld_nc_rmv(sl_node *node, sl_node *next_node, int top_layer, int cur_layer)
|
||||
{
|
||||
dbg_node_t *ddd = sl_get_entry(node, dbg_node_t, snode);
|
||||
dbg_node_t *ddd_next = sl_get_entry(next_node, dbg_node_t, snode);
|
||||
|
||||
printf("[RMV] next node changed, "
|
||||
"%p %p (top %d, cur %d) %d %d\n",
|
||||
node, next_node, top_layer, cur_layer, ddd->value, ddd_next->value);
|
||||
}
|
||||
|
||||
inline void
|
||||
__sld_bm(sl_node *node)
|
||||
{
|
||||
dbg_node_t *ddd = sl_get_entry(node, dbg_node_t, snode);
|
||||
printf("[RMV] node is being modified %d\n", ddd->value);
|
||||
}
|
||||
|
||||
#define __SLD_RT_INS(e, n, t, c) __sld_rt_ins(e, n, t, c)
|
||||
#define __SLD_NC_INS(n, nn, t, c) __sld_nc_ins(n, nn, t, c)
|
||||
#define __SLD_RT_RMV(e, n, t, c) __sld_rt_rmv(e, n, t, c)
|
||||
#define __SLD_NC_RMV(n, nn, t, c) __sld_nc_rmv(n, nn, t, c)
|
||||
#define __SLD_BM(n) __sld_bm(n)
|
||||
#else
|
||||
#define __SLD_RT_INS(e, n, t, c) \
|
||||
do { \
|
||||
} while (0)
|
||||
#define __SLD_NC_INS(n, nn, t, c) \
|
||||
do { \
|
||||
} while (0)
|
||||
#define __SLD_RT_RMV(e, n, t, c) \
|
||||
do { \
|
||||
} while (0)
|
||||
#define __SLD_NC_RMV(n, nn, t, c) \
|
||||
do { \
|
||||
} while (0)
|
||||
#define __SLD_BM(n) \
|
||||
do { \
|
||||
} while (0)
|
||||
#define __SLD_ASSERT(cond) \
|
||||
do { \
|
||||
} while (0)
|
||||
#define __SLD_P(args...) \
|
||||
do { \
|
||||
} while (0)
|
||||
#define __SLD_(b) \
|
||||
do { \
|
||||
} while (0)
|
||||
#endif
|
2055
test/munit.c
Normal file
2055
test/munit.c
Normal file
File diff suppressed because it is too large
Load diff
535
test/munit.h
Normal file
535
test/munit.h
Normal file
|
@ -0,0 +1,535 @@
|
|||
/* µnit Testing Framework
|
||||
* Copyright (c) 2013-2017 Evan Nemerson <evan@nemerson.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use, copy,
|
||||
* modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#if !defined(MUNIT_H)
|
||||
#define MUNIT_H
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MUNIT_VERSION(major, minor, revision) \
|
||||
(((major) << 16) | ((minor) << 8) | (revision))
|
||||
|
||||
#define MUNIT_CURRENT_VERSION MUNIT_VERSION(0, 4, 1)
|
||||
|
||||
#if defined(_MSC_VER) && (_MSC_VER < 1600)
|
||||
# define munit_int8_t __int8
|
||||
# define munit_uint8_t unsigned __int8
|
||||
# define munit_int16_t __int16
|
||||
# define munit_uint16_t unsigned __int16
|
||||
# define munit_int32_t __int32
|
||||
# define munit_uint32_t unsigned __int32
|
||||
# define munit_int64_t __int64
|
||||
# define munit_uint64_t unsigned __int64
|
||||
#else
|
||||
# include <stdint.h>
|
||||
# define munit_int8_t int8_t
|
||||
# define munit_uint8_t uint8_t
|
||||
# define munit_int16_t int16_t
|
||||
# define munit_uint16_t uint16_t
|
||||
# define munit_int32_t int32_t
|
||||
# define munit_uint32_t uint32_t
|
||||
# define munit_int64_t int64_t
|
||||
# define munit_uint64_t uint64_t
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && (_MSC_VER < 1800)
|
||||
# if !defined(PRIi8)
|
||||
# define PRIi8 "i"
|
||||
# endif
|
||||
# if !defined(PRIi16)
|
||||
# define PRIi16 "i"
|
||||
# endif
|
||||
# if !defined(PRIi32)
|
||||
# define PRIi32 "i"
|
||||
# endif
|
||||
# if !defined(PRIi64)
|
||||
# define PRIi64 "I64i"
|
||||
# endif
|
||||
# if !defined(PRId8)
|
||||
# define PRId8 "d"
|
||||
# endif
|
||||
# if !defined(PRId16)
|
||||
# define PRId16 "d"
|
||||
# endif
|
||||
# if !defined(PRId32)
|
||||
# define PRId32 "d"
|
||||
# endif
|
||||
# if !defined(PRId64)
|
||||
# define PRId64 "I64d"
|
||||
# endif
|
||||
# if !defined(PRIx8)
|
||||
# define PRIx8 "x"
|
||||
# endif
|
||||
# if !defined(PRIx16)
|
||||
# define PRIx16 "x"
|
||||
# endif
|
||||
# if !defined(PRIx32)
|
||||
# define PRIx32 "x"
|
||||
# endif
|
||||
# if !defined(PRIx64)
|
||||
# define PRIx64 "I64x"
|
||||
# endif
|
||||
# if !defined(PRIu8)
|
||||
# define PRIu8 "u"
|
||||
# endif
|
||||
# if !defined(PRIu16)
|
||||
# define PRIu16 "u"
|
||||
# endif
|
||||
# if !defined(PRIu32)
|
||||
# define PRIu32 "u"
|
||||
# endif
|
||||
# if !defined(PRIu64)
|
||||
# define PRIu64 "I64u"
|
||||
# endif
|
||||
#else
|
||||
# include <inttypes.h>
|
||||
#endif
|
||||
|
||||
#if !defined(munit_bool)
|
||||
# if defined(bool)
|
||||
# define munit_bool bool
|
||||
# elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
|
||||
# define munit_bool _Bool
|
||||
# else
|
||||
# define munit_bool int
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(__GNUC__)
|
||||
# define MUNIT_LIKELY(expr) (__builtin_expect ((expr), 1))
|
||||
# define MUNIT_UNLIKELY(expr) (__builtin_expect ((expr), 0))
|
||||
# define MUNIT_UNUSED __attribute__((__unused__))
|
||||
#else
|
||||
# define MUNIT_LIKELY(expr) (expr)
|
||||
# define MUNIT_UNLIKELY(expr) (expr)
|
||||
# define MUNIT_UNUSED
|
||||
#endif
|
||||
|
||||
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__PGI)
|
||||
# define MUNIT_ARRAY_PARAM(name) name
|
||||
#else
|
||||
# define MUNIT_ARRAY_PARAM(name)
|
||||
#endif
|
||||
|
||||
#if !defined(_WIN32)
|
||||
# define MUNIT_SIZE_MODIFIER "z"
|
||||
# define MUNIT_CHAR_MODIFIER "hh"
|
||||
# define MUNIT_SHORT_MODIFIER "h"
|
||||
#else
|
||||
# if defined(_M_X64) || defined(__amd64__)
|
||||
# define MUNIT_SIZE_MODIFIER "I64"
|
||||
# else
|
||||
# define MUNIT_SIZE_MODIFIER ""
|
||||
# endif
|
||||
# define MUNIT_CHAR_MODIFIER ""
|
||||
# define MUNIT_SHORT_MODIFIER ""
|
||||
#endif
|
||||
|
||||
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
|
||||
# define MUNIT_NO_RETURN _Noreturn
|
||||
#elif defined(__GNUC__)
|
||||
# define MUNIT_NO_RETURN __attribute__((__noreturn__))
|
||||
#elif defined(_MSC_VER)
|
||||
# define MUNIT_NO_RETURN __declspec(noreturn)
|
||||
#else
|
||||
# define MUNIT_NO_RETURN
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
|
||||
# define MUNIT_PUSH_DISABLE_MSVC_C4127_ __pragma(warning(push)) __pragma(warning(disable:4127))
|
||||
# define MUNIT_POP_DISABLE_MSVC_C4127_ __pragma(warning(pop))
|
||||
#else
|
||||
# define MUNIT_PUSH_DISABLE_MSVC_C4127_
|
||||
# define MUNIT_POP_DISABLE_MSVC_C4127_
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
MUNIT_LOG_DEBUG,
|
||||
MUNIT_LOG_INFO,
|
||||
MUNIT_LOG_WARNING,
|
||||
MUNIT_LOG_ERROR
|
||||
} MunitLogLevel;
|
||||
|
||||
#if defined(__GNUC__) && !defined(__MINGW32__)
|
||||
# define MUNIT_PRINTF(string_index, first_to_check) __attribute__((format (printf, string_index, first_to_check)))
|
||||
#else
|
||||
# define MUNIT_PRINTF(string_index, first_to_check)
|
||||
#endif
|
||||
|
||||
MUNIT_PRINTF(4, 5)
|
||||
void munit_logf_ex(MunitLogLevel level, const char* filename, int line, const char* format, ...);
|
||||
|
||||
#define munit_logf(level, format, ...) \
|
||||
munit_logf_ex(level, __FILE__, __LINE__, format, __VA_ARGS__)
|
||||
|
||||
#define munit_log(level, msg) \
|
||||
munit_logf(level, "%s", msg)
|
||||
|
||||
MUNIT_NO_RETURN
|
||||
MUNIT_PRINTF(3, 4)
|
||||
void munit_errorf_ex(const char* filename, int line, const char* format, ...);
|
||||
|
||||
#define munit_errorf(format, ...) \
|
||||
munit_errorf_ex(__FILE__, __LINE__, format, __VA_ARGS__)
|
||||
|
||||
#define munit_error(msg) \
|
||||
munit_errorf("%s", msg)
|
||||
|
||||
#define munit_assert(expr) \
|
||||
do { \
|
||||
if (!MUNIT_LIKELY(expr)) { \
|
||||
munit_error("assertion failed: " #expr); \
|
||||
} \
|
||||
MUNIT_PUSH_DISABLE_MSVC_C4127_ \
|
||||
} while (0) \
|
||||
MUNIT_POP_DISABLE_MSVC_C4127_
|
||||
|
||||
#define munit_assert_true(expr) \
|
||||
do { \
|
||||
if (!MUNIT_LIKELY(expr)) { \
|
||||
munit_error("assertion failed: " #expr " is not true"); \
|
||||
} \
|
||||
MUNIT_PUSH_DISABLE_MSVC_C4127_ \
|
||||
} while (0) \
|
||||
MUNIT_POP_DISABLE_MSVC_C4127_
|
||||
|
||||
#define munit_assert_false(expr) \
|
||||
do { \
|
||||
if (!MUNIT_LIKELY(!(expr))) { \
|
||||
munit_error("assertion failed: " #expr " is not false"); \
|
||||
} \
|
||||
MUNIT_PUSH_DISABLE_MSVC_C4127_ \
|
||||
} while (0) \
|
||||
MUNIT_POP_DISABLE_MSVC_C4127_
|
||||
|
||||
#define munit_assert_type_full(prefix, suffix, T, fmt, a, op, b) \
|
||||
do { \
|
||||
T munit_tmp_a_ = (a); \
|
||||
T munit_tmp_b_ = (b); \
|
||||
if (!(munit_tmp_a_ op munit_tmp_b_)) { \
|
||||
munit_errorf("assertion failed: %s %s %s (" prefix "%" fmt suffix " %s " prefix "%" fmt suffix ")", \
|
||||
#a, #op, #b, munit_tmp_a_, #op, munit_tmp_b_); \
|
||||
} \
|
||||
MUNIT_PUSH_DISABLE_MSVC_C4127_ \
|
||||
} while (0) \
|
||||
MUNIT_POP_DISABLE_MSVC_C4127_
|
||||
|
||||
#define munit_assert_type(T, fmt, a, op, b) \
|
||||
munit_assert_type_full("", "", T, fmt, a, op, b)
|
||||
|
||||
#define munit_assert_char(a, op, b) \
|
||||
munit_assert_type_full("'\\x", "'", char, "02" MUNIT_CHAR_MODIFIER "x", a, op, b)
|
||||
#define munit_assert_uchar(a, op, b) \
|
||||
munit_assert_type_full("'\\x", "'", unsigned char, "02" MUNIT_CHAR_MODIFIER "x", a, op, b)
|
||||
#define munit_assert_short(a, op, b) \
|
||||
munit_assert_type(short, MUNIT_SHORT_MODIFIER "d", a, op, b)
|
||||
#define munit_assert_ushort(a, op, b) \
|
||||
munit_assert_type(unsigned short, MUNIT_SHORT_MODIFIER "u", a, op, b)
|
||||
#define munit_assert_int(a, op, b) \
|
||||
munit_assert_type(int, "d", a, op, b)
|
||||
#define munit_assert_uint(a, op, b) \
|
||||
munit_assert_type(unsigned int, "u", a, op, b)
|
||||
#define munit_assert_long(a, op, b) \
|
||||
munit_assert_type(long int, "ld", a, op, b)
|
||||
#define munit_assert_ulong(a, op, b) \
|
||||
munit_assert_type(unsigned long int, "lu", a, op, b)
|
||||
#define munit_assert_llong(a, op, b) \
|
||||
munit_assert_type(long long int, "lld", a, op, b)
|
||||
#define munit_assert_ullong(a, op, b) \
|
||||
munit_assert_type(unsigned long long int, "llu", a, op, b)
|
||||
|
||||
#define munit_assert_size(a, op, b) \
|
||||
munit_assert_type(size_t, MUNIT_SIZE_MODIFIER "u", a, op, b)
|
||||
|
||||
#define munit_assert_float(a, op, b) \
|
||||
munit_assert_type(float, "f", a, op, b)
|
||||
#define munit_assert_double(a, op, b) \
|
||||
munit_assert_type(double, "g", a, op, b)
|
||||
#define munit_assert_ptr(a, op, b) \
|
||||
munit_assert_type(const void*, "p", a, op, b)
|
||||
|
||||
#define munit_assert_int8(a, op, b) \
|
||||
munit_assert_type(munit_int8_t, PRIi8, a, op, b)
|
||||
#define munit_assert_uint8(a, op, b) \
|
||||
munit_assert_type(munit_uint8_t, PRIu8, a, op, b)
|
||||
#define munit_assert_int16(a, op, b) \
|
||||
munit_assert_type(munit_int16_t, PRIi16, a, op, b)
|
||||
#define munit_assert_uint16(a, op, b) \
|
||||
munit_assert_type(munit_uint16_t, PRIu16, a, op, b)
|
||||
#define munit_assert_int32(a, op, b) \
|
||||
munit_assert_type(munit_int32_t, PRIi32, a, op, b)
|
||||
#define munit_assert_uint32(a, op, b) \
|
||||
munit_assert_type(munit_uint32_t, PRIu32, a, op, b)
|
||||
#define munit_assert_int64(a, op, b) \
|
||||
munit_assert_type(munit_int64_t, PRIi64, a, op, b)
|
||||
#define munit_assert_uint64(a, op, b) \
|
||||
munit_assert_type(munit_uint64_t, PRIu64, a, op, b)
|
||||
|
||||
#define munit_assert_double_equal(a, b, precision) \
|
||||
do { \
|
||||
const double munit_tmp_a_ = (a); \
|
||||
const double munit_tmp_b_ = (b); \
|
||||
const double munit_tmp_diff_ = ((munit_tmp_a_ - munit_tmp_b_) < 0) ? \
|
||||
-(munit_tmp_a_ - munit_tmp_b_) : \
|
||||
(munit_tmp_a_ - munit_tmp_b_); \
|
||||
if (MUNIT_UNLIKELY(munit_tmp_diff_ > 1e-##precision)) { \
|
||||
munit_errorf("assertion failed: %s == %s (%0." #precision "g == %0." #precision "g)", \
|
||||
#a, #b, munit_tmp_a_, munit_tmp_b_); \
|
||||
} \
|
||||
MUNIT_PUSH_DISABLE_MSVC_C4127_ \
|
||||
} while (0) \
|
||||
MUNIT_POP_DISABLE_MSVC_C4127_
|
||||
|
||||
#include <string.h>
|
||||
#define munit_assert_string_equal(a, b) \
|
||||
do { \
|
||||
const char* munit_tmp_a_ = a; \
|
||||
const char* munit_tmp_b_ = b; \
|
||||
if (MUNIT_UNLIKELY(strcmp(munit_tmp_a_, munit_tmp_b_) != 0)) { \
|
||||
munit_errorf("assertion failed: string %s == %s (\"%s\" == \"%s\")", \
|
||||
#a, #b, munit_tmp_a_, munit_tmp_b_); \
|
||||
} \
|
||||
MUNIT_PUSH_DISABLE_MSVC_C4127_ \
|
||||
} while (0) \
|
||||
MUNIT_POP_DISABLE_MSVC_C4127_
|
||||
|
||||
#define munit_assert_string_not_equal(a, b) \
|
||||
do { \
|
||||
const char* munit_tmp_a_ = a; \
|
||||
const char* munit_tmp_b_ = b; \
|
||||
if (MUNIT_UNLIKELY(strcmp(munit_tmp_a_, munit_tmp_b_) == 0)) { \
|
||||
munit_errorf("assertion failed: string %s != %s (\"%s\" == \"%s\")", \
|
||||
#a, #b, munit_tmp_a_, munit_tmp_b_); \
|
||||
} \
|
||||
MUNIT_PUSH_DISABLE_MSVC_C4127_ \
|
||||
} while (0) \
|
||||
MUNIT_POP_DISABLE_MSVC_C4127_
|
||||
|
||||
#define munit_assert_memory_equal(size, a, b) \
|
||||
do { \
|
||||
const unsigned char* munit_tmp_a_ = (const unsigned char*) (a); \
|
||||
const unsigned char* munit_tmp_b_ = (const unsigned char*) (b); \
|
||||
const size_t munit_tmp_size_ = (size); \
|
||||
if (MUNIT_UNLIKELY(memcmp(munit_tmp_a_, munit_tmp_b_, munit_tmp_size_)) != 0) { \
|
||||
size_t munit_tmp_pos_; \
|
||||
for (munit_tmp_pos_ = 0 ; munit_tmp_pos_ < munit_tmp_size_ ; munit_tmp_pos_++) { \
|
||||
if (munit_tmp_a_[munit_tmp_pos_] != munit_tmp_b_[munit_tmp_pos_]) { \
|
||||
munit_errorf("assertion failed: memory %s == %s, at offset %" MUNIT_SIZE_MODIFIER "u", \
|
||||
#a, #b, munit_tmp_pos_); \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
MUNIT_PUSH_DISABLE_MSVC_C4127_ \
|
||||
} while (0) \
|
||||
MUNIT_POP_DISABLE_MSVC_C4127_
|
||||
|
||||
#define munit_assert_memory_not_equal(size, a, b) \
|
||||
do { \
|
||||
const unsigned char* munit_tmp_a_ = (const unsigned char*) (a); \
|
||||
const unsigned char* munit_tmp_b_ = (const unsigned char*) (b); \
|
||||
const size_t munit_tmp_size_ = (size); \
|
||||
if (MUNIT_UNLIKELY(memcmp(munit_tmp_a_, munit_tmp_b_, munit_tmp_size_)) == 0) { \
|
||||
munit_errorf("assertion failed: memory %s != %s (%zu bytes)", \
|
||||
#a, #b, munit_tmp_size_); \
|
||||
} \
|
||||
MUNIT_PUSH_DISABLE_MSVC_C4127_ \
|
||||
} while (0) \
|
||||
MUNIT_POP_DISABLE_MSVC_C4127_
|
||||
|
||||
#define munit_assert_ptr_equal(a, b) \
|
||||
munit_assert_ptr(a, ==, b)
|
||||
#define munit_assert_ptr_not_equal(a, b) \
|
||||
munit_assert_ptr(a, !=, b)
|
||||
#define munit_assert_null(ptr) \
|
||||
munit_assert_ptr(ptr, ==, NULL)
|
||||
#define munit_assert_not_null(ptr) \
|
||||
munit_assert_ptr(ptr, !=, NULL)
|
||||
#define munit_assert_ptr_null(ptr) \
|
||||
munit_assert_ptr(ptr, ==, NULL)
|
||||
#define munit_assert_ptr_not_null(ptr) \
|
||||
munit_assert_ptr(ptr, !=, NULL)
|
||||
|
||||
/*** Memory allocation ***/
|
||||
|
||||
void* munit_malloc_ex(const char* filename, int line, size_t size);
|
||||
|
||||
#define munit_malloc(size) \
|
||||
munit_malloc_ex(__FILE__, __LINE__, (size))
|
||||
|
||||
#define munit_new(type) \
|
||||
((type*) munit_malloc(sizeof(type)))
|
||||
|
||||
#define munit_calloc(nmemb, size) \
|
||||
munit_malloc((nmemb) * (size))
|
||||
|
||||
#define munit_newa(type, nmemb) \
|
||||
((type*) munit_calloc((nmemb), sizeof(type)))
|
||||
|
||||
/*** Random number generation ***/
|
||||
|
||||
void munit_rand_seed(munit_uint32_t seed);
|
||||
munit_uint32_t munit_rand_uint32(void);
|
||||
int munit_rand_int_range(int min, int max);
|
||||
double munit_rand_double(void);
|
||||
void munit_rand_memory(size_t size, munit_uint8_t buffer[MUNIT_ARRAY_PARAM(size)]);
|
||||
|
||||
/*** Tests and Suites ***/
|
||||
|
||||
typedef enum {
|
||||
/* Test successful */
|
||||
MUNIT_OK,
|
||||
/* Test failed */
|
||||
MUNIT_FAIL,
|
||||
/* Test was skipped */
|
||||
MUNIT_SKIP,
|
||||
/* Test failed due to circumstances not intended to be tested
|
||||
* (things like network errors, invalid parameter value, failure to
|
||||
* allocate memory in the test harness, etc.). */
|
||||
MUNIT_ERROR
|
||||
} MunitResult;
|
||||
|
||||
typedef struct {
|
||||
char* name;
|
||||
char** values;
|
||||
} MunitParameterEnum;
|
||||
|
||||
typedef struct {
|
||||
char* name;
|
||||
char* value;
|
||||
} MunitParameter;
|
||||
|
||||
const char* munit_parameters_get(const MunitParameter params[], const char* key);
|
||||
|
||||
typedef enum {
|
||||
MUNIT_TEST_OPTION_NONE = 0,
|
||||
MUNIT_TEST_OPTION_SINGLE_ITERATION = 1 << 0,
|
||||
MUNIT_TEST_OPTION_TODO = 1 << 1
|
||||
} MunitTestOptions;
|
||||
|
||||
typedef MunitResult (* MunitTestFunc)(const MunitParameter params[], void* user_data_or_fixture);
|
||||
typedef void* (* MunitTestSetup)(const MunitParameter params[], void* user_data);
|
||||
typedef void (* MunitTestTearDown)(void* fixture);
|
||||
|
||||
typedef struct {
|
||||
char* name;
|
||||
MunitTestFunc test;
|
||||
MunitTestSetup setup;
|
||||
MunitTestTearDown tear_down;
|
||||
MunitTestOptions options;
|
||||
MunitParameterEnum* parameters;
|
||||
} MunitTest;
|
||||
|
||||
typedef enum {
|
||||
MUNIT_SUITE_OPTION_NONE = 0
|
||||
} MunitSuiteOptions;
|
||||
|
||||
typedef struct MunitSuite_ MunitSuite;
|
||||
|
||||
struct MunitSuite_ {
|
||||
char* prefix;
|
||||
MunitTest* tests;
|
||||
MunitSuite* suites;
|
||||
unsigned int iterations;
|
||||
MunitSuiteOptions options;
|
||||
};
|
||||
|
||||
int munit_suite_main(const MunitSuite* suite, void* user_data, int argc, char* const argv[MUNIT_ARRAY_PARAM(argc + 1)]);
|
||||
|
||||
/* Note: I'm not very happy with this API; it's likely to change if I
|
||||
* figure out something better. Suggestions welcome. */
|
||||
|
||||
typedef struct MunitArgument_ MunitArgument;
|
||||
|
||||
struct MunitArgument_ {
|
||||
char* name;
|
||||
munit_bool (* parse_argument)(const MunitSuite* suite, void* user_data, int* arg, int argc, char* const argv[MUNIT_ARRAY_PARAM(argc + 1)]);
|
||||
void (* write_help)(const MunitArgument* argument, void* user_data);
|
||||
};
|
||||
|
||||
int munit_suite_main_custom(const MunitSuite* suite,
|
||||
void* user_data,
|
||||
int argc, char* const argv[MUNIT_ARRAY_PARAM(argc + 1)],
|
||||
const MunitArgument arguments[]);
|
||||
|
||||
#if defined(MUNIT_ENABLE_ASSERT_ALIASES)
|
||||
|
||||
#define assert_true(expr) munit_assert_true(expr)
|
||||
#define assert_false(expr) munit_assert_false(expr)
|
||||
#define assert_char(a, op, b) munit_assert_char(a, op, b)
|
||||
#define assert_uchar(a, op, b) munit_assert_uchar(a, op, b)
|
||||
#define assert_short(a, op, b) munit_assert_short(a, op, b)
|
||||
#define assert_ushort(a, op, b) munit_assert_ushort(a, op, b)
|
||||
#define assert_int(a, op, b) munit_assert_int(a, op, b)
|
||||
#define assert_uint(a, op, b) munit_assert_uint(a, op, b)
|
||||
#define assert_long(a, op, b) munit_assert_long(a, op, b)
|
||||
#define assert_ulong(a, op, b) munit_assert_ulong(a, op, b)
|
||||
#define assert_llong(a, op, b) munit_assert_llong(a, op, b)
|
||||
#define assert_ullong(a, op, b) munit_assert_ullong(a, op, b)
|
||||
#define assert_size(a, op, b) munit_assert_size(a, op, b)
|
||||
#define assert_float(a, op, b) munit_assert_float(a, op, b)
|
||||
#define assert_double(a, op, b) munit_assert_double(a, op, b)
|
||||
#define assert_ptr(a, op, b) munit_assert_ptr(a, op, b)
|
||||
|
||||
#define assert_int8(a, op, b) munit_assert_int8(a, op, b)
|
||||
#define assert_uint8(a, op, b) munit_assert_uint8(a, op, b)
|
||||
#define assert_int16(a, op, b) munit_assert_int16(a, op, b)
|
||||
#define assert_uint16(a, op, b) munit_assert_uint16(a, op, b)
|
||||
#define assert_int32(a, op, b) munit_assert_int32(a, op, b)
|
||||
#define assert_uint32(a, op, b) munit_assert_uint32(a, op, b)
|
||||
#define assert_int64(a, op, b) munit_assert_int64(a, op, b)
|
||||
#define assert_uint64(a, op, b) munit_assert_uint64(a, op, b)
|
||||
|
||||
#define assert_double_equal(a, b, precision) munit_assert_double_equal(a, b, precision)
|
||||
#define assert_string_equal(a, b) munit_assert_string_equal(a, b)
|
||||
#define assert_string_not_equal(a, b) munit_assert_string_not_equal(a, b)
|
||||
#define assert_memory_equal(size, a, b) munit_assert_memory_equal(size, a, b)
|
||||
#define assert_memory_not_equal(size, a, b) munit_assert_memory_not_equal(size, a, b)
|
||||
#define assert_ptr_equal(a, b) munit_assert_ptr_equal(a, b)
|
||||
#define assert_ptr_not_equal(a, b) munit_assert_ptr_not_equal(a, b)
|
||||
#define assert_ptr_null(ptr) munit_assert_null_equal(ptr)
|
||||
#define assert_ptr_not_null(ptr) munit_assert_not_null(ptr)
|
||||
|
||||
#define assert_null(ptr) munit_assert_null(ptr)
|
||||
#define assert_not_null(ptr) munit_assert_not_null(ptr)
|
||||
|
||||
#endif /* defined(MUNIT_ENABLE_ASSERT_ALIASES) */
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined(MUNIT_H) */
|
||||
|
||||
#if defined(MUNIT_ENABLE_ASSERT_ALIASES)
|
||||
# if defined(assert)
|
||||
# undef assert
|
||||
# endif
|
||||
# define assert(expr) munit_assert(expr)
|
||||
#endif
|
6
test/test.c
Normal file
6
test/test.c
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include "stdio.h"
|
||||
|
||||
int main(int argc, char * * argv)
|
||||
{
|
||||
printf("Hello Nixers!\n");
|
||||
}
|
Loading…
Reference in a new issue