Initial pristine autosetup bits.
FossilOrigin-Name: dfb1e7f0cce9bc79c43eee7208cad0e2df562b2bc9705d3a36fd78f86c75495b
This commit is contained in:
@@ -0,0 +1,10 @@
|
|||||||
|
# Initial auto.def created by 'autosetup --init=make'
|
||||||
|
|
||||||
|
use cc
|
||||||
|
|
||||||
|
# Add any user options here
|
||||||
|
options {
|
||||||
|
}
|
||||||
|
|
||||||
|
make-config-header config.h
|
||||||
|
make-template Makefile.in
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
Unless explicitly stated, all files which form part of autosetup
|
||||||
|
are released under the following license:
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
autosetup - A build environment "autoconfigurator"
|
||||||
|
|
||||||
|
Copyright (c) 2010-2011, WorkWare Systems <http://workware.net.au/>
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following
|
||||||
|
disclaimer in the documentation and/or other materials
|
||||||
|
provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE WORKWARE SYSTEMS ``AS IS'' AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WORKWARE
|
||||||
|
SYSTEMS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
The views and conclusions contained in the software and documentation
|
||||||
|
are those of the authors and should not be interpreted as representing
|
||||||
|
official policies, either expressed or implied, of WorkWare Systems.
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
README.autosetup created by autosetup v0.7.2
|
||||||
|
|
||||||
|
This is the autosetup directory for a local install of autosetup.
|
||||||
|
It contains autosetup, support files and loadable modules.
|
||||||
|
|
||||||
|
*.tcl files in this directory are optional modules which
|
||||||
|
can be loaded with the 'use' directive.
|
||||||
|
|
||||||
|
*.auto files in this directory are auto-loaded.
|
||||||
|
|
||||||
|
For more information, see https://msteveb.github.io/autosetup/
|
||||||
Executable
+2534
File diff suppressed because it is too large
Load Diff
Executable
+1815
File diff suppressed because it is too large
Load Diff
Executable
+2354
File diff suppressed because it is too large
Load Diff
Executable
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Looks for a suitable tclsh or jimsh in the PATH
|
||||||
|
# If not found, builds a bootstrap jimsh in current dir from source
|
||||||
|
# Prefer $autosetup_tclsh if is set in the environment (unless ./jimsh0 works)
|
||||||
|
# If an argument is given, use that as the test instead of autosetup-test-tclsh
|
||||||
|
d="`dirname "$0"`"
|
||||||
|
for tclsh in ./jimsh0 $autosetup_tclsh jimsh tclsh tclsh8.5 tclsh8.6 tclsh8.7; do
|
||||||
|
{ $tclsh "$d/${1-autosetup-test-tclsh}"; } 2>/dev/null && exit 0
|
||||||
|
done
|
||||||
|
echo 1>&2 "No installed jimsh or tclsh, building local bootstrap jimsh0"
|
||||||
|
for cc in ${CC_FOR_BUILD:-cc} gcc; do
|
||||||
|
{ $cc -o jimsh0 "$d/jimsh0.c"; } 2>&1 >/dev/null || continue
|
||||||
|
./jimsh0 "$d/${1-autosetup-test-tclsh}" && exit 0
|
||||||
|
done
|
||||||
|
echo 1>&2 "No working C compiler found. Tried ${CC_FOR_BUILD:-cc} and gcc."
|
||||||
|
echo false
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# A small Tcl script to verify that the chosen
|
||||||
|
# interpreter works. Sometimes we might e.g. pick up
|
||||||
|
# an interpreter for a different arch.
|
||||||
|
# Outputs the full path to the interpreter
|
||||||
|
|
||||||
|
if {[catch {info version} version] == 0} {
|
||||||
|
# This is Jim Tcl
|
||||||
|
if {$version >= 0.72} {
|
||||||
|
# Ensure that regexp works
|
||||||
|
regexp (a.*?) a
|
||||||
|
puts [info nameofexecutable]
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
} elseif {[catch {info tclversion} version] == 0} {
|
||||||
|
if {$version >= 8.5 && ![string match 8.5a* [info patchlevel]]} {
|
||||||
|
puts [info nameofexecutable]
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit 1
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Copyright (c) 2011 WorkWare Systems http://www.workware.net.au/
|
||||||
|
# All rights reserved
|
||||||
|
|
||||||
|
# @synopsis:
|
||||||
|
#
|
||||||
|
# The 'cc-db' module provides a knowledge-base of system idiosyncrasies.
|
||||||
|
# In general, this module can always be included.
|
||||||
|
|
||||||
|
use cc
|
||||||
|
|
||||||
|
options {}
|
||||||
|
|
||||||
|
# openbsd needs sys/types.h to detect some system headers
|
||||||
|
cc-include-needs sys/socket.h sys/types.h
|
||||||
|
cc-include-needs netinet/in.h sys/types.h
|
||||||
@@ -0,0 +1,187 @@
|
|||||||
|
# Copyright (c) 2011 WorkWare Systems http://www.workware.net.au/
|
||||||
|
# All rights reserved
|
||||||
|
|
||||||
|
# @synopsis:
|
||||||
|
#
|
||||||
|
# Provides a library of common tests on top of the 'cc' module.
|
||||||
|
|
||||||
|
use cc
|
||||||
|
|
||||||
|
# @cc-check-lfs
|
||||||
|
#
|
||||||
|
# The equivalent of the 'AC_SYS_LARGEFILE' macro.
|
||||||
|
#
|
||||||
|
# defines 'HAVE_LFS' if LFS is available,
|
||||||
|
# and defines '_FILE_OFFSET_BITS=64' if necessary
|
||||||
|
#
|
||||||
|
# Returns 1 if 'LFS' is available or 0 otherwise
|
||||||
|
#
|
||||||
|
proc cc-check-lfs {} {
|
||||||
|
cc-check-includes sys/types.h
|
||||||
|
msg-checking "Checking if -D_FILE_OFFSET_BITS=64 is needed..."
|
||||||
|
set lfs 1
|
||||||
|
if {[msg-quiet cc-with {-includes sys/types.h} {cc-check-sizeof off_t}] == 8} {
|
||||||
|
msg-result no
|
||||||
|
} elseif {[msg-quiet cc-with {-includes sys/types.h -cflags -D_FILE_OFFSET_BITS=64} {cc-check-sizeof off_t}] == 8} {
|
||||||
|
define _FILE_OFFSET_BITS 64
|
||||||
|
msg-result yes
|
||||||
|
} else {
|
||||||
|
set lfs 0
|
||||||
|
msg-result none
|
||||||
|
}
|
||||||
|
define-feature lfs $lfs
|
||||||
|
return $lfs
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-endian
|
||||||
|
#
|
||||||
|
# The equivalent of the 'AC_C_BIGENDIAN' macro.
|
||||||
|
#
|
||||||
|
# defines 'HAVE_BIG_ENDIAN' if endian is known to be big,
|
||||||
|
# or 'HAVE_LITTLE_ENDIAN' if endian is known to be little.
|
||||||
|
#
|
||||||
|
# Returns 1 if determined, or 0 if not.
|
||||||
|
#
|
||||||
|
proc cc-check-endian {} {
|
||||||
|
cc-check-includes sys/types.h sys/param.h
|
||||||
|
set rc 0
|
||||||
|
msg-checking "Checking endian..."
|
||||||
|
cc-with {-includes {sys/types.h sys/param.h}} {
|
||||||
|
if {[cctest -code {
|
||||||
|
#if !defined(BIG_ENDIAN) || !defined(BYTE_ORDER)
|
||||||
|
#error unknown
|
||||||
|
#elif BYTE_ORDER != BIG_ENDIAN
|
||||||
|
#error little
|
||||||
|
#endif
|
||||||
|
}]} {
|
||||||
|
define-feature big-endian
|
||||||
|
msg-result "big"
|
||||||
|
set rc 1
|
||||||
|
} elseif {[cctest -code {
|
||||||
|
#if !defined(LITTLE_ENDIAN) || !defined(BYTE_ORDER)
|
||||||
|
#error unknown
|
||||||
|
#elif BYTE_ORDER != LITTLE_ENDIAN
|
||||||
|
#error big
|
||||||
|
#endif
|
||||||
|
}]} {
|
||||||
|
define-feature little-endian
|
||||||
|
msg-result "little"
|
||||||
|
set rc 1
|
||||||
|
} else {
|
||||||
|
msg-result "unknown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $rc
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-flags flag ?...?
|
||||||
|
#
|
||||||
|
# Checks whether the given C/C++ compiler flags can be used. Defines feature
|
||||||
|
# names prefixed with 'HAVE_CFLAG' and 'HAVE_CXXFLAG' respectively, and
|
||||||
|
# appends working flags to '-cflags' and 'AS_CFLAGS' or 'AS_CXXFLAGS'.
|
||||||
|
proc cc-check-flags {args} {
|
||||||
|
set result 1
|
||||||
|
array set opts [cc-get-settings]
|
||||||
|
switch -exact -- $opts(-lang) {
|
||||||
|
c++ {
|
||||||
|
set lang C++
|
||||||
|
set prefix CXXFLAG
|
||||||
|
}
|
||||||
|
c {
|
||||||
|
set lang C
|
||||||
|
set prefix CFLAG
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
autosetup-error "cc-check-flags failed with unknown language: $opts(-lang)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach flag $args {
|
||||||
|
msg-checking "Checking whether the $lang compiler accepts $flag..."
|
||||||
|
if {[cctest -cflags $flag]} {
|
||||||
|
msg-result yes
|
||||||
|
define-feature $prefix$flag
|
||||||
|
cc-with [list -cflags [list $flag]]
|
||||||
|
define-append AS_${prefix}S $flag
|
||||||
|
} else {
|
||||||
|
msg-result no
|
||||||
|
set result 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $result
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-standards ver ?...?
|
||||||
|
#
|
||||||
|
# Checks whether the C/C++ compiler accepts one of the specified '-std=$ver'
|
||||||
|
# options, and appends the first working one to '-cflags' and 'AS_CFLAGS' or
|
||||||
|
# 'AS_CXXFLAGS'.
|
||||||
|
proc cc-check-standards {args} {
|
||||||
|
array set opts [cc-get-settings]
|
||||||
|
foreach std $args {
|
||||||
|
if {[cc-check-flags -std=$std]} {
|
||||||
|
return $std
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks whether $keyword is usable as alignof
|
||||||
|
proc cctest_alignof {keyword} {
|
||||||
|
msg-checking "Checking for $keyword..."
|
||||||
|
if {[cctest -code "int x = ${keyword}(char), y = ${keyword}('x');"]} then {
|
||||||
|
msg-result ok
|
||||||
|
define-feature $keyword
|
||||||
|
} else {
|
||||||
|
msg-result "not found"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-c11
|
||||||
|
#
|
||||||
|
# Checks for several C11/C++11 extensions and their alternatives. Currently
|
||||||
|
# checks for '_Static_assert', '_Alignof', '__alignof__', '__alignof'.
|
||||||
|
proc cc-check-c11 {} {
|
||||||
|
msg-checking "Checking for _Static_assert..."
|
||||||
|
if {[cctest -code {
|
||||||
|
_Static_assert(1, "static assertions are available");
|
||||||
|
}]} then {
|
||||||
|
msg-result ok
|
||||||
|
define-feature _Static_assert
|
||||||
|
} else {
|
||||||
|
msg-result "not found"
|
||||||
|
}
|
||||||
|
|
||||||
|
cctest_alignof _Alignof
|
||||||
|
cctest_alignof __alignof__
|
||||||
|
cctest_alignof __alignof
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-alloca
|
||||||
|
#
|
||||||
|
# The equivalent of the 'AC_FUNC_ALLOCA' macro.
|
||||||
|
#
|
||||||
|
# Checks for the existence of 'alloca'
|
||||||
|
# defines 'HAVE_ALLOCA' and returns 1 if it exists.
|
||||||
|
proc cc-check-alloca {} {
|
||||||
|
cc-check-some-feature alloca {
|
||||||
|
cctest -includes alloca.h -code { alloca (2 * sizeof (int)); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-signal-return-type
|
||||||
|
#
|
||||||
|
# The equivalent of the 'AC_TYPE_SIGNAL' macro.
|
||||||
|
#
|
||||||
|
# defines 'RETSIGTYPE' to 'int' or 'void'.
|
||||||
|
proc cc-signal-return-type {} {
|
||||||
|
msg-checking "Checking return type of signal handlers..."
|
||||||
|
cc-with {-includes {sys/types.h signal.h}} {
|
||||||
|
if {[cctest -code {return *(signal (0, 0)) (0) == 1;}]} {
|
||||||
|
set type int
|
||||||
|
} else {
|
||||||
|
set type void
|
||||||
|
}
|
||||||
|
define RETSIGTYPE $type
|
||||||
|
msg-result $type
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/
|
||||||
|
# All rights reserved
|
||||||
|
|
||||||
|
# @synopsis:
|
||||||
|
#
|
||||||
|
# The 'cc-shared' module provides support for shared libraries and shared objects.
|
||||||
|
# It defines the following variables:
|
||||||
|
#
|
||||||
|
## SH_CFLAGS Flags to use compiling sources destined for a shared library
|
||||||
|
## SH_LDFLAGS Flags to use linking (creating) a shared library
|
||||||
|
## SH_SOPREFIX Prefix to use to set the soname when creating a shared library
|
||||||
|
## SH_SOFULLPATH Set to 1 if the shared library soname should include the full install path
|
||||||
|
## SH_SOEXT Extension for shared libs
|
||||||
|
## SH_SOEXTVER Format for versioned shared libs - %s = version
|
||||||
|
## SHOBJ_CFLAGS Flags to use compiling sources destined for a shared object
|
||||||
|
## SHOBJ_LDFLAGS Flags to use linking a shared object, undefined symbols allowed
|
||||||
|
## SHOBJ_LDFLAGS_R - as above, but all symbols must be resolved
|
||||||
|
## SH_LINKRPATH Format for setting the rpath when linking an executable, %s = path
|
||||||
|
## SH_LINKFLAGS Flags to use linking an executable which will load shared objects
|
||||||
|
## LD_LIBRARY_PATH Environment variable which specifies path to shared libraries
|
||||||
|
## STRIPLIBFLAGS Arguments to strip a dynamic library
|
||||||
|
|
||||||
|
options {}
|
||||||
|
|
||||||
|
# Defaults: gcc on unix
|
||||||
|
define SHOBJ_CFLAGS -fPIC
|
||||||
|
define SHOBJ_LDFLAGS -shared
|
||||||
|
define SH_CFLAGS -fPIC
|
||||||
|
define SH_LDFLAGS -shared
|
||||||
|
define SH_LINKFLAGS -rdynamic
|
||||||
|
define SH_LINKRPATH "-Wl,-rpath -Wl,%s"
|
||||||
|
define SH_SOEXT .so
|
||||||
|
define SH_SOEXTVER .so.%s
|
||||||
|
define SH_SOPREFIX -Wl,-soname,
|
||||||
|
define LD_LIBRARY_PATH LD_LIBRARY_PATH
|
||||||
|
define STRIPLIBFLAGS --strip-unneeded
|
||||||
|
|
||||||
|
# Note: This is a helpful reference for identifying the toolchain
|
||||||
|
# http://sourceforge.net/apps/mediawiki/predef/index.php?title=Compilers
|
||||||
|
|
||||||
|
switch -glob -- [get-define host] {
|
||||||
|
*-*-darwin* {
|
||||||
|
define SHOBJ_CFLAGS "-dynamic -fno-common"
|
||||||
|
define SHOBJ_LDFLAGS "-bundle -undefined dynamic_lookup"
|
||||||
|
define SHOBJ_LDFLAGS_R -bundle
|
||||||
|
define SH_CFLAGS -dynamic
|
||||||
|
define SH_LDFLAGS -dynamiclib
|
||||||
|
define SH_LINKFLAGS ""
|
||||||
|
define SH_SOEXT .dylib
|
||||||
|
define SH_SOEXTVER .%s.dylib
|
||||||
|
define SH_SOPREFIX -Wl,-install_name,
|
||||||
|
define SH_SOFULLPATH
|
||||||
|
define LD_LIBRARY_PATH DYLD_LIBRARY_PATH
|
||||||
|
define STRIPLIBFLAGS -x
|
||||||
|
}
|
||||||
|
*-*-ming* - *-*-cygwin - *-*-msys {
|
||||||
|
define SHOBJ_CFLAGS ""
|
||||||
|
define SHOBJ_LDFLAGS -shared
|
||||||
|
define SH_CFLAGS ""
|
||||||
|
define SH_LDFLAGS -shared
|
||||||
|
define SH_LINKRPATH ""
|
||||||
|
define SH_LINKFLAGS ""
|
||||||
|
define SH_SOEXT .dll
|
||||||
|
define SH_SOEXTVER .dll
|
||||||
|
define SH_SOPREFIX ""
|
||||||
|
define LD_LIBRARY_PATH PATH
|
||||||
|
}
|
||||||
|
sparc* {
|
||||||
|
if {[msg-quiet cc-check-decls __SUNPRO_C]} {
|
||||||
|
msg-result "Found sun stdio compiler"
|
||||||
|
# sun stdio compiler
|
||||||
|
# XXX: These haven't been fully tested.
|
||||||
|
define SHOBJ_CFLAGS -KPIC
|
||||||
|
define SHOBJ_LDFLAGS "-G"
|
||||||
|
define SH_CFLAGS -KPIC
|
||||||
|
define SH_LINKFLAGS -Wl,-export-dynamic
|
||||||
|
define SH_SOPREFIX -Wl,-h,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*-*-solaris* {
|
||||||
|
if {[msg-quiet cc-check-decls __SUNPRO_C]} {
|
||||||
|
msg-result "Found sun stdio compiler"
|
||||||
|
# sun stdio compiler
|
||||||
|
# XXX: These haven't been fully tested.
|
||||||
|
define SHOBJ_CFLAGS -KPIC
|
||||||
|
define SHOBJ_LDFLAGS "-G"
|
||||||
|
define SH_CFLAGS -KPIC
|
||||||
|
define SH_LINKFLAGS -Wl,-export-dynamic
|
||||||
|
define SH_SOPREFIX -Wl,-h,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*-*-hpux {
|
||||||
|
# XXX: These haven't been tested
|
||||||
|
define SHOBJ_CFLAGS "+O3 +z"
|
||||||
|
define SHOBJ_LDFLAGS -b
|
||||||
|
define SH_CFLAGS +z
|
||||||
|
define SH_LINKFLAGS -Wl,+s
|
||||||
|
define LD_LIBRARY_PATH SHLIB_PATH
|
||||||
|
}
|
||||||
|
*-*-haiku {
|
||||||
|
define SHOBJ_CFLAGS ""
|
||||||
|
define SHOBJ_LDFLAGS -shared
|
||||||
|
define SH_CFLAGS ""
|
||||||
|
define SH_LDFLAGS -shared
|
||||||
|
define SH_LINKFLAGS ""
|
||||||
|
define SH_SOPREFIX ""
|
||||||
|
define LD_LIBRARY_PATH LIBRARY_PATH
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {![is-defined SHOBJ_LDFLAGS_R]} {
|
||||||
|
define SHOBJ_LDFLAGS_R [get-define SHOBJ_LDFLAGS]
|
||||||
|
}
|
||||||
@@ -0,0 +1,756 @@
|
|||||||
|
# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/
|
||||||
|
# All rights reserved
|
||||||
|
|
||||||
|
# @synopsis:
|
||||||
|
#
|
||||||
|
# The 'cc' module supports checking various 'features' of the C or C++
|
||||||
|
# compiler/linker environment. Common commands are 'cc-check-includes',
|
||||||
|
# 'cc-check-types', 'cc-check-functions', 'cc-with', 'make-config-header' and 'make-template'.
|
||||||
|
#
|
||||||
|
# The following environment variables are used if set:
|
||||||
|
#
|
||||||
|
## CC - C compiler
|
||||||
|
## CXX - C++ compiler
|
||||||
|
## CPP - C preprocessor
|
||||||
|
## CCACHE - Set to "none" to disable automatic use of ccache
|
||||||
|
## CPPFLAGS - Additional C preprocessor compiler flags (C and C++), before CFLAGS, CXXFLAGS
|
||||||
|
## CFLAGS - Additional C compiler flags
|
||||||
|
## CXXFLAGS - Additional C++ compiler flags
|
||||||
|
## LDFLAGS - Additional compiler flags during linking
|
||||||
|
## LINKFLAGS - ?How is this different from LDFLAGS?
|
||||||
|
## LIBS - Additional libraries to use (for all tests)
|
||||||
|
## CROSS - Tool prefix for cross compilation
|
||||||
|
#
|
||||||
|
# The following variables are defined from the corresponding
|
||||||
|
# environment variables if set.
|
||||||
|
#
|
||||||
|
## CC_FOR_BUILD
|
||||||
|
## LD
|
||||||
|
|
||||||
|
use system
|
||||||
|
|
||||||
|
options {}
|
||||||
|
|
||||||
|
# Checks for the existence of the given function by linking
|
||||||
|
#
|
||||||
|
proc cctest_function {function} {
|
||||||
|
cctest -link 1 -declare "extern void $function\(void);" -code "$function\();"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks for the existence of the given type by compiling
|
||||||
|
proc cctest_type {type} {
|
||||||
|
cctest -code "$type _x;"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks for the existence of the given type/structure member.
|
||||||
|
# e.g. "struct stat.st_mtime"
|
||||||
|
proc cctest_member {struct_member} {
|
||||||
|
# split at the first dot
|
||||||
|
regexp {^([^.]+)[.](.*)$} $struct_member -> struct member
|
||||||
|
cctest -code "static $struct _s; return sizeof(_s.$member);"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks for the existence of the given define by compiling
|
||||||
|
#
|
||||||
|
proc cctest_define {name} {
|
||||||
|
cctest -code "#ifndef $name\n#error not defined\n#endif"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks for the existence of the given name either as
|
||||||
|
# a macro (#define) or an rvalue (such as an enum)
|
||||||
|
#
|
||||||
|
proc cctest_decl {name} {
|
||||||
|
cctest -code "#ifndef $name\n(void)$name;\n#endif"
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-sizeof type ...
|
||||||
|
#
|
||||||
|
# Checks the size of the given types (between 1 and 32, inclusive).
|
||||||
|
# Defines a variable with the size determined, or 'unknown' otherwise.
|
||||||
|
# e.g. for type 'long long', defines 'SIZEOF_LONG_LONG'.
|
||||||
|
# Returns the size of the last type.
|
||||||
|
#
|
||||||
|
proc cc-check-sizeof {args} {
|
||||||
|
foreach type $args {
|
||||||
|
msg-checking "Checking for sizeof $type..."
|
||||||
|
set size unknown
|
||||||
|
# Try the most common sizes first
|
||||||
|
foreach i {4 8 1 2 16 32} {
|
||||||
|
if {[cctest -code "static int _x\[sizeof($type) == $i ? 1 : -1\] = { 1 };"]} {
|
||||||
|
set size $i
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
msg-result $size
|
||||||
|
set define [feature-define-name $type SIZEOF_]
|
||||||
|
define $define $size
|
||||||
|
}
|
||||||
|
# Return the last result
|
||||||
|
get-define $define
|
||||||
|
}
|
||||||
|
|
||||||
|
# Checks for each feature in $list by using the given script.
|
||||||
|
#
|
||||||
|
# When the script is evaluated, $each is set to the feature
|
||||||
|
# being checked, and $extra is set to any additional cctest args.
|
||||||
|
#
|
||||||
|
# Returns 1 if all features were found, or 0 otherwise.
|
||||||
|
proc cc-check-some-feature {list script} {
|
||||||
|
set ret 1
|
||||||
|
foreach each $list {
|
||||||
|
if {![check-feature $each $script]} {
|
||||||
|
set ret 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $ret
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-includes includes ...
|
||||||
|
#
|
||||||
|
# Checks that the given include files can be used.
|
||||||
|
proc cc-check-includes {args} {
|
||||||
|
cc-check-some-feature $args {
|
||||||
|
set with {}
|
||||||
|
if {[dict exists $::autosetup(cc-include-deps) $each]} {
|
||||||
|
set deps [dict keys [dict get $::autosetup(cc-include-deps) $each]]
|
||||||
|
msg-quiet cc-check-includes {*}$deps
|
||||||
|
foreach i $deps {
|
||||||
|
if {[have-feature $i]} {
|
||||||
|
lappend with $i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if {[llength $with]} {
|
||||||
|
cc-with [list -includes $with] {
|
||||||
|
cctest -includes $each
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cctest -includes $each
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-include-needs include required ...
|
||||||
|
#
|
||||||
|
# Ensures that when checking for '$include', a check is first
|
||||||
|
# made for each '$required' file, and if found, it is included with '#include'.
|
||||||
|
proc cc-include-needs {file args} {
|
||||||
|
foreach depfile $args {
|
||||||
|
dict set ::autosetup(cc-include-deps) $file $depfile 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-types type ...
|
||||||
|
#
|
||||||
|
# Checks that the types exist.
|
||||||
|
proc cc-check-types {args} {
|
||||||
|
cc-check-some-feature $args {
|
||||||
|
cctest_type $each
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-defines define ...
|
||||||
|
#
|
||||||
|
# Checks that the given preprocessor symbols are defined.
|
||||||
|
proc cc-check-defines {args} {
|
||||||
|
cc-check-some-feature $args {
|
||||||
|
cctest_define $each
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-decls name ...
|
||||||
|
#
|
||||||
|
# Checks that each given name is either a preprocessor symbol or rvalue
|
||||||
|
# such as an enum. Note that the define used is 'HAVE_DECL_xxx'
|
||||||
|
# rather than 'HAVE_xxx'.
|
||||||
|
proc cc-check-decls {args} {
|
||||||
|
set ret 1
|
||||||
|
foreach name $args {
|
||||||
|
msg-checking "Checking for $name..."
|
||||||
|
set r [cctest_decl $name]
|
||||||
|
define-feature "decl $name" $r
|
||||||
|
if {$r} {
|
||||||
|
msg-result "ok"
|
||||||
|
} else {
|
||||||
|
msg-result "not found"
|
||||||
|
set ret 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $ret
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-functions function ...
|
||||||
|
#
|
||||||
|
# Checks that the given functions exist (can be linked).
|
||||||
|
proc cc-check-functions {args} {
|
||||||
|
cc-check-some-feature $args {
|
||||||
|
cctest_function $each
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-members type.member ...
|
||||||
|
#
|
||||||
|
# Checks that the given type/structure members exist.
|
||||||
|
# A structure member is of the form 'struct stat.st_mtime'.
|
||||||
|
proc cc-check-members {args} {
|
||||||
|
cc-check-some-feature $args {
|
||||||
|
cctest_member $each
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-function-in-lib function libs ?otherlibs?
|
||||||
|
#
|
||||||
|
# Checks that the given function can be found in one of the libs.
|
||||||
|
#
|
||||||
|
# First checks for no library required, then checks each of the libraries
|
||||||
|
# in turn.
|
||||||
|
#
|
||||||
|
# If the function is found, the feature is defined and 'lib_$function' is defined
|
||||||
|
# to '-l$lib' where the function was found, or "" if no library required.
|
||||||
|
# In addition, '-l$lib' is prepended to the 'LIBS' define.
|
||||||
|
#
|
||||||
|
# If additional libraries may be needed for linking, they should be specified
|
||||||
|
# with '$extralibs' as '-lotherlib1 -lotherlib2'.
|
||||||
|
# These libraries are not automatically added to 'LIBS'.
|
||||||
|
#
|
||||||
|
# Returns 1 if found or 0 if not.
|
||||||
|
#
|
||||||
|
proc cc-check-function-in-lib {function libs {otherlibs {}}} {
|
||||||
|
msg-checking "Checking libs for $function..."
|
||||||
|
set found 0
|
||||||
|
cc-with [list -libs $otherlibs] {
|
||||||
|
if {[cctest_function $function]} {
|
||||||
|
msg-result "none needed"
|
||||||
|
define lib_$function ""
|
||||||
|
incr found
|
||||||
|
} else {
|
||||||
|
foreach lib $libs {
|
||||||
|
cc-with [list -libs -l$lib] {
|
||||||
|
if {[cctest_function $function]} {
|
||||||
|
msg-result -l$lib
|
||||||
|
define lib_$function -l$lib
|
||||||
|
# prepend to LIBS
|
||||||
|
define LIBS "-l$lib [get-define LIBS]"
|
||||||
|
incr found
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
define-feature $function $found
|
||||||
|
if {!$found} {
|
||||||
|
msg-result "no"
|
||||||
|
}
|
||||||
|
return $found
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-tools tool ...
|
||||||
|
#
|
||||||
|
# Checks for existence of the given compiler tools, taking
|
||||||
|
# into account any cross compilation prefix.
|
||||||
|
#
|
||||||
|
# For example, when checking for 'ar', first 'AR' is checked on the command
|
||||||
|
# line and then in the environment. If not found, '${host}-ar' or
|
||||||
|
# simply 'ar' is assumed depending upon whether cross compiling.
|
||||||
|
# The path is searched for this executable, and if found 'AR' is defined
|
||||||
|
# to the executable name.
|
||||||
|
# Note that even when cross compiling, the simple 'ar' is used as a fallback,
|
||||||
|
# but a warning is generated. This is necessary for some toolchains.
|
||||||
|
#
|
||||||
|
# It is an error if the executable is not found.
|
||||||
|
#
|
||||||
|
proc cc-check-tools {args} {
|
||||||
|
foreach tool $args {
|
||||||
|
set TOOL [string toupper $tool]
|
||||||
|
set exe [get-env $TOOL [get-define cross]$tool]
|
||||||
|
if {[find-executable $exe]} {
|
||||||
|
define $TOOL $exe
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if {[find-executable $tool]} {
|
||||||
|
msg-result "Warning: Failed to find $exe, falling back to $tool which may be incorrect"
|
||||||
|
define $TOOL $tool
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
user-error "Failed to find $exe"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-check-progs prog ...
|
||||||
|
#
|
||||||
|
# Checks for existence of the given executables on the path.
|
||||||
|
#
|
||||||
|
# For example, when checking for 'grep', the path is searched for
|
||||||
|
# the executable, 'grep', and if found 'GREP' is defined as 'grep'.
|
||||||
|
#
|
||||||
|
# If the executable is not found, the variable is defined as 'false'.
|
||||||
|
# Returns 1 if all programs were found, or 0 otherwise.
|
||||||
|
#
|
||||||
|
proc cc-check-progs {args} {
|
||||||
|
set failed 0
|
||||||
|
foreach prog $args {
|
||||||
|
set PROG [string toupper $prog]
|
||||||
|
msg-checking "Checking for $prog..."
|
||||||
|
if {![find-executable $prog]} {
|
||||||
|
msg-result no
|
||||||
|
define $PROG false
|
||||||
|
incr failed
|
||||||
|
} else {
|
||||||
|
msg-result ok
|
||||||
|
define $PROG $prog
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expr {!$failed}
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-path-progs prog ...
|
||||||
|
#
|
||||||
|
# Like cc-check-progs, but sets the define to the full path rather
|
||||||
|
# than just the program name.
|
||||||
|
#
|
||||||
|
proc cc-path-progs {args} {
|
||||||
|
set failed 0
|
||||||
|
foreach prog $args {
|
||||||
|
set PROG [string toupper $prog]
|
||||||
|
msg-checking "Checking for $prog..."
|
||||||
|
set path [find-executable-path $prog]
|
||||||
|
if {$path eq ""} {
|
||||||
|
msg-result no
|
||||||
|
define $PROG false
|
||||||
|
incr failed
|
||||||
|
} else {
|
||||||
|
msg-result $path
|
||||||
|
define $PROG $path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expr {!$failed}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Adds the given settings to $::autosetup(ccsettings) and
|
||||||
|
# returns the old settings.
|
||||||
|
#
|
||||||
|
proc cc-add-settings {settings} {
|
||||||
|
if {[llength $settings] % 2} {
|
||||||
|
autosetup-error "settings list is missing a value: $settings"
|
||||||
|
}
|
||||||
|
|
||||||
|
set prev [cc-get-settings]
|
||||||
|
# workaround a bug in some versions of jimsh by forcing
|
||||||
|
# conversion of $prev to a list
|
||||||
|
llength $prev
|
||||||
|
|
||||||
|
array set new $prev
|
||||||
|
|
||||||
|
foreach {name value} $settings {
|
||||||
|
switch -exact -- $name {
|
||||||
|
-cflags - -includes {
|
||||||
|
# These are given as lists
|
||||||
|
lappend new($name) {*}[list-non-empty $value]
|
||||||
|
}
|
||||||
|
-declare {
|
||||||
|
lappend new($name) $value
|
||||||
|
}
|
||||||
|
-libs {
|
||||||
|
# Note that new libraries are added before previous libraries
|
||||||
|
set new($name) [list {*}[list-non-empty $value] {*}$new($name)]
|
||||||
|
}
|
||||||
|
-link - -lang - -nooutput {
|
||||||
|
set new($name) $value
|
||||||
|
}
|
||||||
|
-source - -sourcefile - -code {
|
||||||
|
# XXX: These probably are only valid directly from cctest
|
||||||
|
set new($name) $value
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
autosetup-error "unknown cctest setting: $name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cc-store-settings [array get new]
|
||||||
|
|
||||||
|
return $prev
|
||||||
|
}
|
||||||
|
|
||||||
|
proc cc-store-settings {new} {
|
||||||
|
set ::autosetup(ccsettings) $new
|
||||||
|
}
|
||||||
|
|
||||||
|
proc cc-get-settings {} {
|
||||||
|
return $::autosetup(ccsettings)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Similar to cc-add-settings, but each given setting
|
||||||
|
# simply replaces the existing value.
|
||||||
|
#
|
||||||
|
# Returns the previous settings
|
||||||
|
proc cc-update-settings {args} {
|
||||||
|
set prev [cc-get-settings]
|
||||||
|
cc-store-settings [dict merge $prev $args]
|
||||||
|
return $prev
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cc-with settings ?{ script }?
|
||||||
|
#
|
||||||
|
# Sets the given 'cctest' settings and then runs the tests in '$script'.
|
||||||
|
# Note that settings such as '-lang' replace the current setting, while
|
||||||
|
# those such as '-includes' are appended to the existing setting.
|
||||||
|
#
|
||||||
|
# If no script is given, the settings become the default for the remainder
|
||||||
|
# of the 'auto.def' file.
|
||||||
|
#
|
||||||
|
## cc-with {-lang c++} {
|
||||||
|
## # This will check with the C++ compiler
|
||||||
|
## cc-check-types bool
|
||||||
|
## cc-with {-includes signal.h} {
|
||||||
|
## # This will check with the C++ compiler, signal.h and any existing includes.
|
||||||
|
## ...
|
||||||
|
## }
|
||||||
|
## # back to just the C++ compiler
|
||||||
|
## }
|
||||||
|
#
|
||||||
|
# The '-libs' setting is special in that newer values are added *before* earlier ones.
|
||||||
|
#
|
||||||
|
## cc-with {-libs {-lc -lm}} {
|
||||||
|
## cc-with {-libs -ldl} {
|
||||||
|
## cctest -libs -lsocket ...
|
||||||
|
## # libs will be in this order: -lsocket -ldl -lc -lm
|
||||||
|
## }
|
||||||
|
## }
|
||||||
|
#
|
||||||
|
# If you wish to invoke something like cc-check-flags but not have -cflags updated,
|
||||||
|
# use the following idiom:
|
||||||
|
#
|
||||||
|
## cc-with {} {
|
||||||
|
## cc-check-flags ...
|
||||||
|
## }
|
||||||
|
proc cc-with {settings args} {
|
||||||
|
if {[llength $args] == 0} {
|
||||||
|
cc-add-settings $settings
|
||||||
|
} elseif {[llength $args] > 1} {
|
||||||
|
autosetup-error "usage: cc-with settings ?script?"
|
||||||
|
} else {
|
||||||
|
set save [cc-add-settings $settings]
|
||||||
|
set rc [catch {uplevel 1 [lindex $args 0]} result info]
|
||||||
|
cc-store-settings $save
|
||||||
|
if {$rc != 0} {
|
||||||
|
return -code [dict get $info -code] $result
|
||||||
|
}
|
||||||
|
return $result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# @cctest ?settings?
|
||||||
|
#
|
||||||
|
# Low level C/C++ compiler checker. Compiles and or links a small C program
|
||||||
|
# according to the arguments and returns 1 if OK, or 0 if not.
|
||||||
|
#
|
||||||
|
# Supported settings are:
|
||||||
|
#
|
||||||
|
## -cflags cflags A list of flags to pass to the compiler
|
||||||
|
## -includes list A list of includes, e.g. {stdlib.h stdio.h}
|
||||||
|
## -declare code Code to declare before main()
|
||||||
|
## -link 1 Don't just compile, link too
|
||||||
|
## -lang c|c++ Use the C (default) or C++ compiler
|
||||||
|
## -libs liblist List of libraries to link, e.g. {-ldl -lm}
|
||||||
|
## -code code Code to compile in the body of main()
|
||||||
|
## -source code Compile a complete program. Ignore -includes, -declare and -code
|
||||||
|
## -sourcefile file Shorthand for -source [readfile [get-define srcdir]/$file]
|
||||||
|
## -nooutput 1 Treat any compiler output (e.g. a warning) as an error
|
||||||
|
#
|
||||||
|
# Unless '-source' or '-sourcefile' is specified, the C program looks like:
|
||||||
|
#
|
||||||
|
## #include <firstinclude> /* same for remaining includes in the list */
|
||||||
|
## declare-code /* any code in -declare, verbatim */
|
||||||
|
## int main(void) {
|
||||||
|
## code /* any code in -code, verbatim */
|
||||||
|
## return 0;
|
||||||
|
## }
|
||||||
|
#
|
||||||
|
# And the command line looks like:
|
||||||
|
#
|
||||||
|
## CC -cflags CFLAGS CPPFLAGS conftest.c -o conftest.o
|
||||||
|
## CXX -cflags CXXFLAGS CPPFLAGS conftest.cpp -o conftest.o
|
||||||
|
#
|
||||||
|
# And if linking:
|
||||||
|
#
|
||||||
|
## CC LDFLAGS -cflags CFLAGS conftest.c -o conftest -libs LIBS
|
||||||
|
## CXX LDFLAGS -cflags CXXFLAGS conftest.c -o conftest -libs LIBS
|
||||||
|
#
|
||||||
|
# Any failures are recorded in 'config.log'
|
||||||
|
#
|
||||||
|
proc cctest {args} {
|
||||||
|
set tmp conftest__
|
||||||
|
|
||||||
|
# Easiest way to merge in the settings
|
||||||
|
cc-with $args {
|
||||||
|
array set opts [cc-get-settings]
|
||||||
|
}
|
||||||
|
|
||||||
|
if {[info exists opts(-sourcefile)]} {
|
||||||
|
set opts(-source) [readfile [get-define srcdir]/$opts(-sourcefile) "#error can't find $opts(-sourcefile)"]
|
||||||
|
}
|
||||||
|
if {[info exists opts(-source)]} {
|
||||||
|
set lines $opts(-source)
|
||||||
|
} else {
|
||||||
|
foreach i $opts(-includes) {
|
||||||
|
if {$opts(-code) ne "" && ![feature-checked $i]} {
|
||||||
|
# Compiling real code with an unchecked header file
|
||||||
|
# Quickly (and silently) check for it now
|
||||||
|
|
||||||
|
# Remove all -includes from settings before checking
|
||||||
|
set saveopts [cc-update-settings -includes {}]
|
||||||
|
msg-quiet cc-check-includes $i
|
||||||
|
cc-store-settings $saveopts
|
||||||
|
}
|
||||||
|
if {$opts(-code) eq "" || [have-feature $i]} {
|
||||||
|
lappend source "#include <$i>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lappend source {*}$opts(-declare)
|
||||||
|
lappend source "int main(void) {"
|
||||||
|
lappend source $opts(-code)
|
||||||
|
lappend source "return 0;"
|
||||||
|
lappend source "}"
|
||||||
|
|
||||||
|
set lines [join $source \n]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build the command line
|
||||||
|
set cmdline {}
|
||||||
|
lappend cmdline {*}[get-define CCACHE]
|
||||||
|
switch -exact -- $opts(-lang) {
|
||||||
|
c++ {
|
||||||
|
set src conftest__.cpp
|
||||||
|
lappend cmdline {*}[get-define CXX]
|
||||||
|
set cflags [get-define CXXFLAGS]
|
||||||
|
}
|
||||||
|
c {
|
||||||
|
set src conftest__.c
|
||||||
|
lappend cmdline {*}[get-define CC]
|
||||||
|
set cflags [get-define CFLAGS]
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
autosetup-error "cctest called with unknown language: $opts(-lang)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {$opts(-link)} {
|
||||||
|
lappend cmdline {*}[get-define LDFLAGS]
|
||||||
|
} else {
|
||||||
|
lappend cflags {*}[get-define CPPFLAGS]
|
||||||
|
set tmp conftest__.o
|
||||||
|
lappend cmdline -c
|
||||||
|
}
|
||||||
|
lappend cmdline {*}$opts(-cflags) {*}[get-define cc-default-debug ""] {*}$cflags
|
||||||
|
lappend cmdline $src -o $tmp
|
||||||
|
if {$opts(-link)} {
|
||||||
|
lappend cmdline {*}$opts(-libs) {*}[get-define LIBS]
|
||||||
|
}
|
||||||
|
|
||||||
|
# At this point we have the complete command line and the
|
||||||
|
# complete source to be compiled. Get the result from cache if
|
||||||
|
# we can
|
||||||
|
if {[info exists ::cc_cache($cmdline,$lines)]} {
|
||||||
|
msg-checking "(cached) "
|
||||||
|
set ok $::cc_cache($cmdline,$lines)
|
||||||
|
if {$::autosetup(debug)} {
|
||||||
|
configlog "From cache (ok=$ok): [join $cmdline]"
|
||||||
|
configlog "============"
|
||||||
|
configlog $lines
|
||||||
|
configlog "============"
|
||||||
|
}
|
||||||
|
return $ok
|
||||||
|
}
|
||||||
|
|
||||||
|
writefile $src $lines\n
|
||||||
|
|
||||||
|
set ok 1
|
||||||
|
set err [catch {exec-with-stderr {*}$cmdline} result errinfo]
|
||||||
|
if {$err || ($opts(-nooutput) && [string length $result])} {
|
||||||
|
configlog "Failed: [join $cmdline]"
|
||||||
|
configlog $result
|
||||||
|
configlog "============"
|
||||||
|
configlog "The failed code was:"
|
||||||
|
configlog $lines
|
||||||
|
configlog "============"
|
||||||
|
set ok 0
|
||||||
|
} elseif {$::autosetup(debug)} {
|
||||||
|
configlog "Compiled OK: [join $cmdline]"
|
||||||
|
configlog "============"
|
||||||
|
configlog $lines
|
||||||
|
configlog "============"
|
||||||
|
}
|
||||||
|
file delete $src
|
||||||
|
file delete $tmp
|
||||||
|
|
||||||
|
# cache it
|
||||||
|
set ::cc_cache($cmdline,$lines) $ok
|
||||||
|
|
||||||
|
return $ok
|
||||||
|
}
|
||||||
|
|
||||||
|
# @make-autoconf-h outfile ?auto-patterns=HAVE_*? ?bare-patterns=SIZEOF_*?
|
||||||
|
#
|
||||||
|
# Deprecated - see 'make-config-header'
|
||||||
|
proc make-autoconf-h {file {autopatterns {HAVE_*}} {barepatterns {SIZEOF_* HAVE_DECL_*}}} {
|
||||||
|
user-notice "*** make-autoconf-h is deprecated -- use make-config-header instead"
|
||||||
|
make-config-header $file -auto $autopatterns -bare $barepatterns
|
||||||
|
}
|
||||||
|
|
||||||
|
# @make-config-header outfile ?-auto patternlist? ?-bare patternlist? ?-none patternlist? ?-str patternlist? ...
|
||||||
|
#
|
||||||
|
# Examines all defined variables which match the given patterns
|
||||||
|
# and writes an include file, '$file', which defines each of these.
|
||||||
|
# Variables which match '-auto' are output as follows:
|
||||||
|
# - defines which have the value '0' are ignored.
|
||||||
|
# - defines which have integer values are defined as the integer value.
|
||||||
|
# - any other value is defined as a string, e.g. '"value"'
|
||||||
|
# Variables which match '-bare' are defined as-is.
|
||||||
|
# Variables which match '-str' are defined as a string, e.g. '"value"'
|
||||||
|
# Variables which match '-none' are omitted.
|
||||||
|
#
|
||||||
|
# Note that order is important. The first pattern that matches is selected.
|
||||||
|
# Default behaviour is:
|
||||||
|
#
|
||||||
|
## -bare {SIZEOF_* HAVE_DECL_*} -auto HAVE_* -none *
|
||||||
|
#
|
||||||
|
# If the file would be unchanged, it is not written.
|
||||||
|
proc make-config-header {file args} {
|
||||||
|
set guard _[string toupper [regsub -all {[^a-zA-Z0-9]} [file tail $file] _]]
|
||||||
|
file mkdir [file dirname $file]
|
||||||
|
set lines {}
|
||||||
|
lappend lines "#ifndef $guard"
|
||||||
|
lappend lines "#define $guard"
|
||||||
|
|
||||||
|
# Add some defaults
|
||||||
|
lappend args -bare {SIZEOF_* HAVE_DECL_*} -auto HAVE_*
|
||||||
|
|
||||||
|
foreach n [lsort [dict keys [all-defines]]] {
|
||||||
|
set value [get-define $n]
|
||||||
|
set type [calc-define-output-type $n $args]
|
||||||
|
switch -exact -- $type {
|
||||||
|
-bare {
|
||||||
|
# Just output the value unchanged
|
||||||
|
}
|
||||||
|
-none {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
-str {
|
||||||
|
set value \"[string map [list \\ \\\\ \" \\\"] $value]\"
|
||||||
|
}
|
||||||
|
-auto {
|
||||||
|
# Automatically determine the type
|
||||||
|
if {$value eq "0"} {
|
||||||
|
lappend lines "/* #undef $n */"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if {![string is integer -strict $value]} {
|
||||||
|
set value \"[string map [list \\ \\\\ \" \\\"] $value]\"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
autosetup-error "Unknown type in make-config-header: $type"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lappend lines "#define $n $value"
|
||||||
|
}
|
||||||
|
lappend lines "#endif"
|
||||||
|
set buf [join $lines \n]
|
||||||
|
write-if-changed $file $buf {
|
||||||
|
msg-result "Created $file"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc calc-define-output-type {name spec} {
|
||||||
|
foreach {type patterns} $spec {
|
||||||
|
foreach pattern $patterns {
|
||||||
|
if {[string match $pattern $name]} {
|
||||||
|
return $type
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Initialise some values from the environment or commandline or default settings
|
||||||
|
foreach i {LDFLAGS LIBS CPPFLAGS LINKFLAGS CFLAGS} {
|
||||||
|
lassign $i var default
|
||||||
|
define $var [get-env $var $default]
|
||||||
|
}
|
||||||
|
|
||||||
|
if {[env-is-set CC]} {
|
||||||
|
# Set by the user, so don't try anything else
|
||||||
|
set try [list [get-env CC ""]]
|
||||||
|
} else {
|
||||||
|
# Try some reasonable options
|
||||||
|
set try [list [get-define cross]cc [get-define cross]gcc]
|
||||||
|
}
|
||||||
|
define CC [find-an-executable {*}$try]
|
||||||
|
if {[get-define CC] eq ""} {
|
||||||
|
user-error "Could not find a C compiler. Tried: [join $try ", "]"
|
||||||
|
}
|
||||||
|
|
||||||
|
define CPP [get-env CPP "[get-define CC] -E"]
|
||||||
|
|
||||||
|
# XXX: Could avoid looking for a C++ compiler until requested
|
||||||
|
# If CXX isn't found, it is set to the empty string.
|
||||||
|
if {[env-is-set CXX]} {
|
||||||
|
define CXX [find-an-executable -required [get-env CXX ""]]
|
||||||
|
} else {
|
||||||
|
define CXX [find-an-executable [get-define cross]c++ [get-define cross]g++]
|
||||||
|
}
|
||||||
|
|
||||||
|
# CXXFLAGS default to CFLAGS if not specified
|
||||||
|
define CXXFLAGS [get-env CXXFLAGS [get-define CFLAGS]]
|
||||||
|
|
||||||
|
# May need a CC_FOR_BUILD, so look for one
|
||||||
|
define CC_FOR_BUILD [find-an-executable [get-env CC_FOR_BUILD ""] cc gcc false]
|
||||||
|
|
||||||
|
if {[get-define CC] eq ""} {
|
||||||
|
user-error "Could not find a C compiler. Tried: [join $try ", "]"
|
||||||
|
}
|
||||||
|
|
||||||
|
# These start empty and never come from the user or environment
|
||||||
|
define AS_CFLAGS ""
|
||||||
|
define AS_CPPFLAGS ""
|
||||||
|
define AS_CXXFLAGS ""
|
||||||
|
|
||||||
|
define CCACHE [find-an-executable [get-env CCACHE ccache]]
|
||||||
|
|
||||||
|
# If any of these are set in the environment, propagate them to the AUTOREMAKE commandline
|
||||||
|
foreach i {CC CXX CCACHE CPP CFLAGS CXXFLAGS CXXFLAGS LDFLAGS LIBS CROSS CPPFLAGS LINKFLAGS CC_FOR_BUILD LD} {
|
||||||
|
if {[env-is-set $i]} {
|
||||||
|
# Note: If the variable is set on the command line, get-env will return that value
|
||||||
|
# so the command line will continue to override the environment
|
||||||
|
define-append-argv AUTOREMAKE $i=[get-env $i ""]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Initial cctest settings
|
||||||
|
cc-store-settings {-cflags {} -includes {} -declare {} -link 0 -lang c -libs {} -code {} -nooutput 0}
|
||||||
|
set autosetup(cc-include-deps) {}
|
||||||
|
|
||||||
|
msg-result "C compiler...[get-define CCACHE] [get-define CC] [get-define CFLAGS] [get-define CPPFLAGS]"
|
||||||
|
if {[get-define CXX] ne "false"} {
|
||||||
|
msg-result "C++ compiler...[get-define CCACHE] [get-define CXX] [get-define CXXFLAGS] [get-define CPPFLAGS]"
|
||||||
|
}
|
||||||
|
msg-result "Build C compiler...[get-define CC_FOR_BUILD]"
|
||||||
|
|
||||||
|
# On Darwin, we prefer to use -g0 to avoid creating .dSYM directories
|
||||||
|
# but some compilers may not support it, so test here.
|
||||||
|
switch -glob -- [get-define host] {
|
||||||
|
*-*-darwin* {
|
||||||
|
if {[cctest -cflags {-g0}]} {
|
||||||
|
define cc-default-debug -g0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {![cc-check-includes stdlib.h]} {
|
||||||
|
user-error "Compiler does not work. See config.log"
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# Copyright (c) 2012 WorkWare Systems http://www.workware.net.au/
|
||||||
|
# All rights reserved
|
||||||
|
|
||||||
|
# Auto-load module for 'make' build system integration
|
||||||
|
|
||||||
|
use init
|
||||||
|
|
||||||
|
autosetup_add_init_type make {Simple "make" build system} {
|
||||||
|
autosetup_check_create auto.def \
|
||||||
|
{# Initial auto.def created by 'autosetup --init=make'
|
||||||
|
|
||||||
|
use cc
|
||||||
|
|
||||||
|
# Add any user options here
|
||||||
|
options {
|
||||||
|
}
|
||||||
|
|
||||||
|
make-config-header config.h
|
||||||
|
make-template Makefile.in
|
||||||
|
}
|
||||||
|
|
||||||
|
if {![file exists Makefile.in]} {
|
||||||
|
puts "Note: I don't see Makefile.in. You will probably need to create one."
|
||||||
|
}
|
||||||
|
}
|
||||||
+24442
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,168 @@
|
|||||||
|
# Copyright (c) 2016 WorkWare Systems http://www.workware.net.au/
|
||||||
|
# All rights reserved
|
||||||
|
|
||||||
|
# @synopsis:
|
||||||
|
#
|
||||||
|
# The 'pkg-config' module allows package information to be found via 'pkg-config'.
|
||||||
|
#
|
||||||
|
# If not cross-compiling, the package path should be determined automatically
|
||||||
|
# by 'pkg-config'.
|
||||||
|
# If cross-compiling, the default package path is the compiler sysroot.
|
||||||
|
# If the C compiler doesn't support '-print-sysroot', the path can be supplied
|
||||||
|
# by the '--sysroot' option or by defining 'SYSROOT'.
|
||||||
|
#
|
||||||
|
# 'PKG_CONFIG' may be set to use an alternative to 'pkg-config'.
|
||||||
|
|
||||||
|
use cc
|
||||||
|
|
||||||
|
options {
|
||||||
|
sysroot:dir => "Override compiler sysroot for pkg-config search path"
|
||||||
|
}
|
||||||
|
|
||||||
|
# @pkg-config-init ?required?
|
||||||
|
#
|
||||||
|
# Initialises the 'pkg-config' system. Unless '$required' is set to 0,
|
||||||
|
# it is a fatal error if a usable 'pkg-config' is not found .
|
||||||
|
#
|
||||||
|
# This command will normally be called automatically as required,
|
||||||
|
# but it may be invoked explicitly if lack of 'pkg-config' is acceptable.
|
||||||
|
#
|
||||||
|
# Returns 1 if ok, or 0 if 'pkg-config' not found/usable (only if '$required' is 0).
|
||||||
|
#
|
||||||
|
proc pkg-config-init {{required 1}} {
|
||||||
|
if {[is-defined HAVE_PKG_CONFIG]} {
|
||||||
|
return [get-define HAVE_PKG_CONFIG]
|
||||||
|
}
|
||||||
|
set found 0
|
||||||
|
|
||||||
|
define PKG_CONFIG [get-env PKG_CONFIG pkg-config]
|
||||||
|
msg-checking "Checking for pkg-config..."
|
||||||
|
|
||||||
|
if {[catch {exec [get-define PKG_CONFIG] --version} version]} {
|
||||||
|
msg-result "[get-define PKG_CONFIG] (not found)"
|
||||||
|
if {$required} {
|
||||||
|
user-error "No usable pkg-config"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
msg-result $version
|
||||||
|
define PKG_CONFIG_VERSION $version
|
||||||
|
|
||||||
|
set found 1
|
||||||
|
|
||||||
|
if {[opt-str sysroot o]} {
|
||||||
|
define SYSROOT [file-normalize $o]
|
||||||
|
msg-result "Using specified sysroot [get-define SYSROOT]"
|
||||||
|
} elseif {[get-define build] ne [get-define host]} {
|
||||||
|
if {[catch {exec-with-stderr {*}[get-define CC] -print-sysroot} result errinfo] == 0} {
|
||||||
|
# Use the compiler sysroot, if there is one
|
||||||
|
define SYSROOT $result
|
||||||
|
msg-result "Found compiler sysroot $result"
|
||||||
|
} else {
|
||||||
|
configlog "[get-define CC] -print-sysroot: $result"
|
||||||
|
set msg "pkg-config: Cross compiling, but no compiler sysroot and no --sysroot supplied"
|
||||||
|
if {$required} {
|
||||||
|
user-error $msg
|
||||||
|
} else {
|
||||||
|
msg-result $msg
|
||||||
|
}
|
||||||
|
set found 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if {[is-defined SYSROOT]} {
|
||||||
|
set sysroot [get-define SYSROOT]
|
||||||
|
|
||||||
|
# XXX: It's possible that these should be set only when invoking pkg-config
|
||||||
|
global env
|
||||||
|
set env(PKG_CONFIG_DIR) ""
|
||||||
|
# Supposedly setting PKG_CONFIG_LIBDIR means that PKG_CONFIG_PATH is ignored,
|
||||||
|
# but it doesn't seem to work that way in practice
|
||||||
|
set env(PKG_CONFIG_PATH) ""
|
||||||
|
# Do we need to try /usr/local as well or instead?
|
||||||
|
set env(PKG_CONFIG_LIBDIR) $sysroot/usr/lib/pkgconfig:$sysroot/usr/share/pkgconfig
|
||||||
|
set env(PKG_CONFIG_SYSROOT_DIR) $sysroot
|
||||||
|
}
|
||||||
|
}
|
||||||
|
define HAVE_PKG_CONFIG $found
|
||||||
|
return $found
|
||||||
|
}
|
||||||
|
|
||||||
|
# @pkg-config module ?requirements?
|
||||||
|
#
|
||||||
|
# Use 'pkg-config' to find the given module meeting the given requirements.
|
||||||
|
# e.g.
|
||||||
|
#
|
||||||
|
## pkg-config pango >= 1.37.0
|
||||||
|
#
|
||||||
|
# If found, returns 1 and sets 'HAVE_PKG_PANGO' to 1 along with:
|
||||||
|
#
|
||||||
|
## PKG_PANGO_VERSION to the found version
|
||||||
|
## PKG_PANGO_LIBS to the required libs (--libs-only-l)
|
||||||
|
## PKG_PANGO_LDFLAGS to the required linker flags (--libs-only-L)
|
||||||
|
## PKG_PANGO_CFLAGS to the required compiler flags (--cflags)
|
||||||
|
#
|
||||||
|
# If not found, returns 0.
|
||||||
|
#
|
||||||
|
proc pkg-config {module args} {
|
||||||
|
set ok [pkg-config-init]
|
||||||
|
|
||||||
|
msg-checking "Checking for $module $args..."
|
||||||
|
|
||||||
|
if {!$ok} {
|
||||||
|
msg-result "no pkg-config"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
set pkgconfig [get-define PKG_CONFIG]
|
||||||
|
|
||||||
|
set ret [catch {exec $pkgconfig --modversion "$module $args"} version]
|
||||||
|
configlog "$pkgconfig --modversion $module $args: $version"
|
||||||
|
if {$ret} {
|
||||||
|
msg-result "not found"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
# Sometimes --modversion succeeds but because of dependencies it isn't usable
|
||||||
|
# This seems to show up with --cflags
|
||||||
|
set ret [catch {exec $pkgconfig --cflags $module} cflags]
|
||||||
|
if {$ret} {
|
||||||
|
msg-result "unusable ($version - see config.log)"
|
||||||
|
configlog "$pkgconfig --cflags $module"
|
||||||
|
configlog $cflags
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
msg-result $version
|
||||||
|
set prefix [feature-define-name $module PKG_]
|
||||||
|
define HAVE_${prefix}
|
||||||
|
define ${prefix}_VERSION $version
|
||||||
|
define ${prefix}_CFLAGS $cflags
|
||||||
|
define ${prefix}_LIBS [exec $pkgconfig --libs-only-l $module]
|
||||||
|
define ${prefix}_LDFLAGS [exec $pkgconfig --libs-only-L $module]
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# @pkg-config-get module setting
|
||||||
|
#
|
||||||
|
# Convenience access to the results of 'pkg-config'.
|
||||||
|
#
|
||||||
|
# For example, '[pkg-config-get pango CFLAGS]' returns
|
||||||
|
# the value of 'PKG_PANGO_CFLAGS', or '""' if not defined.
|
||||||
|
proc pkg-config-get {module name} {
|
||||||
|
set prefix [feature-define-name $module PKG_]
|
||||||
|
get-define ${prefix}_${name} ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# @pkg-config-get-var module variable
|
||||||
|
#
|
||||||
|
# Return the value of the given variable from the given pkg-config module.
|
||||||
|
# The module must already have been successfully detected with pkg-config.
|
||||||
|
# e.g.
|
||||||
|
#
|
||||||
|
## if {[pkg-config harfbuzz >= 2.5]} {
|
||||||
|
## define harfbuzz_libdir [pkg-config-get-var harfbuzz libdir]
|
||||||
|
## }
|
||||||
|
#
|
||||||
|
# Returns the empty string if the variable isn't defined.
|
||||||
|
proc pkg-config-get-var {module variable} {
|
||||||
|
set pkgconfig [get-define PKG_CONFIG]
|
||||||
|
set prefix [feature-define-name $module HAVE_PKG_]
|
||||||
|
exec $pkgconfig $module --variable $variable
|
||||||
|
}
|
||||||
@@ -0,0 +1,412 @@
|
|||||||
|
# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/
|
||||||
|
# All rights reserved
|
||||||
|
|
||||||
|
# @synopsis:
|
||||||
|
#
|
||||||
|
# This module supports common system interrogation and options
|
||||||
|
# such as '--host', '--build', '--prefix', and setting 'srcdir', 'builddir', and 'EXEEXT'.
|
||||||
|
#
|
||||||
|
# It also support the "feature" naming convention, where searching
|
||||||
|
# for a feature such as 'sys/type.h' defines 'HAVE_SYS_TYPES_H'.
|
||||||
|
#
|
||||||
|
# It defines the following variables, based on '--prefix' unless overridden by the user:
|
||||||
|
#
|
||||||
|
## datadir
|
||||||
|
## sysconfdir
|
||||||
|
## sharedstatedir
|
||||||
|
## localstatedir
|
||||||
|
## infodir
|
||||||
|
## mandir
|
||||||
|
## includedir
|
||||||
|
#
|
||||||
|
# If '--prefix' is not supplied, it defaults to '/usr/local' unless 'options-defaults { prefix ... }' is used *before*
|
||||||
|
# including the 'system' module.
|
||||||
|
|
||||||
|
if {[is-defined defaultprefix]} {
|
||||||
|
user-notice "Note: defaultprefix is deprecated. Use options-defaults to set default options"
|
||||||
|
options-defaults [list prefix [get-define defaultprefix]]
|
||||||
|
}
|
||||||
|
|
||||||
|
options {
|
||||||
|
host:host-alias => {a complete or partial cpu-vendor-opsys for the system where
|
||||||
|
the application will run (defaults to the same value as --build)}
|
||||||
|
build:build-alias => {a complete or partial cpu-vendor-opsys for the system
|
||||||
|
where the application will be built (defaults to the
|
||||||
|
result of running config.guess)}
|
||||||
|
prefix:dir=/usr/local => {the target directory for the build (default: '@default@')}
|
||||||
|
|
||||||
|
# These (hidden) options are supported for autoconf/automake compatibility
|
||||||
|
exec-prefix:
|
||||||
|
bindir:
|
||||||
|
sbindir:
|
||||||
|
includedir:
|
||||||
|
mandir:
|
||||||
|
infodir:
|
||||||
|
libexecdir:
|
||||||
|
datadir:
|
||||||
|
libdir:
|
||||||
|
sysconfdir:
|
||||||
|
sharedstatedir:
|
||||||
|
localstatedir:
|
||||||
|
runstatedir:
|
||||||
|
maintainer-mode=0
|
||||||
|
dependency-tracking=0
|
||||||
|
silent-rules=0
|
||||||
|
program-prefix:
|
||||||
|
program-suffix:
|
||||||
|
program-transform-name:
|
||||||
|
}
|
||||||
|
|
||||||
|
# @check-feature name { script }
|
||||||
|
#
|
||||||
|
# defines feature '$name' to the return value of '$script',
|
||||||
|
# which should be 1 if found or 0 if not found.
|
||||||
|
#
|
||||||
|
# e.g. the following will define 'HAVE_CONST' to 0 or 1.
|
||||||
|
#
|
||||||
|
## check-feature const {
|
||||||
|
## cctest -code {const int _x = 0;}
|
||||||
|
## }
|
||||||
|
proc check-feature {name code} {
|
||||||
|
msg-checking "Checking for $name..."
|
||||||
|
set r [uplevel 1 $code]
|
||||||
|
define-feature $name $r
|
||||||
|
if {$r} {
|
||||||
|
msg-result "ok"
|
||||||
|
} else {
|
||||||
|
msg-result "not found"
|
||||||
|
}
|
||||||
|
return $r
|
||||||
|
}
|
||||||
|
|
||||||
|
# @have-feature name ?default=0?
|
||||||
|
#
|
||||||
|
# Returns the value of feature '$name' if defined, or '$default' if not.
|
||||||
|
#
|
||||||
|
# See 'feature-define-name' for how the "feature" name
|
||||||
|
# is translated into the "define" name.
|
||||||
|
#
|
||||||
|
proc have-feature {name {default 0}} {
|
||||||
|
get-define [feature-define-name $name] $default
|
||||||
|
}
|
||||||
|
|
||||||
|
# @define-feature name ?value=1?
|
||||||
|
#
|
||||||
|
# Sets the feature 'define' to '$value'.
|
||||||
|
#
|
||||||
|
# See 'feature-define-name' for how the "feature" name
|
||||||
|
# is translated into the "define" name.
|
||||||
|
#
|
||||||
|
proc define-feature {name {value 1}} {
|
||||||
|
define [feature-define-name $name] $value
|
||||||
|
}
|
||||||
|
|
||||||
|
# @feature-checked name
|
||||||
|
#
|
||||||
|
# Returns 1 if feature '$name' has been checked, whether true or not.
|
||||||
|
#
|
||||||
|
proc feature-checked {name} {
|
||||||
|
is-defined [feature-define-name $name]
|
||||||
|
}
|
||||||
|
|
||||||
|
# @feature-define-name name ?prefix=HAVE_?
|
||||||
|
#
|
||||||
|
# Converts a "feature" name to the corresponding "define",
|
||||||
|
# e.g. 'sys/stat.h' becomes 'HAVE_SYS_STAT_H'.
|
||||||
|
#
|
||||||
|
# Converts '*' to 'P' and all non-alphanumeric to underscore.
|
||||||
|
#
|
||||||
|
proc feature-define-name {name {prefix HAVE_}} {
|
||||||
|
string toupper $prefix[regsub -all {[^a-zA-Z0-9]} [regsub -all {[*]} $name p] _]
|
||||||
|
}
|
||||||
|
|
||||||
|
# @write-if-changed filename contents ?script?
|
||||||
|
#
|
||||||
|
# If '$filename' doesn't exist, or it's contents are different to '$contents',
|
||||||
|
# the file is written and '$script' is evaluated.
|
||||||
|
#
|
||||||
|
# Otherwise a "file is unchanged" message is displayed.
|
||||||
|
proc write-if-changed {file buf {script {}}} {
|
||||||
|
set old [readfile $file ""]
|
||||||
|
if {$old eq $buf && [file exists $file]} {
|
||||||
|
msg-result "$file is unchanged"
|
||||||
|
} else {
|
||||||
|
writefile $file $buf\n
|
||||||
|
uplevel 1 $script
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# @include-file infile mapping
|
||||||
|
#
|
||||||
|
# The core of make-template, called recursively for each @include
|
||||||
|
# directive found within that template so that this proc's result
|
||||||
|
# is the fully-expanded template.
|
||||||
|
#
|
||||||
|
# The mapping parameter is how we expand @varname@ within the template.
|
||||||
|
# We do that inline within this step only for @include directives which
|
||||||
|
# can have variables in the filename arg. A separate substitution pass
|
||||||
|
# happens when this recursive function returns, expanding the rest of
|
||||||
|
# the variables.
|
||||||
|
#
|
||||||
|
proc include-file {infile mapping} {
|
||||||
|
# A stack of true/false conditions, one for each nested conditional
|
||||||
|
# starting with "true"
|
||||||
|
set condstack {1}
|
||||||
|
set result {}
|
||||||
|
set linenum 0
|
||||||
|
foreach line [split [readfile $infile] \n] {
|
||||||
|
incr linenum
|
||||||
|
if {[regexp {^@(if|else|endif)(\s*)(.*)} $line -> condtype condspace condargs]} {
|
||||||
|
if {$condtype eq "if"} {
|
||||||
|
if {[string length $condspace] == 0} {
|
||||||
|
autosetup-error "$infile:$linenum: Invalid expression: $line"
|
||||||
|
}
|
||||||
|
if {[llength $condargs] == 1} {
|
||||||
|
# ABC => [get-define ABC] ni {0 ""}
|
||||||
|
# !ABC => [get-define ABC] in {0 ""}
|
||||||
|
lassign $condargs condvar
|
||||||
|
if {[regexp {^!(.*)} $condvar -> condvar]} {
|
||||||
|
set op in
|
||||||
|
} else {
|
||||||
|
set op ni
|
||||||
|
}
|
||||||
|
set condexpr "\[[list get-define $condvar]\] $op {0 {}}"
|
||||||
|
} else {
|
||||||
|
# Translate alphanumeric ABC into [get-define ABC] and leave the
|
||||||
|
# rest of the expression untouched
|
||||||
|
regsub -all {([A-Z][[:alnum:]_]*)} $condargs {[get-define \1]} condexpr
|
||||||
|
}
|
||||||
|
if {[catch [list expr $condexpr] condval]} {
|
||||||
|
dputs $condval
|
||||||
|
autosetup-error "$infile:$linenum: Invalid expression: $line"
|
||||||
|
}
|
||||||
|
dputs "@$condtype: $condexpr => $condval"
|
||||||
|
}
|
||||||
|
if {$condtype ne "if"} {
|
||||||
|
if {[llength $condstack] <= 1} {
|
||||||
|
autosetup-error "$infile:$linenum: Error: @$condtype missing @if"
|
||||||
|
} elseif {[string length $condargs] && [string index $condargs 0] ne "#"} {
|
||||||
|
autosetup-error "$infile:$linenum: Error: Extra arguments after @$condtype"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch -exact $condtype {
|
||||||
|
if {
|
||||||
|
# push condval
|
||||||
|
lappend condstack $condval
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# Toggle the last entry
|
||||||
|
set condval [lpop condstack]
|
||||||
|
set condval [expr {!$condval}]
|
||||||
|
lappend condstack $condval
|
||||||
|
}
|
||||||
|
endif {
|
||||||
|
if {[llength $condstack] == 0} {
|
||||||
|
user-notice "$infile:$linenum: Error: @endif missing @if"
|
||||||
|
}
|
||||||
|
lpop condstack
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
# Only continue if the stack contains all "true"
|
||||||
|
if {"0" in $condstack} {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if {[regexp {^@include\s+(.*)} $line -> filearg]} {
|
||||||
|
set incfile [string map $mapping $filearg]
|
||||||
|
if {[file exists $incfile]} {
|
||||||
|
lappend ::autosetup(deps) [file-normalize $incfile]
|
||||||
|
lappend result {*}[include-file $incfile $mapping]
|
||||||
|
} else {
|
||||||
|
user-error "$infile:$linenum: Include file $incfile is missing"
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if {[regexp {^@define\s+(\w+)\s+(.*)} $line -> var val]} {
|
||||||
|
define $var $val
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
lappend result $line
|
||||||
|
}
|
||||||
|
return $result
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# @make-template template ?outfile?
|
||||||
|
#
|
||||||
|
# Reads the input file '<srcdir>/$template' and writes the output file '$outfile'
|
||||||
|
# (unless unchanged).
|
||||||
|
# If '$outfile' is blank/omitted, '$template' should end with '.in' which
|
||||||
|
# is removed to create the output file name.
|
||||||
|
#
|
||||||
|
# Each pattern of the form '@define@' is replaced with the corresponding
|
||||||
|
# "define", if it exists, or left unchanged if not.
|
||||||
|
#
|
||||||
|
# The special value '@srcdir@' is substituted with the relative
|
||||||
|
# path to the source directory from the directory where the output
|
||||||
|
# file is created, while the special value '@top_srcdir@' is substituted
|
||||||
|
# with the relative path to the top level source directory.
|
||||||
|
#
|
||||||
|
# Conditional sections may be specified as follows:
|
||||||
|
## @if NAME eq "value"
|
||||||
|
## lines
|
||||||
|
## @else
|
||||||
|
## lines
|
||||||
|
## @endif
|
||||||
|
#
|
||||||
|
# Where 'NAME' is a defined variable name and '@else' is optional.
|
||||||
|
# Note that variables names *must* start with an uppercase letter.
|
||||||
|
# If the expression does not match, all lines through '@endif' are ignored.
|
||||||
|
#
|
||||||
|
# The alternative forms may also be used:
|
||||||
|
## @if NAME (true if the variable is defined, but not empty and not "0")
|
||||||
|
## @if !NAME (opposite of the form above)
|
||||||
|
## @if <general-tcl-expression>
|
||||||
|
#
|
||||||
|
# In the general Tcl expression, any words beginning with an uppercase letter
|
||||||
|
# are translated into [get-define NAME]
|
||||||
|
#
|
||||||
|
# Expressions may be nested
|
||||||
|
#
|
||||||
|
proc make-template {template {out {}}} {
|
||||||
|
set infile [file join $::autosetup(srcdir) $template]
|
||||||
|
|
||||||
|
if {![file exists $infile]} {
|
||||||
|
user-error "Template $template is missing"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Define this as late as possible
|
||||||
|
define AUTODEPS $::autosetup(deps)
|
||||||
|
|
||||||
|
if {$out eq ""} {
|
||||||
|
if {[file ext $template] ne ".in"} {
|
||||||
|
autosetup-error "make_template $template has no target file and can't guess"
|
||||||
|
}
|
||||||
|
set out [file rootname $template]
|
||||||
|
}
|
||||||
|
|
||||||
|
set outdir [file dirname $out]
|
||||||
|
|
||||||
|
# Make sure the directory exists
|
||||||
|
file mkdir $outdir
|
||||||
|
|
||||||
|
# Set up srcdir and top_srcdir to be relative to the target dir
|
||||||
|
define srcdir [relative-path [file join $::autosetup(srcdir) $outdir] $outdir]
|
||||||
|
define top_srcdir [relative-path $::autosetup(srcdir) $outdir]
|
||||||
|
|
||||||
|
# Build map from global defines to their values so they can be
|
||||||
|
# substituted into @include file names.
|
||||||
|
proc build-define-mapping {} {
|
||||||
|
set mapping {}
|
||||||
|
foreach {n v} [array get ::define] {
|
||||||
|
lappend mapping @$n@ $v
|
||||||
|
}
|
||||||
|
return $mapping
|
||||||
|
}
|
||||||
|
set mapping [build-define-mapping]
|
||||||
|
|
||||||
|
set result [include-file $infile $mapping]
|
||||||
|
|
||||||
|
# Rebuild the define mapping in case we ran across @define
|
||||||
|
# directives in the template or a file it @included, then
|
||||||
|
# apply that mapping to the expanded template.
|
||||||
|
set mapping [build-define-mapping]
|
||||||
|
write-if-changed $out [string map $mapping [join $result \n]] {
|
||||||
|
msg-result "Created [relative-path $out] from [relative-path $template]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# build/host tuples and cross-compilation prefix
|
||||||
|
opt-str build build ""
|
||||||
|
define build_alias $build
|
||||||
|
if {$build eq ""} {
|
||||||
|
define build [config_guess]
|
||||||
|
} else {
|
||||||
|
define build [config_sub $build]
|
||||||
|
}
|
||||||
|
|
||||||
|
opt-str host host ""
|
||||||
|
define host_alias $host
|
||||||
|
if {$host eq ""} {
|
||||||
|
define host [get-define build]
|
||||||
|
set cross ""
|
||||||
|
} else {
|
||||||
|
define host [config_sub $host]
|
||||||
|
set cross $host-
|
||||||
|
}
|
||||||
|
define cross [get-env CROSS $cross]
|
||||||
|
|
||||||
|
# build/host _cpu, _vendor and _os
|
||||||
|
foreach type {build host} {
|
||||||
|
set v [get-define $type]
|
||||||
|
if {![regexp {^([^-]+)-([^-]+)-(.*)$} $v -> cpu vendor os]} {
|
||||||
|
user-error "Invalid canonical $type: $v"
|
||||||
|
}
|
||||||
|
define ${type}_cpu $cpu
|
||||||
|
define ${type}_vendor $vendor
|
||||||
|
define ${type}_os $os
|
||||||
|
}
|
||||||
|
|
||||||
|
opt-str prefix prefix /usr/local
|
||||||
|
|
||||||
|
# These are for compatibility with autoconf
|
||||||
|
define target [get-define host]
|
||||||
|
define prefix $prefix
|
||||||
|
define builddir $autosetup(builddir)
|
||||||
|
define srcdir $autosetup(srcdir)
|
||||||
|
define top_srcdir $autosetup(srcdir)
|
||||||
|
define abs_top_srcdir [file-normalize $autosetup(srcdir)]
|
||||||
|
define abs_top_builddir [file-normalize $autosetup(builddir)]
|
||||||
|
|
||||||
|
# autoconf supports all of these
|
||||||
|
define exec_prefix [opt-str exec-prefix exec_prefix $prefix]
|
||||||
|
foreach {name defpath} {
|
||||||
|
bindir /bin
|
||||||
|
sbindir /sbin
|
||||||
|
libexecdir /libexec
|
||||||
|
libdir /lib
|
||||||
|
} {
|
||||||
|
define $name [opt-str $name o $exec_prefix$defpath]
|
||||||
|
}
|
||||||
|
foreach {name defpath} {
|
||||||
|
datadir /share
|
||||||
|
sharedstatedir /com
|
||||||
|
infodir /share/info
|
||||||
|
mandir /share/man
|
||||||
|
includedir /include
|
||||||
|
} {
|
||||||
|
define $name [opt-str $name o $prefix$defpath]
|
||||||
|
}
|
||||||
|
if {$prefix ne {/usr}} {
|
||||||
|
opt-str sysconfdir sysconfdir $prefix/etc
|
||||||
|
} else {
|
||||||
|
opt-str sysconfdir sysconfdir /etc
|
||||||
|
}
|
||||||
|
define sysconfdir $sysconfdir
|
||||||
|
|
||||||
|
define localstatedir [opt-str localstatedir o /var]
|
||||||
|
define runstatedir [opt-str runstatedir o /run]
|
||||||
|
|
||||||
|
define SHELL [get-env SHELL [find-an-executable sh bash ksh]]
|
||||||
|
|
||||||
|
# These could be used to generate Makefiles following some automake conventions
|
||||||
|
define AM_SILENT_RULES [opt-bool silent-rules]
|
||||||
|
define AM_MAINTAINER_MODE [opt-bool maintainer-mode]
|
||||||
|
define AM_DEPENDENCY_TRACKING [opt-bool dependency-tracking]
|
||||||
|
|
||||||
|
# Windows vs. non-Windows
|
||||||
|
switch -glob -- [get-define host] {
|
||||||
|
*-*-ming* - *-*-cygwin - *-*-msys {
|
||||||
|
define-feature windows
|
||||||
|
define EXEEXT .exe
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
define EXEEXT ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Display
|
||||||
|
msg-result "Host System...[get-define host]"
|
||||||
|
msg-result "Build System...[get-define build]"
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
# Copyright (c) 2016 WorkWare Systems http://www.workware.net.au/
|
||||||
|
# All rights reserved
|
||||||
|
|
||||||
|
# Auto-load module for 'tmake' build system integration
|
||||||
|
|
||||||
|
use init
|
||||||
|
|
||||||
|
autosetup_add_init_type tmake "Tcl-based tmake build system" {
|
||||||
|
autosetup_check_create auto.def \
|
||||||
|
{# Initial auto.def created by 'autosetup --init=tmake'
|
||||||
|
# vim:set syntax=tcl:
|
||||||
|
|
||||||
|
use cc cc-lib cc-db cc-shared
|
||||||
|
use tmake
|
||||||
|
|
||||||
|
# Add any user options here
|
||||||
|
# Really want a --configure that takes over the rest of the command line
|
||||||
|
options {
|
||||||
|
}
|
||||||
|
|
||||||
|
cc-check-tools ar ranlib
|
||||||
|
|
||||||
|
set objdir [get-env BUILDDIR objdir]
|
||||||
|
|
||||||
|
make-config-header $objdir/include/autoconf.h
|
||||||
|
make-tmake-settings $objdir/settings.conf {[A-Z]*} *dir lib_*
|
||||||
|
}
|
||||||
|
|
||||||
|
autosetup_check_create project.spec \
|
||||||
|
{# Initial project.spec created by 'autosetup --init=tmake'
|
||||||
|
|
||||||
|
tmake-require-version 0.7.3
|
||||||
|
|
||||||
|
# vim:set syntax=tcl:
|
||||||
|
define? DESTDIR _install
|
||||||
|
|
||||||
|
# XXX If configure creates additional/different files than include/autoconf.h
|
||||||
|
# that should be reflected here
|
||||||
|
Autosetup include/autoconf.h
|
||||||
|
|
||||||
|
# e.g. for autoconf.h
|
||||||
|
IncludePaths include
|
||||||
|
|
||||||
|
ifconfig !CONFIGURED {
|
||||||
|
# Not configured, so don't process subdirs
|
||||||
|
AutoSubDirs off
|
||||||
|
# And don't process this file any further
|
||||||
|
ifconfig false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
set configure [readfile configure]
|
||||||
|
# XXX Do we need also need to support a system install of tmake?
|
||||||
|
if {[string first {#@TMAKEUPDATED@} $configure] < 0} {
|
||||||
|
if {[regsub {#@@INITCHECK@@#} $configure \
|
||||||
|
{test -z "$TMAKE" -a -x "$dir/tmake" \&\& exec "$dir/tmake" --force --configure "$@"; #@TMAKEUPDATED@} configure]} {
|
||||||
|
writefile configure $configure\n
|
||||||
|
exec chmod +x configure
|
||||||
|
puts "Updated configure to invoke local tmake."
|
||||||
|
if {![file exec autosetup/tmake]} {
|
||||||
|
puts "Warning: autosetup/tmake is missing."
|
||||||
|
puts " Install it with: tmake --install=autosetup"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
puts "Warning: configure isn't created by a recent autosetup, not updating."
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
puts "I see configure for tmake already exists."
|
||||||
|
}
|
||||||
|
if {![file exists build.spec]} {
|
||||||
|
puts "Note: I don't see build.spec. Try running: tmake --genie"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
# Copyright (c) 2011 WorkWare Systems http://www.workware.net.au/
|
||||||
|
# All rights reserved
|
||||||
|
|
||||||
|
# @synopsis:
|
||||||
|
#
|
||||||
|
# The 'tmake' module makes it easy to support the tmake build system.
|
||||||
|
#
|
||||||
|
# The following variables are set:
|
||||||
|
#
|
||||||
|
## CONFIGURED - to indicate that the project is configured
|
||||||
|
|
||||||
|
use system
|
||||||
|
|
||||||
|
options {}
|
||||||
|
|
||||||
|
define CONFIGURED
|
||||||
|
|
||||||
|
# @make-tmake-settings outfile patterns ...
|
||||||
|
#
|
||||||
|
# Examines all defined variables which match the given patterns (defaults to '*')
|
||||||
|
# and writes a tmake-compatible .conf file defining those variables.
|
||||||
|
# For example, if 'ABC' is '"3 monkeys"' and 'ABC' matches a pattern, then the file will include:
|
||||||
|
#
|
||||||
|
## define ABC {3 monkeys}
|
||||||
|
#
|
||||||
|
# If the file would be unchanged, it is not written.
|
||||||
|
#
|
||||||
|
# Typical usage is:
|
||||||
|
#
|
||||||
|
## make-tmake-settings [get-env BUILDDIR objdir]/settings.conf {[A-Z]*}
|
||||||
|
proc make-tmake-settings {file args} {
|
||||||
|
file mkdir [file dirname $file]
|
||||||
|
set lines {}
|
||||||
|
|
||||||
|
if {[llength $args] == 0} {
|
||||||
|
set args *
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach n [lsort [dict keys [all-defines]]] {
|
||||||
|
foreach p $args {
|
||||||
|
if {[string match $p $n]} {
|
||||||
|
set value [get-define $n]
|
||||||
|
lappend lines "define $n [list $value]"
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set buf [join $lines \n]
|
||||||
|
write-if-changed $file $buf {
|
||||||
|
msg-result "Created $file"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
C Fix\sa\smemory\sleak\sin\ssqlite3expert.c\sintroduced\sby\s[f1d76c86].
|
C Initial\spristine\sautosetup\sbits.
|
||||||
D 2024-09-24T15:11:34.516
|
D 2024-09-24T21:08:49.699
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@@ -14,6 +14,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d
|
|||||||
F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
|
F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
|
||||||
F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
|
F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
|
||||||
F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2
|
F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2
|
||||||
|
F auto.def 1f07836fdcf7c5048d8d9e60955bfb568989c36fa94dd1e5953fd836fa11a033
|
||||||
F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903
|
F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903
|
||||||
F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347
|
F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347
|
||||||
F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac
|
F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac
|
||||||
@@ -33,9 +34,26 @@ F autoconf/tea/tclconfig/tcl.m4 c6e5f2fc7178f40d087403daa044ef3b86a8e30793f3b121
|
|||||||
F autoconf/tea/win/makefile.vc 2c478a9a962e48b2bf9062734e04d7c63c556e217095419173f9d7938d7d78f7
|
F autoconf/tea/win/makefile.vc 2c478a9a962e48b2bf9062734e04d7c63c556e217095419173f9d7938d7d78f7
|
||||||
F autoconf/tea/win/nmakehlp.c b01f822eabbe1ed2b64e70882d97d48402b42d2689a1ea00342d1a1a7eaa19cb
|
F autoconf/tea/win/nmakehlp.c b01f822eabbe1ed2b64e70882d97d48402b42d2689a1ea00342d1a1a7eaa19cb
|
||||||
F autoconf/tea/win/rules.vc 7b3bb2ef32ade0f3f14d951231811678722725e3bca240dd9727ae0dfe10f6a5
|
F autoconf/tea/win/rules.vc 7b3bb2ef32ade0f3f14d951231811678722725e3bca240dd9727ae0dfe10f6a5
|
||||||
|
F autosetup/LICENSE 41a26aebdd2cd185d1e2b210f71b7ce234496979f6b35aef2cbf6b80cbed4ce4
|
||||||
|
F autosetup/README.autosetup a78ff8c4a3d2636a4268736672a74bf14a82f42687fcf0631a70c516075c031e
|
||||||
|
F autosetup/autosetup 7d7fe206980a6d04113f85e570229953f7e0cd5ef31bb40868653b976f8698af x
|
||||||
|
F autosetup/autosetup-config.guess dfa101c5e8220e864d5e9c72a85e87110df60260d36cb951ad0a85d6d9eaa463 x
|
||||||
|
F autosetup/autosetup-config.sub a38fb074d0dece01cf919e9fb534a26011608aa8fa606490864295328526cd73 x
|
||||||
|
F autosetup/autosetup-find-tclsh c5053419348cdd1aba824c3701bd97392d987b948c1bd748b32f11bbca2c0d8a x
|
||||||
|
F autosetup/autosetup-test-tclsh 749d20defee533a3842139df47d700fc7a334a5da7bdbd444ae5331744b06c5f
|
||||||
|
F autosetup/cc-db.tcl 6e0ed90146197a5a05b245e649975c07c548e30926b218ca3e1d4dc034b10a7b
|
||||||
|
F autosetup/cc-lib.tcl 493c5935b5dd3bf9bd4eca89b07c8b1b1a9356d61783035144e21795facf7360
|
||||||
|
F autosetup/cc-shared.tcl 4f024e94a47f427ba61de1739f6381ef0080210f9fae89112d5c1de1e5460d78
|
||||||
|
F autosetup/cc.tcl 1b52de228642c1db5a714d54ca974d723ec8b4092e8c3765d348b625850f7311
|
||||||
|
F autosetup/default.auto 5cdf016de2140e50f1db190a02039dc42fb390af1dda4cc4853e3042a9ef0e82
|
||||||
|
F autosetup/jimsh0.c 1b5fe91fffcddbc29f2b16acb80f1650632ea2edbe8336b8155ef7b4c66f6d8d
|
||||||
|
F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba
|
||||||
|
F autosetup/system.tcl 3a39d6e0b3bfba526fd39afe07c1d0d325e5a31925013a1ba7c671e1128e31bb
|
||||||
|
F autosetup/tmake.auto eaebc74ad538dfdd3c817c27eefc31930c20510c4f3a3704071f6cb0629ed71f
|
||||||
|
F autosetup/tmake.tcl a275793ec1b6f8708179af0acef1f6f10d46c2920739743f7a8720c6d700c7a9
|
||||||
F config.guess 883205ddf25b46f10c181818bf42c09da9888884af96f79e1719264345053bd6
|
F config.guess 883205ddf25b46f10c181818bf42c09da9888884af96f79e1719264345053bd6
|
||||||
F config.sub c2d0260f17f3e4bc0b6808fccf1b291cb5e9126c14fc5890efc77b9fd0175559
|
F config.sub c2d0260f17f3e4bc0b6808fccf1b291cb5e9126c14fc5890efc77b9fd0175559
|
||||||
F configure 49523f0a070b583cea040d26eff53a65fb0893eca4663b1343a4d5a9a964da53 x
|
F configure 9a00b21dfd13757bbfb8d89b30660a89ec1f8f3a79402b8f9f9b6fc475c3303a x
|
||||||
F configure.ac a100ebf7a07f5dedd319ef547dd467d1676ed059b85a7877aa9c44ac309f7000
|
F configure.ac a100ebf7a07f5dedd319ef547dd467d1676ed059b85a7877aa9c44ac309f7000
|
||||||
F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad
|
F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad
|
||||||
F doc/F2FS.txt c1d4a0ae9711cfe0e1d8b019d154f1c29e0d3abfe820787ba1e9ed7691160fcd
|
F doc/F2FS.txt c1d4a0ae9711cfe0e1d8b019d154f1c29e0d3abfe820787ba1e9ed7691160fcd
|
||||||
@@ -2213,8 +2231,11 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P f1d76c8636866424fe0b57d8814b8bb1a0ed4e2ca1b75d8e308d4b962ad8dc3b
|
P 42bb941584a1ac922ee6b0b6ecadce71c9259555563cf49913a6f820f3f9b887
|
||||||
R 3c493af72ec7c0caf9ac1da3817622db
|
R 84d3f178c5c16f5b308246d776945a8b
|
||||||
U dan
|
T *branch * autosetup
|
||||||
Z 3984c94792299f2aa3da5c0fd5ebea46
|
T *sym-autosetup *
|
||||||
|
T -sym-trunk * Cancelled\sby\sbranch.
|
||||||
|
U stephan
|
||||||
|
Z 8191a33bd76375a0780db52c6f42efff
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
42bb941584a1ac922ee6b0b6ecadce71c9259555563cf49913a6f820f3f9b887
|
dfb1e7f0cce9bc79c43eee7208cad0e2df562b2bc9705d3a36fd78f86c75495b
|
||||||
|
|||||||
Reference in New Issue
Block a user