Bumped version in configure.ac to 1.5.6 (assuming that "1.5f" is

the next version released).
Updated files in mk/autoconf and mk/jam with copies from CS; fixes a 
  GLU detection issue on MinGW.
Set msvc/bullet_ico.ico as the default application icon.
Disabled exceptions for gcc builds.
This commit is contained in:
res2002
2006-06-17 18:17:17 +00:00
parent 51a645bb4a
commit 495349f97d
66 changed files with 14471 additions and 14337 deletions

View File

@@ -1,64 +1,66 @@
TOP ?= "@top_srcdir@" ;
BUILDTOP ?= "@top_builddir@" ;
SubDir TOP ;
IncludeDir ;
IncludeDir Bullet ;
IncludeDir BulletDynamics ;
IncludeDir LinearMath ;
IncludeDir $(BUILDTOP) : : literal transient ;
CleanDir clean :
out ;
Clean distclean :
aclocal.m4
config.h
config.h.in~
config.log
config.status
config.status.lineno
config.cache
configure.lineno
Jamconfig
Jamfile ;
CleanDir distclean :
autom4te.cache ;
Depends distclean : clean ;
Clean maintainerclean :
config.h.in
configure ;
Depends maintainerclean : distclean ;
Help distclean : "Remove built targets and configuration" ;
Help maintainerclean :
"Remove built targets, configuration, and generated files." ;
MsvcGenSubDir TOP msvc : common ;
MsvcGenSubDir TOP msvc 6 : 6 ;
MsvcGenSubDir TOP msvc 7 : 7 ;
MsvcGenSubDir TOP msvc 71 : 71 ;
MsvcGenSubDir TOP msvc 8 : 8 ;
MsvcGenTemplateDir TOP mk msvcgen ;
MsvcGenWorkspace bullet ;
# Set project-specific compiler and linker options for msvcgen.
MsvcGenConfig GL.AVAILABLE : yes ;
MsvcGenConfig GL.LFLAGS : ;
MsvcGenConfig GL.LIBS : opengl32.lib ;
MsvcGenConfig GLUT.AVAILABLE : yes ;
MsvcGenConfig GLUT.CFLAGS : ;
MsvcGenConfig GLUT.LFLAGS : ;
MsvcGenConfig GLUT.INCDIRS : "../../Glut" ;
MsvcGenConfig GLUT.LIBDIRS : "../../Glut" ;
MsvcGenConfig GLUT.LIBS : glut32.lib ;
SubInclude TOP LinearMath ;
SubInclude TOP Bullet ;
SubInclude TOP BulletDynamics ;
SubInclude TOP Extras ;
SubInclude TOP Demos ;
Depends install_config : [ DoInstall bullet.pc : $(libdir)/pkgconfig ] ;
TOP ?= "@top_srcdir@" ;
BUILDTOP ?= "@top_builddir@" ;
SubDir TOP ;
IncludeDir ;
IncludeDir Bullet ;
IncludeDir BulletDynamics ;
IncludeDir LinearMath ;
IncludeDir $(BUILDTOP) : : literal transient ;
CleanDir clean :
out ;
Clean distclean :
aclocal.m4
config.h
config.h.in~
config.log
config.status
config.status.lineno
config.cache
configure.lineno
Jamconfig
Jamfile ;
CleanDir distclean :
autom4te.cache ;
Depends distclean : clean ;
Clean maintainerclean :
config.h.in
configure ;
Depends maintainerclean : distclean ;
Help distclean : "Remove built targets and configuration" ;
Help maintainerclean :
"Remove built targets, configuration, and generated files." ;
ApplicationIconDefault win32 : all : bullet_ico.ico : $(TOP) msvc ;
MsvcGenSubDir TOP msvc : common ;
MsvcGenSubDir TOP msvc 6 : 6 ;
MsvcGenSubDir TOP msvc 7 : 7 ;
MsvcGenSubDir TOP msvc 71 : 71 ;
MsvcGenSubDir TOP msvc 8 : 8 ;
MsvcGenTemplateDir TOP mk msvcgen ;
MsvcGenWorkspace bullet ;
# Set project-specific compiler and linker options for msvcgen.
MsvcGenConfig GL.AVAILABLE : yes ;
MsvcGenConfig GL.LFLAGS : ;
MsvcGenConfig GL.LIBS : opengl32.lib ;
MsvcGenConfig GLUT.AVAILABLE : yes ;
MsvcGenConfig GLUT.CFLAGS : ;
MsvcGenConfig GLUT.LFLAGS : ;
MsvcGenConfig GLUT.INCDIRS : "../../Glut" ;
MsvcGenConfig GLUT.LIBDIRS : "../../Glut" ;
MsvcGenConfig GLUT.LIBS : glut32.lib ;
SubInclude TOP LinearMath ;
SubInclude TOP Bullet ;
SubInclude TOP BulletDynamics ;
SubInclude TOP Extras ;
SubInclude TOP Demos ;
Depends install_config : [ DoInstall bullet.pc : $(libdir)/pkgconfig ] ;

View File

@@ -1,6 +1,14 @@
Bullet Continuous Collision Detection and Physics Library
Erwin Coumans
2006 June 17 Frank Richter <resqu@gmx.ch>
Bumped version in configure.ac to 1.5.6 (assuming that "1.5f" is
the next version released).
Updated files in mk/autoconf and mk/jam with copies from CS; fixes a
GLU detection issue on MinGW.
Set msvc/bullet_ico.ico as the default application icon.
Disabled exceptions for gcc builds.
2006 May 24
Improved GJK accuracy, fixed GjkConvexCast issue, thanks to ~MyXa~ for reporting

0
configure vendored Normal file → Executable file
View File

View File

@@ -1,106 +1,116 @@
#----------------------------------------------------------------------------
# Autoconf input script. Invoke the ./autogen.sh script to generate a
# configure script from this file.
#----------------------------------------------------------------------------
AC_PREREQ([2.54])
#----------------------------------------------------------------------------
# Initialize Autoconf.
#----------------------------------------------------------------------------
AC_INIT(
[bullet],
[1.1.2006.0319],
[bullet@erwincoumans.com])
CS_PACKAGEINFO(
[Bullet Continuous Collision Detection and Physics Library],
[Copyright (c) 2005-2006 Erwin Coumans],
[http://www.continuousphysics.com/Bullet/])
AC_CONFIG_SRCDIR([mk/jam/build.jam])
AC_CONFIG_AUX_DIR([mk/autoconf])
AC_CANONICAL_HOST
#----------------------------------------------------------------------------
# Setup for the configuration header.
#----------------------------------------------------------------------------
AC_CONFIG_HEADERS([config.h])
#----------------------------------------------------------------------------
# Check for tools.
#----------------------------------------------------------------------------
CS_PROG_CC
AS_IF([test -z "$CC"],
[AC_MSG_ERROR([Could not find a usable C compiler.])])
CS_PROG_CXX
AS_IF([test -z "$CXX"],
[AC_MSG_ERROR([Could not find a usable C++ compiler.])])
CS_PROG_LINK
CS_CHECK_COMMON_TOOLS_LINK
CS_CHECK_COMMON_TOOLS_BASIC
CS_CHECK_COMMON_TOOLS_DOC_DOXYGEN
CS_CHECK_PROGS([PERL], [perl5 perl])
CS_EMIT_BUILD_PROPERTY([PERL], [$PERL])
CS_CHECK_TEMPLATE_TOOLKIT2([emit])
#----------------------------------------------------------------------------
# Determine system type
#----------------------------------------------------------------------------
CS_CHECK_HOST
#----------------------------------------------------------------------------
# Check for syntax problems / header files
#----------------------------------------------------------------------------
# Nothing yet.
#----------------------------------------------------------------------------
# Check for GLUT.
#----------------------------------------------------------------------------
AS_IF([test $cs_host_family = windows],
[# Tack the GLUT that comes with bullet onto compiler & linker flags.
_AC_SRCPATHS(["."])
glut_cflags="-I$ac_top_srcdir/Glut"
glut_lflags="-L$ac_top_srcdir/Glut"
CFLAGS="$CFLAGS $glut_cflags"
LDFLAGS="$LDFLAGS $glut_lflags"
CS_EMIT_BUILD_PROPERTY([COMPILER.CFLAGS], [$glut_cflags], [+])
CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [$glut_lflags], [+])
])
CS_CHECK_GLUT
#----------------------------------------------------------------------------
# Package configuration switches.
#----------------------------------------------------------------------------
AC_ARG_ENABLE([debug],
[AC_HELP_STRING([--enable-debug],
[build with debugging information (default NO)])],
[], [enable_debug=no])
AC_MSG_CHECKING([build mode])
AS_IF([test $enable_debug = yes], [build_mode=debug], [build_mode=optimize])
AC_MSG_RESULT([$build_mode])
CS_EMIT_BUILD_PROPERTY([MODE], [$build_mode])
#-----------------------------------------------------------------------------
# Emit install paths and package information.
#-----------------------------------------------------------------------------
CS_OUTPUT_INSTALLDIRS
CS_EMIT_PACKAGEINFO
#----------------------------------------------------------------------------
# Emit generated files.
#----------------------------------------------------------------------------
CS_JAMCONFIG_OUTPUT([Jamconfig])
AC_CONFIG_FILES([Jamfile bullet.pc])
AC_OUTPUT
AC_MSG_NOTICE([
Please note that this project uses Jam as its build tool,
therefore you must type 'jam' to build the project.
Jam home: http://www.perforce.com/jam/jam.html
Jam source: ftp://ftp.perforce.com/jam/
])
#----------------------------------------------------------------------------
# Autoconf input script. Invoke the ./autogen.sh script to generate a
# configure script from this file.
#----------------------------------------------------------------------------
AC_PREREQ([2.54])
#----------------------------------------------------------------------------
# Initialize Autoconf.
#----------------------------------------------------------------------------
AC_INIT(
[bullet],
[1.5.6],
[bullet@erwincoumans.com])
CS_PACKAGEINFO(
[Bullet Continuous Collision Detection and Physics Library],
[Copyright (c) 2005-2006 Erwin Coumans],
[http://www.continuousphysics.com/Bullet/])
AC_CONFIG_SRCDIR([mk/jam/build.jam])
AC_CONFIG_AUX_DIR([mk/autoconf])
AC_CANONICAL_HOST
#----------------------------------------------------------------------------
# Setup for the configuration header.
#----------------------------------------------------------------------------
AC_CONFIG_HEADERS([config.h])
#----------------------------------------------------------------------------
# Check for tools.
#----------------------------------------------------------------------------
CS_PROG_CC
AS_IF([test -z "$CC"],
[AC_MSG_ERROR([Could not find a usable C compiler.])])
CS_PROG_CXX
AS_IF([test -z "$CXX"],
[AC_MSG_ERROR([Could not find a usable C++ compiler.])])
CS_PROG_LINK
CS_CHECK_COMMON_TOOLS_LINK
CS_CHECK_COMMON_TOOLS_BASIC
CS_CHECK_COMMON_TOOLS_DOC_DOXYGEN
CS_CHECK_PROGS([PERL], [perl5 perl])
CS_EMIT_BUILD_PROPERTY([PERL], [$PERL])
CS_CHECK_TEMPLATE_TOOLKIT2([emit])
#----------------------------------------------------------------------------
# Check if C++ exceptions can be disabled.
#----------------------------------------------------------------------------
CS_EMIT_BUILD_FLAGS([how to disable C++ exceptions],
[cs_cv_prog_cxx_disable_exceptions], [CS_CREATE_TUPLE([-fno-exceptions])],
[C++], [COMPILER.C++FLAGS.EXCEPTIONS.DISABLE], [],
[CS_EMIT_BUILD_PROPERTY([COMPILER.C++FLAGS],
[$cs_cv_prog_cxx_disable_exceptions], [+])])
#----------------------------------------------------------------------------
# Determine system type
#----------------------------------------------------------------------------
CS_CHECK_HOST
#----------------------------------------------------------------------------
# Check for syntax problems / header files
#----------------------------------------------------------------------------
# Nothing yet.
#----------------------------------------------------------------------------
# Check for GLUT.
#----------------------------------------------------------------------------
AS_IF([test $cs_host_family = windows],
[# Tack the GLUT that comes with bullet onto compiler & linker flags.
_AC_SRCPATHS(["."])
glut_cflags="-I$ac_top_srcdir/Glut"
glut_lflags="-L$ac_top_srcdir/Glut"
CFLAGS="$CFLAGS $glut_cflags"
LDFLAGS="$LDFLAGS $glut_lflags"
CS_EMIT_BUILD_PROPERTY([COMPILER.CFLAGS], [$glut_cflags], [+])
CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [$glut_lflags], [+])
])
CS_CHECK_GLUT
#----------------------------------------------------------------------------
# Package configuration switches.
#----------------------------------------------------------------------------
AC_ARG_ENABLE([debug],
[AC_HELP_STRING([--enable-debug],
[build with debugging information (default NO)])],
[], [enable_debug=no])
AC_MSG_CHECKING([build mode])
AS_IF([test $enable_debug = yes], [build_mode=debug], [build_mode=optimize])
AC_MSG_RESULT([$build_mode])
CS_EMIT_BUILD_PROPERTY([MODE], [$build_mode])
#-----------------------------------------------------------------------------
# Emit install paths and package information.
#-----------------------------------------------------------------------------
CS_OUTPUT_INSTALLDIRS
CS_EMIT_PACKAGEINFO
#----------------------------------------------------------------------------
# Emit generated files.
#----------------------------------------------------------------------------
CS_JAMCONFIG_OUTPUT([Jamconfig])
AC_CONFIG_FILES([Jamfile bullet.pc])
AC_OUTPUT
AC_MSG_NOTICE([
Please note that this project uses Jam as its build tool,
therefore you must type 'jam' to build the project.
Jam home: http://www.perforce.com/jam/jam.html
Jam source: ftp://ftp.perforce.com/jam/
])

View File

@@ -1,230 +1,230 @@
# checkbuild.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_SPLIT_TUPLE(TUPLE, OUTPUT-VARIABLES)
# Split a build-tuple into its component parts. A build tuple is
# constructed by CS_CREATE_TUPLE() and is comprised of compiler flags,
# linker flags, and library references. OUTPUT-VARIABLES is a
# comma-delimited list of shell variables which should receive the
# extracted compiler flags, linker flags, and library references,
# respectively.
#------------------------------------------------------------------------------
AC_DEFUN([CS_SPLIT_TUPLE],
[CS_SPLIT([$1], [cs_dummy,$2], [@])
m4_map([_CS_SPLIT_TUPLE], [$2])])
AC_DEFUN([_CS_SPLIT_TUPLE],
[$1=`echo $$1 | sed 'y%@%:@% %'`
])
#------------------------------------------------------------------------------
# CS_CREATE_TUPLE([CFLAGS], [LFLAGS], [LIBS])
# Construct a build-tuple which is comprised of compiler flags, linker
# flags, and library references. Build tuples are encoded so as to
# preserve whitespace in each component. This makes it possible for
# macros (such as CS_BUILD_IFELSE) which employ build tuples to accept
# whitespace-delimited lists of tuples, and for shell "for" statements to
# iterate over tuple lists without compromising whitespace embedded
# within individual flags or library references.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CREATE_TUPLE], [`echo @$1@$2@$3 | sed 'y% %@%:@%'`])
#------------------------------------------------------------------------------
# CS_LANG_CFLAGS
# Return the literal string CFLAGS if the current language is C. Return
# the literal string CXXFLAGS if the current language is C++. Generic
# compiler test macros which need to modify or save the compiler flags
# can invoke this macro to get the name of the compiler flags environment
# variable (either CFLAGS or CXXFLAGS) depending upon the current
# language. For example:
# CS_LANG_CFLAGS="$CS_LANG_CFLAGS -Wall"
# With C, this expands to:
# CFLAGS="$CFLAGS -Wall"
# With C++, it expands to:
# CXXFLAGS="$CXXFLAGS -Wall"
#------------------------------------------------------------------------------
AC_DEFUN([CS_LANG_CFLAGS], [AC_LANG_CASE([C], [CFLAGS], [C++], [CXXFLAGS])])
#------------------------------------------------------------------------------
# CS_BUILD_IFELSE([PROGRAM], [FLAGS], [LANGUAGE], [ACTION-IF-BUILT],
# [ACTION-IF-NOT-BUILT], [OTHER-CFLAGS], [OTHER-LFLAGS],
# [OTHER-LIBS], [INHIBIT-OTHER-FLAGS], [ERROR-REGEX])
# Try building a program using the supplied compiler flags, linker flags,
# and library references. PROGRAM is typically a program composed via
# AC_LANG_PROGRAM(). PROGRAM may be omitted if you are interested only
# in learning if the compiler or linker respects certain flags. LANGUAGE
# is typically either C or C++ and specifies which compiler to use for
# the test. If LANGUAGE is omitted, C is used. FLAGS is a whitespace
# delimited list of build tuples. Tuples are created with
# CS_CREATE_TUPLE() and are composed of up to three elements each. The
# first element represents compiler flags, the second linker flags, and
# the third libraries used when linking the program. Each tuple from
# FLAGS is attempted in order. If you want a build attempted with no
# special flags prior to builds with specialized flags, create an empty
# tuple with CS_CREATE_TUPLE() at the start of the FLAGS list. If the
# build is successful, then the shell variables cs_build_ok is set to
# "yes", cs_build_cflags, cs_build_lflags, and cs_build_libs are set to
# the tuple elements which resulted in the successful build, and
# ACTION-IF-BUILT is invoked. Upon successful build, no further tuples
# are consulted. If no tuple results in a successful build, then
# cs_build_ok is set to "no" and ACTION-IF-NOT-BUILT is invoked.
# OTHER-CFLAGS, OTHER-LFLAGS, and OTHER-LIBS specify additional compiler
# flags, linker flags, and libraries which should be used with each tuple
# build attempt. Upon successful build, these additional flags are also
# reflected in the variables cs_build_cflags, cs_build_lflags, and
# cs_build_libs unless INHIBIT-OTHER-FLAGS is a non-empty string. The
# optional ERROR-REGEX places an additional constraint upon the build
# check. If specified, ERROR-REGEX, which is a standard `grep' regular
# expression, is applied to output captured from the compiler and linker.
# If ERROR-REGEX matches, then the build is deemed a failure, and
# cs_build_ok is set to "no". This facility is useful for broken build
# tools which emit an error message yet still return success as a result.
# In such cases, it should be possible to detect the failure by scanning
# the tools' output.
#
# IMPLEMENTATION NOTES
#
# In Autoconf 2.57 and earlier, AC_LINK_IFELSE() invokes AC_TRY_EVAL(),
# which does not provide access to the captured output. To work around
# this limitation, we temporarily re-define AC_TRY_EVAL() as
# _AC_EVAL_STDERR(), which leaves the captured output in conftest.err
# (which we must also delete). In Autoconf 2.58, however,
# AC_LINK_IFELSE() instead already invokes _AC_EVAL_STDERR() on our
# behalf, however we must be careful to apply ERROR-REGEX within the
# invocation AC_LINK_IFELSE(), since AC_LINK_IFELSE() deletes
# conftest.err before it returns.
#------------------------------------------------------------------------------
AC_DEFUN([CS_BUILD_IFELSE],
[AC_LANG_PUSH(m4_default([$3],[C]))
cs_cflags_save="$CS_LANG_CFLAGS"
cs_lflags_save="$LDFLAGS"
cs_libs_save="$LIBS"
cs_build_ok=no
m4_ifval([$10], [m4_pushdef([AC_TRY_EVAL], [_AC_EVAL_STDERR]($$[1]))])
for cs_build_item in m4_default([$2],[CS_CREATE_TUPLE()])
do
CS_SPLIT_TUPLE(
[$cs_build_item],[cs_cflags_test,cs_lflags_test,cs_libs_test])
CS_LANG_CFLAGS="$cs_cflags_test $6 $cs_cflags_save"
LDFLAGS="$cs_lflags_test $7 $cs_lflags_save"
LIBS="$cs_libs_test $8 $cs_libs_save"
AC_LINK_IFELSE(m4_default([$1], [AC_LANG_PROGRAM([],[])]),
[m4_ifval([$10],
[AS_IF([AC_TRY_COMMAND(
[grep "AS_ESCAPE([$10])" conftest.err >/dev/null 2>&1])],
[cs_build_ok=no], [cs_build_ok=yes])],
[cs_build_ok=yes])])
AS_IF([test $cs_build_ok = yes], [break])
done
m4_ifval([$10], [m4_popdef([AC_TRY_EVAL]) rm -f conftest.err])
CS_LANG_CFLAGS=$cs_cflags_save
LDFLAGS=$cs_lflags_save
LIBS=$cs_libs_save
AC_LANG_POP(m4_default([$3],[C]))
AS_IF([test $cs_build_ok = yes],
[cs_build_cflags=CS_TRIM([$cs_cflags_test[]m4_ifval([$9],[],[ $6])])
cs_build_lflags=CS_TRIM([$cs_lflags_test[]m4_ifval([$9],[],[ $7])])
cs_build_libs=CS_TRIM([$cs_libs_test[]m4_ifval([$9],[],[ $8])])
$4],
[$5])])
#------------------------------------------------------------------------------
# CS_CHECK_BUILD(MESSAGE, CACHE-VAR, [PROGRAM], [FLAGS], [LANGUAGE],
# [ACTION-IF-BUILT], [ACTION-IF-NOT-BUILT], [IGNORE-CACHE],
# [OTHER-CFLAGS], [OTHER-LFLAGS], [OTHER-LIBS],
# [INHIBIT-OTHER-FLAGS], [ERROR-REGEX])
# Like CS_BUILD_IFELSE() but also prints "checking" and result messages,
# and optionally respects the cache. Sets CACHE-VAR to "yes" upon
# success, else "no" upon failure. Additionally, sets CACHE-VAR_cflags,
# CACHE-VAR_lflags, and CACHE-VAR_libs to the values which resulted in a
# successful build. If IGNORE-CACHE is "yes", then the cache variables
# are ignored upon entry to this macro, however they are still set to
# appropriate values upon exit.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_BUILD],
[AS_IF([test "$8" != yes],
[AC_CACHE_CHECK([$1], [$2],
[CS_BUILD_IFELSE([$3], [$4], [$5],
[$2=yes
$2_cflags=$cs_build_cflags
$2_lflags=$cs_build_lflags
$2_libs=$cs_build_libs],
[$2=no], [$9], [$10], [$11], [$12], [$13])])],
[AC_MSG_CHECKING([$1])
CS_BUILD_IFELSE([$3], [$4], [$5],
[$2=yes
$2_cflags=$cs_build_cflags
$2_lflags=$cs_build_lflags
$2_libs=$cs_build_libs],
[$2=no], [$9], [$10], [$11], [$12], [$13])
AC_MSG_RESULT([$$2])])
AS_IF([test $$2 = yes], [$6],
[$2_cflags=''
$2_lflags=''
$2_libs=''
$7])])
#------------------------------------------------------------------------------
# CS_CHECK_BUILD_FLAGS(MESSAGE, CACHE-VAR, FLAGS, [LANGUAGE],
# [ACTION-IF-RECOGNIZED], [ACTION-IF-NOT-RECOGNIZED],
# [OTHER-CFLAGS], [OTHER-LFLAGS], [OTHER-LIBS],
# [ERROR-REGEX])
# Like CS_CHECK_BUILD(), but checks only if the compiler or linker
# recognizes a command-line option or options. MESSAGE is the "checking"
# message. CACHE-VAR is the shell cache variable which receives the flag
# or flags recognized by the compiler or linker. FLAGS is a
# whitespace-delimited list of build tuples created with
# CS_CREATE_TUPLE(). Each tuple from FLAGS is attempted in order until
# one is found which is recognized by the compiler. After that, no
# further flags are checked. LANGUAGE is typically either C or C++ and
# specifies which compiler to use for the test. If LANGUAGE is omitted,
# C is used. If a command-line option is recognized, then CACHE-VAR is
# set to the composite value of $cs_build_cflags, $cs_build_lflags, and
# $cs_build_libs of the FLAGS element which succeeded (not including the
# "other" flags) and ACTION-IF-RECOGNIZED is invoked. If no options are
# recognized, then CACHE-VAR is set to the empty string, and
# ACTION-IF-NOT-RECOGNIZED is invoked. As a convenience, in case
# comparing CACHE-VAR against the empty string to test for failure is
# undesirable, a second variable named CACHE-VAR_ok is set to the literal
# "no" upon failure, and to the same value as CACHE-VAR upon success.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_BUILD_FLAGS],
[AC_CACHE_CHECK([$1], [$2_ok],
[CS_BUILD_IFELSE([], [$3], [$4],
[$2=CS_TRIM([$cs_build_cflags $cs_build_lflags $cs_build_libs])
$2_ok="$$2"],
[$2=''
$2_ok=no], [$7], [$8], [$9], [Y], [$10])])
AS_IF([test "$$2_ok" != no], [$5], [$6])])
# checkbuild.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_SPLIT_TUPLE(TUPLE, OUTPUT-VARIABLES)
# Split a build-tuple into its component parts. A build tuple is
# constructed by CS_CREATE_TUPLE() and is comprised of compiler flags,
# linker flags, and library references. OUTPUT-VARIABLES is a
# comma-delimited list of shell variables which should receive the
# extracted compiler flags, linker flags, and library references,
# respectively.
#------------------------------------------------------------------------------
AC_DEFUN([CS_SPLIT_TUPLE],
[CS_SPLIT([$1], [cs_dummy,$2], [@])
m4_map([_CS_SPLIT_TUPLE], [$2])])
AC_DEFUN([_CS_SPLIT_TUPLE],
[$1=`echo $$1 | sed 'y%@%:@% %'`
])
#------------------------------------------------------------------------------
# CS_CREATE_TUPLE([CFLAGS], [LFLAGS], [LIBS])
# Construct a build-tuple which is comprised of compiler flags, linker
# flags, and library references. Build tuples are encoded so as to
# preserve whitespace in each component. This makes it possible for
# macros (such as CS_BUILD_IFELSE) which employ build tuples to accept
# whitespace-delimited lists of tuples, and for shell "for" statements to
# iterate over tuple lists without compromising whitespace embedded
# within individual flags or library references.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CREATE_TUPLE], [`echo @$1@$2@$3 | sed 'y% %@%:@%'`])
#------------------------------------------------------------------------------
# CS_LANG_CFLAGS
# Return the literal string CFLAGS if the current language is C. Return
# the literal string CXXFLAGS if the current language is C++. Generic
# compiler test macros which need to modify or save the compiler flags
# can invoke this macro to get the name of the compiler flags environment
# variable (either CFLAGS or CXXFLAGS) depending upon the current
# language. For example:
# CS_LANG_CFLAGS="$CS_LANG_CFLAGS -Wall"
# With C, this expands to:
# CFLAGS="$CFLAGS -Wall"
# With C++, it expands to:
# CXXFLAGS="$CXXFLAGS -Wall"
#------------------------------------------------------------------------------
AC_DEFUN([CS_LANG_CFLAGS], [AC_LANG_CASE([C], [CFLAGS], [C++], [CXXFLAGS])])
#------------------------------------------------------------------------------
# CS_BUILD_IFELSE([PROGRAM], [FLAGS], [LANGUAGE], [ACTION-IF-BUILT],
# [ACTION-IF-NOT-BUILT], [OTHER-CFLAGS], [OTHER-LFLAGS],
# [OTHER-LIBS], [INHIBIT-OTHER-FLAGS], [ERROR-REGEX])
# Try building a program using the supplied compiler flags, linker flags,
# and library references. PROGRAM is typically a program composed via
# AC_LANG_PROGRAM(). PROGRAM may be omitted if you are interested only
# in learning if the compiler or linker respects certain flags. LANGUAGE
# is typically either C or C++ and specifies which compiler to use for
# the test. If LANGUAGE is omitted, C is used. FLAGS is a whitespace
# delimited list of build tuples. Tuples are created with
# CS_CREATE_TUPLE() and are composed of up to three elements each. The
# first element represents compiler flags, the second linker flags, and
# the third libraries used when linking the program. Each tuple from
# FLAGS is attempted in order. If you want a build attempted with no
# special flags prior to builds with specialized flags, create an empty
# tuple with CS_CREATE_TUPLE() at the start of the FLAGS list. If the
# build is successful, then the shell variables cs_build_ok is set to
# "yes", cs_build_cflags, cs_build_lflags, and cs_build_libs are set to
# the tuple elements which resulted in the successful build, and
# ACTION-IF-BUILT is invoked. Upon successful build, no further tuples
# are consulted. If no tuple results in a successful build, then
# cs_build_ok is set to "no" and ACTION-IF-NOT-BUILT is invoked.
# OTHER-CFLAGS, OTHER-LFLAGS, and OTHER-LIBS specify additional compiler
# flags, linker flags, and libraries which should be used with each tuple
# build attempt. Upon successful build, these additional flags are also
# reflected in the variables cs_build_cflags, cs_build_lflags, and
# cs_build_libs unless INHIBIT-OTHER-FLAGS is a non-empty string. The
# optional ERROR-REGEX places an additional constraint upon the build
# check. If specified, ERROR-REGEX, which is a standard `grep' regular
# expression, is applied to output captured from the compiler and linker.
# If ERROR-REGEX matches, then the build is deemed a failure, and
# cs_build_ok is set to "no". This facility is useful for broken build
# tools which emit an error message yet still return success as a result.
# In such cases, it should be possible to detect the failure by scanning
# the tools' output.
#
# IMPLEMENTATION NOTES
#
# In Autoconf 2.57 and earlier, AC_LINK_IFELSE() invokes AC_TRY_EVAL(),
# which does not provide access to the captured output. To work around
# this limitation, we temporarily re-define AC_TRY_EVAL() as
# _AC_EVAL_STDERR(), which leaves the captured output in conftest.err
# (which we must also delete). In Autoconf 2.58, however,
# AC_LINK_IFELSE() instead already invokes _AC_EVAL_STDERR() on our
# behalf, however we must be careful to apply ERROR-REGEX within the
# invocation AC_LINK_IFELSE(), since AC_LINK_IFELSE() deletes
# conftest.err before it returns.
#------------------------------------------------------------------------------
AC_DEFUN([CS_BUILD_IFELSE],
[AC_LANG_PUSH(m4_default([$3],[C]))
cs_cflags_save="$CS_LANG_CFLAGS"
cs_lflags_save="$LDFLAGS"
cs_libs_save="$LIBS"
cs_build_ok=no
m4_ifval([$10], [m4_pushdef([AC_TRY_EVAL], [_AC_EVAL_STDERR]($$[1]))])
for cs_build_item in m4_default([$2],[CS_CREATE_TUPLE()])
do
CS_SPLIT_TUPLE(
[$cs_build_item],[cs_cflags_test,cs_lflags_test,cs_libs_test])
CS_LANG_CFLAGS="$cs_cflags_test $6 $cs_cflags_save"
LDFLAGS="$cs_lflags_test $7 $cs_lflags_save"
LIBS="$cs_libs_test $8 $cs_libs_save"
AC_LINK_IFELSE(m4_default([$1], [AC_LANG_PROGRAM([],[])]),
[m4_ifval([$10],
[AS_IF([AC_TRY_COMMAND(
[grep "AS_ESCAPE([$10])" conftest.err >/dev/null 2>&1])],
[cs_build_ok=no], [cs_build_ok=yes])],
[cs_build_ok=yes])])
AS_IF([test $cs_build_ok = yes], [break])
done
m4_ifval([$10], [m4_popdef([AC_TRY_EVAL]) rm -f conftest.err])
CS_LANG_CFLAGS=$cs_cflags_save
LDFLAGS=$cs_lflags_save
LIBS=$cs_libs_save
AC_LANG_POP(m4_default([$3],[C]))
AS_IF([test $cs_build_ok = yes],
[cs_build_cflags=CS_TRIM([$cs_cflags_test[]m4_ifval([$9],[],[ $6])])
cs_build_lflags=CS_TRIM([$cs_lflags_test[]m4_ifval([$9],[],[ $7])])
cs_build_libs=CS_TRIM([$cs_libs_test[]m4_ifval([$9],[],[ $8])])
$4],
[$5])])
#------------------------------------------------------------------------------
# CS_CHECK_BUILD(MESSAGE, CACHE-VAR, [PROGRAM], [FLAGS], [LANGUAGE],
# [ACTION-IF-BUILT], [ACTION-IF-NOT-BUILT], [IGNORE-CACHE],
# [OTHER-CFLAGS], [OTHER-LFLAGS], [OTHER-LIBS],
# [INHIBIT-OTHER-FLAGS], [ERROR-REGEX])
# Like CS_BUILD_IFELSE() but also prints "checking" and result messages,
# and optionally respects the cache. Sets CACHE-VAR to "yes" upon
# success, else "no" upon failure. Additionally, sets CACHE-VAR_cflags,
# CACHE-VAR_lflags, and CACHE-VAR_libs to the values which resulted in a
# successful build. If IGNORE-CACHE is "yes", then the cache variables
# are ignored upon entry to this macro, however they are still set to
# appropriate values upon exit.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_BUILD],
[AS_IF([test "$8" != yes],
[AC_CACHE_CHECK([$1], [$2],
[CS_BUILD_IFELSE([$3], [$4], [$5],
[$2=yes
$2_cflags=$cs_build_cflags
$2_lflags=$cs_build_lflags
$2_libs=$cs_build_libs],
[$2=no], [$9], [$10], [$11], [$12], [$13])])],
[AC_MSG_CHECKING([$1])
CS_BUILD_IFELSE([$3], [$4], [$5],
[$2=yes
$2_cflags=$cs_build_cflags
$2_lflags=$cs_build_lflags
$2_libs=$cs_build_libs],
[$2=no], [$9], [$10], [$11], [$12], [$13])
AC_MSG_RESULT([$$2])])
AS_IF([test $$2 = yes], [$6],
[$2_cflags=''
$2_lflags=''
$2_libs=''
$7])])
#------------------------------------------------------------------------------
# CS_CHECK_BUILD_FLAGS(MESSAGE, CACHE-VAR, FLAGS, [LANGUAGE],
# [ACTION-IF-RECOGNIZED], [ACTION-IF-NOT-RECOGNIZED],
# [OTHER-CFLAGS], [OTHER-LFLAGS], [OTHER-LIBS],
# [ERROR-REGEX])
# Like CS_CHECK_BUILD(), but checks only if the compiler or linker
# recognizes a command-line option or options. MESSAGE is the "checking"
# message. CACHE-VAR is the shell cache variable which receives the flag
# or flags recognized by the compiler or linker. FLAGS is a
# whitespace-delimited list of build tuples created with
# CS_CREATE_TUPLE(). Each tuple from FLAGS is attempted in order until
# one is found which is recognized by the compiler. After that, no
# further flags are checked. LANGUAGE is typically either C or C++ and
# specifies which compiler to use for the test. If LANGUAGE is omitted,
# C is used. If a command-line option is recognized, then CACHE-VAR is
# set to the composite value of $cs_build_cflags, $cs_build_lflags, and
# $cs_build_libs of the FLAGS element which succeeded (not including the
# "other" flags) and ACTION-IF-RECOGNIZED is invoked. If no options are
# recognized, then CACHE-VAR is set to the empty string, and
# ACTION-IF-NOT-RECOGNIZED is invoked. As a convenience, in case
# comparing CACHE-VAR against the empty string to test for failure is
# undesirable, a second variable named CACHE-VAR_ok is set to the literal
# "no" upon failure, and to the same value as CACHE-VAR upon success.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_BUILD_FLAGS],
[AC_CACHE_CHECK([$1], [$2_ok],
[CS_BUILD_IFELSE([], [$3], [$4],
[$2=CS_TRIM([$cs_build_cflags $cs_build_lflags $cs_build_libs])
$2_ok="$$2"],
[$2=''
$2_ok=no], [$7], [$8], [$9], [Y], [$10])])
AS_IF([test "$$2_ok" != no], [$5], [$6])])

View File

@@ -1,111 +1,111 @@
#==============================================================================
# Copyright (C)2003-2006 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_COMMON_TOOLS_LINK
# Checks for common tools related to linking.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_COMMON_TOOLS_LINK],
[
# The default RANLIB in Jambase is wrong on some platforms, and is also
# unsuitable during cross-compilation, so we set the value unconditionally
# (sixth argument of CS_EMIT_BUILD_PROPERTY).
AC_PROG_RANLIB
CS_EMIT_BUILD_PROPERTY([RANLIB], [$RANLIB], [], [], [], [Y])
CS_CHECK_TOOLS([DLLTOOL], [dlltool])
CS_EMIT_BUILD_PROPERTY([CMD.DLLTOOL], [$DLLTOOL])
CS_CHECK_TOOLS([DLLWRAP], [dllwrap])
CS_EMIT_BUILD_PROPERTY([CMD.DLLWRAP], [$DLLWRAP])
CS_CHECK_TOOLS([WINDRES], [windres])
CS_EMIT_BUILD_PROPERTY([CMD.WINDRES], [$WINDRES])
CS_CHECK_TOOLS([STRINGS], [strings])
CS_EMIT_BUILD_PROPERTY([CMD.STRINGS], [$STRINGS])
CS_CHECK_TOOLS([STRINGS], [objcopy])
CS_EMIT_BUILD_PROPERTY([CMD.OBJCOPY], [$OBJCOPY])
CS_CHECK_LIBTOOL
CS_EMIT_BUILD_PROPERTY([LIBTOOL], [$LIBTOOL])
CS_EMIT_BUILD_PROPERTY([APPLE_LIBTOOL], [$APPLE_LIBTOOL])
])
#------------------------------------------------------------------------------
# CS_CHECK_COMMON_TOOLS_BASIC
# Checks for basic tools for building things.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_COMMON_TOOLS_BASIC],
[CS_CHECK_MKDIR
CS_EMIT_BUILD_PROPERTY([CMD.MKDIR], [$MKDIR])
CS_EMIT_BUILD_PROPERTY([CMD.MKDIRS], [$MKDIRS])
CS_CHECK_PROGS([INSTALL], [install])
CS_EMIT_BUILD_PROPERTY([INSTALL], [$INSTALL])])
#------------------------------------------------------------------------------
# CS_CHECK_COMMON_TOOLS_DOC_TEXINFO
# Checks for tools to generate documentation from texinfo files.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_COMMON_TOOLS_DOC_TEXINFO],
[CS_CHECK_PROGS([TEXI2DVI], [texi2dvi])
CS_EMIT_BUILD_PROPERTY([CMD.TEXI2DVI], [$TEXI2DVI])
CS_CHECK_PROGS([TEXI2PDF], [texi2pdf])
CS_EMIT_BUILD_PROPERTY([CMD.TEXI2PDF], [$TEXI2PDF])
CS_CHECK_PROGS([DVIPS], [dvips])
CS_EMIT_BUILD_PROPERTY([CMD.DVIPS], [$DVIPS])
CS_CHECK_PROGS([DVIPDF], [dvipdf])
CS_EMIT_BUILD_PROPERTY([CMD.DVIPDF], [$DVIPDF])
CS_CHECK_PROGS([MAKEINFO], [makeinfo])
CS_EMIT_BUILD_PROPERTY([CMD.MAKEINFO], [$MAKEINFO])])
#------------------------------------------------------------------------------
# CS_CHECK_COMMON_TOOLS_DOC_DOXYGEN
# Checks for tools to generate source documentation via doxygen.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_COMMON_TOOLS_DOC_DOXYGEN],
[CS_CHECK_PROGS([DOXYGEN], [doxygen])
CS_EMIT_BUILD_PROPERTY([CMD.DOXYGEN], [$DOXYGEN])
CS_CHECK_TOOLS([DOT], [dot])
CS_EMIT_BUILD_PROPERTY([CMD.DOT], [$DOT])])
#------------------------------------------------------------------------------
# CS_CHECK_COMMON_LIBS
# Check for typical required libraries (libm, libmx, libdl, libnsl).
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_COMMON_LIBS],
[AC_LANG_PUSH([C])
AC_CHECK_LIB([m], [pow], [cs_cv_libm_libs=-lm], [cs_cv_libm_libs=])
AC_CHECK_LIB([m], [cosf], [cs_cv_libm_libs=-lm])
AC_CHECK_LIB([mx], [cosf])
AC_CHECK_LIB([dl], [dlopen], [cs_cv_libdl_libs=-ldl], [cs_cv_libdl_libs=])
AC_CHECK_LIB([nsl], [gethostbyname])
AC_LANG_POP([C])])
#==============================================================================
# Copyright (C)2003-2006 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_COMMON_TOOLS_LINK
# Checks for common tools related to linking.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_COMMON_TOOLS_LINK],
[
# The default RANLIB in Jambase is wrong on some platforms, and is also
# unsuitable during cross-compilation, so we set the value unconditionally
# (sixth argument of CS_EMIT_BUILD_PROPERTY).
AC_PROG_RANLIB
CS_EMIT_BUILD_PROPERTY([RANLIB], [$RANLIB], [], [], [], [Y])
CS_CHECK_TOOLS([DLLTOOL], [dlltool])
CS_EMIT_BUILD_PROPERTY([CMD.DLLTOOL], [$DLLTOOL])
CS_CHECK_TOOLS([DLLWRAP], [dllwrap])
CS_EMIT_BUILD_PROPERTY([CMD.DLLWRAP], [$DLLWRAP])
CS_CHECK_TOOLS([WINDRES], [windres])
CS_EMIT_BUILD_PROPERTY([CMD.WINDRES], [$WINDRES])
CS_CHECK_TOOLS([STRINGS], [strings])
CS_EMIT_BUILD_PROPERTY([CMD.STRINGS], [$STRINGS])
CS_CHECK_TOOLS([OBJCOPY], [objcopy])
CS_EMIT_BUILD_PROPERTY([CMD.OBJCOPY], [$OBJCOPY])
CS_CHECK_LIBTOOL
CS_EMIT_BUILD_PROPERTY([LIBTOOL], [$LIBTOOL])
CS_EMIT_BUILD_PROPERTY([APPLE_LIBTOOL], [$APPLE_LIBTOOL])
])
#------------------------------------------------------------------------------
# CS_CHECK_COMMON_TOOLS_BASIC
# Checks for basic tools for building things.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_COMMON_TOOLS_BASIC],
[CS_CHECK_MKDIR
CS_EMIT_BUILD_PROPERTY([CMD.MKDIR], [$MKDIR])
CS_EMIT_BUILD_PROPERTY([CMD.MKDIRS], [$MKDIRS])
CS_CHECK_PROGS([INSTALL], [install])
CS_EMIT_BUILD_PROPERTY([INSTALL], [$INSTALL])])
#------------------------------------------------------------------------------
# CS_CHECK_COMMON_TOOLS_DOC_TEXINFO
# Checks for tools to generate documentation from texinfo files.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_COMMON_TOOLS_DOC_TEXINFO],
[CS_CHECK_PROGS([TEXI2DVI], [texi2dvi])
CS_EMIT_BUILD_PROPERTY([CMD.TEXI2DVI], [$TEXI2DVI])
CS_CHECK_PROGS([TEXI2PDF], [texi2pdf])
CS_EMIT_BUILD_PROPERTY([CMD.TEXI2PDF], [$TEXI2PDF])
CS_CHECK_PROGS([DVIPS], [dvips])
CS_EMIT_BUILD_PROPERTY([CMD.DVIPS], [$DVIPS])
CS_CHECK_PROGS([DVIPDF], [dvipdf])
CS_EMIT_BUILD_PROPERTY([CMD.DVIPDF], [$DVIPDF])
CS_CHECK_PROGS([MAKEINFO], [makeinfo])
CS_EMIT_BUILD_PROPERTY([CMD.MAKEINFO], [$MAKEINFO])])
#------------------------------------------------------------------------------
# CS_CHECK_COMMON_TOOLS_DOC_DOXYGEN
# Checks for tools to generate source documentation via doxygen.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_COMMON_TOOLS_DOC_DOXYGEN],
[CS_CHECK_PROGS([DOXYGEN], [doxygen])
CS_EMIT_BUILD_PROPERTY([CMD.DOXYGEN], [$DOXYGEN])
CS_CHECK_TOOLS([DOT], [dot])
CS_EMIT_BUILD_PROPERTY([CMD.DOT], [$DOT])])
#------------------------------------------------------------------------------
# CS_CHECK_COMMON_LIBS
# Check for typical required libraries (libm, libmx, libdl, libnsl).
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_COMMON_LIBS],
[AC_LANG_PUSH([C])
AC_CHECK_LIB([m], [pow], [cs_cv_libm_libs=-lm], [cs_cv_libm_libs=])
AC_CHECK_LIB([m], [cosf], [cs_cv_libm_libs=-lm])
AC_CHECK_LIB([mx], [cosf])
AC_CHECK_LIB([dl], [dlopen], [cs_cv_libdl_libs=-ldl], [cs_cv_libdl_libs=])
AC_CHECK_LIB([nsl], [gethostbyname])
AC_LANG_POP([C])])

View File

@@ -1,51 +1,51 @@
# checkcppunit.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_CPPUNIT([EMITTER])
# Check if CppUnit (http://cppunit.sourceforge.net/), the unit-testing
# framework is available. The shell variable cs_cv_libcppunit is set to
# "yes" if CppUnit is discovered, else "no". If available, then the
# variables cs_cv_libcppunit_cflags, cs_cv_libcppunit_lflags, and
# cs_cv_libcppunit_libs are set. If EMITTER is provided, then
# CS_EMIT_BUILD_RESULT() is invoked with EMITTER in order to record the
# results in an output file. As a convenience, if EMITTER is the literal
# value "emit" or "yes", then CS_EMIT_BUILD_RESULT()'s default emitter
# will be used.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_CPPUNIT],
[CS_CHECK_LIB_WITH([cppunit],
[AC_LANG_PROGRAM([[#include <cppunit/ui/text/TestRunner.h>]],
[CppUnit::TextUi::TestRunner r; r.run();])],
[], [C++])
AS_IF([test $cs_cv_libcppunit = yes],
[CS_CHECK_BUILD([if cppunit is sufficiently recent],
[cs_cv_libcppunit_recent],
[AC_LANG_PROGRAM(
[[#include <cppunit/BriefTestProgressListener.h>]],
[CppUnit::BriefTestProgressListener b; b.startTest(0);])],
[], [C++],
[CS_EMIT_BUILD_RESULT([cs_cv_libcppunit], [CPPUNIT],
CS_EMITTER_OPTIONAL([$1]))], [], [],
[$cs_cv_libcppunit_cflags],
[$cs_cv_libcppunit_lflags],
[$cs_cv_libcppunit_libs])])])
# checkcppunit.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_CPPUNIT([EMITTER])
# Check if CppUnit (http://cppunit.sourceforge.net/), the unit-testing
# framework is available. The shell variable cs_cv_libcppunit is set to
# "yes" if CppUnit is discovered, else "no". If available, then the
# variables cs_cv_libcppunit_cflags, cs_cv_libcppunit_lflags, and
# cs_cv_libcppunit_libs are set. If EMITTER is provided, then
# CS_EMIT_BUILD_RESULT() is invoked with EMITTER in order to record the
# results in an output file. As a convenience, if EMITTER is the literal
# value "emit" or "yes", then CS_EMIT_BUILD_RESULT()'s default emitter
# will be used.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_CPPUNIT],
[CS_CHECK_LIB_WITH([cppunit],
[AC_LANG_PROGRAM([[#include <cppunit/ui/text/TestRunner.h>]],
[CppUnit::TextUi::TestRunner r; r.run();])],
[], [C++])
AS_IF([test $cs_cv_libcppunit = yes],
[CS_CHECK_BUILD([if cppunit is sufficiently recent],
[cs_cv_libcppunit_recent],
[AC_LANG_PROGRAM(
[[#include <cppunit/BriefTestProgressListener.h>]],
[CppUnit::BriefTestProgressListener b; b.startTest(0);])],
[], [C++],
[CS_EMIT_BUILD_RESULT([cs_cv_libcppunit], [CPPUNIT],
CS_EMITTER_OPTIONAL([$1]))], [], [],
[$cs_cv_libcppunit_cflags],
[$cs_cv_libcppunit_lflags],
[$cs_cv_libcppunit_libs])])])

View File

@@ -1,312 +1,312 @@
# checklib.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003-2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# cs_lib_paths_default
# Whitespace delimited list of directory tuples in which to search, by
# default, for external libraries. Each list item can specify an
# include|library directory tuple (for example, "/usr/include|/usr/lib"),
# or a single directory (for example, "/usr"). If the second form is
# used, then "include" and "lib" subdirectories of the directory are
# searched. If the library resources are not found, then the directory
# itself is searched. Thus, "/proj" is shorthand for
# "/proj/include|/proj/lib /proj|/proj".
#
# Present Cases:
# /usr/local -- Not all compilers search here by default, so we specify
# it manually.
# /sw -- Fink, the MacOS/X manager of Unix packages, installs here by
# default.
# /opt/local -- DarwinPorts installs here by default.
#------------------------------------------------------------------------------
m4_define([cs_lib_paths_default],
[/usr/local/include|/usr/local/lib \
/sw/include|/sw/lib \
/opt/local/include|/opt/local/lib \
/opt/include|/opt/lib])
#------------------------------------------------------------------------------
# cs_pkg_paths_default
# Comma delimited list of additional directories in which the
# `pkg-config' command should search for its `.pc' files.
#
# Present Cases:
# /usr/local/lib/pkgconfig -- Although a common location for .pc files
# installed by "make install", many `pkg-config' commands neglect
# to search here automatically.
# /sw/lib/pkgconfig -- Fink, the MacOS/X manager of Unix packages,
# installs .pc files here by default.
# /opt/local/lib/pkgconfig -- DarwinPorts installs .pc files here by
# default.
#------------------------------------------------------------------------------
m4_define([cs_pkg_paths_default],
[/usr/local/lib/pkgconfig,
/sw/lib/pkgconfig,
/opt/local/lib/pkgconfig,
/opt/lib/pkgconfig])
#------------------------------------------------------------------------------
# CS_CHECK_LIB_WITH(LIBRARY, PROGRAM, [SEARCH-LIST], [LANGUAGE],
# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [OTHER-CFLAGS],
# [OTHER-LFLAGS], [OTHER-LIBS], [ALIASES])
# Very roughly similar in concept to AC_CHECK_LIB(), but allows caller to
# to provide list of directories in which to search for LIBRARY; allows
# user to override library location via --with-LIBRARY=dir; and consults
# `pkg-config' (if present) and `LIBRARY-config' (if present, i.e.
# `sdl-config') in order to obtain compiler and linker flags. LIBRARY is
# the name of the library or MacOS/X framework which is to be located
# (for example, "readline" for `libreadline.a' or `readline.framework').
# PROGRAM, which is typically composed with AC_LANG_PROGRAM(), is a
# program which references at least one function or symbol in LIBRARY.
# SEARCH-LIST is a whitespace-delimited list of paths in which to search
# for the library and its header files, in addition to those searched by
# the compiler and linker by default, and those referenced by the
# cs_lib_paths_default macro. Each list item can specify an
# `include|library' directory tuple (for example,
# "/usr/include|/usr/lib"), or a single directory (for example, "/usr").
# If the second form is used, then "include" and "lib" subdirectories of
# the directory are searched. If the library resources are not found,
# then the directory itself is searched. Thus, "/proj" is shorthand for
# "/proj/include|/proj/lib /proj|/proj". Items in the search list can
# include wildcards. SEARCH-LIST can be overridden by the user with the
# --with-LIBRARY=dir option, in which case only "dir/include|dir/lib" and
# "dir|dir" are searched. If SEARCH-LIST is omitted and the user did not
# override the search list via --with-LIBRARY=dir, then only the
# directories normally searched by the compiler and the directories
# mentioned via cs_lib_paths_default are searched. LANGUAGE is typically
# either C or C++ and specifies which compiler to use for the test. If
# LANGUAGE is omitted, C is used. OTHER-CFLAGS, OTHER-LFLAGS, and
# OTHER-LIBS can specify additional compiler flags, linker flags, and
# libraries needed to successfully link with LIBRARY. The optional
# ALIASES is a comma-delimited list of library names for which to search
# in case LIBRARY is not located (for example "[sdl1.2, sdl12]" for
# libsdl1.2.a, sdl1.2.framework, libsdl12.a, and sdl12.framework). If
# the library or one of its aliases is found and can be successfully
# linked into a program, then the shell cache variable cs_cv_libLIBRARY
# is set to "yes"; cs_cv_libLIBRARY_cflags, cs_cv_libLIBRARY_lflags, and
# cs_cv_libLIBRARY_libs are set, respectively, to the compiler flags
# (including OTHER-CFLAGS), linker flags (including OTHER-LFLAGS), and
# library references (including OTHER-LIBS) which resulted in a
# successful build; and ACTION-IF-FOUND is invoked. If the library was
# not found or was unlinkable, or if the user disabled the library via
# --without-LIBRARY, then cs_cv_libLIBRARY is set to "no" and
# ACTION-IF-NOT-FOUND is invoked. Note that the exported shell variable
# names are always composed from LIBRARY regardless of whether the test
# succeeded because the primary library was discovered or one of the
# aliases.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_LIB_WITH],
[AC_ARG_WITH([$1], [AC_HELP_STRING([--with-$1=dir],
[specify location of lib$1 if not detected automatically; searches
dir/include, dir/lib, and dir])])
# Backward compatibility: Recognize --with-lib$1 as alias for --with-$1.
AS_IF([test -n "$with_lib$1" && test -z "$with_$1"],
[with_$1="$with_lib$1"])
AS_IF([test -z "$with_$1"], [with_$1=yes])
AS_IF([test "$with_$1" != no],
[# If --with-$1 value is same as cached value, then assume other
# cached values are also valid; otherwise, ignore all cached values.
AS_IF([test "$with_$1" != "$cs_cv_with_$1"],
[cs_ignore_cache=yes], [cs_ignore_cache=no])
cs_check_lib_flags=''
AS_IF([test $with_$1 = yes],
[m4_foreach([cs_check_lib_alias], [$1, $10],
[_CS_CHECK_LIB_PKG_CONFIG_FLAGS([cs_check_lib_flags],
cs_check_lib_alias)
_CS_CHECK_LIB_CONFIG_FLAGS([cs_check_lib_flags],
cs_check_lib_alias)
])])
AS_IF([test $with_$1 != yes],
[cs_check_lib_paths=$with_$1],
[cs_check_lib_paths="| cs_lib_paths_default $3"])
m4_foreach([cs_check_lib_alias], [$1, $10],
[_CS_CHECK_LIB_CREATE_FLAGS([cs_check_lib_flags],
cs_check_lib_alias, [$cs_check_lib_paths])
])
CS_CHECK_BUILD([for lib$1], [cs_cv_lib$1], [$2], [$cs_check_lib_flags],
[$4], [], [], [$cs_ignore_cache], [$7], [$8], [$9])],
[cs_cv_lib$1=no])
cs_cv_with_$1="$with_$1"
AS_IF([test "$cs_cv_lib$1" = yes], [$5], [$6])])
#------------------------------------------------------------------------------
# CS_CHECK_PKG_CONFIG
# Check if the `pkg-config' command is available and reasonably recent.
# This program acts as a central repository of build flags for various
# packages. For example, to determine the compiler flags for FreeType2
# use, "pkg-config --cflags freetype2"; and "pkg-config --libs freetype2"
# to determine the linker flags. If `pkg-config' is found and is
# sufficiently recent, PKG_CONFIG is set and AC_SUBST() invoked.
#------------------------------------------------------------------------------
m4_define([CS_PKG_CONFIG_MIN], [0.9.0])
AC_DEFUN([CS_CHECK_PKG_CONFIG],
[AS_IF([test "$cs_prog_pkg_config_checked" != yes],
[CS_CHECK_TOOLS([PKG_CONFIG], [pkg-config])
_CS_CHECK_PKG_CONFIG_PREPARE_PATH
cs_prog_pkg_config_checked=yes])
AS_IF([test -z "$cs_cv_prog_pkg_config_ok"],
[AS_IF([test -n "$PKG_CONFIG"],
[AS_IF([$PKG_CONFIG --atleast-pkgconfig-version=CS_PKG_CONFIG_MIN],
[cs_cv_prog_pkg_config_ok=yes],
[cs_cv_prog_pkg_config_ok=no])],
[cs_cv_prog_pkg_config_ok=no])])])
AC_DEFUN([_CS_CHECK_PKG_CONFIG_PREPARE_PATH],
[PKG_CONFIG_PATH="m4_foreach([cs_pkg_path], [cs_pkg_paths_default],
[cs_pkg_path$PATH_SEPARATOR])$PKG_CONFIG_PATH"
export PKG_CONFIG_PATH])
#------------------------------------------------------------------------------
# _CS_CHECK_LIB_PKG_CONFIG_FLAGS(VARIABLE, LIBRARY)
# Helper macro for CS_CHECK_LIB_WITH(). Checks if `pkg-config' knows
# about LIBRARY and, if so, appends a build tuple consisting of the
# compiler and linker flags reported by `pkg-config' to the list of
# tuples stored in the shell variable VARIABLE.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_CHECK_LIB_PKG_CONFIG_FLAGS],
[CS_CHECK_PKG_CONFIG
AS_IF([test $cs_cv_prog_pkg_config_ok = yes],
[AC_CACHE_CHECK([if $PKG_CONFIG recognizes $2], [_CS_CLPCF_CVAR([$2])],
[AS_IF([$PKG_CONFIG --exists $2],
[_CS_CLPCF_CVAR([$2])=yes], [_CS_CLPCF_CVAR([$2])=no])])
AS_IF([test $_CS_CLPCF_CVAR([$2]) = yes],
[_CS_CHECK_LIB_CONFIG_PROG_FLAGS([$1], [pkg_config_$2],
[$PKG_CONFIG], [$2])])])])
AC_DEFUN([_CS_CLPCF_CVAR], [AS_TR_SH([cs_cv_prog_pkg_config_$1])])
#------------------------------------------------------------------------------
# _CS_CHECK_LIB_CONFIG_FLAGS(VARIABLE, LIBRARY)
# Helper macro for CS_CHECK_LIB_WITH(). Checks if `LIBRARY-config'
# (i.e. `sdl-config') exists and, if so, appends a build tuple consisting
# of the compiler and linker flags reported by `LIBRARY-config' to the
# list of tuples stored in the shell variable VARIABLE.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_CHECK_LIB_CONFIG_FLAGS],
[CS_CHECK_TOOLS(_CS_CLCF_SHVAR([$2]), [$2-config])
AS_IF([test -n "$_CS_CLCF_SHVAR([$2])"],
[AS_IF([test -z "$_CS_CLCF_CVAR([$2])"],
[AS_IF([$_CS_CLCF_SHVAR([$2]) --cflags --libs >/dev/null 2>&1],
[_CS_CLCF_CVAR([$2])=yes], [_CS_CLCF_CVAR([$2])=no])])
AS_IF([test $_CS_CLCF_CVAR([$2]) = yes],
[_CS_CHECK_LIB_CONFIG_PROG_FLAGS([$1], [config_$2],
[$_CS_CLCF_SHVAR([$2])])])])])
AC_DEFUN([_CS_CLCF_CVAR], [AS_TR_SH([cs_cv_prog_config_$1_ok])])
AC_DEFUN([_CS_CLCF_SHVAR], [m4_toupper(AS_TR_SH([CONFIG_$1]))])
#------------------------------------------------------------------------------
# _CS_CHECK_LIB_CONFIG_PROG_FLAGS(VARIABLE, TAG, CONFIG-PROGRAM, [ARGS])
# Helper macro for _CS_CHECK_LIB_PKG_CONFIG_FLAGS() and
# _CS_CHECK_LIB_CONFIG_FLAGS(). CONFIG-PROGRAM is a command which
# responds to the --cflags and --libs options and returns suitable
# compiler and linker flags for some package. ARGS, if supplied, is
# passed to CONFIG-PROGRAM after the --cflags or --libs argument. The
# results of the --cflags and --libs options are packed into a build
# tuple and appended to the list of tuples stored in the shell variable
# VARIABLE. TAG is used to compose the name of the cache variable. A good
# choice for TAG is some unique combination of the library name and
# configuration program.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_CHECK_LIB_CONFIG_PROG_FLAGS],
[AS_IF([test -z "$_CS_CLCPF_CVAR([$2])"],
[cs_check_lib_cflag=CS_RUN_PATH_NORMALIZE([$3 --cflags $4])
cs_check_lib_lflag=''
cs_check_lib_libs=CS_RUN_PATH_NORMALIZE([$3 --libs $4])
_CS_CLCPF_CVAR([$2])=CS_CREATE_TUPLE(
[$cs_check_lib_cflag],
[$cs_check_lib_lflag],
[$cs_check_lib_libs])])
$1="$$1 $_CS_CLCPF_CVAR([$2])"])
AC_DEFUN([_CS_CLCPF_CVAR], [AS_TR_SH([cs_cv_prog_$1_flags])])
#------------------------------------------------------------------------------
# _CS_CHECK_LIB_CREATE_FLAGS(VARIABLE, LIBRARY, PATHS)
# Helper macro for CS_CHECK_LIB_WITH(). Constructs a list of build
# tuples suitable for CS_CHECK_BUILD() and appends the tuple list to the
# shell variable VARIABLE. LIBRARY and PATHS have the same meanings as
# the like-named arguments of CS_CHECK_LIB_WITH().
#------------------------------------------------------------------------------
AC_DEFUN([_CS_CHECK_LIB_CREATE_FLAGS],
[for cs_lib_item in $3
do
case $cs_lib_item in
*\|*) CS_SPLIT(
[$cs_lib_item], [cs_check_incdir,cs_check_libdir], [|])
_CS_CHECK_LIB_CREATE_FLAG([$1],
[$cs_check_incdir], [$cs_check_libdir], [$2])
;;
*) _CS_CHECK_LIB_CREATE_FLAG([$1],
[$cs_lib_item/include], [$cs_lib_item/lib], [$2])
_CS_CHECK_LIB_CREATE_FLAG(
[$1], [$cs_lib_item], [$cs_lib_item], [$2])
;;
esac
done])
#------------------------------------------------------------------------------
# _CS_CHECK_LIB_CREATE_FLAG(VARIABLE, HEADER-DIR, LIBRARY-DIR, LIBRARY)
# Helper macro for _CS_CHECK_LIB_CREATE_FLAGS(). Constructs build tuples
# suitable for CS_CHECK_BUILD() for given header and library directories,
# and appends the tuples to the shell variable VARIABLE. Synthesizes
# tuples which check for LIBRARY as a MacOS/X framework, and a standard
# link library.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_CHECK_LIB_CREATE_FLAG],
[AS_IF([test -n "$2"], [cs_check_lib_cflag="-I$2"], [cs_check_lib_cflag=''])
AS_IF([test -n "$3"], [cs_check_lib_lflag="-L$3"], [cs_check_lib_lflag=''])
AS_IF([test -n "$4"],
[cs_check_lib_libs="-l$4"
cs_check_lib_framework="-framework $4"],
[cs_check_lib_libs=''
cs_check_lib_framework=''])
$1="$$1
CS_CREATE_TUPLE(
[$cs_check_lib_cflag],
[$cs_check_lib_lflag],
[$cs_check_lib_framework])
CS_CREATE_TUPLE(
[$cs_check_lib_cflag],
[$cs_check_lib_lflag],
[$cs_check_lib_libs])"])
# checklib.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003-2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# cs_lib_paths_default
# Whitespace delimited list of directory tuples in which to search, by
# default, for external libraries. Each list item can specify an
# include|library directory tuple (for example, "/usr/include|/usr/lib"),
# or a single directory (for example, "/usr"). If the second form is
# used, then "include" and "lib" subdirectories of the directory are
# searched. If the library resources are not found, then the directory
# itself is searched. Thus, "/proj" is shorthand for
# "/proj/include|/proj/lib /proj|/proj".
#
# Present Cases:
# /usr/local -- Not all compilers search here by default, so we specify
# it manually.
# /sw -- Fink, the MacOS/X manager of Unix packages, installs here by
# default.
# /opt/local -- DarwinPorts installs here by default.
#------------------------------------------------------------------------------
m4_define([cs_lib_paths_default],
[/usr/local/include|/usr/local/lib \
/sw/include|/sw/lib \
/opt/local/include|/opt/local/lib \
/opt/include|/opt/lib])
#------------------------------------------------------------------------------
# cs_pkg_paths_default
# Comma delimited list of additional directories in which the
# `pkg-config' command should search for its `.pc' files.
#
# Present Cases:
# /usr/local/lib/pkgconfig -- Although a common location for .pc files
# installed by "make install", many `pkg-config' commands neglect
# to search here automatically.
# /sw/lib/pkgconfig -- Fink, the MacOS/X manager of Unix packages,
# installs .pc files here by default.
# /opt/local/lib/pkgconfig -- DarwinPorts installs .pc files here by
# default.
#------------------------------------------------------------------------------
m4_define([cs_pkg_paths_default],
[/usr/local/lib/pkgconfig,
/sw/lib/pkgconfig,
/opt/local/lib/pkgconfig,
/opt/lib/pkgconfig])
#------------------------------------------------------------------------------
# CS_CHECK_LIB_WITH(LIBRARY, PROGRAM, [SEARCH-LIST], [LANGUAGE],
# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [OTHER-CFLAGS],
# [OTHER-LFLAGS], [OTHER-LIBS], [ALIASES])
# Very roughly similar in concept to AC_CHECK_LIB(), but allows caller to
# to provide list of directories in which to search for LIBRARY; allows
# user to override library location via --with-LIBRARY=dir; and consults
# `pkg-config' (if present) and `LIBRARY-config' (if present, i.e.
# `sdl-config') in order to obtain compiler and linker flags. LIBRARY is
# the name of the library or MacOS/X framework which is to be located
# (for example, "readline" for `libreadline.a' or `readline.framework').
# PROGRAM, which is typically composed with AC_LANG_PROGRAM(), is a
# program which references at least one function or symbol in LIBRARY.
# SEARCH-LIST is a whitespace-delimited list of paths in which to search
# for the library and its header files, in addition to those searched by
# the compiler and linker by default, and those referenced by the
# cs_lib_paths_default macro. Each list item can specify an
# `include|library' directory tuple (for example,
# "/usr/include|/usr/lib"), or a single directory (for example, "/usr").
# If the second form is used, then "include" and "lib" subdirectories of
# the directory are searched. If the library resources are not found,
# then the directory itself is searched. Thus, "/proj" is shorthand for
# "/proj/include|/proj/lib /proj|/proj". Items in the search list can
# include wildcards. SEARCH-LIST can be overridden by the user with the
# --with-LIBRARY=dir option, in which case only "dir/include|dir/lib" and
# "dir|dir" are searched. If SEARCH-LIST is omitted and the user did not
# override the search list via --with-LIBRARY=dir, then only the
# directories normally searched by the compiler and the directories
# mentioned via cs_lib_paths_default are searched. LANGUAGE is typically
# either C or C++ and specifies which compiler to use for the test. If
# LANGUAGE is omitted, C is used. OTHER-CFLAGS, OTHER-LFLAGS, and
# OTHER-LIBS can specify additional compiler flags, linker flags, and
# libraries needed to successfully link with LIBRARY. The optional
# ALIASES is a comma-delimited list of library names for which to search
# in case LIBRARY is not located (for example "[sdl1.2, sdl12]" for
# libsdl1.2.a, sdl1.2.framework, libsdl12.a, and sdl12.framework). If
# the library or one of its aliases is found and can be successfully
# linked into a program, then the shell cache variable cs_cv_libLIBRARY
# is set to "yes"; cs_cv_libLIBRARY_cflags, cs_cv_libLIBRARY_lflags, and
# cs_cv_libLIBRARY_libs are set, respectively, to the compiler flags
# (including OTHER-CFLAGS), linker flags (including OTHER-LFLAGS), and
# library references (including OTHER-LIBS) which resulted in a
# successful build; and ACTION-IF-FOUND is invoked. If the library was
# not found or was unlinkable, or if the user disabled the library via
# --without-LIBRARY, then cs_cv_libLIBRARY is set to "no" and
# ACTION-IF-NOT-FOUND is invoked. Note that the exported shell variable
# names are always composed from LIBRARY regardless of whether the test
# succeeded because the primary library was discovered or one of the
# aliases.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_LIB_WITH],
[AC_ARG_WITH([$1], [AC_HELP_STRING([--with-$1=dir],
[specify location of lib$1 if not detected automatically; searches
dir/include, dir/lib, and dir])])
# Backward compatibility: Recognize --with-lib$1 as alias for --with-$1.
AS_IF([test -n "$with_lib$1" && test -z "$with_$1"],
[with_$1="$with_lib$1"])
AS_IF([test -z "$with_$1"], [with_$1=yes])
AS_IF([test "$with_$1" != no],
[# If --with-$1 value is same as cached value, then assume other
# cached values are also valid; otherwise, ignore all cached values.
AS_IF([test "$with_$1" != "$cs_cv_with_$1"],
[cs_ignore_cache=yes], [cs_ignore_cache=no])
cs_check_lib_flags=''
AS_IF([test $with_$1 = yes],
[m4_foreach([cs_check_lib_alias], [$1, $10],
[_CS_CHECK_LIB_PKG_CONFIG_FLAGS([cs_check_lib_flags],
cs_check_lib_alias)
_CS_CHECK_LIB_CONFIG_FLAGS([cs_check_lib_flags],
cs_check_lib_alias)
])])
AS_IF([test $with_$1 != yes],
[cs_check_lib_paths=$with_$1],
[cs_check_lib_paths="| cs_lib_paths_default $3"])
m4_foreach([cs_check_lib_alias], [$1, $10],
[_CS_CHECK_LIB_CREATE_FLAGS([cs_check_lib_flags],
cs_check_lib_alias, [$cs_check_lib_paths])
])
CS_CHECK_BUILD([for lib$1], [cs_cv_lib$1], [$2], [$cs_check_lib_flags],
[$4], [], [], [$cs_ignore_cache], [$7], [$8], [$9])],
[cs_cv_lib$1=no])
cs_cv_with_$1="$with_$1"
AS_IF([test "$cs_cv_lib$1" = yes], [$5], [$6])])
#------------------------------------------------------------------------------
# CS_CHECK_PKG_CONFIG
# Check if the `pkg-config' command is available and reasonably recent.
# This program acts as a central repository of build flags for various
# packages. For example, to determine the compiler flags for FreeType2
# use, "pkg-config --cflags freetype2"; and "pkg-config --libs freetype2"
# to determine the linker flags. If `pkg-config' is found and is
# sufficiently recent, PKG_CONFIG is set and AC_SUBST() invoked.
#------------------------------------------------------------------------------
m4_define([CS_PKG_CONFIG_MIN], [0.9.0])
AC_DEFUN([CS_CHECK_PKG_CONFIG],
[AS_IF([test "$cs_prog_pkg_config_checked" != yes],
[CS_CHECK_TOOLS([PKG_CONFIG], [pkg-config])
_CS_CHECK_PKG_CONFIG_PREPARE_PATH
cs_prog_pkg_config_checked=yes])
AS_IF([test -z "$cs_cv_prog_pkg_config_ok"],
[AS_IF([test -n "$PKG_CONFIG"],
[AS_IF([$PKG_CONFIG --atleast-pkgconfig-version=CS_PKG_CONFIG_MIN],
[cs_cv_prog_pkg_config_ok=yes],
[cs_cv_prog_pkg_config_ok=no])],
[cs_cv_prog_pkg_config_ok=no])])])
AC_DEFUN([_CS_CHECK_PKG_CONFIG_PREPARE_PATH],
[PKG_CONFIG_PATH="m4_foreach([cs_pkg_path], [cs_pkg_paths_default],
[cs_pkg_path$PATH_SEPARATOR])$PKG_CONFIG_PATH"
export PKG_CONFIG_PATH])
#------------------------------------------------------------------------------
# _CS_CHECK_LIB_PKG_CONFIG_FLAGS(VARIABLE, LIBRARY)
# Helper macro for CS_CHECK_LIB_WITH(). Checks if `pkg-config' knows
# about LIBRARY and, if so, appends a build tuple consisting of the
# compiler and linker flags reported by `pkg-config' to the list of
# tuples stored in the shell variable VARIABLE.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_CHECK_LIB_PKG_CONFIG_FLAGS],
[CS_CHECK_PKG_CONFIG
AS_IF([test $cs_cv_prog_pkg_config_ok = yes],
[AC_CACHE_CHECK([if $PKG_CONFIG recognizes $2], [_CS_CLPCF_CVAR([$2])],
[AS_IF([$PKG_CONFIG --exists $2],
[_CS_CLPCF_CVAR([$2])=yes], [_CS_CLPCF_CVAR([$2])=no])])
AS_IF([test $_CS_CLPCF_CVAR([$2]) = yes],
[_CS_CHECK_LIB_CONFIG_PROG_FLAGS([$1], [pkg_config_$2],
[$PKG_CONFIG], [$2])])])])
AC_DEFUN([_CS_CLPCF_CVAR], [AS_TR_SH([cs_cv_prog_pkg_config_$1])])
#------------------------------------------------------------------------------
# _CS_CHECK_LIB_CONFIG_FLAGS(VARIABLE, LIBRARY)
# Helper macro for CS_CHECK_LIB_WITH(). Checks if `LIBRARY-config'
# (i.e. `sdl-config') exists and, if so, appends a build tuple consisting
# of the compiler and linker flags reported by `LIBRARY-config' to the
# list of tuples stored in the shell variable VARIABLE.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_CHECK_LIB_CONFIG_FLAGS],
[CS_CHECK_TOOLS(_CS_CLCF_SHVAR([$2]), [$2-config])
AS_IF([test -n "$_CS_CLCF_SHVAR([$2])"],
[AS_IF([test -z "$_CS_CLCF_CVAR([$2])"],
[AS_IF([$_CS_CLCF_SHVAR([$2]) --cflags --libs >/dev/null 2>&1],
[_CS_CLCF_CVAR([$2])=yes], [_CS_CLCF_CVAR([$2])=no])])
AS_IF([test $_CS_CLCF_CVAR([$2]) = yes],
[_CS_CHECK_LIB_CONFIG_PROG_FLAGS([$1], [config_$2],
[$_CS_CLCF_SHVAR([$2])])])])])
AC_DEFUN([_CS_CLCF_CVAR], [AS_TR_SH([cs_cv_prog_config_$1_ok])])
AC_DEFUN([_CS_CLCF_SHVAR], [m4_toupper(AS_TR_SH([CONFIG_$1]))])
#------------------------------------------------------------------------------
# _CS_CHECK_LIB_CONFIG_PROG_FLAGS(VARIABLE, TAG, CONFIG-PROGRAM, [ARGS])
# Helper macro for _CS_CHECK_LIB_PKG_CONFIG_FLAGS() and
# _CS_CHECK_LIB_CONFIG_FLAGS(). CONFIG-PROGRAM is a command which
# responds to the --cflags and --libs options and returns suitable
# compiler and linker flags for some package. ARGS, if supplied, is
# passed to CONFIG-PROGRAM after the --cflags or --libs argument. The
# results of the --cflags and --libs options are packed into a build
# tuple and appended to the list of tuples stored in the shell variable
# VARIABLE. TAG is used to compose the name of the cache variable. A good
# choice for TAG is some unique combination of the library name and
# configuration program.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_CHECK_LIB_CONFIG_PROG_FLAGS],
[AS_IF([test -z "$_CS_CLCPF_CVAR([$2])"],
[cs_check_lib_cflag=CS_RUN_PATH_NORMALIZE([$3 --cflags $4])
cs_check_lib_lflag=''
cs_check_lib_libs=CS_RUN_PATH_NORMALIZE([$3 --libs $4])
_CS_CLCPF_CVAR([$2])=CS_CREATE_TUPLE(
[$cs_check_lib_cflag],
[$cs_check_lib_lflag],
[$cs_check_lib_libs])])
$1="$$1 $_CS_CLCPF_CVAR([$2])"])
AC_DEFUN([_CS_CLCPF_CVAR], [AS_TR_SH([cs_cv_prog_$1_flags])])
#------------------------------------------------------------------------------
# _CS_CHECK_LIB_CREATE_FLAGS(VARIABLE, LIBRARY, PATHS)
# Helper macro for CS_CHECK_LIB_WITH(). Constructs a list of build
# tuples suitable for CS_CHECK_BUILD() and appends the tuple list to the
# shell variable VARIABLE. LIBRARY and PATHS have the same meanings as
# the like-named arguments of CS_CHECK_LIB_WITH().
#------------------------------------------------------------------------------
AC_DEFUN([_CS_CHECK_LIB_CREATE_FLAGS],
[for cs_lib_item in $3
do
case $cs_lib_item in
*\|*) CS_SPLIT(
[$cs_lib_item], [cs_check_incdir,cs_check_libdir], [|])
_CS_CHECK_LIB_CREATE_FLAG([$1],
[$cs_check_incdir], [$cs_check_libdir], [$2])
;;
*) _CS_CHECK_LIB_CREATE_FLAG([$1],
[$cs_lib_item/include], [$cs_lib_item/lib], [$2])
_CS_CHECK_LIB_CREATE_FLAG(
[$1], [$cs_lib_item], [$cs_lib_item], [$2])
;;
esac
done])
#------------------------------------------------------------------------------
# _CS_CHECK_LIB_CREATE_FLAG(VARIABLE, HEADER-DIR, LIBRARY-DIR, LIBRARY)
# Helper macro for _CS_CHECK_LIB_CREATE_FLAGS(). Constructs build tuples
# suitable for CS_CHECK_BUILD() for given header and library directories,
# and appends the tuples to the shell variable VARIABLE. Synthesizes
# tuples which check for LIBRARY as a MacOS/X framework, and a standard
# link library.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_CHECK_LIB_CREATE_FLAG],
[AS_IF([test -n "$2"], [cs_check_lib_cflag="-I$2"], [cs_check_lib_cflag=''])
AS_IF([test -n "$3"], [cs_check_lib_lflag="-L$3"], [cs_check_lib_lflag=''])
AS_IF([test -n "$4"],
[cs_check_lib_libs="-l$4"
cs_check_lib_framework="-framework $4"],
[cs_check_lib_libs=''
cs_check_lib_framework=''])
$1="$$1
CS_CREATE_TUPLE(
[$cs_check_lib_cflag],
[$cs_check_lib_lflag],
[$cs_check_lib_framework])
CS_CREATE_TUPLE(
[$cs_check_lib_cflag],
[$cs_check_lib_lflag],
[$cs_check_lib_libs])"])

View File

@@ -1,68 +1,68 @@
# checklibtool.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_LIBTOOL
# Find and identify the various implementations of libtool. In
# particular, this macro is aware of GNU libtool and Apple's libtool
# (which serves a completely different purpose). On MacOS/X, GNU libtool
# is typically named glibtool, however a user might also use Fink to
# install the unadorned libtool; and the Fink-installed version might
# shadow Apple's own libtool if it appears in the PATH before the Apple
# tool. This macro jumps through the necessary hoops to distinguish and
# locate the various implementations. Sets the shell variable LIBTOOL to
# the located GNU libtool (if any), and APPLE_LIBTOOL to the located
# Apple libtool. Invokes AC_SUBST() for LIBTOOL and APPLE_LIBTOOL.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_LIBTOOL],
[# GNU: Search for libtool before glibtool since Fink version is likely newer.
m4_define([cs_lt_path_gnu],
[/sw/bin$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR$PATH])
AS_IF([test -z "$LIBTOOL"],
[CS_CHECK_TOOLS([LIBTOOL_TEST], [libtool glibtool gnulibtool], [],
[cs_lt_path_gnu])
AS_IF([test -n "$LIBTOOL_TEST"],
[CS_PATH_PROG([LIBTOOL_PATH], [$LIBTOOL_TEST], [], [cs_lt_path_gnu])
CS_LIBTOOL_CLASSIFY([$LIBTOOL_PATH],
[LIBTOOL="$LIBTOOL_PATH"],
[AS_IF([test -z "$APPLE_LIBTOOL"], [APPLE_LIBTOOL="$LIBTOOL_PATH"])
CS_CHECK_TOOLS([LIBTOOL], [glibtool gnulibtool])])])])
AC_SUBST([LIBTOOL])
# Apple: Ensure that Apple libtool will be found before GNU libtool from Fink.
m4_define([cs_lt_path_apple],[/bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH])
AS_IF([test -z "$APPLE_LIBTOOL"],
[CS_PATH_PROG([CS_LT_APPLE], [libtool], [], [cs_lt_path_apple])
CS_LIBTOOL_CLASSIFY([$CS_LT_APPLE], [],
[APPLE_LIBTOOL="$CS_LT_APPLE"])])
AC_SUBST([APPLE_LIBTOOL])])
AC_DEFUN([CS_LIBTOOL_CLASSIFY],
[AS_IF([test -n "$1"],
[AC_MSG_CHECKING([classification of $1])
CS_LIBTOOL_GNU_IFELSE([$1],
[AC_MSG_RESULT([gnu])
$2],
[AC_MSG_RESULT([apple])
$3])])])
AC_DEFUN([CS_LIBTOOL_GNU_IFELSE],
[AS_IF([AC_RUN_LOG([$1 --version 1>&2])], [$2], [$3])])
# checklibtool.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_LIBTOOL
# Find and identify the various implementations of libtool. In
# particular, this macro is aware of GNU libtool and Apple's libtool
# (which serves a completely different purpose). On MacOS/X, GNU libtool
# is typically named glibtool, however a user might also use Fink to
# install the unadorned libtool; and the Fink-installed version might
# shadow Apple's own libtool if it appears in the PATH before the Apple
# tool. This macro jumps through the necessary hoops to distinguish and
# locate the various implementations. Sets the shell variable LIBTOOL to
# the located GNU libtool (if any), and APPLE_LIBTOOL to the located
# Apple libtool. Invokes AC_SUBST() for LIBTOOL and APPLE_LIBTOOL.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_LIBTOOL],
[# GNU: Search for libtool before glibtool since Fink version is likely newer.
m4_define([cs_lt_path_gnu],
[/sw/bin$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR$PATH])
AS_IF([test -z "$LIBTOOL"],
[CS_CHECK_TOOLS([LIBTOOL_TEST], [libtool glibtool gnulibtool], [],
[cs_lt_path_gnu])
AS_IF([test -n "$LIBTOOL_TEST"],
[CS_PATH_PROG([LIBTOOL_PATH], [$LIBTOOL_TEST], [], [cs_lt_path_gnu])
CS_LIBTOOL_CLASSIFY([$LIBTOOL_PATH],
[LIBTOOL="$LIBTOOL_PATH"],
[AS_IF([test -z "$APPLE_LIBTOOL"], [APPLE_LIBTOOL="$LIBTOOL_PATH"])
CS_CHECK_TOOLS([LIBTOOL], [glibtool gnulibtool])])])])
AC_SUBST([LIBTOOL])
# Apple: Ensure that Apple libtool will be found before GNU libtool from Fink.
m4_define([cs_lt_path_apple],[/bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH])
AS_IF([test -z "$APPLE_LIBTOOL"],
[CS_PATH_PROG([CS_LT_APPLE], [libtool], [], [cs_lt_path_apple])
CS_LIBTOOL_CLASSIFY([$CS_LT_APPLE], [],
[APPLE_LIBTOOL="$CS_LT_APPLE"])])
AC_SUBST([APPLE_LIBTOOL])])
AC_DEFUN([CS_LIBTOOL_CLASSIFY],
[AS_IF([test -n "$1"],
[AC_MSG_CHECKING([classification of $1])
CS_LIBTOOL_GNU_IFELSE([$1],
[AC_MSG_RESULT([gnu])
$2],
[AC_MSG_RESULT([apple])
$3])])])
AC_DEFUN([CS_LIBTOOL_GNU_IFELSE],
[AS_IF([AC_RUN_LOG([$1 --version 1>&2])], [$2], [$3])])

View File

@@ -1,235 +1,235 @@
#==============================================================================
# Copyright (C)2003-2006 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_OPENGL
# Check for OpenGL.
#
# IMPLEMENTATION NOTES
#
# Some Mesa installations require pthread, so pthread flags are employed if
# available.
#
# The check for opengl32 needs to precede other checks because Cygwin users
# often have Mesa installed, and Mesa's OpenGL library is compiled without the
# __stdcall flags which results in link errors, whereas Microsoft's native
# opengl32 works fine. Conversely, some Unix implementations have Wine
# installed (Windows emulation layer) which includes an opengl32.so library.
# We need to avoid detection of this library on Unix since it would cause an
# undesirable dependence upon Wine.
#
# Many OpenGL libraries on Unix already contain GLX, so there is no separate
# GLX library, thus we first check for GLX using the discovered OpenGL library
# before attempting to locate a separate GLX-specific library.
#
# On MacOS/X, some users have XFree86 installed which creates a link from
# /usr/include/GL to /usr/X11R6/include/GL. We want to ignore this directory
# and instead check for Apple's OpenGL.framework, if we are not cross-building
# for Darwin. We accomplish this by placing the OpenGL.framework test ahead of
# the other tests.
#
# At least one user (Jorrit) has a strange installation in which inclusion of
# <windows.h> fails if an int32 is not present, thus we must take this into
# account.
#------------------------------------------------------------------------------
m4_define([cs_define_int32],
[[#if !HAVE_TYPE_INT32
typedef long int32;
#endif
]])
# CS_GL_INCLUDE(CPP-MACRO,FALLBACK,HEADER)
AC_DEFUN([CS_GL_INCLUDE],
[[#if HAVE_WINDOWS_H
#if !HAVE_TYPE_INT32
typedef long int32;
#endif
#include <windows.h>
#endif
#ifndef CS_HEADER_GLOBAL
#define CS_HEADER_GLOBAL(X,Y) CS_HEADER_GLOBAL_COMPOSE(X,Y)
#define CS_HEADER_GLOBAL_COMPOSE(X,Y) <X/Y>
#endif
#ifdef $1
#include CS_HEADER_GLOBAL($1,$3)
#else
#include <$2/$3>
#endif]])
AC_DEFUN([CS_CHECK_OPENGL],
[AC_REQUIRE([CS_CHECK_HOST])
AC_REQUIRE([CS_CHECK_COMMON_LIBS])
AC_REQUIRE([CS_CHECK_PTHREAD])
AC_REQUIRE([AC_PATH_X])
AC_REQUIRE([AC_PATH_XTRA])
AC_CHECK_TYPE([int32], [AC_DEFINE([HAVE_TYPE_INT32], [],
[Whether the int32 type is available])], [])
AC_CHECK_HEADERS([windows.h], [], [], [cs_define_int32])
# Apply plaform-specific flags if necessary.
cs_gl_plat_cflags=''
cs_gl_plat_lflags=''
cs_gl_plat_libs=''
AS_IF([test -n "$cs_cv_libm_cflags$cs_cv_libm_lflags$cs_cv_libm_libs"],
[cs_gl_plat_cflags="$cs_cv_libm_cflags $cs_gl_plat_cflags"
cs_gl_plat_lflags="$cs_cv_libm_lflags $cs_gl_plat_lflags"
cs_gl_plat_libs="$cs_cv_libm_libs $cs_gl_plat_libs"])
AS_IF([test $cs_cv_sys_pthread = yes],
[cs_gl_plat_cflags="$cs_cv_sys_pthread_cflags $cs_gl_plat_cflags"
cs_gl_plat_lflags="$cs_cv_sys_pthread_lflags $cs_gl_plat_lflags"
cs_gl_plat_libs="$cs_cv_sys_pthread_libs $cs_gl_plat_libs"])
AS_IF([test "$no_x" != yes],
[cs_gl_plat_cflags="$X_CFLAGS $cs_gl_plat_cflags"
cs_gl_plat_lflags="$cs_gl_plat_lflags"
cs_gl_plat_libs="
$X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS $cs_gl_plat_libs"])
# Mesa requested?
AC_ARG_WITH([mesa], [AC_HELP_STRING([--with-mesa],
[use Mesa OpenGL library if available (default YES)])],
[], [with_mesa=yes])
AS_IF([test $with_mesa != no],
[cs_mesa_gl=CS_CREATE_TUPLE([],[],[-lMesaGL])])
# MacOS/X or Darwin?
AS_IF([test "x$cs_host_macosx" = "xyes"],
[cs_osx_gl=CS_CREATE_TUPLE([-DCS_OPENGL_PATH=OpenGL],[],[-framework OpenGL])])
# Windows?
AS_IF([test $cs_host_family = windows],
[cs_win32_gl=CS_CREATE_TUPLE([],[],[-lopengl32])])
# Check for OpenGL.
CS_CHECK_BUILD([for OpenGL], [cs_cv_libgl],
[AC_LANG_PROGRAM([CS_GL_INCLUDE([CS_OPENGL_PATH],[GL],[gl.h])],[glEnd()])],
[$cs_win32_gl \
$cs_osx_gl \
CS_CREATE_TUPLE([],[],[-lGL]) \
CS_CREATE_TUPLE([],[],[-lgl]) \
$cs_mesa_gl], [],
[CS_EMIT_BUILD_RESULT([cs_cv_libgl], [GL])], [], [],
[$cs_gl_plat_cflags], [$cs_gl_plat_lflags], [$cs_gl_plat_libs])])
#------------------------------------------------------------------------------
# CS_CHECK_GLU
# Check for GLU.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_GLU],
[AC_REQUIRE([CS_CHECK_OPENGL])
AS_IF([test $cs_cv_libgl = yes],
[AS_IF([test $with_mesa != no],
[cs_mesa_glu=CS_CREATE_TUPLE([],[],[-lMesaGLU])])
# MacOS/X or Darwin?
AS_IF([test "x$cs_host_macosx" = "xyes"],
[cs_osx_glu=CS_CREATE_TUPLE([-DCS_GLU_PATH=OpenGL],[],[-framework OpenGL])])
# Windows?
AS_IF([test $cs_host_family = windows],
[cs_win32_gl=CS_CREATE_TUPLE([],[],[-lopengl32])])
# Check for GLU.
CS_CHECK_BUILD([for GLU], [cs_cv_libglu],
[AC_LANG_PROGRAM(
[CS_GL_INCLUDE([CS_GLU_PATH],[GL],[glu.h])], [gluNewQuadric()])],
[$cs_osx_glu \
CS_CREATE_TUPLE() \
$cs_win32_glu \
CS_CREATE_TUPLE([],[],[-lGLU]) \
CS_CREATE_TUPLE([],[],[-lglu]) \
$cs_mesa_glu], [],
[CS_EMIT_BUILD_RESULT([cs_cv_libglu], [GLU])], [], [],
[$cs_cv_libgl_cflags], [$cs_cv_libgl_lflags], [$cs_cv_libgl_libs])])])
#------------------------------------------------------------------------------
# CS_CHECK_GLX
# Check for GLX.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_GLX],
[AC_REQUIRE([CS_CHECK_OPENGL])
AS_IF([test $cs_cv_libgl = yes],
[AS_IF([test $with_mesa != no],
[cs_mesa_glx=CS_CREATE_TUPLE([],[],[-lMesaGLX])])
# Check for GLX.
AS_IF([test "$no_x" != yes],
[CS_CHECK_BUILD([for GLX], [cs_cv_libglx],
[AC_LANG_PROGRAM([[#include <GL/glx.h>]], [glXWaitGL()])],
[CS_CREATE_TUPLE() \
CS_CREATE_TUPLE([],[],[-lGLX]) \
CS_CREATE_TUPLE([],[],[-lglx]) \
$cs_mesa_glx], [],
[CS_EMIT_BUILD_RESULT([cs_cv_libglx], [GLX])], [], [],
[$cs_cv_libgl_cflags], [$cs_cv_libgl_lflags], [$cs_cv_libgl_libs])])])])
#------------------------------------------------------------------------------
# CS_CHECK_GLXEXT([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
# Check for GLX extensions.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_GLXEXT],
[AC_REQUIRE([CS_CHECK_GLX])
AS_IF([test x$cs_cv_libglx = "xyes"],
[# Check for GLX extensions.
CS_CHECK_BUILD([for GLX extensions], [cs_cv_libglx_extensions],
[AC_LANG_PROGRAM(
[[#define GLX_GLXEXT_PROTOTYPES
#include <GL/glx.h>]],
[glXGetProcAddressARB(0)])],
[CS_CREATE_TUPLE(
[$cs_cv_libglx_cflags],
[$cs_cv_libglx_lflags],
[$cs_cv_libglx_libs])],
[], [$1], [$2])])])
#------------------------------------------------------------------------------
# CS_CHECK_GLUT
# Check for GLUT.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_GLUT],
[AC_REQUIRE([CS_CHECK_GLU])
AS_IF([test x$cs_cv_libglu = "xyes"],
[# MacOS/X or Darwin?
AS_IF([test "x$cs_host_macosx" = "xyes"],
[cs_osx_glut=CS_CREATE_TUPLE([-DCS_GLUT_PATH=GLUT],[],[-framework GLUT])])
# Windows?
AS_IF([test $cs_host_family = windows],
[cs_win32_glut=CS_CREATE_TUPLE([],[],[-lglut32])])
# Check for GLUT.
CS_CHECK_BUILD([for GLUT], [cs_cv_libglut],
[AC_LANG_PROGRAM(
[CS_GL_INCLUDE([CS_GLUT_PATH],[GL],[glut.h])], [glutSwapBuffers()])],
[$cs_osx_glut \
CS_CREATE_TUPLE() \
$cs_win32_glut \
CS_CREATE_TUPLE([],[],[-lGLUT]) \
CS_CREATE_TUPLE([],[],[-lglut])], [],
[CS_EMIT_BUILD_RESULT([cs_cv_libglut], [GLUT])], [], [],
[$cs_cv_libgl_cflags $cs_cv_libglu_cflags],
[$cs_cv_libgl_lflags $cs_cv_libglu_lflags],
[$cs_cv_libgl_libs $cs_cv_libglu_libs])])])
#==============================================================================
# Copyright (C)2003-2006 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_OPENGL
# Check for OpenGL.
#
# IMPLEMENTATION NOTES
#
# Some Mesa installations require pthread, so pthread flags are employed if
# available.
#
# The check for opengl32 needs to precede other checks because Cygwin users
# often have Mesa installed, and Mesa's OpenGL library is compiled without the
# __stdcall flags which results in link errors, whereas Microsoft's native
# opengl32 works fine. Conversely, some Unix implementations have Wine
# installed (Windows emulation layer) which includes an opengl32.so library.
# We need to avoid detection of this library on Unix since it would cause an
# undesirable dependence upon Wine.
#
# Many OpenGL libraries on Unix already contain GLX, so there is no separate
# GLX library, thus we first check for GLX using the discovered OpenGL library
# before attempting to locate a separate GLX-specific library.
#
# On MacOS/X, some users have XFree86 installed which creates a link from
# /usr/include/GL to /usr/X11R6/include/GL. We want to ignore this directory
# and instead check for Apple's OpenGL.framework, if we are not cross-building
# for Darwin. We accomplish this by placing the OpenGL.framework test ahead of
# the other tests.
#
# At least one user (Jorrit) has a strange installation in which inclusion of
# <windows.h> fails if an int32 is not present, thus we must take this into
# account.
#------------------------------------------------------------------------------
m4_define([cs_define_int32],
[[#if !HAVE_TYPE_INT32
typedef long int32;
#endif
]])
# CS_GL_INCLUDE(CPP-MACRO,FALLBACK,HEADER)
AC_DEFUN([CS_GL_INCLUDE],
[[#if HAVE_WINDOWS_H
#if !HAVE_TYPE_INT32
typedef long int32;
#endif
#include <windows.h>
#endif
#ifndef CS_HEADER_GLOBAL
#define CS_HEADER_GLOBAL(X,Y) CS_HEADER_GLOBAL_COMPOSE(X,Y)
#define CS_HEADER_GLOBAL_COMPOSE(X,Y) <X/Y>
#endif
#ifdef $1
#include CS_HEADER_GLOBAL($1,$3)
#else
#include <$2/$3>
#endif]])
AC_DEFUN([CS_CHECK_OPENGL],
[AC_REQUIRE([CS_CHECK_HOST])
AC_REQUIRE([CS_CHECK_COMMON_LIBS])
AC_REQUIRE([CS_CHECK_PTHREAD])
AC_REQUIRE([AC_PATH_X])
AC_REQUIRE([AC_PATH_XTRA])
AC_CHECK_TYPE([int32], [AC_DEFINE([HAVE_TYPE_INT32], [],
[Whether the int32 type is available])], [])
AC_CHECK_HEADERS([windows.h], [], [], [cs_define_int32])
# Apply plaform-specific flags if necessary.
cs_gl_plat_cflags=''
cs_gl_plat_lflags=''
cs_gl_plat_libs=''
AS_IF([test -n "$cs_cv_libm_cflags$cs_cv_libm_lflags$cs_cv_libm_libs"],
[cs_gl_plat_cflags="$cs_cv_libm_cflags $cs_gl_plat_cflags"
cs_gl_plat_lflags="$cs_cv_libm_lflags $cs_gl_plat_lflags"
cs_gl_plat_libs="$cs_cv_libm_libs $cs_gl_plat_libs"])
AS_IF([test $cs_cv_sys_pthread = yes],
[cs_gl_plat_cflags="$cs_cv_sys_pthread_cflags $cs_gl_plat_cflags"
cs_gl_plat_lflags="$cs_cv_sys_pthread_lflags $cs_gl_plat_lflags"
cs_gl_plat_libs="$cs_cv_sys_pthread_libs $cs_gl_plat_libs"])
AS_IF([test "$no_x" != yes],
[cs_gl_plat_cflags="$X_CFLAGS $cs_gl_plat_cflags"
cs_gl_plat_lflags="$cs_gl_plat_lflags"
cs_gl_plat_libs="
$X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS $cs_gl_plat_libs"])
# Mesa requested?
AC_ARG_WITH([mesa], [AC_HELP_STRING([--with-mesa],
[use Mesa OpenGL library if available (default YES)])],
[], [with_mesa=yes])
AS_IF([test $with_mesa != no],
[cs_mesa_gl=CS_CREATE_TUPLE([],[],[-lMesaGL])])
# MacOS/X or Darwin?
AS_IF([test "x$cs_host_macosx" = "xyes"],
[cs_osx_gl=CS_CREATE_TUPLE([-DCS_OPENGL_PATH=OpenGL],[],[-framework OpenGL])])
# Windows?
AS_IF([test $cs_host_family = windows],
[cs_win32_gl=CS_CREATE_TUPLE([],[],[-lopengl32])])
# Check for OpenGL.
CS_CHECK_BUILD([for OpenGL], [cs_cv_libgl],
[AC_LANG_PROGRAM([CS_GL_INCLUDE([CS_OPENGL_PATH],[GL],[gl.h])],[glEnd()])],
[$cs_win32_gl \
$cs_osx_gl \
CS_CREATE_TUPLE([],[],[-lGL]) \
CS_CREATE_TUPLE([],[],[-lgl]) \
$cs_mesa_gl], [],
[CS_EMIT_BUILD_RESULT([cs_cv_libgl], [GL])], [], [],
[$cs_gl_plat_cflags], [$cs_gl_plat_lflags], [$cs_gl_plat_libs])])
#------------------------------------------------------------------------------
# CS_CHECK_GLU
# Check for GLU.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_GLU],
[AC_REQUIRE([CS_CHECK_OPENGL])
AS_IF([test $cs_cv_libgl = yes],
[AS_IF([test $with_mesa != no],
[cs_mesa_glu=CS_CREATE_TUPLE([],[],[-lMesaGLU])])
# MacOS/X or Darwin?
AS_IF([test "x$cs_host_macosx" = "xyes"],
[cs_osx_glu=CS_CREATE_TUPLE([-DCS_GLU_PATH=OpenGL],[],[-framework OpenGL])])
# Windows?
AS_IF([test $cs_host_family = windows],
[cs_win32_glu=CS_CREATE_TUPLE([],[],[-lglu32])])
# Check for GLU.
CS_CHECK_BUILD([for GLU], [cs_cv_libglu],
[AC_LANG_PROGRAM(
[CS_GL_INCLUDE([CS_GLU_PATH],[GL],[glu.h])], [gluNewQuadric()])],
[$cs_osx_glu \
CS_CREATE_TUPLE() \
$cs_win32_glu \
CS_CREATE_TUPLE([],[],[-lGLU]) \
CS_CREATE_TUPLE([],[],[-lglu]) \
$cs_mesa_glu], [],
[CS_EMIT_BUILD_RESULT([cs_cv_libglu], [GLU])], [], [],
[$cs_cv_libgl_cflags], [$cs_cv_libgl_lflags], [$cs_cv_libgl_libs])])])
#------------------------------------------------------------------------------
# CS_CHECK_GLX
# Check for GLX.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_GLX],
[AC_REQUIRE([CS_CHECK_OPENGL])
AS_IF([test $cs_cv_libgl = yes],
[AS_IF([test $with_mesa != no],
[cs_mesa_glx=CS_CREATE_TUPLE([],[],[-lMesaGLX])])
# Check for GLX.
AS_IF([test "$no_x" != yes],
[CS_CHECK_BUILD([for GLX], [cs_cv_libglx],
[AC_LANG_PROGRAM([[#include <GL/glx.h>]], [glXWaitGL()])],
[CS_CREATE_TUPLE() \
CS_CREATE_TUPLE([],[],[-lGLX]) \
CS_CREATE_TUPLE([],[],[-lglx]) \
$cs_mesa_glx], [],
[CS_EMIT_BUILD_RESULT([cs_cv_libglx], [GLX])], [], [],
[$cs_cv_libgl_cflags], [$cs_cv_libgl_lflags], [$cs_cv_libgl_libs])])])])
#------------------------------------------------------------------------------
# CS_CHECK_GLXEXT([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
# Check for GLX extensions.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_GLXEXT],
[AC_REQUIRE([CS_CHECK_GLX])
AS_IF([test x$cs_cv_libglx = "xyes"],
[# Check for GLX extensions.
CS_CHECK_BUILD([for GLX extensions], [cs_cv_libglx_extensions],
[AC_LANG_PROGRAM(
[[#define GLX_GLXEXT_PROTOTYPES
#include <GL/glx.h>]],
[glXGetProcAddressARB(0)])],
[CS_CREATE_TUPLE(
[$cs_cv_libglx_cflags],
[$cs_cv_libglx_lflags],
[$cs_cv_libglx_libs])],
[], [$1], [$2])])])
#------------------------------------------------------------------------------
# CS_CHECK_GLUT
# Check for GLUT.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_GLUT],
[AC_REQUIRE([CS_CHECK_GLU])
AS_IF([test x$cs_cv_libglu = "xyes"],
[# MacOS/X or Darwin?
AS_IF([test "x$cs_host_macosx" = "xyes"],
[cs_osx_glut=CS_CREATE_TUPLE([-DCS_GLUT_PATH=GLUT],[],[-framework GLUT])])
# Windows?
AS_IF([test $cs_host_family = windows],
[cs_win32_glut=CS_CREATE_TUPLE([],[],[-lglut32])])
# Check for GLUT.
CS_CHECK_BUILD([for GLUT], [cs_cv_libglut],
[AC_LANG_PROGRAM(
[CS_GL_INCLUDE([CS_GLUT_PATH],[GL],[glut.h])], [glutSwapBuffers()])],
[$cs_osx_glut \
CS_CREATE_TUPLE() \
$cs_win32_glut \
CS_CREATE_TUPLE([],[],[-lGLUT]) \
CS_CREATE_TUPLE([],[],[-lglut])], [],
[CS_EMIT_BUILD_RESULT([cs_cv_libglut], [GLUT])], [], [],
[$cs_cv_libgl_cflags $cs_cv_libglu_cflags],
[$cs_cv_libgl_lflags $cs_cv_libglu_lflags],
[$cs_cv_libgl_libs $cs_cv_libglu_libs])])])

View File

@@ -1,59 +1,59 @@
# checkpic.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_COMPILER_PIC([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check if compiler can be instructed to produce
# position-independent-code (PIC). This feature is required by some
# platforms when building plugin modules and shared libraries. If
# LANGUAGE is not provided, then `C' is assumed (other options include
# `C++'). If CACHE-VAR is not provided, then it defaults to the name
# "cs_cv_prog_compiler_pic". If a PIC-enabling option (such as `-fPIC')
# is discovered, then it is assigned to CACHE-VAR and ACTION-IF-FOUND is
# invoked; otherwise the empty string is assigned to CACHE-VAR and
# ACTION-IF-NOT-FOUND is invoked.
#
# IMPLEMENTATION NOTES
#
# On some platforms (such as Windows), the -fPIC option is superfluous
# and emits a warning "-fPIC ignored for target (all code is position
# independent)", despite the fact that the compiler accepts the option
# and returns a success code. We want to re-interpret the warning as a
# failure in order to avoid unnecessary compiler diagnostics in case the
# client inserts the result of this check into CFLAGS, for instance. We
# do so by attempting to promote warnings to errors using the result of
# CS_COMPILER_ERRORS(). As an extra safe-guard, we also scan the compiler
# output for an appropriate diagnostic because some gcc warnings fail to
# promote to error status despite use of -Werror.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_PIC],
[CS_COMPILER_ERRORS([$1],
[m4_default([$2_werror],[cs_cv_prog_compiler_pic_werror])])
CS_CHECK_BUILD_FLAGS(
[how to enable m4_default([$1],[C]) PIC generation],
[m4_default([$2],[cs_cv_prog_compiler_pic])],
[CS_CREATE_TUPLE([-fPIC])], [$1], [$3], [$4],
[m4_default([$$2_werror],[$cs_cv_prog_compiler_pic_werror])], [], [],
[fPIC])])
# Backward-compatiblity alias.
AC_DEFUN([CS_CHECK_COMPILER_PIC], [CS_COMPILER_PIC([$1],[$2],[$3],[$4])])
# checkpic.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_COMPILER_PIC([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check if compiler can be instructed to produce
# position-independent-code (PIC). This feature is required by some
# platforms when building plugin modules and shared libraries. If
# LANGUAGE is not provided, then `C' is assumed (other options include
# `C++'). If CACHE-VAR is not provided, then it defaults to the name
# "cs_cv_prog_compiler_pic". If a PIC-enabling option (such as `-fPIC')
# is discovered, then it is assigned to CACHE-VAR and ACTION-IF-FOUND is
# invoked; otherwise the empty string is assigned to CACHE-VAR and
# ACTION-IF-NOT-FOUND is invoked.
#
# IMPLEMENTATION NOTES
#
# On some platforms (such as Windows), the -fPIC option is superfluous
# and emits a warning "-fPIC ignored for target (all code is position
# independent)", despite the fact that the compiler accepts the option
# and returns a success code. We want to re-interpret the warning as a
# failure in order to avoid unnecessary compiler diagnostics in case the
# client inserts the result of this check into CFLAGS, for instance. We
# do so by attempting to promote warnings to errors using the result of
# CS_COMPILER_ERRORS(). As an extra safe-guard, we also scan the compiler
# output for an appropriate diagnostic because some gcc warnings fail to
# promote to error status despite use of -Werror.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_PIC],
[CS_COMPILER_ERRORS([$1],
[m4_default([$2_werror],[cs_cv_prog_compiler_pic_werror])])
CS_CHECK_BUILD_FLAGS(
[how to enable m4_default([$1],[C]) PIC generation],
[m4_default([$2],[cs_cv_prog_compiler_pic])],
[CS_CREATE_TUPLE([-fPIC])], [$1], [$3], [$4],
[m4_default([$$2_werror],[$cs_cv_prog_compiler_pic_werror])], [], [],
[fPIC])])
# Backward-compatiblity alias.
AC_DEFUN([CS_CHECK_COMPILER_PIC], [CS_COMPILER_PIC([$1],[$2],[$3],[$4])])

View File

@@ -1,138 +1,138 @@
# checkprog.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# cs_bin_paths_default
# Comma delimited list of additional directories in which tools and
# commands might be found.
#
# Present Cases:
# /usr/local/bin -- Although a common location for executables, it is
# now-and-then absent from the default PATH setting.
# /sw/bin -- Fink, the MacOS/X manager of Unix packages, installs
# executables here.
#------------------------------------------------------------------------------
m4_define([cs_bin_paths_default], [/usr/local/bin, /sw/bin])
#------------------------------------------------------------------------------
# CS_CHECK_PROG(VARIABLE, PROGRAM, VALUE-IF-FOUND, [VALUE-IF-NOT-FOUND],
# [PATH], [REJECT])
# Simple wrapper for AC_CHECK_PROG() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_PROG],
[_CS_PROG_PATH_PREPARE
AC_CHECK_PROG([$1], [$2], [$3], [$4],
m4_ifval([$5], [_CS_PROG_CLIENT_PATH([$5])]), [$6])])
#------------------------------------------------------------------------------
# CS_CHECK_PROGS(VARIABLE, PROGRAMS, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_CHECK_PROGS() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_PROGS],
[_CS_PROG_PATH_PREPARE
AC_CHECK_PROGS([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# CS_CHECK_TOOL(VARIABLE, TOOL, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_CHECK_TOOL() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_TOOL],
[_CS_PROG_PATH_PREPARE
AC_CHECK_TOOL([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# CS_CHECK_TOOLS(VARIABLE, TOOLS, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_CHECK_TOOLS() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_TOOLS],
[_CS_PROG_PATH_PREPARE
AC_CHECK_TOOLS([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# CS_PATH_PROG(VARIABLE, PROGRAM, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_PATH_PROG() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_PATH_PROG],
[_CS_PROG_PATH_PREPARE
AC_PATH_PROG([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# CS_PATH_PROGS(VARIABLE, PROGRAMS, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_PATH_PROGS() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_PATH_PROGS],
[_CS_PROG_PATH_PREPARE
AC_PATH_PROGS([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# CS_PATH_TOOL(VARIABLE, TOOL, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_PATH_TOOL() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_PATH_TOOL],
[_CS_PROG_PATH_PREPARE
AC_PATH_TOOL([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# _CS_PROG_PATH_PREPARE
# Ensure that the PATH environment variable mentions the set of
# directories listed in cs_bin_paths_default. These directories may not
# appear by default in the typical PATH, yet they might be common
# locations for tools and commands.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_PROG_PATH_PREPARE],
[AS_REQUIRE([_AS_PATH_SEPARATOR_PREPARE])
AS_IF([test "$cs_prog_path_prepared" != yes],
[cs_prog_path_prepared=yes
PATH="$PATH[]m4_foreach([cs_bin_path], [cs_bin_paths_default],
[$PATH_SEPARATOR[]cs_bin_path])"
export PATH])])
#------------------------------------------------------------------------------
# _CS_PROG_CLIENT_PATH(CLIENT-PATH)
# Given a client-supplied replacement for PATH, augment the list by
# appending the locations mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_PROG_CLIENT_PATH],
[AS_REQUIRE([_AS_PATH_SEPARATOR_PREPARE])dnl
$1[]m4_foreach([cs_bin_path], [cs_bin_paths_default],
[$PATH_SEPARATOR[]cs_bin_path])])
# checkprog.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# cs_bin_paths_default
# Comma delimited list of additional directories in which tools and
# commands might be found.
#
# Present Cases:
# /usr/local/bin -- Although a common location for executables, it is
# now-and-then absent from the default PATH setting.
# /sw/bin -- Fink, the MacOS/X manager of Unix packages, installs
# executables here.
#------------------------------------------------------------------------------
m4_define([cs_bin_paths_default], [/usr/local/bin, /sw/bin])
#------------------------------------------------------------------------------
# CS_CHECK_PROG(VARIABLE, PROGRAM, VALUE-IF-FOUND, [VALUE-IF-NOT-FOUND],
# [PATH], [REJECT])
# Simple wrapper for AC_CHECK_PROG() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_PROG],
[_CS_PROG_PATH_PREPARE
AC_CHECK_PROG([$1], [$2], [$3], [$4],
m4_ifval([$5], [_CS_PROG_CLIENT_PATH([$5])]), [$6])])
#------------------------------------------------------------------------------
# CS_CHECK_PROGS(VARIABLE, PROGRAMS, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_CHECK_PROGS() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_PROGS],
[_CS_PROG_PATH_PREPARE
AC_CHECK_PROGS([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# CS_CHECK_TOOL(VARIABLE, TOOL, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_CHECK_TOOL() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_TOOL],
[_CS_PROG_PATH_PREPARE
AC_CHECK_TOOL([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# CS_CHECK_TOOLS(VARIABLE, TOOLS, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_CHECK_TOOLS() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_TOOLS],
[_CS_PROG_PATH_PREPARE
AC_CHECK_TOOLS([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# CS_PATH_PROG(VARIABLE, PROGRAM, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_PATH_PROG() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_PATH_PROG],
[_CS_PROG_PATH_PREPARE
AC_PATH_PROG([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# CS_PATH_PROGS(VARIABLE, PROGRAMS, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_PATH_PROGS() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_PATH_PROGS],
[_CS_PROG_PATH_PREPARE
AC_PATH_PROGS([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# CS_PATH_TOOL(VARIABLE, TOOL, [VALUE-IF-NOT-FOUND], [PATH])
# Simple wrapper for AC_PATH_TOOL() which ensures that the search path
# is augmented by the directories mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([CS_PATH_TOOL],
[_CS_PROG_PATH_PREPARE
AC_PATH_TOOL([$1], [$2], [$3],
m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))])
#------------------------------------------------------------------------------
# _CS_PROG_PATH_PREPARE
# Ensure that the PATH environment variable mentions the set of
# directories listed in cs_bin_paths_default. These directories may not
# appear by default in the typical PATH, yet they might be common
# locations for tools and commands.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_PROG_PATH_PREPARE],
[AS_REQUIRE([_AS_PATH_SEPARATOR_PREPARE])
AS_IF([test "$cs_prog_path_prepared" != yes],
[cs_prog_path_prepared=yes
PATH="$PATH[]m4_foreach([cs_bin_path], [cs_bin_paths_default],
[$PATH_SEPARATOR[]cs_bin_path])"
export PATH])])
#------------------------------------------------------------------------------
# _CS_PROG_CLIENT_PATH(CLIENT-PATH)
# Given a client-supplied replacement for PATH, augment the list by
# appending the locations mentioned in cs_bin_paths_default.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_PROG_CLIENT_PATH],
[AS_REQUIRE([_AS_PATH_SEPARATOR_PREPARE])dnl
$1[]m4_foreach([cs_bin_path], [cs_bin_paths_default],
[$PATH_SEPARATOR[]cs_bin_path])])

View File

@@ -1,102 +1,121 @@
# checkpthread.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003-2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_PTHREAD([REJECT-MASK])
# Check for pthread. Also check if the pthread implementation supports
# the recursive and timed mutex extensions. (Timed mutexes are needed for
# the NPTL: New Posix Thread Library on GNU/Linux if the mutex is going
# to be used with any of the timed condition-wait functions.) The shell
# variable cs_cv_sys_pthread is set to "yes" if pthread is available,
# else "no". If available, then the variables cs_cv_sys_pthread_cflags,
# cs_cv_sys_pthread_lflags, and cs_cv_sys_pthread_libs are set. (As a
# convenience, these variables can be emitted to an output file with
# CS_EMIT_BUILD_RESULT() by passing "cs_cv_sys_pthread" as its CACHE-VAR
# argument.) If the recursive mutex extension is supported, then
# cs_cv_sys_pthread_mutex_recursive will be set with the literal name of
# the constant which must be passed to pthread_mutexattr_settype() to
# enable this feature. The constant name will be typically
# PTHREAD_MUTEX_RECURSIVE or PTHREAD_MUTEX_RECURSIVE_NP. If the recursive
# mutex extension is not available, then
# cs_cv_sys_pthread_mutex_recursive will be set to "no". If the timed
# mutex extension is supported, then cs_cv_sys_pthread_mutex_timed will
# be set with the literal name of the constant which must be passed to
# pthread_mutexattr_settype() to enable this feature. The constant name
# will be typically PTHREAD_MUTEX_TIMED or PTHREAD_MUTEX_TIMED_NP. If the
# timed mutex extension is not available, then
# cs_cv_sys_pthread_mutex_timed will be set to "no". REJECT-MASK can be
# used to limit the platforms on which the pthread test is performed. It
# is compared against $host_os; matches are rejected. If omitted, then
# the test is performed on all platforms. Examples: To avoid testing on
# Cygwin, use "cygwin*"; to avoid testing on Cygwin and AIX, use
# "cygwin*|aix*".
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_PTHREAD],
[AC_REQUIRE([AC_CANONICAL_HOST])
case $host_os in
m4_ifval([$1],
[$1)
cs_cv_sys_pthread=no
;;
])
*)
CS_CHECK_BUILD([for pthread], [cs_cv_sys_pthread],
[AC_LANG_PROGRAM(
[[#include <pthread.h>
#include <semaphore.h>
void* worker(void* p) { (void)p; return p; }]],
[pthread_t tid;
sem_t sem;
pthread_create(&tid, 0, worker, 0);
sem_init(&sem, 0, 0);
sem_destroy(&sem);])],
[cs_pthread_flags])
;;
esac
_CS_CHECK_MUTEX_FEATURE([PTHREAD_MUTEX_RECURSIVE],
[cs_cv_sys_pthread_mutex_recursive], [for pthread recursive mutexes])])
# _CS_CHECK_MUTEX_FEATURE(FEATURE, CACHE-VAR, MESSAGE)
AC_DEFUN([_CS_CHECK_MUTEX_FEATURE],
[AS_IF([test $cs_cv_sys_pthread = yes],
[AC_CACHE_CHECK([$3], [$2],
[CS_BUILD_IFELSE(
[AC_LANG_PROGRAM(
[[#include <pthread.h>]],
[pthread_mutexattr_t attr;
pthread_mutexattr_settype(&attr, CS_MUTEX_FEATURE);])],
[CS_CREATE_TUPLE([-DCS_MUTEX_FEATURE=$1]) \
CS_CREATE_TUPLE([-DCS_MUTEX_FEATURE=$1_NP])],
[],
[$2=`echo $cs_build_cflags | sed 's/.*\($1_*N*P*\).*/\1/'`],
[$2=no],
[$cs_cv_sys_pthread_cflags -D_GNU_SOURCE],
[$cs_cv_sys_pthread_lflags],
[$cs_cv_sys_pthread_libs])])],
[$2=no])])
m4_define([cs_pthread_flags],
[CS_CREATE_TUPLE() \
CS_CREATE_TUPLE([], [], [-lpthread]) \
CS_CREATE_TUPLE([], [], [-lpthread -lrt]) \
CS_CREATE_TUPLE([-pthread], [-pthread], []) \
CS_CREATE_TUPLE([-pthread], [-pthread], [-lpthread]) \
CS_CREATE_TUPLE([-pthread], [-pthread], [-lc_r])])
# checkpthread.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003-2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_PTHREAD([REJECT-MASK])
# Check for pthread. Also check if the pthread implementation supports
# the recursive and timed mutex extensions. (Timed mutexes are needed for
# the NPTL: New Posix Thread Library on GNU/Linux if the mutex is going
# to be used with any of the timed condition-wait functions.) The shell
# variable cs_cv_sys_pthread is set to "yes" if pthread is available,
# else "no". If available, then the variables cs_cv_sys_pthread_cflags,
# cs_cv_sys_pthread_lflags, and cs_cv_sys_pthread_libs are set. (As a
# convenience, these variables can be emitted to an output file with
# CS_EMIT_BUILD_RESULT() by passing "cs_cv_sys_pthread" as its CACHE-VAR
# argument.) If the recursive mutex extension is supported, then
# cs_cv_sys_pthread_mutex_recursive will be set with the literal name of
# the constant which must be passed to pthread_mutexattr_settype() to
# enable this feature. The constant name will be typically
# PTHREAD_MUTEX_RECURSIVE or PTHREAD_MUTEX_RECURSIVE_NP. If the recursive
# mutex extension is not available, then
# cs_cv_sys_pthread_mutex_recursive will be set to "no". If the timed
# mutex extension is supported, then cs_cv_sys_pthread_mutex_timed will
# be set with the literal name of the constant which must be passed to
# pthread_mutexattr_settype() to enable this feature. The constant name
# will be typically PTHREAD_MUTEX_TIMED or PTHREAD_MUTEX_TIMED_NP. If the
# timed mutex extension is not available, then
# cs_cv_sys_pthread_mutex_timed will be set to "no". REJECT-MASK can be
# used to limit the platforms on which the pthread test is performed. It
# is compared against $host_os; matches are rejected. If omitted, then
# the test is performed on all platforms. Examples: To avoid testing on
# Cygwin, use "cygwin*"; to avoid testing on Cygwin and AIX, use
# "cygwin*|aix*".
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_PTHREAD],
[AC_REQUIRE([AC_CANONICAL_HOST])
case $host_os in
m4_ifval([$1],
[$1)
cs_cv_sys_pthread=no
;;
])
*)
CS_CHECK_BUILD([for pthread], [cs_cv_sys_pthread],
[AC_LANG_PROGRAM(
[[#include <pthread.h>
#include <semaphore.h>
void* worker(void* p) { (void)p; return p; }]],
[pthread_t tid;
sem_t sem;
pthread_create(&tid, 0, worker, 0);
sem_init(&sem, 0, 0);
sem_destroy(&sem);])],
[cs_pthread_flags])
;;
esac
_CS_CHECK_MUTEX_FEATURE([PTHREAD_MUTEX_RECURSIVE],
[cs_cv_sys_pthread_mutex_recursive], [for pthread recursive mutexes])])
# _CS_CHECK_MUTEX_FEATURE(FEATURE, CACHE-VAR, MESSAGE)
AC_DEFUN([_CS_CHECK_MUTEX_FEATURE],
[AS_IF([test $cs_cv_sys_pthread = yes],
[AC_CACHE_CHECK([$3], [$2],
[CS_BUILD_IFELSE(
[AC_LANG_PROGRAM(
[[#include <pthread.h>]],
[pthread_mutexattr_t attr;
pthread_mutexattr_settype(&attr, CS_MUTEX_FEATURE);])],
[CS_CREATE_TUPLE([-DCS_MUTEX_FEATURE=$1]) \
CS_CREATE_TUPLE([-DCS_MUTEX_FEATURE=$1_NP])],
[],
[$2=`echo $cs_build_cflags | sed 's/.*\($1_*N*P*\).*/\1/'`],
[$2=no],
[$cs_cv_sys_pthread_cflags -D_GNU_SOURCE],
[$cs_cv_sys_pthread_lflags],
[$cs_cv_sys_pthread_libs])])],
[$2=no])])
#------------------------------------------------------------------------------
# CS_CHECK_PTHREAD_ATFORK(CACHE-VAR)
# Checks whether the pthread library contains pthread_atfork(). Sets
# CACHE-VAR to "yes" or "no", according to the test result.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_PTHREAD_ATFORK],
[AS_IF([test $cs_cv_sys_pthread = yes],
[AC_CACHE_CHECK([for pthread_atfork support], [$1],
[CS_BUILD_IFELSE(
[AC_LANG_PROGRAM(
[[#include <pthread.h>]],
[pthread_atfork (0, 0, 0);])],
[], [],
[$1=yes], [$1=no],
[$cs_cv_sys_pthread_cflags -D_GNU_SOURCE],
[$cs_cv_sys_pthread_lflags],
[$cs_cv_sys_pthread_libs])])],
[$1=no])])
m4_define([cs_pthread_flags],
[CS_CREATE_TUPLE() \
CS_CREATE_TUPLE([], [], [-lpthread]) \
CS_CREATE_TUPLE([], [], [-lpthread -lrt]) \
CS_CREATE_TUPLE([-pthread], [-pthread], []) \
CS_CREATE_TUPLE([-pthread], [-pthread], [-lpthread]) \
CS_CREATE_TUPLE([-pthread], [-pthread], [-lc_r])])

View File

@@ -1,45 +1,45 @@
# checktt2.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2004,2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_TEMPLATE_TOOLKIT2([EMITTER])
# Check if Template Toolkit 2 (http://www.tt2.org/) is available. The
# shell variable cs_cv_perl_tt2 is set to "yes" if the package is
# discovered, else "no". Also sets the shell variable TTREE to the name
# path of the 'ttree' utility program and invokes AC_SUBST(). If EMITTER
# is provided and the package was discovered, then
# CS_EMIT_BUILD_PROPERTY() is invoked with EMITTER in order to record the
# value of the TTREE variable in an output file. As a convenience, if
# EMITTER is the literal value "emit" or "yes", then
# CS_EMIT_BUILD_RESULT()'s default emitter will be used.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_TEMPLATE_TOOLKIT2],
[CS_CHECK_PROGS([PERL], [perl5 perl])
AS_IF([test -n "$PERL"],
[AC_CACHE_CHECK([for TemplateToolkit], [cs_cv_perl_tt2],
[AS_IF([AC_RUN_LOG(
[$PERL -M'Template 2.11' -MTemplate::Plugin -e 0 1>&2])],
[cs_cv_perl_tt2=yes],
[cs_cv_perl_tt2=no])])
CS_PATH_PROGS([TTREE], [ttree])
AS_IF([test $cs_cv_perl_tt2 = yes && test -n "$TTREE"],
[CS_EMIT_BUILD_PROPERTY([TTREE], [$TTREE], [], [],
CS_EMITTER_OPTIONAL([$1]))])])])
# checktt2.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2004,2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_TEMPLATE_TOOLKIT2([EMITTER])
# Check if Template Toolkit 2 (http://www.tt2.org/) is available. The
# shell variable cs_cv_perl_tt2 is set to "yes" if the package is
# discovered, else "no". Also sets the shell variable TTREE to the name
# path of the 'ttree' utility program and invokes AC_SUBST(). If EMITTER
# is provided and the package was discovered, then
# CS_EMIT_BUILD_PROPERTY() is invoked with EMITTER in order to record the
# value of the TTREE variable in an output file. As a convenience, if
# EMITTER is the literal value "emit" or "yes", then
# CS_EMIT_BUILD_RESULT()'s default emitter will be used.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_TEMPLATE_TOOLKIT2],
[CS_CHECK_PROGS([PERL], [perl5 perl])
AS_IF([test -n "$PERL"],
[AC_CACHE_CHECK([for TemplateToolkit], [cs_cv_perl_tt2],
[AS_IF([AC_RUN_LOG(
[$PERL -M'Template 2.11' -MTemplate::Plugin -e 0 1>&2])],
[cs_cv_perl_tt2=yes],
[cs_cv_perl_tt2=no])])
CS_PATH_PROGS([TTREE], [ttree])
AS_IF([test $cs_cv_perl_tt2 = yes && test -n "$TTREE"],
[CS_EMIT_BUILD_PROPERTY([TTREE], [$TTREE], [], [],
CS_EMITTER_OPTIONAL([$1]))])])])

View File

@@ -1,99 +1,100 @@
# compiler.m4 -*- Autoconf -*-
#=============================================================================
# Copyright (C)2003 by Matze Braun <matze@braunis.de>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#=============================================================================
#-----------------------------------------------------------------------------
# Detection of C and C++ compilers and setting flags
#
# CS_PROG_CC
# Detects the C compiler. Also takes care of the CFLAGS, CPPFLAGS and CC
# environment variables. This will filter out all -g and -O from the
# CFLAGS variable because Autoconf's -g and -O defaults are not always
# desired. This will also set the CMD.CC and COMPILER.CFLAGS variables
# in Jamconfig
# CS_PROG_CXX
# Detects the C++ compiler. Also takes care of the CXXFLAGS, CPPFLAGS
# and CXX environment variables. This will filter out all -g and -O from
# the CXXFLAGS variable because Autoconf's -g and -O defaults are not
# always desired. This will also set the CMD.C++ and COMPILER.C++FLAGS
# variables in Jamconfig
# CS_PROG_LINK
# Tries to determine a linker. This is done by checking if a C++ or
# Objecctive-C++ compiler is available in which case it is used for
# linking; otherwise the C or Objective-C compiler is used. This also
# sets the CMD.LINK and COMPILER.LFLAGS variables in Jamconfig and
# respects the LDFLAGS environment variable. Finally, checks if linker
# recognizes -shared and sets PLUGIN.LFLAGS; and checks if linker
# recognizes -soname and sets PLUGIN.LFLAGS.USE_SONAME to "yes".
#-----------------------------------------------------------------------------
AC_DEFUN([CS_PROG_CC],[
CFLAGS="$CFLAGS" # Filter undesired flags
AC_PROG_CC
AS_IF([test -n "$CC"],[
CS_EMIT_BUILD_PROPERTY([CMD.CC], [$CC])
CS_EMIT_BUILD_PROPERTY([COMPILER.CFLAGS], [$CPPFLAGS $CFLAGS], [+])
# Check if compiler recognizes -pipe directive.
CS_EMIT_BUILD_FLAGS([if $CC accepts -pipe], [cs_cv_prog_cc_pipe],
[CS_CREATE_TUPLE([-pipe])], [C], [COMPILER.CFLAGS], [+])
])
])
AC_DEFUN([CS_PROG_CXX],[
CXXFLAGS="$CXXFLAGS" # Filter undesired flags
AC_PROG_CXX
AS_IF([test -n "$CXX"],[
CS_EMIT_BUILD_PROPERTY([CMD.C++], [$CXX])
CS_EMIT_BUILD_PROPERTY([COMPILER.C++FLAGS], [$CPPFLAGS $CXXFLAGS], [+])
# Check if compiler can be instructed to produce position-independent-code
# (PIC). This feature is required by some platforms when building plugin
# modules and shared libraries.
CS_COMPILER_PIC([C++], [cs_cv_prog_cxx_pic],
[CS_EMIT_BUILD_PROPERTY([COMPILER.C++FLAGS.PIC],
[$cs_cv_prog_cxx_pic])])
])
])
AC_DEFUN([CS_PROG_LINK],[
AS_IF([test -n "$CXX"],
[CS_EMIT_BUILD_PROPERTY([CMD.LINK], [AS_ESCAPE([$(CMD.C++)])])],
[CS_EMIT_BUILD_PROPERTY([CMD.LINK], [AS_ESCAPE([$(CMD.CC)])])])
CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [$LDFLAGS], [+])
# Check if compiler/linker recognizes -shared directive which is needed for
# linking plugin modules. Unfortunately, the Apple compiler (and possibly
# others) requires extra effort. Even though the compiler does not recognize
# the -shared option, it nevertheless returns a "success" result after emitting
# the warning "unrecognized option `-shared'". Worse, even -Werror fails to
# promote the warning to an error, so we must instead scan the compiler's
# output for an appropriate diagnostic.
CS_CHECK_BUILD_FLAGS([if -shared is accepted], [cs_cv_prog_link_shared],
[CS_CREATE_TUPLE([-shared])], [C++],
[CS_EMIT_BUILD_PROPERTY([PLUGIN.LFLAGS], [-shared], [+])], [],
[], [], [], [shared])
# Check if linker recognizes -soname which is used to assign a name internally
# to plugin modules.
CS_CHECK_BUILD([if -soname is accepted], [cs_cv_prog_link_soname], [],
[CS_CREATE_TUPLE([-Wl,-soname,foobar])], [C++],
[CS_EMIT_BUILD_PROPERTY([PLUGIN.LFLAGS.USE_SONAME], [yes])])
])
# compiler.m4 -*- Autoconf -*-
#=============================================================================
# Copyright (C)2003 by Matze Braun <matze@braunis.de>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#=============================================================================
#-----------------------------------------------------------------------------
# Detection of C and C++ compilers and setting flags
#
# CS_PROG_CC
# Detects the C compiler. Also takes care of the CFLAGS, CPPFLAGS and CC
# environment variables. This will filter out all -g and -O from the
# CFLAGS variable because Autoconf's -g and -O defaults are not always
# desired. This will also set the CMD.CC and COMPILER.CFLAGS variables
# in Jamconfig
# CS_PROG_CXX
# Detects the C++ compiler. Also takes care of the CXXFLAGS, CPPFLAGS
# and CXX environment variables. This will filter out all -g and -O from
# the CXXFLAGS variable because Autoconf's -g and -O defaults are not
# always desired. This will also set the CMD.C++ and COMPILER.C++FLAGS
# variables in Jamconfig
# CS_PROG_LINK
# Tries to determine a linker. This is done by checking if a C++ or
# Objecctive-C++ compiler is available in which case it is used for
# linking; otherwise the C or Objective-C compiler is used. This also
# sets the CMD.LINK and COMPILER.LFLAGS variables in Jamconfig and
# respects the LDFLAGS environment variable. Finally, checks if linker
# recognizes -shared and sets PLUGIN.LFLAGS; and checks if linker
# recognizes -soname and sets PLUGIN.LFLAGS.USE_SONAME to "yes".
#-----------------------------------------------------------------------------
AC_DEFUN([CS_PROG_CC],[
CFLAGS="$CFLAGS" # Filter undesired flags
AC_PROG_CC
AS_IF([test -n "$CC"],[
CS_EMIT_BUILD_PROPERTY([CMD.CC], [$CC])
CS_EMIT_BUILD_PROPERTY([COMPILER.CFLAGS], [$CPPFLAGS $CFLAGS], [+])
# Check if compiler recognizes -pipe directive.
CS_EMIT_BUILD_FLAGS([if $CC accepts -pipe], [cs_cv_prog_cc_pipe],
[CS_CREATE_TUPLE([-pipe])], [C], [COMPILER.CFLAGS], [+])
])
])
AC_DEFUN([CS_PROG_CXX],[
CXXFLAGS="$CXXFLAGS" # Filter undesired flags
AC_PROG_CXX
AS_IF([test -n "$CXX"],[
CS_EMIT_BUILD_PROPERTY([CMD.C++], [$CXX])
CS_EMIT_BUILD_PROPERTY([COMPILER.C++FLAGS], [$CPPFLAGS $CXXFLAGS], [+])
# Check if compiler can be instructed to produce position-independent-code
# (PIC). This feature is required by some platforms when building plugin
# modules and shared libraries.
CS_COMPILER_PIC([C++], [cs_cv_prog_cxx_pic],
[CS_EMIT_BUILD_PROPERTY([COMPILER.C++FLAGS.PIC],
[$cs_cv_prog_cxx_pic])])
])
])
AC_DEFUN([CS_PROG_LINK],[
AC_REQUIRE([CS_PROG_CXX])
AS_IF([test -n "$CXX"],
[CS_EMIT_BUILD_PROPERTY([CMD.LINK], [AS_ESCAPE([$(CMD.C++)])])],
[CS_EMIT_BUILD_PROPERTY([CMD.LINK], [AS_ESCAPE([$(CMD.CC)])])])
CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [$LDFLAGS], [+])
# Check if compiler/linker recognizes -shared directive which is needed for
# linking plugin modules. Unfortunately, the Apple compiler (and possibly
# others) requires extra effort. Even though the compiler does not recognize
# the -shared option, it nevertheless returns a "success" result after emitting
# the warning "unrecognized option `-shared'". Worse, even -Werror fails to
# promote the warning to an error, so we must instead scan the compiler's
# output for an appropriate diagnostic.
CS_CHECK_BUILD_FLAGS([if -shared is accepted], [cs_cv_prog_link_shared],
[CS_CREATE_TUPLE([-shared $cs_cv_prog_cxx_pic])], [C++],
[CS_EMIT_BUILD_PROPERTY([PLUGIN.LFLAGS], [-shared], [+])], [],
[], [], [], [shared])
# Check if linker recognizes -soname which is used to assign a name internally
# to plugin modules.
CS_CHECK_BUILD([if -soname is accepted], [cs_cv_prog_link_soname], [],
[CS_CREATE_TUPLE([-Wl,-soname,foobar])], [C++],
[CS_EMIT_BUILD_PROPERTY([PLUGIN.LFLAGS.USE_SONAME], [yes])])
])

2918
mk/autoconf/config.guess vendored

File diff suppressed because it is too large Load Diff

3098
mk/autoconf/config.sub vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,144 +1,144 @@
#------------------------------------------------------------------------------
# Determine host platform. Recognized families: Unix, Windows, MacOS/X.
# Orginial Macros Copyright (C)2003 Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Determine host CPU.
#
# CS_CHECK_HOST_CPU
# Set the shell variable cs_host_cpu to a normalized form of the CPU name
# returned by config.guess/config.sub. Typically, Crystal Space's
# conception of CPU name is the same as that returned by
# config.guess/config.sub, but there may be exceptions as seen in the
# `case' statement. Also takes the normalized name, uppercases it to
# form a name suitable for the C preprocessor. Additionally sets the
# TARGET.PROCESSOR Jamconfig property.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_HOST_CPU],
[AC_REQUIRE([AC_CANONICAL_HOST])
case $host_cpu in
[[Ii][3-9]86*|[Xx]86*]) cs_host_cpu=x86 ;;
*) cs_host_cpu=$host_cpu ;;
esac
cs_host_cpu_normalized="AS_TR_CPP([$cs_host_cpu])"
CS_JAMCONFIG_PROPERTY([TARGET.PROCESSOR], [$cs_host_cpu_normalized])
])
#------------------------------------------------------------------------------
# CS_CHECK_HOST
# Sets the shell variables cs_host_target cs_host_family,
# cs_host_os_normalized, and cs_host_os_normalized_uc. Emits appropriate
# CS_PLATFORM_UNIX, CS_PLATFORM_WIN32, CS_PLATFORM_MACOSX via
# AC_DEFINE(), and TARGET.OS and TARGET.OS.NORMALIZED to Jamconfig.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_HOST],
[AC_REQUIRE([AC_CANONICAL_HOST])
CS_CHECK_HOST_CPU
cs_host_os_normalized=''
case $host_os in
mingw*|cygwin*)
cs_host_target=win32gcc
cs_host_family=windows
;;
darwin*)
_CS_CHECK_HOST_DARWIN
;;
*)
# Everything else is assumed to be Unix or Unix-like.
cs_host_target=unix
cs_host_family=unix
;;
esac
case $cs_host_family in
windows)
AC_DEFINE([CS_PLATFORM_WIN32], [],
[Define when compiling for Win32])
AS_IF([test -z "$cs_host_os_normalized"],
[cs_host_os_normalized='Win32'])
;;
unix)
AC_DEFINE([CS_PLATFORM_UNIX], [],
[Define when compiling for Unix and Unix-like (i.e. MacOS/X)])
AS_IF([test -z "$cs_host_os_normalized"],
[cs_host_os_normalized='Unix'])
;;
esac
cs_host_os_normalized_uc="AS_TR_CPP([$cs_host_os_normalized])"
CS_JAMCONFIG_PROPERTY([TARGET.OS], [$cs_host_os_normalized_uc])
CS_JAMCONFIG_PROPERTY([TARGET.OS.NORMALIZED], [$cs_host_os_normalized])
])
AC_DEFUN([_CS_CHECK_HOST_DARWIN],
[AC_REQUIRE([CS_PROG_CC])
AC_REQUIRE([CS_PROG_CXX])
# Both MacOS/X and Darwin are identified via $host_os as "darwin". We need
# a way to distinguish between the two. If Carbon.h is present, then
# assume MacOX/S; if not, assume Darwin. If --with-x=yes was invoked, and
# Carbon.h is present, then assume that user wants to cross-build for
# Darwin even though build host is MacOS/X.
# IMPLEMENTATION NOTE *1*
# The QuickTime 7.0 installer removes <CarbonSound/CarbonSound.h>, which
# causes #include <Carbon/Carbon.h> to fail unconditionally. Re-installing
# the QuickTime SDK should restore the header, however not all developers
# know to do this, so we work around the problem of the missing
# CarbonSound.h by #defining __CARBONSOUND__ in the test in order to
# prevent Carbon.h from attempting to #include the missing header.
# IMPLEMENTATION NOTE *2*
# At least one MacOS/X user switches between gcc 2.95 and gcc 3.3 with a
# script which toggles the values of CC, CXX, and CPP. Unfortunately, CPP
# was being set to run the preprocessor directly ("cpp", for instance)
# rather than running it via the compiler ("gcc -E", for instance). The
# problem with running the preprocessor directly is that __APPLE__ and
# __GNUC__ are not defined, which causes the Carbon.h check to fail. We
# avoid this problem by supplying a non-empty fourth argument to
# AC_CHECK_HEADER(), which causes it to test compile the header only (which
# is a more robust test), rather than also testing it via the preprocessor.
AC_DEFINE([__CARBONSOUND__], [],
[Avoid problem caused by missing <Carbon/CarbonSound.h>])
AC_CHECK_HEADER([Carbon/Carbon.h],
[cs_host_macosx=yes], [cs_host_macosx=no], [/* force compile */])
AS_IF([test $cs_host_macosx = yes],
[AC_MSG_CHECKING([for --with-x])
AS_IF([test "${with_x+set}" = set && test "$with_x" = "yes"],
[AC_MSG_RESULT([yes (assume Darwin)])
cs_host_macosx=no],
[AC_MSG_RESULT([no])])])
AS_IF([test $cs_host_macosx = yes],
[cs_host_target=macosx
cs_host_family=unix
cs_host_os_normalized='MacOS/X'
AC_DEFINE([CS_PLATFORM_MACOSX], [],
[Define when compiling for MacOS/X])
AC_CACHE_CHECK([for Objective-C compiler], [cs_cv_prog_objc],
[cs_cv_prog_objc="$CC"])
CS_JAMCONFIG_PROPERTY([CMD.OBJC], [$cs_cv_prog_objc])
AC_CACHE_CHECK([for Objective-C++ compiler], [cs_cv_prog_objcxx],
[cs_cv_prog_objcxx="$CXX"])
CS_JAMCONFIG_PROPERTY([CMD.OBJC++], [$cs_cv_prog_objcxx])],
[cs_host_target=unix
cs_host_family=unix])])
#------------------------------------------------------------------------------
# Determine host platform. Recognized families: Unix, Windows, MacOS/X.
# Orginial Macros Copyright (C)2003 Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Determine host CPU.
#
# CS_CHECK_HOST_CPU
# Set the shell variable cs_host_cpu to a normalized form of the CPU name
# returned by config.guess/config.sub. Typically, Crystal Space's
# conception of CPU name is the same as that returned by
# config.guess/config.sub, but there may be exceptions as seen in the
# `case' statement. Also takes the normalized name, uppercases it to
# form a name suitable for the C preprocessor. Additionally sets the
# TARGET.PROCESSOR Jamconfig property.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_HOST_CPU],
[AC_REQUIRE([AC_CANONICAL_HOST])
case $host_cpu in
[[Ii][3-9]86*|[Xx]86*]) cs_host_cpu=x86 ;;
*) cs_host_cpu=$host_cpu ;;
esac
cs_host_cpu_normalized="AS_TR_CPP([$cs_host_cpu])"
CS_JAMCONFIG_PROPERTY([TARGET.PROCESSOR], [$cs_host_cpu_normalized])
])
#------------------------------------------------------------------------------
# CS_CHECK_HOST
# Sets the shell variables cs_host_target cs_host_family,
# cs_host_os_normalized, and cs_host_os_normalized_uc. Emits appropriate
# CS_PLATFORM_UNIX, CS_PLATFORM_WIN32, CS_PLATFORM_MACOSX via
# AC_DEFINE(), and TARGET.OS and TARGET.OS.NORMALIZED to Jamconfig.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_HOST],
[AC_REQUIRE([AC_CANONICAL_HOST])
CS_CHECK_HOST_CPU
cs_host_os_normalized=''
case $host_os in
mingw*|cygwin*)
cs_host_target=win32gcc
cs_host_family=windows
;;
darwin*)
_CS_CHECK_HOST_DARWIN
;;
*)
# Everything else is assumed to be Unix or Unix-like.
cs_host_target=unix
cs_host_family=unix
;;
esac
case $cs_host_family in
windows)
AC_DEFINE([CS_PLATFORM_WIN32], [],
[Define when compiling for Win32])
AS_IF([test -z "$cs_host_os_normalized"],
[cs_host_os_normalized='Win32'])
;;
unix)
AC_DEFINE([CS_PLATFORM_UNIX], [],
[Define when compiling for Unix and Unix-like (i.e. MacOS/X)])
AS_IF([test -z "$cs_host_os_normalized"],
[cs_host_os_normalized='Unix'])
;;
esac
cs_host_os_normalized_uc="AS_TR_CPP([$cs_host_os_normalized])"
CS_JAMCONFIG_PROPERTY([TARGET.OS], [$cs_host_os_normalized_uc])
CS_JAMCONFIG_PROPERTY([TARGET.OS.NORMALIZED], [$cs_host_os_normalized])
])
AC_DEFUN([_CS_CHECK_HOST_DARWIN],
[AC_REQUIRE([CS_PROG_CC])
AC_REQUIRE([CS_PROG_CXX])
# Both MacOS/X and Darwin are identified via $host_os as "darwin". We need
# a way to distinguish between the two. If Carbon.h is present, then
# assume MacOX/S; if not, assume Darwin. If --with-x=yes was invoked, and
# Carbon.h is present, then assume that user wants to cross-build for
# Darwin even though build host is MacOS/X.
# IMPLEMENTATION NOTE *1*
# The QuickTime 7.0 installer removes <CarbonSound/CarbonSound.h>, which
# causes #include <Carbon/Carbon.h> to fail unconditionally. Re-installing
# the QuickTime SDK should restore the header, however not all developers
# know to do this, so we work around the problem of the missing
# CarbonSound.h by #defining __CARBONSOUND__ in the test in order to
# prevent Carbon.h from attempting to #include the missing header.
# IMPLEMENTATION NOTE *2*
# At least one MacOS/X user switches between gcc 2.95 and gcc 3.3 with a
# script which toggles the values of CC, CXX, and CPP. Unfortunately, CPP
# was being set to run the preprocessor directly ("cpp", for instance)
# rather than running it via the compiler ("gcc -E", for instance). The
# problem with running the preprocessor directly is that __APPLE__ and
# __GNUC__ are not defined, which causes the Carbon.h check to fail. We
# avoid this problem by supplying a non-empty fourth argument to
# AC_CHECK_HEADER(), which causes it to test compile the header only (which
# is a more robust test), rather than also testing it via the preprocessor.
AC_DEFINE([__CARBONSOUND__], [],
[Avoid problem caused by missing <Carbon/CarbonSound.h>])
AC_CHECK_HEADER([Carbon/Carbon.h],
[cs_host_macosx=yes], [cs_host_macosx=no], [/* force compile */])
AS_IF([test $cs_host_macosx = yes],
[AC_MSG_CHECKING([for --with-x])
AS_IF([test "${with_x+set}" = set && test "$with_x" = "yes"],
[AC_MSG_RESULT([yes (assume Darwin)])
cs_host_macosx=no],
[AC_MSG_RESULT([no])])])
AS_IF([test $cs_host_macosx = yes],
[cs_host_target=macosx
cs_host_family=unix
cs_host_os_normalized='MacOS/X'
AC_DEFINE([CS_PLATFORM_MACOSX], [],
[Define when compiling for MacOS/X])
AC_CACHE_CHECK([for Objective-C compiler], [cs_cv_prog_objc],
[cs_cv_prog_objc="$CC"])
CS_JAMCONFIG_PROPERTY([CMD.OBJC], [$cs_cv_prog_objc])
AC_CACHE_CHECK([for Objective-C++ compiler], [cs_cv_prog_objcxx],
[cs_cv_prog_objcxx="$CXX"])
CS_JAMCONFIG_PROPERTY([CMD.OBJC++], [$cs_cv_prog_objcxx])],
[cs_host_target=unix
cs_host_family=unix])])

View File

@@ -1,31 +1,31 @@
# diagnose.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_MSG_ERROR(ERROR-DESCRIPTION, [EXIT-STATUS])
# A convenience wrapper for AC_MSG_ERROR() which invokes AC_CACHE_SAVE()
# before aborting the script. Saving the cache should make subsequent
# re-invocations of the configure script faster once the user has
# corrected the problem(s) which caused the failure.
#------------------------------------------------------------------------------
AC_DEFUN([CS_MSG_ERROR],
[AC_CACHE_SAVE
AC_MSG_ERROR([$1], [$2])])
# diagnose.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_MSG_ERROR(ERROR-DESCRIPTION, [EXIT-STATUS])
# A convenience wrapper for AC_MSG_ERROR() which invokes AC_CACHE_SAVE()
# before aborting the script. Saving the cache should make subsequent
# re-invocations of the configure script faster once the user has
# corrected the problem(s) which caused the failure.
#------------------------------------------------------------------------------
AC_DEFUN([CS_MSG_ERROR],
[AC_CACHE_SAVE
AC_MSG_ERROR([$1], [$2])])

View File

@@ -1,222 +1,222 @@
# embed.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003,2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_META_INFO_EMBED([EMITTER], [GPL-OKAY])
# Determine if plugin meta-information should be embedded or if it should
# exist in a stand-alone .csplugin file, and check if necessary tools and
# libraries are present. Sets the shell variable
# enable_meta_info_embedding to "yes" if the user requested embedding or
# if it was enabled by default; otherwise sets it to "no".
#
# If EMITTER is provided, then a subset of the following variables
# (depending upon platform and availability) are recorded by invoking
# CS_EMIT_BUILD_PROPERTY() with EMITTER. As a convenience, if EMITTER is
# the literal value "emit" or "yes", then CS_EMIT_BUILD_RESULT()'s
# default emitter will be used.
#
# EMBED_META := yes or no
# EMBED_META.CFLAGS := compiler flags
# EMBED_META.LFLAGS := linker flags
# CMD.WINDRES := windres.exe
# OBJCOPY.AVAILABLE := yes or no
# CMD.OBJCOPY := objcopy.exe
# LIBBFD.AVAILABLE := yes or no
# LIBBFD.CFLAGS := libbfd compiler flags
# LIBBFD.LFLAGS := libbfd linker flags
# ELF.AVAILABLE := yes or no
#
# In general, clients need only concern themselves with the various
# EMBED_META-related variables. For building plugin modules, utilize
# EMBED_META.CFLAGS when compiling, and EMBED_META.LFLAGS when linking.
#
# On Unix, when CS' own ELF metadata reader can't be used (because the
# necessary header file elf.h was not found) embedding is accomplished
# via libbfd, which carries a GPL license. Projects which carry licenses
# not compatible with GPL should consider carefully before enabling
# embedding on Unix. If your project is GPL-compatible, then set GPL-OKAY
# to "yes". This will indicate that it is safe to use libbfd if the ELF
# reader can not be used. If your project is not GPL-compatible, then
# set it to "no" in order to disable embedding on Unix if the ELF reader
# is not usable. (The user can still manually override the setting via
# the --enable-meta-info-embedding option.)
#
# IMPLEMENTATION NOTES
#
# Recent versions of Mingw supply libbfd and libiberty. Since Crystal
# Space uses native Win32 API for meta-information embedding on Windows,
# we do not require these libraries on Windows. More importantly, users
# do not want to see these GPL-licensed libraries appear in the link
# statement for plugin modules, thus we explicitly disable the libbfd
# test on Windows.
#------------------------------------------------------------------------------
AC_DEFUN([CS_META_INFO_EMBED],
[AC_REQUIRE([AC_CANONICAL_HOST])
_CS_META_INFO_EMBED_ENABLE([$1], [$2])
AS_IF([test $enable_meta_info_embedding = yes],
[_CS_META_INFO_EMBED_TOOLS([$1])
AS_IF([test $cs_header_elf_h = yes],
[CS_EMIT_BUILD_PROPERTY([ELF.AVAILABLE], [yes], [], [],
CS_EMITTER_OPTIONAL([$1]))],
[case $host_os in
mingw*|cygwin*) ;;
*)
CS_CHECK_LIBBFD([$1],
[CS_EMIT_BUILD_PROPERTY([EMBED_META.CFLAGS],
[$cs_cv_libbfd_ok_cflags], [+], [],
CS_EMITTER_OPTIONAL([$1]))
CS_EMIT_BUILD_PROPERTY([EMBED_META.LFLAGS],
[$cs_cv_libbfd_ok_lflags $cs_cv_libbfd_ok_libs],
[+], [], CS_EMITTER_OPTIONAL([$1]))])
;;
esac])])])
#------------------------------------------------------------------------------
# _CS_META_INFO_EMBED_ENABLE([EMITTER], [GPL-OKAY])
# Helper for CS_META_INFO_EMBED which adds an
# --enable-meta-info-embedding option to the configure script allowing
# the user to control embedding. Sets the shell variable
# enable_meta_info_embedding to yes or no.
#
# IMPLEMENTATION NOTES
#
# On Unix, embedding is enabled by default if elf.h is found and disabled
# by default unless overridden via GPL-OKAY because libbfd carries a GPL
# license which may be incompatible with a project's own license (such as
# LGPL).
#------------------------------------------------------------------------------
AC_DEFUN([_CS_META_INFO_EMBED_ENABLE],
[AC_REQUIRE([CS_CHECK_HOST])
AC_CHECK_HEADERS([elf.h], [cs_header_elf_h=yes], [cs_header_elf_h=no])
AC_MSG_CHECKING([whether to embed plugin meta-information])
case $cs_host_target in
unix) AS_IF([test $cs_header_elf_h = yes],
[cs_embed_meta_info_default=yes],
[cs_embed_meta_info_default=m4_ifval([$2],[$2],[no])]) ;;
*) cs_embed_meta_info_default=yes ;;
esac
AC_ARG_ENABLE([meta-info-embedding],
[AC_HELP_STRING([--enable-meta-info-embedding],
[store plugin meta-information directly inside plugin modules if
supported by platform; if disabled, meta-information is stored in
stand-alone .csplugin files; this option is enabled by default for
non-Unix platforms and on Unix platforms with ELF-format object
files; it is disabled by default on Unix platforms if ELF is not
available and the project uses a non-GPL-compatible license (such
as LGPL) since the non-ELF Unix embedding technology requires the
GPL-licensed libbfd library; if ELF is not available, enable this
option on Unix only if you are certain you want a GPL-licensed
library infecting your project])],
[], [enable_meta_info_embedding=$cs_embed_meta_info_default])
AC_MSG_RESULT([$enable_meta_info_embedding])
CS_EMIT_BUILD_PROPERTY([EMBED_META], [$enable_meta_info_embedding],
[], [], CS_EMITTER_OPTIONAL([$1]))])
#------------------------------------------------------------------------------
# _CS_META_INFO_EMBED_TOOLS([EMITTER])
# Helper for CS_META_INFO_EMBED() which searches for tools required for
# plugin meta-info embedding.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_META_INFO_EMBED_TOOLS],
[CS_CHECK_TOOLS([WINDRES], [windres])
CS_EMIT_BUILD_PROPERTY([CMD.WINDRES], [$WINDRES], [], [],
CS_EMITTER_OPTIONAL([$1]))
CS_CHECK_TOOLS([OBJCOPY], [objcopy])
AS_IF([test -n "$OBJCOPY"],
[CS_EMIT_BUILD_PROPERTY([OBJCOPY.AVAILABLE], [yes], [], [],
CS_EMITTER_OPTIONAL([$1]))
CS_EMIT_BUILD_PROPERTY([CMD.OBJCOPY], [$OBJCOPY], [], [],
CS_EMITTER_OPTIONAL([$1]))])])
#------------------------------------------------------------------------------
# CS_CHECK_LIBBFD([EMITTER], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
# Exhaustive check for a usable GPL-licensed libbfd, the Binary File
# Descriptor library, a component of binutils, which allows low-level
# manipulation of executable and object files. If EMITTER is provided,
# then the following variables are recorded by invoking
# CS_EMIT_BUILD_PROPERTY() with EMITTER. As a convenience, if EMITTER is
# the literal value "emit" or "yes", then CS_EMIT_BUILD_RESULT()'s
# default emitter will be used.
#
# LIBBFD.AVAILABLE := yes or no
# LIBBFD.CFLAGS := libbfd compiler flags
# LIBBFD.LFLAGS := libbfd linker flags
#
# The shell variable cs_cv_libbfd_ok is set to yes if a usable libbfd was
# discovered, else no. If found, the additional shell variables
# cs_cv_libbfd_ok_cflags, cs_cv_libbfd_ok_lflags, and
# cs_cv_libbfd_ok_libs are also set.
#
# WARNING
#
# libbfd carries a GPL license which is incompatible with the LGPL
# license of Crystal Space. Do not use this library with projects under
# less restrictive licenses, such as LGPL.
#
# IMPLEMENTATION NOTES
#
# It seems that some platforms have two version of libiberty installed:
# one from binutils and one from gcc. The binutils version resides in
# /usr/lib, whereas the gcc version resides in the gcc installation
# directory. The gcc version, by default, takes precedence at link time
# over the binutils version. Unfortunately, in broken cases, the gcc
# version of libiberty is missing htab_create_alloc() which is required
# by some libbfd functions. The extensive secondary check of libbfd
# catches this anomalous case of broken gcc libiberty. It turns out that
# it is possible to make the linker prefer the binutils version by
# specifying -L/usr/lib, thus the extensive test attempts to do so in an
# effort to resolve this unfortunate issue.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_LIBBFD],
[CS_CHECK_LIB_WITH([bfd],
[AC_LANG_PROGRAM([[#include <bfd.h>]], [bfd_init();])],
[], [], [], [], [], [], [-liberty])
AS_IF([test $cs_cv_libbfd = yes],
[CS_CHECK_BUILD([if libbfd is usable], [cs_cv_libbfd_ok],
[AC_LANG_PROGRAM([[#include <bfd.h>]],
[bfd* p;
asection* s;
bfd_init();
p = bfd_openr(0,0);
bfd_check_format(p,bfd_object);
bfd_get_section_by_name(p,0);
bfd_section_size(p,s);
bfd_get_section_contents(p,s,0,0,0);
bfd_close(p);])],
[CS_CREATE_TUPLE() CS_CREATE_TUPLE([],[-L/usr/lib],[])],
[], [], [], [],
[$cs_cv_libbfd_cflags],
[$cs_cv_libbfd_lflags],
[$cs_cv_libbfd_libs])],
[cs_cv_libbfd_ok=no])
AS_IF([test $cs_cv_libbfd_ok = yes],
[CS_EMIT_BUILD_RESULT([cs_cv_libbfd_ok], [LIBBFD],
CS_EMITTER_OPTIONAL([$1]))
$2],
[$3])])
# embed.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003,2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_META_INFO_EMBED([EMITTER], [GPL-OKAY])
# Determine if plugin meta-information should be embedded or if it should
# exist in a stand-alone .csplugin file, and check if necessary tools and
# libraries are present. Sets the shell variable
# enable_meta_info_embedding to "yes" if the user requested embedding or
# if it was enabled by default; otherwise sets it to "no".
#
# If EMITTER is provided, then a subset of the following variables
# (depending upon platform and availability) are recorded by invoking
# CS_EMIT_BUILD_PROPERTY() with EMITTER. As a convenience, if EMITTER is
# the literal value "emit" or "yes", then CS_EMIT_BUILD_RESULT()'s
# default emitter will be used.
#
# EMBED_META := yes or no
# EMBED_META.CFLAGS := compiler flags
# EMBED_META.LFLAGS := linker flags
# CMD.WINDRES := windres.exe
# OBJCOPY.AVAILABLE := yes or no
# CMD.OBJCOPY := objcopy.exe
# LIBBFD.AVAILABLE := yes or no
# LIBBFD.CFLAGS := libbfd compiler flags
# LIBBFD.LFLAGS := libbfd linker flags
# ELF.AVAILABLE := yes or no
#
# In general, clients need only concern themselves with the various
# EMBED_META-related variables. For building plugin modules, utilize
# EMBED_META.CFLAGS when compiling, and EMBED_META.LFLAGS when linking.
#
# On Unix, when CS' own ELF metadata reader can't be used (because the
# necessary header file elf.h was not found) embedding is accomplished
# via libbfd, which carries a GPL license. Projects which carry licenses
# not compatible with GPL should consider carefully before enabling
# embedding on Unix. If your project is GPL-compatible, then set GPL-OKAY
# to "yes". This will indicate that it is safe to use libbfd if the ELF
# reader can not be used. If your project is not GPL-compatible, then
# set it to "no" in order to disable embedding on Unix if the ELF reader
# is not usable. (The user can still manually override the setting via
# the --enable-meta-info-embedding option.)
#
# IMPLEMENTATION NOTES
#
# Recent versions of Mingw supply libbfd and libiberty. Since Crystal
# Space uses native Win32 API for meta-information embedding on Windows,
# we do not require these libraries on Windows. More importantly, users
# do not want to see these GPL-licensed libraries appear in the link
# statement for plugin modules, thus we explicitly disable the libbfd
# test on Windows.
#------------------------------------------------------------------------------
AC_DEFUN([CS_META_INFO_EMBED],
[AC_REQUIRE([AC_CANONICAL_HOST])
_CS_META_INFO_EMBED_ENABLE([$1], [$2])
AS_IF([test $enable_meta_info_embedding = yes],
[_CS_META_INFO_EMBED_TOOLS([$1])
AS_IF([test $cs_header_elf_h = yes],
[CS_EMIT_BUILD_PROPERTY([ELF.AVAILABLE], [yes], [], [],
CS_EMITTER_OPTIONAL([$1]))],
[case $host_os in
mingw*|cygwin*) ;;
*)
CS_CHECK_LIBBFD([$1],
[CS_EMIT_BUILD_PROPERTY([EMBED_META.CFLAGS],
[$cs_cv_libbfd_ok_cflags], [+], [],
CS_EMITTER_OPTIONAL([$1]))
CS_EMIT_BUILD_PROPERTY([EMBED_META.LFLAGS],
[$cs_cv_libbfd_ok_lflags $cs_cv_libbfd_ok_libs],
[+], [], CS_EMITTER_OPTIONAL([$1]))])
;;
esac])])])
#------------------------------------------------------------------------------
# _CS_META_INFO_EMBED_ENABLE([EMITTER], [GPL-OKAY])
# Helper for CS_META_INFO_EMBED which adds an
# --enable-meta-info-embedding option to the configure script allowing
# the user to control embedding. Sets the shell variable
# enable_meta_info_embedding to yes or no.
#
# IMPLEMENTATION NOTES
#
# On Unix, embedding is enabled by default if elf.h is found and disabled
# by default unless overridden via GPL-OKAY because libbfd carries a GPL
# license which may be incompatible with a project's own license (such as
# LGPL).
#------------------------------------------------------------------------------
AC_DEFUN([_CS_META_INFO_EMBED_ENABLE],
[AC_REQUIRE([CS_CHECK_HOST])
AC_CHECK_HEADERS([elf.h], [cs_header_elf_h=yes], [cs_header_elf_h=no])
AC_MSG_CHECKING([whether to embed plugin meta-information])
case $cs_host_target in
unix) AS_IF([test $cs_header_elf_h = yes],
[cs_embed_meta_info_default=yes],
[cs_embed_meta_info_default=m4_ifval([$2],[$2],[no])]) ;;
*) cs_embed_meta_info_default=yes ;;
esac
AC_ARG_ENABLE([meta-info-embedding],
[AC_HELP_STRING([--enable-meta-info-embedding],
[store plugin meta-information directly inside plugin modules if
supported by platform; if disabled, meta-information is stored in
stand-alone .csplugin files; this option is enabled by default for
non-Unix platforms and on Unix platforms with ELF-format object
files; it is disabled by default on Unix platforms if ELF is not
available and the project uses a non-GPL-compatible license (such
as LGPL) since the non-ELF Unix embedding technology requires the
GPL-licensed libbfd library; if ELF is not available, enable this
option on Unix only if you are certain you want a GPL-licensed
library infecting your project])],
[], [enable_meta_info_embedding=$cs_embed_meta_info_default])
AC_MSG_RESULT([$enable_meta_info_embedding])
CS_EMIT_BUILD_PROPERTY([EMBED_META], [$enable_meta_info_embedding],
[], [], CS_EMITTER_OPTIONAL([$1]))])
#------------------------------------------------------------------------------
# _CS_META_INFO_EMBED_TOOLS([EMITTER])
# Helper for CS_META_INFO_EMBED() which searches for tools required for
# plugin meta-info embedding.
#------------------------------------------------------------------------------
AC_DEFUN([_CS_META_INFO_EMBED_TOOLS],
[CS_CHECK_TOOLS([WINDRES], [windres])
CS_EMIT_BUILD_PROPERTY([CMD.WINDRES], [$WINDRES], [], [],
CS_EMITTER_OPTIONAL([$1]))
CS_CHECK_TOOLS([OBJCOPY], [objcopy])
AS_IF([test -n "$OBJCOPY"],
[CS_EMIT_BUILD_PROPERTY([OBJCOPY.AVAILABLE], [yes], [], [],
CS_EMITTER_OPTIONAL([$1]))
CS_EMIT_BUILD_PROPERTY([CMD.OBJCOPY], [$OBJCOPY], [], [],
CS_EMITTER_OPTIONAL([$1]))])])
#------------------------------------------------------------------------------
# CS_CHECK_LIBBFD([EMITTER], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
# Exhaustive check for a usable GPL-licensed libbfd, the Binary File
# Descriptor library, a component of binutils, which allows low-level
# manipulation of executable and object files. If EMITTER is provided,
# then the following variables are recorded by invoking
# CS_EMIT_BUILD_PROPERTY() with EMITTER. As a convenience, if EMITTER is
# the literal value "emit" or "yes", then CS_EMIT_BUILD_RESULT()'s
# default emitter will be used.
#
# LIBBFD.AVAILABLE := yes or no
# LIBBFD.CFLAGS := libbfd compiler flags
# LIBBFD.LFLAGS := libbfd linker flags
#
# The shell variable cs_cv_libbfd_ok is set to yes if a usable libbfd was
# discovered, else no. If found, the additional shell variables
# cs_cv_libbfd_ok_cflags, cs_cv_libbfd_ok_lflags, and
# cs_cv_libbfd_ok_libs are also set.
#
# WARNING
#
# libbfd carries a GPL license which is incompatible with the LGPL
# license of Crystal Space. Do not use this library with projects under
# less restrictive licenses, such as LGPL.
#
# IMPLEMENTATION NOTES
#
# It seems that some platforms have two version of libiberty installed:
# one from binutils and one from gcc. The binutils version resides in
# /usr/lib, whereas the gcc version resides in the gcc installation
# directory. The gcc version, by default, takes precedence at link time
# over the binutils version. Unfortunately, in broken cases, the gcc
# version of libiberty is missing htab_create_alloc() which is required
# by some libbfd functions. The extensive secondary check of libbfd
# catches this anomalous case of broken gcc libiberty. It turns out that
# it is possible to make the linker prefer the binutils version by
# specifying -L/usr/lib, thus the extensive test attempts to do so in an
# effort to resolve this unfortunate issue.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_LIBBFD],
[CS_CHECK_LIB_WITH([bfd],
[AC_LANG_PROGRAM([[#include <bfd.h>]], [bfd_init();])],
[], [], [], [], [], [], [-liberty])
AS_IF([test $cs_cv_libbfd = yes],
[CS_CHECK_BUILD([if libbfd is usable], [cs_cv_libbfd_ok],
[AC_LANG_PROGRAM([[#include <bfd.h>]],
[bfd* p;
asection* s;
bfd_init();
p = bfd_openr(0,0);
bfd_check_format(p,bfd_object);
bfd_get_section_by_name(p,0);
bfd_section_size(p,s);
bfd_get_section_contents(p,s,0,0,0);
bfd_close(p);])],
[CS_CREATE_TUPLE() CS_CREATE_TUPLE([],[-L/usr/lib],[])],
[], [], [], [],
[$cs_cv_libbfd_cflags],
[$cs_cv_libbfd_lflags],
[$cs_cv_libbfd_libs])],
[cs_cv_libbfd_ok=no])
AS_IF([test $cs_cv_libbfd_ok = yes],
[CS_EMIT_BUILD_RESULT([cs_cv_libbfd_ok], [LIBBFD],
CS_EMITTER_OPTIONAL([$1]))
$2],
[$3])])

View File

@@ -1,172 +1,172 @@
# emit.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003-2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_EMIT_BUILD_PROPERTY(KEY, VALUE, [APPEND], [EMPTY-OKAY], [EMITTER],
# [UNCONDITIONAL])
# A utility function which invokes an emitter to record the KEY/VALUE
# tuple if VALUE is not the empty string (after leading and trailing
# whitespace is stripped). If EMPTY-OKAY is not an empty string, then the
# property is emitted even if VALUE is empty; that is, it is emitted
# unconditionally. If APPEND is the empty string, then the emitter sets
# the key's value directly (though it may be overridden by the
# environment), otherwise the emitter appends VALUE to the existing value
# of the key. EMITTER is a macro name, such as CS_JAMCONFIG_PROPERTY or
# CS_MAKEFILE_PROPERTY, which performs the actual task of emitting the
# KEY/VALUE tuple; it should also accept APPEND as an optional third
# argument. If EMITTER is omitted, CS_JAMCONFIG_PROPERTY is used. Some
# emitters accept an optional fourth argument, UNCONDITIONAL, which
# instructs it to set KEY's value unconditionally, even if KEY already
# had been assigned a value via some other mechanism (such as imported
# from the environment, or from Jambase, in the case of
# CS_JAMCONFIG_PROPERTY).
#------------------------------------------------------------------------------
AC_DEFUN([CS_EMIT_BUILD_PROPERTY],
[cs_build_prop_val="$2"
cs_build_prop_val=CS_TRIM([$cs_build_prop_val])
m4_ifval([$4],
[CS_JAMCONFIG_PROPERTY([$1], [$cs_build_prop_val], [$3])],
AS_IF([test -n "$cs_build_prop_val"],
[m4_default([$5],[CS_JAMCONFIG_PROPERTY])(
[$1], [$cs_build_prop_val], [$3], [$6])]))])
#------------------------------------------------------------------------------
# CS_EMIT_BUILD_RESULT(CACHE-VAR, PREFIX, [EMITTER])
# Record the results of CS_CHECK_BUILD() or CS_CHECK_LIB_WITH() via some
# emitter. If CACHE-VAR indicates that the build succeeded, then the
# following properties are emitted:
#
# PREFIX.AVAILABLE = yes
# PREFIX.CFLAGS = $CACHE-VAR_cflags
# PREFIX.LFLAGS = $CACHE-VAR_lflags $CACHE-VAR_libs
#
# EMITTER is a macro name, such as CS_JAMCONFIG_PROPERTY or
# CS_MAKEFILE_PROPERTY, which performs the actual task of emitting the
# KEY/VALUE tuple. If EMITTER is omitted, CS_JAMCONFIG_PROPERTY is used.
#------------------------------------------------------------------------------
AC_DEFUN([CS_EMIT_BUILD_RESULT],
[AS_IF([test "$$1" = yes],
[CS_EMIT_BUILD_PROPERTY([$2.AVAILABLE], [yes], [], [], [$3])
CS_EMIT_BUILD_PROPERTY([$2.CFLAGS], [$$1_cflags], [], [], [$3])
CS_EMIT_BUILD_PROPERTY([$2.LFLAGS], [$$1_lflags $$1_libs],
[], [], [$3])])])
#------------------------------------------------------------------------------
# CS_EMIT_BUILD_FLAGS(MESSAGE, CACHE-VAR, FLAGS, [LANGUAGE], EMITTER-KEY,
# [APPEND], [ACTION-IF-RECOGNIZED],
# [ACTION-IF-NOT-RECOGNIZED], [EMITTER])
# A convenience wrapper for CS_CHECK_BUILD_FLAGS() which also records the
# results via CS_EMIT_BUILD_PROPERTY(). Checks if the compiler or linker
# recognizes a command-line option. MESSAGE is the "checking" message.
# CACHE-VAR is the shell cache variable which receives the flag
# recognized by the compiler or linker, or "no" if the flag was not
# recognized. FLAGS is a whitespace- delimited list of build tuples
# created with CS_CREATE_TUPLE(). Each tuple from FLAGS is attempted in
# order until one is found which is recognized by the compiler. After
# that, no further flags are checked. LANGUAGE is typically either C or
# C++ and specifies which compiler to use for the test. If LANGUAGE is
# omitted, C is used. EMITTER-KEY is the name to pass as the emitter's
# "key" argument if a usable flag is encountered. If APPEND is not the
# empty string, then the discovered flag is appended to the existing
# value of the EMITTER-KEY. If the command-line option was recognized,
# then ACTION-IF-RECOGNIZED is invoked, otherwise
# ACTION-IF-NOT-RECOGNIZED is invoked. EMITTER is a macro name, such as
# CS_JAMCONFIG_PROPERTY or CS_MAKEFILE_PROPERTY, which performs the
# actual task of emitting the KEY/VALUE tuple; it should also accept
# APPEND as an optional third argument. If EMITTER is omitted,
# CS_JAMCONFIG_PROPERTY is used.
#------------------------------------------------------------------------------
AC_DEFUN([CS_EMIT_BUILD_FLAGS],
[CS_CHECK_BUILD_FLAGS([$1], [$2], [$3], [$4],
[CS_EMIT_BUILD_PROPERTY([$5], [$$2], [$6], [], [$9])
$7],
[$8])])
#------------------------------------------------------------------------------
# CS_EMITTER_OPTIONAL([EMITTER])
# The CS_EMIT_FOO() macros optionally accept an emitter. If no emitter is
# supplied to those macros, then a default emitter is chosen. Other
# macros, however, which perform testing and optionally emit the results
# may wish to interpret an omitted EMITTER as a request not to emit the
# results. CS_EMITTER_OPTIONAL() is a convenience macro to help in these
# cases. It should be passed to one of the CS_EMIT_FOO() macros in place
# of the literal EMITTER argument. It functions by re-interpretating
# EMITTER as follows:
#
# - If EMITTER is omitted, then CS_NULL_EMITTER is returned, effectively
# disabling output by the CS_EMIT_FOO() macro.
# - If EMITTER is the literal string "emit" or "yes", then it returns an
# empty string, which signals to the CS_EMIT_FOO() macro that is should
# use its default emitter.
# - Any other value for EMITTER is passed along as-is to the
# CS_EMIT_FOO() macro.
#------------------------------------------------------------------------------
AC_DEFUN([CS_EMITTER_OPTIONAL],
[m4_case([$1],
[], [[CS_NULL_EMITTER]],
[emit], [],
[yes], [],
[[$1]])])
#------------------------------------------------------------------------------
# CS_NULL_EMITTER(KEY, VALUE, [APPEND])
# A do-nothing emitter suitable for use as the EMITTER argument of one of
# the CS_EMIT_FOO() macros.
#------------------------------------------------------------------------------
AC_DEFUN([CS_NULL_EMITTER], [:
])
#------------------------------------------------------------------------------
# CS_SUBST_EMITTER(KEY, VALUE, [APPEND])
# An emitter wrapped around AC_SUBST(). Invokes
# AC_SUBST(AS_TR_SH(KEY),VALUE). The APPEND argument is ignored.
# Suitable for use as the EMITTER argument of one of the CS_EMIT_FOO()
# macros. The call to AS_TR_SH() ensures that KEY is transformed into a
# valid shell variable. For instance, if a macro attempts to emit
# MYLIB.CFLAGS and MYLIB.LFLAGS via CS_SUBST_EMITTER(), then the names
# will be transformed to MYLIB_CFLAGS and MYLIB_LFLAGS, respectively, for
# the invocation of AC_SUBST().
#------------------------------------------------------------------------------
AC_DEFUN([CS_SUBST_EMITTER], [AC_SUBST(AS_TR_SH([$1]),[$2])])
#------------------------------------------------------------------------------
# CS_DEFINE_EMITTER(KEY, VALUE, [APPEND])
# An emitter wrapped around AC_DEFINE_UNQUOTED(). Invokes
# AC_DEFINE_UNQUOTED(AS_TR_CPP(KEY),VALUE). The APPEND argument is
# ignored. Suitable for use as the EMITTER argument of one of the
# CS_EMIT_FOO() macros. The call to AS_TR_CPP() ensures that KEY is a
# well-formed token for the C-preprocessor.
#------------------------------------------------------------------------------
AC_DEFUN([CS_DEFINE_EMITTER],
[AC_DEFINE_UNQUOTED(AS_TR_CPP([$1]),[$2],
[Define when feature is available])])
# emit.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003-2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_EMIT_BUILD_PROPERTY(KEY, VALUE, [APPEND], [EMPTY-OKAY], [EMITTER],
# [UNCONDITIONAL])
# A utility function which invokes an emitter to record the KEY/VALUE
# tuple if VALUE is not the empty string (after leading and trailing
# whitespace is stripped). If EMPTY-OKAY is not an empty string, then the
# property is emitted even if VALUE is empty; that is, it is emitted
# unconditionally. If APPEND is the empty string, then the emitter sets
# the key's value directly (though it may be overridden by the
# environment), otherwise the emitter appends VALUE to the existing value
# of the key. EMITTER is a macro name, such as CS_JAMCONFIG_PROPERTY or
# CS_MAKEFILE_PROPERTY, which performs the actual task of emitting the
# KEY/VALUE tuple; it should also accept APPEND as an optional third
# argument. If EMITTER is omitted, CS_JAMCONFIG_PROPERTY is used. Some
# emitters accept an optional fourth argument, UNCONDITIONAL, which
# instructs it to set KEY's value unconditionally, even if KEY already
# had been assigned a value via some other mechanism (such as imported
# from the environment, or from Jambase, in the case of
# CS_JAMCONFIG_PROPERTY).
#------------------------------------------------------------------------------
AC_DEFUN([CS_EMIT_BUILD_PROPERTY],
[cs_build_prop_val="$2"
cs_build_prop_val=CS_TRIM([$cs_build_prop_val])
m4_ifval([$4],
[CS_JAMCONFIG_PROPERTY([$1], [$cs_build_prop_val], [$3])],
AS_IF([test -n "$cs_build_prop_val"],
[m4_default([$5],[CS_JAMCONFIG_PROPERTY])(
[$1], [$cs_build_prop_val], [$3], [$6])]))])
#------------------------------------------------------------------------------
# CS_EMIT_BUILD_RESULT(CACHE-VAR, PREFIX, [EMITTER])
# Record the results of CS_CHECK_BUILD() or CS_CHECK_LIB_WITH() via some
# emitter. If CACHE-VAR indicates that the build succeeded, then the
# following properties are emitted:
#
# PREFIX.AVAILABLE = yes
# PREFIX.CFLAGS = $CACHE-VAR_cflags
# PREFIX.LFLAGS = $CACHE-VAR_lflags $CACHE-VAR_libs
#
# EMITTER is a macro name, such as CS_JAMCONFIG_PROPERTY or
# CS_MAKEFILE_PROPERTY, which performs the actual task of emitting the
# KEY/VALUE tuple. If EMITTER is omitted, CS_JAMCONFIG_PROPERTY is used.
#------------------------------------------------------------------------------
AC_DEFUN([CS_EMIT_BUILD_RESULT],
[AS_IF([test "$$1" = yes],
[CS_EMIT_BUILD_PROPERTY([$2.AVAILABLE], [yes], [], [], [$3])
CS_EMIT_BUILD_PROPERTY([$2.CFLAGS], [$$1_cflags], [], [], [$3])
CS_EMIT_BUILD_PROPERTY([$2.LFLAGS], [$$1_lflags $$1_libs],
[], [], [$3])])])
#------------------------------------------------------------------------------
# CS_EMIT_BUILD_FLAGS(MESSAGE, CACHE-VAR, FLAGS, [LANGUAGE], EMITTER-KEY,
# [APPEND], [ACTION-IF-RECOGNIZED],
# [ACTION-IF-NOT-RECOGNIZED], [EMITTER])
# A convenience wrapper for CS_CHECK_BUILD_FLAGS() which also records the
# results via CS_EMIT_BUILD_PROPERTY(). Checks if the compiler or linker
# recognizes a command-line option. MESSAGE is the "checking" message.
# CACHE-VAR is the shell cache variable which receives the flag
# recognized by the compiler or linker, or "no" if the flag was not
# recognized. FLAGS is a whitespace- delimited list of build tuples
# created with CS_CREATE_TUPLE(). Each tuple from FLAGS is attempted in
# order until one is found which is recognized by the compiler. After
# that, no further flags are checked. LANGUAGE is typically either C or
# C++ and specifies which compiler to use for the test. If LANGUAGE is
# omitted, C is used. EMITTER-KEY is the name to pass as the emitter's
# "key" argument if a usable flag is encountered. If APPEND is not the
# empty string, then the discovered flag is appended to the existing
# value of the EMITTER-KEY. If the command-line option was recognized,
# then ACTION-IF-RECOGNIZED is invoked, otherwise
# ACTION-IF-NOT-RECOGNIZED is invoked. EMITTER is a macro name, such as
# CS_JAMCONFIG_PROPERTY or CS_MAKEFILE_PROPERTY, which performs the
# actual task of emitting the KEY/VALUE tuple; it should also accept
# APPEND as an optional third argument. If EMITTER is omitted,
# CS_JAMCONFIG_PROPERTY is used.
#------------------------------------------------------------------------------
AC_DEFUN([CS_EMIT_BUILD_FLAGS],
[CS_CHECK_BUILD_FLAGS([$1], [$2], [$3], [$4],
[CS_EMIT_BUILD_PROPERTY([$5], [$$2], [$6], [], [$9])
$7],
[$8])])
#------------------------------------------------------------------------------
# CS_EMITTER_OPTIONAL([EMITTER])
# The CS_EMIT_FOO() macros optionally accept an emitter. If no emitter is
# supplied to those macros, then a default emitter is chosen. Other
# macros, however, which perform testing and optionally emit the results
# may wish to interpret an omitted EMITTER as a request not to emit the
# results. CS_EMITTER_OPTIONAL() is a convenience macro to help in these
# cases. It should be passed to one of the CS_EMIT_FOO() macros in place
# of the literal EMITTER argument. It functions by re-interpretating
# EMITTER as follows:
#
# - If EMITTER is omitted, then CS_NULL_EMITTER is returned, effectively
# disabling output by the CS_EMIT_FOO() macro.
# - If EMITTER is the literal string "emit" or "yes", then it returns an
# empty string, which signals to the CS_EMIT_FOO() macro that is should
# use its default emitter.
# - Any other value for EMITTER is passed along as-is to the
# CS_EMIT_FOO() macro.
#------------------------------------------------------------------------------
AC_DEFUN([CS_EMITTER_OPTIONAL],
[m4_case([$1],
[], [[CS_NULL_EMITTER]],
[emit], [],
[yes], [],
[[$1]])])
#------------------------------------------------------------------------------
# CS_NULL_EMITTER(KEY, VALUE, [APPEND])
# A do-nothing emitter suitable for use as the EMITTER argument of one of
# the CS_EMIT_FOO() macros.
#------------------------------------------------------------------------------
AC_DEFUN([CS_NULL_EMITTER], [:
])
#------------------------------------------------------------------------------
# CS_SUBST_EMITTER(KEY, VALUE, [APPEND])
# An emitter wrapped around AC_SUBST(). Invokes
# AC_SUBST(AS_TR_SH(KEY),VALUE). The APPEND argument is ignored.
# Suitable for use as the EMITTER argument of one of the CS_EMIT_FOO()
# macros. The call to AS_TR_SH() ensures that KEY is transformed into a
# valid shell variable. For instance, if a macro attempts to emit
# MYLIB.CFLAGS and MYLIB.LFLAGS via CS_SUBST_EMITTER(), then the names
# will be transformed to MYLIB_CFLAGS and MYLIB_LFLAGS, respectively, for
# the invocation of AC_SUBST().
#------------------------------------------------------------------------------
AC_DEFUN([CS_SUBST_EMITTER], [AC_SUBST(AS_TR_SH([$1]),[$2])])
#------------------------------------------------------------------------------
# CS_DEFINE_EMITTER(KEY, VALUE, [APPEND])
# An emitter wrapped around AC_DEFINE_UNQUOTED(). Invokes
# AC_DEFINE_UNQUOTED(AS_TR_CPP(KEY),VALUE). The APPEND argument is
# ignored. Suitable for use as the EMITTER argument of one of the
# CS_EMIT_FOO() macros. The call to AS_TR_CPP() ensures that KEY is a
# well-formed token for the C-preprocessor.
#------------------------------------------------------------------------------
AC_DEFUN([CS_DEFINE_EMITTER],
[AC_DEFINE_UNQUOTED(AS_TR_CPP([$1]),[$2],
[Define when feature is available])])

View File

@@ -1,48 +1,48 @@
# headercache.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# Text cache facility for C-style #define properties. The cache is stored in
# the shell variable cs_header_text.
#
# CS_HEADER_APPEND(TEXT)
# Append text to the C header text cache. This is a cover for
# CS_TEXT_CACHE_APPEND().
#
# CS_HEADER_PREPEND(TEXT)
# Prepend text to the C header text cache. This is a cover for
# CS_TEXT_CACHE_PREPEND().
#
# CS_HEADER_PROPERTY(KEY, [VALUE])
# Append a line of the form "#define KEY VALUE" to the C header text
# cache. If the VALUE argument is omitted, then the appended line has
# the simplified form "#define KEY".
#
# CS_HEADER_OUTPUT(FILENAME)
# Instruct config.status to write the C header text cache to the given
# filename. This is a cover for CS_TEXT_CACHE_OUTPUT().
#------------------------------------------------------------------------------
AC_DEFUN([CS_HEADER_APPEND], [CS_TEXT_CACHE_APPEND([cs_header_text], [$1])])
AC_DEFUN([CS_HEADER_PREPEND], [CS_TEXT_CACHE_PREPEND([cs_header_text], [$1])])
AC_DEFUN([CS_HEADER_PROPERTY],
[CS_HEADER_APPEND([@%:@define $1[]m4_ifval([$2], [ $2], [])
])])
AC_DEFUN([CS_HEADER_OUTPUT], [CS_TEXT_CACHE_OUTPUT([cs_header_text], [$1])])
# headercache.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# Text cache facility for C-style #define properties. The cache is stored in
# the shell variable cs_header_text.
#
# CS_HEADER_APPEND(TEXT)
# Append text to the C header text cache. This is a cover for
# CS_TEXT_CACHE_APPEND().
#
# CS_HEADER_PREPEND(TEXT)
# Prepend text to the C header text cache. This is a cover for
# CS_TEXT_CACHE_PREPEND().
#
# CS_HEADER_PROPERTY(KEY, [VALUE])
# Append a line of the form "#define KEY VALUE" to the C header text
# cache. If the VALUE argument is omitted, then the appended line has
# the simplified form "#define KEY".
#
# CS_HEADER_OUTPUT(FILENAME)
# Instruct config.status to write the C header text cache to the given
# filename. This is a cover for CS_TEXT_CACHE_OUTPUT().
#------------------------------------------------------------------------------
AC_DEFUN([CS_HEADER_APPEND], [CS_TEXT_CACHE_APPEND([cs_header_text], [$1])])
AC_DEFUN([CS_HEADER_PREPEND], [CS_TEXT_CACHE_PREPEND([cs_header_text], [$1])])
AC_DEFUN([CS_HEADER_PROPERTY],
[CS_HEADER_APPEND([@%:@define $1[]m4_ifval([$2], [ $2], [])
])])
AC_DEFUN([CS_HEADER_OUTPUT], [CS_TEXT_CACHE_OUTPUT([cs_header_text], [$1])])

View File

@@ -1,322 +1,322 @@
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2004-07-05.00
# 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. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
chmodcmd="$chmodprog 0755"
chowncmd=
chgrpcmd=
stripcmd=
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=
dst=
dir_arg=
dstarg=
no_target_directory=
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:
-c (ignored)
-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.
-s $stripprog installed files.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
--help display this help and exit.
--version display version info and exit.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
"
while test -n "$1"; do
case $1 in
-c) shift
continue;;
-d) dir_arg=true
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
--help) echo "$usage"; exit 0;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-s) stripcmd=$stripprog
shift
continue;;
-t) dstarg=$2
shift
shift
continue;;
-T) no_target_directory=true
shift
continue;;
--version) echo "$0 $scriptversion"; exit 0;;
*) # When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
test -n "$dir_arg$dstarg" && break
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
if test -n "$dstarg"; then
# $@ is not empty: it contains at least $arg.
set fnord "$@" "$dstarg"
shift # fnord
fi
shift # arg
dstarg=$arg
done
break;;
esac
done
if test -z "$1"; 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
for src
do
# Protect names starting with `-'.
case $src in
-*) src=./$src ;;
esac
if test -n "$dir_arg"; then
dst=$src
src=
if test -d "$dst"; then
mkdircmd=:
chmodcmd=
else
mkdircmd=$mkdirprog
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 "$dstarg"; then
echo "$0: no destination specified." >&2
exit 1
fi
dst=$dstarg
# Protect names starting with `-'.
case $dst in
-*) dst=./$dst ;;
esac
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
if test -n "$no_target_directory"; then
echo "$0: $dstarg: Is a directory" >&2
exit 1
fi
dst=$dst/`basename "$src"`
fi
fi
# This sed command emulates the dirname command.
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# Skip lots of stat calls in the usual case.
if test ! -d "$dstdir"; then
defaultIFS='
'
IFS="${IFS-$defaultIFS}"
oIFS=$IFS
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS=$oIFS
pathcomp=
while test $# -ne 0 ; do
pathcomp=$pathcomp$1
shift
if test ! -d "$pathcomp"; then
$mkdirprog "$pathcomp"
# mkdir can fail with a `File exist' error in case several
# install-sh are creating the directory concurrently. This
# is OK.
test -d "$pathcomp" || exit
fi
pathcomp=$pathcomp/
done
fi
if test -n "$dir_arg"; then
$doit $mkdircmd "$dst" \
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
else
dstfile=`basename "$dst"`
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_
rmtmp=$dstdir/_rm.$$_
# Trap to clean up those temp files at exit.
trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
trap '(exit $?); exit' 1 2 13 15
# Copy the file name to the temp name.
$doit $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 "$dsttmp"; } &&
# Now rename the file to the real destination.
{ $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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.
{
if test -f "$dstdir/$dstfile"; then
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|| {
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
(exit 1); exit
}
else
:
fi
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
}
}
fi || { (exit 1); exit; }
done
# The final little trick to "correctly" pass the exit status to the exit trap.
{
(exit 0); exit
}
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2004-07-05.00
# 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. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
chmodcmd="$chmodprog 0755"
chowncmd=
chgrpcmd=
stripcmd=
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=
dst=
dir_arg=
dstarg=
no_target_directory=
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:
-c (ignored)
-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.
-s $stripprog installed files.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
--help display this help and exit.
--version display version info and exit.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
"
while test -n "$1"; do
case $1 in
-c) shift
continue;;
-d) dir_arg=true
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
--help) echo "$usage"; exit 0;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-s) stripcmd=$stripprog
shift
continue;;
-t) dstarg=$2
shift
shift
continue;;
-T) no_target_directory=true
shift
continue;;
--version) echo "$0 $scriptversion"; exit 0;;
*) # When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
test -n "$dir_arg$dstarg" && break
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
if test -n "$dstarg"; then
# $@ is not empty: it contains at least $arg.
set fnord "$@" "$dstarg"
shift # fnord
fi
shift # arg
dstarg=$arg
done
break;;
esac
done
if test -z "$1"; 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
for src
do
# Protect names starting with `-'.
case $src in
-*) src=./$src ;;
esac
if test -n "$dir_arg"; then
dst=$src
src=
if test -d "$dst"; then
mkdircmd=:
chmodcmd=
else
mkdircmd=$mkdirprog
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 "$dstarg"; then
echo "$0: no destination specified." >&2
exit 1
fi
dst=$dstarg
# Protect names starting with `-'.
case $dst in
-*) dst=./$dst ;;
esac
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
if test -n "$no_target_directory"; then
echo "$0: $dstarg: Is a directory" >&2
exit 1
fi
dst=$dst/`basename "$src"`
fi
fi
# This sed command emulates the dirname command.
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# Skip lots of stat calls in the usual case.
if test ! -d "$dstdir"; then
defaultIFS='
'
IFS="${IFS-$defaultIFS}"
oIFS=$IFS
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS=$oIFS
pathcomp=
while test $# -ne 0 ; do
pathcomp=$pathcomp$1
shift
if test ! -d "$pathcomp"; then
$mkdirprog "$pathcomp"
# mkdir can fail with a `File exist' error in case several
# install-sh are creating the directory concurrently. This
# is OK.
test -d "$pathcomp" || exit
fi
pathcomp=$pathcomp/
done
fi
if test -n "$dir_arg"; then
$doit $mkdircmd "$dst" \
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
else
dstfile=`basename "$dst"`
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_
rmtmp=$dstdir/_rm.$$_
# Trap to clean up those temp files at exit.
trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
trap '(exit $?); exit' 1 2 13 15
# Copy the file name to the temp name.
$doit $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 "$dsttmp"; } &&
# Now rename the file to the real destination.
{ $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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.
{
if test -f "$dstdir/$dstfile"; then
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|| {
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
(exit 1); exit
}
else
:
fi
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
}
}
fi || { (exit 1); exit; }
done
# The final little trick to "correctly" pass the exit status to the exit trap.
{
(exit 0); exit
}
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

View File

@@ -1,100 +1,100 @@
#-----------------------------------------------------------------------------
# installdirs.m4 (c) Matze Braun <matze@braunis.de>
# Macro for emitting the installation paths gathered by Autoconf.
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# CS_OUTPUT_INSTALLDIRS([EMITTER], [RAW-BACKSLASHES])
# Emit installation directories collected by Autoconf. EMITTER is a macro
# name, such as CS_JAMCONFIG_PROPERTY or CS_MAKEFILE_PROPERTY, which performs
# the actual task of emitting the KEY/VALUE tuple. If EMITTER is omitted,
# CS_JAMCONFIG_PROPERTY is used. If RAW-BACKSLASHES is not provided, then
# backslashes in emitted values are each escaped with an additional
# backslash. If RAW-BACKSLASHES is not the null value, then backslashes are
# emitted raw. The following properties are emitted:
#
# prefix
# exec_prefix
# bindir
# sbindir
# libexecdir
# datadir
# sysconfdir
# sharedstatedir
# localstatedir
# libdir
# includedir
# oldincludedir
# infodir
# mandir
#-----------------------------------------------------------------------------
AC_DEFUN([CS_OUTPUT_INSTALLDIRS],[
# Handle the case when no prefix is given, and the special case when a path
# contains more than 2 slashes, these paths seem to be correct but Jam fails
# on them.
AS_IF([test $prefix = NONE],
[cs_install_prefix="$ac_default_prefix"],
[cs_install_prefix=`echo "$prefix" | sed -e 's:///*:/:g'`])
AS_IF([test $exec_prefix = NONE],
[cs_install_exec_prefix="AS_ESCAPE([$(prefix)])"],
[cs_install_exec_prefix=`echo "$exec_prefix" | sed -e 's:///*:/:g'`])
_CS_OUTPUT_INSTALL_DIRS([$1], [prefix],
[CS_PREPARE_INSTALLPATH([$cs_install_prefix], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [exec_prefix],
[CS_PREPARE_INSTALLPATH([$cs_install_exec_prefix], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [bindir],
[CS_PREPARE_INSTALLPATH([$bindir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [sbindir],
[CS_PREPARE_INSTALLPATH([$sbindir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [libexecdir],
[CS_PREPARE_INSTALLPATH([$libexecdir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [datadir],
[CS_PREPARE_INSTALLPATH([$datadir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [sysconfdir],
[CS_PREPARE_INSTALLPATH([$sysconfdir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [sharedstatedir],
[CS_PREPARE_INSTALLPATH([$sharedstatedir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [localstatedir],
[CS_PREPARE_INSTALLPATH([$localstatedir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [libdir],
[CS_PREPARE_INSTALLPATH([$libdir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [includedir],
[CS_PREPARE_INSTALLPATH([$includedir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [oldincludedir],
[CS_PREPARE_INSTALLPATH([$oldincludedir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [infodir],
[CS_PREPARE_INSTALLPATH([$infodir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [mandir],
[CS_PREPARE_INSTALLPATH([$mandir], [$2])])
])
AC_DEFUN([_CS_OUTPUT_INSTALL_DIRS],
[m4_default([$1], [CS_JAMCONFIG_PROPERTY])([$2], [$3])])
#-----------------------------------------------------------------------------
# CS_PREPARE_INSTALLPATH(VALUE, [RAW-BACKSLASHES])
# Transform variable references of the form ${bla} to $(bla) in VALUE and
# correctly quotes backslashes. This is needed if you need to emit some of
# the paths from Autoconf. RAW-BACKSLASHES has the same meaning as in
# CS_OUTPUT_INSTALLDIRS.
#-----------------------------------------------------------------------------
AC_DEFUN([CS_PREPARE_INSTALLPATH],
[`echo "$1" | sed 's/\${\([[a-zA-Z_][a-zA-Z_]]*\)}/$(\1)/g;m4_ifval([$2],
[s/\\/\\\\/g], [s/\\\\/\\\\\\\\/g])'`])
#-----------------------------------------------------------------------------
# installdirs.m4 (c) Matze Braun <matze@braunis.de>
# Macro for emitting the installation paths gathered by Autoconf.
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# CS_OUTPUT_INSTALLDIRS([EMITTER], [RAW-BACKSLASHES])
# Emit installation directories collected by Autoconf. EMITTER is a macro
# name, such as CS_JAMCONFIG_PROPERTY or CS_MAKEFILE_PROPERTY, which performs
# the actual task of emitting the KEY/VALUE tuple. If EMITTER is omitted,
# CS_JAMCONFIG_PROPERTY is used. If RAW-BACKSLASHES is not provided, then
# backslashes in emitted values are each escaped with an additional
# backslash. If RAW-BACKSLASHES is not the null value, then backslashes are
# emitted raw. The following properties are emitted:
#
# prefix
# exec_prefix
# bindir
# sbindir
# libexecdir
# datadir
# sysconfdir
# sharedstatedir
# localstatedir
# libdir
# includedir
# oldincludedir
# infodir
# mandir
#-----------------------------------------------------------------------------
AC_DEFUN([CS_OUTPUT_INSTALLDIRS],[
# Handle the case when no prefix is given, and the special case when a path
# contains more than 2 slashes, these paths seem to be correct but Jam fails
# on them.
AS_IF([test $prefix = NONE],
[cs_install_prefix="$ac_default_prefix"],
[cs_install_prefix=`echo "$prefix" | sed -e 's:///*:/:g'`])
AS_IF([test $exec_prefix = NONE],
[cs_install_exec_prefix="AS_ESCAPE([$(prefix)])"],
[cs_install_exec_prefix=`echo "$exec_prefix" | sed -e 's:///*:/:g'`])
_CS_OUTPUT_INSTALL_DIRS([$1], [prefix],
[CS_PREPARE_INSTALLPATH([$cs_install_prefix], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [exec_prefix],
[CS_PREPARE_INSTALLPATH([$cs_install_exec_prefix], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [bindir],
[CS_PREPARE_INSTALLPATH([$bindir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [sbindir],
[CS_PREPARE_INSTALLPATH([$sbindir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [libexecdir],
[CS_PREPARE_INSTALLPATH([$libexecdir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [datadir],
[CS_PREPARE_INSTALLPATH([$datadir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [sysconfdir],
[CS_PREPARE_INSTALLPATH([$sysconfdir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [sharedstatedir],
[CS_PREPARE_INSTALLPATH([$sharedstatedir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [localstatedir],
[CS_PREPARE_INSTALLPATH([$localstatedir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [libdir],
[CS_PREPARE_INSTALLPATH([$libdir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [includedir],
[CS_PREPARE_INSTALLPATH([$includedir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [oldincludedir],
[CS_PREPARE_INSTALLPATH([$oldincludedir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [infodir],
[CS_PREPARE_INSTALLPATH([$infodir], [$2])])
_CS_OUTPUT_INSTALL_DIRS([$1], [mandir],
[CS_PREPARE_INSTALLPATH([$mandir], [$2])])
])
AC_DEFUN([_CS_OUTPUT_INSTALL_DIRS],
[m4_default([$1], [CS_JAMCONFIG_PROPERTY])([$2], [$3])])
#-----------------------------------------------------------------------------
# CS_PREPARE_INSTALLPATH(VALUE, [RAW-BACKSLASHES])
# Transform variable references of the form ${bla} to $(bla) in VALUE and
# correctly quotes backslashes. This is needed if you need to emit some of
# the paths from Autoconf. RAW-BACKSLASHES has the same meaning as in
# CS_OUTPUT_INSTALLDIRS.
#-----------------------------------------------------------------------------
AC_DEFUN([CS_PREPARE_INSTALLPATH],
[`echo "$1" | sed 's/\${\([[a-zA-Z_][a-zA-Z_]]*\)}/$(\1)/g;m4_ifval([$2],
[s/\\/\\\\/g], [s/\\\\/\\\\\\\\/g])'`])

View File

@@ -1,58 +1,58 @@
# jamcache.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# Text cache facility for Jam-style properties. The cache is stored in
# the shell variable cs_jamfile_text.
#
# CS_JAMCONFIG_APPEND(TEXT)
# Append text to the Jam text cache. This is a cover for
# CS_TEXT_CACHE_APPEND().
#
# CS_JAMCONFIG_PREPEND(TEXT)
# Prepend text to the Jam text cache. This is a cover for
# CS_TEXT_CACHE_PREPEND().
#
# CS_JAMCONFIG_PROPERTY(KEY, VALUE, [APPEND], [UNCONDITIONAL])
# Append a line of the form "KEY ?= VALUE" to the Jam text cache. If the
# APPEND argument is not the empty string, then VALUE is appended to the
# existing value of KEY using the form "KEY += VALUE". If the
# UNCONDITIONAL argument is not empty, then the value of KEY is set
# unconditionally "KEY = VALUE", rather than via "KEY ?= VALUE". APPEND
# takes precedence over UNCONDITIONAL. Note that if VALUE references
# other Jam variables, for example $(OBJS), then be sure to protect the
# value with AS_ESCAPE(). For example:
# CS_JAMCONFIG_PROPERTY([ALLOBJS], [AS_ESCAPE([$(OBJS) $(LIBOBJS)])])
#
# CS_JAMCONFIG_OUTPUT(FILENAME)
# Instruct config.status to write the Jam text cache to the given
# filename. This is a cover for CS_TEXT_CACHE_OUTPUT().
#------------------------------------------------------------------------------
AC_DEFUN([CS_JAMCONFIG_APPEND],
[CS_TEXT_CACHE_APPEND([cs_jamconfig_text], [$1])])
AC_DEFUN([CS_JAMCONFIG_PREPEND],
[CS_TEXT_CACHE_PREPEND([cs_jamconfig_text], [$1])])
AC_DEFUN([CS_JAMCONFIG_PROPERTY],
[CS_JAMCONFIG_APPEND(
[$1 m4_ifval([$3], [+=], m4_ifval([$4], [=], [?=])) \"$2\" ;
])])
AC_DEFUN([CS_JAMCONFIG_OUTPUT],
[CS_TEXT_CACHE_OUTPUT([cs_jamconfig_text], [$1])])
# jamcache.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# Text cache facility for Jam-style properties. The cache is stored in
# the shell variable cs_jamfile_text.
#
# CS_JAMCONFIG_APPEND(TEXT)
# Append text to the Jam text cache. This is a cover for
# CS_TEXT_CACHE_APPEND().
#
# CS_JAMCONFIG_PREPEND(TEXT)
# Prepend text to the Jam text cache. This is a cover for
# CS_TEXT_CACHE_PREPEND().
#
# CS_JAMCONFIG_PROPERTY(KEY, VALUE, [APPEND], [UNCONDITIONAL])
# Append a line of the form "KEY ?= VALUE" to the Jam text cache. If the
# APPEND argument is not the empty string, then VALUE is appended to the
# existing value of KEY using the form "KEY += VALUE". If the
# UNCONDITIONAL argument is not empty, then the value of KEY is set
# unconditionally "KEY = VALUE", rather than via "KEY ?= VALUE". APPEND
# takes precedence over UNCONDITIONAL. Note that if VALUE references
# other Jam variables, for example $(OBJS), then be sure to protect the
# value with AS_ESCAPE(). For example:
# CS_JAMCONFIG_PROPERTY([ALLOBJS], [AS_ESCAPE([$(OBJS) $(LIBOBJS)])])
#
# CS_JAMCONFIG_OUTPUT(FILENAME)
# Instruct config.status to write the Jam text cache to the given
# filename. This is a cover for CS_TEXT_CACHE_OUTPUT().
#------------------------------------------------------------------------------
AC_DEFUN([CS_JAMCONFIG_APPEND],
[CS_TEXT_CACHE_APPEND([cs_jamconfig_text], [$1])])
AC_DEFUN([CS_JAMCONFIG_PREPEND],
[CS_TEXT_CACHE_PREPEND([cs_jamconfig_text], [$1])])
AC_DEFUN([CS_JAMCONFIG_PROPERTY],
[CS_JAMCONFIG_APPEND(
[$1 m4_ifval([$3], [+=], m4_ifval([$4], [=], [?=])) \"$2\" ;
])])
AC_DEFUN([CS_JAMCONFIG_OUTPUT],
[CS_TEXT_CACHE_OUTPUT([cs_jamconfig_text], [$1])])

View File

@@ -1,53 +1,53 @@
# makecache.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# Text cache facility for makefile-style properties. The cache is stored in
# the shell variable cs_makefile_text.
#
# CS_MAKEFILE_APPEND(TEXT)
# Append text to the makefile text cache. This is a cover for
# CS_TEXT_CACHE_APPEND().
#
# CS_MAKEFILE_PREPEND(TEXT)
# Prepend text to the makefile text cache. This is a cover for
# CS_TEXT_CACHE_PREPEND().
#
# CS_MAKEFILE_PROPERTY(KEY, VALUE, [APPEND])
# Append a line of the form "KEY = VALUE" to the makefile text cache. If
# the APPEND argument is not the empty string, then VALUE is appended to
# the existing value of KEY using the form "KEY += VALUE". Note that if
# VALUE references other makefile variables, for example $(OBJS), then be
# sure to protect the value with AS_ESCAPE(). For example:
# CS_MAKEFILE_PROPERTY([ALLOBJS], [AS_ESCAPE([$(OBJS) $(LIBOBJS)])])
#
# CS_MAKEFILE_OUTPUT(FILENAME)
# Instruct config.status to write the makefile text cache to the given
# filename. This is a cover for CS_TEXT_CACHE_OUTPUT().
#------------------------------------------------------------------------------
AC_DEFUN([CS_MAKEFILE_APPEND],
[CS_TEXT_CACHE_APPEND([cs_makefile_text], [$1])])
AC_DEFUN([CS_MAKEFILE_PREPEND],
[CS_TEXT_CACHE_PREPEND([cs_makefile_text], [$1])])
AC_DEFUN([CS_MAKEFILE_PROPERTY],
[CS_MAKEFILE_APPEND([$1 m4_ifval([$3], [+=], [=]) $2
])])
AC_DEFUN([CS_MAKEFILE_OUTPUT],[CS_TEXT_CACHE_OUTPUT([cs_makefile_text], [$1])])
# makecache.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# Text cache facility for makefile-style properties. The cache is stored in
# the shell variable cs_makefile_text.
#
# CS_MAKEFILE_APPEND(TEXT)
# Append text to the makefile text cache. This is a cover for
# CS_TEXT_CACHE_APPEND().
#
# CS_MAKEFILE_PREPEND(TEXT)
# Prepend text to the makefile text cache. This is a cover for
# CS_TEXT_CACHE_PREPEND().
#
# CS_MAKEFILE_PROPERTY(KEY, VALUE, [APPEND])
# Append a line of the form "KEY = VALUE" to the makefile text cache. If
# the APPEND argument is not the empty string, then VALUE is appended to
# the existing value of KEY using the form "KEY += VALUE". Note that if
# VALUE references other makefile variables, for example $(OBJS), then be
# sure to protect the value with AS_ESCAPE(). For example:
# CS_MAKEFILE_PROPERTY([ALLOBJS], [AS_ESCAPE([$(OBJS) $(LIBOBJS)])])
#
# CS_MAKEFILE_OUTPUT(FILENAME)
# Instruct config.status to write the makefile text cache to the given
# filename. This is a cover for CS_TEXT_CACHE_OUTPUT().
#------------------------------------------------------------------------------
AC_DEFUN([CS_MAKEFILE_APPEND],
[CS_TEXT_CACHE_APPEND([cs_makefile_text], [$1])])
AC_DEFUN([CS_MAKEFILE_PREPEND],
[CS_TEXT_CACHE_PREPEND([cs_makefile_text], [$1])])
AC_DEFUN([CS_MAKEFILE_PROPERTY],
[CS_MAKEFILE_APPEND([$1 m4_ifval([$3], [+=], [=]) $2
])])
AC_DEFUN([CS_MAKEFILE_OUTPUT],[CS_TEXT_CACHE_OUTPUT([cs_makefile_text], [$1])])

View File

@@ -1,93 +1,93 @@
# mkdir.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_MKDIR
# Determine how to create a directory and a directory tree. Sets the
# shell variable MKDIR to the command which creates a directory, and
# MKDIRS to the command which creates a directory tree. Invokes
# AC_SUBST() for MKDIR and MKDIRS.
#
# IMPLEMENTATION NOTES
# We need to know the exact commands, so that we can emit them, thus the
# AS_MKDIR_P function is not what we want to use here since it does not
# provide access to the commands (and might not even discover suitable
# commands). First try "mkdir -p", then try the older "mkdirs".
# Finally, if the mkdir command failed to recognize -p, then it might
# have created a directory named "-p", so clean up that bogus directory.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_MKDIR],
[AC_CACHE_CHECK([how to create a directory], [cs_cv_shell_mkdir],
[cs_cv_shell_mkdir='mkdir'])
AC_SUBST([MKDIR], [$cs_cv_shell_mkdir])
AC_CACHE_CHECK([how to create a directory tree], [cs_cv_shell_mkdir_p],
[if $cs_cv_shell_mkdir -p . 2>/dev/null; then
cs_cv_shell_mkdir_p='mkdir -p'
elif mkdirs . 2>/dev/null; then
cs_cv_shell_mkdir_p='mkdirs'
fi
test -d ./-p && rmdir ./-p])
AS_VAR_SET_IF([cs_cv_shell_mkdir_p],
[AC_SUBST([MKDIRS], [$cs_cv_shell_mkdir_p])],
[CS_MSG_ERROR([do not know how to create a directory tree])])])
#------------------------------------------------------------------------------
# Replacement for AS_MKDIR_P() from m4sugar/m4sh.m4 which fixes two problems
# which are present in Autoconf 2.57 and probably all earlier 2.5x versions.
# This bug, along with a patch, was submitted to the Autoconf GNATS database by
# Eric Sunshine as #227 on 17-Dec-2002. The bogus "-p" directory bug was fixed
# for Autoconf 2.58 on 26-Sep-2003. The "mkdirs" optimization was not accepted
# (since it is unnecessary; it's only an optimization).
#
# 1) Removes bogus "-p" directory which the stock AS_MKDIR_P() leaves laying
# around in the working directory if the mkdir command does not recognize
# the -p option.
# 2) Takes advantage of the older "mkdirs" program if it exists and if "mkdir
# -p" does not work.
#------------------------------------------------------------------------------
m4_defun([_AS_MKDIR_P_PREPARE],
[if mkdir -p . 2>/dev/null; then
as_mkdir_p='mkdir -p'
elif mkdirs . 2>/dev/null; then
as_mkdir_p='mkdirs'
else
as_mkdir_p=''
fi
test -d ./-p && rmdir ./-p
])# _AS_MKDIR_P_PREPARE
m4_define([AS_MKDIR_P],
[AS_REQUIRE([_$0_PREPARE])dnl
{ if test -n "$as_mkdir_p"; then
$as_mkdir_p $1
else
as_dir=$1
as_dirs=
while test ! -d "$as_dir"; do
as_dirs="$as_dir $as_dirs"
as_dir=`AS_DIRNAME("$as_dir")`
done
test ! -n "$as_dirs" || mkdir $as_dirs
fi || AS_ERROR([cannot create directory $1]); }
])# AS_MKDIR_P
# mkdir.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_CHECK_MKDIR
# Determine how to create a directory and a directory tree. Sets the
# shell variable MKDIR to the command which creates a directory, and
# MKDIRS to the command which creates a directory tree. Invokes
# AC_SUBST() for MKDIR and MKDIRS.
#
# IMPLEMENTATION NOTES
# We need to know the exact commands, so that we can emit them, thus the
# AS_MKDIR_P function is not what we want to use here since it does not
# provide access to the commands (and might not even discover suitable
# commands). First try "mkdir -p", then try the older "mkdirs".
# Finally, if the mkdir command failed to recognize -p, then it might
# have created a directory named "-p", so clean up that bogus directory.
#------------------------------------------------------------------------------
AC_DEFUN([CS_CHECK_MKDIR],
[AC_CACHE_CHECK([how to create a directory], [cs_cv_shell_mkdir],
[cs_cv_shell_mkdir='mkdir'])
AC_SUBST([MKDIR], [$cs_cv_shell_mkdir])
AC_CACHE_CHECK([how to create a directory tree], [cs_cv_shell_mkdir_p],
[if $cs_cv_shell_mkdir -p . 2>/dev/null; then
cs_cv_shell_mkdir_p='mkdir -p'
elif mkdirs . 2>/dev/null; then
cs_cv_shell_mkdir_p='mkdirs'
fi
test -d ./-p && rmdir ./-p])
AS_VAR_SET_IF([cs_cv_shell_mkdir_p],
[AC_SUBST([MKDIRS], [$cs_cv_shell_mkdir_p])],
[CS_MSG_ERROR([do not know how to create a directory tree])])])
#------------------------------------------------------------------------------
# Replacement for AS_MKDIR_P() from m4sugar/m4sh.m4 which fixes two problems
# which are present in Autoconf 2.57 and probably all earlier 2.5x versions.
# This bug, along with a patch, was submitted to the Autoconf GNATS database by
# Eric Sunshine as #227 on 17-Dec-2002. The bogus "-p" directory bug was fixed
# for Autoconf 2.58 on 26-Sep-2003. The "mkdirs" optimization was not accepted
# (since it is unnecessary; it's only an optimization).
#
# 1) Removes bogus "-p" directory which the stock AS_MKDIR_P() leaves laying
# around in the working directory if the mkdir command does not recognize
# the -p option.
# 2) Takes advantage of the older "mkdirs" program if it exists and if "mkdir
# -p" does not work.
#------------------------------------------------------------------------------
m4_defun([_AS_MKDIR_P_PREPARE],
[if mkdir -p . 2>/dev/null; then
as_mkdir_p='mkdir -p'
elif mkdirs . 2>/dev/null; then
as_mkdir_p='mkdirs'
else
as_mkdir_p=''
fi
test -d ./-p && rmdir ./-p
])# _AS_MKDIR_P_PREPARE
m4_define([AS_MKDIR_P],
[AS_REQUIRE([_$0_PREPARE])dnl
{ if test -n "$as_mkdir_p"; then
$as_mkdir_p $1
else
as_dir=$1
as_dirs=
while test ! -d "$as_dir"; do
as_dirs="$as_dir $as_dirs"
as_dir=`AS_DIRNAME("$as_dir")`
done
test ! -n "$as_dirs" || mkdir $as_dirs
fi || AS_ERROR([cannot create directory $1]); }
])# AS_MKDIR_P

View File

@@ -1,68 +1,68 @@
#==============================================================================
# packageinfo.m4
# Macros for setting general info on the package, such as name and version
# numbers and propagate them to the generated make and Jam property files.
#
# Copyright (C)2003 by Matthias Braun <matze@braunis.de>
# Copyright (C)2003,2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
#------------------------------------------------------------------------------
# CS_PACKAGEINFO([LONGNAME], [COPYRIGHT, [HOMEPAGE])
# Set additional information for the package. Note that the version
# number of your application should only contain numbers, because on
# Windows you can only set numerical values in some of the file
# properties (such as versioninfo .rc files).
#------------------------------------------------------------------------------
AC_DEFUN([CS_PACKAGEINFO],
[PACKAGE_LONGNAME="[$1]"
PACKAGE_COPYRIGHT="[$2]"
PACKAGE_HOMEPAGE="[$3]"
])
#------------------------------------------------------------------------------
# CS_EMIT_PACKAGEINFO([EMITTER])
# Emit extended package information using the provided EMITTER. EMITTER
# is a macro name, such as CS_JAMCONFIG_PROPERTY or CS_MAKEFILE_PROPERTY,
# which performs the actual task of emitting the KEY/VALUE tuple. If
# EMITTER is omitted, CS_JAMCONFIG_PROPERTY is used. For backward
# compatibility, if EMITTER is the literal value "jam", then
# CS_JAMCONFIG_PROPERTY is used; if it is "make", then
# CS_MAKEFILE_PROPERTY is used; however use of these literal names is
# highly discouraged.
#------------------------------------------------------------------------------
AC_DEFUN([CS_EMIT_PACKAGEINFO],
[_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_NAME], [$PACKAGE_NAME])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_VERSION], [$PACKAGE_VERSION])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_STRING], [$PACKAGE_STRING])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_BUGREPORT], [$PACKAGE_BUGREPORT])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_LONGNAME], [$PACKAGE_LONGNAME])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_HOMEPAGE], [$PACKAGE_HOMEPAGE])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_COPYRIGHT], [$PACKAGE_COPYRIGHT])
for cs_veritem in m4_translit(AC_PACKAGE_VERSION, [.], [ ]); do
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_VERSION_LIST], [$cs_veritem], [+])
done
])
AC_DEFUN([_CS_EMIT_PACKAGEINFO],
[m4_case([$1],
[make], [CS_MAKEFILE_PROPERTY([$2], [$3], [$4])],
[jam], [CS_JAMCONFIG_PROPERTY([$2], [$3], [$4])],
[], [CS_JAMCONFIG_PROPERTY([$2], [$3], [$4])],
[$1([$2], [$3], [$4])])])
#==============================================================================
# packageinfo.m4
# Macros for setting general info on the package, such as name and version
# numbers and propagate them to the generated make and Jam property files.
#
# Copyright (C)2003 by Matthias Braun <matze@braunis.de>
# Copyright (C)2003,2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
#------------------------------------------------------------------------------
# CS_PACKAGEINFO([LONGNAME], [COPYRIGHT, [HOMEPAGE])
# Set additional information for the package. Note that the version
# number of your application should only contain numbers, because on
# Windows you can only set numerical values in some of the file
# properties (such as versioninfo .rc files).
#------------------------------------------------------------------------------
AC_DEFUN([CS_PACKAGEINFO],
[PACKAGE_LONGNAME="[$1]"
PACKAGE_COPYRIGHT="[$2]"
PACKAGE_HOMEPAGE="[$3]"
])
#------------------------------------------------------------------------------
# CS_EMIT_PACKAGEINFO([EMITTER])
# Emit extended package information using the provided EMITTER. EMITTER
# is a macro name, such as CS_JAMCONFIG_PROPERTY or CS_MAKEFILE_PROPERTY,
# which performs the actual task of emitting the KEY/VALUE tuple. If
# EMITTER is omitted, CS_JAMCONFIG_PROPERTY is used. For backward
# compatibility, if EMITTER is the literal value "jam", then
# CS_JAMCONFIG_PROPERTY is used; if it is "make", then
# CS_MAKEFILE_PROPERTY is used; however use of these literal names is
# highly discouraged.
#------------------------------------------------------------------------------
AC_DEFUN([CS_EMIT_PACKAGEINFO],
[_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_NAME], [$PACKAGE_NAME])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_VERSION], [$PACKAGE_VERSION])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_STRING], [$PACKAGE_STRING])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_BUGREPORT], [$PACKAGE_BUGREPORT])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_LONGNAME], [$PACKAGE_LONGNAME])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_HOMEPAGE], [$PACKAGE_HOMEPAGE])
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_COPYRIGHT], [$PACKAGE_COPYRIGHT])
for cs_veritem in m4_translit(AC_PACKAGE_VERSION, [.], [ ]); do
_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_VERSION_LIST], [$cs_veritem], [+])
done
])
AC_DEFUN([_CS_EMIT_PACKAGEINFO],
[m4_case([$1],
[make], [CS_MAKEFILE_PROPERTY([$2], [$3], [$4])],
[jam], [CS_JAMCONFIG_PROPERTY([$2], [$3], [$4])],
[], [CS_JAMCONFIG_PROPERTY([$2], [$3], [$4])],
[$1([$2], [$3], [$4])])])

View File

@@ -1,37 +1,37 @@
# path.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_PATH_NORMALIZE(STRING)
# Normalize a pathname at run-time by transliterating Windows/DOS
# backslashes to forward slashes. Also collapses whitespace.
#------------------------------------------------------------------------------
AC_DEFUN([CS_PATH_NORMALIZE],
[`echo "x$1" | tr '\\\\' '/' | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'`])
#------------------------------------------------------------------------------
# CS_RUN_PATH_NORMALIZE(COMMAND)
# Normalize the pathname emitted by COMMAND by transliterating
# Windows/DOS backslashes to forward slashes. Also collapses whitespace.
#------------------------------------------------------------------------------
AC_DEFUN([CS_RUN_PATH_NORMALIZE],
[`AC_RUN_LOG([$1]) | tr '\\\\' '/' | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'`])
# path.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_PATH_NORMALIZE(STRING)
# Normalize a pathname at run-time by transliterating Windows/DOS
# backslashes to forward slashes. Also collapses whitespace.
#------------------------------------------------------------------------------
AC_DEFUN([CS_PATH_NORMALIZE],
[`echo "x$1" | tr '\\\\' '/' | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'`])
#------------------------------------------------------------------------------
# CS_RUN_PATH_NORMALIZE(COMMAND)
# Normalize the pathname emitted by COMMAND by transliterating
# Windows/DOS backslashes to forward slashes. Also collapses whitespace.
#------------------------------------------------------------------------------
AC_DEFUN([CS_RUN_PATH_NORMALIZE],
[`AC_RUN_LOG([$1]) | tr '\\\\' '/' | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'`])

View File

@@ -1,207 +1,207 @@
###############################################################################
# progver.m4
# Written by Norman Kramer <norman@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
###############################################################################
#
# From the input pattern we create regular expressions we send through sed
# to extract the version information from the standard input to sed.
# Then we extract from the resulting version string subparts.
# The same happens with the supplied version string. It too is split into its
# subparts according to the pattern.
# Then the subparts from the gathered version string and the supplied one are
# compared.
#
# How does the pattern look like ?
# It is a sequence of 9s and _s and separators.
# 9 denotes a non empty sequence of digits.
# _ denotes a non empty sequence of characters from the class [a-zA-Z].
# | everything behind is optional
# Everything else is treated as a separator.
# Consecutive 9s and _s are compressed to contain only one of each type.
# For instance "99_.9.__abc9_" will become "9_.9._abc9_".
#
# How we find the parts we compare ?
# From this transformed string we yield the parts we will later compare.
# We break up the string as follows:
# Any sequence of separators represent one breakup. Additional breakups are
# placed behind every 9 and _ .
# So the example from above will give:
#
# "99_.9.__abc9_" ===compress==> "9_.9._abc9_" ===breakup==> "9" "_" "9" "_" "9" "_"
#
# How we create the regular expressions ?
# We take the compressed pattern and quote every separator.
# The we replace the 9s with [0-9][0-9]*
# and the _s with [a-zA-Z][a-zA-Z]* .
# The above example will become:
#
# "99_.9.__abc9_" ===compress==> "9_.9._abc9_" ===rexify==>
# [0-9][0-9]*[a-zA-Z][a-zA-Z]*\.[0-9][0-9]*\.[a-zA-Z][a-zA-Z]*\a\b\c[0-9][0-9]*[a-zA-Z][a-zA-Z]*
#
# Voila.
#
# To yield the subparts from the string we additionally enclose the
# 9s and _s with \( and \).
#
###############################################################################
# ****************************************************************
# ** helper definitions **
# ****************************************************************
m4_define([CS_VCHK_RUNTH], [m4_pushdef([i], [$1])m4_if($1,0,,[CS_VCHK_RUNTH(m4_decr($1), [$2])][$2])m4_popdef([i])])
m4_define([CS_VCHK_PREFIX], [])
m4_define([CS_VCHK_SUFFIX], [])
m4_define([CS_VCHK_GROUPPREFIX], [\(])
m4_define([CS_VCHK_GROUPSUFFIX], [\)])
m4_define([CS_VCHK_CHAR], [[[[a-zA-Z]]]])
m4_define([CS_VCHK_DIGIT], [[[0-9]]])
m4_define([CS_VCHK_SEQUENCE], [CS_VCHK_PREFIX[]CS_VCHK_SINGLE[]CS_VCHK_SINGLE[]*CS_VCHK_SUFFIX[]])
m4_define([CS_VCHK_OPTSEQUENCE], [CS_VCHK_PREFIX[]CS_VCHK_SINGLE[]*CS_VCHK_SUFFIX[]])
m4_define([CS_VCHK_REXSEQ], [m4_bpatsubst($1, [$2], [[]CS_VCHK_SEQUENCE[]])])
m4_define([CS_VCHK_GROUPINGON], [m4_pushdef([CS_VCHK_PREFIX], [CS_VCHK_GROUPPREFIX])m4_pushdef([CS_VCHK_SUFFIX], [CS_VCHK_GROUPSUFFIX])])
m4_define([CS_VCHK_GROUPINGOFF], [m4_popdef([CS_VCHK_SUFFIX])m4_popdef([CS_VCHK_PREFIX])])
m4_define([CS_VCHK_OPTON], [m4_pushdef([CS_VCHK_SEQUENCE], [CS_VCHK_OPTSEQUENCE])])
m4_define([CS_VCHK_OPTOFF], [m4_popdef([CS_VCHK_SEQUENCE])])
m4_define([CS_VCHK_RMOPT], [CS_VCHK_RMCHAR([$1], m4_index([$1], [|]))])
m4_define([CS_VCHK_RMCHAR], [m4_if($2,-1,[$1],m4_substr([$1], 0, $2)[]m4_substr([$1], m4_incr($2)))])
m4_define([CS_VCHK_RMALL], [m4_translit([$1], [|], [])])
m4_define([CS_VCHK_CUTOFF], [m4_if(m4_index($1,[|]),-1, [$1], [m4_substr($1, 0, m4_index($1,[|]))])])
m4_define([CS_VCHK_CYCLEOPT], [
m4_if($2,-1,, [m4_pushdef([i], CS_VCHK_CUTOFF([$1])) m4_pushdef([j], CS_VCHK_DUMMY_TAIL([$1])) CS_VCHK_CYCLEOPT( CS_VCHK_RMOPT([$1]), m4_index($1, [|]), [$3])$3 m4_popdef([i]) m4_popdef([j])])
])
m4_define([CS_VCHK_TAIL], [m4_if(m4_index($1,[|]),-1, [], [m4_substr($1, m4_incr(m4_index($1,[|])))])])
m4_define([CS_VCHK_DUMMY_COMPRESS], [m4_bpatsubst(m4_bpatsubst([$1], [__*], [A]), [99*], [0])])
m4_define([CS_VCHK_DUMMY_TAIL], [CS_VCHK_DUMMY_COMPRESS(m4_translit(CS_VCHK_TAIL([$1]), [|], []))])
# ****************************************************************
# ** FlagsOn / FlagsOff **
# ****************************************************************
m4_define([CS_VCHK_FLAGSON],
[m4_if($#, 0, [],
$1, [], [],
[$1], [group], [CS_VCHK_GROUPINGON[]],
[$1], [opt], [CS_VCHK_OPTON[]])dnl
m4_if($#, 0, [], $1, [], [], [CS_VCHK_FLAGSON(m4_shift($@))])])
m4_define([CS_VCHK_FLAGSOFF],
[m4_if($#, 0, [],
$1, [], [],
$1, [group], [CS_VCHK_GROUPINGOFF[]],
[$1], [opt], [CS_VCHK_OPTOFF[]])dnl
m4_if($#, 0, [], $1, [], [], [CS_VCHK_FLAGSOFF(m4_shift($@))])])
# ****************************************************************
# ** rexify / sedify **
# ****************************************************************
m4_define([CS_VCHK_REXIFY],
[m4_pushdef([CS_VCHK_SINGLE], [$1])dnl
CS_VCHK_FLAGSON(m4_shift(m4_shift(m4_shift($@))))dnl
CS_VCHK_REXSEQ([$3], [$2])dnl
CS_VCHK_FLAGSOFF(m4_shift(m4_shift(m4_shift($@))))dnl
m4_popdef([CS_VCHK_SINGLE])])
m4_define([CS_VCHK_QUOTESEP], [m4_bpatsubst($1, [[^9_]], [\\\&])])
m4_define([CS_VCHK_REXCHAR], [CS_VCHK_REXIFY([CS_VCHK_CHAR], [__*], $@)])
m4_define([CS_VCHK_REXDIGIT], [CS_VCHK_REXIFY([CS_VCHK_DIGIT], [99*], $@)])
m4_define([CS_VCHK_SEDIFY], [CS_VCHK_REXDIGIT([CS_VCHK_REXCHAR([CS_VCHK_QUOTESEP([$1])], m4_shift($@))], m4_shift($@))])
m4_define([CS_VCHK_SEDEXPRALL], [/CS_VCHK_SEDIFY([$1])/!d;s/.*\(CS_VCHK_SEDIFY([$1])\).*/\1/;q])
m4_define([CS_VCHK_SEDEXPRNTH], [/CS_VCHK_SEDIFY([$1])/!d;s/.*CS_VCHK_SEDIFY([$1],[group]).*/\$2/])
# ****************************************************************
# ** Pattern splitting **
# ****************************************************************
m4_define([CS_VCHK_SPLITSEP], [CS_VCHK_REXIFY([s], [[^9_][^9_]*], $@)])
m4_define([CS_VCHK_SPLITDIGIT], [CS_VCHK_REXIFY([d], [99*], $@)])
m4_define([CS_VCHK_SPLITCHAR], [CS_VCHK_REXIFY([c], [__*], $@)])
# ****************************************************************
# ** return a list of 's' 'd' 'c' 'e' chars denoting the kind **
# ** pattern parts: separator, digit, char, end **
# ****************************************************************
m4_define([CS_VCHK_PATTERNLIST], [m4_pushdef([CS_VCHK_SEQUENCE], [CS_VCHK_SINGLE ])dnl
m4_translit(CS_VCHK_SPLITDIGIT([CS_VCHK_SPLITCHAR([CS_VCHK_SPLITSEP([$1])])]), [ ], m4_if([$2],[],[ ],[$2]))e[]dnl
m4_popdef([CS_VCHK_SEQUENCE])])
# ****************************************************************
# ** Build the shell commands we emit to the configure script. **
# ****************************************************************
m4_define([CS_VCHK_PATCOUNT], [m4_len(m4_bpatsubst(CS_VCHK_PATTERNLIST([$1]), [[^dc]]))])
# ****************************************************************************************
# ** CS_VCHK_EXTRACTVERSION(EXTRACT_CALL, MIN_VERSION, PATTERN, PRGPREFIX, COMPARISION) **
# ****************************************************************************************
m4_define([CS_VCHK_EXTRACTVERSION],
[cs_prog_$4_is_version=
cs_prog_$4_min_version=
cs_prog_$4_is_suffix=
cs_prog_$4_min_suffix=
cs_prog_$4_is_suffix_done=
cs_prog_$4_min_suffix_done=
CS_VCHK_CYCLEOPT([$3], [],
[test -z $cs_prog_$4_is_version && cs_prog_$4_is_version=`$1 | sed 'CS_VCHK_SEDEXPRALL([i])'`
test -n "$cs_prog_$4_is_version" && test -z $cs_prog_$4_is_suffix_done && { cs_prog_$4_is_suffix_done=yes ; cs_prog_$4_is_suffix=j ; }
])
CS_VCHK_CYCLEOPT([$3], ,
[test -z $cs_prog_$4_min_version && cs_prog_$4_min_version=`echo $2 | sed 'CS_VCHK_SEDEXPRALL([i])'`
test -n "$cs_prog_$4_min_version" && test -z $cs_prog_$4_min_suffix_done && { cs_prog_$4_min_suffix_done=yes ; cs_prog_$4_min_suffix=j ; }
])
CS_VCHK_RUNTH([CS_VCHK_PATCOUNT([$3])],
[cs_prog_$4_is_ver_[]i=`echo ${cs_prog_$4_is_version}${cs_prog_$4_is_suffix} | sed 'CS_VCHK_SEDEXPRNTH([CS_VCHK_RMALL([$3])], [i])'`
])
CS_VCHK_RUNTH([CS_VCHK_PATCOUNT([$3])],
[cs_prog_$4_min_ver_[]i=`echo $cs_prog_$4_min_version${cs_prog_$4_min_suffix} | sed 'CS_VCHK_SEDEXPRNTH([CS_VCHK_RMALL([$3])], [i])'`
])
cs_cv_prog_$4_version_ok=''
CS_VCHK_RUNTH([CS_VCHK_PATCOUNT([$3])],
[test -z "$cs_cv_prog_$4_version_ok" && { expr "$cs_prog_$4_is_ver_[]i" "$5" "$cs_prog_$4_min_ver_[]i" >/dev/null || cs_cv_prog_$4_version_ok=no ; }
test -z "$cs_cv_prog_$4_version_ok" && { expr "$cs_prog_$4_min_ver_[]i" "$5" "$cs_prog_$4_is_ver_[]i" >/dev/null || cs_cv_prog_$4_version_ok=yes ; }
])
AS_IF([test -z "$cs_cv_prog_$4_version_ok"], [cs_cv_prog_$4_version_ok=yes])
cs_cv_prog_$4_version_ok_annotated="$cs_cv_prog_$4_version_ok"
AS_IF([test -n "$cs_prog_$4_is_version"],
[cs_cv_prog_$4_version_ok_annotated="$cs_cv_prog_$4_version_ok_annotated (version $cs_prog_$4_is_version)"])
])
##############################################################################
# CS_CHECK_PROG_VERSION(PROG, EXTRACT_CALL, VERSION, PATTERN,
# [ACTION-IF-OKAY], [ACTION-IF-NOT-OKAY], [CMP])
# Check the version of a program PROG.
# Version information is emitted by EXTRACT_CALL (for instance "bison -V").
# The discovered program version is compared against VERSION.
# The pattern of the version string matches PATTERN
# The extracted version and the supplied version are compared with the CMP
# operator. i.e. EXTRACTED_VERSION CMP SUPPLIED_VERSION
# CMP defaults to >= if not specified.
# ACTION-IF-OKAY is invoked if comparision yields true, otherwise
# ACTION-IF-NOT-OKAY is invoked.
#
# PATTERN literals: 9 .. marks a non empty sequence of digits
# _ .. marks a non empty sequence of characters from [a-zA-Z]
# | .. everything behind is optional
# .. everything else is taken as separator - it is better
# to not try stuff like space, slash or comma.
#
# The test results in cs_cv_prog_PROG_version_ok being either yes or no.
##############################################################################
AC_DEFUN([CS_CHECK_PROG_VERSION],
[AC_CACHE_CHECK([if $1 version m4_default([$7],[>=]) $3],
[AS_TR_SH([cs_cv_prog_$1_version_ok_annotated])],
[CS_VCHK_EXTRACTVERSION([$2], [$3], [$4], AS_TR_SH([$1]),
m4_default([$7],[>=]))])
AS_IF([test "$AS_TR_SH([cs_cv_prog_$1_version_ok])" = yes], [$5], [$6])])
###############################################################################
# progver.m4
# Written by Norman Kramer <norman@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
###############################################################################
#
# From the input pattern we create regular expressions we send through sed
# to extract the version information from the standard input to sed.
# Then we extract from the resulting version string subparts.
# The same happens with the supplied version string. It too is split into its
# subparts according to the pattern.
# Then the subparts from the gathered version string and the supplied one are
# compared.
#
# How does the pattern look like ?
# It is a sequence of 9s and _s and separators.
# 9 denotes a non empty sequence of digits.
# _ denotes a non empty sequence of characters from the class [a-zA-Z].
# | everything behind is optional
# Everything else is treated as a separator.
# Consecutive 9s and _s are compressed to contain only one of each type.
# For instance "99_.9.__abc9_" will become "9_.9._abc9_".
#
# How we find the parts we compare ?
# From this transformed string we yield the parts we will later compare.
# We break up the string as follows:
# Any sequence of separators represent one breakup. Additional breakups are
# placed behind every 9 and _ .
# So the example from above will give:
#
# "99_.9.__abc9_" ===compress==> "9_.9._abc9_" ===breakup==> "9" "_" "9" "_" "9" "_"
#
# How we create the regular expressions ?
# We take the compressed pattern and quote every separator.
# The we replace the 9s with [0-9][0-9]*
# and the _s with [a-zA-Z][a-zA-Z]* .
# The above example will become:
#
# "99_.9.__abc9_" ===compress==> "9_.9._abc9_" ===rexify==>
# [0-9][0-9]*[a-zA-Z][a-zA-Z]*\.[0-9][0-9]*\.[a-zA-Z][a-zA-Z]*\a\b\c[0-9][0-9]*[a-zA-Z][a-zA-Z]*
#
# Voila.
#
# To yield the subparts from the string we additionally enclose the
# 9s and _s with \( and \).
#
###############################################################################
# ****************************************************************
# ** helper definitions **
# ****************************************************************
m4_define([CS_VCHK_RUNTH], [m4_pushdef([i], [$1])m4_if($1,0,,[CS_VCHK_RUNTH(m4_decr($1), [$2])][$2])m4_popdef([i])])
m4_define([CS_VCHK_PREFIX], [])
m4_define([CS_VCHK_SUFFIX], [])
m4_define([CS_VCHK_GROUPPREFIX], [\(])
m4_define([CS_VCHK_GROUPSUFFIX], [\)])
m4_define([CS_VCHK_CHAR], [[[[a-zA-Z]]]])
m4_define([CS_VCHK_DIGIT], [[[0-9]]])
m4_define([CS_VCHK_SEQUENCE], [CS_VCHK_PREFIX[]CS_VCHK_SINGLE[]CS_VCHK_SINGLE[]*CS_VCHK_SUFFIX[]])
m4_define([CS_VCHK_OPTSEQUENCE], [CS_VCHK_PREFIX[]CS_VCHK_SINGLE[]*CS_VCHK_SUFFIX[]])
m4_define([CS_VCHK_REXSEQ], [m4_bpatsubst($1, [$2], [[]CS_VCHK_SEQUENCE[]])])
m4_define([CS_VCHK_GROUPINGON], [m4_pushdef([CS_VCHK_PREFIX], [CS_VCHK_GROUPPREFIX])m4_pushdef([CS_VCHK_SUFFIX], [CS_VCHK_GROUPSUFFIX])])
m4_define([CS_VCHK_GROUPINGOFF], [m4_popdef([CS_VCHK_SUFFIX])m4_popdef([CS_VCHK_PREFIX])])
m4_define([CS_VCHK_OPTON], [m4_pushdef([CS_VCHK_SEQUENCE], [CS_VCHK_OPTSEQUENCE])])
m4_define([CS_VCHK_OPTOFF], [m4_popdef([CS_VCHK_SEQUENCE])])
m4_define([CS_VCHK_RMOPT], [CS_VCHK_RMCHAR([$1], m4_index([$1], [|]))])
m4_define([CS_VCHK_RMCHAR], [m4_if($2,-1,[$1],m4_substr([$1], 0, $2)[]m4_substr([$1], m4_incr($2)))])
m4_define([CS_VCHK_RMALL], [m4_translit([$1], [|], [])])
m4_define([CS_VCHK_CUTOFF], [m4_if(m4_index($1,[|]),-1, [$1], [m4_substr($1, 0, m4_index($1,[|]))])])
m4_define([CS_VCHK_CYCLEOPT], [
m4_if($2,-1,, [m4_pushdef([i], CS_VCHK_CUTOFF([$1])) m4_pushdef([j], CS_VCHK_DUMMY_TAIL([$1])) CS_VCHK_CYCLEOPT( CS_VCHK_RMOPT([$1]), m4_index($1, [|]), [$3])$3 m4_popdef([i]) m4_popdef([j])])
])
m4_define([CS_VCHK_TAIL], [m4_if(m4_index($1,[|]),-1, [], [m4_substr($1, m4_incr(m4_index($1,[|])))])])
m4_define([CS_VCHK_DUMMY_COMPRESS], [m4_bpatsubst(m4_bpatsubst([$1], [__*], [A]), [99*], [0])])
m4_define([CS_VCHK_DUMMY_TAIL], [CS_VCHK_DUMMY_COMPRESS(m4_translit(CS_VCHK_TAIL([$1]), [|], []))])
# ****************************************************************
# ** FlagsOn / FlagsOff **
# ****************************************************************
m4_define([CS_VCHK_FLAGSON],
[m4_if($#, 0, [],
$1, [], [],
[$1], [group], [CS_VCHK_GROUPINGON[]],
[$1], [opt], [CS_VCHK_OPTON[]])dnl
m4_if($#, 0, [], $1, [], [], [CS_VCHK_FLAGSON(m4_shift($@))])])
m4_define([CS_VCHK_FLAGSOFF],
[m4_if($#, 0, [],
$1, [], [],
$1, [group], [CS_VCHK_GROUPINGOFF[]],
[$1], [opt], [CS_VCHK_OPTOFF[]])dnl
m4_if($#, 0, [], $1, [], [], [CS_VCHK_FLAGSOFF(m4_shift($@))])])
# ****************************************************************
# ** rexify / sedify **
# ****************************************************************
m4_define([CS_VCHK_REXIFY],
[m4_pushdef([CS_VCHK_SINGLE], [$1])dnl
CS_VCHK_FLAGSON(m4_shift(m4_shift(m4_shift($@))))dnl
CS_VCHK_REXSEQ([$3], [$2])dnl
CS_VCHK_FLAGSOFF(m4_shift(m4_shift(m4_shift($@))))dnl
m4_popdef([CS_VCHK_SINGLE])])
m4_define([CS_VCHK_QUOTESEP], [m4_bpatsubst($1, [[^9_]], [\\\&])])
m4_define([CS_VCHK_REXCHAR], [CS_VCHK_REXIFY([CS_VCHK_CHAR], [__*], $@)])
m4_define([CS_VCHK_REXDIGIT], [CS_VCHK_REXIFY([CS_VCHK_DIGIT], [99*], $@)])
m4_define([CS_VCHK_SEDIFY], [CS_VCHK_REXDIGIT([CS_VCHK_REXCHAR([CS_VCHK_QUOTESEP([$1])], m4_shift($@))], m4_shift($@))])
m4_define([CS_VCHK_SEDEXPRALL], [/CS_VCHK_SEDIFY([$1])/!d;s/.*\(CS_VCHK_SEDIFY([$1])\).*/\1/;q])
m4_define([CS_VCHK_SEDEXPRNTH], [/CS_VCHK_SEDIFY([$1])/!d;s/.*CS_VCHK_SEDIFY([$1],[group]).*/\$2/])
# ****************************************************************
# ** Pattern splitting **
# ****************************************************************
m4_define([CS_VCHK_SPLITSEP], [CS_VCHK_REXIFY([s], [[^9_][^9_]*], $@)])
m4_define([CS_VCHK_SPLITDIGIT], [CS_VCHK_REXIFY([d], [99*], $@)])
m4_define([CS_VCHK_SPLITCHAR], [CS_VCHK_REXIFY([c], [__*], $@)])
# ****************************************************************
# ** return a list of 's' 'd' 'c' 'e' chars denoting the kind **
# ** pattern parts: separator, digit, char, end **
# ****************************************************************
m4_define([CS_VCHK_PATTERNLIST], [m4_pushdef([CS_VCHK_SEQUENCE], [CS_VCHK_SINGLE ])dnl
m4_translit(CS_VCHK_SPLITDIGIT([CS_VCHK_SPLITCHAR([CS_VCHK_SPLITSEP([$1])])]), [ ], m4_if([$2],[],[ ],[$2]))e[]dnl
m4_popdef([CS_VCHK_SEQUENCE])])
# ****************************************************************
# ** Build the shell commands we emit to the configure script. **
# ****************************************************************
m4_define([CS_VCHK_PATCOUNT], [m4_len(m4_bpatsubst(CS_VCHK_PATTERNLIST([$1]), [[^dc]]))])
# ****************************************************************************************
# ** CS_VCHK_EXTRACTVERSION(EXTRACT_CALL, MIN_VERSION, PATTERN, PRGPREFIX, COMPARISION) **
# ****************************************************************************************
m4_define([CS_VCHK_EXTRACTVERSION],
[cs_prog_$4_is_version=
cs_prog_$4_min_version=
cs_prog_$4_is_suffix=
cs_prog_$4_min_suffix=
cs_prog_$4_is_suffix_done=
cs_prog_$4_min_suffix_done=
CS_VCHK_CYCLEOPT([$3], [],
[test -z $cs_prog_$4_is_version && cs_prog_$4_is_version=`$1 | sed 'CS_VCHK_SEDEXPRALL([i])'`
test -n "$cs_prog_$4_is_version" && test -z $cs_prog_$4_is_suffix_done && { cs_prog_$4_is_suffix_done=yes ; cs_prog_$4_is_suffix=j ; }
])
CS_VCHK_CYCLEOPT([$3], ,
[test -z $cs_prog_$4_min_version && cs_prog_$4_min_version=`echo $2 | sed 'CS_VCHK_SEDEXPRALL([i])'`
test -n "$cs_prog_$4_min_version" && test -z $cs_prog_$4_min_suffix_done && { cs_prog_$4_min_suffix_done=yes ; cs_prog_$4_min_suffix=j ; }
])
CS_VCHK_RUNTH([CS_VCHK_PATCOUNT([$3])],
[cs_prog_$4_is_ver_[]i=`echo ${cs_prog_$4_is_version}${cs_prog_$4_is_suffix} | sed 'CS_VCHK_SEDEXPRNTH([CS_VCHK_RMALL([$3])], [i])'`
])
CS_VCHK_RUNTH([CS_VCHK_PATCOUNT([$3])],
[cs_prog_$4_min_ver_[]i=`echo $cs_prog_$4_min_version${cs_prog_$4_min_suffix} | sed 'CS_VCHK_SEDEXPRNTH([CS_VCHK_RMALL([$3])], [i])'`
])
cs_cv_prog_$4_version_ok=''
CS_VCHK_RUNTH([CS_VCHK_PATCOUNT([$3])],
[test -z "$cs_cv_prog_$4_version_ok" && { expr "$cs_prog_$4_is_ver_[]i" "$5" "$cs_prog_$4_min_ver_[]i" >/dev/null || cs_cv_prog_$4_version_ok=no ; }
test -z "$cs_cv_prog_$4_version_ok" && { expr "$cs_prog_$4_min_ver_[]i" "$5" "$cs_prog_$4_is_ver_[]i" >/dev/null || cs_cv_prog_$4_version_ok=yes ; }
])
AS_IF([test -z "$cs_cv_prog_$4_version_ok"], [cs_cv_prog_$4_version_ok=yes])
cs_cv_prog_$4_version_ok_annotated="$cs_cv_prog_$4_version_ok"
AS_IF([test -n "$cs_prog_$4_is_version"],
[cs_cv_prog_$4_version_ok_annotated="$cs_cv_prog_$4_version_ok_annotated (version $cs_prog_$4_is_version)"])
])
##############################################################################
# CS_CHECK_PROG_VERSION(PROG, EXTRACT_CALL, VERSION, PATTERN,
# [ACTION-IF-OKAY], [ACTION-IF-NOT-OKAY], [CMP])
# Check the version of a program PROG.
# Version information is emitted by EXTRACT_CALL (for instance "bison -V").
# The discovered program version is compared against VERSION.
# The pattern of the version string matches PATTERN
# The extracted version and the supplied version are compared with the CMP
# operator. i.e. EXTRACTED_VERSION CMP SUPPLIED_VERSION
# CMP defaults to >= if not specified.
# ACTION-IF-OKAY is invoked if comparision yields true, otherwise
# ACTION-IF-NOT-OKAY is invoked.
#
# PATTERN literals: 9 .. marks a non empty sequence of digits
# _ .. marks a non empty sequence of characters from [a-zA-Z]
# | .. everything behind is optional
# .. everything else is taken as separator - it is better
# to not try stuff like space, slash or comma.
#
# The test results in cs_cv_prog_PROG_version_ok being either yes or no.
##############################################################################
AC_DEFUN([CS_CHECK_PROG_VERSION],
[AC_CACHE_CHECK([if $1 version m4_default([$7],[>=]) $3],
[AS_TR_SH([cs_cv_prog_$1_version_ok_annotated])],
[CS_VCHK_EXTRACTVERSION([$2], [$3], [$4], AS_TR_SH([$1]),
m4_default([$7],[>=]))])
AS_IF([test "$AS_TR_SH([cs_cv_prog_$1_version_ok])" = yes], [$5], [$6])])

View File

@@ -1,46 +1,46 @@
# qualify.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_SYMBOL_QUALIFIER(MESSAGE, CACHE-VAR, QUALIFIERS, [SYMBOL], [LANG],
# [ACTION-IF-ACCEPTED], [ACTION-IF-NOT-ACCEPTED])
# Test if a symbol can be qualified by one of the elements of the
# comma-separated list of QUALIFIERS. Examples of qualifiers include
# __attribute__((deprecated)), __declspec(dllimport), etc. MESSAGE is the
# "checking" message. CACHE-VAR is the variable which receives the
# qualifier which succeeded, or the the literal "no" if none were
# accepted. SYMBOL is the symbol to which the qualifier should be
# applied. If omitted, then SYMBOL defaults to "void f();". LANG is the
# language of the test, typically "C" or "C++". It defaults to "C" if
# omitted. ACTION-IF-ACCEPTED is invoked after CACHE-VAR is set if one of
# the qualifiers is accepted, else ACTION-IF-NOT-ACCEPTED is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_SYMBOL_QUALIFIER],
[AC_CACHE_CHECK([$1], [$2],
[$2='no'
m4_foreach([cs_symbol_qualifier], [$3],
[AS_IF([test "$$2" = no],
[CS_BUILD_IFELSE(
[AC_LANG_PROGRAM(
[cs_symbol_qualifier m4_default([$4],[void f()]);],
[])],
[], [$5], [$2='cs_symbol_qualifier'], [$2='no'])])])])
AS_IF([test $$2 != no], [$6], [$7])])
# qualify.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_SYMBOL_QUALIFIER(MESSAGE, CACHE-VAR, QUALIFIERS, [SYMBOL], [LANG],
# [ACTION-IF-ACCEPTED], [ACTION-IF-NOT-ACCEPTED])
# Test if a symbol can be qualified by one of the elements of the
# comma-separated list of QUALIFIERS. Examples of qualifiers include
# __attribute__((deprecated)), __declspec(dllimport), etc. MESSAGE is the
# "checking" message. CACHE-VAR is the variable which receives the
# qualifier which succeeded, or the the literal "no" if none were
# accepted. SYMBOL is the symbol to which the qualifier should be
# applied. If omitted, then SYMBOL defaults to "void f();". LANG is the
# language of the test, typically "C" or "C++". It defaults to "C" if
# omitted. ACTION-IF-ACCEPTED is invoked after CACHE-VAR is set if one of
# the qualifiers is accepted, else ACTION-IF-NOT-ACCEPTED is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_SYMBOL_QUALIFIER],
[AC_CACHE_CHECK([$1], [$2],
[$2='no'
m4_foreach([cs_symbol_qualifier], [$3],
[AS_IF([test "$$2" = no],
[CS_BUILD_IFELSE(
[AC_LANG_PROGRAM(
[cs_symbol_qualifier m4_default([$4],[void f()]);],
[])],
[], [$5], [$2='cs_symbol_qualifier'], [$2='no'])])])])
AS_IF([test $$2 != no], [$6], [$7])])

View File

@@ -1,49 +1,49 @@
# split.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_SPLIT(LINE, [OUTPUT-VARIABLES], [DELIMITER], [FILLER])
# Split LINE into individual tokens. Tokens are delimited by DELIMITER,
# which is the space character if omitted. OUTPUT-VARIABLES is a
# comma-delimited list of shell variables which should receive the
# extracted tokens. If there are too few tokens to fill the output
# variables, then the excess variables will be assigned the empty string.
# If there are too few output variables, then the excess tokens will be
# ignored. If OUTPUT-VARIABLES is omitted, then the split tokens will be
# assigned to the shell meta-variables $1, $2, $3, etc. When
# OUTPUT-VARIABLES is omitted, FILLER is assigned to meta-variables in
# cases where DELIMITER delimits a zero-length token. FILLER defaults
# to "filler". For example, if DELIMITER is "+" and OUTPUT-VARIABLES is
# omitted, given the line "one++three", $1 will be "one", $2 will be
# "filler", and $3 will be "three".
#------------------------------------------------------------------------------
AC_DEFUN([CS_SPLIT],
[m4_define([cs_split_filler], m4_default([$4],[filler]))
set cs_split_filler `echo "$1" | awk 'BEGIN { FS="m4_default([$3],[ ])" }
{ for (i=1; i <= NF; ++i)
{ if ($i == "") print "cs_split_filler"; else print $i } }'`
shift
m4_map([_CS_SPLIT], [$2])])
AC_DEFUN([_CS_SPLIT],
[AS_IF([test $[@%:@] -eq 0], [$1=''],
[AS_IF([test "$[1]" = cs_split_filler], [$1=''], [$1=$[1]])
shift])])
# split.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_SPLIT(LINE, [OUTPUT-VARIABLES], [DELIMITER], [FILLER])
# Split LINE into individual tokens. Tokens are delimited by DELIMITER,
# which is the space character if omitted. OUTPUT-VARIABLES is a
# comma-delimited list of shell variables which should receive the
# extracted tokens. If there are too few tokens to fill the output
# variables, then the excess variables will be assigned the empty string.
# If there are too few output variables, then the excess tokens will be
# ignored. If OUTPUT-VARIABLES is omitted, then the split tokens will be
# assigned to the shell meta-variables $1, $2, $3, etc. When
# OUTPUT-VARIABLES is omitted, FILLER is assigned to meta-variables in
# cases where DELIMITER delimits a zero-length token. FILLER defaults
# to "filler". For example, if DELIMITER is "+" and OUTPUT-VARIABLES is
# omitted, given the line "one++three", $1 will be "one", $2 will be
# "filler", and $3 will be "three".
#------------------------------------------------------------------------------
AC_DEFUN([CS_SPLIT],
[m4_define([cs_split_filler], m4_default([$4],[filler]))
set cs_split_filler `echo "$1" | awk 'BEGIN { FS="m4_default([$3],[ ])" }
{ for (i=1; i <= NF; ++i)
{ if ($i == "") print "cs_split_filler"; else print $i } }'`
shift
m4_map([_CS_SPLIT], [$2])])
AC_DEFUN([_CS_SPLIT],
[AS_IF([test $[@%:@] -eq 0], [$1=''],
[AS_IF([test "$[1]" = cs_split_filler], [$1=''], [$1=$[1]])
shift])])

View File

@@ -1,78 +1,78 @@
# textcache.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# Text cache facility. These macros provide a way to incrementally store
# arbitrary text in a shell variable, and to write the saved text to a file.
#
# CS_TEXT_CACHE_APPEND(VARIABLE, TEXT)
# Append text to the contents of the named shell variable. If the text
# contains references to shell variables (such as $foo), then those
# references will be expanded. If expansion is not desired, then protect
# the text with AS_ESCAPE().
#
# CS_TEXT_CACHE_PREPEND(VARIABLE, TEXT)
# Prepend text to the contents of the named shell variable. If the text
# contains references to shell variables (such as $foo), then those
# references will be expanded. If expansion is not desired, then protect
# the text with AS_ESCAPE().
#
# CS_TEXT_CACHE_OUTPUT(VARIABLE, FILENAME)
# Instruct config.status to write the contents of the named shell
# variable to the given filename. If the file resides in a directory,
# the directory will be created, if necessary. If the output file
# already exists, and if the cached text is identical to the contents of
# the existing file, then the existing file is left alone, thus its time
# stamp remains unmolested. This heuristic may help to minimize rebuilds
# when the file is listed as a dependency in a makefile.
#
# *NOTE*
# There is a bug in Autoconf 2.57 and probably all earlier 2.5x versions
# which results in errors if AC_CONFIG_COMMANDS is invoked for a `tag'
# which represents a file in a directory which does not yet exist.
# Unfortunately, even invoking AS_MKDIR_P in the `cmd' portion of
# AC_CONFIG_COMMANDS does not solve the problem because the generated
# configure script attempts to access information about the directory
# before AS_MKDIR_P has a chance to create it. This forces us to invoke
# AS_MKDIR_P in the third argument to AC_CONFIG_COMMANDS (the
# `init-cmds') rather than the second (the `cmds'). This is undesirable
# because it means that the directory will be created anytime
# config.status is invoked (even for a simple --help), rather than being
# created only when requested to output the text cache. This bug was
# submitted to the Autoconf GNATS database by Eric Sunshine as #228 on
# 27-Dec-2002. It was fixed for Autoconf 2.58 on 26-Sep-2003. The
# official fix makes the assumption that `tag' always represents a file
# (as opposed to some generic target), and creates the file's directory
# is not present.
#------------------------------------------------------------------------------
AC_DEFUN([CS_TEXT_CACHE_APPEND], [$1="${$1}$2"])
AC_DEFUN([CS_TEXT_CACHE_PREPEND], [$1="$2${$1}"])
AC_DEFUN([CS_TEXT_CACHE_OUTPUT],
[AC_CONFIG_COMMANDS([$2],
[echo $ECHO_N "$$1$ECHO_C" > $tmp/tcache
AS_IF([diff $2 $tmp/tcache >/dev/null 2>&1],
[AC_MSG_NOTICE([$2 is unchanged])],
[rm -f $2
cp $tmp/tcache $2])
rm -f $tmp/tcache],
[$1='$$1'
cs_dir=`AS_DIRNAME([$2])`
AS_ESCAPE(AS_MKDIR_P([$cs_dir]), [$`\])])])
# textcache.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# Text cache facility. These macros provide a way to incrementally store
# arbitrary text in a shell variable, and to write the saved text to a file.
#
# CS_TEXT_CACHE_APPEND(VARIABLE, TEXT)
# Append text to the contents of the named shell variable. If the text
# contains references to shell variables (such as $foo), then those
# references will be expanded. If expansion is not desired, then protect
# the text with AS_ESCAPE().
#
# CS_TEXT_CACHE_PREPEND(VARIABLE, TEXT)
# Prepend text to the contents of the named shell variable. If the text
# contains references to shell variables (such as $foo), then those
# references will be expanded. If expansion is not desired, then protect
# the text with AS_ESCAPE().
#
# CS_TEXT_CACHE_OUTPUT(VARIABLE, FILENAME)
# Instruct config.status to write the contents of the named shell
# variable to the given filename. If the file resides in a directory,
# the directory will be created, if necessary. If the output file
# already exists, and if the cached text is identical to the contents of
# the existing file, then the existing file is left alone, thus its time
# stamp remains unmolested. This heuristic may help to minimize rebuilds
# when the file is listed as a dependency in a makefile.
#
# *NOTE*
# There is a bug in Autoconf 2.57 and probably all earlier 2.5x versions
# which results in errors if AC_CONFIG_COMMANDS is invoked for a `tag'
# which represents a file in a directory which does not yet exist.
# Unfortunately, even invoking AS_MKDIR_P in the `cmd' portion of
# AC_CONFIG_COMMANDS does not solve the problem because the generated
# configure script attempts to access information about the directory
# before AS_MKDIR_P has a chance to create it. This forces us to invoke
# AS_MKDIR_P in the third argument to AC_CONFIG_COMMANDS (the
# `init-cmds') rather than the second (the `cmds'). This is undesirable
# because it means that the directory will be created anytime
# config.status is invoked (even for a simple --help), rather than being
# created only when requested to output the text cache. This bug was
# submitted to the Autoconf GNATS database by Eric Sunshine as #228 on
# 27-Dec-2002. It was fixed for Autoconf 2.58 on 26-Sep-2003. The
# official fix makes the assumption that `tag' always represents a file
# (as opposed to some generic target), and creates the file's directory
# is not present.
#------------------------------------------------------------------------------
AC_DEFUN([CS_TEXT_CACHE_APPEND], [$1="${$1}$2"])
AC_DEFUN([CS_TEXT_CACHE_PREPEND], [$1="$2${$1}"])
AC_DEFUN([CS_TEXT_CACHE_OUTPUT],
[AC_CONFIG_COMMANDS([$2],
[echo $ECHO_N "$$1$ECHO_C" > $tmp/tcache
AS_IF([diff $2 $tmp/tcache >/dev/null 2>&1],
[AC_MSG_NOTICE([$2 is unchanged])],
[rm -f $2
cp $tmp/tcache $2])
rm -f $tmp/tcache],
[$1='$$1'
cs_dir=`AS_DIRNAME([$2])`
AS_ESCAPE(AS_MKDIR_P([$cs_dir]), [$`\])])])

View File

@@ -1,27 +1,27 @@
# trim.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_TRIM(STRING)
# Strip leading and trailing spaces from STRING and collapse internal
# runs of multiple spaces to a single space.
#------------------------------------------------------------------------------
AC_DEFUN([CS_TRIM], [`echo x$1 | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'`])
# trim.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_TRIM(STRING)
# Strip leading and trailing spaces from STRING and collapse internal
# runs of multiple spaces to a single space.
#------------------------------------------------------------------------------
AC_DEFUN([CS_TRIM], [`echo x$1 | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'`])

View File

@@ -1,151 +1,151 @@
# warnings.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_COMPILER_WARNINGS([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to enable compilation warnings. If LANGUAGE is not provided,
# then `C' is assumed (other options include `C++'). If CACHE-VAR is not
# provided, then it defaults to the name
# "cs_cv_prog_compiler_enable_warnings". If an option for enabling
# warnings (such as `-Wall') is discovered, then it is assigned to
# CACHE-VAR and ACTION-IF-FOUND is invoked; otherwise the empty string is
# assigned to CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#
# IMPLEMENTATION NOTES
#
# On some platforms, it is more appropriate to use -Wmost rather than
# -Wall even if the compiler understands both, thus we attempt -Wmost
# before -Wall.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_WARNINGS],
[CS_CHECK_BUILD_FLAGS(
[how to enable m4_default([$1],[C]) compilation warnings],
[m4_default([$2],[cs_cv_prog_compiler_enable_warnings])],
[CS_CREATE_TUPLE([-Wmost]) CS_CREATE_TUPLE([-Wall])],
[$1], [$3], [$4])])
#------------------------------------------------------------------------------
# CS_COMPILER_ERRORS([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to promote compilation diganostics from warning to error
# status. If LANGUAGE is not provided, then `C' is assumed (other options
# include `C++'). If CACHE-VAR is not provided, then it defaults to the
# name "cs_cv_prog_compiler_enable_errors". If an option for performing
# this promotion (such as `-Werror') is discovered, then it is assigned
# to CACHE-VAR and ACTION-IF-FOUND is invoked; otherwise the empty string
# is assigned to CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_ERRORS],
[CS_CHECK_BUILD_FLAGS(
[how to treat m4_default([$1],[C]) warnings as errors],
[m4_default([$2],[cs_cv_prog_compiler_enable_errors])],
[CS_CREATE_TUPLE([-Werror])], [$1], [$3], [$4])])
#------------------------------------------------------------------------------
# CS_COMPILER_IGNORE_UNUSED([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to instruct compiler to ignore unused variables and
# arguments. This option may be useful for code generated by tools, such
# as Swig, Bison, and Flex, over which the client has no control, yet
# wishes to compile without excessive diagnostic spew. If LANGUAGE is
# not provided, then `C' is assumed (other options include `C++'). If
# CACHE-VAR is not provided, then it defaults to the name
# "cs_cv_prog_compiler_ignore_unused". If an option (such as
# `-Wno-unused') is discovered, then it is assigned to CACHE-VAR and
# ACTION-IF-FOUND is invoked; otherwise the empty string is assigned to
# CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_IGNORE_UNUSED],
[CS_CHECK_BUILD_FLAGS(
[how to suppress m4_default([$1],[C]) unused variable warnings],
[m4_default([$2],[cs_cv_prog_compiler_ignore_unused])],
[CS_CREATE_TUPLE([-Wno-unused])], [$1], [$3], [$4])])
#------------------------------------------------------------------------------
# CS_COMPILER_IGNORE_UNINITIALIZED([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to instruct compiler to ignore uninitialized variables. This
# option may be useful for code generated by tools, such as Swig, Bison,
# and Flex, over which the client has no control, yet wishes to compile
# without excessive diagnostic spew. If LANGUAGE is not provided, then
# `C' is assumed (other options include `C++'). If CACHE-VAR is not
# provided, then it defaults to the name
# "cs_cv_prog_compiler_ignore_uninitialized". If an option (such as
# `-Wno-uninitialized') is discovered, then it is assigned to CACHE-VAR
# and ACTION-IF-FOUND is invoked; otherwise the empty string is assigned
# to CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_IGNORE_UNINITIALIZED],
[CS_CHECK_BUILD_FLAGS(
[how to suppress m4_default([$1],[C]) uninitialized warnings],
[m4_default([$2],
[cs_cv_prog_compiler_ignore_uninitialized_variables])],
[CS_CREATE_TUPLE([-Wno-uninitialized])], [$1], [$3], [$4])])
#------------------------------------------------------------------------------
# CS_COMPILER_IGNORE_PRAGMAS([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to instruct compiler to ignore unrecognized #pragma
# directives. This option may be useful for code which contains
# unprotected #pragmas which are not understood by all compilers. If
# LANGUAGE is not provided, then `C' is assumed (other options include
# `C++'). If CACHE-VAR is not provided, then it defaults to the name
# "cs_cv_prog_compiler_ignore_unknown_pragmas". If an option (such as
# `-Wno-unknown-pragmas') is discovered, then it is assigned to CACHE-VAR
# and ACTION-IF-FOUND is invoked; otherwise the empty string is assigned
# to CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_IGNORE_PRAGMAS],
[CS_CHECK_BUILD_FLAGS(
[how to suppress m4_default([$1],[C]) unknown [#pragma] warnings],
[m4_default([$2],[cs_cv_prog_compiler_ignore_unknown_pragmas])],
[CS_CREATE_TUPLE([-Wno-unknown-pragmas])], [$1], [$3], [$4])])
#------------------------------------------------------------------------------
# CS_COMPILER_IGNORE_LONG_DOUBLE([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to instruct compiler to suppress warnings about `long double'
# usage. This option may be useful for code generated by tools, such as
# Swig, Bison, and Flex, over which the client has no control, yet wishes
# to compile without excessive diagnostic spew. If LANGUAGE is not
# provided, then `C' is assumed (other options include `C++'). If
# CACHE-VAR is not provided, then it defaults to the name
# "cs_cv_prog_compiler_ignore_long_double". If an option (such as
# `-Wno-long-double') is discovered, then it is assigned to CACHE-VAR and
# ACTION-IF-FOUND is invoked; otherwise the empty string is assigned to
# CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_IGNORE_LONG_DOUBLE],
[CS_CHECK_BUILD_FLAGS(
[how to suppress m4_default([$1],[C]) `long double' warnings],
[m4_default([$2],[cs_cv_prog_compiler_ignore_long_double])],
[CS_CREATE_TUPLE([-Wno-long-double])], [$1], [$3], [$4])])
# warnings.m4 -*- Autoconf -*-
#==============================================================================
# Copyright (C)2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
AC_PREREQ([2.56])
#------------------------------------------------------------------------------
# CS_COMPILER_WARNINGS([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to enable compilation warnings. If LANGUAGE is not provided,
# then `C' is assumed (other options include `C++'). If CACHE-VAR is not
# provided, then it defaults to the name
# "cs_cv_prog_compiler_enable_warnings". If an option for enabling
# warnings (such as `-Wall') is discovered, then it is assigned to
# CACHE-VAR and ACTION-IF-FOUND is invoked; otherwise the empty string is
# assigned to CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#
# IMPLEMENTATION NOTES
#
# On some platforms, it is more appropriate to use -Wmost rather than
# -Wall even if the compiler understands both, thus we attempt -Wmost
# before -Wall.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_WARNINGS],
[CS_CHECK_BUILD_FLAGS(
[how to enable m4_default([$1],[C]) compilation warnings],
[m4_default([$2],[cs_cv_prog_compiler_enable_warnings])],
[CS_CREATE_TUPLE([-Wmost]) CS_CREATE_TUPLE([-Wall])],
[$1], [$3], [$4])])
#------------------------------------------------------------------------------
# CS_COMPILER_ERRORS([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to promote compilation diganostics from warning to error
# status. If LANGUAGE is not provided, then `C' is assumed (other options
# include `C++'). If CACHE-VAR is not provided, then it defaults to the
# name "cs_cv_prog_compiler_enable_errors". If an option for performing
# this promotion (such as `-Werror') is discovered, then it is assigned
# to CACHE-VAR and ACTION-IF-FOUND is invoked; otherwise the empty string
# is assigned to CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_ERRORS],
[CS_CHECK_BUILD_FLAGS(
[how to treat m4_default([$1],[C]) warnings as errors],
[m4_default([$2],[cs_cv_prog_compiler_enable_errors])],
[CS_CREATE_TUPLE([-Werror])], [$1], [$3], [$4])])
#------------------------------------------------------------------------------
# CS_COMPILER_IGNORE_UNUSED([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to instruct compiler to ignore unused variables and
# arguments. This option may be useful for code generated by tools, such
# as Swig, Bison, and Flex, over which the client has no control, yet
# wishes to compile without excessive diagnostic spew. If LANGUAGE is
# not provided, then `C' is assumed (other options include `C++'). If
# CACHE-VAR is not provided, then it defaults to the name
# "cs_cv_prog_compiler_ignore_unused". If an option (such as
# `-Wno-unused') is discovered, then it is assigned to CACHE-VAR and
# ACTION-IF-FOUND is invoked; otherwise the empty string is assigned to
# CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_IGNORE_UNUSED],
[CS_CHECK_BUILD_FLAGS(
[how to suppress m4_default([$1],[C]) unused variable warnings],
[m4_default([$2],[cs_cv_prog_compiler_ignore_unused])],
[CS_CREATE_TUPLE([-Wno-unused])], [$1], [$3], [$4])])
#------------------------------------------------------------------------------
# CS_COMPILER_IGNORE_UNINITIALIZED([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to instruct compiler to ignore uninitialized variables. This
# option may be useful for code generated by tools, such as Swig, Bison,
# and Flex, over which the client has no control, yet wishes to compile
# without excessive diagnostic spew. If LANGUAGE is not provided, then
# `C' is assumed (other options include `C++'). If CACHE-VAR is not
# provided, then it defaults to the name
# "cs_cv_prog_compiler_ignore_uninitialized". If an option (such as
# `-Wno-uninitialized') is discovered, then it is assigned to CACHE-VAR
# and ACTION-IF-FOUND is invoked; otherwise the empty string is assigned
# to CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_IGNORE_UNINITIALIZED],
[CS_CHECK_BUILD_FLAGS(
[how to suppress m4_default([$1],[C]) uninitialized warnings],
[m4_default([$2],
[cs_cv_prog_compiler_ignore_uninitialized_variables])],
[CS_CREATE_TUPLE([-Wno-uninitialized])], [$1], [$3], [$4])])
#------------------------------------------------------------------------------
# CS_COMPILER_IGNORE_PRAGMAS([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to instruct compiler to ignore unrecognized #pragma
# directives. This option may be useful for code which contains
# unprotected #pragmas which are not understood by all compilers. If
# LANGUAGE is not provided, then `C' is assumed (other options include
# `C++'). If CACHE-VAR is not provided, then it defaults to the name
# "cs_cv_prog_compiler_ignore_unknown_pragmas". If an option (such as
# `-Wno-unknown-pragmas') is discovered, then it is assigned to CACHE-VAR
# and ACTION-IF-FOUND is invoked; otherwise the empty string is assigned
# to CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_IGNORE_PRAGMAS],
[CS_CHECK_BUILD_FLAGS(
[how to suppress m4_default([$1],[C]) unknown [#pragma] warnings],
[m4_default([$2],[cs_cv_prog_compiler_ignore_unknown_pragmas])],
[CS_CREATE_TUPLE([-Wno-unknown-pragmas])], [$1], [$3], [$4])])
#------------------------------------------------------------------------------
# CS_COMPILER_IGNORE_LONG_DOUBLE([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
# Check how to instruct compiler to suppress warnings about `long double'
# usage. This option may be useful for code generated by tools, such as
# Swig, Bison, and Flex, over which the client has no control, yet wishes
# to compile without excessive diagnostic spew. If LANGUAGE is not
# provided, then `C' is assumed (other options include `C++'). If
# CACHE-VAR is not provided, then it defaults to the name
# "cs_cv_prog_compiler_ignore_long_double". If an option (such as
# `-Wno-long-double') is discovered, then it is assigned to CACHE-VAR and
# ACTION-IF-FOUND is invoked; otherwise the empty string is assigned to
# CACHE-VAR and ACTION-IF-NOT-FOUND is invoked.
#------------------------------------------------------------------------------
AC_DEFUN([CS_COMPILER_IGNORE_LONG_DOUBLE],
[CS_CHECK_BUILD_FLAGS(
[how to suppress m4_default([$1],[C]) `long double' warnings],
[m4_default([$2],[cs_cv_prog_compiler_ignore_long_double])],
[CS_CREATE_TUPLE([-Wno-long-double])], [$1], [$3], [$4])])

View File

@@ -1,151 +1,164 @@
#============================================================================
# Rules for compiling applications
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# Use a more sensible and typical mode for executables than Jam's default.
if "$(EXEMODE)" = "711" { EXEMODE = "+x" ; }
## Application appname : sources [ : options ]
## Build an application out of sourcefiles. All sourcefiles will be passed
## to the Objects rule which tries to compile them into object-files. You
## can create rules for your own filetypes with the UserObject rule. Header
## files will just be ignored. They are only used for MSVC projectfile
## generation.
## Possible options are "noinstall" if you don't want a default install
## target to be created and "console" if you're building a console
## application (an application without any graphical output which is
## intended to be used on commandline)
## Some notes: You should not add the .exe extension to the appname - jam
## will do that on win32.
## Options:
## console: Create a console application
## noinstall: Do not set up a default installation targets.
## independent: The target will not be made a dependency of the apps and
## all target.
## nohelp: Do not invoke Help for this target.
## notest: Do not set up unit-testing support for this target.
## nomanifest: (Win32/MSVC) Don't generate manifest for application.
rule Application
{
# check options
CheckOptions noinstall console independent nohelp notest nomanifest : $(3) : $(<) ;
local target = [ ConstructApplicationTarget $(<) : $(3) ] ;
local sources = [ DoSourceGrist $(>) ] ;
local objects = [ CompileObjects $(sources) ] ;
$(<)_TYPE = application ;
$(<)_OBJECTS = $(objects) ;
$(<)_SOURCES = $(sources) ;
$(<)_TARGET = $(target) ;
# create target clean rule
Always $(<)clean ;
NotFile $(<)clean ;
Clean $(<)clean : $(objects) ; # create target clean rule
# so 'jam foo' works when it's really foo.exe (Windows) or foo.app (MacOS/X)
if $(target) != $(<)
{
Depends $(<) : $(target) ;
NotFile $(<) ;
}
# make dependency on apps target
if ! [ IsElem independent : $(3) ]
{
Depends apps : $(<) ;
}
# construct Install target
if ! [ IsElem noinstall : $(3) ]
{
local install_opts ;
if [ IsElem console : $(3) ]
{
install_opts += console ;
}
SystemInstallApplication $(target) : : $(install_opts) ;
}
# Link
MakeLocate $(target) : $(LOCATE.TARGETS) ;
SystemLinkApplication $(<) : $(objects) : $(3) ;
CFlags $(<) : $(APPLICATION.CFLAGS) ;
LFlags $(<) : $(LINKLIBS) $(APPLICATION.LFLAGS) ;
if ! [ IsElem nohelp : $(3) ]
{
local desc = [ Description $(<) ] ;
if ! $(desc) { desc = "$(<) application" ; }
Help $(<) : "Build the $(desc)" ;
}
if ! [ IsElem notest : $(options) ]
{
# @@@ Disabled for now; see docs/todo_jam.txt
#UnitTest $(<) ;
}
}
## ShellScript scriptname : rule [ : options ]
## Build a shell script by invoking `rule', the script creation rule, which
## is passed `scriptname' and `options'.
## Options:
## noinstall: Do not set up a default installation target.
## nohelp: Do not invoke Help for this target.
rule ShellScript
{
CheckOptions noinstall nohelp : $(3) : $(<) ;
Always $(<)clean ;
NotFile $(<)clean ;
Clean clean : $(<) ;
Clean $(<)clean : $(<) ;
Depends apps : $(<) ;
MakeLocate $(<) : $(LOCATE.TARGETS) ;
if ! [ IsElem noinstall : $(3) ]
{
Depends install_bin : [ DoInstall $(<) : $(bindir) : $(INSTALL_PROGRAM) ] ;
}
$(2) $(<) : $(3) ;
MODE on $(<) = $(EXEMODE) ;
SUBDIR on $(<) = $(SUBDIR) ;
Chmod $(<) ;
if ! [ IsElem nohelp : $(3) ]
{
local desc = [ Description $(<) ] ;
if ! $(desc) { desc = "$(<) script" ; }
Help $(<) : "Build the $(desc)" ;
}
}
#----------------------------------------------------------------------------
# private part
# Construct pseudo target apps which is used instead of the pseudo target exe
# in Jambase
Depends exe : apps ;
NotFile apps ;
Help apps : "Build all applications" ;
#============================================================================
# Rules for compiling applications
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# Use a more sensible and typical mode for executables than Jam's default.
if "$(EXEMODE)" = "711" { EXEMODE = "+x" ; }
## Application appname : sources [ : options ]
## Build an application out of sourcefiles. All sourcefiles will be passed
## to the Objects rule which tries to compile them into object-files. You
## can create rules for your own filetypes with the UserObject rule. Header
## files will just be ignored. They are only used for MSVC projectfile
## generation.
## Possible options are "noinstall" if you don't want a default install
## target to be created and "console" if you're building a console
## application (an application without any graphical output which is
## intended to be used on commandline)
## Some notes: You should not add the .exe extension to the appname - jam
## will do that on win32.
## Options:
## console: Create a console application
## noinstall: Do not set up a default installation targets.
## independent: The target will not be made a dependency of the apps and
## all target.
## nohelp: Do not invoke Help for this target.
## notest: Do not set up unit-testing support for this target.
## nomanifest: (Win32/MSVC) Don't generate manifest for application.
rule Application
{
# check options
CheckOptions noinstall console independent nohelp notest nomanifest : $(3) : $(<) ;
local target = [ ConstructApplicationTarget $(<) : $(3) ] ;
local sources = [ DoSourceGrist $(>) ] ;
local objects = [ CompileObjects $(sources) ] ;
$(<)_TYPE = application ;
$(<)_OBJECTS = $(objects) ;
$(<)_SOURCES = $(sources) ;
$(<)_TARGET = $(target) ;
# so 'jam foo' works when it's really foo.exe (Windows) or foo.app (MacOS/X)
if $(target) != $(<)
{
Depends $(<) : $(target) ;
NotFile $(<) ;
}
# make dependency on apps target
if ! [ IsElem independent : $(3) ]
{
Depends apps : $(<) ;
}
# construct Install target
if ! [ IsElem noinstall : $(3) ]
{
local install_opts ;
if [ IsElem console : $(3) ]
{
install_opts += console ;
}
SystemInstallApplication $(target) : : $(install_opts) ;
}
# Link
MakeLocate $(target) : $(LOCATE.TARGETS) ;
SystemLinkApplication $(<) : $(objects) : $(3) ;
local cleanextra ;
if $(LINK.DEBUG.INFO.SEPARATE) = "yes"
{
local debugfile = [ SplitDebugInfo $(target) ] ;
cleanextra += $(debugfile) ;
if ! [ IsElem noinstall : $(3) ]
{
NoCare $(debugfile) ;
Depends install_bin : [ DoInstall $(debugfile) : $(bindir) : $(INSTALL_DATA) ] ;
}
}
CFlags $(<) : $(APPLICATION.CFLAGS) ;
LFlags $(<) : $(LINKLIBS) $(APPLICATION.LFLAGS) ;
# create target clean rule
Always $(<)clean ;
NotFile $(<)clean ;
Clean $(<)clean : $(objects) $(cleanextra) ;
Clean clean : $(cleanextra) ;
if ! [ IsElem nohelp : $(3) ]
{
local desc = [ Description $(<) ] ;
if ! $(desc) { desc = "$(<) application" ; }
Help $(<) : "Build the $(desc)" ;
}
if ! [ IsElem notest : $(options) ]
{
# @@@ Disabled for now; see docs/todo_jam.txt
#UnitTest $(<) ;
}
}
## ShellScript scriptname : rule [ : options ]
## Build a shell script by invoking `rule', the script creation rule, which
## is passed `scriptname' and `options'.
## Options:
## noinstall: Do not set up a default installation target.
## nohelp: Do not invoke Help for this target.
rule ShellScript
{
CheckOptions noinstall nohelp : $(3) : $(<) ;
Always $(<)clean ;
NotFile $(<)clean ;
Clean clean : $(<) ;
Clean $(<)clean : $(<) ;
Depends apps : $(<) ;
MakeLocate $(<) : $(LOCATE.TARGETS) ;
if ! [ IsElem noinstall : $(3) ]
{
Depends install_bin : [ DoInstall $(<) : $(bindir) : $(INSTALL_PROGRAM) ] ;
}
$(2) $(<) : $(3) ;
MODE on $(<) = $(EXEMODE) ;
SUBDIR on $(<) = $(SUBDIR) ;
Chmod $(<) ;
if ! [ IsElem nohelp : $(3) ]
{
local desc = [ Description $(<) ] ;
if ! $(desc) { desc = "$(<) script" ; }
Help $(<) : "Build the $(desc)" ;
}
}
#----------------------------------------------------------------------------
# private part
# Construct pseudo target apps which is used instead of the pseudo target exe
# in Jambase
Depends exe : apps ;
NotFile apps ;
Help apps : "Build all applications" ;

View File

@@ -1,50 +1,50 @@
#============================================================================
# Rules for handling assembler files
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if $(CMD.NASM)
{
rule NasmRule
{
local object = [ DoObjectGrist [ PrefixSuffix $(>)_ : $(<) : $(SUFOBJ) ] ] ;
Nasm $(object) : $(<) ;
return $(object) ;
}
RegisterFileType NasmRule : .asm ;
rule Nasm
{
Depends $(<) : $(>) ;
NASM.FLAGS on $(<) += $(NASM.FLAGS) ;
# NASM doesn't scan for headers in current dir of the files, so add the dir of
# the file to the -I flags
local includeflags = [ FIncludes $(SEARCH_SOURCE)/$(<:D) $(SUBDIRHDRS) $(HDRS) ] ;
# NASM requires that -I paths have a trailing slash.
INCLUDEFLAGS on $(<) = $(includeflags)$(SLASH) ;
}
NASM.HDRPATTERN = "^[ ]*%[ ]*include[ ]*[<\"]([^\">]*)[\">].*$" ;
RegisterHeaderRule HeaderRule : $(NASM.HDRPATTERN) : .asm .ash ;
actions Nasm
{
$(CMD.NASM) $(NASM.FLAGS) $(INCLUDEFLAGS) -o $(<) $(>)
}
}
#============================================================================
# Rules for handling assembler files
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if $(CMD.NASM)
{
rule NasmRule
{
local object = [ DoObjectGrist [ PrefixSuffix $(>)_ : $(<) : $(SUFOBJ) ] ] ;
Nasm $(object) : $(<) ;
return $(object) ;
}
RegisterFileType NasmRule : .asm ;
rule Nasm
{
Depends $(<) : $(>) ;
NASM.FLAGS on $(<) += $(NASM.FLAGS) ;
# NASM doesn't scan for headers in current dir of the files, so add the dir of
# the file to the -I flags
local includeflags = [ FIncludes $(SEARCH_SOURCE)/$(<:D) $(SUBDIRHDRS) $(HDRS) ] ;
# NASM requires that -I paths have a trailing slash.
INCLUDEFLAGS on $(<) = $(includeflags)$(SLASH) ;
}
NASM.HDRPATTERN = "^[ ]*%[ ]*include[ ]*[<\"]([^\">]*)[\">].*$" ;
RegisterHeaderRule HeaderRule : $(NASM.HDRPATTERN) : .asm .ash ;
actions Nasm
{
$(CMD.NASM) $(NASM.FLAGS) $(INCLUDEFLAGS) -o $(<) $(>)
}
}

View File

@@ -1,165 +1,165 @@
#============================================================================
# Rules for flex and bison
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if $(CMD.FLEX)
{
# Some versions of Flex-generated files want to include <unistd.h> which is
# not normally available on Windows, so we need to protect it. We also
# filter out CVS `Header' keywords in order to prevent CVS from thinking that
# the file has changed simply because the Header information is different.
FLEX.SED_SCRIPT =
"'s/\\([ ]*#[ ]*include[ ][ ]*<unistd.h>\\)/#ifndef WIN32\\
\\1\\
#endif/;/\$Header:/d'" ;
# Compilers such as MSVC do not like #line directives. Since the generated
# file might get stored in CVS and used by MSVC users (even if generated on
# Unix, for instance), we want to suppress #line directives in all cases.
FLEX.FLAGS += -L ;
rule FlexRule
{
local object ;
local cfile = [ DoObjectGrist $(<:S=.c) ] ;
MakeLocate $(cfile) : $(LOCATE_TARGET) ;
SEARCH on $(cfile) = $(LOCATE_TARGET) ;
Flex $(cfile) : $(<) ;
object = [ CompileObjects $(cfile) : $(>) ] ;
return $(object) ;
}
RegisterFileType FlexRule : .l ;
rule Flex++Rule
{
local object ;
local cppfile = [ DoObjectGrist $(<:S=.cpp) ] ;
MakeLocate $(cppfile) : $(LOCATE_TARGET) ;
SEARCH on $(cppfile) = $(LOCATE_TARGET) ;
Flex $(cppfile) : $(<) ;
object = [ CompileObjects $(cppfile) : $(>) ] ;
return $(object) ;
}
RegisterFileType Flex++Rule : .ll ;
rule Flex
{
Depends $(<) : $(>) ;
FLEX.FLAGS on $(<) += $(FLEX.FLAGS) ;
}
# Use -t and output redirection to avoid flex choosing undesirable names for
# its output files. Also apply FLEX.SED_SCRIPT.
actions Flex
{
$(CMD.FLEX) -t $(FLEX.FLAGS) $(>) | $(SED) $(FLEX.SED_SCRIPT) > $(<)
}
}
if $(CMD.BISON)
{
rule BisonRule
{
local object ;
local cfile = [ DoObjectGrist $(<:S=.c) ] ;
local headerfile = [ DoObjectGrist $(<:S=.h) ] ;
# Jam's header file scannning doesn't use grist so we have to workaround
# this here.
Includes $(headerfile:G=$(SOURCE_GRIST:E)!$(SUBVARIANT:J=!)) : $(headerfile) ;
MakeLocate $(cfile) $(headerfile) : $(LOCATE_TARGET) ;
BISON.FLAGS on $(cfile) =
[ on [ DoSourceGrist $(<:S=.c) ] GetVar BISON.FLAGS ] ;
Bison $(cfile) : $(<) ;
# Work around for jam warning about independant target when we put both
# headerfile and cppfile in the bison line...
Includes $(cppfile) : $(headerfile) ;
object = [ CompileObjects $(cfile) : $(>) ] ;
SEARCH on $(cfile) = $(LOCATE_TARGET) ;
SEARCH on $(headerfile) = $(LOCATE_TARGET) ;
return $(object) ;
}
RegisterFileType BisonRule : .y ;
rule Bison++Rule
{
local object ;
local cppfile = [ DoObjectGrist $(<:S=.cpp) ] ;
local headerfile = [ DoObjectGrist $(<:S=.hpp) ] ;
# Jam's header file scannning doesn't use grist so we have to workaround
# this here.
Includes $(headerfile:G=$(SOURCE_GRIST:E)!$(SUBVARIANT:J=!)) : $(headerfile) ;
MakeLocate $(cppfile) : $(LOCATE_TARGET) ;
MakeLocate $(headerfile) : $(LOCATE_TARGET) ;
BISON.FLAGS on $(cppfile) =
[ on [ DoSourceGrist $(<:S=.cpp) ] GetVar BISON.FLAGS ] ;
Bison $(cppfile) : $(<) ;
# Work around for jam warning about independant target when we put both
# headerfile and cppfile in the bison line...
Includes $(cppfile) : $(headerfile) ;
object = [ CompileObjects $(cppfile) : $(>) ] ;
SEARCH on $(cppfile) = $(LOCATE_TARGET) ;
SEARCH on $(headerfile) = $(LOCATE_TARGET) ;
return $(object) ;
}
RegisterFileType Bison++Rule : .yy ;
rule Bison
{
Depends $(<) : $(>) ;
BISON.FLAGS on $(<) += $(BISON.FLAGS) ;
}
rule BisonFlags
{
local target ;
if $(<:S) = .yy
{
target = [ DoSourceGrist $(<:S=.cpp) $(<:S=.hpp) ] ;
}
else
{
target = [ DoSourceGrist $(<:S=.c) $(<:S=.h) ] ;
}
BISON.FLAGS on $(target) += $(>) ;
}
# Compilers such as MSVC do not like #line directives. Since the generated
# file might get stored in CVS and used by MSVC users (even if generated on
# Unix, for instance), we want to suppress #line directives in all cases.
BISON.FLAGS += --no-lines ;
actions Bison
{
$(CMD.BISON) -d $(BISON.FLAGS) -o $(<[1]) $(>)
}
}
#============================================================================
# Rules for flex and bison
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if $(CMD.FLEX)
{
# Some versions of Flex-generated files want to include <unistd.h> which is
# not normally available on Windows, so we need to protect it. We also
# filter out CVS `Header' keywords in order to prevent CVS from thinking that
# the file has changed simply because the Header information is different.
FLEX.SED_SCRIPT =
"'s/\\([ ]*#[ ]*include[ ][ ]*<unistd.h>\\)/#ifndef WIN32\\
\\1\\
#endif/;/\$Header:/d'" ;
# Compilers such as MSVC do not like #line directives. Since the generated
# file might get stored in CVS and used by MSVC users (even if generated on
# Unix, for instance), we want to suppress #line directives in all cases.
FLEX.FLAGS += -L ;
rule FlexRule
{
local object ;
local cfile = [ DoObjectGrist $(<:S=.c) ] ;
MakeLocate $(cfile) : $(LOCATE_TARGET) ;
SEARCH on $(cfile) = $(LOCATE_TARGET) ;
Flex $(cfile) : $(<) ;
object = [ CompileObjects $(cfile) : $(>) ] ;
return $(object) ;
}
RegisterFileType FlexRule : .l ;
rule Flex++Rule
{
local object ;
local cppfile = [ DoObjectGrist $(<:S=.cpp) ] ;
MakeLocate $(cppfile) : $(LOCATE_TARGET) ;
SEARCH on $(cppfile) = $(LOCATE_TARGET) ;
Flex $(cppfile) : $(<) ;
object = [ CompileObjects $(cppfile) : $(>) ] ;
return $(object) ;
}
RegisterFileType Flex++Rule : .ll ;
rule Flex
{
Depends $(<) : $(>) ;
FLEX.FLAGS on $(<) += $(FLEX.FLAGS) ;
}
# Use -t and output redirection to avoid flex choosing undesirable names for
# its output files. Also apply FLEX.SED_SCRIPT.
actions Flex
{
$(CMD.FLEX) -t $(FLEX.FLAGS) $(>) | $(SED) $(FLEX.SED_SCRIPT) > $(<)
}
}
if $(CMD.BISON)
{
rule BisonRule
{
local object ;
local cfile = [ DoObjectGrist $(<:S=.c) ] ;
local headerfile = [ DoObjectGrist $(<:S=.h) ] ;
# Jam's header file scannning doesn't use grist so we have to workaround
# this here.
Includes $(headerfile:G=$(SOURCE_GRIST:E)!$(SUBVARIANT:J=!)) : $(headerfile) ;
MakeLocate $(cfile) $(headerfile) : $(LOCATE_TARGET) ;
BISON.FLAGS on $(cfile) =
[ on [ DoSourceGrist $(<:S=.c) ] GetVar BISON.FLAGS ] ;
Bison $(cfile) : $(<) ;
# Work around for jam warning about independant target when we put both
# headerfile and cppfile in the bison line...
Includes $(cppfile) : $(headerfile) ;
object = [ CompileObjects $(cfile) : $(>) ] ;
SEARCH on $(cfile) = $(LOCATE_TARGET) ;
SEARCH on $(headerfile) = $(LOCATE_TARGET) ;
return $(object) ;
}
RegisterFileType BisonRule : .y ;
rule Bison++Rule
{
local object ;
local cppfile = [ DoObjectGrist $(<:S=.cpp) ] ;
local headerfile = [ DoObjectGrist $(<:S=.hpp) ] ;
# Jam's header file scannning doesn't use grist so we have to workaround
# this here.
Includes $(headerfile:G=$(SOURCE_GRIST:E)!$(SUBVARIANT:J=!)) : $(headerfile) ;
MakeLocate $(cppfile) : $(LOCATE_TARGET) ;
MakeLocate $(headerfile) : $(LOCATE_TARGET) ;
BISON.FLAGS on $(cppfile) =
[ on [ DoSourceGrist $(<:S=.cpp) ] GetVar BISON.FLAGS ] ;
Bison $(cppfile) : $(<) ;
# Work around for jam warning about independant target when we put both
# headerfile and cppfile in the bison line...
Includes $(cppfile) : $(headerfile) ;
object = [ CompileObjects $(cppfile) : $(>) ] ;
SEARCH on $(cppfile) = $(LOCATE_TARGET) ;
SEARCH on $(headerfile) = $(LOCATE_TARGET) ;
return $(object) ;
}
RegisterFileType Bison++Rule : .yy ;
rule Bison
{
Depends $(<) : $(>) ;
BISON.FLAGS on $(<) += $(BISON.FLAGS) ;
}
rule BisonFlags
{
local target ;
if $(<:S) = .yy
{
target = [ DoSourceGrist $(<:S=.cpp) $(<:S=.hpp) ] ;
}
else
{
target = [ DoSourceGrist $(<:S=.c) $(<:S=.h) ] ;
}
BISON.FLAGS on $(target) += $(>) ;
}
# Compilers such as MSVC do not like #line directives. Since the generated
# file might get stored in CVS and used by MSVC users (even if generated on
# Unix, for instance), we want to suppress #line directives in all cases.
BISON.FLAGS += --no-lines ;
actions Bison
{
$(CMD.BISON) -d $(BISON.FLAGS) -o $(<[1]) $(>)
}
}

View File

@@ -1,82 +1,83 @@
#============================================================================
# Main rules file - Includes all important rulefiles in correct order
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# Enable if you want debug messages.
JAM_DEBUG ?= 1 ;
jamrulesdir = $(TOP)/mk/jam ;
# Utility and compatibility rules used by all other scripts.
include $(jamrulesdir)/jamcompatibility.jam ;
include $(jamrulesdir)/subdir.jam ;
include $(jamrulesdir)/property.jam ;
# This needs to be included before _and_ after all other includes (except the
# super low-level utility files above) since it optionally overrides built-in
# rules to glean information about targets being defined.
include $(jamrulesdir)/dump.jam ;
include $(jamrulesdir)/options.jam ;
include $(jamrulesdir)/variant.jam ;
include $(jamrulesdir)/resource.jam ;
include $(jamrulesdir)/helper.jam ;
include $(jamrulesdir)/help.jam ;
include $(jamrulesdir)/groups.jam ;
include $(jamrulesdir)/install.jam ;
include $(jamrulesdir)/clean.jam ;
include $(jamrulesdir)/objects.jam ;
include $(jamrulesdir)/compiler.jam ;
include $(jamrulesdir)/objectivec.jam ;
include $(jamrulesdir)/assembler.jam ;
include $(jamrulesdir)/bisonflex.jam ;
include $(jamrulesdir)/swig.jam ;
include $(jamrulesdir)/flags.jam ;
include $(jamrulesdir)/library.jam ;
include $(jamrulesdir)/static.jam ;
include $(jamrulesdir)/application.jam ;
include $(jamrulesdir)/plugin.jam ;
include $(jamrulesdir)/docs.jam ;
include $(jamrulesdir)/unittest.jam ;
# Include OS specific rules
switch $(TARGET.OS)
{
case WIN32 :
include $(jamrulesdir)/win32.jam ;
case MACOS_X :
include $(jamrulesdir)/macosx.jam ;
case UNIX :
include $(jamrulesdir)/unix.jam ;
case * :
echo "WARNING: TARGET.OS not defined. Using unix" ;
include $(jamrulesdir)/unix.jam ;
}
# This needs to be included after all others because it overrides some of the
# earlier defined rules when enabled. It even overrides Win32 rules, so it
# needs to be after platform-specific includes, as well.
include $(jamrulesdir)/msvcgen.jam ;
# This needs to included be before _and_ after all other includes since it
# optionally overrides rules defined earlier.
include $(jamrulesdir)/dump.jam ;
#============================================================================
# Main rules file - Includes all important rulefiles in correct order
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# Enable if you want debug messages.
JAM_DEBUG ?= 1 ;
jamrulesdir = $(TOP)/mk/jam ;
# Utility and compatibility rules used by all other scripts.
include $(jamrulesdir)/jamcompatibility.jam ;
include $(jamrulesdir)/subdir.jam ;
include $(jamrulesdir)/property.jam ;
# This needs to be included before _and_ after all other includes (except the
# super low-level utility files above) since it optionally overrides built-in
# rules to glean information about targets being defined.
include $(jamrulesdir)/dump.jam ;
include $(jamrulesdir)/options.jam ;
include $(jamrulesdir)/variant.jam ;
include $(jamrulesdir)/resource.jam ;
include $(jamrulesdir)/helper.jam ;
include $(jamrulesdir)/help.jam ;
include $(jamrulesdir)/groups.jam ;
include $(jamrulesdir)/install.jam ;
include $(jamrulesdir)/clean.jam ;
include $(jamrulesdir)/objects.jam ;
include $(jamrulesdir)/compiler.jam ;
include $(jamrulesdir)/objectivec.jam ;
include $(jamrulesdir)/assembler.jam ;
include $(jamrulesdir)/bisonflex.jam ;
include $(jamrulesdir)/swig.jam ;
include $(jamrulesdir)/strip.jam ;
include $(jamrulesdir)/flags.jam ;
include $(jamrulesdir)/library.jam ;
include $(jamrulesdir)/static.jam ;
include $(jamrulesdir)/application.jam ;
include $(jamrulesdir)/plugin.jam ;
include $(jamrulesdir)/docs.jam ;
include $(jamrulesdir)/unittest.jam ;
# Include OS specific rules
switch $(TARGET.OS)
{
case WIN32 :
include $(jamrulesdir)/win32.jam ;
case MACOS_X :
include $(jamrulesdir)/macosx.jam ;
case UNIX :
include $(jamrulesdir)/unix.jam ;
case * :
echo "WARNING: TARGET.OS not defined. Using unix" ;
include $(jamrulesdir)/unix.jam ;
}
# This needs to be included after all others because it overrides some of the
# earlier defined rules when enabled. It even overrides Win32 rules, so it
# needs to be after platform-specific includes, as well.
include $(jamrulesdir)/msvcgen.jam ;
# This needs to included be before _and_ after all other includes since it
# optionally overrides rules defined earlier.
include $(jamrulesdir)/dump.jam ;

View File

@@ -1,37 +1,37 @@
#============================================================================
# Rules for cleaning build detritus.
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# CleanDir <tag> : <dir> ...
# Forcibly delete a set of directories, even if they are not empty.
# Tag is one of the standard targets used with the "Clean" rule, such as
# "clean" or "distclean".
rule CleanDir
{
Always $(<) ;
NotFile $(<) ;
NoCare $(>) ;
}
actions piecemeal together existing CleanDir
{
$(DELTREE) $(>)
}
Help clean : "Remove all built targets from project" ;
#============================================================================
# Rules for cleaning build detritus.
# Copyright (C)2003 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# CleanDir <tag> : <dir> ...
# Forcibly delete a set of directories, even if they are not empty.
# Tag is one of the standard targets used with the "Clean" rule, such as
# "clean" or "distclean".
rule CleanDir
{
Always $(<) ;
NotFile $(<) ;
NoCare $(>) ;
}
actions piecemeal together existing CleanDir
{
$(DELTREE) $(>)
}
Help clean : "Remove all built targets from project" ;

View File

@@ -1,76 +1,76 @@
#============================================================================
# Rules for C and C++ files
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if $(CMD.CC)
{
rule CcRule
{
local object =
[ DoObjectGrist [ PrefixSuffix $(>)_ : $(<) : $(SUFOBJ) ] ] ;
Cc $(object) : $(<) ;
return $(object) ;
}
RegisterFileType CcRule : .c ;
RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .c ;
rule Cc
{
Depends $(<) : $(>) ;
CCFLAGS on $(<) += $(CCFLAGS) $(SUBDIRCCFLAGS) ;
CCHDRS on $(<) = [ on $(<) FIncludes $(HDRS) ] ;
CCDEFS on $(<) = [ on $(<) FDefines $(DEFINES) ] ;
}
actions Cc
{
$(CMD.CC) -c -o $(<) $(CCHDRS) $(CCFLAGS) $(CCDEFS) $(>)
}
} # end if $(CMD.CC)
if $(CMD.C++)
{
rule C++Rule
{
local object =
[ DoObjectGrist [ PrefixSuffix $(>)_ : $(<) : $(SUFOBJ) ] ] ;
C++ $(object) : $(<) ;
return $(object) ;
}
RegisterFileType C++Rule : .cpp .cc .c++ ;
RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .cpp .cc .c++ ;
rule C++
{
Depends $(<) : $(>) ;
C++FLAGS on $(<) += $(C++FLAGS) $(SUBDIRC++FLAGS) ;
CCHDRS on $(<) = [ on $(<) FIncludes $(HDRS) ] ;
CCDEFS on $(<) = [ on $(<) FDefines $(DEFINES) ] ;
}
actions C++
{
$(CMD.C++) -c -o $(<) $(CCHDRS) $(C++FLAGS) $(CCDEFS) $(>)
}
} # end if $(CMD:C++)
#============================================================================
# Rules for C and C++ files
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if $(CMD.CC)
{
rule CcRule
{
local object =
[ DoObjectGrist [ PrefixSuffix $(>)_ : $(<) : $(SUFOBJ) ] ] ;
Cc $(object) : $(<) ;
return $(object) ;
}
RegisterFileType CcRule : .c ;
RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .c ;
rule Cc
{
Depends $(<) : $(>) ;
CCFLAGS on $(<) += $(CCFLAGS) $(SUBDIRCCFLAGS) ;
CCHDRS on $(<) = [ on $(<) FIncludes $(HDRS) ] ;
CCDEFS on $(<) = [ on $(<) FDefines $(DEFINES) ] ;
}
actions Cc
{
$(CMD.CC) -c -o $(<) $(CCHDRS) $(CCFLAGS) $(CCDEFS) $(>)
}
} # end if $(CMD.CC)
if $(CMD.C++)
{
rule C++Rule
{
local object =
[ DoObjectGrist [ PrefixSuffix $(>)_ : $(<) : $(SUFOBJ) ] ] ;
C++ $(object) : $(<) ;
return $(object) ;
}
RegisterFileType C++Rule : .cpp .cc .c++ ;
RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .cpp .cc .c++ ;
rule C++
{
Depends $(<) : $(>) ;
C++FLAGS on $(<) += $(C++FLAGS) $(SUBDIRC++FLAGS) ;
CCHDRS on $(<) = [ on $(<) FIncludes $(HDRS) ] ;
CCDEFS on $(<) = [ on $(<) FDefines $(DEFINES) ] ;
}
actions C++
{
$(CMD.C++) -c -o $(<) $(CCHDRS) $(C++FLAGS) $(CCDEFS) $(>)
}
} # end if $(CMD:C++)

File diff suppressed because it is too large Load Diff

View File

@@ -1,128 +1,128 @@
#==============================================================================
# Utility functions for collecting information about the Jam environment.
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
#------------------------------------------------------------------------------
# When the target "dumptargets" is invoked, dump the top-level, user-visible
# build targets as a whitespace-delimited list to the file named by the Jam
# variable DUMPTARGETS_FILE. Example:
#
# jam -sDUMPTARGETS_FILE=targets.txt dumptargets
#
# This output might be useful, for instance, when composing documentation (via
# some automated mechanism) which lists the targets visible to the user.
#
# IMPLEMENTATION NOTES
#
# The emitted target names are collected from several locations:
#
# - All single-word arguments to NotFile composed of ._- and alphanumerics.
#
# - Targets defined by the Application rule. Unlike other rules (Plugin,
# Library, etc.) which compose a top-level pseudo-target using NotFile
# (which is thus caught by the above case), on Unix, the Application rule
# does not invoke NotFile since the top-level target has the same name as
# the generated executable.
#
# - Targets defined by the ShellScript rule, since the emitted shell scripts
# have the same name as the top-level target.
#
# Collection occurs in two phases. This file must be included by build.jam
# before any other utility *.jam files are included, and it must also be
# included after all other utility *.jam files are included. In the first
# phase, the NotFile rule is re-defined so that we can catch pseudo-targets
# created by the other utility *.jam files (we must re-define NotFile before
# they are included), as well as any NotFile pseudo-targets created by Jamfiles
# throughout the project. In the second phase, the Application and ShellScript
# rules are re-defined (we must do so after application.jam has defined the
# implementations which we override). These overrides allow us to catch
# application and shell-script targets which project-wide Jamfiles define.
#------------------------------------------------------------------------------
if $(DUMPTARGETS_FILE)
{
# Jam does not support arithmetic, so we fake it with Roman numerals.
DUMPTARGETS_PASS ?= "" ;
DUMPTARGETS_PASS = "$(DUMPTARGETS_PASS)I" ;
switch $(DUMPTARGETS_PASS)
{
case I :
actions InitPseudoTargets
{
$(RM) $(<)
}
rule DumpPseudoTargets
{
NotFile $(<) ;
Always $(<) ;
Depends $(<) : $(>) ;
Always $(>) ;
InitPseudoTargets $(>) ;
}
DumpPseudoTargets dumptargets : "$(DUMPTARGETS_FILE)" ;
actions together piecemeal EmitPseudoTarget
{
echo "$(>)" >> $(<)
}
rule PossiblePseudoTarget
{
# NoCare and Includes are not actually required; they are used here merely to
# avoid Jam's "using independent target" warning. Note, however, that Jam
# 2.4 and BoostJam try building the target despite the fact that we NoCare
# about it. (Presumably this is because the targets have updating actions,
# and those actions override the NoCare.) Consequently, we have to put up
# with the "using independent target" warnings for these older Jam versions.
NoCare $(<) ;
if $(JAMVERSION) != 2.4 { Includes dumptargets : $(<) ; }
local i ;
for i in $(<)
{
local s = [ Match ^([A-Za-z0-9_.-]+)$ : $(i) ] ;
if $(s)
{
EmitPseudoTarget "$(DUMPTARGETS_FILE)" : $(i) ;
}
}
}
rule NotFile
{
PossiblePseudoTarget $(<) ;
}
case II :
rule Application
{
PossiblePseudoTarget $(<) $(<)clean ;
}
rule ShellScript
{
PossiblePseudoTarget $(<) $(<)clean ;
}
}
}
#==============================================================================
# Utility functions for collecting information about the Jam environment.
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
#------------------------------------------------------------------------------
# When the target "dumptargets" is invoked, dump the top-level, user-visible
# build targets as a whitespace-delimited list to the file named by the Jam
# variable DUMPTARGETS_FILE. Example:
#
# jam -sDUMPTARGETS_FILE=targets.txt dumptargets
#
# This output might be useful, for instance, when composing documentation (via
# some automated mechanism) which lists the targets visible to the user.
#
# IMPLEMENTATION NOTES
#
# The emitted target names are collected from several locations:
#
# - All single-word arguments to NotFile composed of ._- and alphanumerics.
#
# - Targets defined by the Application rule. Unlike other rules (Plugin,
# Library, etc.) which compose a top-level pseudo-target using NotFile
# (which is thus caught by the above case), on Unix, the Application rule
# does not invoke NotFile since the top-level target has the same name as
# the generated executable.
#
# - Targets defined by the ShellScript rule, since the emitted shell scripts
# have the same name as the top-level target.
#
# Collection occurs in two phases. This file must be included by build.jam
# before any other utility *.jam files are included, and it must also be
# included after all other utility *.jam files are included. In the first
# phase, the NotFile rule is re-defined so that we can catch pseudo-targets
# created by the other utility *.jam files (we must re-define NotFile before
# they are included), as well as any NotFile pseudo-targets created by Jamfiles
# throughout the project. In the second phase, the Application and ShellScript
# rules are re-defined (we must do so after application.jam has defined the
# implementations which we override). These overrides allow us to catch
# application and shell-script targets which project-wide Jamfiles define.
#------------------------------------------------------------------------------
if $(DUMPTARGETS_FILE)
{
# Jam does not support arithmetic, so we fake it with Roman numerals.
DUMPTARGETS_PASS ?= "" ;
DUMPTARGETS_PASS = "$(DUMPTARGETS_PASS)I" ;
switch $(DUMPTARGETS_PASS)
{
case I :
actions InitPseudoTargets
{
$(RM) $(<)
}
rule DumpPseudoTargets
{
NotFile $(<) ;
Always $(<) ;
Depends $(<) : $(>) ;
Always $(>) ;
InitPseudoTargets $(>) ;
}
DumpPseudoTargets dumptargets : "$(DUMPTARGETS_FILE)" ;
actions together piecemeal EmitPseudoTarget
{
echo "$(>)" >> $(<)
}
rule PossiblePseudoTarget
{
# NoCare and Includes are not actually required; they are used here merely to
# avoid Jam's "using independent target" warning. Note, however, that Jam
# 2.4 and BoostJam try building the target despite the fact that we NoCare
# about it. (Presumably this is because the targets have updating actions,
# and those actions override the NoCare.) Consequently, we have to put up
# with the "using independent target" warnings for these older Jam versions.
NoCare $(<) ;
if $(JAMVERSION) != 2.4 { Includes dumptargets : $(<) ; }
local i ;
for i in $(<)
{
local s = [ Match ^([A-Za-z0-9_.-]+)$ : $(i) ] ;
if $(s)
{
EmitPseudoTarget "$(DUMPTARGETS_FILE)" : $(i) ;
}
}
}
rule NotFile
{
PossiblePseudoTarget $(<) ;
}
case II :
rule Application
{
PossiblePseudoTarget $(<) $(<)clean ;
}
rule ShellScript
{
PossiblePseudoTarget $(<) $(<)clean ;
}
}
}

View File

@@ -1,172 +1,172 @@
#============================================================================
# Rules for specifying compiler and linker flags
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
## LinkWith target : libs
## Link an application with libraries. The specified libraries should have
## build rules in the same project. For external libraries use the
## ExternalLibs rule. Specify the library names without any extensions or
## the leading "lib".
rule LinkWith
{
local rawlibs = [ ResolveLibs $(>) ] ;
if ( $($(<)_TYPE) = library ) && ( "$($(<)_SHARED)" = "" )
{
# LibDepends for shared libs invokes LinkWith, so prevent recursion
LibDepends $(<) : $(rawlibs) ;
}
local i libs ;
for i in $(rawlibs)
{
libs += [ ConstructLibraryLinkTarget $(i) : $($(i)_SHARED) ] ;
}
Depends $($(<)_TARGET) : $(libs) ;
NEEDLIBS on $($(<)_TARGET) += $(libs) ;
$(<).NEEDLIBS += $(rawlibs) ;
LFlags $(<) : $($($(rawlibs).EXTERNALLIBS).LFLAGS) ;
}
## CFlags target : flags [ : options ]
## Sets cflags on all sourcefiles of a library, plugin or application target
## This rule affects c++ and c compiler flags.
rule CFlags
{
CheckOptions nostatic : $(3) : $(<) ;
CCFLAGS on $($(<)_OBJECTS) += $(>) ;
C++FLAGS on $($(<)_OBJECTS) += $(>) ;
UnitTestCFlags $(<) : $(>) : $(3) ;
}
## MergeLFlags flags1 : flags2
## Merge two arrays of linker flags. Removes duplicate entries, however,
## ensures that the correct relative right-to-left order of both flag arrays
## is kept.
rule MergeLFlags
{
local result = ;
local libs2 = $(2) ;
for l in $(1)
{
if [ IsElem $(l) : $(libs2) ]
{
# If a flag from set 1 is in set 2, add all flags from start of set 2
# to the occurance of the flag to result.
while "$(libs2[1])" != "" && $(libs2[1]) != $(l)
{
result += $(libs2[1]) ;
libs2 = $(libs2[2-]) ;
}
result += $(libs2[1]) ;
libs2 = $(libs2[2-]) ;
}
else
{
# Just add the flag.
result += $(l) ;
}
}
result += $(libs2) ;
return $(result) ;
}
## LFlags target : flags [ : options ]
## Sets linker flags for a library, plugin or application target
rule LFlags
{
CheckOptions nostatic : $(3) : $(<) ;
NotFile $(>) ;
NEEDLIBS on $($(<)_TARGET) += $(>) ;
$(<).LFLAGS += $(>) ;
UnitTestLFlags $(<) : $(>) : $(3) ;
}
## ExternalLibs target : identifiers
## Specify a dependency between 'target' and the external libraries
## indicated by 'identifiers'. If 'target' is an application or plugin,
## then it is linked against the indicated external libraries. If 'target'
## is a library, then its dependency upon 'identifiers' is noted, and
## applications or plugins which link against 'target' will also be linked
## against the libraries indicated by 'identifiers'. 'identifiers' is a
## list of base names of a set of variables which provide build tool
## information about each external library. In particular, assuming that
## `ident' is one element of `identifiers', the value of $(ident).CFLAGS
## should provide compiler flags needed for the external library indicated
## by 'ident'; and $(ident).LFLAGS should provide linker flags for the
## library.
rule ExternalLibs
{
local extlib ;
for extlib in $(>)
{
CFlags $(<) : $($(extlib).CFLAGS) ;
LFlags $(<) : $($(extlib).LFLAGS) ;
$(<).EXTERNALLIBS += $(extlib) ;
}
}
## ExtraObjects target : objectfiles [ : options ]
## Link additional object files with a target.
## Options:
## inheritcflags: The mentioned object files will inherit compiler flags
## assigned to target's normal object files (in addition to any flags
## already set manually).
rule ExtraObjects
{
CheckOptions inheritcflags : $(3) : $(<) ;
if [ IsElem inheritcflags : $(3) ]
{
$(<)_OBJECTS += $(>) ;
}
EXTRAOBJECTS on $($(<)_TARGET) += $(>) ;
Depends $($(<)_TARGET) : $(>) ;
Clean $(<)clean : $(>) ;
Clean clean : $(>) ;
}
#----------------------------------------------------------------------------
# private part
## ResolveLibs libs
## Given a list of libraries, augment the list by adding other libraries
## upon which the given libraries depend. Dependencies between libraries
## are specified via LibDepends (or LinkWith when the target is a library).
## The returned list is ordered such that it is suitable for Unix linkers
## which are sensitive to the order of libraries in the invocation
## statement.
rule ResolveLibs
{
local i libs ;
for i in $(<)
{
libs += $(i) $($(i)_depends) ;
}
# We must eliminate the duplicates in reverse order in order to ensure that
# we do not destroy the overall library ordering since Unix linkers are
# order-sensitive.
return [ Reverse [ RemoveDups [ Reverse $(libs) ] ] ] ;
}
#============================================================================
# Rules for specifying compiler and linker flags
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
## LinkWith target : libs
## Link an application with libraries. The specified libraries should have
## build rules in the same project. For external libraries use the
## ExternalLibs rule. Specify the library names without any extensions or
## the leading "lib".
rule LinkWith
{
local rawlibs = [ ResolveLibs $(>) ] ;
if ( $($(<)_TYPE) = library ) && ( "$($(<)_SHARED)" = "" )
{
# LibDepends for shared libs invokes LinkWith, so prevent recursion
LibDepends $(<) : $(rawlibs) ;
}
local i libs ;
for i in $(rawlibs)
{
libs += [ ConstructLibraryLinkTarget $(i) : $($(i)_SHARED) ] ;
}
Depends $($(<)_TARGET) : $(libs) ;
NEEDLIBS on $($(<)_TARGET) += $(libs) ;
$(<).NEEDLIBS += $(rawlibs) ;
LFlags $(<) : $($($(rawlibs).EXTERNALLIBS).LFLAGS) ;
}
## CFlags target : flags [ : options ]
## Sets cflags on all sourcefiles of a library, plugin or application target
## This rule affects c++ and c compiler flags.
rule CFlags
{
CheckOptions nostatic : $(3) : $(<) ;
CCFLAGS on $($(<)_OBJECTS) += $(>) ;
C++FLAGS on $($(<)_OBJECTS) += $(>) ;
UnitTestCFlags $(<) : $(>) : $(3) ;
}
## MergeLFlags flags1 : flags2
## Merge two arrays of linker flags. Removes duplicate entries, however,
## ensures that the correct relative right-to-left order of both flag arrays
## is kept.
rule MergeLFlags
{
local result = ;
local libs2 = $(2) ;
for l in $(1)
{
if [ IsElem $(l) : $(libs2) ]
{
# If a flag from set 1 is in set 2, add all flags from start of set 2
# to the occurance of the flag to result.
while "$(libs2[1])" != "" && $(libs2[1]) != $(l)
{
result += $(libs2[1]) ;
libs2 = $(libs2[2-]) ;
}
result += $(libs2[1]) ;
libs2 = $(libs2[2-]) ;
}
else
{
# Just add the flag.
result += $(l) ;
}
}
result += $(libs2) ;
return $(result) ;
}
## LFlags target : flags [ : options ]
## Sets linker flags for a library, plugin or application target
rule LFlags
{
CheckOptions nostatic : $(3) : $(<) ;
NotFile $(>) ;
NEEDLIBS on $($(<)_TARGET) += $(>) ;
$(<).LFLAGS += $(>) ;
UnitTestLFlags $(<) : $(>) : $(3) ;
}
## ExternalLibs target : identifiers
## Specify a dependency between 'target' and the external libraries
## indicated by 'identifiers'. If 'target' is an application or plugin,
## then it is linked against the indicated external libraries. If 'target'
## is a library, then its dependency upon 'identifiers' is noted, and
## applications or plugins which link against 'target' will also be linked
## against the libraries indicated by 'identifiers'. 'identifiers' is a
## list of base names of a set of variables which provide build tool
## information about each external library. In particular, assuming that
## `ident' is one element of `identifiers', the value of $(ident).CFLAGS
## should provide compiler flags needed for the external library indicated
## by 'ident'; and $(ident).LFLAGS should provide linker flags for the
## library.
rule ExternalLibs
{
local extlib ;
for extlib in $(>)
{
CFlags $(<) : $($(extlib).CFLAGS) ;
LFlags $(<) : $($(extlib).LFLAGS) ;
$(<).EXTERNALLIBS += $(extlib) ;
}
}
## ExtraObjects target : objectfiles [ : options ]
## Link additional object files with a target.
## Options:
## inheritcflags: The mentioned object files will inherit compiler flags
## assigned to target's normal object files (in addition to any flags
## already set manually).
rule ExtraObjects
{
CheckOptions inheritcflags : $(3) : $(<) ;
if [ IsElem inheritcflags : $(3) ]
{
$(<)_OBJECTS += $(>) ;
}
EXTRAOBJECTS on $($(<)_TARGET) += $(>) ;
Depends $($(<)_TARGET) : $(>) ;
Clean $(<)clean : $(>) ;
Clean clean : $(>) ;
}
#----------------------------------------------------------------------------
# private part
## ResolveLibs libs
## Given a list of libraries, augment the list by adding other libraries
## upon which the given libraries depend. Dependencies between libraries
## are specified via LibDepends (or LinkWith when the target is a library).
## The returned list is ordered such that it is suitable for Unix linkers
## which are sensitive to the order of libraries in the invocation
## statement.
rule ResolveLibs
{
local i libs ;
for i in $(<)
{
libs += $(i) $($(i)_depends) ;
}
# We must eliminate the duplicates in reverse order in order to ensure that
# we do not destroy the overall library ordering since Unix linkers are
# order-sensitive.
return [ Reverse [ RemoveDups [ Reverse $(libs) ] ] ] ;
}

View File

@@ -1,61 +1,61 @@
#============================================================================
# Rules for building compile groups
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
COMPILE_GROUPS = ;
## CompileGroups target : groups
## Adds a target to a list of compile groups. A compile group is a virtual
## target which combines several targets. This is useful for things like a
## creating a target which compiles all image loaders, all renderers, etc.
rule CompileGroups
{
local _i ;
for _i in $(>)
{
Depends $(_i) : $(<) ;
Depends $(_i)clean : $(<)clean ;
if ! [ IsElem $(_i) : $(COMPILE_GROUPS) ]
{
NotFile $(_i) ;
Echo "Warning: $(_i) not registered via RegisterCompileGroups" ;
}
}
}
## RegisterCompileGroups
## Registers compile groups. You must specify all compile groups here before
## can use them.
rule RegisterCompileGroups
{
NotFile $(<) ;
COMPILE_GROUPS += $(<) ;
local i ;
for i in $(<)
{
local desc = [ Description $(i) ] ;
if $(desc)
{
Help $(i) : "Build the $(desc)" ;
}
}
}
#============================================================================
# Rules for building compile groups
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
COMPILE_GROUPS = ;
## CompileGroups target : groups
## Adds a target to a list of compile groups. A compile group is a virtual
## target which combines several targets. This is useful for things like a
## creating a target which compiles all image loaders, all renderers, etc.
rule CompileGroups
{
local _i ;
for _i in $(>)
{
Depends $(_i) : $(<) ;
Depends $(_i)clean : $(<)clean ;
if ! [ IsElem $(_i) : $(COMPILE_GROUPS) ]
{
NotFile $(_i) ;
Echo "Warning: $(_i) not registered via RegisterCompileGroups" ;
}
}
}
## RegisterCompileGroups
## Registers compile groups. You must specify all compile groups here before
## can use them.
rule RegisterCompileGroups
{
NotFile $(<) ;
COMPILE_GROUPS += $(<) ;
local i ;
for i in $(<)
{
local desc = [ Description $(i) ] ;
if $(desc)
{
Help $(i) : "Build the $(desc)" ;
}
}
}

View File

@@ -1,85 +1,85 @@
#============================================================================
# Rules for collecting and emitting descriptions about targets
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
## Description target [ : description ]
## Provides access to the description of 'target'. The description may be
## used by other rules, such as those which generate project files, or which
## present informative messages to the user regarding 'target'. If invoked
## with two arguments, then it sets the description of 'target'. If invoked
## with one argument, then it returns the description of 'target'. You
## should invoke this rule to set the description before invoking other
## rules which might need access to target's description, such as the
## Application, Library, and Plugin rules. As a convenience, several generic
## rules, such as Application, Library, and Plugin will automatically invoke
## the Help rule for 'target' using the provided 'description'.
rule Description
{
local desc = $(>) ;
if $(desc)
{
$(<)_description = $(desc) ;
}
else
{
desc = $($(<)_description) ;
}
return $(desc) ;
}
## Help target : description
## Specify the 'description' to emit for 'target' when the user invokes "jam
## help".
rule Help
{
local target = $(<) ;
local desc = $(>) ;
if ! $(target) { target = "" ; }
if ! $(desc) { desc = "" ; }
# target width:20, description width:54
local target_pad = " " ;
local target_pat = "...................." ;
local desc_pad = " " ;
local desc_pat = "......................................................" ;
local m = Match ; # Indirect invocation allows variables in pattern regex.
local target_str = [ $(m) "($(target_pat)).*" : "$(target)$(target_pad)" ] ;
local desc_str = [ $(m) "($(desc_pat)).*" : "$(desc)$(desc_pad)" ] ;
local help = "jam $(target_str) $(desc_str)" ;
target = $(target:G=help) ;
Depends help : $(target) ;
NotFile $(help) ;
PrintHelp $(target) : $(help) ;
Always $(target) ;
NotFile $(target) ;
}
actions quietly PrintHelp
{
echo "$(>)"
}
NotFile help ;
Always help ;
Help all : "Build the entire project" ;
#============================================================================
# Rules for collecting and emitting descriptions about targets
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
## Description target [ : description ]
## Provides access to the description of 'target'. The description may be
## used by other rules, such as those which generate project files, or which
## present informative messages to the user regarding 'target'. If invoked
## with two arguments, then it sets the description of 'target'. If invoked
## with one argument, then it returns the description of 'target'. You
## should invoke this rule to set the description before invoking other
## rules which might need access to target's description, such as the
## Application, Library, and Plugin rules. As a convenience, several generic
## rules, such as Application, Library, and Plugin will automatically invoke
## the Help rule for 'target' using the provided 'description'.
rule Description
{
local desc = $(>) ;
if $(desc)
{
$(<)_description = $(desc) ;
}
else
{
desc = $($(<)_description) ;
}
return $(desc) ;
}
## Help target : description
## Specify the 'description' to emit for 'target' when the user invokes "jam
## help".
rule Help
{
local target = $(<) ;
local desc = $(>) ;
if ! $(target) { target = "" ; }
if ! $(desc) { desc = "" ; }
# target width:20, description width:54
local target_pad = " " ;
local target_pat = "...................." ;
local desc_pad = " " ;
local desc_pat = "......................................................" ;
local m = Match ; # Indirect invocation allows variables in pattern regex.
local target_str = [ $(m) "($(target_pat)).*" : "$(target)$(target_pad)" ] ;
local desc_str = [ $(m) "($(desc_pat)).*" : "$(desc)$(desc_pad)" ] ;
local help = "jam $(target_str) $(desc_str)" ;
target = $(target:G=help) ;
Depends help : $(target) ;
NotFile $(help) ;
PrintHelp $(target) : $(help) ;
Always $(target) ;
NotFile $(target) ;
}
actions quietly PrintHelp
{
echo "$(>)"
}
NotFile help ;
Always help ;
Help all : "Build the entire project" ;

File diff suppressed because it is too large Load Diff

View File

@@ -1,213 +1,213 @@
#============================================================================
# Rules for installation
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
INSTALL ?= "install" ;
INSTALL_PROGRAM ?= $(INSTALL) ;
INSTALL_DATA ?= "$(INSTALL) -m 644" ;
# set some paths
appdatadir ?= [ ConcatDirs $(datadir) $(PACKAGE_NAME) ] ;
appdocdir ?= [ ConcatDirs $(datadir) doc $(PACKAGE_NAME)-$(PACKAGE_VERSION) ] ;
appconfdir ?= [ ConcatDirs $(sysconfdir) $(PACKAGE_NAME) ] ;
appincdir ?= [ ConcatDirs $(includedir) $(PACKAGE_NAME) ] ;
plugindir ?= [ ConcatDirs $(libdir) $(PACKAGE_NAME) ] ;
rule GristInstall
{
local i, files ;
for i in $(<)
{
if $(i:G) { files += $(i) ; }
else { files += $(i:G=$(SUBDIR)) ; }
}
return $(files) ;
}
## InstallHeader headername [ : subdir ]
## DoInstall a header file into the includedir directory. A subdirectory
## relative to the includedir can be specified.
rule InstallHeader
{
local files = [ GristInstall $(<) ] ;
SEARCH on $(files) = $(SUBDIR) ;
Depends install_include : [ DoInstall $(files) : $(appincdir) $(2) ] ;
}
## InstallData files [ : subdir ]
## Installs data files
rule InstallData
{
local files = [ GristInstall $(<) ] ;
SEARCH on $(files) = $(SUBDIR) ;
Depends install_data : [ DoInstall $(files) : $(appdatadir) $(2) ] ;
}
## InstallConfig files [ : subdir ]
## Installs configuration files
rule InstallConfig
{
local files = [ GristInstall $(<) ] ;
SEARCH on $(files) = $(SUBDIR) ;
Depends install_config : [ DoInstall $(files) : $(appconfdir) $(2) ] ;
}
## InstallDoc files [ : subdir ]
## Installs documentation files
rule InstallDoc
{
local files = [ GristInstall $(<) ] ;
SEARCH on $(files) = $(SUBDIR) ;
Depends install_doc : [ DoInstall $(files) : $(appdocdir) $(2) ] ;
}
## InstallMan files
## Installs Unix manual files
rule InstallMan
{
local files = [ GristInstall $(<) ] ;
SEARCH on $(files) = $(SUBDIR) ;
local i ;
for i in $(files)
{
local dir = $(mandir) ;
switch $(i:S)
{
case .1 : dir += man1 ;
case .2 : dir += man2 ;
case .3 : dir += man3 ;
case .4 : dir += man4 ;
case .5 : dir += man5 ;
case .6 : dir += man6 ;
case .7 : dir += man7 ;
case .8 : dir += man8 ;
case .9 : dir += man9 ;
case * :
echo "WARNING: manfile has no *.[0-9] ending." ;
}
Depends install_man : [ DoInstall $(i) : $(dir) ] ;
}
}
## InstallProgram files [ : directories ]
## Installs program files (executable or shell script). This is a
## convenience wrapper for DoInstall when the resources to be installed is
## of an invocable nature. It sets SEARCH on `files', and uses
## $(INSTALL_PROGRAM) to perform the actual installation. Unlike
## SystemInstallApplication, it does not assume that all such targets should
## be installed into $(bindir); instead, you can provide `directories' to
## specify the installation location. If `directories' is not given, then
## $(bindir) is assumed. Also, unlike SystemInstallApplication, this rule
## does not have any platform-specific knowledge (such as how to install a
## Cocoa application wrapper on MacOS/X). Always use
## SystemInstallApplication for installation of full-fledged applications. A
## typical use for InstallProgram would be to install an already-existing
## shell script. This differs from the ShellScript rule which both creates a
## shell script from scratch at build time, and arranges for it to be
## installed. Like DoInstall, this rule returns the names of the installed
## targets, so it is convenient to use the results as the input for another
## rule, such as Depends.
rule InstallProgram
{
local files = [ GristInstall $(1) ] ;
local dir = $(2) ;
if ! $(dir) { dir = $(bindir) ; }
SEARCH on $(files) = $(SUBDIR) ;
return [ DoInstall $(files) : $(dir) : $(INSTALL_PROGRAM) ] ;
}
## DoInstall sourcenames : directories [ : installapp : [ postinstallrules ]]
## Creates a new install target for the given sources named by
## `sourcenames'. `directories' is a list of directory components
## indicating the installation directory for `sourcename'. `installapp' is
## the actual program to run to install the sources. If not specified, then
## $(INSTALL_DATA) is used. If the optional `postinstallrules' is provided,
## it is a list of Jam rules to invoke on the installed target after it is
## installed. Each rule is invoked with the installed target as the first
## argument, and the source target as the second. An obvious instance where
## `postinstallrules' proves useful is when the Ranlib rule should be
## invoked on just-installed static library (.a) files. The DoInstall rule
## returns the names of the installed targets, so it is convenient to use
## the results as the input for another rule. For example:
## Depends install : [ DoInstall $(docfiles) : $(installdocdir) ] ;
## (Implementation Note: We did not name this rule Install, because Jambase
## already defines an action named Install :-/)
rule DoInstall
{
local targets target i dir gdir ;
dir = [ ConcatDirs $(DESTDIR) $(2) ] ;
gdir = $(dir:G=dir) ;
MkDir $(gdir) ;
for i in $(1)
{
target = $(i:BSR=$(dir):G=install) ;
targets += $(target) ;
Depends $(target) : $(gdir) $(i) ;
Install1 $(target) : $(i) ;
if "$(3)"
{
INSTALL_APP on $(target) = $(3) ;
}
else
{
INSTALL_APP on $(target) = $(INSTALL_DATA) ;
}
if "$(4)"
{
local postrule ;
for postrule in $(4)
{
$(postrule) $(target) : $(i) ;
}
}
}
Always $(targets) ;
return $(targets) ;
}
#----------------------------------------------------------------------------
INSTALLTARGETS = install_bin install_plugin install_lib install_include
install_data install_config install_doc ;
Always install $(INSTALLTARGETS) ;
NotFile install $(INSTALLTARGETS) ;
Depends install : $(INSTALLTARGETS) ;
if ! $(PACKAGE_INSTALL_NAME) { PACKAGE_INSTALL_NAME = $(PACKAGE_LONGNAME) ; }
if ! $(PACKAGE_INSTALL_NAME) { PACKAGE_INSTALL_NAME = $(PACKAGE_NAME) ; }
if ! $(PACKAGE_INSTALL_NAME) { PACKAGE_INSTALL_NAME = "the project" ; }
Help install : "Install $(PACKAGE_INSTALL_NAME)" ;
actions Install1
{
$(INSTALL_APP) $(INSTALLFLAGS) $(>) $(<)
}
actions CopyDirs
{
$(DEEPCOPY) $(>) $(<)
}
#============================================================================
# Rules for installation
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
INSTALL ?= "install" ;
INSTALL_PROGRAM ?= $(INSTALL) ;
INSTALL_DATA ?= "$(INSTALL) -m 644" ;
# set some paths
appdatadir ?= [ ConcatDirs $(datadir) $(PACKAGE_NAME) ] ;
appdocdir ?= [ ConcatDirs $(datadir) doc $(PACKAGE_NAME)-$(PACKAGE_VERSION) ] ;
appconfdir ?= [ ConcatDirs $(sysconfdir) $(PACKAGE_NAME) ] ;
appincdir ?= [ ConcatDirs $(includedir) $(PACKAGE_NAME) ] ;
plugindir ?= [ ConcatDirs $(libdir) $(PACKAGE_NAME) ] ;
rule GristInstall
{
local i, files ;
for i in $(<)
{
if $(i:G) { files += $(i) ; }
else { files += $(i:G=$(SUBDIR)) ; }
}
return $(files) ;
}
## InstallHeader headername [ : subdir ]
## DoInstall a header file into the includedir directory. A subdirectory
## relative to the includedir can be specified.
rule InstallHeader
{
local files = [ GristInstall $(<) ] ;
SEARCH on $(files) = $(SUBDIR) ;
Depends install_include : [ DoInstall $(files) : $(appincdir) $(2) ] ;
}
## InstallData files [ : subdir ]
## Installs data files
rule InstallData
{
local files = [ GristInstall $(<) ] ;
SEARCH on $(files) = $(SUBDIR) ;
Depends install_data : [ DoInstall $(files) : $(appdatadir) $(2) ] ;
}
## InstallConfig files [ : subdir ]
## Installs configuration files
rule InstallConfig
{
local files = [ GristInstall $(<) ] ;
SEARCH on $(files) = $(SUBDIR) ;
Depends install_config : [ DoInstall $(files) : $(appconfdir) $(2) ] ;
}
## InstallDoc files [ : subdir ]
## Installs documentation files
rule InstallDoc
{
local files = [ GristInstall $(<) ] ;
SEARCH on $(files) = $(SUBDIR) ;
Depends install_doc : [ DoInstall $(files) : $(appdocdir) $(2) ] ;
}
## InstallMan files
## Installs Unix manual files
rule InstallMan
{
local files = [ GristInstall $(<) ] ;
SEARCH on $(files) = $(SUBDIR) ;
local i ;
for i in $(files)
{
local dir = $(mandir) ;
switch $(i:S)
{
case .1 : dir += man1 ;
case .2 : dir += man2 ;
case .3 : dir += man3 ;
case .4 : dir += man4 ;
case .5 : dir += man5 ;
case .6 : dir += man6 ;
case .7 : dir += man7 ;
case .8 : dir += man8 ;
case .9 : dir += man9 ;
case * :
echo "WARNING: manfile has no *.[0-9] ending." ;
}
Depends install_man : [ DoInstall $(i) : $(dir) ] ;
}
}
## InstallProgram files [ : directories ]
## Installs program files (executable or shell script). This is a
## convenience wrapper for DoInstall when the resources to be installed is
## of an invocable nature. It sets SEARCH on `files', and uses
## $(INSTALL_PROGRAM) to perform the actual installation. Unlike
## SystemInstallApplication, it does not assume that all such targets should
## be installed into $(bindir); instead, you can provide `directories' to
## specify the installation location. If `directories' is not given, then
## $(bindir) is assumed. Also, unlike SystemInstallApplication, this rule
## does not have any platform-specific knowledge (such as how to install a
## Cocoa application wrapper on MacOS/X). Always use
## SystemInstallApplication for installation of full-fledged applications. A
## typical use for InstallProgram would be to install an already-existing
## shell script. This differs from the ShellScript rule which both creates a
## shell script from scratch at build time, and arranges for it to be
## installed. Like DoInstall, this rule returns the names of the installed
## targets, so it is convenient to use the results as the input for another
## rule, such as Depends.
rule InstallProgram
{
local files = [ GristInstall $(1) ] ;
local dir = $(2) ;
if ! $(dir) { dir = $(bindir) ; }
SEARCH on $(files) = $(SUBDIR) ;
return [ DoInstall $(files) : $(dir) : $(INSTALL_PROGRAM) ] ;
}
## DoInstall sourcenames : directories [ : installapp : [ postinstallrules ]]
## Creates a new install target for the given sources named by
## `sourcenames'. `directories' is a list of directory components
## indicating the installation directory for `sourcename'. `installapp' is
## the actual program to run to install the sources. If not specified, then
## $(INSTALL_DATA) is used. If the optional `postinstallrules' is provided,
## it is a list of Jam rules to invoke on the installed target after it is
## installed. Each rule is invoked with the installed target as the first
## argument, and the source target as the second. An obvious instance where
## `postinstallrules' proves useful is when the Ranlib rule should be
## invoked on just-installed static library (.a) files. The DoInstall rule
## returns the names of the installed targets, so it is convenient to use
## the results as the input for another rule. For example:
## Depends install : [ DoInstall $(docfiles) : $(installdocdir) ] ;
## (Implementation Note: We did not name this rule Install, because Jambase
## already defines an action named Install :-/)
rule DoInstall
{
local targets target i dir gdir ;
dir = [ ConcatDirs $(DESTDIR) $(2) ] ;
gdir = $(dir:G=dir) ;
MkDir $(gdir) ;
for i in $(1)
{
target = $(i:BSR=$(dir):G=install) ;
targets += $(target) ;
Depends $(target) : $(gdir) $(i) ;
Install1 $(target) : $(i) ;
if "$(3)"
{
INSTALL_APP on $(target) = $(3) ;
}
else
{
INSTALL_APP on $(target) = $(INSTALL_DATA) ;
}
if "$(4)"
{
local postrule ;
for postrule in $(4)
{
$(postrule) $(target) : $(i) ;
}
}
}
Always $(targets) ;
return $(targets) ;
}
#----------------------------------------------------------------------------
INSTALLTARGETS = install_bin install_plugin install_lib install_include
install_data install_config install_doc ;
Always install $(INSTALLTARGETS) ;
NotFile install $(INSTALLTARGETS) ;
Depends install : $(INSTALLTARGETS) ;
if ! $(PACKAGE_INSTALL_NAME) { PACKAGE_INSTALL_NAME = $(PACKAGE_LONGNAME) ; }
if ! $(PACKAGE_INSTALL_NAME) { PACKAGE_INSTALL_NAME = $(PACKAGE_NAME) ; }
if ! $(PACKAGE_INSTALL_NAME) { PACKAGE_INSTALL_NAME = "the project" ; }
Help install : "Install $(PACKAGE_INSTALL_NAME)" ;
actions Install1
{
$(INSTALL_APP) $(INSTALLFLAGS) $(>) $(<)
}
actions CopyDirs
{
$(DEEPCOPY) $(>) $(<)
}

View File

@@ -1,349 +1,349 @@
#============================================================================
# Several hacks to make the build compatible with certain old/broken jam
# versions
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# BoostJam is evil: It is compatible to Jam 2.4 but has a version number 3.1,
# we try to detect BoostJam with the ARGV extension.
if $(ARGV[0])
{
# BoostJam hacks.
JAMVERSION = 2.4 ;
rule FIncludes
{
return -I$(<) ;
}
rule FDefines
{
return -D$(<) ;
}
}
if $(JAMVERSION) < 2.4
{
EXIT "Error: This buildsystem requires jam version 2.4 or later." ;
}
# All scripts invoked by the build system expect a Bourne or compatible shell.
# Reject C-shell and its variants (such as tcsh). Unfortunately, this is a bit
# of an ugly hack. It would be nicer to perform this logic at the very end of
# this file as a last-minute assertion. Unfortunately, however, it seems that
# references to $(SHELL) in any of the included files get bound at the point
# of reference, thus we need to perform this filtering as early as possible.
# Furthermore, on Windows, if the MSYS installation path contains a space (such
# as "c:\Program Files\msys"), the space will cause `actions' to fail which
# employ $(SHELL) indirectly through some other variable. Therefore, handle
# this case as well.
if [ Match (csh) : $(SHELL) ] || $(SHELL[2])
{
SHELL = "/bin/sh" ;
}
# Jam 2.4's SubDir rule had some problems and misses the useful SUBDIRRULES
# extension. So we override it here with a better version (from jam 2.5rc3).
# Likewise, 2.4 is missing FReverse and FStrip, which are needed by SubDir and
# other custom rules we define.
if $(JAMVERSION) = 2.4
{
rule FReverse
{
# FReverse a1 a2 a3 ... ;
# return ... a3 a2 a1 ;
if $(1) { return [ FReverse $(1[2-]) ] $(1[1]) ; }
}
rule FStripCommon
{
# FStripCommon v1 : v2 ;
# Strip common initial elements of variables v1 and v2.
# Modifies the variable values themselves.
if $($(<)[1]) && $($(<)[1]) = $($(>)[1])
{
$(<) = $($(<)[2-]) ;
$(>) = $($(>)[2-]) ;
FStripCommon $(<) : $(>) ;
}
}
rule SubDir
{
#
# SubDir TOP d1 d2 ... ;
#
# Support for a project tree spanning multiple directories.
#
# SubDir declares a Jamfile's location in a project tree, setting
# Jambase variables (SEARCH_SOURCE, LOCATE_TARGET) so that source
# files can be found.
#
# TOP is a user-select variable name for root of the tree, and
# d1 d2 ... are the directory elements that lead from the root
# of the tree to the directory of the Jamfile.
#
# TOP can be set externally, but normally the first SubDir call
# computes TOP as the path up from the current directory; the
# path contains one ../ for each of d1 d2 ...
#
# SubDir reads once the project-specific rules file Jamrules
# in the TOP directory, if present. This can be overridden
# with the variable TOPRULES.
#
# SubDir supports multiple, overlaid project trees: SubDir
# invocations with different TOPs can appear in the same Jamfile.
# The location established by the first SubDir call is used set
# the TOPs for the subsequent SubDir calls.
#
# SubDir's public variables:
#
# $(TOP) = path from CWD to root.
# $(SUBDIR) = path from CWD to the directory SubDir names.
# $(SUBDIR_TOKENS) = path from $(TOP) to $(SUBDIR) as dir names
# $(SEARCH_SOURCE) = $(SUBDIR)
# $(LOCATE_SOURCE) = $(ALL_LOCATE_TARGET) $(SUBDIR)
# $(LOCATE_TARGET) = $(ALL_LOCATE_TARGET) $(SUBDIR)
# $(SOURCE_GRIST) = $(SUBDIR_TOKENS) with !'s
#
local _top = $(<[1]) ;
local _tokens = $(<[2-]) ;
#
# First time through sets up relative root and includes Jamrules.
#
if ! $(_top)
{
Exit SubDir syntax error ;
}
if ! $($(_top)-SET)
{
$(_top)-SET = true ;
# First time we've seen this TOP.
# We'll initialize a number of internal variables:
#
# $(TOP-UP) = directories from ROOT to a common point
# $(TOP-DOWN) = directories from common point to TOP
# $(TOP-ROOT) = root directory for UP/DOWN -- normally CWD
# $(SUBDIR_UP) = current value of $(TOP-UP)
# $(SUBDIR_DOWN) = current value of $(TOP-DOWN)
# $(SUBDIR_ROOT) = current value of $(TOP-ROOT)
#
if $($(_top))
{
# TOP externally set.
# We'll ignore the relative (UP/DOWN) path that
# got us here, and instead remember the hard ROOT.
$(_top)-UP = ;
$(_top)-DOWN = ;
$(_top)-ROOT = $($(_top)) ;
}
else
{
# TOP not preset.
# Establishing a new TOP. In the simplest case,
# (SUBDIR_UP/SUBDIR_DOWN/SUBDIR_ROOT unset), it's
# merely a certain number of directories down from
# the current directory, and FSubDirPath will set
# TOP to a path consisting of ../ for each of the
# elements of _tokens, because that represents how
# far below TOP the current directory sits.
#
# In the more complicated case, the starting directory
# isn't the directory of jam's invocation but an
# location established by previous SubDir call. The
# starting directory is SUBDIR_UP directories up from
# SUBDIR_ROOT, and then SUBDIR_DOWN directories down
# from that. If SUBDIR_ROOT is not set, that means
# SUBDIR_DOWN and SUBDIR_UP represent the path from
# the directory of jam's invocation.
#
# In the most complicated case, the _tokens also
# represents directories down, because TOP is being
# estalished in a directory other than TOP's root.
# Hopefully, _tokens and SUBDIR_DOWN represent the
# same final directory, relative to the new TOP and
# the previous SubDIr's TOP. To find the new TOP,
# we have to chop off any common directories from
# then ends of _tokens and SUBDIR_DOWN. To do so,
# we reverse each of them, call FStripCommon to
# remove the initial common elements, and then
# reverse them again. After this process, if
# both _tokens and SUBDIR_DOWN have elements, it
# means the directory names estalished by the two
# SubDir calls don't match, and a warning is issued.
# All hell will likely break loose at this point,
# since the whole SubDir scheme relies on the SubDir
# calls accurately naming the current directory.
# Strip common trailing elements of _tokens and SUBDIR_DOWN.
_tokens = [ FReverse $(_tokens) ] ;
SUBDIR_DOWN = [ FReverse $(SUBDIR_DOWN) ] ;
FStripCommon _tokens : SUBDIR_DOWN ;
SUBDIR_DOWN = [ FReverse $(SUBDIR_DOWN) ] ;
_tokens = [ FReverse $(_tokens) ] ;
if $(SUBDIR_DOWN) && $(_tokens)
{
Echo Warning: SubDir $(<) misplaced! ;
}
# We'll remember the relative (UP/DOWN) path that
# got us here, plus any hard ROOT starting point
# for the UP/DOWN. If TOP is never set externally,
# ROOT will always be "" (directory of jam's invocation).
$(_top)-UP = $(SUBDIR_UP) $(_tokens) ;
$(_top)-DOWN = $(SUBDIR_DOWN) ;
$(_top)-ROOT = $(SUBDIR_ROOT:E="") ;
$(_top) = [ FSubDirPath $(_top) ] ;
}
# Set subdir vars for the inclusion of the Jamrules,
# just in case they have SubDir rules of their own.
# Note that SUBDIR_DOWN is empty: it's all the way
# up where the Jamrules live. These gets overrided
# just after the inclusion.
SUBDIR_UP = $($(_top)-UP) ;
SUBDIR_DOWN = ;
SUBDIR_ROOT = $($(_top)-ROOT) ;
# Include $(TOPRULES) or $(TOP)/Jamrules.
# Include $(TOPRULES) if set.
# Otherwise include $(TOP)/Jamrules if present.
if $($(_top)RULES) {
include $($(_top)RULES) ;
} else {
NoCare $(JAMRULES:R=$($(_top)):G=$(_top)) ;
include $(JAMRULES:R=$($(_top)):G=$(_top)) ;
}
}
# Get path from $(TOP) to named directory.
# Save dir tokens for other potential uses.
SUBDIR_UP = $($(_top)-UP) ;
SUBDIR_DOWN = $($(_top)-DOWN) $(_tokens) ;
SUBDIR_ROOT = $($(_top)-ROOT) ;
SUBDIR_TOKENS = $(SUBDIR_DOWN) ;
SUBDIR = [ FSubDirPath $(<) ] ;
# Now set up SEARCH_SOURCE, LOCATE_TARGET, SOURCE_GRIST
# These can be reset if needed. For example, if the source
# directory should not hold object files, LOCATE_TARGET can
# subsequently be redefined.
SEARCH_SOURCE = $(SUBDIR) ;
LOCATE_SOURCE = $(ALL_LOCATE_TARGET) $(SUBDIR) ;
LOCATE_TARGET = $(ALL_LOCATE_TARGET) $(SUBDIR) ;
SOURCE_GRIST = [ FGrist $(SUBDIR_TOKENS) ] ;
# Reset per-directory ccflags, hdrs, etc,
# listed in SUBDIRRESET.
# Note use of variable expanded assignment var
SUBDIR$(SUBDIRRESET) = ;
# Invoke user-specific SubDir extensions,
# rule names listed in SUBDIRRULES.
# Note use of variable expanded rule invocation
$(SUBDIRRULES) $(<) ;
}
rule FSubDirPath
{
# FSubDirPath TOP d1 ... ;
# Returns path to named directory.
# If jam is invoked in a subdirectory of the TOP, then we
# need to prepend a ../ for every level we must climb up
# (TOP-UP), and then append the directory names we must
# climb down (TOP-DOWN), plus the named directories d1 ...
# If TOP was set externally, or computed from another TOP
# that was, we'll have to reroot the whole thing at TOP-ROOT.
local _r = [ FRelPath $($(<[1])-UP) : $($(<[1])-DOWN) $(<[2-]) ] ;
return $(_r:R=$($(<[1])-ROOT)) ;
}
rule SubInclude
{
# SubInclude TOP d1 ... ;
#
# Include a subdirectory's Jamfile.
# We use SubDir to get there, in case the included Jamfile
# either doesn't have its own SubDir (naughty) or is a subtree
# with its own TOP.
if ! $($(<[1]))
{
Exit SubInclude $(<[1]) without prior SubDir $(<[1]) ;
}
SubDir $(<) ;
include $(JAMFILE:D=$(SUBDIR)) ;
}
rule SubRules
{
# SubRules TOP d1 ... : Other-TOP ;
#
# Read another tree's Jamrules, by giving it's path according
# to this tree and it's own name.
if ! $($(<[1]))
{
Exit SubRules $(<[1]) without prior SubDir $(<[1]) ;
}
SubDir $(<) ;
SubDir $(>) ;
}
## Now we try to fix up the already messed settings
## XXX We can only hope that Jam 2.4 users don't try starting Jam from
## subdirectories
TOP-SET = true ;
TOP-UP = ;
TOP-DOWN = ;
TOP-ROOT = $(TOP) ;
SUBDIR_UP = $(TOP-UP) ;
SUBDIR_DOWN = ;
SUBDIR_ROOT = $(TOP-ROOT) ;
#SubDir TOP ;
} # end if $(JAMVERSION) = 2.4
#============================================================================
# Several hacks to make the build compatible with certain old/broken jam
# versions
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# BoostJam is evil: It is compatible to Jam 2.4 but has a version number 3.1,
# we try to detect BoostJam with the ARGV extension.
if $(ARGV[0])
{
# BoostJam hacks.
JAMVERSION = 2.4 ;
rule FIncludes
{
return -I$(<) ;
}
rule FDefines
{
return -D$(<) ;
}
}
if $(JAMVERSION) < 2.4
{
EXIT "Error: This buildsystem requires jam version 2.4 or later." ;
}
# All scripts invoked by the build system expect a Bourne or compatible shell.
# Reject C-shell and its variants (such as tcsh). Unfortunately, this is a bit
# of an ugly hack. It would be nicer to perform this logic at the very end of
# this file as a last-minute assertion. Unfortunately, however, it seems that
# references to $(SHELL) in any of the included files get bound at the point
# of reference, thus we need to perform this filtering as early as possible.
# Furthermore, on Windows, if the MSYS installation path contains a space (such
# as "c:\Program Files\msys"), the space will cause `actions' to fail which
# employ $(SHELL) indirectly through some other variable. Therefore, handle
# this case as well.
if [ Match (csh) : $(SHELL) ] || $(SHELL[2])
{
SHELL = "/bin/sh" ;
}
# Jam 2.4's SubDir rule had some problems and misses the useful SUBDIRRULES
# extension. So we override it here with a better version (from jam 2.5rc3).
# Likewise, 2.4 is missing FReverse and FStrip, which are needed by SubDir and
# other custom rules we define.
if $(JAMVERSION) = 2.4
{
rule FReverse
{
# FReverse a1 a2 a3 ... ;
# return ... a3 a2 a1 ;
if $(1) { return [ FReverse $(1[2-]) ] $(1[1]) ; }
}
rule FStripCommon
{
# FStripCommon v1 : v2 ;
# Strip common initial elements of variables v1 and v2.
# Modifies the variable values themselves.
if $($(<)[1]) && $($(<)[1]) = $($(>)[1])
{
$(<) = $($(<)[2-]) ;
$(>) = $($(>)[2-]) ;
FStripCommon $(<) : $(>) ;
}
}
rule SubDir
{
#
# SubDir TOP d1 d2 ... ;
#
# Support for a project tree spanning multiple directories.
#
# SubDir declares a Jamfile's location in a project tree, setting
# Jambase variables (SEARCH_SOURCE, LOCATE_TARGET) so that source
# files can be found.
#
# TOP is a user-select variable name for root of the tree, and
# d1 d2 ... are the directory elements that lead from the root
# of the tree to the directory of the Jamfile.
#
# TOP can be set externally, but normally the first SubDir call
# computes TOP as the path up from the current directory; the
# path contains one ../ for each of d1 d2 ...
#
# SubDir reads once the project-specific rules file Jamrules
# in the TOP directory, if present. This can be overridden
# with the variable TOPRULES.
#
# SubDir supports multiple, overlaid project trees: SubDir
# invocations with different TOPs can appear in the same Jamfile.
# The location established by the first SubDir call is used set
# the TOPs for the subsequent SubDir calls.
#
# SubDir's public variables:
#
# $(TOP) = path from CWD to root.
# $(SUBDIR) = path from CWD to the directory SubDir names.
# $(SUBDIR_TOKENS) = path from $(TOP) to $(SUBDIR) as dir names
# $(SEARCH_SOURCE) = $(SUBDIR)
# $(LOCATE_SOURCE) = $(ALL_LOCATE_TARGET) $(SUBDIR)
# $(LOCATE_TARGET) = $(ALL_LOCATE_TARGET) $(SUBDIR)
# $(SOURCE_GRIST) = $(SUBDIR_TOKENS) with !'s
#
local _top = $(<[1]) ;
local _tokens = $(<[2-]) ;
#
# First time through sets up relative root and includes Jamrules.
#
if ! $(_top)
{
Exit SubDir syntax error ;
}
if ! $($(_top)-SET)
{
$(_top)-SET = true ;
# First time we've seen this TOP.
# We'll initialize a number of internal variables:
#
# $(TOP-UP) = directories from ROOT to a common point
# $(TOP-DOWN) = directories from common point to TOP
# $(TOP-ROOT) = root directory for UP/DOWN -- normally CWD
# $(SUBDIR_UP) = current value of $(TOP-UP)
# $(SUBDIR_DOWN) = current value of $(TOP-DOWN)
# $(SUBDIR_ROOT) = current value of $(TOP-ROOT)
#
if $($(_top))
{
# TOP externally set.
# We'll ignore the relative (UP/DOWN) path that
# got us here, and instead remember the hard ROOT.
$(_top)-UP = ;
$(_top)-DOWN = ;
$(_top)-ROOT = $($(_top)) ;
}
else
{
# TOP not preset.
# Establishing a new TOP. In the simplest case,
# (SUBDIR_UP/SUBDIR_DOWN/SUBDIR_ROOT unset), it's
# merely a certain number of directories down from
# the current directory, and FSubDirPath will set
# TOP to a path consisting of ../ for each of the
# elements of _tokens, because that represents how
# far below TOP the current directory sits.
#
# In the more complicated case, the starting directory
# isn't the directory of jam's invocation but an
# location established by previous SubDir call. The
# starting directory is SUBDIR_UP directories up from
# SUBDIR_ROOT, and then SUBDIR_DOWN directories down
# from that. If SUBDIR_ROOT is not set, that means
# SUBDIR_DOWN and SUBDIR_UP represent the path from
# the directory of jam's invocation.
#
# In the most complicated case, the _tokens also
# represents directories down, because TOP is being
# estalished in a directory other than TOP's root.
# Hopefully, _tokens and SUBDIR_DOWN represent the
# same final directory, relative to the new TOP and
# the previous SubDIr's TOP. To find the new TOP,
# we have to chop off any common directories from
# then ends of _tokens and SUBDIR_DOWN. To do so,
# we reverse each of them, call FStripCommon to
# remove the initial common elements, and then
# reverse them again. After this process, if
# both _tokens and SUBDIR_DOWN have elements, it
# means the directory names estalished by the two
# SubDir calls don't match, and a warning is issued.
# All hell will likely break loose at this point,
# since the whole SubDir scheme relies on the SubDir
# calls accurately naming the current directory.
# Strip common trailing elements of _tokens and SUBDIR_DOWN.
_tokens = [ FReverse $(_tokens) ] ;
SUBDIR_DOWN = [ FReverse $(SUBDIR_DOWN) ] ;
FStripCommon _tokens : SUBDIR_DOWN ;
SUBDIR_DOWN = [ FReverse $(SUBDIR_DOWN) ] ;
_tokens = [ FReverse $(_tokens) ] ;
if $(SUBDIR_DOWN) && $(_tokens)
{
Echo Warning: SubDir $(<) misplaced! ;
}
# We'll remember the relative (UP/DOWN) path that
# got us here, plus any hard ROOT starting point
# for the UP/DOWN. If TOP is never set externally,
# ROOT will always be "" (directory of jam's invocation).
$(_top)-UP = $(SUBDIR_UP) $(_tokens) ;
$(_top)-DOWN = $(SUBDIR_DOWN) ;
$(_top)-ROOT = $(SUBDIR_ROOT:E="") ;
$(_top) = [ FSubDirPath $(_top) ] ;
}
# Set subdir vars for the inclusion of the Jamrules,
# just in case they have SubDir rules of their own.
# Note that SUBDIR_DOWN is empty: it's all the way
# up where the Jamrules live. These gets overrided
# just after the inclusion.
SUBDIR_UP = $($(_top)-UP) ;
SUBDIR_DOWN = ;
SUBDIR_ROOT = $($(_top)-ROOT) ;
# Include $(TOPRULES) or $(TOP)/Jamrules.
# Include $(TOPRULES) if set.
# Otherwise include $(TOP)/Jamrules if present.
if $($(_top)RULES) {
include $($(_top)RULES) ;
} else {
NoCare $(JAMRULES:R=$($(_top)):G=$(_top)) ;
include $(JAMRULES:R=$($(_top)):G=$(_top)) ;
}
}
# Get path from $(TOP) to named directory.
# Save dir tokens for other potential uses.
SUBDIR_UP = $($(_top)-UP) ;
SUBDIR_DOWN = $($(_top)-DOWN) $(_tokens) ;
SUBDIR_ROOT = $($(_top)-ROOT) ;
SUBDIR_TOKENS = $(SUBDIR_DOWN) ;
SUBDIR = [ FSubDirPath $(<) ] ;
# Now set up SEARCH_SOURCE, LOCATE_TARGET, SOURCE_GRIST
# These can be reset if needed. For example, if the source
# directory should not hold object files, LOCATE_TARGET can
# subsequently be redefined.
SEARCH_SOURCE = $(SUBDIR) ;
LOCATE_SOURCE = $(ALL_LOCATE_TARGET) $(SUBDIR) ;
LOCATE_TARGET = $(ALL_LOCATE_TARGET) $(SUBDIR) ;
SOURCE_GRIST = [ FGrist $(SUBDIR_TOKENS) ] ;
# Reset per-directory ccflags, hdrs, etc,
# listed in SUBDIRRESET.
# Note use of variable expanded assignment var
SUBDIR$(SUBDIRRESET) = ;
# Invoke user-specific SubDir extensions,
# rule names listed in SUBDIRRULES.
# Note use of variable expanded rule invocation
$(SUBDIRRULES) $(<) ;
}
rule FSubDirPath
{
# FSubDirPath TOP d1 ... ;
# Returns path to named directory.
# If jam is invoked in a subdirectory of the TOP, then we
# need to prepend a ../ for every level we must climb up
# (TOP-UP), and then append the directory names we must
# climb down (TOP-DOWN), plus the named directories d1 ...
# If TOP was set externally, or computed from another TOP
# that was, we'll have to reroot the whole thing at TOP-ROOT.
local _r = [ FRelPath $($(<[1])-UP) : $($(<[1])-DOWN) $(<[2-]) ] ;
return $(_r:R=$($(<[1])-ROOT)) ;
}
rule SubInclude
{
# SubInclude TOP d1 ... ;
#
# Include a subdirectory's Jamfile.
# We use SubDir to get there, in case the included Jamfile
# either doesn't have its own SubDir (naughty) or is a subtree
# with its own TOP.
if ! $($(<[1]))
{
Exit SubInclude $(<[1]) without prior SubDir $(<[1]) ;
}
SubDir $(<) ;
include $(JAMFILE:D=$(SUBDIR)) ;
}
rule SubRules
{
# SubRules TOP d1 ... : Other-TOP ;
#
# Read another tree's Jamrules, by giving it's path according
# to this tree and it's own name.
if ! $($(<[1]))
{
Exit SubRules $(<[1]) without prior SubDir $(<[1]) ;
}
SubDir $(<) ;
SubDir $(>) ;
}
## Now we try to fix up the already messed settings
## XXX We can only hope that Jam 2.4 users don't try starting Jam from
## subdirectories
TOP-SET = true ;
TOP-UP = ;
TOP-DOWN = ;
TOP-ROOT = $(TOP) ;
SUBDIR_UP = $(TOP-UP) ;
SUBDIR_DOWN = ;
SUBDIR_ROOT = $(TOP-ROOT) ;
#SubDir TOP ;
} # end if $(JAMVERSION) = 2.4

View File

@@ -1,314 +1,323 @@
#============================================================================
# Rules for library creation
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# Suppress ar's noisy report that it created the archive we asked it to create.
if $(AR) && $(AR[2]) = ru { AR = $(AR[1]) ruc ; }
## Library libname : sources [ : options ]
## Build a library out of sourcefiles. All sourcefiles will be passed
## to the Objects rule which tries to compile them into object-files. You
## can create rules for your own filetypes with the UserObject rule. Header
## files will just be ignored. They are only used for MSVC projectfile
## generation.
## Available options are 'shared' if you want to build a shared library on
## platforms which support that. You can specify the 'noinstall' option if
## you don't want an install target generated.
## Don't specify any extensions for the library name, also leave out the
## leading "lib".
## Options:
## noinstall: Do not set up a default installation target.
## independent: The target will not be made a dependency of the libs and
## all targets.
## shared: Create as a shared library on supported platforms.
## nohelp: Do not invoke Help for this target.
## notest: Do not set up unit-testing support for this target.
## optional: Affects handling of the library in cs-config; it is only
## reported as available when actually built.
rule Library
{
local options = $(3) ;
CheckOptions noinstall independent shared nohelp notest optional : $(options) : $(<) ;
local target = [ ConstructLibraryTarget $(<) : $(options) ] ;
local sources = [ DoSourceGrist $(>) ] ;
local objects ;
local i ;
for i in $(sources)
{
if $(i:S) = $(SUFOBJ)
{
objects += $(i) ;
}
else
{
objects += [ CompileObjects $(i) ] ;
}
}
$(<)_TYPE = library ;
$(<)_OBJECTS = $(objects) ;
$(<)_SOURCES = $(sources) ;
$(<)_TARGET = $(target) ;
# create target clean rule
Always $(<)clean ;
NotFile $(<)clean ;
Clean $(<)clean : $(objects) ; # create target clean rule
# so 'jam foo' works when it's really foo.exe (Windows) or foo.app (MacOS/X)
if $(target) != $(<)
{
Depends $(<) : $(target) ;
NotFile $(<) ;
}
# library depends on its member objects
if ! [ IsElem independent : $(options) ]
{
if $(KEEPOBJS)
{
Depends obj : $(objects) ;
}
else
{
Depends libs : $(<) ;
}
}
if ( ! [ IsElem shared : $(options) ] ) || ( $(BUILD_SHARED_LIBS) != "yes" )
{
$(<)_SHARED = "" ;
LibraryStatic $(<) : $(objects) : [ Filter $(options) : shared ] :
$(target) ;
}
else
{
$(<)_SHARED = "shared" ;
LibraryShared $(<) : $(objects) : $(options) : $(target) ;
}
CFlags $(<) : $(LIBRARY.CFLAGS) ;
LFlags $(<) : $(LIBRARY.LFLAGS) ;
if ! [ IsElem nohelp : $(options) ]
{
local desc = [ Description $(<) ] ;
if ! $(desc) { desc = "$(<) library" ; }
Help $(<) : "Build the $(desc)" ;
}
if ! [ IsElem notest : $(options) ]
{
UnitTest $(<) ;
}
}
## LibDepends libname : dependant libraries
## Make Library dependant on other libraries. This will tell the build
## system that your library uses functions from other libraries in the
## project. Note that a library shouldn't be linked with any external
## library that should be done by the final application which uses the
## library.
rule LibDepends
{
$(<)_depends += $(>) ;
if "$($(<)_SHARED)"
{
LinkWith $(<) : $(>) ;
}
UnitTestLibDepends $(<) : $(>) ;
}
#----------------------------------------------------------------------------
# private part
# LibraryStatic libname : sources : options : decoratedtarget
rule LibraryStatic
{
local objects = $(>) ;
local options = $(3) ;
local target = $(4) ;
# Set LOCATE for the library and its contents. The bound
# value shows up as $(NEEDLIBS) on the Link actions.
# For compatibility, we only do this if the library doesn't
# already have a path.
if ! $(target:D)
{
MakeLocate $(target) $(target)($(objects:BS)) : $(LOCATE.OBJECTS)/libs ;
}
if $(NOARSCAN)
{
# If we can't scan the library to timestamp its contents,
# we have to just make the library depend directly on the
# on-disk object files.
Depends $(target) : $(objects) ;
}
else
{
# If we can scan the library, we make the library depend
# on its members and each member depend on the on-disk
# object file.
Depends $(target) : $(target)($(objects:BS)) ;
local i ;
for i in $(objects)
{
Depends $(target)($(i:BS)) : $(i) ;
}
}
# Generate install rules
if ! [ IsElem noinstall : $(options) ]
{
if "$(RANLIB)"
{
Depends install_lib : [ DoInstall $(target) : $(libdir) : : Ranlib ] ;
}
else
{
Depends install_lib : [ DoInstall $(target) : $(libdir) ] ;
}
# Add to global library list
if [ IsElem optional : $(options) ]
{
INSTALLEDLIBS_OPTIONAL += $(<) ;
}
else
{
INSTALLEDLIBS += $(<) ;
}
}
if $(CRELIB)
{
CreLib $(target) : $(objects[1]) ;
}
Archive $(target) : $(objects) ;
Clean $(<)clean : $(target) ;
Depends clean : $(<)clean ;
if $(RANLIB)
{
Ranlib $(target) ;
}
# If we can't scan the library, we have to leave the .o's around.
if ! ( $(NOARSCAN) || $(NOARUPDATE) || $(KEEPOBJS) )
{
RmTemps $(target) : $(objects) ;
}
}
# LibraryStatic libname : sources : options : decoratedtarget
rule LibraryShared
{
local objects = $(>) ;
local options = $(3) ;
local target = $(4) ;
local linklib = [ ConstructSharedLibraryLinkLib $(<) : $(options) ] ;
local deplibs ;
local i ;
for i in $(LIBDEPENDS)
{
deplibs += [ ConstructLibraryLinkTarget $(i) : $(options) ] ;
}
# Generate install rules
if ! [ IsElem noinstall : $(options) ]
{
if $(TARGET.OS) != WIN32
{
Depends install_lib : [ DoInstall $(target) : $(libdir) ] ;
}
else
{
Depends install_lib : [ DoInstall $(target) : $(bindir) ] ;
Depends install_lib : [ DoInstall $(linklib) : $(libdir) ] ;
}
# Add to global library list
if [ IsElem optional : $(options) ]
{
INSTALLEDLIBS_OPTIONAL += $(<) ;
}
else
{
INSTALLEDLIBS += $(<) ;
}
}
Depends $(<) : $(linklib) ;
if $(linklib) != $(target)
{
Depends $(linklib) : $(target) ;
MakeLocate $(linklib) : $(LOCATE.OBJECTS)/libs ;
SEARCH on $(linklib) = $(LOCATE.OBJECTS)/libs ;
}
Depends $(target) : $(objects) ;
Clean $(<)clean : $(linklib) $(target) ;
Depends clean : $(<)clean ;
Depends $(target) : $(deplibs) ;
CFlags $(<) : [ FDefines CS_$(<:U)_LIB ] ;
LFlags $(<) : $(LINKLIBS) ;
SystemLinkSharedLibrary $(target) : $(objects) $(deplibs) : $(linklib) ;
}
rule ConstructLibraryTarget
{
if ( ! [ IsElem shared : $(>) ] ) || ( $(BUILD_SHARED_LIBS) != "yes" )
{
return [ ConstructStaticLibraryTarget $(<) : [ Filter $(>) : shared ] ] ;
}
else
{
return [ ConstructSharedLibraryTarget $(<) : $(>) ] ;
}
}
rule ConstructLibraryLinkTarget
{
if ( ! [ IsElem shared : $(>) ] ) || ( $(BUILD_SHARED_LIBS) != "yes" )
{
return [ ConstructStaticLibraryTarget $(<) : [ Filter $(>) : shared ] ] ;
}
else
{
return [ ConstructSharedLibraryLinkLib $(<) : $(>) ] ;
}
}
actions together Ranlib
{
$(RANLIB) $(<)
}
# Construct pseudo target libs which is used instead of the pseudo target lib
# in Jambase
Depends lib : libs ;
NotFile libs ;
Help libs : "Build all link libraries" ;
#============================================================================
# Rules for library creation
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# Suppress ar's noisy report that it created the archive we asked it to create.
if $(AR) && $(AR[2]) = ru { AR = $(AR[1]) ruc ; }
## Library libname : sources [ : options ]
## Build a library out of sourcefiles. All sourcefiles will be passed
## to the Objects rule which tries to compile them into object-files. You
## can create rules for your own filetypes with the UserObject rule. Header
## files will just be ignored. They are only used for MSVC projectfile
## generation.
## Available options are 'shared' if you want to build a shared library on
## platforms which support that. You can specify the 'noinstall' option if
## you don't want an install target generated.
## Don't specify any extensions for the library name, also leave out the
## leading "lib".
## Options:
## noinstall: Do not set up a default installation target.
## independent: The target will not be made a dependency of the libs and
## all targets.
## shared: Create as a shared library on supported platforms.
## nohelp: Do not invoke Help for this target.
## notest: Do not set up unit-testing support for this target.
## optional: Affects handling of the library in cs-config; it is only
## reported as available when actually built.
rule Library
{
local options = $(3) ;
CheckOptions noinstall independent shared nohelp notest optional : $(options) : $(<) ;
local target = [ ConstructLibraryTarget $(<) : $(options) ] ;
local sources = [ DoSourceGrist $(>) ] ;
local objects ;
local i ;
for i in $(sources)
{
if $(i:S) = $(SUFOBJ)
{
objects += $(i) ;
}
else
{
objects += [ CompileObjects $(i) ] ;
}
}
$(<)_TYPE = library ;
$(<)_OBJECTS = $(objects) ;
$(<)_SOURCES = $(sources) ;
$(<)_TARGET = $(target) ;
# so 'jam foo' works when it's really foo.exe (Windows) or foo.app (MacOS/X)
if $(target) != $(<)
{
Depends $(<) : $(target) ;
NotFile $(<) ;
}
# library depends on its member objects
if ! [ IsElem independent : $(options) ]
{
if $(KEEPOBJS)
{
Depends obj : $(objects) ;
}
else
{
Depends libs : $(<) ;
}
}
if ( ! [ IsElem shared : $(options) ] ) || ( $(BUILD_SHARED_LIBS) != "yes" )
{
$(<)_SHARED = "" ;
LibraryStatic $(<) : $(objects) : [ Filter $(options) : shared ] :
$(target) ;
}
else
{
$(<)_SHARED = "shared" ;
LibraryShared $(<) : $(objects) : $(options) : $(target) ;
}
CFlags $(<) : $(LIBRARY.CFLAGS) ;
LFlags $(<) : $(LIBRARY.LFLAGS) ;
# create target clean rule
Always $(<)clean ;
NotFile $(<)clean ;
Clean $(<)clean : $(objects) $($(<)_CLEANEXTRA) ;
Clean clean : $($(<)_CLEANEXTRA) ;
if ! [ IsElem nohelp : $(options) ]
{
local desc = [ Description $(<) ] ;
if ! $(desc) { desc = "$(<) library" ; }
Help $(<) : "Build the $(desc)" ;
}
if ! [ IsElem notest : $(options) ]
{
UnitTest $(<) ;
}
}
## LibDepends libname : dependant libraries
## Make Library dependant on other libraries. This will tell the build
## system that your library uses functions from other libraries in the
## project. Note that a library shouldn't be linked with any external
## library that should be done by the final application which uses the
## library.
rule LibDepends
{
$(<)_depends += $(>) ;
if "$($(<)_SHARED)"
{
LinkWith $(<) : $(>) ;
}
UnitTestLibDepends $(<) : $(>) ;
}
#----------------------------------------------------------------------------
# private part
# LibraryStatic libname : sources : options : decoratedtarget
rule LibraryStatic
{
local objects = $(>) ;
local options = $(3) ;
local target = $(4) ;
# Set LOCATE for the library and its contents. The bound
# value shows up as $(NEEDLIBS) on the Link actions.
# For compatibility, we only do this if the library doesn't
# already have a path.
if ! $(target:D)
{
MakeLocate $(target) $(target)($(objects:BS)) : $(LOCATE.OBJECTS)/libs ;
}
if $(NOARSCAN)
{
# If we can't scan the library to timestamp its contents,
# we have to just make the library depend directly on the
# on-disk object files.
Depends $(target) : $(objects) ;
}
else
{
# If we can scan the library, we make the library depend
# on its members and each member depend on the on-disk
# object file.
Depends $(target) : $(target)($(objects:BS)) ;
local i ;
for i in $(objects)
{
Depends $(target)($(i:BS)) : $(i) ;
}
}
# Generate install rules
if ! [ IsElem noinstall : $(options) ]
{
if "$(RANLIB)"
{
Depends install_lib : [ DoInstall $(target) : $(libdir) : : Ranlib ] ;
}
else
{
Depends install_lib : [ DoInstall $(target) : $(libdir) ] ;
}
# Add to global library list
if [ IsElem optional : $(options) ]
{
INSTALLEDLIBS_OPTIONAL += $(<) ;
}
else
{
INSTALLEDLIBS += $(<) ;
}
}
if $(CRELIB)
{
CreLib $(target) : $(objects[1]) ;
}
Archive $(target) : $(objects) ;
if $(RANLIB)
{
Ranlib $(target) ;
}
# If we can't scan the library, we have to leave the .o's around.
if ! ( $(NOARSCAN) || $(NOARUPDATE) || $(KEEPOBJS) )
{
RmTemps $(target) : $(objects) ;
}
}
# LibraryStatic libname : sources : options : decoratedtarget
rule LibraryShared
{
local objects = $(>) ;
local options = $(3) ;
local target = $(4) ;
local linklib = [ ConstructSharedLibraryLinkLib $(<) : $(options) ] ;
local deplibs ;
local i ;
for i in $(LIBDEPENDS)
{
deplibs += [ ConstructLibraryLinkTarget $(i) : $(options) ] ;
}
# Generate install rules
if ! [ IsElem noinstall : $(options) ]
{
if $(TARGET.OS) != WIN32
{
Depends install_lib : [ DoInstall $(target) : $(libdir) ] ;
}
else
{
Depends install_lib : [ DoInstall $(target) : $(bindir) ] ;
Depends install_lib : [ DoInstall $(linklib) : $(libdir) ] ;
}
# Add to global library list
if [ IsElem optional : $(options) ]
{
INSTALLEDLIBS_OPTIONAL += $(<) ;
}
else
{
INSTALLEDLIBS += $(<) ;
}
}
Depends $(<) : $(linklib) ;
if $(linklib) != $(target)
{
Depends $(linklib) : $(target) ;
MakeLocate $(linklib) : $(LOCATE.OBJECTS)/libs ;
SEARCH on $(linklib) = $(LOCATE.OBJECTS)/libs ;
}
Depends $(target) : $(objects) ;
$(<)_CLEANEXTRA += $(target) ;
Depends $(target) : $(deplibs) ;
CFlags $(<) : [ FDefines CS_$(<:U)_LIB ] ;
LFlags $(<) : $(LINKLIBS) ;
SystemLinkSharedLibrary $(target) : $(objects) $(deplibs) : $(linklib) ;
if $(LINK.DEBUG.INFO.SEPARATE) = "yes"
{
local debugfile = [ SplitDebugInfo $(target) ] ;
$(<)_CLEANEXTRA += $(debugfile) ;
if ! [ IsElem noinstall : $(options) ]
{
NoCare $(debugfile) ;
Depends install_lib : [ DoInstall $(debugfile) : $(libdir) : $(INSTALL_DATA) ] ;
}
}
}
rule ConstructLibraryTarget
{
if ( ! [ IsElem shared : $(>) ] ) || ( $(BUILD_SHARED_LIBS) != "yes" )
{
return [ ConstructStaticLibraryTarget $(<) : [ Filter $(>) : shared ] ] ;
}
else
{
return [ ConstructSharedLibraryTarget $(<) : $(>) ] ;
}
}
rule ConstructLibraryLinkTarget
{
if ( ! [ IsElem shared : $(>) ] ) || ( $(BUILD_SHARED_LIBS) != "yes" )
{
return [ ConstructStaticLibraryTarget $(<) : [ Filter $(>) : shared ] ] ;
}
else
{
return [ ConstructSharedLibraryLinkLib $(<) : $(>) ] ;
}
}
actions together Ranlib
{
$(RANLIB) $(<)
}
# Construct pseudo target libs which is used instead of the pseudo target lib
# in Jambase
Depends lib : libs ;
NotFile libs ;
Help libs : "Build all link libraries" ;

View File

@@ -1,354 +1,354 @@
#==============================================================================
# Jam configuration and actions for MacOS/X
# Copyright (C) 2003-2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
SHELL ?= "/bin/sh" ;
MACOSX_ENVIRONMENT = "export MACOSX_DEPLOYMENT_TARGET=10.2" ;
PLUGIN.LFLAGS += "-bundle" ;
# We use the ugly -Wl form, which does not contain embedded whitespace (unlike
# "-framework AppKit"), to help external projects which use the result of
# "cs-config --libs" in conjunction with GNU libtool, since libtool likes to
# re-arrange arguments, not realizing that "-framwork" and "AppKit" need to
# stay together.
LINKLIBS += "-Wl,-framework,AppKit" "-Wl,-framework,Foundation" ;
# Jambase in Jam 2.4 has a bug where it incorrectly defines RANLIB as "" for
# MacOS/X, and this bogus value will override a RANLIB set via ?= in Jamconfig,
# by a configure script, thus we must give RANLIB an appropriate value here if
# we find that it has the bogus value. Jam 2.5 does not contain this bug.
# Furthermore, MacOS/X Panther expects us to use the -s option with ranlib.
if ! $(RANLIB) { RANLIB = "ranlib" ; }
RANLIB += "-s" ;
# Experience seems to indicate that library scanning misbehaves on MacOS/X with
# Jam 2.4, consequently we disable it.
NOARSCAN = true ;
#------------------------------------------------------------------------------
# Public rules.
#------------------------------------------------------------------------------
# ConstructApplicationTarget target : options
# Constructs the application target name.
rule ConstructApplicationTarget
{
return $(<) ;
}
# ConstructStaticLibraryTarget target : options
# Constructs the static library target name.
rule ConstructStaticLibraryTarget
{
return lib$(<)$(SUFLIB) ;
}
# ConstructSharedLibraryTarget target : options
# Constructs the shared library target name.
rule ConstructSharedLibraryTarget
{
return lib$(<).$(PACKAGE_VERSION).dylib ;
}
# ConstructSharedLibraryLinkLib target : options
# Constructs the name of a shared library against which some other target
# links.
rule ConstructSharedLibraryLinkLib
{
return lib$(<).$(PACKAGE_VERSION).dylib ;
}
# ConstructPluginTarget target : options
# Constructs the plugin target name.
rule ConstructPluginTarget
{
return $(<).csbundle ;
}
# SystemLinkApplication target : objects : options
# Apply appropriate rule to link the application based upon the options.
rule SystemLinkApplication
{
local target = $($(<)_TARGET) ;
Depends $(target) : $(>) ;
if [ IsElem console : $(3) ]
{
LinkApplicationConsole $(target) : $(>) ;
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
}
else
{
CreateApplicationWrapper $(target) : $(>) ;
CleanDir clean : [ Wrapper $(<) : app ] ;
CleanDir $(<)clean : [ Wrapper $(<) : app ] ;
}
}
# SystemInstallApplication target : subdirs : options
# Apply appropriate rule to install the application based upon the options.
rule SystemInstallApplication
{
if [ IsElem console : $(3) ]
{
Depends install_bin :
[ DoInstall $(<) : $(bindir) $(2) : $(INSTALL_PROGRAM) ] ;
}
else
{
InstallApplicationGUI $(<) : $(bindir) $(2) ;
}
}
# SystemInstallPlugin target : subdirs : options
# Apply appropriate rule to install the plugin based upon the options.
rule SystemInstallPlugin
{
Depends install_plugin :
[ DoInstall $(<) : $(plugindir) $(2) : $(INSTALL_PROGRAM) ] ;
}
# SystemLinkPlugin target : objects : options
# Link a plugin module and handle meta-data appropriately.
rule SystemLinkPlugin
{
local target = $($(<)_TARGET) ;
Depends $(target) : $(>) ;
LinkPlugin $(target) : $(>) ;
PluginMetaData $(<) : $($(<)_METAFILE) : $(3) ;
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
}
# LinkPlugin plugin : objects
# Link a plugin module from a set of object files.
actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS
{
$(MACOSX_ENVIRONMENT)
$(CMD.LINK) -bundle -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
# LinkApplicationConsole exe : objects
# Link a console (non-GUI) appliation from a set of object files.
actions LinkApplicationConsole bind NEEDLIBS bind EXTRAOBJECTS
{
$(MACOSX_ENVIRONMENT)
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
# CreateApplicationWrapper basename : objects
# Create a complete, though minimal, application wrapper given a set of
# object files. The rules ApplicationIconDefault and ApplicationIcon
# control the icon associated with the application wrapper.
rule CreateApplicationWrapper
{
WrapFile $(<) : $(<) : Contents MacOS : AppExe : $(>) ;
WrapFile $(<) : PkgInfo : Contents : AppPkgInfo : $(>) ;
WrapFile $(<) : version.plist : Contents : AppVersionPlist : $(>) ;
WrapFile $(<) : Info.plist : Contents : AppInfoPlist : $(>) ;
WrapFile $(<) : InfoPlist.strings : Contents Resources English.lproj :
AppInfoPlistStrings : $(>) ;
local icon = [ ApplicationIcon macosx : $(<) ] ;
if ! $(icon)
{
local apptype = gui ;
if [ IsElem console : $(>) ] { apptype = console ; }
icon = [ ApplicationIconDefault macosx : $(apptype) ] ;
}
if $(icon)
{
$(<)_APPICON = $(icon) ;
AppIcon $(<) : $(icon) ;
}
}
# Wrapper basename : suffix [ : pathcomponents ]
# Returns wrapper name in the directory specified by pathcomponents for
# the given basename. If pathcomponents is omitted, LOCATE.TARGETS is
# used.
rule Wrapper
{
local dir ;
if $(3) { dir = [ FDirName $(3) ] ; }
else { dir = $(LOCATE.TARGETS) ; }
return [ FDirName $(dir) $(1).$(2) ] ;
}
# WrapFile basename : file : pathcomponents : rule [ : objects : [ suffix ] ]
# Generate a file within a wrapper. pathcomponents is a list of names
# which compose the relative path within the wrapper where file should be
# placed. pathcomponents may be the empty list if the file should reside
# at the top-level of the wrapper. rule is rule/action which should be
# invoked to generate file. rule is invoked with arguments
# <basename.suffix/pathcomponents/file>, <objects>, and <basename>.
# objects is an optional list of files from which file should be built. It
# may be omitted if file does not depend upon any other files. suffix is
# the extension of the wrapper (not of file). If suffix is omitted, "app"
# is assumed.
#
# Implementation note: If basename and file are the same, then we do not
# grist file. (Obviously, we also do not want to set the file dependent
# upon itself.) The reason we do not grist file in this case is that the
# LinkWith, and LFlags rules associate the variables NEEDLIBS and
# LINKLIBS with the ungristed name, therefore in order to get access to
# these variables at AppExe action time, we must use the same (ungristed)
# name. It is otherwise impossible to gain access to those variables.
# This is an unfortunate hack which pollutes the otherwise general-purpose
# WrapFile rule.
rule WrapFile
{
local suffix ;
if $(6) { suffix = $(6) ; } else { suffix = app ; }
local target = $(2) ;
if $(target) != $(1)
{
target = $(target:G=$(1)) ;
Depends $(1) : $(target) ;
}
local dir = [ FDirName [ Wrapper $(1) : $(suffix) ] $(3) ] ;
MakeLocate $(target) : $(dir) ;
if $(5) { Depends $(target) : $(5) ; }
BASENAME on $(target) = $(1) ;
$(4) $(target) : $(5) : $(1) ;
Clean clean : [ FDirName $(dir) $(target) ] ;
Clean $(1)clean : [ FDirName $(dir) $(target) ] ;
}
# LinkApplication exe : objects
actions AppExe bind NEEDLIBS bind EXTRAOBJECTS
{
$(MACOSX_ENVIRONMENT)
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
# AppPkgInfo file
actions AppPkgInfo
{
echo 'APPL????' > $(<) ;
}
# AppInfoPlistStrings file
actions AppInfoPlistStrings
{
cat << EOT > $(<)
CFBundleName = "$(BASENAME)";
CFBundleShortVersionString = "$(PACKAGE_VERSION)";
CFBundleGetInfoString = "$(BASENAME), $(PACKAGE_VERSION)";
EOT
}
# AppVersionPlist file
actions AppVersionPlist
{
cat << EOT > $(<)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
<key>CFBundleShortVersionString</key>
<string>$(PACKAGE_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(PACKAGE_VERSION)</string>
<key>ProjectName</key>
<string>$(BASENAME)</string>
</dict>
</plist>
EOT
}
# AppInfoPlist filename : placeholder : basename
# Implementation Note: $(BASENAME)_APPICON might be empty in the actions of
# this rule, if the client did not specify a default icon or a
# target-specific icon, in which case we need to omit both the
# CFBundleIconFile key and value. To accomplish this, the key and value
# are placed on a single line with no intervening whitespace. When Jam
# interpolates a variable, if the variable is empty, it removes all
# adjacent text (the key and value, in this case) which is just what we
# desire.
actions AppInfoPlist
{
cat << EOT > $(<)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleName</key>
<string>$(BASENAME)</string>
<key>CFBundleExecutable</key>
<string>$(BASENAME)</string>
<key>CFBundleIconFile</key><string>$($(BASENAME)_APPICON)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0</string>
<key>CFBundleShortVersionString</key>
<string>$(PACKAGE_VERSION)</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
EOT
}
# AppIcon <basename> : <icon>
# Copy an icon into the wrapper. It is assumed that some other agent has
# already set SEARCH on the icon, if necessary.
rule AppIcon
{
local icon = $(>:G=$(<)) ;
Depends $(<) : $(icon) ;
Depends $(icon) : $(>) ;
MakeLocate $(icon) :
[ FDirName [ Wrapper $(<) : app ] Contents Resources ] ;
Copy $(icon) : $(>) ;
Clean clean : $(icon) ;
Clean $(<)clean : $(icon) ;
}
# InstallApplicationGUI app : installdirs
# Install a GUI application. Unlike applications on other platforms which
# exist as a single executable file, on MacOS/X, an application is wrapped
# in a directory hierarchy, thus a deep copy is needed (i.e. the typical
# Install rule does not work).
rule InstallApplicationGUI
{
local wrapper = $(<).app ;
Depends $(wrapper) : $(<) ;
SEARCH on $(wrapper) = $(LOCATE.TARGETS) ;
# Yuck! Internal knowledge of how DoInstall composes 'dir' and 'target'.
local dir = [ ConcatDirs $(DESTDIR) $(2) ] ;
local target = $(wrapper:BSR=$(dir):G=install) ;
InstallApplicationWrapperPrepare $(target) ;
Depends install_bin :
[ DoInstall $(wrapper) : $(2) : "$(DEEPCOPY)" ] ;
}
actions InstallApplicationWrapperPrepare
{
$(DELTREE) $(<) ;
}
#==============================================================================
# Jam configuration and actions for MacOS/X
# Copyright (C) 2003-2005 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
SHELL ?= "/bin/sh" ;
MACOSX_ENVIRONMENT = "export MACOSX_DEPLOYMENT_TARGET=10.2" ;
PLUGIN.LFLAGS += "-bundle" ;
# We use the ugly -Wl form, which does not contain embedded whitespace (unlike
# "-framework AppKit"), to help external projects which use the result of
# "cs-config --libs" in conjunction with GNU libtool, since libtool likes to
# re-arrange arguments, not realizing that "-framwork" and "AppKit" need to
# stay together.
LINKLIBS += "-Wl,-framework,AppKit" "-Wl,-framework,Foundation" ;
# Jambase in Jam 2.4 has a bug where it incorrectly defines RANLIB as "" for
# MacOS/X, and this bogus value will override a RANLIB set via ?= in Jamconfig,
# by a configure script, thus we must give RANLIB an appropriate value here if
# we find that it has the bogus value. Jam 2.5 does not contain this bug.
# Furthermore, MacOS/X Panther expects us to use the -s option with ranlib.
if ! $(RANLIB) { RANLIB = "ranlib" ; }
RANLIB += "-s" ;
# Experience seems to indicate that library scanning misbehaves on MacOS/X with
# Jam 2.4, consequently we disable it.
NOARSCAN = true ;
#------------------------------------------------------------------------------
# Public rules.
#------------------------------------------------------------------------------
# ConstructApplicationTarget target : options
# Constructs the application target name.
rule ConstructApplicationTarget
{
return $(<) ;
}
# ConstructStaticLibraryTarget target : options
# Constructs the static library target name.
rule ConstructStaticLibraryTarget
{
return lib$(<)$(SUFLIB) ;
}
# ConstructSharedLibraryTarget target : options
# Constructs the shared library target name.
rule ConstructSharedLibraryTarget
{
return lib$(<).$(PACKAGE_VERSION).dylib ;
}
# ConstructSharedLibraryLinkLib target : options
# Constructs the name of a shared library against which some other target
# links.
rule ConstructSharedLibraryLinkLib
{
return lib$(<).$(PACKAGE_VERSION).dylib ;
}
# ConstructPluginTarget target : options
# Constructs the plugin target name.
rule ConstructPluginTarget
{
return $(<).csbundle ;
}
# SystemLinkApplication target : objects : options
# Apply appropriate rule to link the application based upon the options.
rule SystemLinkApplication
{
local target = $($(<)_TARGET) ;
Depends $(target) : $(>) ;
if [ IsElem console : $(3) ]
{
LinkApplicationConsole $(target) : $(>) ;
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
}
else
{
CreateApplicationWrapper $(target) : $(>) ;
CleanDir clean : [ Wrapper $(<) : app ] ;
CleanDir $(<)clean : [ Wrapper $(<) : app ] ;
}
}
# SystemInstallApplication target : subdirs : options
# Apply appropriate rule to install the application based upon the options.
rule SystemInstallApplication
{
if [ IsElem console : $(3) ]
{
Depends install_bin :
[ DoInstall $(<) : $(bindir) $(2) : $(INSTALL_PROGRAM) ] ;
}
else
{
InstallApplicationGUI $(<) : $(bindir) $(2) ;
}
}
# SystemInstallPlugin target : subdirs : options
# Apply appropriate rule to install the plugin based upon the options.
rule SystemInstallPlugin
{
Depends install_plugin :
[ DoInstall $(<) : $(plugindir) $(2) : $(INSTALL_PROGRAM) ] ;
}
# SystemLinkPlugin target : objects : options
# Link a plugin module and handle meta-data appropriately.
rule SystemLinkPlugin
{
local target = $($(<)_TARGET) ;
Depends $(target) : $(>) ;
LinkPlugin $(target) : $(>) ;
PluginMetaData $(<) : $($(<)_METAFILE) : $(3) ;
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
}
# LinkPlugin plugin : objects
# Link a plugin module from a set of object files.
actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS
{
$(MACOSX_ENVIRONMENT)
$(CMD.LINK) -bundle -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
# LinkApplicationConsole exe : objects
# Link a console (non-GUI) appliation from a set of object files.
actions LinkApplicationConsole bind NEEDLIBS bind EXTRAOBJECTS
{
$(MACOSX_ENVIRONMENT)
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
# CreateApplicationWrapper basename : objects
# Create a complete, though minimal, application wrapper given a set of
# object files. The rules ApplicationIconDefault and ApplicationIcon
# control the icon associated with the application wrapper.
rule CreateApplicationWrapper
{
WrapFile $(<) : $(<) : Contents MacOS : AppExe : $(>) ;
WrapFile $(<) : PkgInfo : Contents : AppPkgInfo : $(>) ;
WrapFile $(<) : version.plist : Contents : AppVersionPlist : $(>) ;
WrapFile $(<) : Info.plist : Contents : AppInfoPlist : $(>) ;
WrapFile $(<) : InfoPlist.strings : Contents Resources English.lproj :
AppInfoPlistStrings : $(>) ;
local icon = [ ApplicationIcon macosx : $(<) ] ;
if ! $(icon)
{
local apptype = gui ;
if [ IsElem console : $(>) ] { apptype = console ; }
icon = [ ApplicationIconDefault macosx : $(apptype) ] ;
}
if $(icon)
{
$(<)_APPICON = $(icon) ;
AppIcon $(<) : $(icon) ;
}
}
# Wrapper basename : suffix [ : pathcomponents ]
# Returns wrapper name in the directory specified by pathcomponents for
# the given basename. If pathcomponents is omitted, LOCATE.TARGETS is
# used.
rule Wrapper
{
local dir ;
if $(3) { dir = [ FDirName $(3) ] ; }
else { dir = $(LOCATE.TARGETS) ; }
return [ FDirName $(dir) $(1).$(2) ] ;
}
# WrapFile basename : file : pathcomponents : rule [ : objects : [ suffix ] ]
# Generate a file within a wrapper. pathcomponents is a list of names
# which compose the relative path within the wrapper where file should be
# placed. pathcomponents may be the empty list if the file should reside
# at the top-level of the wrapper. rule is rule/action which should be
# invoked to generate file. rule is invoked with arguments
# <basename.suffix/pathcomponents/file>, <objects>, and <basename>.
# objects is an optional list of files from which file should be built. It
# may be omitted if file does not depend upon any other files. suffix is
# the extension of the wrapper (not of file). If suffix is omitted, "app"
# is assumed.
#
# Implementation note: If basename and file are the same, then we do not
# grist file. (Obviously, we also do not want to set the file dependent
# upon itself.) The reason we do not grist file in this case is that the
# LinkWith, and LFlags rules associate the variables NEEDLIBS and
# LINKLIBS with the ungristed name, therefore in order to get access to
# these variables at AppExe action time, we must use the same (ungristed)
# name. It is otherwise impossible to gain access to those variables.
# This is an unfortunate hack which pollutes the otherwise general-purpose
# WrapFile rule.
rule WrapFile
{
local suffix ;
if $(6) { suffix = $(6) ; } else { suffix = app ; }
local target = $(2) ;
if $(target) != $(1)
{
target = $(target:G=$(1)) ;
Depends $(1) : $(target) ;
}
local dir = [ FDirName [ Wrapper $(1) : $(suffix) ] $(3) ] ;
MakeLocate $(target) : $(dir) ;
if $(5) { Depends $(target) : $(5) ; }
BASENAME on $(target) = $(1) ;
$(4) $(target) : $(5) : $(1) ;
Clean clean : [ FDirName $(dir) $(target) ] ;
Clean $(1)clean : [ FDirName $(dir) $(target) ] ;
}
# LinkApplication exe : objects
actions AppExe bind NEEDLIBS bind EXTRAOBJECTS
{
$(MACOSX_ENVIRONMENT)
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
# AppPkgInfo file
actions AppPkgInfo
{
echo 'APPL????' > $(<) ;
}
# AppInfoPlistStrings file
actions AppInfoPlistStrings
{
cat << EOT > $(<)
CFBundleName = "$(BASENAME)";
CFBundleShortVersionString = "$(PACKAGE_VERSION)";
CFBundleGetInfoString = "$(BASENAME), $(PACKAGE_VERSION)";
EOT
}
# AppVersionPlist file
actions AppVersionPlist
{
cat << EOT > $(<)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
<key>CFBundleShortVersionString</key>
<string>$(PACKAGE_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(PACKAGE_VERSION)</string>
<key>ProjectName</key>
<string>$(BASENAME)</string>
</dict>
</plist>
EOT
}
# AppInfoPlist filename : placeholder : basename
# Implementation Note: $(BASENAME)_APPICON might be empty in the actions of
# this rule, if the client did not specify a default icon or a
# target-specific icon, in which case we need to omit both the
# CFBundleIconFile key and value. To accomplish this, the key and value
# are placed on a single line with no intervening whitespace. When Jam
# interpolates a variable, if the variable is empty, it removes all
# adjacent text (the key and value, in this case) which is just what we
# desire.
actions AppInfoPlist
{
cat << EOT > $(<)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleName</key>
<string>$(BASENAME)</string>
<key>CFBundleExecutable</key>
<string>$(BASENAME)</string>
<key>CFBundleIconFile</key><string>$($(BASENAME)_APPICON)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0</string>
<key>CFBundleShortVersionString</key>
<string>$(PACKAGE_VERSION)</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
EOT
}
# AppIcon <basename> : <icon>
# Copy an icon into the wrapper. It is assumed that some other agent has
# already set SEARCH on the icon, if necessary.
rule AppIcon
{
local icon = $(>:G=$(<)) ;
Depends $(<) : $(icon) ;
Depends $(icon) : $(>) ;
MakeLocate $(icon) :
[ FDirName [ Wrapper $(<) : app ] Contents Resources ] ;
Copy $(icon) : $(>) ;
Clean clean : $(icon) ;
Clean $(<)clean : $(icon) ;
}
# InstallApplicationGUI app : installdirs
# Install a GUI application. Unlike applications on other platforms which
# exist as a single executable file, on MacOS/X, an application is wrapped
# in a directory hierarchy, thus a deep copy is needed (i.e. the typical
# Install rule does not work).
rule InstallApplicationGUI
{
local wrapper = $(<).app ;
Depends $(wrapper) : $(<) ;
SEARCH on $(wrapper) = $(LOCATE.TARGETS) ;
# Yuck! Internal knowledge of how DoInstall composes 'dir' and 'target'.
local dir = [ ConcatDirs $(DESTDIR) $(2) ] ;
local target = $(wrapper:BSR=$(dir):G=install) ;
InstallApplicationWrapperPrepare $(target) ;
Depends install_bin :
[ DoInstall $(wrapper) : $(2) : "$(DEEPCOPY)" ] ;
}
actions InstallApplicationWrapperPrepare
{
$(DELTREE) $(<) ;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,80 +1,80 @@
#============================================================================
# Rules for compiling Objective-C and Objective-C++ files
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if $(CMD.OBJC)
{
rule ObjCRule
{
local object = [ DoObjectGrist [ PrefixSuffix $(>)_ : $(<) : $(SUFOBJ) ] ] ;
ObjC $(object) : $(<) ;
return $(object) ;
}
RegisterFileType ObjCRule : .m ;
RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .m ;
rule ObjC
{
Depends $(<) : $(>) ;
CCFLAGS on $(<) += $(CCFLAGS) $(SUBDIRCCFLAGS) ;
OBJCFLAGS on $(<) += $(OBJCFLAGS) ;
CCHDRS on $(<) = [ on $(<) FIncludes $(HDRS) ] ;
CCDEFS on $(<) = [ on $(<) FDefines $(DEFINES) ] ;
}
actions ObjC
{
$(CMD.OBJC) -c -o $(<) $(CCHDRS) $(CCFLAGS) $(OBJCFLAGS) $(CCDEFS) $(>)
}
}
if $(CMD.OBJC++)
{
rule ObjC++Rule
{
local object = [ DoObjectGrist [ PrefixSuffix $(>)_ : $(<) : $(SUFOBJ) ] ] ;
ObjC++ $(object) : $(<) ;
return $(object) ;
}
RegisterFileType ObjC++Rule : .mm .M ;
RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .mm .M ;
rule ObjC++
{
Depends $(<) : $(>) ;
# Ugly hack: Apple's gcc4 does not accept -fvisibility-inlines-hidden in
# Objective-C++ mode. Ideally, this issue should be resolved by the
# configure script, but it does not currently distinguish between flags
# intended for the C++ compiler and those intended for the Objective-C++
# compiler.
local rejects = -fvisibility-inlines-hidden ;
C++FLAGS on $(<) += [ Filter $(C++FLAGS) $(SUBDIRC++FLAGS) : $(rejects) ] ;
OBJC++FLAGS on $(<) += [ Filter $(OBJC++FLAGS) : $(rejects) ] ;
CCHDRS on $(<) = [ on $(<) FIncludes $(HDRS) ] ;
CCDEFS on $(<) = [ on $(<) FDefines $(DEFINES) ] ;
}
actions ObjC++
{
$(CMD.OBJC++) -c -o $(<) $(CCHDRS) $(C++FLAGS) $(OBJC++FLAGS) $(CCDEFS) $(>)
}
}
#============================================================================
# Rules for compiling Objective-C and Objective-C++ files
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if $(CMD.OBJC)
{
rule ObjCRule
{
local object = [ DoObjectGrist [ PrefixSuffix $(>)_ : $(<) : $(SUFOBJ) ] ] ;
ObjC $(object) : $(<) ;
return $(object) ;
}
RegisterFileType ObjCRule : .m ;
RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .m ;
rule ObjC
{
Depends $(<) : $(>) ;
CCFLAGS on $(<) += $(CCFLAGS) $(SUBDIRCCFLAGS) ;
OBJCFLAGS on $(<) += $(OBJCFLAGS) ;
CCHDRS on $(<) = [ on $(<) FIncludes $(HDRS) ] ;
CCDEFS on $(<) = [ on $(<) FDefines $(DEFINES) ] ;
}
actions ObjC
{
$(CMD.OBJC) -c -o $(<) $(CCHDRS) $(CCFLAGS) $(OBJCFLAGS) $(CCDEFS) $(>)
}
}
if $(CMD.OBJC++)
{
rule ObjC++Rule
{
local object = [ DoObjectGrist [ PrefixSuffix $(>)_ : $(<) : $(SUFOBJ) ] ] ;
ObjC++ $(object) : $(<) ;
return $(object) ;
}
RegisterFileType ObjC++Rule : .mm .M ;
RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .mm .M ;
rule ObjC++
{
Depends $(<) : $(>) ;
# Ugly hack: Apple's gcc4 does not accept -fvisibility-inlines-hidden in
# Objective-C++ mode. Ideally, this issue should be resolved by the
# configure script, but it does not currently distinguish between flags
# intended for the C++ compiler and those intended for the Objective-C++
# compiler.
local rejects = -fvisibility-inlines-hidden ;
C++FLAGS on $(<) += [ Filter $(C++FLAGS) $(SUBDIRC++FLAGS) : $(rejects) ] ;
OBJC++FLAGS on $(<) += [ Filter $(OBJC++FLAGS) : $(rejects) ] ;
CCHDRS on $(<) = [ on $(<) FIncludes $(HDRS) ] ;
CCDEFS on $(<) = [ on $(<) FDefines $(DEFINES) ] ;
}
actions ObjC++
{
$(CMD.OBJC++) -c -o $(<) $(CCHDRS) $(C++FLAGS) $(OBJC++FLAGS) $(CCDEFS) $(>)
}
}

View File

@@ -1,250 +1,250 @@
#============================================================================
# Rules for compiling a set of sources to object files
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# These are slightly modified versions of the Object and Objects rules from
# jam. The problem with the original rules in Jambase is the handling of
# custom file types. The solution with the UserObject rule is monolithic, you
# can only have 1 such rule. Thus we construct a more flexible toolkit here
# which let's you register rules for certain filetypes.
## RegisterFileType Rulename : extensions
## Register a rule which is used to compile a filetype into object
## files. The registered rule is called with the name of the
## sourcefile as argument and should return a list of objectfiles which are
## created. You should set the grist of the object files by using the
## DoObjectGrist function.
rule RegisterFileType
{
local suffix ;
for suffix in $(>)
{
FILETYPE_$(suffix) = $(<) ;
}
}
## RegisterHeaderRule rulename : regexpattern : extensions
## Registers a rule and a regular expression which will be used for header
## file scanning of the specified extensions.
rule RegisterHeaderRule
{
local suffix ;
for suffix in $(3)
{
HDRRULE_$(suffix) = $(<) ;
HDRPATTERN_$(suffix) = $(>) ;
}
}
## CompileObjects sources [: objectfileprefix]
## Compile a set of sourcefiles into objectfiles (extension: SUFOBJ,
## usually .o). This rule takes care of setting the SEARCH and LOCATE
## variables to the values of $(SEARCH_SOURCE) and $(LOCATE_TARGET).
## The Application, Plugin and Library rules already use this rule
## internally. You should only use this rule if you have to avoid the
## Application, Plugin or Library rules.
rule CompileObjects
{
local source ;
local targets ;
# Search the source
SEARCH on $(<) = $(SEARCH_SOURCE) ;
for source in $(<)
{
# compile the sourcefile to targetfile
targets += [ CompileObject $(source) : $(>) ] ;
}
# locate the targets
MakeLocate $(targets) : $(LOCATE_TARGET) ;
return $(targets) ;
}
## PrefixSuffix [prefix] : filename : suffix
## Replaces the suffix of 'filename' with 'suffix' and prepends 'prefix' to
## it.
rule PrefixSuffix
{
local prefix = $(1) ;
local name = $(2) ;
local suffix = $(3) ;
if ! $(prefix) { prefix = "" ; }
return $(name:B=$(prefix)$(name:B):S=$(suffix)) ;
}
#----------------------------------------------------------------------------
# private part
# helper rule: Compiles a source file to an object file. Does header file
# scanning, sets LOCATE and SEARCH for source and target, grists the files
# with the current subdir and searches for the correct registered rule.
rule CompileObject
{
# handle #includes for source: Jam scans for headers with
# the regexp pattern $(HDRSCAN) and then invokes $(HDRRULE)
# with the scanned file as the target and the found headers
# as the sources. HDRSEARCH is the value of SEARCH used for
# the found header files. Finally, if jam must deal with
# header files of the same name in different directories,
# they can be distinguished with HDRGRIST.
# $(SEARCH_SOURCE:E) is where cc first looks for #include
# "foo.h" files. If the source file is in a distant directory,
# look there. Else, look in "" (the current directory).
if $(HDRRULE_$(<:S))
{
HDRSEARCH on $(<) =
$(SEARCH_SOURCE:E) $(SUBDIRHDRS) $(HDRS) $(STDHDRS) ;
HDRGRIST on $(<) = $(HDRGRIST) ;
HDRRULE on $(<) = $(HDRRULE_$(<:S)) ;
HDRSCAN on $(<) = $(HDRPATTERN_$(<:S)) ;
}
local targets ;
# Invoke filetype specific rule
if $(FILETYPE_$(<:S))
{
targets = [ $(FILETYPE_$(<:S)) $(<) : $(>) ] ;
}
else
{
echo Warning: no rules for file type $(<:S) defined (at file $(<)). ;
}
if $(targets)
{
# construct clean target
Clean clean : $(targets) ;
# Save HDRS for -I$(HDRS) on compile.
# We shouldn't need -I$(SEARCH_SOURCE) as cc can find headers
# in the .c file's directory, but generated .c files (from
# yacc, lex, etc) are located in $(LOCATE_TARGET), possibly
# different from $(SEARCH_SOURCE).
HDRS on $(<) = $(SEARCH_SOURCE) $(SUBDIRHDRS) $(HDRS) ;
# propagate target specific-defines
DEFINES on $(<) += $(DEFINES) ;
}
return $(targets) ;
}
## HeaderRule source : headers
## This rule is the default header rule used by the objects rules. You
## might register custom rules with the RegisterHeaderRule rule.
rule HeaderRule
{
# N.B. This rule is called during binding, potentially after
# the fate of many targets has been determined, and must be
# used with caution: don't add dependencies to unrelated
# targets, and don't set variables on $(<).
# Tell Jam that anything depending on $(<) also depends on $(>),
# set SEARCH so Jam can find the headers, but then say we don't
# care if we can't actually find the headers (they may have been
# within ifdefs),
local s = $(>:G=$(HDRGRIST:E)) ;
Includes $(<) : $(s) ;
SEARCH on $(s) = $(HDRSEARCH) ;
NoCare $(s) ;
local i ;
for i in $(s)
{
HDRGRIST on $(i) = $(HDRGRIST) ;
HDRSEARCH on $(i) = $(HDRSEARCH) ;
HDRRULE on $(i) = [ on $(<) GetVar HDRRULE ] ;
HDRSCAN on $(i) = [ on $(<) GetVar HDRPATTERN ] ;
}
}
if $(JAMVERSION) < 2.5
{
## XXX XXX XXX a bug in jam 2.4 let's the version above fail. I'll let this
## non-optimal version in here until jam 2.5 is out.
rule HeaderRule
{
local s = $(>:G=$(HDRGRIST:E)) ;
Includes $(<) : $(s) ;
SEARCH on $(s) = $(HDRSEARCH) ;
NoCare $(s) ;
local i ;
for i in $(s)
{
if $(HDRRULE_$(i:S))
{
HDRGRIST on $(i) = $(HDRGRIST) ;
HDRSEARCH on $(i) = $(HDRSEARCH) ;
HDRRULE on $(i) = $(HDRRULE_$(i:S)) ;
HDRSCAN on $(i) = $(HDRPATTERN_$(i:S)) ;
}
else if $(JAM_DEBUG)
{
#echo "No Header rule for $(i:S) file $(i) " ;
}
}
}
} # end of if $(JAMVERSION) < 1.5
# Dummy rule: .o files are used as is.
rule UseObjectFile
{
return $(<) ;
}
RegisterFileType UseObjectFile : .o ;
# Ignore header files.
rule UseHeaderFile
{
return ;
}
RegisterFileType UseHeaderFile : .h .hpp ;
RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .h .hpp .inc ;
# Generates a grist suitable for output objects based on
# SUBVARIANT and SUBDIR variable.
rule DoObjectGrist
{
return $(<:G=$(SOURCE_GRIST:E)!$(SUBVARIANT:J=!)) ;
}
# Generates a grist suitable for source files based on SUBDIR variable.
# Doesn't change an existing grist.
rule DoSourceGrist
{
local gristed ;
for g in $(<)
{
local grist ;
if $(g:G)
{
grist = $(g:G) ;
}
gristed += $(g:G=$(grist:E=$(SOURCE_GRIST:E))) ;
}
return $(gristed) ;
}
#============================================================================
# Rules for compiling a set of sources to object files
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# These are slightly modified versions of the Object and Objects rules from
# jam. The problem with the original rules in Jambase is the handling of
# custom file types. The solution with the UserObject rule is monolithic, you
# can only have 1 such rule. Thus we construct a more flexible toolkit here
# which let's you register rules for certain filetypes.
## RegisterFileType Rulename : extensions
## Register a rule which is used to compile a filetype into object
## files. The registered rule is called with the name of the
## sourcefile as argument and should return a list of objectfiles which are
## created. You should set the grist of the object files by using the
## DoObjectGrist function.
rule RegisterFileType
{
local suffix ;
for suffix in $(>)
{
FILETYPE_$(suffix) = $(<) ;
}
}
## RegisterHeaderRule rulename : regexpattern : extensions
## Registers a rule and a regular expression which will be used for header
## file scanning of the specified extensions.
rule RegisterHeaderRule
{
local suffix ;
for suffix in $(3)
{
HDRRULE_$(suffix) = $(<) ;
HDRPATTERN_$(suffix) = $(>) ;
}
}
## CompileObjects sources [: objectfileprefix]
## Compile a set of sourcefiles into objectfiles (extension: SUFOBJ,
## usually .o). This rule takes care of setting the SEARCH and LOCATE
## variables to the values of $(SEARCH_SOURCE) and $(LOCATE_TARGET).
## The Application, Plugin and Library rules already use this rule
## internally. You should only use this rule if you have to avoid the
## Application, Plugin or Library rules.
rule CompileObjects
{
local source ;
local targets ;
# Search the source
SEARCH on $(<) = $(SEARCH_SOURCE) ;
for source in $(<)
{
# compile the sourcefile to targetfile
targets += [ CompileObject $(source) : $(>) ] ;
}
# locate the targets
MakeLocate $(targets) : $(LOCATE_TARGET) ;
return $(targets) ;
}
## PrefixSuffix [prefix] : filename : suffix
## Replaces the suffix of 'filename' with 'suffix' and prepends 'prefix' to
## it.
rule PrefixSuffix
{
local prefix = $(1) ;
local name = $(2) ;
local suffix = $(3) ;
if ! $(prefix) { prefix = "" ; }
return $(name:B=$(prefix)$(name:B):S=$(suffix)) ;
}
#----------------------------------------------------------------------------
# private part
# helper rule: Compiles a source file to an object file. Does header file
# scanning, sets LOCATE and SEARCH for source and target, grists the files
# with the current subdir and searches for the correct registered rule.
rule CompileObject
{
# handle #includes for source: Jam scans for headers with
# the regexp pattern $(HDRSCAN) and then invokes $(HDRRULE)
# with the scanned file as the target and the found headers
# as the sources. HDRSEARCH is the value of SEARCH used for
# the found header files. Finally, if jam must deal with
# header files of the same name in different directories,
# they can be distinguished with HDRGRIST.
# $(SEARCH_SOURCE:E) is where cc first looks for #include
# "foo.h" files. If the source file is in a distant directory,
# look there. Else, look in "" (the current directory).
if $(HDRRULE_$(<:S))
{
HDRSEARCH on $(<) =
$(SEARCH_SOURCE:E) $(SUBDIRHDRS) $(HDRS) $(STDHDRS) ;
HDRGRIST on $(<) = $(HDRGRIST) ;
HDRRULE on $(<) = $(HDRRULE_$(<:S)) ;
HDRSCAN on $(<) = $(HDRPATTERN_$(<:S)) ;
}
local targets ;
# Invoke filetype specific rule
if $(FILETYPE_$(<:S))
{
targets = [ $(FILETYPE_$(<:S)) $(<) : $(>) ] ;
}
else
{
echo Warning: no rules for file type $(<:S) defined (at file $(<)). ;
}
if $(targets)
{
# construct clean target
Clean clean : $(targets) ;
# Save HDRS for -I$(HDRS) on compile.
# We shouldn't need -I$(SEARCH_SOURCE) as cc can find headers
# in the .c file's directory, but generated .c files (from
# yacc, lex, etc) are located in $(LOCATE_TARGET), possibly
# different from $(SEARCH_SOURCE).
HDRS on $(<) = $(SEARCH_SOURCE) $(SUBDIRHDRS) $(HDRS) ;
# propagate target specific-defines
DEFINES on $(<) += $(DEFINES) ;
}
return $(targets) ;
}
## HeaderRule source : headers
## This rule is the default header rule used by the objects rules. You
## might register custom rules with the RegisterHeaderRule rule.
rule HeaderRule
{
# N.B. This rule is called during binding, potentially after
# the fate of many targets has been determined, and must be
# used with caution: don't add dependencies to unrelated
# targets, and don't set variables on $(<).
# Tell Jam that anything depending on $(<) also depends on $(>),
# set SEARCH so Jam can find the headers, but then say we don't
# care if we can't actually find the headers (they may have been
# within ifdefs),
local s = $(>:G=$(HDRGRIST:E)) ;
Includes $(<) : $(s) ;
SEARCH on $(s) = $(HDRSEARCH) ;
NoCare $(s) ;
local i ;
for i in $(s)
{
HDRGRIST on $(i) = $(HDRGRIST) ;
HDRSEARCH on $(i) = $(HDRSEARCH) ;
HDRRULE on $(i) = [ on $(<) GetVar HDRRULE ] ;
HDRSCAN on $(i) = [ on $(<) GetVar HDRPATTERN ] ;
}
}
if $(JAMVERSION) < 2.5
{
## XXX XXX XXX a bug in jam 2.4 let's the version above fail. I'll let this
## non-optimal version in here until jam 2.5 is out.
rule HeaderRule
{
local s = $(>:G=$(HDRGRIST:E)) ;
Includes $(<) : $(s) ;
SEARCH on $(s) = $(HDRSEARCH) ;
NoCare $(s) ;
local i ;
for i in $(s)
{
if $(HDRRULE_$(i:S))
{
HDRGRIST on $(i) = $(HDRGRIST) ;
HDRSEARCH on $(i) = $(HDRSEARCH) ;
HDRRULE on $(i) = $(HDRRULE_$(i:S)) ;
HDRSCAN on $(i) = $(HDRPATTERN_$(i:S)) ;
}
else if $(JAM_DEBUG)
{
#echo "No Header rule for $(i:S) file $(i) " ;
}
}
}
} # end of if $(JAMVERSION) < 1.5
# Dummy rule: .o files are used as is.
rule UseObjectFile
{
return $(<) ;
}
RegisterFileType UseObjectFile : .o ;
# Ignore header files.
rule UseHeaderFile
{
return ;
}
RegisterFileType UseHeaderFile : .h .hpp ;
RegisterHeaderRule HeaderRule : $(HDRPATTERN) : .h .hpp .inc ;
# Generates a grist suitable for output objects based on
# SUBVARIANT and SUBDIR variable.
rule DoObjectGrist
{
return $(<:G=$(SOURCE_GRIST:E)!$(SUBVARIANT:J=!)) ;
}
# Generates a grist suitable for source files based on SUBDIR variable.
# Doesn't change an existing grist.
rule DoSourceGrist
{
local gristed ;
for g in $(<)
{
local grist ;
if $(g:G)
{
grist = $(g:G) ;
}
gristed += $(g:G=$(grist:E=$(SOURCE_GRIST:E))) ;
}
return $(gristed) ;
}

View File

@@ -1,38 +1,38 @@
#============================================================================
# Rule for setting options at targets
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
#----------------------------------------------------------------------------
# private rule - please specify the options in Application, Plugin or Library
# rule and don't use this rule here directly.
## CheckOptions candidates : Options : target
rule CheckOptions
{
local i ;
for i in $(>)
{
if ! [ IsElem $(i) : $(<) ]
{
echo "WARNING: Unknown option $(i) specified at $(3)." ;
}
}
}
#============================================================================
# Rule for setting options at targets
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
#----------------------------------------------------------------------------
# private rule - please specify the options in Application, Plugin or Library
# rule and don't use this rule here directly.
## CheckOptions candidates : Options : target
rule CheckOptions
{
local i ;
for i in $(>)
{
if ! [ IsElem $(i) : $(<) ]
{
echo "WARNING: Unknown option $(i) specified at $(3)." ;
}
}
}

View File

@@ -1,166 +1,179 @@
#============================================================================
# Rules for plugin creation
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
SUFMETA ?= .csplugin ;
GRISTMETA ?= pluginmeta ;
## Plugin pluginname : sources [ : options ]
## Build a plugin out of sourcefiles. All sourcefiles will be passed
## to the Objects rule which tries to compile them into object-files. You
## can create rules for your own filetypes with the UserObject rule. Header
## files will just be ignored. They are only used for MSVC projectfile
## generator.
## You can specify the noinstall option if you don't want that an install
## target is created.
## Options:
## noinstall: Don't setup a default installation target.
## independent: The target will not be made a dependency of the plugins
## and all target.
## nohelp: Do not invoke Help for this target.
## notest: Do not set up unit-testing support for this target.
rule Plugin
{
# check options
CheckOptions noinstall independent nohelp notest : $(3) : $(<) ;
local metafile ;
metafile = [ FAppendSuffix $(<) : $(SUFMETA) ] ;
SEARCH on $(metafile) = $(SEARCH_SOURCE) ;
local target = [ ConstructPluginTarget $(<) : $(3) ] ;
local sources = [ DoSourceGrist $(>) ] ;
local objects = [ CompileObjects $(sources) ] ;
$(<)_TYPE = plugin ;
$(<)_OBJECTS = $(objects) ;
$(<)_SOURCES = $(sources) ;
$(<)_TARGET = $(target) ;
$(<)_METAFILE = $(metafile) ;
# create target clean rule
Always $(<)clean ;
NotFile $(<)clean ;
Clean $(<)clean : $(objects) ; # create target clean rule
# Create a target for eventual static linking
if ! $(NO_STATIC_LINKING)
{
SubVariant static ;
local staticreginfoobject = [ BuildStaticRegFile $(<) : $(statictarget) ] ;
# Add objects to the list of candidates for potential inclusion in a
# monolithic static library containing objects for all plugins (useful for
# statically linking the plugins into an application if the client so
# desires).
local staticobjects = [ CompileObjects $(sources) : $(<) ] ;
local obj_remain = $(objects) ;
local staticobj_remain = $(staticobjects) ;
while $(obj_remain)
{
local obj = $(obj_remain[1]) ;
local staticobj = $(staticobj_remain[1]) ;
STATICPLUGINS.OBJECTS.$(staticobj) = $(obj) ;
obj_remain = $(obj_remain[2-]) ;
staticobj_remain = $(staticobj_remain[2-]) ;
}
MakeLocate $(staticobjects) : $(LOCATE_TARGET) ;
STATICPLUGINS.OBJECTS.$(<) += $(staticreginfoobject) ;
STATICPLUGINS.OBJECTS.$(<) += $(staticobjects) ;
STATICPLUGINS.SUBTARGETS += $(<) ;
SubVariant ;
}
# so 'jam foo' works when it's really foo.dll (Windows) or foo.csbundle
# (MacOS/X)
if $(target) != $(<)
{
Depends $(<) : $(target) ;
NotFile $(<) ;
}
if ! [ IsElem independent : $(3) ]
{
Depends plugins : $(<) ;
}
# construct install target
if ! [ IsElem noinstall : $(3) ]
{
SystemInstallPlugin $(target) ;
}
# Link
MakeLocate $(target) : $(LOCATE.TARGETS) ;
SystemLinkPlugin $(<) : $(objects) : $(3) ;
CFlags $(<) : $(PLUGIN.CFLAGS) : nostatic ;
LFlags $(<) : $(LINKLIBS) $(PLUGIN.LFLAGS) : nostatic ;
if ! [ IsElem nohelp : $(3) ]
{
local desc = [ Description $(<) ] ;
if ! $(desc) { desc = "$(<) plugin" ; }
Help $(<) : "Build the $(desc)" ;
}
if ! [ IsElem notest : $(options) ]
{
# @@@ Disabled for now; see docs/todo_jam.txt
#UnitTest $(<) ;
}
}
#----------------------------------------------------------------------------
# private rules
# PluginMetaData pluginname : metafile [ : options ]
# Copy a plugin's meta file so that it resides alongside the generated
# plugin module. This utility rule may be used by SystemLinkPlugin rules
# which employ the default behavior of having a plugin's meta-data file
# reside alongside the plugin executable (as opposed to bundling the
# metadata directly into the plugin).
# Options:
# noinstall: Don't setup a default installation target.
rule PluginMetaData
{
local target = $(>:G=$(GRISTMETA)) ;
Depends $(<) : $(target) ;
Depends $(target) : $(>) ;
MakeLocate $(target) : $(LOCATE.TARGETS) ;
Copy $(target) : $(>) ;
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
if ! [ IsElem noinstall : $(3) ]
{
Depends install_plugin : [ DoInstall $(target) : $(plugindir) ] ;
}
}
# Construct pseudo target plugins
Depends exe : plugins ;
NotFile plugins ;
Help plugins : "Build all plugin modules" ;
#============================================================================
# Rules for plugin creation
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
SUFMETA ?= .csplugin ;
GRISTMETA ?= pluginmeta ;
## Plugin pluginname : sources [ : options ]
## Build a plugin out of sourcefiles. All sourcefiles will be passed
## to the Objects rule which tries to compile them into object-files. You
## can create rules for your own filetypes with the UserObject rule. Header
## files will just be ignored. They are only used for MSVC projectfile
## generator.
## You can specify the noinstall option if you don't want that an install
## target is created.
## Options:
## noinstall: Don't setup a default installation target.
## independent: The target will not be made a dependency of the plugins
## and all target.
## nohelp: Do not invoke Help for this target.
## notest: Do not set up unit-testing support for this target.
rule Plugin
{
# check options
CheckOptions noinstall independent nohelp notest : $(3) : $(<) ;
local metafile ;
metafile = [ FAppendSuffix $(<) : $(SUFMETA) ] ;
SEARCH on $(metafile) = $(SEARCH_SOURCE) ;
local target = [ ConstructPluginTarget $(<) : $(3) ] ;
local sources = [ DoSourceGrist $(>) ] ;
local objects = [ CompileObjects $(sources) ] ;
$(<)_TYPE = plugin ;
$(<)_OBJECTS = $(objects) ;
$(<)_SOURCES = $(sources) ;
$(<)_TARGET = $(target) ;
$(<)_METAFILE = $(metafile) ;
# Create a target for eventual static linking
if ! $(NO_STATIC_LINKING)
{
SubVariant static ;
local staticreginfoobject = [ BuildStaticRegFile $(<) : $(statictarget) ] ;
# Add objects to the list of candidates for potential inclusion in a
# monolithic static library containing objects for all plugins (useful for
# statically linking the plugins into an application if the client so
# desires).
local staticobjects = [ CompileObjects $(sources) : $(<) ] ;
local obj_remain = $(objects) ;
local staticobj_remain = $(staticobjects) ;
while $(obj_remain)
{
local obj = $(obj_remain[1]) ;
local staticobj = $(staticobj_remain[1]) ;
STATICPLUGINS.OBJECTS.$(staticobj) = $(obj) ;
obj_remain = $(obj_remain[2-]) ;
staticobj_remain = $(staticobj_remain[2-]) ;
}
MakeLocate $(staticobjects) : $(LOCATE_TARGET) ;
STATICPLUGINS.OBJECTS.$(<) += $(staticreginfoobject) ;
STATICPLUGINS.OBJECTS.$(<) += $(staticobjects) ;
STATICPLUGINS.SUBTARGETS += $(<) ;
SubVariant ;
}
# so 'jam foo' works when it's really foo.dll (Windows) or foo.csbundle
# (MacOS/X)
if $(target) != $(<)
{
Depends $(<) : $(target) ;
NotFile $(<) ;
}
if ! [ IsElem independent : $(3) ]
{
Depends plugins : $(<) ;
}
# construct install target
if ! [ IsElem noinstall : $(3) ]
{
SystemInstallPlugin $(target) ;
}
# Link
MakeLocate $(target) : $(LOCATE.TARGETS) ;
SystemLinkPlugin $(<) : $(objects) : $(3) ;
local cleanextra ;
if $(LINK.DEBUG.INFO.SEPARATE) = "yes"
{
local debugfile = [ SplitDebugInfo $(target) ] ;
cleanextra += $(debugfile) ;
if ! [ IsElem noinstall : $(3) ]
{
NoCare $(debugfile) ;
Depends install_plugin : [ DoInstall $(debugfile) : $(plugindir) : $(INSTALL_DATA) ] ;
}
}
CFlags $(<) : $(PLUGIN.CFLAGS) : nostatic ;
LFlags $(<) : $(LINKLIBS) $(PLUGIN.LFLAGS) : nostatic ;
# create target clean rule
Always $(<)clean ;
NotFile $(<)clean ;
Clean $(<)clean : $(objects) $(cleanextra) ;
Clean clean : $(cleanextra) ;
if ! [ IsElem nohelp : $(3) ]
{
local desc = [ Description $(<) ] ;
if ! $(desc) { desc = "$(<) plugin" ; }
Help $(<) : "Build the $(desc)" ;
}
if ! [ IsElem notest : $(options) ]
{
# @@@ Disabled for now; see docs/todo_jam.txt
#UnitTest $(<) ;
}
}
#----------------------------------------------------------------------------
# private rules
# PluginMetaData pluginname : metafile [ : options ]
# Copy a plugin's meta file so that it resides alongside the generated
# plugin module. This utility rule may be used by SystemLinkPlugin rules
# which employ the default behavior of having a plugin's meta-data file
# reside alongside the plugin executable (as opposed to bundling the
# metadata directly into the plugin).
# Options:
# noinstall: Don't setup a default installation target.
rule PluginMetaData
{
local target = $(>:G=$(GRISTMETA)) ;
Depends $(<) : $(target) ;
Depends $(target) : $(>) ;
MakeLocate $(target) : $(LOCATE.TARGETS) ;
Copy $(target) : $(>) ;
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
if ! [ IsElem noinstall : $(3) ]
{
Depends install_plugin : [ DoInstall $(target) : $(plugindir) ] ;
}
}
# Construct pseudo target plugins
Depends exe : plugins ;
NotFile plugins ;
Help plugins : "Build all plugin modules" ;

View File

@@ -1,58 +1,58 @@
#==============================================================================
# Generic property-bag mechanism.
# Copyright (C) 2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
# Property bag : name
# Returns the value of property 'name' in container 'bag' if present, else
# returns a null value. 'bag' and 'name' should be simple identifiers
# composed of alphanumeric characters and underscore, and with an alphabetic
# or an underscore as the first character.
rule Property
{
local p = [ _PropertyName $(<) : $(>) ] ;
return $($(p)) ;
}
# SetProperty bag : name [ : value ]
# Add property 'name' to container 'bag'. If 'value' is not provided, sets
# the property to "true".
rule SetProperty
{
local p = [ _PropertyName $(<) : $(>) ] ;
local v = $(3) ;
if ! $(v) { v = "true" ; }
$(p) = $(v) ;
}
# ClearProperty bag : name
# Remove property 'name' from container 'bag'.
rule ClearProperty
{
local p = [ _PropertyName $(<) : $(>) ] ;
$(p) = "" ;
}
#------------------------------------------------------------------------------
# Private utilitiy rules.
#------------------------------------------------------------------------------
rule _PropertyName
{
return "__property_$(<)_$(>)" ;
}
#==============================================================================
# Generic property-bag mechanism.
# Copyright (C) 2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#==============================================================================
# Property bag : name
# Returns the value of property 'name' in container 'bag' if present, else
# returns a null value. 'bag' and 'name' should be simple identifiers
# composed of alphanumeric characters and underscore, and with an alphabetic
# or an underscore as the first character.
rule Property
{
local p = [ _PropertyName $(<) : $(>) ] ;
return $($(p)) ;
}
# SetProperty bag : name [ : value ]
# Add property 'name' to container 'bag'. If 'value' is not provided, sets
# the property to "true".
rule SetProperty
{
local p = [ _PropertyName $(<) : $(>) ] ;
local v = $(3) ;
if ! $(v) { v = "true" ; }
$(p) = $(v) ;
}
# ClearProperty bag : name
# Remove property 'name' from container 'bag'.
rule ClearProperty
{
local p = [ _PropertyName $(<) : $(>) ] ;
$(p) = "" ;
}
#------------------------------------------------------------------------------
# Private utilitiy rules.
#------------------------------------------------------------------------------
rule _PropertyName
{
return "__property_$(<)_$(>)" ;
}

View File

@@ -1,109 +1,109 @@
#============================================================================
# Rules for handling additional resources.
# Platform-specific Jam files may override these if needed.
#
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
## ApplicationIconDefault platform : type [ : icon [ : pathcomponents ]]
## If invoked with three or more arguments, specifies the default icon for
## applications of the specified type for the given platform, which may be
## 'macosx', 'win32', or 'unix'. Type should be 'all', 'gui', or 'console'.
## If pathcomponents is omitted, SEARCH_SOURCE is used. This setting can be
## overriden for an individual application with the ApplicationIcon rule.
## This rule must be invoked before invoking any Application rules if it is
## to have any effect. If invoked with two arguments, returns the default
## icon (if any) for the given platform and type.
rule ApplicationIconDefault
{
local platform = $(1) ;
local type = $(2) ;
local icon = $(3) ;
local iconpath = $(4) ;
local key = default_$(platform)_$(type) ;
if $(icon)
{
SetProperty appicon : $(key) : $(icon) ;
if $(iconpath)
{
SEARCH on $(icon) = [ ConcatDirs $(iconpath) ] ;
}
else
{
SEARCH on $(icon) = $(SEARCH_SOURCE) ;
}
}
local result = [ Property appicon : $(key) ] ;
if ! $(result) && $(type) != all
{
result = [ Property appicon : default_$(platform)_all ] ;
}
return $(result) ;
}
## ApplicationIcon platform : basename [ : icon [ : pathcomponents ]]
## If invoked with three or more arguments, specifies the icon for the
## application given by basename for the indicated platform, which may be
## 'macosx', 'win32', or 'unix'. If pathcomponents is omitted,
## SEARCH_SOURCE is used. If this rule is not invoked, then the icon
## specified via ApplicationIconDefault is used, if any. This rule must be
## invoked before the Application rule to which this icon will apply. If
## invoked with two arguments, returns the icon (if any) explicitly
## registered for basename for the given platform.
rule ApplicationIcon
{
local platform = $(1) ;
local target = $(2) ;
local icon = $(3) ;
local iconpath = $(4) ;
local key = app_$(platform)_$(target) ;
if $(icon)
{
SetProperty appicon : $(key) : $(icon) ;
if $(iconpath)
{
SEARCH on $(icon) = [ ConcatDirs $(iconpath) ] ;
}
else
{
SEARCH on $(icon) = $(SEARCH_SOURCE) ;
}
# An ugly but effective way to detect incorrect usage.
if $($(target)_TARGET)
{
Echo "Warning: `ApplicationIcon:$(target):$(icon)' incorrectly invoked"
"after Application rule." ;
}
}
return [ Property appicon : $(key) ] ;
}
## Win32Resource basename : rcfiles
## Specify .rc files for the target known as basename. The .rc files should
## already have SEARCH set appropriately.
rule Win32Resource { }
## Win32RcFlags basename : rcfiles
## Specify flags passed to the resource compiler when compiling resources
## for the target known as basename.
rule Win32RcFlags { }
#============================================================================
# Rules for handling additional resources.
# Platform-specific Jam files may override these if needed.
#
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
## ApplicationIconDefault platform : type [ : icon [ : pathcomponents ]]
## If invoked with three or more arguments, specifies the default icon for
## applications of the specified type for the given platform, which may be
## 'macosx', 'win32', or 'unix'. Type should be 'all', 'gui', or 'console'.
## If pathcomponents is omitted, SEARCH_SOURCE is used. This setting can be
## overriden for an individual application with the ApplicationIcon rule.
## This rule must be invoked before invoking any Application rules if it is
## to have any effect. If invoked with two arguments, returns the default
## icon (if any) for the given platform and type.
rule ApplicationIconDefault
{
local platform = $(1) ;
local type = $(2) ;
local icon = $(3) ;
local iconpath = $(4) ;
local key = default_$(platform)_$(type) ;
if $(icon)
{
SetProperty appicon : $(key) : $(icon) ;
if $(iconpath)
{
SEARCH on $(icon) = [ ConcatDirs $(iconpath) ] ;
}
else
{
SEARCH on $(icon) = $(SEARCH_SOURCE) ;
}
}
local result = [ Property appicon : $(key) ] ;
if ! $(result) && $(type) != all
{
result = [ Property appicon : default_$(platform)_all ] ;
}
return $(result) ;
}
## ApplicationIcon platform : basename [ : icon [ : pathcomponents ]]
## If invoked with three or more arguments, specifies the icon for the
## application given by basename for the indicated platform, which may be
## 'macosx', 'win32', or 'unix'. If pathcomponents is omitted,
## SEARCH_SOURCE is used. If this rule is not invoked, then the icon
## specified via ApplicationIconDefault is used, if any. This rule must be
## invoked before the Application rule to which this icon will apply. If
## invoked with two arguments, returns the icon (if any) explicitly
## registered for basename for the given platform.
rule ApplicationIcon
{
local platform = $(1) ;
local target = $(2) ;
local icon = $(3) ;
local iconpath = $(4) ;
local key = app_$(platform)_$(target) ;
if $(icon)
{
SetProperty appicon : $(key) : $(icon) ;
if $(iconpath)
{
SEARCH on $(icon) = [ ConcatDirs $(iconpath) ] ;
}
else
{
SEARCH on $(icon) = $(SEARCH_SOURCE) ;
}
# An ugly but effective way to detect incorrect usage.
if $($(target)_TARGET)
{
Echo "Warning: `ApplicationIcon:$(target):$(icon)' incorrectly invoked"
"after Application rule." ;
}
}
return [ Property appicon : $(key) ] ;
}
## Win32Resource basename : rcfiles
## Specify .rc files for the target known as basename. The .rc files should
## already have SEARCH set appropriately.
rule Win32Resource { }
## Win32RcFlags basename : rcfiles
## Specify flags passed to the resource compiler when compiling resources
## for the target known as basename.
rule Win32RcFlags { }

View File

@@ -1,353 +1,353 @@
#============================================================================
# Utility rules for static builds without plugins
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# all private
rule GenerateStaticPluginBoilerplate
{
ResponseFile $(<) :
"// This file is automatically generated."
"#include \"cssysdef.h\""
"#include \"csutil/scf.h\""
""
"// Put static linking stuff into own section."
"// The idea is that this allows the section to be swapped out but not"
"// swapped in again b/c something else in it was needed."
"#if !defined(CS_DEBUG) && defined(CS_COMPILER_MSVC)"
"#pragma const_seg(\".CSmetai\")"
"#pragma comment(linker, \"/section:.CSmetai,r\")"
"#pragma code_seg(\".CSmeta\")"
"#pragma comment(linker, \"/section:.CSmeta,er\")"
"#pragma comment(linker, \"/merge:.CSmetai=.CSmeta\")"
"#endif"
: notfile ;
}
rule GenerateStaticPluginInstantiation
{
GenerateStaticPluginBoilerplate $(<) ;
ResponseFile $(<) : "SCF_USE_STATIC_PLUGIN($(>:B))" : notfile ;
}
rule GenerateStaticPluginRegistration
{
GenerateStaticPluginBoilerplate $(<) ;
GenerateStaticPluginRegistration1 $(<) : $(>) ;
}
rule BuildStaticRegFile
{
local statictarget = $(>) ;
# prepare source files
local sources = [ DoObjectGrist _$(<)_static_reg.cpp ] ;
local object = [ CompileObject $(sources) ] ;
MakeLocate $(sources) : $(LOCATE_TARGET) ;
MakeLocate $(object) : $(LOCATE_TARGET) ;
local metalist metafile i ;
for i in $(<)
{
metafile = $($(i)_METAFILE) ;
metalist += $(metafile) ;
Depends $(sources) : $(metafile) ;
}
GenerateStaticPluginRegistration $(sources) : $(metalist) ;
Clean $(statictarget)clean : $(sources) ;
Clean $(statictarget)clean : $(object) ;
return $(object) ;
}
rule BuildStaticUseFile
{
local statictarget = $(2) ;
local package = $(3) ;
# prepare source files
local sources ;
if $(3)
{
sources = [ DoObjectGrist _cs_static_use_$(package).cpp ] ;
}
else
{
sources = [ DoObjectGrist _cs_static_use.cpp ] ;
}
local object = [ CompileObject $(sources) ] ;
MakeLocate $(sources) : $(LOCATE_TARGET) ;
SEARCH on $(sources) = $(LOCATE_TARGET) ;
MakeLocate $(object) : $(LOCATE_TARGET) ;
C++FLAGS on $(object) += $($($(>).EXTERNALLIBS).CFLAGS) ;
GenerateStaticPluginInstantiation $(sources) : $(<) ;
Clean $(statictarget)clean : $(sources) ;
Clean $(statictarget)clean : $(object) ;
return $(object) ;
}
## LinkStaticPlugins target : plugins [: optionalplugins] [: package]
## Builds the plugins in 'plugins' (and 'optionalplugins') statically into
## 'target'. Can be used both for static plugins from the local project or
## an external project. In the latter case, the project's static plugin
## library has to have been built, also, the "<package>.STATICDEPS"
## variable must contain a path to a specially generated Jamfile that
## contains information about the plugins provided by as well as external
## dependencies. The static plugins library for both local and external
## package must be explicitly linked into 'target'.
rule LinkStaticPlugins
{
local package target plugins optplugins ;
# Fetch the parameters
target = $(1) ;
plugins = $(2) ;
optplugins = $(3) ;
package = $(4) ;
if $(package)
{
# External static plugins.
# First include static plugin info
if ! $(HAVE_STATICDEPS.$(package))
{
include $($(package).STATICDEPS) ;
HAVE_STATICDEPS.$(package) = yes ;
}
local lflags p ;
# Collect optional plugins
for p in $(optplugins)
{
if [ IsElem $(p) : $(STATICPLUGINS.AVAILABLE) ]
{
plugins += $(p) ;
}
}
# Grab flags
for p in $(plugins)
{
NotFile $(p) ;
CFlags $(target) : $(STATICPLUGIN.$(p).CFLAGS) ;
lflags = [ MergeLFlags $(lflags) : $(STATICPLUGIN.$(p).LFLAGS) ] ;
}
LFlags $(target) : $(lflags) ;
}
else
{
# Local static plugins
local lflags libs p ;
# Collect optional plugins
for p in $(optplugins)
{
if $($(p)_TARGET)
{
plugins += $(p) ;
}
}
# Grab flags
for p in $(plugins)
{
lflags += [ Filter $($(p).LFLAGS) : $(LINKLIBS) $(PLUGIN.LFLAGS) ] ;
libs += $($(p).NEEDLIBS) ;
}
LFlags $(target) : [ Reverse [ RemoveDups [ Reverse $(lflags) ] ] ] ;
LinkWith $(target) : [ Reverse [ RemoveDups [ Reverse $(libs) ] ] ] ;
}
# construct initialization sourcefile
local staticobject = [ BuildStaticUseFile $(plugins) : $(target) : $(package) ] ;
ExtraObjects $(target) : $(staticobject) : inheritcflags ;
}
## StaticPluginLibrary name [: rejects]
## Create a library that monolithically contains statically linkable
## versions of all plugins, and also provides a target to install this
## library ("install_staticplugins") as well as resources to facilitate the
## use of that library from external projects. Also, most plugins will
## probably themselves depend on other libraries; while those are correctly
## linked in with the static plugins, they are not built or installed when
## the static plugin library is.
## This library is intended to be used together with the
## "LinkStaticPlugins" rule.
rule StaticPluginLibrary
{
local name = $(<) ;
local rejects = $(>) ;
local t ;
local targets = $(STATICPLUGINS.SUBTARGETS) ;
if $(rejects)
{
targets = [ Filter $(targets) : $(rejects) ] ;
}
local objects ;
for t in $(targets)
{
objects += $(STATICPLUGINS.OBJECTS.$(t)) ;
}
# Set up library
Library $(name) : $(objects) : noinstall notest independent nohelp ;
SEARCH on $(name) += $(LOCATE_TARGET) ;
MsvcDefine $(name) : $(STATICPLUGINS.MSVC_DEFINES) ;
CFlags $(name) :
[ FDefines CS_STATIC_LINKED ]
: nostatic ;
# Copy a variety of flags
local o ;
for o in $(objects)
{
local sourceobj = $(STATICPLUGINS.OBJECTS.$(o)) ;
if $(sourceobj)
{
CCFLAGS on $(o) += [ on $(sourceobj) GetVar CCFLAGS ] ;
C++FLAGS on $(o) += [ on $(sourceobj) GetVar C++FLAGS ] ;
}
}
# Write out needed CFLAGS, LFLAGS
STATICPLUGINS.DEPENDENCIES = $(name).jam ;
MakeLocate $(STATICPLUGINS.DEPENDENCIES) : $(LOCATE.OBJECTS)/libs ;
for t in $(targets)
{
WriteDependencies $(STATICPLUGINS.DEPENDENCIES) : $(t) : $(name) ;
}
Depends $(name) : $(STATICPLUGINS.DEPENDENCIES) ;
Clean $(name)clean : $(STATICPLUGINS.DEPENDENCIES) ;
# Install targets
Depends install_staticplugins :
[ DoInstall [ ConstructLibraryTarget $(name) ] : $(libdir) ] ;
Depends install_staticplugins : $(STATICPLUGINS.DEPENDENCIES) ;
Depends install_staticplugins :
[ DoInstall $(STATICPLUGINS.DEPENDENCIES) : $(libdir) ] ;
Depends install_staticplugins : install_libs ;
INSTALLEDLIBS_OPTIONAL += $(name) ;
# Collect library dependencies. The idea is to built all libs needed by the
# static plugins when "jam staticplugins" is invoked.
for t in $(targets)
{
local deplibs ;
if $($(t).NEEDLIBS)
{
deplibs += $($(t).NEEDLIBS) ;
}
deplibs = [ RemoveDups $(deplibs) ] ;
Depends staticplugins : $(deplibs) ;
}
Help staticplugins :
"Build the library with static versions of all plugins" ;
Depends staticplugins : libs $(name) ;
}
#----------------------------------------------------------------------------
# Write out CFLAGS, LFLAGS needed by a plugin
rule WriteDependencies
{
local cflags ;
local lflags ;
local depfile = $(<) ;
local plugin = $(>) ;
local name = $(3) ;
local depfile_gristed = $(depfile:G=$(plugin)) ;
MakeLocate $(depfile_gristed) : [ on $(depfile) GetVar LOCATE ] ;
# Collect flags
lflags += -l$(name) ;
local libs = [ ResolveLibs $($(plugin).NEEDLIBS) ] ;
lflags += -l$(libs) ;
local l ;
for l in $($(plugin).EXTERNALLIBS)
{
cflags += $($(l).CFLAGS) ;
lflags += [ Filter $($(l).LFLAGS) : $(LINKLIBS) $(PLUGIN.LFLAGS) ] ;
}
lflags += [ Filter $($(plugin).LFLAGS) : $(LINKLIBS) $(PLUGIN.LFLAGS) ] ;
CFLAGS on $(depfile_gristed) = "$(cflags)" ;
LFLAGS on $(depfile_gristed) = "$(lflags)" ;
if $($(depfile).FIRSTTIME) != "yes"
{
WriteDepFlags1 $(depfile_gristed) : $(plugin) ;
$(depfile).FIRSTTIME = "yes" ;
}
else
{
WriteDepFlags2 $(depfile_gristed) : $(plugin) ;
}
Depends $(depfile) : $(depfile_gristed) ;
}
actions WriteDepFlags1
{
cat << EOT > $(<)
STATICPLUGINS.AVAILABLE += $(>) ;
STATICPLUGIN.$(>).CFLAGS = $(CFLAGS) ;
STATICPLUGIN.$(>).LFLAGS = $(LFLAGS) ;
EOT
}
actions WriteDepFlags2
{
cat << EOT >> $(<)
STATICPLUGINS.AVAILABLE += $(>) ;
STATICPLUGIN.$(>).CFLAGS = $(CFLAGS) ;
STATICPLUGIN.$(>).LFLAGS = $(LFLAGS) ;
EOT
}
actions piecemeal GenerateStaticPluginRegistration1
{
echo 'namespace csStaticPluginInit' >> $(<)
echo '{' >> $(<)
for x in $(>)
do
n=`basename $x $(SUFMETA)`
echo "static char const metainfo_${n}[] =" >> $(<)
$(SED) 's:\\:\\\\:g;s:":\\":g;s:\(.*\):"\1":' < $x >>$(<)
echo ";" >> $(<)
$(SED) '/<implementation>/!d;s:[ ]*<implementation>\(..*\)</implementation>: #ifndef \1_FACTORY_REGISTER_DEFINED \
#define \1_FACTORY_REGISTER_DEFINED \
SCF_DEFINE_FACTORY_FUNC_REGISTRATION(\1) \
#endif:g' < $x >> $(<)
done
echo '' >> $(<)
for x in $(>)
do
n=`basename $x $(SUFMETA)`
echo "class ${n}" >> $(<)
echo "{" >> $(<)
echo "SCF_REGISTER_STATIC_LIBRARY($n,metainfo_${n})" >>$(<)
$(SED) '/<implementation>/!d;s:[ ]*<implementation>\(..*\)</implementation>: #ifndef \1_FACTORY_REGISTERED \
#define \1_FACTORY_REGISTERED \
\1_StaticInit \1_static_init__; \
#endif:g' < $x >> $(<)
echo "public:" >> $(<)
echo " ${n}();" >> $(<)
echo "};" >> $(<)
echo "$n::$n() {}" >> $(<)
echo "" >> $(<)
done
echo '}' >> $(<)
}
#============================================================================
# Utility rules for static builds without plugins
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
# all private
rule GenerateStaticPluginBoilerplate
{
ResponseFile $(<) :
"// This file is automatically generated."
"#include \"cssysdef.h\""
"#include \"csutil/scf.h\""
""
"// Put static linking stuff into own section."
"// The idea is that this allows the section to be swapped out but not"
"// swapped in again b/c something else in it was needed."
"#if !defined(CS_DEBUG) && defined(CS_COMPILER_MSVC)"
"#pragma const_seg(\".CSmetai\")"
"#pragma comment(linker, \"/section:.CSmetai,r\")"
"#pragma code_seg(\".CSmeta\")"
"#pragma comment(linker, \"/section:.CSmeta,er\")"
"#pragma comment(linker, \"/merge:.CSmetai=.CSmeta\")"
"#endif"
: notfile ;
}
rule GenerateStaticPluginInstantiation
{
GenerateStaticPluginBoilerplate $(<) ;
ResponseFile $(<) : "SCF_USE_STATIC_PLUGIN($(>:B))" : notfile ;
}
rule GenerateStaticPluginRegistration
{
GenerateStaticPluginBoilerplate $(<) ;
GenerateStaticPluginRegistration1 $(<) : $(>) ;
}
rule BuildStaticRegFile
{
local statictarget = $(>) ;
# prepare source files
local sources = [ DoObjectGrist _$(<)_static_reg.cpp ] ;
local object = [ CompileObject $(sources) ] ;
MakeLocate $(sources) : $(LOCATE_TARGET) ;
MakeLocate $(object) : $(LOCATE_TARGET) ;
local metalist metafile i ;
for i in $(<)
{
metafile = $($(i)_METAFILE) ;
metalist += $(metafile) ;
Depends $(sources) : $(metafile) ;
}
GenerateStaticPluginRegistration $(sources) : $(metalist) ;
Clean $(statictarget)clean : $(sources) ;
Clean $(statictarget)clean : $(object) ;
return $(object) ;
}
rule BuildStaticUseFile
{
local statictarget = $(2) ;
local package = $(3) ;
# prepare source files
local sources ;
if $(3)
{
sources = [ DoObjectGrist _cs_static_use_$(package).cpp ] ;
}
else
{
sources = [ DoObjectGrist _cs_static_use.cpp ] ;
}
local object = [ CompileObject $(sources) ] ;
MakeLocate $(sources) : $(LOCATE_TARGET) ;
SEARCH on $(sources) = $(LOCATE_TARGET) ;
MakeLocate $(object) : $(LOCATE_TARGET) ;
C++FLAGS on $(object) += $($($(>).EXTERNALLIBS).CFLAGS) ;
GenerateStaticPluginInstantiation $(sources) : $(<) ;
Clean $(statictarget)clean : $(sources) ;
Clean $(statictarget)clean : $(object) ;
return $(object) ;
}
## LinkStaticPlugins target : plugins [: optionalplugins] [: package]
## Builds the plugins in 'plugins' (and 'optionalplugins') statically into
## 'target'. Can be used both for static plugins from the local project or
## an external project. In the latter case, the project's static plugin
## library has to have been built, also, the "<package>.STATICDEPS"
## variable must contain a path to a specially generated Jamfile that
## contains information about the plugins provided by as well as external
## dependencies. The static plugins library for both local and external
## package must be explicitly linked into 'target'.
rule LinkStaticPlugins
{
local package target plugins optplugins ;
# Fetch the parameters
target = $(1) ;
plugins = $(2) ;
optplugins = $(3) ;
package = $(4) ;
if $(package)
{
# External static plugins.
# First include static plugin info
if ! $(HAVE_STATICDEPS.$(package))
{
include $($(package).STATICDEPS) ;
HAVE_STATICDEPS.$(package) = yes ;
}
local lflags p ;
# Collect optional plugins
for p in $(optplugins)
{
if [ IsElem $(p) : $(STATICPLUGINS.AVAILABLE) ]
{
plugins += $(p) ;
}
}
# Grab flags
for p in $(plugins)
{
NotFile $(p) ;
CFlags $(target) : $(STATICPLUGIN.$(p).CFLAGS) ;
lflags = [ MergeLFlags $(lflags) : $(STATICPLUGIN.$(p).LFLAGS) ] ;
}
LFlags $(target) : $(lflags) ;
}
else
{
# Local static plugins
local lflags libs p ;
# Collect optional plugins
for p in $(optplugins)
{
if $($(p)_TARGET)
{
plugins += $(p) ;
}
}
# Grab flags
for p in $(plugins)
{
lflags += [ Filter $($(p).LFLAGS) : $(LINKLIBS) $(PLUGIN.LFLAGS) ] ;
libs += $($(p).NEEDLIBS) ;
}
LFlags $(target) : [ Reverse [ RemoveDups [ Reverse $(lflags) ] ] ] ;
LinkWith $(target) : [ Reverse [ RemoveDups [ Reverse $(libs) ] ] ] ;
}
# construct initialization sourcefile
local staticobject = [ BuildStaticUseFile $(plugins) : $(target) : $(package) ] ;
ExtraObjects $(target) : $(staticobject) : inheritcflags ;
}
## StaticPluginLibrary name [: rejects]
## Create a library that monolithically contains statically linkable
## versions of all plugins, and also provides a target to install this
## library ("install_staticplugins") as well as resources to facilitate the
## use of that library from external projects. Also, most plugins will
## probably themselves depend on other libraries; while those are correctly
## linked in with the static plugins, they are not built or installed when
## the static plugin library is.
## This library is intended to be used together with the
## "LinkStaticPlugins" rule.
rule StaticPluginLibrary
{
local name = $(<) ;
local rejects = $(>) ;
local t ;
local targets = $(STATICPLUGINS.SUBTARGETS) ;
if $(rejects)
{
targets = [ Filter $(targets) : $(rejects) ] ;
}
local objects ;
for t in $(targets)
{
objects += $(STATICPLUGINS.OBJECTS.$(t)) ;
}
# Set up library
Library $(name) : $(objects) : noinstall notest independent nohelp ;
SEARCH on $(name) += $(LOCATE_TARGET) ;
MsvcDefine $(name) : $(STATICPLUGINS.MSVC_DEFINES) ;
CFlags $(name) :
[ FDefines CS_STATIC_LINKED ]
: nostatic ;
# Copy a variety of flags
local o ;
for o in $(objects)
{
local sourceobj = $(STATICPLUGINS.OBJECTS.$(o)) ;
if $(sourceobj)
{
CCFLAGS on $(o) += [ on $(sourceobj) GetVar CCFLAGS ] ;
C++FLAGS on $(o) += [ on $(sourceobj) GetVar C++FLAGS ] ;
}
}
# Write out needed CFLAGS, LFLAGS
STATICPLUGINS.DEPENDENCIES = $(name).jam ;
MakeLocate $(STATICPLUGINS.DEPENDENCIES) : $(LOCATE.OBJECTS)/libs ;
for t in $(targets)
{
WriteDependencies $(STATICPLUGINS.DEPENDENCIES) : $(t) : $(name) ;
}
Depends $(name) : $(STATICPLUGINS.DEPENDENCIES) ;
Clean $(name)clean : $(STATICPLUGINS.DEPENDENCIES) ;
# Install targets
Depends install_staticplugins :
[ DoInstall [ ConstructLibraryTarget $(name) ] : $(libdir) ] ;
Depends install_staticplugins : $(STATICPLUGINS.DEPENDENCIES) ;
Depends install_staticplugins :
[ DoInstall $(STATICPLUGINS.DEPENDENCIES) : $(libdir) ] ;
Depends install_staticplugins : install_libs ;
INSTALLEDLIBS_OPTIONAL += $(name) ;
# Collect library dependencies. The idea is to built all libs needed by the
# static plugins when "jam staticplugins" is invoked.
for t in $(targets)
{
local deplibs ;
if $($(t).NEEDLIBS)
{
deplibs += $($(t).NEEDLIBS) ;
}
deplibs = [ RemoveDups $(deplibs) ] ;
Depends staticplugins : $(deplibs) ;
}
Help staticplugins :
"Build the library with static versions of all plugins" ;
Depends staticplugins : libs $(name) ;
}
#----------------------------------------------------------------------------
# Write out CFLAGS, LFLAGS needed by a plugin
rule WriteDependencies
{
local cflags ;
local lflags ;
local depfile = $(<) ;
local plugin = $(>) ;
local name = $(3) ;
local depfile_gristed = $(depfile:G=$(plugin)) ;
MakeLocate $(depfile_gristed) : [ on $(depfile) GetVar LOCATE ] ;
# Collect flags
lflags += -l$(name) ;
local libs = [ ResolveLibs $($(plugin).NEEDLIBS) ] ;
lflags += -l$(libs) ;
local l ;
for l in $($(plugin).EXTERNALLIBS)
{
cflags += $($(l).CFLAGS) ;
lflags += [ Filter $($(l).LFLAGS) : $(LINKLIBS) $(PLUGIN.LFLAGS) ] ;
}
lflags += [ Filter $($(plugin).LFLAGS) : $(LINKLIBS) $(PLUGIN.LFLAGS) ] ;
CFLAGS on $(depfile_gristed) = "$(cflags)" ;
LFLAGS on $(depfile_gristed) = "$(lflags)" ;
if $($(depfile).FIRSTTIME) != "yes"
{
WriteDepFlags1 $(depfile_gristed) : $(plugin) ;
$(depfile).FIRSTTIME = "yes" ;
}
else
{
WriteDepFlags2 $(depfile_gristed) : $(plugin) ;
}
Depends $(depfile) : $(depfile_gristed) ;
}
actions WriteDepFlags1
{
cat << EOT > $(<)
STATICPLUGINS.AVAILABLE += $(>) ;
STATICPLUGIN.$(>).CFLAGS = $(CFLAGS) ;
STATICPLUGIN.$(>).LFLAGS = $(LFLAGS) ;
EOT
}
actions WriteDepFlags2
{
cat << EOT >> $(<)
STATICPLUGINS.AVAILABLE += $(>) ;
STATICPLUGIN.$(>).CFLAGS = $(CFLAGS) ;
STATICPLUGIN.$(>).LFLAGS = $(LFLAGS) ;
EOT
}
actions piecemeal GenerateStaticPluginRegistration1
{
echo 'namespace csStaticPluginInit' >> $(<)
echo '{' >> $(<)
for x in $(>)
do
n=`basename $x $(SUFMETA)`
echo "static char const metainfo_${n}[] =" >> $(<)
$(SED) 's:\\:\\\\:g;s:":\\":g;s:\(.*\):"\1":' < $x >>$(<)
echo ";" >> $(<)
$(SED) '/<implementation>/!d;s:[ ]*<implementation>\(..*\)</implementation>: #ifndef \1_FACTORY_REGISTER_DEFINED \
#define \1_FACTORY_REGISTER_DEFINED \
SCF_DEFINE_FACTORY_FUNC_REGISTRATION(\1) \
#endif:g' < $x >> $(<)
done
echo '' >> $(<)
for x in $(>)
do
n=`basename $x $(SUFMETA)`
echo "class ${n}" >> $(<)
echo "{" >> $(<)
echo "SCF_REGISTER_STATIC_LIBRARY($n,metainfo_${n})" >>$(<)
$(SED) '/<implementation>/!d;s:[ ]*<implementation>\(..*\)</implementation>: #ifndef \1_FACTORY_REGISTERED \
#define \1_FACTORY_REGISTERED \
\1_StaticInit \1_static_init__; \
#endif:g' < $x >> $(<)
echo "public:" >> $(<)
echo " ${n}();" >> $(<)
echo "};" >> $(<)
echo "$n::$n() {}" >> $(<)
echo "" >> $(<)
done
echo '}' >> $(<)
}

36
mk/jam/strip.jam Normal file
View File

@@ -0,0 +1,36 @@
#============================================================================
# Rules for stripping binaries
# Copyright (C)2006 by Frank Richter
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
## SplitDebugInfo binary
## Strips the debugging information into a separate external file.
rule SplitDebugInfo
{
local binary = $(1) ;
DoSplitDebugInfo $(binary) ;
return $(binary).dbg ;
}
actions DoSplitDebugInfo
{
$(CMD.OBJCOPY) --only-keep-debug $(<) $(<).dbg
$(CMD.OBJCOPY) --strip-unneeded $(<)
$(CMD.OBJCOPY) --add-gnu-debuglink=$(<).dbg $(<)
if [ "$(CHMOD)" ] ; then $(CHMOD) a-x $(<).dbg ; fi
}

View File

@@ -1,109 +1,109 @@
#============================================================================
# Work around problems the SubDir rule of Jambase
# (until jampeople accept my patches :-/ )
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
LOCATE.OBJECTS ?= $(BUILDTOP)/out/$(OSFULL[1]:L) ;
LOCATE.TARGETS ?= $(BUILDTOP) ;
LOCATE.DOCS ?= $(BUILDTOP)/out/docs ;
SUBDIRRULES += FixSubDirPath ;
CMD.MKDIR ?= mkdir ;
CMD.MKDIRS ?= "$(CMD.MKDIR) -p" ;
rule FixSubDirPath
{
LOCATE_SOURCE = [ FDirName $(LOCATE.OBJECTS) $(SUBDIR_TOKENS) ] ;
LOCATE_TARGET = [ FDirName $(LOCATE.OBJECTS) $(SUBDIR_TOKENS) ] ;
}
# Fix bug in Jambase where SubInclude in the middle of a Jamfile made it break.
rule SubInclude
{
if ! $($(<[1]))
{
Exit SubInclude $(<[1]) without prior SubDir $(<[1]) ;
}
local save_SUBDIR_TOKENS = $(SUBDIR_TOKENS) ;
SubDir $(<) ;
include $(JAMFILE:D=$(SUBDIR)) ;
SubDir $(<[1]) $(save_SUBDIR_TOKENS) ;
}
# This MakeLocate rule differs from the Jambase one in that it also works with
# files being in subdirectories.
rule MakeLocate
{
# MakeLocate targets : directory ;
# Sets special variable LOCATE on targets, and arranges
# with MkDir to create target directory.
# Note we grist the directory name with 'dir',
# so that directory path components and other
# targets don't conflict.
if $(>) && $(>) != ""
{
local i ;
for i in $(<)
{
LOCATE on $(i) = $(>) ;
local targetfile = $(i:R=$(>)) ;
local targetdir = $(targetfile:D) ;
if ! $(targetdir) { targetdir = "." ; }
targetdir = $(targetdir:G=dir) ;
Depends $(i) : $(targetdir) ;
MkDir $(targetdir) ;
}
}
}
# The default MkDir rule in Jambase has problems when paths contains a sequence
# of multiple slashes (ie. bla////fup). We solve these problems and greatly
# simply this rule by using the "mkdir -p" or mkdirs command.
rule MkDir
{
# MkDir directory ;
# Make a directory and all its parent directories.
# Ignore timestamps on directories: we only care if they
# exist.
NoUpdate $(<) ;
# don't create the dir multiple times
if ! $($(<)-mkdir)
{
$(<)-mkdir = true ;
MkDir1 $(<) ;
}
}
actions MkDir1
{
$(CMD.MKDIRS) "$(<)"
}
#============================================================================
# Work around problems the SubDir rule of Jambase
# (until jampeople accept my patches :-/ )
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
LOCATE.OBJECTS ?= $(BUILDTOP)/out/$(OSFULL[1]:L) ;
LOCATE.TARGETS ?= $(BUILDTOP) ;
LOCATE.DOCS ?= $(BUILDTOP)/out/docs ;
SUBDIRRULES += FixSubDirPath ;
CMD.MKDIR ?= mkdir ;
CMD.MKDIRS ?= "$(CMD.MKDIR) -p" ;
rule FixSubDirPath
{
LOCATE_SOURCE = [ FDirName $(LOCATE.OBJECTS) $(SUBDIR_TOKENS) ] ;
LOCATE_TARGET = [ FDirName $(LOCATE.OBJECTS) $(SUBDIR_TOKENS) ] ;
}
# Fix bug in Jambase where SubInclude in the middle of a Jamfile made it break.
rule SubInclude
{
if ! $($(<[1]))
{
Exit SubInclude $(<[1]) without prior SubDir $(<[1]) ;
}
local save_SUBDIR_TOKENS = $(SUBDIR_TOKENS) ;
SubDir $(<) ;
include $(JAMFILE:D=$(SUBDIR)) ;
SubDir $(<[1]) $(save_SUBDIR_TOKENS) ;
}
# This MakeLocate rule differs from the Jambase one in that it also works with
# files being in subdirectories.
rule MakeLocate
{
# MakeLocate targets : directory ;
# Sets special variable LOCATE on targets, and arranges
# with MkDir to create target directory.
# Note we grist the directory name with 'dir',
# so that directory path components and other
# targets don't conflict.
if $(>) && $(>) != ""
{
local i ;
for i in $(<)
{
LOCATE on $(i) = $(>) ;
local targetfile = $(i:R=$(>)) ;
local targetdir = $(targetfile:D) ;
if ! $(targetdir) { targetdir = "." ; }
targetdir = $(targetdir:G=dir) ;
Depends $(i) : $(targetdir) ;
MkDir $(targetdir) ;
}
}
}
# The default MkDir rule in Jambase has problems when paths contains a sequence
# of multiple slashes (ie. bla////fup). We solve these problems and greatly
# simply this rule by using the "mkdir -p" or mkdirs command.
rule MkDir
{
# MkDir directory ;
# Make a directory and all its parent directories.
# Ignore timestamps on directories: we only care if they
# exist.
NoUpdate $(<) ;
# don't create the dir multiple times
if ! $($(<)-mkdir)
{
$(<)-mkdir = true ;
MkDir1 $(<) ;
}
}
actions MkDir1
{
$(CMD.MKDIRS) "$(<)"
}

View File

@@ -1,225 +1,225 @@
#============================================================================
# Rules for swig
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if $(CMD.SWIG)
{
# Post-processing of the Swig-generated C++ file.
#
# (1) We need to ensure that <stdint.h> defines INT64_C() and cousins, which
# means that the __STDC_CONSTANT_MACROS and __STDC_LIMIT_MACROS macros must
# be defined before <stdint.h> is included. In some Python installations,
# Python.h includes <stdint.h>, and Swig-generated output includes Python.h
# before we ever have a chance to define the __STDC_* macros. There is no
# Swig-supported mechanism allowing us to insert these #defines before
# Python.h is included, so we post-process the output file.
#
# (2) We #undefine _DEBUG, to ensure that python23.lib is used by MSVC
# instead of python23_d.lib.
#
# (3) Delete any lines containing the CVS `Header' keyword to ensure that CVS
# does not consider the file changed simply because `Header' expansion
# differs.
#
# (4) Swig 1.3.22 for Perl emits illegal expressions `new (sometype)[n]'
# rather than `new sometype[n]' (at least gcc considers it illegal),
# therefore, we transform the expression by dropping the parentheses.
#
# (5) cs_pyth.cpp contains a macro "#define SWIG_init init_cspace". However,
# cs_pyth.cpp may reside in a shared lib, so we rather want the name
# SWIG_init and define init_cspace as a simple forwared ourselves.
#
# (6) perl.h includes dirent.h on some configurations which conflicts with
# the CS definitions of dirent, opendir, etc. So define _DIRENT_H_ to
# make dirent.h skip its body. This is hackish but no better solution
# has been found.
#
# (Despite the fact that these customizations might seem project-specific,
# they should be safe for all projects.)
SWIG.SED_SCRIPT =
"'s/\\([ ]*#[ ]*include[ ][ ]*[<\"]Python.h[>\"]\\)/\\
#ifndef __STDC_CONSTANT_MACROS\\
#define __STDC_CONSTANT_MACROS\\
#endif\\
#ifndef __STDC_LIMIT_MACROS\\
#define __STDC_LIMIT_MACROS\\
#endif\\
#ifndef DEBUG_PYTHON\\
#undef _DEBUG\\
#endif\\
\\1/g
/\$Header:/d
s/new[ ][ ]*(\\([^)][^)]*\\))[ ]*\\[/new \\1 [/g
s/[ ]*#[ ]*define[ ][ ]*SWIG_init[ ]*init_\\(.*\\)/#define SWIG_init SWIG_init_\\1/g
s/\\([ ]*#[ ]*include[ ][ ]*[<\"]perl.h[>\"]\\)/\\
#ifndef _DIRENT_H_\\
#define _DIRENT_H_\\
#endif\\
\\1/g'" ;
## Swig targets : swigfile : language [ : swigflags [ : swigincdirs
## [ : swigfiledir [ : frozendirs [ : tag [ : outdir ]]]]]]
## Given a Swig input file `swigfile', generate `targets' for scripting
## language `language'. The first element of `targets' should name the
## generated C or C++ file, and the remaining optional elements should name
## any other language-specific scripting files which Swig will generate.
## For instance, the files widgets.cpp and widgets.py might be emitted by
## Swig for the input file widgets.i. The generated files are placed in
## $(LOCATE_TARGET). `swigflags' specifies additional flags to pass to
## Swig. `swigincdirs' is a list of additional directories which Swig
## should search for files which it includes. `swigfiledir' specifies the
## location of `swigfile' if it does not reside in the present source
## directory. This rule defines top-level targets named "$(tag)swig",
## which generates `targets' on-demand; and "$(tag)swigclean", which
## deletes the generated files. `tag' is a simple identifier out of which
## top-level pseudo-targets names are constructed. If `tag' is not
## provided, then `language' is used instead. If `frozentargdirs' is
## provided, then an additional top-level target named "$(tag)freeze" is
## defined, which copies the generated files to the specified directories.
## If `frozentargdirs' contains only one element, then all generated files
## are copied to that directory. If it contains two elements, then the
## first element of `targets' is copied to the first element of
## `frozentargdirs', and all remaining elements of `targets' are copied to
## the second element of `frozentargdirs'. `outdir', if provided, is a list
## of path components which specify a subdirectory in which Swig should
## place the language-specific support files, rather than placing them in
## $(LOCATE_TARGET). This might be useful, for instance, when Swig is in
## Java mode, and the .java files must be placed in a directory hierarchy
## which reflects the full package name.
rule Swig
{
local target = $(1[1]) ;
local othertargets = $(1[2-]) ;
local swigfile = $(2) ;
local language = $(3) ;
local swigflags = $(4) ;
local swigincdirs = $(5) ;
local swigfiledir = $(6) ;
local frozentargetdir = $(7[1]) ;
local frozenotherdir = $(7[2-]) ;
local tag = $(8) ;
local outdir = $(9) ;
if ! $(frozenotherdir) { frozenotherdir = $(frozentargetdir) ; }
if ! $(tag) { tag = $(language) ; }
if ! $(outdir) { outdir = $(LOCATE_TARGET) ; }
Depends $(target) : $(swigfile) ;
MakeLocate $(target) : $(LOCATE_TARGET) ;
if $(othertargets)
{
MakeLocate $(othertargets) : $(outdir) ;
# If any target, such as an install target, depends upon the other files,
# we force them to be built with a dependency upon the target.
Depends $(othertargets) : $(target) ;
}
SWIG.FLAGS on $(target) +=
$(SWIG.FLAGS) -$(language) $(swigflags) -I$(swigincdirs)
-outdir [ ConcatDirs $(outdir) ] ;
# Allow Swig input file to reside at location other than $(SEARCH_SOURCE).
if $(swigfiledir)
{
SEARCH on $(swigfile) = $(swigfiledir) ;
}
else
{
SEARCH on $(swigfile) = $(SEARCH_SOURCE) ;
}
# Scan for special Swig includes.
HDRGRIST on $(swigfile) = $(HDRGRIST) ;
HDRSEARCH on $(swigfile) =
$(SEARCH_SOURCE:E) $(SUBDIRHDRS) $(HDRS) $(STDHDRS) ;
HDRRULE on $(swigfile) = HeaderRule ;
HDRSCAN on $(swigfile) = $(SWIG.HDRPATTERN) ;
RunSwig $(target) : $(swigfile) ;
Depends $(tag)swig : $(target) ;
NotFile $(tag)swig ;
Always $(tag)swig ;
Help $(tag)swig : "Generate Swig files for $(tag)" ;
Clean $(tag)swigclean : $(target) $(othertargets) ;
Depends clean : $(tag)swigclean ;
if $(frozentargetdir)
{
local frozen_target = $(target:G=$(tag)freeze) ;
MakeLocate $(frozen_target) : $(frozentargetdir) ;
Depends $(frozen_target) : $(target) ;
Copy $(frozen_target) : $(target) ;
Depends $(tag)freeze : $(frozen_target) ;
if $(othertargets)
{
local frozen_other = $(othertargets:G=$(tag)freeze) ;
MakeLocate $(frozen_other) : $(frozenotherdir) ;
Depends $(frozen_other) : $(othertargets) ;
Copy $(frozen_other) : $(othertargets) ;
Depends $(tag)freeze : $(frozen_other) ;
}
NotFile $(tag)freeze ;
Help $(tag)freeze : "Copy generated Swig files to source directory" ;
}
}
actions RunSwig
{
$(CMD.SWIG) $(SWIG.FLAGS) -o $(<) $(>)
$(SED) $(SWIG.SED_SCRIPT) < $(<) > $(<).sed
$(RM) $(<)
$(MV) $(<).sed $(<)
}
SWIG.SIMPLE.LANGUAGE ?= python ;
SWIG.SIMPLE.EXT ?= py ;
SWIG.SIMPLE.FLAGS ?= -c++ -shadow ;
## SimpleSwig swigfile
## Given a Swig input file (.i), invokes Swig to generate a .cpp file with
## the same basename, and a script file with the same basename.
## SWIG.SIMPLE.LANGUAGE specifies the language for which Swig should emit a
## binding; SWIG.SIMPLE.EXT indicates the file extension of the generated
## script file; SWIG.SIMPLE.FLAGS specifies additional flags for Swig.
rule SimpleSwig
{
local object = [ DoObjectGrist $(<:S=$(SUFOBJ)) ] ;
local cppfile = $(<:S=.cpp) ;
local script = $(<:S=.$(SWIG.SIMPLE.EXT)) ;
C++ $(object) : $(cppfile) ;
Swig $(cppfile) $(script) : $(<) : $(SWIG.SIMPLE.LANGUAGE) :
$(SWIG.SIMPLE.FLAGS) ;
return $(object) ;
}
RegisterFileType SimpleSwig : .i ;
if ! $(NO_SWIG_HEADER_SCANNING)
{
SWIG.HDRPATTERN =
"^[ ]*[%#][ ]*include[ ]*[<\"]([^\">]*)[\">].*$" ;
RegisterHeaderRule HeaderRule : $(SWIG.HDRPATTERN) : .i ;
}
}
#============================================================================
# Rules for swig
# Copyright (C)2004 by Eric Sunshine <sunshine@sunshineco.com>
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if $(CMD.SWIG)
{
# Post-processing of the Swig-generated C++ file.
#
# (1) We need to ensure that <stdint.h> defines INT64_C() and cousins, which
# means that the __STDC_CONSTANT_MACROS and __STDC_LIMIT_MACROS macros must
# be defined before <stdint.h> is included. In some Python installations,
# Python.h includes <stdint.h>, and Swig-generated output includes Python.h
# before we ever have a chance to define the __STDC_* macros. There is no
# Swig-supported mechanism allowing us to insert these #defines before
# Python.h is included, so we post-process the output file.
#
# (2) We #undefine _DEBUG, to ensure that python23.lib is used by MSVC
# instead of python23_d.lib.
#
# (3) Delete any lines containing the CVS `Header' keyword to ensure that CVS
# does not consider the file changed simply because `Header' expansion
# differs.
#
# (4) Swig 1.3.22 for Perl emits illegal expressions `new (sometype)[n]'
# rather than `new sometype[n]' (at least gcc considers it illegal),
# therefore, we transform the expression by dropping the parentheses.
#
# (5) cs_pyth.cpp contains a macro "#define SWIG_init init_cspace". However,
# cs_pyth.cpp may reside in a shared lib, so we rather want the name
# SWIG_init and define init_cspace as a simple forwared ourselves.
#
# (6) perl.h includes dirent.h on some configurations which conflicts with
# the CS definitions of dirent, opendir, etc. So define _DIRENT_H_ to
# make dirent.h skip its body. This is hackish but no better solution
# has been found.
#
# (Despite the fact that these customizations might seem project-specific,
# they should be safe for all projects.)
SWIG.SED_SCRIPT =
"'s/\\([ ]*#[ ]*include[ ][ ]*[<\"]Python.h[>\"]\\)/\\
#ifndef __STDC_CONSTANT_MACROS\\
#define __STDC_CONSTANT_MACROS\\
#endif\\
#ifndef __STDC_LIMIT_MACROS\\
#define __STDC_LIMIT_MACROS\\
#endif\\
#ifndef DEBUG_PYTHON\\
#undef _DEBUG\\
#endif\\
\\1/g
/\$Header:/d
s/new[ ][ ]*(\\([^)][^)]*\\))[ ]*\\[/new \\1 [/g
s/[ ]*#[ ]*define[ ][ ]*SWIG_init[ ]*init_\\(.*\\)/#define SWIG_init SWIG_init_\\1/g
s/\\([ ]*#[ ]*include[ ][ ]*[<\"]perl.h[>\"]\\)/\\
#ifndef _DIRENT_H_\\
#define _DIRENT_H_\\
#endif\\
\\1/g'" ;
## Swig targets : swigfile : language [ : swigflags [ : swigincdirs
## [ : swigfiledir [ : frozendirs [ : tag [ : outdir ]]]]]]
## Given a Swig input file `swigfile', generate `targets' for scripting
## language `language'. The first element of `targets' should name the
## generated C or C++ file, and the remaining optional elements should name
## any other language-specific scripting files which Swig will generate.
## For instance, the files widgets.cpp and widgets.py might be emitted by
## Swig for the input file widgets.i. The generated files are placed in
## $(LOCATE_TARGET). `swigflags' specifies additional flags to pass to
## Swig. `swigincdirs' is a list of additional directories which Swig
## should search for files which it includes. `swigfiledir' specifies the
## location of `swigfile' if it does not reside in the present source
## directory. This rule defines top-level targets named "$(tag)swig",
## which generates `targets' on-demand; and "$(tag)swigclean", which
## deletes the generated files. `tag' is a simple identifier out of which
## top-level pseudo-targets names are constructed. If `tag' is not
## provided, then `language' is used instead. If `frozentargdirs' is
## provided, then an additional top-level target named "$(tag)freeze" is
## defined, which copies the generated files to the specified directories.
## If `frozentargdirs' contains only one element, then all generated files
## are copied to that directory. If it contains two elements, then the
## first element of `targets' is copied to the first element of
## `frozentargdirs', and all remaining elements of `targets' are copied to
## the second element of `frozentargdirs'. `outdir', if provided, is a list
## of path components which specify a subdirectory in which Swig should
## place the language-specific support files, rather than placing them in
## $(LOCATE_TARGET). This might be useful, for instance, when Swig is in
## Java mode, and the .java files must be placed in a directory hierarchy
## which reflects the full package name.
rule Swig
{
local target = $(1[1]) ;
local othertargets = $(1[2-]) ;
local swigfile = $(2) ;
local language = $(3) ;
local swigflags = $(4) ;
local swigincdirs = $(5) ;
local swigfiledir = $(6) ;
local frozentargetdir = $(7[1]) ;
local frozenotherdir = $(7[2-]) ;
local tag = $(8) ;
local outdir = $(9) ;
if ! $(frozenotherdir) { frozenotherdir = $(frozentargetdir) ; }
if ! $(tag) { tag = $(language) ; }
if ! $(outdir) { outdir = $(LOCATE_TARGET) ; }
Depends $(target) : $(swigfile) ;
MakeLocate $(target) : $(LOCATE_TARGET) ;
if $(othertargets)
{
MakeLocate $(othertargets) : $(outdir) ;
# If any target, such as an install target, depends upon the other files,
# we force them to be built with a dependency upon the target.
Depends $(othertargets) : $(target) ;
}
SWIG.FLAGS on $(target) +=
$(SWIG.FLAGS) -$(language) $(swigflags) -I$(swigincdirs)
-outdir [ ConcatDirs $(outdir) ] ;
# Allow Swig input file to reside at location other than $(SEARCH_SOURCE).
if $(swigfiledir)
{
SEARCH on $(swigfile) = $(swigfiledir) ;
}
else
{
SEARCH on $(swigfile) = $(SEARCH_SOURCE) ;
}
# Scan for special Swig includes.
HDRGRIST on $(swigfile) = $(HDRGRIST) ;
HDRSEARCH on $(swigfile) =
$(SEARCH_SOURCE:E) $(SUBDIRHDRS) $(HDRS) $(STDHDRS) ;
HDRRULE on $(swigfile) = HeaderRule ;
HDRSCAN on $(swigfile) = $(SWIG.HDRPATTERN) ;
RunSwig $(target) : $(swigfile) ;
Depends $(tag)swig : $(target) ;
NotFile $(tag)swig ;
Always $(tag)swig ;
Help $(tag)swig : "Generate Swig files for $(tag)" ;
Clean $(tag)swigclean : $(target) $(othertargets) ;
Depends clean : $(tag)swigclean ;
if $(frozentargetdir)
{
local frozen_target = $(target:G=$(tag)freeze) ;
MakeLocate $(frozen_target) : $(frozentargetdir) ;
Depends $(frozen_target) : $(target) ;
Copy $(frozen_target) : $(target) ;
Depends $(tag)freeze : $(frozen_target) ;
if $(othertargets)
{
local frozen_other = $(othertargets:G=$(tag)freeze) ;
MakeLocate $(frozen_other) : $(frozenotherdir) ;
Depends $(frozen_other) : $(othertargets) ;
Copy $(frozen_other) : $(othertargets) ;
Depends $(tag)freeze : $(frozen_other) ;
}
NotFile $(tag)freeze ;
Help $(tag)freeze : "Copy generated Swig files to source directory" ;
}
}
actions RunSwig
{
$(CMD.SWIG) $(SWIG.FLAGS) -o $(<) $(>)
$(SED) $(SWIG.SED_SCRIPT) < $(<) > $(<).sed
$(RM) $(<)
$(MV) $(<).sed $(<)
}
SWIG.SIMPLE.LANGUAGE ?= python ;
SWIG.SIMPLE.EXT ?= py ;
SWIG.SIMPLE.FLAGS ?= -c++ -shadow ;
## SimpleSwig swigfile
## Given a Swig input file (.i), invokes Swig to generate a .cpp file with
## the same basename, and a script file with the same basename.
## SWIG.SIMPLE.LANGUAGE specifies the language for which Swig should emit a
## binding; SWIG.SIMPLE.EXT indicates the file extension of the generated
## script file; SWIG.SIMPLE.FLAGS specifies additional flags for Swig.
rule SimpleSwig
{
local object = [ DoObjectGrist $(<:S=$(SUFOBJ)) ] ;
local cppfile = $(<:S=.cpp) ;
local script = $(<:S=.$(SWIG.SIMPLE.EXT)) ;
C++ $(object) : $(cppfile) ;
Swig $(cppfile) $(script) : $(<) : $(SWIG.SIMPLE.LANGUAGE) :
$(SWIG.SIMPLE.FLAGS) ;
return $(object) ;
}
RegisterFileType SimpleSwig : .i ;
if ! $(NO_SWIG_HEADER_SCANNING)
{
SWIG.HDRPATTERN =
"^[ ]*[%#][ ]*include[ ]*[<\"]([^\">]*)[\">].*$" ;
RegisterHeaderRule HeaderRule : $(SWIG.HDRPATTERN) : .i ;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,151 +1,159 @@
#============================================================================
# Jam configuration and actions for Unix (GNU/Linux, BSD, Darwin, etc.)
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
SHELL ?= "/bin/sh" ;
# Only use nasm on x86 for now...
NASM.FLAGS += -f elf ;
PLUGIN.CFLAGS += $(COMPILER.C++FLAGS.PIC) ;
LIBRARY.CFLAGS += $(COMPILER.C++FLAGS.PIC) ;
# The BFD tag name under which to embed meta-information into a plugin module.
# This much match the name expected by csGetPluginMetadata() (bfdplugins.cpp).
SECTION_TAG_NAME ?= .crystalspace ;
#----------------------------------------------------------------------------
# platform specific rules
## ConstructApplicationTarget target : options
## Constructs the application target name (ie. foo.exe for foo)
rule ConstructApplicationTarget
{
return $(<) ;
}
rule ConstructStaticLibraryTarget
{
return lib$(<)$(SUFLIB) ;
}
rule ConstructSharedLibraryTarget
{
return lib$(<).so.$(PACKAGE_VERSION) ;
}
rule ConstructSharedLibraryLinkLib
{
return lib$(<).so.$(PACKAGE_VERSION) ;
}
rule ConstructPluginTarget
{
return $(<).so ;
}
# SystemLinkApplication target : objects : options
# do system specific actions needed for linking the application and construct
# correct clean targets.
rule SystemLinkApplication
{
local target = $($(<)_TARGET) ;
Depends $(target) : $(>) ;
LinkApplication $(target) : $(>) ;
# setup clean rules
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
}
rule SystemInstallApplication
{
Depends install_bin :
[ DoInstall $(<) : $(bindir) $(2) : $(INSTALL_PROGRAM) ] ;
}
rule SystemInstallPlugin
{
Depends install_plugin : [ DoInstall $(<) : $(plugindir) $(2) :
$(INSTALL_PROGRAM) ] ;
}
# Put the meta data into the object file headers
rule ObjTagMetaData
{
Depends $(<) : $(>) ;
}
actions ObjTagMetaData
{
$(CMD.OBJCOPY) --add-section $(SECTION_TAG_NAME)=$(>) $(<)
}
# SystemLinkPlugin target : objects : options
# do system specific actions needed for linking the plugin and construct
# correct clean targets.
rule SystemLinkPlugin
{
local target = $($(<)_TARGET) ;
Depends $(target) : $(>) ;
LinkPlugin $(target) : $(>) ;
if $(EMBED_META) = "yes" && $(OBJCOPY.AVAILABLE) = "yes"
{
ObjTagMetaData $(target) : $($(<)_METAFILE) ;
}
else
{
PluginMetaData $(<) : $($(<)_METAFILE) : $(3) ;
}
# setup clean rules
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
}
rule SystemLinkSharedLibrary
{
LFlags $(<) : $(LINKLIBS) ;
Depends $(<) : $(>) ;
LinkSharedLibrary $(<) : $(>) : $(3) ;
Clean clean : $(<) ;
Clean $(<)clean : $(<) ;
}
actions LinkApplication bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
if $(PLUGIN.LFLAGS.USE_SONAME) = "yes"
{
actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) \
-Wl,-soname,$(<:BS)
}
}
else
{
actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
}
actions LinkSharedLibrary bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -shared -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) \
-Wl,-soname,$(<:BS)
}
#============================================================================
# Jam configuration and actions for Unix (GNU/Linux, BSD, Darwin, etc.)
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
SHELL ?= "/bin/sh" ;
# Only use nasm on x86 for now...
NASM.FLAGS += -f elf ;
PLUGIN.CFLAGS += $(COMPILER.C++FLAGS.PIC) ;
LIBRARY.CFLAGS += $(COMPILER.C++FLAGS.PIC) ;
# The BFD tag name under which to embed meta-information into a plugin module.
# This much match the name expected by csGetPluginMetadata() (bfdplugins.cpp).
SECTION_TAG_NAME ?= .crystalspace ;
#----------------------------------------------------------------------------
# platform specific rules
## ConstructApplicationTarget target : options
## Constructs the application target name (ie. foo.exe for foo)
rule ConstructApplicationTarget
{
return $(<) ;
}
rule ConstructStaticLibraryTarget
{
return lib$(<)$(SUFLIB) ;
}
rule ConstructSharedLibraryTarget
{
return lib$(<).so.$(PACKAGE_VERSION) ;
}
rule ConstructSharedLibraryLinkLib
{
return lib$(<).so.$(PACKAGE_VERSION) ;
}
rule ConstructPluginTarget
{
return $(<).so ;
}
# SystemLinkApplication target : objects : options
# do system specific actions needed for linking the application and construct
# correct clean targets.
rule SystemLinkApplication
{
local target = $($(<)_TARGET) ;
Depends $(target) : $(>) ;
LinkApplication $(target) : $(>) ;
# setup clean rules
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
}
rule SystemInstallApplication
{
Depends install_bin :
[ DoInstall $(<) : $(bindir) $(2) : $(INSTALL_PROGRAM) ] ;
}
rule SystemInstallPlugin
{
Depends install_plugin : [ DoInstall $(<) : $(plugindir) $(2) :
$(INSTALL_PROGRAM) ] ;
}
# Put the meta data into the object file headers
rule ObjTagMetaData
{
Depends $(<) : $(>) ;
}
actions ObjTagMetaData
{
$(CMD.OBJCOPY) --add-section $(SECTION_TAG_NAME)=$(>) $(<)
}
# SystemLinkPlugin target : objects : options
# do system specific actions needed for linking the plugin and construct
# correct clean targets.
rule SystemLinkPlugin
{
local target = $($(<)_TARGET) ;
Depends $(target) : $(>) ;
LinkPlugin $(target) : $(>) ;
if $(EMBED_META) = "yes" && $(OBJCOPY.AVAILABLE) = "yes"
{
ObjTagMetaData $(target) : $($(<)_METAFILE) ;
}
else
{
PluginMetaData $(<) : $($(<)_METAFILE) : $(3) ;
}
# setup clean rules
Clean clean : $(target) ;
Clean $(<)clean : $(target) ;
}
rule SystemLinkSharedLibrary
{
LFlags $(<) : $(LINKLIBS) ;
Depends $(<) : $(>) ;
local response = $(<).resp ;
MakeLocate $(response) : $(LOCATE.OBJECTS)/libs ;
ResponseFile $(response) : $(>) ;
# @@@ FIXME: response files are only supported on newer binutils
# But quite useful to avoid blowing jam's 10240 max action length.
#Depends $(response) : $(>) ;
#Depends $(<) : $(response) ;
#LinkSharedLibrary $(<) : $(response) ;
LinkSharedLibrary $(<) : $(>) ;
Clean clean : $(<) ;
Clean $(<)clean : $(<) ;
}
actions LinkApplication bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
if $(PLUGIN.LFLAGS.USE_SONAME) = "yes"
{
actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) \
-Wl,-soname,$(<:BS)
}
}
else
{
actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS)
}
}
actions LinkSharedLibrary bind NEEDLIBS bind EXTRAOBJECTS
{
$(CMD.LINK) -shared -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) \
-Wl,-soname,$(<:BS)
}

View File

@@ -1,58 +1,58 @@
#============================================================================
# Setup of compiler/linker flags for debug/optimize mode
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if ! $(VARIANT)
{
VARIANT = $(MODE) ;
}
if $(VARIANT) != "debug" && $(VARIANT) != "optimize" && $(VARIANT) != "profile"
{
exit "Invalid modus set, please set VARIANT to debug, profile or optimize" ;
}
# Set modus related flags
CCFLAGS += $(COMPILER.CFLAGS) $(COMPILER.CFLAGS.$(VARIANT)) ;
C++FLAGS += $(COMPILER.CFLAGS) $(COMPILER.C++FLAGS)
$(COMPILER.CFLAGS.$(VARIANT)) $(COMPILER.C++FLAGS.$(VARIANT)) ;
LINKLIBS += $(COMPILER.LFLAGS) $(COMPILER.LFLAGS.$(VARIANT)) ;
LOCATE.OBJECTS = $(LOCATE.OBJECTS)/$(VARIANT) ;
## SubVariant variantname
## Specify subvariant which are placed in separate compilation directories.
SUBVARIANT ?= "" ;
SAVED_LOCATE_TARGET = "" ;
rule SubVariant
{
if ! $(<)
{
SUBVARIANT = $(SUBVARIANT[2]) ;
SUBVARIANT ?= "" ;
LOCATE_TARGET = $(SAVED_LOCATE_TARGET[1]) ;
SAVED_LOCATE_TARGET = $(SAVED_LOCATE_TARGET[2-]) ;
}
else
{
SUBVARIANT = $(<) $(SUBVARIANT) ;
SAVED_LOCATE_TARGET = $(LOCATE_TARGET) $(SAVED_LOCATE_TARGET) ;
LOCATE_TARGET = $(LOCATE_TARGET)/$(<) ;
}
}
#============================================================================
# Setup of compiler/linker flags for debug/optimize mode
# Copyright (C)2003 by Matze Braun <matzebraun@users.sourceforge.net>
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#============================================================================
if ! $(VARIANT)
{
VARIANT = $(MODE) ;
}
if $(VARIANT) != "debug" && $(VARIANT) != "optimize" && $(VARIANT) != "profile"
{
exit "Invalid modus set, please set VARIANT to debug, profile or optimize" ;
}
# Set modus related flags
CCFLAGS += $(COMPILER.CFLAGS) $(COMPILER.CFLAGS.$(VARIANT)) ;
C++FLAGS += $(COMPILER.CFLAGS) $(COMPILER.C++FLAGS)
$(COMPILER.CFLAGS.$(VARIANT)) $(COMPILER.C++FLAGS.$(VARIANT)) ;
LINKLIBS += $(COMPILER.LFLAGS) $(COMPILER.LFLAGS.$(VARIANT)) ;
LOCATE.OBJECTS = $(LOCATE.OBJECTS)/$(VARIANT) ;
## SubVariant variantname
## Specify subvariant which are placed in separate compilation directories.
SUBVARIANT ?= "" ;
SAVED_LOCATE_TARGET = "" ;
rule SubVariant
{
if ! $(<)
{
SUBVARIANT = $(SUBVARIANT[2]) ;
SUBVARIANT ?= "" ;
LOCATE_TARGET = $(SAVED_LOCATE_TARGET[1]) ;
SAVED_LOCATE_TARGET = $(SAVED_LOCATE_TARGET[2-]) ;
}
else
{
SUBVARIANT = $(<) $(SUBVARIANT) ;
SAVED_LOCATE_TARGET = $(LOCATE_TARGET) $(SAVED_LOCATE_TARGET) ;
LOCATE_TARGET = $(LOCATE_TARGET)/$(<) ;
}
}

File diff suppressed because it is too large Load Diff