From ec56a978f7a915c82a18dcdcc5474326ade0d900 Mon Sep 17 00:00:00 2001 From: res2002 Date: Sat, 17 Jun 2006 18:23:38 +0000 Subject: [PATCH] Regenerated configure & VC projects. Misc property fixes. --- configure | 245 +- mk/autoconf/config.guess | 2918 ++++++++++++------------ mk/autoconf/config.sub | 3098 ++++++++++++------------- mk/jam/application.jam | 328 +-- mk/jam/assembler.jam | 100 +- mk/jam/bisonflex.jam | 330 +-- mk/jam/build.jam | 166 +- mk/jam/clean.jam | 74 +- mk/jam/compiler.jam | 152 +- mk/jam/docs.jam | 1376 ++++++------ mk/jam/dump.jam | 256 +-- mk/jam/flags.jam | 344 +-- mk/jam/groups.jam | 122 +- mk/jam/help.jam | 170 +- mk/jam/helper.jam | 1188 +++++----- mk/jam/install.jam | 426 ++-- mk/jam/jamcompatibility.jam | 698 +++--- mk/jam/library.jam | 646 +++--- mk/jam/macosx.jam | 708 +++--- mk/jam/msvcgen.jam | 3124 +++++++++++++------------- mk/jam/objectivec.jam | 160 +- mk/jam/objects.jam | 500 ++--- mk/jam/options.jam | 76 +- mk/jam/plugin.jam | 358 +-- mk/jam/property.jam | 116 +- mk/jam/resource.jam | 218 +- mk/jam/static.jam | 706 +++--- mk/jam/strip.jam | 72 +- mk/jam/subdir.jam | 218 +- mk/jam/swig.jam | 450 ++-- mk/jam/unittest.jam | 1152 +++++----- mk/jam/unix.jam | 318 +-- mk/jam/variant.jam | 116 +- mk/jam/win32.jam | 1126 +++++----- msvc/6/libbulletdynamics.dsp | 8 + msvc/7/libbulletdynamics.vcproj | 6 + msvc/71/appColladaDemo.vcproj | 112 +- msvc/71/libbulletdynamics.vcproj | 138 +- msvc/71/wksbullet.sln | 996 ++------ msvc/8/appColladaDemo.vcproj | 284 +-- msvc/8/libbulletdynamics.vcproj | 313 ++- msvc/8/wksbullet.sln | 1169 ++-------- msvc/appBasicSample.rc | 59 +- msvc/appCcdPhysicsDemo.rc | 61 +- msvc/appColladaDemo.rc | 61 +- msvc/appCollisionDemo.rc | 59 +- msvc/appCollisionInterfaceDemo.rc | 59 +- msvc/appConcaveDemo.rc | 59 +- msvc/appConstraintDemo.rc | 59 +- msvc/appContinuousConvexCollision.rc | 59 +- msvc/appConvexDecompositionDemo.rc | 61 +- msvc/appEPAPenDepthDemo.rc | 59 +- msvc/appGjkConvexCastDemo.rc | 59 +- msvc/appRaytracer.rc | 59 +- msvc/appSimplexDemo.rc | 59 +- 55 files changed, 12284 insertions(+), 13570 deletions(-) mode change 100644 => 100755 mk/autoconf/config.sub diff --git a/configure b/configure index 0aaea0136..5ac83dbbc 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for bullet 1.1.2006.0319. +# Generated by GNU Autoconf 2.59 for bullet 1.5.6. # # Report bugs to . # @@ -271,8 +271,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='bullet' PACKAGE_TARNAME='bullet' -PACKAGE_VERSION='1.1.2006.0319' -PACKAGE_STRING='bullet 1.1.2006.0319' +PACKAGE_VERSION='1.5.6' +PACKAGE_STRING='bullet 1.5.6' PACKAGE_BUGREPORT='bullet@erwincoumans.com' ac_unique_file="mk/jam/build.jam" @@ -313,7 +313,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX RANLIB ac_ct_RANLIB DLLTOOL ac_ct_DLLTOOL DLLWRAP ac_ct_DLLWRAP WINDRES ac_ct_WINDRES STRINGS ac_ct_STRINGS LIBTOOL_TEST ac_ct_LIBTOOL_TEST LIBTOOL_PATH LIBTOOL ac_ct_LIBTOOL CS_LT_APPLE APPLE_LIBTOOL MKDIR MKDIRS INSTALL DOXYGEN DOT ac_ct_DOT PERL TTREE CPP X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS EGREP LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX RANLIB ac_ct_RANLIB DLLTOOL ac_ct_DLLTOOL DLLWRAP ac_ct_DLLWRAP WINDRES ac_ct_WINDRES STRINGS ac_ct_STRINGS OBJCOPY ac_ct_OBJCOPY LIBTOOL_TEST ac_ct_LIBTOOL_TEST LIBTOOL_PATH LIBTOOL ac_ct_LIBTOOL CS_LT_APPLE APPLE_LIBTOOL MKDIR MKDIRS INSTALL DOXYGEN DOT ac_ct_DOT PERL TTREE CPP X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS EGREP LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -790,7 +790,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bullet 1.1.2006.0319 to adapt to many kinds of systems. +\`configure' configures bullet 1.5.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -855,7 +855,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bullet 1.1.2006.0319:";; + short | recursive ) echo "Configuration of bullet 1.5.6:";; esac cat <<\_ACEOF @@ -980,7 +980,7 @@ fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -bullet configure 1.1.2006.0319 +bullet configure 1.5.6 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -994,7 +994,7 @@ cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by bullet $as_me 1.1.2006.0319, which was +It was created by bullet $as_me 1.5.6, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -3263,6 +3263,7 @@ echo "$as_me: error: Could not find a usable C++ compiler." >&2;} fi + if test -n "$CXX"; then cs_build_prop_val="\$(CMD.C++)" cs_build_prop_val=`echo x$cs_build_prop_val | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` @@ -3314,7 +3315,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cs_build_ok=no - for cs_build_item in `echo @-shared@@ | sed 'y% %#%'` + for cs_build_item in `echo @-shared $cs_cv_prog_cxx_pic@@ | sed 'y% %#%'` do set filler `echo "$cs_build_item" | awk 'BEGIN { FS="@" } @@ -4305,11 +4306,11 @@ fi set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_STRINGS+set}" = set; then +if test "${ac_cv_prog_OBJCOPY+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test -n "$STRINGS"; then - ac_cv_prog_STRINGS="$STRINGS" # Let the user override the test. + if test -n "$OBJCOPY"; then + ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -4318,7 +4319,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRINGS="$ac_tool_prefix$ac_prog" + ac_cv_prog_OBJCOPY="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -4327,31 +4328,31 @@ done fi fi -STRINGS=$ac_cv_prog_STRINGS -if test -n "$STRINGS"; then - echo "$as_me:$LINENO: result: $STRINGS" >&5 -echo "${ECHO_T}$STRINGS" >&6 +OBJCOPY=$ac_cv_prog_OBJCOPY +if test -n "$OBJCOPY"; then + echo "$as_me:$LINENO: result: $OBJCOPY" >&5 +echo "${ECHO_T}$OBJCOPY" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi - test -n "$STRINGS" && break + test -n "$OBJCOPY" && break done fi -if test -z "$STRINGS"; then - ac_ct_STRINGS=$STRINGS +if test -z "$OBJCOPY"; then + ac_ct_OBJCOPY=$OBJCOPY for ac_prog in objcopy do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_STRINGS+set}" = set; then +if test "${ac_cv_prog_ac_ct_OBJCOPY+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test -n "$ac_ct_STRINGS"; then - ac_cv_prog_ac_ct_STRINGS="$ac_ct_STRINGS" # Let the user override the test. + if test -n "$ac_ct_OBJCOPY"; then + ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -4360,7 +4361,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRINGS="$ac_prog" + ac_cv_prog_ac_ct_OBJCOPY="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -4369,19 +4370,19 @@ done fi fi -ac_ct_STRINGS=$ac_cv_prog_ac_ct_STRINGS -if test -n "$ac_ct_STRINGS"; then - echo "$as_me:$LINENO: result: $ac_ct_STRINGS" >&5 -echo "${ECHO_T}$ac_ct_STRINGS" >&6 +ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY +if test -n "$ac_ct_OBJCOPY"; then + echo "$as_me:$LINENO: result: $ac_ct_OBJCOPY" >&5 +echo "${ECHO_T}$ac_ct_OBJCOPY" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi - test -n "$ac_ct_STRINGS" && break + test -n "$ac_ct_OBJCOPY" && break done - STRINGS=$ac_ct_STRINGS + OBJCOPY=$ac_ct_OBJCOPY fi cs_build_prop_val="$OBJCOPY" @@ -5241,6 +5242,180 @@ fi fi +#---------------------------------------------------------------------------- +# Check if C++ exceptions can be disabled. +#---------------------------------------------------------------------------- +echo "$as_me:$LINENO: checking how to disable C++ exceptions" >&5 +echo $ECHO_N "checking how to disable C++ exceptions... $ECHO_C" >&6 +if test "${cs_cv_prog_cxx_disable_exceptions_ok+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cs_cflags_save="$CXXFLAGS" + cs_lflags_save="$LDFLAGS" + cs_libs_save="$LIBS" + cs_build_ok=no + + + for cs_build_item in `echo @-fno-exceptions@@ | sed 'y% %#%'` + do + + set filler `echo "$cs_build_item" | awk 'BEGIN { FS="@" } + { for (i=1; i <= NF; ++i) + { if ($i == "") print "filler"; else print $i } }'` + shift + if test $# -eq 0; then + cs_dummy='' +else + if test "$1" = filler; then + cs_dummy='' +else + cs_dummy=$1 +fi + + shift +fi +if test $# -eq 0; then + cs_cflags_test='' +else + if test "$1" = filler; then + cs_cflags_test='' +else + cs_cflags_test=$1 +fi + + shift +fi +if test $# -eq 0; then + cs_lflags_test='' +else + if test "$1" = filler; then + cs_lflags_test='' +else + cs_lflags_test=$1 +fi + + shift +fi +if test $# -eq 0; then + cs_libs_test='' +else + if test "$1" = filler; then + cs_libs_test='' +else + cs_libs_test=$1 +fi + + shift +fi + + cs_cflags_test=`echo $cs_cflags_test | sed 'y%#% %'` + cs_lflags_test=`echo $cs_lflags_test | sed 'y%#% %'` + cs_libs_test=`echo $cs_libs_test | sed 'y%#% %'` + + CXXFLAGS="$cs_cflags_test $cs_cflags_save" + LDFLAGS="$cs_lflags_test $cs_lflags_save" + LIBS="$cs_libs_test $cs_libs_save" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cs_build_ok=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test $cs_build_ok = yes; then + break +fi + + done + + + CXXFLAGS=$cs_cflags_save + LDFLAGS=$cs_lflags_save + LIBS=$cs_libs_save + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + if test $cs_build_ok = yes; then + cs_build_cflags=`echo x$cs_cflags_test | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` + cs_build_lflags=`echo x$cs_lflags_test | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` + cs_build_libs=`echo x$cs_libs_test | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` + cs_cv_prog_cxx_disable_exceptions=`echo x$cs_build_cflags $cs_build_lflags $cs_build_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` + cs_cv_prog_cxx_disable_exceptions_ok="$cs_cv_prog_cxx_disable_exceptions" +else + cs_cv_prog_cxx_disable_exceptions='' + cs_cv_prog_cxx_disable_exceptions_ok=no +fi + +fi +echo "$as_me:$LINENO: result: $cs_cv_prog_cxx_disable_exceptions_ok" >&5 +echo "${ECHO_T}$cs_cv_prog_cxx_disable_exceptions_ok" >&6 + if test "$cs_cv_prog_cxx_disable_exceptions_ok" != no; then + cs_build_prop_val="$cs_cv_prog_cxx_disable_exceptions" + cs_build_prop_val=`echo x$cs_build_prop_val | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` + if test -n "$cs_build_prop_val"; then + cs_jamconfig_text="${cs_jamconfig_text}COMPILER.C++FLAGS.EXCEPTIONS.DISABLE ?= \"$cs_build_prop_val\" ; +" +fi + + cs_build_prop_val="$cs_cv_prog_cxx_disable_exceptions" + cs_build_prop_val=`echo x$cs_build_prop_val | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` + if test -n "$cs_build_prop_val"; then + cs_jamconfig_text="${cs_jamconfig_text}COMPILER.C++FLAGS += \"$cs_build_prop_val\" ; +" +fi + +fi + + + #---------------------------------------------------------------------------- # Determine system type #---------------------------------------------------------------------------- @@ -8855,7 +9030,7 @@ fi # Windows? if test $cs_host_family = windows; then - cs_win32_gl=`echo @@@-lopengl32 | sed 'y% %#%'` + cs_win32_glu=`echo @@@-lglu32 | sed 'y% %#%'` fi @@ -9723,7 +9898,7 @@ cs_jamconfig_text="${cs_jamconfig_text}PACKAGE_NAME ?= \"$PACKAGE_NAME\" ; " cs_jamconfig_text="${cs_jamconfig_text}PACKAGE_COPYRIGHT ?= \"$PACKAGE_COPYRIGHT\" ; " - for cs_veritem in 1 1 2006 0319; do + for cs_veritem in 1 5 6; do cs_jamconfig_text="${cs_jamconfig_text}PACKAGE_VERSION_LIST += \"$cs_veritem\" ; " done @@ -10100,7 +10275,7 @@ _ASBOX } >&5 cat >&5 <<_CSEOF -This file was extended by bullet $as_me 1.1.2006.0319, which was +This file was extended by bullet $as_me 1.5.6, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -10163,7 +10338,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -bullet config.status 1.1.2006.0319 +bullet config.status 1.5.6 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" @@ -10426,6 +10601,8 @@ s,@WINDRES@,$WINDRES,;t t s,@ac_ct_WINDRES@,$ac_ct_WINDRES,;t t s,@STRINGS@,$STRINGS,;t t s,@ac_ct_STRINGS@,$ac_ct_STRINGS,;t t +s,@OBJCOPY@,$OBJCOPY,;t t +s,@ac_ct_OBJCOPY@,$ac_ct_OBJCOPY,;t t s,@LIBTOOL_TEST@,$LIBTOOL_TEST,;t t s,@ac_ct_LIBTOOL_TEST@,$ac_ct_LIBTOOL_TEST,;t t s,@LIBTOOL_PATH@,$LIBTOOL_PATH,;t t diff --git a/mk/autoconf/config.guess b/mk/autoconf/config.guess index 2118ff3e4..dd1688b7b 100644 --- a/mk/autoconf/config.guess +++ b/mk/autoconf/config.guess @@ -1,1459 +1,1459 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. - -timestamp='2004-06-11' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit 0 ;; - amd64:OpenBSD:*:*) - echo x86_64-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - arc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - cats:OpenBSD:*:*) - echo arm-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - luna88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - macppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvmeppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - pmax:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mipseb-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sun3:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - wgrisc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit 0 ;; - macppc:MirBSD:*:*) - echo powerppc-unknown-mirbsd${UNAME_RELEASE} - exit 0 ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit 0 ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit 0 ;; - Alpha*:OpenVMS:*:*) - echo alpha-hp-vms - exit 0 ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit 0 ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit 0;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit 0 ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit 0 ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit 0 ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit 0;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit 0 ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit 0 ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit 0 ;; - DRS?6000:UNIX_SV:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7 && exit 0 ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit 0 ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit 0 ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit 0 ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit 0 ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c \ - && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && exit 0 - echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit 0 ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit 0 ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit 0 ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit 0 ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit 0 ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit 0 ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit 0 ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit 0 ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit 0 ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit 0 ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit 0 ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit 0 ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 - echo rs6000-ibm-aix3.2.5 - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit 0 ;; - *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit 0 ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit 0 ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit 0 ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit 0 ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit 0 ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - # avoid double evaluation of $set_cc_for_build - test -n "$CC_FOR_BUILD" || eval $set_cc_for_build - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit 0 ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 - echo unknown-hitachi-hiuxwe2 - exit 0 ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit 0 ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit 0 ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit 0 ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit 0 ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit 0 ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit 0 ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit 0 ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit 0 ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit 0 ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit 0 ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit 0 ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - *:UNICOS/mp:*:*) - echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:FreeBSD:*:*) - # Determine whether the default compiler uses glibc. - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #if __GLIBC__ >= 2 - LIBC=gnu - #else - LIBC= - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` - # GNU/KFreeBSD systems have a "k" prefix to indicate we are using - # FreeBSD's kernel, but not the complete OS. - case ${LIBC} in gnu) kernel_only='k' ;; esac - echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} - exit 0 ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit 0 ;; - i*:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit 0 ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit 0 ;; - x86:Interix*:[34]*) - echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' - exit 0 ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit 0 ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit 0 ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit 0 ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit 0 ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit 0 ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit 0 ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit 0 ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 - ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit 0 ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit 0 ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit 0 ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit 0 ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit 0 ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit 0 ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit 0 ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit 0 ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit 0 ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit 0 ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #ifdef __INTEL_COMPILER - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` - test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 - test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit 0 ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit 0 ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit 0 ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit 0 ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit 0 ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit 0 ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit 0 ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit 0 ;; - i*86:*:5:[78]*) - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit 0 ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit 0 ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit 0 ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit 0 ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit 0 ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit 0 ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit 0 ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit 0 ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit 0 ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3${OS_REL} && exit 0 - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit 0 ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit 0 ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit 0 ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit 0 ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit 0 ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit 0 ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit 0 ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit 0 ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit 0 ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit 0 ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit 0 ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit 0 ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit 0 ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit 0 ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Darwin:*:*) - case `uname -p` in - *86) UNAME_PROCESSOR=i686 ;; - powerpc) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit 0 ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit 0 ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit 0 ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit 0 ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit 0 ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit 0 ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit 0 ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit 0 ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit 0 ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit 0 ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit 0 ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit 0 ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit 0 ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit 0 ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit 0 ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit 0 ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - c34*) - echo c34-convex-bsd - exit 0 ;; - c38*) - echo c38-convex-bsd - exit 0 ;; - c4*) - echo c4-convex-bsd - exit 0 ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2004-06-11' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amd64:OpenBSD:*:*) + echo x86_64-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + cats:OpenBSD:*:*) + echo arm-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + luna88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit 0 ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit 0 ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha*:OpenVMS:*:*) + echo alpha-hp-vms + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && exit 0 + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + # avoid double evaluation of $set_cc_for_build + test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + # GNU/KFreeBSD systems have a "k" prefix to indicate we are using + # FreeBSD's kernel, but not the complete OS. + case ${LIBC} in gnu) kernel_only='k' ;; esac + echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:[34]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit 0 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + case `uname -p` in + *86) UNAME_PROCESSOR=i686 ;; + powerpc) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit 0 ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/mk/autoconf/config.sub b/mk/autoconf/config.sub old mode 100644 new mode 100755 index 70d15a9df..ba331039b --- a/mk/autoconf/config.sub +++ b/mk/autoconf/config.sub @@ -1,1549 +1,1549 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. - -timestamp='2004-03-12' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit 0;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ - kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | m32r | m32rle | m68000 | m68k | m88k | mcore \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64vr | mips64vrel \ - | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | msp430 \ - | ns16k | ns32k \ - | openrisc | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ - | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xscale | xstormy16 | xtensa \ - | z8k) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* \ - | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | mcore-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | msp430-* \ - | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ - | xtensa-* \ - | ymp-* \ - | z8k-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - cr16c) - basic_machine=cr16c-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - mmix*) - basic_machine=mmix-knuth - os=-mmixware - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nv1) - basic_machine=nv1-cray - os=-unicosmp - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - or32 | or32-*) - basic_machine=or32-unknown - os=-coff - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-ibm) - os=-aix - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2004-03-12' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32r | m32rle | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | msp430 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | msp430-* \ + | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nv1) + basic_machine=nv1-cray + os=-unicosmp + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/mk/jam/application.jam b/mk/jam/application.jam index 373bdb71c..79e5a63aa 100644 --- a/mk/jam/application.jam +++ b/mk/jam/application.jam @@ -1,164 +1,164 @@ -#============================================================================ -# Rules for compiling applications -# Copyright (C)2003 by Matze Braun -# -# 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" ; +#============================================================================ +# Rules for compiling applications +# Copyright (C)2003 by Matze Braun +# +# 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" ; diff --git a/mk/jam/assembler.jam b/mk/jam/assembler.jam index 11817c689..63a8ae54d 100644 --- a/mk/jam/assembler.jam +++ b/mk/jam/assembler.jam @@ -1,50 +1,50 @@ -#============================================================================ -# Rules for handling assembler files -# Copyright (C)2003 by Matze Braun -# -# 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 +# +# 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 $(<) $(>) +} +} diff --git a/mk/jam/bisonflex.jam b/mk/jam/bisonflex.jam index 7767bf4be..d1ce50fb4 100644 --- a/mk/jam/bisonflex.jam +++ b/mk/jam/bisonflex.jam @@ -1,165 +1,165 @@ -#============================================================================ -# Rules for flex and bison -# Copyright (C)2003 by Matze Braun -# -# 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 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[ ][ ]*\\)/#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 +# +# 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 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[ ][ ]*\\)/#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]) $(>) + } +} diff --git a/mk/jam/build.jam b/mk/jam/build.jam index 2708fa13b..954a03b4f 100644 --- a/mk/jam/build.jam +++ b/mk/jam/build.jam @@ -1,83 +1,83 @@ -#============================================================================ -# Main rules file - Includes all important rulefiles in correct order -# Copyright (C)2003 by Matze Braun -# -# 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 ; +#============================================================================ +# Main rules file - Includes all important rulefiles in correct order +# Copyright (C)2003 by Matze Braun +# +# 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 ; diff --git a/mk/jam/clean.jam b/mk/jam/clean.jam index 8bb5a7fb6..df734e766 100644 --- a/mk/jam/clean.jam +++ b/mk/jam/clean.jam @@ -1,37 +1,37 @@ -#============================================================================ -# Rules for cleaning build detritus. -# Copyright (C)2003 by Eric Sunshine -# -# 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 : ... -# 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 +# +# 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 : ... +# 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" ; diff --git a/mk/jam/compiler.jam b/mk/jam/compiler.jam index a096e25d7..b8e932a9a 100644 --- a/mk/jam/compiler.jam +++ b/mk/jam/compiler.jam @@ -1,76 +1,76 @@ -#============================================================================ -# Rules for C and C++ files -# Copyright (C)2003 by Matze Braun -# -# 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 +# +# 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++) + diff --git a/mk/jam/docs.jam b/mk/jam/docs.jam index 2b825327d..f54fe6b18 100644 --- a/mk/jam/docs.jam +++ b/mk/jam/docs.jam @@ -1,688 +1,688 @@ -#============================================================================ -# Rules for creating Documentation -# Copyright (C)2005 by Eric Sunshine -# -# 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. -# -#============================================================================ - -# Do-nothing implementations which avoid Jam error messages if client Jamfiles -# attempt to invoke documantation-generation rules despite lack of availability -# of appropriate tools. This simplifies client Jamfiles since the client does -# not need to check for the presence of the various tools. These rules will be -# re-defined later if the necessary tools are available. -rule Texi2Info { } -rule Texi2HTML { } -rule Texi2DVI { } -rule Texi2PS { } -rule Texi2PDF { } -rule Doxygen { } -rule RepairNodes { } - -if $(PERL) -{ - PATH.TEXI2HTML.HOME ?= [ ConcatDirs $(TOP) docs support ] ; - PATH.TEXI2HTML ?= [ ConcatDirs $(PATH.TEXI2HTML.HOME) texi2html.pl ] ; - CMD.TEXI2HTML ?= "$(PERL) $(PATH.TEXI2HTML)" ; -} - -if $(CMD.MAKEINFO) -{ -## Texi2Info targetname : texifiles : outputformat [ : subdir : [ outfile : -## [ options ]]] -## Invoke the makeinfo utility to convert Texinfo source (typically) to Info -## format when the pseudo target 'targetname' is invoked. 'texifiles' is a -## list of Texinfo files to be converted. The first element of 'texifiles' -## should be the top-level Texinfo document which includes the remaining -## files. It is okay for 'texifiles' to mention only a single Texinfo source -## if the entire document is contained in the one file. 'outputformat' is -## one of "info", "html", "xml", or "docbook". If not specified, it -## defaults to "info". The optional 'subdir' is a subdirectory of -## $(LOCATE.DOCS) into which the generated files should be placed. The -## optional 'outfile' is the name of the output file. Some output formats -## may generate multiple output files (such as "outfile.info", -## "outfile-1.info", "outfile-2.info", etc.). If 'outfile' is omitted, then -## the output filename is derived from the first element of 'texifiles' with -## the extension changed to reflect 'outputformat' (one of .info, .html, -## .xml, or .docbook). 'options' is a set of command-line flags passed -## directly to makeinfo. Returns the gristed output file name. -rule Texi2Info -{ - local target = $(1) ; - local texifiles = $(2) ; - local format = $(3) ; - local subdir = $(4) ; - local outfile = $(5) ; - local options = $(6) ; - - if ! $(format) { format = info ; } - - local fmtoptions ; - switch $(format) - { - case info : fmtoptions = ; - case html : fmtoptions = --html ; - case xml : fmtoptions = --xml ; - case docbook : fmtoptions = --docbook ; - } - - return [ _Texinfo $(target) : $(texifiles) : $(format) : $(outfile) : - RunMakeInfo : $(fmtoptions) $(options) : $(subdir) ] ; -} -} - -if $(CMD.TEXI2HTML) -{ -## Texi2HTML targetname : texifiles [ : subdir : [ outfile : [ options ]]] -## Invoke the texi2html utility to convert Texinfo source to HTML format -## when the pseudo target 'targetname' is invoked. 'texifiles' is a list of -## Texinfo files to be converted. The first element of 'texifiles' should -## be the top-level Texinfo document which includes the remaining files. It -## is okay for 'texifiles' to mention only a single Texinfo source if the -## entire document is contained in the one file. The optional 'subdir' is a -## subdirectory of $(LOCATE.DOCS) into which the generated files should be -## placed. The optional 'outfile' is the name of the root output file -## (typically "index.html"). If the input files contain multiple Texinfo -## @nodes, then texi2html may generate multiple output files (depending upon -## local texi2html configuration) based upon the section numbering, and -## 'outfile' will reference the other generated files. If 'outfile' is -## omitted, then the output filename is derived from the first element of -## 'texifiles' with the extension changed to .html. 'options' is a set of -## command-line flags passed directly to texi2html. Returns the gristed -## output file name. -rule Texi2HTML -{ - local target = $(1) ; - local texifiles = $(2) ; - local subdir = $(3) ; - local outfile = $(4) ; - local options = $(5) ; - return [ _Texinfo $(target) : $(texifiles) : html : $(outfile) : - RunTexi2HTML : $(options) : $(subdir) ] ; -} -} - -if $(CMD.TEXI2DVI) -{ -## Texi2DVI targetname : texifiles [ : subdir [ : outfile [ : options ]]] -## Invoke the texi2dvi utility to convert Texinfo source to DVI format when -## the pseudo target 'targetname' is invoked. 'texifiles' is a list of -## Texinfo files to be converted. The first element of 'texifiles' should -## be the top-level Texinfo document which includes the remaining files. It -## is okay for 'texifiles' to mention only a single Texinfo source if the -## entire document is contained in the one file. The optional 'subdir' is a -## subdirectory of $(LOCATE.DOCS) into which the generated file should be -## placed. The optional 'outfile' is the name of the output file. If -## 'outfile' is omitted, then the output filename is derived from the first -## element of 'texifiles' with the extension changed to .dvi. 'options' is a -## set of command-line flags passed directly to texi2dvi. Returns the -## gristed output file name. -rule Texi2DVI -{ - return [ _Texi2DVI $(1) : $(2) : $(3) : $(4) : $(5) : dvi ] ; -} - -if $(CMD.DVIPS) -{ -## Texi2PS targetname : texifile [ : subdir [ : outfile [ : psoptions -## [ : dvioptions ]]]] -## Invoke the texi2dvi and dvips utilities to convert Texinfo source to -## PostScript format when the pseudo target 'targetname' is invoked. -## 'texifiles' is a list of Texinfo files to be converted. The first -## element of 'texifiles' should be the top-level Texinfo document which -## includes the remaining files. It is okay for 'texifiles' to mention only -## a single Texinfo source if the entire document is contained in the one -## file. The optional 'subdir' is a subdirectory of $(LOCATE.DOCS) into -## which the generated file should be placed. The optional 'outfile' is the -## name of the output file. If 'outfile' is omitted, then the output -## filename is derived from the first element of 'texifiles' with the -## extension changed to .ps. 'psoptions' is a set of command-line flags -## passed directly to dvips. 'dvioptions' is a set of command-line flags -## passed directly to texi2dvi. Returns the gristed output file name. -rule Texi2PS -{ - local target = $(1) ; - local texifiles = $(2) ; - local subdir = $(3) ; - local outfile = $(4) ; - local psoptions = $(5) ; - local dvioptions = $(6) ; - return [ _Dvi $(target) : $(texifiles) : ps : $(outfile:S=.ps) : RunDVIPS : - $(psoptions) : $(dvioptions) : $(subdir) ] ; -} -} - -if $(CMD.DVIPDF) -{ -## Texi2PDF targetname : texifiles [ : subdir [ : outfile [ : pdfoptions -## [ : dvioptions ]]]] -## Invoke the texi2dvi and dvipdf utilities to convert Texinfo source to PDF -## format when the pseudo target 'targetname' is invoked. 'texifiles' is a -## list of Texinfo files to be converted. The first element of 'texifiles' -## should be the top-level Texinfo document which includes the remaining -## files. It is okay for 'texifiles' to mention only a single Texinfo source -## if the entire document is contained in the one file. The optional -## 'subdir' is a subdirectory of $(LOCATE.DOCS) into which the generated -## file should be placed. The optional 'outfile' is the name of the output -## file. If 'outfile' is omitted, then the output filename is derived from -## the first element of 'texifiles' with the extension changed to .pdf. -## 'pdfoptions' is a set of command-line flags passed directly to -## dvipdf. 'dvioptions' is a set of command-line flags passed directly to -## texi2dvi. Returns the gristed output file name. -rule Texi2PDF -{ - local target = $(1) ; - local texifiles = $(2) ; - local subdir = $(3) ; - local outfile = $(4) ; - local pdfoptions = $(5) ; - local dvioptions = $(6) ; - - local pdffile = [ _Dvi $(target) : $(texifiles) : pdf : $(outfile:S=.pdf) : - RunDVIPDF : $(pdfoptions) : $(dvioptions) : $(subdir) ] ; - CONVERTER on $(pdffile) = $(CMD.DVIPDF) ; - return pdffile ; -} -} -else if $(CMD.TEXI2PDF) -{ -## Texi2PDF targetname : texifiles [ : subdir [ : outfile [ : options ]]] -## Invoke the texi2pdf utility to convert Texinfo source to PDF format when -## the pseudo target 'targetname' is invoked. 'texifiles' is a list of -## Texinfo files to be converted. The first element of 'texifiles' should -## be the top-level Texinfo document which includes the remaining files. It -## is okay for 'texifiles' to mention only a single Texinfo source if the -## entire document is contained in the one file. The optional 'subdir' is a -## subdirectory of $(LOCATE.DOCS) into which the generated file should be -## placed. The optional 'outfile' is the name of the output file. If -## 'outfile' is omitted, then the output filename is derived from the first -## element of 'texifiles' with the extension changed to .pdf. 'options' is a -## set of command-line flags passed directly to texi2pdf. Returns the -## gristed output file name. -rule Texi2PDF -{ - local target = $(1) ; - local texifiles = $(2) ; - local subdir = $(3) ; - local outfile = $(4) ; - local options = $(5) ; - local pdffile = [ _Texinfo $(target) : $(texifiles) : pdf : $(outfile) : - RunTexi2DVI : -I $(SUBDIR) $(options) : $(subdir) ] ; - CONVERTER on $(pdffile) = $(CMD.TEXI2PDF) ; - OPTIONS on $(pdffile) += $(FLAGS.TEXI2PDF) ; - return pdffile ; -} -} -} - -if $(PERL) -{ -PATH.NODEFIX ?= [ ConcatDirs $(TOP) docs support nodefix.pl ] ; -CMD.NODEFIX ?= $(PERL) $(PATH.NODEFIX) ; - -## RepairNodes targetname : texifile [ : srcdir ] -## When 'targetname' is invoked, perform in-place repair of @node and @menu -## directives in 'texifile' so that they correctly reflect the documentation -## hierarchy defined by @chapter, @section, @subsection, etc. directives. -## 'srcdir' is the directory containing 'texifile' as well as any files -## included via @include{} or @import{} directives. If 'srcdir' is omitted, -## then $(SUBDIR) is assumed. -rule RepairNodes -{ - local target = $(1) ; - local texifile = $(2) ; - local srcdir = $(3) ; - if ! $(srcdir) { srcdir = $(SUBDIR) ; } - - SEARCH on $(texifile) = $(srcdir) ; - TEXINFO.INCDIR on $(target) = $(srcdir) ; - Depends $(target) : $(texifile) ; - NotFile $(target) ; - Always $(target) ; -} - -actions RepairNodes -{ - $(CMD.NODEFIX) --include-dir="$(TEXINFO.INCDIR)" "$(>)" ; -} -} - -if $(CMD.DOXYGEN) -{ - -actions WriteCppWrapper -{ - echo "$(DOXYCPP_COMMAND)" > "$(1)" -} - -rule GenerateDoxygenCppWrapper -{ - local target = $(1) ; - local cxxcpp = $(2) ; - - local outfile cmdpath command ; - if $(TARGET.OS) = WIN32 - { - # On Win32, MSYS is not used but the "native" process running, so we can't - # launch the preprocessor with sh. - outfile = "cpp.cmd" ; - local p = [ SplitToList $(LOCATE.DOCS) : "/" ] $(outfile) ; - cmdpath = $(p:J=\\\\) ; - command = "$(cxxcpp)" %1 ; - } - else - { - outfile = "cpp.sh" ; - local p = $(LOCATE.DOCS) $(outfile) ; - cmdpath = $(p:J=/) ; - command = "$(cxxcpp)" \\$1 ; - } - MakeLocate $(outfile) : $(LOCATE.DOCS) ; - DOXYCPP_COMMAND on $(outfile) = $(command) ; - WriteCppWrapper $(outfile) ; - MODE on $(outfile) = "+x" ; - Chmod $(outfile) ; - - Always $(outfile) ; - Depends $(target) : $(outfile) ; - Clean $(target)clean : $(outfile) ; - - return $(cmdpath) ; -} - -## Doxygen targetname : doxyprofile-and-resources [ : subdir [ : outfile -## [ : options ]]] -## Invoke the Doxygen utility to generate API documentation based upon -## 'doxyprofile' when the pseudo target 'targetname' is invoked. The first -## element of 'doxyprofile-and-resources' is the Doxygen configuration file -## which controls the API generation. The remaining optional elements are -## additional resources which should be copied verbatim to the output -## directory. Typical additional resources include CSS and related image -## files. It is assumed that the source files mentioned by -## 'doxyprofile-and-resources' reside in $(SUBDIR). The optional 'subdir' -## is a subdirectory of $(LOCATE.DOCS) into which the generated files should -## be placed. The optional 'outfile' is the name of the root output file -## (typically "index.html"). This file will reference any other files -## generated by Doxygen. If 'outfile' is omitted, then the output filename -## defaults to "index.html". 'options' is a set of command-line flags -## passed directly to Doxygen. Returns the gristed output file name. -rule Doxygen -{ - local target = $(1) ; - local infiles = $(2) ; - local subdir = $(3) ; - local outfile = $(4) ; - local optioins = $(5) ; - local doxyfile = $(infiles[1]) ; - local resources = $(infiles[2-]) ; - local outdir = [ FDirName $(LOCATE.DOCS) $(subdir) ] ; - local grist = "$(SOURCE_GRIST)!$(target)" ; - - if ! $(outfile) - { - outfile = index.html ; - } - outfile = $(outfile:G=$(grist)) ; - - local r ; - for r in $(resources) - { - local src = $(r:G=$(grist)!src) ; - local dst = $(r:G=$(grist)!dst) ; - SEARCH on $(src) = $(SUBDIR) ; - MakeLocate $(dst) : $(outdir) ; - Copy $(dst) : $(src) ; - Depends $(dst) : $(src) ; - Depends $(outfile) : $(dst) ; - Clean $(target)clean : $(dst) ; - } - - local doxycpp ; - if $(CMD.C++CPP) - { - doxycpp = [ GenerateDoxygenCppWrapper $(outfile) : - $(CMD.C++CPP) [ FDefines DOXYGEN_RUN ] ] ; - } - - local have_dot = "NO" ; - local dot_path ; - if $(CMD.DOT) - { - local dotpath = [ Reverse [ SplitToList $(CMD.DOT) : / ] ] ; - if $(dotpath[1]) != "dot" - { - Echo "doxygen expects the dot binary to be named 'dot' exactly" ; - } - else - { - dot_path = [ Reverse $(dotpath[2-]) ] ; - dot_path = $(dot_path:J=/) ; - have_dot = "YES" ; - } - } - - SEARCH on $(doxyfile) = $(SUBDIR) ; - OPTIONS on $(target) = $(options) ; - DOXYCPP on $(target) = $(doxycpp) ; - HAVE_DOT on $(target) = $(have_dot) ; - DOT_PATH on $(target) = $(dot_path) ; - MakeLocate $(outfile) : $(outdir) ; - Depends $(outfile) : $(doxyfile) ; - Depends $(target) : $(outfile) ; - RunDoxygen $(target) : $(doxyfile) ; - NotFile $(target) ; - Always $(target) ; - Clean $(target)clean : $(outfile) ; - if $(subdir) - { - CleanDir $(target)clean : $(outdir) ; - } - Depends cleandoc : $(target)clean ; - return outfile ; -} -} - -#---------------------------------------------------------------------------- -# Private helper rules and actions. - -## _Texinfo targetname : texifiles : format : [ outfile ] : converter -## [ : options [ : subdir ]] -## The workhorse of the various Texinfo conversion rules. This rule sets up -## a pseudo-target 'targetname' which takes care of copying image files to -## the output directory if needed by the output format, gristing intput and -## output files, invoking the specified low-level conversion rule, and -## cleaning up temporary files upon completion. 'texifiles' is a list of -## Texinfo files to be converted. The first element of 'texifiles' should -## be the top-level Texinfo document which @includes the remaining files. It -## is okay for 'texifiles' to mention only a single Texinfo source if the -## entire document is contained in the one file. 'format' is one of "info", -## "html", "xml", "docbook", "dvi", "ps", or "pdf", and is used in the -## formulation of the grist, and as the extension of 'outfile' if omitted. -## The format also determines which type of image files (if any) should be -## copied to the output directory, and whether the copied images should be -## cleaned up upon completion. 'outfile' is the name of the root output -## file. If 'outfile' is omitted, then the output filename is derived from -## the first element of 'texifiles' with the extension changed to reflect -## 'format'. 'converter' is the Jam rule which will perform the actual -## conversion. It is passed 'outfile' as $(<), and the first element of -## 'texifiles' as $(>). The optional 'subdir' is a subdirectory of -## $(LOCATE.DOCS) into which the generated files should be placed. -## 'options' is a set of command-line flags to be passed directly to the -## underlying conversion tool. Returns the gristed output file name. The -## following variables may be accessed from within the 'converter' action: -## $(SRCDIR) - Value of $(SUBDIR) when this rule was invoked. -## $(OUTDIR) - Directory into which output files should be emitted. -## $(OUTLOG) - Name of a log file within $(OUTDIR) into which 'converter' -## may direct diagnostic output of conversion tool if needed. -## $(FORMAT) - Value of 'format'. -## $(OPTIONS) - Value of 'options'. -rule _Texinfo -{ - local target = $(1) ; - local texifiles = $(2) ; - local format = $(3) ; - local outfile = $(4) ; - local converter = $(5) ; - local options = $(6) ; - local subdir = $(7) ; - local outdir = [ FDirName $(LOCATE.DOCS) $(subdir) ] ; - local grist = "$(SOURCE_GRIST)!$(target)!$(format)" ; - local outlog ; - - local texifile = $(texifiles[1]:G=$(grist)) ; - local texideps = $(texifiles[2-]) ; - - if ! $(outfile) - { - outfile = $(texifile:BS=.$(format)) ; - } - outfile = $(outfile:G=$(grist)) ; - outlog = $(outfile:G=:R=$(outdir):S=$(outfile:S)log) ; - - local inftypes = .txt ; - local xmltypes = .jpg .png .gif ; - local dvitypes = .eps .pdf ; - local pstypes = .eps ; - local pdftypes = .eps .pdf ; - local imagetypes copyimages ; - switch $(format) - { - case info : imagetypes = $(inftypes) ; copyimages = no ; - case html : imagetypes = $(xmltypes) ; copyimages = yes ; - case xml : imagetypes = $(xmltypes) ; copyimages = yes ; - case docbook : imagetypes = $(xmltypes) ; copyimages = yes ; - case dvi : imagetypes = $(dvitypes) ; copyimages = yes ; - case ps : imagetypes = $(pstypes) ; copyimages = no ; - case pdf : imagetypes = $(pdftypes) ; copyimages = no ; - case * : Error "Texinfo: unrecognized output format" $(format) ; - } - - local images ; - if $(imagetypes) { images = [ Recurse : $(imagetypes) ] ; } - - local image ; - for image in $(images) - { - local imagegrist = "$(grist)!$(image:D)" ; - local src = $(image:BSG=$(imagegrist)) ; - local srcdir = [ ConcatDirs $(SUBDIR) $(image:D) ] ; - SEARCH on $(src) = $(srcdir) ; - if $(copyimages) = no - { - Includes $(texifile) : $(src) ; - } - else - { - local dst = $(image:BSG=$(imagegrist)built) ; - local dstdir = [ ConcatDirs $(outdir) $(image:D) ] ; - MakeLocate $(dst) : $(dstdir) ; - Copy $(dst) : $(src) ; - Depends $(dst) : $(src) ; - Depends $(outfile) : $(dst) ; - Clean $(target)clean : $(dst) ; - } - } - - SRCDIR on $(outfile) = $(SUBDIR) ; - OUTDIR on $(outfile) = $(outdir) ; - OUTLOG on $(outfile) = $(outlog) ; - FORMAT on $(outfile) = $(format) ; - OPTIONS on $(outfile) = $(options) ; - - SEARCH on $(texifile) = $(SUBDIR) ; - SEARCH on $(texideps) = $(SUBDIR) ; - Includes $(texifile) : $(texideps) ; - MakeLocate $(outfile) : $(outdir) ; - Depends $(outfile) : $(texifile) ; - Depends $(target) : $(outfile) ; - $(converter) $(outfile) : $(texifile) ; - NotFile $(target) ; - Clean $(target)clean : $(outfile) ; - if $(subdir) - { - CleanDir $(target)clean : $(outdir) ; - } - Depends cleandoc : $(target)clean ; - - return $(outfile) ; -} - -## _Texi2DVI targetname : texifiles [ : subdir [ : outfile [ : options -## [ : format ]]]] -## A thin wrapper around the _Texinfo rule which invokes TeX-wrapping tools -## such as texi2dvi and texi2pdf. The action for this rule captures the -## output of TeX into a log file and tells the user to consult the log file -## if TeX fails. It also monitors the log file for TeX `hbox' warnings, and -## informs the user to consult the log if any are discovered. The log file -## is removed silently if no problems are detected. Returns the gristed -## output DVI file name. In addition to the variables exported by the -## _Texinfo rule, the following variables may be accessed from within the -## action: -## $(CONVERTER) - The actual command-line tool wrapping TeX. -rule _Texi2DVI -{ - local target = $(1) ; - local texifiles = $(2) ; - local subdir = $(3) ; - local outfile = $(4) ; - local options = $(5) ; - local format = $(6) ; - local dvifile = [ _Texinfo $(target) : $(texifiles) : $(format) : - $(outfile) : RunTexi2DVI : -I $(SUBDIR) $(options) : $(subdir) ] ; - CONVERTER on $(dvifile) = $(CMD.TEXI2DVI) ; - OPTIONS on $(dvifile) += $(FLAGS.TEXI2DVI) ; - return $(dvifile) ; -} - -## _Dvi targetname : texifiles : format : outfile : converter [ : options -## [ : dvioptions [ : subdir ]]] -## A wrapper around the _Texi2DVI rule which also runs a secondary -## conversion rule/action on the generated DVI file. Examples of secondary -## conversions include dvips, dvipdf, etc. The arguments 'targetname', -## 'format', 'outfile', and 'subdir' have the same meaning as for the -## _Texinfo and _Texi2DVI rules. 'converter' is the rule/action which -## converts the generated DVI file to the final output format. 'options' is -## a set of command-line flags to be passed directly to the underlying -## secondary conversion tool. 'dvioptions' are the command-line options -## passed to _Texi2DVI. As with the _Texi2DVI rule, this rule captures the -## output of the secondary conversion tool to a log file and instructs the -## user to consult it when a problem is detected. Returns the gristed -## output file name. -rule _Dvi -{ - local target = $(1) ; - local texifiles = $(2) ; - local format = $(3) ; - local outfile = $(4) ; - local converter = $(5) ; - local options = $(6) ; - local dvioptions = $(7) ; - local subdir = $(8) ; - - local dvifile = [ _Texi2DVI _$(target)_dvi : $(texifiles) : $(subdir) : - $(outfile:S=.dvi) : $(dvioptions) : $(format) ] ; - - if ! $(outfile) - { - outfile = $(dvifile:BS=.$(format)) ; - } - local outdir = [ FDirName $(LOCATE.DOCS) $(subdir) ] ; - local outlog = $(outfile:G=:R=$(outdir):S=$(outfile:S)log) ; - - SRCDIR on $(outfile) = $(SUBDIR) ; - OUTLOG on $(outfile) = $(outlog) ; - FORMAT on $(outfile) = $(format) ; - OPTIONS on $(outfile) = $(psoptions) ; - - MakeLocate $(outfile) : $(outdir) ; - Depends $(outfile) : $(dvifile) ; - Depends $(target) : $(outfile) ; - $(converter) $(outfile) : $(dvifile) ; - RmTemps $(outfile) : $(dvifile) ; - Clean $(target)clean : $(outfile) $(dvifile) ; - NotFile $(target) ; - NotFile $(target)clean ; - if $(subdir) - { - CleanDir $(target)clean : $(outdir) ; - } - - return $(outfile) ; -} - -# Unfortunately, `makeinfo' 4.3, which ships with MSYS, does not respect the -# search path (-I) for @image{} directives, so we need to `cd' into the source -# directory to work around this shortcoming. With modern versions of -# `makeinfo', we could instead just use `-I$(SRCDIR)' instead of the pwd/cd -# goop. -actions RunMakeInfo -{ - dir=`pwd` ; \ - cd $(>:D) ; \ - $(CMD.MAKEINFO) $(OPTIONS) $(FLAGS.MAKEINFO) --output="${dir}/$(<)" $(>:B) -} - -actions RunTexi2HTML -{ - T2H_HOME="$(PATH.TEXI2HTML.HOME)" \ - $(CMD.TEXI2HTML) $(OPTIONS) $(FLAGS.TEXI2HTML) -subdir="$(OUTDIR)" \ - -top-file="$(<:BS)" "$(>)" -} - -actions RunTexi2DVI -{ - $(CONVERTER) $(OPTIONS) --batch --output=$(<) $(>) > $(OUTLOG) 2>&1 - if test $? -ne 0; then - echo "*** ERROR: $(CONVERTER) reported one or more errors." - echo "*** ERROR: See $(OUTLOG) for details." - false - fi - if test $? -eq 0; then - grep hbox $(OUTLOG) >/dev/null 2>&1 - if test $? -eq 0; then - echo "*** WARNING: $(CONVERTER) reported 'hbox' warnings." && \ - echo "*** WARNING: See $(OUTLOG) for details." - else - $(RM) $(OUTLOG) - fi - true - else - false - fi -} - -actions RunDVIPS -{ - TEXPICTS="$(SRCDIR)" \ - $(CMD.DVIPS) $(OPTIONS) -o $(<) $(>) > $(OUTLOG) 2>&1 - if test $? -ne 0; then - echo "*** ERROR: $(CMD.DVIPS) reported one or more errors." - echo "*** ERROR: See $(OUTLOG) for details." - false - else - $(RM) $(OUTLOG) - true - fi -} - -actions RunDVIPDF -{ - TEXPICTS="$(SRCDIR)" \ - $(CMD.DVIPDF) $(OPTIONS) $(>) $(<) > $(OUTLOG) 2>&1 - if test $? -ne 0; then - echo "*** ERROR: $(CMD.DVIPDF) reported one or more errors." - echo "*** ERROR: See $(OUTLOG) for details." - false - else - $(RM) $(OUTLOG) - true - fi -} - -actions RunDoxygen -{ - TOP=$(TOP) DOXYCPP=$(DOXYCPP) HAVE_DOT=$(HAVE_DOT) DOT_PATH=$(DOT_PATH) $(CMD.DOXYGEN) $(OPTIONS) $(FLAGS.DOXYGEN) $(>) -} - -#---------------------------------------------------------------------------- -# Additional clean rules. - -CleanDir cleandoc : $(LOCATE.DOCS) ; -Depends clean : cleandoc ; -Help cleandoc : "Remove built documentation files" ; - -Always docclean ; -NotFile docclean ; -Depends docclean : cleandoc ; +#============================================================================ +# Rules for creating Documentation +# Copyright (C)2005 by Eric Sunshine +# +# 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. +# +#============================================================================ + +# Do-nothing implementations which avoid Jam error messages if client Jamfiles +# attempt to invoke documantation-generation rules despite lack of availability +# of appropriate tools. This simplifies client Jamfiles since the client does +# not need to check for the presence of the various tools. These rules will be +# re-defined later if the necessary tools are available. +rule Texi2Info { } +rule Texi2HTML { } +rule Texi2DVI { } +rule Texi2PS { } +rule Texi2PDF { } +rule Doxygen { } +rule RepairNodes { } + +if $(PERL) +{ + PATH.TEXI2HTML.HOME ?= [ ConcatDirs $(TOP) docs support ] ; + PATH.TEXI2HTML ?= [ ConcatDirs $(PATH.TEXI2HTML.HOME) texi2html.pl ] ; + CMD.TEXI2HTML ?= "$(PERL) $(PATH.TEXI2HTML)" ; +} + +if $(CMD.MAKEINFO) +{ +## Texi2Info targetname : texifiles : outputformat [ : subdir : [ outfile : +## [ options ]]] +## Invoke the makeinfo utility to convert Texinfo source (typically) to Info +## format when the pseudo target 'targetname' is invoked. 'texifiles' is a +## list of Texinfo files to be converted. The first element of 'texifiles' +## should be the top-level Texinfo document which includes the remaining +## files. It is okay for 'texifiles' to mention only a single Texinfo source +## if the entire document is contained in the one file. 'outputformat' is +## one of "info", "html", "xml", or "docbook". If not specified, it +## defaults to "info". The optional 'subdir' is a subdirectory of +## $(LOCATE.DOCS) into which the generated files should be placed. The +## optional 'outfile' is the name of the output file. Some output formats +## may generate multiple output files (such as "outfile.info", +## "outfile-1.info", "outfile-2.info", etc.). If 'outfile' is omitted, then +## the output filename is derived from the first element of 'texifiles' with +## the extension changed to reflect 'outputformat' (one of .info, .html, +## .xml, or .docbook). 'options' is a set of command-line flags passed +## directly to makeinfo. Returns the gristed output file name. +rule Texi2Info +{ + local target = $(1) ; + local texifiles = $(2) ; + local format = $(3) ; + local subdir = $(4) ; + local outfile = $(5) ; + local options = $(6) ; + + if ! $(format) { format = info ; } + + local fmtoptions ; + switch $(format) + { + case info : fmtoptions = ; + case html : fmtoptions = --html ; + case xml : fmtoptions = --xml ; + case docbook : fmtoptions = --docbook ; + } + + return [ _Texinfo $(target) : $(texifiles) : $(format) : $(outfile) : + RunMakeInfo : $(fmtoptions) $(options) : $(subdir) ] ; +} +} + +if $(CMD.TEXI2HTML) +{ +## Texi2HTML targetname : texifiles [ : subdir : [ outfile : [ options ]]] +## Invoke the texi2html utility to convert Texinfo source to HTML format +## when the pseudo target 'targetname' is invoked. 'texifiles' is a list of +## Texinfo files to be converted. The first element of 'texifiles' should +## be the top-level Texinfo document which includes the remaining files. It +## is okay for 'texifiles' to mention only a single Texinfo source if the +## entire document is contained in the one file. The optional 'subdir' is a +## subdirectory of $(LOCATE.DOCS) into which the generated files should be +## placed. The optional 'outfile' is the name of the root output file +## (typically "index.html"). If the input files contain multiple Texinfo +## @nodes, then texi2html may generate multiple output files (depending upon +## local texi2html configuration) based upon the section numbering, and +## 'outfile' will reference the other generated files. If 'outfile' is +## omitted, then the output filename is derived from the first element of +## 'texifiles' with the extension changed to .html. 'options' is a set of +## command-line flags passed directly to texi2html. Returns the gristed +## output file name. +rule Texi2HTML +{ + local target = $(1) ; + local texifiles = $(2) ; + local subdir = $(3) ; + local outfile = $(4) ; + local options = $(5) ; + return [ _Texinfo $(target) : $(texifiles) : html : $(outfile) : + RunTexi2HTML : $(options) : $(subdir) ] ; +} +} + +if $(CMD.TEXI2DVI) +{ +## Texi2DVI targetname : texifiles [ : subdir [ : outfile [ : options ]]] +## Invoke the texi2dvi utility to convert Texinfo source to DVI format when +## the pseudo target 'targetname' is invoked. 'texifiles' is a list of +## Texinfo files to be converted. The first element of 'texifiles' should +## be the top-level Texinfo document which includes the remaining files. It +## is okay for 'texifiles' to mention only a single Texinfo source if the +## entire document is contained in the one file. The optional 'subdir' is a +## subdirectory of $(LOCATE.DOCS) into which the generated file should be +## placed. The optional 'outfile' is the name of the output file. If +## 'outfile' is omitted, then the output filename is derived from the first +## element of 'texifiles' with the extension changed to .dvi. 'options' is a +## set of command-line flags passed directly to texi2dvi. Returns the +## gristed output file name. +rule Texi2DVI +{ + return [ _Texi2DVI $(1) : $(2) : $(3) : $(4) : $(5) : dvi ] ; +} + +if $(CMD.DVIPS) +{ +## Texi2PS targetname : texifile [ : subdir [ : outfile [ : psoptions +## [ : dvioptions ]]]] +## Invoke the texi2dvi and dvips utilities to convert Texinfo source to +## PostScript format when the pseudo target 'targetname' is invoked. +## 'texifiles' is a list of Texinfo files to be converted. The first +## element of 'texifiles' should be the top-level Texinfo document which +## includes the remaining files. It is okay for 'texifiles' to mention only +## a single Texinfo source if the entire document is contained in the one +## file. The optional 'subdir' is a subdirectory of $(LOCATE.DOCS) into +## which the generated file should be placed. The optional 'outfile' is the +## name of the output file. If 'outfile' is omitted, then the output +## filename is derived from the first element of 'texifiles' with the +## extension changed to .ps. 'psoptions' is a set of command-line flags +## passed directly to dvips. 'dvioptions' is a set of command-line flags +## passed directly to texi2dvi. Returns the gristed output file name. +rule Texi2PS +{ + local target = $(1) ; + local texifiles = $(2) ; + local subdir = $(3) ; + local outfile = $(4) ; + local psoptions = $(5) ; + local dvioptions = $(6) ; + return [ _Dvi $(target) : $(texifiles) : ps : $(outfile:S=.ps) : RunDVIPS : + $(psoptions) : $(dvioptions) : $(subdir) ] ; +} +} + +if $(CMD.DVIPDF) +{ +## Texi2PDF targetname : texifiles [ : subdir [ : outfile [ : pdfoptions +## [ : dvioptions ]]]] +## Invoke the texi2dvi and dvipdf utilities to convert Texinfo source to PDF +## format when the pseudo target 'targetname' is invoked. 'texifiles' is a +## list of Texinfo files to be converted. The first element of 'texifiles' +## should be the top-level Texinfo document which includes the remaining +## files. It is okay for 'texifiles' to mention only a single Texinfo source +## if the entire document is contained in the one file. The optional +## 'subdir' is a subdirectory of $(LOCATE.DOCS) into which the generated +## file should be placed. The optional 'outfile' is the name of the output +## file. If 'outfile' is omitted, then the output filename is derived from +## the first element of 'texifiles' with the extension changed to .pdf. +## 'pdfoptions' is a set of command-line flags passed directly to +## dvipdf. 'dvioptions' is a set of command-line flags passed directly to +## texi2dvi. Returns the gristed output file name. +rule Texi2PDF +{ + local target = $(1) ; + local texifiles = $(2) ; + local subdir = $(3) ; + local outfile = $(4) ; + local pdfoptions = $(5) ; + local dvioptions = $(6) ; + + local pdffile = [ _Dvi $(target) : $(texifiles) : pdf : $(outfile:S=.pdf) : + RunDVIPDF : $(pdfoptions) : $(dvioptions) : $(subdir) ] ; + CONVERTER on $(pdffile) = $(CMD.DVIPDF) ; + return pdffile ; +} +} +else if $(CMD.TEXI2PDF) +{ +## Texi2PDF targetname : texifiles [ : subdir [ : outfile [ : options ]]] +## Invoke the texi2pdf utility to convert Texinfo source to PDF format when +## the pseudo target 'targetname' is invoked. 'texifiles' is a list of +## Texinfo files to be converted. The first element of 'texifiles' should +## be the top-level Texinfo document which includes the remaining files. It +## is okay for 'texifiles' to mention only a single Texinfo source if the +## entire document is contained in the one file. The optional 'subdir' is a +## subdirectory of $(LOCATE.DOCS) into which the generated file should be +## placed. The optional 'outfile' is the name of the output file. If +## 'outfile' is omitted, then the output filename is derived from the first +## element of 'texifiles' with the extension changed to .pdf. 'options' is a +## set of command-line flags passed directly to texi2pdf. Returns the +## gristed output file name. +rule Texi2PDF +{ + local target = $(1) ; + local texifiles = $(2) ; + local subdir = $(3) ; + local outfile = $(4) ; + local options = $(5) ; + local pdffile = [ _Texinfo $(target) : $(texifiles) : pdf : $(outfile) : + RunTexi2DVI : -I $(SUBDIR) $(options) : $(subdir) ] ; + CONVERTER on $(pdffile) = $(CMD.TEXI2PDF) ; + OPTIONS on $(pdffile) += $(FLAGS.TEXI2PDF) ; + return pdffile ; +} +} +} + +if $(PERL) +{ +PATH.NODEFIX ?= [ ConcatDirs $(TOP) docs support nodefix.pl ] ; +CMD.NODEFIX ?= $(PERL) $(PATH.NODEFIX) ; + +## RepairNodes targetname : texifile [ : srcdir ] +## When 'targetname' is invoked, perform in-place repair of @node and @menu +## directives in 'texifile' so that they correctly reflect the documentation +## hierarchy defined by @chapter, @section, @subsection, etc. directives. +## 'srcdir' is the directory containing 'texifile' as well as any files +## included via @include{} or @import{} directives. If 'srcdir' is omitted, +## then $(SUBDIR) is assumed. +rule RepairNodes +{ + local target = $(1) ; + local texifile = $(2) ; + local srcdir = $(3) ; + if ! $(srcdir) { srcdir = $(SUBDIR) ; } + + SEARCH on $(texifile) = $(srcdir) ; + TEXINFO.INCDIR on $(target) = $(srcdir) ; + Depends $(target) : $(texifile) ; + NotFile $(target) ; + Always $(target) ; +} + +actions RepairNodes +{ + $(CMD.NODEFIX) --include-dir="$(TEXINFO.INCDIR)" "$(>)" ; +} +} + +if $(CMD.DOXYGEN) +{ + +actions WriteCppWrapper +{ + echo "$(DOXYCPP_COMMAND)" > "$(1)" +} + +rule GenerateDoxygenCppWrapper +{ + local target = $(1) ; + local cxxcpp = $(2) ; + + local outfile cmdpath command ; + if $(TARGET.OS) = WIN32 + { + # On Win32, MSYS is not used but the "native" process running, so we can't + # launch the preprocessor with sh. + outfile = "cpp.cmd" ; + local p = [ SplitToList $(LOCATE.DOCS) : "/" ] $(outfile) ; + cmdpath = $(p:J=\\\\) ; + command = "$(cxxcpp)" %1 ; + } + else + { + outfile = "cpp.sh" ; + local p = $(LOCATE.DOCS) $(outfile) ; + cmdpath = $(p:J=/) ; + command = "$(cxxcpp)" \\$1 ; + } + MakeLocate $(outfile) : $(LOCATE.DOCS) ; + DOXYCPP_COMMAND on $(outfile) = $(command) ; + WriteCppWrapper $(outfile) ; + MODE on $(outfile) = "+x" ; + Chmod $(outfile) ; + + Always $(outfile) ; + Depends $(target) : $(outfile) ; + Clean $(target)clean : $(outfile) ; + + return $(cmdpath) ; +} + +## Doxygen targetname : doxyprofile-and-resources [ : subdir [ : outfile +## [ : options ]]] +## Invoke the Doxygen utility to generate API documentation based upon +## 'doxyprofile' when the pseudo target 'targetname' is invoked. The first +## element of 'doxyprofile-and-resources' is the Doxygen configuration file +## which controls the API generation. The remaining optional elements are +## additional resources which should be copied verbatim to the output +## directory. Typical additional resources include CSS and related image +## files. It is assumed that the source files mentioned by +## 'doxyprofile-and-resources' reside in $(SUBDIR). The optional 'subdir' +## is a subdirectory of $(LOCATE.DOCS) into which the generated files should +## be placed. The optional 'outfile' is the name of the root output file +## (typically "index.html"). This file will reference any other files +## generated by Doxygen. If 'outfile' is omitted, then the output filename +## defaults to "index.html". 'options' is a set of command-line flags +## passed directly to Doxygen. Returns the gristed output file name. +rule Doxygen +{ + local target = $(1) ; + local infiles = $(2) ; + local subdir = $(3) ; + local outfile = $(4) ; + local optioins = $(5) ; + local doxyfile = $(infiles[1]) ; + local resources = $(infiles[2-]) ; + local outdir = [ FDirName $(LOCATE.DOCS) $(subdir) ] ; + local grist = "$(SOURCE_GRIST)!$(target)" ; + + if ! $(outfile) + { + outfile = index.html ; + } + outfile = $(outfile:G=$(grist)) ; + + local r ; + for r in $(resources) + { + local src = $(r:G=$(grist)!src) ; + local dst = $(r:G=$(grist)!dst) ; + SEARCH on $(src) = $(SUBDIR) ; + MakeLocate $(dst) : $(outdir) ; + Copy $(dst) : $(src) ; + Depends $(dst) : $(src) ; + Depends $(outfile) : $(dst) ; + Clean $(target)clean : $(dst) ; + } + + local doxycpp ; + if $(CMD.C++CPP) + { + doxycpp = [ GenerateDoxygenCppWrapper $(outfile) : + $(CMD.C++CPP) [ FDefines DOXYGEN_RUN ] ] ; + } + + local have_dot = "NO" ; + local dot_path ; + if $(CMD.DOT) + { + local dotpath = [ Reverse [ SplitToList $(CMD.DOT) : / ] ] ; + if $(dotpath[1]) != "dot" + { + Echo "doxygen expects the dot binary to be named 'dot' exactly" ; + } + else + { + dot_path = [ Reverse $(dotpath[2-]) ] ; + dot_path = $(dot_path:J=/) ; + have_dot = "YES" ; + } + } + + SEARCH on $(doxyfile) = $(SUBDIR) ; + OPTIONS on $(target) = $(options) ; + DOXYCPP on $(target) = $(doxycpp) ; + HAVE_DOT on $(target) = $(have_dot) ; + DOT_PATH on $(target) = $(dot_path) ; + MakeLocate $(outfile) : $(outdir) ; + Depends $(outfile) : $(doxyfile) ; + Depends $(target) : $(outfile) ; + RunDoxygen $(target) : $(doxyfile) ; + NotFile $(target) ; + Always $(target) ; + Clean $(target)clean : $(outfile) ; + if $(subdir) + { + CleanDir $(target)clean : $(outdir) ; + } + Depends cleandoc : $(target)clean ; + return outfile ; +} +} + +#---------------------------------------------------------------------------- +# Private helper rules and actions. + +## _Texinfo targetname : texifiles : format : [ outfile ] : converter +## [ : options [ : subdir ]] +## The workhorse of the various Texinfo conversion rules. This rule sets up +## a pseudo-target 'targetname' which takes care of copying image files to +## the output directory if needed by the output format, gristing intput and +## output files, invoking the specified low-level conversion rule, and +## cleaning up temporary files upon completion. 'texifiles' is a list of +## Texinfo files to be converted. The first element of 'texifiles' should +## be the top-level Texinfo document which @includes the remaining files. It +## is okay for 'texifiles' to mention only a single Texinfo source if the +## entire document is contained in the one file. 'format' is one of "info", +## "html", "xml", "docbook", "dvi", "ps", or "pdf", and is used in the +## formulation of the grist, and as the extension of 'outfile' if omitted. +## The format also determines which type of image files (if any) should be +## copied to the output directory, and whether the copied images should be +## cleaned up upon completion. 'outfile' is the name of the root output +## file. If 'outfile' is omitted, then the output filename is derived from +## the first element of 'texifiles' with the extension changed to reflect +## 'format'. 'converter' is the Jam rule which will perform the actual +## conversion. It is passed 'outfile' as $(<), and the first element of +## 'texifiles' as $(>). The optional 'subdir' is a subdirectory of +## $(LOCATE.DOCS) into which the generated files should be placed. +## 'options' is a set of command-line flags to be passed directly to the +## underlying conversion tool. Returns the gristed output file name. The +## following variables may be accessed from within the 'converter' action: +## $(SRCDIR) - Value of $(SUBDIR) when this rule was invoked. +## $(OUTDIR) - Directory into which output files should be emitted. +## $(OUTLOG) - Name of a log file within $(OUTDIR) into which 'converter' +## may direct diagnostic output of conversion tool if needed. +## $(FORMAT) - Value of 'format'. +## $(OPTIONS) - Value of 'options'. +rule _Texinfo +{ + local target = $(1) ; + local texifiles = $(2) ; + local format = $(3) ; + local outfile = $(4) ; + local converter = $(5) ; + local options = $(6) ; + local subdir = $(7) ; + local outdir = [ FDirName $(LOCATE.DOCS) $(subdir) ] ; + local grist = "$(SOURCE_GRIST)!$(target)!$(format)" ; + local outlog ; + + local texifile = $(texifiles[1]:G=$(grist)) ; + local texideps = $(texifiles[2-]) ; + + if ! $(outfile) + { + outfile = $(texifile:BS=.$(format)) ; + } + outfile = $(outfile:G=$(grist)) ; + outlog = $(outfile:G=:R=$(outdir):S=$(outfile:S)log) ; + + local inftypes = .txt ; + local xmltypes = .jpg .png .gif ; + local dvitypes = .eps .pdf ; + local pstypes = .eps ; + local pdftypes = .eps .pdf ; + local imagetypes copyimages ; + switch $(format) + { + case info : imagetypes = $(inftypes) ; copyimages = no ; + case html : imagetypes = $(xmltypes) ; copyimages = yes ; + case xml : imagetypes = $(xmltypes) ; copyimages = yes ; + case docbook : imagetypes = $(xmltypes) ; copyimages = yes ; + case dvi : imagetypes = $(dvitypes) ; copyimages = yes ; + case ps : imagetypes = $(pstypes) ; copyimages = no ; + case pdf : imagetypes = $(pdftypes) ; copyimages = no ; + case * : Error "Texinfo: unrecognized output format" $(format) ; + } + + local images ; + if $(imagetypes) { images = [ Recurse : $(imagetypes) ] ; } + + local image ; + for image in $(images) + { + local imagegrist = "$(grist)!$(image:D)" ; + local src = $(image:BSG=$(imagegrist)) ; + local srcdir = [ ConcatDirs $(SUBDIR) $(image:D) ] ; + SEARCH on $(src) = $(srcdir) ; + if $(copyimages) = no + { + Includes $(texifile) : $(src) ; + } + else + { + local dst = $(image:BSG=$(imagegrist)built) ; + local dstdir = [ ConcatDirs $(outdir) $(image:D) ] ; + MakeLocate $(dst) : $(dstdir) ; + Copy $(dst) : $(src) ; + Depends $(dst) : $(src) ; + Depends $(outfile) : $(dst) ; + Clean $(target)clean : $(dst) ; + } + } + + SRCDIR on $(outfile) = $(SUBDIR) ; + OUTDIR on $(outfile) = $(outdir) ; + OUTLOG on $(outfile) = $(outlog) ; + FORMAT on $(outfile) = $(format) ; + OPTIONS on $(outfile) = $(options) ; + + SEARCH on $(texifile) = $(SUBDIR) ; + SEARCH on $(texideps) = $(SUBDIR) ; + Includes $(texifile) : $(texideps) ; + MakeLocate $(outfile) : $(outdir) ; + Depends $(outfile) : $(texifile) ; + Depends $(target) : $(outfile) ; + $(converter) $(outfile) : $(texifile) ; + NotFile $(target) ; + Clean $(target)clean : $(outfile) ; + if $(subdir) + { + CleanDir $(target)clean : $(outdir) ; + } + Depends cleandoc : $(target)clean ; + + return $(outfile) ; +} + +## _Texi2DVI targetname : texifiles [ : subdir [ : outfile [ : options +## [ : format ]]]] +## A thin wrapper around the _Texinfo rule which invokes TeX-wrapping tools +## such as texi2dvi and texi2pdf. The action for this rule captures the +## output of TeX into a log file and tells the user to consult the log file +## if TeX fails. It also monitors the log file for TeX `hbox' warnings, and +## informs the user to consult the log if any are discovered. The log file +## is removed silently if no problems are detected. Returns the gristed +## output DVI file name. In addition to the variables exported by the +## _Texinfo rule, the following variables may be accessed from within the +## action: +## $(CONVERTER) - The actual command-line tool wrapping TeX. +rule _Texi2DVI +{ + local target = $(1) ; + local texifiles = $(2) ; + local subdir = $(3) ; + local outfile = $(4) ; + local options = $(5) ; + local format = $(6) ; + local dvifile = [ _Texinfo $(target) : $(texifiles) : $(format) : + $(outfile) : RunTexi2DVI : -I $(SUBDIR) $(options) : $(subdir) ] ; + CONVERTER on $(dvifile) = $(CMD.TEXI2DVI) ; + OPTIONS on $(dvifile) += $(FLAGS.TEXI2DVI) ; + return $(dvifile) ; +} + +## _Dvi targetname : texifiles : format : outfile : converter [ : options +## [ : dvioptions [ : subdir ]]] +## A wrapper around the _Texi2DVI rule which also runs a secondary +## conversion rule/action on the generated DVI file. Examples of secondary +## conversions include dvips, dvipdf, etc. The arguments 'targetname', +## 'format', 'outfile', and 'subdir' have the same meaning as for the +## _Texinfo and _Texi2DVI rules. 'converter' is the rule/action which +## converts the generated DVI file to the final output format. 'options' is +## a set of command-line flags to be passed directly to the underlying +## secondary conversion tool. 'dvioptions' are the command-line options +## passed to _Texi2DVI. As with the _Texi2DVI rule, this rule captures the +## output of the secondary conversion tool to a log file and instructs the +## user to consult it when a problem is detected. Returns the gristed +## output file name. +rule _Dvi +{ + local target = $(1) ; + local texifiles = $(2) ; + local format = $(3) ; + local outfile = $(4) ; + local converter = $(5) ; + local options = $(6) ; + local dvioptions = $(7) ; + local subdir = $(8) ; + + local dvifile = [ _Texi2DVI _$(target)_dvi : $(texifiles) : $(subdir) : + $(outfile:S=.dvi) : $(dvioptions) : $(format) ] ; + + if ! $(outfile) + { + outfile = $(dvifile:BS=.$(format)) ; + } + local outdir = [ FDirName $(LOCATE.DOCS) $(subdir) ] ; + local outlog = $(outfile:G=:R=$(outdir):S=$(outfile:S)log) ; + + SRCDIR on $(outfile) = $(SUBDIR) ; + OUTLOG on $(outfile) = $(outlog) ; + FORMAT on $(outfile) = $(format) ; + OPTIONS on $(outfile) = $(psoptions) ; + + MakeLocate $(outfile) : $(outdir) ; + Depends $(outfile) : $(dvifile) ; + Depends $(target) : $(outfile) ; + $(converter) $(outfile) : $(dvifile) ; + RmTemps $(outfile) : $(dvifile) ; + Clean $(target)clean : $(outfile) $(dvifile) ; + NotFile $(target) ; + NotFile $(target)clean ; + if $(subdir) + { + CleanDir $(target)clean : $(outdir) ; + } + + return $(outfile) ; +} + +# Unfortunately, `makeinfo' 4.3, which ships with MSYS, does not respect the +# search path (-I) for @image{} directives, so we need to `cd' into the source +# directory to work around this shortcoming. With modern versions of +# `makeinfo', we could instead just use `-I$(SRCDIR)' instead of the pwd/cd +# goop. +actions RunMakeInfo +{ + dir=`pwd` ; \ + cd $(>:D) ; \ + $(CMD.MAKEINFO) $(OPTIONS) $(FLAGS.MAKEINFO) --output="${dir}/$(<)" $(>:B) +} + +actions RunTexi2HTML +{ + T2H_HOME="$(PATH.TEXI2HTML.HOME)" \ + $(CMD.TEXI2HTML) $(OPTIONS) $(FLAGS.TEXI2HTML) -subdir="$(OUTDIR)" \ + -top-file="$(<:BS)" "$(>)" +} + +actions RunTexi2DVI +{ + $(CONVERTER) $(OPTIONS) --batch --output=$(<) $(>) > $(OUTLOG) 2>&1 + if test $? -ne 0; then + echo "*** ERROR: $(CONVERTER) reported one or more errors." + echo "*** ERROR: See $(OUTLOG) for details." + false + fi + if test $? -eq 0; then + grep hbox $(OUTLOG) >/dev/null 2>&1 + if test $? -eq 0; then + echo "*** WARNING: $(CONVERTER) reported 'hbox' warnings." && \ + echo "*** WARNING: See $(OUTLOG) for details." + else + $(RM) $(OUTLOG) + fi + true + else + false + fi +} + +actions RunDVIPS +{ + TEXPICTS="$(SRCDIR)" \ + $(CMD.DVIPS) $(OPTIONS) -o $(<) $(>) > $(OUTLOG) 2>&1 + if test $? -ne 0; then + echo "*** ERROR: $(CMD.DVIPS) reported one or more errors." + echo "*** ERROR: See $(OUTLOG) for details." + false + else + $(RM) $(OUTLOG) + true + fi +} + +actions RunDVIPDF +{ + TEXPICTS="$(SRCDIR)" \ + $(CMD.DVIPDF) $(OPTIONS) $(>) $(<) > $(OUTLOG) 2>&1 + if test $? -ne 0; then + echo "*** ERROR: $(CMD.DVIPDF) reported one or more errors." + echo "*** ERROR: See $(OUTLOG) for details." + false + else + $(RM) $(OUTLOG) + true + fi +} + +actions RunDoxygen +{ + TOP=$(TOP) DOXYCPP=$(DOXYCPP) HAVE_DOT=$(HAVE_DOT) DOT_PATH=$(DOT_PATH) $(CMD.DOXYGEN) $(OPTIONS) $(FLAGS.DOXYGEN) $(>) +} + +#---------------------------------------------------------------------------- +# Additional clean rules. + +CleanDir cleandoc : $(LOCATE.DOCS) ; +Depends clean : cleandoc ; +Help cleandoc : "Remove built documentation files" ; + +Always docclean ; +NotFile docclean ; +Depends docclean : cleandoc ; diff --git a/mk/jam/dump.jam b/mk/jam/dump.jam index 0059c8ab7..1dde8b43c 100644 --- a/mk/jam/dump.jam +++ b/mk/jam/dump.jam @@ -1,128 +1,128 @@ -#============================================================================== -# Utility functions for collecting information about the Jam environment. -# Copyright (C)2004 by Eric Sunshine -# -# 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 +# +# 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 ; +} + +} +} diff --git a/mk/jam/flags.jam b/mk/jam/flags.jam index 8b9f4bc49..aac2daff9 100644 --- a/mk/jam/flags.jam +++ b/mk/jam/flags.jam @@ -1,172 +1,172 @@ -#============================================================================ -# Rules for specifying compiler and linker flags -# Copyright (C)2003 by Matze Braun -# -# 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 +# +# 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) ] ] ] ; +} diff --git a/mk/jam/groups.jam b/mk/jam/groups.jam index fcf73b112..ea511fc0c 100644 --- a/mk/jam/groups.jam +++ b/mk/jam/groups.jam @@ -1,61 +1,61 @@ -#============================================================================ -# Rules for building compile groups -# Copyright (C)2003 by Matze Braun -# -# 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 +# +# 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)" ; + } + } +} diff --git a/mk/jam/help.jam b/mk/jam/help.jam index af640106a..2197767a3 100644 --- a/mk/jam/help.jam +++ b/mk/jam/help.jam @@ -1,85 +1,85 @@ -#============================================================================ -# Rules for collecting and emitting descriptions about targets -# Copyright (C)2003 by Matze Braun -# Copyright (C)2004 by Eric Sunshine -# -# 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 +# Copyright (C)2004 by Eric Sunshine +# +# 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" ; diff --git a/mk/jam/helper.jam b/mk/jam/helper.jam index a2651ad23..867b535d3 100644 --- a/mk/jam/helper.jam +++ b/mk/jam/helper.jam @@ -1,594 +1,594 @@ -#============================================================================ -# Helper rules -# Copyright (C)2003 by Matze Braun -# Copyright (C)2004 by Eric Sunshine -# -# 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. -# -#============================================================================ - -SED ?= sed ; -DEEPCOPY ?= "cp -R" ; -DELTREE ?= "rm -rf" ; - -# The -f option to `cp' is not supported on older platforms. -# The convolution of the conditional arises because CP is defined in Jambase as -# two tokens rather than a single string, so we must check the tokens -# individually; yet we also check it as a simple string for future robustness. -if $(CP) = "cp -f" || $(CP[1]) = "cp" && $(CP[2]) = "-f" -{ - CP = cp ; -} - -## IncludeDir [ dir [ : target [ : options ]]] -## Specify the location of a directory containing header files for a target, -## or for the whole project if no target is given. "dir" is a list of -## components composing the path. This rule will automatically generate the -## -I compiler flags and makes sure the dependency scanner is able to locate -## your header files. "dir" is assumed to be relative to the current -## subdirectory specified with the SubDir rule unless the "literal" -## option is given, in which case "dir" is used literally. If "dir" is -## omitted, then the current subdirectory specified with SubDir is used as -## the header directory. An omitted "dir" and the "literal" option are -## mutually exclusive. You may invoke this rule multiple times to specify -## any number of header file directories. -## Options: -## literal: "dir" is to be used literally without any interpretation. -## transient: "dir" is to be used at build-time only; and should not be -## recorded in any generated resources, such as project files. -## -## Implementation: The directory is simply added to the HDRS variable which -## is respected by all Jam rules. -rule IncludeDir -{ - local dir = $(1) ; - local target = $(2) ; - local options = $(3) ; - - CheckOptions literal transient : $(options) : $(dir) ; - if ! $(dir) - { - dir = $(SUBDIR) ; - } - else if ! [ IsElem literal : $(options) ] - { - dir = $(SUBDIR) $(dir) ; - } - dir = [ ConcatDirs $(dir) ] ; - - if $(target) - { - local o ; - for o in $($(target)_OBJECTS) - { - CCHDRS on $(o) += [ FIncludes $(dir) ] ; - } - } - else - { - HDRS += $(dir) ; - } -} - -## Wildcard [ dir : ] patterns -## Create a list of files in a directory which match the pattern. You can -## optionally specify a subdirectory. The files will be returned with -## stripped pathnames. The difference from GLOB is that this rule respects -## subdirectories which may have been entered with the SubDir rule. -rule Wildcard -{ - local files dir sdir wildcards ; - - # Is a directory given? - if $(>) - { - dir = $(<)/ ; - sdir = [ ConcatDirs $(<) ] ; - wildcards = $(>) ; - } - else - { - dir = "" ; - sdir = "" ; - wildcards = $(<) ; - } - - files = [ GLOB [ ConcatDirs $(SUBDIR) $(dir) ] : $(wildcards) ] ; - - return $(files:BSR=$(sdir)) ; -} - -## Recurse [ rule ] : types [ : prefix ] -## Recursively scan current directory, $(SUBDIR), for files matching 'types' -## and invoke 'rule' for each file which matches one of the 'types'. -## 'types' is a list of file extensions (with the leading dot). 'rule' will -## be invoked with two arguments: (1) the basename of the file including the -## extension, (2) a list of the path components from the current directory -## to the file's directory. When 'rule' is invoked, it will see a $(SUBDIR) -## value of the directory containing the file (as if the rule had been -## invoked from within the file's directory). 'prefix' is an optional list -## of path components which will be prepended to rule's second argument. -## Returns the list of visited files. It is legal to omit 'rule', if you -## are interested only in obtaining the list of files matching 'types'. -rule Recurse -{ - local innerrule = $(1) ; - local types = $(2) ; - local prefix = $(3) ; - local files = [ GLOB $(SUBDIR) : * ] ; - local visited ; - - local i ; - for i in $(files) - { - if [ IsElem $(i:S) : $(types) ] - { - visited += [ FDirName $(prefix) $(i:BS) ] ; - if $(innerrule) - { - $(innerrule) $(i:BS) : $(prefix) ; - } - } - else - { - if ! [ IsElem $(i:BS) : $(DOT) $(DOTDOT) ] - { - local SUBDIR = $(i) ; # Called rules see this new temporary value. - visited += [ Recurse $(innerrule) : $(types) : $(prefix) $(i:BS) ] ; - } - } - } - return $(visited) ; -} - -## ResponseFile file : [ items [ : options [ : directory [ : delim ]]]] -## Jam places a fairly restrictive limit on the length of the command string -## emitted by an 'actions' block. If the limit is exceeded, Jam rudely -## aborts. This problem is easily triggered when actions are invoked -## 'together' but not 'piecemeal'; especially when the command arguments -## involve many lengthy pathnames. To work around this type of problem, -## some tools allow the client to furnish a file containing information -## which would otherwise be specified via the command-line. This is often -## called a "response file". The ResponseFile rule can be used to create a -## response file named 'file' in 'directory' containing 'items', one per -## line. As a convenience, if 'directory' is not specified, and if the -## MakeLocate rule has not already been invoked for 'file' or LOCATE has not -## been set for 'file', then the file is placed in $(LOCATE_TARGET). If -## there is a possibility that the same 'file' name might be used in other -## contexts, be sure to grist it appropriately to avoid conflicts. This -## rule assumes that 'items' contains bound entries unless the "notfile" -## option is specified, in which case the NotFile rule is automatically -## invoked for each item. This rule may be invoked multiple times for the -## same 'file' in order to populate the file incrementally. As an internal -## optimization to keep performance relatively sane, ResponseFile -## temporarily inserts 'delim' between 'items' when emitting them, and then -## substitutes newline for 'delim' just before writing the items to -## 'file'. 'delim' must be a one-character string. If not specified, "@" is -## used. If "@" is likely to appear in 'items', then choose a different -## character for 'delim'; one which is known to not appear in 'items'. The -## rule returns 'file' to make it convenient to daisy-chain with invocations -## of other rules, such as RmTemps, Depends, or Always. -## Options: -## notfile: Invoke NotFile for each item automatically; otherwise, assume -## that each item is a bound file. -rule ResponseFile -{ - local file = $(1) ; - local items = $(2) ; - local options = $(3) ; - local dir = $(4) ; - local delim = $(5) ; - - CheckOptions notfile : $(options) : $(file) ; - - if ! $(delim) { delim = "@" ; } - DELIM on $(file) = $(delim) ; - - local firsttime = no ; - if ! [ IsElem $(file) : $(RESPONSE_FILE_REGISTRY) ] - { - firsttime = yes ; - RESPONSE_FILE_REGISTRY += $(file) ; - } - - if ! $(items) && $(firsttime) = yes - { - items = "" ; # Force file creation even if list is empty. - options += notfile ; - } - - if [ IsElem notfile : $(options) ] && $(items) - { - NotFile $(items) ; - } - - if $(dir) - { - MakeLocate $(file) : $(dir) ; - } - else - { - local target_dir = [ on $(file) GetVar LOCATE ] ; - if ! $(target_dir) - { - MakeLocate $(file) : $(LOCATE_TARGET) ; - } - } - - local i ; - for i in $(items) - { - if $(firsttime) = yes - { - ResponseFile1 $(file) : $(i) ; - firsttime = no ; - } - else - { - ResponseFile2 $(file) : $(i) ; - } - } - - return $(file) ; -} - -actions ResponseFile1 -{ - echo '$(>)' > $(<) -} - -actions piecemeal together quietly ResponseFile2 -{ - echo '$(>)$(DELIM)' | $(SED) 's/$(DELIM) /$(DELIM)/g' | tr '$(DELIM)' ' -' >> $(<) -} - -## Sort list -## Given a list of items, returns a list containing the items sorted -## alphabetically. -rule Sort -{ - local i sorted ; - for i in $(<) - { - local inserted = no ; - local j accum ; - for j in $(sorted) - { - if $(inserted) != yes && $(i:L) < $(j:L) - { - accum += $(i) ; - inserted = yes ; - } - accum += $(j) ; - } - if $(inserted) != yes - { - accum += $(i) ; - } - sorted = $(accum) ; - } - return $(sorted) ; -} - -## StripCommon list1 : list2 -## Strips from the beginning of list1 the items which it has in common with -## the beginning of list2 and returns what remains of list1. -rule StripCommon -{ - local l = $(<) ; - local r = $(>) ; - FStripCommon l : r ; - return $(l) ; -} - -## MasterHeader header [ : files [ : pre-boilerplate [ : post-boilerplate -## [ : options ]]]] -## Given a list of 'files', construct a 'header' file which #includes those -## files. If 'header' does not already have a suffix, ".h" will be -## appended. The generated header will be emitted to $(LOCATE_TARGET), and -## will be protected against multiple-inclusion via the standard -## #ifndef __HEADER_H__ / #define / #endif mechanism. If provided, -## 'pre-boilerplate' will be inserted verbatim immediately after the opening -## multiple-inclusion protection, but before the first #include. Likewise, -## 'post-boilerplate' will be inserted verbatim after the last #include, but -## before the closing multiple-inclusion protection. If the boilerplate -## arguments are lists, the items will be emitted one per line. 'files' -## is sorted before the #include statements are generated, unless the -## "nosort" option is given. For convenience, the gristed 'header' is -## returned. Also sets up the following pseudo-targets: -## -## masterheaders: Synthesize all requested master headers. -## cleanmasterheaders: Delete synthesized files. -## freezemasterheaders: Copy synthesized files to back into the source -## tree at $(SUBDIR). -## -## Options: -## nosort: Do not sort 'files'. -rule MasterHeader -{ - local header = [ FAppendSuffix $(1) : .h ] ; - local files = $(2) ; - local boilerpre = $(3) ; - local boilerpost = $(4) ; - local options = $(5) ; - local target = $(header:G=masterheader) ; - local protect = "__$(header:US=)_H__" ; - - CheckOptions nosort : $(options) : $(header) ; - if ! [ IsElem nosort : $(options) ] - { - files = [ Sort $(files) ] ; - } - - Always $(target) ; - ResponseFile $(target) : - "/* $(header) -- Generated automatically; do not edit. */" - "#ifndef $(protect)" - "#define $(protect)" - $(boilerpre) - "#include \"$(files)\"" - $(boilerpost) - "#endif /* $(protect) */" - : notfile ; - Depends masterheaders : $(target) ; - Clean cleanmasterheaders : $(target) ; - Clean clean : cleanmasterheaders ; - - local frozen = $(target:G=frozenmasterheader) ; - MakeLocate $(frozen) : $(SUBDIR) ; - Depends $(frozen) : $(target) ; - Copy $(frozen) : $(target) ; - Depends freezemasterheaders : $(frozen) ; - - if $(MASTER_HEADER_GLOBAL_TARGETS) != yes - { - MASTER_HEADER_GLOBAL_TARGETS = yes ; - - Always masterheaders ; - NotFile masterheaders ; - Help masterheaders : "Generate master header files" ; - - Always freezemasterheaders ; - NotFile freezemasterheaders ; - Help freezemasterheaders : - "Copy generated master headers to source tree" ; - } - - return $(target) ; -} - -## DirectoryMasterHeaders dirs [ : pre-boilerplate [ : post-boilerplate -## [ : options [ : rejects ]]]] -## A convenience wrapper around MasterHeader which generates a set of master -## header files for each directory in 'dirs', which are assumed to be -## subdirectories of the current directory. For each item in 'dirs', the -## subdirectory is recursively scanned for files, and MasterHeader is -## invoked with the gleaned file list. The generated header for a directory -## is emitted to the current directory; not within the subdirectory. The -## optional 'rejects' is a list of header files which should not be emitted -## to the synthesized master headers. 'pre-boilerplate', -## 'post-boilerplate', and 'options' carry the same interpretation as for -## MasterHeader. -rule DirectoryMasterHeaders -{ - local dirs = $(1) ; - local boilerpre = $(2) ; - local boilerpost = $(3) ; - local options = $(4) ; - local rejects = $(5) ; - local masters ; - local d ; - for d in $(dirs) - { - local files ; - { - local SUBDIR = [ ConcatDirs $(SUBDIR) $(d) ] ; # Recurse from here... - files = [ Recurse : .h : $(d) ] ; - } - if $(rejects) - { - files = [ Filter $(files) : $(rejects) ] ; - } - masters += [ MasterHeader $(d) : $(files) : $(boilerpre) : $(boilerpost) : - $(options) ] ; - } - return $(masters) ; -} - -## Prefix list : prefix -## Adds a prefix to a all elements in list. -rule Prefix -{ - return $(>)$(<) ; -} - -if $(JAMVERSION) >= 2.5 -{ - -## IsElem element : list -## Returns "true" if the element is in the list. Otherwise nothing is -## returned. -rule IsElem -{ - local i ; - - for i in $(>) - { - if $(i) = $(<) - { - return "true" ; - } - } - - return ; -} - -} -else -{ - -# Jam <2.4's return statement doesn't exit the function -rule IsElem -{ - local i result ; - - for i in $(>) - { - if $(i) = $(<) - { - result = "true" ; - $(>) = ; - } - } - - return $(result) ; -} - -} - -## Filter list : filter -## Returns the list without the words contained in filter. -rule Filter -{ - local i result ; - - for i in $(<) - { - if ! [ IsElem $(i) : $(>) ] - { - result += $(i) ; - } - } - - return $(result) ; -} - -## RemoveDups list -## Removes duplicates in the list (this function tries to preserve the list -## order) -rule RemoveDups -{ - local i result ; - - for i in $(<) - { - if ! [ IsElem $(i) : $(result) ] - { - result += $(i) ; - } - } - - return $(result) ; -} - -## Reverse list -## Reverse the order of items in the list. -rule Reverse -{ - local result ; - - for i in $(<) - { - result = $(i) $(result) ; - } - return $(result) ; -} - -## GetVar argument -## Simply returns the value of the variable with name argument. -## This is useful to query on target variables: -## bla = [ on TARGET GetVar CFlags ] ; -rule GetVar -{ - return $($(<)) ; -} - -## ConcatDirs dirs -## Concatenates a set of directories. This is a substitute for FDirName in -## Jambase. It works also correctly for several rooted paths, where FDirName -## fails. -## The advantage over $(dir1)/$(dir2) is that this also works correctly if -## $(dir1) or $(dir2) is not set. -rule ConcatDirs -{ - local i ; - local result = $(<[1]) ; - if ! $(result) { $result = "" ; } - local dir1 dir2 ; - - for i in $(<[2-]) - { - # eleminate multiple slashes because jam is somewhat buggy here - dir1 = [ MATCH (.*[^/]?) : $(result) ] ; - dir2 = [ MATCH ([^/].*) : $(i) ] ; - if ! $(dir1) { dir1 = "" ; } - if $(dir1) != "" { dir1 = $(dir1)/ ; } - if ! $(dir2) { dir2 = "" ; } - result = $(dir1)$(dir2) ; - } - - return $(result) ; -} - -## SplitToList var [ : separator ] -## Splits the value of var into a list using space as the separator unless -## an alterante separator is specified. -## IMPLEMENTATION NOTE -## When Jam sees an invocation of the `Match' function, it treats its first -## argument as a literal regular expression, and does not do any variable -## interpolation. This means that an expression, such as "(.*)$(sep)(.*)" -## will not be interpreted as expected; it will instead be interpreted as an -## invalid regex. To work around this limitation, we invoke `Match' -## indirectly. -rule SplitToList -{ - local list = ; - local matcher = Match ; # See IMPLEMENTATION NOTE above. - local unsplit = $(<) ; - local sep = $(2) ; - if ! $(sep) { sep = " " ; } - while $(unsplit) != "" - { - local split = [ $(matcher) "(.*)$(sep)(.*)" : $(unsplit) ] ; - if $(split[1]) = "" - { - list += $(unsplit) ; - unsplit = "" ; - } - else - { - list += $(split[2]) ; - unsplit = $(split[1]) ; - } - } - - return [ Reverse $(list) ] ; -} - -## Copy target : source -## Copy source to target. -actions Copy -{ - $(RM) $(<) - $(CP) $(>) $(<) -} - -## Move target : source -## Move (or rename) source to target. -actions ignore Move -{ - $(MV) $(>) $(<) -} +#============================================================================ +# Helper rules +# Copyright (C)2003 by Matze Braun +# Copyright (C)2004 by Eric Sunshine +# +# 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. +# +#============================================================================ + +SED ?= sed ; +DEEPCOPY ?= "cp -R" ; +DELTREE ?= "rm -rf" ; + +# The -f option to `cp' is not supported on older platforms. +# The convolution of the conditional arises because CP is defined in Jambase as +# two tokens rather than a single string, so we must check the tokens +# individually; yet we also check it as a simple string for future robustness. +if $(CP) = "cp -f" || $(CP[1]) = "cp" && $(CP[2]) = "-f" +{ + CP = cp ; +} + +## IncludeDir [ dir [ : target [ : options ]]] +## Specify the location of a directory containing header files for a target, +## or for the whole project if no target is given. "dir" is a list of +## components composing the path. This rule will automatically generate the +## -I compiler flags and makes sure the dependency scanner is able to locate +## your header files. "dir" is assumed to be relative to the current +## subdirectory specified with the SubDir rule unless the "literal" +## option is given, in which case "dir" is used literally. If "dir" is +## omitted, then the current subdirectory specified with SubDir is used as +## the header directory. An omitted "dir" and the "literal" option are +## mutually exclusive. You may invoke this rule multiple times to specify +## any number of header file directories. +## Options: +## literal: "dir" is to be used literally without any interpretation. +## transient: "dir" is to be used at build-time only; and should not be +## recorded in any generated resources, such as project files. +## +## Implementation: The directory is simply added to the HDRS variable which +## is respected by all Jam rules. +rule IncludeDir +{ + local dir = $(1) ; + local target = $(2) ; + local options = $(3) ; + + CheckOptions literal transient : $(options) : $(dir) ; + if ! $(dir) + { + dir = $(SUBDIR) ; + } + else if ! [ IsElem literal : $(options) ] + { + dir = $(SUBDIR) $(dir) ; + } + dir = [ ConcatDirs $(dir) ] ; + + if $(target) + { + local o ; + for o in $($(target)_OBJECTS) + { + CCHDRS on $(o) += [ FIncludes $(dir) ] ; + } + } + else + { + HDRS += $(dir) ; + } +} + +## Wildcard [ dir : ] patterns +## Create a list of files in a directory which match the pattern. You can +## optionally specify a subdirectory. The files will be returned with +## stripped pathnames. The difference from GLOB is that this rule respects +## subdirectories which may have been entered with the SubDir rule. +rule Wildcard +{ + local files dir sdir wildcards ; + + # Is a directory given? + if $(>) + { + dir = $(<)/ ; + sdir = [ ConcatDirs $(<) ] ; + wildcards = $(>) ; + } + else + { + dir = "" ; + sdir = "" ; + wildcards = $(<) ; + } + + files = [ GLOB [ ConcatDirs $(SUBDIR) $(dir) ] : $(wildcards) ] ; + + return $(files:BSR=$(sdir)) ; +} + +## Recurse [ rule ] : types [ : prefix ] +## Recursively scan current directory, $(SUBDIR), for files matching 'types' +## and invoke 'rule' for each file which matches one of the 'types'. +## 'types' is a list of file extensions (with the leading dot). 'rule' will +## be invoked with two arguments: (1) the basename of the file including the +## extension, (2) a list of the path components from the current directory +## to the file's directory. When 'rule' is invoked, it will see a $(SUBDIR) +## value of the directory containing the file (as if the rule had been +## invoked from within the file's directory). 'prefix' is an optional list +## of path components which will be prepended to rule's second argument. +## Returns the list of visited files. It is legal to omit 'rule', if you +## are interested only in obtaining the list of files matching 'types'. +rule Recurse +{ + local innerrule = $(1) ; + local types = $(2) ; + local prefix = $(3) ; + local files = [ GLOB $(SUBDIR) : * ] ; + local visited ; + + local i ; + for i in $(files) + { + if [ IsElem $(i:S) : $(types) ] + { + visited += [ FDirName $(prefix) $(i:BS) ] ; + if $(innerrule) + { + $(innerrule) $(i:BS) : $(prefix) ; + } + } + else + { + if ! [ IsElem $(i:BS) : $(DOT) $(DOTDOT) ] + { + local SUBDIR = $(i) ; # Called rules see this new temporary value. + visited += [ Recurse $(innerrule) : $(types) : $(prefix) $(i:BS) ] ; + } + } + } + return $(visited) ; +} + +## ResponseFile file : [ items [ : options [ : directory [ : delim ]]]] +## Jam places a fairly restrictive limit on the length of the command string +## emitted by an 'actions' block. If the limit is exceeded, Jam rudely +## aborts. This problem is easily triggered when actions are invoked +## 'together' but not 'piecemeal'; especially when the command arguments +## involve many lengthy pathnames. To work around this type of problem, +## some tools allow the client to furnish a file containing information +## which would otherwise be specified via the command-line. This is often +## called a "response file". The ResponseFile rule can be used to create a +## response file named 'file' in 'directory' containing 'items', one per +## line. As a convenience, if 'directory' is not specified, and if the +## MakeLocate rule has not already been invoked for 'file' or LOCATE has not +## been set for 'file', then the file is placed in $(LOCATE_TARGET). If +## there is a possibility that the same 'file' name might be used in other +## contexts, be sure to grist it appropriately to avoid conflicts. This +## rule assumes that 'items' contains bound entries unless the "notfile" +## option is specified, in which case the NotFile rule is automatically +## invoked for each item. This rule may be invoked multiple times for the +## same 'file' in order to populate the file incrementally. As an internal +## optimization to keep performance relatively sane, ResponseFile +## temporarily inserts 'delim' between 'items' when emitting them, and then +## substitutes newline for 'delim' just before writing the items to +## 'file'. 'delim' must be a one-character string. If not specified, "@" is +## used. If "@" is likely to appear in 'items', then choose a different +## character for 'delim'; one which is known to not appear in 'items'. The +## rule returns 'file' to make it convenient to daisy-chain with invocations +## of other rules, such as RmTemps, Depends, or Always. +## Options: +## notfile: Invoke NotFile for each item automatically; otherwise, assume +## that each item is a bound file. +rule ResponseFile +{ + local file = $(1) ; + local items = $(2) ; + local options = $(3) ; + local dir = $(4) ; + local delim = $(5) ; + + CheckOptions notfile : $(options) : $(file) ; + + if ! $(delim) { delim = "@" ; } + DELIM on $(file) = $(delim) ; + + local firsttime = no ; + if ! [ IsElem $(file) : $(RESPONSE_FILE_REGISTRY) ] + { + firsttime = yes ; + RESPONSE_FILE_REGISTRY += $(file) ; + } + + if ! $(items) && $(firsttime) = yes + { + items = "" ; # Force file creation even if list is empty. + options += notfile ; + } + + if [ IsElem notfile : $(options) ] && $(items) + { + NotFile $(items) ; + } + + if $(dir) + { + MakeLocate $(file) : $(dir) ; + } + else + { + local target_dir = [ on $(file) GetVar LOCATE ] ; + if ! $(target_dir) + { + MakeLocate $(file) : $(LOCATE_TARGET) ; + } + } + + local i ; + for i in $(items) + { + if $(firsttime) = yes + { + ResponseFile1 $(file) : $(i) ; + firsttime = no ; + } + else + { + ResponseFile2 $(file) : $(i) ; + } + } + + return $(file) ; +} + +actions ResponseFile1 +{ + echo '$(>)' > $(<) +} + +actions piecemeal together quietly ResponseFile2 +{ + echo '$(>)$(DELIM)' | $(SED) 's/$(DELIM) /$(DELIM)/g' | tr '$(DELIM)' ' +' >> $(<) +} + +## Sort list +## Given a list of items, returns a list containing the items sorted +## alphabetically. +rule Sort +{ + local i sorted ; + for i in $(<) + { + local inserted = no ; + local j accum ; + for j in $(sorted) + { + if $(inserted) != yes && $(i:L) < $(j:L) + { + accum += $(i) ; + inserted = yes ; + } + accum += $(j) ; + } + if $(inserted) != yes + { + accum += $(i) ; + } + sorted = $(accum) ; + } + return $(sorted) ; +} + +## StripCommon list1 : list2 +## Strips from the beginning of list1 the items which it has in common with +## the beginning of list2 and returns what remains of list1. +rule StripCommon +{ + local l = $(<) ; + local r = $(>) ; + FStripCommon l : r ; + return $(l) ; +} + +## MasterHeader header [ : files [ : pre-boilerplate [ : post-boilerplate +## [ : options ]]]] +## Given a list of 'files', construct a 'header' file which #includes those +## files. If 'header' does not already have a suffix, ".h" will be +## appended. The generated header will be emitted to $(LOCATE_TARGET), and +## will be protected against multiple-inclusion via the standard +## #ifndef __HEADER_H__ / #define / #endif mechanism. If provided, +## 'pre-boilerplate' will be inserted verbatim immediately after the opening +## multiple-inclusion protection, but before the first #include. Likewise, +## 'post-boilerplate' will be inserted verbatim after the last #include, but +## before the closing multiple-inclusion protection. If the boilerplate +## arguments are lists, the items will be emitted one per line. 'files' +## is sorted before the #include statements are generated, unless the +## "nosort" option is given. For convenience, the gristed 'header' is +## returned. Also sets up the following pseudo-targets: +## +## masterheaders: Synthesize all requested master headers. +## cleanmasterheaders: Delete synthesized files. +## freezemasterheaders: Copy synthesized files to back into the source +## tree at $(SUBDIR). +## +## Options: +## nosort: Do not sort 'files'. +rule MasterHeader +{ + local header = [ FAppendSuffix $(1) : .h ] ; + local files = $(2) ; + local boilerpre = $(3) ; + local boilerpost = $(4) ; + local options = $(5) ; + local target = $(header:G=masterheader) ; + local protect = "__$(header:US=)_H__" ; + + CheckOptions nosort : $(options) : $(header) ; + if ! [ IsElem nosort : $(options) ] + { + files = [ Sort $(files) ] ; + } + + Always $(target) ; + ResponseFile $(target) : + "/* $(header) -- Generated automatically; do not edit. */" + "#ifndef $(protect)" + "#define $(protect)" + $(boilerpre) + "#include \"$(files)\"" + $(boilerpost) + "#endif /* $(protect) */" + : notfile ; + Depends masterheaders : $(target) ; + Clean cleanmasterheaders : $(target) ; + Clean clean : cleanmasterheaders ; + + local frozen = $(target:G=frozenmasterheader) ; + MakeLocate $(frozen) : $(SUBDIR) ; + Depends $(frozen) : $(target) ; + Copy $(frozen) : $(target) ; + Depends freezemasterheaders : $(frozen) ; + + if $(MASTER_HEADER_GLOBAL_TARGETS) != yes + { + MASTER_HEADER_GLOBAL_TARGETS = yes ; + + Always masterheaders ; + NotFile masterheaders ; + Help masterheaders : "Generate master header files" ; + + Always freezemasterheaders ; + NotFile freezemasterheaders ; + Help freezemasterheaders : + "Copy generated master headers to source tree" ; + } + + return $(target) ; +} + +## DirectoryMasterHeaders dirs [ : pre-boilerplate [ : post-boilerplate +## [ : options [ : rejects ]]]] +## A convenience wrapper around MasterHeader which generates a set of master +## header files for each directory in 'dirs', which are assumed to be +## subdirectories of the current directory. For each item in 'dirs', the +## subdirectory is recursively scanned for files, and MasterHeader is +## invoked with the gleaned file list. The generated header for a directory +## is emitted to the current directory; not within the subdirectory. The +## optional 'rejects' is a list of header files which should not be emitted +## to the synthesized master headers. 'pre-boilerplate', +## 'post-boilerplate', and 'options' carry the same interpretation as for +## MasterHeader. +rule DirectoryMasterHeaders +{ + local dirs = $(1) ; + local boilerpre = $(2) ; + local boilerpost = $(3) ; + local options = $(4) ; + local rejects = $(5) ; + local masters ; + local d ; + for d in $(dirs) + { + local files ; + { + local SUBDIR = [ ConcatDirs $(SUBDIR) $(d) ] ; # Recurse from here... + files = [ Recurse : .h : $(d) ] ; + } + if $(rejects) + { + files = [ Filter $(files) : $(rejects) ] ; + } + masters += [ MasterHeader $(d) : $(files) : $(boilerpre) : $(boilerpost) : + $(options) ] ; + } + return $(masters) ; +} + +## Prefix list : prefix +## Adds a prefix to a all elements in list. +rule Prefix +{ + return $(>)$(<) ; +} + +if $(JAMVERSION) >= 2.5 +{ + +## IsElem element : list +## Returns "true" if the element is in the list. Otherwise nothing is +## returned. +rule IsElem +{ + local i ; + + for i in $(>) + { + if $(i) = $(<) + { + return "true" ; + } + } + + return ; +} + +} +else +{ + +# Jam <2.4's return statement doesn't exit the function +rule IsElem +{ + local i result ; + + for i in $(>) + { + if $(i) = $(<) + { + result = "true" ; + $(>) = ; + } + } + + return $(result) ; +} + +} + +## Filter list : filter +## Returns the list without the words contained in filter. +rule Filter +{ + local i result ; + + for i in $(<) + { + if ! [ IsElem $(i) : $(>) ] + { + result += $(i) ; + } + } + + return $(result) ; +} + +## RemoveDups list +## Removes duplicates in the list (this function tries to preserve the list +## order) +rule RemoveDups +{ + local i result ; + + for i in $(<) + { + if ! [ IsElem $(i) : $(result) ] + { + result += $(i) ; + } + } + + return $(result) ; +} + +## Reverse list +## Reverse the order of items in the list. +rule Reverse +{ + local result ; + + for i in $(<) + { + result = $(i) $(result) ; + } + return $(result) ; +} + +## GetVar argument +## Simply returns the value of the variable with name argument. +## This is useful to query on target variables: +## bla = [ on TARGET GetVar CFlags ] ; +rule GetVar +{ + return $($(<)) ; +} + +## ConcatDirs dirs +## Concatenates a set of directories. This is a substitute for FDirName in +## Jambase. It works also correctly for several rooted paths, where FDirName +## fails. +## The advantage over $(dir1)/$(dir2) is that this also works correctly if +## $(dir1) or $(dir2) is not set. +rule ConcatDirs +{ + local i ; + local result = $(<[1]) ; + if ! $(result) { $result = "" ; } + local dir1 dir2 ; + + for i in $(<[2-]) + { + # eleminate multiple slashes because jam is somewhat buggy here + dir1 = [ MATCH (.*[^/]?) : $(result) ] ; + dir2 = [ MATCH ([^/].*) : $(i) ] ; + if ! $(dir1) { dir1 = "" ; } + if $(dir1) != "" { dir1 = $(dir1)/ ; } + if ! $(dir2) { dir2 = "" ; } + result = $(dir1)$(dir2) ; + } + + return $(result) ; +} + +## SplitToList var [ : separator ] +## Splits the value of var into a list using space as the separator unless +## an alterante separator is specified. +## IMPLEMENTATION NOTE +## When Jam sees an invocation of the `Match' function, it treats its first +## argument as a literal regular expression, and does not do any variable +## interpolation. This means that an expression, such as "(.*)$(sep)(.*)" +## will not be interpreted as expected; it will instead be interpreted as an +## invalid regex. To work around this limitation, we invoke `Match' +## indirectly. +rule SplitToList +{ + local list = ; + local matcher = Match ; # See IMPLEMENTATION NOTE above. + local unsplit = $(<) ; + local sep = $(2) ; + if ! $(sep) { sep = " " ; } + while $(unsplit) != "" + { + local split = [ $(matcher) "(.*)$(sep)(.*)" : $(unsplit) ] ; + if $(split[1]) = "" + { + list += $(unsplit) ; + unsplit = "" ; + } + else + { + list += $(split[2]) ; + unsplit = $(split[1]) ; + } + } + + return [ Reverse $(list) ] ; +} + +## Copy target : source +## Copy source to target. +actions Copy +{ + $(RM) $(<) + $(CP) $(>) $(<) +} + +## Move target : source +## Move (or rename) source to target. +actions ignore Move +{ + $(MV) $(>) $(<) +} diff --git a/mk/jam/install.jam b/mk/jam/install.jam index f585cae9e..be54c5991 100644 --- a/mk/jam/install.jam +++ b/mk/jam/install.jam @@ -1,213 +1,213 @@ -#============================================================================ -# Rules for installation -# Copyright (C)2003 by Matze Braun -# Copyright (C)2004 by Eric Sunshine -# -# 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 +# Copyright (C)2004 by Eric Sunshine +# +# 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) $(>) $(<) +} diff --git a/mk/jam/jamcompatibility.jam b/mk/jam/jamcompatibility.jam index f64ac8d93..6e3657098 100644 --- a/mk/jam/jamcompatibility.jam +++ b/mk/jam/jamcompatibility.jam @@ -1,349 +1,349 @@ -#============================================================================ -# Several hacks to make the build compatible with certain old/broken jam -# versions -# Copyright (C)2003 by Matze Braun -# -# 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 +# +# 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 diff --git a/mk/jam/library.jam b/mk/jam/library.jam index c25d373bb..42bbdac12 100644 --- a/mk/jam/library.jam +++ b/mk/jam/library.jam @@ -1,323 +1,323 @@ -#============================================================================ -# Rules for library creation -# Copyright (C)2003 by Matze Braun -# -# 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" ; +#============================================================================ +# Rules for library creation +# Copyright (C)2003 by Matze Braun +# +# 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" ; diff --git a/mk/jam/macosx.jam b/mk/jam/macosx.jam index 0201880f6..19c7fd8ce 100644 --- a/mk/jam/macosx.jam +++ b/mk/jam/macosx.jam @@ -1,354 +1,354 @@ -#============================================================================== -# Jam configuration and actions for MacOS/X -# Copyright (C) 2003-2005 by Eric Sunshine -# -# 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 -# , , and . -# 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 > $(<) - - - - - CFBundleShortVersionString - $(PACKAGE_VERSION) - CFBundleVersion - $(PACKAGE_VERSION) - ProjectName - $(BASENAME) - - -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 > $(<) - - - - - CFBundleDevelopmentRegion - English - CFBundleName - $(BASENAME) - CFBundleExecutable - $(BASENAME) - CFBundleIconFile$($(BASENAME)_APPICON) - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 0 - CFBundleShortVersionString - $(PACKAGE_VERSION) - NSPrincipalClass - NSApplication - - -EOT -} - -# AppIcon : -# 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 +# +# 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 +# , , and . +# 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 > $(<) + + + + + CFBundleShortVersionString + $(PACKAGE_VERSION) + CFBundleVersion + $(PACKAGE_VERSION) + ProjectName + $(BASENAME) + + +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 > $(<) + + + + + CFBundleDevelopmentRegion + English + CFBundleName + $(BASENAME) + CFBundleExecutable + $(BASENAME) + CFBundleIconFile$($(BASENAME)_APPICON) + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 0 + CFBundleShortVersionString + $(PACKAGE_VERSION) + NSPrincipalClass + NSApplication + + +EOT +} + +# AppIcon : +# 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) $(<) ; +} diff --git a/mk/jam/msvcgen.jam b/mk/jam/msvcgen.jam index fdef5fa08..9565c4cc7 100644 --- a/mk/jam/msvcgen.jam +++ b/mk/jam/msvcgen.jam @@ -1,1562 +1,1562 @@ -#============================================================================== -# Rules for creating MSVC project files. -# Copyright (C) 2004 by Eric Sunshine -# -# 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. -# -#============================================================================== -# -# During a project file synthesis run, the property name 'projgen' in the -# container 'build' will be given a value describing which type of project -# files are being generated. For MSVC project files, the value of the 'projgen' -# property will be "msvc". When project file synthesis supports multiple tool -# versions, the 'projgen_version' property will have a value indicating the -# version of the tool for which project files are being created. For instance, -# when generating MSVC7 project files, 'projgen' will be set to "msvc" and -# 'projgen_version' will have the value "7". -# -# Jamfiles throughout the project, if they need to alter their behavior (for -# one reason or another), can invoke the Property rule to determine whether -# project files are being synthesized. For example, to learn if project file -# synthesis is active: -# -# if [ Property build : projgen ] { ... do something ... } -# -# To take action if only a particular type of project file is being generated -# (i.e. "msvc"): -# -# if [ Property build : projgen ] = msvc { ... do something ... } -# -#============================================================================== - -MSVCGEN_SUPPORTED_VERSIONS = 6 7 71 8 ; -MSVCGEN_BUILD_ROOT ?= [ ConcatDirs $(BUILDTOP) out ] ; -MSVCGEN_BUILD_TEMP ?= [ ConcatDirs $(MSVCGEN_BUILD_ROOT) msvcgen ] ; - -#------------------------------------------------------------------------------ -# Public rule stubs. May be implemented by msvcgen phase 1 or phase 2 or both. - -## MsvcGenConfig variable [ : value ] -## Specify additional configuration information to augment the msvcgen -## environment. The Jam variable named by 'variable' is set to 'value' for -## the msvcgen run. If 'value' is omitted, then 'variable' is cleared. -## Invocations of MsvcGenConfig are cumulative, so variable/value tuples can -## be provided incrementally. It is legal to use this rule in conjunction -## with MsvcGenConfigFile; they are not mutually exclusive. -## -## The most common reason to invoke this rule is to provide MSVC-specific -## fallback values for the library checks typically performed by an Autoconf -## configure script, which the Jamfiles reference via the ExternalLibs rule. -## Such fallbacks consist of variables named TAG.CFLAGS, TAG.LFLAGS, and -## TAG.LIBS, where TAG represents the library's identifier exported by the -## configure script. Because project generation allows for finer-grained -## control, you can also optionally set the variables TAG.DEFINES, -## TAG.INCDIRS, and TAG.LIBDIRS. TAG.DEFINES is a set of tokens of the form -## "key" or "key=value". For instance, to provide MSVC-specific fallback -## values for the FreeType2 library, which the configure script might -## identify as FT2, you can define variables named FT2.CFLAGS, FT2.LFLAGS, -## FT2.LIBS, FT2.DEFINES, FT2.INCDIRS, and FT2.LIBDIRS. The msvcgen process -## will consult these variables when it encounters invocations of the -## ExternalLibs rule, and apply the overrides to the generated project files. -## If yours is a multi-platform project which conditionally defines -## Application, Plugin, and Library targets based upon the platform, then you -## should also define whatever additional variables or properties are needed -## to ensure that your project's Jamfiles invoke the Application, Plugin, and -## Library rules for modules suitable for Windows, and that they do not -## invoke those rules for modules specific to other platforms. -rule MsvcGenConfig { MsvcGenConfig1 $(1) : $(2) ; } -rule MsvcGenConfig1 { } - -## MsvcGenConfigFile file -## Similar to MsvcGenConfig, except that the configuration is provided via a -## file containing Jam statements. In the common case, the file will contain -## a series of simple Jam variable assignment statements. May be invoked -## multiple times to specify additional configuration files. It is legal to -## use this rule in conjunction with MsvcGenConfig; they are not mutually -## exclusive. -rule MsvcGenConfigFile { MsvcGenConfigFile1 $(1) : $(2) ; } -rule MsvcGenConfigFile1 { } - -## MsvcGenVariable variable [ : value ] -## Define a variable for direct interpolation into msvcgen template files. -## 'variable' is the name of the variable to define. 'value' is the value -## which should be assigned to 'variable'. If 'value' is omitted, then -## 'variable' is defined as the null (empty) string. You may invoke this -## rule multiple times to define any number of interpolation variables. You -## may also invoke it multiple times for the same variable name to give the -## variable multiple values. In the template file, reference the variable as -## `[% variable.0 %]' to retrieve the first element, `[% variable.1 %]' to -## retrieve the second, and so on. Even if you have only invoked this rule -## once for a variable, you must still reference it in the template as -## `[% variable.0 %]'. If the variable has multiple values, then it is common -## to reference it in the template via a FOREACH loop, as in -## `[% FOREACH v IN variable %]'. -rule MsvcGenVariable { MsvcGenVariable1 $(1) : $(2) ; } -rule MsvcGenVariable1 { } - -## MsvcGenWorkspace name [ : accepts [ : rejects ]] -## Specify the name of a workspace which the 'msvcgen' target should create. -## The generated workspace file name will be prefixed by "wks". By default, -## a workspace contains all projects resulting from invocations of the -## Application, Plugin, Library, and CompileGroups rules. It is possible to -## restrict the projects placed into the workspace by providing the optional -## 'accepts' and/or 'rejects'. These are lists of Perl regular expressions -## matched against the project names. (Project names are composed of "app", -## "plg", "lib", and "grp" prepended to the target name given to the -## Application, Plugin, Library, and CompileGroups rules, respectively.) -## Reject patterns take precedence over accept patterns. This rule must be -## invoked before any invocations of Application, Plugin, Library, or -## CompileGroups. You may invoke this rule multiple times to produce -## multiple workspaces, but you must invoke it at least once in order for the -## 'msvcgen' target to produce any output. -rule MsvcGenWorkspace { MsvcGenWorkspace1 $(1) : $(2) : $(3) ; } -rule MsvcGenWorkspace1 { } - -## MsvcGenSubDir dircomponents [ : version ] -## Invoke this rule with the location of the project file directory as a -## whitepace-delimited set of tokens, much as you would the SubDir rule. -## This information is used in two ways. (1) The directory structure for the -## generated files will be duplicated under $(MSVCGEN_BUILD_ROOT). For -## instance, if your project files are at "$(TOP)/proj/msvc", then the -## generated files will be deposited at "$(MSVCGEN_BUILD_ROOT)/proj/msvc". -## (2) The depth of the directory indicated by 'dircomponents' will be taken -## into account when generating references to resources in your project tree. -## For example, if your project files reside at "$(TOP)/proj/msvc", and you -## have set "$(TOP)/resources/game.ico" as the application icon with the -## ApplicationIconDefault or ApplicationIcon rule, then msvcgen will know -## that game.ico can be found relative to the project file directory via the -## path "../../resources/game.ico". If 'version' is specified, then -## 'dircomponents' applies to generated files for that version of MSVC only. -## If 'version' is not specified, then the path will be composed of -## 'dircomponents' and the version number. For instance, if 'dircomponents' -## is "$(TOP)/proj/msvc" and 'version' was not provided, then it will be -## assumed that MSVC7 project files should reside at $(TOP)/proj/msvc7". You -## must invoke this rule at least once to ensure that 'msvcgen' targets are -## made available for user invocation. -rule MsvcGenSubDir { msvcgen_path_version MsvcGenSubDir1 : $(1) : $(2) ; } -rule MsvcGenSubDir1 { } - -## MsvcGenTemplateDir dircomponents -## Invoke this rule with the location of the msvcgen template directory as a -## whitepace-delimited set of tokens. -rule MsvcGenTemplateDir { MsvcGenTemplateDir1 $(1) ; } -rule MsvcGenTemplateDir1 { } - -## MsvcExternalLibrary target [ : libs [ : mode ]] -## Invoke this rule to link 'target' with one or more MSVC-specific external -## libraries. For example, 'libs' might be "wsock32.lib". 'mode' should be -## "release" or "debug". If 'mode' is omitted, then 'libs' is used for -## release and debug. -rule MsvcExternalLibrary { MsvcExternalLibrary1 $(1) : $(2) : $(3) ; } -rule MsvcExternalLibrary1 { } - -## MsvcDefine target [ : key [ : value [ : mode ]]] -## Invoke this rule to define an MSVC-specific preprocessor macro 'key' -## having 'value' for 'target'. 'mode' should be "release" or "debug". If -## 'mode' is omitted, then 'key/value' is used for release and debug. -rule MsvcDefine { MsvcDefine1 $(1) : $(2) : $(3) : $(4) ; } -rule MsvcDefine1 { } - -## MsvcIncDirs target : directories [ : mode ] -## Invoke this rule to define an MSVC-specific additional include directories. -## 'mode' should be "release" or "debug". If 'mode' is omitted, then -## 'directories' is used for release and debug. -rule MsvcIncDirs { MsvcIncDirs1 $(1) : $(2) : $(3) ; } -rule MsvcIncDirs1 { } - -## MsvcCFlags target [ : cflags [ : mode ]] -## Invoke this rule to set additional MSVC-specific compiler flags for -## 'target'. 'mode' should be "release" or "debug". If 'mode' is omitted, -## then 'cflags' is used for release and debug. -rule MsvcCFlags { MsvcCFlags1 $(1) : $(2) : $(3) ; } -rule MsvcCFlags1 { } - -## MsvcLFlags target [ : lflags [ : mode ]] -## Invoke this rule to set additional MSVC-specific linker flags for -## 'target'. 'mode' should be "release" or "debug". If 'mode' is omitted, -## then 'lflags' is used for release and debug. -rule MsvcLFlags { MsvcLFlags1 $(1) : $(2) : $(3) ; } -rule MsvcLFlags1 { } - -## MsvcExtraFile target : files -## Use this rule to add extra file resources to the "Resource files" -## filter of the generated project. Commonly, those files are auxiliary -## files not specified in the source file list, e.g. ".inc" files. -rule MsvcExtraFile { MsvcExtraFile1 $(1) : $(2) ; } -rule MsvcExtraFile1 { } - -## MsvcGenName target : name -## Assign an MSVC project name to 'target'. Normally, the project name is -## 'target' with a prefix of "app", "grp", "lib", "plg", or "wks", depending -## upon the target's type. The MsvcGenName rule allows you to override the -## default name. This rule must be invoked prior to the Application, -## Library, Plugin, or MsvcGenWorkspace rule for 'target' in order for 'name' -## to be accepted. As an alternative to invoking this rule, if you wish to -## change the default prefixes used by all targets you can use the MsvcConfig -## rule to set the MSVC.PREFIX.appcon, MSVC.PREFIX.appgui, MSVC.PREFIX.group, -## MSVC.PREFIX.library, MSVC.PREFIX.plugin, and MSVC.PREFIX.workspace -## variables to whatever values you like. -rule MsvcGenName { MsvcGenName1 $(1) : $(2) ; } -rule MsvcGenName1 { } - -#------------------------------------------------------------------------------ -# Private utility rules. Common to all phases. - -## msvcgen_path_version rule : dircomponents [ : version ] -## If 'version' is provided, invoke 'rule' once with 'dircomponents' and -## 'version' as arguments. If 'version' is not provided, invoke 'rule' once -## per supported MSVC version with 'dircomponents' augmented so that -## 'version' is appended to the very last element of 'dircomponents'. For -## example, if 'version' is omitted, and 'dircomponents' is "TOP proj msvc", -## then 'rule' will be invoked as "rule TOP proj msvc6 : 6", then "rule TOP -## proj msvc7 : 7", etc. -rule msvcgen_path_version -{ - local subrule = $(1) ; - local path = $(2) ; - local version = $(3) ; - if $(version) - { - msvcgen_version_check $(version) ; - $(subrule) $(path) : $(version) ; - } - else - { - local v ; - for v in $(MSVCGEN_SUPPORTED_VERSIONS) - { - local p = [ FReverse $(path) ] ; - $(subrule) [ FReverse $(p[1])$(v) $(p[2-]) ] : $(v) ; - } - } -} - -rule msvcgen_resolve_dir -{ return $($(<[1])) $(<[2-]) ; } -rule msvcgen_target_dir -{ return [ ConcatDirs $(MSVCGEN_BUILD_ROOT) $(<[2-]) ] ; } -rule msvcgen_build_dir -{ return [ ConcatDirs $(MSVCGEN_BUILD_TEMP) build$(<) ] ; } -rule msvcgen_work_dir -{ return [ ConcatDirs $(MSVCGEN_BUILD_TEMP) temp$(<) ] ; } -rule msvcgen_template_dir -{ return [ ConcatDirs [ msvcgen_resolve_dir $(<) ] ] ; } -rule msvcgen_version_check -{ - if $(<) != common && ! [ IsElem $(<) : $(MSVCGEN_SUPPORTED_VERSIONS) ] - { - exit "Error: `$(<)' is not a supported msvcgen version number; valid " - "numbers are:" $(MSVCGEN_SUPPORTED_VERSIONS) ; - } -} - -rule MsvcRmTemps -{ - if $(MSVCGEN_KEEPTEMPS) != yes - { - RmTemps $(<) : $(>) ; - } -} - -#------------------------------------------------------------------------------ -# Phase 1 - -if ! $(DO_MSVCGEN) -{ -JAM ?= jam ; -MSVCGEN_JAMOPTIONS ?= ; -MSVCGEN_TTREEOPTIONS ?= ; -MSVCGEN_SILENT ?= no ; -MSVCGEN_VERBOSE ?= no ; -MSVCGEN_KEEPTEMPS ?= no ; -if $(MSVCGEN_SILENT) = yes -{ - MSVCGEN_JAMOPTIONS += -d0 ; -} -else -{ - MSVCGEN_TTREEOPTIONS += "--verbose" ; - if $(MSVCGEN_VERBOSE) = yes - { - if $(JAMVERSION) <= 2.4 - { - MSVCGEN_JAMOPTIONS += -d+2 ; - } - else - { - MSVCGEN_JAMOPTIONS += -d5 ; - } - } -} -if $(MSVCGEN_KEEPTEMPS) = yes -{ - MSVCGEN_JAMOPTIONS += "-sMSVCGEN_KEEPTEMPS=yes" ; -} - -## MsvcGenConfigFile file -## (See documentation above.) -rule MsvcGenConfigFile1 -{ - MSVCGEN_CONFIG_FILES += $(<) ; -} - -## MsvcGenSubDir dircomponents [ : version ] -## (See documentation above.) -rule MsvcGenSubDir1 -{ - local path = $(1) ; - local version = $(2) ; - if ! [ Property msvcgen : pathset$(version) ] - { - SetProperty msvcgen : pathset$(version) ; - MsvcGenTarget $(path) : $(version) ; - } - else - { - Echo "Warning: MsvcGenSubDir already invoked for version $(version)" ; - } -} - -## MsvcGenTarget dircomponents : version -## Create pseudo-targets for building and removing project files for the -## specified version of MSVC. 'dircomponents' is interpreted as described -## for the MsvcGenSubDir rule. Also populates the list MSVCGEN_TARGETS with -## names of the targets. Clients which need to perform some pre-processing -## prior to the actual msvcgen run may set the targets in this list to depend -## upon client-supplied targets. -rule MsvcGenTarget -{ - local path = $(1) ; - local version = $(2) ; - if $(version) = common - { - CleanDir msvccommonclean : [ msvcgen_target_dir $(path) ] ; - Depends msvcclean : msvccommonclean ; - } - else - { - MsvcGenUmbrella ; - Always msvc$(version)gen ; - NotFile msvc$(version)gen ; - MSVC_VERSION on msvc$(version)gen = $(version) ; - MsvcGen msvc$(version)gen ; - Depends msvcgen : msvc$(version)gen ; - Help msvc$(version)gen : "Create MSVC$(version) project files" ; - MSVCGEN_TARGETS += msvc$(version)gen ; - local commonworkdir = [ msvcgen_work_dir common ] ; - CleanDir msvc$(version)clean : - [ msvcgen_target_dir $(path) ] - [ msvcgen_build_dir $(version) ] - [ msvcgen_work_dir $(version) ] - $(commonworkdir) ; - Depends msvcclean : msvc$(version)clean ; - Help msvc$(version)clean : "Remove built MSVC$(version) project files" ; - } -} - -actions MsvcGen bind MSVCGEN_CONFIG_FILES -{ - $(JAM) $(MSVCGEN_JAMOPTIONS) \ - -sDO_MSVCGEN=yes \ - -sMSVC_VERSION=$(MSVC_VERSION) \ - -sMSVCGEN_TTREEOPTIONS='$(MSVCGEN_TTREEOPTIONS)' \ - -sMSVCGEN_CONFIG_FILES='$(MSVCGEN_CONFIG_FILES)' \ - -sTARGET.OS=WIN32 \ - msvcgen -} - -## MsvcGenUmbrella -## Create pseudo-targets for building and removing project files for all -## version of MSVC. -rule MsvcGenUmbrella -{ - if ! [ Property msvcgen : umbrella ] - { - SetProperty msvcgen : umbrella ; - - Always msvcgen ; - NotFile msvcgen ; - Help msvcgen : "Create MSVC project files (all versions)" ; - - Always msvcclean ; - NotFile msvcclean ; - Help msvcclean : "Remove built MSVC project files (all versions)" ; - CleanDir msvcclean : $(MSVCGEN_BUILD_TEMP) ; - Depends clean : msvcclean ; - } -} - -} -else -{ - -#------------------------------------------------------------------------------ -# Phase 2 - -if $(MSVCGEN_CONFIG_FILES) -{ - local f ; - for f in $(MSVCGEN_CONFIG_FILES) - { - include $(f) ; - } -} - -if $(TTREE) -{ - PERL ?= perl ; - RUN_TTREE ?= $(PERL) "\"$(TTREE)\"" ; -} -else -{ - TTREE ?= ttree ; - RUN_TTREE ?= $(TTREE) ; -} - -# Implementation note: The --strip-root directives are order-sensitive when the -# build directory is the same as the source directory, in which case TOP is "." -# and MSVCGEN_BUILD_ROOT is "./out". If TOP incorrectly appeared first, then -# it would invalidate the following --strip-root option since TOP is a prefix -# of MSVCGEN_BUILD_ROOT. -MSVCGEN_STRIP_ROOT = $(MSVCGEN_BUILD_ROOT)/ $(TOP)/ ; - -# When generating the icon file .rc, we compose a 'sed' expression out of -# MSVCGEN_BUILD_ROOT in order to ensure that the referenced icon paths are -# correct. However, we must take care to protect characters in -# MSVCGEN_BUILD_ROOT which have special meaning to 'sed'. For instance, in -# MSVCGEN_BUILD_ROOT, if $(TOP)/ is "./", then we want it to match a literal -# period followed by a slash, not 'any character' followed by a slash, so it -# must be transformed to "\./". (Presently we take the simple-minded approach -# of protecting only "." since it arises frequently.) -MSVCGEN_SED_PROTECT = "$(SED) 's:\\.:\\\\\\.:g'" ; - -MSVC_VERSION ?= 7 ; -if $(MSVC_VERSION) = 6 -{ - SUFPRJ = dsp ; - SUFWSP = dsw ; - MSVC_FORCE_CRLF = yes ; - MSVC_TEMPLATE_SUFFIX = 6 ; -} -else if $(MSVC_VERSION) = 7 || $(MSVC_VERSION) = 71 || $(MSVC_VERSION) = 8 -{ - SUFPRJ = vcproj ; - SUFWSP = sln ; - MSVC_FORCE_CRLF = no ; - MSVC_TEMPLATE_SUFFIX = 7 ; - if $(MSVC_VERSION) = 7 - { - MSVC_FORMATVERSION_PRJ = 7.00 ; - MSVC_FORMATVERSION_WSP = 7.00 ; - } - else if $(MSVC_VERSION) = 71 - { - MSVC_FORMATVERSION_PRJ = 7.10 ; - MSVC_FORMATVERSION_WSP = 8.00 ; - } - else if $(MSVC_VERSION) = 8 - { - MSVC_FORMATVERSION_PRJ = 8.00 ; - MSVC_FORMATVERSION_WSP = 9.00 ; - } -} -else -{ - exit "No msvcgen support for MSVC version $(MSVC_VERSION) yet!" ; -} - -MSVC.TSUFPRJ = tproj ; -MSVC.TSUFWKP = twks ; - -MSVC.DEPEND ?= ; -MSVC.DEPEND_DEBUG ?= ; -MSVC.LIBRARY ?= ; -MSVC.LIBRARY_DEBUG ?= ; -MSVC.LFLAGS ?= ; -MSVC.LFLAGS_DEBUG ?= ; -MSVC.LIBRARY_DELAY ?= ; -MSVC.CFLAGS ?= ; -MSVC.CFLAGS_DEBUG ?= ; -MSVC.DEFINES ?= ; -MSVC.DEFINES_DEBUG ?= ; -MSVC.DEPEND.appgui ?= ; -MSVC.DEPEND_DEBUG.appgui ?= ; -MSVC.LIBRARY.appgui ?= ; -MSVC.LIBRARY_DEBUG.appgui ?= ; -MSVC.LFLAGS.appgui ?= ; -MSVC.LFLAGS_DEBUG.appgui ?= ; -MSVC.CFLAGS.appgui ?= ; -MSVC.CFLAGS_DEBUG.appgui ?= ; -MSVC.DEFINES.appgui ?= ; -MSVC.DEFINES_DEBUG.appgui ?= ; -MSVC.DEPEND.appcon ?= ; -MSVC.DEPEND_DEBUG.appcon ?= ; -MSVC.LIBRARY.appcon ?= ; -MSVC.LIBRARY_DEBUG.appcon ?= ; -MSVC.LFLAGS.appcon ?= ; -MSVC.LFLAGS_DEBUG.appcon ?= ; -MSVC.CFLAGS.appcon ?= ; -MSVC.CFLAGS_DEBUG.appcon ?= ; -MSVC.DEFINES.appcon ?= ; -MSVC.DEFINES_DEBUG.appcon ?= ; -MSVC.DEPEND.plugin ?= ; -MSVC.DEPEND_DEBUG.plugin ?= ; -MSVC.LIBRARY.plugin ?= ; -MSVC.LIBRARY_DEBUG.plugin ?= ; -MSVC.LIBRARY_DELAY.plugin ?= ; -MSVC.LFLAGS.plugin ?= ; -MSVC.LFLAGS_DEBUG.plugin ?= ; -MSVC.CFLAGS.plugin ?= ; -MSVC.CFLAGS_DEBUG.plugin ?= ; -MSVC.DEFINES.plugin ?= ; -MSVC.DEFINES_DEBUG.plugin ?= ; -MSVC.DEPEND.library ?= ; -MSVC.DEPEND_DEBUG.library ?= ; -MSVC.LIBRARY.library ?= ; -MSVC.LIBRARY_DEBUG.library ?= ; -MSVC.LFLAGS.library ?= ; -MSVC.LFLAGS_DEBUG.library ?= ; -MSVC.CFLAGS.library ?= ; -MSVC.CFLAGS_DEBUG.library ?= ; -MSVC.DEFINES.library ?= ; -MSVC.DEFINES_DEBUG.library ?= ; - -MSVC.PREFIX.appgui ?= app ; -MSVC.PREFIX.appcon ?= app ; -MSVC.PREFIX.plugin ?= plg ; -MSVC.PREFIX.library ?= lib ; -MSVC.PREFIX.group ?= grp ; -MSVC.PREFIX.workspace ?= wks ; - -SetProperty build : projgen : msvc ; -SetProperty build : projgen_version : $(MSVC_VERSION) ; - -# MsvcAddPrefix name : type -rule MsvcAddPrefix -{ - local name = $(1) ; - local type = $(2) ; - local prefix = $(MSVC.PREFIX.$(type)) ; - if $(prefix) { name = "$(prefix)$(name)" ; } - return $(name) ; -} - -#---------------------------------------------------------------------------- -# Override some rules - -actions GenerateWin32ManifestRc -{ - cat > $(<) << __EOF__ -// This file is generated automatically. - -#if !defined(PROJECTGEN_VERSION) || (PROJECTGEN_VERSION != 8) -1 24 "$(MANIFEST_NAME)" -#endif -__EOF__ -} - -## MsvcGenConfig variable [ : value ] -## (See documentation above.) -rule MsvcGenConfig1 -{ - $(<) = $(>) ; -} - -## MsvcGenVariable variable [ : value ] -## (See documentation above.) -rule MsvcGenVariable1 -{ - MSVCGEN_VARIABLES += "$(<)|$(>)" ; -} - -## MsvcGenWorkspace name [ : accepts [ : rejects ]] -## (See documentation above.) -rule MsvcGenWorkspace1 -{ - local name = $(1) ; - local accepts = $(2) ; - local rejects = $(3) ; - local builddir = [ msvcgen_build_dir $(MSVC_VERSION) ] ; - local workdir = [ msvcgen_work_dir $(MSVC_VERSION) ] ; - local wksname = $(MSVC.NAME_OVERRIDE.$(name)) ; - if ! $(wksname) { wksname = [ MsvcAddPrefix $(name) : workspace ] ; } - - MSVC.WORKSPACES += $(name) ; - - local respdir = $(workdir) ; - local respfile = $(wksname:G=msvcresp:S=.resp) ; - Always $(respfile) ; - $(name)_WKS_RESPFILE = $(respfile) ; - $(name)_WKS_RESPDIR = $(respdir) ; - - # Boilerplate. - ResponseFile $(respfile) : - "key|value" - "accept|$(accepts)" - "reject|$(rejects)" - "formatversion|$(MSVC_FORMATVERSION_WSP)" - $(MSVCGEN_VARIABLES) - : notfile : $(respdir) ; - MsvcRmTemps msvcgen : $(respfile) ; - - local buildfile = $(wksname:G=msvcworkspace:S=.$(MSVC.TSUFWKP)) ; - Always $(buildfile) ; - MakeLocate $(buildfile) : $(builddir) ; - Includes $(buildfile) : $(respfile) ; - MSVC_BUILD_TYPE on $(buildfile) = workspace ; - MsvcBuildFile $(buildfile) : $(respfile) ; - Depends msvcgenrun : $(buildfile) ; - MsvcRmTemps msvcgen : $(buildfile) ; -} - -## MsvcGenSubDir dircomponents [ : version ] -## (See documentation above.) -rule MsvcGenSubDir1 -{ - local path = $(1) ; - local version = $(2) ; - - local relpath ; - if ! $(path[2]) - { - relpath = $(DOT) ; - } - else - { - local i ; - for i in $(path[2-]) - { - relpath += $(DOTDOT) ; - } - } - - SetProperty msvcgen : outdir$(version) : [ msvcgen_target_dir $(path) ] ; - SetProperty msvcgen : relpath$(version) : $(relpath) ; - - MSVCGEN_OUTDIR_$(version) = [ Property msvcgen : outdir$(version) ] ; -} - -## MsvcGenTemplateDir dircomponents -## (See documentation above.) -rule MsvcGenTemplateDir1 -{ - SetProperty msvcgen : templatedir : [ msvcgen_template_dir $(<) ] ; - - MSVCGEN_TEMPLATEDIR = [ Property msvcgen : templatedir ] ; -} - -## MsvcGenName target : name -## (See documentation above.) -rule MsvcGenName1 -{ - MSVC.NAME_OVERRIDE.$(<) = $(>) ; -} - -## MsvcProject target : type : target-with-ext : sources : options -## Create a project file for 'target', which is the project's raw name. -## 'sources' is a list of files comprising the target. -rule MsvcProject -{ - local rawname = $(1) ; - local type = $(2) ; - local decorated = $(3) ; - local sources = $(4) ; - local options = $(5) ; - local relpath = [ Property msvcgen : relpath$(MSVC_VERSION) ] ; - local relpathcommon = [ Property msvcgen : relpathcommon ] ; - if "$(relpathcommon)" = "" - { - relpathcommon = $(relpath) ; - } - local outdir = [ Property msvcgen : outdir$(MSVC_VERSION) ] ; - local outdircommon = [ Property msvcgen : outdircommon ] ; - if "$(outdircommon)" = "" - { - outdircommon = $(outdir) ; - } - local builddir = [ msvcgen_build_dir $(MSVC_VERSION) ] ; - local workdir = [ msvcgen_work_dir $(MSVC_VERSION) ] ; - local workdircommon = [ msvcgen_work_dir common ] ; - - local msvcname = $(MSVC.NAME_OVERRIDE.$(rawname)) ; - if ! $(msvcname) { msvcname = [ MsvcAddPrefix $(rawname) : $(type) ] ; } - $(rawname)_MSVCNAME = $(msvcname) ; - - local respdir = $(workdir) ; - local respfile = $(msvcname:G=msvcresp:S=.resp) ; - Always $(respfile) ; - $(rawname)_PRJ_RESPFILE = $(respfile) ; - $(rawname)_PRJ_RESPDIR = $(respdir) ; - - # Boilerplate. - ResponseFile $(respfile) : - "key|value" - "formatversion|$(MSVC_FORMATVERSION_PRJ)" - "projtype|$(type)" - "project|$(msvcname)" - "rawtarget|$(rawname)" - "target|$(decorated)" - "sourceroot|$(relpath:J=/)" - "buildroot|$(relpath:J=/)" - "striproot|$(MSVCGEN_STRIP_ROOT)" - "define|$(MSVC.DEFINES)" - "define|$(MSVC.DEFINES.$(type))" - "definedebug|$(MSVC.DEFINES_DEBUG)" - "definedebug|$(MSVC.DEFINES_DEBUG.$(type))" - "cflags|$(MSVC.CFLAGS)" - "cflags|$(MSVC.CFLAGS.$(type))" - "cflagsdebug|$(MSVC.CFLAGS_DEBUG)" - "cflagsdebug|$(MSVC.CFLAGS_DEBUG.$(type))" - "lflags|$(MSVC.LFLAGS)" - "lflags|$(MSVC.LFLAGS.$(type))" - "lflagsdebug|$(MSVC.LFLAGS_DEBUG)" - "lflagsdebug|$(MSVC.LFLAGS_DEBUG.$(type))" - "library|$(MSVC.LIBRARY)" - "library|$(MSVC.LIBRARY.$(type))" - "librarydebug|$(MSVC.LIBRARY_DEBUG)" - "librarydebug|$(MSVC.LIBRARY_DEBUG.$(type))" - "librarydelay|$(MSVC.LIBRARY_DELAY)" - "librarydelay|$(MSVC.LIBRARY_DELAY.$(type))" - "msvcversion|$(MSVC_VERSION)" - "static|$($(rawname)_STATIC)" - $(MSVCGEN_VARIABLES) - : notfile : $(respdir) ; - MsvcRmTemps msvcgen : $(respfile) ; - - # Only include source and headers files for now. In the future, we also - # want to include .cfg files and any other textual resources which which the - # user might care to read/view in the MSVC IDE. - local i ; - for i in $(sources) - { - if [ IsElem $(i:S) : .h .hpp .hxx .H .c .cc .cpp .cxx .C .m .mm .M ] - { - local fileinproj ; - if $($(rawname)_STATIC) = "yes" - { - fileinproj = $(i) ; - } - else - { - fileinproj = $(i:R=$(SEARCH_SOURCE)) ; - } - ResponseFile $(respfile) : "file|$(fileinproj)" : notfile : - $(respdir) ; - } - } - - # Add resource file. - if [ IsElem $(type) : plugin appgui appcon ] - { - local resource = $(msvcname:S=.rc) ; - Depends msvcgen : $(resource) ; - MakeLocate $(resource) : $(outdircommon) ; - SEARCH on $(resource) = $(outdircommon) ; - NAME on $(resource) = $(rawname) ; - $(rawname)_RCNAME = $(resource) ; - ResponseFile $(respfile) : "file|$(resource:R=$(outdircommon))" : notfile : - $(respdir) ; - - local versionrc = $(resource:S=.vrctmp) ; - MakeLocate $(versionrc) : $(workdircommon) ; - MakeVersionRc $(versionrc) : $(rawname) ; - Depends $(versionrc) : $(TOP)/Jamconfig ; - Depends $(versionrc) : $(SUBDIR)/Jamfile ; - Win32Resource $(rawname) : $(versionrc) ; - MsvcRmTemps $(resource) : $(versionrc) ; - - if $(type) = "plugin" - { - local metarc = $(resource:S=.mrctmp) ; - MakeLocate $(metarc) : $(workdircommon) ; - SEARCH on $(metarc) = $(SEARCH_SOURCE) ; - Depends $(metarc) : $($(rawname)_METAFILE) ; - GenerateWin32MetadataRc $(metarc) : $($(rawname)_METAFILE) ; - - Win32Resource $(rawname) : $(metarc) ; - MsvcRmTemps $(resource) : $(metarc) ; - ResponseFile $(respfile) : - "file|$($(rawname)_METAFILE:R=$(SEARCH_SOURCE))" : notfile : - $(respdir) ; - } - - if [ IsElem $(type) : appgui appcon ] - { - if ! [ IsElem nomanifest : $(options) ] - { - local manifest = $(msvcname:S=.manifest) ; - MakeLocate $(manifest) : $(outdircommon) ; - MakeManifestFile $(manifest) : $(rawname) ; - Depends $(manifest) : $(TOP)/Jamconfig ; - Depends $(manifest) : $(SUBDIR)/Jamfile ; - Depends msvcgen : $(manifest) ; - - local manifestrc = $(resource:S=.mfrctmp) ; - MakeLocate $(manifestrc) : $(workdircommon) ; - MANIFEST_NAME on $(manifestrc) = $(manifest) ; - GenerateWin32ManifestRc $(manifestrc) ; - Depends $(manifestrc) : $(manifest) ; - if $(MSVC_VERSION) = 8 - { - # VC8: Manifest appears in project along other files, a special build - # tool cares about the embedding into a resource. (The resource goop - # still has to be generated since it is shared with other VCs.) - ResponseFile $(respfile) : "file|$(manifest:R=$(outdircommon))" : notfile : - $(respdir) ; - } - - Win32Resource $(rawname) : $(manifestrc) ; - MsvcRmTemps $(resource) : $(manifestrc) ; - } - - local icon = [ ApplicationIcon win32 : $(rawname) ] ; - if ! $(icon) - { - local apptype = gui ; - if $(type) = "appcon" { apptype = console ; } - icon = [ ApplicationIconDefault win32 : $(apptype) ] ; - } - if $(icon) - { - local iconrc = $(resource:S=.iconrctmp) ; - # RELPATH includes trailing slash (hence the "" in ConcatDirs). - RELPATH on $(iconrc) = [ ConcatDirs $(relpathcommon) "" ] ; - MakeLocate $(iconrc) : $(workdircommon) ; - Depends $(iconrc) : $(icon) ; - Depends $(iconrc) : $(SUBDIR)/Jamfile ; - GenerateIconRc $(iconrc) : $(icon) ; - Win32Resource $(rawname) : $(iconrc) ; - MsvcRmTemps $(resource) : $(iconrc) ; - } - } - } - - local inckeys = "include" includedebug ; - local incdirs = $(MSVC.INCDIRS_LITERAL) $(MSVC.INCDIRS_LITERAL.$(rawname)) ; - ResponseFile $(respfile) : "$(inckeys)|$(incdirs)" : notfile : $(respdir) ; - - local incdir ; - for incdir in $(MSVC.INCDIRS) $(MSVC.INCDIRS.$(rawname)) - { - if $(incdir) = "." - { - incdir = [ ConcatDirs $(relpath) ] ; - } - else - { - incdir = [ ConcatDirs $(relpath) $(incdir) ] ; - } - ResponseFile $(respfile) : "$(inckeys)|$(incdir)" : notfile : $(respdir) ; - } - - if ! [ Property msvcgen : templatedir ] - { - exit "Error: You must invoke MsvcGenTemplateDir for project generation." ; - } - - local buildfile = $(msvcname:G=msvcproject:S=.$(MSVC.TSUFPRJ)) ; - Always $(buildfile) ; - MakeLocate $(buildfile) : $(builddir) ; - Includes $(buildfile) : $(respfile) ; - MSVC_BUILD_TYPE on $(buildfile) = project ; - MsvcBuildFile $(buildfile) : $(respfile) ; - Depends msvcgenrun : $(buildfile) ; - MsvcRmTemps msvcgen : $(buildfile) ; - - if ! $(MSVC.WORKSPACES) - { - exit "You must specify at least one workspace via MsvcGenWorkspace" ; - } - - local w ; - for w in $(MSVC.WORKSPACES) - { - ResponseFile $($(w)_WKS_RESPFILE) : "project|$(msvcname)" : notfile : - $($(w)_WKS_RESPDIR) ; - } - - Clean msvcclean : $(target) ; -} - -#---------------------------------------------------------------------------- - -# Ensure that the pseudo-groups exist with which the overridden Application, -# Plugin, and Library rules will register their targets. We have to do this -# here rather than at the top-level (outside of any rule invocation) because we -# need to give the client time to invoke MsvcGenWorkspace first to set up the -# workspaces into which these groups will be inserted. If we tried registering -# theses pseudo-groups at the top-level, registration would occur before the -# client has had a chance to invoke MsvcGenWorkspace, thus these pseudo-groups -# would not inhabit any workspaces. -rule RegisterWellKnownCompileGroup1 -{ - local group = $(1) ; - if $(MSVCGEN.WELL_KNOWN_GROUP_REGISTERED.$(group)) != yes - { - MSVCGEN.WELL_KNOWN_GROUP_REGISTERED.$(group) = yes ; - RegisterCompileGroups $(group) ; - } -} - -rule RegisterWellKnownCompileGroup -{ - RegisterWellKnownCompileGroup1 all ; - RegisterWellKnownCompileGroup1 $(1) ; -} - -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.debug lflags.release p mode ; - # Collect optional plugins - for p in $(optplugins) - { - if [ IsElem $(p) : $(STATICPLUGINS.AVAILABLE) ] - { - plugins += $(p) ; - } - } - # Grab flags - for p in $(plugins) - { - NotFile $(p) ; - for mode in debug release - { - MsvcCFlags $(target) : $(STATICPLUGIN.$(p).CFLAGS.$(mode)) : $(mode) ; - lflags.$(mode) += $(STATICPLUGIN.$(p).LFLAGS.$(mode)) ; - } - } - for mode in debug release - { - MsvcLFlags $(target) : - [ Reverse [ RemoveDups [ Reverse $(lflags.$(mode)) ] ] ] : $(mode) ; - } - } - else - { - # link with static plugins - LinkWith $(target) : $(STATICPLUGINS.LIBRARY) ; - - # Local static plugins - local libs p ; - # Collect optional plugins - for p in $(optplugins) - { - if $($(p)_TYPE) - { - plugins += $(p) ; - } - } - # Grab flags - for p in $(plugins) - { - libs += $($(p).NEEDLIBS) ; - - ExternalLibs $(target) : $($(p).EXTERNALLIBS) ; - for mode in debug release - { - MsvcExternalLibrary $(target) : $($(p)_$(mode)_EXTERNALLIBS) : $(mode) ; - MsvcExternalLibrary $(target) : $($(p)_$(mode)_EXTERNALLIBS) : $(mode) ; - } - } - LinkWith $(target) : $(libs) ; - } - - # Generate static plugin instantiation - local outdir = [ Property msvcgen : outdircommon ] ; - if "$(outdir)" = "" - { - outdir = [ Property msvcgen : outdir$(MSVC_VERSION) ] ; - } - local staticuse_out ; - if $(package) - { - # @@@ Prefix hardcoded - staticuse_out = $(MSVC.PREFIX.appgui)$(<)_staticuse_$(package).cpp ; - } - else - { - staticuse_out = - $(MSVC.PREFIX.appgui)$(<)_staticuse.cpp ; # @@@ Prefix hardcoded - } - MakeLocate $(staticuse_out) : $(outdir) ; - SEARCH on $(staticuse_out) = $(outdir) ; - - GenerateStaticPluginInstantiation $(staticuse_out) : $(plugins) ; - Depends msvcgen : $(staticuse_out) ; - - # Add usefile to project - ResponseFile $($(target)_PRJ_RESPFILE) : - "file|$(staticuse_out:R=$(outdir))" : notfile : - $($(target)_PRJ_RESPDIR) ; - Depends $(target) : $(staticuse_out) ; -} - -rule Application -{ - RegisterWellKnownCompileGroup apps ; - - local projtype ; - if [ IsElem console : $(3) ] - { - projtype = appcon ; - } - else - { - projtype = appgui ; - } - MsvcProject $(<) : $(projtype) : $(<:S=.exe) : $(>) : $(3) ; - - CompileGroups $(<) : all apps ; -} - -rule Plugin -{ - RegisterWellKnownCompileGroup plugins ; - - $(<)_TYPE = plugin ; - - local metafile ; - metafile = [ FAppendSuffix $(<) : $(SUFMETA) ] ; - SEARCH on $(metafile) = $(SEARCH_SOURCE) ; - $(<)_METAFILE = $(metafile) ; - MsvcProject $(<) : plugin : $(<:S=$(MSVCGEN.PLUGIN_EXT.$(<):E=.dll)) : $(>) ; - CompileGroups $(<) : all plugins ; - - STATICPLUGINS.SOURCES.$(<) += $(>:R=$(SEARCH_SOURCE)) ; - STATICPLUGINS.SUBTARGETS += $(<) ; - - # Generate static variant of plugin - # Static registry - local outdir = [ Property msvcgen : outdircommon ] ; - local staticreg_out = $(MSVC.PREFIX.library)$(<)_staticreg.cpp ; - MakeLocate $(staticreg_out) : $(outdir) ; - SEARCH on $(staticreg_out) = $(outdir) ; - GenerateStaticPluginRegistration $(staticreg_out) : $(metafile) ; - Depends msvcgen : $(staticreg_out) ; - STATICPLUGINS.SOURCES.$(<) += $(outdir)/$(staticreg_out) ; -} - -rule Library -{ - RegisterWellKnownCompileGroup libs ; - $(<)_TYPE = library ; - MsvcProject $(<) : library : $(<:S=.lib) : $(>) ; - CompileGroups $(<) : all libs ; -} - -rule StaticPluginLibrary -{ - local name = $(<) ; - local rejects = $(>) ; - local t ; - - local targets = $(STATICPLUGINS.SUBTARGETS) ; - if $(rejects) - { - targets = [ Filter $(targets) : $(rejects) ] ; - } - local sources extlibs ; - for t in $(targets) - { - sources += $(STATICPLUGINS.SOURCES.$(t)) ; - extlibs += $($(t).EXTERNALLIBS) ; - } - - $(name)_STATIC = "yes" ; - # Set up library - Library $(name) : $(sources) ; - MsvcDefine $(name) : CS_STATIC_LINKED ; - _MsvcDefine $(name) : $(STATICPLUGINS.MSVC_DEFINES) ; - ExternalLibs $(name) : [ RemoveDups $(extlibs) ] ; - - # Write out needed CFLAGS, LFLAGS - local outdir = [ Property msvcgen : outdircommon ] ; - if $(outdir) = "" - { - outdir = [ Property msvcgen : outdir$(MSVC_VERSION) ] ; - } - STATICPLUGINS.DEPENDENCIES = $(name)_msvc.jam ; - MakeLocate $(STATICPLUGINS.DEPENDENCIES) : $(outdir) ; - SEARCH on $(STATICPLUGINS.DEPENDENCIES) = $(outdir) ; - for t in $(targets) - { - NotFile $(t) ; - WriteDependencies $(STATICPLUGINS.DEPENDENCIES) : $(t) : $(name) ; - } - Always $(STATICPLUGINS.DEPENDENCIES) ; - Depends msvcgen : $(STATICPLUGINS.DEPENDENCIES) ; - - STATICPLUGINS.LIBRARY = $(name) ; -} - -# Write out CFLAGS, LFLAGS needed by a plugin -rule WriteDependencies -{ - local cflags.debug cflags.release ; - local lflags.debug lflags.release ; - local depfile = $(<) ; - local plugin = $(>) ; - local libname = $(3) ; - local depfile_gristed = $(depfile:G=$(plugin)) ; - MakeLocate $(depfile_gristed) : [ on $(depfile) GetVar LOCATE ] ; - - # "Artificially" insert static library itself - lflags.debug += $(MSVC.PREFIX.library)$(libname)_d.lib ; - lflags.release += $(MSVC.PREFIX.library)$(libname).lib ; - # Collect other libs - local libs = [ ResolveLibs $($(plugin).NEEDLIBS) ] ; - lflags.debug += $(MSVC.PREFIX.library)$(libs)_d.lib ; - lflags.release += $(MSVC.PREFIX.library)$(libs).lib ; - - # Defines - local l ; - for l in $($(plugin).EXTERNALLIBS) - { - if $($(l).DEFINES.DEBUG) - { - cflags.debug += "\"/D $($(l).DEFINES.DEBUG)\"" ; - cflags.release += "\"/D $($(l).DEFINES)\"" ; - } - else - { - cflags.debug += "\"/D $($(l).DEFINES)\"" ; - cflags.release += "\"/D $($(l).DEFINES)\"" ; - } - } - # Link flags - local mode ; - for mode in debug release - { - lflags.$(mode) += $($(plugin).LFLAGS.$(mode)) ; - lflags.$(mode) += $($(plugin)_$(mode)_EXTERNALLIBS) ; - } - CFLAGS.DEBUG on $(depfile_gristed) = "$(cflags.debug)" ; - CFLAGS.RELEASE on $(depfile_gristed) = "$(cflags.release)" ; - lflags.debug = [ RemoveDups $(lflags.debug) ] ; - LFLAGS.DEBUG on $(depfile_gristed) = "$(lflags.debug)" ; - lflags.release = [ RemoveDups $(lflags.release) ] ; - LFLAGS.RELEASE on $(depfile_gristed) = "$(lflags.release)" ; - LIBNAME on $(depfile_gristed) = $(libname) ; - - if $($(depfile).FIRSTTIME) != "yes" - { - WriteDepFlags1 $(depfile_gristed) : $(plugin) ; - $(depfile).FIRSTTIME = "yes" ; - } - else - { - WriteDepFlags2 $(depfile_gristed) : $(plugin) ; - } - Depends $(depfile) : $(depfile_gristed) ; - Always $(depfile_gristed) ; -} - -actions WriteDepFlags1 -{ - cat << EOT > $(<) -# This file is automatically generated to be used together with $(LIBNAME) -# and must be integrated by setting the correct values for the -# HAVE_STATICDEPS. and .STATICDEPS via MsvcGenConfig. -# Furthermore, this file might require manual updates from the master copy -# (usually found in the package's source repository) every now and then. -STATICPLUGINS.AVAILABLE += $(>) ; -STATICPLUGIN.$(>).CFLAGS.debug = $(CFLAGS.DEBUG) ; -STATICPLUGIN.$(>).CFLAGS.release = $(CFLAGS.RELEASE) ; -STATICPLUGIN.$(>).LFLAGS.debug = $(LFLAGS.DEBUG) ; -STATICPLUGIN.$(>).LFLAGS.release = $(LFLAGS.RELEASE) ; -EOT -} - -actions WriteDepFlags2 -{ - cat << EOT >> $(<) -STATICPLUGINS.AVAILABLE += $(>) ; -STATICPLUGIN.$(>).CFLAGS.debug = $(CFLAGS.DEBUG) ; -STATICPLUGIN.$(>).CFLAGS.release = $(CFLAGS.RELEASE) ; -STATICPLUGIN.$(>).LFLAGS.debug = $(LFLAGS.DEBUG) ; -STATICPLUGIN.$(>).LFLAGS.release = $(LFLAGS.RELEASE) ; -EOT -} - -rule RegisterCompileGroups -{ - local i ; - for i in $(<)_$(MSVC.WORKSPACES) - { - MsvcProject $(i) : group ; - } -} - -rule CompileGroups -{ - local w ; - for w in $(MSVC.WORKSPACES) - { - local i ; - for i in $(>)_$(w) - { - local m = $($(<)_MSVCNAME) ; - if ! $(m) { m = $($(<)_$(w)_MSVCNAME) ; } # Might be a "group". - if $(m) - { - ResponseFile $($(w)_WKS_RESPFILE) : "$($(i)_MSVCNAME)|$(m)" : - notfile : $($(w)_WKS_RESPDIR) ; - } - } - } -} - -rule LinkWith -{ - local libs = [ ResolveLibs $(>) ] ; - ExternalLibs $(<) : $($(>).EXTERNALLIBS) ; - local w ; - for w in $(MSVC.WORKSPACES) - { - local l ; - for l in $(libs)_MSVCNAME - { - if $($(l)) - { - ResponseFile $($(w)_WKS_RESPFILE) : "$($(<)_MSVCNAME)|$($(l))" : - notfile : $($(w)_WKS_RESPDIR) ; - } - } - } - $(<).NEEDLIBS = $(libs) ; -} - -rule MsvcClassifyMode -{ - local c ; - switch $(<) - { - case release : c = "" ; - case debug : c = debug ; - case * : c = "" debug ; - } - return $(c) ; -} - -# _MsvcRespEmit target : items : tag [ : mode [ : options ]] -# Emit `items' to the response file for `target' using the response file tag -# `tag'. `mode' is either "release", "debug", or empty, in which case it -# applies to release and debug modes. If options contains "ignoremode", then -# `mode' is not consulted. -rule _MsvcRespEmit -{ - local target = $(1) ; - local items = $(2) ; - local tag = $(3) ; - local mode = $(4) ; - local options = $(5) ; - local modes = "" ; - - CheckOptions ignoremode : $(options) : $(target) ; - if ! [ IsElem ignoremode ] { modes = [ MsvcClassifyMode $(mode) ] ; } - - ResponseFile $($(target)_PRJ_RESPFILE) : "$(tag)$(modes)|$(items)" : - notfile : $($(target)_PRJ_RESPDIR) ; -} - -# MsvcExternalLibrary target [ : libs [ : mode ]] -# (See documentation above.) -rule MsvcExternalLibrary1 -{ - _MsvcRespEmit $(1) : $(2) : library : $(3) ; - local mode = $(3) ; - mode ?= debug release ; - $(1)_$(mode)_EXTERNALLIBS += $(2) ; -} - -# MsvcDefine target [ : key [ : value [ : mode ]]] -# (See documentation above.) -rule MsvcDefine1 -{ - local target = $(1) ; - local key = $(2) ; - local value = $(3) ; - local mode = $(4) ; - if $(key) - { - local def ; - if $(value) - { - def = "$(key)=$(value)" ; - } - else - { - def = $(key) ; - } - _MsvcRespEmit $(target) : $(def) : define : $(mode) ; - STATICPLUGINS.MSVC_DEFINES += $(def) ; - } -} - -# MsvcIncDirs target : directory [ : mode ] -# (See documentation above.) -rule MsvcIncDirs1 -{ - _MsvcIncDirs $(1) : $(2) : $(3) ; -} - -# _MsvcDefine target : tuples [ : mode ] -# Similar to MsvcDefine, but works with a list of `key=value' tuples. Also -# understands `key' with no value. -rule _MsvcDefine -{ - _MsvcRespEmit $(1) : $(2) : define : $(3) ; -} - -# MsvcCFLags target [ : cflags [ : mode ]] -# (See documentation above.) -rule MsvcCFlags1 -{ - _MsvcRespEmit $(1) : $(2) : cflags : $(3) ; -} - -# MsvcLFlags target [ : lflags [ : mode ]] -# (See documentation above.) -rule MsvcLFlags1 -{ - local modes = [ MsvcClassifyMode $(3) ] ; - $(target).LFLAGS.$(modes) += $(2) ; - _MsvcRespEmit $(1) : $(2) : lflags : $(3) ; -} - -# MsvcLFlags target : files -# (See documentation above.) -rule MsvcExtraFile1 -{ - local rawname = $(1) ; - local files = $(2) ; - - local respfile = $($(rawname)_PRJ_RESPFILE) ; - local respdir = $($(rawname)_PRJ_RESPDIR) ; - - ResponseFile $(respfile) : "file|$(files)" : notfile : - $(respdir) ; -} - -# _MsvcIncDirs target : incdirs [ : mode ] -# Helper for ExternalLibs which processes the contents of TAG.INCDIRS for -# an external library. -rule _MsvcIncDirs -{ - _MsvcRespEmit $(1) : $(2) : include : $(3) ; -} - -# _MsvcLibDirs target : libdirs [ : mode ] -# Helper for ExternalLibs which processes the contents of TAG.LIBDIRS for -# an external library. -rule _MsvcLibDirs -{ - _MsvcRespEmit $(1) : $(2) : libdir : $(3) ; -} - -# _ExternalLibsHelperMsvc target : libtag : subrule : attribute -rule _ExternalLibsHelperMsvc -{ - local target = $(1) ; - local lib = $(2) ; - local rulename = $(3) ; - local attrib = $(4) ; - - if $($(lib).$(attrib).DEBUG.$(MSVC_VERSION)) - { - $(rulename) $(target) : $($(lib).$(attrib).DEBUG.$(MSVC_VERSION)) : debug ; - } - else if $($(lib).$(attrib).DEBUG) - { - $(rulename) $(target) : $($(lib).$(attrib).DEBUG) : debug ; - } - else - { - $(rulename) $(target) : $($(lib).$(attrib)) : debug ; - } - if $($(lib).$(attrib).$(MSVC_VERSION)) - { - $(rulename) $(target) : $($(lib).$(attrib).$(MSVC_VERSION)) : release ; - } - else - { - $(rulename) $(target) : $($(lib).$(attrib)) : release ; - } -} - -rule ExternalLibs -{ - local i ; - for i in $(>) - { - _ExternalLibsHelperMsvc $(<) : $(i) : MsvcCFlags : CFLAGS ; - _ExternalLibsHelperMsvc $(<) : $(i) : MsvcLFlags : LFLAGS ; - _ExternalLibsHelperMsvc $(<) : $(i) : MsvcExternalLibrary : LIBS ; - _ExternalLibsHelperMsvc $(<) : $(i) : _MsvcDefine : DEFINES ; - _ExternalLibsHelperMsvc $(<) : $(i) : _MsvcIncDirs : INCDIRS ; - _ExternalLibsHelperMsvc $(<) : $(i) : _MsvcLibDirs : LIBDIRS ; - - $(<).EXTERNALLIBS += $(i) ; - } -} - -rule IncludeDir -{ - local dir = $(1) ; - local target = $(2) ; - local options = $(3) ; - - if ! [ IsElem transient : $(options) ] - { - local tag = "INCDIRS" ; - if [ IsElem literal : $(options) ] { tag = "INCDIRS_LITERAL" ; } - - if $(dir) - { - dir = [ ConcatDirs $(dir) ] ; - } - else - { - dir = "." ; - } - - if $(target) - { - MSVC.$(tag).$(target) += $(dir) ; - } - else - { - MSVC.$(tag) += $(dir) ; - } - } -} - -# Normal invocations of these two rules are made using Unix-style flags; -# possibly determined by an Autoconf configuration script. Such flags are -# unsuitable for MSVC, so we ignore them. -rule CFlags { } -rule LFlags { } - -rule Win32Resource -{ - Depends $(<) : $($(<)_RCNAME) ; - Depends $($(<)_RCNAME) : $(>) ; - MergeResources $($(<)_RCNAME) : $(>) ; -} - -#---------------------------------------------------------------------------- - -actions MsvcBuildFile -{ - cat > $(<) <) > $(<) -} - -actions GenerateIconRc -{ - sedexpr=`echo 's^$(MSVCGEN_STRIP_ROOT)^^;' | $(MSVCGEN_SED_PROTECT)` - icon=`echo "$(>)" | sed "$sedexpr"` - echo "1 ICON \"$(RELPATH)$icon\"" > $(<) -} - -#---------------------------------------------------------------------------- - -rule MsvcTTreeRc -{ - local target = $(<:G=ttreerc$(MSVC_VERSION)) ; - local builddir = [ msvcgen_build_dir $(MSVC_VERSION) ] ; - local workdir = [ msvcgen_work_dir $(MSVC_VERSION) ] ; - - WORKDIR on $(target) = $(workdir) ; - BUILDDIR on $(target) = $(builddir) ; - - MakeLocate $(target) : $(workdir) ; - MsvcTTreeRc1 $(target) ; - Always $(target) ; - Depends msvcgenrun : $(target) ; - MsvcRmTemps msvcgen : $(target) ; - - return $(target) ; -} - -actions MsvcTTreeRc1 -{ - cat > $(<) <) $(MSVCGEN_TTREEOPTIONS) --load_perl --all - $(PERL) -pi.bak \ - -e 'if ($ARGV ne $prev) { $prev = $ARGV; binmode(ARGVOUT) }' \ - -e 's:(?) $(MSVCGEN_TTREEOPTIONS) --load_perl --all - } -} - -MsvcTTree msvcgenrun : [ MsvcTTreeRc ttree.rc ] ; - -NotFile msvcgen ; -Always msvcgen ; -Depends msvcgen : msvcgenrun ; -} +#============================================================================== +# Rules for creating MSVC project files. +# Copyright (C) 2004 by Eric Sunshine +# +# 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. +# +#============================================================================== +# +# During a project file synthesis run, the property name 'projgen' in the +# container 'build' will be given a value describing which type of project +# files are being generated. For MSVC project files, the value of the 'projgen' +# property will be "msvc". When project file synthesis supports multiple tool +# versions, the 'projgen_version' property will have a value indicating the +# version of the tool for which project files are being created. For instance, +# when generating MSVC7 project files, 'projgen' will be set to "msvc" and +# 'projgen_version' will have the value "7". +# +# Jamfiles throughout the project, if they need to alter their behavior (for +# one reason or another), can invoke the Property rule to determine whether +# project files are being synthesized. For example, to learn if project file +# synthesis is active: +# +# if [ Property build : projgen ] { ... do something ... } +# +# To take action if only a particular type of project file is being generated +# (i.e. "msvc"): +# +# if [ Property build : projgen ] = msvc { ... do something ... } +# +#============================================================================== + +MSVCGEN_SUPPORTED_VERSIONS = 6 7 71 8 ; +MSVCGEN_BUILD_ROOT ?= [ ConcatDirs $(BUILDTOP) out ] ; +MSVCGEN_BUILD_TEMP ?= [ ConcatDirs $(MSVCGEN_BUILD_ROOT) msvcgen ] ; + +#------------------------------------------------------------------------------ +# Public rule stubs. May be implemented by msvcgen phase 1 or phase 2 or both. + +## MsvcGenConfig variable [ : value ] +## Specify additional configuration information to augment the msvcgen +## environment. The Jam variable named by 'variable' is set to 'value' for +## the msvcgen run. If 'value' is omitted, then 'variable' is cleared. +## Invocations of MsvcGenConfig are cumulative, so variable/value tuples can +## be provided incrementally. It is legal to use this rule in conjunction +## with MsvcGenConfigFile; they are not mutually exclusive. +## +## The most common reason to invoke this rule is to provide MSVC-specific +## fallback values for the library checks typically performed by an Autoconf +## configure script, which the Jamfiles reference via the ExternalLibs rule. +## Such fallbacks consist of variables named TAG.CFLAGS, TAG.LFLAGS, and +## TAG.LIBS, where TAG represents the library's identifier exported by the +## configure script. Because project generation allows for finer-grained +## control, you can also optionally set the variables TAG.DEFINES, +## TAG.INCDIRS, and TAG.LIBDIRS. TAG.DEFINES is a set of tokens of the form +## "key" or "key=value". For instance, to provide MSVC-specific fallback +## values for the FreeType2 library, which the configure script might +## identify as FT2, you can define variables named FT2.CFLAGS, FT2.LFLAGS, +## FT2.LIBS, FT2.DEFINES, FT2.INCDIRS, and FT2.LIBDIRS. The msvcgen process +## will consult these variables when it encounters invocations of the +## ExternalLibs rule, and apply the overrides to the generated project files. +## If yours is a multi-platform project which conditionally defines +## Application, Plugin, and Library targets based upon the platform, then you +## should also define whatever additional variables or properties are needed +## to ensure that your project's Jamfiles invoke the Application, Plugin, and +## Library rules for modules suitable for Windows, and that they do not +## invoke those rules for modules specific to other platforms. +rule MsvcGenConfig { MsvcGenConfig1 $(1) : $(2) ; } +rule MsvcGenConfig1 { } + +## MsvcGenConfigFile file +## Similar to MsvcGenConfig, except that the configuration is provided via a +## file containing Jam statements. In the common case, the file will contain +## a series of simple Jam variable assignment statements. May be invoked +## multiple times to specify additional configuration files. It is legal to +## use this rule in conjunction with MsvcGenConfig; they are not mutually +## exclusive. +rule MsvcGenConfigFile { MsvcGenConfigFile1 $(1) : $(2) ; } +rule MsvcGenConfigFile1 { } + +## MsvcGenVariable variable [ : value ] +## Define a variable for direct interpolation into msvcgen template files. +## 'variable' is the name of the variable to define. 'value' is the value +## which should be assigned to 'variable'. If 'value' is omitted, then +## 'variable' is defined as the null (empty) string. You may invoke this +## rule multiple times to define any number of interpolation variables. You +## may also invoke it multiple times for the same variable name to give the +## variable multiple values. In the template file, reference the variable as +## `[% variable.0 %]' to retrieve the first element, `[% variable.1 %]' to +## retrieve the second, and so on. Even if you have only invoked this rule +## once for a variable, you must still reference it in the template as +## `[% variable.0 %]'. If the variable has multiple values, then it is common +## to reference it in the template via a FOREACH loop, as in +## `[% FOREACH v IN variable %]'. +rule MsvcGenVariable { MsvcGenVariable1 $(1) : $(2) ; } +rule MsvcGenVariable1 { } + +## MsvcGenWorkspace name [ : accepts [ : rejects ]] +## Specify the name of a workspace which the 'msvcgen' target should create. +## The generated workspace file name will be prefixed by "wks". By default, +## a workspace contains all projects resulting from invocations of the +## Application, Plugin, Library, and CompileGroups rules. It is possible to +## restrict the projects placed into the workspace by providing the optional +## 'accepts' and/or 'rejects'. These are lists of Perl regular expressions +## matched against the project names. (Project names are composed of "app", +## "plg", "lib", and "grp" prepended to the target name given to the +## Application, Plugin, Library, and CompileGroups rules, respectively.) +## Reject patterns take precedence over accept patterns. This rule must be +## invoked before any invocations of Application, Plugin, Library, or +## CompileGroups. You may invoke this rule multiple times to produce +## multiple workspaces, but you must invoke it at least once in order for the +## 'msvcgen' target to produce any output. +rule MsvcGenWorkspace { MsvcGenWorkspace1 $(1) : $(2) : $(3) ; } +rule MsvcGenWorkspace1 { } + +## MsvcGenSubDir dircomponents [ : version ] +## Invoke this rule with the location of the project file directory as a +## whitepace-delimited set of tokens, much as you would the SubDir rule. +## This information is used in two ways. (1) The directory structure for the +## generated files will be duplicated under $(MSVCGEN_BUILD_ROOT). For +## instance, if your project files are at "$(TOP)/proj/msvc", then the +## generated files will be deposited at "$(MSVCGEN_BUILD_ROOT)/proj/msvc". +## (2) The depth of the directory indicated by 'dircomponents' will be taken +## into account when generating references to resources in your project tree. +## For example, if your project files reside at "$(TOP)/proj/msvc", and you +## have set "$(TOP)/resources/game.ico" as the application icon with the +## ApplicationIconDefault or ApplicationIcon rule, then msvcgen will know +## that game.ico can be found relative to the project file directory via the +## path "../../resources/game.ico". If 'version' is specified, then +## 'dircomponents' applies to generated files for that version of MSVC only. +## If 'version' is not specified, then the path will be composed of +## 'dircomponents' and the version number. For instance, if 'dircomponents' +## is "$(TOP)/proj/msvc" and 'version' was not provided, then it will be +## assumed that MSVC7 project files should reside at $(TOP)/proj/msvc7". You +## must invoke this rule at least once to ensure that 'msvcgen' targets are +## made available for user invocation. +rule MsvcGenSubDir { msvcgen_path_version MsvcGenSubDir1 : $(1) : $(2) ; } +rule MsvcGenSubDir1 { } + +## MsvcGenTemplateDir dircomponents +## Invoke this rule with the location of the msvcgen template directory as a +## whitepace-delimited set of tokens. +rule MsvcGenTemplateDir { MsvcGenTemplateDir1 $(1) ; } +rule MsvcGenTemplateDir1 { } + +## MsvcExternalLibrary target [ : libs [ : mode ]] +## Invoke this rule to link 'target' with one or more MSVC-specific external +## libraries. For example, 'libs' might be "wsock32.lib". 'mode' should be +## "release" or "debug". If 'mode' is omitted, then 'libs' is used for +## release and debug. +rule MsvcExternalLibrary { MsvcExternalLibrary1 $(1) : $(2) : $(3) ; } +rule MsvcExternalLibrary1 { } + +## MsvcDefine target [ : key [ : value [ : mode ]]] +## Invoke this rule to define an MSVC-specific preprocessor macro 'key' +## having 'value' for 'target'. 'mode' should be "release" or "debug". If +## 'mode' is omitted, then 'key/value' is used for release and debug. +rule MsvcDefine { MsvcDefine1 $(1) : $(2) : $(3) : $(4) ; } +rule MsvcDefine1 { } + +## MsvcIncDirs target : directories [ : mode ] +## Invoke this rule to define an MSVC-specific additional include directories. +## 'mode' should be "release" or "debug". If 'mode' is omitted, then +## 'directories' is used for release and debug. +rule MsvcIncDirs { MsvcIncDirs1 $(1) : $(2) : $(3) ; } +rule MsvcIncDirs1 { } + +## MsvcCFlags target [ : cflags [ : mode ]] +## Invoke this rule to set additional MSVC-specific compiler flags for +## 'target'. 'mode' should be "release" or "debug". If 'mode' is omitted, +## then 'cflags' is used for release and debug. +rule MsvcCFlags { MsvcCFlags1 $(1) : $(2) : $(3) ; } +rule MsvcCFlags1 { } + +## MsvcLFlags target [ : lflags [ : mode ]] +## Invoke this rule to set additional MSVC-specific linker flags for +## 'target'. 'mode' should be "release" or "debug". If 'mode' is omitted, +## then 'lflags' is used for release and debug. +rule MsvcLFlags { MsvcLFlags1 $(1) : $(2) : $(3) ; } +rule MsvcLFlags1 { } + +## MsvcExtraFile target : files +## Use this rule to add extra file resources to the "Resource files" +## filter of the generated project. Commonly, those files are auxiliary +## files not specified in the source file list, e.g. ".inc" files. +rule MsvcExtraFile { MsvcExtraFile1 $(1) : $(2) ; } +rule MsvcExtraFile1 { } + +## MsvcGenName target : name +## Assign an MSVC project name to 'target'. Normally, the project name is +## 'target' with a prefix of "app", "grp", "lib", "plg", or "wks", depending +## upon the target's type. The MsvcGenName rule allows you to override the +## default name. This rule must be invoked prior to the Application, +## Library, Plugin, or MsvcGenWorkspace rule for 'target' in order for 'name' +## to be accepted. As an alternative to invoking this rule, if you wish to +## change the default prefixes used by all targets you can use the MsvcConfig +## rule to set the MSVC.PREFIX.appcon, MSVC.PREFIX.appgui, MSVC.PREFIX.group, +## MSVC.PREFIX.library, MSVC.PREFIX.plugin, and MSVC.PREFIX.workspace +## variables to whatever values you like. +rule MsvcGenName { MsvcGenName1 $(1) : $(2) ; } +rule MsvcGenName1 { } + +#------------------------------------------------------------------------------ +# Private utility rules. Common to all phases. + +## msvcgen_path_version rule : dircomponents [ : version ] +## If 'version' is provided, invoke 'rule' once with 'dircomponents' and +## 'version' as arguments. If 'version' is not provided, invoke 'rule' once +## per supported MSVC version with 'dircomponents' augmented so that +## 'version' is appended to the very last element of 'dircomponents'. For +## example, if 'version' is omitted, and 'dircomponents' is "TOP proj msvc", +## then 'rule' will be invoked as "rule TOP proj msvc6 : 6", then "rule TOP +## proj msvc7 : 7", etc. +rule msvcgen_path_version +{ + local subrule = $(1) ; + local path = $(2) ; + local version = $(3) ; + if $(version) + { + msvcgen_version_check $(version) ; + $(subrule) $(path) : $(version) ; + } + else + { + local v ; + for v in $(MSVCGEN_SUPPORTED_VERSIONS) + { + local p = [ FReverse $(path) ] ; + $(subrule) [ FReverse $(p[1])$(v) $(p[2-]) ] : $(v) ; + } + } +} + +rule msvcgen_resolve_dir +{ return $($(<[1])) $(<[2-]) ; } +rule msvcgen_target_dir +{ return [ ConcatDirs $(MSVCGEN_BUILD_ROOT) $(<[2-]) ] ; } +rule msvcgen_build_dir +{ return [ ConcatDirs $(MSVCGEN_BUILD_TEMP) build$(<) ] ; } +rule msvcgen_work_dir +{ return [ ConcatDirs $(MSVCGEN_BUILD_TEMP) temp$(<) ] ; } +rule msvcgen_template_dir +{ return [ ConcatDirs [ msvcgen_resolve_dir $(<) ] ] ; } +rule msvcgen_version_check +{ + if $(<) != common && ! [ IsElem $(<) : $(MSVCGEN_SUPPORTED_VERSIONS) ] + { + exit "Error: `$(<)' is not a supported msvcgen version number; valid " + "numbers are:" $(MSVCGEN_SUPPORTED_VERSIONS) ; + } +} + +rule MsvcRmTemps +{ + if $(MSVCGEN_KEEPTEMPS) != yes + { + RmTemps $(<) : $(>) ; + } +} + +#------------------------------------------------------------------------------ +# Phase 1 + +if ! $(DO_MSVCGEN) +{ +JAM ?= jam ; +MSVCGEN_JAMOPTIONS ?= ; +MSVCGEN_TTREEOPTIONS ?= ; +MSVCGEN_SILENT ?= no ; +MSVCGEN_VERBOSE ?= no ; +MSVCGEN_KEEPTEMPS ?= no ; +if $(MSVCGEN_SILENT) = yes +{ + MSVCGEN_JAMOPTIONS += -d0 ; +} +else +{ + MSVCGEN_TTREEOPTIONS += "--verbose" ; + if $(MSVCGEN_VERBOSE) = yes + { + if $(JAMVERSION) <= 2.4 + { + MSVCGEN_JAMOPTIONS += -d+2 ; + } + else + { + MSVCGEN_JAMOPTIONS += -d5 ; + } + } +} +if $(MSVCGEN_KEEPTEMPS) = yes +{ + MSVCGEN_JAMOPTIONS += "-sMSVCGEN_KEEPTEMPS=yes" ; +} + +## MsvcGenConfigFile file +## (See documentation above.) +rule MsvcGenConfigFile1 +{ + MSVCGEN_CONFIG_FILES += $(<) ; +} + +## MsvcGenSubDir dircomponents [ : version ] +## (See documentation above.) +rule MsvcGenSubDir1 +{ + local path = $(1) ; + local version = $(2) ; + if ! [ Property msvcgen : pathset$(version) ] + { + SetProperty msvcgen : pathset$(version) ; + MsvcGenTarget $(path) : $(version) ; + } + else + { + Echo "Warning: MsvcGenSubDir already invoked for version $(version)" ; + } +} + +## MsvcGenTarget dircomponents : version +## Create pseudo-targets for building and removing project files for the +## specified version of MSVC. 'dircomponents' is interpreted as described +## for the MsvcGenSubDir rule. Also populates the list MSVCGEN_TARGETS with +## names of the targets. Clients which need to perform some pre-processing +## prior to the actual msvcgen run may set the targets in this list to depend +## upon client-supplied targets. +rule MsvcGenTarget +{ + local path = $(1) ; + local version = $(2) ; + if $(version) = common + { + CleanDir msvccommonclean : [ msvcgen_target_dir $(path) ] ; + Depends msvcclean : msvccommonclean ; + } + else + { + MsvcGenUmbrella ; + Always msvc$(version)gen ; + NotFile msvc$(version)gen ; + MSVC_VERSION on msvc$(version)gen = $(version) ; + MsvcGen msvc$(version)gen ; + Depends msvcgen : msvc$(version)gen ; + Help msvc$(version)gen : "Create MSVC$(version) project files" ; + MSVCGEN_TARGETS += msvc$(version)gen ; + local commonworkdir = [ msvcgen_work_dir common ] ; + CleanDir msvc$(version)clean : + [ msvcgen_target_dir $(path) ] + [ msvcgen_build_dir $(version) ] + [ msvcgen_work_dir $(version) ] + $(commonworkdir) ; + Depends msvcclean : msvc$(version)clean ; + Help msvc$(version)clean : "Remove built MSVC$(version) project files" ; + } +} + +actions MsvcGen bind MSVCGEN_CONFIG_FILES +{ + $(JAM) $(MSVCGEN_JAMOPTIONS) \ + -sDO_MSVCGEN=yes \ + -sMSVC_VERSION=$(MSVC_VERSION) \ + -sMSVCGEN_TTREEOPTIONS='$(MSVCGEN_TTREEOPTIONS)' \ + -sMSVCGEN_CONFIG_FILES='$(MSVCGEN_CONFIG_FILES)' \ + -sTARGET.OS=WIN32 \ + msvcgen +} + +## MsvcGenUmbrella +## Create pseudo-targets for building and removing project files for all +## version of MSVC. +rule MsvcGenUmbrella +{ + if ! [ Property msvcgen : umbrella ] + { + SetProperty msvcgen : umbrella ; + + Always msvcgen ; + NotFile msvcgen ; + Help msvcgen : "Create MSVC project files (all versions)" ; + + Always msvcclean ; + NotFile msvcclean ; + Help msvcclean : "Remove built MSVC project files (all versions)" ; + CleanDir msvcclean : $(MSVCGEN_BUILD_TEMP) ; + Depends clean : msvcclean ; + } +} + +} +else +{ + +#------------------------------------------------------------------------------ +# Phase 2 + +if $(MSVCGEN_CONFIG_FILES) +{ + local f ; + for f in $(MSVCGEN_CONFIG_FILES) + { + include $(f) ; + } +} + +if $(TTREE) +{ + PERL ?= perl ; + RUN_TTREE ?= $(PERL) "\"$(TTREE)\"" ; +} +else +{ + TTREE ?= ttree ; + RUN_TTREE ?= $(TTREE) ; +} + +# Implementation note: The --strip-root directives are order-sensitive when the +# build directory is the same as the source directory, in which case TOP is "." +# and MSVCGEN_BUILD_ROOT is "./out". If TOP incorrectly appeared first, then +# it would invalidate the following --strip-root option since TOP is a prefix +# of MSVCGEN_BUILD_ROOT. +MSVCGEN_STRIP_ROOT = $(MSVCGEN_BUILD_ROOT)/ $(TOP)/ ; + +# When generating the icon file .rc, we compose a 'sed' expression out of +# MSVCGEN_BUILD_ROOT in order to ensure that the referenced icon paths are +# correct. However, we must take care to protect characters in +# MSVCGEN_BUILD_ROOT which have special meaning to 'sed'. For instance, in +# MSVCGEN_BUILD_ROOT, if $(TOP)/ is "./", then we want it to match a literal +# period followed by a slash, not 'any character' followed by a slash, so it +# must be transformed to "\./". (Presently we take the simple-minded approach +# of protecting only "." since it arises frequently.) +MSVCGEN_SED_PROTECT = "$(SED) 's:\\.:\\\\\\.:g'" ; + +MSVC_VERSION ?= 7 ; +if $(MSVC_VERSION) = 6 +{ + SUFPRJ = dsp ; + SUFWSP = dsw ; + MSVC_FORCE_CRLF = yes ; + MSVC_TEMPLATE_SUFFIX = 6 ; +} +else if $(MSVC_VERSION) = 7 || $(MSVC_VERSION) = 71 || $(MSVC_VERSION) = 8 +{ + SUFPRJ = vcproj ; + SUFWSP = sln ; + MSVC_FORCE_CRLF = no ; + MSVC_TEMPLATE_SUFFIX = 7 ; + if $(MSVC_VERSION) = 7 + { + MSVC_FORMATVERSION_PRJ = 7.00 ; + MSVC_FORMATVERSION_WSP = 7.00 ; + } + else if $(MSVC_VERSION) = 71 + { + MSVC_FORMATVERSION_PRJ = 7.10 ; + MSVC_FORMATVERSION_WSP = 8.00 ; + } + else if $(MSVC_VERSION) = 8 + { + MSVC_FORMATVERSION_PRJ = 8.00 ; + MSVC_FORMATVERSION_WSP = 9.00 ; + } +} +else +{ + exit "No msvcgen support for MSVC version $(MSVC_VERSION) yet!" ; +} + +MSVC.TSUFPRJ = tproj ; +MSVC.TSUFWKP = twks ; + +MSVC.DEPEND ?= ; +MSVC.DEPEND_DEBUG ?= ; +MSVC.LIBRARY ?= ; +MSVC.LIBRARY_DEBUG ?= ; +MSVC.LFLAGS ?= ; +MSVC.LFLAGS_DEBUG ?= ; +MSVC.LIBRARY_DELAY ?= ; +MSVC.CFLAGS ?= ; +MSVC.CFLAGS_DEBUG ?= ; +MSVC.DEFINES ?= ; +MSVC.DEFINES_DEBUG ?= ; +MSVC.DEPEND.appgui ?= ; +MSVC.DEPEND_DEBUG.appgui ?= ; +MSVC.LIBRARY.appgui ?= ; +MSVC.LIBRARY_DEBUG.appgui ?= ; +MSVC.LFLAGS.appgui ?= ; +MSVC.LFLAGS_DEBUG.appgui ?= ; +MSVC.CFLAGS.appgui ?= ; +MSVC.CFLAGS_DEBUG.appgui ?= ; +MSVC.DEFINES.appgui ?= ; +MSVC.DEFINES_DEBUG.appgui ?= ; +MSVC.DEPEND.appcon ?= ; +MSVC.DEPEND_DEBUG.appcon ?= ; +MSVC.LIBRARY.appcon ?= ; +MSVC.LIBRARY_DEBUG.appcon ?= ; +MSVC.LFLAGS.appcon ?= ; +MSVC.LFLAGS_DEBUG.appcon ?= ; +MSVC.CFLAGS.appcon ?= ; +MSVC.CFLAGS_DEBUG.appcon ?= ; +MSVC.DEFINES.appcon ?= ; +MSVC.DEFINES_DEBUG.appcon ?= ; +MSVC.DEPEND.plugin ?= ; +MSVC.DEPEND_DEBUG.plugin ?= ; +MSVC.LIBRARY.plugin ?= ; +MSVC.LIBRARY_DEBUG.plugin ?= ; +MSVC.LIBRARY_DELAY.plugin ?= ; +MSVC.LFLAGS.plugin ?= ; +MSVC.LFLAGS_DEBUG.plugin ?= ; +MSVC.CFLAGS.plugin ?= ; +MSVC.CFLAGS_DEBUG.plugin ?= ; +MSVC.DEFINES.plugin ?= ; +MSVC.DEFINES_DEBUG.plugin ?= ; +MSVC.DEPEND.library ?= ; +MSVC.DEPEND_DEBUG.library ?= ; +MSVC.LIBRARY.library ?= ; +MSVC.LIBRARY_DEBUG.library ?= ; +MSVC.LFLAGS.library ?= ; +MSVC.LFLAGS_DEBUG.library ?= ; +MSVC.CFLAGS.library ?= ; +MSVC.CFLAGS_DEBUG.library ?= ; +MSVC.DEFINES.library ?= ; +MSVC.DEFINES_DEBUG.library ?= ; + +MSVC.PREFIX.appgui ?= app ; +MSVC.PREFIX.appcon ?= app ; +MSVC.PREFIX.plugin ?= plg ; +MSVC.PREFIX.library ?= lib ; +MSVC.PREFIX.group ?= grp ; +MSVC.PREFIX.workspace ?= wks ; + +SetProperty build : projgen : msvc ; +SetProperty build : projgen_version : $(MSVC_VERSION) ; + +# MsvcAddPrefix name : type +rule MsvcAddPrefix +{ + local name = $(1) ; + local type = $(2) ; + local prefix = $(MSVC.PREFIX.$(type)) ; + if $(prefix) { name = "$(prefix)$(name)" ; } + return $(name) ; +} + +#---------------------------------------------------------------------------- +# Override some rules + +actions GenerateWin32ManifestRc +{ + cat > $(<) << __EOF__ +// This file is generated automatically. + +#if !defined(PROJECTGEN_VERSION) || (PROJECTGEN_VERSION != 8) +1 24 "$(MANIFEST_NAME)" +#endif +__EOF__ +} + +## MsvcGenConfig variable [ : value ] +## (See documentation above.) +rule MsvcGenConfig1 +{ + $(<) = $(>) ; +} + +## MsvcGenVariable variable [ : value ] +## (See documentation above.) +rule MsvcGenVariable1 +{ + MSVCGEN_VARIABLES += "$(<)|$(>)" ; +} + +## MsvcGenWorkspace name [ : accepts [ : rejects ]] +## (See documentation above.) +rule MsvcGenWorkspace1 +{ + local name = $(1) ; + local accepts = $(2) ; + local rejects = $(3) ; + local builddir = [ msvcgen_build_dir $(MSVC_VERSION) ] ; + local workdir = [ msvcgen_work_dir $(MSVC_VERSION) ] ; + local wksname = $(MSVC.NAME_OVERRIDE.$(name)) ; + if ! $(wksname) { wksname = [ MsvcAddPrefix $(name) : workspace ] ; } + + MSVC.WORKSPACES += $(name) ; + + local respdir = $(workdir) ; + local respfile = $(wksname:G=msvcresp:S=.resp) ; + Always $(respfile) ; + $(name)_WKS_RESPFILE = $(respfile) ; + $(name)_WKS_RESPDIR = $(respdir) ; + + # Boilerplate. + ResponseFile $(respfile) : + "key|value" + "accept|$(accepts)" + "reject|$(rejects)" + "formatversion|$(MSVC_FORMATVERSION_WSP)" + $(MSVCGEN_VARIABLES) + : notfile : $(respdir) ; + MsvcRmTemps msvcgen : $(respfile) ; + + local buildfile = $(wksname:G=msvcworkspace:S=.$(MSVC.TSUFWKP)) ; + Always $(buildfile) ; + MakeLocate $(buildfile) : $(builddir) ; + Includes $(buildfile) : $(respfile) ; + MSVC_BUILD_TYPE on $(buildfile) = workspace ; + MsvcBuildFile $(buildfile) : $(respfile) ; + Depends msvcgenrun : $(buildfile) ; + MsvcRmTemps msvcgen : $(buildfile) ; +} + +## MsvcGenSubDir dircomponents [ : version ] +## (See documentation above.) +rule MsvcGenSubDir1 +{ + local path = $(1) ; + local version = $(2) ; + + local relpath ; + if ! $(path[2]) + { + relpath = $(DOT) ; + } + else + { + local i ; + for i in $(path[2-]) + { + relpath += $(DOTDOT) ; + } + } + + SetProperty msvcgen : outdir$(version) : [ msvcgen_target_dir $(path) ] ; + SetProperty msvcgen : relpath$(version) : $(relpath) ; + + MSVCGEN_OUTDIR_$(version) = [ Property msvcgen : outdir$(version) ] ; +} + +## MsvcGenTemplateDir dircomponents +## (See documentation above.) +rule MsvcGenTemplateDir1 +{ + SetProperty msvcgen : templatedir : [ msvcgen_template_dir $(<) ] ; + + MSVCGEN_TEMPLATEDIR = [ Property msvcgen : templatedir ] ; +} + +## MsvcGenName target : name +## (See documentation above.) +rule MsvcGenName1 +{ + MSVC.NAME_OVERRIDE.$(<) = $(>) ; +} + +## MsvcProject target : type : target-with-ext : sources : options +## Create a project file for 'target', which is the project's raw name. +## 'sources' is a list of files comprising the target. +rule MsvcProject +{ + local rawname = $(1) ; + local type = $(2) ; + local decorated = $(3) ; + local sources = $(4) ; + local options = $(5) ; + local relpath = [ Property msvcgen : relpath$(MSVC_VERSION) ] ; + local relpathcommon = [ Property msvcgen : relpathcommon ] ; + if "$(relpathcommon)" = "" + { + relpathcommon = $(relpath) ; + } + local outdir = [ Property msvcgen : outdir$(MSVC_VERSION) ] ; + local outdircommon = [ Property msvcgen : outdircommon ] ; + if "$(outdircommon)" = "" + { + outdircommon = $(outdir) ; + } + local builddir = [ msvcgen_build_dir $(MSVC_VERSION) ] ; + local workdir = [ msvcgen_work_dir $(MSVC_VERSION) ] ; + local workdircommon = [ msvcgen_work_dir common ] ; + + local msvcname = $(MSVC.NAME_OVERRIDE.$(rawname)) ; + if ! $(msvcname) { msvcname = [ MsvcAddPrefix $(rawname) : $(type) ] ; } + $(rawname)_MSVCNAME = $(msvcname) ; + + local respdir = $(workdir) ; + local respfile = $(msvcname:G=msvcresp:S=.resp) ; + Always $(respfile) ; + $(rawname)_PRJ_RESPFILE = $(respfile) ; + $(rawname)_PRJ_RESPDIR = $(respdir) ; + + # Boilerplate. + ResponseFile $(respfile) : + "key|value" + "formatversion|$(MSVC_FORMATVERSION_PRJ)" + "projtype|$(type)" + "project|$(msvcname)" + "rawtarget|$(rawname)" + "target|$(decorated)" + "sourceroot|$(relpath:J=/)" + "buildroot|$(relpath:J=/)" + "striproot|$(MSVCGEN_STRIP_ROOT)" + "define|$(MSVC.DEFINES)" + "define|$(MSVC.DEFINES.$(type))" + "definedebug|$(MSVC.DEFINES_DEBUG)" + "definedebug|$(MSVC.DEFINES_DEBUG.$(type))" + "cflags|$(MSVC.CFLAGS)" + "cflags|$(MSVC.CFLAGS.$(type))" + "cflagsdebug|$(MSVC.CFLAGS_DEBUG)" + "cflagsdebug|$(MSVC.CFLAGS_DEBUG.$(type))" + "lflags|$(MSVC.LFLAGS)" + "lflags|$(MSVC.LFLAGS.$(type))" + "lflagsdebug|$(MSVC.LFLAGS_DEBUG)" + "lflagsdebug|$(MSVC.LFLAGS_DEBUG.$(type))" + "library|$(MSVC.LIBRARY)" + "library|$(MSVC.LIBRARY.$(type))" + "librarydebug|$(MSVC.LIBRARY_DEBUG)" + "librarydebug|$(MSVC.LIBRARY_DEBUG.$(type))" + "librarydelay|$(MSVC.LIBRARY_DELAY)" + "librarydelay|$(MSVC.LIBRARY_DELAY.$(type))" + "msvcversion|$(MSVC_VERSION)" + "static|$($(rawname)_STATIC)" + $(MSVCGEN_VARIABLES) + : notfile : $(respdir) ; + MsvcRmTemps msvcgen : $(respfile) ; + + # Only include source and headers files for now. In the future, we also + # want to include .cfg files and any other textual resources which which the + # user might care to read/view in the MSVC IDE. + local i ; + for i in $(sources) + { + if [ IsElem $(i:S) : .h .hpp .hxx .H .c .cc .cpp .cxx .C .m .mm .M ] + { + local fileinproj ; + if $($(rawname)_STATIC) = "yes" + { + fileinproj = $(i) ; + } + else + { + fileinproj = $(i:R=$(SEARCH_SOURCE)) ; + } + ResponseFile $(respfile) : "file|$(fileinproj)" : notfile : + $(respdir) ; + } + } + + # Add resource file. + if [ IsElem $(type) : plugin appgui appcon ] + { + local resource = $(msvcname:S=.rc) ; + Depends msvcgen : $(resource) ; + MakeLocate $(resource) : $(outdircommon) ; + SEARCH on $(resource) = $(outdircommon) ; + NAME on $(resource) = $(rawname) ; + $(rawname)_RCNAME = $(resource) ; + ResponseFile $(respfile) : "file|$(resource:R=$(outdircommon))" : notfile : + $(respdir) ; + + local versionrc = $(resource:S=.vrctmp) ; + MakeLocate $(versionrc) : $(workdircommon) ; + MakeVersionRc $(versionrc) : $(rawname) ; + Depends $(versionrc) : $(TOP)/Jamconfig ; + Depends $(versionrc) : $(SUBDIR)/Jamfile ; + Win32Resource $(rawname) : $(versionrc) ; + MsvcRmTemps $(resource) : $(versionrc) ; + + if $(type) = "plugin" + { + local metarc = $(resource:S=.mrctmp) ; + MakeLocate $(metarc) : $(workdircommon) ; + SEARCH on $(metarc) = $(SEARCH_SOURCE) ; + Depends $(metarc) : $($(rawname)_METAFILE) ; + GenerateWin32MetadataRc $(metarc) : $($(rawname)_METAFILE) ; + + Win32Resource $(rawname) : $(metarc) ; + MsvcRmTemps $(resource) : $(metarc) ; + ResponseFile $(respfile) : + "file|$($(rawname)_METAFILE:R=$(SEARCH_SOURCE))" : notfile : + $(respdir) ; + } + + if [ IsElem $(type) : appgui appcon ] + { + if ! [ IsElem nomanifest : $(options) ] + { + local manifest = $(msvcname:S=.manifest) ; + MakeLocate $(manifest) : $(outdircommon) ; + MakeManifestFile $(manifest) : $(rawname) ; + Depends $(manifest) : $(TOP)/Jamconfig ; + Depends $(manifest) : $(SUBDIR)/Jamfile ; + Depends msvcgen : $(manifest) ; + + local manifestrc = $(resource:S=.mfrctmp) ; + MakeLocate $(manifestrc) : $(workdircommon) ; + MANIFEST_NAME on $(manifestrc) = $(manifest) ; + GenerateWin32ManifestRc $(manifestrc) ; + Depends $(manifestrc) : $(manifest) ; + if $(MSVC_VERSION) = 8 + { + # VC8: Manifest appears in project along other files, a special build + # tool cares about the embedding into a resource. (The resource goop + # still has to be generated since it is shared with other VCs.) + ResponseFile $(respfile) : "file|$(manifest:R=$(outdircommon))" : notfile : + $(respdir) ; + } + + Win32Resource $(rawname) : $(manifestrc) ; + MsvcRmTemps $(resource) : $(manifestrc) ; + } + + local icon = [ ApplicationIcon win32 : $(rawname) ] ; + if ! $(icon) + { + local apptype = gui ; + if $(type) = "appcon" { apptype = console ; } + icon = [ ApplicationIconDefault win32 : $(apptype) ] ; + } + if $(icon) + { + local iconrc = $(resource:S=.iconrctmp) ; + # RELPATH includes trailing slash (hence the "" in ConcatDirs). + RELPATH on $(iconrc) = [ ConcatDirs $(relpathcommon) "" ] ; + MakeLocate $(iconrc) : $(workdircommon) ; + Depends $(iconrc) : $(icon) ; + Depends $(iconrc) : $(SUBDIR)/Jamfile ; + GenerateIconRc $(iconrc) : $(icon) ; + Win32Resource $(rawname) : $(iconrc) ; + MsvcRmTemps $(resource) : $(iconrc) ; + } + } + } + + local inckeys = "include" includedebug ; + local incdirs = $(MSVC.INCDIRS_LITERAL) $(MSVC.INCDIRS_LITERAL.$(rawname)) ; + ResponseFile $(respfile) : "$(inckeys)|$(incdirs)" : notfile : $(respdir) ; + + local incdir ; + for incdir in $(MSVC.INCDIRS) $(MSVC.INCDIRS.$(rawname)) + { + if $(incdir) = "." + { + incdir = [ ConcatDirs $(relpath) ] ; + } + else + { + incdir = [ ConcatDirs $(relpath) $(incdir) ] ; + } + ResponseFile $(respfile) : "$(inckeys)|$(incdir)" : notfile : $(respdir) ; + } + + if ! [ Property msvcgen : templatedir ] + { + exit "Error: You must invoke MsvcGenTemplateDir for project generation." ; + } + + local buildfile = $(msvcname:G=msvcproject:S=.$(MSVC.TSUFPRJ)) ; + Always $(buildfile) ; + MakeLocate $(buildfile) : $(builddir) ; + Includes $(buildfile) : $(respfile) ; + MSVC_BUILD_TYPE on $(buildfile) = project ; + MsvcBuildFile $(buildfile) : $(respfile) ; + Depends msvcgenrun : $(buildfile) ; + MsvcRmTemps msvcgen : $(buildfile) ; + + if ! $(MSVC.WORKSPACES) + { + exit "You must specify at least one workspace via MsvcGenWorkspace" ; + } + + local w ; + for w in $(MSVC.WORKSPACES) + { + ResponseFile $($(w)_WKS_RESPFILE) : "project|$(msvcname)" : notfile : + $($(w)_WKS_RESPDIR) ; + } + + Clean msvcclean : $(target) ; +} + +#---------------------------------------------------------------------------- + +# Ensure that the pseudo-groups exist with which the overridden Application, +# Plugin, and Library rules will register their targets. We have to do this +# here rather than at the top-level (outside of any rule invocation) because we +# need to give the client time to invoke MsvcGenWorkspace first to set up the +# workspaces into which these groups will be inserted. If we tried registering +# theses pseudo-groups at the top-level, registration would occur before the +# client has had a chance to invoke MsvcGenWorkspace, thus these pseudo-groups +# would not inhabit any workspaces. +rule RegisterWellKnownCompileGroup1 +{ + local group = $(1) ; + if $(MSVCGEN.WELL_KNOWN_GROUP_REGISTERED.$(group)) != yes + { + MSVCGEN.WELL_KNOWN_GROUP_REGISTERED.$(group) = yes ; + RegisterCompileGroups $(group) ; + } +} + +rule RegisterWellKnownCompileGroup +{ + RegisterWellKnownCompileGroup1 all ; + RegisterWellKnownCompileGroup1 $(1) ; +} + +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.debug lflags.release p mode ; + # Collect optional plugins + for p in $(optplugins) + { + if [ IsElem $(p) : $(STATICPLUGINS.AVAILABLE) ] + { + plugins += $(p) ; + } + } + # Grab flags + for p in $(plugins) + { + NotFile $(p) ; + for mode in debug release + { + MsvcCFlags $(target) : $(STATICPLUGIN.$(p).CFLAGS.$(mode)) : $(mode) ; + lflags.$(mode) += $(STATICPLUGIN.$(p).LFLAGS.$(mode)) ; + } + } + for mode in debug release + { + MsvcLFlags $(target) : + [ Reverse [ RemoveDups [ Reverse $(lflags.$(mode)) ] ] ] : $(mode) ; + } + } + else + { + # link with static plugins + LinkWith $(target) : $(STATICPLUGINS.LIBRARY) ; + + # Local static plugins + local libs p ; + # Collect optional plugins + for p in $(optplugins) + { + if $($(p)_TYPE) + { + plugins += $(p) ; + } + } + # Grab flags + for p in $(plugins) + { + libs += $($(p).NEEDLIBS) ; + + ExternalLibs $(target) : $($(p).EXTERNALLIBS) ; + for mode in debug release + { + MsvcExternalLibrary $(target) : $($(p)_$(mode)_EXTERNALLIBS) : $(mode) ; + MsvcExternalLibrary $(target) : $($(p)_$(mode)_EXTERNALLIBS) : $(mode) ; + } + } + LinkWith $(target) : $(libs) ; + } + + # Generate static plugin instantiation + local outdir = [ Property msvcgen : outdircommon ] ; + if "$(outdir)" = "" + { + outdir = [ Property msvcgen : outdir$(MSVC_VERSION) ] ; + } + local staticuse_out ; + if $(package) + { + # @@@ Prefix hardcoded + staticuse_out = $(MSVC.PREFIX.appgui)$(<)_staticuse_$(package).cpp ; + } + else + { + staticuse_out = + $(MSVC.PREFIX.appgui)$(<)_staticuse.cpp ; # @@@ Prefix hardcoded + } + MakeLocate $(staticuse_out) : $(outdir) ; + SEARCH on $(staticuse_out) = $(outdir) ; + + GenerateStaticPluginInstantiation $(staticuse_out) : $(plugins) ; + Depends msvcgen : $(staticuse_out) ; + + # Add usefile to project + ResponseFile $($(target)_PRJ_RESPFILE) : + "file|$(staticuse_out:R=$(outdir))" : notfile : + $($(target)_PRJ_RESPDIR) ; + Depends $(target) : $(staticuse_out) ; +} + +rule Application +{ + RegisterWellKnownCompileGroup apps ; + + local projtype ; + if [ IsElem console : $(3) ] + { + projtype = appcon ; + } + else + { + projtype = appgui ; + } + MsvcProject $(<) : $(projtype) : $(<:S=.exe) : $(>) : $(3) ; + + CompileGroups $(<) : all apps ; +} + +rule Plugin +{ + RegisterWellKnownCompileGroup plugins ; + + $(<)_TYPE = plugin ; + + local metafile ; + metafile = [ FAppendSuffix $(<) : $(SUFMETA) ] ; + SEARCH on $(metafile) = $(SEARCH_SOURCE) ; + $(<)_METAFILE = $(metafile) ; + MsvcProject $(<) : plugin : $(<:S=$(MSVCGEN.PLUGIN_EXT.$(<):E=.dll)) : $(>) ; + CompileGroups $(<) : all plugins ; + + STATICPLUGINS.SOURCES.$(<) += $(>:R=$(SEARCH_SOURCE)) ; + STATICPLUGINS.SUBTARGETS += $(<) ; + + # Generate static variant of plugin + # Static registry + local outdir = [ Property msvcgen : outdircommon ] ; + local staticreg_out = $(MSVC.PREFIX.library)$(<)_staticreg.cpp ; + MakeLocate $(staticreg_out) : $(outdir) ; + SEARCH on $(staticreg_out) = $(outdir) ; + GenerateStaticPluginRegistration $(staticreg_out) : $(metafile) ; + Depends msvcgen : $(staticreg_out) ; + STATICPLUGINS.SOURCES.$(<) += $(outdir)/$(staticreg_out) ; +} + +rule Library +{ + RegisterWellKnownCompileGroup libs ; + $(<)_TYPE = library ; + MsvcProject $(<) : library : $(<:S=.lib) : $(>) ; + CompileGroups $(<) : all libs ; +} + +rule StaticPluginLibrary +{ + local name = $(<) ; + local rejects = $(>) ; + local t ; + + local targets = $(STATICPLUGINS.SUBTARGETS) ; + if $(rejects) + { + targets = [ Filter $(targets) : $(rejects) ] ; + } + local sources extlibs ; + for t in $(targets) + { + sources += $(STATICPLUGINS.SOURCES.$(t)) ; + extlibs += $($(t).EXTERNALLIBS) ; + } + + $(name)_STATIC = "yes" ; + # Set up library + Library $(name) : $(sources) ; + MsvcDefine $(name) : CS_STATIC_LINKED ; + _MsvcDefine $(name) : $(STATICPLUGINS.MSVC_DEFINES) ; + ExternalLibs $(name) : [ RemoveDups $(extlibs) ] ; + + # Write out needed CFLAGS, LFLAGS + local outdir = [ Property msvcgen : outdircommon ] ; + if $(outdir) = "" + { + outdir = [ Property msvcgen : outdir$(MSVC_VERSION) ] ; + } + STATICPLUGINS.DEPENDENCIES = $(name)_msvc.jam ; + MakeLocate $(STATICPLUGINS.DEPENDENCIES) : $(outdir) ; + SEARCH on $(STATICPLUGINS.DEPENDENCIES) = $(outdir) ; + for t in $(targets) + { + NotFile $(t) ; + WriteDependencies $(STATICPLUGINS.DEPENDENCIES) : $(t) : $(name) ; + } + Always $(STATICPLUGINS.DEPENDENCIES) ; + Depends msvcgen : $(STATICPLUGINS.DEPENDENCIES) ; + + STATICPLUGINS.LIBRARY = $(name) ; +} + +# Write out CFLAGS, LFLAGS needed by a plugin +rule WriteDependencies +{ + local cflags.debug cflags.release ; + local lflags.debug lflags.release ; + local depfile = $(<) ; + local plugin = $(>) ; + local libname = $(3) ; + local depfile_gristed = $(depfile:G=$(plugin)) ; + MakeLocate $(depfile_gristed) : [ on $(depfile) GetVar LOCATE ] ; + + # "Artificially" insert static library itself + lflags.debug += $(MSVC.PREFIX.library)$(libname)_d.lib ; + lflags.release += $(MSVC.PREFIX.library)$(libname).lib ; + # Collect other libs + local libs = [ ResolveLibs $($(plugin).NEEDLIBS) ] ; + lflags.debug += $(MSVC.PREFIX.library)$(libs)_d.lib ; + lflags.release += $(MSVC.PREFIX.library)$(libs).lib ; + + # Defines + local l ; + for l in $($(plugin).EXTERNALLIBS) + { + if $($(l).DEFINES.DEBUG) + { + cflags.debug += "\"/D $($(l).DEFINES.DEBUG)\"" ; + cflags.release += "\"/D $($(l).DEFINES)\"" ; + } + else + { + cflags.debug += "\"/D $($(l).DEFINES)\"" ; + cflags.release += "\"/D $($(l).DEFINES)\"" ; + } + } + # Link flags + local mode ; + for mode in debug release + { + lflags.$(mode) += $($(plugin).LFLAGS.$(mode)) ; + lflags.$(mode) += $($(plugin)_$(mode)_EXTERNALLIBS) ; + } + CFLAGS.DEBUG on $(depfile_gristed) = "$(cflags.debug)" ; + CFLAGS.RELEASE on $(depfile_gristed) = "$(cflags.release)" ; + lflags.debug = [ RemoveDups $(lflags.debug) ] ; + LFLAGS.DEBUG on $(depfile_gristed) = "$(lflags.debug)" ; + lflags.release = [ RemoveDups $(lflags.release) ] ; + LFLAGS.RELEASE on $(depfile_gristed) = "$(lflags.release)" ; + LIBNAME on $(depfile_gristed) = $(libname) ; + + if $($(depfile).FIRSTTIME) != "yes" + { + WriteDepFlags1 $(depfile_gristed) : $(plugin) ; + $(depfile).FIRSTTIME = "yes" ; + } + else + { + WriteDepFlags2 $(depfile_gristed) : $(plugin) ; + } + Depends $(depfile) : $(depfile_gristed) ; + Always $(depfile_gristed) ; +} + +actions WriteDepFlags1 +{ + cat << EOT > $(<) +# This file is automatically generated to be used together with $(LIBNAME) +# and must be integrated by setting the correct values for the +# HAVE_STATICDEPS. and .STATICDEPS via MsvcGenConfig. +# Furthermore, this file might require manual updates from the master copy +# (usually found in the package's source repository) every now and then. +STATICPLUGINS.AVAILABLE += $(>) ; +STATICPLUGIN.$(>).CFLAGS.debug = $(CFLAGS.DEBUG) ; +STATICPLUGIN.$(>).CFLAGS.release = $(CFLAGS.RELEASE) ; +STATICPLUGIN.$(>).LFLAGS.debug = $(LFLAGS.DEBUG) ; +STATICPLUGIN.$(>).LFLAGS.release = $(LFLAGS.RELEASE) ; +EOT +} + +actions WriteDepFlags2 +{ + cat << EOT >> $(<) +STATICPLUGINS.AVAILABLE += $(>) ; +STATICPLUGIN.$(>).CFLAGS.debug = $(CFLAGS.DEBUG) ; +STATICPLUGIN.$(>).CFLAGS.release = $(CFLAGS.RELEASE) ; +STATICPLUGIN.$(>).LFLAGS.debug = $(LFLAGS.DEBUG) ; +STATICPLUGIN.$(>).LFLAGS.release = $(LFLAGS.RELEASE) ; +EOT +} + +rule RegisterCompileGroups +{ + local i ; + for i in $(<)_$(MSVC.WORKSPACES) + { + MsvcProject $(i) : group ; + } +} + +rule CompileGroups +{ + local w ; + for w in $(MSVC.WORKSPACES) + { + local i ; + for i in $(>)_$(w) + { + local m = $($(<)_MSVCNAME) ; + if ! $(m) { m = $($(<)_$(w)_MSVCNAME) ; } # Might be a "group". + if $(m) + { + ResponseFile $($(w)_WKS_RESPFILE) : "$($(i)_MSVCNAME)|$(m)" : + notfile : $($(w)_WKS_RESPDIR) ; + } + } + } +} + +rule LinkWith +{ + local libs = [ ResolveLibs $(>) ] ; + ExternalLibs $(<) : $($(>).EXTERNALLIBS) ; + local w ; + for w in $(MSVC.WORKSPACES) + { + local l ; + for l in $(libs)_MSVCNAME + { + if $($(l)) + { + ResponseFile $($(w)_WKS_RESPFILE) : "$($(<)_MSVCNAME)|$($(l))" : + notfile : $($(w)_WKS_RESPDIR) ; + } + } + } + $(<).NEEDLIBS = $(libs) ; +} + +rule MsvcClassifyMode +{ + local c ; + switch $(<) + { + case release : c = "" ; + case debug : c = debug ; + case * : c = "" debug ; + } + return $(c) ; +} + +# _MsvcRespEmit target : items : tag [ : mode [ : options ]] +# Emit `items' to the response file for `target' using the response file tag +# `tag'. `mode' is either "release", "debug", or empty, in which case it +# applies to release and debug modes. If options contains "ignoremode", then +# `mode' is not consulted. +rule _MsvcRespEmit +{ + local target = $(1) ; + local items = $(2) ; + local tag = $(3) ; + local mode = $(4) ; + local options = $(5) ; + local modes = "" ; + + CheckOptions ignoremode : $(options) : $(target) ; + if ! [ IsElem ignoremode ] { modes = [ MsvcClassifyMode $(mode) ] ; } + + ResponseFile $($(target)_PRJ_RESPFILE) : "$(tag)$(modes)|$(items)" : + notfile : $($(target)_PRJ_RESPDIR) ; +} + +# MsvcExternalLibrary target [ : libs [ : mode ]] +# (See documentation above.) +rule MsvcExternalLibrary1 +{ + _MsvcRespEmit $(1) : $(2) : library : $(3) ; + local mode = $(3) ; + mode ?= debug release ; + $(1)_$(mode)_EXTERNALLIBS += $(2) ; +} + +# MsvcDefine target [ : key [ : value [ : mode ]]] +# (See documentation above.) +rule MsvcDefine1 +{ + local target = $(1) ; + local key = $(2) ; + local value = $(3) ; + local mode = $(4) ; + if $(key) + { + local def ; + if $(value) + { + def = "$(key)=$(value)" ; + } + else + { + def = $(key) ; + } + _MsvcRespEmit $(target) : $(def) : define : $(mode) ; + STATICPLUGINS.MSVC_DEFINES += $(def) ; + } +} + +# MsvcIncDirs target : directory [ : mode ] +# (See documentation above.) +rule MsvcIncDirs1 +{ + _MsvcIncDirs $(1) : $(2) : $(3) ; +} + +# _MsvcDefine target : tuples [ : mode ] +# Similar to MsvcDefine, but works with a list of `key=value' tuples. Also +# understands `key' with no value. +rule _MsvcDefine +{ + _MsvcRespEmit $(1) : $(2) : define : $(3) ; +} + +# MsvcCFLags target [ : cflags [ : mode ]] +# (See documentation above.) +rule MsvcCFlags1 +{ + _MsvcRespEmit $(1) : $(2) : cflags : $(3) ; +} + +# MsvcLFlags target [ : lflags [ : mode ]] +# (See documentation above.) +rule MsvcLFlags1 +{ + local modes = [ MsvcClassifyMode $(3) ] ; + $(target).LFLAGS.$(modes) += $(2) ; + _MsvcRespEmit $(1) : $(2) : lflags : $(3) ; +} + +# MsvcLFlags target : files +# (See documentation above.) +rule MsvcExtraFile1 +{ + local rawname = $(1) ; + local files = $(2) ; + + local respfile = $($(rawname)_PRJ_RESPFILE) ; + local respdir = $($(rawname)_PRJ_RESPDIR) ; + + ResponseFile $(respfile) : "file|$(files)" : notfile : + $(respdir) ; +} + +# _MsvcIncDirs target : incdirs [ : mode ] +# Helper for ExternalLibs which processes the contents of TAG.INCDIRS for +# an external library. +rule _MsvcIncDirs +{ + _MsvcRespEmit $(1) : $(2) : include : $(3) ; +} + +# _MsvcLibDirs target : libdirs [ : mode ] +# Helper for ExternalLibs which processes the contents of TAG.LIBDIRS for +# an external library. +rule _MsvcLibDirs +{ + _MsvcRespEmit $(1) : $(2) : libdir : $(3) ; +} + +# _ExternalLibsHelperMsvc target : libtag : subrule : attribute +rule _ExternalLibsHelperMsvc +{ + local target = $(1) ; + local lib = $(2) ; + local rulename = $(3) ; + local attrib = $(4) ; + + if $($(lib).$(attrib).DEBUG.$(MSVC_VERSION)) + { + $(rulename) $(target) : $($(lib).$(attrib).DEBUG.$(MSVC_VERSION)) : debug ; + } + else if $($(lib).$(attrib).DEBUG) + { + $(rulename) $(target) : $($(lib).$(attrib).DEBUG) : debug ; + } + else + { + $(rulename) $(target) : $($(lib).$(attrib)) : debug ; + } + if $($(lib).$(attrib).$(MSVC_VERSION)) + { + $(rulename) $(target) : $($(lib).$(attrib).$(MSVC_VERSION)) : release ; + } + else + { + $(rulename) $(target) : $($(lib).$(attrib)) : release ; + } +} + +rule ExternalLibs +{ + local i ; + for i in $(>) + { + _ExternalLibsHelperMsvc $(<) : $(i) : MsvcCFlags : CFLAGS ; + _ExternalLibsHelperMsvc $(<) : $(i) : MsvcLFlags : LFLAGS ; + _ExternalLibsHelperMsvc $(<) : $(i) : MsvcExternalLibrary : LIBS ; + _ExternalLibsHelperMsvc $(<) : $(i) : _MsvcDefine : DEFINES ; + _ExternalLibsHelperMsvc $(<) : $(i) : _MsvcIncDirs : INCDIRS ; + _ExternalLibsHelperMsvc $(<) : $(i) : _MsvcLibDirs : LIBDIRS ; + + $(<).EXTERNALLIBS += $(i) ; + } +} + +rule IncludeDir +{ + local dir = $(1) ; + local target = $(2) ; + local options = $(3) ; + + if ! [ IsElem transient : $(options) ] + { + local tag = "INCDIRS" ; + if [ IsElem literal : $(options) ] { tag = "INCDIRS_LITERAL" ; } + + if $(dir) + { + dir = [ ConcatDirs $(dir) ] ; + } + else + { + dir = "." ; + } + + if $(target) + { + MSVC.$(tag).$(target) += $(dir) ; + } + else + { + MSVC.$(tag) += $(dir) ; + } + } +} + +# Normal invocations of these two rules are made using Unix-style flags; +# possibly determined by an Autoconf configuration script. Such flags are +# unsuitable for MSVC, so we ignore them. +rule CFlags { } +rule LFlags { } + +rule Win32Resource +{ + Depends $(<) : $($(<)_RCNAME) ; + Depends $($(<)_RCNAME) : $(>) ; + MergeResources $($(<)_RCNAME) : $(>) ; +} + +#---------------------------------------------------------------------------- + +actions MsvcBuildFile +{ + cat > $(<) <) > $(<) +} + +actions GenerateIconRc +{ + sedexpr=`echo 's^$(MSVCGEN_STRIP_ROOT)^^;' | $(MSVCGEN_SED_PROTECT)` + icon=`echo "$(>)" | sed "$sedexpr"` + echo "1 ICON \"$(RELPATH)$icon\"" > $(<) +} + +#---------------------------------------------------------------------------- + +rule MsvcTTreeRc +{ + local target = $(<:G=ttreerc$(MSVC_VERSION)) ; + local builddir = [ msvcgen_build_dir $(MSVC_VERSION) ] ; + local workdir = [ msvcgen_work_dir $(MSVC_VERSION) ] ; + + WORKDIR on $(target) = $(workdir) ; + BUILDDIR on $(target) = $(builddir) ; + + MakeLocate $(target) : $(workdir) ; + MsvcTTreeRc1 $(target) ; + Always $(target) ; + Depends msvcgenrun : $(target) ; + MsvcRmTemps msvcgen : $(target) ; + + return $(target) ; +} + +actions MsvcTTreeRc1 +{ + cat > $(<) <) $(MSVCGEN_TTREEOPTIONS) --load_perl --all + $(PERL) -pi.bak \ + -e 'if ($ARGV ne $prev) { $prev = $ARGV; binmode(ARGVOUT) }' \ + -e 's:(?) $(MSVCGEN_TTREEOPTIONS) --load_perl --all + } +} + +MsvcTTree msvcgenrun : [ MsvcTTreeRc ttree.rc ] ; + +NotFile msvcgen ; +Always msvcgen ; +Depends msvcgen : msvcgenrun ; +} diff --git a/mk/jam/objectivec.jam b/mk/jam/objectivec.jam index 0f5b0bf23..3a9e990c4 100644 --- a/mk/jam/objectivec.jam +++ b/mk/jam/objectivec.jam @@ -1,80 +1,80 @@ -#============================================================================ -# Rules for compiling Objective-C and Objective-C++ files -# Copyright (C)2003 by Matze Braun -# -# 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 +# +# 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) $(>) +} +} diff --git a/mk/jam/objects.jam b/mk/jam/objects.jam index 4b7fd9819..7fda0bdeb 100644 --- a/mk/jam/objects.jam +++ b/mk/jam/objects.jam @@ -1,250 +1,250 @@ -#============================================================================ -# Rules for compiling a set of sources to object files -# Copyright (C)2003 by Matze Braun -# -# 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 +# +# 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) ; +} diff --git a/mk/jam/options.jam b/mk/jam/options.jam index fbe092411..3316217d7 100644 --- a/mk/jam/options.jam +++ b/mk/jam/options.jam @@ -1,38 +1,38 @@ -#============================================================================ -# Rule for setting options at targets -# Copyright (C)2003 by Matze Braun -# -# 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 +# +# 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)." ; + } + } +} + diff --git a/mk/jam/plugin.jam b/mk/jam/plugin.jam index fb6a9f3fc..3540696e5 100644 --- a/mk/jam/plugin.jam +++ b/mk/jam/plugin.jam @@ -1,179 +1,179 @@ -#============================================================================ -# Rules for plugin creation -# Copyright (C)2003 by Matze Braun -# -# 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" ; +#============================================================================ +# Rules for plugin creation +# Copyright (C)2003 by Matze Braun +# +# 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" ; diff --git a/mk/jam/property.jam b/mk/jam/property.jam index ac6c12239..d095f519f 100644 --- a/mk/jam/property.jam +++ b/mk/jam/property.jam @@ -1,58 +1,58 @@ -#============================================================================== -# Generic property-bag mechanism. -# Copyright (C) 2004 by Eric Sunshine -# -# 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 +# +# 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_$(<)_$(>)" ; +} diff --git a/mk/jam/resource.jam b/mk/jam/resource.jam index ac4e5ab63..78337f556 100644 --- a/mk/jam/resource.jam +++ b/mk/jam/resource.jam @@ -1,109 +1,109 @@ -#============================================================================ -# Rules for handling additional resources. -# Platform-specific Jam files may override these if needed. -# -# Copyright (C)2004 by Eric Sunshine -# -# 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 +# +# 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 { } diff --git a/mk/jam/static.jam b/mk/jam/static.jam index 3f2efdb3c..fcdce54f4 100644 --- a/mk/jam/static.jam +++ b/mk/jam/static.jam @@ -1,353 +1,353 @@ -#============================================================================ -# Utility rules for static builds without plugins -# Copyright (C)2003 by Matze Braun -# -# 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 ".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) '//!d;s:[ ]*\(..*\): #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) '//!d;s:[ ]*\(..*\): #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 +# +# 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 ".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) '//!d;s:[ ]*\(..*\): #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) '//!d;s:[ ]*\(..*\): #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 '}' >> $(<) +} diff --git a/mk/jam/strip.jam b/mk/jam/strip.jam index bad237ebc..6b51b9eaf 100644 --- a/mk/jam/strip.jam +++ b/mk/jam/strip.jam @@ -1,36 +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 -} +#============================================================================ +# 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 +} diff --git a/mk/jam/subdir.jam b/mk/jam/subdir.jam index 57a1588eb..4f7d231e6 100644 --- a/mk/jam/subdir.jam +++ b/mk/jam/subdir.jam @@ -1,109 +1,109 @@ -#============================================================================ -# Work around problems the SubDir rule of Jambase -# (until jampeople accept my patches :-/ ) -# Copyright (C)2003 by Matze Braun -# -# 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 +# +# 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) "$(<)" +} diff --git a/mk/jam/swig.jam b/mk/jam/swig.jam index a512b8aa3..6d340a1f1 100644 --- a/mk/jam/swig.jam +++ b/mk/jam/swig.jam @@ -1,225 +1,225 @@ -#============================================================================ -# Rules for swig -# Copyright (C)2004 by Eric Sunshine -# Copyright (C)2003 by Matze Braun -# -# 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 defines INT64_C() and cousins, which - # means that the __STDC_CONSTANT_MACROS and __STDC_LIMIT_MACROS macros must - # be defined before is included. In some Python installations, - # Python.h includes , 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 +# Copyright (C)2003 by Matze Braun +# +# 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 defines INT64_C() and cousins, which + # means that the __STDC_CONSTANT_MACROS and __STDC_LIMIT_MACROS macros must + # be defined before is included. In some Python installations, + # Python.h includes , 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 ; + } +} diff --git a/mk/jam/unittest.jam b/mk/jam/unittest.jam index 7ca98378e..f87186538 100644 --- a/mk/jam/unittest.jam +++ b/mk/jam/unittest.jam @@ -1,576 +1,576 @@ -#============================================================================== -# Jam rules for unit testing with CppTest (http://cpptest.sourceforge.net/) -# Copyright (C) 2005 by Eric Sunshine -# -# 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 $(CPPUNIT.AVAILABLE) = yes -{ - -UNITTEST_VERBOSE ?= yes ; -UNITTEST_RUNFLAGS ?= ; -if $(UNITTEST_VERBOSE) = yes -{ - UNITTEST_RUNFLAGS += "--verbose" ; -} - -## UnitTest module [ : testdirs [ : extensions ] ] -## -## This rule provides a dynamic unit testing framework which utilizes CppUnit -## (http://cpptest.sourceforge.net/). The invocation: -## -## UnitTest ; -## -## sets up unit testing support for `module' if $(SUBDIR)/t/ exists for -## `module' and contains test fragment files (*.t) and/or header (*.h) files. -## If `testdirs' is provided, then it is a list of directory to scan for test -## fragments instead of `t/'. If `extensions' is provided, then it is a list of -## file extensions for which to search instead of `.t'. -## -## It is safe to invoke this rule for modules which do not have a `t/' -## subdirectory, in which case the rule invocation is silently ignored. The -## UnitTest rule automatically synthesizes an appropriate driver program which -## incorporates the test fragment files (*.t), thus eliminating a boring and -## error-prone task. -## -## The Application, Library, and Plugin rules automatically invoke UnitTest on -## behalf of the client (unless given the `notest' option), so the vast -## majority of modules in a project inherit unit testing support automatically -## and for free. Simply populating a `t/' subdirectory with unit testing -## fragment files (*.t) is typically all that is needed to enable unit testing -## for an application, library, or plugin. -## -## The unit testing Jam target for `module' is named "check_module". In -## addition to this module-level granularity, the UnitTest rule also provides -## dynamic directory-based granularity. For example, presume that the following -## abbreviated list of directories exist in a project tree: -## -## apps/example -## libs/common -## plugins/bindings/perl_b -## plugins/bindings/python_b -## plugins/bindings/ruby_b -## -## The following module-based unit testing Jam targets will be created -## (assuming that the appropriate test fragment files, $(SUBDIR)/t/*.t, exist -## in each directory): -## -## check_example -## check_common -## check_perl_b -## check_python_b -## check_ruby_b -## -## Furthermore, the following directory-based targets also will be created -## dynamically: -## -## check (and its alias check_all) -## check_apps -## check_apps_example -## check_libs -## check_libs_common -## check_plugins -## check_plugins_bindings -## check_plugins_bindings_perl_b -## check_plugins_bindings_python_b -## check_plugins_bindings_ruby_b -## -## The very neat thing about the directory-based targets is that they -## automatically synthesize a driver program which incorporates all of the -## tests contained in child directories. For instance, the `check_plugins' -## target creates a unit testing driver which incorporates the tests from the -## bindings/perl_b/t, bindings/python_b/t, and bindings/ruby_b/t directories; -## and the `check_all' target creates a driver which incorporates all tests in -## the entire project. This allows entire selected branches of tests to be run -## all at once rather than having to run several different driver programs to -## get a complete report. -## -## The unit testing framework automatically wraps each test fragment file (*.t) -## into a synthesized C++ source file containing CppUnit boilerplate, such as -## necessary #include directives, #defines, etc. This allows the fragment -## files to be as simple as possible. They need #include only headers related -## to the actual module being tested, but need not worry about setting up the -## CppUnit environment since that is done automatically. A typical fragment -## file might look like this: -## -## /* Test file: libs/common/t/array.t */ -## -## #include "common/myarray.h" -## -## class MyArrayTest : public CppUnit::TestFixture -## { -## public: -## void setUp() { ...set up test data... } -## void tearDown() { ...destroy test data... } -## -## void testInsert() { ...test array insertion methods... } -## void testDelete() { ...test array deletion methods... } -## -## CPPUNIT_TEST_SUITE(MyArrayTest); -## CPPUNIT_TEST(testInsert); -## CPPUNIT_TEST(testDelete); -## CPPUNIT_TEST_SUITE_END(); -## }; -## -## When the UnitTest rule synthesizes C++ wrappers for the test fragments, it -## needs to figure out the names of classes which contain tests. The synthesis -## process makes this determination by examining *.t and *.h files for -## subclasses of CppUnit::TestFixture. For this to work correctly, the -## "class Foo : public CppUnit::TestFixture" declaration must not be split over -## multiple lines. -## -## It is possible to have extra text added at the beginning and end of the -## synthesized C++ source code for both the *.t wrappers and the driver -## programs by optionally defining the following Jam variables (perhaps in -## Jamrules) with whatever text you would like inserted into the synthesized -## files: -## -## UNITTEST_BOILERPLATE_TEST_PRE -## UNITTEST_BOILERPLATE_TEST_POST -## UNITTEST_BOILERPLATE_MAIN_PRE -## UNITTEST_BOILERPLATE_MAIN_POST -## -## Thest `TEST' variables apply to the *.t wrappers, and the `MAIN' variables -## apply to the driver programs into which the wrappers are linked. If you find -## that you are including common code in all of your *.t files, then you may -## want to simplify by propagating the common code to the `TEST' boilerplate -## instead. -## -rule UnitTest -{ - local mod = $(1) ; - local testdirs = $(2) ; - local exts = $(3) ; - if ! $(testdirs) { testdirs = t ; } - if ! $(exts) { exts = .t ; } - - local test_clean = [ UnitTestNameClean $(mod) ] ; - local oldsubdir = $(SUBDIR_TOKENS) ; - - local testdir ; - for testdir in $(testdirs) - { - SubDir TOP $(oldsubdir) $(testdir) ; - - local tests_obj ; - local tests = [ Recurse : $(exts) ] ; - local headers = [ Recurse : .h .hpp .hxx .H ] ; - if $(tests) || $(headers) - { - tests = [ DoSourceGrist $(tests) ] ; - SEARCH on $(tests) = $(SEARCH_SOURCE) ; - - local tests_src = $(tests:S=.cpp) ; - MakeLocate $(tests_src) : $(LOCATE_TARGET) ; - Clean $(test_clean) : $(tests_src) ; - - # For each fragment (*.t), create a C++ wrapper. Automatically register - # subclasses of CppUnit::TestFixture. - local i ; - for i in $(tests) - { - Includes $(i:S=.cpp) : $(i) ; - UnitTestSource $(i:S=.cpp) : $(i) ; - } - - # Also search for CppUnit::TestFixture subclasses in headers (*.h) and - # synthesize a C++ wrapper which registers them. - if $(headers) - { - headers = [ DoSourceGrist $(headers) ] ; - SEARCH on $(headers) = $(SEARCH_SOURCE) ; - local suitereg = [ DoSourceGrist __suitereg.cpp ] ; - MakeLocate $(suitereg) : $(LOCATE_TARGET) ; - UnitTestSource $(suitereg) : $(headers) ; - Includes $(suitereg) : $(headers) ; - tests_src += $(suitereg) ; - } - - # Compile all synthesized sources. - tests_obj = [ CompileObjects $(tests_src) ] ; - CCHDRS on $(tests_obj) += [ FIncludes $(SEARCH_SOURCE) ] ; - C++FLAGS on $(tests_obj) += $(COMPILER.C++FLAGS.EXCEPTIONS.ENABLE) - $(CPPUNIT.CFLAGS) ; - Clean $(test_clean) : $(tests_obj) ; - - # Create the driver for "check_module". - UnitTestDriver $(mod) : $(tests_obj) ; - # Dynamically create the drivers for all parent directories. - UnitTestDynamicTargets $(mod) : $(tests_obj) : $(oldsubdir) ; - } - } - - SubDir TOP $(oldsubdir) ; -} - -#------------------------------------------------------------------------------ -# PRIVATE UTILITY RULES -#------------------------------------------------------------------------------ - -# UnitTestDriver module : objs [ : owner ] -# Given a set of object files which represent test fragment wrappers for -# `module', set up the driver program which incorporates them, and create the -# "check_module" and "check_moduleclean" targets. For invocations which arise -# from the UnitTest rule, `module' will be the actual module for which -# testing is being arranged, and `objs' will be the complete set of test -# objects for `module'. For directory-based testing drivers, `module' will be -# the dynamically synthesized module name representing the directory for -# which testing is being arranged, and `objs' will be only a subset of all -# objects which ultimately will be incorporated into this synthesized driver -# (specifically, the subset will be the objects belonging to `owner'). This -# rule may be invoked multiple times for the same synthesized directory-based -# driver `module' in order to accumulate the object files from all child -# directories (recursively). -# -# Since the driver programs in parent directories are actually conglomerates -# of the objects from many different modules, this rule is invoked multiple -# times for any given directory-based driver program. Each invocations -# presents it with a different set of object files. Therefore, it must take -# special care. In particular, the first time this rule is invoked for a -# synthesized driver in a particular directory, it actually creates the -# application target; on subsequent invocations for the same directory, it -# merely adds `objs' to the already-created application target. This way, -# the a directory's dynamically synthesized driver program can incorporate -# objects from all of its child directories (recursively). -# -# The `owner' is the module which owns the object files, `objs'. In the -# example illustrated for the UnitTest rule, when the "check_libs" driver -# program is under creation from within the `UnitTest common' invocation, the -# owner will be "common". This information is needed in order to ensure that -# the driver program synthesized at the "libs" level, which incorporates -# "common"'s object files, can gain access to "common's" linker flags (since -# they will be needed for linking the directory-based driver). If `owner' is -# not provided, then it defaults to `module'. -rule UnitTestDriver -{ - local mod = $(1) ; - local objs = $(2) ; - local owner = $(3) ; - if ! $(owner) { owner = $(mod) ; } - - local test_name = [ UnitTestNameTest $(mod) ] ; - local test_clean = [ UnitTestNameClean $(mod) ] ; - - # This is the low-level target name by which a unit testing driver program is - # known. We only create the target the first time we are called at a - # particular directory level (thus the module_UNITTESTS check). Upon - # subsequent invocations, we merely add the new objects files to the existing - # driver. - - local test_driver = $(mod)_unittest ; - if ! $($(mod)_UNITTESTS) - { - $(mod)_UNITTESTS = $(test_driver) ; - - # Create the actual driver program represented by the `test_driver' target. - local test_driver_target = - [ DoObjectGrist [ ConstructApplicationTarget __unittest : console ] ] ; - MakeLocate $(test_driver_target) : $(LOCATE_TARGET) ; - $(test_driver)_TYPE = application ; - $(test_driver)_TARGET = $(test_driver_target) ; - $(test_driver)_OBJECTS = $(objs) ; - SystemLinkApplication $(test_driver) : $(objs) [ UnitTestCommonObj ] : - console ; - CFlags $(test_driver) : $(APPLICATION.CFLAGS) ; - LFlags $(test_driver) : $(LINKLIBS) $(APPLICATION.LFLAGS) - $(CPPUNIT.LFLAGS) ; - - Depends $(test_name) : $(test_driver_target) ; - Clean $(test_clean) : $(test_driver_target) ; - - # Actually run the unit tests. - NotFile $(test_name) $(test_clean) ; - Always $(test_name) $(test_clean) ; - Depends checkclean : $(test_clean) ; - UnitTestRun $(test_name) : $(test_driver_target) ; - } - else - { - ExtraObjects $(test_driver) : $(objs) ; - } - - # Apply appropriate linker flags to the driver program. This has two parts: - # (1) If these are the unit tests for a library, then, as a convenience, - # assume that the tests need to link against that library. - # (2) For directory-based test targets, the driver needs all of the linker - # flags required by its child directories (recursively). For example, in - # the earlier cited illustration, the "check_all", and "check_libs" - # targets will also need whatever linker flags libs/common itself - # requires. - - if $($(owner)_TYPE) = library { LinkWith $(test_driver) : $(owner) ; } - LinkWith $(test_driver) : [ on $($(owner)_TARGET) GetVar NEEDLIBS ] ; - - return $(test_driver) ; -} - -# UnitTestCommonObj -# Create object files common to all driver programs. Presently, the only -# common component is the main() function, which utilizes CppUnit's automatic -# test discovery protocol to discover test classes. (These are the subclasses -# of CppUnit::TestFixture for which we scan and pass to the -# CPPUNIT_TEST_SUITE_REGISTRATION() macro.) -rule UnitTestCommonObj -{ - if ! $(UNITTEST_COMMON_OBJ) - { - local test_main_dir = [ ConcatDirs $(LOCATE.OBJECTS) __unittest_common ] ; - local test_main_src = main.cpp ; - test_main_src = $(test_main_src:G=__unittest) ; - MakeLocate $(test_main_src) : $(test_main_dir) ; - UnitTestMain $(test_main_src) ; - Clean checkclean : $(test_main_src) ; - - local test_main_obj = [ CompileObjects $(test_main_src) ] ; - MakeLocate $(test_main_obj) : $(test_main_dir) ; - C++FLAGS on $(test_main_obj) += $(COMPILER.C++FLAGS.EXCEPTIONS.ENABLE) - $(CPPUNIT.CFLAGS) ; - Clean checkclean : $(test_main_obj) ; - - UNITTEST_COMMON_OBJ = $(test_main_obj) ; - } - return $(UNITTEST_COMMON_OBJ) ; -} - -# UnitTestDynamicTargets module : objs : subdir_tokens -# Given a set of subdirectory tokens representing the location of `module' in -# the source tree, dynamically synthesize a test driver program in each -# parent directory leading up to module's location. Each synthesized test -# program will incorporate module's `objs', as well as the objects of all -# other children (recursively) of the directory containing each driver. (The -# additional objects will be incorporated by subsequent invocations for the -# same directories.) -rule UnitTestDynamicTargets -{ - local mod = $(1) ; - local objs = $(2) ; - local subdir_tokens = $(3) ; - - # There is no need to synthesize a driver for the directory in which `module' - # itself resides, since we already have a "check_module" target for that. - # Therefore, simply alias this directory entry to the existing "check_module" - # target. - - local deepest_name = [ UnitTestNameTest $(subdir_tokens:J=_) ] ; - local deepest_clean = [ UnitTestNameClean $(subdir_tokens:J=_) ] ; - NotFile $(deepest_name) $(deepest_clean) ; - Depends $(deepest_name) : [ UnitTestNameTest $(mod) ] ; - Depends $(deepest_clean) : [ UnitTestNameClean $(mod) ] ; - - # For each parent directory of `module', synthesize a driver target. - local tokens = [ FReverse $(subdir_tokens) ] ; - tokens = $(tokens[2-]) ; - while $(tokens) - { - UnitTestDynamicTarget $(mod) : $(objs) : [ FReverse $(tokens) ] ; - tokens = $(tokens[2-]) ; - } - - # Synthesize a "check_all" target which incorporates all tests projectwide. - UnitTestDynamicTarget $(mod) : $(objs) : : all ; -} - -# UnitTestDynamicTarget module : objs : dir_tokens [ : dyn_module ] -# The workhorse for UnitTestDynamicTargets which actually changes to the -# specified directory and creates the driver program. The "check_foo" target -# name is normally composed of the directory tokens joined with underscores -# (i.e. "check_dir_tokens") unless the optional `dyn_module' is provided, in -# which case the target name becomes "check_dyn_module". -rule UnitTestDynamicTarget -{ - local mod = $(1) ; - local objs = $(2) ; - local dir_tokens = $(3) ; - local dyn_mod = $(4) ; - if ! $(dyn_mod) { dyn_mod = $(dir_tokens:J=_) ; } - - local olddir = $(SUBDIR_TOKENS) ; - SubDir TOP $(dir_tokens) ; - - local test_driver = [ UnitTestDriver $(dyn_mod) : $(objs) : $(mod) ] ; - - # Use module_UNITTESTS to remember that this dynamically synthesized driver - # has a relation to `module'. This information is needed later when clients - # invoke CFlags, LFlags, and LibDepends for `module'. Not only must those - # settings be applied to `module', but we must also apply them to module's - # test driver, as well as all of the directory-based drivers which - # incorporate module's test objects. This is what the UnitTestCFlags, - # UnitTestLFlags, and UnitTestLibDepends rules do. - - $(mod)_UNITTESTS += $(test_driver) ; - - SubDir TOP $(olddir) ; -} - -# UnitTestNameTest module -# Return the name of the "check_module" target for `module'. -rule UnitTestNameTest -{ return check_$(<) ; } - -# UnitTestNameClean module -# Return the name of the "check_moduleclean" target for `module'. -rule UnitTestNameClean -{ local n = [ UnitTestNameTest $(<) ] ; return $(n)clean ; } - -# UnitTestCFlags module : flags [ : options ] -# Hook invoked automatically by CFlags. Applies `flags' also to module's test -# driver. -rule UnitTestCFlags -{ - # Empty for now. Presumably the compiler flags are needed only by the actual - # sources of `module'; not by its tests which merely link against module's - # objects. This assumption may be wrong, and may change in the future. -} - -# UnitTestLFlags module : flags [ : options ] -# Hook invoked automatically by LFlags. Applies `flags' also to module's test -# driver and to all directory-based drivers which incorporate module's test -# objects. -rule UnitTestLFlags -{ - local mod = $(1) ; - local flags = $(2) ; - local options = $(3) ; - local unittests = $($(mod)_UNITTESTS) ; - local u ; - for u in $(unittests) - { - LFlags $(u) : $(flags) : $(options) ; - } -} - -# UnitTestLibDepends module : deps -# Hook invoked automatically by LibDepends. Applies `deps' also to module's -# test driver and to all directory-based drivers which incorporate module's -# test objects. -rule UnitTestLibDepends -{ - local mod = $(1) ; - local libs = $(2) ; - local unittests = $($(mod)_UNITTESTS) ; - local u ; - for u in $(unittests) - { - LinkWith $(u) : $(libs) ; - } -} - -# UnitTestSource wrapper : files -# Create a `wrapper' which #includes all `files' (which are probably *.t test -# fragments or headers). Also scan `files' for subclasses of -# CppUnit::TestFixture and invoke CPPUNIT_TEST_SUITE_REGISTRATION() for each -# discovery. -actions UnitTestSource -{ - cat < $(<) -// Automatically generated; do not edit. -#include -#include -#include -#include -#include -$(UNITTEST_BOILERPLATE_TEST_PRE) -EOF - for i in $(>:BS); do - echo '#include "'$i'"' >> $(<) - done - for i in $(>); do - classes=`sed '/public[ ][ ]*CppUnit::TestFixture/!d;\ - s/class[ ][ ]*\([^ ][^ ]*\)[ ]*:.*/\1/' < $i` - for c in $classes; do - echo "CPPUNIT_TEST_SUITE_REGISTRATION($c);" >> $(<) - done - done - cat <> $(<) -$(UNITTEST_BOILERPLATE_TEST_POST) -EOF -} - -# UnitTestMain file -# Create a generic main() which is used for all test driver programs. It -# uses CppUnit's automated test class discovery protocol to discover classes -# containing tests, therefore it is entirely generic and can be used by any -# number of driver programs. -actions UnitTestMain -{ - cat < $(<) -// Automatically generated; do not edit. -#include -#include -#include -#include -#include -$(UNITTEST_BOILERPLATE_MAIN_PRE) -int main(int argc, char** argv) -{ - bool verbose = false; - for (int i = 1; i < argc; i++) - { - char const* s = argv[i]; - if (*s == '-') - { - do { s++; } while (*s == '-'); - verbose = (*s == 'v' || *s == 'V'); - if (verbose) - break; - } - } - - CppUnit::TextUi::TestRunner runner; - CppUnit::TestFactoryRegistry& registry = - CppUnit::TestFactoryRegistry::getRegistry(); - CppUnit::BriefTestProgressListener listener; - if (verbose) - runner.eventManager().addListener(&listener); - runner.addTest(registry.makeTest()); - return runner.run("", false, true, !verbose) ? 0 : -1; -} -$(UNITTEST_BOILERPLATE_MAIN_POST) -EOF -} - -# UnitTestRun check_target : program -# Actually run the unit test driver `program' for the invocation target -# `check_target'. -actions UnitTestRun -{ - $(>) $(UNITTEST_RUNFLAGS) -} - -} -else # !CPPUNIT.AVAILABLE -{ - -rule UnitTest { } -rule UnitTestCFlags { } -rule UnitTestLFlags { } -rule UnitTestLibDepends { } - -actions UnitTestDisabled -{ - echo "$(<): Unit testing disabled (CppUnit not installed)." -} - -Always check_all ; -Depends check : check_all ; -UnitTestDisabled check_all ; - -} - -NotFile check checkclean check_all check_allclean ; -Depends check : check_all ; -Depends clean : checkclean ; -Help check : "Run unit tests" ; +#============================================================================== +# Jam rules for unit testing with CppTest (http://cpptest.sourceforge.net/) +# Copyright (C) 2005 by Eric Sunshine +# +# 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 $(CPPUNIT.AVAILABLE) = yes +{ + +UNITTEST_VERBOSE ?= yes ; +UNITTEST_RUNFLAGS ?= ; +if $(UNITTEST_VERBOSE) = yes +{ + UNITTEST_RUNFLAGS += "--verbose" ; +} + +## UnitTest module [ : testdirs [ : extensions ] ] +## +## This rule provides a dynamic unit testing framework which utilizes CppUnit +## (http://cpptest.sourceforge.net/). The invocation: +## +## UnitTest ; +## +## sets up unit testing support for `module' if $(SUBDIR)/t/ exists for +## `module' and contains test fragment files (*.t) and/or header (*.h) files. +## If `testdirs' is provided, then it is a list of directory to scan for test +## fragments instead of `t/'. If `extensions' is provided, then it is a list of +## file extensions for which to search instead of `.t'. +## +## It is safe to invoke this rule for modules which do not have a `t/' +## subdirectory, in which case the rule invocation is silently ignored. The +## UnitTest rule automatically synthesizes an appropriate driver program which +## incorporates the test fragment files (*.t), thus eliminating a boring and +## error-prone task. +## +## The Application, Library, and Plugin rules automatically invoke UnitTest on +## behalf of the client (unless given the `notest' option), so the vast +## majority of modules in a project inherit unit testing support automatically +## and for free. Simply populating a `t/' subdirectory with unit testing +## fragment files (*.t) is typically all that is needed to enable unit testing +## for an application, library, or plugin. +## +## The unit testing Jam target for `module' is named "check_module". In +## addition to this module-level granularity, the UnitTest rule also provides +## dynamic directory-based granularity. For example, presume that the following +## abbreviated list of directories exist in a project tree: +## +## apps/example +## libs/common +## plugins/bindings/perl_b +## plugins/bindings/python_b +## plugins/bindings/ruby_b +## +## The following module-based unit testing Jam targets will be created +## (assuming that the appropriate test fragment files, $(SUBDIR)/t/*.t, exist +## in each directory): +## +## check_example +## check_common +## check_perl_b +## check_python_b +## check_ruby_b +## +## Furthermore, the following directory-based targets also will be created +## dynamically: +## +## check (and its alias check_all) +## check_apps +## check_apps_example +## check_libs +## check_libs_common +## check_plugins +## check_plugins_bindings +## check_plugins_bindings_perl_b +## check_plugins_bindings_python_b +## check_plugins_bindings_ruby_b +## +## The very neat thing about the directory-based targets is that they +## automatically synthesize a driver program which incorporates all of the +## tests contained in child directories. For instance, the `check_plugins' +## target creates a unit testing driver which incorporates the tests from the +## bindings/perl_b/t, bindings/python_b/t, and bindings/ruby_b/t directories; +## and the `check_all' target creates a driver which incorporates all tests in +## the entire project. This allows entire selected branches of tests to be run +## all at once rather than having to run several different driver programs to +## get a complete report. +## +## The unit testing framework automatically wraps each test fragment file (*.t) +## into a synthesized C++ source file containing CppUnit boilerplate, such as +## necessary #include directives, #defines, etc. This allows the fragment +## files to be as simple as possible. They need #include only headers related +## to the actual module being tested, but need not worry about setting up the +## CppUnit environment since that is done automatically. A typical fragment +## file might look like this: +## +## /* Test file: libs/common/t/array.t */ +## +## #include "common/myarray.h" +## +## class MyArrayTest : public CppUnit::TestFixture +## { +## public: +## void setUp() { ...set up test data... } +## void tearDown() { ...destroy test data... } +## +## void testInsert() { ...test array insertion methods... } +## void testDelete() { ...test array deletion methods... } +## +## CPPUNIT_TEST_SUITE(MyArrayTest); +## CPPUNIT_TEST(testInsert); +## CPPUNIT_TEST(testDelete); +## CPPUNIT_TEST_SUITE_END(); +## }; +## +## When the UnitTest rule synthesizes C++ wrappers for the test fragments, it +## needs to figure out the names of classes which contain tests. The synthesis +## process makes this determination by examining *.t and *.h files for +## subclasses of CppUnit::TestFixture. For this to work correctly, the +## "class Foo : public CppUnit::TestFixture" declaration must not be split over +## multiple lines. +## +## It is possible to have extra text added at the beginning and end of the +## synthesized C++ source code for both the *.t wrappers and the driver +## programs by optionally defining the following Jam variables (perhaps in +## Jamrules) with whatever text you would like inserted into the synthesized +## files: +## +## UNITTEST_BOILERPLATE_TEST_PRE +## UNITTEST_BOILERPLATE_TEST_POST +## UNITTEST_BOILERPLATE_MAIN_PRE +## UNITTEST_BOILERPLATE_MAIN_POST +## +## Thest `TEST' variables apply to the *.t wrappers, and the `MAIN' variables +## apply to the driver programs into which the wrappers are linked. If you find +## that you are including common code in all of your *.t files, then you may +## want to simplify by propagating the common code to the `TEST' boilerplate +## instead. +## +rule UnitTest +{ + local mod = $(1) ; + local testdirs = $(2) ; + local exts = $(3) ; + if ! $(testdirs) { testdirs = t ; } + if ! $(exts) { exts = .t ; } + + local test_clean = [ UnitTestNameClean $(mod) ] ; + local oldsubdir = $(SUBDIR_TOKENS) ; + + local testdir ; + for testdir in $(testdirs) + { + SubDir TOP $(oldsubdir) $(testdir) ; + + local tests_obj ; + local tests = [ Recurse : $(exts) ] ; + local headers = [ Recurse : .h .hpp .hxx .H ] ; + if $(tests) || $(headers) + { + tests = [ DoSourceGrist $(tests) ] ; + SEARCH on $(tests) = $(SEARCH_SOURCE) ; + + local tests_src = $(tests:S=.cpp) ; + MakeLocate $(tests_src) : $(LOCATE_TARGET) ; + Clean $(test_clean) : $(tests_src) ; + + # For each fragment (*.t), create a C++ wrapper. Automatically register + # subclasses of CppUnit::TestFixture. + local i ; + for i in $(tests) + { + Includes $(i:S=.cpp) : $(i) ; + UnitTestSource $(i:S=.cpp) : $(i) ; + } + + # Also search for CppUnit::TestFixture subclasses in headers (*.h) and + # synthesize a C++ wrapper which registers them. + if $(headers) + { + headers = [ DoSourceGrist $(headers) ] ; + SEARCH on $(headers) = $(SEARCH_SOURCE) ; + local suitereg = [ DoSourceGrist __suitereg.cpp ] ; + MakeLocate $(suitereg) : $(LOCATE_TARGET) ; + UnitTestSource $(suitereg) : $(headers) ; + Includes $(suitereg) : $(headers) ; + tests_src += $(suitereg) ; + } + + # Compile all synthesized sources. + tests_obj = [ CompileObjects $(tests_src) ] ; + CCHDRS on $(tests_obj) += [ FIncludes $(SEARCH_SOURCE) ] ; + C++FLAGS on $(tests_obj) += $(COMPILER.C++FLAGS.EXCEPTIONS.ENABLE) + $(CPPUNIT.CFLAGS) ; + Clean $(test_clean) : $(tests_obj) ; + + # Create the driver for "check_module". + UnitTestDriver $(mod) : $(tests_obj) ; + # Dynamically create the drivers for all parent directories. + UnitTestDynamicTargets $(mod) : $(tests_obj) : $(oldsubdir) ; + } + } + + SubDir TOP $(oldsubdir) ; +} + +#------------------------------------------------------------------------------ +# PRIVATE UTILITY RULES +#------------------------------------------------------------------------------ + +# UnitTestDriver module : objs [ : owner ] +# Given a set of object files which represent test fragment wrappers for +# `module', set up the driver program which incorporates them, and create the +# "check_module" and "check_moduleclean" targets. For invocations which arise +# from the UnitTest rule, `module' will be the actual module for which +# testing is being arranged, and `objs' will be the complete set of test +# objects for `module'. For directory-based testing drivers, `module' will be +# the dynamically synthesized module name representing the directory for +# which testing is being arranged, and `objs' will be only a subset of all +# objects which ultimately will be incorporated into this synthesized driver +# (specifically, the subset will be the objects belonging to `owner'). This +# rule may be invoked multiple times for the same synthesized directory-based +# driver `module' in order to accumulate the object files from all child +# directories (recursively). +# +# Since the driver programs in parent directories are actually conglomerates +# of the objects from many different modules, this rule is invoked multiple +# times for any given directory-based driver program. Each invocations +# presents it with a different set of object files. Therefore, it must take +# special care. In particular, the first time this rule is invoked for a +# synthesized driver in a particular directory, it actually creates the +# application target; on subsequent invocations for the same directory, it +# merely adds `objs' to the already-created application target. This way, +# the a directory's dynamically synthesized driver program can incorporate +# objects from all of its child directories (recursively). +# +# The `owner' is the module which owns the object files, `objs'. In the +# example illustrated for the UnitTest rule, when the "check_libs" driver +# program is under creation from within the `UnitTest common' invocation, the +# owner will be "common". This information is needed in order to ensure that +# the driver program synthesized at the "libs" level, which incorporates +# "common"'s object files, can gain access to "common's" linker flags (since +# they will be needed for linking the directory-based driver). If `owner' is +# not provided, then it defaults to `module'. +rule UnitTestDriver +{ + local mod = $(1) ; + local objs = $(2) ; + local owner = $(3) ; + if ! $(owner) { owner = $(mod) ; } + + local test_name = [ UnitTestNameTest $(mod) ] ; + local test_clean = [ UnitTestNameClean $(mod) ] ; + + # This is the low-level target name by which a unit testing driver program is + # known. We only create the target the first time we are called at a + # particular directory level (thus the module_UNITTESTS check). Upon + # subsequent invocations, we merely add the new objects files to the existing + # driver. + + local test_driver = $(mod)_unittest ; + if ! $($(mod)_UNITTESTS) + { + $(mod)_UNITTESTS = $(test_driver) ; + + # Create the actual driver program represented by the `test_driver' target. + local test_driver_target = + [ DoObjectGrist [ ConstructApplicationTarget __unittest : console ] ] ; + MakeLocate $(test_driver_target) : $(LOCATE_TARGET) ; + $(test_driver)_TYPE = application ; + $(test_driver)_TARGET = $(test_driver_target) ; + $(test_driver)_OBJECTS = $(objs) ; + SystemLinkApplication $(test_driver) : $(objs) [ UnitTestCommonObj ] : + console ; + CFlags $(test_driver) : $(APPLICATION.CFLAGS) ; + LFlags $(test_driver) : $(LINKLIBS) $(APPLICATION.LFLAGS) + $(CPPUNIT.LFLAGS) ; + + Depends $(test_name) : $(test_driver_target) ; + Clean $(test_clean) : $(test_driver_target) ; + + # Actually run the unit tests. + NotFile $(test_name) $(test_clean) ; + Always $(test_name) $(test_clean) ; + Depends checkclean : $(test_clean) ; + UnitTestRun $(test_name) : $(test_driver_target) ; + } + else + { + ExtraObjects $(test_driver) : $(objs) ; + } + + # Apply appropriate linker flags to the driver program. This has two parts: + # (1) If these are the unit tests for a library, then, as a convenience, + # assume that the tests need to link against that library. + # (2) For directory-based test targets, the driver needs all of the linker + # flags required by its child directories (recursively). For example, in + # the earlier cited illustration, the "check_all", and "check_libs" + # targets will also need whatever linker flags libs/common itself + # requires. + + if $($(owner)_TYPE) = library { LinkWith $(test_driver) : $(owner) ; } + LinkWith $(test_driver) : [ on $($(owner)_TARGET) GetVar NEEDLIBS ] ; + + return $(test_driver) ; +} + +# UnitTestCommonObj +# Create object files common to all driver programs. Presently, the only +# common component is the main() function, which utilizes CppUnit's automatic +# test discovery protocol to discover test classes. (These are the subclasses +# of CppUnit::TestFixture for which we scan and pass to the +# CPPUNIT_TEST_SUITE_REGISTRATION() macro.) +rule UnitTestCommonObj +{ + if ! $(UNITTEST_COMMON_OBJ) + { + local test_main_dir = [ ConcatDirs $(LOCATE.OBJECTS) __unittest_common ] ; + local test_main_src = main.cpp ; + test_main_src = $(test_main_src:G=__unittest) ; + MakeLocate $(test_main_src) : $(test_main_dir) ; + UnitTestMain $(test_main_src) ; + Clean checkclean : $(test_main_src) ; + + local test_main_obj = [ CompileObjects $(test_main_src) ] ; + MakeLocate $(test_main_obj) : $(test_main_dir) ; + C++FLAGS on $(test_main_obj) += $(COMPILER.C++FLAGS.EXCEPTIONS.ENABLE) + $(CPPUNIT.CFLAGS) ; + Clean checkclean : $(test_main_obj) ; + + UNITTEST_COMMON_OBJ = $(test_main_obj) ; + } + return $(UNITTEST_COMMON_OBJ) ; +} + +# UnitTestDynamicTargets module : objs : subdir_tokens +# Given a set of subdirectory tokens representing the location of `module' in +# the source tree, dynamically synthesize a test driver program in each +# parent directory leading up to module's location. Each synthesized test +# program will incorporate module's `objs', as well as the objects of all +# other children (recursively) of the directory containing each driver. (The +# additional objects will be incorporated by subsequent invocations for the +# same directories.) +rule UnitTestDynamicTargets +{ + local mod = $(1) ; + local objs = $(2) ; + local subdir_tokens = $(3) ; + + # There is no need to synthesize a driver for the directory in which `module' + # itself resides, since we already have a "check_module" target for that. + # Therefore, simply alias this directory entry to the existing "check_module" + # target. + + local deepest_name = [ UnitTestNameTest $(subdir_tokens:J=_) ] ; + local deepest_clean = [ UnitTestNameClean $(subdir_tokens:J=_) ] ; + NotFile $(deepest_name) $(deepest_clean) ; + Depends $(deepest_name) : [ UnitTestNameTest $(mod) ] ; + Depends $(deepest_clean) : [ UnitTestNameClean $(mod) ] ; + + # For each parent directory of `module', synthesize a driver target. + local tokens = [ FReverse $(subdir_tokens) ] ; + tokens = $(tokens[2-]) ; + while $(tokens) + { + UnitTestDynamicTarget $(mod) : $(objs) : [ FReverse $(tokens) ] ; + tokens = $(tokens[2-]) ; + } + + # Synthesize a "check_all" target which incorporates all tests projectwide. + UnitTestDynamicTarget $(mod) : $(objs) : : all ; +} + +# UnitTestDynamicTarget module : objs : dir_tokens [ : dyn_module ] +# The workhorse for UnitTestDynamicTargets which actually changes to the +# specified directory and creates the driver program. The "check_foo" target +# name is normally composed of the directory tokens joined with underscores +# (i.e. "check_dir_tokens") unless the optional `dyn_module' is provided, in +# which case the target name becomes "check_dyn_module". +rule UnitTestDynamicTarget +{ + local mod = $(1) ; + local objs = $(2) ; + local dir_tokens = $(3) ; + local dyn_mod = $(4) ; + if ! $(dyn_mod) { dyn_mod = $(dir_tokens:J=_) ; } + + local olddir = $(SUBDIR_TOKENS) ; + SubDir TOP $(dir_tokens) ; + + local test_driver = [ UnitTestDriver $(dyn_mod) : $(objs) : $(mod) ] ; + + # Use module_UNITTESTS to remember that this dynamically synthesized driver + # has a relation to `module'. This information is needed later when clients + # invoke CFlags, LFlags, and LibDepends for `module'. Not only must those + # settings be applied to `module', but we must also apply them to module's + # test driver, as well as all of the directory-based drivers which + # incorporate module's test objects. This is what the UnitTestCFlags, + # UnitTestLFlags, and UnitTestLibDepends rules do. + + $(mod)_UNITTESTS += $(test_driver) ; + + SubDir TOP $(olddir) ; +} + +# UnitTestNameTest module +# Return the name of the "check_module" target for `module'. +rule UnitTestNameTest +{ return check_$(<) ; } + +# UnitTestNameClean module +# Return the name of the "check_moduleclean" target for `module'. +rule UnitTestNameClean +{ local n = [ UnitTestNameTest $(<) ] ; return $(n)clean ; } + +# UnitTestCFlags module : flags [ : options ] +# Hook invoked automatically by CFlags. Applies `flags' also to module's test +# driver. +rule UnitTestCFlags +{ + # Empty for now. Presumably the compiler flags are needed only by the actual + # sources of `module'; not by its tests which merely link against module's + # objects. This assumption may be wrong, and may change in the future. +} + +# UnitTestLFlags module : flags [ : options ] +# Hook invoked automatically by LFlags. Applies `flags' also to module's test +# driver and to all directory-based drivers which incorporate module's test +# objects. +rule UnitTestLFlags +{ + local mod = $(1) ; + local flags = $(2) ; + local options = $(3) ; + local unittests = $($(mod)_UNITTESTS) ; + local u ; + for u in $(unittests) + { + LFlags $(u) : $(flags) : $(options) ; + } +} + +# UnitTestLibDepends module : deps +# Hook invoked automatically by LibDepends. Applies `deps' also to module's +# test driver and to all directory-based drivers which incorporate module's +# test objects. +rule UnitTestLibDepends +{ + local mod = $(1) ; + local libs = $(2) ; + local unittests = $($(mod)_UNITTESTS) ; + local u ; + for u in $(unittests) + { + LinkWith $(u) : $(libs) ; + } +} + +# UnitTestSource wrapper : files +# Create a `wrapper' which #includes all `files' (which are probably *.t test +# fragments or headers). Also scan `files' for subclasses of +# CppUnit::TestFixture and invoke CPPUNIT_TEST_SUITE_REGISTRATION() for each +# discovery. +actions UnitTestSource +{ + cat < $(<) +// Automatically generated; do not edit. +#include +#include +#include +#include +#include +$(UNITTEST_BOILERPLATE_TEST_PRE) +EOF + for i in $(>:BS); do + echo '#include "'$i'"' >> $(<) + done + for i in $(>); do + classes=`sed '/public[ ][ ]*CppUnit::TestFixture/!d;\ + s/class[ ][ ]*\([^ ][^ ]*\)[ ]*:.*/\1/' < $i` + for c in $classes; do + echo "CPPUNIT_TEST_SUITE_REGISTRATION($c);" >> $(<) + done + done + cat <> $(<) +$(UNITTEST_BOILERPLATE_TEST_POST) +EOF +} + +# UnitTestMain file +# Create a generic main() which is used for all test driver programs. It +# uses CppUnit's automated test class discovery protocol to discover classes +# containing tests, therefore it is entirely generic and can be used by any +# number of driver programs. +actions UnitTestMain +{ + cat < $(<) +// Automatically generated; do not edit. +#include +#include +#include +#include +#include +$(UNITTEST_BOILERPLATE_MAIN_PRE) +int main(int argc, char** argv) +{ + bool verbose = false; + for (int i = 1; i < argc; i++) + { + char const* s = argv[i]; + if (*s == '-') + { + do { s++; } while (*s == '-'); + verbose = (*s == 'v' || *s == 'V'); + if (verbose) + break; + } + } + + CppUnit::TextUi::TestRunner runner; + CppUnit::TestFactoryRegistry& registry = + CppUnit::TestFactoryRegistry::getRegistry(); + CppUnit::BriefTestProgressListener listener; + if (verbose) + runner.eventManager().addListener(&listener); + runner.addTest(registry.makeTest()); + return runner.run("", false, true, !verbose) ? 0 : -1; +} +$(UNITTEST_BOILERPLATE_MAIN_POST) +EOF +} + +# UnitTestRun check_target : program +# Actually run the unit test driver `program' for the invocation target +# `check_target'. +actions UnitTestRun +{ + $(>) $(UNITTEST_RUNFLAGS) +} + +} +else # !CPPUNIT.AVAILABLE +{ + +rule UnitTest { } +rule UnitTestCFlags { } +rule UnitTestLFlags { } +rule UnitTestLibDepends { } + +actions UnitTestDisabled +{ + echo "$(<): Unit testing disabled (CppUnit not installed)." +} + +Always check_all ; +Depends check : check_all ; +UnitTestDisabled check_all ; + +} + +NotFile check checkclean check_all check_allclean ; +Depends check : check_all ; +Depends clean : checkclean ; +Help check : "Run unit tests" ; diff --git a/mk/jam/unix.jam b/mk/jam/unix.jam index 48592b7de..593042f8e 100644 --- a/mk/jam/unix.jam +++ b/mk/jam/unix.jam @@ -1,159 +1,159 @@ -#============================================================================ -# Jam configuration and actions for Unix (GNU/Linux, BSD, Darwin, etc.) -# Copyright (C)2003 by Matze Braun -# -# 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) -} +#============================================================================ +# Jam configuration and actions for Unix (GNU/Linux, BSD, Darwin, etc.) +# Copyright (C)2003 by Matze Braun +# +# 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) +} diff --git a/mk/jam/variant.jam b/mk/jam/variant.jam index 7302f1cdf..0705864fd 100644 --- a/mk/jam/variant.jam +++ b/mk/jam/variant.jam @@ -1,58 +1,58 @@ -#============================================================================ -# Setup of compiler/linker flags for debug/optimize mode -# Copyright (C)2003 by Matze Braun -# -# 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 +# +# 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)/$(<) ; + } +} + diff --git a/mk/jam/win32.jam b/mk/jam/win32.jam index 62b9a976b..9d1328eb2 100644 --- a/mk/jam/win32.jam +++ b/mk/jam/win32.jam @@ -1,563 +1,563 @@ -#============================================================================ -# Jam configuration and actions for Win32 -# Copyright (C)2003 by Matze Braun -# Copyright (C)2004 by Eric Sunshine -# -# 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" ; - -CMD.WINDRES ?= windres ; -# DLL-tools not used by this script, but clients might have a need for them. -CMD.DLLTOOL ?= dlltool ; -CMD.DLLWRAP ?= dllwrap ; - -USE_DLLWRAP ?= no ; - -NASM.FLAGS += -f win32 -DEXTERNC_UNDERSCORE ; -CCFLAGS += -pipe ; -C++FLAGS += -pipe ; -LINKLIBS += -L/usr/lib/w32api -lgdi32 -lshell32 ; -PLUGIN.LFLAGS += -mwindows ; -WINDRES.FLAGS = --use-temp-file ; - -if "$(USE_DLLWRAP)" = "yes" -{ -PLUGIN.LFLAGS = [ Filter $(PLUGIN.LFLAGS) : -shared ] ; -} - -# Natively-built Jam 2.5 (and probably earlier) on Cygwin fails to perform -# library scanning properly and think that all object files need to be rebuilt -# (along with everything which depends upon them) when "jam install" follows -# "jam all", so disable this feature. -if $(OS) = "CYGWIN" -{ -NOARSCAN = true ; -} - -#---------------------------------------------------------------------------- -# resource handling -# Unfortunately we can't simply specify resources on the source list, because -# Mingw/Cygwin have the limitation that they can only link 1 resource file -# in. So we have to concatenate all resourcefiles here before compiling them. - -actions GenerateWin32VersionRc -{ - cat > $(<) << __EOF__ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION $(PACKAGE_VERSION_LIST[1]), $(PACKAGE_VERSION_LIST[2]), $(PACKAGE_VERSION_LIST[3]), $(PACKAGE_VERSION_LIST[4]) -PRODUCTVERSION $(PACKAGE_VERSION_LIST[1]), $(PACKAGE_VERSION_LIST[2]), $(PACKAGE_VERSION_LIST[3]), $(PACKAGE_VERSION_LIST[4]) -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "$(PRODUCT_NAME)" - VALUE "ProductVersion", "$(PACKAGE_VERSION)" - VALUE "FileVersion", "$(PACKAGE_VERSION)" - VALUE "LegalCopyright", "$(PACKAGE_COPYRIGHT)" - VALUE "FileDescription", "$(PRODUCT_DESCRIPTION)" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "$(PACKAGE_HOMEPAGE)" - } - } -} -__EOF__ -} - -actions GenerateWin32ManifestRc -{ - cat > $(<) << __EOF__ -// This file is generated automatically. -1 24 "$(MANIFEST_NAME)" -__EOF__ -} - -actions GenerateWin32Manifest -{ - cat > $(<) << __EOF__ - - - -> $(<) - - cat >> $(<) << __EOF__ - processorArchitecture="X86" - name="$(PRODUCT_NAME)" - type="win32" -/> -$(PRODUCT_DESCRIPTION) - - - - - - -__EOF__ -} - -actions GenerateWin32MetadataRc -{ - cat > $(<) << __EOF__ -// This file is automatically generated. - -17485 RCDATA -{ -__EOF__ - - cat $(>) | $(SED) "s:\":\"\":g" | $(SED) "s:\(.*\): \"\1\",:g" >> $(<) - - cat >> $(<) << __EOF__ - "\0" -} -__EOF__ - -} - -actions GenerateIconRc -{ - echo '1 ICON "$(>)"' > $(<) -} - -actions together CompileResources -{ - cat $(>) | $(CMD.WINDRES) $(WINDRES.FLAGS) $(RCFLAGS) --include-dir=$(>:D) -o $(<) -} - -rule CompileResources -{ - Depends $(<) : $(>) ; -} - -## Win32Resource basename : rcfiles -## Specify .rc files for the target known as basename. The .rc files should -## already have SEARCH set appropriately. -rule Win32Resource -{ - local target = $($(<)_TARGET) ; - local rcobject = [ DoObjectGrist $(<)_resource.o ] ; - LOCATE on $(rcobject) = $(LOCATE_TARGET) ; - SEARCH on $(rcobject) = $(LOCATE_TARGET) ; - - # only add 1 resource object per target - if ! $($(<)_HASWIN32RESOURCE) - { - $(<)_HASWIN32RESOURCE = yes ; - ExtraObjects $(<) : $(rcobject) ; - } - - CompileResources $(rcobject) : $(>) ; -} - -## Win32RcFlags basename : rcfiles -## Specify flags passed to the resource compiler when compiling resources -## for the target known as basename. -rule Win32RcFlags -{ - local rcobject = [ DoObjectGrist $(<)_resource.o ] ; - RCFLAGS on $(rcobject) += $(>) ; -} - -if $(USE_DLLWRAP) = "yes" -{ -rule GenerateExportDefs -{ - SEARCH on $(<) = $(LOCATE_TARGET) ; - MakeLocate $(<) : $(LOCATE_TARGET) ; - Depends $(<) : $(>) ; -} - -actions GenerateExportDefs -{ - echo "EXPORTS" > $(<) - echo " plugin_compiler" >> $(<) - $(SED) '//!d;s:[ ]*\(..*\): \1_scfInitialize:;p;s:_scfInitialize:_scfFinalize:;p;s:_scfFinalize:_Create:' < $(>) >> $(<) -} -} - -#---------------------------------------------------------------------------- -# linking part - -## ConstructApplicationTarget target : options -## Constructs the application target name (ie. foo.exe for foo) -rule ConstructApplicationTarget -{ - return $(<).exe ; -} -rule ConstructStaticLibraryTarget -{ - return lib$(<)$(SUFLIB) ; -} -rule ConstructSharedLibraryTarget -{ - return $(<)-$(COMPILER.TYPE).dll ; -} -rule ConstructSharedLibraryLinkLib -{ - return lib$(<)$(SUFLIB) ; -} -rule ConstructPluginTarget -{ - return $(<).dll ; -} - -# Also invoked by msvcgen.jam. -rule MakeVersionRc -{ - # normalize version list - local v1, v2, v3, v4 ; - v1 = $(PACKAGE_VERSION_LIST[1]) ; - if ! $(v1) { v1 = 0 ; } - v2 = $(PACKAGE_VERSION_LIST[2]) ; - if ! $(v2) { v2 = 0 ; } - v3 = $(PACKAGE_VERSION_LIST[3]) ; - if ! $(v3) { v3 = 0 ; } - v4 = $(PACKAGE_VERSION_LIST[4]) ; - if ! $(v4) { v4 = 0 ; } - PACKAGE_VERSION_LIST on $(<) = $(v1) $(v2) $(v3) $(v4) ; - - local desc = [ Description $(>) ] ; - if ! $(desc) { desc = "$(>)" ; } - PRODUCT_DESCRIPTION on $(<) = $(desc) ; - - local name ; - if $(PACKAGE_LONGNAME) { name = $(PACKAGE_LONGNAME) ; } - else if $(PACKAGE_NAME) { name = $(PACKAGE_NAME) ; } - else { name = $(>) ; } - PRODUCT_NAME on $(<) = $(name) ; - - GenerateWin32VersionRc $(<) ; -} - -rule MakeManifestFile -{ - # normalize version list - local v1, v2, v3, v4 ; - v1 = $(PACKAGE_VERSION_LIST[1]) ; - if ! $(v1) { v1 = 0 ; } - v2 = $(PACKAGE_VERSION_LIST[2]) ; - if ! $(v2) { v2 = 0 ; } - v3 = $(PACKAGE_VERSION_LIST[3]) ; - if ! $(v3) { v3 = 0 ; } - v4 = $(PACKAGE_VERSION_LIST[4]) ; - if ! $(v4) { v4 = 0 ; } - PACKAGE_VERSION_LIST on $(<) = $(v1) $(v2) $(v3) $(v4) ; - - local desc = [ Description $(>) ] ; - if ! $(desc) { desc = "$(>)" ; } - PRODUCT_DESCRIPTION on $(<) = $(desc) ; - - local name ; - if $(PACKAGE_NAME) { name = $(PACKAGE_NAME).$(>) ; } - else { name = $(>) ; } - PRODUCT_NAME on $(<) = $(name) ; - - GenerateWin32Manifest $(<) ; -} - -rule MakeManifestRc -{ - manifestfile = $(<:S=.manifest) ; - MakeLocate $(manifestfile) : [ on $(<) GetVar LOCATE ] ; - MakeManifestFile $(manifestfile) : $(>) ; - MANIFEST_NAME on $(<) = $(manifestfile:G=) ; - GenerateWin32ManifestRc $(<) ; - Depends $(<) : $(manifestfile) ; -} - -rule MakeMetadataRc -{ - local metafile = $($(>)_METAFILE) ; - local metarc = $(<) ; - Depends $(metarc) : $(metafile) ; - GenerateWin32MetadataRc $(metarc) : $(metafile) ; - Clean $(>)clean : $(metarc) ; - Clean clean : $(metarc) ; -} - -rule AppResourceWin32 -{ - local options = $(2) ; - - local versionrc = [ DoObjectGrist _versionrc.rc ] ; - LOCATE on $(versionrc) = $(LOCATE_TARGET) ; - SEARCH on $(versionrc) = $(LOCATE_TARGET) ; - - MakeVersionRc $(versionrc) : $(<) ; - Clean $(<)clean : $(versionrc) ; - Clean clean : $(versionrc) ; - Win32Resource $(<) : $(versionrc) ; - - if ! [ IsElem nomanifest : $(options) ] - { - local manifestrc = [ DoObjectGrist _manifestrc.rc ] ; - LOCATE on $(manifestrc) = $(LOCATE_TARGET) ; - SEARCH on $(manifestrc) = $(LOCATE_TARGET) ; - - MakeManifestRc $(manifestrc) : $(<) ; - Clean $(<)clean : $(manifestrc) ; - Clean clean : $(manifestrc) ; - Win32Resource $(<) : $(manifestrc) ; - } - - local icon = [ ApplicationIcon win32 : $(<) ] ; - if ! $(icon) - { - local apptype = gui ; - if [ IsElem console : $(>) ] { apptype = console ; } - icon = [ ApplicationIconDefault win32 : $(apptype) ] ; - } - if $(icon) - { - local iconcopy = [ DoObjectGrist $(icon) ] ; - MakeLocate $(iconcopy) : $(LOCATE_TARGET) ; - Depends $(iconcopy) : $(icon) ; - Copy $(iconcopy) : $(icon) ; - Clean $(<)clean : $(iconcopy) ; - Clean clean : $(iconcopy) ; - - local iconrc = [ DoObjectGrist $(<)_iconrc.rc ] ; - MakeLocate $(iconrc) : $(LOCATE_TARGET) ; - Depends $(iconrc) : $(iconcopy) ; - GenerateIconRc $(iconrc) : $(iconcopy) ; - Clean $(<)clean : $(iconrc) ; - Clean clean : $(iconrc) ; - - Win32Resource $(<) : $(iconrc) ; - } -} - -rule PluginResourceWin32 -{ - local versionrc, metarc ; - - versionrc = [ DoObjectGrist $(<)_versionrc.rc ] ; - MakeLocate $(versionrc) : $(LOCATE_TARGET) ; - MakeVersionRc $(versionrc) : $(<) ; - - if $(EMBED_META) = "yes" - { - metarc = [ DoObjectGrist $(<)_metarc.rc ] ; - MakeLocate $(metarc) : $(LOCATE_TARGET) ; - MakeMetadataRc $(metarc) : $(<) ; - } - - Clean clean : $(versionrc) $(metarc) ; - Clean $(<)clean : $(versionrc) $(metarc) ; - - Win32Resource $(<) : $(versionrc) $(metarc) ; -} - -# SystemLinkApplication target : objects : options -rule SystemLinkApplication -{ - local target = $($(<)_TARGET) ; - - Depends $(target) : $(>) ; - LinkApplication $(target) : $(>) ; - # setup clean rules - Clean clean : $(target) ; - Clean $(<)clean : $(target) ; - - AppResourceWin32 $(<) : $(3) ; -} - -rule SystemInstallApplication -{ - Depends install_bin : - [ DoInstall $(<) : $(bindir) $(2) : $(INSTALL_PROGRAM) ] ; -} - -rule SystemInstallPlugin -{ - Depends install_plugin : [ DoInstall $(<) : $(plugindir) $(2) : - $(INSTALL_PROGRAM) ] ; -} - -# SystemLinkPlugin target : objects : options -rule SystemLinkPlugin -{ - local target = $($(<)_TARGET) ; - - if $(USE_DLLWRAP) = "yes" - { - local exportdefs = [ DoObjectGrist $(<).def ] ; - NAME on $(exportdefs) = $(<) ; - GenerateExportDefs $(exportdefs) : $($(<)_METAFILE) ; - Depends $(target) : $(exportdefs) ; - EXPORTDEFS on $(target) = $(exportdefs) ; - } - - Depends $(target) : $(>) ; - LinkPlugin $(target) : $(>) ; - PluginResourceWin32 $(<) ; - - if $(EMBED_META) != "yes" - { - PluginMetaData $(<) : $($(<)_METAFILE) : $(3) ; - } - - Clean clean : $(target) ; - Clean $(<)clean : $(target) ; -} - -rule MakeDllDefFile -{ - local def = $(<) ; - local objects = $(>) ; - - MakeLocate $(def) : $(LOCATE.OBJECTS)/libs ; - WriteDefHeader $(def) ; - for i in $(objects) - { - local drectve = $(i).drectve ; - MakeLocate $(drectve) : [ on $(i) GetVar LOCATE ] ; - Depends $(drectve) : $(i) ; - Depends $(def) : $(drectve) ; - ExtractDrectve $(drectve) : $(i) ; - DrectveToDef $(def) : $(drectve) ; - Clean clean : $(drectve) ; - Clean $(def)clean : $(drectve) ; - } -} - -rule SystemLinkSharedLibrary -{ - LFlags $(<) : $(LINKLIBS) ; - - # The "crystalspace" library is so massive that it blows Jam's command line - # length limit when all object files are passed in at once to some command. - # However, a DLL, like an executable, needs to be built with all objects at - # once. - # Problem is, since dllwrap etc. don't support response files, there is no - # way to pass all objects at once to it. But, a static library can be built - # piecemeal, so we take the detour of creating a static library out of the - # DLL objects first. - # However, another bug hits us: on MinGW, symbols exported from objects in - # static libraries are not automatically exported from the DLL. - # We work this around by constructing a .DEF file with all exports of the - # DLL. Conveniently (somewhat), all exported symbols are into a section - # ".drectve" of an object file by gcc. After extracting these sections and - # some postprocessing, we finally have all .DEF entries. Phew. - local lib = $(<).a ; - MakeLocate $(lib) $(lib)($(>:BS)) : $(LOCATE.OBJECTS)/libs ; - Depends $(lib) : $(lib)($(>:BS)) ; - local i ; - for i in $(>) - { - Depends $(lib)($(i:BS)) : $(i) ; - } - Archive $(lib) : $(>) ; - Ranlib $(lib) ; - #RmTemps $(lib) : $(>) ; - - Depends $(<) : $(lib) ; - - local def = $(<).def ; - MakeDllDefFile $(def) : $(>) ; - Depends $(<) : $(def) ; - Clean clean : $(def) ; - Clean $(<)clean : $(def) ; - Depends $(<)clean : $(def)clean ; - - EXPORTDEFS on $(<) = $(def) ; - IMPLIB on $(<) = $(3) ; - Depends $(3) : $(<) ; - LinkSharedLibrary $(<) : $(lib) ; - - Clean clean : $(target) ; - Clean $(<)clean : $(target) ; -} - -actions ExtractDrectve -{ - $(CMD.OBJCOPY) -j .drectve -O binary $(>) $(<).tmp - echo >> $(<).tmp # Cheap trick to ensure there's always a .tmp file; - # the action should not break with no .drectve - no exports - # is a valid scenario. - $(CMD.STRINGS) -n 1 $(<).tmp > $(<) # Run strings since the section data may be - # padded with zeroes, get rid of those. - rm $(<).tmp -} - -actions WriteDefHeader -{ - echo "EXPORTS" > $(<) -} - -actions piecemeal together DrectveToDef -{ - for d in $(>) - do - sed -e "s/ /\\ -/g" $d | sed -e "s/-export:\(.*\)/\1/g" | sed -e "s/,data/ DATA/g" >> $(<) - done -} - -actions GenerateImportLib -{ - $(CMD.DLLTOOL) -d $(>) -l $(<) -} - -actions LinkApplication bind NEEDLIBS bind EXTRAOBJECTS -{ - $(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) -} - -if $(USE_DLLWRAP) != "yes" -{ - actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS - { - $(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) - } -} -else -{ - actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS bind EXPORTDEFS - { - $(CMD.DLLWRAP) --driver-name=$(CMD.LINK) --dllname $(<:B) --def=$(EXPORTDEFS) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) - } -} - -actions LinkSharedLibrary bind NEEDLIBS bind EXTRAOBJECTS bind EXPORTDEFS bind IMPLIB -{ - $(CMD.DLLWRAP) --driver-name=$(CMD.LINK) --dllname $(<:B).dll --def=$(EXPORTDEFS) --implib $(IMPLIB) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) - touch $(IMPLIB) # ensure the IMPLIB is always newer than the DLL, - # since the IMPLIB depends on the DLL. -} +#============================================================================ +# Jam configuration and actions for Win32 +# Copyright (C)2003 by Matze Braun +# Copyright (C)2004 by Eric Sunshine +# +# 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" ; + +CMD.WINDRES ?= windres ; +# DLL-tools not used by this script, but clients might have a need for them. +CMD.DLLTOOL ?= dlltool ; +CMD.DLLWRAP ?= dllwrap ; + +USE_DLLWRAP ?= no ; + +NASM.FLAGS += -f win32 -DEXTERNC_UNDERSCORE ; +CCFLAGS += -pipe ; +C++FLAGS += -pipe ; +LINKLIBS += -L/usr/lib/w32api -lgdi32 -lshell32 ; +PLUGIN.LFLAGS += -mwindows ; +WINDRES.FLAGS = --use-temp-file ; + +if "$(USE_DLLWRAP)" = "yes" +{ +PLUGIN.LFLAGS = [ Filter $(PLUGIN.LFLAGS) : -shared ] ; +} + +# Natively-built Jam 2.5 (and probably earlier) on Cygwin fails to perform +# library scanning properly and think that all object files need to be rebuilt +# (along with everything which depends upon them) when "jam install" follows +# "jam all", so disable this feature. +if $(OS) = "CYGWIN" +{ +NOARSCAN = true ; +} + +#---------------------------------------------------------------------------- +# resource handling +# Unfortunately we can't simply specify resources on the source list, because +# Mingw/Cygwin have the limitation that they can only link 1 resource file +# in. So we have to concatenate all resourcefiles here before compiling them. + +actions GenerateWin32VersionRc +{ + cat > $(<) << __EOF__ +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION $(PACKAGE_VERSION_LIST[1]), $(PACKAGE_VERSION_LIST[2]), $(PACKAGE_VERSION_LIST[3]), $(PACKAGE_VERSION_LIST[4]) +PRODUCTVERSION $(PACKAGE_VERSION_LIST[1]), $(PACKAGE_VERSION_LIST[2]), $(PACKAGE_VERSION_LIST[3]), $(PACKAGE_VERSION_LIST[4]) +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "$(PRODUCT_NAME)" + VALUE "ProductVersion", "$(PACKAGE_VERSION)" + VALUE "FileVersion", "$(PACKAGE_VERSION)" + VALUE "LegalCopyright", "$(PACKAGE_COPYRIGHT)" + VALUE "FileDescription", "$(PRODUCT_DESCRIPTION)" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "$(PACKAGE_HOMEPAGE)" + } + } +} +__EOF__ +} + +actions GenerateWin32ManifestRc +{ + cat > $(<) << __EOF__ +// This file is generated automatically. +1 24 "$(MANIFEST_NAME)" +__EOF__ +} + +actions GenerateWin32Manifest +{ + cat > $(<) << __EOF__ + + + +> $(<) + + cat >> $(<) << __EOF__ + processorArchitecture="X86" + name="$(PRODUCT_NAME)" + type="win32" +/> +$(PRODUCT_DESCRIPTION) + + + + + + +__EOF__ +} + +actions GenerateWin32MetadataRc +{ + cat > $(<) << __EOF__ +// This file is automatically generated. + +17485 RCDATA +{ +__EOF__ + + cat $(>) | $(SED) "s:\":\"\":g" | $(SED) "s:\(.*\): \"\1\",:g" >> $(<) + + cat >> $(<) << __EOF__ + "\0" +} +__EOF__ + +} + +actions GenerateIconRc +{ + echo '1 ICON "$(>)"' > $(<) +} + +actions together CompileResources +{ + cat $(>) | $(CMD.WINDRES) $(WINDRES.FLAGS) $(RCFLAGS) --include-dir=$(>:D) -o $(<) +} + +rule CompileResources +{ + Depends $(<) : $(>) ; +} + +## Win32Resource basename : rcfiles +## Specify .rc files for the target known as basename. The .rc files should +## already have SEARCH set appropriately. +rule Win32Resource +{ + local target = $($(<)_TARGET) ; + local rcobject = [ DoObjectGrist $(<)_resource.o ] ; + LOCATE on $(rcobject) = $(LOCATE_TARGET) ; + SEARCH on $(rcobject) = $(LOCATE_TARGET) ; + + # only add 1 resource object per target + if ! $($(<)_HASWIN32RESOURCE) + { + $(<)_HASWIN32RESOURCE = yes ; + ExtraObjects $(<) : $(rcobject) ; + } + + CompileResources $(rcobject) : $(>) ; +} + +## Win32RcFlags basename : rcfiles +## Specify flags passed to the resource compiler when compiling resources +## for the target known as basename. +rule Win32RcFlags +{ + local rcobject = [ DoObjectGrist $(<)_resource.o ] ; + RCFLAGS on $(rcobject) += $(>) ; +} + +if $(USE_DLLWRAP) = "yes" +{ +rule GenerateExportDefs +{ + SEARCH on $(<) = $(LOCATE_TARGET) ; + MakeLocate $(<) : $(LOCATE_TARGET) ; + Depends $(<) : $(>) ; +} + +actions GenerateExportDefs +{ + echo "EXPORTS" > $(<) + echo " plugin_compiler" >> $(<) + $(SED) '//!d;s:[ ]*\(..*\): \1_scfInitialize:;p;s:_scfInitialize:_scfFinalize:;p;s:_scfFinalize:_Create:' < $(>) >> $(<) +} +} + +#---------------------------------------------------------------------------- +# linking part + +## ConstructApplicationTarget target : options +## Constructs the application target name (ie. foo.exe for foo) +rule ConstructApplicationTarget +{ + return $(<).exe ; +} +rule ConstructStaticLibraryTarget +{ + return lib$(<)$(SUFLIB) ; +} +rule ConstructSharedLibraryTarget +{ + return $(<)-$(COMPILER.TYPE).dll ; +} +rule ConstructSharedLibraryLinkLib +{ + return lib$(<)$(SUFLIB) ; +} +rule ConstructPluginTarget +{ + return $(<).dll ; +} + +# Also invoked by msvcgen.jam. +rule MakeVersionRc +{ + # normalize version list + local v1, v2, v3, v4 ; + v1 = $(PACKAGE_VERSION_LIST[1]) ; + if ! $(v1) { v1 = 0 ; } + v2 = $(PACKAGE_VERSION_LIST[2]) ; + if ! $(v2) { v2 = 0 ; } + v3 = $(PACKAGE_VERSION_LIST[3]) ; + if ! $(v3) { v3 = 0 ; } + v4 = $(PACKAGE_VERSION_LIST[4]) ; + if ! $(v4) { v4 = 0 ; } + PACKAGE_VERSION_LIST on $(<) = $(v1) $(v2) $(v3) $(v4) ; + + local desc = [ Description $(>) ] ; + if ! $(desc) { desc = "$(>)" ; } + PRODUCT_DESCRIPTION on $(<) = $(desc) ; + + local name ; + if $(PACKAGE_LONGNAME) { name = $(PACKAGE_LONGNAME) ; } + else if $(PACKAGE_NAME) { name = $(PACKAGE_NAME) ; } + else { name = $(>) ; } + PRODUCT_NAME on $(<) = $(name) ; + + GenerateWin32VersionRc $(<) ; +} + +rule MakeManifestFile +{ + # normalize version list + local v1, v2, v3, v4 ; + v1 = $(PACKAGE_VERSION_LIST[1]) ; + if ! $(v1) { v1 = 0 ; } + v2 = $(PACKAGE_VERSION_LIST[2]) ; + if ! $(v2) { v2 = 0 ; } + v3 = $(PACKAGE_VERSION_LIST[3]) ; + if ! $(v3) { v3 = 0 ; } + v4 = $(PACKAGE_VERSION_LIST[4]) ; + if ! $(v4) { v4 = 0 ; } + PACKAGE_VERSION_LIST on $(<) = $(v1) $(v2) $(v3) $(v4) ; + + local desc = [ Description $(>) ] ; + if ! $(desc) { desc = "$(>)" ; } + PRODUCT_DESCRIPTION on $(<) = $(desc) ; + + local name ; + if $(PACKAGE_NAME) { name = $(PACKAGE_NAME).$(>) ; } + else { name = $(>) ; } + PRODUCT_NAME on $(<) = $(name) ; + + GenerateWin32Manifest $(<) ; +} + +rule MakeManifestRc +{ + manifestfile = $(<:S=.manifest) ; + MakeLocate $(manifestfile) : [ on $(<) GetVar LOCATE ] ; + MakeManifestFile $(manifestfile) : $(>) ; + MANIFEST_NAME on $(<) = $(manifestfile:G=) ; + GenerateWin32ManifestRc $(<) ; + Depends $(<) : $(manifestfile) ; +} + +rule MakeMetadataRc +{ + local metafile = $($(>)_METAFILE) ; + local metarc = $(<) ; + Depends $(metarc) : $(metafile) ; + GenerateWin32MetadataRc $(metarc) : $(metafile) ; + Clean $(>)clean : $(metarc) ; + Clean clean : $(metarc) ; +} + +rule AppResourceWin32 +{ + local options = $(2) ; + + local versionrc = [ DoObjectGrist _versionrc.rc ] ; + LOCATE on $(versionrc) = $(LOCATE_TARGET) ; + SEARCH on $(versionrc) = $(LOCATE_TARGET) ; + + MakeVersionRc $(versionrc) : $(<) ; + Clean $(<)clean : $(versionrc) ; + Clean clean : $(versionrc) ; + Win32Resource $(<) : $(versionrc) ; + + if ! [ IsElem nomanifest : $(options) ] + { + local manifestrc = [ DoObjectGrist _manifestrc.rc ] ; + LOCATE on $(manifestrc) = $(LOCATE_TARGET) ; + SEARCH on $(manifestrc) = $(LOCATE_TARGET) ; + + MakeManifestRc $(manifestrc) : $(<) ; + Clean $(<)clean : $(manifestrc) ; + Clean clean : $(manifestrc) ; + Win32Resource $(<) : $(manifestrc) ; + } + + local icon = [ ApplicationIcon win32 : $(<) ] ; + if ! $(icon) + { + local apptype = gui ; + if [ IsElem console : $(>) ] { apptype = console ; } + icon = [ ApplicationIconDefault win32 : $(apptype) ] ; + } + if $(icon) + { + local iconcopy = [ DoObjectGrist $(icon) ] ; + MakeLocate $(iconcopy) : $(LOCATE_TARGET) ; + Depends $(iconcopy) : $(icon) ; + Copy $(iconcopy) : $(icon) ; + Clean $(<)clean : $(iconcopy) ; + Clean clean : $(iconcopy) ; + + local iconrc = [ DoObjectGrist $(<)_iconrc.rc ] ; + MakeLocate $(iconrc) : $(LOCATE_TARGET) ; + Depends $(iconrc) : $(iconcopy) ; + GenerateIconRc $(iconrc) : $(iconcopy) ; + Clean $(<)clean : $(iconrc) ; + Clean clean : $(iconrc) ; + + Win32Resource $(<) : $(iconrc) ; + } +} + +rule PluginResourceWin32 +{ + local versionrc, metarc ; + + versionrc = [ DoObjectGrist $(<)_versionrc.rc ] ; + MakeLocate $(versionrc) : $(LOCATE_TARGET) ; + MakeVersionRc $(versionrc) : $(<) ; + + if $(EMBED_META) = "yes" + { + metarc = [ DoObjectGrist $(<)_metarc.rc ] ; + MakeLocate $(metarc) : $(LOCATE_TARGET) ; + MakeMetadataRc $(metarc) : $(<) ; + } + + Clean clean : $(versionrc) $(metarc) ; + Clean $(<)clean : $(versionrc) $(metarc) ; + + Win32Resource $(<) : $(versionrc) $(metarc) ; +} + +# SystemLinkApplication target : objects : options +rule SystemLinkApplication +{ + local target = $($(<)_TARGET) ; + + Depends $(target) : $(>) ; + LinkApplication $(target) : $(>) ; + # setup clean rules + Clean clean : $(target) ; + Clean $(<)clean : $(target) ; + + AppResourceWin32 $(<) : $(3) ; +} + +rule SystemInstallApplication +{ + Depends install_bin : + [ DoInstall $(<) : $(bindir) $(2) : $(INSTALL_PROGRAM) ] ; +} + +rule SystemInstallPlugin +{ + Depends install_plugin : [ DoInstall $(<) : $(plugindir) $(2) : + $(INSTALL_PROGRAM) ] ; +} + +# SystemLinkPlugin target : objects : options +rule SystemLinkPlugin +{ + local target = $($(<)_TARGET) ; + + if $(USE_DLLWRAP) = "yes" + { + local exportdefs = [ DoObjectGrist $(<).def ] ; + NAME on $(exportdefs) = $(<) ; + GenerateExportDefs $(exportdefs) : $($(<)_METAFILE) ; + Depends $(target) : $(exportdefs) ; + EXPORTDEFS on $(target) = $(exportdefs) ; + } + + Depends $(target) : $(>) ; + LinkPlugin $(target) : $(>) ; + PluginResourceWin32 $(<) ; + + if $(EMBED_META) != "yes" + { + PluginMetaData $(<) : $($(<)_METAFILE) : $(3) ; + } + + Clean clean : $(target) ; + Clean $(<)clean : $(target) ; +} + +rule MakeDllDefFile +{ + local def = $(<) ; + local objects = $(>) ; + + MakeLocate $(def) : $(LOCATE.OBJECTS)/libs ; + WriteDefHeader $(def) ; + for i in $(objects) + { + local drectve = $(i).drectve ; + MakeLocate $(drectve) : [ on $(i) GetVar LOCATE ] ; + Depends $(drectve) : $(i) ; + Depends $(def) : $(drectve) ; + ExtractDrectve $(drectve) : $(i) ; + DrectveToDef $(def) : $(drectve) ; + Clean clean : $(drectve) ; + Clean $(def)clean : $(drectve) ; + } +} + +rule SystemLinkSharedLibrary +{ + LFlags $(<) : $(LINKLIBS) ; + + # The "crystalspace" library is so massive that it blows Jam's command line + # length limit when all object files are passed in at once to some command. + # However, a DLL, like an executable, needs to be built with all objects at + # once. + # Problem is, since dllwrap etc. don't support response files, there is no + # way to pass all objects at once to it. But, a static library can be built + # piecemeal, so we take the detour of creating a static library out of the + # DLL objects first. + # However, another bug hits us: on MinGW, symbols exported from objects in + # static libraries are not automatically exported from the DLL. + # We work this around by constructing a .DEF file with all exports of the + # DLL. Conveniently (somewhat), all exported symbols are into a section + # ".drectve" of an object file by gcc. After extracting these sections and + # some postprocessing, we finally have all .DEF entries. Phew. + local lib = $(<).a ; + MakeLocate $(lib) $(lib)($(>:BS)) : $(LOCATE.OBJECTS)/libs ; + Depends $(lib) : $(lib)($(>:BS)) ; + local i ; + for i in $(>) + { + Depends $(lib)($(i:BS)) : $(i) ; + } + Archive $(lib) : $(>) ; + Ranlib $(lib) ; + #RmTemps $(lib) : $(>) ; + + Depends $(<) : $(lib) ; + + local def = $(<).def ; + MakeDllDefFile $(def) : $(>) ; + Depends $(<) : $(def) ; + Clean clean : $(def) ; + Clean $(<)clean : $(def) ; + Depends $(<)clean : $(def)clean ; + + EXPORTDEFS on $(<) = $(def) ; + IMPLIB on $(<) = $(3) ; + Depends $(3) : $(<) ; + LinkSharedLibrary $(<) : $(lib) ; + + Clean clean : $(target) ; + Clean $(<)clean : $(target) ; +} + +actions ExtractDrectve +{ + $(CMD.OBJCOPY) -j .drectve -O binary $(>) $(<).tmp + echo >> $(<).tmp # Cheap trick to ensure there's always a .tmp file; + # the action should not break with no .drectve - no exports + # is a valid scenario. + $(CMD.STRINGS) -n 1 $(<).tmp > $(<) # Run strings since the section data may be + # padded with zeroes, get rid of those. + rm $(<).tmp +} + +actions WriteDefHeader +{ + echo "EXPORTS" > $(<) +} + +actions piecemeal together DrectveToDef +{ + for d in $(>) + do + sed -e "s/ /\\ +/g" $d | sed -e "s/-export:\(.*\)/\1/g" | sed -e "s/,data/ DATA/g" >> $(<) + done +} + +actions GenerateImportLib +{ + $(CMD.DLLTOOL) -d $(>) -l $(<) +} + +actions LinkApplication bind NEEDLIBS bind EXTRAOBJECTS +{ + $(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) +} + +if $(USE_DLLWRAP) != "yes" +{ + actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS + { + $(CMD.LINK) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) + } +} +else +{ + actions LinkPlugin bind NEEDLIBS bind EXTRAOBJECTS bind EXPORTDEFS + { + $(CMD.DLLWRAP) --driver-name=$(CMD.LINK) --dllname $(<:B) --def=$(EXPORTDEFS) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) + } +} + +actions LinkSharedLibrary bind NEEDLIBS bind EXTRAOBJECTS bind EXPORTDEFS bind IMPLIB +{ + $(CMD.DLLWRAP) --driver-name=$(CMD.LINK) --dllname $(<:B).dll --def=$(EXPORTDEFS) --implib $(IMPLIB) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) + touch $(IMPLIB) # ensure the IMPLIB is always newer than the DLL, + # since the IMPLIB depends on the DLL. +} diff --git a/msvc/6/libbulletdynamics.dsp b/msvc/6/libbulletdynamics.dsp index 0fcf4ee03..9223f7b5d 100644 --- a/msvc/6/libbulletdynamics.dsp +++ b/msvc/6/libbulletdynamics.dsp @@ -108,6 +108,10 @@ SOURCE=..\..\BulletDynamics\ConstraintSolver\ContactConstraint.cpp # End Source File # Begin Source File +SOURCE=..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.cpp +# End Source File +# Begin Source File + SOURCE=..\..\BulletDynamics\ConstraintSolver\HingeConstraint.cpp # End Source File # Begin Source File @@ -164,6 +168,10 @@ SOURCE=..\..\BulletDynamics\ConstraintSolver\ContactSolverInfo.h # End Source File # Begin Source File +SOURCE=..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.h +# End Source File +# Begin Source File + SOURCE=..\..\BulletDynamics\ConstraintSolver\HingeConstraint.h # End Source File # Begin Source File diff --git a/msvc/7/libbulletdynamics.vcproj b/msvc/7/libbulletdynamics.vcproj index 54b97cfea..899f5a7b8 100644 --- a/msvc/7/libbulletdynamics.vcproj +++ b/msvc/7/libbulletdynamics.vcproj @@ -162,6 +162,9 @@ + + @@ -205,6 +208,9 @@ + + diff --git a/msvc/71/appColladaDemo.vcproj b/msvc/71/appColladaDemo.vcproj index dad9d9511..bbc9b902b 100644 --- a/msvc/71/appColladaDemo.vcproj +++ b/msvc/71/appColladaDemo.vcproj @@ -1,4 +1,4 @@ - + + WholeProgramOptimization="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE"> + + Name="VCPostBuildEventTool" + /> + AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common;..\..\Extras\ConvexDecomposition;..\..\Glut;..\..\Demos\OpenGL;..\..\Extras\PhysicsInterface\CcdPhysics" + Culture="1033"/> - - - + ATLMinimizesCRunTimeLibraryUsage="FALSE"> + + Name="VCPostBuildEventTool" + /> + AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common;..\..\Extras\ConvexDecomposition;..\..\Glut;..\..\Demos\OpenGL;..\..\Extras\PhysicsInterface\CcdPhysics" + Culture="1033"/> - - - - - + + + Name="VCPostBuildEventTool" + /> + AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath" + Culture="1033"/> - - + Name="VCWebDeploymentTool"/> + + Name="VCPostBuildEventTool" + /> + AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath" + Culture="1033"/> - - + Name="VCWebDeploymentTool"/> - - - - + RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.cpp"> @@ -159,9 +174,6 @@ - - @@ -174,13 +186,19 @@ + + + + + + - - @@ -188,10 +206,10 @@ RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactConstraint.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactSolverInfo.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.h"> @@ -199,18 +217,12 @@ - - - - @@ -223,13 +235,19 @@ + + + + + + + + - - - - diff --git a/msvc/71/wksbullet.sln b/msvc/71/wksbullet.sln index 04e695318..42fb20066 100644 --- a/msvc/71/wksbullet.sln +++ b/msvc/71/wksbullet.sln @@ -1,927 +1,269 @@ Microsoft Visual Studio Solution File, Format Version 8.00 +# Visual C++ Express 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appBasicSample", "appBasicSample.vcproj", "{A584DCA6-74CD-02E3-E473-0D9990CD9A84}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCcdPhysicsDemo", "appCcdPhysicsDemo.vcproj", "{7284F809-AF30-6315-88C6-86F1C0798760}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appColladaDemo", "appColladaDemo.vcproj", "{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}" - ProjectSection(ProjectDependencies) = postProject - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC} = {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC} - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {5160A878-73A5-41CA-B8D5-C3D560DD1D58} = {5160A878-73A5-41CA-B8D5-C3D560DD1D58} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5} = {3D872CA6-782B-46C9-A336-1B18C0A4FBD5} - {FF956BB3-F377-43A8-AB31-633299BDF6C6} = {FF956BB3-F377-43A8-AB31-633299BDF6C6} - {D7F466F4-2AEA-4648-BE09-024C887BC157} = {D7F466F4-2AEA-4648-BE09-024C887BC157} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCollisionDemo", "appCollisionDemo.vcproj", "{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCollisionInterfaceDemo", "appCollisionInterfaceDemo.vcproj", "{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConcaveDemo", "appConcaveDemo.vcproj", "{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConstraintDemo", "appConstraintDemo.vcproj", "{DAA547D0-0166-C085-0F93-B88CAB800F97}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appContinuousConvexCollision", "appContinuousConvexCollision.vcproj", "{801CB6D4-A45C-C9D2-B176-9711A74B9164}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConvexDecompositionDemo", "appConvexDecompositionDemo.vcproj", "{69C821C7-1E18-D894-068D-C55E063F4859}" - ProjectSection(ProjectDependencies) = postProject - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appEPAPenDepthDemo", "appEPAPenDepthDemo.vcproj", "{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appGjkConvexCastDemo", "appGjkConvexCastDemo.vcproj", "{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appRaytracer", "appRaytracer.vcproj", "{60F71B6A-F888-C449-EF49-268BB9F7C963}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appSimplexDemo", "appSimplexDemo.vcproj", "{60A1DC9D-F837-3923-E9DE-A7925394A578}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpall_bullet", "grpall_bullet.vcproj", "{6210A080-01C0-6D67-F1DB-669393175402}" - ProjectSection(ProjectDependencies) = postProject - {7284F809-AF30-6315-88C6-86F1C0798760} = {7284F809-AF30-6315-88C6-86F1C0798760} - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {60F71B6A-F888-C449-EF49-268BB9F7C963} = {60F71B6A-F888-C449-EF49-268BB9F7C963} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {60A1DC9D-F837-3923-E9DE-A7925394A578} = {60A1DC9D-F837-3923-E9DE-A7925394A578} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {A584DCA6-74CD-02E3-E473-0D9990CD9A84} = {A584DCA6-74CD-02E3-E473-0D9990CD9A84} - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} - {69C821C7-1E18-D894-068D-C55E063F4859} = {69C821C7-1E18-D894-068D-C55E063F4859} - {DAA547D0-0166-C085-0F93-B88CAB800F97} = {DAA547D0-0166-C085-0F93-B88CAB800F97} - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} - {801CB6D4-A45C-C9D2-B176-9711A74B9164} = {801CB6D4-A45C-C9D2-B176-9711A74B9164} - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpapps_bullet", "grpapps_bullet.vcproj", "{9E59B16D-0924-409C-1611-DF2207A0053F}" - ProjectSection(ProjectDependencies) = postProject - {7284F809-AF30-6315-88C6-86F1C0798760} = {7284F809-AF30-6315-88C6-86F1C0798760} - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} - {60F71B6A-F888-C449-EF49-268BB9F7C963} = {60F71B6A-F888-C449-EF49-268BB9F7C963} - {60A1DC9D-F837-3923-E9DE-A7925394A578} = {60A1DC9D-F837-3923-E9DE-A7925394A578} - {A584DCA6-74CD-02E3-E473-0D9990CD9A84} = {A584DCA6-74CD-02E3-E473-0D9990CD9A84} - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} - {69C821C7-1E18-D894-068D-C55E063F4859} = {69C821C7-1E18-D894-068D-C55E063F4859} - {DAA547D0-0166-C085-0F93-B88CAB800F97} = {DAA547D0-0166-C085-0F93-B88CAB800F97} - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} - {801CB6D4-A45C-C9D2-B176-9711A74B9164} = {801CB6D4-A45C-C9D2-B176-9711A74B9164} - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grplibs_bullet", "grplibs_bullet.vcproj", "{DFAF0062-4CD7-9AB8-0683-A6026B326F56}" - ProjectSection(ProjectDependencies) = postProject - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbullet", "libbullet.vcproj", "{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletccdphysics", "libbulletccdphysics.vcproj", "{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletdynamics", "libbulletdynamics.vcproj", "{61BD1097-CF2E-B296-DAA9-73A6FE135319}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletmath", "libbulletmath.vcproj", "{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletopenglsupport", "libbulletopenglsupport.vcproj", "{7C428E76-9271-6284-20F0-9B38ED6931E3}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletphysicsinterfacecommon", "libbulletphysicsinterfacecommon.vcproj", "{85BCCE3E-992B-B6D7-28F6-CF0A12680822}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libconvexdecomposition", "libconvexdecomposition.vcproj", "{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FColladaLib_vc7", "..\..\Extras\FCollada\FColladaLib_vc7.vcproj", "{5160A878-73A5-41CA-B8D5-C3D560DD1D58}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FCollada_vc7", "..\..\Extras\FCollada\FCollada_vc7.vcproj", "{FF956BB3-F377-43A8-AB31-633299BDF6C6}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibXML_vc7", "..\..\Extras\FCollada\LibXML\LibXML_vc7.vcproj", "{D7F466F4-2AEA-4648-BE09-024C887BC157}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FMath_vc7", "..\..\Extras\FCollada\FMath\FMath_vc7.vcproj", "{38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FUtils_vc7", "..\..\Extras\FCollada\FUtils\FUtils_vc7.vcproj", "{3D872CA6-782B-46C9-A336-1B18C0A4FBD5}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Global GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Debug DLL = Debug DLL - Debug MTD = Debug MTD - Debug Unicode = Debug Unicode - Debug Unicode DLL = Debug Unicode DLL - Debug Unicode MTD = Debug Unicode MTD - Release = Release - Release DLL = Release DLL - Release MTD = Release MTD - Release Unicode = Release Unicode - Release Unicode DLL = Release Unicode DLL - Release Unicode MTD = Release Unicode MTD + ConfigName.0 = Release + ConfigName.1 = Debug + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.4 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {7284F809-AF30-6315-88C6-86F1C0798760}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {7284F809-AF30-6315-88C6-86F1C0798760}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {7284F809-AF30-6315-88C6-86F1C0798760}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {7284F809-AF30-6315-88C6-86F1C0798760}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {7284F809-AF30-6315-88C6-86F1C0798760}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7284F809-AF30-6315-88C6-86F1C0798760}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {69C821C7-1E18-D894-068D-C55E063F4859}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {69C821C7-1E18-D894-068D-C55E063F4859}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {69C821C7-1E18-D894-068D-C55E063F4859}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {69C821C7-1E18-D894-068D-C55E063F4859}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {69C821C7-1E18-D894-068D-C55E063F4859}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {69C821C7-1E18-D894-068D-C55E063F4859}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {69C821C7-1E18-D894-068D-C55E063F4859}.6 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {6210A080-01C0-6D67-F1DB-669393175402}.0 = {A584DCA6-74CD-02E3-E473-0D9990CD9A84} + {6210A080-01C0-6D67-F1DB-669393175402}.1 = {7284F809-AF30-6315-88C6-86F1C0798760} + {6210A080-01C0-6D67-F1DB-669393175402}.2 = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} + {6210A080-01C0-6D67-F1DB-669393175402}.3 = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} + {6210A080-01C0-6D67-F1DB-669393175402}.4 = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} + {6210A080-01C0-6D67-F1DB-669393175402}.5 = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} + {6210A080-01C0-6D67-F1DB-669393175402}.6 = {DAA547D0-0166-C085-0F93-B88CAB800F97} + {6210A080-01C0-6D67-F1DB-669393175402}.7 = {801CB6D4-A45C-C9D2-B176-9711A74B9164} + {6210A080-01C0-6D67-F1DB-669393175402}.8 = {69C821C7-1E18-D894-068D-C55E063F4859} + {6210A080-01C0-6D67-F1DB-669393175402}.9 = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} + {6210A080-01C0-6D67-F1DB-669393175402}.10 = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} + {6210A080-01C0-6D67-F1DB-669393175402}.11 = {60F71B6A-F888-C449-EF49-268BB9F7C963} + {6210A080-01C0-6D67-F1DB-669393175402}.12 = {60A1DC9D-F837-3923-E9DE-A7925394A578} + {6210A080-01C0-6D67-F1DB-669393175402}.13 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {6210A080-01C0-6D67-F1DB-669393175402}.14 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {6210A080-01C0-6D67-F1DB-669393175402}.15 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6210A080-01C0-6D67-F1DB-669393175402}.16 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {6210A080-01C0-6D67-F1DB-669393175402}.17 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {6210A080-01C0-6D67-F1DB-669393175402}.18 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {6210A080-01C0-6D67-F1DB-669393175402}.19 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} + {9E59B16D-0924-409C-1611-DF2207A0053F}.0 = {A584DCA6-74CD-02E3-E473-0D9990CD9A84} + {9E59B16D-0924-409C-1611-DF2207A0053F}.1 = {7284F809-AF30-6315-88C6-86F1C0798760} + {9E59B16D-0924-409C-1611-DF2207A0053F}.2 = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} + {9E59B16D-0924-409C-1611-DF2207A0053F}.3 = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} + {9E59B16D-0924-409C-1611-DF2207A0053F}.4 = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} + {9E59B16D-0924-409C-1611-DF2207A0053F}.5 = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} + {9E59B16D-0924-409C-1611-DF2207A0053F}.6 = {DAA547D0-0166-C085-0F93-B88CAB800F97} + {9E59B16D-0924-409C-1611-DF2207A0053F}.7 = {801CB6D4-A45C-C9D2-B176-9711A74B9164} + {9E59B16D-0924-409C-1611-DF2207A0053F}.8 = {69C821C7-1E18-D894-068D-C55E063F4859} + {9E59B16D-0924-409C-1611-DF2207A0053F}.9 = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} + {9E59B16D-0924-409C-1611-DF2207A0053F}.10 = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} + {9E59B16D-0924-409C-1611-DF2207A0053F}.11 = {60F71B6A-F888-C449-EF49-268BB9F7C963} + {9E59B16D-0924-409C-1611-DF2207A0053F}.12 = {60A1DC9D-F837-3923-E9DE-A7925394A578} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.6 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug DLL.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug DLL.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug MTD.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug MTD.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode DLL.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode MTD.Build.0 = Debug|Win32 {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release.ActiveCfg = Release|Win32 {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release DLL.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release DLL.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release MTD.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release MTD.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode DLL.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode DLL.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode MTD.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode MTD.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug DLL.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug DLL.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug MTD.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug MTD.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode DLL.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode MTD.Build.0 = Debug|Win32 + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug.ActiveCfg = Debug|Win32 + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug.Build.0 = Debug|Win32 {7284F809-AF30-6315-88C6-86F1C0798760}.Release.ActiveCfg = Release|Win32 {7284F809-AF30-6315-88C6-86F1C0798760}.Release.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release DLL.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release DLL.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release MTD.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release MTD.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode DLL.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode DLL.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode MTD.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode MTD.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug DLL.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug DLL.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug MTD.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug MTD.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode DLL.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode MTD.Build.0 = Debug|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.Debug.ActiveCfg = Debug|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.Debug.Build.0 = Debug|Win32 {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release.ActiveCfg = Release|Win32 {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release DLL.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release DLL.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release MTD.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release MTD.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode DLL.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode DLL.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode MTD.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode MTD.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug DLL.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug DLL.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug MTD.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug MTD.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode DLL.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode MTD.Build.0 = Debug|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug.ActiveCfg = Debug|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug.Build.0 = Debug|Win32 {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release.ActiveCfg = Release|Win32 {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release DLL.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release DLL.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release MTD.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release MTD.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode DLL.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode DLL.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode MTD.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode MTD.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug DLL.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug DLL.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug MTD.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug MTD.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode DLL.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode MTD.Build.0 = Debug|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug.ActiveCfg = Debug|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug.Build.0 = Debug|Win32 {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release.ActiveCfg = Release|Win32 {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release DLL.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release DLL.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release MTD.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release MTD.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode DLL.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode DLL.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode MTD.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode MTD.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug DLL.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug DLL.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug MTD.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug MTD.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode DLL.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode MTD.Build.0 = Debug|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug.ActiveCfg = Debug|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug.Build.0 = Debug|Win32 {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release.ActiveCfg = Release|Win32 {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release DLL.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release DLL.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release MTD.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release MTD.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode DLL.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode DLL.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode MTD.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode MTD.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug DLL.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug DLL.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug MTD.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug MTD.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode DLL.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode MTD.Build.0 = Debug|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug.ActiveCfg = Debug|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug.Build.0 = Debug|Win32 {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release.ActiveCfg = Release|Win32 {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release DLL.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release DLL.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release MTD.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release MTD.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode DLL.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode DLL.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode MTD.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode MTD.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug DLL.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug DLL.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug MTD.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug MTD.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode DLL.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode MTD.Build.0 = Debug|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug.ActiveCfg = Debug|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug.Build.0 = Debug|Win32 {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release.ActiveCfg = Release|Win32 {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release DLL.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release DLL.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release MTD.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release MTD.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode DLL.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode DLL.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode MTD.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode MTD.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug DLL.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug DLL.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug MTD.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug MTD.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode DLL.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode MTD.Build.0 = Debug|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug.ActiveCfg = Debug|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug.Build.0 = Debug|Win32 {69C821C7-1E18-D894-068D-C55E063F4859}.Release.ActiveCfg = Release|Win32 {69C821C7-1E18-D894-068D-C55E063F4859}.Release.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release DLL.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release DLL.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release MTD.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release MTD.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode DLL.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode DLL.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode MTD.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode MTD.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug DLL.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug DLL.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug MTD.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug MTD.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode DLL.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode MTD.Build.0 = Debug|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.Debug.ActiveCfg = Debug|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.Debug.Build.0 = Debug|Win32 {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release.ActiveCfg = Release|Win32 {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release DLL.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release DLL.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release MTD.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release MTD.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode DLL.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode DLL.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode MTD.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode MTD.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug DLL.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug DLL.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug MTD.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug MTD.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode DLL.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode MTD.Build.0 = Debug|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug.ActiveCfg = Debug|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug.Build.0 = Debug|Win32 {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release.ActiveCfg = Release|Win32 {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release DLL.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release DLL.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release MTD.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release MTD.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode DLL.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode DLL.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode MTD.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode MTD.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug DLL.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug DLL.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug MTD.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug MTD.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode DLL.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode MTD.Build.0 = Debug|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug.ActiveCfg = Debug|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug.Build.0 = Debug|Win32 {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release.ActiveCfg = Release|Win32 {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release DLL.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release DLL.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release MTD.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release MTD.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode DLL.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode DLL.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode MTD.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode MTD.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug DLL.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug DLL.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug MTD.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug MTD.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode DLL.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode MTD.Build.0 = Debug|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug.ActiveCfg = Debug|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug.Build.0 = Debug|Win32 {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release.ActiveCfg = Release|Win32 {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release DLL.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release DLL.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release MTD.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release MTD.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode DLL.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode DLL.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode MTD.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode MTD.Build.0 = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug.ActiveCfg = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug.Build.0 = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug DLL.ActiveCfg = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug DLL.Build.0 = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug MTD.ActiveCfg = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug MTD.Build.0 = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug Unicode.ActiveCfg = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug Unicode.Build.0 = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug Unicode DLL.Build.0 = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Debug Unicode MTD.Build.0 = Debug|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug.ActiveCfg = Debug|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug.Build.0 = Debug|Win32 {6210A080-01C0-6D67-F1DB-669393175402}.Release.ActiveCfg = Release|Win32 {6210A080-01C0-6D67-F1DB-669393175402}.Release.Build.0 = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release DLL.ActiveCfg = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release DLL.Build.0 = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release MTD.ActiveCfg = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release MTD.Build.0 = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release Unicode.ActiveCfg = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release Unicode.Build.0 = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release Unicode DLL.ActiveCfg = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release Unicode DLL.Build.0 = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release Unicode MTD.ActiveCfg = Release|Win32 - {6210A080-01C0-6D67-F1DB-669393175402}.Release Unicode MTD.Build.0 = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug.ActiveCfg = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug.Build.0 = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug DLL.ActiveCfg = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug DLL.Build.0 = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug MTD.ActiveCfg = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug MTD.Build.0 = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug Unicode.ActiveCfg = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug Unicode.Build.0 = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug Unicode DLL.Build.0 = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug Unicode MTD.Build.0 = Debug|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.Debug.ActiveCfg = Debug|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.Debug.Build.0 = Debug|Win32 {9E59B16D-0924-409C-1611-DF2207A0053F}.Release.ActiveCfg = Release|Win32 {9E59B16D-0924-409C-1611-DF2207A0053F}.Release.Build.0 = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release DLL.ActiveCfg = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release DLL.Build.0 = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release MTD.ActiveCfg = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release MTD.Build.0 = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release Unicode.ActiveCfg = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release Unicode.Build.0 = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release Unicode DLL.ActiveCfg = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release Unicode DLL.Build.0 = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release Unicode MTD.ActiveCfg = Release|Win32 - {9E59B16D-0924-409C-1611-DF2207A0053F}.Release Unicode MTD.Build.0 = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug.ActiveCfg = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug.Build.0 = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug DLL.ActiveCfg = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug DLL.Build.0 = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug MTD.ActiveCfg = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug MTD.Build.0 = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug Unicode.ActiveCfg = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug Unicode.Build.0 = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug Unicode DLL.Build.0 = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug Unicode MTD.Build.0 = Debug|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug.ActiveCfg = Debug|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug.Build.0 = Debug|Win32 {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release.ActiveCfg = Release|Win32 {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release.Build.0 = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release DLL.ActiveCfg = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release DLL.Build.0 = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release MTD.ActiveCfg = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release MTD.Build.0 = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release Unicode.ActiveCfg = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release Unicode.Build.0 = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release Unicode DLL.ActiveCfg = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release Unicode DLL.Build.0 = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release Unicode MTD.ActiveCfg = Release|Win32 - {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release Unicode MTD.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug DLL.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug DLL.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug MTD.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug MTD.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode DLL.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode MTD.Build.0 = Debug|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug.ActiveCfg = Debug|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug.Build.0 = Debug|Win32 {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release.ActiveCfg = Release|Win32 {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release DLL.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release DLL.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release MTD.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release MTD.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode DLL.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode DLL.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode MTD.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode MTD.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug DLL.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug DLL.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug MTD.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug MTD.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode DLL.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode MTD.Build.0 = Debug|Win32 + {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug.ActiveCfg = Debug|Win32 + {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug.Build.0 = Debug|Win32 {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release.ActiveCfg = Release|Win32 {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release DLL.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release DLL.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release MTD.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release MTD.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode DLL.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode DLL.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode MTD.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode MTD.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug DLL.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug DLL.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug MTD.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug MTD.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode DLL.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode MTD.Build.0 = Debug|Win32 + {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug.ActiveCfg = Debug|Win32 + {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug.Build.0 = Debug|Win32 {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release.ActiveCfg = Release|Win32 {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release DLL.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release DLL.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release MTD.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release MTD.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode DLL.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode DLL.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode MTD.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode MTD.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug DLL.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug DLL.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug MTD.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug MTD.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode DLL.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode MTD.Build.0 = Debug|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug.ActiveCfg = Debug|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug.Build.0 = Debug|Win32 {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release.ActiveCfg = Release|Win32 {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release DLL.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release DLL.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release MTD.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release MTD.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode DLL.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode DLL.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode MTD.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode MTD.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug DLL.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug DLL.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug MTD.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug MTD.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode DLL.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode MTD.Build.0 = Debug|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug.ActiveCfg = Debug|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug.Build.0 = Debug|Win32 {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release.ActiveCfg = Release|Win32 {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release DLL.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release DLL.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release MTD.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release MTD.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode DLL.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode DLL.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode MTD.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode MTD.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug DLL.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug DLL.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug MTD.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug MTD.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode DLL.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode MTD.Build.0 = Debug|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug.ActiveCfg = Debug|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug.Build.0 = Debug|Win32 {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release.ActiveCfg = Release|Win32 {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release DLL.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release DLL.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release MTD.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release MTD.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode DLL.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode DLL.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode MTD.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode MTD.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug DLL.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug DLL.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug MTD.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug MTD.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode DLL.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode DLL.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode MTD.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode MTD.Build.0 = Debug|Win32 + {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug.ActiveCfg = Debug|Win32 + {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug.Build.0 = Debug|Win32 {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release.ActiveCfg = Release|Win32 {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release DLL.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release DLL.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release MTD.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release MTD.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode DLL.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode DLL.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode MTD.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode MTD.Build.0 = Release|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug.ActiveCfg = Debug|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug.Build.0 = Debug|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug DLL.ActiveCfg = Debug DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug DLL.Build.0 = Debug DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug MTD.ActiveCfg = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug MTD.Build.0 = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode.ActiveCfg = Debug Unicode|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode.Build.0 = Debug Unicode|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode DLL.ActiveCfg = Debug Unicode DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode DLL.Build.0 = Debug Unicode DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode MTD.ActiveCfg = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode MTD.Build.0 = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release.ActiveCfg = Release|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release.Build.0 = Release|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release DLL.ActiveCfg = Release DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release DLL.Build.0 = Release DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release MTD.ActiveCfg = Release Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release MTD.Build.0 = Release Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode.ActiveCfg = Release Unicode|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode.Build.0 = Release Unicode|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode DLL.ActiveCfg = Release Unicode DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode DLL.Build.0 = Release Unicode DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode MTD.ActiveCfg = Release Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode MTD.Build.0 = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug.ActiveCfg = Debug|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug.Build.0 = Debug|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug DLL.ActiveCfg = Debug DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug DLL.Build.0 = Debug DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug MTD.ActiveCfg = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug MTD.Build.0 = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode.ActiveCfg = Debug Unicode|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode.Build.0 = Debug Unicode|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode DLL.ActiveCfg = Debug Unicode DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode DLL.Build.0 = Debug Unicode DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode MTD.ActiveCfg = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode MTD.Build.0 = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release.ActiveCfg = Release|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release.Build.0 = Release|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release DLL.ActiveCfg = Release DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release DLL.Build.0 = Release DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release MTD.ActiveCfg = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release MTD.Build.0 = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode.ActiveCfg = Release Unicode|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode.Build.0 = Release Unicode|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode DLL.ActiveCfg = Release Unicode DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode DLL.Build.0 = Release Unicode DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode MTD.ActiveCfg = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode MTD.Build.0 = Release Unicode MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug.ActiveCfg = Debug|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug.Build.0 = Debug|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug DLL.ActiveCfg = Debug DLL|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug DLL.Build.0 = Debug DLL|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug MTD.ActiveCfg = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug MTD.Build.0 = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode.ActiveCfg = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode.Build.0 = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode DLL.ActiveCfg = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode DLL.Build.0 = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode MTD.ActiveCfg = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode MTD.Build.0 = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release.ActiveCfg = Release|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release.Build.0 = Release|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release DLL.ActiveCfg = Release DLL|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release DLL.Build.0 = Release DLL|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release MTD.ActiveCfg = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release MTD.Build.0 = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode.ActiveCfg = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode.Build.0 = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode DLL.ActiveCfg = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode DLL.Build.0 = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode MTD.ActiveCfg = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode MTD.Build.0 = Release MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug.ActiveCfg = Debug|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug.Build.0 = Debug|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug DLL.ActiveCfg = Debug DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug DLL.Build.0 = Debug DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug MTD.ActiveCfg = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug MTD.Build.0 = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode.ActiveCfg = Debug Unicode|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode.Build.0 = Debug Unicode|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode DLL.ActiveCfg = Debug Unicode DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode DLL.Build.0 = Debug Unicode DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode MTD.ActiveCfg = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode MTD.Build.0 = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release.ActiveCfg = Release|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release.Build.0 = Release|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release DLL.ActiveCfg = Release DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release DLL.Build.0 = Release DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release MTD.ActiveCfg = Release Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release MTD.Build.0 = Release Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode.ActiveCfg = Release Unicode|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode.Build.0 = Release Unicode|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode DLL.ActiveCfg = Release Unicode DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode DLL.Build.0 = Release Unicode DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode MTD.ActiveCfg = Release Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode MTD.Build.0 = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug.ActiveCfg = Debug|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug.Build.0 = Debug|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug DLL.ActiveCfg = Debug DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug DLL.Build.0 = Debug DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug MTD.ActiveCfg = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug MTD.Build.0 = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode.ActiveCfg = Debug Unicode|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode.Build.0 = Debug Unicode|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode DLL.ActiveCfg = Debug Unicode DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode DLL.Build.0 = Debug Unicode DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode MTD.ActiveCfg = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode MTD.Build.0 = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release.ActiveCfg = Release|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release.Build.0 = Release|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release DLL.ActiveCfg = Release DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release DLL.Build.0 = Release DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release MTD.ActiveCfg = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release MTD.Build.0 = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode.ActiveCfg = Release Unicode|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode.Build.0 = Release Unicode|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode DLL.ActiveCfg = Release Unicode DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode DLL.Build.0 = Release Unicode DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode MTD.ActiveCfg = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode MTD.Build.0 = Release Unicode MTD|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug.ActiveCfg = Debug|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug.Build.0 = Debug|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection diff --git a/msvc/8/appColladaDemo.vcproj b/msvc/8/appColladaDemo.vcproj index b116738ca..3db7faebe 100644 --- a/msvc/8/appColladaDemo.vcproj +++ b/msvc/8/appColladaDemo.vcproj @@ -1,244 +1,178 @@ - + + SccProjectName="" + SccLocalPath=""> + Name="Win32"/> - - - - - - - + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE"> + SuppressStartupBanner="TRUE" + Detect64BitPortabilityProblems="TRUE" + TreatWChar_tAsBuiltInType="false" + CompileAs="0"/> + Name="VCCustomBuildTool"/> + + + + + + + Culture="1033"/> + Name="VCWebServiceProxyGeneratorTool"/> - - - - - - - - + Name="VCWebDeploymentTool"/> - - - - - + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE"> + SuppressStartupBanner="TRUE" + Detect64BitPortabilityProblems="TRUE" + TreatWChar_tAsBuiltInType="false" + CompileAs="0"/> + Name="VCCustomBuildTool"/> + + + + + + + Culture="1033"/> + Name="VCWebServiceProxyGeneratorTool"/> - - - - - - - - + Name="VCWebDeploymentTool"/> - - + Filter=""> + RelativePath="..\..\Demos\ColladaDemo\ColladaDemo.cpp"> + Filter=""> + RelativePath="..\..\msvc\appColladaDemo.rc"> diff --git a/msvc/8/libbulletdynamics.vcproj b/msvc/8/libbulletdynamics.vcproj index 74b9c390a..d5f9b0f0f 100644 --- a/msvc/8/libbulletdynamics.vcproj +++ b/msvc/8/libbulletdynamics.vcproj @@ -1,18 +1,15 @@ - + + SccProjectName="" + SccLocalPath=""> + Name="Win32"/> - - - - - - - + ATLMinimizesCRunTimeLibraryUsage="FALSE"> + SuppressStartupBanner="TRUE" + Detect64BitPortabilityProblems="TRUE" + TreatWChar_tAsBuiltInType="false" + CompileAs="0"/> + Name="VCCustomBuildTool"/> - + Name="VCLinkerTool" + LinkIncremental="1" + OptimizeReferences="2" + EnableCOMDATFolding="2" + GenerateDebugInformation="TRUE" + IgnoreDefaultLibraryNames="LIBC,LIBCD,LIBCMT,LIBCMTD" + AdditionalOptions=" " + AdditionalDependencies="" + IgnoreImportLibrary="TRUE" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="" + ProgramDatabaseFile="..\..\out\release8\build\libbulletdynamics\bulletdynamics.pdb" + TargetMachine="1"/> + SuppressStartupBanner="TRUE"/> - - - + Name="VCMIDLTool" + PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS" + MkTypLibCompatible="TRUE" + SuppressStartupBanner="TRUE" + TargetEnvironment="1" + TypeLibraryName="..\..\out\release8\build\libbulletdynamics\libbulletdynamics.tlb"/> + /> + + + + + - - - - - + ATLMinimizesCRunTimeLibraryUsage="FALSE"> + SuppressStartupBanner="TRUE" + Detect64BitPortabilityProblems="TRUE" + TreatWChar_tAsBuiltInType="false" + CompileAs="0"/> + Name="VCCustomBuildTool"/> - + Name="VCLinkerTool" + LinkIncremental="2" + GenerateDebugInformation="TRUE" + IgnoreDefaultLibraryNames="LIBC,LIBCD,LIBCMT,LIBCMTD,MSVCRT" + AdditionalOptions=" " + AdditionalDependencies="" + IgnoreImportLibrary="TRUE" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="" + ProgramDatabaseFile="..\..\out\debug8\build\libbulletdynamics\bulletdynamics.pdb" + TargetMachine="1"/> + SuppressStartupBanner="TRUE"/> - - - + Name="VCMIDLTool" + PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS" + MkTypLibCompatible="TRUE" + SuppressStartupBanner="TRUE" + TargetEnvironment="1" + TypeLibraryName="..\..\out\debug8\build\libbulletdynamics\libbulletdynamics.tlb"/> + /> + + + + + - - + Filter=""> + RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactConstraint.cpp"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.cpp"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\HingeConstraint.cpp"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\OdeConstraintSolver.cpp"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\Point2PointConstraint.cpp"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\SimpleConstraintSolver.cpp"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\Solve2LinearConstraint.cpp"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\SorLcp.cpp"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\TypedConstraint.cpp"> + RelativePath="..\..\BulletDynamics\Dynamics\BU_Joint.cpp"> + RelativePath="..\..\BulletDynamics\Dynamics\ContactJoint.cpp"> + RelativePath="..\..\BulletDynamics\Dynamics\RigidBody.cpp"> + Filter=""> + RelativePath="..\..\BulletDynamics\ConstraintSolver\ConstraintSolver.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactConstraint.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactSolverInfo.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\HingeConstraint.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\JacobianEntry.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\OdeConstraintSolver.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\Point2PointConstraint.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\SimpleConstraintSolver.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\Solve2LinearConstraint.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\SorLcp.h"> + RelativePath="..\..\BulletDynamics\ConstraintSolver\TypedConstraint.h"> + RelativePath="..\..\BulletDynamics\Dynamics\BU_Joint.h"> + RelativePath="..\..\BulletDynamics\Dynamics\ContactJoint.h"> + RelativePath="..\..\BulletDynamics\Dynamics\MassProps.h"> + RelativePath="..\..\BulletDynamics\Dynamics\RigidBody.h"> diff --git a/msvc/8/wksbullet.sln b/msvc/8/wksbullet.sln index 258de70b0..7f1422d7c 100644 --- a/msvc/8/wksbullet.sln +++ b/msvc/8/wksbullet.sln @@ -1,139 +1,36 @@ Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 +# Visual C++ Express 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appBasicSample", "appBasicSample.vcproj", "{A584DCA6-74CD-02E3-E473-0D9990CD9A84}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCcdPhysicsDemo", "appCcdPhysicsDemo.vcproj", "{7284F809-AF30-6315-88C6-86F1C0798760}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appColladaDemo", "appColladaDemo.vcproj", "{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}" - ProjectSection(ProjectDependencies) = postProject - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC} = {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC} - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {5160A878-73A5-41CA-B8D5-C3D560DD1D58} = {5160A878-73A5-41CA-B8D5-C3D560DD1D58} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5} = {3D872CA6-782B-46C9-A336-1B18C0A4FBD5} - {FF956BB3-F377-43A8-AB31-633299BDF6C6} = {FF956BB3-F377-43A8-AB31-633299BDF6C6} - {D7F466F4-2AEA-4648-BE09-024C887BC157} = {D7F466F4-2AEA-4648-BE09-024C887BC157} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCollisionDemo", "appCollisionDemo.vcproj", "{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCollisionInterfaceDemo", "appCollisionInterfaceDemo.vcproj", "{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConcaveDemo", "appConcaveDemo.vcproj", "{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConstraintDemo", "appConstraintDemo.vcproj", "{DAA547D0-0166-C085-0F93-B88CAB800F97}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appContinuousConvexCollision", "appContinuousConvexCollision.vcproj", "{801CB6D4-A45C-C9D2-B176-9711A74B9164}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConvexDecompositionDemo", "appConvexDecompositionDemo.vcproj", "{69C821C7-1E18-D894-068D-C55E063F4859}" - ProjectSection(ProjectDependencies) = postProject - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appEPAPenDepthDemo", "appEPAPenDepthDemo.vcproj", "{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appGjkConvexCastDemo", "appGjkConvexCastDemo.vcproj", "{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appRaytracer", "appRaytracer.vcproj", "{60F71B6A-F888-C449-EF49-268BB9F7C963}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appSimplexDemo", "appSimplexDemo.vcproj", "{60A1DC9D-F837-3923-E9DE-A7925394A578}" - ProjectSection(ProjectDependencies) = postProject - {85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} - {7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} - EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpall_bullet", "grpall_bullet.vcproj", "{6210A080-01C0-6D67-F1DB-669393175402}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpapps_bullet", "grpapps_bullet.vcproj", "{9E59B16D-0924-409C-1611-DF2207A0053F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grplibs_bullet", "grplibs_bullet.vcproj", "{DFAF0062-4CD7-9AB8-0683-A6026B326F56}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbullet", "libbullet.vcproj", "{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}" EndProject @@ -149,841 +46,227 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletphysicsinterfaceco EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libconvexdecomposition", "libconvexdecomposition.vcproj", "{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FCollada_vc8", "..\..\Extras\FCollada\FCollada_vc8.vcproj", "{FF956BB3-F377-43A8-AB31-633299BDF6C6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FColladaLib_vc8", "..\..\Extras\FCollada\FColladaLib_vc8.vcproj", "{5160A878-73A5-41CA-B8D5-C3D560DD1D58}" - ProjectSection(ProjectDependencies) = postProject - {FF956BB3-F377-43A8-AB31-633299BDF6C6} = {FF956BB3-F377-43A8-AB31-633299BDF6C6} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FMath_vc8", "..\..\Extras\FCollada\FMath\FMath_vc8.vcproj", "{38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FUtils_vc8", "..\..\Extras\FCollada\FUtils\FUtils_vc8.vcproj", "{3D872CA6-782B-46C9-A336-1B18C0A4FBD5}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibXML_vc8", "..\..\Extras\FCollada\LibXML\LibXML_vc8.vcproj", "{D7F466F4-2AEA-4648-BE09-024C887BC157}" -EndProject Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug DLL|Win32 = Debug DLL|Win32 - Debug MTD|Win32 = Debug MTD|Win32 - Debug Unicode DLL|Win32 = Debug Unicode DLL|Win32 - Debug Unicode MTD|Win32 = Debug Unicode MTD|Win32 - Debug Unicode|Win32 = Debug Unicode|Win32 - Debug(1.3)|Win32 = Debug(1.3)|Win32 - Debug(1.4)|Win32 = Debug(1.4)|Win32 - Debug|Win32 = Debug|Win32 - Release DLL|Win32 = Release DLL|Win32 - Release MTD|Win32 = Release MTD|Win32 - Release Unicode DLL|Win32 = Release Unicode DLL|Win32 - Release Unicode MTD|Win32 = Release Unicode MTD|Win32 - Release Unicode|Win32 = Release Unicode|Win32 - Release(1.3)|Win32 = Release(1.3)|Win32 - Release(1.4)|Win32 = Release(1.4)|Win32 - Release|Win32 = Release|Win32 + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Release + ConfigName.1 = Debug EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug DLL|Win32.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug MTD|Win32.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug|Win32.ActiveCfg = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug|Win32.Build.0 = Debug|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release DLL|Win32.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release DLL|Win32.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release MTD|Win32.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release MTD|Win32.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release Unicode|Win32.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release(1.3)|Win32.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release(1.4)|Win32.Build.0 = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release|Win32.ActiveCfg = Release|Win32 - {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release|Win32.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug DLL|Win32.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug MTD|Win32.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug|Win32.ActiveCfg = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Debug|Win32.Build.0 = Debug|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release DLL|Win32.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release DLL|Win32.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release MTD|Win32.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release MTD|Win32.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release Unicode|Win32.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release(1.3)|Win32.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release(1.4)|Win32.Build.0 = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release|Win32.ActiveCfg = Release|Win32 - {7284F809-AF30-6315-88C6-86F1C0798760}.Release|Win32.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug DLL|Win32.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug MTD|Win32.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug|Win32.ActiveCfg = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug|Win32.Build.0 = Debug|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release DLL|Win32.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release DLL|Win32.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release MTD|Win32.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release MTD|Win32.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release Unicode|Win32.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release(1.3)|Win32.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release(1.4)|Win32.Build.0 = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release|Win32.ActiveCfg = Release|Win32 - {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release|Win32.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug DLL|Win32.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug MTD|Win32.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug|Win32.ActiveCfg = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug|Win32.Build.0 = Debug|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release DLL|Win32.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release DLL|Win32.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release MTD|Win32.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release MTD|Win32.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release Unicode|Win32.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release(1.3)|Win32.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release(1.4)|Win32.Build.0 = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release|Win32.ActiveCfg = Release|Win32 - {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release|Win32.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug DLL|Win32.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug MTD|Win32.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug|Win32.ActiveCfg = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug|Win32.Build.0 = Debug|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release DLL|Win32.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release DLL|Win32.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release MTD|Win32.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release MTD|Win32.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release Unicode|Win32.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release(1.3)|Win32.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release(1.4)|Win32.Build.0 = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release|Win32.ActiveCfg = Release|Win32 - {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release|Win32.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug DLL|Win32.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug MTD|Win32.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug|Win32.ActiveCfg = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug|Win32.Build.0 = Debug|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release DLL|Win32.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release DLL|Win32.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release MTD|Win32.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release MTD|Win32.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release Unicode|Win32.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release(1.3)|Win32.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release(1.4)|Win32.Build.0 = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release|Win32.ActiveCfg = Release|Win32 - {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release|Win32.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug DLL|Win32.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug MTD|Win32.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug|Win32.ActiveCfg = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug|Win32.Build.0 = Debug|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release DLL|Win32.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release DLL|Win32.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release MTD|Win32.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release MTD|Win32.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release Unicode|Win32.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release(1.3)|Win32.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release(1.4)|Win32.Build.0 = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release|Win32.ActiveCfg = Release|Win32 - {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release|Win32.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug DLL|Win32.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug MTD|Win32.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug|Win32.ActiveCfg = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug|Win32.Build.0 = Debug|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release DLL|Win32.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release DLL|Win32.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release MTD|Win32.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release MTD|Win32.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release Unicode|Win32.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release(1.3)|Win32.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release(1.4)|Win32.Build.0 = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release|Win32.ActiveCfg = Release|Win32 - {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release|Win32.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug DLL|Win32.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug MTD|Win32.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug|Win32.ActiveCfg = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Debug|Win32.Build.0 = Debug|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release DLL|Win32.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release DLL|Win32.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release MTD|Win32.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release MTD|Win32.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release Unicode|Win32.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release(1.3)|Win32.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release(1.4)|Win32.Build.0 = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release|Win32.ActiveCfg = Release|Win32 - {69C821C7-1E18-D894-068D-C55E063F4859}.Release|Win32.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug DLL|Win32.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug MTD|Win32.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug|Win32.ActiveCfg = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug|Win32.Build.0 = Debug|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release DLL|Win32.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release DLL|Win32.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release MTD|Win32.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release MTD|Win32.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release Unicode|Win32.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release(1.3)|Win32.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release(1.4)|Win32.Build.0 = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release|Win32.ActiveCfg = Release|Win32 - {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release|Win32.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug DLL|Win32.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug MTD|Win32.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug|Win32.ActiveCfg = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug|Win32.Build.0 = Debug|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release DLL|Win32.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release DLL|Win32.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release MTD|Win32.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release MTD|Win32.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release Unicode|Win32.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release(1.3)|Win32.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release(1.4)|Win32.Build.0 = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release|Win32.ActiveCfg = Release|Win32 - {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release|Win32.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug DLL|Win32.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug MTD|Win32.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug|Win32.ActiveCfg = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug|Win32.Build.0 = Debug|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release DLL|Win32.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release DLL|Win32.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release MTD|Win32.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release MTD|Win32.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release Unicode|Win32.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release(1.3)|Win32.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release(1.4)|Win32.Build.0 = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release|Win32.ActiveCfg = Release|Win32 - {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release|Win32.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug DLL|Win32.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug MTD|Win32.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug|Win32.ActiveCfg = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug|Win32.Build.0 = Debug|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release DLL|Win32.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release DLL|Win32.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release MTD|Win32.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release MTD|Win32.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release Unicode|Win32.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release(1.3)|Win32.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release(1.4)|Win32.Build.0 = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release|Win32.ActiveCfg = Release|Win32 - {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release|Win32.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug DLL|Win32.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug MTD|Win32.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug|Win32.ActiveCfg = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug|Win32.Build.0 = Debug|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release DLL|Win32.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release DLL|Win32.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release MTD|Win32.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release MTD|Win32.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release Unicode|Win32.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release(1.3)|Win32.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release(1.4)|Win32.Build.0 = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release|Win32.ActiveCfg = Release|Win32 - {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release|Win32.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug DLL|Win32.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug MTD|Win32.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug|Win32.ActiveCfg = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug|Win32.Build.0 = Debug|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release DLL|Win32.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release DLL|Win32.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release MTD|Win32.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release MTD|Win32.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release Unicode|Win32.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release(1.3)|Win32.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release(1.4)|Win32.Build.0 = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release|Win32.ActiveCfg = Release|Win32 - {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release|Win32.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug DLL|Win32.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug MTD|Win32.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug|Win32.ActiveCfg = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug|Win32.Build.0 = Debug|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release DLL|Win32.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release DLL|Win32.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release MTD|Win32.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release MTD|Win32.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release Unicode|Win32.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release(1.3)|Win32.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release(1.4)|Win32.Build.0 = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release|Win32.ActiveCfg = Release|Win32 - {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release|Win32.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug DLL|Win32.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug MTD|Win32.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug|Win32.ActiveCfg = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug|Win32.Build.0 = Debug|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release DLL|Win32.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release DLL|Win32.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release MTD|Win32.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release MTD|Win32.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release Unicode|Win32.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release(1.3)|Win32.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release(1.4)|Win32.Build.0 = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release|Win32.ActiveCfg = Release|Win32 - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release|Win32.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug DLL|Win32.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug MTD|Win32.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug|Win32.ActiveCfg = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug|Win32.Build.0 = Debug|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release DLL|Win32.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release DLL|Win32.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release MTD|Win32.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release MTD|Win32.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release Unicode|Win32.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release(1.3)|Win32.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release(1.4)|Win32.Build.0 = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release|Win32.ActiveCfg = Release|Win32 - {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release|Win32.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug DLL|Win32.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug MTD|Win32.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug|Win32.ActiveCfg = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug|Win32.Build.0 = Debug|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release DLL|Win32.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release DLL|Win32.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release MTD|Win32.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release MTD|Win32.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release Unicode|Win32.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release(1.3)|Win32.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release(1.4)|Win32.Build.0 = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release|Win32.ActiveCfg = Release|Win32 - {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release|Win32.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug DLL|Win32.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug DLL|Win32.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug MTD|Win32.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug MTD|Win32.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode DLL|Win32.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode DLL|Win32.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode MTD|Win32.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode MTD|Win32.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode|Win32.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug Unicode|Win32.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug(1.3)|Win32.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug(1.3)|Win32.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug(1.4)|Win32.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug(1.4)|Win32.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug|Win32.ActiveCfg = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug|Win32.Build.0 = Debug|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release DLL|Win32.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release DLL|Win32.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release MTD|Win32.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release MTD|Win32.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode DLL|Win32.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode DLL|Win32.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode MTD|Win32.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode MTD|Win32.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode|Win32.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release Unicode|Win32.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release(1.3)|Win32.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release(1.3)|Win32.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release(1.4)|Win32.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release(1.4)|Win32.Build.0 = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release|Win32.ActiveCfg = Release|Win32 - {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release|Win32.Build.0 = Release|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug MTD|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug MTD|Win32.Build.0 = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode DLL|Win32.ActiveCfg = Debug Unicode DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode DLL|Win32.Build.0 = Debug Unicode DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode MTD|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode MTD|Win32.Build.0 = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug(1.3)|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug(1.3)|Win32.Build.0 = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug(1.4)|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug(1.4)|Win32.Build.0 = Debug Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug|Win32.ActiveCfg = Debug|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Debug|Win32.Build.0 = Debug|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release DLL|Win32.Build.0 = Release DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release MTD|Win32.ActiveCfg = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release MTD|Win32.Build.0 = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode DLL|Win32.ActiveCfg = Release Unicode DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode DLL|Win32.Build.0 = Release Unicode DLL|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode MTD|Win32.ActiveCfg = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode MTD|Win32.Build.0 = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release Unicode|Win32.Build.0 = Release Unicode|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release(1.3)|Win32.ActiveCfg = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release(1.3)|Win32.Build.0 = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release(1.4)|Win32.ActiveCfg = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release(1.4)|Win32.Build.0 = Release Unicode MTD|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release|Win32.ActiveCfg = Release|Win32 - {FF956BB3-F377-43A8-AB31-633299BDF6C6}.Release|Win32.Build.0 = Release|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug MTD|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug MTD|Win32.Build.0 = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode DLL|Win32.ActiveCfg = Debug Unicode DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode DLL|Win32.Build.0 = Debug Unicode DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode MTD|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode MTD|Win32.Build.0 = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug(1.3)|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug(1.3)|Win32.Build.0 = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug(1.4)|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug(1.4)|Win32.Build.0 = Debug Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug|Win32.ActiveCfg = Debug|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Debug|Win32.Build.0 = Debug|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release DLL|Win32.Build.0 = Release DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release MTD|Win32.ActiveCfg = Release Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release MTD|Win32.Build.0 = Release Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode DLL|Win32.ActiveCfg = Release Unicode DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode DLL|Win32.Build.0 = Release Unicode DLL|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode MTD|Win32.ActiveCfg = Release Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode MTD|Win32.Build.0 = Release Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release Unicode|Win32.Build.0 = Release Unicode|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release(1.3)|Win32.ActiveCfg = Release Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release(1.3)|Win32.Build.0 = Release Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release(1.4)|Win32.ActiveCfg = Release Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release(1.4)|Win32.Build.0 = Release Unicode MTD|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release|Win32.ActiveCfg = Release|Win32 - {5160A878-73A5-41CA-B8D5-C3D560DD1D58}.Release|Win32.Build.0 = Release|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug MTD|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug MTD|Win32.Build.0 = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode DLL|Win32.ActiveCfg = Debug Unicode DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode DLL|Win32.Build.0 = Debug Unicode DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode MTD|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode MTD|Win32.Build.0 = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug(1.3)|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug(1.3)|Win32.Build.0 = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug(1.4)|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug(1.4)|Win32.Build.0 = Debug Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug|Win32.ActiveCfg = Debug|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Debug|Win32.Build.0 = Debug|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release DLL|Win32.Build.0 = Release DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release MTD|Win32.ActiveCfg = Release Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release MTD|Win32.Build.0 = Release Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode DLL|Win32.ActiveCfg = Release Unicode DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode DLL|Win32.Build.0 = Release Unicode DLL|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode MTD|Win32.ActiveCfg = Release Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode MTD|Win32.Build.0 = Release Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release Unicode|Win32.Build.0 = Release Unicode|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release(1.3)|Win32.ActiveCfg = Release Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release(1.3)|Win32.Build.0 = Release Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release(1.4)|Win32.ActiveCfg = Release Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release(1.4)|Win32.Build.0 = Release Unicode MTD|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release|Win32.ActiveCfg = Release|Win32 - {38BB0C01-CF6E-44D7-8AE1-5F92D38DB1DC}.Release|Win32.Build.0 = Release|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug MTD|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug MTD|Win32.Build.0 = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode DLL|Win32.ActiveCfg = Debug Unicode DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode DLL|Win32.Build.0 = Debug Unicode DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode MTD|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode MTD|Win32.Build.0 = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug(1.3)|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug(1.3)|Win32.Build.0 = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug(1.4)|Win32.ActiveCfg = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug(1.4)|Win32.Build.0 = Debug Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug|Win32.ActiveCfg = Debug|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Debug|Win32.Build.0 = Debug|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release DLL|Win32.Build.0 = Release DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release MTD|Win32.ActiveCfg = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release MTD|Win32.Build.0 = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode DLL|Win32.ActiveCfg = Release Unicode DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode DLL|Win32.Build.0 = Release Unicode DLL|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode MTD|Win32.ActiveCfg = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode MTD|Win32.Build.0 = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release Unicode|Win32.Build.0 = Release Unicode|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release(1.3)|Win32.ActiveCfg = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release(1.3)|Win32.Build.0 = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release(1.4)|Win32.ActiveCfg = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release(1.4)|Win32.Build.0 = Release Unicode MTD|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release|Win32.ActiveCfg = Release|Win32 - {3D872CA6-782B-46C9-A336-1B18C0A4FBD5}.Release|Win32.Build.0 = Release|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug DLL|Win32.Build.0 = Debug DLL|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug MTD|Win32.ActiveCfg = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug MTD|Win32.Build.0 = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode DLL|Win32.ActiveCfg = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode DLL|Win32.Build.0 = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode MTD|Win32.ActiveCfg = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode MTD|Win32.Build.0 = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode|Win32.ActiveCfg = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug Unicode|Win32.Build.0 = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug(1.3)|Win32.ActiveCfg = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug(1.3)|Win32.Build.0 = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug(1.4)|Win32.ActiveCfg = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug(1.4)|Win32.Build.0 = Debug MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug|Win32.ActiveCfg = Debug|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Debug|Win32.Build.0 = Debug|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release DLL|Win32.ActiveCfg = Release DLL|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release DLL|Win32.Build.0 = Release DLL|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release MTD|Win32.ActiveCfg = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release MTD|Win32.Build.0 = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode DLL|Win32.ActiveCfg = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode DLL|Win32.Build.0 = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode MTD|Win32.ActiveCfg = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode MTD|Win32.Build.0 = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode|Win32.ActiveCfg = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release Unicode|Win32.Build.0 = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release(1.3)|Win32.ActiveCfg = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release(1.3)|Win32.Build.0 = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release(1.4)|Win32.ActiveCfg = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release(1.4)|Win32.Build.0 = Release MTD|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release|Win32.ActiveCfg = Release|Win32 - {D7F466F4-2AEA-4648-BE09-024C887BC157}.Release|Win32.Build.0 = Release|Win32 + GlobalSection(ProjectDependencies) = postSolution + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.4 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {7284F809-AF30-6315-88C6-86F1C0798760}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {7284F809-AF30-6315-88C6-86F1C0798760}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {7284F809-AF30-6315-88C6-86F1C0798760}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {7284F809-AF30-6315-88C6-86F1C0798760}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {7284F809-AF30-6315-88C6-86F1C0798760}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {7284F809-AF30-6315-88C6-86F1C0798760}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {DAA547D0-0166-C085-0F93-B88CAB800F97}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {69C821C7-1E18-D894-068D-C55E063F4859}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {69C821C7-1E18-D894-068D-C55E063F4859}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {69C821C7-1E18-D894-068D-C55E063F4859}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {69C821C7-1E18-D894-068D-C55E063F4859}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {69C821C7-1E18-D894-068D-C55E063F4859}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {69C821C7-1E18-D894-068D-C55E063F4859}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {69C821C7-1E18-D894-068D-C55E063F4859}.6 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {60F71B6A-F888-C449-EF49-268BB9F7C963}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {60A1DC9D-F837-3923-E9DE-A7925394A578}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {6210A080-01C0-6D67-F1DB-669393175402}.0 = {A584DCA6-74CD-02E3-E473-0D9990CD9A84} + {6210A080-01C0-6D67-F1DB-669393175402}.1 = {7284F809-AF30-6315-88C6-86F1C0798760} + {6210A080-01C0-6D67-F1DB-669393175402}.2 = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} + {6210A080-01C0-6D67-F1DB-669393175402}.3 = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} + {6210A080-01C0-6D67-F1DB-669393175402}.4 = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} + {6210A080-01C0-6D67-F1DB-669393175402}.5 = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} + {6210A080-01C0-6D67-F1DB-669393175402}.6 = {DAA547D0-0166-C085-0F93-B88CAB800F97} + {6210A080-01C0-6D67-F1DB-669393175402}.7 = {801CB6D4-A45C-C9D2-B176-9711A74B9164} + {6210A080-01C0-6D67-F1DB-669393175402}.8 = {69C821C7-1E18-D894-068D-C55E063F4859} + {6210A080-01C0-6D67-F1DB-669393175402}.9 = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} + {6210A080-01C0-6D67-F1DB-669393175402}.10 = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} + {6210A080-01C0-6D67-F1DB-669393175402}.11 = {60F71B6A-F888-C449-EF49-268BB9F7C963} + {6210A080-01C0-6D67-F1DB-669393175402}.12 = {60A1DC9D-F837-3923-E9DE-A7925394A578} + {6210A080-01C0-6D67-F1DB-669393175402}.13 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {6210A080-01C0-6D67-F1DB-669393175402}.14 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {6210A080-01C0-6D67-F1DB-669393175402}.15 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {6210A080-01C0-6D67-F1DB-669393175402}.16 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {6210A080-01C0-6D67-F1DB-669393175402}.17 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {6210A080-01C0-6D67-F1DB-669393175402}.18 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {6210A080-01C0-6D67-F1DB-669393175402}.19 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} + {9E59B16D-0924-409C-1611-DF2207A0053F}.0 = {A584DCA6-74CD-02E3-E473-0D9990CD9A84} + {9E59B16D-0924-409C-1611-DF2207A0053F}.1 = {7284F809-AF30-6315-88C6-86F1C0798760} + {9E59B16D-0924-409C-1611-DF2207A0053F}.2 = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} + {9E59B16D-0924-409C-1611-DF2207A0053F}.3 = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} + {9E59B16D-0924-409C-1611-DF2207A0053F}.4 = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B} + {9E59B16D-0924-409C-1611-DF2207A0053F}.5 = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} + {9E59B16D-0924-409C-1611-DF2207A0053F}.6 = {DAA547D0-0166-C085-0F93-B88CAB800F97} + {9E59B16D-0924-409C-1611-DF2207A0053F}.7 = {801CB6D4-A45C-C9D2-B176-9711A74B9164} + {9E59B16D-0924-409C-1611-DF2207A0053F}.8 = {69C821C7-1E18-D894-068D-C55E063F4859} + {9E59B16D-0924-409C-1611-DF2207A0053F}.9 = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3} + {9E59B16D-0924-409C-1611-DF2207A0053F}.10 = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} + {9E59B16D-0924-409C-1611-DF2207A0053F}.11 = {60F71B6A-F888-C449-EF49-268BB9F7C963} + {9E59B16D-0924-409C-1611-DF2207A0053F}.12 = {60A1DC9D-F837-3923-E9DE-A7925394A578} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822} + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.6 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE + GlobalSection(ProjectConfiguration) = postSolution + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release.ActiveCfg = Release|Win32 + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Release.Build.0 = Release|Win32 + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug.ActiveCfg = Debug|Win32 + {A584DCA6-74CD-02E3-E473-0D9990CD9A84}.Debug.Build.0 = Debug|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.Release.ActiveCfg = Release|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.Release.Build.0 = Release|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.Debug.ActiveCfg = Debug|Win32 + {7284F809-AF30-6315-88C6-86F1C0798760}.Debug.Build.0 = Debug|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release.ActiveCfg = Release|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release.Build.0 = Release|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug.ActiveCfg = Debug|Win32 + {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug.Build.0 = Debug|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release.ActiveCfg = Release|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release.Build.0 = Release|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug.ActiveCfg = Debug|Win32 + {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug.Build.0 = Debug|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release.ActiveCfg = Release|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release.Build.0 = Release|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug.ActiveCfg = Debug|Win32 + {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug.Build.0 = Debug|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release.ActiveCfg = Release|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release.Build.0 = Release|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug.ActiveCfg = Debug|Win32 + {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug.Build.0 = Debug|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release.ActiveCfg = Release|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.Release.Build.0 = Release|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug.ActiveCfg = Debug|Win32 + {DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug.Build.0 = Debug|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release.ActiveCfg = Release|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release.Build.0 = Release|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug.ActiveCfg = Debug|Win32 + {801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug.Build.0 = Debug|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.Release.ActiveCfg = Release|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.Release.Build.0 = Release|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.Debug.ActiveCfg = Debug|Win32 + {69C821C7-1E18-D894-068D-C55E063F4859}.Debug.Build.0 = Debug|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release.ActiveCfg = Release|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release.Build.0 = Release|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug.ActiveCfg = Debug|Win32 + {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug.Build.0 = Debug|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release.ActiveCfg = Release|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release.Build.0 = Release|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug.ActiveCfg = Debug|Win32 + {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug.Build.0 = Debug|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release.ActiveCfg = Release|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.Release.Build.0 = Release|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug.ActiveCfg = Debug|Win32 + {60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug.Build.0 = Debug|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release.ActiveCfg = Release|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.Release.Build.0 = Release|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug.ActiveCfg = Debug|Win32 + {60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug.Build.0 = Debug|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.Release.ActiveCfg = Release|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.Release.Build.0 = Release|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.Debug.ActiveCfg = Debug|Win32 + {6210A080-01C0-6D67-F1DB-669393175402}.Debug.Build.0 = Debug|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.Release.ActiveCfg = Release|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.Release.Build.0 = Release|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug.ActiveCfg = Debug|Win32 + {9E59B16D-0924-409C-1611-DF2207A0053F}.Debug.Build.0 = Debug|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release.ActiveCfg = Release|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release.Build.0 = Release|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug.ActiveCfg = Debug|Win32 + {DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug.Build.0 = Debug|Win32 + {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release.ActiveCfg = Release|Win32 + {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release.Build.0 = Release|Win32 + {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug.ActiveCfg = Debug|Win32 + {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug.Build.0 = Debug|Win32 + {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release.ActiveCfg = Release|Win32 + {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release.Build.0 = Release|Win32 + {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug.ActiveCfg = Debug|Win32 + {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug.Build.0 = Debug|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release.ActiveCfg = Release|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release.Build.0 = Release|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug.ActiveCfg = Debug|Win32 + {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug.Build.0 = Debug|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release.ActiveCfg = Release|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release.Build.0 = Release|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug.ActiveCfg = Debug|Win32 + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug.Build.0 = Debug|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release.ActiveCfg = Release|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.Release.Build.0 = Release|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug.ActiveCfg = Debug|Win32 + {7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug.Build.0 = Debug|Win32 + {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release.ActiveCfg = Release|Win32 + {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release.Build.0 = Release|Win32 + {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug.ActiveCfg = Debug|Win32 + {85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug.Build.0 = Debug|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release.ActiveCfg = Release|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release.Build.0 = Release|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug.ActiveCfg = Debug|Win32 + {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug.Build.0 = Debug|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution EndGlobalSection EndGlobal diff --git a/msvc/appBasicSample.rc b/msvc/appBasicSample.rc index 86cfa6aae..af5aaf82a 100644 --- a/msvc/appBasicSample.rc +++ b/msvc/appBasicSample.rc @@ -1,29 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "BasicSample" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "BasicSample" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appCcdPhysicsDemo.rc b/msvc/appCcdPhysicsDemo.rc index d76b26f09..9049ccde7 100644 --- a/msvc/appCcdPhysicsDemo.rc +++ b/msvc/appCcdPhysicsDemo.rc @@ -1,31 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "CcdPhysicsDemo" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} -APPICON ICON "bullet_ico.ico" - +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "CcdPhysicsDemo" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appColladaDemo.rc b/msvc/appColladaDemo.rc index ec524bf64..2f9ae58a1 100644 --- a/msvc/appColladaDemo.rc +++ b/msvc/appColladaDemo.rc @@ -1,31 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "ColladaDemo" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} - -APPICON ICON "bullet_ico.ico" +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "ColladaDemo" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appCollisionDemo.rc b/msvc/appCollisionDemo.rc index 444f4da74..c6ebea5cb 100644 --- a/msvc/appCollisionDemo.rc +++ b/msvc/appCollisionDemo.rc @@ -1,29 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "CollisionDemo" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "CollisionDemo" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appCollisionInterfaceDemo.rc b/msvc/appCollisionInterfaceDemo.rc index 12082f106..7b4964da7 100644 --- a/msvc/appCollisionInterfaceDemo.rc +++ b/msvc/appCollisionInterfaceDemo.rc @@ -1,29 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "CollisionInterfaceDemo" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "CollisionInterfaceDemo" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appConcaveDemo.rc b/msvc/appConcaveDemo.rc index 082cdcdbe..6fdc0ffcf 100644 --- a/msvc/appConcaveDemo.rc +++ b/msvc/appConcaveDemo.rc @@ -1,29 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "ConcaveDemo" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "ConcaveDemo" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appConstraintDemo.rc b/msvc/appConstraintDemo.rc index af2aca023..f176e9b55 100644 --- a/msvc/appConstraintDemo.rc +++ b/msvc/appConstraintDemo.rc @@ -1,29 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "ConstraintDemo" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "ConstraintDemo" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appContinuousConvexCollision.rc b/msvc/appContinuousConvexCollision.rc index da25d0f01..d54369951 100644 --- a/msvc/appContinuousConvexCollision.rc +++ b/msvc/appContinuousConvexCollision.rc @@ -1,29 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "ContinuousConvexCollision" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "ContinuousConvexCollision" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appConvexDecompositionDemo.rc b/msvc/appConvexDecompositionDemo.rc index 133346539..38974cddf 100644 --- a/msvc/appConvexDecompositionDemo.rc +++ b/msvc/appConvexDecompositionDemo.rc @@ -1,31 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "ConvexDecompositionDemo" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} -APPICON ICON "bullet_ico.ico" - +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "ConvexDecompositionDemo" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appEPAPenDepthDemo.rc b/msvc/appEPAPenDepthDemo.rc index 4ddfe7039..529c3c6d7 100644 --- a/msvc/appEPAPenDepthDemo.rc +++ b/msvc/appEPAPenDepthDemo.rc @@ -1,29 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "EPAPenDepthDemo" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "EPAPenDepthDemo" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appGjkConvexCastDemo.rc b/msvc/appGjkConvexCastDemo.rc index e9fd166b7..abc554287 100644 --- a/msvc/appGjkConvexCastDemo.rc +++ b/msvc/appGjkConvexCastDemo.rc @@ -1,29 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "GjkConvexCastDemo" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "GjkConvexCastDemo" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appRaytracer.rc b/msvc/appRaytracer.rc index 8050378f0..3e9afd02b 100644 --- a/msvc/appRaytracer.rc +++ b/msvc/appRaytracer.rc @@ -1,29 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "Raytracer" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "Raytracer" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico" diff --git a/msvc/appSimplexDemo.rc b/msvc/appSimplexDemo.rc index 1e16d3359..e14e1e55a 100644 --- a/msvc/appSimplexDemo.rc +++ b/msvc/appSimplexDemo.rc @@ -1,29 +1,30 @@ -// This file is generated automatically. - -1 VERSIONINFO -FILEVERSION 1, 1, 2006, 0319 -PRODUCTVERSION 1, 1, 2006, 0319 -#ifdef CS_DEBUG -FILEFLAGS 0x1 -#else -FILEFLAGS 0x0 -#endif -{ - BLOCK "StringFileInfo" - { - BLOCK "040904E4" - { - VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" - VALUE "ProductVersion", "1.1.2006.0319" - VALUE "FileVersion", "1.1.2006.0319" - VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" - VALUE "FileDescription", "SimplexDemo" -#ifdef CS_DEBUG - VALUE "Comments", "Debug build" -#else - VALUE "Comments", "Release build" -#endif - VALUE "WWW", "http://www.continuousphysics.com/Bullet/" - } - } -} +// This file is generated automatically. + +1 VERSIONINFO +FILEVERSION 1, 5, 6, 0 +PRODUCTVERSION 1, 5, 6, 0 +#ifdef CS_DEBUG +FILEFLAGS 0x1 +#else +FILEFLAGS 0x0 +#endif +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "ProductName", "Bullet Continuous Collision Detection and Physics Library" + VALUE "ProductVersion", "1.5.6" + VALUE "FileVersion", "1.5.6" + VALUE "LegalCopyright", "Copyright (c) 2005-2006 Erwin Coumans" + VALUE "FileDescription", "SimplexDemo" +#ifdef CS_DEBUG + VALUE "Comments", "Debug build" +#else + VALUE "Comments", "Release build" +#endif + VALUE "WWW", "http://www.continuousphysics.com/Bullet/" + } + } +} +1 ICON "../msvc/bullet_ico.ico"