crystalspace-glshader-cg-2.0/0000755000175000017500000000000012162000225015520 5ustar devfildevfilcrystalspace-glshader-cg-2.0/mk/0000755000175000017500000000000011544132425016142 5ustar devfildevfilcrystalspace-glshader-cg-2.0/mk/autoconf/0000755000175000017500000000000011544132321017753 5ustar devfildevfilcrystalspace-glshader-cg-2.0/mk/autoconf/installdirs.m40000644000175000017500000001107511473743544022571 0ustar devfildevfil#----------------------------------------------------------------------------- # installdirs.m4 (c) Matze Braun # Macro for emitting the installation paths gathered by Autoconf. # # This library is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published by # the Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This library is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public # License for more details. # # You should have received a copy of the GNU Library General Public License # along with this library; if not, write to the Free Software Foundation, # Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # CS_OUTPUT_INSTALLDIRS([EMITTER], [RAW-BACKSLASHES]) # Emit installation directories collected by Autoconf. EMITTER is a macro # name, such as CS_JAMCONFIG_PROPERTY or CS_MAKEFILE_PROPERTY, which performs # the actual task of emitting the KEY/VALUE tuple. If EMITTER is omitted, # CS_JAMCONFIG_PROPERTY is used. If RAW-BACKSLASHES is not provided, then # backslashes in emitted values are each escaped with an additional # backslash. If RAW-BACKSLASHES is not the null value, then backslashes are # emitted raw. The following properties are emitted: # # prefix # exec_prefix # bindir # sbindir # libexecdir # datarootdir # datadir # sysconfdir # sharedstatedir # localstatedir # libdir # includedir # oldincludedir # infodir # mandir #----------------------------------------------------------------------------- AC_DEFUN([CS_OUTPUT_INSTALLDIRS],[ # Handle the case when no prefix is given, and the special case when a path # contains more than 2 slashes, these paths seem to be correct but Jam fails # on them. AS_IF([test $prefix = NONE], [cs_install_prefix="$ac_default_prefix"], [cs_install_prefix=`echo "$prefix" | sed -e 's:///*:/:g'`]) AS_IF([test $exec_prefix = NONE], [cs_install_exec_prefix="AS_ESCAPE([$(prefix)])"], [cs_install_exec_prefix=`echo "$exec_prefix" | sed -e 's:///*:/:g'`]) _CS_OUTPUT_INSTALL_DIRS([$1], [prefix], [CS_PREPARE_INSTALLPATH([$cs_install_prefix], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [exec_prefix], [CS_PREPARE_INSTALLPATH([$cs_install_exec_prefix], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [bindir], [CS_PREPARE_INSTALLPATH([$bindir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [sbindir], [CS_PREPARE_INSTALLPATH([$sbindir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [libexecdir], [CS_PREPARE_INSTALLPATH([$libexecdir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [datarootdir], [CS_PREPARE_INSTALLPATH([$datarootdir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [datadir], [CS_PREPARE_INSTALLPATH([$datadir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [sysconfdir], [CS_PREPARE_INSTALLPATH([$sysconfdir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [sharedstatedir], [CS_PREPARE_INSTALLPATH([$sharedstatedir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [localstatedir], [CS_PREPARE_INSTALLPATH([$localstatedir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [libdir], [CS_PREPARE_INSTALLPATH([$libdir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [includedir], [CS_PREPARE_INSTALLPATH([$includedir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [oldincludedir], [CS_PREPARE_INSTALLPATH([$oldincludedir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [infodir], [CS_PREPARE_INSTALLPATH([$infodir], [$2])]) _CS_OUTPUT_INSTALL_DIRS([$1], [mandir], [CS_PREPARE_INSTALLPATH([$mandir], [$2])]) ]) AC_DEFUN([_CS_OUTPUT_INSTALL_DIRS], [m4_default([$1], [CS_JAMCONFIG_PROPERTY])([$2], [$3])]) #----------------------------------------------------------------------------- # CS_PREPARE_INSTALLPATH(VALUE, [RAW-BACKSLASHES]) # Transform variable references of the form ${bla} to $(bla) in VALUE and # correctly quotes backslashes. This is needed if you need to emit some of # the paths from Autoconf. RAW-BACKSLASHES has the same meaning as in # CS_OUTPUT_INSTALLDIRS. #----------------------------------------------------------------------------- AC_DEFUN([CS_PREPARE_INSTALLPATH], [`echo "$1" | sed 's/\${\([[a-zA-Z_][a-zA-Z_]]*\)}/$(\1)/g;m4_ifval([$2], [s/\\/\\\\/g], [s/\\\\/\\\\\\\\/g])'`]) crystalspace-glshader-cg-2.0/mk/autoconf/emit.m40000644000175000017500000002276411473743544021206 0ustar devfildevfil# emit.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2003-2008 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_EMIT_BUILD_PROPERTY(KEY, VALUE, [EMITTER-OPTIONS], [PROPERTY-OPTIONS], # [EMITTER]) # A utility function which invokes an emitter to record the KEY/VALUE # tuple if VALUE is not the empty string (after leading and trailing # whitespace is stripped). PROPERTY-OPTIONS is a comma-separated list of # keywords which affects property emission. The following options are # recognized: # conditional - Do not emit property if VALUE is empty (the default). # default - Alias for "conditional". # unconditional - Emit property even if VALUE is empty. # For backward compatibility, if PROPERTY-OPTIONS is not one of the above # keywords and is not the empty string, then "unconditional" is assumed. # EMITTER is a macro name, such as CS_JAMCONFIG_PROPERTY or # CS_MAKEFILE_PROPERTY, which performs the actual task of emitting the # KEY/VALUE tuple. If EMITTER is omitted, CS_JAMCONFIG_PROPERTY is used. # EMITTER should also accept an optional third OPTIONS argument to which # EMITTER-OPTIONS is passed along. Common emitter options # include "append", "atomic", "conditional", "default", and # "unconditional". See the emitter-specific documentation for details. # For backward compatibility, if this macro is invoked with a non-empty # sixth argument, then "unconditional" is added to EMITTER-OPTIONS. #------------------------------------------------------------------------------ AC_DEFUN([CS_EMIT_BUILD_PROPERTY], [_CS_EMIT_BUILD_PROPERTY([$1], [$2], [$4], [m4_default([$5], [CS_JAMCONFIG_PROPERTY])], _CSEBP_EMITTER_OPTIONS([$3],[$6]))]) # _CS_EMIT_BUILD_PROPERTY(KEY, VALUE, [PROPERTY-OPTS], EMITTER, [EMITTER-OPTS]) AC_DEFUN([_CS_EMIT_BUILD_PROPERTY], [cs_build_prop_val="$2" cs_build_prop_val=CS_TRIM([$cs_build_prop_val]) CS_MEMBERSHIP_ANY([unconditional], [$3], [$4([$1], [$cs_build_prop_val], [$5])], [CS_MEMBERSHIP_ANY([conditional, default], [$3], [AS_IF([test -n "$cs_build_prop_val"], [$4([$1], [$cs_build_prop_val], [$5])])], [m4_ifval([$3], [$4([$1], [$cs_build_prop_val], [$5])], dnl Backward compat. [AS_IF([test -n "$cs_build_prop_val"], [$4([$1], [$cs_build_prop_val], [$5])])])])])]) # Backward compatibility: Apply old UNCONDITIONAL argument to EMITTER-OPTIONS. AC_DEFUN([_CSEBP_EMITTER_OPTIONS], [$1[]m4_ifval([$2], m4_ifval([$1],[[,]])[unconditional])]) #------------------------------------------------------------------------------ # CS_EMIT_BUILD_RESULT(CACHE-VAR, PREFIX, [EMITTER]) # Record the results of CS_CHECK_BUILD() or CS_CHECK_LIB_WITH() via some # emitter. If CACHE-VAR indicates that the build succeeded, then the # following properties are emitted: # # PREFIX.AVAILABLE = yes # PREFIX.CFLAGS = $CACHE-VAR_cflags # PREFIX.LFLAGS = $CACHE-VAR_lflags $CACHE-VAR_libs # # EMITTER is a macro name, such as CS_JAMCONFIG_PROPERTY or # CS_MAKEFILE_PROPERTY, which performs the actual task of emitting the # KEY/VALUE tuples. If EMITTER is omitted, CS_JAMCONFIG_PROPERTY is used. #------------------------------------------------------------------------------ AC_DEFUN([CS_EMIT_BUILD_RESULT], [AS_IF([test "$$1" = yes], [CS_EMIT_BUILD_PROPERTY([$2.AVAILABLE], [yes], [], [], [$3]) CS_EMIT_BUILD_PROPERTY([$2.CFLAGS], [$$1_cflags], [], [], [$3]) CS_EMIT_BUILD_PROPERTY([$2.LFLAGS], [$$1_lflags $$1_libs], [], [], [$3])])]) #------------------------------------------------------------------------------ # CS_EMIT_BUILD_FLAGS(MESSAGE, CACHE-VAR, FLAGS, [LANGUAGE], EMITTER-KEY, # [EMITTER-OPTIONS], [ACTION-IF-RECOGNIZED], # [ACTION-IF-NOT-RECOGNIZED], [EMITTER]) # A convenience wrapper for CS_CHECK_BUILD_FLAGS() which also records the # results via CS_EMIT_BUILD_PROPERTY(). Checks if the compiler or linker # recognizes one of a list of command-line options. MESSAGE is the # "checking" message. CACHE-VAR is the shell cache variable which # receives the flag recognized by the compiler or linker, or "no" if the # flag was not recognized. FLAGS is a whitespace-delimited list of build # tuples created with CS_CREATE_TUPLE(). Each tuple from FLAGS is # attempted in order until one is found which is recognized by the # compiler. After that, no further flags are checked. LANGUAGE is # typically either C or C++ and specifies which compiler to use for the # test. If LANGUAGE is omitted, C is used. EMITTER is a macro name, # such as CS_JAMCONFIG_PROPERTY or CS_MAKEFILE_PROPERTY, which performs # the actual task of emitting the KEY/VALUE tuples. If EMITTER is # omitted, CS_JAMCONFIG_PROPERTY is used. EMITTER-KEY is the name to # pass as the emitter's "key" argument if a usable flag is encountered. # EMITTER-OPTIONS is passed unmolested as the emitters optional third # argument. Common emitter options include "append", "atomic", # "conditional", "default", and "unconditional". See the emitter-specific # documentation for details. If the command-line option was recognized, # then ACTION-IF-RECOGNIZED is invoked, otherwise # ACTION-IF-NOT-RECOGNIZED is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_EMIT_BUILD_FLAGS], [CS_CHECK_BUILD_FLAGS([$1], [$2], [$3], [$4], [CS_EMIT_BUILD_PROPERTY([$5], [$$2], [$6], [], [$9]) $7], [$8])]) #------------------------------------------------------------------------------ # CS_EMITTER_OPTIONAL([EMITTER]) # The CS_EMIT_FOO() macros optionally accept an emitter. If no emitter is # supplied to those macros, then a default emitter is chosen. Other # macros, however, which perform testing and optionally emit the results # may wish to interpret an omitted EMITTER as a request not to emit the # results. CS_EMITTER_OPTIONAL() is a convenience macro to help in these # cases. It should be passed to one of the CS_EMIT_FOO() macros in place # of the literal EMITTER argument. It functions by re-interpretating # EMITTER as follows: # # - If EMITTER is omitted, then CS_NULL_EMITTER is returned, effectively # disabling output by the CS_EMIT_FOO() macro. # - If EMITTER is the literal string "default", "emit", or "yes", then it # returns an empty string, which signals to the CS_EMIT_FOO() macro # that is should use its default emitter. # - Any other value for EMITTER is passed along as-is to the # CS_EMIT_FOO() macro. #------------------------------------------------------------------------------ AC_DEFUN([CS_EMITTER_OPTIONAL], [m4_case([$1], [], [[CS_NULL_EMITTER]], [default], [], [emit], [], [yes], [], [[$1]])]) #------------------------------------------------------------------------------ # CS_NULL_EMITTER(KEY, VALUE, [OPTIONS]) # A do-nothing emitter suitable for use as the EMITTER argument of one of # the CS_EMIT_FOO() macros. Useful for cases when you are interested only # in the result of a check but not any emitter side-effects. #------------------------------------------------------------------------------ AC_DEFUN([CS_NULL_EMITTER], [: ]) #------------------------------------------------------------------------------ # CS_SUBST_EMITTER(KEY, VALUE, [OPTIONS]) # An emitter wrapped around AC_SUBST(). Invokes # AC_SUBST(AS_TR_SH(KEY),VALUE). OPTIONS is accepted for consistency # with other emitters but otherwise ignored. Suitable for use as the # EMITTER argument of one of the CS_EMIT_FOO() macros. The call to # AS_TR_SH() ensures that KEY is transformed into a valid shell # variable. For instance, if a macro attempts to emit MYLIB.CFLAGS and # MYLIB.LFLAGS via CS_SUBST_EMITTER(), then the names will be transformed # to MYLIB_CFLAGS and MYLIB_LFLAGS, respectively, for the invocation of # AC_SUBST(). #------------------------------------------------------------------------------ AC_DEFUN([CS_SUBST_EMITTER], [AC_SUBST(AS_TR_SH([$1]),[$2])]) #------------------------------------------------------------------------------ # CS_DEFINE_EMITTER(KEY, VALUE, [OPTIONS]) # An emitter wrapped around AC_DEFINE_UNQUOTED(). Invokes # AC_DEFINE_UNQUOTED(AS_TR_CPP(KEY),VALUE). OPTIONS is accepted for # consistency with other emitters but otherwise ignored. Suitable for # use as the EMITTER argument of one of the CS_EMIT_FOO() macros. The # call to AS_TR_CPP() ensures that KEY is a well-formed token for the # C-preprocessor. #------------------------------------------------------------------------------ AC_DEFUN([CS_DEFINE_EMITTER], [AC_DEFINE_UNQUOTED(AS_TR_CPP([$1]),[$2], [Define when feature is available])]) crystalspace-glshader-cg-2.0/mk/autoconf/checkpython.m40000644000175000017500000002210411473743544022553 0ustar devfildevfil# checkpython.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2003-2008 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_CHECK_PYTHON([EMITTER], [SDK-CHECK-DEFAULT], [WITH-DESCRIPTION]) # Check for Python and a working Python SDK. Sets the shell variable # PYTHON to the name of the Python interpreter and invokes AC_SUBST(). # The shell variable cs_cv_python is set to "yes" if a working Python SDK # is discovered, else "no". If available, then the variables # cs_cv_python_cflags, cs_cv_python_lflags, and cs_cv_python_libs are # set. (As a convenience, these variables can be emitted to an output # file with CS_EMIT_BUILD_RESULT() by passing "cs_cv_python" as its # CACHE-VAR argument.) As a convenience, the shell variable # cs_cv_python_ext is set to the suffix of Python extension modules (with # leading dot; typically ".dll" or ".so"). The SDK check can be enabled # or disabled with --with[out]-python. SDK-CHECK-DEFAULT should be # "with" or "without". If SDK-CHECK-DEFAULT is "with" or if it is # ommitted, then --with-python is the default, else --without-python is # the default. WITH-DESCRIPTION is the description to use for the # --with[out]-python option. The literal string "use" (or "do not use") # is prepended to WITH-DESCRIPTION. If omitted, WITH-DESCRIPTION defaults # to "Python". If EMITTER is provided, then CS_EMIT_BUILD_PROPERTY() and # CS_EMIT_BUILD_RESULT() are invoked with EMITTER in order to record the # results in an output file. As a convenience, if EMITTER is the literal # value "emit" or "yes", then the default emitter of # CS_EMIT_BUILD_PROPERTY() and CS_EMIT_BUILD_RESULT() will be used. When # EMITTER is provided, the following properties are emitted to the output # file: PYTHON (the actual interpreter), PYTHON.AVAILABLE ("yes" or # "no"), PYTHON.CFLAGS, PYTHON.LFLAGS, PYTHON.VERSION, and # PYTHON.MODULE_EXT. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_PYTHON], [AC_REQUIRE([CS_CHECK_PTHREAD]) CS_COMPILER_IGNORE_LONG_DOUBLE([C++], [cs_cv_prog_cxx_ignore_long_double]) AC_ARG_WITH([python], [AC_HELP_STRING([--]m4_if([$2],[without],[with],[without])[-python], m4_if([$2],[without],[use],[do not use]) m4_default([$3],[Python]))]) AS_IF([test -z "$with_python"], [with_python=m4_if([$2], [without], [no], [yes])]) CS_CHECK_TOOLS([PYTHON], [python]) AC_SUBST([PYTHON]) CS_EMIT_BUILD_PROPERTY([PYTHON],[$PYTHON],[],[],CS_EMITTER_OPTIONAL([$1])) AS_IF([test -n "$PYTHON" && test "$with_python" != no], [AC_CACHE_CHECK([Python version], [cs_cv_pyver], [cs_cv_pyver=`AC_RUN_LOG([$PYTHON -c 'import sys, string; \ print string.join(map(str,sys.version_info[[:2]]),".")'])`]) CS_EMIT_BUILD_PROPERTY([PYTHON.VERSION], [$cs_cv_pyver], [], [], CS_EMITTER_OPTIONAL([$1])) AC_CACHE_CHECK([for python SDK], [cs_cv_python_sdk], [cs_cv_pybase="python${cs_cv_pyver}" cs_cv_pybase_cflags=CS_RUN_PATH_NORMALIZE([$PYTHON -c \ 'import distutils.sysconfig; \ print "-I" + distutils.sysconfig.get_python_inc()']) cs_cv_pybase_cflags="$cs_cv_pybase_cflags \ $cs_cv_prog_cxx_ignore_long_double" # Depending upon platform and installation, link library might # reside in "get_python_lib()", "get_python_lib()/config", # "${prefix}/lib" (Unix), or "${prefix}/libs" (Windows). cs_cv_pybase_syslib=CS_RUN_PATH_NORMALIZE([$PYTHON -c \ 'import distutils.sysconfig; \ print distutils.sysconfig.get_python_lib(0,1)']) cs_cv_pybase_sysprefix=CS_RUN_PATH_NORMALIZE([$PYTHON -c \ 'import sys; print sys.prefix']) cs_cv_pybase_lflags_base='' _CS_CHECK_PYTHON_LIBDIR([cs_cv_pybase_lflags_base], [cs_cv_pybase_syslib]) cs_cv_pybase_lflags_ext="$cs_cv_pybase_lflags_base" _CS_CHECK_PYTHON_LIBDIR([cs_cv_pybase_lflags_ext], [cs_cv_pybase_syslib], [config]) _CS_CHECK_PYTHON_LIBDIR([cs_cv_pybase_sysprefix_lflags], [cs_cv_pybase_sysprefix], [lib]) _CS_CHECK_PYTHON_LIBDIR([cs_cv_pybase_sysprefix_lflags], [cs_cv_pybase_sysprefix], [libs]) cs_cv_pybase_libs=CS_RUN_PATH_NORMALIZE([$PYTHON -c \ 'import distutils.sysconfig; \ print (distutils.sysconfig.get_config_var("LIBS") or "")+" "+ \ (distutils.sysconfig.get_config_var("SYSLIBS") or "")']) cs_cv_python_ext=`AC_RUN_LOG([$PYTHON -c \ 'import distutils.sysconfig; \ print (distutils.sysconfig.get_config_var("SO") or "")'])` AS_IF([test -n "$cs_cv_pyver" && test -n "$cs_cv_pybase_cflags" && test -n "$cs_cv_pybase_lflags_base$cs_cv_pybase_sysprefix_lflags"], [cs_cv_python_sdk=yes], [cs_cv_python_sdk=no])]) # Check if Python SDK is usable. The most common library name is the # basename with a few decorations (for example, libpython2.2.a), # however some Windows libraries lack the decimal point (for example, # libpython22.a or python22.lib), so we must check for both variations. # Furthermore, MacOS/X 10.3 supplies a Python.framework, however, # earlier releases did not. Instead, Python on MacOS/X pre-10.3 uses a # one-level linker namespace, which means that loadable Python modules # do not link against the Python library; instead, unresolved symbols # in the modules are satisfied automatically by the Python executable # when the module is loaded into the executable. For this reason, # Python on MacOS/X does not even provide a Python link library. We # account for this by trying -bundle, rather than linking against the # library. AS_IF([test $cs_cv_python_sdk = yes], [CS_EMIT_BUILD_PROPERTY([PYTHON.MODULE_EXT], [$cs_cv_python_ext], [], [], CS_EMITTER_OPTIONAL([$1])) cs_pywinlib=`echo "$cs_cv_pybase" | sed 's/\.//g'` cs_pyflags="$cs_pyflags CS_CREATE_TUPLE([],[], [$cs_cv_pybase_lflags_base -framework Python])" cs_pyflags="$cs_pyflags CS_CREATE_TUPLE([],[], [$cs_cv_pybase_sysprefix_lflags -framework Python])" cs_pyflags="$cs_pyflags CS_CREATE_TUPLE([],[], [$cs_cv_pybase_lflags_ext -framework Python])" cs_pyflags="$cs_pyflags CS_CREATE_TUPLE([],[], [$cs_cv_pybase_lflags_base -l$cs_cv_pybase])" cs_pyflags="$cs_pyflags CS_CREATE_TUPLE([],[], [$cs_cv_pybase_sysprefix_lflags -l$cs_cv_pybase])" cs_pyflags="$cs_pyflags CS_CREATE_TUPLE([],[], [$cs_cv_pybase_lflags_ext -l$cs_cv_pybase])" cs_pyflags="$cs_pyflags CS_CREATE_TUPLE([],[], [$cs_cv_pybase_lflags_base -l$cs_pywinlib])" cs_pyflags="$cs_pyflags CS_CREATE_TUPLE([],[], [$cs_cv_pybase_sysprefix_lflags -l$cs_pywinlib])" cs_pyflags="$cs_pyflags CS_CREATE_TUPLE([],[], [$cs_cv_pybase_lflags_ext -l$cs_pywinlib])" cs_pyflags="$cs_pyflags CS_CREATE_TUPLE( [],[-bundle -flat_namespace -undefined suppress], [$cs_cv_pybase_lflags_base])" cs_pyflags="$cs_pyflags CS_CREATE_TUPLE( [],[-bundle -flat_namespace -undefined suppress], [$cs_cv_pybase_sysprefix_lflags])" cs_pyflags="$cs_pyflags CS_CREATE_TUPLE( [],[-bundle -flat_namespace -undefined suppress], [$cs_cv_pybase_lflags_ext])" CS_CHECK_BUILD([if python SDK is usable], [cs_cv_python], [AC_LANG_PROGRAM([[#include ]], [Py_Initialize(); Py_Finalize();])], [$cs_pyflags], [], [CS_EMIT_BUILD_RESULT([cs_cv_python], [PYTHON], CS_EMITTER_OPTIONAL([$1]))], [], [], [$cs_cv_pybase_cflags $cs_cv_sys_pthread_cflags], [ $cs_cv_sys_pthread_lflags], [$cs_cv_pybase_libs $cs_cv_sys_pthread_libs])], [cs_cv_python=no])], [cs_cv_python=no])]) # _CS_CHECK_PYTHON_LIBDIR(LFLAGS-VAR, DIR-VAR, [SUBDIR]) AC_DEFUN([_CS_CHECK_PYTHON_LIBDIR], [AS_IF([test -d "$$2[]m4_ifval([$3],[/$3],[])"], [$1="$$1 -L$$2[]m4_ifval([$3],[/$3],[])"])]) #------------------------------------------------------------------------------ # CS_EMIT_CHECK_PYTHON([SDK-CHECK-DEFAULT], [WITH-DESCRIPTION], [EMITTER]) # DEPRECATED: Previously, layered EMITTER functionality atop # CS_CHECK_PYTHON() before CS_CHECK_PYTHON() supported emitters directly. #------------------------------------------------------------------------------ AC_DEFUN([CS_EMIT_CHECK_PYTHON], [CS_CHECK_PYTHON(m4_ifval([$3], [$3], [emit]), [$1], [$2])]) crystalspace-glshader-cg-2.0/mk/autoconf/progver.m40000644000175000017500000002762611473743544021736 0ustar devfildevfil############################################################################### # progver.m4 # Written by Norman Kramer # # This library is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published by # the Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This library is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public # License for more details. # # You should have received a copy of the GNU Library General Public License # along with this library; if not, write to the Free Software Foundation, # Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # ############################################################################### # # From the input pattern we create regular expressions we send through sed # to extract the version information from the standard input to sed. # Then we extract from the resulting version string subparts. # The same happens with the supplied version string. It too is split into its # subparts according to the pattern. # Then the subparts from the gathered version string and the supplied one are # compared. # # How does the pattern look like ? # It is a sequence of 9s and _s and separators. # 9 denotes a non empty sequence of digits. # _ denotes a non empty sequence of characters from the class [a-zA-Z]. # | everything behind is optional # Everything else is treated as a separator. # Consecutive 9s and _s are compressed to contain only one of each type. # For instance "99_.9.__abc9_" will become "9_.9._abc9_". # # How we find the parts we compare ? # From this transformed string we yield the parts we will later compare. # We break up the string as follows: # Any sequence of separators represent one breakup. Additional breakups are # placed behind every 9 and _ . # So the example from above will give: # # "99_.9.__abc9_" ===compress==> "9_.9._abc9_" ===breakup==> "9" "_" "9" "_" "9" "_" # # How we create the regular expressions ? # We take the compressed pattern and quote every separator. # The we replace the 9s with [0-9][0-9]* # and the _s with [a-zA-Z][a-zA-Z]* . # The above example will become: # # "99_.9.__abc9_" ===compress==> "9_.9._abc9_" ===rexify==> # [0-9][0-9]*[a-zA-Z][a-zA-Z]*\.[0-9][0-9]*\.[a-zA-Z][a-zA-Z]*\a\b\c[0-9][0-9]*[a-zA-Z][a-zA-Z]* # # Voila. # # To yield the subparts from the string we additionally enclose the # 9s and _s with \( and \). # ############################################################################### # **************************************************************** # ** helper definitions ** # **************************************************************** m4_define([CS_VCHK_RUNTH], [m4_pushdef([i], [$1])m4_if($1,0,,[CS_VCHK_RUNTH(m4_decr($1), [$2])][$2])m4_popdef([i])]) m4_define([CS_VCHK_PREFIX], []) m4_define([CS_VCHK_SUFFIX], []) m4_define([CS_VCHK_GROUPPREFIX], [\(]) m4_define([CS_VCHK_GROUPSUFFIX], [\)]) m4_define([CS_VCHK_CHAR], [[[[a-zA-Z]]]]) m4_define([CS_VCHK_DIGIT], [[[0-9]]]) m4_define([CS_VCHK_SEQUENCE], [CS_VCHK_PREFIX[]CS_VCHK_SINGLE[]CS_VCHK_SINGLE[]*CS_VCHK_SUFFIX[]]) m4_define([CS_VCHK_OPTSEQUENCE], [CS_VCHK_PREFIX[]CS_VCHK_SINGLE[]*CS_VCHK_SUFFIX[]]) m4_define([CS_VCHK_REXSEQ], [m4_bpatsubst($1, [$2], [[]CS_VCHK_SEQUENCE[]])]) m4_define([CS_VCHK_GROUPINGON], [m4_pushdef([CS_VCHK_PREFIX], [CS_VCHK_GROUPPREFIX])m4_pushdef([CS_VCHK_SUFFIX], [CS_VCHK_GROUPSUFFIX])]) m4_define([CS_VCHK_GROUPINGOFF], [m4_popdef([CS_VCHK_SUFFIX])m4_popdef([CS_VCHK_PREFIX])]) m4_define([CS_VCHK_OPTON], [m4_pushdef([CS_VCHK_SEQUENCE], [CS_VCHK_OPTSEQUENCE])]) m4_define([CS_VCHK_OPTOFF], [m4_popdef([CS_VCHK_SEQUENCE])]) m4_define([CS_VCHK_RMOPT], [CS_VCHK_RMCHAR([$1], m4_index([$1], [|]))]) m4_define([CS_VCHK_RMCHAR], [m4_if($2,-1,[$1],m4_substr([$1], 0, $2)[]m4_substr([$1], m4_incr($2)))]) m4_define([CS_VCHK_RMALL], [m4_translit([$1], [|], [])]) m4_define([CS_VCHK_CUTOFF], [m4_if(m4_index($1,[|]),-1, [$1], [m4_substr($1, 0, m4_index($1,[|]))])]) m4_define([CS_VCHK_CYCLEOPT], [ m4_if($2,-1,, [m4_pushdef([i], CS_VCHK_CUTOFF([$1])) m4_pushdef([j], CS_VCHK_DUMMY_TAIL([$1])) CS_VCHK_CYCLEOPT( CS_VCHK_RMOPT([$1]), m4_index($1, [|]), [$3])$3 m4_popdef([i]) m4_popdef([j])]) ]) m4_define([CS_VCHK_TAIL], [m4_if(m4_index($1,[|]),-1, [], [m4_substr($1, m4_incr(m4_index($1,[|])))])]) m4_define([CS_VCHK_DUMMY_COMPRESS], [m4_bpatsubst(m4_bpatsubst([$1], [__*], [A]), [99*], [0])]) m4_define([CS_VCHK_DUMMY_TAIL], [CS_VCHK_DUMMY_COMPRESS(m4_translit(CS_VCHK_TAIL([$1]), [|], []))]) # **************************************************************** # ** FlagsOn / FlagsOff ** # **************************************************************** m4_define([CS_VCHK_FLAGSON], [m4_if($#, 0, [], $1, [], [], [$1], [group], [CS_VCHK_GROUPINGON[]], [$1], [opt], [CS_VCHK_OPTON[]])dnl m4_if($#, 0, [], $1, [], [], [CS_VCHK_FLAGSON(m4_shift($@))])]) m4_define([CS_VCHK_FLAGSOFF], [m4_if($#, 0, [], $1, [], [], $1, [group], [CS_VCHK_GROUPINGOFF[]], [$1], [opt], [CS_VCHK_OPTOFF[]])dnl m4_if($#, 0, [], $1, [], [], [CS_VCHK_FLAGSOFF(m4_shift($@))])]) # **************************************************************** # ** rexify / sedify ** # **************************************************************** m4_define([CS_VCHK_REXIFY], [m4_pushdef([CS_VCHK_SINGLE], [$1])dnl CS_VCHK_FLAGSON(m4_shift(m4_shift(m4_shift($@))))dnl CS_VCHK_REXSEQ([$3], [$2])dnl CS_VCHK_FLAGSOFF(m4_shift(m4_shift(m4_shift($@))))dnl m4_popdef([CS_VCHK_SINGLE])]) m4_define([CS_VCHK_QUOTESEP], [m4_bpatsubst($1, [[^9_]], [\\\&])]) m4_define([CS_VCHK_REXCHAR], [CS_VCHK_REXIFY([CS_VCHK_CHAR], [__*], $@)]) m4_define([CS_VCHK_REXDIGIT], [CS_VCHK_REXIFY([CS_VCHK_DIGIT], [99*], $@)]) m4_define([CS_VCHK_SEDIFY], [CS_VCHK_REXDIGIT([CS_VCHK_REXCHAR([CS_VCHK_QUOTESEP([$1])], m4_shift($@))], m4_shift($@))]) m4_define([CS_VCHK_SEDEXPRALL], [/CS_VCHK_SEDIFY([$1])/!d;s/.*\(CS_VCHK_SEDIFY([$1])\).*/\1/;q]) m4_define([CS_VCHK_SEDEXPRNTH], [/CS_VCHK_SEDIFY([$1])/!d;s/.*CS_VCHK_SEDIFY([$1],[group]).*/\$2/]) # **************************************************************** # ** Pattern splitting ** # **************************************************************** m4_define([CS_VCHK_SPLITSEP], [CS_VCHK_REXIFY([s], [[^9_][^9_]*], $@)]) m4_define([CS_VCHK_SPLITDIGIT], [CS_VCHK_REXIFY([d], [99*], $@)]) m4_define([CS_VCHK_SPLITCHAR], [CS_VCHK_REXIFY([c], [__*], $@)]) # **************************************************************** # ** return a list of 's' 'd' 'c' 'e' chars denoting the kind ** # ** pattern parts: separator, digit, char, end ** # **************************************************************** m4_define([CS_VCHK_PATTERNLIST], [m4_pushdef([CS_VCHK_SEQUENCE], [CS_VCHK_SINGLE ])dnl m4_translit(CS_VCHK_SPLITDIGIT([CS_VCHK_SPLITCHAR([CS_VCHK_SPLITSEP([$1])])]), [ ], m4_if([$2],[],[ ],[$2]))e[]dnl m4_popdef([CS_VCHK_SEQUENCE])]) # **************************************************************** # ** Build the shell commands we emit to the configure script. ** # **************************************************************** m4_define([CS_VCHK_PATCOUNT], [m4_len(m4_bpatsubst(CS_VCHK_PATTERNLIST([$1]), [[^dc]]))]) # **************************************************************************************** # ** CS_VCHK_EXTRACTVERSION(EXTRACT_CALL, MIN_VERSION, PATTERN, PRGPREFIX, COMPARISION) ** # **************************************************************************************** m4_define([CS_VCHK_EXTRACTVERSION], [cs_cv_prog_$4_is_version= cs_prog_$4_min_version= cs_prog_$4_is_suffix= cs_prog_$4_min_suffix= cs_prog_$4_is_suffix_done= cs_prog_$4_min_suffix_done= CS_VCHK_CYCLEOPT([$3], [], [test -z $cs_cv_prog_$4_is_version && cs_cv_prog_$4_is_version=`$1 | sed 'CS_VCHK_SEDEXPRALL([i])'` test -n "$cs_cv_prog_$4_is_version" && test -z $cs_prog_$4_is_suffix_done && { cs_prog_$4_is_suffix_done=yes ; cs_prog_$4_is_suffix=j ; } ]) CS_VCHK_CYCLEOPT([$3], , [test -z $cs_prog_$4_min_version && cs_prog_$4_min_version=`echo $2 | sed 'CS_VCHK_SEDEXPRALL([i])'` test -n "$cs_prog_$4_min_version" && test -z $cs_prog_$4_min_suffix_done && { cs_prog_$4_min_suffix_done=yes ; cs_prog_$4_min_suffix=j ; } ]) CS_VCHK_RUNTH([CS_VCHK_PATCOUNT([$3])], [cs_prog_$4_is_ver_[]i=`echo ${cs_cv_prog_$4_is_version}${cs_prog_$4_is_suffix} | sed 'CS_VCHK_SEDEXPRNTH([CS_VCHK_RMALL([$3])], [i])'` ]) CS_VCHK_RUNTH([CS_VCHK_PATCOUNT([$3])], [cs_prog_$4_min_ver_[]i=`echo $cs_prog_$4_min_version${cs_prog_$4_min_suffix} | sed 'CS_VCHK_SEDEXPRNTH([CS_VCHK_RMALL([$3])], [i])'` ]) AS_TR_SH([cs_cv_prog_$4_version_$2_ok])='' CS_VCHK_RUNTH([CS_VCHK_PATCOUNT([$3])], [test -z "$AS_TR_SH([cs_cv_prog_$4_version_$2_ok])" \ && { expr "$cs_prog_$4_is_ver_[]i" "$5" "$cs_prog_$4_min_ver_[]i" >/dev/null \ || AS_TR_SH([cs_cv_prog_$4_version_$2_ok])=no ; } test -z "$AS_TR_SH([cs_cv_prog_$4_version_$2_ok])" \ && { expr "$cs_prog_$4_min_ver_[]i" "$5" "$cs_prog_$4_is_ver_[]i" >/dev/null \ || AS_TR_SH([cs_cv_prog_$4_version_$2_ok])=yes ; } ]) AS_IF([test -z "$AS_TR_SH([cs_cv_prog_$4_version_$2_ok])"], [AS_TR_SH([cs_cv_prog_$4_version_$2_ok])=yes]) AS_TR_SH([cs_cv_prog_$4_version_$2_ok_annotated])="$AS_TR_SH([cs_cv_prog_$4_version_$2_ok])" AS_IF([test -n "$cs_cv_prog_$4_is_version"], [AS_TR_SH([cs_cv_prog_$4_version_$2_ok_annotated])="$AS_TR_SH([cs_cv_prog_$4_version_$2_ok_annotated]) (version $cs_cv_prog_$4_is_version)"]) ]) ############################################################################## # CS_CHECK_PROG_VERSION(PROGRAM, EXTRACT, VERSION, PATTERN, # [ACTION-IF-OKAY], [ACTION-IF-NOT-OKAY], [CMP]) # Check the version of program PROGRAM. PROGRAM is just a tag used when # composing shell variable names and in the emitted "checking..." message. The # actual version number of PROGRAM is gleaned with EXTRACT, which is shell # code, such as "$BISON -V" or "$FLEX --version". The discovered program # version is compared against VERSION. PATTERN is used to pluck the version # string from the output of EXTRACT. PATTERN will correctly match even if the # result of EXTRACT embeds the version number in a longer string. For instance, # PATTERN "9.9.9" will properly match the "1.23.45" in the string "This is foo # version 1.23.45; built on 1800/01/05". The extracted version and the # supplied version are compared with the CMP operator, as in `EXTRACTED_VERSION # CMP VERSION'. CMP defaults to `>=' if not specified. ACTION-IF-OKAY is # invoked if the comparison succeeds with respect to CMP, otherwise # ACTION-IF-NOT-OKAY is invoked. # # PATTERN literals # 9 .. marks a non empty sequence of digits # _ .. marks a non empty sequence of characters from [a-zA-Z] # | .. everything following this is optional # .. everything else is taken as separator - it is better to not try stuff # like space, slash or comma. # # A shell variable named `cs_prog_PROG_version_ok' is set to yes or no # depending upon the result of the test. A shell variable named # cs_prog_PROG_version is set to the value of the discovered program version. # Both variables may be accessed in ACTION-IF-OKAY and ACTION-IF-NOT-OKAY, if # needed. ############################################################################## AC_DEFUN([CS_CHECK_PROG_VERSION], [AC_CACHE_CHECK([if $1 version m4_default([$7],[>=]) $3], [AS_TR_SH([cs_cv_prog_$1_version_$3_ok_annotated])], [CS_VCHK_EXTRACTVERSION([$2], [$3], [$4], AS_TR_SH([$1]), m4_default([$7],[>=]))]) AS_IF([test "$AS_TR_SH([cs_cv_prog_$1_version_$3_ok])" = yes], [AS_TR_SH([cs_prog_$1_version_ok])=yes AS_TR_SH([cs_prog_$1_version])="$AS_TR_SH([cs_cv_prog_$1_is_version])" $5], [AS_TR_SH([cs_prog_$1_version_ok])=no AS_TR_SH([cs_prog_$1_version])='' $6])]) crystalspace-glshader-cg-2.0/mk/autoconf/visibility.m40000644000175000017500000002712511473743544022433 0ustar devfildevfil# visibility.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2003-2008 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_VISIBILITY_FLAG_INLINES_HIDDEN([ACTION-IF-SUPPORTED], # [ACTION-IF-NOT-SUPPORTED]) # # Check if "hidden" visibilty for C++ inline functions is supported. If it is # supported, then the appropriate compiler switch is assigned to the shell # variable cs_prog_cxx_visibility_inlines_hidden and ACTION-IF-SUPPORTED is # invoked, otherwise the shell variable is cleared and ACTION-IF-NOT-SUPPORTED # is invoked. # # IMPLEMENTATION NOTES # # There is a bug in gcc 3.4.x and at least up to 4.1.x where # -fvisibility-inlines-hidden on several architectures in combination with # -fPIC and -shared flags causes the linker to fail with a bogus errors. One # manifestation of the error states that the target library needs to be built # with -fPIC even when it has been built using that option. In other cases, # the linker complains about undefined references to various inline methods in # external libraries. Furthermore, on such installations, if Crystal Space is # built with -fvisibility-inlines-hidden, then clients linking against Crystal # Space also experience one of these bogus errors. Thus far, the most reliable # way to detect this gcc bug is to test for the anomaly by manipulating a # std::basic_string<> in a test program linked with -fPIC and -shared, and then # avoid -fvisibility-inlines-hidden if the test program fails to link. # Practical experience has shown that this test is not 100% reliable for all # cases, but it does seem to catch most, and does a better job than hard-coded # platform and compiler version checks. References: # # http://dev.gentoo.org/~kugelfang/pappy-visibility.txt # http://www.gnu.org/software/gcc/gcc-4.0/changes.html#visibility # http://www.nedprod.com/programs/gccvisibility.html # http://bugs.gentoo.org/show_bug.cgi?id=78720 # http://trac.crystalspace3d.org/trac/CS/ticket/333 # # Furthermore, there seems to be a bug on MacOS/X with gcc 4.0.x where use of # -fvisibility-inlines-hidden causes link problems with external clients which # do not specify this flag. For this reason, we also disable this flag on # MacOS/X. In particular, clients receive errors of this sort: # # /usr/bin/ld: libcrystalspace.a(scf.o) malformed object, illegal # reference for -dynamic code (reference to a coalesced section # (__TEXT,__textcoal_nt) from section (__TEXT,__text) relocation # entry (1)) # # An additional issue arises when cross-compiling from Linux to Windows using # the i586-mingw32msvc-g++ compiler. In this case, during actual compilation of # certain templates, the compiler annoyingly complains that the "visibility # attribute is not supported in this configuration", despite the fact that the # -fvisibility-inlines-hidden option is otherwise silently accepted by the # compiler. A simple test case involving a templated inline method is employed # to detect this anomaly. #------------------------------------------------------------------------------ AC_DEFUN([CS_VISIBILITY_FLAG_INLINES_HIDDEN], [AC_REQUIRE([_CS_VISIBILITY_PREPARE]) AC_REQUIRE([CS_CHECK_HOST]) AC_REQUIRE([CS_CHECK_STL]) CS_COMPILER_PIC([C++], [cs_cv_prog_cxx_pic]) # Check if compiler recognizes an option to set inline visibility to hidden. CS_CHECK_BUILD_FLAGS([for inline visibility flag], [cs_cv_prog_cxx_visibility_inlines_hidden], [CS_CREATE_TUPLE([-fvisibility-inlines-hidden])], [C++], [], [], [$cs_cv_prog_cxx_enable_errors]) cs_prog_cxx_visibility_inlines_hidden=$cs_cv_prog_cxx_visibility_inlines_hidden # Check if compiler silently accepts option but later complains that # "visibility attribute is not supported in this configuration". AS_IF([test -n "$cs_prog_cxx_visibility_inlines_hidden"], [CS_CHECK_BUILD( [if configuration supports $cs_prog_cxx_visibility_inlines_hidden], [cs_cv_prog_cxx_visibility_inlines_hidden_supported], [AC_LANG_PROGRAM( [template struct X { inline void f() {} };], [X().f();])], [], [C++], [cs_cv_prog_cxx_visibility_inlines_hidden_supported=yes], [cs_cv_prog_cxx_visibility_inlines_hidden_supported=no], [], [$cs_prog_cxx_visibility_inlines_hidden \ $cs_cv_prog_cxx_enable_errors]) AS_IF([test $cs_cv_prog_cxx_visibility_inlines_hidden_supported != yes], [cs_prog_cxx_visibility_inlines_hidden=''])]) # Check if hidden visibility handling is buggy. AS_IF([test -n "$cs_prog_cxx_visibility_inlines_hidden"], [AC_CACHE_CHECK([if $cs_prog_cxx_visibility_inlines_hidden is buggy], [cs_cv_prog_cxx_visibility_inlines_hidden_buggy], [AS_IF([test $ac_compiler_gnu = yes && test $cs_cv_libstl = yes], [AS_IF([test $cs_host_target = macosx], [cs_cv_prog_cxx_visibility_inlines_hidden_buggy=yes], [CS_BUILD_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [std::string s; s = "";])], [CS_CREATE_TUPLE( [$cs_prog_cxx_visibility_inlines_hidden \ $cs_cv_prog_cxx_pic], [$cs_cv_prog_link_shared])], [C++], [cs_cv_prog_cxx_visibility_inlines_hidden_buggy=no], [cs_cv_prog_cxx_visibility_inlines_hidden_buggy=yes], [$cs_cv_libstl_cflags], [$cs_cv_libstl_lflags], [$cs_cv_libstl_libs])])], [cs_cv_prog_cxx_visibility_inlines_hidden_buggy=no])]) AS_IF([test $cs_cv_prog_cxx_visibility_inlines_hidden_buggy = yes], [cs_prog_cxx_visibility_inlines_hidden=''])]) AS_IF([test -n "$cs_prog_cxx_visibility_inlines_hidden"], [$1], [$2])]) #------------------------------------------------------------------------------ # CS_VISIBILITY_FLAG_HIDDEN([LANGUAGE], [CACHE-VAR], [ACTION-IF-SUPPORTED], # [ACTION-IF-NOT-SUPPORTED]) # Check if setting default symbol visibilty to "hidden" is supported. If # so, then the appropriate compiler switch is assigned to CACHE-VAR, or # to cs_cv_prog_{language}_visibility_hidden if CACHE-VAR is omitted, and # ACTION-IF-SUPPORTED is invoked. Otherwise, the cache variable is # cleared and ACTION-IF-NOT-SUPPORTED is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_VISIBILITY_FLAG_HIDDEN], [_CS_CHECK_VISIBILITY([hidden], [$1], [$2], [$3], [$4])]) #------------------------------------------------------------------------------ # CS_VISIBILITY_FLAG_DEFAULT([LANGUAGE], [CACHE-VAR], [ACTION-IF-SUPPORTED], # [ACTION-IF-NOT-SUPPORTED]) # Check if setting default symbol visibilty to "default" is supported. # If so, then the appropriate compiler switch is assigned to CACHE-VAR, # or to cs_cv_prog_{language}_visibility_default if CACHE-VAR is omitted, # and ACTION-IF-SUPPORTED is invoked. Otherwise, the cache variable is # cleared and ACTION-IF-NOT-SUPPORTED is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_VISIBILITY_FLAG_DEFAULT], [_CS_CHECK_VISIBILITY([default], [$1], [$2], [$3], [$4])]) #------------------------------------------------------------------------------ # _CS_CHECK_VISIBILITY(VISIBILITY, [LANGUAGE], [CACHE-VAR], # [ACTION-IF-SUPPORTED], [ACTION-IF-NOT-SUPPORTED]) # Support macro for CS_VISIBILITY_FLAG_HIDDEN and # CS_VISIBILITY_FLAG_DEFAULT which performs the described functionality. #------------------------------------------------------------------------------ AC_DEFUN([_CS_CHECK_VISIBILITY], [AC_REQUIRE([_CS_VISIBILITY_PREPARE]) CS_CHECK_BUILD_FLAGS([for $1 symbol visibility flag], [_CS_VISIBILITY_CACHE_VAR([$3], [$2], [visibility_$1])], [CS_CREATE_TUPLE([-fvisibility=$1])], [$2], [$4], [$5], [$CS_TR_SH_lang([cs_cv_prog_]CS_LANG_RESOLVE([$2])[_enable_errors])])]) #------------------------------------------------------------------------------ # CS_VISIBILITY_DECLARE_HIDDEN([LANGUAGE], [CACHE-VAR], # [ACTION-IF-SUPPORTED], [ACTION-IF-NOT-SUPPORTED]) # Check if declaring a symbol's visibilty as "hidden" directly in the # code is supported. If so, then the appropriate language-specific # symbol qualifier is assigned to CACHE-VAR, or to # cs_cv_prog_{language}_declare_visibility_hidden if CACHE-VAR is # omitted, and ACTION-IF-SUPPORTED is invoked. Otherwise, the cache # variable is cleared and ACTION-IF-NOT-SUPPORTED is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_VISIBILITY_DECLARE_HIDDEN], [_CS_CHECK_VISIBILITY_DECLARE([hidden], [$1], [$2], [$3], [$4])]) #------------------------------------------------------------------------------ # CS_VISIBILITY_DECLARE_DEFAULT([LANGUAGE], [CACHE-VAR], # [ACTION-IF-SUPPORTED], [ACTION-IF-NOT-SUPPORTED]) # Check if declaring a symbol's visibilty as "default" directly in the # code is supported. If so, then the appropriate language-specific # symbol qualifier is assigned to CACHE-VAR, or to # cs_cv_prog_{language}_declare_visibility_default if CACHE-VAR is # omitted, and ACTION-IF-SUPPORTED is invoked. Otherwise, the cache # variable is cleared and ACTION-IF-NOT-SUPPORTED is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_VISIBILITY_DECLARE_DEFAULT], [_CS_CHECK_VISIBILITY_DECLARE([default], [$1], [$2], [$3], [$4])]) #------------------------------------------------------------------------------ # _CS_CHECK_VISIBILITY_DECLARE(VISIBILITY, [LANGUAGE], [CACHE-VAR], # [ACTION-IF-SUPPORTED], [ACTION-IF-NOT-SUPPORTED]) # Support macro for CS_VISIBILITY_DECLARE_HIDDEN and # CS_VISIBILITY_DECLARE_DEFAULT which performs the described # functionality. #------------------------------------------------------------------------------ AC_DEFUN([_CS_CHECK_VISIBILITY_DECLARE], [CS_SYMBOL_QUALIFIER([how to declare $1 visibility], [_CS_VISIBILITY_CACHE_VAR([$3], [$2], [declare_visibility_$1])], [__attribute__((visibility("$1")))], [], [$2], [$4], [$5])]) #------------------------------------------------------------------------------ # _CS_WARNING_CACHE_VAR([CACHE-VAR], [LANGUAGE], DEFAULT-CACHE-VAR-SUFFIX) # Helper macro which returns the client-supplied cache variable name or # composes one from LANGUAGE and DEFAULT-CACHE-VAR-SUFFIX if not # provided. LANGUAGE typically is `C' or `C++' (defaulting to `C' if not # provided). #------------------------------------------------------------------------------ AC_DEFUN([_CS_VISIBILITY_CACHE_VAR], [m4_default([$1], [CS_TR_SH_lang([cs_cv_prog_]CS_LANG_RESOLVE([$2])[_$3])])]) #------------------------------------------------------------------------------ # _CS_VISIBILITY_PREPARE #------------------------------------------------------------------------------ AC_DEFUN([_CS_VISIBILITY_PREPARE], [CS_COMPILER_ERRORS([C]) CS_COMPILER_ERRORS([C++])]) crystalspace-glshader-cg-2.0/mk/autoconf/checkprog.m40000644000175000017500000001443311473743544022207 0ustar devfildevfil# checkprog.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # cs_bin_paths_default # Comma delimited list of additional directories in which tools and # commands might be found. # # Present Cases: # /usr/local/bin -- Although a common location for executables, it is # now-and-then absent from the default PATH setting. # /sw/bin -- Fink, the MacOS/X manager of Unix packages, installs # executables here. #------------------------------------------------------------------------------ m4_define([cs_bin_paths_default], [/usr/local/bin, /sw/bin, ${srcdir}/bin]) #------------------------------------------------------------------------------ # CS_CHECK_PROG(VARIABLE, PROGRAM, VALUE-IF-FOUND, [VALUE-IF-NOT-FOUND], # [PATH], [REJECT]) # Simple wrapper for AC_CHECK_PROG() which ensures that the search path # is augmented by the directories mentioned in cs_bin_paths_default. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_PROG], [_CS_PROG_PATH_PREPARE AC_CHECK_PROG([$1], [$2], [$3], [$4], m4_ifval([$5], [_CS_PROG_CLIENT_PATH([$5])]), [$6])]) #------------------------------------------------------------------------------ # CS_CHECK_PROGS(VARIABLE, PROGRAMS, [VALUE-IF-NOT-FOUND], [PATH]) # Simple wrapper for AC_CHECK_PROGS() which ensures that the search path # is augmented by the directories mentioned in cs_bin_paths_default. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_PROGS], [_CS_PROG_PATH_PREPARE AC_CHECK_PROGS([$1], [$2], [$3], m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))]) #------------------------------------------------------------------------------ # CS_CHECK_TOOL(VARIABLE, TOOL, [VALUE-IF-NOT-FOUND], [PATH]) # Simple wrapper for AC_CHECK_TOOL() which ensures that the search path # is augmented by the directories mentioned in cs_bin_paths_default. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_TOOL], [_CS_PROG_PATH_PREPARE AC_CHECK_TOOL([$1], [$2], [$3], m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))]) #------------------------------------------------------------------------------ # CS_CHECK_TOOLS(VARIABLE, TOOLS, [VALUE-IF-NOT-FOUND], [PATH]) # Simple wrapper for AC_CHECK_TOOLS() which ensures that the search path # is augmented by the directories mentioned in cs_bin_paths_default. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_TOOLS], [_CS_PROG_PATH_PREPARE AC_CHECK_TOOLS([$1], [$2], [$3], m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))]) #------------------------------------------------------------------------------ # CS_PATH_PROG(VARIABLE, PROGRAM, [VALUE-IF-NOT-FOUND], [PATH]) # Simple wrapper for AC_PATH_PROG() which ensures that the search path # is augmented by the directories mentioned in cs_bin_paths_default. #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_PROG], [_CS_PROG_PATH_PREPARE AC_PATH_PROG([$1], [$2], [$3], m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))]) #------------------------------------------------------------------------------ # CS_PATH_PROGS(VARIABLE, PROGRAMS, [VALUE-IF-NOT-FOUND], [PATH]) # Simple wrapper for AC_PATH_PROGS() which ensures that the search path # is augmented by the directories mentioned in cs_bin_paths_default. #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_PROGS], [_CS_PROG_PATH_PREPARE AC_PATH_PROGS([$1], [$2], [$3], m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))]) #------------------------------------------------------------------------------ # CS_PATH_TOOL(VARIABLE, TOOL, [VALUE-IF-NOT-FOUND], [PATH]) # Simple wrapper for AC_PATH_TOOL() which ensures that the search path # is augmented by the directories mentioned in cs_bin_paths_default. #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_TOOL], [_CS_PROG_PATH_PREPARE AC_PATH_TOOL([$1], [$2], [$3], m4_ifval([$4], [_CS_PROG_CLIENT_PATH([$4])]))]) #------------------------------------------------------------------------------ # _CS_PROG_PATH_PREPARE # Ensure that the PATH environment variable mentions the set of # directories listed in cs_bin_paths_default. These directories may not # appear by default in the typical PATH, yet they might be common # locations for tools and commands. #------------------------------------------------------------------------------ AC_DEFUN([_CS_PROG_PATH_PREPARE], [AS_REQUIRE([_AS_PATH_SEPARATOR_PREPARE]) AS_IF([test "$cs_prog_path_prepared" != yes], [cs_prog_path_prepared=yes PATH="$PATH[]m4_foreach([cs_bin_path], [cs_bin_paths_default], [$PATH_SEPARATOR[]cs_bin_path])" export PATH])]) #------------------------------------------------------------------------------ # _CS_PROG_CLIENT_PATH(CLIENT-PATH) # Given a client-supplied replacement for PATH, augment the list by # appending the locations mentioned in cs_bin_paths_default. #------------------------------------------------------------------------------ AC_DEFUN([_CS_PROG_CLIENT_PATH], [AS_REQUIRE([_AS_PATH_SEPARATOR_PREPARE])dnl $1[]m4_foreach([cs_bin_path], [cs_bin_paths_default], [$PATH_SEPARATOR[]cs_bin_path])]) crystalspace-glshader-cg-2.0/mk/autoconf/checkbuild.m40000644000175000017500000002476411473743544022347 0ustar devfildevfil# checkbuild.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2003-2008 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_SPLIT_TUPLE(TUPLE, OUTPUT-VARIABLES) # Split a build-tuple into its component parts. A build tuple is # constructed by CS_CREATE_TUPLE() and is comprised of compiler flags, # linker flags, and library references. OUTPUT-VARIABLES is a # comma-delimited list of shell variables which should receive the # extracted compiler flags, linker flags, and library references, # respectively. #------------------------------------------------------------------------------ AC_DEFUN([CS_SPLIT_TUPLE], [CS_SPLIT([$1], [cs_dummy,$2], [@]) m4_map([_CS_SPLIT_TUPLE], [$2])]) AC_DEFUN([_CS_SPLIT_TUPLE], [$1=`echo $$1 | sed 'y%@%:@% %'` ]) #------------------------------------------------------------------------------ # CS_CREATE_TUPLE([CFLAGS], [LFLAGS], [LIBS]) # Construct a build-tuple which is comprised of compiler flags, linker # flags, and library references. Build tuples are encoded so as to # preserve whitespace in each component. This makes it possible for # macros (such as CS_BUILD_IFELSE) which employ build tuples to accept # whitespace-delimited lists of tuples, and for shell "for" statements to # iterate over tuple lists without compromising whitespace embedded # within individual flags or library references. #------------------------------------------------------------------------------ AC_DEFUN([CS_CREATE_TUPLE], [`echo @$1@$2@$3 | sed 'y% %@%:@%'`]) #------------------------------------------------------------------------------ # CS_BUILD_IFELSE([PROGRAM], [FLAGS], [LANGUAGE], [ACTION-IF-BUILT], # [ACTION-IF-NOT-BUILT], [OTHER-CFLAGS], [OTHER-LFLAGS], # [OTHER-LIBS], [INHIBIT-OTHER-FLAGS], [ERROR-REGEX]) # Try building a program using the supplied compiler flags, linker flags, # and library references. PROGRAM is typically a program composed via # AC_LANG_PROGRAM(). PROGRAM may be omitted if you are interested only # in learning if the compiler or linker respects certain flags. LANGUAGE # is typically either C or C++ and specifies which compiler to use for # the test. If LANGUAGE is omitted, C is used. FLAGS is a whitespace # delimited list of build tuples. Tuples are created with # CS_CREATE_TUPLE() and are composed of up to three elements each. The # first element represents compiler flags, the second linker flags, and # the third libraries used when linking the program. Each tuple from # FLAGS is attempted in order. If you want a build attempted with no # special flags prior to builds with specialized flags, create an empty # tuple with CS_CREATE_TUPLE() at the start of the FLAGS list. If the # build is successful, then the shell variables cs_build_ok is set to # "yes", cs_build_cflags, cs_build_lflags, and cs_build_libs are set to # the tuple elements which resulted in the successful build, and # ACTION-IF-BUILT is invoked. Upon successful build, no further tuples # are consulted. If no tuple results in a successful build, then # cs_build_ok is set to "no" and ACTION-IF-NOT-BUILT is invoked. # OTHER-CFLAGS, OTHER-LFLAGS, and OTHER-LIBS specify additional compiler # flags, linker flags, and libraries which should be used with each tuple # build attempt. Upon successful build, these additional flags are also # reflected in the variables cs_build_cflags, cs_build_lflags, and # cs_build_libs unless INHIBIT-OTHER-FLAGS is a non-empty string. The # optional ERROR-REGEX places an additional constraint upon the build # check. If specified, ERROR-REGEX, which is a standard `grep' regular # expression, is applied to output captured from the compiler and linker. # If ERROR-REGEX matches, then the build is deemed a failure, and # cs_build_ok is set to "no". This facility is useful for broken build # tools which emit an error message yet still return success as a result. # In such cases, it should be possible to detect the failure by scanning # the tools' output. # # IMPLEMENTATION NOTES # # In Autoconf 2.57 and earlier, AC_LINK_IFELSE() invokes AC_TRY_EVAL(), # which does not provide access to the captured output. To work around # this limitation, we temporarily re-define AC_TRY_EVAL() as # _AC_EVAL_STDERR(), which leaves the captured output in conftest.err # (which we must also delete). In Autoconf 2.58, however, # AC_LINK_IFELSE() instead already invokes _AC_EVAL_STDERR() on our # behalf, however we must be careful to apply ERROR-REGEX within the # invocation AC_LINK_IFELSE(), since AC_LINK_IFELSE() deletes # conftest.err before it returns. #------------------------------------------------------------------------------ AC_DEFUN([CS_BUILD_IFELSE], [AC_LANG_PUSH(CS_LANG_RESOLVE([$3])) cs_cflags_save="$_CS_LANG_CFLAGS([$3])" cs_lflags_save="$LDFLAGS" cs_libs_save="$LIBS" cs_build_ok=no m4_ifval([$10], [m4_pushdef([AC_TRY_EVAL], [_AC_EVAL_STDERR]($$[1]))]) for cs_build_item in m4_default([$2],[CS_CREATE_TUPLE()]) do CS_SPLIT_TUPLE( [$cs_build_item],[cs_cflags_test,cs_lflags_test,cs_libs_test]) _CS_LANG_CFLAGS([$3])="$cs_cflags_test $6 $cs_cflags_save" LDFLAGS="$cs_lflags_test $7 $cs_lflags_save" LIBS="$cs_libs_test $8 $cs_libs_save" AC_LINK_IFELSE(AC_LANG_SOURCE[m4_default([$1], [AC_LANG_PROGRAM([],[])])], [m4_ifval([$10], [AS_IF([AC_TRY_COMMAND( [grep "AS_ESCAPE([$10])" conftest.err >/dev/null 2>&1])], [cs_build_ok=no], [cs_build_ok=yes])], [cs_build_ok=yes])]) AS_IF([test $cs_build_ok = yes], [break]) done m4_ifval([$10], [m4_popdef([AC_TRY_EVAL]) rm -f conftest.err]) _CS_LANG_CFLAGS([$3])=$cs_cflags_save LDFLAGS=$cs_lflags_save LIBS=$cs_libs_save AC_LANG_POP(CS_LANG_RESOLVE([$3])) AS_IF([test $cs_build_ok = yes], [cs_build_cflags=CS_TRIM([$cs_cflags_test[]m4_ifval([$9],[],[ $6])]) cs_build_lflags=CS_TRIM([$cs_lflags_test[]m4_ifval([$9],[],[ $7])]) cs_build_libs=CS_TRIM([$cs_libs_test[]m4_ifval([$9],[],[ $8])]) $4], [$5])]) # Return an appropriate CFLAGS-style variable name for $1 (for example, returns # CXXFLAGS for "C++"). AC_DEFUN([_CS_LANG_CFLAGS], [CS_TR_SH_LANG([CS_LANG_RESOLVE([$1])FLAGS])]) #------------------------------------------------------------------------------ # CS_CHECK_BUILD(MESSAGE, CACHE-VAR, [PROGRAM], [FLAGS], [LANGUAGE], # [ACTION-IF-BUILT], [ACTION-IF-NOT-BUILT], [IGNORE-CACHE], # [OTHER-CFLAGS], [OTHER-LFLAGS], [OTHER-LIBS], # [INHIBIT-OTHER-FLAGS], [ERROR-REGEX]) # Like CS_BUILD_IFELSE() but also prints "checking" and result messages, # and optionally respects the cache. Sets CACHE-VAR to "yes" upon # success, else "no" upon failure. Additionally, sets CACHE-VAR_cflags, # CACHE-VAR_lflags, and CACHE-VAR_libs to the values which resulted in a # successful build. If IGNORE-CACHE is "yes", then the cache variables # are ignored upon entry to this macro, however they are still set to # appropriate values upon exit. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_BUILD], [AS_IF([test "$8" != yes], [AC_CACHE_CHECK([$1], [$2], [CS_BUILD_IFELSE([$3], [$4], [$5], [$2=yes $2_cflags=$cs_build_cflags $2_lflags=$cs_build_lflags $2_libs=$cs_build_libs], [$2=no], [$9], [$10], [$11], [$12], [$13])])], [AC_MSG_CHECKING([$1]) CS_BUILD_IFELSE([$3], [$4], [$5], [$2=yes $2_cflags=$cs_build_cflags $2_lflags=$cs_build_lflags $2_libs=$cs_build_libs], [$2=no], [$9], [$10], [$11], [$12], [$13]) AC_MSG_RESULT([$$2])]) AS_IF([test $$2 = yes], [$6], [$2_cflags='' $2_lflags='' $2_libs='' $7])]) #------------------------------------------------------------------------------ # CS_CHECK_BUILD_FLAGS(MESSAGE, CACHE-VAR, FLAGS, [LANGUAGE], # [ACTION-IF-RECOGNIZED], [ACTION-IF-NOT-RECOGNIZED], # [OTHER-CFLAGS], [OTHER-LFLAGS], [OTHER-LIBS], # [ERROR-REGEX]) # Like CS_CHECK_BUILD(), but checks only if the compiler or linker # recognizes a command-line option or options. MESSAGE is the "checking" # message. CACHE-VAR is the shell cache variable which receives the flag # or flags recognized by the compiler or linker. FLAGS is a # whitespace-delimited list of build tuples created with # CS_CREATE_TUPLE(). Each tuple from FLAGS is attempted in order until # one is found which is recognized by the compiler. After that, no # further flags are checked. LANGUAGE is typically either C or C++ and # specifies which compiler to use for the test. If LANGUAGE is omitted, # C is used. If a command-line option is recognized, then CACHE-VAR is # set to the composite value of $cs_build_cflags, $cs_build_lflags, and # $cs_build_libs of the FLAGS element which succeeded (not including the # "other" flags) and ACTION-IF-RECOGNIZED is invoked. If no options are # recognized or if FLAGS is empty, then CACHE-VAR is set to the empty # string, and ACTION-IF-NOT-RECOGNIZED is invoked. As a convenience, in # case comparing CACHE-VAR against the empty string to test for failure # is undesirable, a second variable named CACHE-VAR_ok is set to the # literal "no" upon failure, and to the same value as CACHE-VAR upon # success. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_BUILD_FLAGS], [AC_CACHE_CHECK([$1], [$2_ok], [AS_IF([test -n "$3"], [CS_BUILD_IFELSE([], [$3], [$4], [$2=CS_TRIM([$cs_build_cflags $cs_build_lflags $cs_build_libs]) $2_ok="$$2"], [$2='' $2_ok=no], [$7], [$8], [$9], [Y], [$10])], [$2='' $2_ok=no])]) AS_IF([test "$$2_ok" != no], [$5], [$6])]) crystalspace-glshader-cg-2.0/mk/autoconf/checkjava.m40000644000175000017500000001511311473743544022155 0ustar devfildevfil# checkjava.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2004-2009 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_CHECK_JAVA([EMITTER]) # Check for Java, a working Java SDK (JDK), and Ant build tool. Sets the # shell variables JAVA, JAVAC, and ANT and invokes AC_SUBST() upon each. # The shell variable cs_cv_java is set to "yes' if a working JDK is # discovered, else "no". If available, then the variables cs_cv_java, # cs_cv_java_lflags, and cs_cv_java_libs are set. (As a convenience, # these variables can be emitted to an output file with # CS_EMIT_BUILD_RESULT() by passing "cs_cv_java" as its CACHE-VAR # argument.) The JDK check can be enabled or disabled with # --with[out]-java. If EMITTER is provided, then # CS_EMIT_BUILD_PROPERTY() and CS_EMIT_BUILD_RESULT() are invoked with # EMITTER in order to record the results in an output file. As a # convenience, if EMITTER is the literal value "emit" or "yes", then the # default emitter of CS_EMIT_BUILD_PROPERTY() and CS_EMIT_BUILD_RESULT() # will be used. When EMITTER is provided, the following properties are # emitted to the output file: JAVA, JAVA.AVAILABLE ("yes" or "no"), # JAVA.CFLAGS, JAVA.LFLAGS, JAVAC, and ANT. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_JAVA], [JAVA_HOME=CS_PATH_NORMALIZE([$JAVA_HOME]) AS_IF([test -z "$JAVA" && test -n "$JAVACMD"], [JAVA=CS_PATH_NORMALIZE([$JAVACMD])]) CS_PATH_PROGS([JAVA], [java], [], [$JAVA_HOME/bin$PATH_SEPARATOR$JAVA_HOME/jre/bin$PATH_SEPARATOR$PATH]) CS_EMIT_BUILD_PROPERTY([JAVA], [$JAVA], [], [], CS_EMITTER_OPTIONAL([$1])) AC_SUBST([JAVA]) CS_PATH_PROGS([JAVAC], [javac], [], [$JAVA_HOME/bin$PATH_SEPARATOR$JAVA_HOME/jre/bin$PATH_SEPARATOR$PATH]) CS_EMIT_BUILD_PROPERTY([JAVAC], [$JAVAC], [], [], CS_EMITTER_OPTIONAL([$1])) AC_SUBST([JAVAC]) AC_ARG_WITH([java], [AC_HELP_STRING([--with-java], [use Java (default YES)])]) AS_IF([test -z "$with_java"], [with_java=yes]) AS_IF([test "$with_java" != no && test -n "$JAVAC" && test -n "$JAVA"], [_CS_JAVA_SDK_FLAGS([cs_java], [$JAVA], [$JAVAC]) CS_CHECK_BUILD([if Java SDK is usable], [cs_cv_java], [AC_LANG_PROGRAM( [[#if defined(__GNUC__) typedef long long __int64; /* For GCC on Windows */ #endif /* Fix for 'jlong' on x86_64. */ #if defined(__x86_64) #ifdef _LP64 /* 64-bit Solaris */ #undef _LP64 #endif #endif #include JNIEXPORT void JNICALL f(JNIEnv* env, jobject obj);]], [JNI_GetCreatedJavaVMs(0,0,0);])], [CS_CREATE_TUPLE() \ CS_CREATE_TUPLE( [$cs_java_cflags], [$cs_java_lflags], [$cs_java_libs])], [], [CS_EMIT_BUILD_RESULT([cs_cv_java], [JAVA], CS_EMITTER_OPTIONAL([$1]))])]) CS_PATH_PROGS([ANT], [ant], [], [$PATH$PATH_SEPARATOR$ANT_HOME/bin]) CS_EMIT_BUILD_PROPERTY([ANT], [$ANT], [], [], CS_EMITTER_OPTIONAL([$1])) AC_SUBST([ANT]) ]) #------------------------------------------------------------------------------ # Private utility macros. #------------------------------------------------------------------------------ AC_DEFUN([_CS_JAVA_PROPERTY_BUILD], [cat < conftest.java public class conftest { public static void main(String[[]] args) { System.out.println(System.getProperty(args[[0]])); } } EOF AC_RUN_LOG([$1 conftest.java]) ]) AC_DEFUN([_CS_JAVA_PROPERTY_CLEAN], [rm -f conftest.java conftest.class ]) AC_DEFUN([_CS_JAVA_PROPERTY], [AC_RUN_LOG([CLASSPATH=. $2 conftest $1])]) AC_DEFUN([_CS_JAVA_PLATFORM], [AC_REQUIRE([AC_CANONICAL_HOST]) case $host_os in mingw*|cygwin*) cs_java_platform=win32 ;; *) cs_java_platform=`echo $host_os | sed 's/^\([[^-]]*\).*$/\1/'` ;; esac ]) AC_DEFUN([_CS_JAVA_CFLAGS], [AC_REQUIRE([_CS_JAVA_PLATFORM]) $1_cflags="$$1_cflags -I$2/include" AS_IF([test -n "$cs_java_platform"], [$1_cflags="$$1_cflags -I$2/include/$cs_java_platform"])]) AC_DEFUN([_CS_JAVA_LFLAGS], [cs_save_ifs=$IFS; IFS=$PATH_SEPARATOR for cs_dir in $2 do IFS=$cs_save_ifs test -z "$cs_dir" && cs_dir=. $1_lflags="$$1_lflags -L$cs_dir" done IFS=$cs_save_ifs ]) AC_DEFUN([_CS_JAVA_FLAGS], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([CS_CHECK_HOST]) AS_IF([test x$cs_host_macosx = xyes && # Not cross-building for Darwin. test -r /System/Library/Frameworks/JavaVM.framework/Headers], [$1_cflags="-I/System/Library/Frameworks/JavaVM.framework/Headers" $1_libs="-framework JavaVM"], [AS_IF([test -n "$JAVA_HOME"], [_CS_JAVA_CFLAGS([$1], [$JAVA_HOME]) _CS_JAVA_LFLAGS([$1], [$JAVA_HOME])]) cs_java_home=`_CS_JAVA_PROPERTY([java.home], [$2])` AS_IF([test -n "$cs_java_home"], [_CS_JAVA_CFLAGS([$1], [$cs_java_home]) _CS_JAVA_CFLAGS([$1], [$cs_java_home/..]) _CS_JAVA_LFLAGS([$1], [$cs_java_home$PATH_SEPARATOR$cs_java_home/..])]) cs_java_lib_path=`_CS_JAVA_PROPERTY([java.library.path], [$2])` AS_IF([test -n "$cs_java_lib_path"], [_CS_JAVA_LFLAGS([$1], [$cs_java_lib_path])]) $1_cflags=CS_PATH_NORMALIZE([$$1_cflags]) $1_lflags=CS_PATH_NORMALIZE([$$1_lflags]) $1_libs="-ljvm"])]) AC_DEFUN([_CS_JAVA_SDK_FLAGS], [AC_CACHE_CHECK([for Java SDK], [cs_cv_java_sdk], [AS_IF([test -n "$2" && test -n "$3"], [_CS_JAVA_PROPERTY_BUILD([$3]) _CS_JAVA_FLAGS([cs_cv_java_sdk], [$2]) _CS_JAVA_PROPERTY_CLEAN() $1_cflags="$cs_cv_java_sdk_cflags" $1_lflags="$cs_cv_java_sdk_lflags" $1_libs="$cs_cv_java_sdk_libs" cs_cv_java_sdk=yes], [cs_cv_java_sdk=no])])]) crystalspace-glshader-cg-2.0/mk/autoconf/checkpthread.m40000644000175000017500000001400011473743544022655 0ustar devfildevfil# checkpthread.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_CHECK_PTHREAD([REJECT-MASK]) # Check for pthread. Also check if the pthread implementation supports # the recursive and timed mutex extensions. (Timed mutexes are needed for # the NPTL: New Posix Thread Library on GNU/Linux if the mutex is going # to be used with any of the timed condition-wait functions.) The shell # variable cs_cv_sys_pthread is set to "yes" if pthread is available, # else "no". If available, then the variables cs_cv_sys_pthread_cflags, # cs_cv_sys_pthread_lflags, and cs_cv_sys_pthread_libs are set. (As a # convenience, these variables can be emitted to an output file with # CS_EMIT_BUILD_RESULT() by passing "cs_cv_sys_pthread" as its CACHE-VAR # argument.) If the recursive mutex extension is supported, then # cs_cv_sys_pthread_mutex_recursive will be set with the literal name of # the constant which must be passed to pthread_mutexattr_settype() to # enable this feature. The constant name will be typically # PTHREAD_MUTEX_RECURSIVE or PTHREAD_MUTEX_RECURSIVE_NP. If the recursive # mutex extension is not available, then # cs_cv_sys_pthread_mutex_recursive will be set to "no". If the timed # mutex extension is supported, then cs_cv_sys_pthread_mutex_timed will # be set with the literal name of the constant which must be passed to # pthread_mutexattr_settype() to enable this feature. The constant name # will be typically PTHREAD_MUTEX_TIMED or PTHREAD_MUTEX_TIMED_NP. If the # timed mutex extension is not available, then # cs_cv_sys_pthread_mutex_timed will be set to "no". REJECT-MASK can be # used to limit the platforms on which the pthread test is performed. It # is compared against $host_os; matches are rejected. If omitted, then # the test is performed on all platforms. Examples: To avoid testing on # Cygwin, use "cygwin*"; to avoid testing on Cygwin and AIX, use # "cygwin*|aix*". #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_PTHREAD], [AC_REQUIRE([AC_CANONICAL_HOST]) case $host_os in m4_ifval([$1], [$1) cs_cv_sys_pthread=no ;; ]) *) CS_CHECK_BUILD([for pthread], [cs_cv_sys_pthread], [AC_LANG_PROGRAM( [[#include #include void* worker(void* p) { (void)p; return p; }]], [pthread_t tid; sem_t sem; pthread_create(&tid, 0, worker, 0); sem_init(&sem, 0, 0); sem_destroy(&sem);])], [cs_pthread_flags]) ;; esac _CS_CHECK_MUTEX_FEATURE([PTHREAD_MUTEX_RECURSIVE], [cs_cv_sys_pthread_mutex_recursive], [for pthread recursive mutexes])]) # _CS_CHECK_MUTEX_FEATURE(FEATURE, CACHE-VAR, MESSAGE) AC_DEFUN([_CS_CHECK_MUTEX_FEATURE], [AS_IF([test $cs_cv_sys_pthread = yes], [AC_CACHE_CHECK([$3], [$2], [CS_BUILD_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [pthread_mutexattr_t attr; pthread_mutexattr_settype(&attr, CS_MUTEX_FEATURE);])], [CS_CREATE_TUPLE([-DCS_MUTEX_FEATURE=$1]) \ CS_CREATE_TUPLE([-DCS_MUTEX_FEATURE=$1_NP])], [], [$2=`echo $cs_build_cflags | sed 's/.*\($1_*N*P*\).*/\1/'`], [$2=no], [$cs_cv_sys_pthread_cflags -D_GNU_SOURCE], [$cs_cv_sys_pthread_lflags], [$cs_cv_sys_pthread_libs])])], [$2=no])]) #------------------------------------------------------------------------------ # CS_CHECK_PTHREAD_ATFORK(CACHE-VAR) # Checks whether the pthread library contains pthread_atfork(). Sets # CACHE-VAR to "yes" or "no", according to the test result. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_PTHREAD_ATFORK], [AS_IF([test $cs_cv_sys_pthread = yes], [AC_CACHE_CHECK([for pthread_atfork support], [$1], [CS_BUILD_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [pthread_atfork (0, 0, 0);])], [], [], [$1=yes], [$1=no], [$cs_cv_sys_pthread_cflags -D_GNU_SOURCE], [$cs_cv_sys_pthread_lflags], [$cs_cv_sys_pthread_libs])])], [$1=no])]) #------------------------------------------------------------------------------ # CS_CHECK_PTHREAD_SETNAME_NP(CACHE-VAR) # Checks whether the pthread library contains pthread_setname_np(). Sets # CACHE-VAR to "yes" or "no", according to the test result. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_PTHREAD_SETNAME_NP], [AS_IF([test $cs_cv_sys_pthread = yes], [AC_CACHE_CHECK([for pthread_setname_np support], [$1], [CS_BUILD_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [pthread_setname_np (0, "hello");])], [], [], [$1=yes], [$1=no], [$cs_cv_sys_pthread_cflags -D_GNU_SOURCE], [$cs_cv_sys_pthread_lflags], [$cs_cv_sys_pthread_libs])])], [$1=no])]) m4_define([cs_pthread_flags], [CS_CREATE_TUPLE() \ CS_CREATE_TUPLE([], [], [-lpthread]) \ CS_CREATE_TUPLE([], [], [-lpthread -lrt]) \ CS_CREATE_TUPLE([-pthread], [-pthread], []) \ CS_CREATE_TUPLE([-pthread], [-pthread], [-lpthread]) \ CS_CREATE_TUPLE([-pthread], [-pthread], [-lc_r])]) crystalspace-glshader-cg-2.0/mk/autoconf/checkcommon.m40000644000175000017500000002374411473743544022535 0ustar devfildevfil#============================================================================== # Copyright (C)2003-2009 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_CHECK_COMMON_TOOLS_LINK([EMITTER]) # Checks for common tools related to linking. Results of the checks are # recorded with CS_EMIT_BUILD_PROPERTY() via the optional EMITTER. If # EMITTER is omitted, then CS_EMIT_BUILD_PROPERTY()'s default emitter is # employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_TOOLS_LINK], [# The default RANLIB in Jambase is wrong on some platforms, and is also # unsuitable during cross-compilation, so value is set unconditionally. AC_PROG_RANLIB CS_EMIT_BUILD_PROPERTY([RANLIB], [$RANLIB], [unconditional], [], [$1]) CS_CHECK_TOOLS([DLLTOOL], [dlltool]) CS_EMIT_BUILD_PROPERTY([CMD.DLLTOOL], [$DLLTOOL], [], [], [$1]) CS_CHECK_TOOLS([DLLWRAP], [dllwrap]) AS_IF([test "$cs_mno_cygwin" = "yes"], [DLLWRAP="$DLLWRAP --target i386-mingw32"]) CS_EMIT_BUILD_PROPERTY([CMD.DLLWRAP], [$DLLWRAP], [], [], [$1]) CS_CHECK_TOOLS([WINDRES], [windres]) CS_EMIT_BUILD_PROPERTY([CMD.WINDRES], [$WINDRES], [], [], [$1]) CS_CHECK_TOOLS([STRINGS], [strings]) CS_EMIT_BUILD_PROPERTY([CMD.STRINGS], [$STRINGS], [], [], [$1]) CS_CHECK_TOOLS([OBJCOPY], [objcopy]) CS_EMIT_BUILD_PROPERTY([CMD.OBJCOPY], [$OBJCOPY], [], [], [$1]) AS_IF([test -n "$OBJCOPY"], [AC_CACHE_CHECK([whether $OBJCOPY supports --long-section-names], [cs_cv_objcopy_supports_long_section_names], [cs_cv_objcopy_supports_long_section_names=no AS_IF([AC_TRY_COMMAND( [$OBJCOPY --help 2>/dev/null | grep -e "--long-section-names" >/dev/null 2>&1])], [cs_cv_objcopy_supports_long_section_names=yes]) ]) AS_IF([test "$cs_cv_objcopy_supports_long_section_names" != "no"], [CS_EMIT_BUILD_PROPERTY([CMD.OBJCOPY.LONG_SECTION_NAMES_ENABLE], [--long-section-names=enable], [], [], [$1])]) ]) CS_CHECK_LIBTOOL CS_EMIT_BUILD_PROPERTY([LIBTOOL], [$LIBTOOL], [], [], [$1]) CS_EMIT_BUILD_PROPERTY([APPLE_LIBTOOL], [$APPLE_LIBTOOL], [], [], [$1])]) #------------------------------------------------------------------------------ # CS_CHECK_COMMON_TOOLS_RELAYTOOL([PATH], [EMITTER]) # Checks for relaytool. Prepends PATH to the search path. # The result of the check is recorded with CS_EMIT_BUILD_PROPERTY() via # the optional EMITTER. If EMITTER is omitted, then # CS_EMIT_BUILD_PROPERTY()'s default emitter is employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_TOOLS_RELAYTOOL], [AC_ARG_ENABLE([relaytool], [AC_HELP_STRING([--enable-relaytool], [enable use of relaytool for some libraries (default YES)])]) AS_IF([test -z "$enable_relaytool"], [enable_relaytool=yes]) AS_IF([test "$enable_relaytool" != "no"], [CS_PATH_TOOL([RELAYTOOL], [relaytool], [], [$1]) CS_CHECK_PROGS([BASH], [bash]) AS_IF([test -n "$BASH"], [CS_EMIT_BUILD_PROPERTY([CMD.RELAYTOOL], [$BASH $RELAYTOOL], [atomic], [], [$2])])])]) #------------------------------------------------------------------------------ # CS_CHECK_COMMON_TOOLS_BASIC([EMITTER]) # Checks for basic tools for building things. Results of the checks are # recorded with CS_EMIT_BUILD_PROPERTY() via the optional EMITTER. If # EMITTER is omitted, then CS_EMIT_BUILD_PROPERTY()'s default emitter is # employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_TOOLS_BASIC], [CS_CHECK_MKDIR CS_EMIT_BUILD_PROPERTY([CMD.MKDIR], [$MKDIR], [], [], [$1]) CS_EMIT_BUILD_PROPERTY([CMD.MKDIRS], [$MKDIRS], [], [], [$1]) CS_CHECK_PROGS([INSTALL], [install]) CS_EMIT_BUILD_PROPERTY([INSTALL], [$INSTALL], [], [], [$1]) AC_PROG_LN_S CS_EMIT_BUILD_PROPERTY([LN_S], [$LN_S], [], [], [$1])]) #------------------------------------------------------------------------------ # CS_CHECK_COMMON_TOOLS_DOC_TEXINFO([EMITTER]) # Checks for tools to generate documentation from texinfo files. Results # of the checks are recorded with CS_EMIT_BUILD_PROPERTY() via the # optional EMITTER. If EMITTER is omitted, then # CS_EMIT_BUILD_PROPERTY()'s default emitter is employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_TOOLS_DOC_TEXINFO], [CS_CHECK_PROGS([TEXI2DVI], [texi2dvi]) CS_EMIT_BUILD_PROPERTY([CMD.TEXI2DVI], [$TEXI2DVI], [], [], [$1]) CS_CHECK_PROGS([TEXI2PDF], [texi2pdf]) CS_EMIT_BUILD_PROPERTY([CMD.TEXI2PDF], [$TEXI2PDF], [], [], [$1]) CS_CHECK_PROGS([DVIPS], [dvips]) CS_EMIT_BUILD_PROPERTY([CMD.DVIPS], [$DVIPS], [], [], [$1]) CS_CHECK_PROGS([DVIPDF], [dvipdf]) CS_EMIT_BUILD_PROPERTY([CMD.DVIPDF], [$DVIPDF], [], [], [$1]) CS_CHECK_PROGS([MAKEINFO], [makeinfo]) CS_EMIT_BUILD_PROPERTY([CMD.MAKEINFO], [$MAKEINFO], [], [], [$1])]) #------------------------------------------------------------------------------ # CS_CHECK_COMMON_TOOLS_DOC_DOXYGEN([EMITTER]) # Checks for tools to generate source documentation via doxygen. Results # of the checks are recorded with CS_EMIT_BUILD_PROPERTY() via the # optional EMITTER. If EMITTER is omitted, then # CS_EMIT_BUILD_PROPERTY()'s default emitter is employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_TOOLS_DOC_DOXYGEN], [CS_CHECK_PROGS([DOXYGEN], [doxygen]) CS_EMIT_BUILD_PROPERTY([CMD.DOXYGEN], [$DOXYGEN], [], [], [$1]) CS_CHECK_TOOLS([DOT], [dot]) CS_EMIT_BUILD_PROPERTY([CMD.DOT], [$DOT], [], [], [$1])]) #------------------------------------------------------------------------------ # CS_CHECK_COMMON_TOOLS_ICONS([EMITTER]) # Checks for tools required by the icon generation rules from # icons.jam. Results of the checks are recorded with # CS_EMIT_BUILD_PROPERTY() via the optional EMITTER. If EMITTER is # omitted, then CS_EMIT_BUILD_PROPERTY()'s default emitter is employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_TOOLS_ICONS], [# rsvg: for svg to png conversion CS_CHECK_PROGS([RSVG], [rsvg]) CS_EMIT_BUILD_PROPERTY([CMD.RSVG], [$RSVG], [], [], [$1]) # icotool: for creating Win32 ICO files CS_CHECK_PROGS([ICOTOOL], [icotool]) CS_EMIT_BUILD_PROPERTY([CMD.ICOTOOL], [$ICOTOOL], [], [], [$1]) AS_IF([test -n "$ICOTOOL"], [AC_CACHE_CHECK([whether icotool supports --raw], [cs_cv_icotool_supports_raw], [cs_cv_icotool_supports_raw=no AS_IF([AC_TRY_COMMAND( [$ICOTOOL 2>/dev/null | grep -e "--raw" >/dev/null 2>&1])], [cs_cv_icotool_supports_raw=yes]) ]) CS_EMIT_BUILD_PROPERTY([ICOTOOL.SUPPORTS_RAW], [$cs_cv_icotool_supports_raw], [], [], [$1]) ]) # convert: for various image manipulations from both the svg conversion and # ICO creation. CS_CHECK_PROGS([CONVERT], [convert]) CS_EMIT_BUILD_PROPERTY([CMD.CONVERT], [$CONVERT], [], [], [$1]) # pngcrush: if available, run over the PNGs created for icons. # (This is not so much about the size as about stripping "creation" and # "modification" time comments convert seems to put into PNGs.) CS_CHECK_PROGS([PNGCRUSH], [pngcrush]) CS_EMIT_BUILD_PROPERTY([CMD.PNGCRUSH], [$PNGCRUSH], [], [], [$1]) # Tools needed to generate OS/X icons. CS_CHECK_PROGS([MAKEICNS], [makeicns]) CS_EMIT_BUILD_PROPERTY([CMD.MAKEICNS], [$MAKEICNS], [], [], [$1]) # png2icns is available for POSIX platforms and not just OS/X. CS_CHECK_PROGS([PNG2ICNS], [png2icns]) CS_EMIT_BUILD_PROPERTY([CMD.PNG2ICNS], [$PNG2ICNS], [], [], [$1]) ]) #------------------------------------------------------------------------------ # CS_CHECK_COMMON_LIBS([EMITTER]) # Check for typical required libraries (libc, libm, libmx, libdl, # libnsl). Results of the checks are recorded under build key # "COMPILER.LFLAGS" via CS_EMIT_BUILD_PROPERTY() using the optional # EMITTER. If EMITTER is omitted, then CS_EMIT_BUILD_PROPERTY()'s default # emitter is employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_LIBS], [AC_LANG_PUSH([C]) AC_CHECK_LIB([c], [fopen]) AS_IF([test $ac_cv_lib_c_fopen = yes], [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-lc], [append],[],[$1])]) AC_CHECK_LIB([m], [pow], [cs_cv_libm_libs=-lm], [cs_cv_libm_libs=]) AC_CHECK_LIB([m], [cosf], [cs_cv_libm_libs=-lm]) AS_IF([test $ac_cv_lib_m_pow = yes || test $ac_cv_lib_m_cosf = yes], [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-lm], [append],[],[$1])]) AC_CHECK_LIB([mx], [cosf]) AS_IF([test $ac_cv_lib_mx_cosf = yes], [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-lmx], [append],[],[$1])]) AC_CHECK_LIB([dl], [dlopen], [cs_cv_libdl_libs=-ldl], [cs_cv_libdl_libs=]) AS_IF([test $ac_cv_lib_dl_dlopen = yes], [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-ldl], [append],[],[$1])]) AC_CHECK_LIB([nsl], [gethostbyname]) AS_IF([test $ac_cv_lib_nsl_gethostbyname = yes], [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-lnsl], [append],[],[$1])]) AC_LANG_POP([C]) ]) crystalspace-glshader-cg-2.0/mk/autoconf/diagnose.m40000644000175000017500000000311611473743544022027 0ustar devfildevfil# diagnose.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_MSG_ERROR(ERROR-DESCRIPTION, [EXIT-STATUS]) # A convenience wrapper for AC_MSG_ERROR() which invokes AC_CACHE_SAVE() # before aborting the script. Saving the cache should make subsequent # re-invocations of the configure script faster once the user has # corrected the problem(s) which caused the failure. #------------------------------------------------------------------------------ AC_DEFUN([CS_MSG_ERROR], [AC_CACHE_SAVE AC_MSG_ERROR([$1], [$2])]) crystalspace-glshader-cg-2.0/mk/autoconf/headercache.m40000644000175000017500000000452111473743544022453 0ustar devfildevfil# headercache.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # Text cache facility for C-style #define properties. The cache is stored in # the shell variable cs_header_text. # # CS_HEADER_APPEND(TEXT) # Append text to the C header text cache. This is a cover for # CS_TEXT_CACHE_APPEND(). # # CS_HEADER_PREPEND(TEXT) # Prepend text to the C header text cache. This is a cover for # CS_TEXT_CACHE_PREPEND(). # # CS_HEADER_PROPERTY(KEY, [VALUE], [OPTIONS]) # Append a line of the form "#define KEY VALUE" to the C header text # cache. If the VALUE argument is omitted, then the appended line has # the simplified form "#define KEY". OPTIONS is accepted for consistency # with other emitters (see emit.m4) but otherwise ignored. # # CS_HEADER_OUTPUT(FILENAME) # Instruct config.status to write the C header text cache to the given # filename. This is a cover for CS_TEXT_CACHE_OUTPUT(). #------------------------------------------------------------------------------ AC_DEFUN([CS_HEADER_APPEND], [CS_TEXT_CACHE_APPEND([cs_header_text], [$1])]) AC_DEFUN([CS_HEADER_PREPEND], [CS_TEXT_CACHE_PREPEND([cs_header_text], [$1])]) AC_DEFUN([CS_HEADER_PROPERTY], [CS_HEADER_APPEND([@%:@define $1[]m4_ifval([$2], [ $2], []) ])]) AC_DEFUN([CS_HEADER_OUTPUT], [CS_TEXT_CACHE_OUTPUT([cs_header_text], [$1])]) crystalspace-glshader-cg-2.0/mk/autoconf/checkbinutils.m40000644000175000017500000000445111473743544023070 0ustar devfildevfil#============================================================================= # 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. # #============================================================================= #----------------------------------------------------------------------------- # CS_CHECK_BINUTILS_2_17 # Certain features (among these, the --as-needed linker flag and splitting # debug information) need relatively recent binutils versions to work # properly. This test checks the binutils version (by probing the version # of ld) and sets the cs_cv_binutils_2_17 variable to 'yes' if the # version is at least 2.17 (or some earlier prerelease found to work well # enough). #----------------------------------------------------------------------------- AC_DEFUN([CS_CHECK_BINUTILS_2_17], [CS_CHECK_TOOLS([LD], [ld]) AS_IF([test -n "$LD"], [# Apple linker is not GNU-compatible. Further, on Leopard, -v emits # to stderr rather than stdout. Handle these anomalies. AS_IF([echo `ld -v 2>&1` | grep GNU 2>&1 > /dev/null], [# binutils versions come in the flavors X.Y as well as X.Y.Z CS_CHECK_PROG_VERSION([binutils], [$LD -v], [2.17], [9.9|.9|.9|.9|.9], [cs_cv_binutils_true_2_17=yes], [cs_cv_binutils_true_2_17=no]) AS_IF([test "$cs_cv_binutils_true_2_17" = yes], [cs_cv_binutils_2_17=yes]) AS_IF([test -z "$cs_cv_binutils_2_17"], [CS_CHECK_PROG_VERSION([binutils], [$LD -v], [2.16.91], [9.9.9|.9|.9|.9], [cs_cv_binutils_2_17=yes])]) AS_IF([test -z "$cs_cv_binutils_2_17"], [cs_cv_binutils_2_17=no])])])]) crystalspace-glshader-cg-2.0/mk/autoconf/config.guess0000755000175000017500000012513311473743544022320 0ustar devfildevfil#! /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: crystalspace-glshader-cg-2.0/mk/autoconf/cel.m40000644000175000017500000002377711473743445021020 0ustar devfildevfil# cel.m4 -*- Autoconf -*- #============================================================================== # CEL detection macros # 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. # #============================================================================== AC_PREREQ([2.56]) m4_define([cel_min_version_default], [1.9]) #------------------------------------------------------------------------------ # CS_PATH_CEL_CHECK([MINIMUM-VERSION], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND], [REQUIRED-LIBS], [OPTIONAL-LIBS]) # Checks for Crystal Entity Layer (CEL) paths and libraries by consulting # cel-config. It first looks for cel-config in the paths mentioned by # $CEL, then in the paths mentioned by $PATH, and then in # /usr/local/cel/bin. Emits an error if it can not locate cel-config, if # the CEL test program fails, or if the available version number is # unsuitable. Exports the variables CEL_CONFIG_TOOL, CEL_AVAILABLE, # CEL_VERSION, CEL_CFLAGS, CEL_LIBS, CEL_INCLUDE_DIR, and # CEL_AVAILABLE_LIBS. If the check succeeds, then CEL_AVAILABLE will be # 'yes', and the other variables set to appropriate values. If it fails, # then CEL_AVAILABLE will be 'no', and the other variables empty. If # REQUIRED-LIBS is specified, then it is a list of CEL libraries which # must be present, and for which appropriate compiler and linker flags # will be reflected in CEL_CFLAGS and CEL_LFLAGS. If OPTIONAL-LIBS is # specified, then it is a list of CEL libraries for which appropriate # compiler and linker flags should be returned if the libraries are # available. It is not an error for an optional library to be # absent. The client can check CEL_AVAILABLE_LIBS for a list of all # libraries available for this particular installation of CEL. The # returned list is independent of REQUIRED-LIBS and OPTIONAL-LIBS. Use # the results of the check like this: CFLAGS="$CFLAGS $CEL_CFLAGS" and # LDFLAGS="$LDFLAGS $CEL_LIBS" #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_CEL_CHECK], [AC_REQUIRE([CS_PATH_CRYSTAL_CHECK]) AC_ARG_WITH([cel-prefix], [AC_HELP_STRING([--with-cel-prefix=CEL_PREFIX], [specify location of CEL installation; this is the \$prefix value used when installing the SDK])], [CEL="$withval" export CEL]) AC_ARG_VAR([CEL], [Prefix where CEL is installed]) AC_ARG_ENABLE([celtest], [AC_HELP_STRING([--enable-celtest], [verify that the CEL SDK is actually usable (default YES)])], [], [enable_celtest=yes]) # Try to find an installed cel-config. cel_path='' AS_IF([test -n "$CEL"], [my_IFS=$IFS; IFS=$PATH_SEPARATOR for cel_dir in $CEL; do AS_IF([test -n "$cel_path"], [cel_path="$cel_path$PATH_SEPARATOR"]) cel_path="$cel_path$cel_dir$PATH_SEPARATOR$cel_dir/bin" done IFS=$my_IFS]) AS_IF([test -n "$cel_path"], [cel_path="$cel_path$PATH_SEPARATOR"]) cel_path="$cel_path$PATH$PATH_SEPARATOR/usr/local/cel/bin" # Find a suitable CEL version. # For a given desired version X.Y, the compatibility rules are as follows: # Y is even (stable version): compatible are X.Y+1 and X.Y+2. # Y is odd (development version): compatible are X.Y+1 up to X.Y+3, assuming # no deprecated features are used. # Generally, an exact version match is preferred. If that is not the case, # stable versions are preferred over development version, with a closer # version number preferred. # This yields the following search order: # Y is even (stable version): X.Y, X.Y+2, X.Y+1 # Y is odd (development version): X.Y, X.Y+1, X.Y+3, X.Y+2 cel_version_desired=m4_default([$1],[cel_min_version_default]) sed_expr_base=[\\\([0-9]\\\+\\\)\.\\\([0-9]\\\+\\\).*] cel_version_major=`echo $cel_version_desired | sed "s/$sed_expr_base/\1/"` cel_version_minor=`echo $cel_version_desired | sed "s/$sed_expr_base/\2/"` cel_version_sequence="$cel_version_major.$cel_version_minor" cel_version_desired_is_unstable=`expr $cel_version_minor % 2` AS_IF([test $cel_version_desired_is_unstable -eq 1], [# Development version search sequence y=`expr $cel_version_minor + 1` cel_version_sequence="$cel_version_sequence $cel_version_major.$y" y=`expr $cel_version_minor + 3` cel_version_sequence="$cel_version_sequence $cel_version_major.$y" y=`expr $cel_version_minor + 2` cel_version_sequence="$cel_version_sequence $cel_version_major.$y"], [# Stable version search sequence y=`expr $cel_version_minor + 2` cel_version_sequence="$cel_version_sequence $cel_version_major.$y" y=`expr $cel_version_minor + 1` cel_version_sequence="$cel_version_sequence $cel_version_major.$y"]) for test_version in $cel_version_sequence; do AC_PATH_TOOL([CEL_CONFIG_TOOL], [cel-config-$test_version], [], [$cel_path]) AS_IF([test -n "$CEL_CONFIG_TOOL"], [break]) done # Legacy: CEL 1.0 used a bare-named cel-config AS_IF([test -z "$CEL_CONFIG_TOOL"], [AC_PATH_TOOL([CEL_CONFIG_TOOL], [cel-config], [], [$cel_path])]) AS_IF([test -n "$CEL_CONFIG_TOOL"], [cfg="$CEL_CONFIG_TOOL" CS_CHECK_PROG_VERSION([CEL], [$cfg --version], [m4_default([$1],[cel_min_version_default])], [9.9|.9], [cel_sdk=yes], [cel_sdk=no]) AS_IF([test $cel_sdk = yes], [cel_liblist="$4" cel_optlibs=CS_TRIM([$5]) AS_IF([test -n "$cel_optlibs"], [cel_optlibs=`$cfg --available-libs $cel_optlibs` cel_liblist="$cel_liblist $cel_optlibs"]) CEL_VERSION=`$cfg --version $cel_liblist` CEL_CFLAGS=CS_RUN_PATH_NORMALIZE([$cfg --cflags $cel_liblist]) CEL_LIBS=CS_RUN_PATH_NORMALIZE([$cfg --lflags $cel_liblist]) CEL_INCLUDE_DIR=CS_RUN_PATH_NORMALIZE( [$cfg --includedir $cel_liblist]) CEL_AVAILABLE_LIBS=`$cfg --available-libs` CEL_STATICDEPS=`$cfg --static-deps` AS_IF([test -z "$CEL_LIBS"], [cel_sdk=no])])], [cel_sdk=no]) AS_IF([test "$cel_sdk" = yes && test "$enable_celtest" = yes], [CS_CHECK_BUILD([if CEL SDK is usable], [cel_cv_cel_sdk], [AC_LANG_PROGRAM( [#include #include ], [/* TODO write a suitable test */])], [CS_CREATE_TUPLE([$CEL_CFLAGS],[],[$CEL_LIBS])], [C++], [], [cel_sdk=no], [], [$CRYSTAL_CFLAGS], [], [$CRYSTAL_LIBS])]) AS_IF([test "$cel_sdk" = yes], [CEL_AVAILABLE=yes $2], [CEL_AVAILABLE=no CEL_CFLAGS='' CEL_VERSION='' CEL_LIBS='' CEL_INCLUDE_DIR='' $3]) ]) #------------------------------------------------------------------------------ # CS_PATH_CEL_HELPER([MINIMUM-VERSION], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND], [REQUIRED-LIBS], # [OPTIONAL-LIBS]) # Deprecated: Backward compatibility wrapper for CS_PATH_CEL_CHECK(). #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_CEL_HELPER], [CS_PATH_CEL_CHECK([$1],[$2],[$3],[$4],[$5])]) #------------------------------------------------------------------------------ # CS_PATH_CEL([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], # [REQUIRED-LIBS], [OPTIONAL-LIBS]) # Convenience wrapper for CS_PATH_CEL_CHECK() which also invokes # AC_SUBST() for CEL_AVAILABLE, CEL_VERSION, CEL_CFLAGS, # CEL_LIBS, CEL_INCLUDE_DIR, and CEL_AVAILABLE_LIBS. #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_CEL], [CS_PATH_CEL_CHECK([$1],[$2],[$3],[$4],[$5]) AC_SUBST([CEL_AVAILABLE]) AC_SUBST([CEL_VERSION]) AC_SUBST([CEL_CFLAGS]) AC_SUBST([CEL_LIBS]) AC_SUBST([CEL_INCLUDE_DIR]) AC_SUBST([CEL_AVAILABLE_LIBS]) AC_SUBST([CEL_STATICDEPS])]) #------------------------------------------------------------------------------ # CS_PATH_CEL_EMIT([MINIMUM-VERSION], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND], [REQUIRED-LIBS], [OPTIONAL-LIBS], # [EMITTER]) # Convenience wrapper for CS_PATH_CEL_CHECK() which also emits # CEL_AVAILABLE, CEL_VERSION, CEL_CFLAGS, CEL_LIBS, # CEL_INCLUDE_DIR, and CEL_AVAILABLE_LIBS as the build properties # CEL.AVAILABLE, CEL.VERSION, CEL.CFLAGS, CEL.LIBS, # CEL.INCLUDE_DIR, and CEL.AVAILABLE_LIBS, respectively, using # EMITTER. EMITTER is a macro name, such as CS_JAMCONFIG_PROPERTY or # CS_MAKEFILE_PROPERTY, which performs the actual task of emitting the # property and value. If EMITTER is omitted, then # CS_EMIT_BUILD_PROPERTY()'s default emitter is used. #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_CEL_EMIT], [CS_PATH_CEL_CHECK([$1],[$2],[$3],[$4],[$5]) _CS_PATH_CEL_EMIT([CEL.AVAILABLE],[$CEL_AVAILABLE],[$6]) _CS_PATH_CEL_EMIT([CEL.VERSION],[$CEL_VERSION],[$6]) _CS_PATH_CEL_EMIT([CEL.CFLAGS],[$CEL_CFLAGS],[$6]) _CS_PATH_CEL_EMIT([CEL.LFLAGS],[$CEL_LIBS],[$6]) _CS_PATH_CEL_EMIT([CEL.INCLUDE_DIR],[$CEL_INCLUDE_DIR],[$6]) _CS_PATH_CEL_EMIT([CEL.AVAILABLE_LIBS],[$CEL_AVAILABLE_LIBS],[$6]) _CS_PATH_CEL_EMIT([CEL.STATICDEPS],[$CEL_STATICDEPS],[$6]) ]) AC_DEFUN([_CS_PATH_CEL_EMIT], [CS_EMIT_BUILD_PROPERTY([$1],[$2],[],[],[$3])]) #------------------------------------------------------------------------------ # CS_PATH_CEL_JAM([MINIMUM-VERSION], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND], [REQUIRED-LIBS], [OPTIONAL-LIBS]) # Deprecated: Jam-specific backward compatibility wrapper for # CS_PATH_CEL_EMIT(). #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_CEL_JAM], [CS_PATH_CEL_EMIT([$1],[$2],[$3],[$4],[$5],[CS_JAMCONFIG_PROPERTY])]) crystalspace-glshader-cg-2.0/mk/autoconf/textcache.m40000644000175000017500000000772311473743544022216 0ustar devfildevfil# textcache.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # Text cache facility. These macros provide a way to incrementally store # arbitrary text in a shell variable, and to write the saved text to a file. # # CS_TEXT_CACHE_APPEND(VARIABLE, TEXT) # Append text to the contents of the named shell variable. If the text # contains references to shell variables (such as $foo), then those # references will be expanded. If expansion is not desired, then protect # the text with AS_ESCAPE(). # # CS_TEXT_CACHE_PREPEND(VARIABLE, TEXT) # Prepend text to the contents of the named shell variable. If the text # contains references to shell variables (such as $foo), then those # references will be expanded. If expansion is not desired, then protect # the text with AS_ESCAPE(). # # CS_TEXT_CACHE_OUTPUT(VARIABLE, FILENAME) # Instruct config.status to write the contents of the named shell # variable to the given filename. If the file resides in a directory, # the directory will be created, if necessary. If the output file # already exists, and if the cached text is identical to the contents of # the existing file, then the existing file is left alone, thus its time # stamp remains unmolested. This heuristic may help to minimize rebuilds # when the file is listed as a dependency in a makefile. # # *NOTE* # There is a bug in Autoconf 2.57 and probably all earlier 2.5x versions # which results in errors if AC_CONFIG_COMMANDS is invoked for a `tag' # which represents a file in a directory which does not yet exist. # Unfortunately, even invoking AS_MKDIR_P in the `cmd' portion of # AC_CONFIG_COMMANDS does not solve the problem because the generated # configure script attempts to access information about the directory # before AS_MKDIR_P has a chance to create it. This forces us to invoke # AS_MKDIR_P in the third argument to AC_CONFIG_COMMANDS (the # `init-cmds') rather than the second (the `cmds'). This is undesirable # because it means that the directory will be created anytime # config.status is invoked (even for a simple --help), rather than being # created only when requested to output the text cache. This bug was # submitted to the Autoconf GNATS database by Eric Sunshine as #228 on # 27-Dec-2002. It was fixed for Autoconf 2.58 on 26-Sep-2003. The # official fix makes the assumption that `tag' always represents a file # (as opposed to some generic target), and creates the file's directory # is not present. #------------------------------------------------------------------------------ AC_DEFUN([CS_TEXT_CACHE_APPEND], [$1="${$1}$2"]) AC_DEFUN([CS_TEXT_CACHE_PREPEND], [$1="$2${$1}"]) AC_DEFUN([CS_TEXT_CACHE_OUTPUT], [AC_CONFIG_COMMANDS([$2], [echo $ECHO_N "$$1$ECHO_C" > $tmp/tcache AS_IF([diff $2 $tmp/tcache >/dev/null 2>&1], [AC_MSG_NOTICE([$2 is unchanged])], [rm -f $2 cp $tmp/tcache $2]) rm -f $tmp/tcache], [$1='$$1' cs_dir=`AS_DIRNAME([$2])` AS_ESCAPE(AS_MKDIR_P([$cs_dir]), [$`\])])]) crystalspace-glshader-cg-2.0/mk/autoconf/listutil.m40000644000175000017500000000420111473743544022103 0ustar devfildevfil# listutil.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2008 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_MEMBERSHIP_ANY(ITEMS, LIST, [IS-MEMBER], [IS-NOT-MEMBER]) # Test ITEMS for membership in LIST, both of which are comma-separated m4 # lists. If any members of ITEMS are present in LIST, then IS-MEMBER is # expanded once, regardless of how many matches are found. If no members # of ITEMS are in LIST, then IS-NOT-MEMBER is expanded. As a convenience, # the m4 variable 'cs_is_member_matches' is set to a comma-separated list # of elements from ITEMS which exist in LIST. #------------------------------------------------------------------------------ AC_DEFUN([CS_MEMBERSHIP_ANY], [m4_define([cs_is_member_matches], [])dnl m4_define([_cs_is_member_found], [])dnl m4_foreach([_cs_is_member_list_item], [$2],dnl [m4_foreach([_cs_is_member_item], [$1],dnl [m4_if(_cs_is_member_item, _cs_is_member_list_item,dnl [m4_define([cs_is_member_matches],dnl cs_is_member_matches[]m4_ifval(dnl cs_is_member_matches, [[,]])_cs_is_member_item)dnl m4_define([_cs_is_member_found], [yes])])])])dnl m4_ifval(_cs_is_member_found, [$3], [$4])]) crystalspace-glshader-cg-2.0/mk/autoconf/jamcache.m40000644000175000017500000000664611473743544022004 0ustar devfildevfil# jamcache.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # Text cache facility for Jam-style properties. The cache is stored in # the shell variable cs_jamfile_text. # # CS_JAMCONFIG_APPEND(TEXT) # Append text to the Jam text cache. This is a cover for # CS_TEXT_CACHE_APPEND(). # # CS_JAMCONFIG_PREPEND(TEXT) # Prepend text to the Jam text cache. This is a cover for # CS_TEXT_CACHE_PREPEND(). # # CS_JAMCONFIG_PROPERTY(KEY, VALUE, [OPTIONS]) # Append, by default, a line of the form "KEY ?= VALUE" to the Jam text # cache. OPTIONS is a comma-separated list of keywords which alter the # format of the emitted line. The following options are understood: # append - Employ += appending assignment. # atomic - Emit VALUE as an atomic (quote-enclosed) string. # conditional - Employ ?= optional assignment (the default). # default - Alias for "conditional". # unconditional - Employ = unconditional assignment. # For backward compatibility, if OPTIONS is not one of the above keywords # and is not the empty string, then "append" is assumed. Furthermore, if # the macro is invoked with a non-empty fourth argument, then # "unconditional" is assumed. Note that if VALUE references other Jam # variables, for example $(OBJS), then be sure to protect the value with # AS_ESCAPE(). For example: # CS_JAMCONFIG_PROPERTY([ALLOBJS], [AS_ESCAPE([$(OBJS) $(LIBOBJS)])]) # # CS_JAMCONFIG_OUTPUT(FILENAME) # Instruct config.status to write the Jam text cache to the given # filename. This is a cover for CS_TEXT_CACHE_OUTPUT(). #------------------------------------------------------------------------------ AC_DEFUN([CS_JAMCONFIG_APPEND], [CS_TEXT_CACHE_APPEND([cs_jamconfig_text], [$1])]) AC_DEFUN([CS_JAMCONFIG_PREPEND], [CS_TEXT_CACHE_PREPEND([cs_jamconfig_text], [$1])]) AC_DEFUN([CS_JAMCONFIG_PROPERTY], [CS_JAMCONFIG_APPEND( [$1 dnl CS_MEMBERSHIP_ANY([append], [$3], [+=], [CS_MEMBERSHIP_ANY([unconditional], [$3], [=], [CS_MEMBERSHIP_ANY([conditional, default], [$3], [?=], [CS_MEMBERSHIP_ANY([atomic], [$3], [?=], dnl Backward compatibility. [m4_ifval([$3], [+=], dnl Backward compatibility. [m4_ifval([$4], [=], dnl Backward compatibility. [?=])])])])])]) dnl _CS_JAMCONFIG_QUOTE([$2], CS_MEMBERSHIP_ANY([atomic], [$3], [\"])) ; ])]) AC_DEFUN([_CS_JAMCONFIG_QUOTE], [$2$1$2]) AC_DEFUN([CS_JAMCONFIG_OUTPUT], [CS_TEXT_CACHE_OUTPUT([cs_jamconfig_text], [$1])]) crystalspace-glshader-cg-2.0/mk/autoconf/mkdir.m40000644000175000017500000000762211473743544021352 0ustar devfildevfil# mkdir.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_CHECK_MKDIR # Determine how to create a directory and a directory tree. Sets the # shell variable MKDIR to the command which creates a directory, and # MKDIRS to the command which creates a directory tree. Invokes # AC_SUBST() for MKDIR and MKDIRS. # # IMPLEMENTATION NOTES # We need to know the exact commands, so that we can emit them, thus the # AS_MKDIR_P function is not what we want to use here since it does not # provide access to the commands (and might not even discover suitable # commands). First try "mkdir -p", then try the older "mkdirs". # Finally, if the mkdir command failed to recognize -p, then it might # have created a directory named "-p", so clean up that bogus directory. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_MKDIR], [AC_CACHE_CHECK([how to create a directory], [cs_cv_shell_mkdir], [cs_cv_shell_mkdir='mkdir']) AC_SUBST([MKDIR], [$cs_cv_shell_mkdir]) AC_CACHE_CHECK([how to create a directory tree], [cs_cv_shell_mkdir_p], [if $cs_cv_shell_mkdir -p . 2>/dev/null; then cs_cv_shell_mkdir_p='mkdir -p' elif mkdirs . 2>/dev/null; then cs_cv_shell_mkdir_p='mkdirs' fi test -d ./-p && rmdir ./-p]) AS_VAR_SET_IF([cs_cv_shell_mkdir_p], [AC_SUBST([MKDIRS], [$cs_cv_shell_mkdir_p])], [CS_MSG_ERROR([do not know how to create a directory tree])])]) #------------------------------------------------------------------------------ # Replacement for AS_MKDIR_P() from m4sugar/m4sh.m4 which fixes two problems # which are present in Autoconf 2.57 and probably all earlier 2.5x versions. # This bug, along with a patch, was submitted to the Autoconf GNATS database by # Eric Sunshine as #227 on 17-Dec-2002. The bogus "-p" directory bug was fixed # for Autoconf 2.58 on 26-Sep-2003. The "mkdirs" optimization was not accepted # (since it is unnecessary; it's only an optimization). # # 1) Removes bogus "-p" directory which the stock AS_MKDIR_P() leaves laying # around in the working directory if the mkdir command does not recognize # the -p option. # 2) Takes advantage of the older "mkdirs" program if it exists and if "mkdir # -p" does not work. #------------------------------------------------------------------------------ m4_defun([_AS_MKDIR_P_PREPARE], [if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p' elif mkdirs . 2>/dev/null; then as_mkdir_p='mkdirs' else as_mkdir_p='' fi test -d ./-p && rmdir ./-p ])# _AS_MKDIR_P_PREPARE m4_define([AS_MKDIR_P], [AS_REQUIRE([_$0_PREPARE])dnl { if test -n "$as_mkdir_p"; then $as_mkdir_p $1 else as_dir=$1 as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`AS_DIRNAME("$as_dir")` done test ! -n "$as_dirs" || mkdir $as_dirs fi || AS_ERROR([cannot create directory $1]); } ])# AS_MKDIR_P crystalspace-glshader-cg-2.0/mk/autoconf/path.m40000644000175000017500000001374611473743544021204 0ustar devfildevfil# path.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2004,2008 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_PATH_NORMALIZE_EMBEDDED(STRING) # Normalize all paths embedded in STRING at run-time by transliterating # Windows/DOS backslashes to forward slashes. Also collapses whitespace. # This is useful when applied to command output which may include # embedded Windows-style paths since the backslashes in those paths could # be incorrectly interpreted in the context of Makefiles or other # development utilities. For instance, a string such as "-Ic:\foo\inc # -Ic:\foo\local\inc" is normalized to "-Ic:/foo/inc -Ic:/foo/local/inc". # # Usage: opts=CS_PATH_NORMALIZE_EMBEDDED([$opts]) #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_NORMALIZE_EMBEDDED], [`echo "x$1" | tr '\\\\' '/' | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'`]) #------------------------------------------------------------------------------ # CS_PATH_NORMALIZE_OUTPUT(COMMAND) # Normalize all paths emitted by COMMAND by transliterating Windows/DOS # backslashes to forward slashes. Also collapses whitespace. This is # useful when the output of COMMAND may include embedded Windows-style # paths since the backslashes in those paths could be incorrectly # interpreted in the context of Makefiles or other development # utilities. For instance, if COMMAND "pkg-config --cflags foo" emits # "-Ic:\foo\inc -Ic:\foo\local\inc", the output is normalized to # "-Ic:/foo/inc -Ic:/foo/local/inc". # # Usage: opts=CS_PATH_NORMALIZE_OUTPUT([$cmd]) #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_NORMALIZE_OUTPUT], [`AC_RUN_LOG([$1]) | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'`]) #------------------------------------------------------------------------------ # CS_PATH_NORMALIZE(STRING) # DEPRECATED: Use CS_PATH_NORMALIZE_EMBEDDED() instead. #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_NORMALIZE], [CS_PATH_NORMALIZE_EMBEDDED([$1])]) #------------------------------------------------------------------------------ # CS_RUN_PATH_NORMALIZE(COMMAND) # DEPRECATED: Use CS_PATH_NORMALIZE_OUTPUT() instead. #------------------------------------------------------------------------------ AC_DEFUN([CS_RUN_PATH_NORMALIZE], [CS_PATH_NORMALIZE_OUTPUT([$1])]) #------------------------------------------------------------------------------ # CS_PATH_CANONICALIZE(PATH) # Canonicalize PATH by transliterating Windows/DOS backslashes to forward # slashes. On MSYS/MinGW, also converts MSYS-style paths # (ex. /home/foo/bar/, /c/foo/bar) to proper Windows-style paths # (ex. c:/msys/home/foo/bar, c:/foo/bar). This is important because an # MSYS-style path is meaningful only to MSYS, but not to utilities which # might be invoked by a Makefile or other build tool. Such utilities # invariably expect Windows-style paths. # # Usage: path=CS_PATH_CANONICALIZE([$path]) #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_CANONICALIZE], [$( cs_indir=CS_PATH_NORMALIZE_EMBEDDED([$1]) MSYS_AC_CANONICAL_PATH([cs_outdir], [$cs_indir]) echo $cs_outdir )]) #------------------------------------------------------------------------------ # MSYS_AC_CANONICAL_PATH(VAR, PATHNAME) # Set VAR to the canonically resolved absolute equivalent of PATHNAME, # (which may be a relative path, and need not refer to any existing # entity). # # On Win32-MSYS build hosts, the returned path is resolved to its true # native Win32 path name (but with slashes, not backslashes). # # On any other system, it is simply the result which would be obtained if # PATHNAME represented an existing directory, and the pwd command was # executed in that directory. # # Author: Keith Marshall # Source: http://article.gmane.org/gmane.comp.gnu.mingw.msys/2785 #------------------------------------------------------------------------------ AC_DEFUN([MSYS_AC_CANONICAL_PATH], [ac_dir="$2" pwd -W >/dev/null 2>&1 && ac_pwd_w="pwd -W" || ac_pwd_w=pwd until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w` do ac_dir=`AS_DIRNAME(["$ac_dir"])` done ac_dir=`echo "$ac_dir" | sed 's?^[[./]]*??'` ac_val=`echo "$ac_val" | sed 's?/*$[]??'` $1=`echo "$2" | sed "s?^[[./]]*$ac_dir/*?$ac_val/?"';s?/*$[]??'`]) #------------------------------------------------------------------------------ # CS_PATH_INIT # Initialize commonly-used variable substitutions via AC_SUBST(). # Present implementation publishes CS_TOP_SRCDIR and CS_TOP_BUILDDIR, # which are canonicalized counterparts (via CS_PATH_CANONICALIZE()) of # Autoconf's top_srcdir and top_builddir substitutions (ex: in source # file, use @CS_TOP_SRCDIR@ rather than @top_srcdir@). #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_INIT], [AC_SUBST([CS_TOP_SRCDIR], [CS_PATH_CANONICALIZE([$srcdir])]) AC_SUBST([CS_TOP_BUILDDIR], [.]) ]) crystalspace-glshader-cg-2.0/mk/autoconf/warnings.m40000644000175000017500000002616611473743544022100 0ustar devfildevfil# warnings.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2005-2008 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_COMPILER_WARNINGS([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # Check how to enable compilation warnings. If LANGUAGE is not provided, # then `C' is assumed (other options include `C++'). If CACHE-VAR is not # provided, then it defaults to the name # "cs_cv_prog_{language}_enable_warnings" where {language} is the result # of CS_TR_SH_lang(). If an option for enabling warnings (such as # `-Wall') is discovered, then it is assigned to CACHE-VAR and # ACTION-IF-FOUND is invoked; otherwise the empty string is assigned to # CACHE-VAR and ACTION-IF-NOT-FOUND is invoked. # # IMPLEMENTATION NOTES # # On some platforms, it is more appropriate to use -Wmost rather than # -Wall even if the compiler understands both, thus we attempt -Wmost # before -Wall. #------------------------------------------------------------------------------ AC_DEFUN([CS_COMPILER_WARNINGS], [CS_CHECK_BUILD_FLAGS( [how to enable ]CS_LANG_RESOLVE([$1])[ compilation warnings], [_CS_WARNING_CACHE_VAR([$2], [$1], [enable_warnings])], [CS_CREATE_TUPLE([-Wmost]) CS_CREATE_TUPLE([-Wall])], [$1], [$3], [$4])]) #------------------------------------------------------------------------------ # CS_COMPILER_ERRORS([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # Check how to promote compilation diganostics from warning to error # status. If LANGUAGE is not provided, then `C' is assumed (other options # include `C++'). If CACHE-VAR is not provided, then it defaults to the # name "cs_cv_prog_{language}_enable_errors" where {language} is the # result of CS_TR_SH_lang(). If an option for performing this promotion # (such as `-Werror') is discovered, then it is assigned to CACHE-VAR and # ACTION-IF-FOUND is invoked; otherwise the empty string is assigned to # CACHE-VAR and ACTION-IF-NOT-FOUND is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_COMPILER_ERRORS], [CS_CHECK_BUILD_FLAGS( [how to treat ]CS_LANG_RESOLVE([$1])[ warnings as errors], [_CS_WARNING_CACHE_VAR([$2], [$1], [enable_errors])], [CS_CREATE_TUPLE([-Werror])], [$1], [$3], [$4])]) #------------------------------------------------------------------------------ # CS_COMPILER_IGNORE_UNUSED([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # Check how to instruct compiler to ignore unused variables and # arguments. This option may be useful for code generated by tools, such # as Swig, Bison, and Flex, over which the client has no control, yet # wishes to compile without excessive diagnostic spew. If LANGUAGE is # not provided, then `C' is assumed (other options include `C++'). If # CACHE-VAR is not provided, then it defaults to the name # "cs_cv_prog_{language}_ignore_unused" where {language} is the result of # CS_TR_SH_lang(). If an option (such as `-Wno-unused') is discovered, # then it is assigned to CACHE-VAR and ACTION-IF-FOUND is invoked; # otherwise the empty string is assigned to CACHE-VAR and # ACTION-IF-NOT-FOUND is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_COMPILER_IGNORE_UNUSED], [CS_CHECK_BUILD_FLAGS( [_CS_WARNING_SUPPRESS_MSG([unused variable], [$1])], [_CS_WARNING_CACHE_VAR([$2], [$1], [ignore_unused])], [CS_CREATE_TUPLE([-Wno-unused])], [$1], [$3], [$4])]) #------------------------------------------------------------------------------ # CS_COMPILER_IGNORE_UNINITIALIZED([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # Check how to instruct compiler to ignore uninitialized variables. This # option may be useful for code generated by tools, such as Swig, Bison, # and Flex, over which the client has no control, yet wishes to compile # without excessive diagnostic spew. If LANGUAGE is not provided, then # `C' is assumed (other options include `C++'). If CACHE-VAR is not # provided, then it defaults to the name # "cs_cv_prog_{language}_ignore_uninitialized" where {language} is the # result of CS_TR_SH_lang(). If an option (such as `-Wno-uninitialized') # is discovered, then it is assigned to CACHE-VAR and ACTION-IF-FOUND is # invoked; otherwise the empty string is assigned to CACHE-VAR and # ACTION-IF-NOT-FOUND is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_COMPILER_IGNORE_UNINITIALIZED], [CS_CHECK_BUILD_FLAGS( [_CS_WARNING_SUPPRESS_MSG([uninitialized variable], [$1])], [_CS_WARNING_CACHE_VAR([$2], [$1], [ignore_uninitialized])], [CS_CREATE_TUPLE([-Wno-uninitialized])], [$1], [$3], [$4])]) #------------------------------------------------------------------------------ # CS_COMPILER_IGNORE_PRAGMAS([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # Check how to instruct compiler to ignore unrecognized #pragma # directives. This option may be useful for code which contains # unprotected #pragmas which are not understood by all compilers. If # LANGUAGE is not provided, then `C' is assumed (other options include # `C++'). If CACHE-VAR is not provided, then it defaults to the name # "cs_cv_prog_{language}_ignore_unknown_pragmas" where {language} is the # result of CS_TR_SH_lang(). If an option (such as # `-Wno-unknown-pragmas') is discovered, then it is assigned to CACHE-VAR # and ACTION-IF-FOUND is invoked; otherwise the empty string is assigned # to CACHE-VAR and ACTION-IF-NOT-FOUND is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_COMPILER_IGNORE_PRAGMAS], [CS_CHECK_BUILD_FLAGS( [_CS_WARNING_SUPPRESS_MSG([unknown [#pragma]], [$1])], [_CS_WARNING_CACHE_VAR([$2], [$1], [ignore_unknown_pragmas])], [CS_CREATE_TUPLE([-Wno-unknown-pragmas])], [$1], [$3], [$4])]) #------------------------------------------------------------------------------ # CS_COMPILER_IGNORE_LONG_DOUBLE([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # Check how to instruct compiler to suppress warnings about `long double' # usage. This option may be useful for code generated by tools, such as # Swig, Bison, and Flex, over which the client has no control, yet wishes # to compile without excessive diagnostic spew. If LANGUAGE is not # provided, then `C' is assumed (other options include `C++'). If # CACHE-VAR is not provided, then it defaults to the name # "cs_cv_prog_{language}_ignore_long_double" where {language} is the # result of CS_TR_SH_lang(). If an option (such as `-Wno-long-double') # is discovered, then it is assigned to CACHE-VAR and ACTION-IF-FOUND is # invoked; otherwise the empty string is assigned to CACHE-VAR and # ACTION-IF-NOT-FOUND is invoked. # # IMPLEMENTATION NOTES # The -Wno-long-double option is specific to the Apple version of g++. # Furthermore, as of at least 2008-04-03, the # CS_CHECK_BUILD_FLAGS([-Wno-long-double]) check spuriously and # incorrectly *succeeds* with g++ 4.2.3 on non-Apple platforms even # though the compiler does not really accept the option. This is a g++ # bug. To work around this issue, the -Wno-long-double check is # performed only on Apple platforms. #------------------------------------------------------------------------------ AC_DEFUN([CS_COMPILER_IGNORE_LONG_DOUBLE], [AC_REQUIRE([CS_CHECK_HOST]) AS_IF([test "$cs_host_target" = macosx], [cs_ignore_long_double_tuples=CS_CREATE_TUPLE([-Wno-long-double])], [cs_ignore_long_double_tuples='']) CS_CHECK_BUILD_FLAGS( [_CS_WARNING_SUPPRESS_MSG([`long double'], [$1])], [_CS_WARNING_CACHE_VAR([$2], [$1], [ignore_long_double])], [$cs_ignore_long_double_tuples], [$1], [$3], [$4])]) #------------------------------------------------------------------------------ # CS_COMPILER_IGNORE_NON_VIRTUAL_DTOR([LANGUAGE], [CACHE-VAR], # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # Check how to instruct compiler to ignore non-virtual destructors in # classes containing virtual methods. This option may be useful to # suppress warnings about code over which we have no control, such as # 3rd-party headers or code generated by tools. If LANGUAGE is not # provided, then `C' is assumed (other options include `C++'). If # CACHE-VAR is not provided, then it defaults to the name # "cs_cv_prog_{language}_ignore_non_virtual_dtor" where {language} is the # result of CS_TR_SH_lang(). If an option (such as # `-Wno-non-virtual-dtor') is discovered, then it is assigned to # CACHE-VAR and ACTION-IF-FOUND is invoked; otherwise the empty string is # assigned to CACHE-VAR and ACTION-IF-NOT-FOUND is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_COMPILER_IGNORE_NON_VIRTUAL_DTOR], [CS_CHECK_BUILD_FLAGS( [_CS_WARNING_SUPPRESS_MSG([non-virtual destructor], [$1])], [_CS_WARNING_CACHE_VAR([$2], [$1], [ignore_non_virtual_dtor])], [CS_CREATE_TUPLE([-Wno-non-virtual-dtor])], [$1], [$3], [$4])]) #------------------------------------------------------------------------------ # _CS_WARNING_SUPPRESS_MSG(DESCRIPTION, [LANGUAGE]) # Helper macro which composes the message for warning suppression # checks. DESCRIPTION is a human-readable description of the particular # check. LANGUAGE is the language being checked, typically `C' or `C++' # (defaulting to `C' if not provided). #------------------------------------------------------------------------------ AC_DEFUN([_CS_WARNING_SUPPRESS_MSG], [how to suppress CS_LANG_RESOLVE([$2]) $1 warnings]) #------------------------------------------------------------------------------ # _CS_WARNING_CACHE_VAR([CACHE-VAR], [LANGUAGE], DEFAULT-CACHE-VAR-SUFFIX) # Helper macro which returns the client-supplied cache variable name or # composes one from LANGUAGE and DEFAULT-CACHE-VAR-SUFFIX if not # provided. LANGUAGE typically is `C' or `C++' (defaulting to `C' if not # provided). #------------------------------------------------------------------------------ AC_DEFUN([_CS_WARNING_CACHE_VAR], [m4_default([$1], [CS_TR_SH_lang([cs_cv_prog_]CS_LANG_RESOLVE([$2])[_$3])])]) crystalspace-glshader-cg-2.0/mk/autoconf/language.m40000644000175000017500000000510711473743544022023 0ustar devfildevfil# language.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2008 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_TR_SH_Lang(ARG) # CS_TR_SH_lang(ARG) # CS_TR_SH_LANG(ARG) # Similar to AS_TR_SH(), but converts "+" in ARG to "x" rather than "p" # since "x" is more suitable in a context dealing with programming # languages. For instance, CS_TR_SH_Lang([C++]) becomes "Cxx", rather # than the less idiomatic "Cpp" as would be the case with AS_TR_SH(). # Useful for composing shell variable names pertaining to a particular # language. For instance, if the language upon which a macro operates is # in $1, then the macro may compose a shell variable name using # CS_TR_SH_lang([cs_cv_prog_$1_feature]). CS_TR_SH_Lang() performs no # case-folding on ARG. CS_TR_SH_lang() folds ARG to lowercase. # CS_TR_SH_LANG() folds ARG to uppercase. #------------------------------------------------------------------------------ AC_DEFUN([CS_TR_SH_Lang], [AS_TR_SH(m4_translit([$1],[+],[x]))]) AC_DEFUN([CS_TR_SH_lang], [AS_TR_SH(m4_translit([$1],[+A-Z],[xa-z]))]) AC_DEFUN([CS_TR_SH_LANG], [AS_TR_SH(m4_translit([$1],[+a-z],[XA-Z]))]) #------------------------------------------------------------------------------ # CS_LANG_RESOLVE([LANGUAGE], [FALLBACK]) # A convenience for macros which optionally accept a language specifier. # Returns LANGUAGE if non-empty, else returns FALLBACK. If FALLBACK is # not provided, then FALLBACK is assumed to be "C". #------------------------------------------------------------------------------ AC_DEFUN([CS_LANG_RESOLVE], [m4_default([$1],m4_default([$2],[C]))]) crystalspace-glshader-cg-2.0/mk/autoconf/cs_check_host.m40000644000175000017500000002355611473743544023047 0ustar devfildevfil#------------------------------------------------------------------------------ # Determine host platform. Recognized families: Unix, Windows, Mac OS X. # Copyright (C)2003-2009 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. # #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ # CS_CHECK_HOST_CPU([EMITTER]) # Set the shell variable cs_host_cpu to a normalized form of the CPU name # returned by config.guess/config.sub. Typically, Crystal Space's # conception of CPU name is the same as that returned by # config.guess/config.sub, but there may be exceptions, such as # normalizing all Intel x86 CPU names to the canonical "x86". Also takes # the normalized name, uppercases it to form a name suitable for the C # preprocessor and publishes it as shell variable cs_host_cpu_normalized. # Additionally, sets the TARGET.PROCESSOR build property to the value of # cs_host_cpu_normalized via the supplied EMITTER. If EMITTER is omitted, # then CS_EMIT_BUILD_PROPERTY()'s default emitter is employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_HOST_CPU], [AC_REQUIRE([AC_CANONICAL_HOST]) case $host_cpu in [[Ii][3-9]86*|[Xx]86*]) cs_host_cpu=x86 ;; powerpc*) cs_host_cpu=powerpc ;; sparc*) cs_host_cpu=sparc ;; mips*) cs_host_cpu=mips ;; alpha*) cs_host_cpu=alpha ;; arm*) cs_host_cpu=arm ;; *) cs_host_cpu=$host_cpu ;; esac cs_host_cpu_normalized="AS_TR_CPP([$cs_host_cpu])" CS_EMIT_BUILD_PROPERTY([TARGET.PROCESSOR], [$cs_host_cpu_normalized], [], [], [$1]) ]) #------------------------------------------------------------------------------ # CS_CHECK_HOST([EMITTER]) # Sets the shell variables cs_host_target, cs_host_family, # cs_host_os_normalized, and cs_host_os_normalized_uc (normalized and # uppercase). Emits appropriate CS_PLATFORM_UNIX, CS_PLATFORM_WIN32, # CS_PLATFORM_MACOSX via AC_DEFINE(). Note that these are not necessarily # mutually exclusive. For instance, on Mac OS X, both CS_PLATFORM_MACOSX # and CS_PLATFORM_UNIX are defined. Furthermore, emits build variables # TARGET.OS and TARGET.OS.NORMALIZED via CS_EMIT_BUILD_PROPERTY() using # the provided EMITTER or CS_EMIT_BUILD_PROPERTY()'s default emitter if # EMITTER is omitted. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_HOST], [AC_REQUIRE([AC_CANONICAL_HOST]) CS_CHECK_HOST_CPU cs_host_os_normalized='' case $host_os in mingw*|cygwin*) cs_host_target=win32gcc cs_host_family=windows ;; darwin*) _CS_CHECK_HOST_DARWIN _CS_CHECK_UNIVERSAL_BINARY ;; *) # Everything else is assumed to be Unix or Unix-like. cs_host_target=unix cs_host_family=unix ;; esac case $cs_host_family in windows) AC_DEFINE([CS_PLATFORM_WIN32], [], [Define when compiling for Win32]) AS_IF([test -z "$cs_host_os_normalized"], [cs_host_os_normalized='Win32']) ;; unix) AC_DEFINE([CS_PLATFORM_UNIX], [], [Define when compiling for Unix and Unix-like (i.e. Mac OS X)]) AS_IF([test -z "$cs_host_os_normalized"], [cs_host_os_normalized='Unix']) ;; esac cs_host_os_normalized_uc="AS_TR_CPP([$cs_host_os_normalized])" CS_EMIT_BUILD_PROPERTY([TARGET.OS], [$cs_host_os_normalized_uc], [], [], [$1]) CS_EMIT_BUILD_PROPERTY([TARGET.OS.NORMALIZED], [$cs_host_os_normalized], [], [], [$1]) ]) #------------------------------------------------------------------------------ # _CS_CHECK_HOST_DARWIN([EMITTER]) # Both Mac OS X and Darwin are identified via $host_os as "darwin". We # need a way to distinguish between the two. If Carbon.h is present, # then assume Mac OX S; if not, assume Darwin. If --with-x=yes was # invoked, and Carbon.h is present, then assume that user wants to # cross-build for Darwin even though build host is Mac OS X. # # IMPLEMENTATION NOTES # # 1. The QuickTime 7.0 installer removes , # which causes #include to fail # unconditionally. Re-installing the QuickTime SDK should restore the # header, however not all developers know to do this, so we work around # the problem of the missing CarbonSound.h by #defining __CARBONSOUND__ # in the test in order to prevent Carbon.h from attempting to #include # the missing header. # # 2. At least one Mac OS X user switches between gcc 2.95 and gcc 3.3 # with a script which toggles the values of CC, CXX, and CPP. # Unfortunately, CPP was being set to run the preprocessor directly # ("cpp", for instance) rather than running it via the compiler ("gcc # -E", for instance). The problem with running the preprocessor directly # is that __APPLE__ and __GNUC__ are not defined, which causes the # Carbon.h check to fail. We avoid this problem by supplying a non-empty # fourth argument to AC_CHECK_HEADER(), which causes it to test compile # the header only (which is a more robust test), rather than also testing # it via the preprocessor. #------------------------------------------------------------------------------ AC_DEFUN([_CS_CHECK_HOST_DARWIN], [AC_REQUIRE([CS_PROG_CC]) AC_REQUIRE([CS_PROG_CXX]) AC_DEFINE([__CARBONSOUND__], [], [Avoid problem caused by missing ]) AC_CHECK_HEADER([Carbon/Carbon.h], [cs_host_macosx=yes], [cs_host_macosx=no], [/* force compile */]) AS_IF([test $cs_host_macosx = yes], [AC_MSG_CHECKING([for --with-x]) AS_IF([test "${with_x+set}" = set && test "$with_x" = "yes"], [AC_MSG_RESULT([yes (assume Darwin)]) cs_host_macosx=no], [AC_MSG_RESULT([no])])]) AS_IF([test $cs_host_macosx = yes], [cs_host_target=macosx cs_host_family=unix cs_host_os_normalized='MacOS/X' AC_DEFINE([CS_PLATFORM_MACOSX], [], [Define when compiling for MacOS/X]) AC_CACHE_CHECK([for Objective-C compiler], [cs_cv_prog_objc], [cs_cv_prog_objc="$CC"]) CS_EMIT_BUILD_PROPERTY([CMD.OBJC], [$cs_cv_prog_objc], [], [], [$1]) AC_CACHE_CHECK([for Objective-C++ compiler], [cs_cv_prog_objcxx], [cs_cv_prog_objcxx="$CXX"]) CS_EMIT_BUILD_PROPERTY([CMD.OBJC++], [$cs_cv_prog_objcxx], [], [], [$1])], [cs_host_target=unix cs_host_family=unix])]) #------------------------------------------------------------------------------ # _CS_CHECK_UNIVERSAL_BINARY([EMITTER]) # Check if Mac OS X universal binaries should be built. This option is # enabled by default on Mac OS X only if the MacOSX10.4u universal SDK is # installed and if not cross-compiling. Otherwise, it is disabled. Emits # CS_UNIVERSAL_BINARY via AC_DEFINE() and CS_HEADER_PROPERTY(), and # augments CFLAGS, CXXFLAGS, and LDFLAGS appropriately when universal # binaries are enabled. Also emits augmented build properties # COMPILER.CFLAGS, COMPILER.C++FLAGS, and COMPILER.LFLAGS via # CS_EMIT_BUILD_PROPERTY() using the optional EMITTER or # CS_EMIT_BUILD_PROPERTY()'s default emitter if EMITTER is omitted. #------------------------------------------------------------------------------ m4_define([CS_UNIVERSAL_ARCHS], [i386, ppc]) m4_define([CS_UNIVERSAL_SDK], [/Developer/SDKs/MacOSX10.4u.sdk]) m4_define([CS_UNIVERSAL_ARCHS_LIST], m4_foreach([arch], [CS_UNIVERSAL_ARCHS], [[-arch] arch ])) m4_define([CS_UNIVERSAL_CFLAGS], [-isysroot CS_UNIVERSAL_SDK -mmacosx-version-min=10.4]) m4_define([CS_UNIVERSAL_CXXFLAGS], [CS_UNIVERSAL_CFLAGS]) m4_define([CS_UNIVERSAL_LDFLAGS], [-Wl,-syslibroot,CS_UNIVERSAL_SDK]) AC_DEFUN([_CS_CHECK_UNIVERSAL_BINARY], [AS_IF([test "$cs_host_target" = macosx && test "$cross_compiling" != yes && test -d "CS_UNIVERSAL_SDK"], [cs_universal_binary_default=yes], [cs_universal_binary_default=no]) AC_MSG_CHECKING([whether to build universal binaries]) AC_ARG_ENABLE([universal-binary], [AC_HELP_STRING([--enable-universal-binary], [build Mac OS X universal binaries (default YES on Mac OS X with universal SDK installed, else NO)])], [cs_universal_binary=$enableval], [cs_universal_binary=$cs_universal_binary_default]) AC_MSG_RESULT([$cs_universal_binary]) AS_IF([test "$cs_universal_binary" = yes], [AC_DEFINE([CS_UNIVERSAL_BINARY], [1], [Define if building universal binaries on MacOSX.]) CFLAGS="$CFLAGS CS_UNIVERSAL_CFLAGS CS_UNIVERSAL_ARCHS_LIST" CXXFLAGS="$CXXFLAGS CS_UNIVERSAL_CXXFLAGS CS_UNIVERSAL_ARCHS_LIST" LDFLAGS="$LDFLAGS CS_UNIVERSAL_LDFLAGS CS_UNIVERSAL_ARCHS_LIST" CS_HEADER_PROPERTY([CS_UNIVERSAL_BINARY]) CS_EMIT_BUILD_PROPERTY([COMPILER.CFLAGS], [CS_UNIVERSAL_CFLAGS CS_UNIVERSAL_ARCHS_LIST], [append]) CS_EMIT_BUILD_PROPERTY([COMPILER.C++FLAGS], [CS_UNIVERSAL_CXXFLAGS CS_UNIVERSAL_ARCHS_LIST], [append]) CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [CS_UNIVERSAL_LDFLAGS CS_UNIVERSAL_ARCHS_LIST], [append])])]) crystalspace-glshader-cg-2.0/mk/autoconf/checkcswin32libs.m40000644000175000017500000001120111473743544023370 0ustar devfildevfil# checkcswin32libs.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2005,2006 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_CHECK_CSWIN32LIBS # Check for the cs-win32libs package. It is a convenience archive made # available to Crystal Space clients targetting Windows. It contains # common libraries, headers, and tools (such as zlib, libjpeg, cal3d, # etc.) usable by MSVC, Mingw/MSYS, and Cygwin users as well as in cross- # compile environments. It saves users the bother of having to install # these packages manually one at a time. # # The package provides a script 'cslibs-config' which can report the # compiler and linker flags necessary to utilize the contained # third-party libraries. If this script is found, the reported flags and # paths are added to the CFLAGS, CPPFLAGS, LDFLAGS, PATH, and # PKG_CONFIG_PATH shell variables. # # This macro exports the following shell variables containing the results # of the test: # # cs_cv_cslibs ('yes' or 'no') # cs_cv_cslibs_cflags # cs_cv_cslibs_lflags # cs_cv_cslibs_binpath # cs_cv_cslibs_incpath (header search list) # cs_cv_cslibs_pcpath (pkgconfig search list) #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_CSWIN32LIBS], [AC_REQUIRE([AC_CANONICAL_BUILD]) AC_REQUIRE([AC_CANONICAL_HOST]) # ensure PKGCONFIG is set since we may meddle with it AC_REQUIRE([_CS_CHECK_PKG_CONFIG_PREPARE_PATH]) AC_REQUIRE([CS_CHECK_MNO_CYGWIN]) case $host_os in mingw*|cygwin*) # Always look for a cs-win32libs version that begins with the host # tuple, even if the default host is used AS_IF([test "$ac_cv_host" == "$ac_cv_build"], [CS_CHECK_TOOLS([CSLIBS_CONFIG], [$ac_cv_host-cslibs-config])]) AS_IF([test -z "$CSLIBS_CONFIG"], [CS_CHECK_TOOLS([CSLIBS_CONFIG], [cslibs-config])]) AS_IF([test $ac_compiler_gnu = yes], [cs_cv_cslibs_compiler="--compiler gcc-`$CXX -dumpversion | sed 's/\([[0-9]]\?\)\.\([[0-9]]\?\)\.[[0-9]]\?/\1.\2/'`"]) AC_CACHE_CHECK([for cslibs package], [cs_cv_cslibs], [AS_IF([test -n "$CSLIBS_CONFIG"], [cs_cv_cslibs=yes AS_IF([test "x$cs_mno_cygwin" = "xyes"], [AS_IF( [$CSLIBS_CONFIG -mno-cygwin --cflags >/dev/null 2>&1], [cs_cv_cslibs_compiler="-mno-cygwin $cs_cv_cslibs_compiler"])]) cs_cv_cslibs_cflags=CS_RUN_PATH_NORMALIZE( [$CSLIBS_CONFIG --cflags $cs_cv_cslibs_compiler]) cs_cv_cslibs_lflags=CS_RUN_PATH_NORMALIZE( [$CSLIBS_CONFIG --lflags $cs_cv_cslibs_compiler]) cs_cv_cslibs_binpath=CS_RUN_PATH_NORMALIZE( [$CSLIBS_CONFIG --binpath $cs_cv_cslibs_compiler]) AS_IF([$CSLIBS_CONFIG --incpath >/dev/null 2>&1], [cs_cv_cslibs_incpath=CS_RUN_PATH_NORMALIZE( [$CSLIBS_CONFIG --incpath $cs_cv_cslibs_compiler])], [cs_cv_cslibs_incpath='']) AS_IF([$CSLIBS_CONFIG --pcpath >/dev/null 2>&1], [cs_cv_cslibs_pcpath=CS_RUN_PATH_NORMALIZE( [$CSLIBS_CONFIG --pcpath $cs_cv_cslibs_compiler])], [cs_cv_cslibs_pcpath=''])], [cs_cv_cslibs=no])]) AS_IF([test $cs_cv_cslibs = yes], [CFLAGS="$CFLAGS $cs_cv_cslibs_cflags" CPPFLAGS="$CPPFLAGS $cs_cv_cslibs_cflags" LDFLAGS="$LDFLAGS $cs_cv_cslibs_lflags" PATH="$cs_cv_cslibs_binpath$PATH_SEPARATOR$PATH" AS_IF([test -n "$cs_cv_cslibs_pcpath"], [PKG_CONFIG_PATH="$cs_cv_cslibs_pcpath$PATH_SEPARATOR$PKG_CONFIG_PATH" export PKG_CONFIG_PATH])]) ;; esac]) crystalspace-glshader-cg-2.0/mk/autoconf/checktt2.m40000644000175000017500000000445011473743544021747 0ustar devfildevfil# checktt2.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2004,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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_CHECK_TEMPLATE_TOOLKIT2([EMITTER]) # Check if Template Toolkit 2 (http://www.tt2.org/) is available. The # shell variable cs_cv_perl_tt2 is set to "yes" if the package is # discovered, else "no". Also sets the shell variable TTREE to the name # path of the 'ttree' utility program and invokes AC_SUBST(). If EMITTER # is provided and the package was discovered, then # CS_EMIT_BUILD_PROPERTY() is invoked with EMITTER in order to record the # value of the TTREE variable in an output file. As a convenience, if # EMITTER is the literal value "emit" or "yes", then # CS_EMIT_BUILD_PROPERTY()'s default emitter will be used. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_TEMPLATE_TOOLKIT2], [CS_CHECK_PROGS([PERL], [perl5 perl]) AS_IF([test -n "$PERL"], [AC_CACHE_CHECK([for TemplateToolkit], [cs_cv_perl_tt2], [AS_IF([AC_RUN_LOG( [$PERL -M'Template 2.11' -MTemplate::Plugin -e 0 1>&2])], [cs_cv_perl_tt2=yes], [cs_cv_perl_tt2=no])]) CS_PATH_PROGS([TTREE], [ttree]) AS_IF([test $cs_cv_perl_tt2 = yes && test -n "$TTREE"], [CS_EMIT_BUILD_PROPERTY([TTREE], [$TTREE], [], [], CS_EMITTER_OPTIONAL([$1]))])])]) crystalspace-glshader-cg-2.0/mk/autoconf/compiler.m40000644000175000017500000003532411510623215022036 0ustar devfildevfil# compiler.m4 -*- Autoconf -*- #============================================================================= # Copyright (C)2003-2009 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. # #============================================================================= #----------------------------------------------------------------------------- # Detection of C and C++ compilers and setting flags # # CS_PROG_CC # Detects the C compiler. Also takes care of the CFLAGS, CPPFLAGS and CC # environment variables. This will filter out all -g and -O from the # CFLAGS variable because Autoconf's -g and -O defaults are not always # desired. This will also set the CMD.CC, COMPILER.CFLAGS, # COMPILER.C.TYPE, and (as an historic anomaly) COMPILER.TYPE variables # in Jamconfig. The shell variable cs_compiler_name_c is also exported. #----------------------------------------------------------------------------- AC_DEFUN([_CS_PROG_CC_CFLAGS_FILTER],[ # Magic to suppress automatic addition of undesirable flags by Autoconf. CFLAGS="$CFLAGS" ]) AC_DEFUN([CS_PROG_CC],[ AC_REQUIRE([_CS_PROG_CC_CFLAGS_FILTER]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AS_IF([test -n "$CC"],[ CS_EMIT_BUILD_PROPERTY([CMD.CC], [$CC]) CS_EMIT_BUILD_PROPERTY([COMPILER.CFLAGS], [$CPPFLAGS $CFLAGS], [+]) _CS_COMPILER_NAME([$CC], [C], [$ac_compiler_gnu]) AC_MSG_CHECKING([for C compiler version]) _CS_COMPILER_VERSION([$CC], [C]) AS_IF([test -z "$_CS_COMPILER_VERSION_SH([C])"], [AC_MSG_RESULT([unknown])], [AC_MSG_RESULT([$_CS_COMPILER_VERSION_SH([C])])]) # Check if compiler recognizes -pipe directive. CS_EMIT_BUILD_FLAGS([if $CC accepts -pipe], [cs_cv_prog_cc_pipe], [CS_CREATE_TUPLE([-pipe])], [C], [COMPILER.CFLAGS], [append]) # Check if compiler recognizes Sparc v9 CPU. Ugly to pollute # project-agnostic C compiler check, but it is needed by assembly code # implementing Sparc atomic threading operations, and it should not # hurt if the option is not recognized. case $host_cpu in sparc*) CS_EMIT_BUILD_FLAGS([if $CC handles Sparc v9], [cs_cv_prog_cc_sparc_v9], [CS_CREATE_TUPLE([-mcpu=v9])], [C], [COMPILER.CFLAGS], [append]) ;; esac # The -ffunction-sections and -fdata-sections can, in conjunction with # the linker flag --gc-sections, reduce the size of the final linked # binaries. CS_EMIT_BUILD_FLAGS([if $CC accepts -ffunction-sections -fdata-sections], [cs_cv_prog_cc_individual_sections], [CS_CREATE_TUPLE([-ffunction-sections -fdata-sections])], [C], [COMPILER.CFLAGS], [append]) ]) ]) #----------------------------------------------------------------------------- # CS_PROG_CXX # Detects the C++ compiler. Also takes care of the CXXFLAGS, CPPFLAGS # and CXX environment variables. This will filter out all -g and -O from # the CXXFLAGS variable because Autoconf's -g and -O defaults are not # always desired. This will also set the CMD.C++, COMPILER.C++FLAGS, # COMPILER.C++.TYPE, and (as an historic anomaly) COMPILER.TYPE variables # in Jamconfig. The shell variable cs_compiler_name_cxx is also exported. #----------------------------------------------------------------------------- AC_DEFUN([_CS_PROG_CXX_CFLAGS_FILTER],[ # Magic to suppress automatic addition of undesirable flags by Autoconf. CXXFLAGS="$CXXFLAGS" ]) AC_DEFUN([CS_PROG_CXX],[ AC_REQUIRE([_CS_PROG_CXX_CFLAGS_FILTER]) AC_REQUIRE([AC_PROG_CXX]) AS_IF([test -n "$CXX"],[ CS_EMIT_BUILD_PROPERTY([CMD.C++], [$CXX]) CS_EMIT_BUILD_PROPERTY([COMPILER.C++FLAGS], [$CPPFLAGS $CXXFLAGS], [+]) _CS_COMPILER_NAME([$CXX], [C++], [$ac_compiler_gnu]) AC_MSG_CHECKING([for C++ compiler version]) _CS_COMPILER_VERSION([$CXX], [C++]) AS_IF([test -z "$_CS_COMPILER_VERSION_SH([C++])"], [AC_MSG_RESULT([unknown])], [AC_MSG_RESULT([$_CS_COMPILER_VERSION_SH([C++])])]) # Check if compiler can be instructed to produce position-independent-code # (PIC). This feature is required by some platforms when building plugin # modules and shared libraries. CS_COMPILER_PIC([C++], [cs_cv_prog_cxx_pic], [CS_EMIT_BUILD_PROPERTY([COMPILER.C++FLAGS.PIC], [$cs_cv_prog_cxx_pic])]) ]) ]) #----------------------------------------------------------------------------- # _CS_COMPILER_NAME(COMPILER, LANGUAGE, [IS_GNU]) # Attempt to glean COMPILER's name and export it as shell variable # cs_compiler_name_{language} and as build properties # COMPILER.LANGUAGE.TYPE and (as an historic anomaly) COMPILER.TYPE. # LANGUAGE is typically either C or C++ and specifies the compiler's # language. If provided, IS_GNU should be 'yes' or 'no', and is employed # as a hint when determining the compiler's name. The output of this # macro is perhaps useful for display purposes, but should not generally # be used for decision making since name-gleaning is unreliable. For # decision-making, it is better to perform actual compiler tests rather # than basing a decision upon the compiler's name. # # *IMPLEMENTATION NOTES* # # Since there is no obvious generic way to determine a compiler's name, # this implementation emits "GCC" if IS_GNU is 'yes', otherwise it # attempts to fashion a name by invoking AS_TR_CPP(COMPILER), but this is # only a very rough and unreliable approximation of the compiler's name. # For instance, if a user configures the project with a non-GNU compiler # by setting the environment variable CXX="ccache c++comp -blazing-fast", # then the gleaned compiler name will be CCACHE_CPPCOMP__BLAZING_FAST # rather than "C++COMP" or "CXXCOMP" as one might expect. # # When fashioning the shell variable name cs_compiler_name_{language}, # "+" in LANGUAGE is replaced with "x", rather than with "p" as would be # the case normally when AS_TR_SH() is employed. The use of "x", however, # is more sensible in this context, since a language of "C++" translates # to "cxx", which is the expected variable name in the context of # compilers. #----------------------------------------------------------------------------- AC_DEFUN([_CS_COMPILER_NAME], [AS_IF([test "m4_default([$3],[no])" = yes], [_CS_COMPILER_NAME_SH([$2])=GCC], [_CS_COMPILER_NAME_SH([$2])=AS_TR_CPP([$1])]) CS_EMIT_BUILD_PROPERTY([COMPILER.$2.TYPE], [$_CS_COMPILER_NAME_SH([$2])]) CS_EMIT_BUILD_PROPERTY([COMPILER.TYPE], [$_CS_COMPILER_NAME_SH([$2])], [], [], [], [Y])]) AC_DEFUN([_CS_COMPILER_NAME_SH], [cs_compiler_name_[]AS_TR_SH(m4_translit([$1],[+A-Z],[xa-z]))]) #----------------------------------------------------------------------------- # _CS_COMPILER_VERSION(COMPILER, LANGUAGE) #----------------------------------------------------------------------------- AC_DEFUN([_CS_COMPILER_VERSION], [case $_CS_COMPILER_NAME_SH([$2]) in GCC) _CS_COMPILER_VERSION_SH([$2])=`$1 -dumpversion` CS_EMIT_BUILD_PROPERTY([COMPILER.$2.VERSION], [$_CS_COMPILER_VERSION_SH([$2])]) CS_EMIT_BUILD_PROPERTY([COMPILER.VERSION], [$_CS_COMPILER_VERSION_SH([$2])], [], [], [], [Y]) _compiler_version_list=`echo $_CS_COMPILER_VERSION_SH([$2]) | sed -e 's/\./ /g'` CS_EMIT_BUILD_PROPERTY([COMPILER.$2.VERSION_LIST], [$_compiler_version_list]) CS_EMIT_BUILD_PROPERTY([COMPILER.VERSION_LIST], [$_compiler_version_list], [], [], [], [Y]) ;; esac]) AC_DEFUN([_CS_COMPILER_VERSION_SH], [cs_compiler_version_[]AS_TR_SH(m4_translit([$1],[+A-Z],[xa-z]))]) #----------------------------------------------------------------------------- # CS_PROG_LINK # Tries to determine a linker. This is done by checking if a C++ or # Objecctive-C++ compiler is available in which case it is used for # linking; otherwise the C or Objective-C compiler is used. This also # sets the CMD.LINK and COMPILER.LFLAGS variables in Jamconfig and # respects the LDFLAGS environment variable. Finally, checks if linker # recognizes -shared and sets PLUGIN.LFLAGS; and checks if linker # recognizes -soname and sets PLUGIN.LFLAGS.USE_SONAME to "yes". # # Also, it is checked whether the linker supports the --as-needed # command line option, and if so, it is employed. As some libraries # reportedly don't support that feature, you can put # $cs_cv_prog_link_no_as_needed and $cs_cv_prog_link_as_needed around # the linker flags to disable this feature for a particular library. #----------------------------------------------------------------------------- AC_DEFUN([CS_PROG_LINK],[ AC_REQUIRE([CS_PROG_CXX]) AS_IF([test -n "$CXX"], [CS_EMIT_BUILD_PROPERTY([CMD.LINK], [AS_ESCAPE([$(CMD.C++)])])], [CS_EMIT_BUILD_PROPERTY([CMD.LINK], [AS_ESCAPE([$(CMD.CC)])])]) CS_CHECK_TOOLS([LD], [ld]) CS_EMIT_BUILD_PROPERTY([CMD.LD], [$LD]) CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [$LDFLAGS], [+]) # Check if compiler/linker recognizes -shared directive which is needed for # linking plugin modules. Unfortunately, the Apple compiler (and possibly # others) requires extra effort. Even though the compiler does not recognize # the -shared option, it nevertheless returns a "success" result after emitting # the warning "unrecognized option `-shared'". Worse, even -Werror fails to # promote the warning to an error, so we must instead scan the compiler's # output for an appropriate diagnostic. CS_CHECK_BUILD_FLAGS([if -shared is accepted], [cs_cv_prog_link_shared], [CS_CREATE_TUPLE([-shared $cs_cv_prog_cxx_pic])], [C++], [CS_EMIT_BUILD_PROPERTY([PLUGIN.LFLAGS], [-shared], [+])], [], [], [], [], [shared]) # Check if linker recognizes -soname which is used to assign a name internally # to plugin modules. CS_CHECK_BUILD([if -soname is accepted], [cs_cv_prog_link_soname], [], [CS_CREATE_TUPLE([-Wl,-soname,foobar])], [C++], [CS_EMIT_BUILD_PROPERTY([PLUGIN.LFLAGS.USE_SONAME], [yes])]) # Check if binutils support response files rm -f conf$$.resp echo "" > conf$$.resp AC_CACHE_CHECK([if response files are accepted], [cs_cv_prog_link_respfile], [AC_LANG_PUSH([C++]) cs_lflags_save="$LDFLAGS" LDFLAGS="-Wl,@conf$$.resp $cs_lflags_save" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [cs_cv_prog_link_respfile=yes], [cs_cv_prog_link_respfile=no]) LDFLAGS=$cs_lflags_save AC_LANG_POP([C++])]) AS_IF([test $cs_cv_prog_link_respfile = yes], [CS_EMIT_BUILD_PROPERTY([LINKER.RESPONSEFILES], [yes])]) rm -f conf$$.resp # Check if linker supports --as-needed. AC_ARG_ENABLE([as-needed], [AC_HELP_STRING([--enable-as-needed], [Utilize --as-needed linker flag, if supported by linker and if the used binutils version is recent enough to support it properly (default YES)])]) AS_IF([test -z "$enable_as_needed"], [enable_as_needed=yes]) AS_IF([test "$enable_as_needed" != "no"], [AC_REQUIRE([CS_CHECK_BINUTILS_2_17]) AS_IF([test "$cs_cv_binutils_2_17" = "yes"], [CS_EMIT_BUILD_FLAGS([if --as-needed is supported], [cs_cv_prog_link_as_needed], [CS_CREATE_TUPLE([-Wl,--as-needed])], [C++], [CMD.LINK], [+]) CS_CHECK_BUILD_FLAGS([if --no-as-needed is supported], [cs_cv_prog_link_no_as_needed], [CS_CREATE_TUPLE([-Wl,--no-as-needed])], [C++])])]) # Check if linker supports --gc-sections. AC_ARG_ENABLE([gc-sections], [AC_HELP_STRING([--enable-gc-sections], [Utilize --gc-sections linker flag for some targets (default YES)])]) AS_IF([test -z "$enable_gc_sections"], [enable_gc_sections=yes]) AS_IF([test "$enable_gc_sections" != "no"], [CS_CHECK_BUILD_FLAGS([if --gc-sections is supported], [cs_cv_prog_link_gc_sections], [CS_CREATE_TUPLE([-Wl,--gc-sections])], [C++], [CS_EMIT_BUILD_PROPERTY([LINK.GC_SECTIONS], [$cs_cv_prog_link_gc_sections])])]) # Check if linker supports --large-address-aware. AC_ARG_ENABLE([large-address-aware], [AC_HELP_STRING([--large-address-aware], [Utilize --large-address-aware linker flag (default YES)])]) AS_IF([test -z "$enable_large_address_aware"], [enable_large_address_aware=yes]) AS_IF([test "$enable_large_address_aware" != "no"], [CS_EMIT_BUILD_FLAGS([if --large-address-aware is supported], [cs_cv_prog_link_large_address_aware], [CS_CREATE_TUPLE([-Wl,--large-address-aware])], [C++], [CMD.LINK], [+])]) ]) #----------------------------------------------------------------------------- # CS_CHECK_MNO_CYGWIN # Check whether the -mno-cygwin flag should be passed to the compiler. # If so, adjust the compiler env vars accordingly. # # Peter Amstutz explains: "Because "gcc -mno-cygwin" is quite literally # another compiler (it actually invokes /usr/lib/gcc/mingw-3.4.4/cc1.exe # instead of /usr/lib/cygwin-3.4.4/cc1.exe) things like the paths to # standard libraries change (out with cygwin headers, in with windows # headers) and generally the surface behavior of the compiler changes # radically. As a result, simply augmenting $CXXFLAGS was problematic # (autoconf tests that didn't have $CXXFLAGS would yield incorrect # results) and it made more sense to have autoconf treat it as if it # were a different compiler entirely." #----------------------------------------------------------------------------- AC_DEFUN([CS_CHECK_MNO_CYGWIN], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_MSG_CHECKING([whether to enable -mno-cygwin]) AC_ARG_ENABLE([mno-cygwin], [AC_HELP_STRING([--enable-mno-cygwin], [Compile with the -mno-cygwin option. (default YES)])], [enable_m_no_cygwin=$enableval], [enable_m_no_cygwin=yes]) AS_IF([test "$enable_m_no_cygwin" != "no"], [case $host_os in cygwin*) AS_IF([test -n "$CC"], [CC="$CC -mno-cygwin"], [CC="gcc -mno-cygwin"]) AS_IF([test -n "$CXX"], [CXX="$CXX -mno-cygwin"], [CXX="g++ -mno-cygwin"]) CPP="$CC -E" CXXCPP="$CXX -E" cs_mno_cygwin=yes ;; *) cs_mno_cygwin=no ;; esac ], [cs_mno_cygwin=no]) AC_MSG_RESULT([$cs_mno_cygwin]) ]) crystalspace-glshader-cg-2.0/mk/autoconf/split.m40000644000175000017500000000504411473743544021373 0ustar devfildevfil# split.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_SPLIT(LINE, [OUTPUT-VARIABLES], [DELIMITER], [FILLER]) # Split LINE into individual tokens. Tokens are delimited by DELIMITER, # which is the space character if omitted. OUTPUT-VARIABLES is a # comma-delimited list of shell variables which should receive the # extracted tokens. If there are too few tokens to fill the output # variables, then the excess variables will be assigned the empty string. # If there are too few output variables, then the excess tokens will be # ignored. If OUTPUT-VARIABLES is omitted, then the split tokens will be # assigned to the shell meta-variables $1, $2, $3, etc. When # OUTPUT-VARIABLES is omitted, FILLER is assigned to meta-variables in # cases where DELIMITER delimits a zero-length token. FILLER defaults # to "filler". For example, if DELIMITER is "+" and OUTPUT-VARIABLES is # omitted, given the line "one++three", $1 will be "one", $2 will be # "filler", and $3 will be "three". #------------------------------------------------------------------------------ AC_DEFUN([CS_SPLIT], [m4_define([cs_split_filler], m4_default([$4],[filler])) set cs_split_filler `echo "$1" | awk 'BEGIN { FS="m4_default([$3],[ ])" } { for (i=1; i <= NF; ++i) { if ($i == "") print "cs_split_filler"; else print $i } }'` shift m4_map([_CS_SPLIT], [$2])]) AC_DEFUN([_CS_SPLIT], [AS_IF([test $[@%:@] -eq 0], [$1=''], [AS_IF([test "$[1]" = cs_split_filler], [$1=''], [$1=$[1]]) shift]) ]) crystalspace-glshader-cg-2.0/mk/autoconf/packageinfo.m40000644000175000017500000000653311473743544022513 0ustar devfildevfil#============================================================================== # packageinfo.m4 # Macros for setting general info on the package, such as name and version # numbers and propagate them to the generated make and Jam property files. # # Copyright (C)2003 by Matthias Braun # Copyright (C)2003,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. # #============================================================================== #------------------------------------------------------------------------------ # CS_PACKAGEINFO([LONGNAME], [COPYRIGHT, [HOMEPAGE]) # Set additional information for the package. Note that the version # number of your application should only contain numbers, because on # Windows you can only set numerical values in some of the file # properties (such as versioninfo .rc files). #------------------------------------------------------------------------------ AC_DEFUN([CS_PACKAGEINFO], [PACKAGE_LONGNAME="[$1]" PACKAGE_COPYRIGHT="[$2]" PACKAGE_HOMEPAGE="[$3]" ]) #------------------------------------------------------------------------------ # CS_EMIT_PACKAGEINFO([EMITTER]) # Emit extended package information using the provided EMITTER. EMITTER # is a macro name, such as CS_JAMCONFIG_PROPERTY or CS_MAKEFILE_PROPERTY, # which performs the actual task of emitting the KEY/VALUE tuple. If # EMITTER is omitted, CS_JAMCONFIG_PROPERTY is used. For backward # compatibility, if EMITTER is the literal value "jam", then # CS_JAMCONFIG_PROPERTY is used; if it is "make", then # CS_MAKEFILE_PROPERTY is used; however use of these literal names is # highly discouraged. #------------------------------------------------------------------------------ AC_DEFUN([CS_EMIT_PACKAGEINFO], [_CS_EMIT_PACKAGEINFO([$1], [PACKAGE_NAME], [$PACKAGE_NAME]) _CS_EMIT_PACKAGEINFO([$1], [PACKAGE_VERSION], [$PACKAGE_VERSION]) _CS_EMIT_PACKAGEINFO([$1], [PACKAGE_STRING], [$PACKAGE_STRING], [atomic]) _CS_EMIT_PACKAGEINFO([$1], [PACKAGE_BUGREPORT], [$PACKAGE_BUGREPORT], [atomic]) _CS_EMIT_PACKAGEINFO([$1], [PACKAGE_LONGNAME], [$PACKAGE_LONGNAME], [atomic]) _CS_EMIT_PACKAGEINFO([$1], [PACKAGE_HOMEPAGE], [$PACKAGE_HOMEPAGE], [atomic]) _CS_EMIT_PACKAGEINFO([$1], [PACKAGE_COPYRIGHT], [$PACKAGE_COPYRIGHT], [atomic]) _CS_EMIT_PACKAGEINFO([$1], [PACKAGE_VERSION_LIST], m4_translit(patsubst(AC_PACKAGE_VERSION, [[^0-9.]+.*$]), [.], [ ])) ]) AC_DEFUN([_CS_EMIT_PACKAGEINFO], [m4_case([$1], [make], [CS_MAKEFILE_PROPERTY([$2], [$3], [$4])], [jam], [CS_JAMCONFIG_PROPERTY([$2], [$3], [$4])], [], [CS_JAMCONFIG_PROPERTY([$2], [$3], [$4])], [$1([$2], [$3], [$4])])]) crystalspace-glshader-cg-2.0/mk/autoconf/config.sub0000755000175000017500000007467011473743544021774 0ustar devfildevfil#! /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: crystalspace-glshader-cg-2.0/mk/autoconf/makecache.m40000644000175000017500000000563111473743544022143 0ustar devfildevfil# makecache.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # Text cache facility for makefile-style properties. The cache is stored in # the shell variable cs_makefile_text. # # CS_MAKEFILE_APPEND(TEXT) # Append text to the makefile text cache. This is a cover for # CS_TEXT_CACHE_APPEND(). # # CS_MAKEFILE_PREPEND(TEXT) # Prepend text to the makefile text cache. This is a cover for # CS_TEXT_CACHE_PREPEND(). # # CS_MAKEFILE_PROPERTY(KEY, VALUE, [OPTIONS]) # Append a line of the form "KEY = VALUE" to the makefile text cache. # OPTIONS is a comma-separated list of keywords which alter the format of # the emitted line. The following options are understood: # append - Employ += appending assignment. # default - Alias for "unconditional". # unconditional - Employ = assignment (the default). # For backward compatibility, if OPTIONS is not one of the above keywords # and is not the empty string, then "append" is assumed. Note that if # VALUE references other makefile variables, for example $(OBJS), then be # sure to protect the value with AS_ESCAPE(). For example: # CS_MAKEFILE_PROPERTY([ALLOBJS], [AS_ESCAPE([$(OBJS) $(LIBOBJS)])]) # # CS_MAKEFILE_OUTPUT(FILENAME) # Instruct config.status to write the makefile text cache to the given # filename. This is a cover for CS_TEXT_CACHE_OUTPUT(). #------------------------------------------------------------------------------ AC_DEFUN([CS_MAKEFILE_APPEND], [CS_TEXT_CACHE_APPEND([cs_makefile_text], [$1])]) AC_DEFUN([CS_MAKEFILE_PREPEND], [CS_TEXT_CACHE_PREPEND([cs_makefile_text], [$1])]) AC_DEFUN([CS_MAKEFILE_PROPERTY], [CS_MAKEFILE_APPEND( [$1 dnl CS_MEMBERSHIP_ANY([append], [$3], [+=], [CS_MEMBERSHIP_ANY([unconditional, default], [$3], [=], [m4_ifval([$3], [+=], dnl Backward compatibility. [=])])]) $2 ])]) AC_DEFUN([CS_MAKEFILE_OUTPUT],[CS_TEXT_CACHE_OUTPUT([cs_makefile_text], [$1])]) crystalspace-glshader-cg-2.0/mk/autoconf/checkstl.m40000644000175000017500000000353211473743544022040 0ustar devfildevfil# checkstl.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2003-2008 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_CHECK_STL([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # Check if C++ Standard Template Library (STL) is available. If found, # shell variable cs_cv_libstl is set to 'yes' and variables # cs_cv_libstl_cflags, cs_cv_libstl_lflags, and cs_cv_libstl_libs are # populated appropriately and ACTION-IF-FOUND is invoked. If not found, # cs_cv_libstl is set to 'no', the other variables are cleared, and # ACTION-IF-NOT-FOUND is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_STL], [CS_CHECK_BUILD([for STL], [cs_cv_libstl], [AC_LANG_PROGRAM( [[#include #include ]], [[std::map m; m.begin();]])], [], [C++], [$1], [$2])]) crystalspace-glshader-cg-2.0/mk/autoconf/checklib.m40000644000175000017500000004070511473743544022007 0ustar devfildevfil# checklib.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2003-2006 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # cs_lib_paths_default # Whitespace delimited list of directory tuples in which to search, by # default, for external libraries. Each list item can specify an # include|library directory tuple (for example, "/usr/include|/usr/lib"), # or a single directory (for example, "/usr"). If the second form is # used, then "include" and "lib" subdirectories of the directory are # searched. If the library resources are not found, then the directory # itself is searched. Thus, "/proj" is shorthand for # "/proj/include|/proj/lib /proj|/proj". # # Present Cases: # /usr/local -- Not all compilers search here by default, so we specify # it manually. # /sw -- Fink, the MacOS/X manager of Unix packages, installs here by # default. # /opt/local -- DarwinPorts installs here by default. #------------------------------------------------------------------------------ m4_define([cs_lib_paths_default], [/usr/local/include|/usr/local/lib \ /sw/include|/sw/lib \ /opt/local/include|/opt/local/lib \ /opt/include|/opt/lib]) #------------------------------------------------------------------------------ # cs_pkg_paths_default # Comma delimited list of additional directories in which the # `pkg-config' command should search for its `.pc' files. # # Present Cases: # /usr/local/lib/pkgconfig -- Although a common location for .pc files # installed by "make install", many `pkg-config' commands neglect # to search here automatically. # /sw/lib/pkgconfig -- Fink, the MacOS/X manager of Unix packages, # installs .pc files here by default. # /opt/local/lib/pkgconfig -- DarwinPorts installs .pc files here by # default. #------------------------------------------------------------------------------ m4_define([cs_pkg_paths_default], [/usr/local/lib/pkgconfig, /sw/lib/pkgconfig, /opt/local/lib/pkgconfig, /opt/lib/pkgconfig]) #------------------------------------------------------------------------------ # CS_CHECK_LIB_WITH(LIBRARY, PROGRAM, [SEARCH-LIST], [LANGUAGE], # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [OTHER-CFLAGS], # [OTHER-LFLAGS], [OTHER-LIBS], [ALIASES]) # Very roughly similar in concept to AC_CHECK_LIB(), but allows caller to # to provide list of directories in which to search for LIBRARY; allows # user to augment the library search path via --with-LIBRARY=dir; and # consults `pkg-config' (if present) and `LIBRARY-config' (if present, # i.e. `sdl-config') in order to obtain compiler and linker flags. # LIBRARY is the name of the library or MacOS/X framework which is to be # located (for example, "readline" for `libreadline.a' or # `readline.framework'). # PROGRAM, which is typically composed with AC_LANG_PROGRAM(), is a # program which references at least one function or symbol in LIBRARY. # SEARCH-LIST is a whitespace-delimited list of paths in which to search # for the library and its header files, in addition to those searched by # the compiler and linker by default, and those referenced by the # cs_lib_paths_default macro. Each list item can specify an # `include|library' directory tuple (for example, # "/usr/include|/usr/lib"), or a single directory (for example, "/usr"). # If the second form is used, then "include" and "lib" subdirectories of # the directory are searched. If the library resources are not found, # then the directory itself is searched. Thus, "/proj" is shorthand for # "/proj/include|/proj/lib /proj|/proj". Items in the search list can # include wildcards. SEARCH-LIST can be overridden by the user with the # --with-LIBRARY=dir option, in which case only "dir/include|dir/lib" and # "dir|dir" are searched. If SEARCH-LIST is omitted and the user did not # override the search list via --with-LIBRARY=dir, then only the # directories normally searched by the compiler and the directories # mentioned via cs_lib_paths_default are searched. LANGUAGE is typically # either C or C++ and specifies which compiler to use for the test. If # LANGUAGE is omitted, C is used. OTHER-CFLAGS, OTHER-LFLAGS, and # OTHER-LIBS can specify additional compiler flags, linker flags, and # libraries needed to successfully link with LIBRARY. The optional # ALIASES is a comma-delimited list of library names for which to search # in case LIBRARY is not located (for example "[sdl1.2, sdl12]" for # libsdl1.2.a, sdl1.2.framework, libsdl12.a, and sdl12.framework). If # the library or one of its aliases is found and can be successfully # linked into a program, then the shell cache variable cs_cv_libLIBRARY # is set to "yes"; cs_cv_libLIBRARY_cflags, cs_cv_libLIBRARY_lflags, and # cs_cv_libLIBRARY_libs are set, respectively, to the compiler flags # (including OTHER-CFLAGS), linker flags (including OTHER-LFLAGS), and # library references (including OTHER-LIBS) which resulted in a # successful build; and ACTION-IF-FOUND is invoked. If the library was # not found or was unlinkable, or if the user disabled the library via # --without-LIBRARY, then cs_cv_libLIBRARY is set to "no" and # ACTION-IF-NOT-FOUND is invoked. Note that the exported shell variable # names are always composed from LIBRARY regardless of whether the test # succeeded because the primary library was discovered or one of the # aliases. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_LIB_WITH], [AC_ARG_WITH([$1], [AC_HELP_STRING([--with-$1=dir], [specify additional location to search lib$1 if not detected automatically; directories searched include dir/include, dir/lib, and dir])]) # Backward compatibility: Recognize --with-lib$1 as alias for --with-$1. AS_IF([test -n "$_CS_CLW_WITH_DEPRECATED([$1])" && test -z "$_CS_CLW_WITH([$1])"], [_CS_CLW_WITH([$1])="$_CS_CLW_WITH_DEPRECATED([$1])"]) AS_IF([test -z "$_CS_CLW_WITH([$1])"], [_CS_CLW_WITH([$1])=yes]) AS_IF([test "$_CS_CLW_WITH([$1])" != no], [ # If --with-$1 value is same as cached value, then assume other # cached values are also valid; otherwise, ignore all cached values. AS_IF([test "$_CS_CLW_WITH([$1])" != "$_CS_CLW_WITH_CVAR([$1])"], [cs_ignore_cache=yes], [cs_ignore_cache=no]) # Put relevant subdirs of the library directory into PATH and PKGCONFIG PATH_SAVE="$PATH" AS_IF([test $_CS_CLW_WITH([$1]) != yes], [PATH="$_CS_CLW_WITH([$1])/bin$PATH_SEPARATOR$PATH" _CS_CHECK_PKG_CONFIG_PREPARE_PATH([$_CS_CLW_WITH([$1]), $_CS_CLW_WITH([$1])/lib/pkgconfig])]) cs_check_lib_flags='' m4_foreach([cs_check_lib_alias], [m4_ifval([$10], [$1, $10], [$1])], [_CS_CHECK_LIB_PKG_CONFIG_FLAGS([cs_check_lib_flags], cs_check_lib_alias) _CS_CHECK_LIB_CONFIG_FLAGS([cs_check_lib_flags], cs_check_lib_alias) ]) AS_IF([test $_CS_CLW_WITH([$1]) != yes], [cs_check_lib_paths=$_CS_CLW_WITH([$1])], [cs_check_lib_paths="| cs_lib_paths_default $3"]) m4_foreach([cs_check_lib_alias], [m4_ifval([$10], [$1, $10], [$1])], [_CS_CHECK_LIB_CREATE_FLAGS([cs_check_lib_flags], cs_check_lib_alias, [$cs_check_lib_paths], [$1]) ]) CS_CHECK_BUILD([for lib$1], [_CS_CLW_LIB_CVAR([$1])], [$2], [$cs_check_lib_flags], [$4], [], [], [$cs_ignore_cache], [$7], [$8], [$9]) PATH="$PATH_SAVE" AS_IF([test $_CS_CLW_WITH([$1]) != yes], [_CS_CHECK_PKG_CONFIG_UNPREPARE_PATH]) ], [_CS_CLW_LIB_CVAR([$1])=no]) _CS_CLW_WITH_CVAR([$1])="$_CS_CLW_WITH([$1])" AS_IF([test "$_CS_CLW_LIB_CVAR([$1])" = yes], [$5], [$6])]) AC_DEFUN([_CS_CLW_WITH], [AS_TR_SH([with_$1])]) AC_DEFUN([_CS_CLW_WITH_DEPRECATED], [AS_TR_SH([with_lib$1])]) AC_DEFUN([_CS_CLW_WITH_CVAR], [AS_TR_SH([cs_cv_with_$1])]) AC_DEFUN([_CS_CLW_LIB_CVAR], [AS_TR_SH([cs_cv_lib$1])]) #------------------------------------------------------------------------------ # CS_CHECK_PKG_CONFIG # Check if the `pkg-config' command is available and reasonably recent. # This program acts as a central repository of build flags for various # packages. For example, to determine the compiler flags for FreeType2 # use, "pkg-config --cflags freetype2"; and "pkg-config --libs freetype2" # to determine the linker flags. If `pkg-config' is found and is # sufficiently recent, PKG_CONFIG is set and AC_SUBST() invoked. #------------------------------------------------------------------------------ m4_define([CS_PKG_CONFIG_MIN], [0.9.0]) AC_DEFUN([CS_CHECK_PKG_CONFIG], [AS_IF([test "$cs_prog_pkg_config_checked" != yes], [CS_CHECK_TOOLS([PKG_CONFIG], [pkg-config]) cs_prog_pkg_config_checked=yes]) AS_IF([test -z "$cs_cv_prog_pkg_config_ok"], [AS_IF([test -n "$PKG_CONFIG"], [AS_IF([$PKG_CONFIG --atleast-pkgconfig-version=CS_PKG_CONFIG_MIN], [cs_cv_prog_pkg_config_ok=yes], [cs_cv_prog_pkg_config_ok=no])], [cs_cv_prog_pkg_config_ok=no])])]) AC_DEFUN([_CS_CHECK_PKG_CONFIG_PREPARE_PATH], [PKG_CONFIG_PATH_SAVE_1="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="m4_foreach([cs_pkg_path], [cs_pkg_paths_default], [cs_pkg_path$PATH_SEPARATOR])$PKG_CONFIG_PATH" PKG_CONFIG_PATH="m4_foreach([cs_pkg_path], [$1], [cs_pkg_path$PATH_SEPARATOR])$PKG_CONFIG_PATH" export PKG_CONFIG_PATH]) AC_DEFUN([_CS_CHECK_PKG_CONFIG_UNPREPARE_PATH], [PKG_CONFIG_PATH="$PKG_CONFIG_PATH_SAVE_1" export PKG_CONFIG_PATH]) #------------------------------------------------------------------------------ # _CS_CHECK_LIB_PKG_CONFIG_FLAGS(VARIABLE, LIBRARY) # Helper macro for CS_CHECK_LIB_WITH(). Checks if `pkg-config' knows # about LIBRARY and, if so, appends a build tuple consisting of the # compiler and linker flags reported by `pkg-config' to the list of # tuples stored in the shell variable VARIABLE. #------------------------------------------------------------------------------ AC_DEFUN([_CS_CHECK_LIB_PKG_CONFIG_FLAGS], [CS_CHECK_PKG_CONFIG AS_IF([test $cs_cv_prog_pkg_config_ok = yes], [AC_CACHE_CHECK([if $PKG_CONFIG recognizes $2], [_CS_CLPCF_CVAR([$2])], [AS_IF([$PKG_CONFIG --exists $2], [_CS_CLPCF_CVAR([$2])=yes], [_CS_CLPCF_CVAR([$2])=no])]) AS_IF([test $_CS_CLPCF_CVAR([$2]) = yes], [_CS_CHECK_LIB_CONFIG_PROG_FLAGS([$1], [pkg_config_$2], [$PKG_CONFIG], [$2])])])]) AC_DEFUN([_CS_CLPCF_CVAR], [AS_TR_SH([cs_cv_prog_pkg_config_$1])]) #------------------------------------------------------------------------------ # _CS_CHECK_LIB_CONFIG_FLAGS(VARIABLE, LIBRARY) # Helper macro for CS_CHECK_LIB_WITH(). Checks if `LIBRARY-config' # (i.e. `sdl-config') exists and, if so, appends a build tuple consisting # of the compiler and linker flags reported by `LIBRARY-config' to the # list of tuples stored in the shell variable VARIABLE. #------------------------------------------------------------------------------ AC_DEFUN([_CS_CHECK_LIB_CONFIG_FLAGS], [CS_PATH_TOOL(_CS_CLCF_SHVAR([$2]), [$2-config]) AS_IF([test -n "$_CS_CLCF_SHVAR([$2])"], [AS_IF([test -z "$_CS_CLCF_CVAR([$2])"], [AS_IF([$_CS_CLCF_SHVAR([$2]) --cflags --libs >/dev/null 2>&1], [_CS_CLCF_CVAR([$2])=yes], [_CS_CLCF_CVAR([$2])=no])]) AS_IF([test $_CS_CLCF_CVAR([$2]) = yes], [_CS_CHECK_LIB_CONFIG_PROG_FLAGS([$1], [config_$2], [$_CS_CLCF_SHVAR([$2])])])])]) AC_DEFUN([_CS_CLCF_CVAR], [AS_TR_SH([cs_cv_prog_config_$1_ok])]) AC_DEFUN([_CS_CLCF_SHVAR], [m4_toupper(AS_TR_SH([CONFIG_$1]))]) #------------------------------------------------------------------------------ # _CS_CHECK_LIB_CONFIG_PROG_FLAGS(VARIABLE, TAG, CONFIG-PROGRAM, [ARGS]) # Helper macro for _CS_CHECK_LIB_PKG_CONFIG_FLAGS() and # _CS_CHECK_LIB_CONFIG_FLAGS(). CONFIG-PROGRAM is a command which # responds to the --cflags and --libs options and returns suitable # compiler and linker flags for some package. ARGS, if supplied, is # passed to CONFIG-PROGRAM after the --cflags or --libs argument. The # results of the --cflags and --libs options are packed into a build # tuple and appended to the list of tuples stored in the shell variable # VARIABLE. TAG is used to compose the name of the cache variable. A good # choice for TAG is some unique combination of the library name and # configuration program. #------------------------------------------------------------------------------ AC_DEFUN([_CS_CHECK_LIB_CONFIG_PROG_FLAGS], [AS_IF([test -z "$_CS_CLCPF_CVAR([$2])"], [cs_check_lib_cflag=CS_RUN_PATH_NORMALIZE([$3 --cflags $4]) cs_check_lib_lflag='' cs_check_lib_libs=CS_RUN_PATH_NORMALIZE([$3 --libs $4]) _CS_CLCPF_CVAR([$2])=CS_CREATE_TUPLE( [$cs_check_lib_cflag], [$cs_check_lib_lflag], [$cs_check_lib_libs])]) $1="$$1 $_CS_CLCPF_CVAR([$2])"]) AC_DEFUN([_CS_CLCPF_CVAR], [AS_TR_SH([cs_cv_prog_$1_flags])]) #------------------------------------------------------------------------------ # _CS_CHECK_LIB_CREATE_FLAGS(VARIABLE, LIBRARY, PATHS, UNALIASEDLIB) # Helper macro for CS_CHECK_LIB_WITH(). Constructs a list of build # tuples suitable for CS_CHECK_BUILD() and appends the tuple list to the # shell variable VARIABLE. LIBRARY and PATHS have the same meanings as # the like-named arguments of CS_CHECK_LIB_WITH(). #------------------------------------------------------------------------------ AC_DEFUN([_CS_CHECK_LIB_CREATE_FLAGS], [for cs_lib_item in $3 do case $cs_lib_item in *\|*) CS_SPLIT( [$cs_lib_item], [cs_check_incdir,cs_check_libdir], [|]) _CS_CHECK_LIB_CREATE_FLAG([$1], [$cs_check_incdir], [$cs_check_libdir], [$2], [$4]) ;; *) _CS_CHECK_LIB_CREATE_FLAG([$1], [$cs_lib_item/include], [$cs_lib_item/lib], [$2], [$4]) _CS_CHECK_LIB_CREATE_FLAG( [$1], [$cs_lib_item], [$cs_lib_item], [$2], [$4]) ;; esac done]) #------------------------------------------------------------------------------ # _CS_CHECK_LIB_CREATE_FLAG(VARIABLE, HEADER-DIR, LIBRARY-DIR, LIBRARY, # UNALIASEDLIB) # Helper macro for _CS_CHECK_LIB_CREATE_FLAGS(). Constructs build tuples # suitable for CS_CHECK_BUILD() for given header and library directories, # and appends the tuples to the shell variable VARIABLE. Synthesizes # tuples which check for LIBRARY as a MacOS/X framework, and a standard # link library. For MacOS/X framework, also #defines a preprocessor macro # CS_{UNALIASED_LIBRARY}_PATH with value LIBRARY, where UNALIASED_LIBRARY # is the primary name by which the library is known, even if searching # for one of its aliases. This macro is useful when the framework name # differs from the typical directory name in which header files reside # for a particular package. As an example, on most platforms, OpenGL # headers normally are #included as , but the MacOS/X framework # is named OpenGL.framework, which requires #include . # Clients can take this difference into account by checking if # CS_{UNALIASED_LIBRARY}_PATH is #defined. If so, compose an #include # using its value, which will be the name of the framework. If not, # #include the header from its normal non-framework location. #------------------------------------------------------------------------------ AC_DEFUN([_CS_CHECK_LIB_CREATE_FLAG], [AS_IF([test -n "$2"], [cs_check_lib_cflag="-I$2"], [cs_check_lib_cflag='']) AS_IF([test -n "$3"], [cs_check_lib_lflag="-L$3"], [cs_check_lib_lflag='']) AS_IF([test -n "$4"], [cs_check_lib_libs="-l$4" cs_check_lib_framework="-framework $4" cs_check_lib_framework_define="[-DCS_]AS_TR_CPP([$5])_PATH=$4"], [cs_check_lib_libs='' cs_check_lib_framework='' cs_check_lib_framework_define='']) $1="$$1 CS_CREATE_TUPLE( [$cs_check_lib_cflag $cs_check_lib_framework_define], [$cs_check_lib_lflag], [$cs_check_lib_framework]) CS_CREATE_TUPLE( [$cs_check_lib_cflag], [$cs_check_lib_lflag], [$cs_check_lib_libs])"]) crystalspace-glshader-cg-2.0/mk/autoconf/embed.m40000644000175000017500000002341211473743544021313 0ustar devfildevfil# embed.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_META_INFO_EMBED([EMITTER], [GPL-OKAY]) # Determine if plugin meta-information should be embedded or if it should # exist in a stand-alone .csplugin file, and check if necessary tools and # libraries are present. Sets the shell variable # enable_meta_info_embedding to "yes" if the user requested embedding or # if it was enabled by default; otherwise sets it to "no". # # If EMITTER is provided, then a subset of the following variables # (depending upon platform and availability) are recorded by invoking # CS_EMIT_BUILD_PROPERTY() with EMITTER. As a convenience, if EMITTER is # the literal value "emit" or "yes", then CS_EMIT_BUILD_RESULT()'s # default emitter will be used. # # EMBED_META := yes or no # EMBED_META.CFLAGS := compiler flags # EMBED_META.LFLAGS := linker flags # CMD.WINDRES := windres.exe # OBJCOPY.AVAILABLE := yes or no # CMD.OBJCOPY := objcopy.exe # LIBBFD.AVAILABLE := yes or no # LIBBFD.CFLAGS := libbfd compiler flags # LIBBFD.LFLAGS := libbfd linker flags # ELF.AVAILABLE := yes or no # # In general, clients need only concern themselves with the various # EMBED_META-related variables. For building plugin modules, utilize # EMBED_META.CFLAGS when compiling, and EMBED_META.LFLAGS when linking. # # On Unix, when CS' own ELF metadata reader can't be used (because the # necessary header file elf.h was not found) embedding is accomplished # via libbfd, which carries a GPL license. Projects which carry licenses # not compatible with GPL should consider carefully before enabling # embedding on Unix. If your project is GPL-compatible, then set GPL-OKAY # to "yes". This will indicate that it is safe to use libbfd if the ELF # reader can not be used. If your project is not GPL-compatible, then # set it to "no" in order to disable embedding on Unix if the ELF reader # is not usable. (The user can still manually override the setting via # the --enable-meta-info-embedding option.) # # IMPLEMENTATION NOTES # # Recent versions of Mingw supply libbfd and libiberty. Since Crystal # Space uses native Win32 API for meta-information embedding on Windows, # we do not require these libraries on Windows. More importantly, users # do not want to see these GPL-licensed libraries appear in the link # statement for plugin modules, thus we explicitly disable the libbfd # test on Windows. #------------------------------------------------------------------------------ AC_DEFUN([CS_META_INFO_EMBED], [AC_REQUIRE([AC_CANONICAL_HOST]) _CS_META_INFO_EMBED_ENABLE([$1], [$2]) AS_IF([test $enable_meta_info_embedding = yes], [_CS_META_INFO_EMBED_TOOLS([$1]) AS_IF([test $cs_header_elf_h = yes], [CS_EMIT_BUILD_PROPERTY([ELF.AVAILABLE], [yes], [], [], CS_EMITTER_OPTIONAL([$1]))], [case $host_os in mingw*|cygwin*) ;; *) CS_CHECK_LIBBFD([$1], [CS_EMIT_BUILD_PROPERTY([EMBED_META.CFLAGS], [$cs_cv_libbfd_ok_cflags], [+], [], CS_EMITTER_OPTIONAL([$1])) CS_EMIT_BUILD_PROPERTY([EMBED_META.LFLAGS], [$cs_cv_libbfd_ok_lflags $cs_cv_libbfd_ok_libs], [+], [], CS_EMITTER_OPTIONAL([$1]))]) ;; esac])])]) #------------------------------------------------------------------------------ # _CS_META_INFO_EMBED_ENABLE([EMITTER], [GPL-OKAY]) # Helper for CS_META_INFO_EMBED which adds an # --enable-meta-info-embedding option to the configure script allowing # the user to control embedding. Sets the shell variable # enable_meta_info_embedding to yes or no. # # IMPLEMENTATION NOTES # # On Unix, embedding is enabled by default if elf.h is found and disabled # by default unless overridden via GPL-OKAY because libbfd carries a GPL # license which may be incompatible with a project's own license (such as # LGPL). #------------------------------------------------------------------------------ AC_DEFUN([_CS_META_INFO_EMBED_ENABLE], [AC_REQUIRE([CS_CHECK_HOST]) AC_CHECK_HEADERS([elf.h], [cs_header_elf_h=yes], [cs_header_elf_h=no]) AC_MSG_CHECKING([whether to embed plugin meta-information]) case $cs_host_target in unix) AS_IF([test $cs_header_elf_h = yes], [cs_embed_meta_info_default=yes], [cs_embed_meta_info_default=m4_ifval([$2],[$2],[no])]) ;; *) cs_embed_meta_info_default=yes ;; esac AC_ARG_ENABLE([meta-info-embedding], [AC_HELP_STRING([--enable-meta-info-embedding], [store plugin meta-information directly inside plugin modules if supported by platform; if disabled, meta-information is stored in stand-alone .csplugin files; this option is enabled by default for non-Unix platforms and on Unix platforms with ELF-format object files; it is disabled by default on Unix platforms if ELF is not available and the project uses a non-GPL-compatible license (such as LGPL) since the non-ELF Unix embedding technology requires the GPL-licensed libbfd library; if ELF is not available, enable this option on Unix only if you are certain you want a GPL-licensed library infecting your project])], [], [enable_meta_info_embedding=$cs_embed_meta_info_default]) AC_MSG_RESULT([$enable_meta_info_embedding]) CS_EMIT_BUILD_PROPERTY([EMBED_META], [$enable_meta_info_embedding], [], [], CS_EMITTER_OPTIONAL([$1]))]) #------------------------------------------------------------------------------ # _CS_META_INFO_EMBED_TOOLS([EMITTER]) # Helper for CS_META_INFO_EMBED() which searches for tools required for # plugin meta-info embedding. #------------------------------------------------------------------------------ AC_DEFUN([_CS_META_INFO_EMBED_TOOLS], [CS_CHECK_TOOLS([WINDRES], [windres]) CS_EMIT_BUILD_PROPERTY([CMD.WINDRES], [$WINDRES], [], [], CS_EMITTER_OPTIONAL([$1])) CS_CHECK_TOOLS([OBJCOPY], [objcopy]) AS_IF([test -n "$OBJCOPY"], [CS_EMIT_BUILD_PROPERTY([OBJCOPY.AVAILABLE], [yes], [], [], CS_EMITTER_OPTIONAL([$1])) CS_EMIT_BUILD_PROPERTY([CMD.OBJCOPY], [$OBJCOPY], [], [], CS_EMITTER_OPTIONAL([$1]))])]) #------------------------------------------------------------------------------ # CS_CHECK_LIBBFD([EMITTER], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # Exhaustive check for a usable GPL-licensed libbfd, the Binary File # Descriptor library, a component of binutils, which allows low-level # manipulation of executable and object files. If EMITTER is provided, # then the following variables are recorded by invoking # CS_EMIT_BUILD_PROPERTY() with EMITTER. As a convenience, if EMITTER is # the literal value "emit" or "yes", then CS_EMIT_BUILD_RESULT()'s # default emitter will be used. # # LIBBFD.AVAILABLE := yes or no # LIBBFD.CFLAGS := libbfd compiler flags # LIBBFD.LFLAGS := libbfd linker flags # # The shell variable cs_cv_libbfd_ok is set to yes if a usable libbfd was # discovered, else no. If found, the additional shell variables # cs_cv_libbfd_ok_cflags, cs_cv_libbfd_ok_lflags, and # cs_cv_libbfd_ok_libs are also set. # # WARNING # # libbfd carries a GPL license which is incompatible with the LGPL # license of Crystal Space. Do not use this library with projects under # less restrictive licenses, such as LGPL. # # IMPLEMENTATION NOTES # # It seems that some platforms have two version of libiberty installed: # one from binutils and one from gcc. The binutils version resides in # /usr/lib, whereas the gcc version resides in the gcc installation # directory. The gcc version, by default, takes precedence at link time # over the binutils version. Unfortunately, in broken cases, the gcc # version of libiberty is missing htab_create_alloc() which is required # by some libbfd functions. The extensive secondary check of libbfd # catches this anomalous case of broken gcc libiberty. It turns out that # it is possible to make the linker prefer the binutils version by # specifying -L/usr/lib, thus the extensive test attempts to do so in an # effort to resolve this unfortunate issue. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_LIBBFD], [CS_CHECK_LIB_WITH([bfd], [AC_LANG_PROGRAM([[#include ]], [bfd_init();])], [], [], [], [], [], [], [-liberty]) AS_IF([test $cs_cv_libbfd = yes], [CS_CHECK_BUILD([if libbfd is usable], [cs_cv_libbfd_ok], [AC_LANG_PROGRAM([[#include ]], [bfd* p; asection* s; bfd_init(); p = bfd_openr(0,0); bfd_check_format(p,bfd_object); bfd_get_section_by_name(p,0); bfd_section_size(p,s); bfd_get_section_contents(p,s,0,0,0); bfd_close(p);])], [CS_CREATE_TUPLE() CS_CREATE_TUPLE([],[-L/usr/lib],[])], [], [], [], [], [$cs_cv_libbfd_cflags], [$cs_cv_libbfd_lflags], [$cs_cv_libbfd_libs])], [cs_cv_libbfd_ok=no]) AS_IF([test $cs_cv_libbfd_ok = yes], [CS_EMIT_BUILD_RESULT([cs_cv_libbfd_ok], [LIBBFD], CS_EMITTER_OPTIONAL([$1])) $2], [$3])]) crystalspace-glshader-cg-2.0/mk/autoconf/checkopengl.m40000644000175000017500000002122611473743544022522 0ustar devfildevfil#============================================================================== # Copyright (C)2003-2006 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_CHECK_OPENGL # Check for OpenGL. # # IMPLEMENTATION NOTES # # Some Mesa installations require pthread, so pthread flags are employed if # available. # # The check for opengl32 needs to precede other checks because Cygwin users # often have Mesa installed, and Mesa's OpenGL library is compiled without the # __stdcall flags which results in link errors, whereas Microsoft's native # opengl32 works fine. Conversely, some Unix implementations have Wine # installed (Windows emulation layer) which includes an opengl32.so library. # We need to avoid detection of this library on Unix since it would cause an # undesirable dependence upon Wine. # # Many OpenGL libraries on Unix already contain GLX, so there is no separate # GLX library, thus we first check for GLX using the discovered OpenGL library # before attempting to locate a separate GLX-specific library. # # On MacOS/X, some users have XFree86 installed which creates a link from # /usr/include/GL to /usr/X11R6/include/GL. We want to ignore this directory # and instead check for Apple's OpenGL.framework, if we are not cross-building # for Darwin. We accomplish this by placing the OpenGL.framework test ahead of # the other tests. # # At least one user (Jorrit) has a strange installation in which inclusion of # fails if an int32 is not present, thus we must take this into # account. #------------------------------------------------------------------------------ m4_define([cs_define_int32], [[#if !HAVE_TYPE_INT32 typedef long int32; #endif ]]) # CS_GL_INCLUDE(CPP-MACRO,FALLBACK,HEADER) AC_DEFUN([CS_GL_INCLUDE], [[#if HAVE_WINDOWS_H #if !HAVE_TYPE_INT32 typedef long int32; #endif #include #endif #ifndef CS_HEADER_GLOBAL #define CS_HEADER_GLOBAL(X,Y) CS_HEADER_GLOBAL_COMPOSE(X,Y) #define CS_HEADER_GLOBAL_COMPOSE(X,Y) #endif #ifdef $1 #include CS_HEADER_GLOBAL($1,$3) #else #include <$2/$3> #endif]]) AC_DEFUN([CS_CHECK_OPENGL], [AC_REQUIRE([CS_CHECK_HOST]) AC_REQUIRE([CS_CHECK_COMMON_LIBS]) AC_REQUIRE([CS_CHECK_PTHREAD]) AC_REQUIRE([AC_PATH_X]) AC_REQUIRE([AC_PATH_XTRA]) AC_CHECK_TYPE([int32], [AC_DEFINE([HAVE_TYPE_INT32], [], [Whether the int32 type is available])], []) AC_CHECK_HEADERS([windows.h], [], [], [cs_define_int32]) # Apply plaform-specific flags if necessary. cs_gl_plat_cflags='' cs_gl_plat_lflags='' cs_gl_plat_libs='' AS_IF([test -n "$cs_cv_libm_cflags$cs_cv_libm_lflags$cs_cv_libm_libs"], [cs_gl_plat_cflags="$cs_cv_libm_cflags $cs_gl_plat_cflags" cs_gl_plat_lflags="$cs_cv_libm_lflags $cs_gl_plat_lflags" cs_gl_plat_libs="$cs_cv_libm_libs $cs_gl_plat_libs"]) AS_IF([test $cs_cv_sys_pthread = yes], [cs_gl_plat_cflags="$cs_cv_sys_pthread_cflags $cs_gl_plat_cflags" cs_gl_plat_lflags="$cs_cv_sys_pthread_lflags $cs_gl_plat_lflags" cs_gl_plat_libs="$cs_cv_sys_pthread_libs $cs_gl_plat_libs"]) AS_IF([test "$no_x" != yes], [cs_gl_plat_cflags="$X_CFLAGS $cs_gl_plat_cflags" cs_gl_plat_lflags="$cs_gl_plat_lflags" cs_gl_plat_libs=" $X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS $cs_gl_plat_libs"]) # Mesa requested? AC_ARG_WITH([mesa], [AC_HELP_STRING([--with-mesa], [use Mesa OpenGL library if available (default YES)])], [], [with_mesa=yes]) AS_IF([test $with_mesa != no], [cs_mesa_gl=CS_CREATE_TUPLE([],[],[-lMesaGL])]) # MacOS/X or Darwin? AS_IF([test "x$cs_host_macosx" = "xyes"], [cs_osx_gl=CS_CREATE_TUPLE([-DCS_OPENGL_PATH=OpenGL],[],[-framework OpenGL])]) # Windows? AS_IF([test $cs_host_family = windows], [cs_win32_gl=CS_CREATE_TUPLE([],[],[-lopengl32])]) # Check for OpenGL. CS_CHECK_BUILD([for OpenGL], [cs_cv_libgl], [AC_LANG_PROGRAM([CS_GL_INCLUDE([CS_OPENGL_PATH],[GL],[gl.h])],[glEnd()])], [$cs_win32_gl \ $cs_osx_gl \ CS_CREATE_TUPLE([],[],[-lGL]) \ CS_CREATE_TUPLE([],[],[-lgl]) \ $cs_mesa_gl], [], [CS_EMIT_BUILD_RESULT([cs_cv_libgl], [GL])], [], [], [$cs_gl_plat_cflags], [$cs_gl_plat_lflags], [$cs_gl_plat_libs])]) #------------------------------------------------------------------------------ # CS_CHECK_GLU # Check for GLU. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_GLU], [AC_REQUIRE([CS_CHECK_OPENGL]) AS_IF([test $cs_cv_libgl = yes], [AS_IF([test $with_mesa != no], [cs_mesa_glu=CS_CREATE_TUPLE([],[],[-lMesaGLU])]) # MacOS/X or Darwin? AS_IF([test "x$cs_host_macosx" = "xyes"], [cs_osx_glu=CS_CREATE_TUPLE([-DCS_GLU_PATH=OpenGL],[],[-framework OpenGL])]) # Windows? AS_IF([test $cs_host_family = windows], [cs_win32_glu=CS_CREATE_TUPLE([],[],[-lglu32])]) # Check for GLU. CS_CHECK_BUILD([for GLU], [cs_cv_libglu], [AC_LANG_PROGRAM( [CS_GL_INCLUDE([CS_GLU_PATH],[GL],[glu.h])], [gluNewQuadric()])], [$cs_osx_glu \ CS_CREATE_TUPLE() \ $cs_win32_glu \ CS_CREATE_TUPLE([],[],[-lGLU]) \ CS_CREATE_TUPLE([],[],[-lglu]) \ $cs_mesa_glu], [], [CS_EMIT_BUILD_RESULT([cs_cv_libglu], [GLU])], [], [], [$cs_cv_libgl_cflags], [$cs_cv_libgl_lflags], [$cs_cv_libgl_libs])])]) #------------------------------------------------------------------------------ # CS_CHECK_GLX # Check for GLX. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_GLX], [AC_REQUIRE([CS_CHECK_OPENGL]) AS_IF([test $cs_cv_libgl = yes], [AS_IF([test $with_mesa != no], [cs_mesa_glx=CS_CREATE_TUPLE([],[],[-lMesaGLX])]) # Check for GLX. AS_IF([test "$no_x" != yes], [CS_CHECK_BUILD([for GLX], [cs_cv_libglx], [AC_LANG_PROGRAM([[#include ]], [glXWaitGL()])], [CS_CREATE_TUPLE() \ CS_CREATE_TUPLE([],[],[-lGLX]) \ CS_CREATE_TUPLE([],[],[-lglx]) \ $cs_mesa_glx], [], [CS_EMIT_BUILD_RESULT([cs_cv_libglx], [GLX])], [], [], [$cs_cv_libgl_cflags], [$cs_cv_libgl_lflags], [$cs_cv_libgl_libs])])])]) #------------------------------------------------------------------------------ # CS_CHECK_GLXEXT([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # Check for GLX extensions. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_GLXEXT], [AC_REQUIRE([CS_CHECK_GLX]) AS_IF([test x$cs_cv_libglx = "xyes"], [# Check for GLX extensions. CS_CHECK_BUILD([for GLX extensions], [cs_cv_libglx_extensions], [AC_LANG_PROGRAM( [[#define GLX_GLXEXT_PROTOTYPES #include ]], [glXGetProcAddressARB(0)])], [CS_CREATE_TUPLE( [$cs_cv_libglx_cflags], [$cs_cv_libglx_lflags], [$cs_cv_libglx_libs])], [], [$1], [$2])])]) #------------------------------------------------------------------------------ # CS_CHECK_GLUT # Check for GLUT. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_GLUT], [AC_REQUIRE([CS_CHECK_GLU]) AS_IF([test x$cs_cv_libglu = "xyes"], [# MacOS/X or Darwin? AS_IF([test "x$cs_host_macosx" = "xyes"], [cs_osx_glut=CS_CREATE_TUPLE([-DCS_GLUT_PATH=GLUT],[],[-framework GLUT])]) # Windows? AS_IF([test $cs_host_family = windows], [cs_win32_glut=CS_CREATE_TUPLE([],[],[-lglut32])]) # Check for GLUT. CS_CHECK_BUILD([for GLUT], [cs_cv_libglut], [AC_LANG_PROGRAM( [CS_GL_INCLUDE([CS_GLUT_PATH],[GL],[glut.h])], [glutSwapBuffers()])], [$cs_osx_glut \ CS_CREATE_TUPLE() \ $cs_win32_glut \ CS_CREATE_TUPLE([],[],[-lGLUT]) \ CS_CREATE_TUPLE([],[],[-lglut])], [], [CS_EMIT_BUILD_RESULT([cs_cv_libglut], [GLUT])], [], [], [$cs_cv_libgl_cflags $cs_cv_libglu_cflags], [$cs_cv_libgl_lflags $cs_cv_libglu_lflags], [$cs_cv_libgl_libs $cs_cv_libglu_libs])])]) crystalspace-glshader-cg-2.0/mk/autoconf/qualify.m40000644000175000017500000000467311477716174021724 0ustar devfildevfil# qualify.m4 -*- Autoconf -*- #============================================================================== # Copyright (C)2005,2008 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_SYMBOL_QUALIFIER(MESSAGE, CACHE-VAR, QUALIFIERS, [SYMBOL], [LANG], # [ACTION-IF-ACCEPTED], [ACTION-IF-NOT-ACCEPTED]) # Test if a symbol can be qualified by one of the elements of the # comma-separated list of QUALIFIERS. Examples of qualifiers include # __attribute__((deprecated)), __declspec(dllimport), etc. MESSAGE is the # "checking" message. CACHE-VAR is the variable which receives the # qualifier which succeeded, or the the literal "no" if none were # accepted. SYMBOL is the symbol to which the qualifier should be # applied. If omitted, then SYMBOL defaults to "void f();". LANG is the # language of the test, typically "C" or "C++". It defaults to "C" if # omitted. ACTION-IF-ACCEPTED is invoked after CACHE-VAR is set if one of # the qualifiers is accepted, else ACTION-IF-NOT-ACCEPTED is invoked. #------------------------------------------------------------------------------ AC_DEFUN([CS_SYMBOL_QUALIFIER], [AC_CACHE_CHECK([$1], [$2], [$2='no' m4_foreach([cs_symbol_qualifier], [$3], [AS_IF([test "$$2" = no], [CS_BUILD_IFELSE( [AC_LANG_PROGRAM( [m4_default([$4],[void* f()]) cs_symbol_qualifier;], [])], [CS_CREATE_TUPLE([$_CS_WARNING_CACHE_VAR([], [$5], [enable_errors])])], [$5], [$2='cs_symbol_qualifier'], [$2='no'])])])]) AS_IF([test $$2 != no], [$6], [$7])]) crystalspace-glshader-cg-2.0/mk/autoconf/trim.m40000644000175000017500000000263211473743544021213 0ustar devfildevfil# trim.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_TRIM(STRING) # Strip leading and trailing spaces from STRING and collapse internal # runs of multiple spaces to a single space. #------------------------------------------------------------------------------ AC_DEFUN([CS_TRIM], [`echo x$1 | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'`]) crystalspace-glshader-cg-2.0/mk/autoconf/checkpic.m40000644000175000017500000000604411473743544022012 0ustar devfildevfil# checkpic.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_COMPILER_PIC([LANGUAGE], [CACHE-VAR], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # Check if compiler can be instructed to produce # position-independent-code (PIC). This feature is required by some # platforms when building plugin modules and shared libraries. If # LANGUAGE is not provided, then `C' is assumed (other options include # `C++'). If CACHE-VAR is not provided, then it defaults to the name # "cs_cv_prog_compiler_pic". If a PIC-enabling option (such as `-fPIC') # is discovered, then it is assigned to CACHE-VAR and ACTION-IF-FOUND is # invoked; otherwise the empty string is assigned to CACHE-VAR and # ACTION-IF-NOT-FOUND is invoked. # # IMPLEMENTATION NOTES # # On some platforms (such as Windows), the -fPIC option is superfluous # and emits a warning "-fPIC ignored for target (all code is position # independent)", despite the fact that the compiler accepts the option # and returns a success code. We want to re-interpret the warning as a # failure in order to avoid unnecessary compiler diagnostics in case the # client inserts the result of this check into CFLAGS, for instance. We # do so by attempting to promote warnings to errors using the result of # CS_COMPILER_ERRORS(). As an extra safe-guard, we also scan the compiler # output for an appropriate diagnostic because some gcc warnings fail to # promote to error status despite use of -Werror. #------------------------------------------------------------------------------ AC_DEFUN([CS_COMPILER_PIC], [CS_COMPILER_ERRORS([$1], [m4_default([$2_werror],[cs_cv_prog_compiler_pic_werror])]) CS_CHECK_BUILD_FLAGS( [how to enable m4_default([$1],[C]) PIC generation], [m4_default([$2],[cs_cv_prog_compiler_pic])], [CS_CREATE_TUPLE([-fPIC])], [$1], [$3], [$4], [m4_default([$$2_werror],[$cs_cv_prog_compiler_pic_werror])], [], [], [fPIC])]) # Backward-compatiblity alias. AC_DEFUN([CS_CHECK_COMPILER_PIC], [CS_COMPILER_PIC([$1],[$2],[$3],[$4])]) crystalspace-glshader-cg-2.0/mk/autoconf/checkcppunit.m40000644000175000017500000000470411473743544022722 0ustar devfildevfil# checkcppunit.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_CHECK_CPPUNIT([EMITTER]) # Check if CppUnit (http://cppunit.sourceforge.net/), the unit-testing # framework is available. The shell variable cs_cv_libcppunit is set to # "yes" if CppUnit is discovered, else "no". If available, then the # variables cs_cv_libcppunit_cflags, cs_cv_libcppunit_lflags, and # cs_cv_libcppunit_libs are set. If EMITTER is provided, then # CS_EMIT_BUILD_RESULT() is invoked with EMITTER in order to record the # results in an output file. As a convenience, if EMITTER is the literal # value "emit" or "yes", then CS_EMIT_BUILD_RESULT()'s default emitter # will be used. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_CPPUNIT], [CS_CHECK_LIB_WITH([cppunit], [AC_LANG_PROGRAM([[#include ]], [CppUnit::TextUi::TestRunner r; r.run();])], [], [C++]) AS_IF([test $cs_cv_libcppunit = yes], [CS_CHECK_BUILD([if cppunit is sufficiently recent], [cs_cv_libcppunit_recent], [AC_LANG_PROGRAM( [[#include ]], [CppUnit::BriefTestProgressListener b; b.startTest(0);])], [], [C++], [CS_EMIT_BUILD_RESULT([cs_cv_libcppunit], [CPPUNIT], CS_EMITTER_OPTIONAL([$1]))], [], [], [$cs_cv_libcppunit_cflags], [$cs_cv_libcppunit_lflags], [$cs_cv_libcppunit_libs])])]) crystalspace-glshader-cg-2.0/mk/autoconf/checklibtool.m40000644000175000017500000000630411473743544022702 0ustar devfildevfil# checklibtool.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) #------------------------------------------------------------------------------ # CS_CHECK_LIBTOOL # Find and identify the various implementations of libtool. In # particular, this macro is aware of GNU libtool and Apple's libtool # (which serves a completely different purpose). On MacOS/X, GNU libtool # is typically named glibtool, however a user might also use Fink to # install the unadorned libtool; and the Fink-installed version might # shadow Apple's own libtool if it appears in the PATH before the Apple # tool. This macro jumps through the necessary hoops to distinguish and # locate the various implementations. Sets the shell variable LIBTOOL to # the located GNU libtool (if any), and APPLE_LIBTOOL to the located # Apple libtool. Invokes AC_SUBST() for LIBTOOL and APPLE_LIBTOOL. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_LIBTOOL], [# GNU: Search for libtool before glibtool since Fink version is likely newer. m4_define([cs_lt_path_gnu], [/sw/bin$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR$PATH]) AS_IF([test -z "$LIBTOOL"], [CS_CHECK_TOOLS([LIBTOOL_TEST], [libtool glibtool gnulibtool], [], [cs_lt_path_gnu]) AS_IF([test -n "$LIBTOOL_TEST"], [CS_PATH_PROG([LIBTOOL_PATH], [$LIBTOOL_TEST], [], [cs_lt_path_gnu]) CS_LIBTOOL_CLASSIFY([$LIBTOOL_PATH], [LIBTOOL="$LIBTOOL_PATH"], [AS_IF([test -z "$APPLE_LIBTOOL"], [APPLE_LIBTOOL="$LIBTOOL_PATH"]) CS_CHECK_TOOLS([LIBTOOL], [glibtool gnulibtool])])])]) AC_SUBST([LIBTOOL]) # Apple: Ensure that Apple libtool will be found before GNU libtool from Fink. m4_define([cs_lt_path_apple],[/bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH]) AS_IF([test -z "$APPLE_LIBTOOL"], [CS_PATH_PROG([CS_LT_APPLE], [libtool], [], [cs_lt_path_apple]) CS_LIBTOOL_CLASSIFY([$CS_LT_APPLE], [], [APPLE_LIBTOOL="$CS_LT_APPLE"])]) AC_SUBST([APPLE_LIBTOOL])]) AC_DEFUN([CS_LIBTOOL_CLASSIFY], [AS_IF([test -n "$1"], [AC_MSG_CHECKING([classification of $1]) CS_LIBTOOL_GNU_IFELSE([$1], [AC_MSG_RESULT([gnu]) $2], [AC_MSG_RESULT([apple]) $3])])]) AC_DEFUN([CS_LIBTOOL_GNU_IFELSE], [AS_IF([AC_RUN_LOG([$1 --version 1>&2])], [$2], [$3])]) crystalspace-glshader-cg-2.0/mk/autoconf/crystal.m40000644000175000017500000003205211473743544021720 0ustar devfildevfil# crystal.m4 -*- Autoconf -*- #============================================================================== # 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. # #============================================================================== AC_PREREQ([2.56]) # Should stay in sync with csver.h m4_define([cs_min_version_default], [1.9]) #------------------------------------------------------------------------------ # _CS_AUGMENT_PATHS([PATH-VAR], [PATHS]) # Add paths from PATHS to the variable PATH-VAR. # Handles PATHS being a Win32-style path list. # Also adds 'bin/' subdirectories of elements in PATHS to PATH-VAR. #------------------------------------------------------------------------------ AC_DEFUN([_CS_AUGMENT_PATHS], [AC_REQUIRE([CS_CHECK_HOST]) AS_IF([test -n "$2"], [# On MinGW, CRYSTAL may contain the path in one of two flavors: # MSYS paths, separated by $PATH_SEPARATOR, or Win32 paths, separated # by ';'. Since for the configure check we need MSYS paths, CRYSTAL # is first treated like a Win32-style list. If that yields sensible # results these are used subsequently. Otherwise use CRYSTAL as-is. case $host_os in mingw*) my_IFS=$IFS; IFS=\; for win32_dir in $2; do win32_dir=CS_PATH_NORMALIZE_EMBEDDED([$win32_dir]) win32_dir=`echo $win32_dir | sed "s/\(.\):/\\/\\1/"` AS_IF([test -d "$win32_dir"], [AS_IF([test -n "$$1"], [$1="$$1$PATH_SEPARATOR"]) $1="$$1$win32_dir$PATH_SEPARATOR$win32_dir/bin"]) done IFS=$my_IFS ;; esac AS_IF([test -z "$$1"], [my_IFS=$IFS; IFS=$PATH_SEPARATOR for cs_dir in $2; do AS_IF([test -n "$$1"], [$1="$$1$PATH_SEPARATOR"]) $1="$$1$cs_dir$PATH_SEPARATOR$cs_dir/bin" done IFS=$my_IFS])])]) #------------------------------------------------------------------------------ # CS_PATH_CRYSTAL_CHECK([DESIRED-VERSION], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND], [REQUIRED-LIBS], # [OPTIONAL-LIBS]) # Checks for Crystal Space paths and libraries by consulting # cs-config. It first looks for cs-config in the paths mentioned by # $CRYSTAL, then in the paths mentioned by $PATH, and then in # /usr/local/crystalspace/bin. Emits an error if it can not locate # cs-config, if the Crystal Space test program fails, or if the available # version number is unsuitable. Exports the variables # CRYSTAL_CONFIG_TOOL, CRYSTAL_AVAILABLE, CRYSTAL_VERSION, # CRYSTAL_CFLAGS, CRYSTAL_LIBS, CRYSTAL_INCLUDE_DIR, and # CRYSTAL_AVAILABLE_LIBS. If the check succeeds, then CRYSTAL_AVAILABLE # will be 'yes', and the other variables set to appropriate values. If it # fails, then CRYSTAL_AVAILABLE will be 'no', and the other variables # empty. If REQUIRED-LIBS is specified, then it is a list of Crystal # Space libraries which must be present, and for which appropriate # compiler and linker flags will be reflected in CRYSTAL_CFLAGS and # CRYSTAL_LFLAGS. If OPTIONAL-LIBS is specified, then it is a list of # Crystal Space libraries for which appropriate compiler and linker flags # should be returned if the libraries are available. It is not an error # for an optional library to be absent. The client can check # CRYSTAL_AVAILABLE_LIBS for a list of all libraries available for this # particular installation of Crystal Space. The returned list is # independent of REQUIRED-LIBS and OPTIONAL-LIBS. Use the results of the # check like this: CFLAGS="$CFLAGS $CRYSTAL_CFLAGS" and LDFLAGS="$LDFLAGS # $CRYSTAL_LIBS" #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_CRYSTAL_CHECK], [AC_ARG_WITH([cs-prefix], [AC_HELP_STRING([--with-cs-prefix=CRYSTAL_PREFIX], [specify location of Crystal Space installation; this is the \$prefix value used when installing the SDK])], [CRYSTAL="$withval" export CRYSTAL]) AC_ARG_VAR([CRYSTAL], [Prefix where Crystal Space is installed]) AC_ARG_ENABLE([cstest], [AC_HELP_STRING([--enable-cstest], [verify that the Crystal Space SDK is actually usable (default YES)])], [], [enable_cstest=yes]) # Split the DESIRED-VERSION into the major and minor version number # components. cs_version_desired=m4_default([$1],[cs_min_version_default]) sed_expr_base=['\([0-9][0-9]*\)\.\([0-9][0-9]*\).*'] cs_version_major=`echo $cs_version_desired | sed "s/$sed_expr_base/\1/"` cs_version_minor=`echo $cs_version_desired | sed "s/$sed_expr_base/\2/"` # Try to find an installed cs-config. cs_path='' _CS_AUGMENT_PATHS([cs_path], [$CRYSTAL]) AS_IF([test -n "$cs_path"], [cs_path="$cs_path$PATH_SEPARATOR"]) cs_path="$cs_path$PATH$PATH_SEPARATOR/usr/local/crystalspace/bin" # Find a suitable CS version. # For a given desired version X.Y, the compatibility rules are as follows: # Y is even (stable version): compatible are X.Y+1 and X.Y+2. # Y is odd (development version): compatible are X.Y+1 up to X.Y+3, assuming # no deprecated features are used. # Generally, an exact version match is preferred. If that is not the case, # stable versions are preferred over development version, with a closer # version number preferred. # This yields the following search order: # Y is even (stable version): X.Y, X.Y+2, X.Y+1 # Y is odd (development version): X.Y, X.Y+1, X.Y+3, X.Y+2 cs_version_sequence="$cs_version_major.$cs_version_minor" cs_version_desired_is_unstable=`expr $cs_version_minor % 2` AS_IF([test $cs_version_desired_is_unstable -eq 1], [# Development version search sequence y=`expr $cs_version_minor + 1` cs_version_sequence="$cs_version_sequence $cs_version_major.$y" y=`expr $cs_version_minor + 3` cs_version_sequence="$cs_version_sequence $cs_version_major.$y" y=`expr $cs_version_minor + 2` cs_version_sequence="$cs_version_sequence $cs_version_major.$y"], [# Stable version search sequence y=`expr $cs_version_minor + 2` cs_version_sequence="$cs_version_sequence $cs_version_major.$y" y=`expr $cs_version_minor + 1` cs_version_sequence="$cs_version_sequence $cs_version_major.$y"]) for test_version in $cs_version_sequence; do cs_path_X_Y='' test_version_major=`echo $test_version | sed "s/$sed_expr_base/\1/"` test_version_minor=`echo $test_version | sed "s/$sed_expr_base/\2/"` CRYSTAL_X_Y=$(sh -c "echo \$CRYSTAL_`echo ${test_version_major}_${test_version_minor}`") AS_IF([test -n "$CRYSTAL_X_Y"], [my_IFS=$IFS; IFS=$PATH_SEPARATOR for cs_dir in $CRYSTAL_X_Y; do AS_IF([test -n "$cs_path_X_Y"], [cs_path_X_Y="$cs_path_X_Y$PATH_SEPARATOR"]) cs_path_X_Y="$cs_path_X_Y$cs_dir$PATH_SEPARATOR$cs_dir/bin" done IFS=$my_IFS]) AC_PATH_TOOL([CRYSTAL_CONFIG_TOOL], [cs-config-$test_version], [], [$cs_path_X_Y$PATH_SEPARATOR$cs_path]) AS_IF([test -n "$CRYSTAL_CONFIG_TOOL"], [break]) done # Legacy: CS 1.0 used a bare-named cs-config AS_IF([test -z "$CRYSTAL_CONFIG_TOOL"], [AC_PATH_TOOL([CRYSTAL_CONFIG_TOOL], [cs-config], [], [$cs_path])]) AS_IF([test -n "$CRYSTAL_CONFIG_TOOL"], [cfg="$CRYSTAL_CONFIG_TOOL" # Still do cs-config version check - this one will also take the release # component into account. Also needed for legacy cs-config. CS_CHECK_PROG_VERSION([Crystal Space], ["$cfg" --version], m4_default([$1],[cs_min_version_default]), [9.9|.9], [cs_sdk=yes], [cs_sdk=no]) AS_IF([test $cs_sdk = yes], [cs_liblist="$4" cs_optlibs=CS_TRIM([$5]) AS_IF([test -n "$cs_optlibs"], [cs_optlibs=`"$cfg" --available-libs $cs_optlibs` cs_liblist="$cs_liblist $cs_optlibs"]) CRYSTAL_VERSION=`"$cfg" --version $cs_liblist` CRYSTAL_CFLAGS=CS_RUN_PATH_NORMALIZE(["$cfg" --cxxflags $cs_liblist]) CRYSTAL_LIBS=CS_RUN_PATH_NORMALIZE(["$cfg" --libs $cs_liblist]) CRYSTAL_INCLUDE_DIR=CS_RUN_PATH_NORMALIZE( ["$cfg" --includedir $cs_liblist]) CRYSTAL_AVAILABLE_LIBS=`"$cfg" --available-libs` CRYSTAL_STATICDEPS=`"$cfg" --static-deps` CRYSTAL_PREFIX=CS_RUN_PATH_NORMALIZE(["$cfg" --prefix]) CRYSTAL_EXEC_PREFIX=CS_RUN_PATH_NORMALIZE(["$cfg" --exec-prefix]) CRYSTAL_TOOLS_PREFIX=CS_RUN_PATH_NORMALIZE(["$cfg" --tools-prefix]) AS_IF([test -z "$CRYSTAL_LIBS"], [cs_sdk=no])])], [cs_sdk=no]) AS_IF([test "$cs_sdk" = yes && test "$enable_cstest" = yes], [CS_CHECK_BUILD([if Crystal Space SDK is usable], [cs_cv_crystal_sdk], [AC_LANG_PROGRAM( [#include #include csStaticVarCleanupFN csStaticVarCleanup;], [csString s; s << "Crystal Space";])], [CS_CREATE_TUPLE([$CRYSTAL_CFLAGS],[],[$CRYSTAL_LIBS])], [C++], [], [cs_sdk=no])]) AS_IF([test "$cs_sdk" = yes], [CRYSTAL_AVAILABLE=yes $2], [CRYSTAL_AVAILABLE=no CRYSTAL_CFLAGS='' CRYSTAL_VERSION='' CRYSTAL_LIBS='' CRYSTAL_INCLUDE_DIR='' CRYSTAL_PREFIX='' CRYSTAL_EXEC_PREFIX='' CRYSTAL_TOOLS_PREFIX='' $3]) ]) #------------------------------------------------------------------------------ # CS_PATH_CRYSTAL_HELPER([MINIMUM-VERSION], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND], [REQUIRED-LIBS], # [OPTIONAL-LIBS]) # Deprecated: Backward compatibility wrapper for CS_PATH_CRYSTAL_CHECK(). #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_CRYSTAL_HELPER], [CS_PATH_CRYSTAL_CHECK([$1],[$2],[$3],[$4],[$5])]) #------------------------------------------------------------------------------ # CS_PATH_CRYSTAL([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], # [REQUIRED-LIBS], [OPTIONAL-LIBS]) # Convenience wrapper for CS_PATH_CRYSTAL_CHECK() which also invokes # AC_SUBST() for CRYSTAL_AVAILABLE, CRYSTAL_VERSION, CRYSTAL_CFLAGS, # CRYSTAL_LIBS, CRYSTAL_INCLUDE_DIR, and CRYSTAL_AVAILABLE_LIBS. #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_CRYSTAL], [CS_PATH_CRYSTAL_CHECK([$1],[$2],[$3],[$4],[$5]) AC_SUBST([CRYSTAL_AVAILABLE]) AC_SUBST([CRYSTAL_VERSION]) AC_SUBST([CRYSTAL_CFLAGS]) AC_SUBST([CRYSTAL_LIBS]) AC_SUBST([CRYSTAL_INCLUDE_DIR]) AC_SUBST([CRYSTAL_AVAILABLE_LIBS]) AC_SUBST([CRYSTAL_STATICDEPS]) AC_SUBST([CRYSTAL_PREFIX]) AC_SUBST([CRYSTAL_EXEC_PREFIX])]) AC_SUBST([CRYSTAL_TOOLS_PREFIX])]) #------------------------------------------------------------------------------ # CS_PATH_CRYSTAL_EMIT([MINIMUM-VERSION], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND], [REQUIRED-LIBS], [OPTIONAL-LIBS], # [EMITTER]) # Convenience wrapper for CS_PATH_CRYSTAL_CHECK() which also emits # CRYSTAL_AVAILABLE, CRYSTAL_VERSION, CRYSTAL_CFLAGS, CRYSTAL_LIBS, # CRYSTAL_INCLUDE_DIR, and CRYSTAL_AVAILABLE_LIBS as the build properties # CRYSTAL.AVAILABLE, CRYSTAL.VERSION, CRYSTAL.CFLAGS, CRYSTAL.LIBS, # CRYSTAL.INCLUDE_DIR, and CRYSTAL.AVAILABLE_LIBS, respectively, using # EMITTER. EMITTER is a macro name, such as CS_JAMCONFIG_PROPERTY or # CS_MAKEFILE_PROPERTY, which performs the actual task of emitting the # property and value. If EMITTER is omitted, then # CS_EMIT_BUILD_PROPERTY()'s default emitter is used. #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_CRYSTAL_EMIT], [CS_PATH_CRYSTAL_CHECK([$1],[$2],[$3],[$4],[$5]) _CS_PATH_CRYSTAL_EMIT([CRYSTAL.AVAILABLE],[$CRYSTAL_AVAILABLE],[$6]) _CS_PATH_CRYSTAL_EMIT([CRYSTAL.VERSION],[$CRYSTAL_VERSION],[$6]) _CS_PATH_CRYSTAL_EMIT([CRYSTAL.CFLAGS],[$CRYSTAL_CFLAGS],[$6]) _CS_PATH_CRYSTAL_EMIT([CRYSTAL.LFLAGS],[$CRYSTAL_LIBS],[$6]) _CS_PATH_CRYSTAL_EMIT([CRYSTAL.INCLUDE_DIR],[$CRYSTAL_INCLUDE_DIR],[$6]) _CS_PATH_CRYSTAL_EMIT([CRYSTAL.AVAILABLE_LIBS],[$CRYSTAL_AVAILABLE_LIBS],[$6]) _CS_PATH_CRYSTAL_EMIT([CRYSTAL.STATICDEPS],[$CRYSTAL_STATICDEPS],[$6]) _CS_PATH_CRYSTAL_EMIT([CRYSTAL.EXEC_PREFIX],[$CRYSTAL_EXEC_PREFIX],[$6]) _CS_PATH_CRYSTAL_EMIT([CRYSTAL.TOOLS_PREFIX],[$CRYSTAL_TOOLS_PREFIX],[$6]) ]) AC_DEFUN([_CS_PATH_CRYSTAL_EMIT], [CS_EMIT_BUILD_PROPERTY([$1],[$2],[],[],[$3])]) #------------------------------------------------------------------------------ # CS_PATH_CRYSTAL_JAM([MINIMUM-VERSION], [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND], [REQUIRED-LIBS], [OPTIONAL-LIBS]) # Deprecated: Jam-specific backward compatibility wrapper for # CS_PATH_CRYSTAL_EMIT(). #------------------------------------------------------------------------------ AC_DEFUN([CS_PATH_CRYSTAL_JAM], [CS_PATH_CRYSTAL_EMIT([$1],[$2],[$3],[$4],[$5],[CS_JAMCONFIG_PROPERTY])]) crystalspace-glshader-cg-2.0/mk/autoconf/install-sh0000755000175000017500000002177411473743544022012 0ustar devfildevfil#!/bin/sh # install - install a program, script, or datafile scriptversion=2004-07-05.00 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: crystalspace-glshader-cg-2.0/mk/jam/0000755000175000017500000000000011544132321016704 5ustar devfildevfilcrystalspace-glshader-cg-2.0/mk/jam/jamcompatibility.jam0000644000175000017500000002513011473743534022756 0ustar devfildevfil#============================================================================ # 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 crystalspace-glshader-cg-2.0/mk/jam/subdir.jam0000644000175000017500000000612411473743534020707 0ustar devfildevfil#============================================================================ # 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) "$(<)" } crystalspace-glshader-cg-2.0/mk/jam/application.jam0000644000175000017500000001234711473743534021726 0ustar devfildevfil#============================================================================ # 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) : $(APPLICATION_SUFFIX) ; } # Link MakeLocate $(target) : $(LOCATE.TARGETS) ; SystemLinkApplication $(<) : $(objects) : $(3) ; local cleanextra ; if $(LINK.DEBUG.INFO.SEPARATE) = "yes" { local debugfile = [ SplitDebugInfo $(target) : $(APPLICATION_SUFFIX) ] ; $(target)_DEBUGFILE = $(debugfile) ; 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) ; 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" ; crystalspace-glshader-cg-2.0/mk/jam/objectivec.jam0000644000175000017500000000507211473743534021535 0ustar devfildevfil#============================================================================ # 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) $(>) } } crystalspace-glshader-cg-2.0/mk/jam/property.jam0000644000175000017500000000401011473743534021273 0ustar devfildevfil#============================================================================== # 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_$(<)_$(>)" ; } crystalspace-glshader-cg-2.0/mk/jam/docs.jam0000644000175000017500000007061411473743534020354 0ustar devfildevfil#============================================================================ # 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 options = $(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) "-C" [ 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) ; OUTPUT_DIRECTORY on $(target) = $(outdir) ; GENERATE_HTML on $(target) = "YES" ; GENERATE_TAGFILE on $(target) = "" ; 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 ; } ## DoxyTag 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 DoxyTag { local target = $(1) ; local infiles = $(2) ; local subdir = $(3) ; local outfile = $(4) ; local options = $(5) ; local doxyfile = $(infiles[1]) ; local resources = $(infiles[2-]) ; local outdir = [ FDirName $(LOCATE.DOCS) $(subdir) ] ; local grist = "$(SOURCE_GRIST)!$(target)" ; if ! $(outfile) { outfile = $(PACKAGE_NAME).tag ; } local outfile_gristed = $(outfile:G=$(grist)) ; 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) ; OUTPUT_DIRECTORY on $(target) = $(outdir) ; GENERATE_HTML on $(target) = "NO" ; GENERATE_TAGFILE on $(target) = $(outdir)/$(outfile) ; MakeLocate $(outfile_gristed) : $(outdir) ; Depends $(target) : $(outfile_gristed) ; Depends $(target) : $(doxyfile) ; RunDoxygen $(target) : $(doxyfile) ; NotFile $(target) ; Always $(target) ; Clean $(target)clean : $(outfile_gristed) ; if $(subdir) { CleanDir $(target)clean : $(outdir) ; } Depends cleandoc : $(target)clean ; return $(outfile_gristed) ; } } #---------------------------------------------------------------------------- # 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) \ VERSION=$(PACKAGE_VERSION) \ OUTPUT_DIRECTORY=$(OUTPUT_DIRECTORY) \ GENERATE_HTML=$(GENERATE_HTML) \ GENERATE_TAGFILE=$(GENERATE_TAGFILE) \ $(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 ; crystalspace-glshader-cg-2.0/mk/jam/crystalspace_staticplugins_msvc.jam0000644000175000017500000000142211500447301026071 0ustar devfildevfil# This is an example on how to include the MSVC static plugins information # for external projects. # The information itself is split across multiple files, one for each # supported version of MSVC; the files for the desired MSVC versions must # be included (usually all). # The inclusions below are of examplary nature and would only work within # the source tree of CS. For an external project you could either directly # refer to the files inside CS or a copy in your project's sources; either # way, the include statements below would obviously have to adjusted # appropriately. include $(TOP)/mk/msvc/crystalspace_staticplugins_msvc8.jam ; include $(TOP)/mk/msvc/crystalspace_staticplugins_msvc9.jam ; include $(TOP)/mk/msvc/crystalspace_staticplugins_msvc10.jam ; crystalspace-glshader-cg-2.0/mk/jam/upload.jam0000644000175000017500000000572511473743534020711 0ustar devfildevfil#============================================================================ # Utilities for uploading files to a server # Copyright (C)2006-2007 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. # #============================================================================ UPLOAD ?= "$(TOP)/bin/upload.sh" ; SSH ?= ssh ; SCP ?= scp ; CMD.TAR ?= tar ; ## UploadDir target : dir : server_and_user : serverpath ## Upload a complete directory to a server. ## server_and_user, serverpath specify the remote server + user (in the ## form user@remote.net) and path on the server respectively. rule UploadDir { local target = $(1) ; local dir = $(2) ; local server_user = $(3) ; local serverpath = $(4) ; DIR on $(target) = $(dir) ; SERVER_USER on $(target) = $(server_user) ; DESTPATH on $(target) = $(serverpath) ; DoUploadDir $(target) ; } actions DoUploadDir { # Pack directory for transfer tempdir=${TEMP:-${TMP:-/tmp}} tempfile=`mktemp -u upload-XXXXXXXX`.tbz2 cd $(DIR) $(CMD.TAR) -cjvf $tempdir/$tempfile * cd - # The actual transfer cd $tempdir $(SCP) $tempfile "$(SERVER_USER)://tmp/$tempfile" cd - # Unpack on the server $(SSH) $(SERVER_USER) "\ cd $(DESTPATH); \ tar --overwrite -xjvf /tmp/$tempfile; \ rm -rf /tmp/$tempfile" # Cleanup rm $tempdir/$tempfile } ## UploadFile target : file : server_and_user : serverpath ## Upload a single file to a server. ## server_and_user, serverpath specify the remote server + user (in the ## form user@remote.net) and path on the server respectively. rule UploadFile { local target = $(1) ; local file = $(2) ; local server_user = $(3) ; local serverpath = $(4) ; FILE on $(target) = $(file) ; SERVER_USER on $(target) = $(server_user) ; DESTPATH on $(target) = $(serverpath) ; DoUploadFile $(target) : $(file) ; } actions DoUploadFile { # Create target dir DESTPATH=$(DESTPATH) $(SSH) $(SERVER_USER) "mkdir -p $DESTPATH" # transfer file $(SCP) $(>) $(SERVER_USER):$(DESTPATH)/ } ## UploadFiles target : files : server_and_user : serverpath rule UploadFiles { local target = $(1) ; local f ; for f in $(2) { local filetarget = $(target)_upload_$(f) ; UploadFile $(filetarget) : $(f) : $(3) : $(4) ; Depends $(target) : $(filetarget) ; } } crystalspace-glshader-cg-2.0/mk/jam/variant.jam0000644000175000017500000000407011473743534021061 0ustar devfildevfil#============================================================================ # 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.PRIVATE) $(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)/$(<) ; } } crystalspace-glshader-cg-2.0/mk/jam/filelist.jam0000644000175000017500000001033011473743534021224 0ustar devfildevfil#============================================================================ # Rules for file list creation # Copyright (C)2008 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. # #============================================================================ ## ListFile list ## Returns the output file name for a certain file list. rule ListFile { listfile = $(1).txt ; local dir = [ ConcatDirs $(BUILDTOP) out lists ] ; MakeLocate $(listfile) : $(dir) ; SEARCH on $(listfile) = $(dir) ; Clean filelistsclean : $(listfile) ; Depends clean : filelistsclean ; return $(listfile) ; } ## DoFileListEntries sourcenames : directory : list ## Creates a new target adding the given sources named by ## `sourcenames' to the file list `list`. `directory' is a list of ## directory components indicating the directory part for entries of ## `sourcenames' written to the file list - it is relative to a file list ## dependent directory. The DoFileListEntries rule returns the names of ## the file list targets. rule DoFileListEntries { local targets i ; for i in $(1) { targets += [ DoFileListEntry $(i) : $(2) : $(i) : $(3) ] ; } return $(targets) ; } ## DoFileListEntry sourcename : directory : destname : list ## Creates a new target adding the given source named by ## `sourcename' to the file list `list`. `directory' is a list of ## directory components indicating the directory part for `sourcename' ## written to the file list - it is relative to a file list dependent ## directory. The DoFileListEntries rule returns the names of the file ## list targets. rule DoFileListEntry { local target destdir srcdir listfile ; dir = [ ConcatDirs $(2) ] ; target = $(1:G=filelist!$(SUBDIR:J=!)) ; listfile = [ ListFile $(4) ] ; SEARCH on $(target) = [ on $(1) GetVar SEARCH ] ; NoCare $(target) ; WriteFileListEntry $(listfile) : $(target) : $(dir) : $(1) ; Depends $(listfile) : $(target) ; return $(listfile) ; } ## FileListEntriesData sourcenames : directories : list ## Add plain files to a file list. rule FileListEntriesData { SEARCH on $(<) = $(SUBDIR) ; Depends filelists : [ DoFileListEntries $(<) : $(2) : $(3) ] ; } ## FileListEntryApplications app : list rule FileListEntryApplications { $($(1)_TARGET)_FILELIST = $(2) ; Depends filelists : [ SystemDoFileListEntryApplications $(1) : $(2) ] ; } ## FileListEntryPlugin plugin : list rule FileListEntryPlugin { $($(1)_TARGET)_FILELIST = $(2) ; Depends filelists : [ SystemDoFileListEntryPlugin $(1) : $(2) ] ; } #---------------------------------------------------------------------------- rule WriteFileListEntry { local listfile = $(1) ; local srcfile = $(2) ; local destname = $(4:D=$(3):G=) ; if $(destname) = "" { destname = $(4:G=) ; } local listfile_gristed = $(listfile:G=$(destname)) ; MakeLocate $(listfile_gristed) : [ on $(listfile) GetVar LOCATE ] ; DESTNAME on $(listfile_gristed) = $(destname) ; LOCATE on $(srcfile) = [ on $(srcfile) GetVar SEARCH ] ; if $($(listfile)_CREATED) != "yes" { WriteFileListEntry1 $(listfile_gristed) : $(srcfile) ; $(listfile)_CREATED = yes ; } else { WriteFileListEntry2 $(listfile_gristed) : $(srcfile) ; } Depends $(listfile) : $(listfile_gristed) ; } actions WriteFileListEntry1 { echo "$(>):$(DESTNAME)" > $(<) } actions WriteFileListEntry2 { echo "$(>):$(DESTNAME)" >> $(<) } Help filelists : "Generate file lists for packages" ; crystalspace-glshader-cg-2.0/mk/jam/msi.jam0000644000175000017500000000771511473743534020216 0ustar devfildevfil#============================================================================ # Rules for creating MSI/MSM files via WiX # Copyright (C)2008 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. # #============================================================================ CMD.GENMSM ?= $(TOP)/bin/cs-genwix-msm.py ; CMD.CANDLE ?= candle ; CMD.LIGHT ?= light ; LOCATE.MSI ?= $(BUILDTOP)/out/msi ; LOCATE.MSM ?= $(BUILDTOP)/out/msi ; LOCATE.MSI.TEMP ?= $(BUILDTOP)/out/msi/temp ; WIX_FLAGS = -v -nologo ; #-pedantic CANDLEFLAGS = ; LIGHTFLAGS = -ext WixUIExtension -cultures:en-us -ss -sval ; # MSIMergeModule msmfile : wxs [: preprocvars] rule MSIMergeModule { local target = $(1) ; local mod_src = $(2) ; local env = $(3) ; SEARCH on $(mod_src) = $(SEARCH_SOURCE) ; local mod_obj = $(mod_src:S=.wixobj) ; MakeLocate $(mod_obj) : $(LOCATE.MSI.TEMP) ; Depends $(mod_obj) : $(mod_src) ; VARS on $(mod_obj) = $(env) ; CompileWXS $(mod_obj) : $(mod_src) ; Clean mergemodulesclean : $(mod_obj) ; Depends $(target) : $(mod_obj) ; LinkWIXOBJ $(target) : $(mod_obj) ; Clean mergemodulesclean : $(target) ; Depends mergemodules : $(target) ; Depends clean : mergemodulesclean ; } # MSIMergeModuleFromList id : filelist : version [: subdir] rule MSIMergeModuleFromList { local target = $(1) ; local mod_src = $(target).wxs ; local filelistfile = [ ListFile $(2) ] ; MakeLocate $(mod_src) : $(LOCATE.MSI.TEMP) ; VERSION on $(mod_src) = $(3) ; ID on $(mod_src) = $(target) ; SUBDIR on $(mod_src) = $(4) ; Depends $(mod_src) : $(filelistfile) ; GenerateMSMSource $(mod_src) : $(filelistfile) ; Clean mergemodulesclean : $(mod_src) ; local mod_msm = $(mod_src:S=.msm) ; MakeLocate $(mod_msm) : $(LOCATE.MSM) ; MSIMergeModule $(mod_msm) : $(mod_src) ; Depends $(target) : $(mod_msm) ; NotFile $(target) ; Depends mergemodules : $(target) ; Depends clean : mergemodulesclean ; } ## MSIPackage msifile : wxs [: preprocvars [: objfile]] rule MSIPackage { local target = $(1) ; local mod_src = $(2) ; local env = $(3) ; SEARCH on $(mod_src) = $(SEARCH_SOURCE) ; local mod_obj = $(4:E=$(mod_src:S=)) ; mod_obj = $(mod_obj).wixobj ; MakeLocate $(mod_obj) : $(LOCATE.MSI.TEMP) ; Depends $(mod_obj) : $(mod_src) ; VARS on $(mod_obj) = $(env) ; CompileWXS $(mod_obj) : $(mod_src) ; Clean mergemodulesclean : $(mod_obj) ; Depends $(target) : $(mod_obj) ; LIGHTFLAGS.EXTRA on $(target) = -cc $(LOCATE.MSI.TEMP)/cabinets -reusecab ; LinkWIXOBJ $(target) : $(mod_obj) ; Clean msiclean : $(target) ; Depends msi : $(target) ; Depends clean : msiclean ; } actions together GenerateMSMSource { $(CMD.GENMSM) -o $(<) --id $(ID) --version $(VERSION) \ --subdirmap=$(SUBDIR) \ $(>) } actions CompileWXS { candle $(WIX_FLAGS) $(CANDLEFLAGS) $(>) -out $(<) \ -d$(VARS) } actions LinkWIXOBJ { light $(WIX_FLAGS) $(LIGHTFLAGS) $(LIGHTFLAGS.EXTRA) $(>) -out $(<) } ## UploadMSIs uploadtarget : msitargets : user@host : path/on/host rule UploadMSIs { local target = $(1) ; local files = $(2) ; local m ; for m in $(files) { local target2 = _$(target)_upload_$(m) ; NotFile $(target2) ; Always $(target2) ; UploadFile $(target2) : $(m) : $(3) : $(4) ; Depends $(target) : $(target2) ; } } crystalspace-glshader-cg-2.0/mk/jam/swig.jam0000644000175000017500000003076111473743534020374 0ustar devfildevfil#============================================================================ # 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 the # SCM 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. # # (7) Delete any lines containing the auto-generated # /*@SWIG:/path/to/dotifile@*/ typemap comment to ensure that the SCM does # not consider the file as having changed simply because the project source # directory location moved if the actual generated content has not. # # (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\\ #ifdef _MSC_VER\\ #include \\ #include \\ #if defined(_DEBUG) \\\&\\\& !defined(DEBUG_PYTHON)\\ #undef _DEBUG\\ #define RESTORE__DEBUG\\ #endif\\ #endif\\ \\1\\ #ifdef RESTORE__DEBUG\\ #define _DEBUG\\ #undef RESTORE__DEBUG\\ #endif/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[^@]*@\\*\\//d'" ; ## 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. The second, optional element should name ## the generated C or C++ header accompanying the source file if Swig ## generates one. It will be places in the same directory. 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 headertarget ; if $(othertargets[1]:S) = ".h" { headertarget = $(othertargets[1]) ; othertargets = $(othertargets[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) { # ensure the directory where language-specific files are emitted # exists before swig is run. if $(outdir) != $(LOCATE_TARGET) { Depends $(target) : $(outdir) ; MkDir $(outdir) ; } 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) ] -o $(target:G=:D=$(LOCATE_TARGET)) ; if $(headertarget) { MakeLocate $(headertarget) : $(LOCATE_TARGET) ; # 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 $(headertarget) : $(target) ; SWIG.FLAGS on $(target) += -oh $(headertarget:G=:D=$(LOCATE_TARGET)) ; } # 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) = [ on $(swigfile) GetVar SEARCH ] $(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) ; Depends $(language)freeze : $(tag)freeze ; 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) ; } if $(headertarget) { local frozen_header = $(headertarget:G=$(tag)freeze) ; MakeLocate $(frozen_header) : $(frozentargetdir) ; Depends $(frozen_header) : $(headertarget) ; Copy $(frozen_header) : $(headertarget) ; Depends $(tag)freeze : $(frozen_header) ; } NotFile $(tag)freeze ; Help $(tag)freeze : "Copy generated Swig files to source directory" ; } } ## SwigExternalRuntime target : language [ : swigflags [: frozendirs [: tag ]]] rule SwigExternalRuntime { local target = $(1) ; local language = $(2) ; local swigflags = $(3) ; local frozentargetdir = $(4[1]) ; local frozenotherdir = $(4[2-]) ; local tag = $(5) ; if ! $(frozenotherdir) { frozenotherdir = $(frozentargetdir) ; } if ! $(tag) { tag = $(language) ; } MakeLocate $(target) : $(LOCATE_TARGET) ; SWIG.FLAGS on $(target) += $(SWIG.FLAGS) -$(language) $(swigflags) -external-runtime [ ConcatDirs $(LOCATE_TARGET) $(target) ] ; RunSwig $(target) ; 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) ; Depends $(language)freeze : $(tag)freeze ; 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) $(>) $(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 = "^[ ]*[%#][ ]*i[nm][cp][lo][ur][dt]e?[ ]*[<\"]([^\">]*)[\">].*$" ; RegisterHeaderRule HeaderRule : $(SWIG.HDRPATTERN) : .i ; } } crystalspace-glshader-cg-2.0/mk/jam/msvcgen.jam0000644000175000017500000017760711515061773021073 0ustar devfildevfil#============================================================================== # 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 9 10 ; 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 [ : arch ]]] ## 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. 'arch' should be "x86" or "x64". If 'arch' is omitted, ## then 'directories' is used for x86 and x64. rule MsvcExternalLibrary { MsvcExternalLibrary1 $(1) : $(2) : $(3) : $(4) ; } rule MsvcExternalLibrary1 { } ## MsvcDefine target [ : key [ : value [ : mode [ : arch ]]]] ## 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. ## 'arch' should be "x86" or "x64". If 'arch' is omitted, then 'directories' ## is used for x86 and x64. rule MsvcDefine { MsvcDefine1 $(1) : $(2) : $(3) : $(4) : $(5) ; } rule MsvcDefine1 { } ## MsvcIncDirs target : directories [ : mode [ : arch ]] ## Invoke this rule to define MSVC-specific additional include directories. ## 'target' can be omitted in which case the include directories are added ## to all MSVC projects. ## 'mode' should be "release" or "debug". If 'mode' is omitted, then ## 'directories' is used for release and debug. 'arch' should be "x86" ## or "x64". If 'arch' is omitted, then 'directories' is used for x86 and ## x64. rule MsvcIncDirs { MsvcIncDirs1 $(1) : $(2) : $(3) : $(4) ; } rule MsvcIncDirs1 { } ## MsvcCFlags target [ : cflags [ : mode [ : arch ]]] ## 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. 'arch' should be "x86" or ## "x64". If 'arch' is omitted, then 'cflags' is used for x86 and x64. rule MsvcCFlags { MsvcCFlags1 $(1) : $(2) : $(3) : $(4) ; } rule MsvcCFlags1 { } ## MsvcLibDirs target : libdirs [ : mode [ : arch ]] ## Invoke this rule to define MSVC-specific additional library directories. ## 'target' can be omitted in which case the library directories are added ## to all MSVC projects. ## 'mode' should be "release" or "debug". If 'mode' is omitted, then ## 'libdirs' is used for release and debug. 'arch' should be "x86" ## or "x64". If 'arch' is omitted, then 'libdirs' is used for x86 and x64. rule MsvcLibDirs { _MsvcLibDirs $(1) : $(2) : $(3) : $(4) ; } rule _MsvcLibDirs { } ## MsvcLFlags target [ : lflags [ : mode [ : arch ]]] ## 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. 'arch' should be "x86" or ## "x64". If 'arch' is omitted, then 'lflags' is used for x86 and x64. rule MsvcLFlags { MsvcLFlags1 $(1) : $(2) : $(3) : $(4) ; } 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_shared, MSVC.PREFIX.library_static, MSVC.PREFIX.plugin, ## and MSVC.PREFIX.workspace variables to whatever values you like. rule MsvcGenName { MsvcGenName1 $(1) : $(2) ; } rule MsvcGenName1 { } ## MsvcUsePCH target : file ## Use this rule to set the 'target' to use precompiled header with name ## 'file'. rule MsvcUsePCH { MsvcUsePCH1 $(1) : $(2) ; } rule MsvcUsePCH1 { } ## "Properties" system ## Properties are values attached to msvcgen project types or targets. Some ## properties have a special meaning to the msvcgen process, but otherwise ## properties can be arbitrarily specified. ## One notable facility is that "properties" can be mapped to variables passed ## down to the templates when instanciated into actual projects, thus allowing ## for a wide-reaching customizations of the generated project. ## MsvcGetTypeProp type : property ## Get a property of a project type rule MsvcGetTypeProp { return [ MsvcGetTypeProp1 $(1) : $(2) ] ; } rule MsvcGetTypeProp1 { } ## MsvcSetTypeProp type : property ## Set a property of a project type rule MsvcSetTypeProp { MsvcSetTypeProp1 $(1) : $(2) : $(3) : $(4) ; } rule MsvcSetTypeProp1 { } ## MsvcGetTypeProp type : property ## Get a property of a target. Queries the property from the project's type ## if not present in the target. rule MsvcGetTargetProp { return [ MsvcGetTargetProp1 $(1) : $(2) ] ; } rule MsvcGetTargetProp1 { } ## MsvcGetTypeProp type : property ## Set a property of a target rule MsvcSetTargetProp { MsvcSetTargetProp1 $(1) : $(2) : $(3) : $(4) ; } rule MsvcSetTargetProp1 { } ## MsvcRegisterVariableProp variable : property ## Map the property 'property' of targets to the template variable ## 'variable'. rule MsvcRegisterVariableProp { MsvcRegisterVariableProp1 $(1) : $(2) ; } rule MsvcRegisterVariableProp1 { } # Path from build work dir (e.g. out/debug8/libfoo/) to source root rule MsvcWorkbuildToRoot { return [ ConcatDirs $(DOTDOT) $(DOTDOT) ] ; } #------------------------------------------------------------------------------ # 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) = 10 # Version 10 { SUFPRJ = vcxproj ; SUFWSP = sln ; MSVC_FORCE_CRLF = no ; MSVC_TEMPLATE_SUFFIX = 10 ; MSVC_FORMATVERSION_WSP = 11.00 ; MSVC_WSP_HEADERCOMMENT = "# Visual C++ Express 2010" ; } else # Versions 7, 71, 8, 9 and "unknown" { 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 ; MSVC_WSP_HEADERCOMMENT = "# Visual C++ Express 2005" ; } else if $(MSVC_VERSION) = 9 { MSVC_FORMATVERSION_PRJ = 9.00 ; MSVC_FORMATVERSION_WSP = 10.00 ; MSVC_WSP_HEADERCOMMENT = "# Visual C++ Express 2008" ; } 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 ?= ; # Set up default project types rule MsvcRegisterType { local type = $(1) ; local prefix = $(2) ; MSVC.DEPEND.$(type) ?= ; MSVC.DEPEND_DEBUG.$(type) ?= ; MSVC.LIBRARY.$(type) ?= ; MSVC.LIBRARY_DEBUG.$(type) ?= ; MSVC.LFLAGS.$(type) ?= ; MSVC.LFLAGS_DEBUG.$(type) ?= ; MSVC.CFLAGS.$(type) ?= ; MSVC.CFLAGS_DEBUG.$(type) ?= ; MSVC.DEFINES.$(type) ?= ; MSVC.DEFINES_DEBUG.$(type) ?= ; MSVC.PREFIX.$(type) = $(prefix) ; } MsvcRegisterType appgui : app ; MsvcRegisterType appcon : app ; MsvcRegisterType plugin : plg ; MsvcRegisterType library_static : lib ; MsvcRegisterType library_shared : lib ; MsvcRegisterType dll : dll ; MsvcRegisterType group : grp ; MsvcRegisterType workspace : wks ; # Set/get per-type properties. rule MsvcGetTypeProp1 { local type = $(1) ; local prop = $(2) ; return $(MSVC.PROP.TYPE.$(type).$(prop)) ; } rule MsvcSetTypeProp1 { local type = $(1) ; local prop = $(2) ; local value = $(3) ; local options = $(4) ; if ! [ IsElem $(options) : weak ] || ! $(MSVC.PROP.TYPE.$(type).$(prop)) { MSVC.PROP.TYPE.$(type).$(prop) = $(value) ; } } # Set/get per-target props. Also inherits props from the type. rule MsvcGetTargetProp1 { local target = $(1) ; local prop = $(2) ; local value ; if $(MSVC.PROP.TARGET.$(target).$(prop).SET) { value = $(MSVC.PROP.TARGET.$(target).$(prop)) ; } else { value = [ MsvcGetTypeProp $($(target)_TYPE) : $(prop) ] ; } return $(value) ; } rule MsvcSetTargetProp1 { local target = $(1) ; local prop = $(2) ; local value = $(3) ; local options = $(4) ; if ! [ IsElem $(options) : weak ] || ! $(MSVC.PROP.TARGET.$(target).$(prop)) { MSVC.PROP.TARGET.$(target).$(prop) = $(value) ; MSVC.PROP.TARGET.$(target).$(prop).SET = true ; } } # Set up default use/generation of resources, manifests and version info. MsvcSetTypeProp appgui : resources : yes ; MsvcSetTypeProp appcon : resources : yes ; MsvcSetTypeProp plugin : resources : yes ; MsvcSetTypeProp library_shared : resources : yes ; MsvcSetTypeProp dll : resources : yes ; MsvcSetTypeProp appgui : rsrcManifest : yes ; MsvcSetTypeProp appcon : rsrcManifest : yes ; MsvcSetTypeProp plugin : rsrcMetadata : yes ; MsvcSetTypeProp appgui : rsrcVersion : yes ; MsvcSetTypeProp appcon : rsrcVersion : yes ; MsvcSetTypeProp plugin : rsrcVersion : yes ; MsvcSetTypeProp library_shared : rsrcVersion : yes ; MsvcSetTypeProp dll : rsrcVersion : yes ; rule MsvcRegisterVariableProp1 { local variable = $(1) ; local prop = $(2) ; MSVCGEN_VARIABLES_FROM_PROPS += $(variable) $(prop) ; } 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__ } rule IconsMakeWin32ICO { } ## 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)" "headercomment|$(MSVC_WSP_HEADERCOMMENT)" "projectext|$(SUFPRJ)" "msvcversion|$(MSVC_VERSION)" $(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.$(<) = $(>) ; } ## MsvcAddFileToRespFile respfile : files : respdir ; rule MsvcAddFileToProject { local respfile = $(1) ; local files = $(2) ; local respdir = $(3) ; for f in $(files) { local file_base = $(f:G=:D=) ; if [ IsElem $(file_base) : $($(respfile)_FILES) ] { ResponseFile $(respfile) : "file_obj_unique|$(f)" : notfile : $(respdir) ; } else { ResponseFile $(respfile) : "file|$(f)" : notfile : $(respdir) ; $(respfile)_FILES += $(file_base) ; } } } ## MsvcProject target : type : sources : options ## Create a project file for 'target', which is the project's raw name. ## 'sources' is a list of files comprising the target. ## The output file of the project (library, executable etc) is controlled by ## the 'outputfile' property. rule MsvcProject { local rawname = $(1) ; local type = $(2) ; local decorated = [ MsvcGetTargetProp $(rawname) : outputfile ] ; local sources = $(3) ; local options = $(4) ; 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) ; local extravars = [ MsvcGetTargetProp $(rawname) : linkerextra ] ; { local vars_from_props = $(MSVCGEN_VARIABLES_FROM_PROPS) ; while $(vars_from_props) { local var = $(vars_from_props[1]) ; local prop = $(vars_from_props[2]) ; local value = [ MsvcGetTargetProp $(rawname) : $(prop) ] ; extravars += "$(var)|$(value)" ; vars_from_props = $(vars_from_props[3-]) ; } } # Boilerplate. ResponseFile $(respfile) : "key|value" "formatversion|$(MSVC_FORMATVERSION_PRJ)" "packageversion|$(PACKAGE_VERSION_LIST[1]).$(PACKAGE_VERSION_LIST[2])" "projtype|$(type)" "project|$(msvcname)" "rawtarget|$(rawname)" "target|$(decorated)" "sourceroot|$(relpath:J=/)" "buildroot|$(relpath:J=/)" "subdir|$(SUBDIR)" "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) $(extravars) : 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)) ; } MsvcAddFileToProject $(respfile) : $(fileinproj) : $(respdir) ; } } for i in $($(rawname)_EXTRASOURCES) { ResponseFile $(respfile) : "file|$(i)" : notfile : $(respdir) ; } # Add resource file. if [ MsvcGetTargetProp $(rawname) : resources ] = "yes" { local resource = $(msvcname:S=.rc) ; Depends msvcgen : $(resource) ; MakeLocate $(resource) : $(outdircommon) ; SEARCH on $(resource) = $(outdircommon) ; NAME on $(resource) = $(rawname) ; $(rawname)_RCNAME = $(resource) ; MsvcAddFileToProject $(respfile) : $(resource:R=$(outdircommon)) : $(respdir) ; if [ MsvcGetTargetProp $(rawname) : rsrcVersion ] = "yes" { 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 [ MsvcGetTargetProp $(rawname) : rsrcMetadata ] = "yes" { 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) ; MsvcAddFileToProject $(respfile) : $($(rawname)_METAFILE:R=$(SEARCH_SOURCE)) : $(respdir) ; } if [ MsvcGetTargetProp $(rawname) : rsrcManifest ] = "yes" { 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 manifest_amd64 = $(msvcname:S=)-x64.manifest ; MakeLocate $(manifest_amd64) : $(outdircommon) ; MakeManifestFile $(manifest_amd64) : $(rawname) : amd64 ; Depends $(manifest_amd64) : $(TOP)/Jamconfig ; Depends $(manifest_amd64) : $(SUBDIR)/Jamfile ; Depends msvcgen : $(manifest_amd64) ; local manifestrc = $(resource:S=.mfrctmp) ; MakeLocate $(manifestrc) : $(workdircommon) ; MANIFEST_NAME on $(manifestrc) = $(manifest) ; GenerateWin32ManifestRc $(manifestrc) ; Depends $(manifestrc) : $(manifest) ; ResponseFile $(respfile) : "manifest|$(manifest:R=$(outdircommon))" : notfile : $(respdir) ; ResponseFile $(respfile) : "manifest-x64|$(manifest_amd64: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) ; } } } ResponseFile $(respfile) : $(MSVC.RESPEMIT.GLOBAL) : notfile : $(respdir) ; local inckeys = "include" includedebug ; local incdirs = $(MSVC.INCDIRS_LITERAL) ; ResponseFile $(respfile) : "$(inckeys)|$(incdirs)" : notfile : $(respdir) ; ResponseFile $(respfile) : "$(inckeys)-x64|$(incdirs)" : notfile : $(respdir) ; local incdir ; for incdir in $(MSVC.INCDIRS) { if $(incdir) = "." { incdir = [ ConcatDirs $(relpath) ] ; } else { incdir = [ ConcatDirs $(relpath) $(incdir) ] ; } ResponseFile $(respfile) : "$(inckeys)|$(incdir)" : notfile : $(respdir) ; ResponseFile $(respfile) : "$(inckeys)-x64|$(incdir)" : notfile : $(respdir) ; } # Per-project include dirs are handled in the IncludeDir rule 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 ; if "$(1)" != "" { RegisterWellKnownCompileGroup1 $(1) ; } local g ; for g in $(MSVCGEN.DELAYED_COMPILE_GROUPS) { RegisterWellKnownCompileGroup1 $(g) ; } MSVCGEN.DELAYED_COMPILE_GROUPS = ; } rule _ApplyStaticPluginFlags { local package target plugins ; plugins = $(2) ; package = $(3) ; if $(package) { # External static plugins. local lflags.debug lflags.release p mode arch ; # Grab flags local target_lflags.release.x86 target_lflags.debug.x86 ; local target_lflags.release.x64 target_lflags.debug.x64 ; local target_relaydeps ; for p in $(plugins) { NotFile $(p) ; for mode in debug release { for arch in x86 x64 { local cflags ; if $(STATICPLUGIN.$(p).CFLAGS.$(mode).$(arch).$(MSVC_VERSION)) { cflags = $(STATICPLUGIN.$(p).CFLAGS.$(mode).$(arch).$(MSVC_VERSION)) ; } else if $(STATICPLUGIN.$(p).CFLAGS.$(mode).$(MSVC_VERSION)) { cflags = $(STATICPLUGIN.$(p).CFLAGS.$(mode).$(MSVC_VERSION)) ; } else { cflags = $(STATICPLUGIN.$(p).CFLAGS.$(mode)) ; } if $(STATICPLUGIN.$(p).LFLAGS.$(mode).$(arch).$(MSVC_VERSION)) { target_lflags.$(mode).$(arch) += $(STATICPLUGIN.$(p).LFLAGS.$(mode).$(arch).$(MSVC_VERSION)) ; } else if $(STATICPLUGIN.$(p).LFLAGS.$(mode).$(MSVC_VERSION)) { target_lflags.$(mode).$(arch) += $(STATICPLUGIN.$(p).LFLAGS.$(mode).$(MSVC_VERSION)) ; } else { target_lflags.$(mode).$(arch) += $(STATICPLUGIN.$(p).LFLAGS.$(mode)) ; } for target in $(1) { MsvcCFlags $(target) : $(cflags) : $(arch) ; } } } local relaydeps = $(STATICPLUGIN.$(p).RELAYDEPS) ; for relaydep in $(relaydeps) { local has_dep = no ; for trd in $(target_relaydeps) { if $(trd) = $(relaydep) { has_dep = yes ; } } if $(has_dep) = no { target_relaydeps += $(relaydep) ; for target in $(1) { RelayLibs $(target) : $(relaydep) : $(STATICPLUGIN.$(p).RELAYLIBS.$(relaydep)) ; } } } } for mode in debug release { for arch in x86 x64 { local lflags = [ RemoveDupFlags $(target_lflags.$(mode).$(arch)) ] ; for target in $(1) { MsvcLFlags $(target) : $(lflags) : $(mode) : $(arch) ; } } } } else { # link with static plugins for target in $(1) { LinkWith $(target) : $(STATICPLUGINS.LIBRARY) ; } # Local static plugins local libs p ; # Grab flags local target_relaydeps ; for p in $(plugins) { for target in $(1) { LinkWith $(target) : $($(p).NEEDLIBS) ; ExternalLibs $(target) : $($(p).EXTERNALLIBS) ; } for mode in debug release { for a in x86 x64 { for target in $(1) { MsvcExternalLibrary $(target) : $($(p)_$(mode)_$(a)_EXTERNALLIBS) : $(mode) : $(a) ; } } } local relaydeps = $($(p).RELAYDEPS) ; for relaydep in $(relaydeps) { local has_dep = no ; for trd in $(target_relaydeps) { if $(trd) = $(relaydep) { has_dep = yes ; } } if $(has_dep) = no { target_relaydeps += $(relaydep) ; for target in $(1) { RelayLibs $(target) : $(relaydep) : $(STATICPLUGIN.$(p).RELAYLIBS.$(relaydep)) ; } } } } } } 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) ; } } } else { # Local static plugins local p ; # Collect optional plugins for p in $(optplugins) { if $($(p)_TYPE) { plugins += $(p) ; } } } # Generate static plugin instantiation local outdir = [ Property msvcgen : outdircommon ] ; if "$(outdir)" = "" { outdir = [ Property msvcgen : outdir$(MSVC_VERSION) ] ; } # @@@ Prefix hardcoded local extrafiles_prefix = $(MSVC.PREFIX.appgui)$(<) ; local staticuse_out ; local tag ; if $(package) { staticuse_out = $(extrafiles_prefix)_staticuse_$(package).cpp ; tag = "_static_use_$(package)" ; } else { staticuse_out = $(extrafiles_prefix)_staticuse.cpp ; tag = "_static_use" ; } MakeLocate $(staticuse_out) : $(outdir) ; SEARCH on $(staticuse_out) = $(outdir) ; GenerateStaticPluginInstantiation $(staticuse_out) : $(plugins) : $(tag) ; Depends msvcgen : $(staticuse_out) ; # Build a shared lib containing the static plugins. # This is done to be more LGPL-friendly. if ( $(TRUE_STATIC_PLUGINS) != "yes" ) { local plugin_lib_name appglue libglue ; if $(package) { plugin_lib_name = $(target)_plugins_$(package) ; } else { plugin_lib_name = $(target)_plugins ; } # prepare source files if $(package) { libglue = $(extrafiles_prefix)_static_glue_lib_$(package).cpp ; } else { libglue = $(extrafiles_prefix)_static_glue_lib.cpp ; } MakeLocate $(libglue) : $(outdir) ; SEARCH on $(libglue) = $(outdir) ; GeneratePluginLibraryGlueLib $(libglue) : $(plugin_lib_name) : $(tag) ; Library $(plugin_lib_name) : : noinstall notest independent nohelp shared ; MsvcAddFileToProject $($(plugin_lib_name)_PRJ_RESPFILE) : $(libglue:R=$(outdir)) : $($(target)_PRJ_RESPDIR) ; MsvcAddFileToProject $($(plugin_lib_name)_PRJ_RESPFILE) : $(staticuse_out:R=$(outdir)) : $($(target)_PRJ_RESPDIR) ; LibDepends $(plugin_lib_name) : $(target_link_with) ; LFlags $(plugin_lib_name) : $(target_lflags) ; Depends msvcgen : $(libglue) ; # prepare source files if $(package) { appglue = $(extrafiles_prefix)_static_glue_app_$(package).cpp ; } else { appglue = $(extrafiles_prefix)_static_glue_app.cpp ; } MakeLocate $(appglue) : $(outdir) ; SEARCH on $(appglue) = $(outdir) ; GeneratePluginLibraryGlueApp $(appglue) : $(plugin_lib_name) ; # We need to get the external libs for the plugin lib; but they have to be # specified after LinkStaticPlugins $(target).PROPAGATE_EXTERNALLIBS += $(plugin_lib_name) ; # Add usefile to project MsvcAddFileToProject $($(target)_PRJ_RESPFILE) : $(appglue:R=$(outdir)) : $($(target)_PRJ_RESPDIR) ; Depends $(target) : $(appglue) ; Depends msvcgen : $(appglue) ; LinkWith $(target) : $(plugin_lib_name) ; # @@@ Something is overflowing Jam's little mind or so ... # $(target) changes it's value, somewhere! _ApplyStaticPluginFlags $(<) $(plugin_lib_name) : $(plugins) : $(package) ; } else { _ApplyStaticPluginFlags $(target) : $(plugins) : $(package) ; # Add usefile to project MsvcAddFileToProject $($(target)_PRJ_RESPFILE) : $(staticuse_out:R=$(outdir)) : $($(target)_PRJ_RESPDIR) ; Depends $(target) : $(staticuse_out) ; } } rule Application { RegisterWellKnownCompileGroup apps ; local projtype ; if [ IsElem console : $(3) ] { projtype = appcon ; } else { projtype = appgui ; } $(<)_TYPE = $(projtype) ; MsvcSetTargetProp $(<) : outputfile : $(<:S=.exe) : weak ; MsvcProject $(<) : $(projtype) : $(>) : $(3) ; CompileGroups $(<) : all apps ; } rule Plugin { RegisterWellKnownCompileGroup plugins ; $(<)_TYPE = plugin ; local outdir = [ Property msvcgen : outdir$(MSVC_VERSION) ] ; local outdircommon = [ Property msvcgen : outdircommon ] ; if "$(outdircommon)" = "" { outdircommon = $(outdir) ; } local plugin_impl_file = plugin_impl.cpp ; MakeLocate $(plugin_impl_file) : $(outdircommon) ; WritePluginImplement $(plugin_impl_file) ; Depends msvcgen : $(plugin_impl_file) ; $(<)_EXTRASOURCES = $(plugin_impl_file:R=$(outdircommon)) ; local metafile ; metafile = [ FAppendSuffix $(<) : $(SUFMETA) ] ; SEARCH on $(metafile) = $(SEARCH_SOURCE) ; $(<)_METAFILE = $(metafile) ; MsvcSetTargetProp $(<) : outputfile : $(<:S=$(MSVCGEN.PLUGIN_EXT.$(<):E=.dll)) : weak ; MsvcProject $(<) : plugin : $(>) ; 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_static)$(<)_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 { local options = $(3) ; RegisterWellKnownCompileGroup libs ; local type decorated ; if [ IsElem shared : $(3) ] { type = library_shared ; decorated = $(<:S=.dll) ; MsvcSetTargetProp $(<) : importlib : $(<:S=.lib) : weak ; } else { type = library_static ; decorated = $(<:S=.lib) ; } $(<)_TYPE = $(type) ; MsvcSetTargetProp $(<) : outputfile : $(decorated) : weak ; MsvcProject $(<) : $(type) : $(>) ; if ! [ IsElem independent : $(options) ] { CompileGroups $(<) : all libs ; } } rule DLL { RegisterWellKnownCompileGroup ; $(<)_TYPE = dll ; MsvcSetTargetProp $(<) : outputfile : $(3:E=$(<:S=.dll)) : weak ; MsvcProject $(<) : dll : $(>) ; CompileGroups $(<) : all ; } 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 ; # We need the CFLAGS of external dependencies, but not the LFLAGS. local extlib ; for extlib in [ RemoveDups $(extlibs) ] { _ExternalLibsHelperMsvc $(name) : $(extlib) : MsvcCFlags : CFLAGS ; _ExternalLibsHelperMsvc $(name) : $(extlib) : _MsvcDefine : DEFINES ; _ExternalLibsHelperMsvc $(name) : $(extlib) : _MsvcIncDirs : INCDIRS ; } # Write out needed CFLAGS, LFLAGS local outdir = [ Property msvcgen : outdircommon ] ; if $(outdir) = "" { outdir = [ Property msvcgen : outdir$(MSVC_VERSION) ] ; } STATICPLUGINS.DEPENDENCIES = $(name)_msvc$(MSVC_VERSION).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 depfile = $(<) ; local plugin = $(>) ; local libname = $(3) ; local depfile_gristed_plugin = $(depfile:G=$(plugin)) ; MakeLocate $(depfile_gristed_plugin) : [ on $(depfile) GetVar LOCATE ] ; if $($(depfile).FIRSTTIME) != "yes" { CreateDepFlagsFile $(depfile_gristed_plugin) ; $(depfile).FIRSTTIME = "yes" ; } WriteDepFlagsPluginAvail $(depfile_gristed_plugin) : $(plugin) ; local mode arch ; for mode in debug release { for arch in x86 x64 { local depfile_gristed = $(depfile:G=$(plugin)_$(mode)_$(arch)) ; MakeLocate $(depfile_gristed) : [ on $(depfile) GetVar LOCATE ] ; local lflags cflags ; if "$(mode)" = "debug" { # "Artificially" insert static library itself lflags += $(MSVC.PREFIX.library_static)$(libname)_d.lib ; # Collect other libs local libs = [ ResolveLibs $($(plugin).NEEDLIBS) ] ; lflags += $(MSVC.PREFIX.library_static)$(libs)_d.lib ; } else { # "Artificially" insert static library itself lflags += $(MSVC.PREFIX.library_static)$(libname).lib ; # Collect other libs local libs = [ ResolveLibs $($(plugin).NEEDLIBS) ] ; lflags += $(MSVC.PREFIX.library_static)$(libs).lib ; } # Defines local l ; for l in $($(plugin).EXTERNALLIBS) { if "$(mode)" = "debug" { if $($(l).DEFINES.DEBUG) { cflags += "\"/D $($(l).DEFINES.DEBUG)\"" ; } else { cflags += "\"/D $($(l).DEFINES)\"" ; } } else { cflags += "\"/D $($(l).DEFINES)\"" ; } } # Link flags lflags += $($(plugin).LFLAGS.$(mode)) ; lflags += $($(plugin)_$(mode)_$(arch)_EXTERNALLIBS) ; CFLAGS on $(depfile_gristed) = "$(cflags)" ; lflags = [ RemoveDups $(lflags) ] ; LFLAGS on $(depfile_gristed) = "$(lflags)" ; MODE on $(depfile_gristed) = "$(mode)" ; ARCH on $(depfile_gristed) = "$(arch)" ; WriteDepFlags $(depfile_gristed) : $(plugin) ; Depends $(depfile_gristed) : $(depfile_gristed_plugin) ; Depends $(depfile) : $(depfile_gristed) ; Always $(depfile_gristed) ; } } local relaydeps = $($(plugin).RELAYDEPS) ; for relaydep in $(relaydeps) { RELAYDEP on $(depfile_gristed_plugin) = "$(relaydep)" ; RELAYLIBS on $(depfile_gristed_plugin) = "$($(plugin).RELAYLIBS.$(relaydep))" ; WriteDepRelayLibs $(depfile_gristed_plugin) : $(plugin) ; } Depends $(depfile) : $(depfile_gristed_plugin) ; Always $(depfile_gristed_plugin) ; } actions CreateDepFlagsFile { 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. EOT } actions WriteDepFlagsPluginAvail { cat << EOT >> $(<) STATICPLUGINS.AVAILABLE += $(>) ; EOT } actions WriteDepFlags { cat << EOT >> $(<) STATICPLUGIN.$(>).CFLAGS.$(MODE).$(ARCH).$(MSVC_VERSION) = $(CFLAGS) ; STATICPLUGIN.$(>).LFLAGS.$(MODE).$(ARCH).$(MSVC_VERSION) = $(LFLAGS) ; EOT } actions WriteDepRelayLibs { cat << EOT >> $(<) STATICPLUGIN.$(>).RELAYDEPS += $(RELAYDEP) ; STATICPLUGIN.$(>).RELAYLIBS.$(RELAYDEP) = $(RELAYLIBS) ; EOT } rule RegisterCompileGroups { if $(MSVCGEN.REGISTERED_COMPILE_GROUP.$(<)) != yes { local i ; for i in $(<)_$(MSVC.WORKSPACES) { MsvcProject $(i) : group ; } MSVCGEN.REGISTERED_COMPILE_GROUP.$(<) = yes ; } } 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 $(>) $($(>).NEEDLIBS) ] ; LibDepends $(<) : $(libs) ; } rule LibDepends { local libs = $(>) ; for w in $(MSVC.WORKSPACES) { local l ; for l in $(libs) { if $($(l)_MSVCNAME) { ResponseFile $($(w)_WKS_RESPFILE) : "$($(<)_MSVCNAME)|$($(l)_MSVCNAME)" : notfile : $($(w)_WKS_RESPDIR) ; } } } local l ; for l in $(libs) $($(libs).NEEDLIBS) { if ! [ IsElem $(l) : $($(<).NEEDLIBS) ] { ResponseFile $($(<)_PRJ_RESPFILE) : "depends|$($(l)_MSVCNAME)" : notfile : $($(<)_PRJ_RESPDIR) ; $(<).NEEDLIBS += $(l) ; } } ExternalLibs $(<) : $($(>).EXTERNALLIBS) ; } rule RelayLibs { local extlib ; local outdir = [ Property msvcgen : outdir$(MSVC_VERSION) ] ; local outdircommon = [ Property msvcgen : outdircommon ] ; if "$(outdircommon)" = "" { outdircommon = $(outdir) ; } for extlib in $(>) { local relayfile = $(extlib).fake_stub.c ; MakeLocate $(relayfile) : $(outdircommon) ; WHATEVER on $(relayfile) = $(3) ; WriteRelayLibStub $(relayfile) ; Depends msvcgen : $(relayfile) ; MsvcExtraFile1 $(<) : $(relayfile:R=$(outdircommon)) ; $(<).RELAYDEPS += $(extlib) ; $(<).RELAYLIBS.$(extlib) = $(3) ; } ExternalLibs $(<) : $(>) ; } rule MsvcClassifyMode { local c ; switch $(<) { case release : c = "" ; case debug : c = debug ; case * : c = "" debug ; } return $(c) ; } rule MsvcClassifyArch { local c ; switch $(<) { case x86 : c = "" ; case x64 : c = "-x64" ; case * : c = "" "-x64" ; } return $(c) ; } # _MsvcRespEmit target : items : tag [ : mode [ : arch [ : 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 arch = $(5) ; local options = $(6) ; local modes = "" ; local archs = "" ; CheckOptions ignoremode ignorearch : $(options) : $(target) ; if ! [ IsElem ignoremode ] { modes = [ MsvcClassifyMode $(mode) ] ; } if ! [ IsElem ignorearch ] { archs = [ MsvcClassifyArch $(arch) ] ; } if "$(target)" = "" { MSVC.RESPEMIT.GLOBAL += "$(tag)$(modes)$(archs)|$(items)" ; } else { ResponseFile $($(target)_PRJ_RESPFILE) : "$(tag)$(modes)$(archs)|$(items)" : notfile : $($(target)_PRJ_RESPDIR) ; } } # MsvcExternalLibrary target [ : libs [ : mode [ : arch ]]] # (See documentation above.) rule MsvcExternalLibrary1 { _MsvcRespEmit $(1) : $(2) : library : $(3) : $(4) ; local mode = $(3) ; mode ?= debug release ; local arch = $(4) ; arch ?= x86 x64 ; $(1)_$(mode)_$(arch)_EXTERNALLIBS += $(2) ; } # MsvcDefine target [ : key [ : value [ : mode [ : arch ]]]] # (See documentation above.) rule MsvcDefine1 { local target = $(1) ; local key = $(2) ; local value = $(3) ; local mode = $(4) ; local arch = $(5) ; arch ?= x86 x64 ; if $(key) { local def ; if $(value) { def = "$(key)=$(value)" ; } else { def = $(key) ; } for a in $(arch) { _MsvcRespEmit $(target) : $(def) : define : $(mode) : $(a) ; STATICPLUGINS.$(target).MSVC_DEFINES.$(a) += $(def) ; } } } # MsvcIncDirs target : directory [ : mode [ : arch]] # (See documentation above.) rule MsvcIncDirs1 { _MsvcIncDirs $(1) : $(2) : $(3) : $(4) ; } ## MsvcUsePCH target : file ## (See documentation above.) rule MsvcUsePCH1 { _MsvcRespEmit $(1) : $(2) : pch ; } # _MsvcDefine target : tuples [ : mode [ : arch ]] # 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) : $(4) ; } # MsvcCFlags target [ : cflags [ : mode [ : arch ]]] # (See documentation above.) rule MsvcCFlags1 { _MsvcRespEmit $(1) : $(2) : cflags : $(3) : $(4) ; } # MsvcLFlags target [ : lflags [ : mode [ : arch ]]] # (See documentation above.) rule MsvcLFlags1 { local modes = [ MsvcClassifyMode $(3) ] ; $(target).LFLAGS.$(modes) += $(2) ; _MsvcRespEmit $(1) : $(2) : lflags : $(3) : $(4) ; } # MsvcExtraFile target : files # (See documentation above.) rule MsvcExtraFile1 { local rawname = $(1) ; local files = $(2) ; local respfile = $($(rawname)_PRJ_RESPFILE) ; local respdir = $($(rawname)_PRJ_RESPDIR) ; MsvcAddFileToProject $(respfile) : $(files) : $(respdir) ; } # _MsvcIncDirs target : incdirs [ : mode [ : arch ]] # Helper for ExternalLibs which processes the contents of TAG.INCDIRS for # an external library. rule _MsvcIncDirs { _MsvcRespEmit $(1) : $(2) : include : $(3) : $(4) ; } # _MsvcLibDirs target : libdirs [ : mode [ : arch ]] # Helper for ExternalLibs which processes the contents of TAG.LIBDIRS for # an external library. rule _MsvcLibDirs { _MsvcRespEmit $(1) : $(2) : libdir : $(3) : $(4) ; } # _ExternalLibsHelperMsvc target : libtag : subrule : attribute rule _ExternalLibsHelperMsvc { local target = $(1) ; local lib = $(2) ; local rulename = $(3) ; local attrib = $(4) ; local arch_X86 = x86 ; local arch_X64 = x64 ; for a in X86 X64 { if $($(lib).$(attrib).DEBUG.$(a).$(MSVC_VERSION)) { $(rulename) $(target) : $($(lib).$(attrib).DEBUG.$(a).$(MSVC_VERSION)) : debug : $(arch_$(a)) ; } else if $($(lib).$(attrib).DEBUG.$(MSVC_VERSION)) { $(rulename) $(target) : $($(lib).$(attrib).DEBUG.$(MSVC_VERSION)) : debug : $(arch_$(a)) ; } else if $($(lib).$(attrib).DEBUG.$(a)) { $(rulename) $(target) : $($(lib).$(attrib).DEBUG.$(a)) : debug : $(arch_$(a)) ; } else if $($(lib).$(attrib).DEBUG) { $(rulename) $(target) : $($(lib).$(attrib).DEBUG) : debug : $(arch_$(a)) ; } else if $($(lib).$(attrib).$(a)) { $(rulename) $(target) : $($(lib).$(attrib).$(a)) : debug : $(arch_$(a)) ; } else { $(rulename) $(target) : $($(lib).$(attrib)) : debug : $(arch_$(a)) ; } if $($(lib).$(attrib).$(a).$(MSVC_VERSION)) { $(rulename) $(target) : $($(lib).$(attrib).$(a).$(MSVC_VERSION)) : release : $(arch_$(a)) ; } else if $($(lib).$(attrib).$(MSVC_VERSION)) { $(rulename) $(target) : $($(lib).$(attrib).$(MSVC_VERSION)) : release : $(arch_$(a)) ; } else if $($(lib).$(attrib).$(a)) { $(rulename) $(target) : $($(lib).$(attrib).$(a)) : release : $(arch_$(a)) ; } else { $(rulename) $(target) : $($(lib).$(attrib)) : release : $(arch_$(a)) ; } } } 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) ; } for target in $($(<).PROPAGATE_EXTERNALLIBS) { ExternalLibs $(target) : $(>) ; } } rule IncludeDir { local dir = $(1) ; local target = $(2) ; local options = $(3) ; if ! [ IsElem transient : $(options) ] { if $(target) { # IncludeDir for a target must be called _after_ the target was set up, # hence we can assume a project response file is present local inckeys = "include" includedebug ; local relpath = [ Property msvcgen : relpath$(MSVC_VERSION) ] ; local respfile = $($(target)_PRJ_RESPFILE) ; local respdir = $($(target)_PRJ_RESPDIR) ; if [ IsElem literal : $(options) ] { if $(dir) { dir = [ ConcatDirs $(dir) ] ; } else { dir = "." ; } ResponseFile $(respfile) : "$(inckeys)|$(dir)" : notfile : $(respdir) ; ResponseFile $(respfile) : "$(inckeys)-x64|$(dir)" : notfile : $(respdir) ; } else { if $(dir) { dir = [ ConcatDirs $(relpath) $(SUBDIR_TOKENS) $(dir) ] ; } else { dir = [ ConcatDirs $(relpath) $(SUBDIR_TOKENS) ] ; } ResponseFile $(respfile) : "$(inckeys)|$(dir)" : notfile : $(respdir) ; ResponseFile $(respfile) : "$(inckeys)-x64|$(dir)" : notfile : $(respdir) ; } } else { local tag = "INCDIRS" ; if [ IsElem literal : $(options) ] { tag = "INCDIRS_LITERAL" ; } if $(dir) { dir = [ ConcatDirs $(dir) ] ; } else { dir = "." ; } 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 ; } crystalspace-glshader-cg-2.0/mk/jam/debuginfo.jam0000644000175000017500000001076411473743534021366 0ustar devfildevfil#============================================================================ # Rules for dealing with debugging information # Copyright (C)2006-2007 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) ; local dbgfile = $(binary:S=.dbg:G=$(binary:G)) ; local dir = [ on $(binary) GetVar LOCATE ] ; MakeLocate $(dbgfile) : $(dir) ; DEBUG_FILE on $(binary) = [ ConcatDirs $(dir) $(dbgfile:G=) ] ; DoSplitDebugInfo $(binary) ; Clean clean : $(dbgfile) ; return $(dbgfile) ; } actions DoSplitDebugInfo { $(CMD.OBJCOPY) --only-keep-debug $(<) $(DEBUG_FILE) $(CMD.OBJCOPY) --strip-unneeded $(<) $(CMD.OBJCOPY) $(CMD.OBJCOPY.LONG_SECTION_NAMES_ENABLE) --add-gnu-debuglink=$(DEBUG_FILE) $(<) test -n "$(CHMOD)" && $(CHMOD) a-x $(DEBUG_FILE) } DEBUGINFOTOOLS.DUMP_SYMS.WIN32 ?= "$(TOP)/bin/dump_syms.exe" ; DEBUGINFOTOOLS.DUMP_SYMS ?= $(DEBUGINFOTOOLS.DUMP_SYMS.$(TARGET.OS)) ; DEBUGINFOTOOLS.SYMBOLSTORE ?= "$(TOP)/bin/symbolstore.py" ; CABARC ?= cabarc ; if $(DEBUGINFOTOOLS.SYMBOLSTORE) && $(DEBUGINFOTOOLS.DUMP_SYMS) { ## CollectAndDumpSymbols target : dirs [: outdir] ## Collect and dump symbol files for binaries in directories "dirs" and ## output into "outdir" (defaults to $(BUILDTOP)/out/symbols/). rule CollectSymbols { local target = $(1) ; local dirs = $(2) ; local outdir = $(3) ; outdir ?= "$(BUILDTOP)/out/symbols" ; for d in $(dirs) { local thistarget = $(target:G=$(d)) ; Depends $(target) : $(thistarget) ; NotFile $(thistarget) ; OUTDIR on $(thistarget) = $(outdir) ; SRCDIR on $(thistarget) = $(d) ; RunSymbolStore $(thistarget) ; Always $(thistarget) ; } } actions RunSymbolStore { $(DEBUGINFOTOOLS.SYMBOLSTORE) -c -s "$(TOP)" \ "$(DEBUGINFOTOOLS.DUMP_SYMS)" "$(OUTDIR)" "$(SRCDIR)" } ## CompressSymbols target : dir ## Compress symbol files in 'dir'. rule CompressSymbols { local target = $(1) ; local dir = $(2) ; SYMDIR on $(target) = $(dir) ; if $(COMPRESSSYMBOLS_VERBOSE) { JAMARG on $(target) = "-dx" ; } CompressSymbols1 $(target) ; } JAM ?= jam ; actions CompressSymbols1 { $(JAM) "-sCOMPRESSSYMBOLS_DIR=$(SYMDIR)" $(JAMARG) _actual_compress_symbols } if $(COMPRESSSYMBOLS_DIR) { rule ActualCompressSymbols { local target = _actual_compress_symbols ; local dir = $(COMPRESSSYMBOLS_DIR) ; { local SUBDIR = $(dir) ; # Called rules see this new temporary value. # @@@ Recurse can not recognize directories; however, symbols may be # in a directory foo.pdb//. Assumes this is always the case. # Of course the "better" solution would be to distinguish dirs and # files ... maybe move that symbol recursion logic to a shell script? Recurse SymbolsRecurse2 : .pdb ; } } rule SymbolsRecurse2 { local target = _actual_compress_symbols ; local dir = $(SUBDIR)/$(1) ; { local SUBDIR = $(dir) ; # Called rules see this new temporary value. Recurse CompressPDB : .pdb ; } } rule CompressPDB { local f = $(1:G=$(SUBDIR)) ; local compressedName = $(f:S=.pd_) ; SUBDIR on $(compressedName) = $(SUBDIR) ; NotFile $(1) ; CabCompressAndRemove $(compressedName) : $(1) ; Depends $(compressedName) : $(1) ; Depends _actual_compress_symbols : $(compressedName) ; Always $(compressedName) ; } actions CabCompressAndRemove { cd $(SUBDIR) cabarc N $(<) $(>) if test $? -eq 0 ; then rm $(>) ; fi cd - } ActualCompressSymbols ; } } crystalspace-glshader-cg-2.0/mk/jam/win32.jam0000644000175000017500000004403411515061773020356 0ustar devfildevfil#============================================================================ # 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" ; # Helper to set unset elements of PACKAGE_VERSION_LIST to 0 rule _NormalizeVersionList { 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 ; } return $(v1) $(v2) $(v3) $(v4) ; } PACKAGE_VERSION_NORM = [ _NormalizeVersionList ] ; # Allow customization of some values written to the .rc file WIN32RC.EXTRAHEADER ?= ; WIN32RC.VERSIONNUMBER ?= # Remove any RC tag "`echo '$(PACKAGE_VERSION_NORM[1]),$(PACKAGE_VERSION_NORM[2]),$(PACKAGE_VERSION_NORM[3]),$(PACKAGE_VERSION_NORM[4])' | $(SED) 's/[^0123456789._,]//g'`" ; WIN32RC.VERSIONNUMBER.FILE ?= $(WIN32RC.VERSIONNUMBER) ; WIN32RC.VERSIONNUMBER.PRODUCT ?= $(WIN32RC.VERSIONNUMBER) ; WIN32RC.VERSIONSTR ?= "\"$(PACKAGE_VERSION)\"" ; WIN32RC.VERSIONSTR.FILE ?= $(WIN32RC.VERSIONSTR) ; WIN32RC.VERSIONSTR.PRODUCT ?= $(WIN32RC.VERSIONSTR) ; 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 ; APPLICATION.LFLAGS += $(LINK.GC_SECTIONS) ; PLUGIN.LFLAGS += $(LINK.GC_SECTIONS) ; LIBRARY.LFLAGS += $(LINK.GC_SECTIONS) ; 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. __EOF__ cat >> $(<) << __EOF__ $(WIN32RC.EXTRAHEADER) __EOF__ cat >> $(<) << __EOF__ 1 VERSIONINFO __EOF__ echo FILEVERSION $(WIN32RC.VERSIONNUMBER.FILE) >> $(<) echo PRODUCTVERSION $(WIN32RC.VERSIONNUMBER.PRODUCT) >> $(<) cat >> $(<) << __EOF__ #ifdef CS_DEBUG FILEFLAGS 0x1 #else FILEFLAGS 0x0 #endif { BLOCK "StringFileInfo" { BLOCK "040904E4" { VALUE "ProductName", "$(PRODUCT_NAME)" VALUE "ProductVersion", $(WIN32RC.VERSIONSTR.PRODUCT) VALUE "FileVersion", $(WIN32RC.VERSIONSTR.FILE) 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)" } } BLOCK "VarFileInfo" { VALUE "Translation", 0x409, 1200 } } __EOF__ } actions GenerateWin32ManifestRc { cat > $(<) << __EOF__ // This file is generated automatically. 1 24 "$(MANIFEST_NAME)" __EOF__ } actions GenerateWin32Manifest { cat > $(<) << __EOF__ > $(<) cat >> $(<) << __EOF__ processorArchitecture="$(MANIFEST_ARCH)" 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=$(HDRS) --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 { local libbase = [ LibraryBaseName $(<) ] ; return lib$(libbase)$(SUFLIB) ; } rule ConstructSharedLibraryTarget { local libbase = [ LibraryBaseName $(<) ] ; return $(libbase)-$(COMPILER.C++.TYPE).dll ; } rule ConstructSharedLibraryLinkLib { local libbase = [ LibraryBaseName $(<) ] ; return lib$(libbase)$(SUFLIB) ; } rule ConstructPluginTarget { return $(<).dll ; } # Also invoked by msvcgen.jam. rule MakeVersionRc { 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 { local desc = [ Description $(>) ] ; if ! $(desc) { desc = "$(>)" ; } PRODUCT_DESCRIPTION on $(<) = $(desc) ; local arch = $(3) ; if ! $(arch) { arch = X86 ; } local name ; if $(PACKAGE_NAME) { name = $(PACKAGE_NAME).$(>) ; } else { name = $(>) ; } PRODUCT_NAME on $(<) = $(name) ; MANIFEST_ARCH on $(<) = $(arch) ; 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) ; MakeLocate $(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) ; MakeLocate $(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) ; } rule SharedLibResourceWin32 { local versionrc ; versionrc = [ DoObjectGrist $(<)_versionrc.rc ] ; MakeLocate $(versionrc) : $(LOCATE_TARGET) ; MakeVersionRc $(versionrc) : $(<) ; Clean clean : $(versionrc) ; Clean $(<)clean : $(versionrc) ; Win32Resource $(<) : $(versionrc) ; } # SystemLinkApplication target : objects : options rule SystemLinkApplication { local target = $($(<)_TARGET) ; Depends $(target) : $(>) ; if ! [ IsElem console : $(3) ] && $(MODE) = optimize { # Like the MSVC projects build GUI applications as such in optimize builds. # In debug mode, let everything be console apps. EXTRALFLAGS on $(target) += -mwindows ; } LinkApplication $(target) : $(>) ; # setup clean rules Clean clean : $(target) ; Clean $(<)clean : $(target) ; AppResourceWin32 $(<) : $(3) ; } rule SystemInstallApplication { local suffix = $(4) ; if "$(suffix)" { local target_suffixed = "$(<:B)-$(suffix)$(<:S)" ; local installed = [ DoInstallFile $(<) : $(bindir) $(2) : $(target_suffixed) : $(INSTALL_PROGRAM) ] ; Depends install_bin : $(installed) ; local linktarget = $(<:D=$(bindir)) ; Depends install_bin : [ InstallSymLink $(linktarget) : $(installed) ] ; } else { Depends install_bin : [ DoInstall $(<) : $(bindir) $(2) : $(INSTALL_PROGRAM) ] ; } } rule SystemDoFileListEntryApplications { local target = $($(<)_TARGET) ; local entries = [ DoFileListEntries $(target) : : $(2) ] ; if $(LINK.DEBUG.INFO.SEPARATE) = "yes" { local debugfile = $($(target)_DEBUGFILE) ; entries += [ DoFileListEntries $(debugfile) : : debug-$(2) ] ; } return $(entries) ; } rule SystemInstallPlugin { Depends install_plugin : [ DoInstall $(<) : $(plugindir) $(2) : $(INSTALL_PROGRAM) ] ; } rule SystemDoFileListEntryPlugin { local target = $($(<)_TARGET) ; local entries = [ DoFileListEntries $(target) : : $(2) ] ; if $(LINK.DEBUG.INFO.SEPARATE) = "yes" { local debugfile = $($(target)_DEBUGFILE) ; entries += [ DoFileListEntries $(debugfile) : : debug-$(2) ] ; } if $(EMBED_META) != "yes" || $(OBJCOPY.AVAILABLE) != "yes" { entries += [ DoFileListEntries $($(<)_METAFILE) : : $(2) ] ; } return $(entries) ; } # 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) ; } } # SystemLinkSharedLibrary barename : target : objects : linklib rule SystemLinkSharedLibrary { local barename = $(1) ; local target = $(2) ; local objects = $(3) ; local linklib = $(4) ; LFlags $(target) : $(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 = $(target).a ; MakeLocate $(lib) $(lib)($(objects:BS)) : $(LOCATE.OBJECTS)/libs ; Depends $(lib) : $(lib)($(objects:BS)) ; local i ; for i in $(objects) { Depends $(lib)($(i:BS)) : $(i) ; } Archive $(lib) : $(objects) ; Ranlib $(lib) ; #RmTemps $(lib) : $(objects) ; Depends $(target) : $(lib) ; local def = $(target).def ; MakeDllDefFile $(def) : $(objects) ; Depends $(target) : $(def) ; Clean clean : $(def) ; Clean $(barename)clean : $(def) ; Depends $(barename)clean : $(def)clean ; EXPORTDEFS on $(target) = $(def) ; IMPLIB on $(target) = $(linklib) ; Depends $(linklib) : $(target) ; LinkSharedLibrary $(target) : $(lib) ; SharedLibResourceWin32 $(<) ; Clean clean : $(target) ; Clean $(barename)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" > $(<) } # Take an extracted .drectve section and generate .def file entries of it # - Convertes spaces to newlines # - Filters out any option other than '-export' ones # - Filter the symbol name, handle ',data' decoration actions piecemeal together DrectveToDef { for d in $(>) do sed -e "s/ /\\ /g" $d | grep "-export" | 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) $(EXTRALFLAGS) } 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[1]) --dllname $(<:B) --def=$(EXPORTDEFS) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) } } actions LinkSharedLibrary bind NEEDLIBS bind EXTRAOBJECTS bind EXPORTDEFS bind IMPLIB { $(CMD.DLLWRAP) --driver-name=$(CMD.LINK[1]) --dllname $(<:B).dll --def=$(EXPORTDEFS) --implib $(IMPLIB) -o $(<) $(>) $(EXTRAOBJECTS) $(NEEDLIBS) $(LINKLIBS) } crystalspace-glshader-cg-2.0/mk/jam/macosx.jam0000644000175000017500000003434411533445547020716 0ustar devfildevfil#============================================================================== # 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.4" ; PLUGIN.LFLAGS += "" ; # 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 ; # Standard 'ar' command is incompatible with universal binaries and can not # "update" a static library when one or more object files have changed. To # work around the problem, we force the library to be created from scratch by # removing it and re-populating it with all object files (rather than with only # those which changed). The alternate approach of using Apple 'libtool' is # unsuitable for two reasons. First, libtool can only create libraries from # scratch; it is unable to update them. Second, the libtool can not be invoked # piecemeal, which means that a response file would instead have to be created # piecemeal and libtool invoked afterward. Such an approach requires much more # effort than the 'ar' workaround. CRELIB = true ; actions CreLib { $(RM) $(<) } actions together piecemeal Archive { $(AR) $(<) $(>) } #------------------------------------------------------------------------------ # Public rules. #------------------------------------------------------------------------------ # ConstructApplicationTarget target : options # Constructs the application target name. rule ConstructApplicationTarget { return $(<) ; } # ConstructStaticLibraryTarget target : options # Constructs the static library target name. rule ConstructStaticLibraryTarget { local libbase = [ LibraryBaseName $(<) ] ; return lib$(libbase)$(SUFLIB) ; } # ConstructSharedLibraryTarget target : options # Constructs the shared library target name. rule ConstructSharedLibraryTarget { local libbase = [ LibraryBaseName $(<) ] ; return lib$(libbase).dylib ; } # ConstructSharedLibraryLinkLib target : options # Constructs the name of a shared library against which some other target # links. rule ConstructSharedLibraryLinkLib { local libbase = [ LibraryBaseName $(<) ] ; return lib$(libbase).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) ] { local suffix = $(4) ; if "$(suffix)" { local target_suffixed = $(<)-$(suffix) ; local installed = [ DoInstallFile $(<) : $(bindir) $(2) : $(target_suffixed) : $(INSTALL_PROGRAM) ] ; Depends install_bin : $(installed) ; NotFile $(target_suffixed) ; local linktarget = $(<:D=$(bindir)) ; Depends install_bin : [ InstallSymLink $(linktarget) : $(target_suffixed) ] ; } else { Depends install_bin : [ DoInstall $(<) : $(bindir) $(2) : $(INSTALL_PROGRAM) ] ; } } else { InstallApplicationGUI $(<) : $(bindir) $(2) : $(4) ; } } rule SystemDoFileListEntryApplications { local target = $($(<)_TARGET) ; local entries = [ DoFileListEntries $(target) : : $(2) ] ; if $(LINK.DEBUG.INFO.SEPARATE) = "yes" { local debugfile = $($(target)_DEBUGFILE) ; entries += [ DoFileListEntries $(debugfile) : : debug-$(2) ] ; } return $(entries) ; } # 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) ] ; } rule SystemDoFileListEntryPlugin { local target = $($(<)_TARGET) ; local entries = [ DoFileListEntries $(target) : : $(2) ] ; if $(LINK.DEBUG.INFO.SEPARATE) = "yes" { local debugfile = $($(target)_DEBUGFILE) ; entries += [ DoFileListEntries $(debugfile) : : debug-$(2) ] ; } entries += [ DoFileListEntries $($(<)_METAFILE) : : $(2) ] ; return $(entries) ; } # 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) -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) ; local suffix = $(3) ; if "$(suffix)" { local target_suffixed = $(<)-$(suffix).app ; Depends install_bin : [ DoInstallFile $(wrapper) : $(2) : $(target_suffixed) : "$(DEEPCOPY)" ] ; local linktarget = $(<:D=$(dir)) ; SymLink $(linktarget) : $(target_suffixed) ; Depends install_bin : $(linktarget) ; } else { Depends install_bin : [ DoInstall $(wrapper) : $(2) : "$(DEEPCOPY)" ] ; } } actions InstallApplicationWrapperPrepare { $(DELTREE) $(<) ; } crystalspace-glshader-cg-2.0/mk/jam/pythmod.jam0000644000175000017500000000665311473743534021112 0ustar devfildevfil#============================================================================ # Rules for creating python modules. # Copyright (C) 2006 by Jorrit Tyberghein # # 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. # #============================================================================ # PythMod rule # Can be used to create cspace python modules. # Auxiliary rule rule InstallPythMod { InstallBindingsModule $(1) : $(2) ; } rule FileListEntryPythMod { local target = $($(<)_TARGET) ; SEARCH on $(target) = [ on $(target) GetVar LOCATE ] ; Depends filelists : [ DoFileListEntries $(target) : $(2) : $(3) ] ; } # USAGE: # Pythmod targetname : module name : src files : install dir : LinkWith : ExternalLibs : desc # # EXAMPLES: # PythMod ceguimod : _cscegui : ceguimod.cpp cs_cegui.cpp : bindings python cspace : : CEGUI : desc # PythMod pythmod : _cspace : pythmod.cpp : bindings python cspace : : desc rule PythMod { local modname = $(2) ; local desc = $(7) ; local cleantarget ; if [ Property build : projgen ] { RegisterCompileGroups bindings ; Description py$(2) : $(desc) ; DLL py$(2) : $(3) : $(2).pyd ; LinkWith py$(2) : $(5) ; ExternalLibs py$(2) : PYTHON $(6) ; Depends py$(2) : $(1) ; CompileGroups py$(2) : all bindings ; } else { Description $(<) : $(desc) ; Help $(<) : "Build the $(desc)" ; local sources = [ DoSourceGrist $(3) ] ; local objects = [ CompileObjects $(sources) ] ; if $(PYTHON.MODULE_EXT) { modname = $(modname:S=$(PYTHON.MODULE_EXT)) ; } else { modname = [ ConstructPluginTarget $(modname) ] ; } $(<)_TARGET = $(modname) ; $(<)_SOURCES = $(sources) ; $(<)_OBJECTS = $(objects) ; LinkWith $(<) : $(5) ; ExternalLibs $(<) : PYTHON $(6) ; CFlags $(<) : $(PLUGIN.CFLAGS) ; LFlags $(<) : $(PLUGIN.LFLAGS) $(LINKLIBS) ; NotFile $(<) ; Depends $(<) : $(modname) ; Depends bindings : $(<) ; MakeLocate $(modname) : [ ConcatDirs $(LOCATE.OBJECTS) $(4) ] ; Depends $(modname) : $(objects) ; LinkPlugin $(modname) : $(objects) ; InstallBindingsModule $(modname) : $(4) ; if $(LINK.DEBUG.INFO.SEPARATE) = "yes" { local debugfile = [ SplitDebugInfo $(modname) ] ; MakeLocate $(debugfile) : [ ConcatDirs $(LOCATE.OBJECTS) $(4) ] ; cleantarget += $(debugfile) ; NoCare $(debugfile) ; Depends install_bindings : [ DoInstall $(debugfile) : $(appdatadir) $(4) : $(INSTALL_DATA) ] ; } } Always $(<)clean ; NotFile $(<)clean ; Clean $(<)clean : $(modname) $(objects) $(cleantarget) ; Depends clean : $(<)clean ; } # Construct pseudo target plugins # @@@ Here? Depends exe : bindings ; NotFile bindings ; Help bindings : "Build all bindings for other languages" ; crystalspace-glshader-cg-2.0/mk/jam/dump.jam0000644000175000017500000001055611473743534020370 0ustar devfildevfil#============================================================================== # 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][A-Za-z0-9_.-]+)$ : $(i) ] ; if $(s) { EmitPseudoTarget "$(DUMPTARGETS_FILE)" : $(i) ; } } } rule NotFile { PossiblePseudoTarget $(<) ; } case II : rule Application { PossiblePseudoTarget $(<) $(<)clean ; } rule ShellScript { PossiblePseudoTarget $(<) $(<)clean ; } } } crystalspace-glshader-cg-2.0/mk/jam/help.jam0000644000175000017500000000612611473743534020351 0ustar devfildevfil#============================================================================ # 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" ; crystalspace-glshader-cg-2.0/mk/jam/bisonflex.jam0000644000175000017500000001236711473743534021416 0ustar devfildevfil#============================================================================ # 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) { # 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 ; # 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. # Also, despite the -L argument, some versions *still* emit a sole #line # directive; filter it out as well. FLEX.SED_SCRIPT = "'s/\\([ ]*#[ ]*include[ ][ ]*\\)/#ifndef WIN32\\ \\1\\ #endif/;/\$Header:/d s/[ ]*#[ ]*line.*//g'" ; 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]) $(>) } } crystalspace-glshader-cg-2.0/mk/jam/objects.jam0000644000175000017500000001730511517317412021042 0ustar devfildevfil#============================================================================ # 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. local source_dir = $(SEARCH_SOURCE:E) ; if $(<:D) { source_dir = [ ConcatDirs $(SEARCH_SOURCE:E) $(<:D) ] ; } # $(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 $(<) = $(source_dir) $(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) ; } $(<)_OBJECTS += $(targets) ; 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 HDRSCAN ] ; } } 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) ; } crystalspace-glshader-cg-2.0/mk/jam/helper.jam0000644000175000017500000004407511473743534020705 0ustar devfildevfil#============================================================================ # 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" ; LN_S ?= "ln -s" ; # 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 duplicate items from the list, discarding all but the first. ## Unlike the Jam built-in Sort rule, which removes duplicates as a ## side-effect, RemoveDups preserves item order. rule RemoveDups { local i result ; for i in $(<) { if ! [ IsElem $(i) : $(result) ] { result += $(i) ; } } return $(result) ; } ## MergeRemovingDups list1 : list2 ## Merge two lists. Removes duplicate entries while maintaining the ## relative order of the entries. This is useful when merging lists of ## linker switches, for instance, which typically are order sensitive. rule MergeRemovingDups { local list1 = $(1) ; local list2 = $(2) ; local result ; local l ; for l in $(list1) { if [ IsElem $(l) : $(list2) ] { # If an item from set 1 is in set 2, add all items from start of set 2 # to the occurance of the item to result. while "$(list2[1])" != "" && $(list2[1]) != $(l) { result += $(list2[1]) ; list2 = $(list2[2-]) ; } result += $(list2[1]) ; list2 = $(list2[2-]) ; } else { # Just add the item. result += $(l) ; } } result += $(list2) ; 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) $(>) $(<) } ## SymLink target : source ## If symbolic links are supported, create a symbolic link from source ## to target, else copy source to target. rule SymLink { if "$(LN_S)" { DoSymLink $(<) : $(>) ; } else { Copy $(<) : $(>) ; } } actions DoSymLink { $(RM) $(<) $(LN_S) $(>) $(<) } actions piecemeal Touch { touch $(<) } crystalspace-glshader-cg-2.0/mk/jam/options.jam0000644000175000017500000000262311473743534021112 0ustar devfildevfil#============================================================================ # 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)." ; } } } crystalspace-glshader-cg-2.0/mk/jam/plugin.jam0000644000175000017500000001444011473743534020715 0ustar devfildevfil#============================================================================ # 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 nodefaultfilelist : $(3) : $(<) ; local metafile ; metafile = [ FAppendSuffix $(<) : $(SUFMETA) ] ; SEARCH on $(metafile) = $(SEARCH_SOURCE) ; local target = [ ConstructPluginTarget $(<) : $(3) ] ; local sources = [ DoSourceGrist $(>) ] ; local objects = [ CompileObjects $(sources) ] [ PluginImplementObject ] ; $(<)_TYPE = plugin ; $(<)_OBJECTS = $(objects) ; $(<)_SOURCES = $(sources) ; $(<)_TARGET = $(target) ; $(<)_METAFILE = $(metafile) ; # Create a target for eventual static linking if ! $(NO_STATIC_LINKING) { SubVariant static ; # 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.$(<) += $(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) ] ; $(target)_DEBUGFILE = $(debugfile) ; cleanextra += $(debugfile) ; if ! [ IsElem noinstall : $(3) ] { NoCare $(debugfile) ; Depends install_plugin : [ DoInstall $(debugfile) : $(plugindir) : $(INSTALL_DATA) ] ; } } # Create file list entry if ! [ IsElem nodefaultfilelist : $(3) ] { FileListEntryPlugin $(<) : plugin ; } CFlags $(<) : $(PLUGIN.CFLAGS) ; LFlags $(<) : $(LINKLIBS) $(PLUGIN.LFLAGS) ; # create target clean rule Always $(<)clean ; NotFile $(<)clean ; Clean $(<)clean : $(objects) $(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 $(<) ; } } ## WritePluginImplement file ## Write the plugin implementation code snippet to the specified file. actions together WritePluginImplement { echo "#include " > $(<) echo "CS_IMPLEMENT_PLUGIN" >> $(<) } #---------------------------------------------------------------------------- # 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) ] ; } } rule PluginImplementObject { local implement_source ; if "$(SUBVARIANT)" = "" { implement_source = plugin_impl.cpp ; } else { implement_source = plugin_impl_$(SUBVARIANT:J=_).cpp ; } MakeLocate $(implement_source) : $(LOCATE.OBJECTS) ; WritePluginImplement $(implement_source) ; NoUpdate $(implement_source) ; local implement_obj = [ CompileObjects $(implement_source) ] ; return $(implement_obj) ; } # Construct pseudo target plugins Depends exe : plugins ; NotFile plugins ; Help plugins : "Build all plugin modules" ; crystalspace-glshader-cg-2.0/mk/jam/icons.jam0000644000175000017500000003111311473743534020526 0ustar devfildevfil#============================================================================ # Copyright (C)2006-2010 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. # #============================================================================ if $(CMD.RSVG) != "" { ## IconsFromSVG iconname ## Generate multiple PNG images suitable for icon use from an SVG file. ## The source SVG file is expected to have the name ## icons-src/scalable/.svg. The result files are named ## the icons//.png for multiple common icon sizes as ## 'size'. These "common sizes" include suitable sizes for icons on Linux ## desktops, Windows and MacOS/X. ## Images for certain sizes can be specified as ## icons-src//.png files; these are preferred over the ## automatically generated ones. ## The actual conversion is done when the "generateicons" target is ## invoked. rule IconsFromSVG { local icon = $(1) ; local iconfile = $(icon).svg ; local svgscalabledir = [ ConcatDirs $(SUBDIR) icons-src scalable ] ; local svgsource = $(iconfile:G=$(svgscalabledir)) ; SEARCH on $(svgsource) = $(svgscalabledir) ; NotFile generateicons ; local size ; # Icon sizes to generate/use: # 16 - Windows small icon (Window menu, start menu) # 22 - Small icon for KDE and GNOME menus # 24 - Small icon for GNOME file lists(1) # 32 - Normal icon for Windows # 48 - Large icon for Windows XP # 256 - Windows Vista icon(2) # 512 - MacOS/X(3) # # (1) - Can be generated from 22x22 pics by adding a border. # (2) - Cause icon files to be really large. Vista supports PNG compression # in icons and uses it for the 256x256 versions. # (3) - OS/X 10.5 and newer. Older versions used 128x128. for size in 16 22 32 48 256 512 { local pngdir = [ ConcatDirs $(SUBDIR) icons $(size) ] ; local pngfile = $(icon:G=$(pngdir)).png ; MakeLocate $(pngfile) : $(pngdir) ; SIZE on $(pngfile) = $(size) ; Depends $(pngfile) : $(svgsource) ; CreateIcon $(pngfile) : $(svgsource) ; Depends generateicons : $(pngfile) ; Always $(pngfile) ; } # size 24 icons are a special case, see above local pngdir = [ ConcatDirs $(SUBDIR) icons 24 ] ; local pngfile = $(icon:G=$(pngdir)).png ; if $(CMD.CONVERT) != "" { MakeLocate $(pngfile) : $(pngdir) ; Depends $(pngfile) : $(svgsource) ; CreateIcon24 $(pngfile) : $(svgsource) ; Depends generateicons : $(pngfile) ; Always $(pngfile) ; } else { Echo "ImageMagick not available, $(pngfile) not regenerated" ; } } actions CreateIcon { SIZEDICONSSRC=`dirname $(>)`/../$(SIZE) ICONBASE=`basename $(>) .svg` if [ -e $SIZEDICONSSRC/$ICONBASE.png ] ; then $(CP) $SIZEDICONSSRC/$ICONBASE.png $(<) else if [ -e $SIZEDICONSSRC/$ICONBASE.svg ] ; then $(CMD.RSVG) -f png -w $(SIZE) -h $(SIZE) $SIZEDICONSSRC/$ICONBASE.svg $(<).tmp else $(CMD.RSVG) -f png -w $(SIZE) -h $(SIZE) $(>) $(<).tmp fi if [ -n "$(CMD.PNGCRUSH:E=)" ] ; then $(CMD.PNGCRUSH) -rem text $(<).tmp $(<) rm $(<).tmp else mv $(<).tmp $(<) fi fi } actions CreateIcon24 { SIZEDICONSSRC=`dirname $(>)`/../24 ICONBASE=`basename $(>) .svg` GENSIZEDICONSSRC=`dirname $(<)`/../22 if [ -e $SIZEDICONSSRC/$ICONBASE.png ] ; then $(CP) $SIZEDICONSSRC/$ICONBASE.png $(<) else if [ -e $SIZEDICONSSRC/$ICONBASE.svg ] ; then $(CMD.RSVG) -f png -w 24 -h 24 $SIZEDICONSSRC/$ICONBASE.svg $(<).tmp else $(CMD.CONVERT) -bordercolor Transparent -border 1x1 $GENSIZEDICONSSRC/$ICONBASE.png $(<).tmp fi if [ -n "$(CMD.PNGCRUSH:E=)" ] ; then $(CMD.PNGCRUSH) -rem text $(<).tmp $(<) rm $(<).tmp else mv $(<).tmp $(<) fi fi } } else { rule IconsFromSVG { } } if $(CMD.ICOTOOL) != "" { # Pad the given argument with zeroes on the left side to a length of 3 chars. rule _ZeroPad { if [ Match ^([0-9][0-9])$ : $(<) ] { return 0$(<) ; } if [ Match ^([0-9])$ : $(<) ] { return 00$(<) ; } return $(<) ; } ## IconsMakeWin32ICO filename : iconname [: sizes] ## Generate a Win32 ICO file from multiple PNG images, such as those ## produced by IconsFromSVG. ## The source images are expected to have the names ## icons-src//.png or icons//.png for the ## sizes specified in `sizes'. Files in the `icons-src/' directory are ## preferred over files in the `icons/' directory. ## By default, a set of common sizes is used, currently 16, 32, 48 and 256. ## The ICO will also include 256 color images that are generated from ## the (presumably RGBA) source PNGs; however, such color-reduced images ## can also be specified manually for certain sizes by saving them named ## icons-src//_8.png. These user-provided reduced versions ## are preferred over the automatically reduced ones. ## The actual conversion is done when the "generateicons" target is ## invoked. rule IconsMakeWin32ICO { local icofile = $(1) ; local icon = $(2) ; local sizes = $(3) ; if "$(sizes)" = "" { sizes = 16 32 48 256 ; } local size icons ; for size in $(sizes) { local pngdir = [ ConcatDirs $(SUBDIR) icons $(size) ] ; local pngtempdir = [ ConcatDirs $(BUILDTOP) out iconstmp $(SUBDIR) $(size) ] ; local pngsrcdir = [ ConcatDirs $(SUBDIR) icons-src $(size) ] ; local pngfile = $(icon:G=$(pngdir)).png ; local lowfile = $(icon:G=$(pngtempdir))_8.png ; NoCare $(pngfile) ; # Prefer icons from `icons-src/' (presumably user-provided) over icons # from `icons/' (presumably auto-generated). SEARCH on $(pngfile) = $(pngsrcdir) $(pngdir) ; # <= is a string comparison in Jam, hence the 0 padding if [ _ZeroPad $(size) ] <= 128 { icons += "$(pngfile)" ; if $(CMD.CONVERT) != "" { MakeLocate $(lowfile) : $(pngtempdir) ; SIZE on $(lowfile) = $(size) ; ReduceColorDepth $(lowfile) : $(pngfile) ; Depends $(lowfile) : $(pngfile) ; icons += "$(lowfile)" ; RmTemps generateicons : $(lowfile) ; } } else { if "$(ICOTOOL.SUPPORTS_RAW)" = "yes" { # Special case, embed icon as PNG RAW_ICONS on $(icofile) += "$(pngfile)" ; } } } MakeLocate $(icofile) : $(SUBDIR) ; Depends $(icofile) : $(icons) ; IcoTool $(icofile) : $(icons) ; Depends generateicons : $(icofile) ; } actions ReduceColorDepth { ICONSSRC=`dirname $(>)`/../../icons-src/$(SIZE) ICONBASE=`basename $(>) .png` if [ -e $ICONSSRC/${ICONBASE}_8.png ] ; then $(CP) $ICONSSRC/${ICONBASE}_8.png $(<) else # Makes transparency binary and reduces colors to 256 $(CMD.CONVERT) $(>) \( +clone -fx a +matte -monochrome \) -compose CopyOpacity -composite -colors 256 +dither $(<) fi } actions IcoTool bind RAW_ICONS { $(CMD.ICOTOOL) -c -o $(<) $(>) $(RAW_ICONS) } } else { rule IconsMakeWin32ICO { } } if $(CMD.MAKEICNS) != "" || $(CMD.PNG2ICNS) != "" { # DownsampleImage target : source : size ; # Returns file name of (temp) file with resampled imaged. rule DownsampleImage { local target = $(1) ; local source = $(2) ; local size = $(3) ; local tempdir = [ ConcatDirs $(BUILDTOP) out iconstmp $(SUBDIR) $(size) ] ; local outfile = $(source:G=$(tempdir)) ; MakeLocate $(outfile) : $(tempdir) ; Depends $(outfile) : $(source) ; SIZE on $(outfile) = $(size) ; ConvertReduce $(outfile) : $(source) ; RmTemps $(target) : $(outfile) ; return $(outfile) ; } actions ConvertReduce { $(CMD.CONVERT) $(>) -resize $(SIZE)x$(SIZE) $(<) } ## IconsMakeMacICNS filename : iconname [: sizes] ## Generate a MacOS/X ICNS file from a PNG image such as produced by ## IconsFromSVG. ## `sizes' specify the available source image resolutions. Allowed sizes ## are 128, 256 and 512. Note that a missing size is generated ## automatically if a higher size is available. Thus, only specifying a ## 512x512 is sufficient as the lower resolutions will be generated from ## that. However, upscaling will not take place: e.g. only specifying a ## size of 256 will result in an icon without a 512x512 image (forcing the ## OS to upscale the lower resolution image). ## The source images are expected to have the names ## icons-src//.png or icons//.png for the ## sizes specified in `sizes'. Files in the `icons-src/' directory are ## preferred over files in the `icons/' directory. ## For the conversion to happen a 3rd party tool, `makeicns' is required. ## It can be obtained from http://www.amnoid.de/icns/makeicns.html . ## The actual conversion is done when the "generateicons" target is ## invoked. rule IconsMakeMacICNS { local icnsfile = $(1) ; local icon = $(2) ; local in_sizes = $(3) ; # Default to the size used by Leopard and above. if "$(in_sizes)" = "" { in_sizes = 512 ; } # Filter out unsupported sizes (only certain sizes are allowed in ICNS # icons, and we don't provide/care about images sized below 128x128) local sizes ; for i in $(in_sizes) { if [ IsElem $(i) : 128 256 512 ] { sizes += $(i) ; } } if "$(sizes)" = "" { echo "IconsMakeMacICNS $(icnsfile): no valid size given, sizes must contain at least one of 128, 256 or 512" ; } else { local in_512 = "" ; local in_256 = "" ; local in_128 = "" ; for size in $(sizes) { local pngdir = [ ConcatDirs $(SUBDIR) icons $(size) ] ; local pngsrcdir = [ ConcatDirs $(SUBDIR) icons-src $(size) ] ; local pngfile = $(icon:G=$(pngdir)).png ; SEARCH on $(pngfile) = $(pngsrcdir) $(pngdir) ; NoCare $(pngfile) ; Depends $(icnsfile) : $(pngfile) ; in_$(size) = $(pngfile) ; } if $(CMD.MAKEICNS) != "" { # Generate ICNS using makeicns # If an image of a size is not available, default to the next larger size. # Note that `makeicns' takes care of downsizing to the smaller size in # that case. if ! $(in_256) { in_256 = $(in_512) ; } if ! $(in_128) { in_128 = $(in_256) ; } INPUT_512 on $(icnsfile) = $(in_512) ; INPUT_256 on $(icnsfile) = $(in_256) ; INPUT_128 on $(icnsfile) = $(in_128) ; MakeLocate $(icnsfile) : $(SUBDIR) ; MakeIcns $(icnsfile) ; Depends generateicons : $(icnsfile) ; } else { # Generate ICNS using png2icns if $(CMD.CONVERT) != "" { # png2icns doesn't handle resizing, so do it ourselves if ! $(in_256) { if $(in_512) { in_256 = [ DownsampleImage generateicons : $(in_512) : 256 ] ; Depends $(icnsfile) : $(in_256) ; } } if ! $(in_128) { if $(in_256) { in_128 = [ DownsampleImage generateicons : $(in_256) : 128 ] ; Depends $(icnsfile) : $(in_128) ; } } } else { # Make do with the images we have, but issue a warning local need_resize ; if $(in_512) { if ! $(in_256) || ! $(in_128) { need_resize = "yes" ; } } else if $(in_256) { if ! $(in_128) { need_resize = "yes" ; } } if $(need_resize) { Echo "ImageMagick not available, $(icnsfile) will be incomplete" ; } } MakeLocate $(icnsfile) : $(SUBDIR) ; Png2icns $(icnsfile) : $(in_128) $(in_256) $(in_512) ; Depends generateicons : $(icnsfile) ; } } } actions MakeIcns bind INPUT_128 INPUT_256 INPUT_512 { args= if [ -n "$(INPUT_512)" ]; then args="$args -512 $(INPUT_512)" fi if [ -n "$(INPUT_256)" ]; then args="$args -256 $(INPUT_256)" fi if [ -n "$(INPUT_128)" ]; then args="$args -128 $(INPUT_128)" fi $(CMD.MAKEICNS) $args -out $(<) } actions Png2icns { $(CMD.PNG2ICNS) $(<) $(>) } } else { rule IconsMakeMacICNS { } } crystalspace-glshader-cg-2.0/mk/jam/static.jam0000644000175000017500000004237411530461533020703 0ustar devfildevfil#============================================================================ # 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 { local tag = $(>) ; 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" "" "struct $(tag) { $(tag) (); };" "$(tag)::$(tag) () {}" "" : notfile ; } rule GenerateStaticPluginInstantiation { local tag = $(3) ; GenerateStaticPluginBoilerplate $(<) : $(tag) ; 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) ; C++FLAGS on $(object) += $($($(<).EXTERNALLIBS).CFLAGS) ; 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 tag ; if $(package) { sources = [ DoObjectGrist _cs_static_use_$(package).cpp ] ; tag = "_static_use_$(package)" ; } else { sources = [ DoObjectGrist _cs_static_use.cpp ] ; tag = "_static_use" ; } 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) : $(<) : $(tag) ; Clean $(statictarget)clean : $(sources) ; Clean $(statictarget)clean : $(object) ; return $(object) ; } rule GeneratePluginLibraryGlueApp { ResponseFile $(<) : "// This file is automatically generated." "#include \"cssysdef.h\"" "" "struct CS_IMPORT_SYM _Bind_$(2)" "{" " _Bind_$(2) ();" "};" "" "namespace { _Bind_$(2) bind_$(2); }" : notfile ; } rule GeneratePluginLibraryGlueLib { local tag = $(3) ; ResponseFile $(<) : "// This file is automatically generated." "#include \"cssysdef.h\"" "" "#if defined(CS_USE_SHARED_LIBS)" " CS_DECLARE_DEFAULT_STATIC_VARIABLE_REGISTRATION" " // Needed to work around some order of initialization issues" " static void csStaticVarCleanup_local (void (*p)())" " { csStaticVarCleanup_csutil (p); }" " CS_DEFINE_STATIC_VARIABLE_REGISTRATION (csStaticVarCleanup_local);" "#endif" "" "struct CS_EXPORT_SYM _Bind_$(2)" "{" " _Bind_$(2) ();" "};" "struct $(tag) { $(tag) (); };" "" "_Bind_$(2)::_Bind_$(2) () {}" "// Needed to pull in _cs_static_use object file" "namespace { $(tag) $(tag)_bind; }" : notfile ; } rule BuildStaticGlueFile { local target = $(1) ; local plugin_lib_name = $(2) ; local package = $(3) ; local target_type = $(4) ; # prepare source files local sources tag ; if $(package) { sources = [ DoObjectGrist _cs_static_glue_$(target_type)_$(package).cpp ] ; tag = "_static_use_$(package)" ; } else { sources = [ DoObjectGrist _cs_static_glue_$(target_type).cpp ] ; tag = "_static_use" ; } local object = [ CompileObject $(sources) ] ; MakeLocate $(sources) : $(LOCATE_TARGET) ; SEARCH on $(sources) = $(LOCATE_TARGET) ; MakeLocate $(object) : $(LOCATE_TARGET) ; if $(target_type) = "app" { GeneratePluginLibraryGlueApp $(sources) : $(plugin_lib_name) ; } else { GeneratePluginLibraryGlueLib $(sources) : $(plugin_lib_name) : $(tag) ; } Clean $(target)clean : $(sources) ; Clean $(target)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) ; local target_link_with target_lflags lflags_target relayobjs ; if ( $(BUILD_SHARED_LIBS) = "yes" ) && ( $(TRUE_STATIC_PLUGINS) != "yes" ) { local plugin_lib_name ; if $(package) { plugin_lib_name = $(target)_plugins_$(package) ; } else { plugin_lib_name = $(target)_plugins ; } lflags_target = $(plugin_lib_name) ; } else { lflags_target = $(target) ; } if $(package) { # External static plugins. # First include static plugin info if ! $(HAVE_STATICDEPS.$(package)) { if ! $($(package).STATICDEPS) { Echo "$(target): Warning: no dependencies file for static plugin package \"$(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) ; if ! [ IsElem $(p) : $(STATICPLUGINS.AVAILABLE) ] { Echo "$(target): Warning: Static plugin \"$(p)\" from package \"$(package)\" not available." ; } CFlags $(target) : $(STATICPLUGIN.$(p).CFLAGS) ; local staticplugin_lflags = [ InferFlagTuples $(STATICPLUGIN.$(p).LFLAGS) ] ; lflags = [ MergeRemovingDups $(lflags) : $(staticplugin_lflags) ] ; local relaydeps = $(STATICPLUGIN.$(p).RELAYDEPS) ; for relaydep in $(relaydeps) { CFlags $(target) : $(STATICPLUGIN.$(p).RELAYCFLAGS.$(relaydep)) ; local staticplugin_relayflags = [ InferFlagTuples $(STATICPLUGIN.$(p).RELAYLFLAGS.$(relaydep)) ] ; lflags = [ MergeRemovingDups $(lflags) : [ RelayLFlags $(COMPILER.LFLAGS) $(staticplugin_relayflags) : $(STATICPLUGIN.$(p).RELAYLIBS.$(relaydep)) ] ] ; # @@@ If we can get the .a file name for the static plugin lib # we could pass that for the minimal-objects relayobjs += [ RelayObjs $(lflags_target) : $(STATICPLUGIN.$(p).RELAYLIBS.$(relaydep)) : $(relaydep) ] ; } } target_lflags = $(lflags) ; } else { # Local static plugins local lflags libs p ; libs = $(STATICPLUGINS.LIBRARY) ; # Collect optional plugins for p in $(optplugins) { if $($(p)_TARGET) { plugins += $(p) ; } } # Grab flags for p in $(plugins) { local staticplugin_lflags = [ InferFlagTuples $($(p).LFLAGS.EXTERNAL) ] ; lflags += [ Filter $(staticplugin_lflags) : $(LINKLIBS) $(PLUGIN.LFLAGS) ] ; libs += $($(p).NEEDLIBS) ; local relaydeps = $($(p).RELAYDEPS) ; for relaydep in $(relaydeps) { local libpath ; libpath = [ ConcatDirs [ on $($(STATICPLUGINS.LIBRARY)_TARGET) GetVar SEARCH ] $($(STATICPLUGINS.LIBRARY)_TARGET) ] ; local staticplugin_relayflags = [ InferFlagTuples $($(relaydep).LFLAGS) ] ; lflags = [ MergeRemovingDups $(lflags) : [ RelayLFlags $(COMPILER.LFLAGS) $(staticplugin_relayflags) : $($(p).RELAYLIBS.$(relaydep)) : $(libpath) ] ] ; relayobjs += [ RelayObjs $(target) : $($(p).RELAYLIBS.$(relaydep)) : $(relaydep) ] ; } } target_link_with = [ RemoveDupFlags $(libs) ] ; target_lflags = [ RemoveDups $(lflags) ] ; } # construct initialization sourcefile local staticobject = [ BuildStaticUseFile $(plugins) : $(target) : $(package) ] ; # Build a shared lib containing the static plugins. # This is done to be more LGPL-friendly. if ( $(BUILD_SHARED_LIBS) = "yes" ) && ( $(TRUE_STATIC_PLUGINS) != "yes" ) { local libglue appglue ; libglue = [ BuildStaticGlueFile $(target) : $(lflags_target) : $(package) : lib ] ; Library $(lflags_target) : $(libglue) $(staticobject) $(relayobjs) : noinstall notest independent nohelp shared ; LibDepends $(lflags_target) : $(target_link_with) ; LFlags $(lflags_target) : $(target_lflags) ; # We need to get the external libs for the plugin lib; but they have to be # specified after LinkStaticPlugins $(target).PROPAGATE_EXTERNALLIBS += $(lflags_target) ; appglue = [ BuildStaticGlueFile $(target) : $(lflags_target) : $(package) : app ] ; ExtraObjects $(target) : $(appglue) : inheritcflags ; LinkWith $(target) : $(lflags_target) ; LFlags $(target) : $(target_lflags) ; } else { LinkWith $(target) : $(target_link_with) ; LFlags $(target) : $(target_lflags) ; ExtraObjects $(target) : $(staticobject) $(relayobjs) : 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 ; STATICPLUGINS.LIBRARY = $(name) ; local targets = $(STATICPLUGINS.SUBTARGETS) ; if $(rejects) { targets = [ Filter $(targets) : $(rejects) ] ; } local objects ; for t in $(targets) { objects += $(STATICPLUGINS.OBJECTS.$(t)) ; local staticreginfoobject = [ BuildStaticRegFile $(t) : $(name) ] ; objects += $(staticreginfoobject) ; } # 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 ] ; # 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_lib ; 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 libname = [ LibraryBaseName $(name) ] ; local depfile_gristed = $(depfile:G=$(plugin)) ; MakeLocate $(depfile_gristed) : [ on $(depfile) GetVar LOCATE ] ; # Collect flags lflags = -l$(libname) ; local libs = [ ResolveLibs $($(plugin).NEEDLIBS) ] ; local l ; for l in $(libs) { libname = [ LibraryBaseName $(l) ] ; lflags = [ MergeRemovingDups $(lflags) : -l$(libname) ] ; } lflags += $(COMPILER.LFLAGS) ; for l in $($(plugin).EXTERNALLIBS) { cflags += $($(l).CFLAGS) ; lflags = [ MergeRemovingDups $(lflags) : [ Filter $($(l).LFLAGS) : $(LINKLIBS) $(PLUGIN.LFLAGS) ] ] ; } lflags = [ MergeRemovingDups $(lflags) : [ Filter $($(plugin).LFLAGS.EXTERNAL) : $(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) ; RELAYDEPS on $(depfile_gristed) = "$($(plugin).RELAYDEPS)" ; WriteRelayDeps $(depfile_gristed) : $(plugin) ; for relaydep in $($(plugin).RELAYDEPS) { local depfile_gristed2 = $(depfile_gristed:G=$(plugin).$(relaydep)) ; MakeLocate $(depfile_gristed2) : [ on $(depfile) GetVar LOCATE ] ; Depends $(depfile) : $(depfile_gristed2) ; RELAYDEP on $(depfile_gristed2) = $(relaydep) ; RELAYCFLAGS on $(depfile_gristed2) = "$($(relaydep).CFLAGS)" ; RELAYLFLAGS on $(depfile_gristed2) = "$($(relaydep).LFLAGS)" ; RELAYLIBS on $(depfile_gristed2) = "$($(plugin).RELAYLIBS.$(relaydep))" ; WriteRelayDepFlags $(depfile_gristed2) : $(plugin) ; } } 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 WriteRelayDeps { cat << EOT >> $(<) STATICPLUGIN.$(>).RELAYDEPS = $(RELAYDEPS) ; EOT } actions WriteRelayDepFlags { cat << EOT >> $(<) STATICPLUGIN.$(>).RELAYLIBS.$(RELAYDEP) = $(RELAYLIBS) ; STATICPLUGIN.$(>).RELAYCFLAGS.$(RELAYDEP) = $(RELAYCFLAGS) ; STATICPLUGIN.$(>).RELAYLFLAGS.$(RELAYDEP) = $(RELAYLFLAGS) ; 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 '}' >> $(<) } crystalspace-glshader-cg-2.0/mk/jam/library.jam0000644000175000017500000002571511473743534021072 0ustar devfildevfil#============================================================================ # 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 versioning control. When set to "yes", the string in # LIBRARY_VERSION_TAG will be appended to names of libraries. LIBRARY_VERSIONING ?= yes ; LIBRARY_VERSION_TAG ?= "$(PACKAGE_VERSION_LIST[1]).$(PACKAGE_VERSION_LIST[2])" ; ## 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 : $(objects) $($(<)_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 ; SEARCH on $(target) = $(LOCATE.OBJECTS)/libs ; } else { SEARCH on $(target) = $(target:D) ; } 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) ; } if ! [ IsElem noinstall : $(options) ] { Depends filelists : [ DoFileListEntries $(target) : : libs-static ] ; } $(<)_CLEANEXTRA += $(target) ; } # LibraryShared libname : sources : options : decoratedtarget rule LibraryShared { local libname = $(1) ; local objects = $(2) ; 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 += $(libname) ; } else { INSTALLEDLIBS += $(libname) ; } } Depends $(libname) : $(linklib) ; MakeLocate $(linklib) : $(LOCATE.OBJECTS)/libs ; SEARCH on $(linklib) = $(LOCATE.OBJECTS)/libs ; if $(linklib) != $(target) { Depends $(linklib) : $(target) ; MakeLocate $(target) : $(BUILDTOP) ; SEARCH on $(target) = $(BUILDTOP) ; } else { local target_link = $(target:G=symlink) ; MakeLocate $(target_link) : $(BUILDTOP) ; SEARCH on $(target_link) = $(BUILDTOP) ; Depends $(target_link) : $(target) ; SymLink $(target_link) : $(target) ; Depends $(libname) : $(target_link) ; $(libname)_CLEANEXTRA += $(target_link) ; } Depends $(target) : $(objects) ; $(libname)_CLEANEXTRA += $(target) ; Depends $(target) : $(deplibs) ; local lib_define_prefix = $(LIBRARY_BUILD_DEFINE_PREFIX:E=$(PACKAGE_NAME:U)) ; CFlags $(libname) : [ FDefines $(lib_define_prefix)_$(libname:U)_LIB ] ; LFlags $(libname) : $(LINKLIBS) ; SystemLinkSharedLibrary $(libname) : $(target) : $(objects) $(deplibs) : $(linklib) ; if ! [ IsElem noinstall : $(options) ] { Depends filelists : [ DoFileListEntries $(target) : : libs-shared ] ; if $(linklib) != $(target) { Depends filelists : [ DoFileListEntries $(linklib) : : libs-static ] ; } } if $(LINK.DEBUG.INFO.SEPARATE) = "yes" { local debugfile = [ SplitDebugInfo $(target) ] ; $(libname)_CLEANEXTRA += $(debugfile) ; if ! [ IsElem noinstall : $(options) ] { NoCare $(debugfile) ; Depends install_lib : [ DoInstall $(debugfile) : $(libdir) : $(INSTALL_DATA) ] ; Depends filelists : [ DoFileListEntries $(debugfile) : : debug-libs-shared ] ; } if $(linklib) = $(target) { local debugfile_link = $(debugfile:G=symlink) ; MakeLocate $(debugfile_link) : $(BUILDTOP) ; SEARCH on $(debugfile_link) = $(BUILDTOP) ; Depends $(debugfile_link) : $(debugfile) ; SymLink $(debugfile_link) : $(debugfile) ; Depends $(libname) : $(debugfile_link) ; $(libname)_CLEANEXTRA += $(debugfile_link) ; } } # This is really only needed for Win32: the link library (ie import library) # should be newer than the shared library (ie DLL) since the former depends # on the latter. # But: the dllwrap call itself results in a shared lib newer than the link # lib, and the debug info splitting will touch the shared lib again. # So to make sure the link lib is newest touch it. Touch $(linklib) ; } # LibraryBaseName # Construct library base name string from library name - appends version if # LIBRARY_VERSIONING is "yes". rule LibraryBaseName { if $(LIBRARY_VERSIONING) = "yes" { return "$(1)-$(LIBRARY_VERSION_TAG)" ; } else { return "$(1)" ; } } 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" ; crystalspace-glshader-cg-2.0/mk/jam/resource.jam0000644000175000017500000000756511473743534021260 0ustar devfildevfil#============================================================================ # 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 { } crystalspace-glshader-cg-2.0/mk/jam/install.jam0000644000175000017500000002234111473743534021064 0ustar devfildevfil#============================================================================ # 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) ] ; } ## InstallSymLink target : linksource rule InstallSymLink { local dir gdir target ; dir = [ ConcatDirs $(DESTDIR) $(<:D) ] ; gdir = $(dir:G=dir) ; MkDir $(gdir) ; target = $(<:BSD=$(dir):G=install) ; Depends $(target) : $(gdir) ; SymLink $(target) : $(>) ; Always $(target) ; return $(target) ; } ## InstallBindingsData files : search [ : subdir ] ## Installs bindings data files rule InstallBindingsData { local files = [ GristInstall $(<) ] ; SEARCH on $(files) = $(2) ; Depends install_bindings : [ DoInstall $(files) : $(appdatadir) $(3) ] ; } ## InstallBindingsModule file [ : subdir ] ## Installs a bindings binary module rule InstallBindingsModule { Depends install_bindings : [ DoInstall $(1) : $(appdatadir) $(2) : $(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 i ; for i in $(1) { targets += [ DoInstallFile $(i) : $(2) : $(i) : $(3) : $(4) ] ; } return $(targets) ; } ## DoInstallFile sourcename : directory : destname [ : installapp : [ postinstallrules ]] ## Creates a new install target for the given source file named by ## `sourcename'. `directories' is a list of directory components ## indicating the installation directory for `sourcename'. `destname' is ## the destintation filename of the installed file. `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 name of the installed target, so it is convenient to use ## the results as the input for another rule rule DoInstallFile { local target dir gdir ; dir = [ ConcatDirs $(DESTDIR) $(2) ] ; gdir = $(dir:G=dir) ; MkDir $(gdir) ; target = $(3:BSR=$(dir):G=install) ; Depends $(target) : $(gdir) $(1) ; Install1 $(target) : $(1) ; if "$(4)" { INSTALL_APP on $(target) = $(4) ; } else { INSTALL_APP on $(target) = $(INSTALL_DATA) ; } if "$(5)" { local postrule ; for postrule in $(4) { $(postrule) $(target) : $(i) ; } } Always $(target) ; return $(target) ; } #---------------------------------------------------------------------------- INSTALLTARGETS = install_bin install_plugin install_lib install_include install_data install_config install_doc install_bindings ; 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) $(>) $(<) } crystalspace-glshader-cg-2.0/mk/jam/unittest.jam0000644000175000017500000005251211473743534021300 0ustar devfildevfil#============================================================================== # 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) ; } LFlags $(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. $(UNITTEST_BOILERPLATE_TEST_PRE) #include #include #include #include #include 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. $(UNITTEST_BOILERPLATE_MAIN_PRE) #include #include #include #include #include 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::TextTestRunner 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 { LD_LIBRARY_PATH=$(LOCATE.OBJECTS)/libs:$LD_LIBRARY_PATH $(>) $(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" ; crystalspace-glshader-cg-2.0/mk/jam/clean.jam0000644000175000017500000000256311473743534020504 0ustar devfildevfil#============================================================================ # 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" ; crystalspace-glshader-cg-2.0/mk/jam/compiler.jam0000644000175000017500000000413411473743534021230 0ustar devfildevfil#============================================================================ # 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++) crystalspace-glshader-cg-2.0/mk/jam/flags.jam0000644000175000017500000002510511530461533020501 0ustar devfildevfil#============================================================================ # Rules for specifying compiler and linker flags # Copyright (C)2003-2008 by Eric Sunshine # Copyright (C)2005-2007 by Frank Richter # 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) : $(rawlibs) ; NEEDLIBS on $($(<)_TARGET) = [ MergeRemovingDups [ on $($(<)_TARGET) GetVar NEEDLIBS ] : $(libs) ] ; $(<).NEEDLIBS += $(rawlibs) ; for l in $(rawlibs) { LFlags $(<) : $($($(l).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 { local target = $(1) ; local flags = [ InferFlagTuples $(2) ] ; local options = $(3) ; CCFLAGS on $($(target)_OBJECTS) += $(flags) ; C++FLAGS on $($(target)_OBJECTS) += $(flags) ; UnitTestCFlags $(target) : $(flags) : $(options) ; } ## LFlags target : flags [ : options ] ## Sets linker flags for a library, plugin or application target rule LFlags { local target = $(1) ; local flags = [ InferFlagTuples $(2) ] ; local options = $(3) ; NotFile $(flags) ; NEEDLIBS on $($(target)_TARGET) = [ RemoveDupFlags [ on $($(target)_TARGET) GetVar NEEDLIBS ] $(flags) ] ; $(target).LFLAGS = [ RemoveDupFlags $($(target).LFLAGS) $(flags) ] ; if ! [ IsElem noexternal : $(3) ] { $(target).LFLAGS.EXTERNAL = [ RemoveDupFlags $($(target).LFLAGS.EXTERNAL) $(flags) ] ; } UnitTestLFlags $(target) : $(flags) : $(options) ; } ## 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) ; } for target in $($(<).PROPAGATE_EXTERNALLIBS) { ExternalLibs $(target) : $(>) ; } } ## 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 : $(>) ; } ## RelayLFlags lflags : relaylibs [: minimal-objects ] ## Get LFLAGS for relay-linking libraries. See RelayLibs for ## more information. rule RelayLFlags { if $(TARGET.OS) = "WIN32" || ! $(CMD.RELAYTOOL) { return $(1) ; } else { local relayparamslist = "--relay $(2)" ; local lflags = $(1[1]) ; # Concatenate arrays into single strings local lf ; for lf in $(1[2-]) { lflags = "$(lflags) $(lf)" ; } local relayparam = $(relayparamslist[1]) ; local r ; for r in $(relayparamslist[2-]) { relayparam = "$(relayparam) $(r)" ; } local cflags = "$(CCFLAGS[1])" ; local c ; for c in $(CCFLAGS[2-]) { cflags = "$(cflags) $(c)" ; } local minimalparam = "" ; if "$(3)" != "" { minimalparam = "--minimal-list \"$(3)\"" ; } local extlib result_lflags ; result_lflags += "`CFLAGS=\"$(cflags)\" $(CMD.RELAYTOOL) --out-dir $(LOCATE_TARGET) $(minimalparam) $(relayparam) $(lflags)`" ; return $(result_lflags) ; } } ## RelayObjs target : relaylibs : identifier rule RelayObjs { if $(TARGET.OS) = "WIN32" || ! $(CMD.RELAYTOOL) { # Create fake libwhatever_is_present() symbols local stubfile = [ DoObjectGrist $(3).fake_stub.c ] ; MakeLocate $(stubfile) : $(LOCATE_TARGET) ; WHATEVER on $(stubfile) = $(2) ; WriteRelayLibStub $(stubfile) ; Clean $(<)clean : $(stubfile) ; local stub_object = [ CompileObjects $(stubfile) ] ; MakeLocate $(stub_object) : $(LOCATE_TARGET) ; Depends $($(<)_TARGET) : $(stub_object) ; Clean $(<)clean : $(stub_object) ; #EXTRAOBJECTS on $($(<)_TARGET) += $(stub_object) ; return $(stub_object) ; } else { return ; } } ## RelayLibs target : identifier : relaylibs ## Link external libraries identified by 'identifier' with 'target' with ## the help of "relaytool". This tool provides a wrapper object file that ## dynamically loads the requested library at runtime. The client code can ## check if a library is actually available and react gracefully if not. ## This is much more end-user friendly than a refusal by the application to ## start due to a missing dependency. ## From the external dependency identified by 'identifier' the individual ## libraries specified in 'relaylibs' will be dynamically loaded. For each ## library 'foo' a symbol 'libfoo_is_present' will be provided. rule RelayLibs { local extlib ; for extlib in $(>) { # Construct list of object files for target. # Used by relaytool to compute a minimal set of symbols that need relaying. local minimal_list = "" ; local o ; for o in $($(<)_OBJECTS) { minimal_list = "$(minimal_list) $(LOCATE_TARGET)/$(o:G=)" ; } ExtraObjects $(<) : [ RelayObjs $(<) : $(3) : $(2) ] ; CFlags $(<) : $($(extlib).CFLAGS) ; LFlags $(<) : [ RelayLFlags $(COMPILER.LFLAGS) $($(extlib).LFLAGS) : $(3) : $(minimal_list) ] : noexternal ; $(<).RELAYDEPS += $(extlib) ; $(<).RELAYLIBS.$(extlib) = $(3) ; } } actions WriteRelayLibStub { echo "" > $(<) whatever=`echo "$(WHATEVER)" | tr '-' '_' | tr '.' '_' ` my_IFS=$IFS; IFS=" " for w in ${whatever} do echo "int lib${w}_is_present = 1;" >> $(<) echo "int lib${w}_symbol_is_present (char* s) { return 1; }" >> $(<) done IFS=$my_IFS } ## MergeLFlags flags1 : flags2 ## Merge two arrays of linker flags. ## DEPRECATED: Use the generic MergeRemovingDups rule instead. rule MergeLFlags { return [ MergeRemovingDups $(1) : $(2) ] ; } ## InferFlagTuples switches ## Given an array of build switches, infer which switches consist of ## multiple arguments, and return a list in the same order but with ## multiple-argument switches converted to atomic array elements. For ## instance, given the seven-element input array [-foo, -bar, cow, -smurf, ## -flub, glub, blug], returns the four-element array [-foo, -bar cow, ## -smurf, -flub glub blug]. Multiple-argument switches are identified by a ## token with "-" or "/" prefix or by the shell backtick (`) operator, ## followed by one or more non-prefixed tokens. The shell backtick operator ## is considered a switch-introducer since it may be used by specialized ## build rules to determine build flags dynamically at build-time (rather ## than statically at configuration time). rule InferFlagTuples { local tuples ; local accum ; local flag ; for flag in $(1) { if [ Match ^([-/`][A-Za-z0-9]) : $(flag) ] { if $(accum) { tuples += $(accum:J=" ") ; accum = ; } } accum += $(flag) ; } if $(accum) { if $(tuples) { tuples += $(accum:J=" ") ; } else { tuples = $(accum) ; } } return $(tuples) ; } ## RemoveDupFlags switches ## Remove duplicates from an array of build switches. Unlike the generic ## RemoveDups rule which removes all but the first duplicated item, ## RemoveDupFlags removes all but the last duplicated item. This makes it ## convenient for folding duplicates out of an array of linker switches, ## which typically are order-sensitive, and in which the final instance of a ## duplicated switch has highest precedence. rule RemoveDupFlags { return [ Reverse [ RemoveDups [ Reverse $(1) ] ] ] ; } #---------------------------------------------------------------------------- # 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) ; } return [ RemoveDupFlags $(libs) ] ; } crystalspace-glshader-cg-2.0/mk/jam/assembler.jam0000644000175000017500000000340611473743534021374 0ustar devfildevfil#============================================================================ # 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 $(<) $(>) } } crystalspace-glshader-cg-2.0/mk/jam/groups.jam0000644000175000017500000000360011473743534020732 0ustar devfildevfil#============================================================================ # 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)" ; } } } crystalspace-glshader-cg-2.0/mk/jam/unix.jam0000644000175000017500000001526311510623215020367 0ustar devfildevfil#============================================================================ # 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) ; APPLICATION.LFLAGS += $(LINK.GC_SECTIONS) ; PLUGIN.LFLAGS += $(LINK.GC_SECTIONS) ; PLUGIN.LFLAGS += $(COMPILER.C++FLAGS.PIC) ; LIBRARY.LFLAGS += $(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 { local libbase = [ LibraryBaseName $(<) ] ; return lib$(libbase)$(SUFLIB) ; } rule ConstructSharedLibraryTarget { local libbase = [ LibraryBaseName $(<) ] ; return lib$(libbase).so ; } rule ConstructSharedLibraryLinkLib { local libbase = [ LibraryBaseName $(<) ] ; return lib$(libbase).so ; } 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 { local suffix = $(4) ; if "$(suffix)" { local target_suffixed = $(<)-$(suffix) ; local installed = [ DoInstallFile $(<) : $(bindir) $(2) : $(target_suffixed) : $(INSTALL_PROGRAM) ] ; Depends install_bin : $(installed) ; NotFile $(target_suffixed) ; local linktarget = $(<:D=$(bindir)) ; Depends install_bin : [ InstallSymLink $(linktarget) : $(target_suffixed) ] ; } else { Depends install_bin : [ DoInstall $(<) : $(bindir) $(2) : $(INSTALL_PROGRAM) ] ; } } rule SystemDoFileListEntryApplications { local target = $($(<)_TARGET) ; local entries = [ DoFileListEntries $(target) : : $(2) ] ; if $(LINK.DEBUG.INFO.SEPARATE) = "yes" { local debugfile = $($(target)_DEBUGFILE) ; entries += [ DoFileListEntries $(debugfile) : : debug-$(2) ] ; } return $(entries) ; } rule SystemInstallPlugin { Depends install_plugin : [ DoInstall $(<) : $(plugindir) $(2) : $(INSTALL_PROGRAM) ] ; } rule SystemDoFileListEntryPlugin { local target = $($(<)_TARGET) ; local entries = [ DoFileListEntries $(target) : : $(2) ] ; if $(LINK.DEBUG.INFO.SEPARATE) = "yes" { local debugfile = $($(target)_DEBUGFILE) ; entries += [ DoFileListEntries $(debugfile) : : debug-$(2) ] ; } if $(EMBED_META) != "yes" || $(OBJCOPY.AVAILABLE) != "yes" { entries += [ DoFileListEntries $($(<)_METAFILE) : : $(2) ] ; } return $(entries) ; } # 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) ; } # SystemLinkSharedLibrary barename : target : objects : linklib rule SystemLinkSharedLibrary { local barename = $(1) ; local target = $(2) ; local objects = $(3) ; local linklib = $(4) ; LFlags $(target) : $(LINKLIBS) ; Depends $(target) : $(objects) ; if $(LINKER.RESPONSEFILES) = "yes" { local response = $(target).resp ; MakeLocate $(response) : $(LOCATE.OBJECTS)/libs ; ResponseFile $(response) : $(objects) ; Depends $(response) : $(objects) ; Depends $(target) : $(response) ; LinkSharedLibraryRsp $(target) : $(response) ; Clean clean : $(response) ; Clean $(barename)clean : $(response) ; } else { LinkSharedLibraryFirst $(target) : $(objects[1]) ; LinkSharedLibraryIncremental $(target) : $(objects[2-]) ; LinkSharedLibraryFinal $(target) ; } Clean clean : $(target) ; Clean $(barename)clean : $(target) ; } 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 piecemeal together LinkSharedLibraryFirst bind NEEDLIBS bind EXTRAOBJECTS { $(CMD.LD) -r -o $(<).il $(>) } actions piecemeal together LinkSharedLibraryIncremental bind NEEDLIBS bind EXTRAOBJECTS { $(CMD.LD) -r -o $(<).il.new $(<).il $(>) $(MV) $(<).il.new $(<).il } actions LinkSharedLibraryFinal bind NEEDLIBS bind EXTRAOBJECTS { $(CMD.LINK) -shared -o $(<) $(<).il $(LINK.GC_SECTIONS) $(EXTRAOBJECTS) \ $(NEEDLIBS) $(LINKLIBS) -Wl,-soname,$(<:BS) $(RM) $(<).il } actions LinkSharedLibraryRsp bind NEEDLIBS bind EXTRAOBJECTS { $(CMD.LINK) -shared -o $(<) -Wl,@$(>) $(LINK.GC_SECTIONS) $(EXTRAOBJECTS) \ $(NEEDLIBS) $(LINKLIBS) -Wl,-soname,$(<:BS) } crystalspace-glshader-cg-2.0/mk/jam/build.jam0000644000175000017500000000627611473743534020526 0ustar devfildevfil#============================================================================ # 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)/icons.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)/pythmod.jam ; include $(jamrulesdir)/debuginfo.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 $(jamrulesdir)/upload.jam ; include $(jamrulesdir)/filelist.jam ; include $(jamrulesdir)/msi.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 ; crystalspace-glshader-cg-2.0/crystalspace-glshader-cg.zip0000664000175000017500000110131111544147311023132 0ustar devfildevfilPK ñ’|>crystalspace-glshader-cg/UT ¶M¶Mux êêPK ÷’|>!crystalspace-glshader-cg/plugins/UT ¶MM¶Mux êêPK q’|>crystalspace-glshader-cg/mk/UT µMµMux êêPK ø’|>'crystalspace-glshader-cg/plugins/video/UT ¶M¶Mux êêPK M’|> crystalspace-glshader-cg/mk/jam/UT Ñ´Mó´Mux êêPK M’|>%crystalspace-glshader-cg/mk/autoconf/UT Ñ´Mó´Mux êêPK ù’|>0crystalspace-glshader-cg/plugins/video/render3d/UT ¶M¶Mux êêPK û’|>7crystalspace-glshader-cg/plugins/video/render3d/shader/UT ¶M¶Mux êêPK “|>Ecrystalspace-glshader-cg/plugins/video/render3d/shader/shaderplugins/UT (¶M)¶Mux êêPK “|>Qcrystalspace-glshader-cg/plugins/video/render3d/shader/shaderplugins/glshader_cg/UT F¶MG¶Mux êêPKè’|>Ãù2Š-Ž#crystalspace-glshader-cg/Jamfile.inUT óµMôµMux êê½WmoÛ6þî_qpó!Ý ´u1¬Ž¬dœ8°œ Å\´DÛ\¨—‰T oØ~ûŽÔ»#É ,±“÷ÜÛsw5ŸÞÃÏ?Aÿ‹é,çÓû¥33ÇöìK>÷®ìÉx~ ×›9¢ç$«1‹Ape.O<ªv>WO6,õͳóÜþ†øÏ™¤1á cF©,šœ’@¡]õ†=À¿0Q2- Y•—‡.á†ÿ^/Ý0X³±­- ü[Ýàᦺ’ÈD¼Ü18 hV.q·´²‘Ä´Šú•øé~¾Z3NóÐUV/¢Odè¿—45ŒÈ1hà‰*0£"'|‰_—–*™ö*±U ¾Ðª¸@Ó¿PÕœögÔŸ)¬Æ%Ho¨@¯°N$ ÕZ·)*h¶ò¶nâ­¶º¡¨J$õ@q& ÝmoÀ¡’D²òXL]ÆŒ @W!ì¶ÌÝ‚DÚ<¶^ÓXuPi%ŠÃ?ë0´S„FïV<»74¨4³;ŠêÐ÷CEH âb>tˆß)ù»vÀG”lBñ§R<§~Ä1›ó¤a˜dJŽ™löÕ,(Žª#yÂU¡TÑ5ÖH@LÿLPV{e(ÞcËs'".5î¦sks´©ûwÇdʳ›ùÓ¶!ŒR ÛBˆÄ§ZB1Ì£X#Œ÷2‹÷²àü‘ÄŒ¬xiŒ*ÚõoÜ­juW^waü$Td°ÃÁæ$ 3±#ÐLáá·ï¦iéÅņ‹-ñh|án” }jÀ–ˆ-àa·8ë—´›šB0g_ùhbŒGödt5±0Ð=­¸±umßYN«Ü¼žŒnÚÅ“#bûÊQc‰ UÓÂÓgÕºR¸®nT—^·²}§ Žžäß….‘؉ #û˜VYŸïð­ ´cÁ? /ÑZ Î3ïƒþ«° ºH9ž—zäÄO2AÏÎoGsùhÍ{z7íæÄ|U?Ÿÿ«Ýur ½Ë?ï‹c,xt•lþ/^áì$zl÷ÓRÓéØ3k<ÀiÇ!îýæ豚F½ •úk‰;-¸bà›„“NaeØ)—aÈóQmC×§<Õ)¼I«:ÞmuDCµ1l-u8°§!•ýoíYß)£ÓÍ÷[Ha݉TæíX:ÝSp<™ïÑ/Rù' g7© Q—­™«.IÞ b}oÃÛïþÌ/꺕=žÞEÆXß8àöë2Õ£þž O¨êÍÐÌšX#«8«N®4,6^¨k’ëÊšR5]fŠæ5'¡€—6,½X`o.‘ÛE¿ÁSƒ‚6x Us2)u]¦š¸êpÕª¦èÖ–ýç<Ü[3s:m:ÚZ¡Ùé#’/óÙÙs _œ?…–Ž(SU¯Ù› ¾È–ï‡ÿPKM’|>Q”þئJcrystalspace-glshader-cg/READMEUT Ñ´MçµMux êê­VMoÛF=wÅ@·ˆD"¶OF ’]Ã…? ©nÝS±$GäFË]v?ÄèÒßÞ™%õÑÔÉÉ„a˜äÎÌ›7ï ½Š]g]»†E ¾‘:kë 4 ·óAjXu²D@S+ƒ¢ ¡»Êó¾ï³rxïùõE•YWçBÌwðý#ðáC+•þøQÜßþz/ÄËË üñiùx÷x{¿5ÊýHð²í4ÂòæÓõà ¬ý­xÄÖ8BCC` >Ý¥L‡«sö3–éÁØ; ÐÚJ­V”)ƒ?m„^i Öè0ÔhЩ’ý’(C\´2(k A‡™ kšàÅû îLp¶Š%¿çÌ£Ò•25HJvg¸sM·â"ƒg/k—p¼,ƒ⟷¼Äÿð$:~æ•o[„€_›—ýºmul[0Å¥4Pð4°ýTˆÏg£¾LáÁï|þ@§ûi _ìêžðFÏù8âÙñ"X«3xP¥³Þ®ü®|”z¶x÷ŽŽ³n_/uLµÂbò‚ªðÃS…Îj=x`VÖyë·%TÊQ„u»Œ;}Ïh„ •âXˆÐlY±…ô$¬ØQg ÙIJÎ6"Lg­ÜàYp·†QRÙƒ"¹EŸ)`ä «)Ã2P6Xnø¸#>8UÄ$C6§L%ñ†Dô ²½ÑV¦Æ ;:2,ÓYÚ¶£nó1{Šãœõší”ÔÏlŒ¡¬õ+j”®uò2ýÎ:tT¼ÄŒ’æ],r‚M†?É 1@ÎÔ(}€-„Ÿg—yDß^)Er½µl*l7Ó¸E}$Æù쇒ý(,£I–—Ö¬UN¦ÐYïUA6îUh±ÛŽéòSPé½òÍIÇ´H@¦5±ËDni+ÉBB¡`[»aýª %Ùd6kPw“ñ<»Á1“±çóÓ=ºž­Ð¡«ã9{ZmŒ—•½SΡk•÷ ÓHØ~ž{ºú žS¥®~¼}|Îì1Y>­ò—)\KGæšÂ|uý¥!ÕF¶ñÖ¢4þXBq¿¯!crystalspace-glshader-cg/JamrulesUT Ñ´MèµMux êêm’[O1…ß÷WLA›‡¾5BÙ((4¨iÄc5‰Ç».¾¬|! ˆÿÎì†KTx±,ϙ­|ƒÓÁx=_Lþ,oÏŠ§âmP¨x.Š˜»­É’`ëÒu˜´weq}yS-Mç3øyqL^£=H _{Oïò3>fêŠä–¡¶Õ†(ƒu,¹°vʇ”&2ûsر1:pžå‘`:!¥Eh(D挽 ؤçJ'mð@§sæ¡“¤?éJ{6~%ÁÞÿ¡n²6²äì½m  þAKf±3Ùlú‘™epßEõáàYÜ}Ä{›õFŒæ† m± Ÿⵟ”aŽ8@ò\Ù%yËìc‚ŽïYÙì‡Õòæv¾¸ú]VÓÅålÅ%îÐ^ÙÝ;¿s¢ X[Œ|ÓÿÉKß&mõ#u}Ëï ”·: Ð’h½v‰ã ¥0&a15_$mrݵ×Ü>©V'Wãõì !_¢â§í¥mï6:þNÕê0'„l(ý”þ}z˜QñPKM’|>ò’¢þž[%crystalspace-glshader-cg/configure.acUT Ñ´MèµMux êêÍYkoâHý<üŠÚiH78êÞž/³›•ÜÆ!î8À`3“ЬŠ]€;~ ?Bè_¿çVÙĤIÒ»"«TØ·Î}Ô}ǽþµŽ™^©Ÿ&s&«²`¹Ÿ…«BcVrŸÞ V,ÓN9h"Ñòeõž)ÑñB0Be&j‚y–ÆØælFBkTlÝðÆsbþÑ™}Ô~ûtsÒ:0ƒc ,B…ßÅÖDo …5´ÜN‹áoæg›¼àQ¾â¾è-¢|É‘õüÅMW½ÿ }ª—ÿŒyý ZŽ7ÖK}`ZÃóQ䔫Uš,3cÁŽ!ÍäiŠ sˆÉ"LDkÆv½^Åê÷ÓÓõz­5%û{ ¥Ùâ¼!½1ž[Ï™}kÒ™Åw§ßx|z[†Q aµC¤O¯½šŠW­ôáhhºí]ŒWéä^HÓþXQ”«­1j·åE˜&l)ÈTopÊ• .L½oNœÎL±Õ–oá·ÆRøwJÁ4òCkC§3 <ÃhéŽgwf…È ÖûÎŽÚ†qT{”¾rž9™ŒpäFZFKR¤…0 geÎo#ø" ^!?dÚÍIåÎüúzúõõ ÿþý3 lkx Ó3>ˆ9/£‚Mô¡m}Fd_x|ËsÁ¼ÖYš,|#OcÁV/`Ù8ï2Fx¨HS&y’iPf!¶øYšç=Å]zWlü( éz÷<*6‚xmÕÉÇbÉx¶(c‘¨(v<óÊr½ÏSËî“csâ~=ÑT„:JôÖ~ºÎL½¾é²YûqÙüÿJŽˆÝÆ…i\zîhdÃIÿ²†ý‰éÐû5Ìš‰\p/ 㪯56´ëu—Dntýu`‰,H6(#¯à66´ëõyû#Wa¯â¹–»O>×¼¶>öÿ´ˆ¦áÇà>|±¹¥½ýòö¸¾Å^óŸÁ®¶´·_öÙõOk,yW¯Õ–¸­VÏà)¶øªœäíj¹óJ¿”•ŠÈb~'Âdž¾‚ÛÜÒÞ~Ùƒm W·m¢ ªWÑ È âv½nb"HÈ­žÝ_½—ûëõóÜôñØ6½æžÝ'MÎW—¨’/[„(”9äêûóH¾÷¬A/åZ‰,úÑç ¨5q[.v"ѼÛºkʼ´Ü™ˆÃâ-Ê\_"‹Ñ»°͉@¯¹Y‰Ã×:¥—ìKÞ°R盤àl•¥¨ qÎN«VDöÎùÁS4æ¨QQho©–xÀ¡®±(¼Íx\•íãñ”:é7s·G¥vûçŽáœ¾_Ô'ï/˽@§˜S¤áÑ…i=ÇXÃAgÖë­Ãb™–EÞ£%BÕ“ýO”¦JJž°* Šà‰ÈNÿòj2KW²íŪÌżŒÐç a,œ³MZ²D`/=¤jzX†p>’B$<XÁó;tCyé£eÉë™Î¸ó7áʉ„B«s/2z˂ԗíMÕUê°%¿§·?Ì)@ƒØ*ÉfPϨÑaœ Æ6^ù"ÉáÌ’Ñ•¬@´¢£“öÆ–.…A"óby ¨vÿ>˜Kq¼£ˆn^9¸!!ÈÈ6Ò!º¹ %Øí¦¾çÐØˆªÂ:ÌEW² åmîQ’‘ªJ Â~9sýYsÑXÇJ‹6LÜ#Ê Žb(ÈHQ)b" u«\ï…27HP-:f½ž¿·=üÞ£*}iÎû»™×òÍäeººG(ÇgŠ+ÙpvŸœÕn¾j+m<ÒÆ#m¼GmΘ*òVëÙâ2º[¶9ÑŒs[`–ký2Ó1ô1²B»#e‘²U$'ªB¿‡Ð„ü*°ý:°ýø-êý˜ûw|ñôZ6‡køKqð«ÌªöšCý³ mq[.ŒOjpå’5Õ/3yÍ­ÜV>\ÈüÐÈTÚŇ#i6…Læ«Bn;“®ÕªŠŽg$G&nö»“Ü];SôÑŸU2î<£°‰ÃïB•b51©Ú×~¤ª†ù½¾r5ê›rêß%?lÂLT]üeÊå]ëªr†ìrœMÝñÔõª+!º.Ù¤ñCËá=_j]ÿ¢T5èðÓòýªú-B)Ú™}᱊¶kΑù’$Q¯ÔŽ­§G®e lZ­q$è¶Q5€È6³.sÈþ9ݨS£9S~M¿Mt[TˆÎSÈÎ3.áÝtÃ~ýÆã_e½QÄKQÃi­a-ÓXüÞT·ê IXþ…mYÄ‘$ÏQy}l˜Kz|þH¦¦õoPKM’|>ú,~aá¾½"crystalspace-glshader-cg/configureUT Ò´MèµMux êêÄ[}wÚÆÒÿ;ú[™Dàaˆ›&&JKÇq‹_®qÒ´!ÅP-$"‰Ø4Éw¿¿™] lßô´çy| vggggfçm—ïD­ïµxblˆƒ¹ŒcñÉõñ£0ñ"Nä´:”3 e /òܾn7ŠA$ÝDŠ#÷RŽ<4Ú„C2BëPôâàøhÍ“p#ѰÿÀXк~ÙAøa:Ў#ÑkuzLð¯­ö/⊰ \ßid:‰ZÄ@`:(‚ çþ¢vÁäÌeéÎu’?Ò8P%§³d¡¢Z»b Ñ1…iÞK”‚8˾¾B ‘‡o‡á%-Ÿâ38²>W’,E!g°Jšnæ"â #ÛP[s[mLöÇï»ÝÚ‡MQ!ý›.ÀÈ‘ƒ~ÞU›Ü»Ÿdˆ*áÑü©(<ƒ< 1#!æ^cçp iéAÔ§ÔGÇfÝPQQ+m§@)Yµ÷ä_bä0 ¤±6c1Ø`zС0ÁNW6'¢Ø-Ę^²Á-ˆ›,èh`jq•Þ;9:j¿´€ëäHL;%F yö%|'‚ä¼|rÛöº”­„ŒÿuÞëd ŽøNTGŠzT6"µ ùÞ]!£(ŒvAY­Ru5E$i9¬´ˆÜ~ú—Sr$w*MñüAƒí¹®MÑRí\fÅ KF¨JðuYAC`¶TfT–öØ€;¯úÈÞo~=<¦˜¥~­¦qäiu4ìmJ óËMI;i>²8æo!ÌŽO±§9?#wî'¦˜¢‘°Úø˜É*—-ì ìK²°£cŽ0›!QßÛ »ŽôN+3–K}æì¿ôÿ¨uØæ‡ÖpÁ^“etÝ-}.©al†I°Ä5 †(e6BÃTD¶¦­l˜`w VïÓNݱJðW§†c=ç;Žõ°²ãvGsž`@¹n{¯×j·½4¦VßvëøàMë`?ס[ÇÞKZœmhzÕ×;hTF^½÷NŽ_ô:¯÷Ûí5 ïs^Ö[æeŽ™Ë·ºfw=ãêþ¤\]ʈœŸºÿbÚUÀŠÔKü¦ì«{cúÕýò/S‰&’çpCÇÄ—Q€ïX@ ÊñÜ'eí–ê•&¼´êçƒÕc 0d{ 4r=Ÿ* ë@õ%ZŠØÖñHW‹AÔ Â¡t¶WhÃÖù,²^ÊüÉ\a­Úë4S¸sÛà†‘Èaa|~9w‡[#"¿à»ÉÉ¡Lˆµp}ÂaU¶ {”±ŽVɶRª{kÓ’B‘±¥ÌqÅT"ÍŒ•¯$SNžwh“Z¥†1Å@¦`[äŒ9k]<‡5ŽR;þN‘]öêŽÙ,ô–òßJíÃãýã“; Ì<.×éêF~ŽÆ¿8G£0;‹Ð5Á‚-ƒÆæ§X}¥¿Qèð ™L¥C·`E½{Ñ5ÅÝ(­¥”€º¥rYÔi´¨T0¸Q”)¯†CŒÔDÜ”7³aÌ„B¯Ì–,dœjÒZ_œ-¥€#£© 0(ûŸQ±ÀÍdä&ü†è•¶…kÎÈ¥aÅ`–’›•i¥i¥ùŸ…½»F–@gDÀrß5Ê›a·5}}‚Aü‡Kªô}ÞŒÁÈUÃE…bY.éÀ ¢‘¨Àuy°p‡`,×|l=”h§!ËH[Ϩû!°ÏzI:2ep“Tg½Ù–×1ëWÒæ{ŒàóJ亘EmCÖ®ØqóÓΛÕ0‚8Ù€›µ“Iâ}Q¹Ýÿw©âLE4Héñ¦¥ .«`p #¯ J!9ð+¥Ê¡¬@‡Zîs[õj’Æ{5Ó·2ž_7s}ä‘‹ZO×4/n '¿ËâI¡¢º_ešé,$U\âùÙ˜Êeú,’-sêLT¨2@øÉƒ?r{H_ææÒ•†«³%µiÒâ(‡»MNt8¾ƒlBÅÅR7báä7š¦J…É„H¯pF…í–æNÆLãÞÊW‰§wÄâùd…klÜçÙGr1yšÏ-—g œýåeq³yœ8rªµ½«™ôÑ’Nér5ŸÒLD”%S6ês5®ˆ‚ò¿—üiÌí0óÜê Qשˆ U\ zØÀŸ¹…Ô˜ë®Å40b†A}9"ΓóX+ÛTq €N>a)SÑè DS7˜£kA#“’.D‚Œ¡å$“/Äú(¹âmýçÅëòhZ^Pÿ´¹øœW˪>öýšf©JƒÓr«Ï²&q„W|æè`óˆ‚Q®rô%f÷@=r=˜¸)L†>¶Þ^ûpï¤}rÖ{ur¶·ïˆƒ³ýÓÞÉé9ÄÝq Ü` Æmç…ã˳âÕ<q‰ï:¿Tãt ®¦Û:3Ö€éðìàUfùqåŠAeÚÏ* -ÕfZP¨7¿œ`ðw'7ÈÈæŽ)IH¼Æ¢sÞ:ÓY§!GK‡ÐþHœWÀ[™Á¤ˆª˜’–C«éÓ\©n|ë“/ bm¹´íDf*”äSr¨âK¼ìüLl›¤Ì&gÇÒä\^^')•<—¦@ê8²¸¬•¸@<µdT»3º“@ÂÁÿö›ý[¹ˆŽ–‚¥1D.!¶R#uBéãP޼€ó¯´Ø+‡ þ [ؽ¤3wøÉE×XÒ ²Š-á,ñ¦ÚÏisŠý^ ›)ñþ"ÊÜHŒ£ð ,¤“D ‹äLò… µ¤x‹­„t3š’ÅÌ@Ó>ÎÝaôƒêÈãQEÚõ>mÞtæË¬`s]T‡öªÚEy¦.¤9fV]Ó¥0òzãÖìC¥]þC–BZèÝð‰Õ8¿Z¹<ᮀGn¬ÆÀZ‰¢„—z c„5·ÎlÛ¾QÚ´uaœÂh*©3xE³ÌUðª‚1P€Éìje«%„ÏýD—”éæ…ö‰:拯D_üJ,"ÜO¡7Ôq>/¹ÑxN’ #’é<&× fÊ´ sÁq$‡È ‰Ê=óÒº9yü6Ñ0£rŒV‹pYi˜n’Î-cô!–,ü…9ªÊ¢~±&0Âaä ;He(ÄþÙÙÉ™x¯RxÑ>9è½zùávÓw“pO”‡5/(U¢rº(m_dõxžÀäÄ+·Œlq8z:b°šR¨k;:Dnqœ™ún¶L4°(ø-Á7d0 ·¯Ði_.µU¤¢¹rÓÃ8iDã&®è#ÆÙÎì Ï¢ !èløèWó8kc^oëtVƒÕóÇᥕ#mU–€»Ï>WÍÒ#ók®š<ƒKgõ{i¥a5ˆ¢(VîæñêŠÌ×L¥q”vÒHdmt°‘韲öÙóVŸpœUÑ»Âê–Ýnź!R7Ò.óÒÜmüÕiˆ½Ù-Ãp`ß x·­?Òûvè‘Ûܦ«SPÎ4ñDíÆT!½É½ú.BÍ,Ôë5˜“~ÈÍŸõiÐe <² .rSg%¬rÆü䃣߹©ÓžåÌ,>碔£‹f6éôðËN ™áX51ÇkÝòû?jèÿf·RÛ,Y¢ûEt‘*¿KÞu˵Z·rK ívÞèe³‘ZéÙ¾èŠüPXµ? éâÄ]Ì\û¬ô³ÕkêóGz}¥Gíw4ÿ‰–o…­`…w‚Æ5@ص¦øh]Yl±‹P·)É8ÌgðH{7rˆªÅ™Œ)kÅâQÏ— U~Ë핌'ÞŸ—þ4g£8™ºº^üeiÐöþù92)Çj½Ø{¹ÿêàõáÏ¿´ŽONÿsÖ9óö×w¿ýžj¬¥Â$¥ :ôÆ^‚ù·ëG;ß?þáÉÓ‰ëóiŠ¢]@¡q!WFuJ©!Îo®¯ƒ6ò ¹Ò¯:êÍJµi–‹…¾F®oYò5¯•‰¸ ù\µaoAÄ…ÞÏ\"yáÓfhK)ömq48r'k¹þôQ½ZúäiE•;äÐB¶¾@üpm ±[­Jc«¾3ãgí}éƒZlÍAƒ%ž-«y=×…œx ]{P­éöD(’õ×¾~ïZ³Ö0œ­#¤Md•r"·z°¹ì(ºîS©uÝz·‘›2¦Ú @‘ê„©VößVó+) &H‚ÅÃëÔ9èN3½Å²ZJ˹]üÑ ˧ðâô¤søNèú)G¤Å“Ýð+àûñÇßÇ×6+»Íæf…óƒf“qò²S¯®±p8/H7%DVÊnpySU>dö£–©;£·úB Å¥C#ÄÍ{°äW9@N¢Þ`6sLÅ6 ˆ÷7‹AíýÓbX{¿ßÿG/Ð|¸ß»?¶Ì¿KIZ/OV¨yx6»kNcù+˜—?¿<<3ÕÍ„?<{°-ž-÷7>†Êñ-4Zßž„1ý·ß*ä3à­N,bQî¼={d7¶Dèé×Xµ¶̯+º6L–³ŽÈel@¿Z@Ü1g|c™Ä|E3 C,tÐKgr.ÊÙ¤ [AWƒJ1Sc^Ô?RòC·Ž ?6¢_‹Fm†{`ýÈ»vøøß®O_ºA\æðwþIÂñ~ØÿSŸî·_œ¼ø¹ƒ¨„Jj|ÒêÁQŒéþC<ï“ípŒ£WíÖ`ŽZ¿ìëDý¨ÍKŠŸ@fîà’NkŒÓÖÞ/­ƒýÞqëh¦ô–_¬YÜyëì[Aõ¡—cÕíekçüìðøàöñ¢ýâ –œœ!ŠQGVË®7gm²‹Ä­yà}œKfŸcN/kºÓýŒehã]ö|åÒfÒïÔN$ͧ~ÂvIIc½:ý’q*1ÇìºQ<‹“¡Ú“çh@¼n½Å¢~ëôÎ;Ýïô^ó¥ÞvñßöÞÿ¯iÿñóbÿ ÕøjL±Òöî9¨ÛRBRž#!o mî‰S³Ø ìÅx]¯à’üïŸù"i%í$𻯻Zi$¤ÑÌh47F×u1? ç©b¨FK—Â)š.txôh»ýëÎÖ#^Í£.ÌÊo%B‚>5=‚éDõfƒ‘õf´™Æ[|*¾¢s˜üfÓpoRéTæéÎÓýƒ;µ]ÑðÚªÍl ŽVÚ¨ .®©D¦wŸeŒOØÏÑ#(çVÓ…R9^<Û…2v˜›P&)P¢ ë¶ ¯À¿ìÉ•­V¸'Ï/yüˆhÁ¨ ©ÛûÏÿí©ß\ý»…·}ðo˜F{mYîhO¥)X Zw$á=ÿ×™Ù3Žvv¼ç;{ÞÓ¡>äoëùó½64޶÷ŽÚ”&¡©/Î/]u°³´v<ëe÷6sÖî³ÇûÞ£ßvŸ?zL?‡ÞÑÎË݇øJ&á=Ú?òø¿—ÿ~²óL¦þ¾ûìÑÁΡ§~¶žA]ª ¼=…Ïí—/=ø$> bw^y;/wðGfÚFärž½G2¯üÙF4í?µ»÷‘$ß¶ñ ÷Œvóï[øhÈÏÁ˜<¢O˜…d~ÁLôäü!lMm²üeüÈùøºxÈìÿ<“ò¬÷hçñ¡‡².ˆY´Õôâ^á bú·{Š?Ý·!þœ.zøöO#JŽ:ø›ªœÏüQ?P¤Uô4|t“×ë·1‚ã|õ;Œ¢‘lî÷”ó$¤6ÊyØ ¿ã1W›´¶¼q“ 7Qs/HoΖãîKî–fm…žcÜÇFjáì=l??Øy¼û²’,gÞ¾+”‚w®Ë„w/èOÈèWI=œm¿ÛE¶­íÓlù è ¢û½6`Ï^{¨Bž>ŒäK¬~ÞdÙNŒ»žz»F~G¾\œ]ÔÜr¹“Sݶnp2>ó×îÓ@tÂhKZfÎKcºZÓ½ªhëµf/NÌ­HÙóç¾Ö¥¬€¹ÀÄ~E€“kÁ¨VÛy8jŸ½AS¿IË}©õ'ºõñðšG-•€ïÓ%Õ±ˆÈâ,QŸ†)² lÇ»|Ó˜õldÖCÆ.¨¸ŠñBL f`lvX±‹ÏöŸíxý¨Íª€&>BãÆÜÏ̤VOVZ<>M¥Ù«¬¯]Áÿ¼šÒ5ák‹‡¸N› î$Š!áJsI ì YÕ!àE%Ð(‘ I'×ÈôØ2cÖ®ô‚S´þÁ¨U@ A\A18—.ðPZ™™XiœFòw¨gÁo#ktØ4ìÙƒ(f¬Ÿhèé—IJ–qÞ(îð2DۥΈ •x̰Á/ðvÑ8ÖØ´]@ cœ|ý(>_C½5Œ:u>xõ;`@ê¤ º ˆÓ¨ŒðŸh:'“ˆnªI„~%¶#:C9A'ýa7®W%lVÊïŒ|  ”Š–¦>Æô5!º© òSÅ$Ò˜I@ê^Q¤¿?T ro–TœÁü BLÅÞE̯0”c»1?ÉÔŠ½7É»Êú#ï_n[ÜÀ[¯ýÿPQÛ^*?¦WÔæH_ .”à}ÓJâÕNŠÝÞƒ³Æ ’ìÔ©vð—ŠÜÒSŸ!™å!¼ŸJ ‰þ×dsôŽÜƒØ¼| HYÙ‘†Ë¥I7ñbºØ'-;ÖÐ6<ë“· CYƒ"½¬Î<›g{ÕŽV9©7Ù4Þ6ém@RX[”ج«R™Þü /‘R¢}Ÿ[壓ÔW4_¯6ù̦r,/Ÿ6«\§,*•º‘Šw´ŽœJ¶ôŠE[#4géÄöõYl:<ÑTž-ƒ‘ZuCÿ¬ÅdΙ3;¥ÆÃí`NɨEzÈd›ð+/iñò¹úI=Èߪ…kYŠº(A4W xæ‹ñœ<ê§æ*C–åʇº­ÈpfëI=È_§} Û ‰)ªVç9yÔOºY  Œ¶Ñ.[#Ý/Ë{µÞèꥑ`<'úI=È_þ±ûšlõ²«I3dwòœwxuZge0_ŒçäQ?©…FƒIc±ÆÓ?éùvªç¨sYLnTQú9y´±¥r2ªÔæ³jB±ÞÌÕ•/݃|êbÙïö«õ¦Ç@&ÏÉcºWªž¤gjÓ]uÛ’JqŒ‰ Òì,Ö›ùbâHÕ–'¾‘Z“Õ›îòjPBæ+‡0_ÕVUEå©ÕAð` %ç¬ù5òþ€«%¯$¥0«M%ØÌôÝÞ&Óâ ×ï&§AÈI†·ìô´ä-¥€£TTYÙyóH²éÖ6û‘žRÄ ñ|rÕ“üu–g–«†ù»UŒù’<ë'=ß9sÆT'ŽŽs;úI=È_§\J6ùÃUžùb<'úI·•Ë¥ÛÊ–«R½Ì°(e´i¾^,Ë»½,å`}ŒUÙʘZ –ÔX,áÙ•ˆ)úÝýÎïz'ÒIÖ›ùb<'Vyõ í•f¶‰—›Ñ*¹ŠLmÁªÛòTбêD'“ýj½™/¤ä“~R«Ûlaz΀#ÆüÉ/ÿTåJÝGß+Á(ØD} |@mfæÕHê;x3… T… óAþâϹFr¢9#ŸyŒbz®jÆsò(ŸÎ‡«À¤Þêm`BŒ ˆÉsò(ŸÎã,ˆñ9Ú¨©þái2ä¯=¥j $Èñ±õ“´¤hƘIEI='úI=È_§•‚l¢TB¬šÐ­7óÅxN©y>Ò’Ò½I´+T$ïÕz3_teüž<ê'õ`÷Û¨ˆ»n¨yV¦¸ λýjôŸSÌÏÆsò¨dT˜…'RÉ2îsò¨ŸÔƒÛm.ªúÌ©U¬õf¾ÏÉcÒx.œn9+£(¿û¨ŸìFÊlÜF©ËZ5˜/ƳjŠÌ”Ù©žTe2_­7óE,¿'ú)ÕUî‹Ò®:MpœwûÕ˜cœb~6ž Œ¨j2°¢‚\,óÍ|1žîꢲ·ZÓ¸jƒvÞíWëMw@Íi¿Òï&esSÜ„•:Í~µÞÌã9º6´z5ÝÐŒ´t’9ò:ÕÍæ¼Û¯Ö›…_Ý4ŽY%LÝGý¤ä/ÿØx‘e!Rͼj@5_ŒçäQ?©ÕY>Ýòþ)s!ÉooGµÓÁÝœ ¡²Õ¤©¾·€ä%¥RR†DçÝ~ÍÆ ¬ÏÆ 4+XÍhYVb1=5•â&¸”uæcP;ÔØ¢×æ|r[h}ÎýRT,'=¿Hfj^öŒ´ì¬©;&9Yì×ìya[‘8óÃF­3ˆ©…˜/(\\4·`Q±œBùE2 äeÏÈìfÅÄT67Á]ŽEOÆj â<ê'õ QçRr”ÙàaÕ€g¾ÏÉ£~Òmçrmuû¬'õ öÅFób£AÎsò¨Ÿtƒâìöü‰ùþ‡3’ö“z¿ü£F”Mª(Í}ÔOêÛ ° ^.6ÎÿÓÏÉ£~Rò×FSlÙÄ–-@Ö›ùb<“6>I2)Lƹ¶¶]›”Ôd¤º λýš‚`¾ÏÉ£~2‹Ê_¡vë%^më§ÕŒ~f%šX5ÒÓYS)nB$;‹õf¾Ï6ýA²ÝŸŒ±Õ¸öð‹ÄY˜ôËzÔõajF-C­-rõ“z¿N††6Hš=®ðÌã9yÔOº¥ÃµNb0Ç%r^­7ó%zOõ“z¿NO“údo¾U§En‚ón¿š3…RÌÏÆsò¨Ÿ4Î’šÓxccb*á>ê'õ ùÇî¿i“,1ÀI²5éã9yÔOêAõÁ„ŸÑ‹·˜[ÚÓRÁôsò¨Ÿ´2Ã56iÒ¬2:ÏÉ£~‡ßì³e½¡€Òaw‹g8[¦÷ãdY^†»‹'ˤâú¸çÊ4P7>Uvšu¦¬ôwÉŒ¢·'–¹VD‹I…uûó*QöÖ® Á¯ %ñ•I*¯ÔA ؼWëÍ|Ñ»ÛUrzIúI=ØNrgBn7IÍrïÈOpÞíWcý2O.¯øìR?'j2®q¤—ëUMßéåòÞíW£1œb¾ÏÉ£~R.â’Šæ’ë&«nãR)n‚…/N³³Xoæ‹ñœ<&ÈLšÆ&GA²H…¹ ¤%ù†h'd¯â¡ëuHy Ø4¢"ï+:Î^Ðå¦(\Ïj3¡§Aÿ-:ÂÌ#§zsnÞ!Õ4‡+µB¶U*€ªWjÿ|8[}õ•MWWEu-µ*T(âŠ*%‘I7’æN¤h>š‹•¨Sääñî˧;Ò?3^Ñ[öª¼)‹oë¸çißM¿o<Û}ödƒK(L˜È<}M°yÉšf2•‹@k?J†Š·£©v£‚Æ(d’Y ^{Þf5ªú.Êò|€/i»ù!‹ÛÅOÆÔ¤"/ô^ñ ]ºY«±Ë#•'ÙóÚšÜïÜICcÑw•¼¼‚—¾ŒŽ*÷‚Vý©]-i Oìì+œj[íGzû<õG~oª¥K® UµÅ—TІt&¨0ÀÆɵ¡›s]}?O»s寒üÍw®ëê¯ï%ÓüNþH}’Ò+æ¦Å{Ë[ZRvý†ê(Oì#zã‹Û‡‚Ò&X™Î(‹)i‰+••¬ÄÂÒz%±†W¤éVQêdörw=&ŽHÄhè“Û ÷èJgÝ3¨–“bµ‘еŽécö¥Ì¨¼?âên¼–. 3¾jF× mš®AB2¨ä¤¯;r˜Bºªƒ³%#¬ÉvV³1_™õO:¨Ÿ¾§%§&^ñ„@Ø«&"û«r.TBÊ÷˜›Â\€h€Ëk1MÇZMÖ´¡Ú]’$…n“•«9tAD œxIO”Ê-27Ÿ £7A_»ußÇe$m’o,/Šžc¾‘á߯zJ«B¼Øééâ(’;ßFîú°TøÎRÙ½Ý,§nE7ËÖíèb°F<‹ͳb^ÕÛÔ`D'2þõI*œ@jagü—~ÄHÂûÖˆ#uÛ ÷•5 GRÉ-]÷ ÜÝSásµ‚«å¨¤]`ÜièÉdzõ‚ðeÜ cÚÕ{y½dŸ˜r úŒDèâ!9~í´Ñ¥¿:…5¼™˜FÿÄvFãsMú:*•Ys8—a‡¤k#ç]Ô¼ì6áŸÄ­­Þ/»äÃ{覶I.¬º¡¨ËdÈ¡>uºV!‘d%mîb»dúÆú’n&Oáºn)yÚÏ®lƒŠylÔ]Ê®¾Ã$ØäƒÜ+W‘©ÚKžŽMJ· £ñ°Ã±$ÑEü)Ñiº*yé3@r ybx0+–4kZ->‚“”'3FÅ4’>,Ø >6m”YãiÉñ7‡Ht‰:W¡•ÇåÄŸ° Á~ Åòl}±÷€FcU;ôuü§Ê ?aÌ81Ó0“Û]a -û 6šŽN…“ÆOç‹Xz"Æ“| Ù§<›ÛbKQ¯ü–$Äô+%ËyÌbi§S&‘PêuÏrV˜19lÙŒHú’Ï 6² %£+¬¢^/e¬U3¾+¯½X¬8õW) ¯\_äí®Ó¾ˆÏš%UÀ'‰TeY#ß™-¤K2¥’\ÿ%û|²xV¼%¢b²Ž„ÙË«tÅæö£Ìm*yK@}ªÇ£W.mÌ«³WÚ5Ú´Ô0a°í&±SDU£_hŽpÜï ‘By:Ü!džæbÈ2<ŠÆ(Ȫ¯a? šKoÑ Iàì0­œqÛO#Œ®€Çñ´v%κ'˜çÂïÄ* ³<¼NnµQUmÕ\§Bm6×é~E®SÇö4ù~%Œ%n_(X\Â9ƒPÝ.¿ãü0ÜIƒÚª ¤”››Âf!ß­RŒœ·3‚NHC—¼#%íRÌÌÐÕÑ>[“Dß;¡)‚Wc’ù±,ö/Ðà 2lB=cØ ©¡TRû]|ÃÎcÈHÇ= Äì†ö(܆T bôdE‚nâ°í³QƇÞj¼x)¾­¯ƒ ÅÌýHüðC{k{gÿ±kQù,¨$î €Ñ*ðÂ‡Õø]0âÆö¯ìÛ] w+Ý.Ö=ï6nc¿âˆF¯Ñuî«ß¶šz_=ï(R$`@ÂaÔ¿°˜q„ç5±½ ÿ‘ß(U]“=mÔÀÓPëB ÃÎàìì¼]«x¼4Òy$ð§ãž.Í{ÄD“E\Ã[{‹QìÅú7zô¶%ÚˆAÀµó55W¬¿n¥¹f6‚>sà“p$Å8uω®-9…TKd+:Êåµ:P°A$w©¬zÑ Â¦Ê1xô£Mz%0ä…j¿­g†é^¨/†ÂÑìOíO,Nf0kB[¶‘{3”¶¥2‘­¨IëÎ.ïîíéM€WǬ!òH_ÉÊÝ×Xÿ6Vk¹$`™›ÎuÉ`îØ‚oú&@GVµ>HlÅuÿeHqN•‘Sˆ+Õ­–öÑî*tjs±Ôfüü*q"7ãÖ1 âµçezI r2­rÙÕ˜nšŽ®6윇(=ÜÔLb.¢Ÿš‰usAOäþ½"·$–kRªuMrGןYsF½;“+æ€_´ß¥5ÀŠéë©Â²Ÿ®TÎbU‹ÇŠ`»õäiMd~B÷:ì”IüÄXôÖ"IŒçë˜u<R‰¡pŽ+˜±"£ßà“)k´[¬~'0¾À¾óëþÓ P’Çㄜ÷r ð¨·FÒ²I‰ˆ¶a^ÅÄhLr‰$haᔑÖVƤÄ?<>3¼†Çâ•"ÄxœY’I=l fˆ5ã“Dš%f–Ed ³£<,ÀnãÏ’Ûü°<çˆÔ!ªy„ަ$ÛIºˆº@M9$UÞª±àu¢ Ù)ëæj—¯¨U°éhÔdŒŠäö(ªurÆe"‡K7 ÛÒ‹­\ªN™™KÚ× Ta§$ÎØ~Ô¯u:â•éA‹a˜¾A’ê“aA„ÖÓ˜$ß(ªQ4* ¸4.lpãóhëhë`ÿŠ+äðÅFݰìF±g%Ÿ^Æ»¸•ÚáZAíÒ‘×›œñÅËVm€Ï%‘»hðÏ.‰è,¢§&`tp–ÇÚq꾯]%]Fv¼¿­Q-=Q¸í|’¦½N!4-.*g”ƒ8¯Œäs5ßÛR ‡L¿Èϯ$¤š%Ç­4Ùšqhy sžWgc`W$·ÁÃÝ?<’M"bM),‘3'E¨$zÄè£_q€F…^LÝެèD¾p¡ÌoÚ¢ƒ½÷"á«,¤dñ«¸´€Ùß(±j_êç$îÓ¦¢ÌcvÂ!1©<ÅðžUÓ<žNϨ­ó)åÁ¢Áöj£³=ÞÙ:zq°£ç?q`ÊC}\!?‰ÀÜiŸòK³OWÇÜäWÍ­ƒ'¯E Î+HF}àk³Œר+7áÅ($7£5ãç@ÒÙóÏH?IÞ%‡¨Á>¹.X ²²Î¡Lºxd6†Jâ„ÏŽq,a†À úÑøìœð\9†ð)‡n'¯ÅŠrcùïC !gšò,kwÎü`t:¡(ÅGqA“Ò•’ÓÚštZ[#§µV¥YßÍÊÄ‚JÝjg¸5é 7¿(/Ó§~G슗B—T·a³G"êÀÒPhb' ýK1k‚uâÙ¾ÕbvÁ«!AAx}VEl󒇸f^œ8&Óª™iPdµèë—6ÎZâë7 ‡ôÆgÀê¢Jdš]Åp蜯ðNcâàíµƒê¹‚ÝÄ/JÆ[+ä6ÕöØVÝ‘ïÖü^LY½OlñB›,l+猱t—Ó5½ÃB}`‘zÑÇ3qÙŽö МTr œggïq{f*¡°ÔñØLâÇhX°tí€b¨AÅìòßúa¹c£+ïè 5ÈÖÀþ>y¾G[ ŒÂè…@¿`®¯p$ï"²±E«ÈBwXüAhØ.j­ž›°AvÎûQ/:+ZÒ:6<¹Î…&Év É>99íJûz3é|á8hY“óÀš ©Äµ†§°ðÐÉ['â“>Dô¹í“-˜íH¨%·^Ž…¹´Ikœ`:G„ÉÖ'«5£iR¦d§.5D¼Ó“E¥t˜«öS*…LtvSeÿ©¾òŸÜÐÍbÆfnÖ¡·rJ”ÞÌ1~'RŠA؃Nd‹Ú•±K*¤“(VŠåÆ¢ŽJM3=·€‰¶ë2U1G#dÊÔ*KåG0xyè‘–ýÅ~$­ò•L³m—>ñ~¡ô8ËôW“¼\áô÷ùxäºßGGþÙ§Hy¶·QNÌFdGÌ@Ç© È@âPÈôÙà-aâ≃¨íý€æÇШÕª £©Dƒ&ŸNGa‹Š¥3vÃ|@ÂZw9T¹P¸Ôü8f…¾buUCz?HÚåU(,¿²O›?°”U±ÝØþæTMÂÃÇÈéÍîýù1MôtÿTô#ì]^LPئ—‰þ[‘52hC*‹ ¹ðÆs^"ÔYT±µ~1Z2ÌÞãñ± ±åö?P•!ò¢ˆh†CTÅ_@Ÿ‘[2Â8: Ô^Hç\¤ÀOÆ §¬åi5±E§¶ µìðŒHž"Â>KíøƒVýXWò>žÛËè?YÂÆÉ¢–èÍãEvÙ.cRʨ_kÊľ ¥:9â3"2Dà\>l;' ·}ŒFûŽ5ÜQQµ¯6ðÞpÑ.Œ }*›ùN¸ø®“:Ôé&×Õˆ ŽøŠ|¥<ºGà¸Ó!Ý=KÕ¾RõÞyÀ˜ÂÈ7Ëïôs #H¾áìê¼iºïe'Á3ëF¢ï Å0˜›ïx¾C;”&5¦$ù›2Á„¯%§U¢Ës­cþiñ-]ì®T¾ oŠÂ›ß’ODW•yœþ^j•Zr¡›=/ó¨|`vQån•JžÍª¨/ÄÂýøõ÷ЀªÃêFÌÕÈîœÙ “"hz 3£Aå΀ÏEÏ •?Äê7+—0¯3}ñGf–uÙ6!.ÞZ#ƒŸœ–QˆçÌFN«üðÊ á)Éz¨/I2äy€J…FɉÕ:â¨}Iv¬m”ˆ¥^ÒFÁ±Û6úûðÐqÖc¤‰ Æ2¬ ¼ô@Y#§é;†¥´¨ƒ–öÜyÝîÆ{Ѩ¤–eñ–’*Ö=B¼§d¯‰ÍDİ?¬Aˆ1Öà&44ÔÕ)› Nñ˜­ø”ŽÚïHÍ“¡¡1Á»‡ÿ~*rûug6 Äš±C\]ÍʘÞ6kê´`Áœ.˜ÓÏ»MÀ„\°§·Kyì5ž&?S±¨·Ê¤š/ØÔ›úÒŸ£º`Tï'£jgS™AöÖm>Ëw8VñëÎÖ£ñÛÖØ}¶½÷âÑÎá.vƒ õ&"¡W!¦â.ƒw©N5"]y/ʸs˜ÜÚZÖ-¢«Øzˆøòžöõ…M÷;hˆt½ëD’Ùí³g½›–ÎiÓwÁû#ÒfÿÉÓf²ÎÜØHÃÜÈá,ر5z¶dmô£ éäuêŽjKºòà Ü[‚¡kQ B‹îÿð… ùÅ4{ÿ*ÇJn~¸A§V@fµZï£*¯Är¤§êÂÔTƒ‰³‡AÁ±Y½ÑÈH¢@ŽìÒüÅ”­Ÿâfx&–][¯*·×P+݃¤`JòžÇOSµwFx7k|°¶RÛZ÷¿¦jïd7ǯ¼,Îs9š¿Àhnóhþˆm9šÈöL‰âÙ@ÞË¥¸b46Ï T‹j·{!_˜¡û2E†¤ð㈪¼QBA+Õhük$6ÈJ°¿w²«8keñ6Ÿ…þ˜k¾6L [®6 }¬L­ ›û´TlÅ1˜˜$Kà1L—V«@ãW)Zĸo+̰mŸLaöe’ÒG öñŽ"b+õFúð¯B´äøÂP]ø¤˜Þœ]ï–x”£´!j-»Öœ-7ÖÝYê;ãÞ ‘Åûwƨ(I¥?J'™½è,ñ!K·UN¥yº±À“¿kíËQÙwX¬P;ªòðì“ÂN_vY#ï²a×tJqjÜ…A7è]ØÐ<Ö=owDàÓéÜ{;<Æxig ëïœcÉ ÷w@žÞí¿U7èåé4îÆyˆ^nË?{JÌ&—þßÿhà H¼òº{øâÙÖÓ‹‹‘\Ísé‚%u]†îÇ {1ò ßÇ+úåý{[ò+߯ÚnÚ‰ZÿóØ“ß/¨ zq2¿ç[bãþ›~tÙ×e†f™áteb³L<]™·f™·Êxä‡ð$ì7d•N¥Ncæå ìÅLµ!à_Fc°yT°þ4,ü”†£ÿÒÍRÝ ˜µ7&<çSØlxäM㪎º®cò¨á¥>MB›jNA•nŸú”ÑÀìaP23ð'?å¡0¿}QÜ Þ=‘Ñ>ùi:üñ„ Ç]AFûÔ§œ¦'Œ¦ТØ´w6ËðϦ §ç[G¿¶wžolí°‹õXÝЧ¯ˆ20Ô>ʧ_q[_¶§Ç¦“ m•Ñ“W)S@=æ˜øý}BôÝû€’hm£®ÛgÜú#B–”ÿ ‚òÑ;H¶&E¿ø‡£a8@/Ë–/fÌAïòª*P昼g\kÿÒ¸.é†ú$èøèmè21iÈéºd ðPñ§ctjˆŒ{Œ€¶Ð"éÏqD  €X±„ƒà‘ï±Î¹ÁÌÀrOÉ¡û%»ù`G~Oy(gï|¢;ôBÀrPÓa…кÀÃ+”(7èM°57ÓI2ÒÖ)íb ÜÅ@w ­š§>rPÒùù¹µ.òÌ’éR G¹PzK3Æã½Š}Ha.­±‘Ÿ‡«Iì'̬ö'~%7á”Í~Rò—(H#…i”£ù>Xý¨ŸÔƒŠ¹å6`µUY5âqa gÇå$••B¥QiÉ¿J¥qV:NÅÔ¸’˜¥ÄuûÍPÌ©ôà\_‘Õ%Á Ú!ó ¯[…eePNM _£á8K9xÀ'áq lú[À™ÛG›À^]ÖA¬ø’;;–(Þ$a¾c:`‡„müG¹õä,Ɇ¢Á$鱌?›/g>‡=ã‰v:à©ušu§ÓjzžP’³MEµV‰±‰9Æg•u)‰ç‘ô26ð/#ÃziÕ7QZöYÒóŠž8¥†¹ÒC†J9ô<”Ö“gOÖä±'5môÏ»Œ™›H©O jd”XÏ/±¾IÇ5¿³ß+  Ã1V ê*Ý5Ñé~<€É}1ˆÐ5’Š Eö† ` É(ÀHøo¶•AÓp‡¡0†jZ~)£#qeàŒ!!«UÁTÃL¼ˆ±1ä‰mLgÿˉrÝU€.ðV¢ý»nLPús¶y•‘9`çXåñæÒ‹ 9‚9D‡£0ë‹~p‰[ãläUØ'¿>ßÕ ¡ºGe*ˆ-KH‡]<R#5*$Iâ¬X-O:Nd1\öïxbyôž"C5«ØË€"‹7°u¸(zìH¸]’Ž#aœŠËaèg€8)õÀóÌÑþÛ(ìÆè÷ÝRƒr6BÇ«á(f&ëÑìzxA&¸ÂsĺW€_c‡n˜Ä*žg[9—Ñ&¼`¼VÛ/¨팔:?€´vg™Ë*oÌmÔXÁ€›¯%­É™Ì06$™2°ßvw÷ŸÀdÊ<À€Ó1`qÂ< ~yñä`çùþÁ‘M§ÍðÅÁž ÞJ¦mOFZ&;:…‰ƒºYF©£G‘GŠI¦Ïl /ÔDÕy®œR ˜ˆ¨… Ñi?Cés*ã—X€“ϰâ:/‡Gá\obp+é!'YûÔöþ³Ç»OÚ‡»G;¦#S¾°GAÙ:j*•Ûbye„Ä*7€%–x(+³·J£mõ†™Y)¼³ù²r°ÉÐølÖŒCÍÎ97âÁ DlÔ(£‘QH¤†ÑM'çC3u¬|FPY¬ŸŠw6E éBne[QXYQ/·U}ÉIxXb%£>À4¾Ñé%…·ÝË*T& ö¯šX;0¬ýÉØ…§¢z‘O6M´ª¤ÿ=§Âl™iª‚—Æ[ö‘²Û#uL]O}iɽ›œ#NÝ'ºõ²cÄ!ë—ÝÊF^?r3£—ï„Ø•gæhAÝÏﻇÁ9UÈQÔ>TؤÙ‚n²d/.%&Éâ{Á7ë`¦q¼0ùË ß7§3_ Pc‰@Èfæ\y‘jâ§8î$êÒÁ(K]E×ÉË'›å&ÅRè ÍJƒé”U|¡ Û‘©.~Ûµ|å >:W¦ 4E³|Y.Êr³•UV™R0Ë4IAVöÃí³þ¸)¹P;Õó<¥*ÛÛöµ‹ÍÒ¡Œ†ŠqºÐP‹£!G¦ôÏð$“VŽ‚´½ÿüß»O~=j–00¡ý£·?ÇØt¥óÑh°Ñh\^^ÖMäo»õhxÖ(y„x|EyŠ¡—¦}o¾²;ÖÑrFªdðÝèR‹¢"ÕâsSd4ê’U²ÌߎÏùnˆÌfÀçNR°/+ì„Q ~K×§®8>EQïf•2 R*U±A.-·"²xR·»øåNŠ•`tM$\C ]½5ô-5ö-kðS4Á#Ë¢F"Ù_}Н¬®a“îпìsü/iý¨­á‡±˜¬2ÐÒ’È"ÆÄÁvym ƒ7Í™FÒ-@©qaKC]L;tC#›ó œ¢n„l¯µaÁ¸?ŽÇ°2M{J½çµ)þ6Œ)Ç41‡Vr”¡DÜ5]{Žc¯°fÂÃÐGÐàóÔ°q (ØJ1$OÙ"#€ (Ä6n+IcêžÍ%«±ñ¸ÿ0ì’Ù˜á}þœÅ & Àœ‡sxFà°£q|½àúd*¯{“R2ïx ìt•rž‹”¾Œ&Öö{¡7ËÆ‹gȧF²ºl“.|\00<'§€™=DT^¢q²IÑûÐP‡~ŒÐÇ'?…m£vZtœ=a g‰ C^ªr&P±¹® ª®dÝC5¿I_RhP_+_­­Öˆ ÷4Cô,쟌9GáŽõñØKq}–†Z^ÆcäšÑXÚÀ¿R«x¨E¹²ZåÅçá鈡G¼Íº|y :‚=í!gÙœoH_`äáñ0§áf€¦“Øn´©â¯D३vyw„®yHÞ+™’r¸Y‹ æž›nê+„c,có˜OÖbO„ò¨Ï“gRDZ ‹8ãÒL d.Kä-n°2zÎÂTŸRë’FëË’g­Jçø<횤¼¼Ð]rEÒó§]Teáz”9’娊¨Õ(ß‹ãöaûhÿyûð`ûÑîA³Ì‡çXgä§% +Ãó=°r‚ÍE¥QIÿqÕhl|³Ý±ö{Š[ÑáBÛ—Íç)ɨqœˆq#±ü¸? µ%Ù1ÝÁ4®dmÚjYA8¶UûŽåÝ(¾ X3 ò£¹}5Š—Iò†¨¼D»ËW4^·ª=à«ÕrE´ÞÓEƒTF£UÅ\Å9Š´ªô±îÜÜK Qä}rîÜøÃhn«Ñ2 ÏåÆ;¾t7Ðà™ŸÿÄÒRa,į¯N}JÀÕI ãä¨76ÅŸ5‚ýÀœ`Ç ñ±¢´þôÇ«:ôñ§Ÿ’ùÈS&˘².t^˜²ÑxdBדXk%|%©®þ$A6~*U6mp£¬RZ•í åŠüåÅîÞ#\“(xËY yÿðf\0´DÉ&| €ÝjÔo¹ÎDØ’.ƒT3MÉ8ç¥Ðç$®'ŠßñmwE·³°CÆò_b>¥#³ã–’z‡C2«§hØäÆ\Jܬõe]à‰J_¶öÎ5eÆA’H¦™ÇÎÞ;í%ÞÛŒN%WgûpÖé”ÈŒƒ]‚¢¦Ã×þˆ¼óÝšáÌdºã‹‹k‘g©Ö„Ûÿœƒ$„Inƒd¶bÎ{ÑÞÞ¾1óÊyÛ%‡e•à›ôM$¶†ÀÁ íXê4è Õÿ ÷š¥*w}šv²Â6»‰'üôÉ.(Q¥¾3U‹±¡0_6JŽA‡|(ά=—¨ýÅBeÖô̶¬ÎžM§âU·V™Ž‘.S<4´™¹½Ñœ/ô …e«Á^î™]BÀIäHœdº_l?r¡rŠòEE]s•¸Ií9?Â1‚VM"2sÒ”»JBT×o‡(h™äDcÙÈ· -7&- Zï=IÖTF[S›½3kæÓAðŒÊÐ@¨—Ú¸M²ZS<ŒSÉ3b«KûJ;àІf€ÐÊ…Œ=ô`Zžnè+œw…*`Æ—½dФ\e‘eô‚ÉÎçH¶ÃV—е°áƒ‘0£±f™~jŠ‘Pn·EÙÍÙ£þ¦â(gå)o‰¥¼£ÛÁ‚£¼/d?“£¼KÀÉPRï]®ÒìJ!1™v,HÅ4¤‚ SIåÌýÓ/ˆM@ {Ë¢ š¢DNÓÆ“LZ{gMáùZßë6ïn }ÙÕ»A¤LIVw8Ö£}/‘Ûà‹“è,êk3xtNËù´Öè0Aɤ#á|0x› y|d¸kZ¦Úkò;Ú2£Œ¯ßGIðÅÓatÁV‰ÑÙ8Æãÿº,÷kt‰ YCZƒàêº ÞŠ Ö¬I¿i²OtOêDV¦*gòÍ» ¨ÛÛ¨ØüZPI jSZ°HCº%„éÜÕËôêv‡ôÝú7QùPþ¹¤é켕í"Sq®Ê‹ §d§W‡áé­b¶ÖªÁ\¬m6¨Åžµ`ooÊÞæLÒ;°{|Át 1aõT™Æ:Š(—£JͦQ4¥&Ò§›¤;KúÖûN™l´Þ-‚ô×Sºz"«O Éb÷ Õì-«f¥­ çY»Ç¸n)ú‘ vFæÛ†ÀD«0µšÇ-ù͉Þ"ÕL¹ÐT!æ’PHõt_¦ØxŒ&K—*ÅH¼”w9tòH–‰’ˆFjt´V“Ðómí7QûS¾Kú™ ¯¬ê-'` æ/.€L^?o#È2Ù­?ð[rCÌŒ7ôF] ޱ£Ãn€Îj»r$Gëþœ7&³2R–yÊÉ8[ÀIeo!z¥öGÞÞk¤ðHP#΂éÁ¦÷A9Àò-wp´2Jäü:.Vú—ñøÈŠL(%±¡´çy#¸“þ ÑPŠX×5¼î9 Î|``"F±^…¼é¶º¡ÖGeÎÉ0zô“˜(ìÁï! V‘ä1™‹$˜>lƒUŸƒ“MBWY´øŽ7qg[TÌât}¶Sn£ÜتÉ0A”­ªùðêñz• „ùn™ÀÖ"‚å2¡‘Ú àY<ˆ§ÈjÐjò³ã"ºÉ0(Ð:oÙ°rÍ[ øÎâÔõ_vÉôþ½yÊð™W©·$—é+ÿä5Q›*ú©ÑGˆ*9 Ýc"À2¦› ãÎ.ðÞ ”ìC¼Û»CtÄ^÷–HŽQÄ Ž1l—Rªeê´g1e:ÁYÈcM?Úô–x’n åÙÅ~¼F1šXß•WÔ_¯¶VZõúj« ›<¢P_•?={Ð…¾ö²8@GiÃdbÀL I6A±J^¸PhIfÌ…MÓÓï2ãñ)18/Ï·Ðt˜zÇ5˜Þ@ÅMQÛ¨hÀWmpÚ‘ƒ¶ÏÝA¢oÉ µ{]ÇÒ; 1Je(Vtò‘ÅÆ§£ë ó Åï¾õû#ÿ ×"Õ-ÝÅѶH~òíÃáJ9684òÞK2žq¾yJ†Ý•,»FÃmÑžÛµÓòØ¢å}v!ñÿ%ƒ§‘7l%§gÄðœK@œWÙqްzmGWO‹itTÑ"ƒ»"Mêç,Žp.UR¶¾Žá‰yM¹.¬µã%”s¸zó:CB¨ˆCtGN ábNÔKªÅ컚TYÆU-/‚¼~|æm÷Tœ£%ŽMiƒ}öè¤ ¹Ó8–_*bå2èõ€?;þè-Ž\}„û£Ž ø°Ç¸¢kôJFº¹íë³Ë°¿&Ž{‰n¡B2$¤¾‘AÃ`¿Y ëA}M°gdú,èÕ5³ILÇ9øäxxQIñ]ÙÒT"7)¯éwœ&—4?#î†à•µskê~ôœjßâ<Ù”cC¹p\¤cú7sím° ÙJ¦lÂ:÷-rÅ eÞ#O>tZ¢uK,þ8„±qð÷ÛPW-‡ýNo ²Óñ¨FõóÖãݽ±z ÔåÖ-$–’ ¿ãQiM”.KU˜_RÃuÊC»rZÅ•uÚ顲ßÈ.hjuXZÕeÕšv^«ww±7¶â˜'>h0$î)²åk"Q¥°çFy`¡Y·EŽŽ° ÉÖßDy…ž˜‡6<ø<…ú*»`ÎQ­sØCâ’i ¶Øv?ŽYžãú™ÑÕõ"^X¿åë| `Ïy4›5A ÖF%íLÒ…£ÌBYÃp—öKtv¥E-ÃÆuˆùT dPX‹z­‘™cë¸VÃ#Tà¢æói/jøuöm25 Z2¾m–9r‘¹_|ñ8 ]‘«¦•ÌBŶ7˜ój~W?Ÿòd˧Èx<ùO–è'§ç· ©~}.0OH²GdV1ió3ÈIUÛñ^™bHCuŠ"X•¾J„(’ƒ¾4Í`¡XeW®ºqª^6(-ÛÜÀAƒÌ­’D@÷ù_C„â¸ÈySæï7gçÙ` Eˆ'Ï^jÆéùú<Åûí{äí Ëái>‹vº³Ýn«Íx @ÂÓ‚ý=°vp>3}UR¿žyF} ı®éÌOÀsu˜¨‰ÈJÅêlÞÔÍÂ|³ìTt#t6¨œ™žÎdM·AÎu 'ÛÛ&šðU^’U©tÙS~Ç4±´ë9õ‘o°xÐCÛ·Å¢6 l˜ÂL¹ÓiŸÝÄ¡*õ·Ó¾$šÚFÿF<ÒfŠ'­\RhpšÂ2‰vˆTc“ÛOɕ͸ªÌ¶ÓEu@…ô¼“=0I@jÓë-Yã²t7;•=,7%iŸ»|Ö Ê¥U³Šj}wˆŠMÝЊ"ÚÒˆ¡èÖàP㤞'lÏm~4é…¨í?´l»mR’8›˜b6¸Ùåzû iiŠ:RÌb÷p_lÿÏ?']A)(:½ïüÏ?oBñmHt÷Z *_ºmu»?ßÕˆm ÜþŸ¢ÓÁ#2«eØ¿‡¶Qµ­g‡»è"QÚàIYå NÇ}6Û8ŠhÀedÜØØ µJëê×_+â<¸2¼óÂâ ìˆÂÉÈ ì–€½E¦ I4£¡ÿhŒau{×Õ-îhŠÀ®ÓÇà¹#2!!Ç´~,*WxÎ{dÍ«°Ï', ìšt`[ƒù‹÷»2.ÃEà“'¾‚úuÑ€o{LQ :èÒƒ•¯šP êÒ¿&m%@§kÃq°Æj ¢^þpè_CSÿ 9F `4Âdî%ÚgƒçË!†ñdÐÍæÙ•Ñ9taáÑ”Ã*D„æjt~}àÅ€³2ŠO¿CzÀõ¾b€¢‰AÈëbCÔÖažâ,Øýå)ˆn§¶ní¾$4d;f8‚y4èùˆÆ ¿3ŒÄ†Z i>ÀÈÐ팆ã©5àLSdÌåÇûû+WU1jûU¯ówÝöWøÑ¯bÓÑfã1/ÑÓZ‡k0wÆhÆyEk˜öºx‡WVO«œÍ¯n~H>?4?Ë✓>{"Ž©¨^¨k‚éÊÊju29¡e¡ Ï:›ž/o7ŽKGŠ˜A˜aM< SH|~õà5E µ>¯'Ÿ1¹›Ôª!•à ~µ?{~ÿ¬÷¶×Ê[‡‘àÃ8òºhyKµ-àëj[¾¨=jÿúüÅËöáþ‹ƒí$¾ì`b{çåÑÎ3Œ~ØnË`Ãꚞ܈ˆŸ€ªK¼ÓÏÇ:âö&áÌÈÀyVôc¤Œ{ˆ6wö嵜Cny'KvŒÄæe±µÝÞÞÚþu§ýÛÖžTgVE*Ç+ÞOæ0ìd_¤18Ÿá`Õ#ôkÎÚŒ6nmΧ¤6aR^Çw™HÄÀ|mÉBe!G,s¨–‘òÔ¹‰˜ž€«DÃKvþìõ—ÿ̃Fûê<â`©˘"¸’ÏnÊÁ§—©o2‚g9õe6oõKêR–Õ°P“NÀÇÿøÒ¥õÇ ¸ìTâ‡í§ê€íŸš"£›y·Ëî³åú¾b`ÿésؾêrj}Sˆ Kš´•w†|¦ê×p×lwš Çiumú«yW ¾÷|C|ˆ íØ“Œ²Æ" ë úÑ¿ŸïOÌ¿>…SóÆÙÖíÞiì¯eK¦_’7ÕSC"%UuU¿È‘ÑÙ%TZ¸tÇ™vÌñ&¹†pÿ‡}»þÛÎò‘Hô_ - )“¨ƒúK#u²ÃÙH’}®ØíV{[)˜Ù5ÜLë ØÞÛ=<šs~©È±P3í\4ã!k~‚®Ne/Ö›\¤’wÓÒŠN¾‘K”œ§ìÀòri×)KÊ 8ƒU÷ø°Yú¹„ÌÓ;ª|%l®oŠPüÐÏoŠo¾ «L[ßáÜX)‡¨ý+•ªb0D Z‰++ñZ™™>ˆ²e‰ßKÿg-øS9øTÄœ–á¥ÎÔ Ô:Nd®§¸ˆN*¯Ó–ÀU—D³k–#‹9f«?» óa¶¶ôæmKvAçÃŒmÁi;GK2ŠYÉn+œFy î(IMfþ2Ìý$"Y/³`oŠ‚ºMF1•–*ä-éHTN»Ì†â:/yK’pÞž›·gçš 3êÊ“¶ÈLŸÑœéo¦BØ$asØ´xÒ=Õ!Í«”*SZÖK–‡}ñ˜§ÒÎ Ñ'5LΠð7k(ù‹ÞìlB]„lýQjrÎKv2Ûœhúz)€Ky&€0~8w‰OÌa³Ò²÷Û@[/•5ÏPiF­¸Ô˜þØé%sûq t8Û35å‡" ó]ãȘÉÄgæú»ºKb\ÏÉÎËþ>2¦¯£°p±zßÅÄi4ËzÆ¿ ÒÐáÀvÄÛŠíç/êâÅYŽÊQ¯7¨mÄkäé Í/L7X>ÂF(tT†çÛ~'´uMpáÅ  s¸ þ(ºÀ“çèÄü… Ý)ýˆìÄ¿ë|<±§“@Ù ±–¤ŸÝºR&ªèǨBä`¬Xù*0Åó‹çкžËÉ’ [b:ašÚ~ûÏÛ/0ôÛ.dÂ; æŽÅB,\ˆ… ±p!.ÄÂ…X¸ ?X¨®O/¬^JQßrDDÝè 1Ñ[ *š òÅÅ4°[  ÄF'çDÑÑÊ?»ø˜`ý¯"B.¡Ð%:[ÄC54÷®*›ôšt)ÉfȵӮ?ò“´Žß_“—Ëÿ£ŒØÉS×;ÖAê‡nëa͈Zí¬£K¢ç/´#gߘhÒ­.0„}h•ë"”x†A|+Çw½rz4ÃáÞd`ÓI{è5ûmØû½¶*xÛ‚ßä¦.dÂ; Î3L qq!..ÄÅ…¸¸ââB\ü4âbÇöé%Çl¶1%ÎddË‘'³z•!ZæÔ[ eæÎ8 «¸Ù3þ14¿ÐD‰4¯èìÂiæhþUäTú/;r'K)ެm## _Œc'žZÝòh¥¹‘eñÔ?Ã#ÊHà =˜E ýŽGÑÝG÷»] k„ë¸ß âpH`yyŸ\ñAhûyùRñ걔܉ Œäå˽äåKÞL$”Y¶,š³Ÿ¤¡ÝhG¹º²÷{¼^¾Ì ½mFr$¤¡ÓŒÖ—òä9KPé³o¾øïl0>lªðh¡è`s!í_ðßüwÕÛnñ_O,ÂP„¡~ùò–âP›óÁ®€—Ë"à+]ç nŠš™3S)ó”³êãÆ¢Æo·ÚËŸ+s„£ÆÉ䯣æ´O뜑Ú]£6SD@ÊíѸEëÛ¢c\Q kµ eÎe»1es{·š±l³šœÍúf$Θ[Ùñ¬?¹ËêÖ4­1›Ò‡èÛ"¬ufXk5·xBéÀÖêáSÄyÆ=féyéù~Ez¾m¿ÏÆ*˜Ûó³c‚ïgGÄþB½?C/ï¤ÿgû·ìÚžç:#ÛL^ aç0½@ëåZ©¬ÊïÔ£ã ZgPO7òýòå¬î ­Óø„Ý‚Ch€’r m§y’Curf¸…Æ)¿ÐZEøY=CO¹â¬˜Î¡u/>¯{è‰Ý0iDƈf 5:‰¶és¹‰žwŒ>·§ç[ò=ípÝØ[4"®Ð9žÊç/Z©ú]Ñšrº´4Ïk4V”ï6še&Çɳ1SÓŽ£Z“é:zÔ36´eŒ‹1î© ç>Âè…'Ãù/>G—Ø+ŠæA/!q0‰˜ÃvÝtš¢ô4W›@r„:ŠÓ-_iú Nwmé‹7²SäϹÃä \ŸæSÞÈPÉÅM%3iqSiqSé£ÜTJlŽ–}¹w•¤füÞßVÒ b{ èãâ¾Òâ¾ÒÌ÷•,6ìSßSry@çF‹õ9ó^’ÝúÔ}¤üÜ{H)@¦$5Èß;ráÞ7ÊÊ<ážQºˆ}¿H›¹¥‰ Ï×g@ Hœ}é·o²(‘[t9â¶}"@CâÃݲÇe!<,„‡…ðð™…‡üíæ¯+VÐ¥i–\9 @ÁJŽql£¼môǽžxøã×ëÍ™ÉÈ—)˜¶ n•ò,]•­p«”2–_Ð$˜RCàbK«¯e¤Ä+ ôÉ’p…®»'w˜2H.ı…8öÑıÏ$‡å`’W®È5YÖšBȺuéj:±jyjG «|O%•¡S…¶ÂÛl÷ ¦QÜ þ̫٬#œüÑ9^nàéXŠâ¤óÑž´„—%øã\«lŒãa£uü^ã$ì»ãËŒÔò»xØé†Ãø ¸–à #< º)wyôºÞÂ%Aÿޣ۹ɻ÷(ó ïÞ#’x—vo~i—P™3I)ï]¸¼ ,[mörgÉìÛÎ#gâ¤Oꈫœä‡À] #=HͤOyw·Eƒ´gjq¾Uº%W ­w‹%+/£ÁY~nFž’i•éEà‘ªŒ>MáCsÙ.pHî²Ü¨ E³ÈpÇ)[[¨C9ö–ñ—ž<{QC\ú£–s]<ñ¢æšˆú@™"ൻkx«?¸G±– —ÉÁß5út³st;$EãQ]üJÁ“°n1¿]ø=²‡3äÂØ1HkÇ B‘¯Tc‚øQhÕ›Õ àÎÇ£p)MñŠ<9Ià«ç¿†±xYÿ7Ú¼]½þÂkýÿÔIÁ¬[4×­TüØëëÿ(ö:žWjг3UTJ>l¯ÿDڶ߇qóGAwþÛ㵄º¢¦§.ýñ"ì|…¢ñøftNÉܺ`©Bai™Cþ©½«\ܤ:úz ‹g ß¯ÔþùšþYmÕoøÒøª b}µµr›P[Õúj£µÞØü³rìYʃ‚~6±V43¿“†‹ˆRA®¦ÀÉ}wÇêö†çÞŒHýÁÝ“ Ã=ÂüÁý¬è¾Wþ|8ž­÷ “ —Y{n.w 1šÏ=°Y /bËÍíè„s›¼‘sùŸœ¡3˜¬ôü¿Kcõ ¶Ü;7"Y4é3ÉÇÙrï æïîom˽“þl8¾É–{G1©÷ܬÝZØ^W†`™š‚„oø@r6øŸpë­¶ê!‡5OxRxzX„§oxRxú¶Oß-ð¤ðô]ž¾_àIáéû"<ý}'…§¿#žrUÎÉŽW´kg`)Ù[¿ 4eow KX*Øì–¾]`©`«SXún¥‚Naéû– ¶9…¥¿/°dor“NwÑð:±Ì™¢@‰®Y\ †Yâ­’K¢ôc³T c㺠ßßxÿ>SGî¶»‘èzÛm7Z–×ø¤{ó¶ÅóÛo¼F'#þáE|Aã“îÝQÄ;ñßÞYÄ4>éÞEüw“ÿÝE|Aã“îÝQÄ?ñßßYÄ4>éÞEüß'#þïwñOºwSÄÛæéÓtÀ¹Ì>EEh9EÖÄ„®9]K<÷žVÑ‘ýlÍžµ-I~±¢U&´¨ªÃðÞèžÞäÝß›®´c9Õ4Ï».–*!爼ٗ™'g ŒÑÕÎÞ&ŸGÃq@í1cj5ƒc‡ä·B޾̭†/^.e]€LçÎvYnäÔ-wa+ÕÊ<—/Ò)Ìbÿ^ÿçú\ö´XpN“Ú¿·ÿ¹¾°ª]ÕÞã¬;aD¸0ª]ÕÞ ÌßÜÿ%Œj?Ž(nÝ_ÄF‘Û×/Êô6‡ka zW†eaú©Ñÿ×° ]Ø1',ì§ÇÓÂŽqaÇx›xZØ1.ìoO ;Æ…ãÂŽñlu ;Æi6º…ã4ÛÜÂŽ1g“›âHm&SFYæX3ªÖÏjs1}>¶M£êÁÌ&/3ÂG³lütƒð±ì?Ý |4+ÇO7ËÖñÓ ÂG³xütƒð±ì?Ý |4ëÇO7ËòÓ ÂG³„ütƒð±ì!ÝA˜É$RuczóB£º) #S†P“íU“>’yäü-º[F’©FÍj'™ `6SI½>¿µä-JJO»3.fµJ´ÐN·­™íEè¤CI´Ê+ÛOað…êý !€9þ¯â¨n” 4¶¿t¤&É"¤Å"¤ ë"¤Å}q¿i±i±i±iq·¨Ò"¤Å"¤Å"¤Ey7±0{¯e‹GÅ’EA¿íÈÝ÷®ó*<áG.ýf"–Å6nƒØX°!#˜ ƒNtÖÿ 3©Ÿ£%€ÞQø¶íó°sNAN‚  _€òKxX§ð 7>úuǽ ® ñ¢™Fã¾? z×k´]qÄU±Xñ®`æ‡'½k .Âè'qZóçjE€,‡N@Ýy``’h|vN 5°nðÚÑý1—êP4ÁF´†ìI?€¾Accø8f¥;H*I‚&üÓ@Çx-#è¦Wv¼4îë*U âXÖX)A›†q°&lzíwûxê‡=\ñ ÖE4 ,À£H EÙ‰§º ÄÅ8Æ]6~WÄÈa™8¨Ä ‰ãÑ`<âí¹/üN…a#êŸõœ„ÞÁçºoª° ÓÁd R:8÷žiF)î—âÌjsÉvôæVØ/^Ñ?«ö˜ú6ªô矓@àâoË«[;eÐâÁÀ[üòeaäâ—/9t±ŒŸÌ_® f Î=™™>ˆ²eñyx:²EåeQ þÄ8â&õ'¹õ±Î$.•×q p=ÅEtRy4º\µ!f×lDž­þì‚·ÙÚÒ›·-Ù3¶EE»ž±%Ŭd·ÎÊ£<‰µTFLðk˜÷BÍ|§‹IÁŒØß©‚ºMF17Æ·.ä-éˆð%·efSqý—¼%!¾ä6ÆlÊ‹ãKvõIkd¦Ž?"J× Nãú¹¨‰~homïì??ºÐk¬ŠX${ù5σåé]ø@iV@@ÌoÂÌ Àð{<†ˆ3 ö‰ìŒ†×D …ÇlŒ8ɶța)RüµS¯RB–1Ê›q܉ÁÙ*$i½ø5¦T­R‹7äV)gKn±ªmxÝ*¡ì+eЂ!¿Tú÷¼qÅ#4Ž›åŸ¼©%ßVù'˜Öe]Xɹ¼Lt2äy@Â÷‡¬ã&óîGr ÿ^ *  KÖ@F'ÿÁÍŒO‡3öÄÔ¨/émÔš:±c¡Sjï•ì ªMIs(]OzgŠK©+ùÖs¿á¤¶&±RSGaðEÌÄ6ó3sÛ¹ŒÄ­²aotE£ ¿1JMÑ+ƒäM–»–4À^ `)œ ŒŸÎ%‘ÓËàrÓ'÷Ý@]/•µÏPqN͸­Ógã[)Ã#‹ÙhØ×ŠÀò!ðDÂø›ì¦V6Ð"ótN’WÌi]˜ÿ«&ˆ¤ÅgÜ5…å{ªƒx¾÷xç©4Jˆ,ÝCÄJã0Æn¢,ÇáH³|Ž[w0ìû=­8€Ž ¦Œcã9…_nß ÂoªÀÔÂ/•œ[ò]H«ŸCZý½·&‡|í4ŠNüáBH]© !u!¤Þ!5C»cØBÔúì¢ÖíËZ·+lÝDڢݙís>*丢X~ž[ 7©vÍärÅ$nðmJ?q²è£³ÍeðQùæ%sM/XÜ‹»`q,î‚Å]°¸ wÁâ.XÜûÌâÊ­ýó0¹ÎEžœìùs.QíC†/C­_q¸Ó>ܶõtgÚklŒŠgXQœRòž¢{˜ nŠx< ‹Y03Q?Æ» =yù29Ö-—ëøRyfÀH}™KÖ±ë>l9ÓÉ<§=3@Xzqj0•HU,7%ìÊqéÇâ,|ôë&±çlmkΖCä9CÙ-±©7Në2 ›­”‚–|S• $ž·ãÝ )‘•²½ @7hFÝø„Þ@c¨™‰êÆœRÓã·m«ŽÊ¶¤m ûô»©-¡….t¡ ]èBºÐ….t¡ ½«ºÐ/Õ²:áZ?ƒqµÉfØW'¼rž ž´>ÓÊÚ‚_hhmÆß oEZ5áN”XÝÌS]ÛE¦°».{*Òj?[Å÷ÀgV°Ûb|šO¾Ê-8­ˆÕ>²”e¶p!hÝQA«x²ÖBÖZÈZ Yk!k-d­…¬õie-“?ûâ–ÃfðøfŽ\¡ËêF¦ÜåVT(z¹àФ¯lÀ·"€9 'Ê`ù§ÃR¥lIÌðp ÏÌÎ:µ½OEýx©™‘³øÜì¬ÓV§>93ÊŸ3NÏŒ¯…çg&”Ô ÚÜ2›‰¡YD¶¼rÓJlFo>ŠÀf´o!¯ÝQy­pŒâÚB\[ˆk qm!®-ĵ…¸öiÅ5“%ý ÒšÍfk&+œ'\™}ÈÕœZ %5X‘ – öVä4òD1-} )Í-4Ïq™5:{xÌð°¬þd»}¸³}´»ÿl²ýçT‚kÏž5¿Û…1Žkþ¥? &°%ŠY*ЖÚT`j6£l±`›Q CÀÍÈU(èfA½=7 £³¾“ÊO+gôò£Âí]ÄwT žj¬‚ñB0^Æ Áx!/ã…`üiã,Vö3ÈÙ¼c†(–ÅJçɸY}Ëœsj/ s€ Ò…ÕÜŠ@]ÃDÁ:¿Øv^áyíÌѽ§÷ôª)lY¶:#ñl=š‡ìôÿú'é $²Ëa2[ÔqtœjÏ¿{¯ Œ-„®ÃzqpÆýxR<:ÑuÈ­SHŸ£qŒXFÛƒ(íœ /‹•8¼â†ã‹øâèTl¶wžîµy±»÷¨ýü`ÿùÎÁÑ¿«‰ä^ ¶8¬â;»Ø‡¡ßÂ2W”ÅlPw2è"õí„\dX™ùSSçY[ôy÷œ?Ø¢FiÎÄ¥üw!ò¢lh9Õv¯pö̾!©¹ål8IòGŽ·è~MuØ«0#Ñ1BÍOî0ý1q›_ h‘…{'ÿ‚.ݘ.Ùè½kÄÈ^x9ÍÎ {sòdO´Ì°°ŸŠTe}UUÛ_Õ0n,¢¿fE5瑞<4%®,*cï4Yr‰ú~OE)=Êi©Ž03ðGçÈÅ 8W*ŽHf>ö½‡´Úƒ?nŒãa£uü^ã$ì»ãËŒÔò»xØâó¿•¼¥àмœývŽÙ '¼ûeØGÙ’H”<§,Hl¨eÿfaß3@ÝI†à÷Ýgvo‡À2Ùù­™äZlþ7Þü¤æÌÞ;è––Ó­÷ŠçÐì;¿ž`Î.e¤ôPð"£KI,x‰,W‚É\?#=Êê{>©£Y8‘ÌÝ„®ÝYBf¡ê6E›"¢f[bAànIº±|·èš³Bóšž%âÜ¥sæ[¦ó)©^^ʧ"‘¦"Õ–ˆôÐ/$¢,‰ÈšxÉl£é›'ð(LßW‰[dŠ ¿¹ÇÙç»ÑÕõ¬Œ¿ð>ÿhÿ忟ì<»^ËÜÛå·f’k±Ÿßx?OzçvrÕ´rº¹^ñ¤™}ßÖ3ÊÙ5ŒôO¸WëZ]:kóPyïóæ!ûðÅoó(ͺÑh¡0+ÞŽnkï9ÊÙwŽšüu±ßÜÂ~st”cØJ{Û9r·œ£›m7G[ÍÑ'W„Q“”`©u1¢QÄôlrõf†5znSá•G˜’±0s.ˆÔ-)¹4bïm2V`V“³[7¤VÆÜÊTh}*ʕխ)Y”ÍVbÑÐ.XY ,=±x6*®³÷[î8úâeg†¾‡»oÿò&}´ór÷á£ßvogVÐ2·hõ±iä[lÐ7Þ  ´Þ¹ýY·­œÑ`oÂÔ™}sN¦•³_˜>áÖœT;…òJg¾Ï»ˆêÄ_r+tOÿò[ÉóGoq+hù[ |lù[Éíl%ŒÖ»¹•`ÛR[ $fl%ÖÔ™s+¡i•µ•ÈŸz+¡j§ÝJ0ó½ßJ µ­’Á_ÚX؇ç·d$G ²2ðKSåXì7?̽s7¬ì6Õ+š(sœbð6|‹ãƇÖ;·uè¶•3ìM˜:³o É´r¶óÃ'ÜD’j§ØFtæû¼‘¨NüÕ¶’°ü^ﯼ“ì>;<ÚÚÛ»DËÜGä·f’k±‹ÜxIzç6Õ´rº¹^ñ¤™}Ñ3ÊÙ@ŒôO¸èZ§Ø>TÞûº{ÈöOØ8–Å“g/6Äaà;ç´¶zá ª =E_Àgê=û@lïµiHo¨=5 M§<5 À(oŸEuš£7]hLoGcjö}R˜š-/g÷ÈÞôÍ™|ƒ-ßZΦã|ûτޞ¶4·Û“”¥FÁ›éJMBV *ÍÏö¥hJ?º6ÔÕsšco°3YÏŠýðî©Å³l±ÅsVÇmîë¾vßêųïÙÉÊyt ¼70á?B 6‡ 3І×%·L †­ >z½öÅÈ>?ÿäBjVè§‚ÝŸ}ãHKm™9¨8ØOÿõh÷ ™Î$w‚[‚`ž1¡‚SL{p5Q¢6u ñnð¶Ñ÷zr—_’‹Ñ­]'«€ÜјôÏ$0+–x9vE½mx5àÛ-Mšö`ò´á‰GáhÌn<„ÁhÁ4&~«µ&NW“_ꂜñ-o©7* ®T€ùÆ]—¬ƒ6v¹3lû½þøâ5ÍG7­Ë²Öñ¡Ñj­7ÐÃJcP’Õ$Óê?w/é7L ŽCÚÙ®ÅóýÃÝ—„ŒnDxJpât¢Ôøcš¶6Íféq—CÉóªôBR glü‘lô»œû^/+]lÏL@þh½@¼¼z÷á5`§Zn(~¤µn²âý{ñuCAÕ¤à @/o¶~%6 @Eü˜0$È|vÃST¤Ñ{‰cI$ KÂäѬUÜϦp#/m†*M¡˜|Õ„ uÓSS¯ñ ëÓ¦Æí´ gS©âßü ×îÈ쾑Ë<Ü™º™Ä©ŠÇ}ÜÓˆ4NÝê™p'X÷0¼@i2ÒØl€yÚoÃ^ŠšöŸDI®Úå'‰:%Ù©’ø>OÀ'†øÞ öä{0»fƒ%ûßó¿œçÅA0ì}Oÿþ•íRžïÜ’9 BÊ´BÁMù}asrc›‰Î;gjBí*; õ ¦ÈìêžBÎf©?¡õW9…‡Êx_·lübSXl ‹Ma±),6…ù6…a6z;§õÎÈ£àbÐYí(ŠzoÂÑ„•ïä.>BÚ×ÞdýÏd¸@ÛLíiEµR<¬¯¯W E%ll<ïÏ`áÕñ mÑ0GùÏeê`c˜6<ë0UéGrýÌ{$¦ 圆™ŸÙhâKÛÈG¨¹ø«îá8GG;75Ž$Ó™ERVŒV„¿ŸÚò/°É›8.*|v~Ë‘Û\v{áÄø¢Is“_<ëÜè^*õS†öâ:6@ßÛvè¯ ‚й³‘¡ˆl:(eº¯’%Ó•BÑRÑ-×nñÏ[‚Q0¼€¡VÖ£ëAp˵xÆA Þ™hwc&¢ü÷j7|ýêÛÚ?_ÿÏßWß¿zy…¿UDÊܼúŸ¿'§B ¢Ë`8è8™dª™1†ý×ÍFif¦‹p;y0ÉÌâ÷羓‡Ò0Ó’?¼p¿ /ÌâÎ× öª0sµûÑðÂï…ÿþ¡tl3,*O æ/QÑ!¼ Žó¦¿UÆ€{—ËÖÁ“£úóƒýíÃÃý ‡f£ØDl¥âNÍ(6g&,Œ³ËÕ÷ë³Ë°¯OaùOAŒšáÛ‡gNfžSÿ"ì]cžnt[YŒiÒõ‡\ þ%#¾Ü Nq¶ÛÛ[¿ì?;ÜñìQ»-««’<À„,qýÜSäi¿ û 2JíóÀïCyë*0N®JÛþð$ê7ø§~)¼)Éœ®~ðscƒž·3°Õ`ع–_¾)®J¥»Lø¹ð;Q|åðÿææÿýZÙÎ$\f|>γVCV¬v5óTÙRFêŠõÄÏí+ë¼Zmk¥2ÄtÄÈ\ò¯ÚŽq¿\ñãx \ù#šAUwÎÉ’Xp§±ý±˜×ëŤ1tVçò–œ…5î‡F¢³ÆŸúýÃÆËJÖšÚ>l?ßÛ:z¼ð´ýtk{ÿðeæ²ò–æ›Kû'ÿ :£ðmPÛV‹f8a^e™  @3:ùO熖Ëšðo—n$m+Pyâ¶ù§aζee¾¯ûž)ïÿò¿ÛÅûÔÍçØ7ßÌ1ËŒBSγ««ÛšiWW8×^¾¼Évu5iºqŽ©'d¿ïSF·pÒ9Û­$³6=5‰¬T.¹íNXL†€sCRô¯¿¦=Fe³ï€+š•«Ö^ãQð6èE 6ý+n¹þ þݸwß8¦áÍ-¿×> ûþ𺠄ۇ9âp¹Ù˜½À;/ϲZE‚P,t-‚j ƒ¸`1NQÚZ•ØÆe±M&Úªl­ôQ#SÓekÜ?qéÇdàݯ›Ë™s§°‘³¨97NúrNÁÍ,ܪÜP°`èÂ@Þ°hfa.ÊàBÍ¢ Yy2îAdæ´9•lÞâųÝßv·öÚ¿ì>Û:ø·Xw9‹¥íÇ{[O0´0?ˆZ‚ø0ŠFbµ ^aêÒb ¤•&~5Ь~ R3?@,.A]/_êÚäãG­oN>‰Úï½µTØ O°Îµ‰uæ@FjÃb†A”ƒà•2‰ÿGDÄ}ÝCöŸ>ßÝÛ9¨Ë©ùM!÷²@éL(ýæ›y‘z;Kè¾#po ô9ÌŠ¥‘³¾,‹˜x×£sÜ’q·¢kh$0wikÄ à~ðZþÖ0QÝ‚Å@e}·V£Q¤4”Qv~ÔI-IíQu’ûûî³ofбiß•™"s)CþvdêßQÛE[U'–°KÛ´8[¾½¦áY-sЛUª=îd+YíÊgU·ºuÜÛU'®ûl¢gÂÇýGFýLé­½ÝÿÛy4É,ð¶mX@I>¾îü+<œfû" Ál]í‹o½âgÉë`Tÿ˜ÝÂÃåaPˆÛ‰A·}(•–¢H¡ +(Ù(Gt"½­Ì’#/a’–̼›‰uè²øÅï¼¹ô‡]Ò»ø£ðDáÑõ†8:ÑYÖ†j ô]5ZËþ5tÏò[=mTEU'¥;Eô—Y³%§*½™†—ŽÍ050”ÈçÁNIT ô£D²ZZÆûÒÎðÐí\ºw‹Ö(€V7qú—•oºT »Á²•ð9„‚½8Â÷°»Éù.ÃЇgýˆ¾öì2uSßj´Òåá¾2à6u”Ö'yÞ]>X‹rt„7Éã@tJ†#¼6®ëItQ‘¼~ãÆçÿz²½ÿìñî¶>jný¶#MJƼÙÞ´I“´[23å¹Ó*ñž Õ¶¹Þ¶®¶½ŽÛxp›%à :ؼ9cê›aUø=Œ¦CÙ 2LÙj A. y³W¦¬»ìoo¶Í6Ão6³g›Õ‹½˜Ñ“è¸VC°é•s'Á¼î’q :ŸfÚ¼òT¨›N2[­$ùæVG“Zq„ó¬øƒf½/Àdeø‡®1Wè{ááÏ¢Ö‰“‘b‘Y'«+GØM* ˆy£ŠF:›TjbÆ,hÚ/C ,Ff>ÔÀ•ƒ öY¬´˜«++]_¯e)F GúºgÏú,|… ¥¿Aœ[¢¬‘ñ´2[È–ŽxeIé¨@úI`dÊ??ßù‡sf“4Ü":iFQ‡G sÌ(édt>ÌÖ–Þ¼mÉ.è|˜±-8WçhIF1+9%ùÙ ‹òðä-Û© %^Z,ç—ÓŤ`oŠ‚ºMF1•–*d9˜qZf6—·åÆiŒÙ:•HA³dWŸ´FfRáêØ§€¨‰~à`°uؤo^cÙë¨:ó–¥” ~P·õÆao}7Ž ôÁ¸ß†õó=XÅÞ…ôf¥ê½ó¶ƒwcãr¾ñWe0øÃúpÜ_©âÉþ7 0®$L&ïƒ V ³Æg¯@TGÃk¢æBûêÌò},uØFp»aq kõ9:ù’uÖ8eì)YúnUeJ½Í¶Õ’Ó‘û<<¨‰à ;}Tï 3öVÒ&jl¡Eûç6oŸ3ožÛ¹{ç­îœÎ¾iÿ"tëoSk{•ZlS{JHÌôR{7…Húw^²rg‚f±al —JV);ÊÊÚs³öò³bÊVìS#£a7¶Îc^õÁ‘a®Ù[å–—Ì•¹`oì킽]°· övÁÞ.ØÛ{»`o¿DöV²ŸŽÁ;™dtÝðæ4_!P)î³0–ýMžð ¼q‡¼ÍàE)å/(ÛKÒD‡?Åã£÷RÛ •㞨dá4 ûV³¢6 ƒüVtûMU„.¿Æ§§a' ú£Þ5ÞC…‡â{«Åe§=hsöÅAÀ½”ä±ÖÏ?§N¼òÒB^ZÈKŸW^Jm òë,rTF/1Y¾Ê(Ž‡ÙŸDêúe§(E=ÇÛ[Aï…ñ((¾rˈ“MqRGþp„ŸW,D±…(ö‰D±Üu|ë"Zîj¿UÑ-‡(Ì/ÐI¦1O®ã¯³ˆw²Ä Rž*1½°§}‹Gí,>=Cô0òÝì€ãÓ‰ ‹cs¿`îÌý‚¹_0÷ æ~ÁÜ/˜ûso˜û[:Й—½Ÿt¼#óç/L<»0f{‘cnÛ,çý ?$o±Ô·~ÛÚÝÛúeogBTáŒîç-ì{I_o!·‘&÷O{SàÉõ_›KØ2ÏMmJV˜Å8aEøãÅ”Ú^#Õ‡¿ˆ•íÃê§Š)†“Ч‹$s©ŒK–癤غD®‘ÜðJ¹m®±ÿ™â¦K/ŒSö@æÞÛÿ><ÚÚ“çÒ8™µJùIÆMË u܉©!…Ž9ÏÔa9û¦šõVªÆ&´èpÐ Ùå×£Ã݃G5 /»»ÿŒ£/ᇠÿ?èi Ä…‹°OÒÇ´è/N‚!À@Î ØÜþ(®{€ù½Ý âÝ}®××= À†í?n´µòêAퟯéŸÕVµUwꫵÀäœ$A*ŲUO£µÞ([€°ózˆ€ «GÃk ¡y6ü>à×`ÊÀ cÚD(@GDlB<Ìù½,öûâiØòûšš+€ïkä G(X!þê‰Å+ëêïùo£a¼A€<=ü÷!å‹× è M'×ÂñÀ¶†A?)Üe*·…*›•º8Q0 Jƒmà¾Qœâ)ˆ~U˜«¹.…±ôþ7y›ƒqF…ÏÕ×âÑuc~€ÑFç ¼^‡A¯C“úq³Ub>-ÆvÄ:ã(Åã“8øsLšÌºØÉxgøQ£ÒkaÌÞâØ›ˆŒÜȾóøæÄÙ¥BõâÚñd×Ú´¾#Z.±Ú—¬qSÅ\2ÿtN9óJWeTÊ÷3ÍîZTMRI2¯[+õVu£ÑjÁÿiq¸@ô„íAV­ÌsT/纳{Óô×9¨ƒkº邺þt2ùýý:¥g»äÆ’ÇÔJ7ã©Zÿov×RÓÂuphÎN»ÆA>!´Iýú ,I‡ˆí)Ð\ ×±¦—Ø¢'¨„ƒýêz 7¯à ½´*Ü\ø#Œ¬“£¾`hKsÈ.üs@F×”®F—$Ï¡"£Ókʃh§ÅÄ;ØÌ„Q9n¶çP±ÜÈ™, žiÅÿކÝ`8q¤hÔiTøg}š±Ñ…Ö×Ô`Ïd'xÿé<Ÿ-n¥^vÙŽ’—ÁµÃ¸=îs“lÃ!RÅßÄÃcƒõ-†Búþu‹Åx”î¡Â êä»Î­ÿ±~Ì+¼¸ã*Ud`ãº4¡Šo?~o£ ÉPçlͳz+Mùc†Rñ€0óÔguuË!·7IÙÛ/ÛÿFXXemVÞ‚ZÌÄ»`LF~:0ŒÜ‹©y啸µâ%‚ÓRût[Â}—nù‡¶›Š ùp\ªºœ‘QÏ,D6ÀËKÙ¼ƒ[™9V¦¬½y©(ÿ´l„ÁD8,ÄljÀ ¤®š5 n'C6ì;ér\Íi_´¿¿wÓÀ iˆSFgHl–²À}rwãùó_}úò‘gÎ}òEžÕƒrq3µ0ÖT¼Id‡¬™í†wÈÎóc<á@:ÖÎÂsr'…|¸=}Ÿ(r.o'ļÔ9lKù ”úó…¸÷ôº€šLÓÛÌ(·KÁ æ}v<‰ÏAͳ‚JdµÃ‰,‘5}á%2ÃKäÌМiišÈ#§EÛ­3ªXÛ°ŒÖÒä3¿s½ Ðõú>ñʼn? j¸‰‡R6#0¡š)§Ý®dv'wþ…,6ýÿåoã÷_\÷Tຑˆu'IëB¨ZÜ…ä´œ’Ó_^r²ŒG§:§g9¬/_5Áóܰ׃…™ìúl—mÞj ú¸wBV¿ÛëÈÃ{ô_N Ã$’Í(ýNƨ.¶° ZΡ‰:#%δÄòs]¶ ‚UÓl‚l¸^|=¸¨d±?! p&‹·©¸>]‡ÿEoÚ~æZ¤Ì¿EçÕê#è&¥s\„ýIY]‰¾*‚QœCƒh#UŸ GfÃ?µç–§è$nŽÓàâ¸T†É^µš}$^i˜&¶õ¼—ÆWÝ͸Q_µ-rs³£­.ÑoþY9ö¬éI ¥ÝÞDÀDÔ ,ñNL5 D¤&em œÕwd¦@ü½Æuýc;5ñ‹®Dø„ÕÍ@¯>Ód/nÞ4èwèC!þ]ZR4ýJÏöO‹ú›Ìð{`=Ås×´·½®ì–ò7Ñdå~ \E ëÃmLùôŒŒ;82•ãâÎ=¼¿{8±sßÞßÎ}‹+f“’‰9q½åu-Y wdVª®=¼§]+˜“ªkßÞÓ®é9–¤ÖÕŒi •ȵ‘y²’ÍÛH].‰ÒÍÒ¤ýóqÚÙ{Äû÷ù\¡Ó“~D›ÄGëÑÌÂî$½¾IoxgüˆÝQûÊ”ƒóð~ Τî$½¾ƒó픃óíýœIÝIz}ƒã¹·Î¦ê’ã¯jÊ å¬Ù47Íé[•º%6Q0½ó4,)#V”p3MóªZÙ8¯W‘š–ãodFŽ¢nê%’áh¤ ”œNêÎanÆ¢!2fwn¢ú+nC?š¢ t Eƒ7\Ë›7ªàS zá ÞQn–Ì›ˆ¡7ŒLï<3xÞq‰„ä¬ _k’ü·~Ø#‡Úÿ—ÌtÌ®oÌ—“3'_õPzpy×?C[e?Nò³K’æñ»éUÔ­R a·xçêŠ=‘´ ðx'ÏÊVt3tN#cU<äl~§ c1ÇÍòOÞÔGv­òO0Âe]XÐñÐÉç¶(÷Zvþ¸*,‘¿®yqDC;?¦¸{…›ÝgÛ{/í´íÌ"餶'"ÊÈ{Ñ¥ý"ÉI•C ŒðÏÑîö£çfnlOØ©uƒ™õùÁÎãÝ—sƒ6 Lc?Ý,ï¼ÜÙ¾)6ðÜ¿%Æ÷{ƒ<=¼)b褹3f†;šLCZòúkïÞ «a¹ž28‹GƒtÉ‚iMvÉv哿Ðn=*}|øè_xG~c#f9@¶ ŸK® »¿ˆDsŸœU—mŽð短µ°pd½pd½pd}ÇYß¿¨žq|Ã'ô4MëÛü4…½äÁr>Ó9:ñ!qº¿ùÃí^à÷ǃÇÏ27ÏÕ˜cH~e6E m%kG+-¼T/¼T/¢ÎÍæð,ÏÒFúDŸÒfÞIÞ¤­¼“üH›»qxXŽ&×Éqã0__ƒYð× þzÁ_/øë½à¯üõ‚¿^ð×7ã¯o¡e>;;*‹‘ӟׅtˆˆ Äå|”a!–Ü“¼Scf§ŽiœÝtÉW¶‰pNìÙÂ=ö·S‰ÀØIæi­ýE Ù‰æ9šýÅ:IâO0v@ÖãðŸDÉ[]]u$“N4îué’âI ¯Ü¢ãu„•¾WÄÑy z>áPû' –ß»ô¯c¡OJÅé0ºç£Ñ`£Ñ¸¼¼¬›6ßvëÑð¬Añ’ÞV£Ã{vMÅ9\„º!qüo·šó¥nîŽìþz{6ã·á0ê³^R“0NI0ì]×½R²©‰ïijt2B»¤†ûþFoážLù§r:ß{T¨Ès#bÛ–Eï+¦ |T„† ¹ûþ!aš¨FEH0H÷½Ç…Ñ—ùb›ÒÜ{œØÝ™-‰½Ð½GIÒ•ùÑa°0÷F_æGˆÉ¹Ý{Œ˜)FÉ'ŠÞ¶Óa’=ÿ˜Ê•í½[â–1¶ýèþäÎ^]*›0~·‹G¾GÁ(^€ŠýôÆga_\#¿öaL/üÅ8'¡¤‡àâ$袣n8 :£Þ5ûá‚î"êRà˜/©¢ÁÚll˜!ýnÍïámåz'–5ž†P¨.0pØ‹~x…ÁX¸&:܉É×ÈÅ Æçù&ôŸ'§]qyvÎEÇC #ž<߃O ƒ…¡^@ÆÁˆ,€Éÿ@s” †œÃ@‘52rν¶‘ºF¡HnA)ÎÇ€\I !â†LÛ@œãN`Ô±npꃴo„òZ£j0<{õÁ®r/ÈÿJ6än3褪¥.VvûÂï_S¤˜‚ÓÞ·ÐGšåK•…&Œ:!åºå$nŸüZÒŠh€Ó ~ËëWò—¬é›ýüó<ºÄŽ9HÞ6ú1‚©Û â8–³N?)6ßá¸Qò"êðÖ áýçáâ… ¯ëŽ/¢çÏ ]™¢½KÁK3å,ÐÊ‘vG×[ž?ŸÛJÿ€‚Ec\ªŽ#«…—u)0Ê/Ϋv+ÈRÇ`rì”Ôƒ¨†~7Äùî÷j0%áK¨MÕ™$Wî Ϩž?õ±QÒ\òýKµQ&=Ë¡ž‹ ,‹ùOœ~Ö*R@VËÀ b^šgù;T‘ q¬Ï0@+•—®ôN‡A|ΰjjþ¡çÄ7$pY<§ðSâ‡^xŽâúùˆ‘ü(Äß`\ÚÀ1?Ún·‘>€ùÙ…zCù³l%:.£R‚º¢èä„KV.ëÝçÉø,xy´&:Ä-LÐXÆ*#Š4ŒÆgç:x–­Äbà¡ikÕdÿ£÷.™Ffóáuä_ Ò³•°Ñ@\‰Xw(๴BWfØ[9^ÂW%XDúPIcÆ[¦Ii|Ò†O€ So‰Y³ñé!:‚^f%aš~Fo‚þ†8õÃ:ïÀ$„è—m0Õ=Œ³öÇyZ”uP¦xàþµÆó!Ç~Ÿ¤áöü èLÇ ÷Ú‡}§*y&ÇCºçìwÑÁŠD¨Ô­ ˆFr§m4‘= FM\ÆãÒKA± ²ñ©ñÿÇhM„Û'´f¼M 6<}T6ëH?Ø¿H:Šc‚UYÐ5äóŸìo·wïìîÀréàñ$/?@ê‘ã7á`€Ñ未ÂC¬PV¶º‘uò—ýIhò&|'èÕþl·§ Íe£D[’ë%—Óh³[è^èþò tbr95¥é½D¯uLP/»• c¶‘`ŽÅ.lUå‘ëêc·u‰ó‡‡?~½~Œ®«W¡¬ëí^!Â*›1á667=]½7ØÓúÁúÃo¿ûþïÿøŸŠK a'o —çÈBâ:­•Éy3 Œ.¤öáâ­°S…[ Àä‚í÷—ðì]EüøcF¦2Î^®Ðc –0ziá0ÛÕZEü`1;G%ƒÄ·L Þ‚I OO…“Ù•”Ä‘´‹óä‘ß.«¡ÁpÁ´ªÔPaŸo°-§tîÚÙˆ£ò$c~á_Õ˜ù‰Áb¨½¶ÿÔŽ&40UOÆ#ñ&€UÚ‹"MR}`²F#Œ„ cÈN˜vKÒÔ-åµÏ`ËbýÁêÊÃ?ÖTa3¾£½W+)¸ˆy+’Þ6 i#•ÊèùúD•¨”ï\ö¤/Ì™'ŒñæÐ)?ê²'åô:Òu‰oMy²0Ž€³78X,£äò#}òU 8¶5ÒŽ:ÏàæLCÊm[&Óá»; ´oÍïcÉíYFØ÷;íÆ"™MÖ÷¹ŠQ5e  “‘=ɲæÂgì|,Fcg6N#ø¨¬+ïWJ1?ïeßT xŽ›éØIs;7c;¶žîŠmSíO`B2J³$œ³ºDY»E-)´¤ž*ÚLó‡gnšºº–¤ö"Ÿ«Î5oŠûg¬zeíS¦ú5…/Ó•eú#ß™åŠZZ¿j‘M ¼y„¶æÃqÿP|W¿ 1°¦Õ :=Zp\¬®70ô‡×xÓåÖõÜÉÈX^ Ðz‹Ç`êk‰=ƒ‰÷8á˜)As;çÃÔ^”ÒôNÂ=×´j•𥻇ÛâaýAý¡Ps2R„"Aot:Høw‡áUí;@î÷â,!Nû5¢]Ñõfªg„bÜïá16«ùÀK×=ÓzƉΖ¾\µñQHµ1E¡4Õ‚‘Y©ˆŠøZ<¸zðøqïÓÃÓÃU`ÀùÈæÖÞþï;+ªX©ø¼ŒÏ°Gã¼Uþ[1²í¿xþ\f7Šþ$*[`¼Vð¥&PUl „ª>âK××âý•œzÊÎBþ®W*ÿÉÊ6Le‹sz1M7¨ïKß=0z@'‘Þ²,ürÿ`ÖÚ)”]Y ¨–¯VN«Uªý+™‚ U‡ú 4Ì!îìÿ€ý†À??üvÅð›oªŠK]Z GÜ‹.Ñb7¬®)ÔáKÕ[‚ÊFÑx0à¯è™OvŠ¿3ÿ%7š‡Óm:h«–‚:ÅβZ—Ì0¨ëÙ¼*Î.¢>2‡âä„~2NoðVtáVtøéI*tnÀ`ýÉá°œ÷2ÖÀÔä¡Óð_w¶í Œ‰ðc²¼¥18ìì¾ß׿)ã:nà2çÓ˜@ôRǺ¼•÷ÂŽÖ•…d¹Ð®W…ÜøŒN)ñQm"zƒ†  U æç%eT¥B<,ZÂs¼2;clÐ_©ÖæqÒc 5eÝ0t BšÀ×ù±§æ1*wŠûáÁPh€uò£¤€q[Ôzä$žv&ªVéªUvJ¶('Y›&â@¢ÍaÑ$ZS£—¿ný¶“Ý;Ø ÅºZj4´òz~â–Å® wj`5 /°Ž@~é™x¡B%ÛØ>ÏÁKâ;ŸÃ”¦J!FJÎ¥÷‰!4ìì=nÿštmíMÐŽÇuë“ôUÊbUÓ¬rв®Ö‡¬¤ó,ç —iAX’ ën(F+t*ŠGíÈhPÞ÷–`±\U­;áf·³¼ PÅm¬±5ªas——‹ðˆQS—V« qœg!t|U¥VSX(4?G›‰³ðmЯ›¢œô$›Ô§ äÈt\¯„”óËnªŽçg!÷9Õ&r³ïù¦6‹â¬ÉLɸUP4§Ì¿?³óô—Gí§;G[Å×g,\>\× f±$z i:ÐζÆn†³âÌ|ìÍ5?Г<-P/êø=”ÜñeFjù]<ìtÃáRyKÁÕ Žfrû¬bfSÜcí»Z *Žâÿ2ìw‡ CjŒ—ÅΈ{î~ †ÇC ªRë—È62)c3ïᜠ¹ÂËÒ±O¾êc]ó!¶•+™û|éægH32¬#Ÿ¢(ô© ‚Ì0|¦Æ6 ©9³×>®(ži¬Ü-n5»m—¶Ôâ!+v UÑRÞP--§[ïÏ¡Ùw!=Áœ-ÇHÿ¸¡í““«K©c÷®QæúéQVßóI4úž@ænB×î,!³Pu;äÌ™IÔìñqK,Ü \‚ï]sVh^Ó½i&Ö|:c¾eèc¬¯êåu1¡|Jbu„j#+ÈÓÆ\ÐCC®í]¤ühk‘7ô&ˆ÷aTþxÀ¬nT§§Q¿o<Û}ödCj®©AqPèð€7W€LäeW1†ƒ^0Ê3:¿@2L·º¤äP-ƒZ/™mê5W„Rؾ¯òÒöÓGuÙ‡Iþþ’²OtòŸN4¸^È>E,Ãþ/ÿ»½ÿüß·Ã,H`™l‚üÖLr-Xƒ³ Rïºì£ZZN·Þ+žC³sz‚9û‘‘þIe]ï$Ù'sýŒô(«ïù¤î//ûÜ*9³@È>Ö*4J,Ü-É>‚ï]sVh^Ó³dŸ[ tÎ|Ë”}>%ÕËëâ²ÎjË>zè²O–ìcM¼d¶Y²OÁöj»'Od#<ݾ¯b‘ìá´Î{U;²$D…¬ûŠ ”eŠ‘`àa–sç/iÚìì=žvÊh³<$BtzÅtr¯wkýrõ}çúì2ì¯Vél}iµêyéãr\ø5r—y8ŽŸÛð9‡¡ÁÏt®òm&üç²øÅZÑÕ¾ò€LŽ®7ÄAЉÎúáU¿ôÂ-ð{¡s4­ž¦"T—BÚ®'0YÕ¦’Ó`LkÚ0Ò´j"FÃÖlè¨ÌèGÉáïÒ2z4Ð XxC(Fv×G7&rJˆéÒ‘ ÇcøáPÁà.[yb2¦ò{ÀE“‹MÎǾó~D_{v™z Ãi¬ŠÕgøÂÛÌ1ë°>I›èîóñ¶n´“èD<>Þ'F yOÀ:YüjqìýYJ²{þ¯'ÛûÏï>aEOûpë·©í)!FT[Óš#©R²t>ŽT׿úÚººö:Vh`Úâ$6K†Æ ¼ ÞœñºÎÐ=~£iÀP¶‚ S¶Z#Ç-®‘6{%JqfãÓ‹ìÂl;‰‘¡|sÖ–„‘ d¨ÿšúD@L³P)IâÉô»1<—)ƒ'Ÿ-б¾o.}[¨½ëF£±åÌ>xgÕì¸9ß ÐþôIŽfÕ“tŽy«kd޾‘«.þåõ·Mû\¨ZHw±ÚåÔð–t‘.šïL¯Ü‚d)%o‡,¦§_¦jò“È‚¾N¡ 4sÛ:JsJ,Ô”YjJwBZ³P++—òE,qŸh KÍn©è)?ïû*‹ñEÔjþ¨øñ¨¦0å ¤ù þϺ¢7«Ž˜ž‡åõére LgOiêæ àm¢c¨F± }EQüîüry›hv?ò•^Sm¡öhJoº¨ ›4pJ·T8&˜éÆAÙ3€æ„ŽÌÉÉqÐ'ÌÔϸbŠÅXKà(¢EœlÏ઴e ‡¬¬ìú ÷¼•¼<|!œ¼”8Ž›åŸ¼©wÝVù'@CYV{¬¾’ÉÉ|»öƒxNTZðW•F%QRçj§m EÜÔ7“d ®:?ʰ|1ÂTŽ{®‚i×TÁæÓsÎIëe¥!Ü@ô’~f(ÂJåtbÁz’ ÃË8cûr•aÅRÝ;»ØÀ’” çôòÁÝ9Ù‡O*[yüènhUL!W(Ä«V«ñzfòOüè8KòcT4ý2YÚS>í at¯“¡/À,0…í"w@šÿ†¬FÃË™ýqB%é2 9ÝàÖ§,÷¹ ¯LØž"GæP­DoFõî8‘ssCRç‚›Žà¥F§”´ ~…øeaþ‘Àô².è[J1fO°›)ƜɚVŒ¥2|\骺œêmU—9þ UW–ªË™bö¼2}@ºD,cSÊ6áKÍÄB™Þ[RZ1“ßÔ²¶”!óü¬Y* xŽÚÄΣµ&™z +ïÔj‹ª²ÈB‘%~ge¸Ò÷GPVX¸ i”*ú|/•3Íî–Š"W=1•Á–ÉPœØškÚÉSz/ •„tõÞ6È"?mB vBg`S,õ%1¼Ò,[,3Ÿ¾Q?—‰êÄÔ²p\_–n/öiIû^2 °-Újëý*{ÂCÆü4ìa·ãD«  Ó.ÿò¨ü²ód÷¬`?JïK¨}'=õ5×ÉO_S<{¼)¾ù&¬r ïÈU_9DÏŠ¥RvôðWâª`¹ ¶e"dú >HÓ×ø<<Ù'Ë¢ü)ÜÃê3à YLXÔαr©¼Ž›:W7UI÷KyPÎí1¤«¢æÚælNª¤ûÅmŽ·´dm—Nó'l¥ÚnªDæè(¢™¥DsÚ˜[gOÖ¹—*‘Yg¯ Î´Í¨CÉKµ™Ú:–€ “„¾ëgQ”±ÍîÛ ÿ£íC¤ålÐHE2•§6—¤ÞüOª¦¤ÃSFo)Ÿ4;tÁ­l Ê É%ßÕι#À(,¡õ8‘¦jz–)r¤èât³;Uj®®¡ÀÃt3Ü*±˜á‹.gxÞÌšm6ßlÏ6ƒ³w1{Mú¬Åé®Õ¶«7¯hdΧáU×o õ»œ©Øò‚óÌ­Îõ¿äžjRÓ´%Ý"´x}Ó­g}”•'_aÖèoP½sAŽU"‰w_ý![Œáå#Ř1%‘)¨ü|:õ˜M$p‹è¤e1Ì1£H’YÐù0[[zó¶%» óaƶà\£%Ŭ䔈f/+ÊÓ·l§&äv®œ_N“‚½) ê6ÅTZª·ÄK]nbx³¡¸¸a Ÿóöܼ=;/‚fÉ®bÁpt´If¾Õð¸œÿè@¥QØG+U< ›Îñ?Òe‘jÆ$mÒjs–@2¬ëÉ ô©¾ZdUeJi¬ãƒ»3ééy´œq¤Oj$qão8rÖ©ƒ²/w´iy²õ·Ž©!½J­ž©ï|/iˆ½ÄÞM!’~Û€—^Š3AÕ¬[qYI !eCn¶ž›­— ›^¶zbŸ¼È†ÜØF5‹ÉÔ‡/ÉǹN(o…›]úâWß‚]°  tÁ‚.XÐ º`A,è½dAånþñ™ÐìKrœÉ“Ñ\…$¥ôv±’N—Ús>y6nn›)½å¤|Ãd{Ä™èä%ÿz»K< .hJÎ\Ì:XsmÒŠPl½½7@“õ„YMc‹o#º¹§Ñ„UY(Ãï¦$"Ïo~þÙ=‡Ñ_j{l}ž¤ò,d–…̲Y>«ÌbíòË,rŒ]¾—”Ÿ,Û8Eñ,÷³H9«b€Þ ý8è`XÈUã«)þ,- `ÆÐF4úÕkª*«a8¨äÊ`2ÐÒégÁ¨-a·O®ÛxÝ2&Ô·8ü/~ˆ3 bLð ?Š1ÃÚƒ5«½(†‚ 1m!¦}1-“`ܺè–IVnUœË >ó vj­,¹©ÓŠwsJ /z3­g]츙”‡—TŠ=ùýf·+F,Ž Œÿ‚ñ_0þ ÆÁø/ÿã¿`üŒÿ_Žñ¿…žYXÿ¢cžô¬ËizîaO‚ªÌOÆ‘O!NfibÞñ uú ½Ôæ—Ǧ¾²”Ñ{erdï;F$ɾ9: †)5•ï;’ö¦@Ò_dÚì<ýeçQûéÎÑ–š:ßN¥¿îä1Pµ7ª[ØuWù2eÄ O¾š.‚‘<ýiÔ.N‚nuHSPðVy%5~Õ{‹ßíý§Ïw÷v¦šˆÙ}t0²÷¥`dÊùæ-×nñÏ[ÏýÎÿŒå«ðl<ôQâñe8á2®ßz}n¨3^µnp2>Ë w&WeɱÁà,ôÌ̽©X13QñasøÐ£aQ·H3œdÊ´+±˜–:ià±p“2¨éÑ`^€¸>ŸZ=”b«íOÔh/k+0òÝ×e÷tÿцòv'>Îü‹ýøÅ# Gžg(¬Ú@.@ÜPËï–W] C þ uõØÛ!ù¹¹DŒõ#éÚ 1há­Q›0W<:¡ß3r³oD€…ú z“|ˆ ý¾x(âžÅ (y¨Ò¦ÆAp!F:»ìDCŒ+3y$þ׿§~Ø‹P(q‘¬ø²lRS<Û¶ãD¼côIÀì"­œú0·•ob3ž[iöeF9kLÇF£±ºÑØ8cwKÉZEWƒS´ÇÈG;?V³cfU-2ÒŠšåM9»eƒa~‡62JÉJl•ßµV^ùµÿnÕþ¯ýZ?¬¶ªå•Öz•V'úÇ¢èD eÊ™hÌnU>MÓNÂ>ºì4ZÅ)Ÿ¶qºñçhÚÃH8MIR?mkºþÈFÑÈiŽ‘üéÛ“Ñ–O?[®c:ip&ŒNýÄ­9G'õèS/p[d}ùÄ3ýÄe5ÊúðÉWWze}òVÈ3)§%Iê§mMÔëf7Èúð©1t¥ÐCIŸ¶¾»)pÊ-µbÚf<ßÚþ×Ö“ö³­§Ì4[ IJ³ûmçàpwÿ™O¥Í òðè`÷Ù„Ø*•íÄVi^ ¿¼xr°ó|ÿàÈ«Óç½·ÿì‰Â©Y%Ïø×ý§;ÏáÁ¬’çŒ1ãvŸüê"C§ÏZŽ}{o÷ ¯‹ïx’Þº‚ä°³  q@[ŒÛ×sÐ)‡*‹.pÑÆÒ³ˆ‚'AG“ÏÔ$«¥`n|À•ëØ î›ˆ~hÉÃöeqt²fC™Î “¸w†á½ß£M‰IÆc­EWúŸ@ ì‹á¸ÏÂÆC¿ŽÑæ*Ž°ØµŠ_Àû;<.‰L\!K¸:A‚€Ba’VÚ¤sªÉ85j ŒˆØaÐ÷8NÇ=lÅS—í‰ë¸‡£D"U=ºŽÆxh_˜K vBè› ¬Ñ— ÿr^Do l0PÑjdÙÚP—.‚£~ïDÙkèÈM °£HJÑŠõ€ˆ>%¨(@D |©Õ@Ü%e—씈TÝw®ñ˜σþÛöiUÄ[¢†(+h– ¬£ª¸ a$í2tAPŽr9€èE>)”Gjì×$žV©èªªƒà+0~‡gèrŒÓ¨×‹.ŠŠJ¯ 8hRF†K@L™Ëa8âZ6.B˜¨g€Q .Q £\8(ü_âM?ºDýÃd¼n~LZŸ</ؼцˆ`DpzvBœ‡ÑÁÁ®$ø’³Û¤ªÇÌ/z£!žñ9™ùa«qúG"uј„¦¨S‘2Dn#è aà‡Þ5¶ó@a^5çáÙ¹8!eŽ;Æ}hGŒMcìªÉm„¦¬x:°$ã ,úRWrŸ´céMýAퟴ¯7ë«ÖzcP9ÞTñÆQñÉ@{ÍV¹Ìà™«¨˜ê[^¡äURö{¤Wc+ãÐÈYqÞ¬V§?Å×®ô-jt4p½T}5HòÏéáæŽÝ¡d&ô° ˜ß}|ˆžˆ“*”N>þ²uøk{ëàÉoð™ž÷_lïTç\Ó*BȲ>oò VïnÕ›l¬Š5jN s0±‘Ç+èÆ|àw‚fET6…Îzœ5Ê:oK躅*P[À$öÏq4ÒZ:˜õHìýn—Óã È8FE=½jñø$…£1¸ñYLhLüVkM.œ®þ&¿Ô%9ã[ÞR)nTì…½<+ž§á2€uÐÆ.w†m¿×_¼¦ù覵`Y@Ö:>Ÿ»Þ@+AIV“ Oªÿܽ¤ß0 €ü9ig»Ï÷w_2ºá)Á‰Ó‰RãiÚÚ4›¥Ç]q $Ï«Ò 1øœ±ñG²E4NÐÒÓaßër¥‹ ã™ ÈM¢ˆ—Wï>¼ìTË u¨ÒZ7RÄû÷â놂ª+HÁA€^,Þl=ü Kl@Šø1aHPÚ O1 ½ÿR Ã’GbS8ö²µK„t„;reUðUR4hŒq#1=5õº>mjÜN z6•*.ñ÷ÍríŽÌî¹<#^ÊÔÍ$žHU<îãžF¤qêVÏ€;ÁÊ$S´§ÆA)o›â õä_Hj¹ÓJzƒ1]øo¼¹NÛ{¢®k˜–VØlêÐ+åw2`Åóí<>lÖýŠ7ãå=ø_=6„<‰Nþ7éy¤ß^4=¹!‡H87ÈÈqÿ—ÿ=ĽՌRýX9n;aŒ#¶,Öëâ€IÜæu@&&|å8‘ýÞ0ð»×êè'è"Ý@’L,r“„ø­z£Ž§_­zTnȇ“ÿàQg›Çv< P)èa•Ž©Mëâù0 A2÷æÑîpÊ¿ãÇ*Š?E8?6×ëë’œþ›ˆÔAr1ÌEÃkä;—¸ls û0¤áiÚˆz£Í¯? v$# J¢U~§kû@}¦¼¥¬Ò£¢ò¥ èEŽý$›EóN–ò¼½#+y¤?xŒú;9Y¶Ž^6ë K  ð>Ä7¶ñÔªù€d5 ·}ÌøKÙNtòHq.IÐqv¸ÎÒ ÇÑ0ŸhÝ:r–zAv\ØËꉖvV²|?DË÷÷Ä$ù×½å¯Dùð×½=XÔO´T ;'× øÁ¸Ÿˆ&,Q£äqä¶Þþȶ@ÀbÛÒ˜XDãÑ`ŒQ˜¢î¸ÃÀµ µ¦dC\Çtd~}Õ‚åI ‘CÚ‹èò°ïÿä6 8õ‘ ã Åm)ºYi1´¥?’Iu¸m=sð½Æ˜øàIwŒÆ#6ÙVj—E–vA,/ã§§ßD³ÛÌï…ÿe¬ÉOy¥-¿|jûKò{( ¤ß{ôbkoÚ‚™dûU’X&ô>ý×!HQv´wÿL±TÞHŽhäJp1îáÇçÕ‚ QI.xyöbooû飿Q  `µïê… °N:Šÿƒw#ެzሦ5pžåwëß”Ê?—>€TxvÎ BÈáÐzsú‹÷ôÎ …Bº°''%ÌDÆêôB`ÿjg¢¢!Všü­G6Q^<Ûo?ÙÛÿ¥}øâ—Ã#+|!Is¢!+®ûœp䫃(¯@<Ø`^ò JÔªþj†©ó<â㛯¢f% ùÞC,ø¢ÁO ¢.0£Ãx“{ 5Åâ‘ç$ì7è®ÙiÝ“t¢Yi}š¿Š®Q‘¨I¿3ÐiúœåðÅûIF;ŒªO`{¦ÍzØ11¢cqÂ|’hÓ Ø/#üõã‘ô:ù&¦qhF ÍãóºP”„E¹.ÊÆ)É‹*¸H˜¿xyÌ×ÿjh¥÷€cd8J/ÕkÉšSI\R5ˆˆJ’Þî'_úô)èáuD«âSñ·øFÕ"€V?«Zü’¾÷òx…fã¸sÒ ­  ü_Õi¯nñÙ”T}'Q÷ºY!™;¹T^g™¹T±Ê@ݼ“Ï€ koˆÈY/§Xz©$N°QDŠþð¬Y^W2¿”ã‡g¶¢¥$› "ê’ª 2ÙuÉ< #Ìc7_}•3è¦[šýœ¾ÄÑÐj]¡ZC%¸ƒ é1úéâÖ^Q²3© #R $ =­ 62Î"$rE-wïU´Ãðì|dYÚ!Zåöô•a<•Úyh÷Y!‡[$—›øOeS<¦$òáµ)¸y© õ;Bˆac&ïßË!ršUÙDÜÉàÅ˨¯‚D?p/ô;Àæ€GbG?¸È4®áüÙ¨ÆAïšÕ«°uCØÿß8"RƬ®_™ß"+†ñh$n]‹Ð“jUÿé ÕWƒêK[Ù=À°K²ß·öþ%.Z‡D5P»F°5d».£qµ«¼ãfŽçz;ærÒ#–ƒVƒÑ5+‘ëU éZ¥Ò’š Púqݾ„5ŒŠ×!îð{QôFégÑ ©Ïe T†¨xN„™8øÀuFúÇKó/LÚeìá*ο‹k@äi¾ËàÀŸ%40ç!{¨Lªú¦óEÆ‚€¸³AsªvI?pŠX¶ `¾Eþ Œ{ »ä Ü5b“O4€i:†)½½ÿôéÖ³Gö™“æƒ4,”9¸¯1>Ʋ½*ëžØfÍ0­ô¾ÒÑŽe)]†è놆ÃhˆZå¾î%Ú”4,C·Nâ¨7IÝ>Þ%3Ñ/˜Èë’½ ånr A º,†´D}š Œ [ÀVœÅÀ%×ÏêdpW^íÛúñâ÷ÝgȳTaÿKMÂ0 ÒˆëxXÀ¬´(èÀ *áJXxøv-J‡ÁÙ¬i¶ë&%LI\Àw´9¥…5UVV*°6`]"5:zF¼(# é"õ}ýa}ý»ºšÌR‹NlÎγßþ÷tkwþ‘3œµà4FW )•¹‘aXÄ2CÈ ‰¥"§Ÿ(ÊCgZMÜß5_y˜AZ&@:0¢QCWã9꺌ýŠóœÌquû]TOf[7yÌòwŸÈZ”¦©Q)•¿-}H¾!ùÝ÷²“@§ÔÔÈA(?DºQþNq?i•ñ¡Ö2“^{„5‹ŒYãu}F £:áñ).žŸp<Õ¸(E!5"X9,ò‚yÝhL’˘æØôü¦ †œ)R<³¦ ²!H^|Q~ `‡ƒ™Q"‘™ÐxDÏ„$Û‡Y¾ 4”×á¶)I³yÑþ¶un4J•|"}-t6ÕNmPÇëÉÉßúætmôÞ4 骥²€Â{/vrG>lq^Ä"QEe”¦?F§¬´Åi!QÉýPÈuj¼8òßàJõ»o}ø;Â]ƒ‡DÞ4¡­Cnk>Úÿþá” |6Œ.aøP´p¨|&- w)^#Ýwàë6®!0ˆâϱßE}_GÀ PdÑüð-¶Œô£°Bø-1ùG}•ÜYš7õv#÷ØgÖf‰±¬€B8 ÿ+xBø.9W/¯Ól•qM~Тì„x¿.Ë ìN&p Ðç­ƒ'õz=s´qÊC¼"(ïE€¸ÂZƼŸóå ˳Ö_ÉP¶=’Ç@g=`ÜzrÏìñÐÛOƒ+#!X|o#àIÙAÄÅØ1ŽÊ 㘠&”‘†ð;Ã(†U¶²R­²Á™æhÑÀ´à;ÿoà?ÈÖS !Ê@4w¢‰ÀÊÀœW³F'§Œ”™Ë?—oà}å'ÚOÖS†0€ÊB'¨”Âr¥µâ·ª•ŒßÓ§’/¹’ð·ŽE@¶^1†b¤Ïxù@²nJ—™›øÑJc]3r™ˆF½Á×j¢‘Ér¨Ú­œlÀz”FɬWekª£~ýÍnƒ”DŽá]Á±Qµ–Z —é6š•KMùkT­¾$5Ó.É'`f×J(ù€Ä\–ø‚*)‰0ÞÀ“ëÆküoµUm¬–+¢õ- ÄK•éek¥ÑhUs¾à CzÝœŸº6ܽemòäëÀHÛ· æÆ;¾7Ðr‡ŸÿÄr×øã%–ÿ°-Óæ­B ³Æ ÈQolŠ?Ñl´š»t.H‡¾ Ûç ùvFÀíøý3dŠ}²Uè ãfÅ?éÀrvþçMï¢ þÆ£ñÛË«ëÿVdÖ½££ƒÃfeë—íG;Ÿüºû¿ÿÚ{úlÿùÿ;8oÓ£fËŽVjýŠ’äƒúrYþÔƒ«@=’éÖXwU2¬=½HMø¡a•ËÕÍIoPÑ‘$™ëGŠí+Ôó xÙzft²ØµØl´êRV~æôëkV¨ë-—^Ä=aQfȪˆÑe$΢ W¼!3¤¹ßOÿ üçI{Ç1×M•B?*´«ab’‚uuYþaU<úß'ÏŸ‹P6ÿNhÔ3Å×è…)Þ”ð*| ‹â¹¸"K0${†1m£ ØnŸÛ€2&[Çsÿ-éè¤%>w¢6¨p™ŒÀ*—Xóº.D–j«U”›Jõ–—±”7e¶cì[¯[)Û¬°{ÅôÙ+Àûé§Ÿ^ÅW¯W«››«Uâ,67 ¦ô4­çshâ(Ô¢„!+ëŽ{$?3{ı´ì¾!ÕW§¯Ú8ú¨±†ý¹!ÃB[ëhH^ÞJŒ6v“¸jo‡{noˆÛŒÿöêÛˆðoí¿UJ³¶DК͉ÏÖ|ó·Á ¨Nñ"þ3)ÏÒÀùSæ ¨w§“5+ÖY/dÀ”fZ3”˜NóIº¡ÎùEÔß\¹Õ¡©EÇ6µ(°ÎØVÖN@¾/í¾Ð¦DêT×ÔMà:¬¯¡=z)^°YDaêkbH; ¹ÃÜÒ+É­`8 †Öe/éGˆOrcþ©Û^FÝVQ§þ?±þ?Ç!ž!×jlЧ#óOž—1@²èAìJÚŒJk]ÀÎwd ¼ú#oƒáFd1ƃ¡Úª®rÁYMŠ:žàE2Õp:Pg\ŒäÒ»!OÁ6‘Ò½Ú8Úyú|oëhçuV?Œ¡åéc¡•9BÑpyÑÜ2ÃaØÞvªR–ÊæBvóȵ›ä’ n>µ|“Œ*ÅóxW¤ÃNXZ^îNjJØP=]'[Ê>XÅûêš'ø€DmñФVÙì$ ’×d#V¶açz°þ@<8ŒNG—H1ã¹»\_»ýNù»}òØù,˲|ÖœÎÃË1Þ /B숵¡fJ;а5´ù¶ôOÔ‘Tsž^ãÍK¾ý:¸ì6+e~¨xñŽ@?T©ùË?øoWeËxÚwÞóƒüåÝ9¸ôfŽ$[;Ròj«‚–SÉD¶[Ωúv‹¾¨®–ŽÕ½¹J¥jÙT”%¢9h¢‹-UçU%熥s€g‰$%QIZQ)©9a¯q©?ð’—Ð@úI=|ÜöT‰Vsô•;U•ZJÜÔ{!:u“.$G‰Ô]aÆhE2LþÅ lÑX]þßÀ|¯W¼#à¼àéT!#kº¯`ºÇ+éæ@]ŒešŽçyKX|{%ü‰ˆ¡$ö“z¿üC¶JðÄÌ'¥¹úI=È_þ1 Œ¼LB+‹èmÄhËÚgc"l«é >î#¿yÖ§Ó÷¹'«Ô°“KVÊ/̼ë^‚ÍJ^UÍž’œk<¹ùö²ÅVW£¡OÌU“4›eZ)ÕJæ±G‡mK¾è!aŽó²‹ÐFÅ\É@·î—°lèfOTDš‰”ų[Øjòö=C cÚ¼$èO+™ÁÃqŸ,oÍkFM®²­rœYaVÍó´¡µùYáø¨Ÿ§ÁS÷Dp¾ç‹¿|µŠì_è†<=ߌõF=|‚ìÙX^x¿Ë ±¼ÜØl^á¾eöËþKÔÈnËKdR߇Ýå •–¼t÷mîG7»ÏvjZ7´œá©RN¥q :/''×x6­=»ØÔI23ZõU<'nUU}hlU»ðÀsç(0ù\Ûh»y¶m4«“OwÆ-O¸±Ä¤³k#û”€g;_zg¹”¥å&gL³A3^x¤C{ã“J‹™S6D¯è䣥 $´óޤ„þ(ÔC\²²4Qµ§Y‡°•L4ã;ŽÝÍ´?4`–µp–à4aÓ‡Tfÿ£1E¦‰Z4é²f]BêÌrμÓ'7f²øÐ²¦GÎü€ BŨ7ö<™\b–ª³°¥"Ðõy.©IÒOÆ4&!—ÏuÄÉÛ¢š3h!k Úåæ’ÜoPÓ³„eÜ%ñ½ ÿÎ7=[(ÓÆauu¥Þb'èæCŠÇ0㌄˜’Ü]ÎKU‡Åxƒ6G«³*>¸”xتºgIq}Jä6„ª%'$eYlP¹\æ*aÜÂ>ŸÂ)<׿ö¹RJBcáiÁX ZFóíD-!/jàÝ€‘iŸGöÞRU0„!%Ê¿5¾øÓ—ö¢oÙ  OýNÀA-ƒn]­0¹ÁGTZòeŽ:ßQÕÓT2VÄ 02ô*ì ›’ße CS<ˆAïoZ†ÿõ‡äA€LaÇýýCñ]}½þm]qª µºíeˆëÜÄ;[…™ 'S5÷\ g ŒšT9pô,Li@ùVɯx¸èédAS0̨ÿ6è‡A¿ƒ8ž¢1g⑊]ÐjÉ -h¯5âÙ†üª  1žaœ¡¥š˜ ž‚¡t»…FØ]ÖbãŒÑÎX÷VÉÚò®Xct1 ÛÑ8B[Õ ô¬Cµâµ¡zlÞáÝ,ìCˆ^æPñî÷”ç,}ƒ3>‹FrÂéFû"¾ðÉZ¼ß.“kFŽ{ ô]+ýŽ£Ë… »V·tJеr7 ëhtœ’é´­¢áÎ J³‰‡´H—¡k•ºW–”÷ÄéBnôd£^AéRßYøÉC;ðä6äL N™Ðidè2” @–ÙÅIHþÇ5H¯"èª »÷õŠXÅú·bý{ïÞPaúï£)-‚*¶Ò™=˜"ê~¯Œ/üøxð`.ÞàÔ£†²;Œ—ôWr.·“Ùk›¤,Œt'?71V—v;µò¬€ý§ìÖ[—­Bag·KovÙëfGÝ"¨ž¼û0ð!tRˆ±¨¹ |Ès/pÁP*zòW/õÃCu³ÍPW~ÏI¸æ˜öm%Eþ±ãcDo]•ºí`Á„«˜S°‡ÒüK¾´ biëÁú÷ÀÞ.£![çú É_Ã% ˆ-jFØ Äñ±¥áF—WP%^ 8ëw†Ø_R¾ú¤ïE¾®Á}ÇfÈ°Öø¦¦ÏLjx¡(‚…œgáÝKŸÜÏà½2hR_à¦/Na9Ÿø7ö @„kßþSNî:Èo·*­Ö°Å–:$§û—o!x4Dé•ÁvýÖð¤$>€„išB%“ظ2lB#“i¿üŽ*ýpb˜N›UbK#/ó ÷‚È9[”ÊfUÄ4µè=m½¹ÉS•âÄ´“|¤¬$1/fÕr¬ôn•Âä‹ ï<˜gXÀn~ýUùkvÁÔ /€›7ŠIH(>µÀ|![ÀÔ’£aÆUGŽ›\w2æ:SÕµÑV÷8¯gÃ`@–cÀ¤UEš•¿}ÕþjͰ˜ìùPdÄË™ÕNyÿnH¡ª.…±ús£ñàÊN5•Ï7İF.È /ƒ’pF,éèKäùup‰Z§˜(3dPu{—lË:l;¾y»e ³jJº-_é'ÑN¿%B˜)5­4%ºç0,á Ÿ8ë$ApU'KDùÉôν$ÁÃW%:§ý &{éu³á ¼3üðê¯^¯~Õhx€þž‡‡üð7*IK•2| zñ6ú= âfëÝúwÿÓú"»Û„<¨I]‡¯¯J­žÝ8ÃZÿhpíeHêÃ'¬¾ïpe ÉØ`U)µš²Á­*nÑÃBàú„[Qœ1§Ü œ©)Íî É¥Òë’¬g¨òk´úPðƒWIƨ§ææÎm§¥Z4™!kâ‘<ô÷‡Cöª©ÕÃîǨ˜BâÛ ß—!àï¹…J £‹`Döát‰¿.Ð “;°)@€¾Òa}‚ÈÏžPÈ¿i4춇ASû«–w+_»¬öÛ`¿¶˜j ^Àm£sƒ ú7–Ts™þåEL:sš§^YÞS$h-fËOâ~Ïf[”h­pm²É¥J«ÚZYyõÇJõõjµUeI†pçPv„‚Rëa©å=Ro¢õm©1Èf0Š<Ä"ÐÆÙ*¶å!9bàq\‹Y[™ZM¿ý cÆ>Ä¥+q{:Å‚†ÆLa>«m'Ü6)]H*ª$ GLC ¥å•gÓ ³ ¶dð¨*IPòihJÓÏ Oê÷ã>è†á—5üþZ¶XÆLvš”pˆ;—2]‘"„Нä«jGUÔĺê¤F6Õ‚ËrBÁ˜ ÑY,ÚWCCŠ¢rø¬2ý§¦”xXJk²µÏeâ‘| "ýàjä¢kY€5-3ÚˆÝÀ3:ãÚ`«tðvÁðzfPpåSô D‡á#¯6…A$Ôµ*Íå–²§0€@‰øm‰=ê6TŽà“ÍĪÍï1ò­G´ç* ±ñؾˆ)¿º,vxc;u‘¬ä±Ý–äxFþ™s¬ )|˜½ñêñ¯{ۯɓb9˯›Ú©|râk”Ǭi8¯W7V«”coèæÆ6&äž;ca>q†§¬sfúºV•]hÖ6jIòªN–6ä/°œf“QÅkúCôØÇᆴœ»Rèð”ïÃŽéûP™¿A*Ý“!rNtÑ!ñ°G튣ñ°ƒÙ“k[KÔ¦«•Ò$GŽÒ©´¾Z?UfB0.N›R:­)iwª€‘eö2©»Éäø4Æǰò6“ºDíåóÙ%³"ObØQ%óáÊ÷`•HMø"¤Lòôë$ökñè)‚R§¼ÜuH&½^o€T´$Å)sѧd8´”B¦ ïË2޽²^âŽ'X^mH@èŽf¥Ë‚æ„ë2'éº>Ì#WŒ| ‘©,$N³f«ÙÑ}Név¤2£>u-¨O‹Œ§77M®u¬1“”åô©4šV!{XÛ\‰A¶Bš ”/ÚÒÉ|,Ž5Å®(ÊoÞ3\ ëA}MF-cXãX]4«Y¢9L•‡m°ÍY¬ÆÊ‘ü5VéOØnù-)³ŽáשXb¬J]lV’B¤ÑA«9Ëôr59ezÿÇ«?6€‘ÿ~3~¿!Ÿ×Äû³Š·t\±Üõ×+j?b?]<(*xËUÍ×ÒmÒ™¡Ùeç£Ú™æˆ¢ [0)~‚‘QÅu‘Þ–ų`<¢#~#rºò³a ͆.;¸%Ê!s$ÿ³0.c ñlvzhFvj}µõžZ«BéU‰]2+’h3—€‹5¡œ~¨ÃWtÅí½qÕÍ ž”Ýi^@0:cn_i£¶AMß"k(a˜ÈJét òè?“F¤îAXwŒP®È°Ù5&£e´k¤Oiµ›*‘6ÛÍÌRb²á®ÙOê—d¹‹ ÜÒëe[»,F†Ã’—¶Ü5¿M2Ý-²ÜU†»9v»-1Úµæ™i7;Õ4³ dβTŽ"Sͱl#Ý/gŠe[åfåÚäšäª‰×*9¼ ŸsÁGbÙë7;‚Ðs‰h½*‰X;Ÿb,âÏ£.†¦ͺ•ª"f å6̆ÐpX%+Ðôû?Zur…þþ}…£Lm‰R½^b™$0Ûìªl–¯RÍKW( õ6^ýAØß7êõ÷gÀ_4d ’mÅË{L©T%ìš-ëkV-dGÑÞÓ!°éVÖ¦¼Ï¬¾¹év¿½eU¤óæÒvutž°Ž®7<§v»Th5é5D¼!.`²²ÔUººÒS±u%*É×úAË´, ¨lªËFVè£GzÏ/~ÚÐŽôqî(a†=Ùõ˦ۘÙÌjÿæµCb@,*tz€Ì·9µfà2³%“°c—-FRÃh¤9ƒŒ\vA§)ybñc\ÝË´L ¥Ý讼4>WnN’S#2äà]䣹ᚠîGÁ•ÅãÝ—Ow6Ô‰^ç ˆöJ–á£Þ.š—â:ð‡Ê§ÑÃúßðñR·¥›äÜÆLƒ OþCUš¯adbíëÀCêÿÁküŒŸðĵ1À—¨£Ÿñʤ~éE¿èW4Ó¦çŠr)InU0SöÌ`6¢UÒlª” KäXrÕh3שþ\1’kÝÐÕ÷«ªø¨š‰ÏI+ñM6’ýìÁ{æbÌnyƒà¬¯< ×jFk•«—‰Á|oùáæ‡¹/ù ¿4‹(°××½_—åÓ×gòãÒéA%+¼]–OêC2_—õ³ú(Çäë2?Èd´Ê}àFÈ·¯Ï*š<$'І¸ÉÖ \+g¢)ŽëŠ”MÖº¦ †ÛÖy A½ÝO’n¬Ò®4aƒ AýÂY“dNûi.,¸<¨ZæÁɺÂ+«†Ì¯>ÞÁucg·ÔþùzõçÆW'^üþgG`ýù½Z®‰Tû~úëÁˆ™›ÞÏ_gmƒ_§²ÊÀÉ.SuviêA™øYJ¶þœ¼[•™Y’w Š›ÍNÓYíª7 ’ÅLIU˜Îj¦rörÆZôJžöDhQš­R"+ l™{“&Ò6 ú‘Þq;šhJU¤FÑm•ÅÛ`7 ¶4Ë~GNƉiC¥á,rØ=d³![éxÓ”i©¨¼ ’ ŒÏÓ xô¾Ñ¥3Áþ7ì¼»‚z]E ŒX÷ìf²ul´¯â±ÊS“{Øõéx ½ÐT¡‡&l‰‡Ô™Ê Sï*Ÿ¥e¸+yʲ©È2Ù3j»þa•W2Jìý5)L£$ÙV•®§'^ykN¾%ÉÍf½<ú5ÅEò9˜LF‡«Ž“‘k¬¦›bµ‘èüðî¹þ·×¶ižUIÓ>ŒTjÄäè5‰J]-ÙYìŠò½ìΰВy‚®´:çè“=wîçfVºiàÖE2YO¤¤F[ÞÒÍÐÆ¡þT+>ú˜i°kns±±|ywc»:ر›`ó|@{·Ë¹ Ehü }µKElaϺãŒM§ºÊì5þ®Ï þ´vÇ„Õr_R“<ñþ`|.â;5¦ÀÓLïü܈Ëý¼ÎÊz½ÎÀjyò†x‰K˜ß '6¨ö“±Žù¼‚C磌–[êÛ¡½Ëö;i{ž¾äã8&μ[EyÈ<î0¹!»-ÞÄ rHBÒãhâe-±§ÆŒŽ³¿zb=*ígI¤Ç«°Ñ%P±V#ÚTè«‚:EÀ”Æ}XX½ë5´Wy´(…èº,"3H߃‘ˆ.Þÿ¶¢zǑӰKòÓy‚'áDœQ†‚ãh[ dÄ2 É@—ž»aÜñ‡]¾ÈN ¹¬!O†°¬žÕh\œžbgßb´ÌN/ŠÙ(=ÁdŒuÑ=Æe‰ 9W†A»À¶;x͘Åç²®¿ÓXDìÕ ÔñË€l4¹81²µþ[@%‡ÚÁûÚf Ó~Ôf²F;0ª 쫊ñ¸ƒFJd‡ák—Ü"é˜I__—”Á‘Qmr ™ytåN‹\ØCéÕI:/r„ºP,á]à 0°éz•1ºo^#Jÿõ×d¹ÌaŒpÓeuòÓ{N÷Ȥ V_mÔ’Àá|ÂN¨OÖ-_²Ó`³/rxà“­G<Ž¥©»Ðέ¸¹ÆV¤#FÚÇW¶éÑ }±ÅÉêR9è“zvôÕ&_T¤ aîGz”gçä3܈ÅÌRd4gï=#,ä–)Œí´­ö<É‚÷ d4ýÖ+ZIÄHå‘È å’f7Q‹šnÐõþëhÌA«F׃@T`O¬ÐåÌlZàꞇ°Î#ìãùh4Øh4.//ë ÄÕ ê°tPÿ«Ÿ.z”Mz6Ä)å‡Óù½D~IÝíùÿPKM’|>Gt›W-$crystalspace-glshader-cg/config.h.inUT Ò´MèµMux êê•ÕQo›0à÷üŠ“ö²Uhík5É!4EK Ò&OÈ„#X;²![þýÎͤ¥[:¼',°?ìóíßÀNÉZì½ÆÒ˜£DÍ{¬ ÖªûõqÐèñ”'àC¯äjê{ãO&þ ̰á{ƒ’úwÑ ¹‡ZiXò]’ùÛñà +¬!ÈŠÕ‚åIº,–,H²Í±–âpY½6>·âá£ðг6$l>½£¯ãhÌ~òîöáÏQ|w{9^ÔP¢­ìàAŠ#jÃ[(…äZ %Ï«ÝxoAšÆS˜flQL£˜¥ÛK²Wðź'5@Ãô¢A¸Ç¶öš¯pŽ2Ô¢ÅKò‘=…E¸x(Ç%!ûþt@3ÆEqžoWaæbvØ)}—á2I·.žé)¢ý˜—å3š¤£×ŠÒÁ[DS7OÓŽ†0ËÓ(ž;Eð,ºNÞÉø¦çã1Üf¤2·(’é”:uÎ*Úž1’*†¶ç/Ï ¼ª4ckY#•ã4”îÍk9÷0p໾G0Ú Jj!å×ÅOV,øÆæa1]ÏÓp•¤ù•ÕCۂ䂪߸נ˜-Ãöø²ç… CÂÁ;oýQQÓœºRµvyºwžaÎÒw&Ù(6`Fðš³NWŒÿXš= £$Mg—ib.9Ê x ÙŒ¸W‹•¨à UÙ"]Z|0tÑuÕ cì}p]*韙"Ʀáo±(–N“8KÖñ¬(&?PKM’|>Á Á­ÛZ#crystalspace-glshader-cg/autogen.shUT Ñ´MçµMux êêeÍNÃ0ïû_KN‘š€Ä ¥ñ#UúÆY7«&6¬]oMQq]{Ƴ>Y }߯HÇ„V6x'»ƒrc,.ö°–u]ãidâßžó±DD«ò’à4LèEÙ¦ E”Œxñ»?ÎfYtï’pFNˆ®®·w›ûÛÎØ1X36Óùqx³ÙvÓ¾5‡Š€H§X͹ œò=Ë@[gý&2S+5(crystalspace-glshader-cg/plugins/JamfileUT ø±MqµMux êê .MrÉ,RñP(È)MÏÌ+V°æâ .MòÌKÎ)MIE‘)ËLIÍÊPKÒ|>ÁÔE4D.crystalspace-glshader-cg/plugins/video/JamfileUT  ²MqµMux êê .MrÉ,RñP(È)MÏÌ+V(ËLIÍW°æâ .MòÌKÎ)MIÅ"_”š—’ZdœTPK …1>£sˆ¯?H)crystalspace-glshader-cg/mk/jam/win32.jamUT ûc4Mó´Mux êêíX¾aùs@ð3~pBæ:°R°bðqpÎB=™?b+É,Óc·0 œÉ2ẩP°:È3÷mg x‘ ¶ôl°è³ˆóùSúrÑ¿a=¹Ä÷x`ºìz9qÑžcq/äÌ ÙGÂnƒ‚âž#?#É;÷a RíãÌ씃ªÞW«I’Uü혊zþ1+Àüйf” EÚH„¶™ãùâ=aPÓãºl˜hºt« ¡Ûîørp3fÍþvÛ›ýñ‡#üeÄø#ÄœùÂu€6˜^´B®:ÃÖ%À7Ϻ½îøƒd=`çÝq¿3±óÁ5Ùus8î¶nzÍ!»¾^Fƒ±çÏ(\PSZŸ’ A¯6LÇ c=|³‡Àªk³ó‘ƒù-î<£&8øbõrà r¦ë{3’Ð 1gʺìôzìÇV®O¯>”ÙQ »äî}ßg!`#àßÜåsîE´®›­Ÿšû÷á¨;èß÷º£1Bï–‚¥ËÙ}ßæ¦ëüÂß —ìç•~-1æúhõq¯Ê÷áÏü9„% ±öf'ðǽO‚ý¾˜Ç½ ûU ì²#ö±÷‹±÷3Øû„½¯ccd°û@Ç>,Æ>Ì`ö¡†ðhxR*ÁXE@•¾–²”ûƒáPø˜¯föI˜°éºþ³–aäÏ_DË…þœ³GÓ]òü4½+<Õ,6u\^ºíöö‡-£óïñ°yÙi¶;Cô‘£xBrÒ¿¹:£)c‹ ù܇ͅáhØb‘9ƒÑò¸õà³íuõ hØjÁÔ~ñÔAñè{›ýºuÚ¶Ö?þÏîÞþÁá»o¿ûþã¾ú©^Ÿmÿ§\$ŠqÞíuPÔ7;¹ó•BÄëá }Óÿ>ÜјôZ¾+¯‰S¹+çp Å,Âdþ™“X¥ÖUÛ€©ö°3B¸'dzp‘#ð¤v¯W‹|ß 1ºarÀœ&B_hÎ"¢LÁ,ˆýæ”Ã)КÌãlnÐ*@n<PÔ±] Ã*râvؼ–O¹@ÆnF{mÆóq°ß]ç½æÅˆ½=aµ)ò{°ÏjmpÙΰߺ¿éƒÓŽZƒa‰·Ð… †Þ¾]ëuû?õºgb¬W_†AB{ýé`ß\8¬æÎl×p!«».|:*]÷n.º}£—š£âü§Pµ)Ù„¹¨®ñù¢†» š××½n«93h4Þì #ÆEë~Ôiáܨ’·T>ð?l?< W‚ˆ^§)·RË+–!P§WÃXsî¸Xb€£êSÖ`µð2›Mqç+Fž>›Gî®j“% Q¹o¼ƒêÊÇEàỎ»bÜ À_‚ ƒ°ÔZÍ@mlŠIƒ¤p™9RÅKU›ç@Ö|˜|$.è}Õ‹ •‹?ù™[…°P8К`º'F€ÜŽ–º¡j VH¾?8ÖT îÙ![.|*g昀èXþp¼0‚5ÊàËWC Fã8V… ŠµÈÅŶ˜r¢:7PËov &Pmëøj·?h‚o6û0K.õVû €=ؽTcÃNôlÄ„±ô-=¨A…O‹á툅X¸’ÜÂúWa†L(‚IBPÏâVç–¹¤Rè ˆ>Õ¥ñh¿#°ëÌH¤² Œ­¨èö=XÃE‹í%ÌQ¾ÙõP#!G‚އl"«d\…!¬ ¥2N¦XíAý¿pP@cJªE5\Ä©M‘rhQ€£ˆ‚qŽ+ìø˜Ýßwç÷÷¥z]Í´Aáß™$¥âò(ˆå‹»2J !¡µN,‰µZ"­¼µ´Çd|îöÏ Ê+J§˜ätQ¶¡4QQ¤%žÌÏ¡J°»TÀå–3µù”µF÷íÎÙÍE ×c÷Ë^i‹»à&úØ.ŒyÐb‘ ÎzƒÖO¬<‚ŽÄ›Atá]pÎ2LûÈéÝÃÝv;‡eSŒ½oön:¬|øöÒŠúæœÃ&Ä$*8¿ï7¯:•r.°ô€ÏK…±ìi\dïDÒw«Çg¦wµ’C™æ[ƒëÃîÅå8Ë&.Õæ"¯Šå4¹ÚQkؽÆ(xYõ§è´ü9UëH  pÆ0Úei–BØ!”ù&4S14,~{{›ærpÕ¹†R,k¿&~oëæ‰¡S ]Sʺûì]e{ÐþŒÊÙ¾lì+Ós¦<Œþª½ÇöQ¸«f¿{ÞÅÎôR>6rqüã—¹«úô“òž±[fܳ|öÀIùf|^û¾Ì Ó@™ŠŸP>þñ´tüºV{ÿPf8´’|Ži–ó“2´Ђðh†µ¹c>ž‰Ô r6Ìpn<î•Ù\²ÿ^çM£ÔµÁCœh•_[ª.ÀsÏ÷jÞrÎd…YP€¢€›þœrƒ:ݨ  <@¢bÉöy(éa‰é:Ÿ¹ æ8ø\ a·ESÅSk-İu·óq·öç» vÅíŧµé»ãÀB!b›ßí•ëÛqhelSÀ)¨x ‡~Ð ¬'‚ *‹ÝA›ÃÖ¥Üz„“ü@­0Eur¹TËÚI”9Í1Çu1°B]Éx jJ/9-½‚á5Ÿy%¶|Š9&8¾R>iH—00&?µ|/  õˆác=~kìâñÄ‹õ¤àédç'¾ûŸ9Ò{÷ûɷ‡{‡‡–5ݳ§1 kz³¥9ZßÐX] _Ï‘>´è›Ï<>xdÚfdþÎ0–ÚüIP€*hï»ÃïßA'ÞnŽ› h®•ovN+‰·–ÃÆ]þ‡¿fåô09qƒ1˜Ü»+Wq>® 6:oùÌ“Dð<Ù»V\“‰m¾Çº-¨MÊÈ]y[j@ÇŒü§£ÒÕ}|¨ªUMo±hZW[y;iÉp`Ø’k5dzܥÍk¶œ¼Ù¹lsFO ’šóD‡]|´e;Aji–D¡¿ÅÄɹÂ`H¸¸,°¨À% ÆF²"W'3¡j¥Yd öÙóŸ<54èd>oN‰ OÕªâ"P"¬L²$Ç~*TÉö=°rªÀûxÛat½)ˆ§ «5½¦{:ëŽFA™— úëÇiÕkªÕ ó´›™N·‡±Ó¥ TØùȺaŠ9æùÊ) XÚ¢`|è*}LBåÛ ™MŒ6CñÂîì„“6Xƒe‚PÖ±‚̳‰¬Cm‚(°LP úŽJ@Ek"žzÈGÖ ½œ‘yQ*«AiŠÇg@i¶t$3[PBßå*~Â4£¨I‘-X!OЗ˜K7ÒX“4ƒ_UòÊcÇè>U^ƒG±?¥L­ð6:‰‚i`AU—Þã t¾èóQs÷u²bVß?kòntë´´ 4Ëjúíà"Ù‹}?™Ýäø: èò¨‚éA”ÚE"eU•óhMéT›“"þ¦(®<½suÖiS²NN”ßÇé:—W1[Ȩž›‹£[Q6?Ö͆l’—Ô 3“ü¢,”WÄݳ¦ÿ¿hògó³©ý…É›šÌÑ*Œø{ßæú¹CCK†Ú™…Ðo–¦ÞâÓÙT5)ÀREsºœÐÊFîü>] ÚÜÈÒÜù…Ç[a ÚtñÔŽ]Þ·ðqŒ`Ÿ$³‹›®~ºâÁa¸„6ÉñbZ44$½®½>¸žû6¯2—Gú 9º‰îYô´3C%eæj–HdYÍç*e È— éh0ÇMb‘$ó-œ9Hm$2tW\<Ê·u¸œN/dëÃØ†ÐÙŠñJ¨t׸³Ü]ðqã n$ 5mØëÉN°€²IÄ}*“˜`*v‚Š(ûÁã%Å`·?7{½{h[/†Í«¤,Pî)W¼r"Ë(ÒðPs÷ãFû$f!›KÓ$?2)‰”b´¢ÅðIѬd—NJ y…â×âÖµAIúøšq…¶ÊÆ;¾/ VšK„/Úÿ ‚¶ÃCoušO‡††à1.Nå]BºnbàÍ$cÔ¹n!Ú®çFu8;Xë{%mqc%é~YÌÔÛ"®bJ‚1úZÓØK]¦–ÔävÊÙO¢:!µeí'ÎÜÉIrŒ'f5ûIKXq£5&þßvkÅÖkÉû ŸäÎþ…w¦Œæûf·×<ÃÅ_gÙ~–Rjrî’QÒÒ“µ°ÚïÈÓ¿ÃÌJ¹Ï³ÒÖáô$ÉæÓ° p2ðr˜Š¬É9X‚WÑÏ™XÎ#ª tc]ƒÙ~Eœ:ê‘LÏøœ«Ý9Ïdç“è¯Ï–+š-rçs%î&w‹Õ,ð±oCžD€5'Šs‹ñ——úbÛuÁk'ÝSÝdò¬MºßI"y)Sž^°—:­ñ¨‚×ÛE9t‹o,Á‚—Ü´é–7¡à >íréX®”mûíFEpÀëäל:]NiG½NþQ¯ny ‰à׿•p1 t6|önEmÉN!!1:öAú Ô²VÍè@_³q$õŒMà‹|†ŸY°*ce#KŠ„æ(11´Éžî-ZèÙ/ò¢}B®¬×˜=që ½éÔ˱nÑE”²¬0ƒ† ÓâeýeÄÐgs3 Çäýà ެÇ÷¶C¼‡0Ç;þ°>'j.÷fу¸^.®*¬ÝùÇìä%pX é{]&§—ž$Eƒ¨]úOØLT™‰¯·TÅ•C0ÿ­e„7ù«ô A(ß!¯2Ћɲ!®Q×J,nˆ×?ÁþÉ «,tõ2 ,ƒÙ>ݸ_.0Üá‹…Oï.¢UlŸº×åù‚Ú“¹¢7"ðÝÀÌÂJ8'2ØÙ2BQBz–koÝ+Þ‰ÚÂáŸsÓ¥Wžð.‡ìÙlA˜ÄÄ,|†Ö9¼ã)^•$b ·˜©„QV³žO÷´°…{ph6p×_9ÞÅ-0°šOð"øñ-!¼%ªB¾¤ÞKçÀ‘&Æ+¢é{oi(0'عåìÉ>‹÷2Ì_¿Äº–z",$…²è\Ü©‹M,hÆoý*‘ |˜üÈ=|× VÞA×zÿ­T5,àD‰‡ ;˜ ÔÉé2Q*«8YÆðíˆÄ‘‘¿™¾ÒœâÕZ.™|Á|EÒ ñ¡%tï…Fò$€VѺS¼˜áÊë^ȉ)+ƒ]?ð'CÛèb“ËMm˜ëÏë¤"ÿÙ‰ÓAöü3Ù% ÖD¡Q@# :γ©'M(9 Ž ¸Ðjã]ÐG®¯¬HÌÐôPn9Mýþp>æóEXˆRX–Ä$ÖòµR)~WJM¼žuR+å/gæµ””ž€>SfJLB»J|“âl*Üb’Ý«kHë2ƒdׇ³EÒzn,ÐsþI£V㽤Ë?U‘© \ér‚r­¸^*“ «ýÌââ§6`Ðå ÞO+¢æ‹’¼Ù%ïEálßÖ‡ì›ÒúŒñœ{á2à"lcÔ‡bŒBhŒGêð"õ³%n0»êmwŒ”ˆçŸEXƒ¤’pˆßdŒË'‡ñßv ˜Y £ÀñXêÑxØíÓÅYí%ÂÈ[À[l¸&èÕžPfAz‘LD.†'ÚýW˜òO3²0m«Šð |L”XÄÀEg?äÈY0O­Y.]Ûn¸vGõÙØT…ÙÖU¦¸Ç²DÝ´f´©)j«îX¢ß Q™²¨Ëª%<þ„%MHâå‰2+¾7-H&ò&TEÛ® mþJ! }R’¡ !UñžgÛUÔî6Ë¿·#ÖDœþ“KÔzùKªÁ k‹ {ŠáÖöÉ@XSÕ œ ë¬~wWªÏÊìÍ~c³€/XY2‰÷Æ@9(ï×ïöê³41ZgxA½>Ó¯6BÄs/‹Ï‘ º(&Q¾M Žh‹½Vsck*üìA/À±~§Ó¦·}éËÌ¥QǪ6¾ñ­ö²‹ß¥Jª –pò=Ùü›ª¯“«ªŒéÜʾö9FU6ü³ÌÊö„Ž5ÿ+jDå‰ k±Äµš@BjôÞGÂ7ýŽ˜t]O^ñkœÑŸž ŠîŸ’/å™öë÷‰'¾‹Œ—vÆ? &]<̵F¿Që±Ô”þké¿PKR}z=ð £Üt8+crystalspace-glshader-cg/mk/jam/variant.jamUT \ÇïLó´Mux êê­UmoÛ6þ<ÿŠk2âÙ©‹v(œl“U9Uç7HrŠ ( Z:YDeQ )g^Ñÿ¾£$W‹ã´ýP}1É»{î¹WŸ^ýįs 겑@$6ÏPö3žB IÆÖ !!ÆU¹î‹Bó ÿa#b$CG;Éש†3Ç\\<‡Õ¦L“ÆH²2‡Ë¹¬Ìù¯R¡T=%J!A®±—£þ£sJ8ô…)WqR•; c"A‰Dß1‰C؉"–ƒÄ˜+-ùªÔ\Ëã>Ñ#>ëIUBÊkŒšñL}ÍÃ-•]Õ,†”m‘Ê!ßQF½Zì~¼°5ËD¾®¢'³6ÃCà äBwáNrê+-¾Yòn æåQ¯ /A¯Ø[*µÃ6+Éã5§6\ ž=Õ…e`WýÔ©íå'ðëÙí{T$«ó¹Ð\àŠÓùkׂaçK¥Ú*“+8©Æùž>=ì'ü˜¬"¡ípR¹Â¨íN¼|Ë2›ù+(¤2*)¿Ò¡|VIXC˜6j=U«-ÔàH4S×ë§ã8ã‰}À¹‰Ê™OÞÄõ{õ£õð©×²6á;çç?jÞhZ_Ly¿ |ÄîÀñÄ›ý=ñF‡Ž'×O½…ïÝØ¡{Lt€ã%–—!0¶á–å9,)T’¦UÞ´´@ŸgÑÉÅ"ÿü>ûAàŸG—C4W¯Ð5µ`lUæ ±±8ŽÚèÎ&Áøíý_f§³è²N]ÀtO¦ø0÷ƒh6^œúÌÁü"œôBJ¿Ñp‹¶ízjFˆ}M¨",—}¸Ä±KL5O #kŠã)[c¢bä×ËkáHΑ­ºztk:<–BÁUnC^!‘ÿiä= 6+â~>|üΈ”à¯qÔc²Z –\ãã™oÞþЃE蛂^UŒÎb~záÃO#Øët£‹¹;X²b`5Ù—Ù 0<ÑûRfúe<7/q‰/ã³ã~„#ÃE.8ûXÓÂ83¡¯©‚#$žÀ_+ê+Û2¬Y)‰ÊŒçÖ×̹D±‹èJcÅq$­ƒ¡_›?BìµA–4ÖjÖ3tÅËîÂw`Âwk ÔXÈž•ÙøÙZ÷ ª´¸0pÜׂjx…$Ê7}GT9mÊvÇÈžº#èt߹؟íºî‡^Æ8jÅ ‡ªðʳ(crystalspace-glshader-cg/mk/jam/unix.jamUT &#Mó´Mux êêíXmsÚHþίèµ][¨râìíÝÙqn¢=ñRlΕMQB`v…¤ÒH¶¹[ÿ÷ëyY8Î&©ûrTR–fúåéîgzN¯¿â§q ?{ðãhIWyêe4ŽÀ‹ð|þÈ`§0‹è=4£Ù¹M£ü¾·×‚ž—ÞѨ$óu ítãd›ÒÕ:ƒfW»xùò5,¶0ô²è¤^Á› YðçŸrFR¦³8O}‚.VDHö¶qŠvð3]S!EÑt ø¸L /³;/%W°sð½RP–¥t‘ghÆqŸ#ÜMÐ%êeÒX$…lM #é†A¼/ØÊÅ€D$õB˜ä‹ú¸ì“ˆð$|…­I€ÁHs\·Ïñ¸ ôct!2w„â~ ·ÏäEáM™lâkz!•öâ„kj~ ¡—í•õcÙØ„ùuœ`xk4Œi¸£a ˜ãe¶%¥¡÷ÖôÝx6ctï Ç1FÓ›+ÏÖqž¹%ÒÝ$!EÛ\êEÙ–Ç04î;”7:–mMoôúÖtdº.ôÇ01œ©ÕÙ†“™3»¦àò‰„KkEÖ—¢„˜×€d Ù.7Xv†PÃÖÞ-Áòû„Þ"Pù›lŸ_XiÎ ãh%¢Gµ}†¯€.!гÜ¥y•ÅO–¼%Y‘¯·àÇ¿þÏ·Xê®·Y¤4XáãЀ—¯^ÿ½3×}ÕCì¾3mþq 'ç ³õ \5Ø8 ·œylÈÇû¿ý(òÅwº®7F†;Ôû¶1páÅ5´—@Â%לس5Ò»»­³fw<œX¶éèÝ/IJ>±º ÛVÇ1œ›ç “‰mu©5évIÁ¶FÿÔݹkvùžËeˆ?!öI¬ÏÆüM±ð~2o…)ÜÕKîÖÔ_sbÍé·Až¶i„yÝÈþI#Üó óžOlGyHtai¶ÉQ¹…5‘fÉ}BüL4ðÙ€d¡:DÃÈ2¯©As± ¤=¦ûI¢é •ƒùÔÌGÆÐäå×ýtË2/d‰çBû+~0‚;¦Kk îù Ÿÿ4[D–§Vù ¯èCEÇÍPÞW½¢¤Æ>ö ì ÏÎ5|(úIßG‘0øMî\ ôYS©hgMwÖG²Õ:]c ¾S¼Má žö‡÷÷ïøøMJîÖA¨ RÉE¦’ d<.;eñá¼(Q ˆ µ=ÿŠ9%"$ÀÄÙ¢MŠ­½J)>ÖøJnÎS¼C2ðCâ®ñºáÔÂ+åM儆ÇИSM$ ÿõHB¢€á®Ô0³æ[¹_ ºVèæ-Qàä1Ã#ÞäÚeIñj·ÇÑÔícÒKYïa}l,_.qâã±ý Mã•xrÖ”ëÚ .páÃTÌå.ÖàZ`hïä……B˜JÇ\L¬ò®+8}*Öqìx•4ÕðéB+³s$­‘;5l{>qÆÇ„Ý—@yœ£9¡°CPÅ™rüÈA9§U©êo.{×;ŒÚ“>?€ U…én±€¥Âæ‘e0øŸ„8¸‰¯õó8ŸOäòHÚ*<éÅ<56Nœf”¥Û_Ø3ƒ” ¨M mæÐ&_-€K‰ñcÁ;uë÷ÌÎl [£þXwMœ3©©¡µ“-aU>d‘¯–¼¢²=&úx×Õ*@½8†jgI¯í¼‡rwSÖŽž5ÙEÖªåS“Âe}íän©|ªÐGŠødK þ_:ÑvÌÞ|hN ¾S¨à?pgÜù¹;žÜèÆ/†eîü»*ìOâIåÖ%úJ’ž Ð)~iÉÄÆçKàs ,ù’¼AdjM<J™,úxñÛÔ[ñÁ±‡ dÛñé­ôPÜœ5*8{ºŠ_ƒvÛ ‚6#¾º­ª£§v-ŒrÕ»]òí«_ëêÀüÉý³Ás.seíþ#’ûþûzŽU)vXŸŠ“ ½j/‹ý— eàM­._z½7ñ æ21ÆRXà‹õ/ë¨Â+CgµŒ&JÕÜãõ|Une¥:_”× W×ûìï|ô\…ì~è­ª\à}ç}WŠÔóE9Ñ»#~ñtLw‚_fM^÷XgL KâˆÉ ”Y/ª†8ô~'6Jf|Ž)„¸1~ã6ùqÆsëjçSZŽTóÏ¡ÞàrTÏ+¿W‘Rêç`$O«T©W¿£Ž*¿vLôÑy¦OS–Õ—ïëGc°"?%lã^xDù¢}\»O£= õ™g®&胣WôÓêW>ÂÈ4{œ½òÍü×Ô1YJ·'+^±ìªá—eù{aI+Ÿ î_ðýà§}æšsw,îç¹»2TÕX?…²(ä—"…_ÕhÕ~¶Ú,æmñQŸG!‡cAœÿ1ÌbN/ $”øÈ;Þàb,9ÿú¥?£Ü=Ä–ðt „Ÿëµ|"¾À·‘»C\tø‹V'P¥{Í!ûlÖ3a£T¬Êã_$«5üU•¼žpõD;k:CíYñð¶ù¥Ñp ?)þ}‹xÿPKR}z=©„©€$JU,crystalspace-glshader-cg/mk/jam/unittest.jamUT \ÇïLó´Mux êêµöWó, oàãûøñ§—ýÏ®¸œhCßY‰ç§í㋋˳ÑÌü2oÆÃŽ8[™ï}ÝÛóátvõËpò#þN¯Äaùfryv:¼â«C†XU¢>ïù‘ØñÄwžær`|ÛÛ;8—`PÈ~€b‚•EŸìKe9}‘_ ` 3ŸÄ'˜‚³HêÑ*‰u–ÞF!àê‹p›ø+`¤c£™¿’wiöYÜ-£`)6EGÿ ãÁnáÚíAÓ塞ì'·i@Œí+<àÏlàïà5l_æ²ÈÅfíâ“oÖë4+H¯yFK9§—oNF“N¯èÁžA‹Éà"3 Ls‚Ä@€¸»›•LàC„ºýÌ+:ÚÒ-¥¶ ž-;üÞCh£…¸Ön¡ÅP »(Ê Úˆ© –­@­q2(RÐö-+¢ŽšF â䬈S®‹^Ë£…Jæ=b)‚xÚ,ǵ˜q¸ºô3ød¯ä-O‘{DÐrAj‰¼ú,YyIPØr„äÉb˜¢*³¹ð iâÚfn¶ÜEʃ?gKEÀJI 5餈ÁþÞ$`›B¥ÅnšäoŠt“?†±ù6p9É"Õ_qÖYF^„X® ©uÒË ¸( Ò ¤ÆäÊgí$ð&2ŽVQâ“àùbžfô! ˜Ì²4{k€Ï-üü³gTKŠÁŒ<ﯫÍe—Äï"ÞÜM8 p7¤(nöœ&n.—~¼Ðæ7ߘ¶7 ÌÏÅM¤ÝÊ5p&µ´Çë‚G§·> ÚÊÿÐg£ÙˆøH¥ß[ð|+HT£¶9˜"8Ü Jž˜¢WÛŠuºÞÄšZ(Ž0°7°ÁÛ àh ÈD±]+ºÀÿ”÷ÍE"%ˆ?ʧLü9ÈD àÄÒP2 Ö €wk¢¿Í+g¿¬>Ø­ª¥Á†b?XÊàó?ß%%&ùa‘0“?ƒÁüþE n? „ ЩOŠ[ëX¥Í0BÓvØPîÅ”'´áxà$3ÐsèpÉ|³RA ®°Hã8½S4ñçóLÞ¢f„5«ÍÉZºÂP[-ôÌ{j9ý Èš÷ °\± âS7ïÍ£$„ÅóÞZfñÕ|÷ë-DGÉ=²Í|K¯5·ÌÆ4‰™4;˜˜›p-È$Ä›4ä²GƒMè:Þ$´Ë4c›"¤ÆP3«cÓ¥¥B8~èRŽŸ¹äRÏ*4â§aN7Æ×u]ö×dHÓ…„®8JöPñjûÊÖG4;‚ð1¡7–ú“f* ÕŸ4‡…£ñá•–˜ûß6¸6¨‘âµa5ÙŸ³ E2E6pŽ‘?òcÐÎ)d«ºÃÃapÖàÓ\‡†v’Ý‚B1Îu´Ã¹L°Œ º·4Ÿ­†~(ѹvvK]D–Œ7mSˆ5 ¤=,¦˜éJ#V± =P¦š=À‡(k;Ð+l쵲дêøîF‘| ¡‘´!(P{XD›Bce*×ïrÃ+Ì[Á$ÃÊœ÷ðs rØ/x=y|J^ß †LdRÐn)‚Äz!3´:.³(BÃMa6†ZT`††®y§++wWªî2³Íª›:ö¿l×;ß’ÁP?.8´ç±J¸p1• @ˆ/²5¦Úl` ŸT2l2Ï1i<úÇ›PëìÌëA( ¥ðI'’“=S8êW“ÙÇØÉAÕ„4Ï#ˆ (zÜR¨P®–&°uŽè!ž•±¶w*õƒbP9Ô\w€:jC†ÏÀ0Ø‚Â&X³!?!JCŠ¢d[“A&·†DÖ>>¾›ÌØô¯Æ‘ÓØ¾þ*Äm…H°Ëu»ÃO¾ Ïóà ‘W€”߇Gâ[eä*ÙIz—ÐDšqR‘¥Ûú´Ú̼%¹Ì ˜K3iíͼÀ m%Áê„yóÚyq"QÝ „ø¢@ CÕ ®(“Ÿ^ŽföEÓÎa9ÒÛ.1`#gª¯y5<;i—C¾éüú×¥JÜxÔN¬PåÑ`¬Qm(o­fM ³\@!½\D7 Bû>Œ›É>’L™äQ¶š¤²fa²`ûÐd@Þò™\ êŽÄ#åc@ôù–â_¶?`µÈ@®® „Êý!Ñë M²ËNäÉ`‚ƒ@Ûs¸Ž`öY!NÓô~EØ$ahÆ(®6@(´`ªrHHÀ€Y§llÚ­Íž›k;†èPn é|桾˜h`IŽ);—࢕’‚Í -÷¿ÃniÈ™ü<¥Êœ$ÊkoÊþG±]›SKr"d¯9„¶£MŒ¼o!AÁÔ r9€¹Dgþ^RÚÛáDð,":>ÞVï¨úHfŽ•“Âe¡­ /`BS0{s>'ã>=¸˜ 1è|:»wÔûÁèìAP<ˆA)§ pãZa0;Ýj×c3 [Æ3ÊšCÑ„=­"¡T¥^—,ÍHÈ>cUe´ :ëØ÷-¹VNcØ- Ù/°¨`RÈa%ÖÔ W•Q '¯| ]ï|ðuXc¢÷b‹ƒI•ê^XÕ6m¬¸ƒªP‘^MÒŠj£q°¯G˜½ìˆCóÐT>ñÍOö2~úW~-ÄðMO@ënM.Ä!˜r3 'ãÄã×ΪWA,!²; ²g`ùŽééÓ6`ÛŸ,|Ò8äâ!ÅÙåÕìüó)"XÝÍÔ…Cü%6ö{è{Q,§›ù ¼_Àk³F§ N” Ûðó«tþ;­à<…o¸‰ 6Y.ÁðiB|rÆê¨Ê †Ø[®×ð¿/_„÷ÎÌ¡R-ïˆý >«é= ؉ñúñ$’éz›a‘ÂLÕà`ÇÃÁäøxåK¢(=¾šž_Nއ½gw×yÐXúÖŸyÁzÝ1€ßƒçc•Rê!8¡CtŸ“éLÞgåÍíR x¸5Û rÀ%ŒÃM®jœ¹@ôm¹_O œ0>ãJ’hðt "ƒ5ŠUT ”b2ãɈƒÅ^E†@¸£wòDK:³¨yÃúVn{€¥UŠÆ¥›PµwˆiãZ<`Í®íÙ"—2…šJ”F¬4H¹£ÍÚ‚\;=šï‰-sæM£Ô=abç›°7 °¯®ôK$ÃwDO¿Þ!yu&¸ ~‡;w*uãù‘3°—ÇŒFTÃŒƒÃܳՙŒ î_M:Ÿc~»êQêõññ»“ÉÔÒkœßAœ>ŠSk#’[ž?瓳OÛÇçï/Ðq{z˜7üïãáÅlt~Ïè€oïIyìwLƒ«ê´Ž¥êǬіãFɯ“ÕhÍϨ|G ¶}RVì´á(—á ¹³ö¹²`Uªë1 ™ªM5¯ÛwÝ £ž’„b—÷áÃÊßõoï@\LF¿€2ˆË›‹Éåx8ýîëìTY¢Ê}$áCVHOáù':®~K‡2>f»h‰Ss••h«„{d‡[±3-¥ÏºB'ʵÈoGámÅ¡d)Ï8á<"9Þ×åI]ÔGu}ˆIÕ1¿®ë¹d·<7ÑæzÅL ]´‚ô‡‹/ÔqƒåDò íB3e0Ef>PP©2+öù ï¤V…u*˜ymF Iné˜mæÔ^0Å-™ª£ÝòàK³S…çh¯T¸òѪÎ>Õ±<ä“H,ð©™–H˜< [-üužàÚùZÑ‚7É¥`µ¦Mu½è\b‡ªa^“ô·:\*%h´CfÀxà¹fXæ¼€©,« 9ÏAÊeÁS2_žÇ%"ͨó(¹ 6+-ÊF+ìG*˽ê<¶k¶Gyn,†v‚Ï«rí¢í‰¡O¨1RšsOäã¾…Pƒé¢M†M+>\Û( N!h$< Ü•Ñ "U<­T'R¥„}ó&iG ª&ŸêhÒ@vAaÑ^üµµ³•I;ÄX€Äú6¸OÛ¶9òè¬@À€¥¨\~æZEuí8†uÃí uŠÖ°¬®hßùÛ®±)~¹H+ßia*ÆÛG,½v ž–uàÒÕŽ{šÅ+oJƒùÖ­Ôp¨ôP½†¨Z­†™U/ÖÐs¬Ã”(F­cÈ#׊1$%MŘ?RÀÙà›Å†õ"NïT£‡:x¤Åç[-5—–òMð>'°%Oüªü½Ç+˜z'Éí ½`qó L“dñmjh*µûJ0§|¾ Ü¿\§Éž*%4XÈ.®ZšA.îË»Òþèƒ9:DÅþì?Ax¼g¯Â#E ÍÅ+$ÅÃÇÕ+ƒkY誾1…פ_Nò¥bÐ LèFÈlU,PúDÙ«ÈÔë+Å¢#•Oa‚Ϲ-'ø˜ð&`7Aaõ…qšÙ¿Ùvƒ‡<úd²ØZ Ê]óžb”KŒ«Ù‡‹!ÈöMÍãH•˜f¹Æ9ço~+ BëaÓm^ÈÕ µï*—úfR©wÇd倆@‡¾¢ª¦ ƒ>>%»×kpq1= ¯äìãsÆ£³ŒGo¦Êü1ÏW”µ€±K¯NäZ&¡Œê_æÍͼ¯zPŸ¡äx l(ìó~•ËŸ¥Å)VcDÜExùA ¡H.¨·F&‚ d¿q fÝd“<žX71ä’Z©‡xÒåÖ…åP—¨Ñrë´o9~±ñ¬D9ý¥ïïR²™yŸ ¡oQ¸ž³}u‰ÌAjÙNˆÞ°‹Ø”‘@$Il£!PøG}fVS¡V@ >:x4ê8Föðˆ»’V wíÝñùkÙ¤(a°aŠd`×"ٹljnŸa”pdäý,Ž06‹(ÅÔaŸ¼tp8íwíb…E%$»UúÒˆDæ|Ðá¨Õá€øËxaਭåäg¨Ä«#²~X Õ÷<¾ ´J¿bÚÓ$efð Ð.«ñ‘ËŠåÊú¾•Å/à~φÃ4):dÈd±ÉjÆëbu»G¡—r[N>«vŽYo\uc¢]°Ó <ÆÊ¼­ÀÅ“[W¡H_»#›$`®5÷ø·¬VeS®Á›2AJ=o€@‘iŒxé§+Áñq~¤“T}­$H?é¿=*èìŒôpËëT-ø{ßœYÓl·Õä ì‘›»·øoMßùh0÷ì¡^ò·f=¾ì_õ÷nñìÒƒ4UXhŠùßl#Ñ$…UcQ)×»5é¾ê¼¿*ÒÏRU|*ui§5Ÿ‡Õk˜±¾¥wEÊâ›ÉU[ ¶‹wwÔ0„¯ÌE%ñá¾iNöÝ¢¦,~¨;ëRµ50BUÒ²3nSþ5eqô&V²]BáÊ9î;‰.Ç.oäN‰•:6ÉE‚®gÔ^¶DÚj‡äŽpÎzÈôq=JÝ༗‹·MµZpÍ÷ר¸Nfשð8§bÞ\ùøs‰¸#DeB®R`™Q /IMLÓÔ±¬+@%¡Ì -Q½9ˆ`Ž÷ ºªoòÎÔ×ô=£Ê†u[ƒ(¯ÄK•9_MáŽun#3ˆy³m5c­,@ðtþgJŒ¬38äëÿ|tåV4û ;”ѾMÇúnEèeŽâ¦HæI}®ÉXS+1m55·ŒJ·Qvʼ[¹-ˆÅéƒÃ\V)¤‘¶d–?~üéÅ'¦'I<Á¸÷FͱÏA9ý軫»ËÞ»°JZ¦öN­YËò½}êª-ý”éòhœûã>Rs!–êã'˜w¥ê +ÇØ/¹L3u³x‡oR…0S§_âq—©Ã'ûôÇ:¿Ìwdq&ÃX¤©¦W-Q-É4e+u,‘/¦O5«­6ø{J·$Ô5ì…ê«è´yÒÓK•DÙïu ܇jŽ×%*w6•߬܇tІ…íêµ ¤ýjuÕ&ðŸ³íM†Ý¼ã…éÅ¿9%Xõ‹°ö ª…r*²iîìs«ô Øz|¸«^ø±Þ"aвE¾jˆ.ó†â'ÞÁ+¹šóÝŒBùˆ{cÚ’ºJ nþ•§Í÷œ*ð¯Ðù_æä°ºüÉu­®Ê:9iGsmÝ3mp\.泸eJ•”}/!§kþ¹ =¾Ñ€µ\œF ·ê,]Ê•o±ë+c7'd² ÍÇ JíÕîâ0‚¬!}B†‡dº\bò4¦³P=³écž•tâëµaJ»V)~Þ\*®6¯X+uÉ» }žpÔ®{Ý5UvÇ);NL4콯:`OÛ¯”B4xÛ?ˆˆÓáñ6´ ÃJXQˆ„èX™½$Žh*8«š­ñ2\Сî™5‡·ìVÞáe}.ìÞ]‚Ș¡x|Ř|M`Z,Çv²`2}úà&ÿ†,ç®Öui€Ã¸ã*ÊfåÏY%Èw`w²BKJ—IùÔ{7Ö?n~³Ã›C¾À57väìÔyŠS tôÏ(߉’âš/pwÅ]–&7¬ø„}«þå’ņû>>Œ¿ Æ’Üá®êW÷ŽÝFÃ>õ®°u\²µtˆüWs‹¼oýÊ=€T„uרk-ì5kçSöHÓ³½áæZ3µ 9MuqËpR^ŒqБ£ËÂÒÔ6†r?†ofªÅ;œ[gUêû¬+¡í`AìqìÃJ°hfßwæQY*V\Â¥ù¢ZpurŸ«¶v5××êmKÑJ_Èc—zM3Z¢­[íè"꜌Þ¾0ò_þpˆù©’¼ã©æj¬”jH¸9§7œÑi*·ÒõnˆuˆÎŽNR=uÁUC’´(ÐG Ênåø»^¡išn(\b¨:bÜäMG$úŒŽo >pHb‚XõC²@t†Ãe,õK?|û\« O)2è:ÿUý„|’ ¥4øSükŠúÿÑO}iî‘úù&‹ä1º@\!³ãåä>u@¨ª#I¾OkBWBÀR5ÎÙD=¼ØSgÙjí½»4QRðÄÎA#­ìÙ3ürÛ!êÍS`®ú}.p< p§R{šÁÓ—‡ðÏ+Ÿž?/Ý Â£.‡â™@Ç…€?FŸÌ­©ö3xz$Z/ZîU)àÃW‘?ѶªlY#õ5-ýò¶…ׯԗ_Ê‘¸’­B`k 5Ÿ+½þ–UùR”äÂæøçp¯êc\êÿE]ÍÅྙû÷û¬è/íŽ{§ÌÐOÝH…JmWŒ¥‡?ËòŸø72kw (»üÔ(ÑÖ? ¶’~i;ö:Þ>îLµá˜ 0„”Nà ¶„Yïª(8/ž>àÉÖ e9Ð|R)ú½ šwê˜Ó‚x¸‡Ž™µÂXvÊàÏþPKR}z=‡lZm…ñ1(crystalspace-glshader-cg/mk/jam/swig.jamUT \ÇïLó´Mux êêíZëSÛHÿþŠYÃ1fC{!Ç6à-^e›äRÆëilk#K*ëlíÿ~Ý=dC²U{[÷a)À–fú7ýš~Œ´yô'þll²~rÁ¦qÊÄ}0ƒí8Y¦Álž±zÛÙÿþûìvɺià±A‰yqöZ¨ooõ/nzñâÍòçH~îf_8{—ºyÄ^/ðâ¿¿ÍOESÄyêq`aÆ›Ïpàg8 ˜š.|¦œ3O³{7å‡lçÌs#–r?YÜægAÆÜÈßq±L.“`yäó”esÎ2ž.‹§tqrqÍÎÔ'<⩲«ü6qÏG‚3W°ïˆ9÷A ‡´ÇÈÏ@ñÃŽcXÂÍ‚8:d<€ñ”ÝtpÍöõj ²Á€¿º›¡©Ä‹¤t€ù% ݬ n>¤BhŸÁÏãÄ›0¨á>CvËèxš‡ 3%ЇÞðôòzÈZÙ‡V¿ßº~<„éÙ<Î3Æï¸ I6—ºQ¶Dλýö)Ìo½ëõ†ë);î /ºƒ;¾ì³»jõ‡½öõY«Ï®®ûW—ƒn“±ç_Q¸DÓZŸ’ A¯>ÏÜ FÁìX }6wï8˜ßãÁ0ê2|ïÛ +áÜ0Žf$=>dÁ”EqÖ`÷i~•Åš¼!Áz‘×l°W?¼‚µîÀÔmwq›þ ¾ž·Ø÷ûÏžÿ»Á®-èOÝÌÀòV½}Þi>ôNœß6ÛdW±Èv“4ö¸ˆªô3€Ý¾;#Å µŸ>eÓ äM¤!ºú3‡}à,â0 ÒƒÆòTy×k‘ùA”5çoÀ:SØþ‚õ.†¯^LÚuô` ‘ÃZ”7¼9Á-¸ IŽËO&ƒa§=i_^ †àP“óV»9 b5tÖ;ï™û ×KcÁ¹Èí–«•aGbäà6O`Å òÂÜç~m1cÁÙÕ<‚‘¹aHV ©!iÎ5•°ÀÄREY°OØ*fºP¬?÷·R*}\sîF¹‘äÛVÂŽ¯‰›œ-ÅF ‹å€Áû6¡¸ë£#ê¹g[k=wX‡‡6D’Æ‹#ˆ L¶ßاSâé6ûÌ—÷qºâ¨0Oª±}Îü˜£Z3ÄN(#g\ ŒyKP›ç×:ÿ5ç‡!0H+SL[·/2{Ö|ÞÜß§ÐuÅÓñEºÃÏ úJŠ{–gŸ"~Ïêè—Ù2áÎ(oø×œ8ƒ¼FsôœA)#ä®ÈØÌ󌣽ZÄ‘ dûÚ7ƒø-àjAl Uü4N­Ò‚ZD>dK÷Òaž˜ ©š^’h3pjr[VSþÆ0êLÀ@¸3‚lâ‰Äõx­ÉNã{Ü ’5já.!|£˜Á\ëÀ€!X»¦ÒÇ=$ â0ra'K“šÅpƒ*¬u1m»Ò¢”Lî ò­àá]I¾WKÀZöþ÷T܉Uð¡§Á,OeØanB>cúЊgíd'sÁÍ%dý„Gð½ÁxæaJ4Á`Òéõ»O'èÁ2^ºŸyÁ‡ø$ é6ö—MU ÀïÜõ>Ca‚É|<7ÃÒAÄažiw» ©O1[Yrÿðõ=ææY\Ä="ÛÛy‹ª?ØKÀ4{Y¼çÇY€»èíÎCO]¸è#‹G“­lG³ lývtQ®;äáI¾šÆ¿p/c²xTj,†„ÆY *¬ ™ò\/Ëaq¥E6QEÀŠ¥› ¥}ä è ÿ°ºI(^_”/,¨Øœ/4O»"áèÄ3›q©+È[ÂÊêB¸¦M¦¢^›ƒng2h÷{WCv´5Em[ìÝÜÔGìÉxg“þ+7Åït=z}Së?z77Ðùf0Å€ý@ÂÕ“´>: wºÖNÖë1×ͨÞù =yßí›»RVö:ˆ!¯Ü…<í¦3{dª ƒºÌO»¹¹ù'þ±ïô L®>B|áhÊ\ÊCcúÝÁð²ß”KÜÛ77ÏÊB­§/¥Ñ2,¸7£‹½›-™ö|º!ö ]—¨£ÇüìŒño¼Á¡»77#œ… ²‘{–gI– Љ±Êí ¸n÷Vƒ¾ù“žtdä Ãð¿v]øN×äº2ú>è¸&6®(®:P1‚QÕ üʰ5úùíxç-\Á½=»Æ7pÊB‹eàK‚ìõ‹ ‹f¹;ãl¤ï‡îL˜+âŽ(ø3²Èa„®§iü…B¿¤ËÜ}B…3Æô£NìÀ\ÉQéBŒ}Ò Û ÂØ'Åò¶ìà½4€>2ši,Ãû'ým[™™BáŸâ4ä¨I…*Jµª€B,«WÀ–Ï4 '8ÄR¿¡ÚX,v²¦0¦®›“;C†äåÖRç à¥`w£ZéIÁ$ÙéMoB t_,P“$Ç)$*Jtš­*뢤L‘1Õ"Z“&ʯªyÕE™‘ØÒÜ6õ´cœÚè &ýa5á£%¨DÂâF_Cs+“ ˆ¥e&Ï#-„^@Í{á7š:P–/T/WÃF–Ô…Çl«~vÙn »“a«Ò:@ûÉø>¸ˆ©}?Pz“ûR~‚½oÛŒizµ[¶±vq¡æä{ˆ¶RPR †RÜMa…µU-™áWnB›cË¥M™€þo¶z@™~¡¨PeÝ5@d׈d9—¬ÍÒ<ä¦9Îâd7„84}Êgµ­:„W®54””¥píbcÆÑ®^ù‡äµ]AT³Úm≊;QÙo¤0TÐ*3¨"„Œ°”ǃ ÐI ®"<÷ã][éFXÊeiîe²ñž‹€5”Z%Ók±U^J3-¶~·˜3%!ì—7uŽ=/%#¾XT9‘†_®¡Uu$¿*ûƒgzÊ+š—³HÄbÒŠî±&Å¡UÌ–ä;²Z&£|7ÊÀûmÝRCiU`4J½¼ÖäÊ<ÉNµX*ï%"!šÇ“Að¸°ÅöV]kSKxî~ægXðÊÄ*ìzOtJÞ·YœtXµ&nÜt]ä(j/UÉ0¿B Óg·äŒê‰¨©¦HF”:¾[Uƒš¦{HáÐÌ;ÿܽ®Žü®>Kú*i¢hd¼„…³œÖ€p ñÏåÌ1¼ò9ÄkyM¡TVƒwO''2/0GAp»Íƒ0“p\Ã#oY É%´ö e¬J Õ£7?}ЩÌñYëd€§Å¤§G q«^LqØ®íÃÊçp÷ÃHO^ªý®í´«üyÄÚqÊí`,(´9† fÕƒ“£ƒÎQÕà…¥ GµƒaÙQKV,M{Ø÷ÿïm¹*GÙ–J5ZóÉn<¯@=®oå ›¬…cVvIµxloZ¢DÇé¶úíÓÉàòºßî:ÍÂ|Và/[ORHÞ‹xvT!)¥/ þe~ªbði;3`ƒä $V-Í:íôOú½ÁpºÓÀpý+£ê­ž½wSÍú¸Øz6Ç]Ürƒëw^Á¹(}†ùլݿ>ë®®,OÕð­‹Ëvëb­ºÐ™`üª5vû&ôõóˆTóxú±Ã²lãÖ8îEœ£3Y“ä@+¼w—bõþ)“2díDŸÉ#‚@¿ð!gÕ4×ml"Y¥©,±T™e9ìù6BQ4¬V%¿´Ë•‰UÇ™½h÷nÅÎ.´µÔûj²>ÖPUã¾×òm3Ëv•ÜZŒLžo‡Eda˜Äú@)bçü’.eÌ©º*t½J‰ÔÖhQø„+*µ¨ÖùΪf¿àk VEùb«m51>¨6u"y´šþˆÞ$éW\qælºrz{HußBñ5ÝiŒå•‘ñH9hY#æŠó +ø@fT§º¦P®Y) ÿTOŠDÝ_3žFnQ5 ºxäd¾|Þ.Ûå»é\+˜4²4z•&°ÜèUºÀu­Ú‹oiÕ^<ܪ½üë²?Ø7ýÉ4WVÛM•+TjæÊúÅRã‡3óß¹øï\üw.^ŸPþ‡¹ø/M'ðÏõäÛ*˜€o½/Y‰C[õ7Žš2èvÌhñ~†Ã^ÃÍ×{CM¡q¶êýs‡n©Ëó÷Ž™¡ïS°w~uÖmžµ.N®[']öã‘z-ŽD°§tÿ3”£+#2ºÂØ®÷ô)Ûsׇ†Ô<Û¦ç;òh[õ _yØ\oNnÜÅŸAÁòáx\úù¦öf¼ãŒð£¹³¥Cæ×:X°¾%ÙÇJ ”÷÷ÿPKR}z=C`GÖT *crystalspace-glshader-cg/mk/jam/subdir.jamUT \ÇïLó´Mux êê­VÛŽÛ6}Ž¿b²6 u¼¹ -jÇiµ¾lœø²ð‹EP´DÛìJ¤JRÞ¸Aþ½3”dÙ›M[Ñ‹-qæpæpÎ «ïøTªp­ô-0­RB¢Õ*â±»å0OW=¡A§µ†w,^1Ã+ÕGõTZÁ,N¸Jp•O,Ä{H˜ ¶Ü@ëÙ9xÞUÉ^‹ÍÖB½ë½|þü¬ö0fö/š¥^Çô²¢ÿ¿¥†kÓ4*Õ_+½áMÉí›JqðYl…H ©Þþ]kÎÁ¨µ½cš·a¯R˜ÍCa¬«Ôr˜ Ï•†X…b~6Ãd¹vYZ®1_Ì^.'Kå[\rÉ5‹à*]E"ÀÏ—s5гå!&“Á‘ï€â™çñÀ€ødV(Ù.p]óÃwxYì–C6ã«3K)è O%äéað{ˆ˜-›ßb£L:!üV%˜Þ‘†;E°â€¯Ó¨h™]o§Ëø“¸ög3²¸i£¹ÝªÔßñ LÄI$“ÓLÚ=å0îϺoÑÞ¿ކ‹›«ÕÀ &,æã)~Éâû¸˜¾ïOðÃïˆ}„’eÿ¿P¾Tðä1@”׆d˜÷L¸Cý»†Š%¥!/$‹0̺+#ÛµÀ—˜…®q­4g·Í,çÒ3OËñ1†P«¿Æ³ó<÷-[¡§ÿ ývËͪN´@=åý½XÌ8À è'R*Ä ¢>ž¤ ¯og.%Üá“8ìÿΆ£~«×)ܽ]µú×Ûz·®íÙ-a€(DÇvö5¶Gœ*v´´+™3õ@w8îŒcáˆpƒmQHw\&]a-òÀ*-¸É¹/w˹¯`Î)‹ Ï}‘W»®˜„ÉÜ1-N×¼Ì0¸Â¹AC \cÝp“ûº4¾%f°ÛX ‡ÝÊ­šÅN…«w6ç€ã  GR;¸§øñi#w1*#¦4LHžŠäMb䕢ѕ{¹†J>µh(ר?mVd­þƃ'O²ßǨá³{u™U•ÈKê남§²©<*MK=Qµºð\é½9TÍ)fšÓ™‰Ö¬CÆdýè¾µ2*}Z½ƒa.¬ƒ¥ŸOÜΚ؉P%Îø!<|k]vœgû$ÐO¸ M–KëtSËìÔ¿að%—i.šˆk–F6÷r%{Ôy¶t_)nu؆¤;eC§‡ƒTâ!ƒá¦\4±ň%èRg"fè*W¼ «ˆã³N¯ ×tïŠvn‚ãxª— jD×"CW†}6F]TxóK )Êó,kûÔØi´Ó ÇR*5çÒ{@d$FÌ¢\qbÂÛŽÀRMp0˲ƪs¿áF҅Š˜‹WYC…vdØ"=)‰)4Ý…»Hìsgþ u–CMÔ2 IÇ­¯Z¨$n¦È’]·í½Vî=s<Üïæå –™Õ)?ªÇÊ‹bçCe°€®!&_®c•cÖ£!ûÚ;C‡¿PKÒpU>UAk¢nüD*crystalspace-glshader-cg/mk/jam/static.jamUT [cbMó´Mux êêÝ;^à1~ÿuó(®ÇÁ2r8ŸñºÏ“ÓÊ.À?ù3Ï…©Ñƒ¯ÓˆsÓäÑŽø{ –̱}ñ‰'‘;^&œ¹ ³ýɺ&îÖ%ØÒŸðˆ%sÎ-bLéÇÅÕ-ëIÜç‘í±›åØ{®Ãý˜3;f!>‰ç|Ìp¸¶ƒô $=¬ Mà1blÀüf‡ ›¹Ï€¾š ‘€„¸Ò⟘g'éâú*i¤LO˜ëøy{s bxt=9O—Þ>hLJâcwøþúvÈšWŸØÇf¿ß¼~:Òšä\s¡çl`.²}°àá²Ýo½‡ùͳn¯;ü$IX§;¼j¬sÝgMvÓì»­Û^³Ïnnû7׃v±ç. )©OI… × Ol׋µ>Úc Õ›°¹ýÀAýw€P›9`{Û+V€³½ÀŸ÷°,•ðs§Ì’}ö¹`WI°VåûX×wêûìÿïÀâã˜5@Õ-{1ŽÜÉ ¾^6Ùχï~ùË>»4‰¡oì®6¨<ŒÜ0 J}V²žð¹í ¹éYàz< ÑÌ*ÏƼÀá$öŒ°7µS‹ÁÃ>äԹðôØb ²X=8¦8Åø´—I°@à€ü‰Í$¾I½*¦ïº¾ã-'œÝU8~Š'|ZŸßUËF—lbǯjœ7`›2öx®ÿÅ¥ÅÉr:ÛÝ>‹¹ƒª¨W : ·‘Lr Ò0Ð<ƤN¹µ ž?Úa†„nÞ‚êOa©Ap5{fÃßã‚Ñ‚L …{`³ð†ÏùÄ”Á”ýŒ»>ŸÔZƒÑyûìöÂbú3¶®/oº½vt9øÐ²ÔÊ0²g ´l?NF1ŸÕîªõÖ`>qW-ÎZ,¸ŸÔP@<Ú¡HjÑ~T¶l³°¿ô>/]X¶àç5='EŒÜ‡ÀÕ?Dº¥“€‚‘ZìY}©YGìåHÎÏ =Æž_2P¨P²Ú£ÊË÷肨!à¹äØ%ò‹p ž%}F‘ºÂ¥XuÐêŒníÑ`Ø„ 9ºéÝ^t¯jà†3˪nMtŸÏ0¤4oEÞ*>LhïRN(4(*ΰ‹`:òdÈJxjbƒª3ªìBxâ!ÆN‘ô)ŠÄé2zÊÏì<¸ÿLì"R؉ °£ˆÏêN²{‚)–4™V¶‚E`ÅrÀ-¡Z4\Ú_x‘ô 2Ø»n5‡íѰٿhÅ™ÉÉʹ­·o;½æÅ€AHI'¿EþñŸc«Þþû°Ý¿jözݳUoÑlKP%Ø@_ðaü"B,Ætèb€A0ðû™LZO(\ktÙ6;FA,…GT¨ùjôœ‡àmq^ Ùi/ðßvR1KÑxܦ)†aX=l˜+ØæÉJ°47âÉ22Å]j¡·ÂëÖYè¡eXSh;_ì7ý}KÓÅ(Ó!ä¿©I0©ÂÖ¸+ó†Šm”®5,ÉT-ŸYÕêÂlôjœ¥ÐÿX‡´›Pd²¬Aü~çÜ쟧kýscªÈó–ÿÿPD re=|á-y3 ɾO™—MãPìt/o®ûÃÑàÓ%¹þd„þ'g=ËOf aª—u—¾½lpÈgsÁX}ƒasþ/Ⱦ®NýßUhX<e"Õ ï›ýöùˆŒT ‹êÊlºÚðÙiÞö†ª¦øÐìw›g½ö¨ß¾è†}xx}¥×ÍWT­büD_˜ᾆŠ[ØÜá¶9À2Û;÷Ü [wãxÉc DVæ;aN,\䃑/Ñb†k?†VÍJé~.[ 6¬¦êS,vºWíµœ±Ú* ´ ­©1Gûï¿ß8·©XåG ¨ÑÈM ØŒŽÂ%ìò ÈFoÑôJ˜zö $F#‰<âžýn«ÜRˆg·ÝÞy¦Ãxõ¥£†Îöosý˜õƒž¦ÃPyÒ±>ŸÊÔVšdeLIqùH‚{¡¿e|¬ AvFJ'[GÝâ:‰Êì2”§ð]ÖV›5òºî¸X®*§3sÈÙ”Lèï›”zÐÏë)¾¬ åt£ HYrŽšËXÛ™¢ I<5ØG;ò]†ÕUÆWÅæ µÝÞUSŒ°òW`šÉU”é«ùáƒ)f4+lQúA(‡ð4Ïó(>Ël úpyEO*uÅ‚ ?³nÜöøõ*²§ IzF½ù¡Ùía¥‰–ꎲ>Úœ‡VN /’¼‹È3¢9OP)5WA"·lDRóW¹YõƒŒ†I³ S‘Ëõµ8³l×ÔS/ª¿Õ!¥Î“'õl¶.Ä2³é¥ÜU(‹Å®?å.C<è-ƒØ“ïS˜)€Klê÷ù—?;_†B K›2DRÜQ½HH¿Ýk~Êš:*^-ú×@Šžº¥ c=…g!ÒiÒ„×I”0ôJ0¤‚y…õ Sû¬§UGKZ‡9…¤´«N†ú³šlH}y¢‘ì]ö믿²îÊ:ÇXé½n‹ÀGyõ•ä+,Xp=.¤ãÝÏP©~Ró®ï.lï'QÇšÔ4U¿=QÜ_ãO% ‘Öõײ×0ŒÊÔ²Õĉ¡žÒ„¸Ëz†eBk&ƒ\Ò˜L?òŽ1¨Áýfÿ“õ-#7eKmØþàØüÚeÄ$ݵ- Ndôqã°" ÑÞ´{õ7Qͽ©Ic(‰w(zÙ-äWíö¹X³Eû]‘KÆÀO{ @ò«Øéû°Û>‡ ¨²ƒ¾O»ôUö¡·ß<ù`GjgÏpíæe•û¯†ûdd»³}„Ûù½¡mG8ý&?—ÒÕ1mMxIãÊ–°·!z‹"0‚H8D±¦h¡lÜ1˜¼7 í]q§€º”¹Þ®¼…=¿¬_í¥âÙšáØ²G’fW]xÞ«ýØ®€€›ç¹Á8Rûc¼OQÈTêïŠö:Þ~ |.¯mÐ-¡ÞÅMï§iäB™í=ÕÿÈýŠ:f‡!}ê°L¿r²QÍÓœ'Ý<¥{zÂòö©!‡½HÕ÷‹™l’€+'Å«k¹Æf­*GfÊ‹«–Ù5Œ¸>% ØÔvð>/2ž"ÁÑáÑTð¥{†¸CÍ7bã:kRÏtÄiK6bŒe”_ÄÜ{¬"¦`QÐXÁåñ{œ‹i€—l#¬ú£ÐxOšOÙzT×3ó)a_ø;®Åm3õuñ:ª ^^sÕ.ÝoÈË´u9'ÇÖõ ˆM¨³ äD%W Q¥J÷¦e·´ÄæŒ~©n¿›ÇbÒÍT²‘©òhi¹FóU'®’m~–m·g¢¾“…)ÕþwšþÒõFE-ªÚF,1* ó\*Ö7™QêªÅ…š÷¶HãõÙ_Û­!T‰¥"ƒY›D|†¾òE^PC”‚R!Y3hKÀYÙÂiž¹ •TÌìœI˜¯nδùS6èíª3¶øÁ9§;œY‰á=Ry^.õª;j (R€‰ñÜ[–@¸jŸ›¥Þ釠„!\\Wû:©^­Ø@n*Ç9Û1Ïka°ÄSýZ¿d‡zQv¿Øj™Wy,Q™”¸@mrÔÜ´âÎÝÚ°\MVë_ÈH4év8žàˆ+¿L Úgb?RðPØýµ¯ÎÛW­n{ºiýŸö¢xxºz¥y ª$gPe´Éňàs³½QÆi”+¤µà*Ì2¯@ÑŠôtÃ2tWåAÁA@iTu.·«¥´U[é±C‘fÓx Ëé‰©è° Ëf¦_Mçf…¼ŽDõ7º\ÀC(kE ct}ƒ7gš=qREWÌV’JŒÅ“G}É>IÙ s”^1¦š€ åN)1C³*Ú¶ˆé÷!€  ¾Á¤Epª´èöUb´i2áC͖휤ØÎÛq5¯°©–iQZ(ˆžJ®CB}O»«2C¨Š}1wKyS¡¡nX•W‘ÕŒ!ä©Z±þéþpFÌ@Ãluça¼ ™Å³‚2èÅ´hB=4c–zhÆ®üY'BZÉ· eÛÊ÷0ÓSS|•ÊøP\BL[êGéš5†¨u“žHȸP5A¬q†2½2Ø6\ £Á™‚–±µ+SEÞ²!ÙÛôž^œw?J¸ Tv|ÌÚ×CvJ¹´²â⃈¡”Ssg¦§Jz¤Œ4À§õÒii<Ô+‰<,ùD¥vÞmˆ°Ó˜à3çë00^‰Eš’Âa¥U•»b¡¾óP²tܲ×Êð®’fèr‡/8D«/#’8^¸ÙK¯·«ûþê¥7ÙÓÒQ³ŸÍGI!ôOÄ1ÿäc(i¨ÌyóîÃn;øBõ&@UYˆ;spt„FïØa³hôæÙù|ÏNª*ºdÐ>·Ø^ܸ»ƒá¯ÙQܨÂ×*}»«Õ¼³Õ»wÕÆ;F̧§zµ@zTòàßÒçøŠ-‰çôà‡ @üÌvîÌÄs|{Þ€ÓB>ewïFfkxÝÿ$_¨h÷eéœÝa)*ÞCÙ81|«U¾ª¡fvn¯Z™÷4jwï,–ÞÆhÌ4óŠQ<äÓ üVús<¼V‚ªÊÊTŒ>—=Dn4£ºKF­ÖÚ?£«jjïû)j³Š´r`Lø z þ’/à1ðht´^'J&ô¿Äpeâ"áâ;1%c/¥OßøÆ_¼ñR2\]e/©Q¼TþPKR}z=ð®òÊxu,crystalspace-glshader-cg/mk/jam/resource.jamUT \ÇïLó´Mux êêÝW]oÛ6}÷¯¸M‚Ú<¯M» K–ažë´.Ò$°ÁPt´DÙD$Ñ )§BÑÿ¾s)Ê_Mšë^æ‡D¢xÏ=÷ëˆÚ?ùŽ¿Æ>ŠTZJ´¡¹ÈãTå3q¬œÒ¹HÉH« IÛÅÖËT8lÌ~° ©DEôVd”(ÈDIz)Q±$7—V’J(—2–1laÝ׋ҨÙÜQ«ß>|öì%MK Œ‹ÜÎU.é7®þ¨/"Ýtö»Ào2W–R55”„ËÄHIV'îNyL¥.(9XÇÊ:£¦… GìG˜éX%°sX‘ÇÒ0WrÒd–tâo^Ÿ_ÑYpñZæÒ —Å4Ñ3É‘ K ^±s#Š ŽmO™Ï8ð¡S ‚3yLRá¹!dÈâžko²Cà׎C0ž^°eäKBâ×ÆÝ‡²±:&•{ø¹^p9Œ4Ü©4¥©¤ÂʤH;„ÐõpòæâjB½óºîF½óÉÍ1¶»¹.É¥¬ÀT¶H°œ¹+9†wƒQÿ ö÷þž '7º¡Óáä|0ÓéňztÙM†ý«³Þˆ.¯F—ãA—h,å# ¯Ðê¬'¾„Èk,P©]åáe· šÆèá¥Dù#©– *(BÓ}{a+8‘j G³u†}Ckס;£ÐWNµä l˜GÝýüËOôNXK½%JÝÙs2Ãå»=;|þâ×]{> ï:Þý}ê-PµÈsF:%Q¤Ža˜éˆ\‰&ù  ÏýÅB¸9æn¡s™;Kïß3G“ ±–ú–› ÊG_×E˜Y‘±A‡‚B@8Gqðéñá4 ‰5³ÕôÕ†qÅŠkÎË3ÅMXsF æ*š{љʀÖÌD¤íÇf‡šw*qØô3Õ,rõ±‰n›0\èÌ@S¤)o*l7«SÙì®cÝIzAgÊa¼:4ôÐøÆW£þ€Ÿ`¨ân˜I+c!e-Zñ«ÕÑgSLÆj©âm¸‘‰:±r·pd Ô59ï†(+¬ã€êºLeµð·^Ì!HÞÈr+C” pèe?9¼Y&‰Œ\÷žbßéÍé “o8 ù2·àpíJÈšìKÜmø0îïÒÆ§Qª#¤hexB­çm:^=ñ«‡›«ž¯¾Ø]åªú'/7ŸÜÊ‹!­Ú_×ì÷b3¢:h1J7ÌŽuÌ]è¬"¢Þñv±í/üvïjÞY´ýR…B¡¥ÖµÉ †±¯s¤å•2vÓÞ¼Ïþ¯L!^a´¶š¶½ð¹±ÊÞø<ªìúá¨*ïˆå V*‹6=}Juªžœ@EÓU†¾Žy_Îaœ0½ªÕ6\7>ß§m›¢6Væ"ûo…­4¾ùRÔBË㘳"SÏ>6ÁݿѴ¯JT€xH¨†IõvóÓ‡ÿx³Õ)è0Å|`Z+óR‰‡Þ*¿CÕôwïQªZ$¶õjGð* ÈR•ÏÔ'ÛŸa8Ç¥aì1ÚV&ù‘ý)—–ÆÈŽPÇG_¨/ª¶-a÷+×·IøI÷½D éØ,ÿ?–,ÿóŸS1KK>Ɇ÷*„óiÉ­ƒc"Б6†¯ +fx߬bZåéä7z=˜lÇ6ˆæšö®…Éñ=¢¿wê|´²> |›kW Zr/ 퉄ñ»MÞÝÛÕá véo¥€tͺ0 Ÿië–="ù/³Züô–Ô5Qøb«›:ôâm®ïrþ²©!üìÊ ƒêðTË\j¤ˆËêØJ‡cSk£ mÑjB¶)~¢-æÑi*föqâ‰ß¶À!šÏ†ÕÙ»þ:%V@ØÈ´ºãÃÏêó5€=ó&áÀŒùþPKR}z=Cptz« +crystalspace-glshader-cg/mk/jam/pythmod.jamUT \ÇïLó´Mux êê­WmoÛ6þ<ÿŠCê6xmú†Ù VE–]·ò ,ymP-Ñ6[EH*©1ä¿ïHQoIºn@ÄÉ»çÞž;ÊOÎâOç ¬ó„JØq‘ D±tÙQx ×<ÖgryvlPÐsûpöôé+Øá‚)[*öÊÒΔşðÀ$$l+ˆ8>î¥ ùNÝAGpä9D$Ac&•`Û\Q@ ’Æ¿¡h—íPO`ySê@AQq-ïÌbºØ€oMLiJI`•oávDSIHÈôŽ<Ðý-à´îDûX`ÂÑFÎÓP†çn¨¸†³Òš…<ô¯G”Ax<Óš}tþ Qµòà{Ù¨ƒŽ¥þÀ3 ï€À˜†[–$°¥KºË“S@ÉèÃ,|»Ü„à,.ჳ^;‹ðr„âX­\½¡»Î†Øœ ©:êæÞÚ}‹òÎÅÌŸ…—Öu“Y¸ð‚&Ë58°rÖáÌÝøÎV›õjx€€Ò$¼@+³¾3%ļÆT–È*—Xv‰®&1È ÅòG”Ý £"ä×/lGŽ\ÕÑ£Zá°¤\Â-’]çÿZòÓl–FƒSxõú%̉”àÜ`©]r½,ÞããܧgÏžÿ~ ›À1ýä.\aËÍy ;N÷vGÁ€X`:“B$3Ñí‰òNþ%LgÌè I*’$¹ówÊ­ –ÆØçrn Û{Ö‡!þ;ëès×)Ô',¡>2ÕK•86AaE{ªàÕº½?úW¡³žz¡@Æx² ÐÇn¯ë£à§öÆ”ª¿ˆé:¡Ÿâ˜f4q^ ml[%Ñ­O0æM_N«ź­ÿ=ï”;¬ÒÔÚ¼b¢¬»)¹¦([dìJŠÈÔÆX‘ lQ+Ÿ¥_?h~ Áû†’‰©åb*#Ckï£3_ù^0lÔ0¢ûœi£C¸Š¤Yác¹;ˆ² +yeÖf1„­-HYZ[è!þºÞt3«,V62—1a…íÞ1 –)òú"€ÉËyɇò@+™Ý×ÍÝ(¡8b .è]ì½O°8ΞmÎíc&ø—=N§Ï(¡M¬éëI…˯3ÌýTð<“µÏ##d>ÆhW03d1”ªÚÚ¾•û~óèyI‹AvŒ­HUʆÜËR¿UÜJ`u‰Óvr¯*;–ž ŒgåY;JB“©ÕþÑgX™‰f|º“D÷–&Yyrra2ªš:±RE9$^K2ùÜ´M`VS™®û£æÛ/4R…°ui·º=‹Të`e»½"'ƒùr¼ñ½+ïcØ7gE$Ð"}ç©•ÁÝ™O›Ç€´kØ”"Ô*É÷, ²Uj ¬Æ4júQ4ÇÁr³v½ÀœW6Ηï<7,Îm–ú÷‰TÕêqÙã‡$r' ÙËZ}åo¦³ÅÀøÎ4¨¬<.ä[¡nÏŸ-Þû³‹JaÁ•’…F›­ȽL”ç=‡Mí9ùJ}¤‰¢MÍaQÜ3¡¡‹ñ=° Óž½¨ R{Ðx4£Ei ø½Û«¥ó¢ßä«NÓ`ì]l¦ƒÙb²¾â Ãú>:9RyÒb]9è¶ù^_†}¾K©±Þš¥;þíîåªRÿ¿Ù‚Ö0ýõ¼UÊ,¸«_`=+ómo±«º²Và0sÁ&ò¾³ÝÉ2|+"xûYßôæl„Žï_Ði7^µNrKŽËŒÿæ¼IÇz×5Oõ^‹”rw{Lô[oµb Œn˜¯(vL@&ióò %3Ô’(ñæÍ¦‚þÙ)Ñè7Ú¼)GÒïÆ–¿±#¸5Øõ+/7_’îs²Gf¡ê?PKR}z=z¼t½Q,crystalspace-glshader-cg/mk/jam/property.jamUT \ÇïLó´Mux êê­TkoÛ8üî_1ç° ¸¾\z´n‹ÓIk q ?P‡Â ¥UD@"’R`ýï·¤¤øz¹¾€èEîwfgyòúI¿Þ Þ’"#c”F—dÜáÙ^Ü¡ 8JÚbÂ3]Œ¼Ë†³ÎÏÎ~Åþ€ Ÿ´®”ͤ"¼²íêÏnëI¬‹7½Fào“I‹\î0ð25D°:u÷ÂÐ]! †i‘ûʤƒPÉÏڠЉL9Ï5`•JÈÀeG¦°Ðiøy»Øâª½"Ð9–Õ>çB¯dLÊ„EéwlF ³hà|gÝÖƒKÍW'µš‚$ŸÔd,ÿã¼»­…ƒë ç)˜O—>sÄÅ wLž|I#éRøŒÛÁ fîežcO¨,¥U>G6@ïç›w7Û ¢Å-ÞG«U´ØÜN9Üeºr š0Y”¹dl&g„rÏáúb5{ÇñÑ_ó«ùæ¶-Ýàr¾Y\¬×¸¼Y!Â2Zmæ³íU´Âr»ZÞ¬/&Àšè‚7hêih!ëš2·:ÜrÛ-—š'ÈDMÜþ˜dÍ… Äìºïol'r­î{N;*<…L¡´ãÞHö•Ó_mù¸›«x2Æïü†ka-¢š[=ÅÞÈ䎗×ÎÎyþbŒí: „žx4¹Še;“ð3ùJ ѹÊ(XÔ"¯È Õ 0>nà}kÅz³^0ÂÀËP²¤X Ê[ÕL & *vYÀã7<^Û'v¡õvbS% $SÉÞ@<Ü<.Fä%? Už~KŒˆylÀ ÓkcöÃ8ü‡~ñ쇜=¹Ö=ìÞ<ûÙõ„Si¬;bNz¦âb:©z{@®cvH‰×ø»îdÁ,p:|5b%O‡oFø€i¯£Ï;§Ãr4â­O^ù5¹ÿŸá^¶‚5FIòHwv×tŸ`žbò~ÚÙŠ>«f“1,¹F?OîŒQúÎTÔoùý« ¦ØÄÖ{:|> [섟ø¯ác8hîŸøÐ+‚ë=f9 óe;º¦GB¤F¤hØ|÷Ã|Úúúý¦ºÞɳ'ýÂàÉšnTNæÒÉ|ÕþÙz⛂ŸÑ b´žìïv¦;¯ÂÎkÐþPKR}z=RÚ¡¼y *crystalspace-glshader-cg/mk/jam/plugin.jamUT \ÇïLó´Mux êê­XmoÛ8þ\ÿŠÙ¤@mlªv[Ü.i{U;õžã–Ý^P†,Ñ1YD*©wÑÿ~3êÅ/éuõ‡D"gž!ç}tøö'þZ‡0.¡a¡rÈ’âV¦å"4R¥¸×UÙ:—·KínçÕË—¯a¾†‹Ðü!à4‹Þ¬èeNÏï -ríiUä‘@¸[á¥Â¼k"þ&K©!‘H𝹠ÕÂ<„¹8µ* SÈE,µÉå¼0¤0_àÑV*– ä3 V¤±ÈÁ,‘¯4¨…}9MaèDœ‹TäaWÅ<‘.G"ÕB ­è¥ˆñ2 G¼}:OàÎ}…"¬N@HÜÏáo‡ïðª”æ Ï× ]!g<•g¿†$45³÷˜6êKÇ€& ø¥ÊðzKF5<È$¹Ôñ¢HŽ)èÓ`òár:t ŸüñØM®OÜ,Ua@Ü “«,‘ˆ—ËÃÔ¬é½q÷Òû§ƒá`r펞C0õ‚ú—cðáÊOÝéÐÃÕt|uô<€@ˆÿ¡pF+µ¾°&D½ÆÂ„2Ñ•®ÑìšÄ° ïš?òB„¾÷ã†e¸0Qé­½=²Õ>¹€T™#xÈ%ú•Qß5ùƒ ÒÈ;‚¿ÿãoèñZƒ¦î†«y.ã[|¼ðáå«ß^ÿó¦o/ôS³Lû½‰ÿz ^¤]lž´Îǃ`Rnðê •Š;­C<öÓñF®‡¤†ÏøÌ®©áÆRœ2!m;|rÔ¹ b‰™Á]¯±Pùb†Z±Ãq*½œ‘ÑcR‡¥ŒÐ¹D&ÜÔ*C¢[¡“㊲ÔÏôF‰Àf!a8;QxzHÈÍ:³'±†0ÅÔâ-ƒDˆÂÁ5Žý¥Ð†Î.oStÇØÃ@k ó«4YSxÅVØEð± Y®’ØÒ­õ=£rÏ-\»´¥3Q‚¢Ã¤J¦Ú„(•MÎGé-Vé3Œd ?kds„¥CLš†Ò_>.¥\²ÑŽñõI…~ gP SdhÁX,Â"1%¦õdI8O$æÌLàŸÔÓµKqV/¤–jÍB1aT »‡&œ'`#-E¯AƆ€T-E’ѱ,œLïÕ@K$™U© Țܢ¡Ð¦âÁ»^¦H¥yN£YY¦r³‹a}Œý½õg ࢥˆîJÇ•.½;å5ÌÒÐð¡Ý9ðŸÓ"Ù‹„ÁˆyÚ~ݱÿÞt(Èaú¡ #*\ƒúå-YßÏ=( ù•ùˆÝÅsn,KÐó1ý¢ÛáVÉÞA~$´;³àr:îö6d:‹‘.^ÉäEdXÞ©„½.Å0c™ˆóLöí<§û=m¿Û$U.‚YˆØ2¨Ÿ¶q|vª`e+T¥‹¿>0d6¹¾êA™¥¬ »|yú{¯; ìe¸N½Ë÷æÝJ^µ;ñÇ罉Ýdm4öH½ýÁ°gwkÚó`/à %,µHþDõѤ ƒña½HïÐçcöD]΂‰p6Œþ=wpœ XÌ?†¹¤pvÜV‰òã¸Ò£KŒÖ™0˜0YÄËLÙr¡ß¥F†ä”QRØU: •JU‚IÁ«rŒTŠ•4¥)%¹·‹Uhs³@ëŽ1f]Þ´Üœ“1+…6 QXæ."‰°{ ‹*‡ -s4Œgß“YôóO7¥Î*ß›åb…÷Úõ)MÊ Ñ%½ýƒ5ÃÒb9†Ž]g6—ÕçßnJœÉ›"w;ÎÕpz>žsz¯ÁÙ)evJ5À”ø¯ž7Nô}-ìaùÆ.Â;1ÄÛ±«5²Éð²ëOz.ÊJÞÇ.‚„_Uÿ&W0=eЀYÞl(«K´ú#V+xö%\¡«gð ò;,âKlh¥y††°~Œ{^ŒNßþ„Y]= tŒZŒôû9¬Ü„Ô¾£ËàÅ:Ùuîø…ÏRõ™- ºN¤Í$0R¦ÏþäÎoOjsÅgè^b;›ºº”©x¿ ¹ã-¨C lNìe!wùjGN]Ïv¤kmÄjÀÛ®#ܼŠ6Ä,ÐÚòŠ’¬vÏYŽYœ8+d§« OzÍÔU]‰¦â«ÉC»n­@9Õ;ëNϽÁ¨é=œ6P ÆÁZèƒêFŒ‹yq[ÕÙ³”9£¥AºP“ß8kU+3+£* LiÖÆÙ~ÝKðš¯SÊHu©¡ÜSÛßÌ\i<¶uÙl““D0U,s~ÅxšøÃáìÌ¯Û 2ieVWꬦláA_Ì×{<è‘n§ö$òö!îô`ÓÞªnÅvûIxÛˆŽ|¯ÛúçÎu†[$dÿáàw+òaEÎÑÀ7q%ÛÚÉvø¸é'ášÁx$4´^íÚ§zmÃYŸ¶kó;¹Ûj²-âŽnJŸÔ÷UøKîø«âV9ÙTGø³d8°4¬Ä8±æî–~x6£òë¸Ë9®}µ÷âv·yÐCxÿþ=œIÎ7ߤêá»mÈU¤_«fZÏ|5Ì1Å|"´i¦§ovÂüDôVëõˆô‰쪫°_,÷úèTb‹lÊÞˆ‡'úÊûj„mµªáü;ӳЄ›Cz5BlMédú WÍèXûìÀo‰µª>a;&ÑKø=Zݺ‰•ætBrFY©ØŽÉüª03隇öU¸všèûØn¶çÛºÞ ç{Q<ù–#è\,Ã{‰n† /=aŸ¹uúçqè®ÀP|ø­³»ÃН"* ù.´CºÉÇVx×Å2a[hL–ÞØ ئ¶FÃŽuk¤þ?'êÆôYÔzäÖ¤†óÕñùÛ§íê³M‡Ãé»F½Ù,Æïxó/kë9{a8'Öù°)_¾¬÷ÿJ'òƒõ®y¾F±»©3OCÝ[gCëU®™ñ Qv4}Ÿ~ôÇ4Á,ŠÙ·n-v˜ÊuF;^”eî˜G-~oÖyüûÛYgiÈÛHætí6fo"ÜÀµpšÅI8Ù£4möŒm»ìl™%O7Ü4Cé´þF™E¬Ê¨(?&•Î^õ™Ë"^¯Ø²X÷Ì®2ÖîKhš äPKR}z=äªpF®“+crystalspace-glshader-cg/mk/jam/options.jamUT \ÇïLó´Mux êê­T]kÛ0}÷¯8k K ͺ–m¬éʼд6 ù „±žŽEÉHrB6úßw;ë^öñPAWG÷œs¯Ÿ^pD LJEÈŒ…#ï¥^Á^í <¼°+òŽ£z¦ØY¹Ê=š½ÖÙéé9–;Ü ÿðÅŠRãrË0ÿ\:²®ãLibäu4ù«¨Á8P.59l Å+crystalspace-glshader-cg/mk/jam/objects.jamUT  Ÿ=Mó´Mux êêÍYëoIÿ¼ù+‚”Xxç w:‡ s'…$²B(jÛv/ãéÑ<Þÿûýªªçå–|¸hWJzªªëñ«W³{ô vvÕ¸ˆL¦.U¡['6²ñRi•™\¹…Ê\‘†øœ;åf˜0W r° \²Iír•«ýAçàÉ“gj¶Qotþ§QÇ©.bõbMÌè÷ÿ™I³@„ᦥ b“¿ÜÙ…üLW6S‘iºQøu‘ƒ›ùšCµq… u¬R3·YžÚY‘es¥ãù? õÚÍí|¹+â¹IU¾2*7é:##賋kuî¯83±Iu¤®ŠYdC‡&ΌҙJè$[™9ŒqÄ{JúL¼>êÔá [*cñ=U·°«ƒò6/²« ß¾ÎÉ„T乄8;P~£"×ÌÁ÷¼Q=W6fñ+—À¼à _l©™Qðñ¢ˆº ”"èÝhúêòzªúÔ»þxÜ¿˜~8y¾rE®Ì­avD²a\ªã|C6¼Ž¯@ß?¦¼ê©:M/†“‰:½«¾ºê§£Áõy¬®®ÇW—“a ÔĘ¿q¸H+½¾à¯s“ke•> ìTæj¥o Â{ E5€šl~>°"NGÀ&ëÁV{øPÙ…Š]ÞU_R \è? yW„â0èªýû9Ÿeª‹Pôz–Úù¿¾é«'OŸý§«®'}6èçìte°P-‹(£¤ÅÑã©Bþ¥ä-²Åÿš©TR>ukÈúC¯¨’ÔÍ"³.}dp»´1ü)ôßkبq3üÇ8„P®nAa‘ånÍBå›Äd"6sQA®«å^£x­H2I[»ØEønÃ.% ICÆ»†q🪬WLNR‹L}1€AŒÔ(È8Ð"2_팮w.úŒÜ@rRø¿@îJE&ß˸š¤f‰¤Bî¥uí3)à³ö¢üÎÎ.b=ö¤§8ŸâœËe¬×Fõ”ùš_äk&­‰¡&÷Â<äæœ %‘«îW«Úê¥p…ߕЂ»ôT¨£ˆ²µt&ë"¡öü¾Ìò=@²,Ö&ø|JM^¤1´@±ã2/÷óÅ^i–âÂÔ N̓fBRw Ë—©Àpi4jEFШõ:qô3fZq˜sÝc˶ý¼ó׎R‘ƒµˆüba¿ªCP¤üŸˆÕ£ý—¥Bi:N?\ oí EGâE‡¿í|kÇó•ÑèLö¬(üm¾&:Aü£ge„É©šØŠH§ OR“q+/6jóœ•_ñµ@« @%‡Ø‹YbBIäúö-Õºÿœ—žÕ^zu2_ŸÇIüùª?Ç[/·Ü8 —¥>öP‚/ÀÿÉ;¨ ß--$ƒýÊøžš\Ÿ^¿îz9EV 6*p@z%û&ן %GÊÉ€+r>5öÑÌ8Rç—ƒþtèÝêÔêY$à Þê¨0\6í ÓÍäòz<v˜ùѾ°ßLûã³á´x9”§ý=4”¡®¢eS.ôIꌎJsJ #=ˆŽ½x˜#ËZ‰Æ°EOýŠj—Eh®o7²ì>U€‡–&Oí 6±Ä¡áˆËAŽ*bçÃí¢Çë4”ò#¤8õnv±àéè®ÿ씕K¬0TÝ­Šd-^ZŠójÐ_LZjõøH}l‘ÂÙA3z?yüâ~ºƒÌÊå /Ço€¡sùðhß‹€väÅ ¾ˆ6(Ëì¸bäO$?ú<€ ÒÜWI®ª¬$‘æ1›L6Àp¯¤ß“r¿'ŸöZš˜xž©=‘¿•XÊ%n*Òˆ¯ppŒžvafÝèô yê:âJÂç€àü%b:ê¯ZàÇó·¦wHfïø¨¢.O:½ÉQUcJßýþ Ð÷“ÔÞR4æŽê%¾ë÷JÀP)÷P,aF“GÝË4.PIåæH*«v—JMæ ÇÅçAát*éJÔ8—‹TÕÉÃ"M©QgÅlnSéלh~Daš›ÚƒÁ} ÍñÞ•ͨ]‡Q1÷¢D³ÍslJÖhNkļ¹Œ hkªlŠöÑ#&ƒþ…EPÄHá[GÕ—¿Q{é0we;‹ Iê¬+eàzLØ¥Ìíé|g ¸7yßúé“ë5å‰?.›l¥zSh9U©SËU¶K Æè«Ö˜Z±{笯ø¬ÁRõeÊ NT,ŒÚ ÃÁB¤àkLÊ&ë–oxxEÛ§Õ )d¥dù°âl<šLƒ­j{C1¿S5{Ã*ãP%{'ulqQù‹Q¸NlšÝ'Bx«"ÈŠÞCfiúƒ]* a| ÇDÎ}p”=\8¬V^-Ñ’@[Þ4;A7<×ûì>SŠ Sȶe>ªÈ~3#*V4]ï‹zyÑ›tZÎN´ó[ÙÈ]äÉõñÉhL´h>žÈ¯‡Ü%T¬VW+«†öÝŸæÄµ-¢©|=|QbmSÖYMü­FOݚɩ#NÅz»ðÓd(£†÷]cTn;¯”E€ºK&ZÝé§¡«$˜påÔ;Rmìa¯nlXÕ^¨D’na©,Ð $ùê*YÙ²»¶„rï #ƒLþ8à9îµ{³gžÐÜD®f¥~•á‡×ýàxÊwÆOañ^®bM‰z{2Ì(Y(ßaL³‚‘ÿ\„lß^ÖÌY‘«%¿WÐÃŽ'ÁàË[¹°otˆu;mW™<ìð¾/ƒË\ƦöXÒU‰Ãò1‹6ž¿®R$ôÎ@T¨ûÑÔv²TîLR—è%ÏRRÑ+ÄIxÅ'ÃÓÑŰ¾ç1]ä;ÍÉŒ¾Þ`Ú¦¡jGðCWc£óe¨W…c·~Y+÷h TÔE”—õž?qÁöZo´þ½„çr/iÍŸÕ3‚ù¬Wmï;«¦ïÕ[KÜ®ºŽƒ-ý®?/RZff‰Ãn”[^ƒô7Ô†µ¦çÅ2›WÀèÌ OÏ =‰RÎu¹ñrë›æf³YõPósMOÍ_Ï¡š&­lKEœz¼œËÅrÈ&ZñêýÊG]ðö+øú©ÁŽMƒ ?ˆÂp¬Jð–èÌ‹µŽ2ç½N/;Ò³I]ß5@B²ª„æg.A‘ä,O<™ÞÐËxñD½¢W)Ín sÙS·¥pgÛ Bþe‹"SKÈj»*3V̲€÷ÎŽêÞƒfíbTŽuUqÎ$¡š]0«š‰œ Å…Ö%Gu¡­¬”™¬Õ^ÑÞéˆ÷õ`{ïí[‘‰>V±:3ù[V$Ÿîk‘ßea’Oõƒ÷‘×ý7o‡ãÉè“ë uê ﺬSu•o=¿øîPKR}z=Ä”?à : .crystalspace-glshader-cg/mk/jam/objectivec.jamUT \ÇïLó´Mux êêÅVkoâFýί¸R*5ˆGÓl겉êH¨ò@´ŠVUeìk˜v˜±fƤn•ÿÞ36¯t“´j·* ÏÜ{æÜ7GgŸðÕ8¢¨l)Ó†½Ê…jAwóŸ9qbÍb•>·Z” h@3ÔyiÄbéè8lžžœ¼¡yI7±ûéÂÄ…¢w+ÿ0÷ëï ËÆv­.L¸lÁ]Åî¼q¼¦KaI ˆš’°Ì 3Y¹‡ØpJ]P+2œ 댘ŽI8Ïí _éTdÐs5X¡R6ä–LŽÍʒΪ‡ËÛ]o®¸dÅ&–4.æR$ØNXY¦ØRîwì’SSÃyÝ¡ç3Ùð¡¡Æ±ZõˆÎ ­ažét{Û²Màw;o‚©ñtî5› _’ŒÝ^¹û’7öF§$T¿Ô9Ì[nxRÒœ >Î Ù&HÖ@ïGÓ«»Ù”‚Û{zDQp;½ïAÜ-uáˆ×\ƒ‰U.°aœ‰•+½ 7ƒ(¼‚|p1ºMï7Ô GÓÛÁdBûˆÑtήƒˆÆ³h|7t‰&Ìáðmëõ¬ !ü𲋅´;?Ü#ìTeJËxÍÂH”bäj^þýÀÖp±ÔÈmo=Ôöî‘ÈHiצ#WN¿òv 6RI·Mß|û52ÞZ Öu¯æF¤ ,o:9ýòÍwmšM‚Ê OZ¶ Pþì8¼éwï.~›ß ƒ:ö…ú‚Æ‘Ô <¡«Ú¥3ú@}]ò¥ABáyl8¿NР߀;oþDoñû®YýLfC€7éG¼{€óØØ®ñš[IbØFœõˆ¸…ÍÝbZæ{nÐì® ²¸âõZ,=üU?Óé ºmn•öfV&ö9g•Ú=és9Âpx\NH«ú¬uæýUo6+ã.ú£h·QÙO>£´Û®¥Â¬ö"Þ­Ûõ9!‹”mM}ÒÜ8. ûƒá *}D@U¡²j¥ÇF#N|¶Ù½­ñ¦NB]Cx³êÛžx@Ûï{ÍÊ?À~üSþ´Z>ƒvžmµþËÂù—ITó«2bEÝ›”JÅC£_I("|Žh¶%:QòË[ ò\òç–Iò¥D¡8I8wÔÉÖŠ9f©+;BIáÎR¤)ú­PÔӉЯ]¥KY¶ëî$¬-xÛþæ¾ùY-×Õ\òý©BI´ÊÄ¢@²‰¹«Z¿Ÿ;FIa +Þ~ˆ`¶n€s 2™Œ¶BÊÁn ûfìÛŸ§Uÿ!À€òÿ03Ы?’{bȆT­ÕÝåa/c‘@¯y¦*•Vë£ü@ˆ¾“HØÍñAïv|°6m ¯Îí×$žEø_ª}“ŠOêóÅŠ?ðÈcž)ú?PK …1>&œ[²x>‡ÿ+crystalspace-glshader-cg/mk/jam/msvcgen.jamUT ûc4Mó´Mux êêí}kwÛF’ègóWthÏJÜHtädâŒÞ¡%ÊQ"Kº'Çñ2 IS%keÿ÷­W?”íì̽çú81tWWW׫««»î|Ñ?‡ª7ǹ:O35Ìâ¨H&êåé/»jš¥ÿˆ‡…:Oà{ î¦ÓÛ,¹¸,ÔênK=ùæ›ïÔÙ­êfÉPÎ&ùe2‰Õv.O×ô=L¯ž5øÓ¿Lr5Nβ(»UðxžÅ±ÊÓóâ&Êâ-u›ÎÔ0š¨,%y‘%g³"VI¡¢Éè1`x•Ž’s¨W0°Ùdgª¸ŒUgW¹JÏéÇ‹£WêPšxOâ,«“ÙÙ=L†ñ$U”«)¾É/ãô‚ÁaÝ}ÄçTðQû)44I'[*Nà{¦®ã,‡ßê‰nM@®)Ào5*° ÃK§X³ÈߪqTØÊí:jØNT2!ð—éºw € 7Éx¬Îb5ËãóÙxMAIôú ÿãñ«¾êý¦^wz½ÎQÿ·-(^\¦³BÅ×1K®¦ã`Cç²hRÜb^v{»?BùÎóƒÃƒþo‚z¦öúGÝÓSµÜSuÒéõv_vzêäUïäø´ÛVê4Žœ¡iªŸÓ]Gq%ãÜÐá7öPÔetÃðãäÔ¸nùepÑ8.ÆÞC5Ká-•œ«IZ¬©›,¾*Ò¹C¾ÆÀ&Ãöšúþé_ÕË(ÏUç†z7º:Ë’Ñ<¾ì¨ožl|û·5õê´CúÒ hìÍ2”ËÈJ•ßNÿ:˜Í&kÔø>3ØIt«,~OV„™Ò0étjål–ŒG+†§.ä’H]GãŽP>NÄVo.“!òøÆA0P¤Òì,Ær4"Àºm bV¡DE†/#j0xwQó*¿6Ûêõ% VÓó|6¦Y‘««Ù¸H¦cÕt ÐDÔ¤QÝÎ@^¯­×é¾'“Q2dMÈDÓ2/Hc ÄËL¯=Hjj$“¼ˆ&Ùêû#ÔÒêöiH*;všy\ Ë2UP#¨r¿lw,±›O›,j?EWŒeq™¥³ RÂ6Øö üö‰Aø ±h\°†M2@À&¨å ï,  F9&|RÔ­5ÒßÉä:}Ç(œhBg3~ÐÖh-€X‡Ç¾’†z ÿéH„ŒßG Ä@ðÒ8޲ âìVh–=ào4,€³7©ÿPôEˆ@m*¡¡z«îT»ÝV£,Ò †à‹T¹ê"‚N!À”šM'ã[Ê(+’ále¡”0·„´Õ¤·e0[Ëa·£°ô\$¿°îi k¾è N_œ÷úݽÁ/ÝÞéÁñÑ)`ó½zªžn¨ÔßÔÆ7jË~þêàpoÐ;>î«ÿØ.í¦§½$ËÕ£UúØ?>i)d¾·¥jýîË“ŠjeØ-¢Sf«Ñx¸þEÿÀpˆe!¶Í‹ÙYÞ p‹’ˆf4¾Š'9éeFn¥ŸàãÈEð{¨^B90[ЯóäD3K¢3€ý™åô-–³:‡èæD£Q‚¬VnHufYĬ7 ¼âgÒÙ"CÒ&¸0 xrdé?¶ÑÙˆQ؆ÑFPVô«äUÑ3+„ÓŠ"a(î‘î*€xpnJA½ô*)€"¤p'Ì!Š*È0C:í0$ôÉgóé‚Â?œ:Pn×€Ë Æ™LÅlŠZô ƒ;#vŒÈkµ‹ŽÆã[D±ÀæÇñ:Ž»4ª`°ÿ˜MH¢y Fû Ã[¬7Ðs`lŠ6Úh8žå€'öŒ ™¯Ò¼ÐWWéD«HhÜ(EÓ~ޝw2ë9=:Në9‹†ï˜?ØKÇaÐ.ãð2¾ËQë€ÁB|@u kð°‚îÌŠy‡Ái.~ã>EGˆm;s+ß,>³L•ºN"úÔ} ¸\/F\†ñtu5Š9B•[àˆêË…ÇúíÝýÃ΋Ó5z>”g2bD4|yðü1‚Öñ7 2Íâ†2wû¼J}/H1Z´þÜ]²ÕUÝ6x#{­—µõ…üÓ&í9:Fë:H#«ÈRpµõÌ$C²gO'i!K«»Œ}Ùëî€÷¼f{wp´»wÐã>ëîâ‹¶r+Á"˜èk·L̬Ç•Á5ßÅ·MT-ø°C¬ÑëhÜŒZÆ2ưÆB_¸6ì‰&·Ë"!]ÕÎŽŒÉ-άöûO,½F1RµÄPÆp> G00zAÜ€Oš–ôÃ#£”Ódtôt}ç¹é1iÐ\DìHî¢CÎL­€ãÁóFÏINõdøª$ŒE4މûT ^L â\O-ŒÁ/ͦI žÓd‘½v`×§ öp¤M&?`¯m´Å4•Þu ù„Ñ]S'ãÙE2a¼ôL©ˆ²‹„è LÒHͦ)ÏuK¢¯†'ó0âs¼˜~Â2s-’¥ š;vZñÝÐ{Ô”&F¦¡I,vX÷ DÙhÇa¬ëÃÓ½ÊLØâ*Ñs>K ²køò58ñ ÖL j™8xM ¿…eu“)0D8-0Ðrm Å`üH}ûvëÎÿ½NËF Lû£Õ'-µîY¹ÎTúXv Ðàˆ+Kj6¹JÈ·Lýbkh}âiaºz ¹5‹¨Ê#±)]¦è;¢KJ£ «™£Éœ02_Ãc¤€°¢–%¬ÍðP]e8ò *9yF¾—“æä‚|¿íKÑ(ÈàÚI\rÅR”/ò…X BCÏàæYû C_cäÅ—²–¾<4bwåwË0— áM½z/qe3²E{GI†Z#AM6MÇÚ_JjÕ#€Œ{ªÈ÷Öp´)€ ¦Ç´Ph•ÐV®çgfš¢oIe‰9ÓÀJÛÐ|ÿ± -nz„&†0œ+®BoŠÛ–¸Ùä¢Í¡¤+`-ÇÙbXDù2ƒ‰ŠÃÝdvuböÉgTƒV…6HGJCI×65GJzN7¶‹ákZÌgƒ ³GoØÖ/Í H:ûÇ›¿˜—íoÔ_Þ®`›Y TŠ%4p+0{<‘YóklH ¡œ[-ѱ^EOç]Œ%dÍ8ô@c‘l+ -E¤‘6–sÙ[¸šå¨"PÁØÞ%…„Ô÷±åѦa!IÅÞ%¤/XÉK5·]Ò¡ívvTã4®!+j=ˆèè×êàÈ"˜y‚o¤û.|3_aØRºxfïòi4öB] Ñ6äôœÅhnsõ6˜`ºr©ĺ|+¢5VÄ‹ÐRͱ­¶ñXOÇ‚!ƒAðu úóä=»ëÍ›w9º­ÏÉŸ‰`Ö´A± ÄÒäè¥k·§(èÊ¡ñ:ÏÒ«Z­Ò‘8Ô~-2ðnz5$_délÊ< Ç–dš‚Öb§¥uÌÐ ˜åè iÚ)ŸEºÈæWâˆfÒ ªMhE¯m¬È(÷ÉGE;4† uê$ÎP,.(ʳÀ†Â›ZC\Ɉ.XŠ4ЫÕ÷7ϲ¡÷)ú„¿ ^lS 9_4×T¦M¦Só"›6qô¦ñdÄŠœDƒy‚†˜ÃÇüá3Èš m>ÎýaßbP="šFzà9ÇᦸJ0"iMÉ9%‚šBmY^½T9‹]ÇMÓ9.F êXh>ê: â¡_mzê¬ Îh6Œ¯Ç0ONK;V+ZžÞ8Žp–MZ C¯¸&¶FX+ZÛ u6ÓYá«$«AîJ¯|¥„ÿ|[ÖMNé@9ÎÎöòLˆá&4£'wFÂêomTÈ#›,à€ÈØhÄ‹®²Ç“f4õŒŒRĈÌú(ƒûŒzÉ›T¯]AÅA ¤ñ é4„,¸:Aâ!7à?g¹¬Ïݤê&ºÅ±G¡´Ø€¶˜ œøxƒc%O|´j͘åpŠFËš•1Ožæk6Ös}6½YEØ¥ùhíñãc 7‹\ŒR êhÇ`*ðq  ½Eˆ ‹—zÀ,UdmEâŽOØ•ï‰î$8‡47/-œs³ñÎCšLúô(²X§·„PM7€ƒQ“Ò¡Þ2serv±tIƒÃã PŠíd˜6µ»Y¢àýİwI[À×=6‰8¹¾Hä†PûôD¸w“ôFGjyEaÎ ¯ sWÕ*¼F”$ôÇà@£^ªf»ýþVtP;òz*1sçÀ™F›ÂCr K tÂYy£õDt,môÄk§lA»ÜCÄ^s–còjš°"Ð óœ ]Î j »æLC@-®7#«'çÖ!,Å ÊóÙU,Á‹Š%BíŠYv ~Úô&,Ž!±:Ö·'A°&4$¤S´Çm^GÉØL=A+fŽ!õí‹(Ö;Ͳ½jéÚ SïëR™é‹Ÿ^²5÷µ.¥‰ò'Y¿û.rw/ÅĆ]õJ¸ýuB‘NŒ¬ê£“øp•Žd*©{û¶ÎÌâBj2y§VÈ SWwuº†@Ž¥mÇqΩªžr]ADV8FL«ù7y:|÷í“6º•?@üVl˜@|OPPÀ1Ç·GñÙì¢IÓ:)^^gâf´U6«U‡dÀ´ÁåB8-ªæû¾ç†Þÿ4ÃeœfÌâׄDž8ºë5©µpœGé®êm¥w…ÿ|ðC©žË røà]|ë*bG˜°H0ø8àØ:2G4ÌRµ-­{ˆvÙY:4\U1ⵃ­ÝØš‡öÛ°‘ƒòˆë™Ö§ {ň¿`Øe,îœóÿùk0Öº–;Ä“!-†Ëo*·Êñ]8ºþÐ:!Öd2ÏF±Û‚&¦VâU¹Ðå’•Š(ç@Q vIGîÚÎëÝL!Óβ¼RË&Ö¾W‹ìÒ BÂV÷f—*NaX>»èq½s-­Ly—Uv÷ÇÑEîjƒá9½¹§]@‹æ°…Ï/CžþÂä“@Íû)_1Š®Þeì?qüÌ|}‰ñ«j¨ZÈ…ÄwÎ¥ÇLw‡ ´º/Ý`×FøâËJ¶ÎøÉ®€ñÏl!Ðÿ‚TW¶TÍzïÔÀý¹c üêg”„yüå…=ÀÿQÿo‰rUC5cæŠòáýDù°B”ÁQË"Z4ÂL36FýUŒ Œ úÔYÄ“pÆ)z³'oJS™uÜ‚W«*3 Úž¼Âùòš,q;Q¡Ùûdœ€Ûá`þ¬?œ†)½¦â6ŒN³ Ö½©W]U:~çÿž³¬á” &tG´R¦)ˆAf‰”Ðr¢vM½87­0Zž= ݘ)àÄ•^ô'=‘¬P؈8‡¾M0\BãÈñ¸|±†a®x‚!~YqÖÙ–r³bINqûÅ“oN=Â$&Höˆ ¼Èºa\Î6‘ìi†y¹Â/nðÚË™°¡lLÏã¾ØõØýèò "±b´;.ëR¼s;¹¢Ô(š èð!Ç‹‰Î—‘E›$¿4 +ÃËhrÁ–EwXÖ‰Dr1• Œ‰ŽAèÌ¢™˜#²¨´”î,ôо£ïÀ%í“^wÿà×6ŒécúÁ»‹Yâ¿»À˜¾PÏ}/¦o_b:ãZõ·H0ô¿M™ðÙ ä~´kF6©ð7Y7’£…ý'ï‚â¦;÷×ü5D.áŠ(¤“Ý}]U£ª4I ‹HJ%.Ű78R—q„M],Kïî5:¢Ó^|ÎSœéjË䇄h¿Œ¦þh¬è§’-±ƒLxaê”3$•xÜÕ~ÚPõ ¹º hC‰Sª¢P¾°IÖ ^©ð_<GÃTú ×h+lAySY‹ŠruÓC…›Áö{è ƒ«©Û+p=äüro6Þ¶IÂùÍ“õ·X‰ÐÖÝúHhƒŽð†'àãëx<Ò0ÚæÑê£ÕmˆÐ¶šÑ‡º&kf¿âûØ À·e¤úî·ÏµXëØJ¨Œï ­L@mæ}SE]%+@züHr@ü Å¿ÚÑ™éÿöoê+|wA3ðÇÍùÜ*UsWü>gº›ei¶©þÀÊFñEŽRÓ®½Ÿ°…‹d¤šÂM~MsŽÍæ¶<¦#Sz…ë¼¹í¦®þs·{‚ä?¥n߯¹A_ªØ^?sÿ w66€ÞWdb‚c °þ©ówlþ#ºrvsÂËã“>í…oö}¿ßëv+¿œvhËè$u^垟vKï qÌv ­¥˜nHµ ̾ÞQë#ܺú±AªË-æ! ›ëëÀg)F<·Â‘$usz˜¨ ´'£ßRÛ;êIû;OËÕ¡õõGKÕº¸Þ_åVÇQ‹Ó\ÏKµvnqÚ¹ÕX¼ieφ¥Cr1d£ÝYz·[u[ iéŸÜtTËßú†ö’ KYâjšÇ³Qº®ç-Ø(:Ò‚rÒ®RÊðó›¼´I™RÂÚå.JØÄ `‰ØO“Ó,ôê”ޙგ>•ê঎i:q „¼òÂê…NïE·J..ƒãŒj}8„#©ÝqBDáÕ3}¢‚ìÐ¥Íû8…^—¨‘ !{±\‰Ç8Û®)ÃXÇá4Ii N䯢턤‡„Ë:6:FcégñÔøÓÀáCm¡ îŽãh‚$Æ~ð7ÜŽìþ¦Ây*ùx{Ôœ«KÅT%óKÇ^]eñx ¸Î“v ‚ÅÉËŸÒ‚”YÝwdmÏa6TQn§ìA &µ@Ý.²"¨+ùc<žV|ÜTM7ÄÏiߪ¦Ó—™¿Þ©mI®#ÐŽ3nÚÔn™4oÐ-`?1bó‡¿TÈxÃ*Ш~1ƒ’[J™é‚×—Ö 1¯]©ÙCu“Š+– Ò«|¦HnØä,‘5‚Ð’t’OÑr̺µÜ-õ;!¸ž[ ­¶yírïC÷Ä-ú@;+¶=÷=8Îa5a·šûÞ©ÆLØ>>Ýy}pôíy/ƒé[-É_ʾDcIc ­Š§M«wsýL«™E6~fõQ¨ªÕP…ô—e>èÞ*F¡ô)HdÃö\†v[«dôzö^Øn٬ꩦ/ž¾w4=°…qÚÿ´Ï“†ï>{ ìÊsBŠŽðC~3-Ô¸G«çδZ"ÉbÐ'ÝÞ!Îm¦¸õ Kõ^‰äáÛG«ø½¥š¿7u­ß›M*c ¸¢ WÏZèsmØK†Ép¼I+×ëë¸÷mºŽ¡YIûI®e–ˆ×óx’'´ò{cö–Hð×Ùü‘Û ±²+Bb¾¦ÌZo„±5ŒÎµ›/r”¢sÈ}œÎ ÙŠ@u&Ã4C˜xBÓtJ§Ïð–W½%î)»¼_œÎ£ñA²Üåw›·ï)pÔ†-/€§aW Ö¶“Û~ïà„ÑÝ©=Öùûtšzæìu¡”Ê¡lxWíl¸¦nÌ~@d%G+ÎÎ@:^ w9TRL¯ì ÿ؈ÙT3âöhB‰ÿJhÚV?¦7g#(vä ‘x³Y axe`ÙøLjLx¨yMyu•:UÞ|Q kÝP¦!ó„ŽÃ–7Ñ„ŽPÄ%`Ü- $'!ˆÇÅàtdä%ã@åã(¿\£Ð n›3½Y©.ˆ{Áñ\<œQdÑ$—ÓxðܶßÚ‡IËfÀ—7¼Ó‰å€NNX¿J(ø ›¥Ñð’ùJȉ4¡Õ †¸!0Kò˜ÎÑü¯…i­aºîÞà¤wÜïî"מ€- êæï¿·á?üÓÞ¼X!Ûàyµ žºë!ì¨ïIµœ¾Ú?éý?Gù” ¼x}zB/nèÕÛ?îív»½Ã}Ž7Ø/¨ë;ýî*îüJljiå¥*ÞøF=T¿ˆÞøÆGãzøž¢ë*ùxRƒ Å‹j1¡ÓÌlµ—¾ 1`¸íoœ"ðrðc·³×íí¿|‰1, 6 šä8wÛýúkÕe±TO¾ÙøÆêhÛ\=]SO7ÖÔkêo¼ãv6Áý\“fØÍ/×˧~Ë%õS;ƒ*Ó€1yªI0‡N¦Œž˜Õ´¶±Ls ›ûa¹æ~XÜÚKtîoA™ûpÁ7m.èß#"QÉ­ß|¦?ø˜ô#›P#Asò‚¼µÀ°c·qñ•ú(Eª§Ý7<^‹›×¯Æn7ïr­¨Ú{Ý“îўˋÁ^÷ù«ÎëÃç½Nï·ò›rI:€ªô¢"¼?ì¸pwÃú»ÕõõA_¥7nIÐû˜»0›:qNºRyó ”²!Êk…œÛèÄmD9õÚV±b‹qð>1r•„ ó¾Í«MTšóiNÝÝúº»‹ê Ñç}«®­ IîžþŠDeúŠ7ŽŽâ4CÌÔž¢Å¬úŽîVíwN!Äñø¢ê»Ÿ~Èæ–£Æúr#˜ÆmÒÿ+>R~$|¾È*qµ›JÄ–8ú1†ŒÁÙZ'µ©líêd¬%8:ºülkeˆŽOÚýßNºz”Ú8Fé´%CT™Wuï6%(J»ìœõv~Í“†œ>|ç-˜eK)‚±ü›8z§Þªh‘mA<ãP_Žƒ‘ˆ»Bè‡ò±xÞæøw2¹—¸Èù¥M£læºÜ,—t ò^Äó¼éG† KÏtª}Úí[XÚ/®Y³J¢A”iá_` ¾¼æÂ¤}k€Æ3”ùë‹‘éÏâ±:‚UñYMÙ×–©ƒC‰Ö=°üéš¿Y?vÎì„I‘Ù&±ó¹IrãA9è9k·Ïìh7ÂäK£…í6‹M™˜Te…¼¸¨ÑÍ‹‹–Ôïâ*¬‰—BXú–g×B”%º·LiÛC,Ñ(*¢å0ÑS¶¥YTØÃcQá2­—¨$Ô®(¹ ùÑ‘k“Ú¹P²MA§wÐy~^Ç~ïø%ÎÚOdá[ÃjµCÊÅ,‡G…s´ÊÍ)dò7K:Ykìfg4:aŸ‘ù7ƒ¤fóÙé9,õÚXÒ'5þh…Kå¬,jÇêNƒošwVñ†™}=Lo%®ù…CÃÇzŸ-áRò§]Ày!IﯓɷO´Tõ† V¡Ã¨PÏ8™a{[ ÝãýÁ ñø1oíчÅÛÄùhV¤xì¤¨ØåÄUà‘Ÿº»}I?ᡵ^ñ^m«Z õä;:Ƨst°ß=íŽ:/»­fã!n`:ohl´á³fò—Ñ;îÊÁîqõa¥sN¨¼WȆ¬lm³yVJ÷XâHÌ%4Çèy)'F)ùù€h”Ò]îyÖÞ’8Ùã³ “n­$Oºé’‡@¢®Ûºk©¾ü¿uªÎ]ñ[ñ]nÐ'éFnCÙÞÁz©$¡Ž»òhUª œÛÚoM¤E{Ó™dH¦·¸¯{?ŸžtvuæVò)÷ ÚtWígŋӿ‹ì=~Ú<Ýiã¿\E–Ó­êZüZZ¼þùtÐëžžàÁ›_lï gJ VPê¡zžâF{J²lã"|áŒiÅÎ…ÉËêx,ø>œ3Ç; ë´ä=3Ì„@œ£ßóagb >È(—BKº4oøÂEuàp]ºcÒ¥%¿Ç¢óÑŸÂA£šµ¸„“o§…•3†71JOc¶éSO¹ –κ©?¾ ÔŒ½a7dái‰Nµ^0`P¢‡xÈPìÛÔ? ²¼0˜—Ëù|C´‘5S˜“(в95váÐDxŽŸ…cæRQ0çh³¢S5tõŠýKæë9‚>¦*Ž Âßož¼µ“]f‡²^ûsSÝ™ô`4áu`†·þÖOl×@¿¨°ÎÚlÔe¤³èç$”,•AU K°ð€!/Œ¹ê–V¨(oǯú ›^’WeD Á·!,8§kÉÑwOÆâ%’Ê>êÔt¤‰G*'e]§¡{ÖË%¬‘+»êÂ.õ²nóú’Ý£]ºÆ=)ÙÎj' Œ$Êw?Eû°/g LE-rrƦ1~[žÏõNän¯»F¥-ôÄŠáUø Ö¶~k‚ÌNfÕk’ƒ/x?Õ;»¹·£E‚®E2¡ S”ÙÕQ^’e!ù`ZÖêm%Ø9„•žýc0›$ÿ5‹?`>Fsž1©MÆ^ÔÊ2 •*u†5„ÓeWIØ?Ñ‹šßd7¤ HÈK› n“s·þë[?’<ØšE7|lÝ’xë§Ÿ¦çÂ(ÙY’ëä½?ô¡>2š¡åƃƒ]WÍí#ñûx8ã½Ðq1lñ™Ýt%ËXnn”mZj…áÑ6s³uÒ‰UV0wtsŸéê(¦<-sã„vï(Œl±d<¯XÈ2A<ßHÕ(!£Äë=q)"é™óáx9œ xMcø ð0LŽš¡y4°=ûÁŒ*ý#»°ÈjÔw‚KÌïƒWÆí‚û!ìAXñÿ§L¡¸¢Óéy9·¦š?õÒ|ê;tµ–ÒY;ÿr¸\¯~½•ð‹ýH¹§Ø.aaakU÷I“1 æþ³1ƒL7æOÈJ%+ædútpÏu”åË(>d‰Ïúáv BàJË€]Ü<±ªð &&¨j2:Aýª½”PDbô^QÜ×hF&ˆS†EŸ”Š–×Njºï/›p.&"‡^àƒ/¼’Ð KWÑ)ÄòÛõ·¾±¤ÚŸ=‘^bbìÌgaúõ.ºˆmñ“ÎîÏ]-íƒÃƒÓ>Ò¾]ó híÌšQÔ>ˆÄù“鎄é©}tÃ÷ƒùdÞƒ¦¿°uÂlÇF‘oþ´óX'}Wÿ9Ÿá1i4­Ç;¹ÌkÌ¡”ZåtH]Š£šRD/ÁÏýhÅ^!:W (É+ùË– áò™€º(gÌûV]ßkÏMOX²Xuìµ|èaUõ­º¾×ÜaV Š• ²ßfŠrþÇü¯50ü6ÝD’¥ ÖBG!œÏ³tÁòÂÐU“Ó2>ÐŒE›˜Ó~§°»(¸õhÕèÇ/íUxÌwôp&º¤aãú)‡órg“Ä$½±÷ÏðNJüÅëåÖÒ‰_ ­=<¿ÐÇÍáyxçÝ †a¿[uq„yža.œ!pt8Ÿ­3Šq›âãë$¾Ñ§ÍP†z3 ?úâÄ^¤ 'íÞ›H&›§h”Ú—ðw:…ÿ½¯Ú?îðÿÃwC|·«ÚWðþ{Ì-íä5™˜¼Li©j ÑóÄ´Rê®ñÀ©‹f,±¶õ£¶zªYY~³·ƒY½ÞîƒÓãW½Ýn« ¢jŽLRy’É[uóÞ>}þuí÷:ܾ³Ía‰Iq2Rü‘Ã߀¼a"w»!£¹Àã°|öÖ¡½ët°ž‰Nå°jg˜#OTÍä9¸!^ûqS“)Î#Æa[[z§¦4¹ÑeMG·DO˜ñèY×»„é2Ì +{y(U0‡•­E£á¬©¿õd!ðR¹L6ô:€ƒr ‹«©åpì¦ãèÍžü*‚DoX®ÐÔŽ~©$í3ø)ºâë—§è±\yi*Ðòª9â3p˜[Ž4Ûã|^+gp¯2Éó†è UŒÏÕ¼ñá:sÇ• ]Ûð5\­]Øî$´ÛïàLÏVñ×祫ÄKƒXfÜ4°e­ªì| m<¨D±ÒTêòû1„Î ªf?×l’^ÙT"'ñLoÒÕµ #éÒ¡þÕð˜SÇç'S¢NÍê*ºbˆüŠ%‰÷øÊ+Z#òõêd¾Ú¨8]öY-$Ö º}ÿ]H²Ö:klºˆl 䓉çVw†1›G·â=êVû4²j ˆ[¥ÖνVCÒÚ j¹©7¢æœº;•L*-“TÔžG=™½ñ`ž‹¦Ë~°Õ*ü9þÛRБi?„ƒt¿v‚ᜯ˜+ 6W=WÔøè·)¡Dià »n!_PlL¢¯X¹U£#£éTV$0©ÒbM³ ½ý Éi”Muç”Ç®Ä`¬jÑÔ7ŽYlŽ‹ídžӴóK… â×"Dª^÷ð¤ÓÿQOsÜ-™Œq­ˆvSªÕKs¹m³‰ó {˜X« œ%ÕI„6/I{™ùK{òÀ“]]¹RnXIrËQÇ+åÍ-U¯¥´<#ÙIŒ«€?˜ËǺvgóÚbîø™$ƒ9*QŒ€w_ôÛ/Ÿw[ó¤ÐNÅ'Ãwñ-Ff›2¾M=Ьqâûðšn¹0kG»@µÓÁáA¿Û÷æãÙ„Nrs2póµÅrÐD1-1èŽDðOs$€î“Ðm·çŠÔq¶Íšué…õmã>¤{R|‘zþ’/Š Hë$ÎÖõ²±såŸMpMFc{›¤WéÞy§yxé Û£œø[p?kE† rFÏn`hëý o}±n¡K‰g¸Òð¯—x¦;«£‘ÿŒ´³†1«ABh+G3€¹Üˆí\‡èîbÃë0ÃDÝÒÞ±¿q$¾ªñ@Àðø™¢$Uk;®Dˆ„ÕÑâXÄèÔ•àÈÙ£þ„ÜøÆCÕ N“³y.øŠg z^ðáÀöŽq¹÷b#é_]a®«À ²¾Còíù,ÞLva ”Ä9ÀÿuÌJàAh)Œ°.c@ ¤ÂЗx[…¡–N×ÇñuÏí‚n»@|Ä]ñln¿¨¸^™Î Ñw)̦rRнù™Ïá7ÔÉe¯eî?œÇ]»qpNGHdx ›¦#Çó€øa‡×¤’ì©â³PÒáp–é›±7éØe„÷ ŒTDv çuR® `ô=$¨«Øžª‘L.£3<ˆm );z‹Íëx<þOBpoÛv³>y+ª“ÃãžØÓ~Ý=<ü|tüúhð¢wüê„äÅÁ)¸]ÜîLu[¥ÓUïSYÙs-”AÚ¿ØÜe¹Ô,æö:8Ÿt̸MrÙõð•—Ú² º!˜Ír¹0*ìÂ;ǨM‹^ݽÁîñËPPLO£-hêÂ65¦ÚQvóäÂí)-±2 ë–¼œ_Zcשo¼=Œ‡C?;‰\º´ŸÈ{Œø“íè2¹pSÉ–jØnØ©/¶Ù«•ú6«)_ÎEsm ÈYtÆ—l9@$o×¯ÞÆ»ªü/|5¾ßZ\ûûïªk›èŒW¯…¾ÅSÍÈä¶H 3÷ÚO'ÑÇ…Ág;¹8§ûbGt-=SD°±sD:s E°#€Nã¼7Ç òd[ø††…WÎN_½88Â-£-»ÈŽMaêÂkµƒU×B ÀJÝùpŒÒGüŸ=°c h_©¹È|TJMoïMjŸå‚ŠœÍúÉÍ,9%h2²ËÍhÍ…~n®,b1Ýp{†Y.¨´:ÌüÌ kˆ:²SÚ²ê¡Íªò½®ÍISú^?ªÆ ¥˜¸,&'‘–(²W 5TKG¿²QK§Òg— ,[hÝÑTU¾¶¨U„©ÌŸ’RüÚk‰äTŽƒýèE# ñznP,àÍzê0e},JøÑ¨ñz|ç U¨”ƒk½òFñù{³©Ï_5ŒÍq…UÜJ£„œzXÅ©c‡S ¢Ï³åÞ–6å<äkÍi¶á[pC›ŠÓD9„º¯±ª–;:§&¿©¼ÚúPrÂw¹a¡(òÁt)Çà¾Æ¹–%-;ÖôŽØí¨ÛÝCns9̹{<(ªÓý¼â£Î¡_O—÷ ·à“¤ 9*¼x½Œñ@¸ þ(ÅA?`¹’6WUþíø/«)‚¨'(î4c‰)F:-ÜÙÆCµјFYtã¹— UqÆKÅÄÄæÌMÜéÊwŸ7]ô(ð`þÜ2tV “°Ù_º’´†|Û¶íùšÆdkK´m=; õ½ùóÇûM­´òÜÅÝ@C}D+Y çEÆ,•ƒnx‰œvÚîüÒ98ĤL7•á3’€©«ø\. ¬ÒÃ0ý’ÝeGÝmbj½TUb<ŒµH(td$e™M>µÛsª7æ|ÊŽ¡„ùßÿþw%{V.£l4LñrroÛe¨jN!á#lZrñˆÙ¿ET˜åñ×µï‹èÂÆžJ²é×–Jí·¶#K˜…*‰ØHÊ ü‚5‡4Þ¯an­¦1ÛB#XXðqóI˜pnNWP4ÜnÕ°K£®2>p™­ºAÍÿᾨ\R Ae}ÀŽ)9)ÄÃm†Q2ÑÛËJõ!ŸÚG¸ZÀ—"_aÜôðÅÉáúy–@ãxl ±Å*´Ýï½ÒZp Š…b”T¥ÂM±ÜÔpÐ^,äHÜi/.ôyie޳âÖß±†u Ýp8hþ:â°ª|``±)®Ã¹÷—/ÀZ÷n.³°aÊʼNÜt<¾peŽ÷yÞ ¹]`jŽg^õԀǰ•`v€Öé­(Ž H¤¼Çc:ß\¾.ƒü“ôü1` 5ùˆeðÞæ:lLèn:á¤õ´´+®¹ÈÙn· Uù> {Ò~ÏæŽ6±£†ò<óçq€ÓLSSOhçÖ’ .W©RUfè·>S¦´æX‚ñ¡è½dê~ Ê”€[$S¦Ø}eª3†­”ÆÈ£öëØ®ôÉ¥K±ö³i ¯ï’ÇÞmÑýßðîÖ,C‚axö«è—.Ëf\}J"îôì¼Às»Ý9ªxns1ÇMÀø´XÌgòÓö÷¹‚JCIž„r÷”$+FîÄÎŒB½Ej¢óé€~ ^é^ÐUåxìuœË ?EW+xmVQàÝ'xé gžªv[O›lS¸ìy ´xí ]£#ànpiù+*^³^¥È‹¬QžëâYã’;W¾LŽ*€.o|Ž®­æ’¯æ.Ÿ:¹‹KQOåÊÙ$¯7Ôj¯ÝÌÿtʤ\ôm3L}beåùÅtÂ&oŽß晘â⹜Mk9 Òð·ƒs$£mÌŠßÇæ$W]ÙŽÔ¶Ùj-ðåzÐMå®y†+ÔT !”¦2³Ù¶^`ÐUQŒÒîÿ§Aˆ ãIÚr^+ç™¶°N]æýë,цËÜÇSY½n†S]’†Äݧ§v*ÊVmøòF7«˜lVóƒnhîÐÕݧ³s>&b[gÁîãþsU°ÃG§Uîñ!œõîNŒ3Uî+56—g^H :Ii³»ÓÇ­E"eNž5—íÖÊ' ~IˆÏg8‘V»‡3¨ùê¹s[ŸÄ%U1: “oJgL¨”b»¡“~nï%Œž¹¡€fb nøÄ?žÂ(S£Z@<€ËÄLÑPP«‚=7ש²1Ÿ·êc¦RÅ•FWÐz\QÙÆž‰TNÄÙ= è[æùÚ—\Q'Eø›óŠlàØ˜9s$r`åÄt''³‘v@S„‚ãÌÖ*…”KšR1 ~xâV²¢!̺µh¼j;{kÅXhd=+ÆÙ çάK»á¸£µ:ÄŒ¨õxö—0Ä2Ø.F’(¶,¾è ð":ð‰Ù‹Õ¢eyW0Ëìo"L^èÕ=Ýö™û¡pý:} d˜§àêO'MP|jÏÔ‹–ŒqЦ}Ò\¯Gq'ØìŸíóC3x4;tWꜦtùRꇫG ³”¥Á~ÍëŠEÕ¢ëGv¾ÜCôžMY¤’sõE°n´ÈNIôÉ fÀ÷èȧÌcýÜÝèf¶ b¹Œ™0ki&xl?Î’1  KžKÉÏóµ$LBù ttòr9 Q\‰¸kÕx}eœa¼r5|v2e65Ê[Ÿgà ~ê[~>ÔÁdH[56•l±ãû]Dºà© ôfÄׄŒŸnÙI&´%ý‚«1>wó•BÝ£ÝñB™_\¢ýèªì(ÔC›ï5Ì«ºó×&?š]š4"{{/¦¸6d”2[9æÕ®óOÕ)„¾Ë=&›®ß°æ³–f8º÷PœKÒè%8úÄÞìlñTº¸Ô%‚`lÀ·ÁD€ .2´£C>m¾ØÑ›VÅ>˜j8o˜M¤@ ÜÈâ—(S‡Ç»~ו[¦½¢Ùï¼ìÚ…kÛéœM éa™ºæ™ª {ücÃ2e#Ú¹Ž’ñÜÎ’ó9/Ey^ž÷©.W̬±T RÝè¸I8œ,¶%`æØ²Ceâ]~FÍ1æo <(@ývŽèy¨š¬Hμœt|Û” z²%–T%EϤ‘¯Nˆ„É[ƒQ›MÝgÅŸ¶© e3 xhú9ý.OÇ×±$ÊR:Y[”pw4r‹÷ºúì¡?›ÿ|2”ˆ [öÜg'S…b¬EÒ˜xÞ™¥b »9Y[€LËœqÇž•3¼ñ Äß›÷ªËóMÐósÄk xuá/W¦ªËUüXE?ŒÜ;éJ¹ci¦; WÕGÆg*kOtR¥KèÀII‹n†íí„þ¦^´³æp!ðqüåñ^w^a]Ü:0ÕÅ©ïM­Ö]oD¯T(Pßà‚¯,>ßnUT¯¬fËG§¦„“…T“X)<dW.Ȭd;¥ëT’ÕtmGŽ?æ”B= &ßp‰Ê–¥,E S˜›¹¬)"-GoØê†À)ôÑÞlTöfÈÅÃ+¶·U÷¸/75ú·yw9wñ²è,§Gp°QÕßðâЉî&’+ßõ…Úɤˆ/¸2øŸy\˜‹Ñå^r^•³k²P?L<Ü–±gÙür’Ý;|5QàìÏ2ÄÓ{ÖhK)÷O)Ä»·“,Æ#dðtÃÙï’wnM¼Šh›ê0Þ"N«3¼hˆqžÎ&fsº ²’ë•ý,ž¦yR¤ÙmKá!²·x#¡wš·@rw|ê¼ÂÒ(É0Õä7JP^Ë@m#»ëÕî @}VÚ8CB-g«BÓe0‡Ëƒ94`jz`Älù^-ÃôÑ?«qu…Ý–4õt¼F°ó6ƒzÁ3BÏÛÎj7 úÛ&)â\ÚÇZ{-É6ÚÌŠíéÖ÷Ã| *“ ^ÔâRX9 ¾6”Yîæ}÷Ð×öíöí¦êôë+%¦cÛOn ’>Î?·iw½SZ}wæ%‰ýÞ¡Ð$²4Û Â0þž’?KmùÇ÷‰ÓîýÇMÿè|¹'aTïø·ãòÑ£µÎšpÈ\ãF?kðg¡äBIð›oÞ:†”)·d&øËíØZq®©Eo`Ãl‰f]í¥i¾íÓ܇÷Éô÷;vƒñ¦Y‡!¶¡@xëX§Pl{Cã‘¢ÔÛír®F“#°ye'5«ú=Ý®Ì×àõƒ +Åq…ïlÚÖyV_[UèjçR<¸qŸèæ¿fA#Œj#=ö''Ñ„Í$:Ü>ÞÅ0iµõjXpò¬Tª?Öïõ~è¡”5œ`›8¤z N¡=¿,ª>×)ÔЖ¤‹™È˜–Lɺœ™Î£æWË·‚bsõg§K9¯fÆg.óÑzÀ8Êóäüö%ÌÃdŠçà£/ÙMÐ#6Ä=)zoʦ;rôciüÅž€%ÿÝV±ß¼ËL‡uv`ê·<†¯«ÂÏ÷xS³9çc%vyåõP÷*qn#VºÂ• ÜT€÷½Q„‘îÍÄ@">èï·xk&4Mõÿ z+8Q@ÿ8ýfo+úCn+‚I„žø… A/VÚêl˜®*Ššn4eÌšk:³†ùñÕ´¸]C¹äcXˆIA "Ì:ÃãêR3àè‘óÀ!üœÎeÑ’M¹j&˜;`‰æ9ðŒ™A WÂ0÷l6Ƴ]äø —žK\΄.]\Ä›9‚ ‡hJ· шàÛ¿ºoÝ|„ïC ¹å' ü„·»—ñðݱ€°dGjÑ[÷)*­©[oÑS Þ”$WéMœúrš*8Ô:ÂÑH¿)É—Ò»ŽÍ-£lÅ@÷Wš'·š`ž>ã”·& †ƒV·§dÔë²0Ã×Þ7ïµ9™r{ÕnZa?\rïÊ2­åx™Ûîè|´¯IˆÍ7™­7M YrW6C6œ-üN¿ÿcÇ_ШâyB¿¡¼,oÐ;Ä`n¸‘íÒ£ å`‡\ïâ[çÖâJº-O8¿±„^ÀfKZA_ÛóIz¡ŠFä‹CS¡'3ŠÏÅ¢P ¾ÕÇs]±‰ÖÞ /þ©ÙyÀ•¸ŽWÒì$—qòj…Œå¦DJgáa«ÝîNlª>yšönšH2ÀªëþÐküÆP‚óí4»-³Æ=øBÀn¨ÆÒ¢¤›ò%É—{Ÿà«<>ÙýÑâ…úbùë+¹öb9žâ¢£r<_^À_˜Mñ¬·*1!bœ&WÉ8ÊÐÛêœWBljq8Ñ^Kø°ÊñÖŠÀn«Þa‚Àf¼õ¤ˆÐ¡Å‚+\{’² ¸™ZØ?‡B2»i'Žz–ÏÓ§ v1ù¥±ZôKè¿z‡z¾Qi¿Õs6+gÞ"QÞr4ï»± Ãf’â3~~K¦g9ËÜ2IÀ­^¶Ü+ïj®®óãì zÕ÷×™5ÿ¥o‚1¹næÈU+¦%µ¥Ïð­TNy"ÅìMÁؽžfé0Îñ¼BåO º¶ßy¡OÌÅÊì€O¼ Xè ¸²)È-ä~}rA%7PE gyÝ„Öþ¼n‚qŸn rËøJ|õqU/k²ÒÜãÔaSå³3jº[Y 6\ªA,á’`à£ä’ Ì0ñGüj·Ú/ü N»"áº$Aû' Ç5À*¿RêŠ ¸I<ŽN.¢ÖZm}‰XTqŒ˜ëT€ æ­À¥¸H2'`υΦi•¼ È~Y<ÿ£/A¿/‚Ìçáñ¹(|%îEƒOld)øs苊NÐØÀÛ§Á—Âî‹#ö˜cI>ƒ=¶`¢\cᘈĬ$¥Xx}æ´o“OMâëêú‡ŸV? ’ ÜÌ'æ—@TçŽß „v~¨ˆ3ȶ¿zÃ.xRZàpOþ¢JÕ»ÙípÏ9fîY¸ÿ×æï¦‹ì_çn}ÏݨÚfå ÁŸŸäÉœí;|Ì£é ÑC÷²v; Í‚ù0ñH è€ÍÍ%n¢\N_3Ðø:”¬3<Ÿá0æ°}?ìäxHDhKõ{ÜÊa‹ÎÅó.o2S¾,W±ó™9›ÆýmãèË#ÅÃÂÇÚádF²+ïÅ07a©\¸Ù– ÇùWy÷c,¸ÉbI@r3Æ7mÔeï.Õ}çZ¾½fÐ?þ¹‹§-"ÍÒ€Þþ_DÁyVÒ]ZiŠžmÞƒ1Õ]PYßxÓtnk²ƒfÆq>ÛÎã—‡ýr´h! qÌ2¼ø•&ŒGxûùعf¯|Êq“ÊÕ %ÂbY•{5IÞ¯çÅ-®Ù¡…Ý@Ó4Ï“³ñ-ø–@š+¼›v”LTgV¤xœâáf²_7fÉ´h+u:ƒ™4Çq 5›ä³¤ˆÎdI{‚§r ¦äÄïJ¦Îâ#ÜA‡8cÅþ–],î•KdVJY/”Ñsr‡l ï“c³^Æ Âzæ*Úº‚_þ:÷æÝÃbrÞ8×Mmow÷oþ‚ÎÂ᫽®Zn¯yiÉ›~÷åÉ!ZïÓWûû¿¶Ú¸Ì¾btüÎ ödE­ÿåma:™w&ÃÓ§…Á…H ÉwN5ÿ¢,*ƒ±z?Ívþˆ‡—©ZÉÿ³òRùÿüÏ­õA9ߺ{`BŽûÝÝ~ëß‚&0šØxJc*jó‘4ÐÄRü}Cì©ß›”¿‡÷޵a}Lx·8á±3QÅ~?‹ã^MLe{óÅøâqœ…[ç\GGßõCŠCLø€^ðí¼$¹Í«‰ïj+BMÌéÆ&Ú‡Cl£FìUY̽š¨d¸¸.¡Î!Õ†òMž³û²æº!·HÝ]C¶LÃIƒðîÕq%OcU-x:¦UËú9æ£P´ÕÈåj=M¼Vc¤/OÕŽ_õÑÞ–æµ¹>˜Ã»@j‡NèÀ§Š¯>‘¯OOZZ¦ÿTF'"Ù –ÛÁn }MRì`ÿ¸·Ûìö÷%Ó” ”èoω mØð$AC&3Áf«ŒË€$a‰yÈæh—g«$¤²%Ü!–Àçzp=œB?ßâš&TÆ«YÄœh") ©š‘Kb¬Æ²í©xü<èqÜΓ6P†ëÖTHÃE±[îò0¾ÉÔ„ñÇSeiaðˆHV7žËFyèX¢Ý/yŠÇ[¢cLÃ#‹"˜QXI:_Eç€HãèÆ¼M'`ïàÆö<{8¹k#<[òUtM3§Cßx8,N¶Qg8^ç=âí+·ïNîòÐôÜÉÐñ}è<°al{·3íÛŒ§Þxä; ŸÒWn¼YŸëb^CšÉmî°ìCBX’5Åò”­1PRëë kÜ‘ˆ#YÕéѬÌp؞ã`È«Œ¿XòsãÌM‚Æ9üôó0 R‚½ÆRwH<,\àãÀ†7?¼ýõ¦¾­ô]Û°Òt×ÎPuÝ—P­MFc«9cI3õMÙS=–q“ÔÖØŽ=ìö…Å> #šO÷Ýë÷5é6mW*ýQÇž8 liãøjêö»Ú;R¦K† -fð·1qãg€ÍŒÆ©Úöƽ½ïõík.¡¾†zÂ#¾àІ³zJC$%’Æœ¡@á*ø­}ÊPvž¦®ó”aÍU3ÖƒU”­•-šÔWêRý¯‘¸ã™’­ :à!j`¾”€A Ÿ$|lA*h*x°&B~ªÙ·¨|®D<@ÁÙ Ô°Ð{1Êt/E .vh²Ö“oÍ$þùŽvµ–›YbîýÑÔë8‡Îùì Ê-Zþek³8 ´`¤µÁè•êcà]šÒ$”‡Øm8 óÁöü2JÑà‰  Ããóxsë¿è§QTôX¥3Ö锞iíZå¹)ã2‰¶ŽQ}–< ‰FW½„ziÓÂè`Ï]ð®^Ž=·+_޹Ö< ÑH±.R£Öö5‚ì“«YÈÄIâæßHÀ<ð†¢w‰(v×Ü¿„ <÷Ô@SöS‘#*éJ>K¥Žç»£á >ç”w»'ÖvsëO¯º®wôîY·ÑìžÇÍ;!£¨W>¾…ƒ£›¼FÎ-‹÷ rØŒ8õL'ꕽô rä¾, w¾5¶[yQÏSÔý.üÖ“à,”²g…T ±Õú§’Û¹åIPßµœËÝJZx¨¹JYrÅý¿ îöíÛpn'žmB,àøB‚§no)4ñ x_Åá·Ë·d¯«6^B^%sáGs˜êv'ñú‡êJ,šŸÕZy÷² Îqâ7ü®£”WknW=*^­å*hÁßui¬×ªÇ$Er+Öªµß­Ý8ʪêmók[µ¶½)Y*”òJdiÞìuHù–!F Úó]fÛ´œ¾ü¸.ë»?2Õ>Ü-Wiqbµ%¬ôcÞÇ:ÙæY‰ ^ü¹äú•—’lÙäIS ”N¾BÌoέ”½¬1ú§…úÍdD^Z8÷Yçe×ëÚßo¹ro"lj\?ô¢X°£G²‘Çóæ‡6šÏæë­ùzWœn¸=¯_0ÇÿPKrvb>÷$¸ÌTä8*crystalspace-glshader-cg/mk/jam/macosx.jamUT gKnMó´Mux êêí;ûsÚH“?‡¿b–¤Ê¦>ŒóØìÝç×ìec ðfS©TJHÌZH:d›ÛÊÿ~Ý==bÄ+Þ\®ê»ªó6H3=ý~L·ŸŸןÊsñ«·~MÕ,O½LÅ‘ð¢@x>~Ôb§âÚóoFÇÀÚVœ,S5›gâ°U¯_¾|s¿ÞŠÉRtRå‹Q鹊¤8Óüé?ì?nøñâ¢òÀÀÏx®´Õ$õÒ¥€ÓTJ¡ãiöà¥òT,ã\ø^$R(¥j’gR¨ Q;Œq ¦°/3Àò(©ÈæRd2]hOéËUÿVôøˆ+ÉÔ Å Ÿ„€hOù2ÒRxZ$øDÏeTp¸÷ñ1>â2†#ˆ9§B*xŸŠ{™jdÖk{ƒ¬ ÀïÐË„ÔÀ‹ÜYä—"ô²ÕæÆ.n¬ˆ„Šü%_™y*Ô>€Ø5 bîÝK¿/Õ= êŠ&˧ Ö€óÂ8šõ°mÅáS¡¦"гºxHèUïyÝëF~£.~ú··`Z‹æ=ˆºå-&© fðñº)^¾~õæŸuq;jAßÙRG¿tz=ñó¹¨OTt¬çUqZ©\7[7£?>wú¿w‡7ýëN,`…|Lâ4ü²Ýôn>à»Ïãæðª3>õ²ñ#môn¯ºýFï²×¼‰ÀVzü\¼'å"¾ä³p)ŽÞ‡(¶ðl®ü¹b©‘‡è:@†‘‹‰ Ô©9ðT'ž/Åa…ê…Q=š¦ÞB>Äéh&Éo*«ÖêÈø¹ !Á("b’ÆJ?Ó|ˆÅ •:3>Bòõ‘qWâ誫h!ðäÏ<"Ÿeä*o³8óÐ*lø«@”4œ ÀRyD0OÎò…Œ2]'²Ré…꿨ٜÁѯ’{¬2"’@2ÁÒ™·„O3‰î¡Qéuû¿õºï S{õêvóúó•αÀ7O<`PˆnúuãG° Ö0ÉA¯árŠ@]œ‚©d §@NÁÙj–§£‰‚à»ñ:@ö0‰g¹÷^˜KãRbpL ÏÀ @ËLÜ+õÎ ax6Nß+"8o?U ØT6˜R,r‰Xo D–$œ¤ œ kh@ÁÂ@=(|ŠÂwWcØðvSÿ Aù LO\æ) ]LÝ’-àèÐqƒmŠå¨…ŠivÓF}@'@]p?ˆ‡†‚šøËÒ25K@PâK…Ÿ’¨5Ë®ç¤J¢æi)tЧ|$žˆ´_C¤‹PÕJO$:>@&*G„8NƒÔ‘b-ÿ3]y× Xx“5¡Qéß4‡£V³f)°—0e q/ Ä—ÀöÅ5Ø…Š³H@áp;ÑG c˜"øÐפ-ŠÙh~y*Á Pá3𸖠PÇЖÂ:÷x‚¶ B  ¹sަ€Çh1ä ¼•ždºˆ ‹¡áÉXøÀ>ˆx>&FÅi/På¼ üîT.â{ä¢Iж“8É!àòC"ÐC-w;sÊ<–}…B&è†qDŒx 1”¼üȑڃ™rm3ØÙ›ä@¹ÊHJû²‡ŒA6Ä¥J5˜õNÈjÄ€)eòQH2úCô)Y>¨qD`Q•I2ȳEB2¨IP·,@£ÉLСÜÇw2p‰‚»og=;|Ž´QP=oSÈV¨"™U¤3éq„.IÅG2°'óq›ã ¼‚ Œr8˺ä` :­àÎZÒT±ñÝáSÆÒJs?C½Dß´!Ö[ÏÌŸv|Ú¤9Åã}½Õ6»!‚pÕ¨ Ê{ S™åid˜xŠtð‘÷à,îï`´ævö µåB+Œ}Ó€ ÅÖsñÑ&“ïà{Œ?Î °úÅ!o©½8Ý^R@Ø j¹cð-TÑÆ'QµyÄ÷¡ª,á#ij}4õTtŸF¢žÑ['Ï›yèEØãè—/lè!`!¥÷RÏÈüï’?ó™ú[6“ÐŽ}2taö%[iøzÎ-”V½FK𸠤¶¹iŽ'Ïô:V¸vYJ¹ ðØÈÙ ëF&Dbãic¾ÆÜpž±9 ®4jÄn!Ú2‘Q á¥YWdÑ­òkH³>Š®î@ô§ô&†#qÁ-0'™²„C‹WïLÒ !¢ Ÿ~Ÿ8 ×W Ú»V}¡ß2„ʲŒN‹"ŸƒÐû˜ šü5„Ú*-pú(V»Îp|aM]Ûáâ¸w×Wsº vølUOÈ@ž®<ÊûýÙăUè òfÔLçÓ©z$5ûyú ¶V_šÇµjå¬,«ägóp;'F«q»]ËTá*|(ŸvÌø^ªPZ¿8œ`ŸbVðºæhJqŒyØíÆÍ^ïó`xs5l^Çóle|Þg€Fë‹ó«~œñ±à¬ÑÃ;;iŸÖöøQ*™ÂÑ’l[ 7´wGt|©<#[0ÜÞzÄ÷pp;³¾ì·¼Meººíî9äÇškŽV¶cätOé¬eéҨȲϿ™PQž~NT»0ñ©ëN VÆVA_âmA£Ýyw{Õèö/o£Î 9lŽ;5¬4—RW+–tsV ¡Ô¥œÜ İ?ˆËn¯c‰µHýcV$ƒ}=rÐûâæq ­VL,‰A)ìý= ÇЧ;s:û“udh ”[Ò¼~‚NîUƒÿW™¯!Ž\wÆMsô…_Ñ8tVëê¶# "¿æY}ZÄÊkS()1ÅZÈÌ;‚ÂÙsU2\nä=%ýú)CÂŽæí5à×Fô mÝàÅI³g®³?Ï!þ:hY£±œÝÃOºñè²Ò}÷~¥QÔÛdôÍ¢ßé´é‚”¾uþ›7ï~í´Æ#fò‹ÃÍËí¿i]·h5q¯ŠtøåÂÁïö”[ }^‘º%“”rÍ639Œâè‚MÍä?&ýy* ¶œø¯ÁŽ™,ú`ªäÖ¸b6_I(3‰·Mq>›‹…ŠÔo”ÜüðÁá•pTpŠÛL.»Ì]‰.°¿-§vÐ~×^@xœÆ&„({™ZǾ¢+CîÉmXÙmXø­œ Òc†sc @çQ–­y}ïànÖ¦±»6®žïÙlû‡€§Î6@ünÞøå8xÒ øê‰hY;–ÑL»€†RÇyêƒ;Ñ ›¬;<°¤ÈâÜ“F>Ðñµ$LŒ%kb Ïõ£†-øÞwÕJy£BÍ– FÂY®Š:kWrpÿr6Ù—§œŠèY…u°d05§TãÃËø>#?ß º­›>zëT…È;<·ÐFw€[Œ˜K¨ð1ñ²9Zo‘¼>#RðÕ…ÅÒ>nCC’–c×"‘¾š*ꛯ2 'aZéÆà-`ÞÝéúz¥E¼PXi]ônZÅ4L0™ûsøÉ!d+-%g7PŸ®ù{5ø er •3ß½!¶;EE± üaéàZ±Œs‘Î_ÕEÒR°›ÌÃá7å\¼>1iïÇRæòÑ ç“•…io“›5WðàĺOë¸Ä^z‚ â¢À äN.,ڪع—ÁBÆVð¦ÃHçrW~Âõ$ô|j䬾ð–Ø@ rznQ¦mïJ¥VmÓgfv#NŽBy/CÛæ_‘H¬Âðï±Çm^swXÆË6 š˜YÎá± »Ä´ƒl××l?+´ÔÈá¸LÞ1‚º¨‹3–؅饻.n83¢ˆ8¥jÝÅ4ž(a0D”9,&¹ 3´¾e¦²… 7iCÑ (Ó4UΘ˜«TLY£¬‘hÁ?ÓôJ™Ó˜ÙÖŒ¥ÛWZ…ÅUæ·Æ , ŠŽ.&ÈS`¢õß¹!°Wá{P £½ËЛiNYŠŒƒ0¹÷  ˜àó"Áƒ ÄŽ™I äÈò$•Sl¦:qJSN¨ÙùVyŠÁHU»‡®œ„°µd áÙ¶¼íz#çqJƒO­`ÖMS‘”éAiеVÜmÄüÜ--h8sMÆ ò;y9uMçžǪŸÄa˜gÒ\œ¯Î2Æ%yŠîЇ›¬sEF;±Ÿ•‚ë¬~ÂxàÜþDîÝF€âÞ Z·¿Qã½®¹mÝôÃ9ŵË)g›ùxruŽËÜð½*_¹wmå+çUt+E2÷î—wÛKÍOE˜#×ÞìÅ4tP®3)„9½Em/Zß®‚á»æ¨Óo^wDìÖ­† ®Ú6œØ%[êÔm¡Õnÿ´V»¾ª=u×¶"o­º³…ÛÊ¿F!æè‰\$ù9#"ýy, Cìý ?âB¸Öm™õ:¼õ8%ÎÎDçfÌ+­ËwÔ"^Ÿã}»UƒZõ´x;šƒsíaà™µƒfë·æUçóïá¨{Ów·\É QpWëbëV@« ¯Tè¬Óæ¾ÜA×ÙÏ‹ÐSçÕW—U!#?›óêíøòèß«?_TÎ~hß´ÆaJ¥Ñ‡Ñ¸s-ªxâÉñ1™(¸¿ìØÜsãñ¸=nëãAƒ™fK¼ýjYPxLqîËÆ?á)dò³ íÙ\^ìfìÙ1¾7+MÝu±É¬³c~µ ‘}+˜ÓCuØ ¢¡»÷ìØwvLä_”$¹ª6‘©œ8S’9C {'Eþ°5ËèS–áœ\N WžØ|”3\«'ö‚B=”ºMVýPtð¼e¦ÚÁ‰·€K:*ùâTx <ÏWE>½®ãqœwcá—ç)™“ØÄ}¾Oaá`MGa8Ké…}Çpñ²JiBÙÌ÷”ÖqJJÎÑÑQ{89 q(âA¯¯Û3™Bi†¦·Ú„sÞc&ö«·°)5,ƒ0ía”öŠ_0Ê>À8O<®ãdMcá†0dŒ‚?:¦i}ŠÃ ¼ë¥Œ«Ælƒ¯æ4(ÆûÀÄP;¤²±Õ‘ýß¶ô6–?q‚z=”³íÊW){¬ûïÙåÚfˆƒ~N£jß Â*°°Ú»Å<÷‚™¶Éx¼ÛeýÔx¹ÊrMo&ÇËdA<÷l©$¬yºm+ÆÜor±û°ý~®¾?À_%^Ø ¡&Ù§?r2£§»jô{«’<óúº ; “ Qï®#^«äMQÁ5£)ªœñTD“¿v~*´`IeݨÓ¶~Üdï:Šè׌`©àË9ÈÄ( ?«m¶hÊhbí­y\º-¥Õö=§ö;òtgFcË i‘ç"·¹ÞÛqoû¶uvì{Üön9bsb»¤Ø¬µÿê`¤žàEvð–Fú݇4¬lä!'Ãÿà~M>¢¤±uC²ð1îëδsgB‹„]Ù{ÈÀ†#ŒÁÅ-ä\A˜úó%žc|–‰ùoØŠáôìP5 °Ñ%Ó2Èa™NÒœâ:ÇKk¬N[ÙVR.{ub†KTA®©/):æýJ¡[ï!MÉô\|Èý»%þg‰»(~e0£»yüàt¶ù–O‹àÔÙ“ 4¶”• Ž@\›õ/ÛѸÝÖÜvì–j˜Q>y7ž›ò Œ‹5©Ày“}lƒT&˜£¬½C>oœÕóÁGå;ý¯Mû8¢Ù9²²9ôS’ÝîŸ*ò­3hÝ >ÔªÎèÖž1;£cþ œ½4¬Ø;½¶sn§<$±É‚ jŪå`“²¯‰¾(¦ÛÞxØéÔVÅëPKR}z=µÆbhÎ Í++crystalspace-glshader-cg/mk/jam/library.jamUT \ÇïLó´Mux êêÝZms"7þ¼ü »b¨Ø$ë½—:ïÝÆ^ .ÇÙJ¹\#Œâa†iìpÉþ÷ënIóÆ`;¹½««ó‡]˜Q·ºŸî~Ô’Ø;ýŒ=6IC.Ù"NX(f‰ŸlØ<á¾q/{ñz“ˆû¥b­^ûø›oÞ±Ù†]úꟜ%~±oWøe†Ÿÿ‘JžÈŽŒÓdÎAß=ïD\½oìø›.…̦€‹„s&ã…zò~Â6qÊæ~Ä©1KgB1? ¾ÛVq  §´²4 xÂÔ’3Å“•dñ‚¾\Œ®ÙÐLqÁ#žø!»Jg¡˜Ãã9$g¾dk|"—<g´:”=G{²g2qFÓ'0\-ãT1þȵ2±Z‡tƒs‰© úpéNz`¼s6¦é ;LG®ç±óñ„9ìÊ™L½ë¡3aWד«±çvó8p­Í¢¾ ®W¾e†ÃG»SÀ-ýGáŸsñ†úl¹÷úÀju~G÷ä=ˆåŸ0±`Q¬ÙS" ¯Tülȵ²A4ﲿüõÏñR2çBÝóW³D÷ðñÒaß¿}÷·Cví9äÐg­L°ÁK×ë„ÃÔ~r Á~!7Ð:NT–T«ºã'ó%`Çž0Ë0‘zª‡tÁ~Ë™´Ù—_Ò‡ŸŽoÛì”%)û•ApOõ÷ð0Içì„}B,è& ;#•Äa‡Ý,!¹$§Iš.›‡d&2 ƒ,FùÁÙÄ™|¼ûÁxƒñènê\d¹ì¯×ê8@ùÈ_q*c1Á!E*²ƒÑûû)ƒ‰ØIõé…—ÍýÖ•ÓûÞ¹p³7Ã7E¯:;^ MPØØÛc™·`ĺL³™d?Ág]Õ’ÝÒXÆÎRb¢Ú2Æ‚   ÕsÀÕƒÌ÷5dŒ"“ŽãÙÏ|®$ÀB—bIŒHPãÕà¸@ Ob}dæ:2ÊDuÈI‘¦v¤&?E ‡«Íš,¡"áìh[OMöûÀ®F]ÁìŸS©ÐvqA) 1¾aX:qnššìÒû¡ÇÖIŒ*QÜhº§ºUšé‰ó\àÏÀ- -*;Kø/8ÀšÅUá ø !˜¸õëõÈh[ÓÂô°hì$T-ˆ ‘k>Ç•=?€’ФòÃðÀXsm8sGJÏ’f(S>,mʺ8‰>¶ú‘úù/ ¨‰C\pJk5¦×!ЕŒYÈ‘ø0y`€ÑÏ,¢&ŒoÚ Æ¤.|}“YÞ…y‘Ú¨Ó5àð…Ÿ†ÊÚKˆ£QÓ5G…©.†Ð:D1FMâd©Òçƒ=×dTô†iʵHR¯ÃÓe=ƒ°ÞÖ„Ìfaëh¿–<\gN‰è1~à‘áÚ@¤žûBà@.Uˆ4ê_ Ž6jt¼Ñ‘÷Ig± \‚ƒ!ŠåNëu*Kÿ-Äý ²+(ÂÔ7`hjƵ |ÎRû YÒŸ«€ÚPôTâ†m¿6 àñ–4[ÈÅïÚÀJŒõ–|þ`"ϲ¨³B-º:ƒ³^oí·ŒÞ6}ùgSšàŸÃõ`ˆîWư©~E%-·d™–·‰ ú±Gß.èf@à}yhlø-"è3E ¸û-£­ OÆhÑ]¯M˜x×çã³ïÚôF¿g™Ö¯p€Ð 1X¼ð_Bc°c0úKœji—¤o òŸ%ôþnúñÊlœØç`ŒÛ›zd›QÝÎßzãëIÏÕo­cùÛ©3¹p§ôRÇÀ„e e?û+À%>`Oqò u ]Tæ¼ëð_8kÝ@&ÄO @ć°¨²Ö¥?{_ÿˆ@€v‚/Niî Ý>åÌCœ[‚¯G±:ÇEÇäŒAd/Ã!0âÈ›àŠ¯fÐê ôÜ_Î醴jå)[N§r´¿wÝ+Ö+‡Ùš Úµtîñ¶RD[ÝÜ‘B€aÎVÑLSM•„o³ß~ƒqû­³ëÁ°ç}p&nˆ3P¥ö‡åÀêøÓ ˆp³i&5…å) åy¡°¬/]0Ç C©hM·¬kü*G }1®×N¯Å«FhuFT£:Uï<ôï Icz±Nï|è\xzÜpǘa6†2É4*†„æ°ìEÔ„ÀK'|ò7Zƒ~Žj‹™?íѧüYÉý¡ÑºÎÈýq:qڙ׎ßJfC¶;òX³[Àå\ó"|H„n0Ë2¤s¿…ÛÐ…&1EÖ¤NÓ"hmêÞ'#ÞÌ ´j)­;,½†UrÊ¥*Öø§¬.”é‡u cG”5êf¾ô²%­0 \Žiûœ7öf÷Ký†âø¸AÝQ%7Rå´Ç¡ÎÕ´˜ÐJ¥Ñ\/‡‹$^Uµ›Ý³í uÚ¡Ì1»é¼a×OìÚf¸ÈG¸g¢¶Ø6o , ¶#32¤ÂìXA ZDŽg"èÂBàz  ÛRÝuéF”¬.ôvZSÞ”© Ü³¼JKÚ{צÉN]ÛífÇ!Xƒ¦g÷¾@Ù6Ê…–ÇaÈ>ãìüÖ‰xÄÚ^û‰*ì$ ÷mï°òýfÙ<¦ÞZC©]Ò ŠM“Y¿ `íì¦*=Ï~ëOyðd8î9Sw«Y‡v8ÜùÂê¥3ÂŽ$ûè‡)Ǭx’Ôƒ#¼#×íëõ!ŽÌqQô€ ÚÔ!±s˜7vàÐL„BmqïN›© Ö}ª(w AÌ%ä+Iû!g°Ñç&>ଖFÆ)ÚÇn?_“°@‡à¿âNÏ>µ2 ì‚͆´ ŽŽérÚ_Ó*ª™ËsIï#B³ºNŸÙZ£viÈ /à9v&^Ïåí±Áƒmn¼pwWÄ wÕbYï¯Ö¥ði%ì` mmWÈ`%´©VX À%ܘ@é8: „|0éÇÌ>œUú*ëÙV˲…GÁ›-_(/v˜—™SèÁh‹Æ¸äcš2ãŠIEc»Í=èŒg€}˜^Ie=Í`©ßÞ–ŒŒ¼©3jÚº_Mã‘3ԫз/4Ú%Ù‘¼Ž{‘ÏâÑK80{}©ÐidFŽ9ßÜYUv Ül ›j'Ûx‰B‹¡iðm'>À“*dÿŒp[E†Â½‚þz}Õ:4²Ma£0YMùjýSüþ$·y†5ù M–aó<„ïn¤O‹Óvi—t$õ}›Ï]é‡uts(‹çÄ^vÐóGWwRPXÝ­*œómiu/,ûÇhÙϧˆ0?Jg Úc.Ý:IŸ; Ž5Ë]cçäeß½rG}/Ï+÷UÝ! NĈÚÙ?éöð³Rä~KŸOtÆzƒ{3½;þOPÙ¿M‘3•õ¾N… úÿÍšlÿýd[#Hµ›/´ÙˆnÑ{^j K¸ììæŠÍ[&ñlÿG9• ý¢@![¤U1¢|&UÛÅvíÁÌt|eîê/Ëã¶Ú°"UÜ¡ŦôâTnVøðkîôû×™doÛµÝ"ô–ñ6+ÚZ¼8pG.”¤ôÈ|ÄÞ/ŒþÔxU¿û¢J=¬^“aÈl'œ- °U†]7¿['ðÿ/:ÍÍ >¨ë»çƒ‘{w5ÿ캧ù%àȹt»×msd« ÈüÄÎû¤Ý>D‹¸àðíË¥‘ijç`¼. 90£¸‡w 5Ê^·¬ÄÊ;”ý–Y5î #uÚ5«å˱()ïjäŽê²àSM.ìJ…JrÎÍmÓn…xËÂõÜ[fߪDɨn†šåTüJ”\•¶Ã_“|%‘BqìéSW‘]!Ñ9SÄy`®íoDôî¸kö?à„mtZ‚~>„×§æQ›Ô几¢_c™ÝSå¶åûÃa›IÍõ ï{³C Ù0ç4³¯O:Úà³Ti{‚0|Jü5lÓðêSI.À ™†ŠÎ{‹ÌUcЕ†¹´:¤cRˆh(”¸ÄЧKb} §óeÅ æßû"Ògv^Œ½ ÅÈ4á%¸\œ^*£F(šÒçI÷Lg¾ä#ˆ)ýè(kÿ3øfðš~.`XC§ÞÅß°#óS™ýF ÆÚj~A& –ï 3~Íi´*ºM  WiáqÊÛöÑ–þ&'»–¨tYEI;0!“ꯡ­e»îêÞÿ[:cEq×GkKíýwáfî}éNH=ãã®=eõv]_–³g¡È7ƒÿwplm±+x˜ƒs(,0o|ô¡Ž¹41'>$­‹+/¤µä)§kóiC¢ïe è7K¸žr?°¿öØÚ€d¾óWXŠÂ˜éH í½¤ùJWuæÎÙ\Õ!shU ô'PKR}z=Ÿ3‡X*4crystalspace-glshader-cg/mk/jam/jamcompatibility.jamUT \ÇïLó´Mux êê­ZmsÛ6þÿ ÔîÔöŒ,ÇÎõnÎŽ3§8râžc{$¹I&Íä ’ØðERÔ6ÿýž]$(+/½i>ĉ],öåÙhçì/ü·µ#†j¡´LÅLFŒ( ‘ÉJ”3%ÆU’Æ"*²¹,“qªÄ2)g"Rº”I.Š4>ëâƒÊů2#°1I‘|ÿ«2 욢ґšzªº¹*Ÿlí€þf‰i‚¥z%ðq¢•¦˜”K©Õ©X•ˆd.´ŠSêd\•J$¥y|Xh‘q2]i™Uy¬4Ÿ­T:3¢˜ð—ç×wâÊmñ\嬎Ûjœ&G*7JH#æôÄÌTŒÃXvD{Aò <â¢ÀÐV‘Ÿ ma7§qìws,;òíÉ’Ž -¿bN”û~%RY6ÄÝÏi£9t,`b?+æd>0†–IšŠ±Ðñ¤J;0©ÓÄ«ËÑ‹›»‘è]¿¯zƒAïzôæ” \T¥€KXfI6OðÆá´ÌËáepþë{O/¯.GoœèZ\\Ž®ûḸˆž¸í F—çwW½¸½ÜÞ û]_S_Q¸åæµ>aB¯±‚Ï¥¦ÖØÝ@TøçL.Ì©dA%üu¾úvÃZv2-ò©uï2Ðð©H&"/ÊŽXê~…àø’É;–Ùeu;âïÿøoŒè-`ês™uOññeO<<>zôÏŽ¸öø@i@C†§EaÊŸdF¢Iz".KúD2NB Ž»#—€ 4ç=5¯²1|ïQ÷ˆN´Äj¨0‚ŠÊ†½Ó—½ÁóŸ…úXB¡ì¬ÐÚ÷{ôðíÃwû[¿o Å8ÓųŸz/7×âŒ%9ÅC]Aº ¨0­beð€¨ñX••ÎÅÁå÷{÷yá§zñ35Iò kŸk?mY¡š=÷ÅcÚtËÒô__ŽÄv_ëBŸØ cð3+Sª ÿ[%Zº&ž!1ܓ㴻}>‘î{ˆ7éd^äðHpÀ©c©>ÎI—z°Š8æʤ)|C Ô¯´ìü€Ÿª!ªXH Ø3U4#p*#3ÛG„Ý则²Ê!UºêXoNȸcÆ@ÄÀ²š¦+¶àKŽ# DŽ˜Ðdé¹Ò`“¹`(¦ˆà §_ 1Š ØñûI’2>Jè”Y’Ãõ‘(Èî 5+–”s:PF)à0ÁØi5QZå‘â<ôýÞðEÿêjŸ€ÑÅtb}#æ}˜ªRŒ)½„ó"ÉÝQk~¤ˆÊ+ç ”ë''1àJjh‡ð¾0†¬Av¸¨49ap;¯’<.–¦CA›¾¾B2SÊ4e,0%re‘S®$ݘ¹Œ”µøývtòË­.¦>uAGù%ƒolïw˜¡]ÎðI ·øŒˆ¯Ù%é'C±œ%ÌK£‹U¨®Î•)¹.ªé ù2ƒ‹ÙtD®C§¢díLøH3xVª¼E#i3Þ’½G|KÉ޶G^&Nš½Þ‰?þðßÞ»`çoˆéíÃq’šYrvVãg‰¶<“±p® w 7Ï8a]Øä%†wOŸ]wWý!º†@1Y¶€Kb9ûÓÁ,<ÁñUdR±7ÑEÆ|ÜýQGöɼWɵL('STC´;ùÃÅ€<•´‘.†ÈµóŽU¼ ì'o²î„eäz¬é¨2%¶¢3²ëÅŒSÝû@tæ€hËâ™ßOì y,ä#Ñív¡Ð;èè;ÓË#¼ØzÀí‹ßýŠ· ¼x{|ðŽ,GðéÔâ£Ýœx^dY‘»ýƒ'bqã/ŽyTŽô†`‹^%yR&H¯ TMˆ?ïk†Iƒ‹ã.¾¤ª,qÖõ‹ð!­ì³Ì¨t¡$ÜYÈYÔ~¿ñ—'üeë¤%$gÐ?óËø¨§þÍ“€&|Ó:#38±«ñ¾Ñ51k…Oo->º¹ñ‘ˆk»Ø—ó9 IŽÍ0^rí:—yN¾•Ui™ÌÁ؆k¡:r‹y¬¢TRâ‘;x»„Ç‘…ÂÅïà´,Á›X€`LqÜaoØï¡t{?¼¹œ÷;âêæ¼7ê¿!S÷GûˆA[6ÚJœXX„¥òzLµ@ÖËG§æ´BÅûÌE"Ô–Ìefk7]¥Çm+ èqÑ{¯…UãB,Nª€´´Š8ƒ€©/Ëî¥SY(³; ÔÄ¢sàõŠËbÔy:£oL:I´)½"<&” ‘Ú s’Ö{æ«y#`Ti¤œ²‘æ”y;#HúÝî!«IIà „®µÒö Adå,~`PA Œ"‡0œ†qdûÈ]CÀê¥áŒ5‡KAÆ®ë'œR€Æ*'⺸«­ > ¾kÒëê¦öçsJe·œÓœB,Û¹±±[8Y—´•IÎçHÆþ†œ*0)¥¯&RoÓžm¶!y,ü5&ó§Ã6à-ª±A©GBdkA¹ë:Á¨‰¬»àÁ÷{`Gæf—8õŒü“ܶk—Ø4¶qUÛ‹L¦Eû~tóïþõ°ÍÂímë&·…¤Ñqp B°hèÛ÷Â÷½««÷kH±™È¿ý6"»ÅûçƒËá(¤>{Åw»ìÊHdéT¼/‹9/~lSWðüÊ÷Êa»3ÛûA™dª©‡üQ«Uk +¶ºvGI]»=¢æ;ð¦ý›\Óÿ˜ÔžbVìBQ aóFMäȆPC§ê‡ºÔ•b‰éUKä¥Ú]`qCž0ötý²Wj—¼ÚfÞä7Ô¾w˜  f|k¹)Ó¹?Ö]îØcƒdýips3"o’>ÁÛººEúìæÕõF℘`q›’¸%ë½qy Ä»ÛCâ+HF|4ôÎO¬Ün¹x cׇºGà¥ý ¿¾Gäý ¿öjµ]ÅÂÖu¯`r—š¤C>ØåçΊӼp™°öÊ=§‹}çÜ%ÅJC;CUnÇy-šJ¤IÄÉöçAÔ1›‘ê¨ÞßînqšÓà+»ýˆmÃJŸì•µ~²2q^)y»Ñ÷ˆÌ}Jå%û.ÍG,ØÒl °ÍÝF‡IÓ6; L!ª;ìSë¸k˜&ƒ¨_«ç’M„n‰n-gßd¢‰ºãŠ|Žç[R8·_œ,Ü!9|7‰¡Z‹vZOäœñAâPl(ÛÑqu£•KƆÚbÁT$½±J‹¥Ýs“¬Ð^iØ}˜Â©”GeT¥ ;I ²j­¶K©YÚš&&ß-ïWOhvM£¹@BFfšÏå\d‘• s§í2™ì¾”k‹·¬å *¦ ¬o-isøÇ=;[%Ú‚LR•#.'!Ú—Ü–íX+dJæ&ÜùÒf|µ¥šº¯åO_TàS‘ço4•Ïe2EEÎ4“¬Ÿµq'W’×ÿä|4°ÖáN!ûSœ<'*êʽ(æÔlSQ\ËѨÕÒR„5-×û %› šjs•CÛ8¥µ|æ’j+‹£‚øÅ!…ˆ¥²_ðŒf¨ŠÉ„‡C.ã¬g"¿QN3«0 ×Oe÷Œ t?õFÚõÌATg[I¶:ƲpVÊŠ…r3*Û ;©< 4þë,â+äà)z“’mS¢zŽ”á!¯ÃnŸµ k¥Ù():±×Ü“ËÁÐ;\½\.í9ÂÒ!€Èhúc¥—tÀý+OM¥bë94ùä!%£fš| X£wùÄ(h€QºcQU`•lßÔ,gEÝb A#œÉŽ…ß;P#ƢɰÈ#E:I´*]:j +J-“”(6ô=Ï ú¦¾lÍRÜcš¦Pþ í±¶²UƒØÕ-òœ´Œúç™~‹ XÆEJ‹œG+õ2,ùþã*&^Y£Ÿxñ”$KÌ<•‘Š¿§´úÓVPдj‘?WÒÌÓÊpT×%L“=\Jïº6DZË0ïP0§“¯·ùLÅÜØEeº”+L±½-ö¾ßû÷K¨VhnCiµ¦é•VžNúgÛÛ­eÖšAa⟿k 3ß qfô±Ô÷¡ðoz[nlxÚLG¸ÁéxÊ_+¤$d žþbÅÊbJ0ªõ¦øŠÔS·!×E骙ÐWéò)›—«®Õ¡&º\y:dù%OjCq€ 7œ†SjÔüd7nI*PGë:-4I;(b¹Ñ9m-hJßàázñëz•¦9s—S¶à‰È>]ߨü0è?¿ágË»ä†ò1ÍŸ}û¹Î,Úlh3WŽØ†Cû¥w.ÞíÒë✆o<ŒæU'ƒ³¦æ?y~–ÿãoYO<(~ŸÜ4© L‡HM8M>GÞ뀌ü×Ö+s¸YÎi凿dgáþµMݬ²±ØܯyÀO;©ØàžÕ†À}ì1˜âfÉ…8øÒd¶#ÂY‰›|Á†nlÇ=_TóeD÷¸ Nä£Ìxç.¨š¡nÐCØ t*…‘}cQŒyXÇSß5h3"n&d”Üis{«³9ÂC„³%Òmk²ôÕQ@áøŠPOVõÏ5š´û³%oën®ôA£•(š¤r ÌbÿUuh)j%÷# wÕöG]kÆ’ï¨ÂºßEA?H0­}fgºö /³ÙgÚâŒÝTÝÏw×7^†â; [ËÝ“Íi¿"³h²$¨Å² ánЛۡړýåPãÚî"ÄÞ‚XåÒå“q‰~C´ó9Ùr-én˹W±¬=ΧÀÖòKväú* ‰âÊ´nÃù–:ÅŸ”êøŒÒE”&Ù¡F”~Dô“4kvýÆz¥ì9ðsáaB34r ÷*­3r“väú¾:YJsïþÁÝþóÏx#en1ì¨Ù”šR¡íz ­x‚ÖTÐ¥·ðýÀÜŒTûª0uX䯍Œ˜'ÁwýU!ÔÝ%µ~»˜Á1ôø„ËyÖIšïm±ÓYÿªmó]ÓŒú·¸¤d/v‘€ƒÓµi«Å di~ਉÖý+.;Xuô# 2¢c¸—Ëj:+WœÈù^ ÂÐ¥E}â xüLvY÷'ÂMÒ·ƒjÿê¹N°CSCû)6åɰ²ækÜ0á^\^õOžÕp·¦ðU µºù[¨ì[bÐ#¯ø ½ŸÑYw›¡w‡zÂi²à6ª7Ža4\…ŽÝõ"7õPßÀÙߥìZQ |‹Ž¬”ÿ¿†š¯Oœ6vlNm~±4I>Rv%Ï)]£­ÐwDí„!š×¯_“ƒQ>-rúeLý :ÿ)þ‰¢ë…‰uÝО3ìì„þ‹Àߢl ÷-è0Ô{訿Ô%—F§[íÊÆéëç5ízÅÒÌÖáA;Á5¾~B¥I÷™ßüPKR}z= 5+µ á$+crystalspace-glshader-cg/mk/jam/install.jamUT \ÇïLó´Mux êêíZûsÓHþ9þ+æUÄ»Ž!`q`oMâßåU¶sEQ0–Æö,²¤ÒH >*ÿû}==9ÉÝæ¸_6Dîž~~Ó=âÑ›üiXÕvØö†Cvx6`]vÞŒúûÇÝ;¿œŸ {mƆBÜáp#Íy}¢C¿ú"å2P¹> ì ª>›ñKð{B^BQÎ<$ÝýkÄñ §Úz°ÞcrÂÂ(m±«D"¯ÒèÖ·Œ°~èµ[ìÅËç(¥X÷¡Þçóq"ý).OºìÙöÖΫ»vµAZÔþépÔ=>f}ÃÖmU¯³=÷øóùàìhÐ=¡×7ìÃféýAwÔÕ¼¥·›söbw—¤ÀB%RÔß\°˜§3Õàq ë¹/âúˆš=žÈDA¾}ÓÄåywÿïÝ£ÞçÓîI¯É>AqFÞŒ XfÞ,îÿÑ ûg§¹/•·ÛË$îoÔx\!ßß„—¥| å‘“˜/°®ò§Í¶é÷ñ‡[!@´æR„ž@OŠ*¤l…ÊW3Ûº'ÂLdŠ6бpVÒ àj]2L–á%’Ö9zÑfý”ºýg“t½â EpGðn*P²a 6'Z!¿¼–‚`+/]Ä’7³ÓßR‰]é‘o,*&„HˆA]lŠoØ#Pð.x¥b²µäËÉ35›$‘ÉÏ!Ñ 5‰ö. HÂSã³ ©©(ª¯,ÏHÀ5§}I9Î$TKå\˜*ÑóÔ¯¤¦ ­  ^U!²Ííq¬G×úQ¢¢?9«÷ô²P\åPoœ0‹Lï°Ìµ9´¦9›Õ¾”4yÒf7÷hŽzV)j~ôàœÇQÜT9Rûz“ §7[€‚*­§—+L}Rt\¥ŽÈµè$ ËY£ ¨¯ ‹Ãޥޢ|n§û  ½oØHŽ9RÆr_–}­}`»¿åÌM«žù4‘Ñú]Fج¢°º ¹¨ð Xk 7·9Öã(q©ÔÑjI¾;q­fö¨ 2µÒðBÏÆf{-œ´Ä¢v?j«ÐrŒ/e”Ù¼×-3v9·×8„¼!”=,'=ófzÀÑžþöܹ´™cà—ß3•n¶(šã½ü¼~£Í›Út’_ÚöË}ÝÝÛþ}6üR¾ÝµíëÅ¡Ñ!‰o|¢cÙkÀãèù‘WÂ=Kå"Œ¨> .Î6N£TtØ{*òu‚ë3Å¢ûÉ¢±ð8u0HÅ1Ï ³óÅD†„!Õ 60àôël>m€Ìu®ìn‚nÓ- l- 8âŸß”}pHÀOŠ,íÝŽùµ[ëvÊòkUp*%8]еPi~û¿ÃU³/­ÆÖÿ´:Ó—€•ËòÙ™vÏê¡7í?ñùO|~|^ωÎKFÀPƒbÅÐq¿icûf̃ÿjÖÐ §!³¦m-Ñmåç·× I×-(¯¹Êꞟ›ÞÝñ½1ˆëð–þ¥a÷â«–k²Ï Œï)Muxök·ü^ï!»ÍÆH ¸WÍ%#é‹]cíº¼Ø6`m>àOþyÔõFC¸¥47ä׿£g~KÕ·ôQ¬±¶Výt´ô=¥ü©áÆd‚ [8ÔÍccõ"ÛÑDšï‹«inö/uT {á¾Òº<0_k¿³ºç:aÜ‹ã³Ó#CLçTÚ•´NX¸ü»èº–óNqÉëEW+Zì7•ÊkScNQ#( fq{xÜ=‚+×é”`~½F¥\Bè?Y!½ÞùþÙù‡¦9Vж¯ÿPKR}z=Ú2ÌQ1K2)crystalspace-glshader-cg/mk/jam/icons.jamUT \ÇïLó´Mux êêíZ{SGÿ>E¨2[–ˆØç€I•ÌÃÖ…WI"ŽãËÙËîmyºB!þî×ÝóØYi‘q’KÝUeóØíîéé×ô¯Gëâ×ê:fãYÝŒ Ø<ôÚÛÛÏ›íím¸žÁIî§Ÿ £Bä«ëH‹_ƒQ$!Ž®s?Ÿþ:Ì…™ ‹©Ÿ‹}˜eürF²È£ëI! *ÀOí,‡$ £!òJØ$ EÅH®HȆüÇëó+8ÕK¼©Èý.'×qàã@¤R€/aLOäH„¨«G¼'¤O_ë'.áQ–ð}·"—ø7´ÍjZdP¿M¿ -äJ^6&N•ŸAì%së!k”›!JYü(ãöF(Í0â®L¤Nâ ¥ô¶;xsq5€Îù;xÛéõ:çƒwûH^Œ²IâV(aQ2Ž#”›Cç3ÚÃÙqïð Òw^uO»ƒwZõNºƒóã~N.zÐËNoÐ=¼:íôàòªwyÑ?nô…ø‚Á•4cõ!»íŠÂbiíðÝ.QÕ8„‘+ÐýˆnQQŒ¯Ç;V‰óã,½áÝ#[iá}ˆ†fE¦y„qUdK]ÞPºiÐjÀó¿=ƒ3_JèÜ¢«ýä:Âüõ¬ÛíÝïpÕïð†þÔC76ÏŽZ½þ¯=øæÖÖVïWÖסd©<ɳ_A„¤~"Ô+ÐöÁ]&“¸ˆÆ±€Ës¤Jü!AN¢Â¿Ž•Gˆ“" s1K0XÄ £X´Œ¬Áˆrt’¾£hwcP¨¢!ÙmdMÒ #‰–M™[2ðcZqë¥Qôû–¼½i±ì\HT’åJ 'ÐûÐáÀ%A[/eô«øÞ1F?sT™MY’àvxODò¤ô„<á%q·kš”©Ö0Ý‚xŠÒ4ŠÛ‹KŠA–NPÈOE6– x¥a6•T¤0F‚‹þÖOÖt]epˆ£Þ¨EU3Y¢ £!å$–¤E³=°c2Ô>†JÚkœ‹¡È±hBv«*¢åOŠ,ÁpFóÇ3¸ÑAt©ÿúA1ÁtÂuL…£z„d0éê±fØY¿5(üüF`]²ŽÒÛì“In>AºŠÏ(lâ uQ:ÀØÞñ`î9ǽ£?< “ þm¢)Œr$|‡PøÅQ”Käê_½:êö¼ÒŠ`Èá—A*ªÍb´òÞëƒÍêžÑ±ÜÁbI¡ H˜Ûcö9ÍÀßγℶT1ŸK ÕAWë§*·u¤`vÎ-LÓ=M±óš6ôd‚þUFÝTÏ é¤Tðïžæk·‘¯_ÒShþptÌÑûúüâ옩¥¡þv‘ZQ±—ð-$úPSï’ìó,O|‡\ë¨I¾}$§9 ðÓ¥Yõ™»¹qŸ©7Ûf¥g;´”ζÍ]ýX¿¤ jb‘æ +cžë[»}‡G¤ÅÃʇë,Ç^¢e´•ªŠJK.Mè‰kªVœK1í¡¥•““ñ8Ë ÉE &¤¤$ÒòÔW”êRB¦FÑ’ŽtÚ?%nù޶­³OZUvIÚ%ìl·ž1o*¦¨+\ÄaÙSH’ÂNûÅþWÜ$›£ WÆpÁ}£ƒÐ´iTRšÄêò圢hG©žM'‡»’»œJJ¤çqå2ôgþ'qŠ1±y°–ÜRêýîÏÇ*ï,õÕÃЉ±HC9/ÒÉTCyˆN,'Ù—‰ç¤WÓxÏ`8:ñÔŸÉÅ7ŸËœ_WžÁüÒ1eÜWÇ•aŸ:J‰‰%Ý©óŠ­ÖºÇºÆö‡ç?÷¦åpCåñÎû=AÕÿz—ˆXŠÊƒQk|zŸù7Qð‰Gðo±m¥ßpÑ›\Ø:³æH¦ÿøWNÑr—ö8¤À>ꢵûýÞáÁG4wP›ß{·Z­-ô,R¨úFd¯:ýãƒ×–èˆühÜ÷šø¸"vkÃp²§12¨ä¤z«èïKo9ÇÆæK¯j§G,Eç¶]jÅíb›CŠGhNAïš#ûër¤I«HÆZ Öçkd“¹æd £ÊŽRXSò°”ö®úoö޼µ…˜·(? л VöZÉ“zu“Û9ÊŠüãÁ¸iûèÈaÒÇÍëãóe½Ô²Úÿ“áEÝˈ¾ÿî ²e°©:„ ‹ñP z–c,Ùia^ÀÎÝlÌ›²f£ÿõ‘÷y•‰ïëºx¸g‚–âö§d —~È=ÍMDƒì“& YŠù¯"Ï£)¢ˆÅ°Àƒ0d0îãŸé Ò Üß…`äçÒB‰?#ʵÑÏ&;ó‹`ÿÜ|¿Ýüîþæmpù‰ÍI¥žç¢˜ä)ló+·ò/Êù’ˆEú}Ž*:–ØÉî¶ÑTÜGrfíYÀï÷T£ÿËt÷Ápª¶Ðc«0Á „,F™´àoœgá$à WÅ‹uÀ^O¨ y×—@ï Õ€æ%ˆÝÁ¨ æ”H»Õü ±ú 7Þzö±\÷ `B-³|F:—;®áá"·Ëiíðj†p~è£aÔ„!¨Åt熩¿n@0É)íìΦµôz{ž§âÙrg‡­5(Ï>am:®×•ªåær%/<òLk…9üs¼”M[2¼–É΀ª”­]½˜¶/(_°ô9%;M0ü<’”F)üÝO€Y¨“`Æjlâ6/æ|v|‚2wÚ/4ÑýêŠ2ÉÓ t£a¥•‡0ç 2Í¡Mí)‹6‡HŒ;$°tî)èkÈ!ÕIÄŨF¬qêŠ a—¹[3dkêU/ ŽuÕÊCºÏÚLæ§Óß³P°nµZý«Ëˋޠÿ¡×y«jÅLHc­uèWF"¹¦c€ª‘ÏÓ)Ö©óöw¨ÊXºŒyu¾©*æTžŠ[¬„='OUt•ö«± ÚA–ÅKi†ú–g8ÍûÚ¶Kpþ+3öQð-6¿ËþÿÞp}ÖE¤-a¨CGëlì, fp¥t3F͈:'¥êxp‰GG¹¢›k¼…lÂÓ ¦ã²9¼Ã:ð\ôl ,aðÄT°¿äKß‹±DÅÌ<¤ µ¦^ŽŽ©§¡º/µÚ×áZãxÔ<,£Ò:ib4hfªËÖ8Þ²x#—Jÿ=_Î:?w‘_•øí7° «í¼ÐÀæ(›¦ÒO°ùæÉi!öLC¶Wñ©¡è1.ªwçxÁ¶r“j–§ž1"¢Î"u·Vös«­VoPôÚ5½‡s©QÓ}Ô4ZàŸv˜+yHlOU¥Ÿ«öPu5¨TÍ¨Š€Sá«å¤BU–ç€%šr£X¨ú°\š©à¨ ›\ÑXgV^ÎÏrÜ•çB½š”ØÅ³Ãt º3S,R (óÌ(d¿dê[°Ìú&¸˜^:ˆÒª–¿i1S¼žV '…OØ6-èÄx*¢xfw‘v ®+TÝží´[t«¦?áCII}‹êyËCÂb•*ŠÀô÷aÝP}2,V;B-DÔYŠ”Z¾#2²põ;º~Šè}8Œ‚ˆ†Œ½µ’(ÔÙ“ýÌÆCøÎ/ZðÆ@¸É˜.#þô²Ñd¹@ÏÂ8ö1}@´T=¨o+ ™‰Ùõ½:¶p¾¾7ŸñË]°61æq}:7”F¢vsŠÙûÿ8anœp¢ïô4Ê{i»yˆ-tŽgg‡_>&èâ(H1_0¦rñ¯ J ËæÃÙ5Ass“9*ŠñÞÖÖt:mùIšEa+[$fËÈkŠ$†¿'ë´“Sùµ89J?<•ñV³óŽ{¾ý¼žÁ©Èж!× ¾;k9øÚH-!¶³eƒ×ë)ô‰-J–Iª¯wMa‚MÎÁꨄ/ðtù‡Ú$ŠíØ`¦‚Œý¤ û¶f»æƒU6¥áNJ2·¹Þ¡„ù‘Âøvg˜ÏýhWÇ‚Â\(ÎÜÿêù&C %öé"3ÀÐíú'•¥„º0›?‹¨=WÞ÷ö°œÁ-V7eE5nè %YPT²A±¦ÇÂÇ—XÐlñÇý¢Þî[ÍÕ Ú"»yþ ɪC橼yp”Âfû½s”•?8íXùÚAÇêÊ׎Vê¦+.œÓ~]ÀÃhF£ëAÝäsµ]xiÞõ²Máhšð)oÊÛê Qt‡|ºñ1–ÑÁnNô¹ Û°Z4Rº6áÏp(ÿ¶HVÙS85¹`¤Å‰ŠòCjÊ£_ù¬Ôå‡>c;‰”ä°à-ïߨŨóTÉQñÇ1H=.;!¥¼"TáXr3a÷üòjÀÑ­á»qDE¤¡ã¼©¥S -UOÇê ÝäwÝ_b~¦êi5DœÈ©ð%Y5BªcúhÀðj›hX>IZ·´èE!© °(Ç܃²K±eøŽ>—ƒmŒñ-6)+©ŽéÉ=’t k›«'÷ê”~~¿€kl Ý¶Çuî5;¢¯‡ÎñŸ²ØŠþV £:]ͪºªP{¤®¼´:L§«‰!WWü§®%µw(rÈúúƒ»¶‰ÄC“úFþ¸3&¶œh™úyJ3ÈS¼S!Â1íkCT\so­àæ#"þjÖ¹rôlM¥VœT^0å‚ìG c9‘+ìA)ÍlPF”Ò8&…ÐóGeçÇ¥î¥I‡Xš­Rh¾>µk>cëƒÊšTV1[÷,jÆò-œÉß [2º;¯ÌÚ˜|mƒ~@“êg…¸œRÕˆ£M/G Vˆ—Š#k.G;¯»âæOMÍCM¤ Tlk;7n(‡\v¨¶|Žfº:5Fû7PKR}z=tE=H*crystalspace-glshader-cg/mk/jam/helper.jamUT \ÇïLó´Mux êê­\ms7’þý „ö.Å,EÇJrWGYNh‰¶•’,—H'åòê´Ca g˜ÁŒd&ëÿ~ý 0$½©«¸vr4ý†§=~tüþÙ{¤^ët¥ UT©¶ðõ$_­ s»(ÕþIçðÛo¿S“µºHÊßµzQ$U¦ž-ñË?ÿTY]؞ͫbªçyq«{™.Ÿo¡ò=RfªFUf&ÓꙕO?¹Ó¼7Í—0ÀŸñÂX•X©X+ø8/´V6Ÿ—I¡Ô:¯Ô4ÉT¡gÆ–…™T¥V¦TI6{’j™ÏÌæ•L¬Êf°Ér¡U©‹¥Uùœ¾¼zóN˯t¦‹$Uo«I Œž›©Î¬V‰U+|bz»`r8÷%ò3~ÔË–HJ“gGJø½P÷ ø®ÝjB²«€¿ý¤Ä-L/_áÌ0¿ViRÖ“{»¤Qoz¦LFäù ¶·Â †“¦j¢¨h^¥]#™Ð¯gã×—ïÆjðæ½úupu5x3~ÃËE^•Jßk&f–«ÔmØ\‘då÷p1¼:y ã/ÎÎÏÆï…õB½<¿ŽFêå啨·ƒ«ñÙÉ»óÁ•zûîêíåhØSj¤õ8SsRŸ“ A®3]&&µ^ïAíXMgj‘ÜkPÿT›{`4QS0º?¯X&—¤yvK»‡iµ„”™«,/»ê¡0`WeþE•w™ØY6íuÕý÷à0ÖªÁ=¨ú$YN 3»…õíáÓïþ§«Þ´¡¿Ô•÷FÃSõã±² Œ£½ÓáðíÉåÛ÷ø¤5]©ƒ«==_ ‡ô°XªƒbŽOÏßÜŒèQš©‹O`?cØïÁ\,ð¯éª–bQ¶Z­òm~ËSô­Ø-hm‰ª¢ÉÓ<»ÏÓŠ¦‹VàÑÌàÐFR«-˜è4U'oɪõYôÏ ¸„üè• €üô¦Š„œ ì<[“ݦÀ²Û.„õ Õ²²¥š.ôôŽ=ž&«ß›Y•¤)hx­Kœ¤0‰cô°DŒß%SœWe/ò δ…M‚<Þ?yÛQ"_ä¿ÿM><½–§-õ÷¿ó£C~£öþØS¸Ûc³Žö>ƒ¬‘é¤ÕLŸšB}߯¿ûªL ¤–ô‘Õ`Õõõ5Zé)F8ÜašO'ç§ëi™ƒåƒ¼Á{2ÜÅB'¨¥¹0O[J„|Wèá.s‘‹¶¿*ò@‡=Áñ:ºwËÀ¥[°N $à5 ð|.” ˆ¯òLg¥å¨#¢»Õõ$”áyÃA*©ÊÎ3Eµ¨[rÖ’¢…Ð;8#:À9°˜&·c¼Z&w°‹jAÚ3½Òã³éZY8€±6IÉyI@ކÝHÑf¬­–`0i‚ѬöëÀ´* ؘ²Õ¤–µ%}PÈäh‘¢š Bi«U YzÜJ!¤@@j9ɳ‹9ÑvÑúfº€ó À³V¡gËÜt LŸÍýŽÔÒ”à•]\' 9þ"¯Â§["qÔèPa9ù¹°ì sëÈò¨ŽhcnK%…Ôˆô«?¡[Øgcù2ã ÅæLÂZViiÐK³%ƒð™ãµPÃc2«–` ,>P¥çÓhŒC4ø’]§_¿ûµPYϱhýiˆë˜ ž® 8†J>}U‰h Hu;8€'•IgÈ=H 6("9¶0~NP._!wÀn^Ì8äárÎþgð + a­c@ ".ÉV $d‹g¯–Àñاð[k¸£ˆ¶VÉlƦÚz}z5R÷†ÉIÈà„ªA£ÄK‚<"S ÇŒ{{¤¢:`Q@CK)pCÀ{ÚÈæJäÀç‡ásÒð‡ïðŒ‹‡EaNÊ‹âàã}™Ö¡/° “„ õµ|‡oÈ‘ò܌޽8=»âqŸáÿ:¯¢ Ô™‚äüRÑ×;) #Aþù Þ  ˆÄº×¼-:+X5{"¢¢(öæh÷ýЛË?OÆ£àY £Ò\ŽCóŽú®üRÔ-Œƒ?{ö+ÓüGÛ€Çî,úlwš39‰ú@ "7(sá¤Ð¢}à—cM8°;ŽaÚ§ þ‘HübtþÈïÄËñÂUì™—p°ü±*2 `.Ãy½ZÁ3×§@¤È—êÕùå rY„ÊuГ·›ÁÝಙ5ÃΉ†øª14ìøâ&N–“ðFP²ÿz–ôÿ{FÉ‘N…=ß4ðg'¢n»ÕŸÕöP¯vL´"§hnµbªþ{Lä™#ñÞrƒ†û\“»ybÞ[X·ðQë¿]?ÞG:0]i8ÙÀ?°òV¹^Á∖ \ÏÍ'å )¦ ü¡èeÜ­¹ë2à£í"zií¶?~fîÌjãêmš¢0:„Ã"…þ2îd’¯†b úS •¢à¾·®Î9df–—8=eiô¡~Ál9“Ô ‘¤Â“Áö†e¤ƒ°ÝÃqE+ ‚Ô„žç¢«0t×<:0B=r­qxá:4‘ûÕÚ6¿"X‘íëöÐõi¬Õk¼†„Þ}’V~[1¯ßÜ>œ†’µ,’y°;ïDh´”œ$ÔMVIêl[¬´Ì/ hó á°E¸à$¬ÒQLÛ†ZcräÕÕ󦋾À¸ÑIÿÞXƒ'³Ã®gËS}‹geNØL¤ÙÅ]Üuv[h†3Úrê–"¼Qù$XÒ› aM¼/ˆj!7ý¶ È/7ÎqRüÇñÑÇ:lôÕ7Çx “ƒÄMჾ¢?>M‰\3A þÔ¼oú#Ä#ùõIëà#‚ØôšÇûÌy‡æ¿ÕÁU"´EGž:z*úÑOï$¡Ï{õßšk:1v Éœ^Ž;üút½Á ‰%J¢7°&9'pþ"æD„GþFçb¦T©ÁŠ©ŽB×Ûû*‹‹ÃÑΉö¿(¯z›ŸÃÀ/+DáÞ‚/YýÝ™|º‹Ã ¥òcü\Çú¦S³Ä¼ÙˆdWiÀ‚Ê<1xzDa¦”êÁpp <“˜›Ý‚+ûúÅrIHž*.JJ.„@ÂX2%NÚj²¾ã,ý É‚P!Òz†ñ150èóšI^”֥Ȁö'¨`œ“Xl²·· 90dÊRâ×ÃüÉ’€\袅?J9Ú+£§$$iûHÔ1œëøLQ6çOŒ :¦ —%'Iëb©q®òâ&bAŒ-µO÷àŠ 6_b.§“ŠüN ÜC蚃ú] ^PÅA(7Ö–(½RR)¥Êq«Æ". ’Û{“„;;HM¦p Ö€KLÙþÕ*ÄÒˆ… ×±ùQ”Cá>à|*ˆXÈED j¦Útœ`Pj{ m‡{l“9CÐFİ҅Ю–Jœ`AƒX–b{HÉ•æÜö»ŒSæÁ~‘Üés*…¸sç$)°?[3ªõ§!ÄPá>_ž ÆC7Ão!¹«Ç¥Æ–mÆÑ˜ÉÜŒW¯†ãyG]l(4C¡Un­™HÊÖ¤ƒZ1ö ?„^–t¿àt€ç’ð5(8ç>•;£EP‘(W·žmXå[]® ó-Â/É}nf8ižBp蔉¢âº$ ¢)§<«&dù`Å”+„µÒF­'ÐS\ïÁioò²65”IX#k¢‡=‘©¨¼†ÙJ€ U©ö9Ï Ä‹²,è¾$]¬ªTêq)\là*Ô€€á BÁ>—æ÷Äï´^¡M“c&æ*kÉ“ ¬9t1grôÂ)VCl‹ÇxaM—h}NÆ( Yv]]Êù8dt¶4eUj:ÙЯØp…äG,Oð"KSÙß!">eÊÜÅVRÏO[ò4°[ðÛƒé") .ƒðøèaüoøeë§ d‡ÖKƒø)¸û3JHf“‚†‹ ä[ÓEžcaÜ'¶Î뵃mQ8aûòwYþ@!¿o®Àá.´ûB¨˜LÄÂ+:‘Eºg‰±kÜ=3&hu\•¶5.&e”QWµ®–cP4<8%Xlé~l>$ëm5<âV}uÆy˜s˜Èb·9ª‰®¸³'çÿ{×(±sãrý¦'ö›è—­ç?W¿š5´ï£‡bðñÛ*e"Íú>íøUÈRGýáI¢Ùü:žŸ]p]‰ç×㉄ÛfaK*mãÅ€¯¾€”§#WÃÑÛË7£áÍ˳óáÍÕðÕÙh|õ>¬­…äÖÚ 4Ü>‹VnSRs‘œ;|áâiv˜hþEXÊÔû2/¦ÕèÇ`E7 @“ò „^ËU¹îíÕÁÛ"Nâ!^[Õqͬ1›ž!g·žÿ`£žœÞ¡ˆ£RdTÆ ë¯7®2è÷•.IüÑîP¹È³ž—wpìQõqwnÖmy‹îêÅCÏ{­oêÜi‹îL¥B‚‡Û úMDu)ÉM£˜ !L«6ÖØÚê9•ÉÂñŒ+‡ÔÕo•Ñ%Dþˆ¥)HíÐI$^5ކ§Õ¶OÜSå?=¹Åe³ÜŒö0Rs‚¡oéFX¹x…•Æ ÎCúéú3@~hTXا,]»<&]-8¡9ðJÔÄÅ‚LiÚijf…œO~h“ùдZôLƒ)Çv+©9Óꨯ9Ú°OöÏ;ê|ø6Rf^ãDZ‘©¯:n9C‹¦}ìDF¸•“ˆ×mKò\‘þBƒjÏ÷Ö)›¯sçÖÅO ×G>ûÆÿº›dü=(àMô-äò¨Þ|.j= ()aO™nP†ßJâÀ˜3¤ìì-Z®éuÅ…H¾(©ïE*®`éJ€óš‘žP¶KÉ}}3/ùò0¹E—>õ8 ½PW”KÎm ð†„i<2s`h®nn^§Ã«›×77ê‰zÄ!ø ZBPL2c—$XñÞ`MÅaô†Ûž7ïµ÷º˜À‰o Ù¹¤‚ɼ”6±S×x¶ð/›¤ê8ÖX$qà4  ¯·ž:HO°Ós×°¥/±W³”&Uéè’4Ü/=M¹Ýâ‹ ÷\MjÓœ}ñ‡ŠJh«¶zà ¤RájbÓõ5²„«€AÇ?ê½ÔõRÞöºAú,„ ‰FB­f§D\\Á%(ÍÇ‚‹sŒ:“—[ä6ÇÊ$ë+ÖYŽõ(ÝÊêj–0þ¡”ûú’"“µ}5Zg0Õšß5]‘ú·Š+ë­V66W|  ¥Z¥†.×|Çvñ%6lýDE·šˆ ¨~âòßwÞˆÒs4ì¬/`—”¡\\(škZz›Çôf¦ô|¨2 ®muó$н·¿æs£þ™;ÙýÁSGÛNÑ+)dj€ŽÄ%HЫ YÞ¥QÔ JåœÞ可$¡pø}àWa¸5@P—Ììù¦~߯㗰2¡uë÷ƒR“Ýáý8Ø>6ÈrÃ-– *á°6ËõJÞBÈkZìFE\í¡¹ÿ°`L’Ø8ç¹½qÆ{Öõfw(§¬^¢·«0eñ¦~a± $мÈþ?•˜Ÿ»øby@à% Ž‚Ð ñÄ|åS8¥©‘BAä±”vâŽuVhKXÃÓZ˜ÀµäÅ4ÿâ6dZ}ùZg=º¾©åÉ¿?Þbâ›D¾@bÇ¥ØsBs[ïm[*c[øèÄ—[‚¾†«ãÈÆH ÎXmáì" Ì20´áÃEB¶Pfƒ_¹ÐuE\w¿Ã/ÿÁÙõN×ïaîB½UÍ6ä†wƒýVi@éØÜÃ55G$(ªIš¸+g®8O^Òk|ˆÎHNü8N(’`k¶E|ì^D¡§:‹ÓÎð%0Ïzôÿà}C¯q BòÊi;ª±£ÑÊË¡yô@„8Í¢NQ“y^Ê»&ƒv¯9’îŽFÞ\‚Xg÷ „VÇ€ †úO;Oè¿`ŒÑ;)´4sQ3`\ •©Ø)̦­vÖW‹¬ïÆHhÈ»¤\ÿ;ÛúC=®¡‘ëñ™ÔSüëpó,$'öýˆ€ªÉ¨^ãšÐlšØEððÇdÉ7KM׃“êövMY Ñ Å(CŒO^«ýÞ7þ÷Éõ“Už˜ ãÐÞ7þ^¿ÑéÀ’üÃ-áwY÷`<íHÔôƒœê¡_{Uüá8h¦©nìfEhíGpN—ãü#øl¬^%EF®ê‚aTý嗢‹ò‚›]ÙU2¥Ø€’lOˆï]ü;.`øR\V†cÂÆE¶ì³‹·çËá›ñ` 9zs9 z­1›ÕZz]K˜ =ÿºÀ÷ ÚÛÓ;%¶â ³ŒWSü޶{c¯Ð·U »ÔŸÉñË*XOð—¡³œÞ«tñÉ—k°ª§üR'‰¥N2ñ@`6$è:ÕZ`v 8G?¹¦Nº“R‰/WЋ´H…nBüË,t4½Ò›ï£$©Áëò[ý©·µ¿šºÉùßÀ—Øåm$§'ðîÀ¨í¨”$Ãq% ÄexyCä¨t€ÿ~ÃMcÇ:Â17µÊ,®±yY" Q—x œ…l)ç,ŒZï 5q¾FEÄ-ôrz⸳¡ òxO&ð{ƒÏÜ«ú­¸°‚!”à§:°Ro°Õú2H©‰ðJ‡×Û¨„|Ä`¥Ž<è`ØÂñçâjíÎà~|ÛÇW„R}voð÷| þLfðxÿê¢ã ÿ›” †B9¾¿uúibCAo•u¾°¤¹ÍðgÈÊ¿l.6Z/Ï!Eر i»^Nrü§<0“àëcÿRt}+~€¨ñÍèÔFyš;¶Éòûj÷Û•raÓt‡ybÛôC ÇBÛì*ç²hv‰ŸÜÈÿPKR}z=~ÁRìòV (crystalspace-glshader-cg/mk/jam/help.jamUT \ÇïLó´Mux êê­VaoÛ6ýž_qs $ /KÛ ‹›¢nš´ÒÔ°AQ´D[Ü$Q#){^Ñÿ¾w$e+iÚìCÅã»»wïŽÞ?ýÏÞ>Mê\ZZhC‰Îs™8U.I”)ÉB9¿H¥MŒªœÒ¥%1×µ#'ÌR:‹ãgºÚµÌžuŽÓ|Co…ûWÒK#ê’ž¼˜óû‹ÚJcûV×&‘ð¸”ýRºç÷ {ÁñLc9{ûáËÑåhvC7t1š]O§tñnBC'³ÑÙõåpBãëÉøÝô¼O4•òÂZÃú—¼¦Ò •Û-7(»E¨yJ™XI”?‘j…@ô^mþaœÈ5:‚³Ç±ÃR *µëÑÚ(èÊéï–¼ÀFeÒïÑo¿?EÃXKÃJ}&йQé¯o‡ttüëã?zt=ú„~hëïí#ˆW»ÞŽMMè¤ÝòôÑ^)lH‰pcŽmSyPúPàíÍBl °™qwöÊ7<ƒzdë$ãþ´PÒu¦°\úb€ÒÊè?1h¡¼-êí "^e¤•%”\B ˜8(1ˆR,å6Rž>¨ÿR˜”ÇÚ.ÒÑçVú/™F´Pßµ&XÔpá%7ŠÅÜû~â÷Ãḭn‡f¤«Mù 4‘¢’|P sÇ"®¯Pæ}r'¶O•H†îy:­ˆ·Ö>¦þ=OçN~ßC~ø¹훞~:åWÿËÐT6*SexœreCwánËõÚÒJ%æ<Ð\ðü¯i)ÿéßå)€úõ)ºÔ9l*ÉQw»ýŸ;bg[ÞÖnÚíÐÇ»©~ÖЂò2ØîÜ…aI2[éVU Ûòï‘”–FÃëÉëS>ôúJV²Lm@ÖÁ^ôW>$–é{Y+ÜÜÓ¸‚PýæJeFþPKR}z=S r€*crystalspace-glshader-cg/mk/jam/groups.jamUT \ÇïLó´Mux êê­Uïo"7ýÎ_1MòTDÓœ®UCrê†B‚”Z@Qt:Efw`­z×+ÛKD«ûßû¼kB¹\|8’í?ϼ73œ^ÃOë”âJ±¥µ6´ª¤Je±¡Dç¥TL£«ÒÂg Ë‘›ÌQ{й8?G«=÷ÓUAW¹ß¬üú×ʲ±=«+“0`7Ü+Ø}hŸE&-) W³#,׆™¬^»a¸O;]Q" 2œJëŒ\UŽI:EúBÌu*׸ç°ªHÙ˘›Ü’^×›ÛÉ’î÷\°ŠfÕJÉÇ –IX*ý‰Í8E2 œ¿;òñÌC<4ÒxB8©‹>±„ÝÐÙaOû×d—_[8Ÿ‚iðtéovüŽ”p‡Ë½bãtJ²¨á3]"½ À áE*E+&p¼®T’&Ç‹»érAÑ䉣8Ž&‹§>Ü]¦+G¼åL楒ÀFrFnçsxƃ;øG7ãûñâ)„nh4^L†ó9¦1E4‹âÅx°¼bš-ãÙt>ìÍ™ÿƒðmÏúº–¼¦ì„Tö•‡'ÈnªJ)[†ü Ë-(Ær÷ÿ…mà„Ò(cŸ=®î“\S¡]—^ŒD]9ý¯’w°q‘ôºôÓÏïQñÖR´…Ô‘¯ŒL7X>Dt~ñã»_º´œGuBß´A[ƒéÃl|?|¾§ËÙœ®©ßj"°AÓ¤·u’h4G—¯=[‡¥©…Áˆt¨°ÎÓyÜã=(|tâ‹QÐVW ÐÌK&“Ì{¯dÉaQ\^‡Æ ¤º¦ñmj´Ö"/Ãïè¼€–ËI¼öaày”ºÌņIi>·ÝúȰoúzË.éµ æ×1­?[„; ‚z–ž.ªƒÀ-uÖþÐÁw!úK Y>ËÈ;k_upá)QŒ™ÔØ›uJ¾ž¾£4¶CÅùß`ŽEëЧڻy”h¢ÝÈ3Ýø÷Ãé0É4< S€•Ë`Dµ"ã DCÎ)‡íQÎ'æsËÿ>7%òUÏ@ÿÞfßT‚ïżB•Ø’?m=ëÇN„AȘC •÷r‚(î*¢|ýyO€À÷EþýõÞôª¤¬ý¼ŽAÆ«ƒŒGÊ6A{|„t61²ž½ð‰Ÿ9Pë¬íÝ:Grܱ*ÇK:¹ñ‚õX®_2ûPKÒpU>¤™¬GíE*)crystalspace-glshader-cg/mk/jam/flags.jamUT [cbMó´Mux êê½Z{wÚFÿߟbŠ} l€$ÎévkÇ9%;îÁƒq³YÇkbÕBbõ°K[÷ýÝ;3ÒH4íö¬“80ºsç¾_£íƒ¿ðgk[ ³@%bÅ"Y*ÏŸ®üp&¼h±ô NDà‡÷ø8 ä,Á†^´\ÅþlžŠF¯¹ûâÅ«6~ýCŒW¢ûž¸ÌÂdî‡J¼Ņïí/êñ› 8¾!ߎ£X†÷bè{óTÅ›N# S™þ¢ÄÛXf¡x½ /cúü}–¨8é$Q{ ÍT'T)ÎüŒæ~f¯>Nc¥DMÓG«}±Š2áÉPÄjâ'iì³T ?%<‡tÑÂÁ‚F–…È$+:‰ˆ¦üåøìJ ÌÇ*T± ÄE6 ˜ï©0QB&bI+É\MÀŒFG{ˆžKC8Šp„Lý(ÜÊÇóX<€;|»ö4ƒ²%@_C¦ÄB¬ñEKÚÙñ+È´ØÜù”4 ¦'Âýžvŋݗ¯¾k‰«Ë.3ô—Ɔ­ím’_xÿž¹‘ð§TìG ?ÒabB.¡[)׬k®}•t`gÊDÒ~þÀ•¹Á6Î|,ÄŒ&r¡Ä2Ž~R^Ú|b¡~†1‡~ IÀKß@Y #ëˆKØ£µø˜“ÜJÉMsH.gŽ 2Þ¡ä„bb [k-B™Keë×-!‚È=±|$Ɉq-†*‰‚Å$ì4Þ4ÅØß$l …ÆëæíèÃE¿ hKPS|ý5žÖÌãËwÝaÿ°YD­&šØLG ±MVx¨–*œ˜¨=‡é°`IjÑ=زäµÞ >òÁ” ;ã°¥U—c¡ó ×†a¡ b…x¿œ9_ã§u:Ó'ýð9q ôŒ$ЃÓ8óRã3DÑH[ÐNÃ×ÇÑË'Kˆů‚.-¨îð¸?Ú@áY¿88y{)¢° {Àä\‹S…#‡j=@ƒ‡Ù2ÁÚ:ô±J”qï†ÏÒiº¼“?‡%RŒT‚OHepD™³3ý šþ?GýáYw@(›ÁÑ {|iEÿ¤¯§wæ®Ç),ì™øžˆc¨—*M„§ŸƒA‰XmÒ Oî„ &­¥µÄ2Èf $»Ž«O1ø8;°©ËéÎäÏžq5àÅg´÷ìÙÙ€W¡ŸŽT’ö¬ÚÌÖ¤†:ÚeÔ5øcêrë*6 /U‘Aÿ'ŸEé´]–jÕõ¬T«þÇ®§àxGFŸ€_÷Àü8ë€f‹qfKØĹ;UÐ E‚HúZ çÙdOs|“;mUî®_vr¾F“kcƒ?lc¥ô–[š?A„§ ÛÔlsžDÁCáT…Þ å[ú¨PÕõÆ:;4å¸õ¬jÐøá„Œ+UQwŽ©£;™˜.*…lW[q«H¦!U’¾1}”X3é#Oèú0?i˜òY–´Äuƒç\и¼(2_¹xSdÿÞZö×€V: nª,Ü g¢Óër¡Ó˜Ù‘×oÌ”Ž¾­z:Ãó‹îqwÔ¿-U 9Á¥SŽLo*õ @cy>þ‰ „<E¼  MÉOw “‰OË”u^è Ü>Hƒ¬cvœk {æ+4úa?ÕÏ÷d„‚½Tð¯ØWŽ VîÏh'ueÚÁ)LÀc*Ä5 EK8SÛPAÄhVì¡ f(ÄVÍÂŒri±õæÊ»7¼•Y²ùhOÛƒI]yâÚëæ®×y£ ãMaPú°k®×Â.øg qÑCsòyZ{TY6v3T\ƒ,1-rq½'t|ˆ¿ã²¶ƒBAo&ãæ=mrd RN¾ ñ€>…Nó†ŽGN84ªqbÍø°4¿óKjÓjïOÎ^íÖÄo¿¡‚ØiôN;Ãþ ûat~>(|'Vi‡EFWA¢ŠI÷Štâ¬\$â¾ÝæE®ÉjÆÕ5p` 8`½~ycãÆBŠ~!þ ª¬Èˆ`• džhœ‚“ÙËÝÊTÇ„—×»í›&/kEq"šÑÀT#ô)'ìi#/Lb…5‡`©²ežÒ5wÑo$Ësx0=ÑR­çãib,ì.B/Š·ñpc½9ÉfU#_­‰¯hµ„¿º§Ý¶>À&ò‘7~¬m:ÎdžX%YÞííƒt×àÜÂW»ÓŒ|,øùX[³lÑn£\hOüç=J6ì4\š›¢ªc:w5!öEÙ=JdU’ û"¤“QŠÐà–ºŽëøÿä¸ð&n8ÒTÞsÝöˆ‚G=¨øÖOn— ‡6š"Y-ÆQàúT’fcJÜF:¼Ǥ2RX‡ðÝPÇ3 €§XD什±t\­ˆXÿ‡µûC®‹ ºƒ3@4W´!ï0%P ³)\Wa*¼Ýš¨‡:œ>mÂw÷~’5³ÿ3Ü}&Ë”|ž… Øö—¤¹ ûÊfº°Ï 躪?s­Ù­‡6Ì5óMÕ¦¡®«$§IçÎÀr®‚%•Ü5>ˆÚ€ZGtè³-©{zŒÑû€&§Èq+ýÉ =*lÔ0° úXý'CëšsÑc¦"Î@ÛBéq¯øÔx•ô24Ø<ªvÈA¥{í ½”‹$!¤P7Ã¥;œÍbéÑmëñyÇOáï"CÃ9&Ô¦ë1…ìÂI@Ó^jHiš%ëXÏKã”ȶ!d*&Ïå%BqB9Ôi%í¹Gq´(÷"N»ù}Ù‚·¥&ƒgáù|9¨žÛG=¿t©jBMÌ4m\¹eõiÕ©GäP%êXÇŠÆ ¬Æ&¥"èÏô8Ûż7ïYK…sшt̆«D‹)·Q=Õçtë&m6´®‰»ú2ŠÚB½J꬧Ý[[S•“}ä$û¨è‡òIà¦lœ£Ês¯4×bÙóF´w|P©l?U4I¦½»v²\Þñ™z·ˆ¦®w¼.Õ×Hyç§'ƒþЊ­7—eNiî ʪM(çÒÃþņÔ… ³S<ÎŒ&lÂÙ¹ ZKblŠÊ›G¤Í7Œ 69ÜéG; ›"¡€ßD‹z».ê·u󥣿Üaëbu{rty°ƒ_û‚>ÕDÍ÷#ů9©p1ú×äe€xrÜ ¼¼Üm9q›Àµýº»Þ\Æ(~~µIäå¾xrMÐÍâ?&W“m3 _kýr õÒN›wM4`‘>F¶3€¹óР¹aŸ ùp\’ÕŒ®7}oÃå ‡ šn¡Ç5AÃ!…uexÙtõÂ]‘cᆙêT:A:C®°Ùñاd åÄOÃx¼eÁZÔÎ-=³«%a¢#‘íüPpúKJ/ñ,£aAÒ2™† –:p¹÷ŽQLWüã,u¬EÓ¶hJGÂlR=Gi„€mˆ63²„ƒv>“CÖ =Õ3ßÞ‘'tS×¶5?\ÒÕ$c¸n#ˆ·D{LS9/zÄÇd‘ÅS;[mOƒl Tü{d³›–áL'íi”Å9â5”ŒÑbÒx5FF¨ñu`TŸæ®¯ËùÏÎ0Óè^™[áZ»FóÕÚó]JNýŸé›ÉË ª$%éݧ>Ê„Æ]SD(M ÆØR6‚ zÔØiòhoôÃ(lk|,zGãÑ:R‹° ³•@Ë|ݯ™iÃoãh’yÐ=ªßYÈ•y÷Oç|-ÿ—bôèÜ]CûEo…Ð[0ún¿Ü,Ž<ÆÚT6‰èš«âÖæëH X:õgYl ì±S¥Šû¸BÚŸŠëéyÙ¢r3”§vþ¢'Ebç¡Ó©„XÄ¿×íçw7×Ýö¿dû—íïnŠÛ =|*²'wa|ZÓ¬Ø'ÂRÅÙ‚Aö~ lSýh:ò•''¥êgù¥]Q–—ÏÌÉßiè›9 ¿CÀøUè¸é$ø§-§W°Ç8C®ÒQ%¬é§¨9u9J5Õ–ŸŽsqþ})D—pZ‡Â˜W¾ ¦ ÆaÀ“´8õfª­*Mð¦ý\ßnz‹…¤7|Û;p0 ¹`ëŠ~‰Âá—®!è6ÃáØd¨<´\šŸtµ´þ›àÜNèÔ§÷b(–Ã| ,óJõŠ ³|”ík ôQb.1÷g83¥Ðä)ªèU^»r)g¹!U 0—kW Å2§¼þ£í¢ýþlmƒVÿzmº³±VW¼zâô˜&‹æÕyÞ{@pÙŒc¹¾°Âc ÞÖVįUïùZ­³N_E3£;¢Žmì!HZµWUd¤Ë¢ýyð¥ûfJ–“¿€ô87YÒÞh8÷Í¢1TF9ÜŸ& ƶBÊΘdý>Ö“ÌO¹ã$ ½ ‘´&%»c ­Ù·tmà Ò–ôŽî/‹æ2å¼››S®!'Xo~ÃæuËŠ·køóúŒ¶óÊŽc™•+êâ}–§­ÿPKR}z=ù—>örØ,crystalspace-glshader-cg/mk/jam/filelist.jamUT \ÇïLó´Mux êêÅXiOãHýž_Q@¤‰µ ;df¯°É䀬Â!ÇY„Ð »“´pl«»­øï[}øˆsÌìˆÕ¢Ñ$vW½º^=ÚoøS;oQ“„ÄE"&$œÉ’;Iºäl:“Ðè8Í~…Ç%ô9‰ŸÀcÁLR^;@3üñgL û#'| øuÂ)‘Lä áô–ɧ!†àìq!)0 $Äàó$dô“l‡”ƒœQÀsÉD_œ]ŽahCœÑ˜rÁõâ1bÞh,(©º#f4Ä\ œòí«|F6è'By”á9‡gÊ^C3‹f!ók©Jà/I•§ƒÉ/!"²p>ÚÖ¢èX¬ágIŠåÍÛð¢),,¢C@Kt3ðϯÆ>¸—·pãzž{éßž ¹œ% ô™06O#†ØXG.U =¯sŽöîé`8ðomêúÿ²7AÿÊ®]ÏtÆC׃ë±w}5êŒ(ýJà ZÖõ‰!ö5¤’°Hä}¸Å± L5 aFž)Ž? ì% µ¾}°ŽDI<ÕÕ£[Ñá`ˆy/œ!¯d²sä‡lG‡ðó/?ÁÜgu‡Ì9 §øõÂ…Íã¿Âxäê‚ÞtõjªBö³½Ów<*<ºœqŠcÖ«“¹i4¶Žrls\¬ìQãçpµ¿k Ih“6ÔÇΑü"áÄœ$v8dîpÉã€È.ãíNǃa׿ºvTp !à/ëvAžè]±ÅõF†î@ ¯˱V£ž‹Ä\¥²Q{Õ¨Qb Ð!}ÙZñ0†]šÒ8YT\Œ×=«x¿šwÕÕš^Œ;ˆj'p‘‘TØO€˜ d‚Ìk•ÇÐQ"ˆbú’ð)Eµ C†T£™2µ{Jèá½ÑÎ¥ï2:û þÀ={ȃ¿S*AÌ1.…Å)r ’yšÄ4Æi°8d8ƒ,‘Â&%\j†P[h2Ù˜Z©„£š×{%E˜§¨jXŸ² Åy–”žÆ(B)Å£Z­iÉKŒ6]Ï[oº,,›×Ð2ZkòZ[`8i}[Δ¸*®ë;Æ\‡±Æ?(º¯â.Ñž7͇½úèä¼­­²ÌÂm%Ù²D± ÃB*¤½ýdÛÁµÿjåèé{éU«šÒ¿§WÙB}•^Ë äÒÃR")x >r=5¬Ø(ŸÍ‚5D‹oë¬ ×^½1Ÿv^ëöž“É\U°ïŠgC½ñ©]SXÅÑ.‰!?>B埄gf™ëeÒQÏÁÂÅܾQÌêF¬Š{æ }ËÄYUèm^¥Äwéte¶]"É¥fúª´>nBeODQá•÷|;ór;7O*3¡j…ù³ÃWuD%¥ÝKJb%dCK7Ŷ@¿Žà2¦iVÐZª+–6ázCµÿÞw½³žïÜ÷ÃÞp0òuæÍI[=¼ƒÑRH:¯lÀJJz¾­‚Лj¸ŽSìyj>¶`ÌþÓÔm&›’~ÿ†?5SÝúÆèâŒtT^ºtEæU$?°¥ægùcA~juÛŠ<(Æ ßnqñ¬‰"èþ~-{¼U<3—×2z–Óý”ã7|x´K+ˆ.%pã½ñE/óv4û+¯wVr†W×ïYÉÁÝÞÈ¿t/z«æR{¥0åd´½íXIÜò;›$N·©”Ô}Çë!V×=lÙ’Š¢kë#<ÞRi)æ‰eðZÌÑó¾Ó_Ù©ùm‘Ò6i]w×d'YÞ Õi†Ò`–À~½ñÙiÕÙhœ}ø¬•k7Bs7BqN£tE)÷Íot²ô*`þâ’à‰Lq,˜ý?PKR}z=Ÿ’î;n(crystalspace-glshader-cg/mk/jam/dump.jamUT \ÇïLó´Mux êê­WsÛ6ý_Ÿbkw¦RORÓ\ۛƯª#§êø‡F’›Éurˆ„L$$Á ]§ß½o’l§ÉÍD“È <ì¾Ý}»<~úI?cºq*WnK«ºLœÒ¥¥•6”è<—ø]Þ’*q£üŒÄR׎\&éQ,×Êè²¥éLW[£n3GݳÞãG¾¡å–ÆF%4¯K›©RÒ6^ýØ\$z˜èâ´s |™²”«¥fK¸\)Éê•Û#Oh«kJDIF¦Ê:£–µ“¤‰2ý V:U+ìs¬.Si¼µNšÂ’^ùϯnè"ñ\–Òˆœ¦õ2‡¡*‘¥•$,U|Çf2…Ž÷ž³=óhká™9!©ðÜÐZËL=nN‹}‚}]áØðtÅ;{0~K¹p»ÍÃ÷±±s:EX<|¦+¸—4lTžÓRRmåªÎû„•èÅdñóõÍ‚FW/éÅh6]-^ž`¹Ë8žr-˜*ª\ÎQ")àÃåxvö3Ö~š\L/£é†Î'‹«ñ|Nç×3Ñt4[LÎn.F3šÞ̦×óñh.åh ë+BðšJ'Tn[^"ì¦æ)eb-þDª5 HÔjûñ p"×ÈköÛv ŸZQ©]Ÿ6F!¯œþÛ÷ؤL†}úî_ßÒ¥°–Fk„úLK£Ò[\^ŽèÑã¯ÿù}Ÿnæ#ïÐ'®àÎñà“~àÕ‹,æƒæV::Jë¢ ×öˆóP•kýV¦}âa¥®9òI‡ä3ƒµ²j™3ßËZ!lq7– Mzm%9He® ÅùŒbs å+•K*Eዯ‘`­…Q°ôìærºÍžó×ç“ N¶ñ;ì•OšœyØ» ŸFC†î£=·ü._n(ˆ 5Qx!Û«%NNUZ'ÊaÝ0E®J[ÖÈT'5Ë`PÉîZ ÀY]@Ij§!žð¤I&Je‹dÞc»Ç³¥ÈZC3j`r9½_ŽQ…‹Éõ]]/Æóh²$ ù€-æ ,#W£ˆãÑÊè‚,âÃ%‘ëÄÛi[®4‚p°'¹l´Aa™[ïe[®´;爇z¾°ê¢–*x…µÐù]Áh]Jå *߯qTAaÂñdê\"p7e®ÞJÒ^>ùž¥î4¯oUSaÔuŸ¤K† }ÑäS›|TYY§z™¨}l¢õ V7ìVÌ|mÑMjè`úä%Vö Ø%lSïúÞÀ¥öB4bM´\áèD–F L„¨[ÊG UÑÀñý[/]6ùN&µãŒÿ0³óLæù<1ªrÞÀþž M†X^CÖ/jôŠzמ-FœÅÑDè$©õ­h£ ‰`¥ƶåk¸¨­/"X’×i0Ö Âð/è¥\±Þs ñ¯ã4ò%/ð!•€¾O:´:,r« ö±âF*àæÇYÁ£èËíÒ»‚Þ“ùäŒ1,Xu«C×ÝH? 3TéÇ'Fú@ƽߤî&’ÕÑ86olGŽ"RŽ)ë*Hlö²o„ÔŸèñŒFò7]eôÄuGˆÅp²÷øØ/ŽÃ^Î/Ô.¸ÇSëXª™³žŽç€+¢Ù€s8ž¬å­¢ÚXòÀB}´VÙóy&íîŽå¨ë ªž5Ë@âŽÉ¾¡ZÝ è‘€Á`-OÑ®á'o³˜5>ïÞmO½Î°™gëVWl]UÚ ×1“d…t*é3‘ b%ÞÊ0õa™¡Ë”ä…Xðä´<aNû÷S::¢“ûpÿоۛðÚŽ6˜yà9 e™¤ =étD|s˜”ÊM}êE‘Â*ÂîÙeß?ô:v:¾–ž¡óÞ_Ød//Åé„®´[»ûýLV²Lã'øszg]ü}ÏŽæοwôþУ¢â¹hœt+¹Ž+…1´è¨ãâð<ï Ú½f´Sl?==ôª­ïô÷6ƒ„3á%1åÑ’ë<ÔçL¨‘ä[ØïµÂKÐÉNjnÌ0 å†/¬qÚ㉵V)§Ô–ŽBGTx/b"Q^±Žxä/ñl裀rÏô†Ç…~P9¿ìñðoÙOZ[ÇiêLtÆÝauåghV˜ÝŠep/Xæ_&§;5ÒÖÝ6Läø·”hÍVÌG¾UÕÏß8.¤ÀJ–?Ä85º•œÅì€ö…÷€ßkøžc €E¡ÿ¡}Á˜ºò`ñÕ@~aáuÙ%Êù}“i‰/r¨CjÚ&±/ü_F—¿Žgs s=úì©çõ]¼32ì$äùÙ-'åüDÊÍ×§çO³Â¢¬Ã Wÿƒÿ=|ÿjwùz8xõÞçþÕ£W3šg{þ: Ò½ü~O‘D¤€óg‡ÿ7 ß aŒøPò7ô`}¯+~ë^ÓùÀvþJr }ö;4©Cº0‡ƒ¸LOqEâüq½$3v5 FSæ]ÆÏþåÍOSbžeÞV3twóåørÀr^žóY’cïƒè2þ³ëÜ“DëXüÈRŸg Wè>àLx—0wÞE9.|’$iœ¤GƒÃÄ ÉÎHÞÆ)𢌱ùƉ;è)‹8Ì<°7šrh…Ë%)Ï8V’Âpé¥A<ÏLƒðZr,— KyÝçc€!_®À@T\ÂA9¢ê g^ö+ä-$Æü:ØíDã„àwöÑzøjxr¼ððà—[xx:`%‡ñõ Œº[²Ï/H»1Œ>=ÜÎûÇÕ­ß·,Èá«Æ°ýk‡¸i¼ê´Ù?÷Ù[@éhäåAšAùaï´Šó >O’8ÍÙ;ö|¡vIÅòU@Yà~šÏÂFJB­“—NE2¹@£Z ªXí¤ùïv§{ØÃþ<‚¥fÆ;÷Ò Ï#oÆÙ5*df˜%ó$bxødó ?HáÃ[|‡ÅØ3o%gìÝ»wò]G>JÂÌûÀltž“D“àÅ uNá« o'¿I‚‘†7U,…¬Jz’£«©ÄÙ$ãs_õƒm›þl#Ê‹eç7à…ê=÷$5PK9J¹j^ôZä—¬amyx—Ba.P+Y4%9 ¬¢¿yœÔCP¡&ïK5/Ñf8G©ÃÒ)ŸyAУ:Š„¬“#¿ñ§Ý`‰!|ÄQxK}"Eß ¦¤'—#VH¹áˆCGAGDFƧæaØl1À‘“İŒ@›©ÔX%ÿ_Ó?à³ \Äñ‡ ^‡TË>B„òkdU@ oæ4ä‚Á‹”#Ð9ÛBìĤI䣕'F3[œâh>»µMjï¤ÌÐWZŒ§\ùN1…$ C.Œ{H•!a«ß;+^ÅWAý.W¼4/K§$¶T}:ŠÓ¸ešSur…þD¹·þt•ä³åJòûåJRêÏ[)¤r½`@|ï–ªœVG »^¼®õ•>¯Uþe°™@,oÊ2꾨¿®x-àø7p ðXô/npjЖû+¤»ˆojÐÖ¸‹øF´l|“”6ñ`ñ¼¹¸B‹šðmO`ÙžÀ­=Q{ö®Ñw… T=8q:(ˆUødrlœÐÌ[Ѧ«Ð†K'™Ä‘@,ߥH"IÆY>¥A’ß1HS¢îlXY(ÃÍìv1kPeS<‘äV£Ê¦xbŠV¢Ê&x¢=u¨²žHr«Pe3<±úx÷x… Õ¥¨’À$n륳.Þ €uVhÕ)³ÖîNË@Ômc§ƒRËk•éµÊöZe|-Z_zKÂéø… ¡>+̲$³²½Á>Ì>³ŒÀSZiw4‚ˆiv¡†d]>8¼ƒ™–øc‡ï†ÀþxCfÀæýä÷Œÿ ;0¨ØmÁ· v­NÞ|K`×U›‚ïRص|…Àwìúc­ôÍŠÙ0Ükƒ¥ ýÒ’¹þ.'vü…µø'°ÈÍØ®HD÷7b@¦"ûcËOHJe CëᘱV¯ûK»?l÷a‘‰ÊÂßw!ÚÖŠqæ<ÌȲ\ï‡Áôõ®·Áë5®72ðÅõþâzÿ¥\o­ãz­;ºÞËàõOŠ,–€ç!Æ€#ŒGØcu & Î~>èôWn<­GM ƒTºw:ìôºƒBÙo±ðáqóhP(^ ³Å4Ê@éöÚ‡_7ÊŽÁ}€qp­ò[K«z!µE¾!}…’b§ì¬ˆ‘¤#œeׯq½,ÔKxŠ ê´n¡ÛØ 6íYQþÖÍÜÙh†U†DÌBðŒE!ˆõ ,ŠTʾÚÇæ»ùžDo–¤£é SyT7ì%¬À$çi½”{øi~¡¿àþ¿Åж§Dß5ÈP“ðˆÈlñìe슇!þÇJ’S7öá³ËÀc/å·ß?âfýË`†s _,ȼ´šWxe´\d‰5ÂH–Á`ø…l¬Åe¾t—,q1ùÖú–ûäâî“[E;r³|Ðnö[¯ÄQMˆÕ¤j#A\&ÝÃ^£ÓmAeYZ®øbÙڼʖ`‚(ÓóCì‹)ƒO›á•w“9Go$°¨8\b½ëõR¯Ë «'ûXˆÏÕ f‘½ cŽ+ÜûõÍQ»‹K[·õs9[Iò:õX.ÔMc¤å[§§ç­ÞÉI³{_àã§Õ ’¥™=’ÚR&á­žçÑõõ(IìY^ìÑÌO<Ð`R ©)‡.7ûGía£7ÀYyÝé>ÛÕiX/b¯ƒèÙn Þ P1WiŽZëb.k%òP²+,IcÌedé<ŠhïVúÇ,êí\’ ½y$ƒDT€•Bº5›6¨˜âxŸU S `¼"S¤2!52HÀÆÇhÙÌ=VyRØ´ô‡L™c€ã”ìýkÿ7øÓïä¸Pâ O˜¥ÿy*3(Ð,ȸ™Ùt‘ÅSk™y²š“ß~{lxÁü‹ch)玒,¶I+Ë•<± ul\¶'Š„¸Èö ¬œ•o¯E÷[ÓYì/öÔ^¥Î«òUïi…ܳ€cD_J5 Ýã*QU¥µ:ªÐ‡‡ €H£ŽfYÊ…½ÌÉYØ1Xéð¨&-Gïß7O;®†³¶á•~²¸Û¾u°jU¨i·µ.T¬;©v¾ƒ0ðQQ¦˜±Œu°K&][p`\mÜKF(ËYÅú}?oÍ ˆL\g'xX´ h`¦òåàVáкÈÇ(§-Ÿµ²YR’‹̼‰½g@Ù ¹¥€µÕ¢<-a¥·0Vg¿xᜋ²Ne«ss®“çød°$¤gqë+·Ä Y÷@ë$O…ƒuxµ×¢îÑe‹ëtqiº¨Á4<€½~K@ ºµPk…û'œƒoË †ÍÂ6‚ƒt‰04í{éÍBôŒj<‘&/à3±*µæ¬}íaH’~T`95“¸B·¬ÔäiyŽ–D:™‹ì{¢VˆÖLO„ïtŽîçÍñ™Œø{™º½¸Ò±²;Ð+g¡$¸ç\®€@+BÐV‹®ðÉ6¡)=V@¥™™à®;†µMUÍÔ2FÙ¢ ¢,OçrÛ]…1 Ú(§xJ—ˆÈõ暤˜ö‚ëø.ƒ00¹ xWEÃV…ÃJ±×¾(âÇr@ïþî&‰A›æõ\Ãö9:%ЭP·Ýx±Ô(¿8BÁý»Í£Y’½eÁ,'âwûpßÝã\;SŸÀM²nO"Þî—¡{ùpN‹C«?òY²º½õL¡B¹#´ðÔdÜÓûYá×°34šóyãÞÔØ{u—ù6û¾ñ¬¦3Dñš>BR<¾Z£ßö ¬€š‰v{]e/˜ÙâÚ}ñõS±0rŽisÿdu0 ¾{N{Ã"ØF©pß|ó k÷û½þžÛbÊ¥wE òGŒèÇv²F¥¼>þ6’a%[ý葨0öDxoãÿu›@Û ½X‹Ú‹'>¿|ÍÃPõl% ›»×Í~·Ó=ZÖ¿m×_nTØ×_ˉ+¥²®—:†‰SØ?©šÂbú–Ò…­±qe‚nÔRÛþõ´ÓPŠä:´UÜ[êH ºi'¦?P6ô€”´Ò1’—Ñl0Hxг”_TÅ8=Øa ŸÝYçB‡½Ó}y ÌüÜ×—GˆÇ*Õž«ª¼Èí¤ â£xkkƒºoÒžåñº˜ë¹Oœ;DA'ÍJ9ß Edާ]J>ªÊUìÞ£Q†âÖ»Õ?"±iÎD8©[[ÚDq¢®…«œÈ,†TÙç[¯x˜Øu+}ŠÈ1Ú)œí!+ŸR×e¶(¼V”2­¬GªUýÈiøÿPKR}z=/ÅÌÅô-crystalspace-glshader-cg/mk/jam/debuginfo.jamUT \ÇïLó´Mux êê­WÿoÚFÿyüO$Zc)8mªmZ²¬5†¤L€‘ «¢mB‡}€Wc{>;)›ú¿ïsw¶1„tT”€ïî½Ïûþîùäæ+~Z'ä´L2 8‹ÂxEa¾ÆbQ¬VrÆ8ܰ t==+t%a¦{ýîìn~;ö÷á$¾Äàí…™¨8j(g”BzÉSw òØŽ8º¯¾¯šjÈÃŒçEïï~jµ˜/ý-ž@+wžžÙ£žét±É½ANGÛÎÎÓŽ ~’šî,3ŽqÉövŠ8æ<@yH¦§d{KsèŒïæ^ßžœñ|lúÞ¼?¶º<U\hÐì?Üì©P ȹȩSÐïFNÏhÓ·ßRµ Öùx :Ü¡–ƒñ­3uœ¡göf£ÉÜ»yæûÁøõ%½¹‘hSgb\ÀñA±Içb»&ÿÈÛpèsì’±”u –{×ŸšŽ§²ï€4]üN·¨„/’HäèOfº•*ØV×rmIç³Ë|lµÐAžHo€Ú/Ï©g¨\…k'QÄýÜŠƒ,÷´lÊY¶â92.éûÛ¡{ãñ’©f“÷!I—‘ÖZÕ²¾´U‡Xàþ+ˆµlKȶd¬ÁžâvP ¢­%µé,àKVD¹íñô¬; {ÊG ¨|ta˜² dç(* À®4°*ùÒœF÷h4¡ö/÷÷µêäuuRîépÕGK‘ª©EZ®*_jSkTë„ ¡¡—~T]+0*‰h<åq jÝv¼;Êq’ßÊNxüwroàê&Õ<—¢µ];ZϵŸ¥ vdnko{2UŸ‘kEl+Ž~jéüUk²âç½ãSGTÔ¦ßKÉíÏd[žj—ègm2žÕg§˜®Mšq!ŽÕF£4Ñ~ ^€êE#K÷°þOšîg)ÌØÅ¨Ÿ] U‡°ÑÄÅôTzlþkßíbfÚOÈ_¬zÕ!X»|l7bõįä×;ŸMÖÈŸl£v«Ø27¢ âÄ¡²°å MEl!5hЂEs¿Äœ‹ÚŸ¥G—0µXKá<Ê“b­"óœä:á÷ãuLƒš´Q1y³®Œé.Œ„·†¶(e‘[jÌÅóG\…›4Qè‹ PßœÐÛ·oÉå~‘aÆ•o/˜1囬âðoÞìÂ×ç1gçT°a[LôE¦-«©·hf‰™‹‹ŸVI’þ|a’%D±áBë‚?¦‹\Ž~>Zr–™•&r¿½à9ƽ6^±¢BƒjÊ^¨éW¾n`\,ð¤;²¼$ˆ.#Ó4¥z Ý$åKHYg™²VâEÉ ã·1ׯ'ÂLj’¿©\9¦Œr¹¼D!Këê¨|ª~—%_1?tÈ‹FÁõ¼8´¿ÊöI¯û¶7¨Ø½ÔÍJ][¥-Æ©•'x0f=¨/匞óÆ•£MThŸÁhúéÈe×ð›Í•¶g\®’å)ÞÕ>×î†ýBÂgC|uãÉ=xœ@9^=Õíòˆ1{ðƒ_ª-=Ž«þçêÝPMΧo¨Ãÿ¢—H!eLÙFQa¹ w°R%õs´C–íþSë_PK#ˆŠ=V¦…Ccrystalspace-glshader-cg/mk/jam/crystalspace_staticplugins_msvc.jamUT ÁNMó´Mux êꥒOk1 Åï…~A I ì&·–=.ôRØ¥× õh:Þxl#Ù;o_É;CÒk Àÿ¼Ÿžž|ÇÁ è‡è7Ž9¤Cš $ðÑ…Ú”àùðsR°x9Ô_>ª.ö‰GÝJñó§Ð…B qęә\‘ðá2ø"z«+9øè8‰ÀXCñf¡÷äAЊn0ŒÔœêàB,J}3¶k›ª lÕ‘xÖ«ÍørßJH1Ô‰Öî:¸«R1„ôw¯~ßë…«ìDA#A&«x y†ˆ¥êƦTC§Ž3%~ƒÉ—Á·XÌŒ¤ÊNƒdj„ýaßÕgKýïÀ`N\ƒ‘"ˆ¡Ó6\ ³±˜zÝÑѼ÷«ƒð:£ý ¨Ò<ëžaxeÞÊb@v ÔXγŽÙ¦K#Ųö»ôtºøTEðBV»³Æ¨É³VÉìUfMo¥}¹;¾ü¸ßŽoÛQ.nëxV~ŒŽ^¯ïhyF¯vþusÆvÿ*ÿöò§ÇUÿPKR}z=ÀëÇÉ2\,crystalspace-glshader-cg/mk/jam/compiler.jamUT \ÇïLó´Mux êêÅUïoâFýî¿âIé‡XæhšÓµêq‰êœP%€l£STU•±Ç°•ñZ»kRZåïØË¯HMïÔžZfwvçí{3oáìê ¾œ3DMI…TV9ÏC!8Æk¬·J,Wç{yqñ‹-Ró;áF¥M…ëv²hÇ?4š”îkÙ¨ŒnIýŠÌµsÆ8üJVB£¼UmÁÃBAËÂ<¥ŠØÊYZAQ.´QbÑ‚0-£¯™ÚZæ¢à"5BVàu… «ã9.÷§í {`~ç©i%(‹'ë6Óeò[”©9&÷_«ÆQtQuð+Y³¼sžDYbAàMÙï´@ÇÉÝtžÀŸ<â£Eþ$yðv³’mÈ‚‰u] Æfq*­Ì¶Õð0Š‚;ÞïߌïÇÉ㎺B8N&£8F8àcæGÉ8˜ßûfóh6G} &úDÁ-Ú¾êE×B®kN&¥>Ôá‘Û®™j™c•nˆÛŸ‘Ø0Ñ{ïókáÒRVËN=§+<€(PIÓÓì+#ÿ¶å= 6®²~ß~÷ޝ5ü ·:H× %ò%|\\~óöûæ±ß ú¢ÓaÊ_Ã~¸ÎŽ£øž"ÈÚëÊÓ–`)3®ƒ\üJ™Áºð†rÚÅn»Šç3E…ø-n ~2æµû Þó÷·ûŠçáôæG?ó{Ða‡-¬»ßiW™FU'«çÙ‰hÉç ùG#ÙÖ{’œÙÏxÃ~ùŽR¾´ÝÊɰ…¿F3?IFÑÄÝ'íÕ¦*×GÒ×íÑ–lÞû·1deW½«¶l6èvòn†ãèØ) øÌcÎi?¹íe““¶Äb÷X–`8 _Ir…«.‡÷ŒùúØ´gÇI³ÖRú¨åÐT¼ÉðFZ€–²=íy{¤Û f°gœë€Ö81Šç8Åóþ «ðŸÅ¿óŠ¥Ùõ½®ù‘ñ‡Aÿ‰o^æÊðò¼¿2Ñ.zâ¢Cäÿ³ÑAϱç¯éDÀ'œô¾óŽó'PKR}z=Âè4‡Às)crystalspace-glshader-cg/mk/jam/clean.jamUT \ÇïLó´Mux êê­TËnÛ0¼û+N ¨i‚¶hU»1à8†,#È‘–V J4HÊ®Pôß»”ì¤=ôqˆN$µœ™ÝåÉÇüz'ˆkE¹6H‰JV¬k©2däŒtµ 9h¤·‘›Âa0:»8?¿ÄºÁØÈ˺²…¬Wö°út\¤:LuyÝ;aþ’BZ(¹6Â4àenˆ`uîöÂЮ‘Š †2i9óºvé ªì“+u&s¾ç:°ºÊÈÀG¦´Ðy»ù2_avHñ…*2BaQ¯É”*K[b ÊXEçïN<Ÿå&šS'u5Iþo°#cy‹c¶dæ7ÎK0žÞú›gL¾îùrø'7žEgU _è-Ë+˜mØK¥°&Ô–òZ\£ƒÓäö~• š?â!Šãhž<9ܺv u`²Ü*ÉØ,ΈÊ5^ÃÝ8Ýr|ôy:›&ê“i2/—˜ÜLj°ˆâd:ZÍ¢‹U¼¸_ŽC`IôÃ;´£ëy[Bö•»JHeŸ|xä²[¦Ê WˆqùS’;&*rÓýa;8¡47°WÏמB樴 °çžfêú¯%:°i•†Þ¾{ƒ;a-¢—z$ʵ‘Ù†—wÎ/^_¾°ZF­ M?v~"o¤Á•›k|ÀU&Í5Â0l N´IåZ5lª"V%`ÉyÇ8ŠR§$t- [xì¨Üº¦CIÄÆ7 æ>˜m0œ0rÖ7]v4•Ðoiõaøå`ë´à¡j¡úi÷‡‹Ý÷ ÝmÞ|ÓûÞ"µÅéàê CÞϵ›Húå`乞®ýþG¯'R_^ÉR×ßi&瓾q.ÿpý–âtp3ž%ñx|Ö¢xŒ[RÛî™c/û1•š;NøÁâÏ=ÉÍ.±5ú+›Øçì?PKR}z=T'0’z¾ )crystalspace-glshader-cg/mk/jam/build.jamUT \ÇïLó´Mux êê­VMSãF½ûWt-9@Ê*Ie IÖ)°)áD¤–5›‘F53²qRùïy#ÉR±Äa}±%w¿é~Ýýzöο⧷GwBædJÅ–©˜i˜GªŒñ,”"™Ú8‘»ÊÆ[X‚C¤áÈ‘61 \êbmä"u´ypr||JáÐî/¦ #Êœ~ÊüCèÿZZ6v`ui"N´Yð g÷so8øÌRiII˜š5ágb˜ÉêÄ­„á3Zë’"9–Ö–ŽI:y|¤ e:– ü\ Væˆ\ÊäØd–tR=ÜŒætÛqÃ9¡è¾ •Œð:âÜ2 K…cSŽ‘L ç}¯}<Ó&ºÖ8B8©ó3b‰ÿ -‘žédsZÙ[´/œOÁÔxºðž~MJ¸­ó`Û¤c_Ÿêé¥ +‰¢…Là8)UŸ`Y= gŸÇó£Gz&“`4{<ƒ¹Ku鈗\ƒ¡ÞJÉT}ís¸»š\~†}p1¼Î›Ð ]g£«é”®Ç è>˜Ì†—óÛ`B÷óÉýxz5 š2w^£mXOª‚טʾððˆ²[„ªbJÅ’Qþˆå ôb±~ak8¡t¾¨²‡Û–á3’ åÚõie$úÊéÖ’÷k0 Ì Oßÿð:ÞZ –(õ¥ÈB#ã~Þt|òñôÇ>ͧA•ÐWaÄp•‹£‹Øýt¬ü´Æ– ÊØZ±`Ðø{p÷ôÛÕÅü†~9§tÖë}Y5ö±4tNßìÏÆ÷GÙŸGxïÿÞ£¹“J¢0Yà8+rX¿©å-æ'£’ ]u¾Œ,N“µ„õÕ)ú Р>k‡µ-C|·ÛÍo^u509sl}õ0 'BõbÃô„|žH$~Ú¶¡ËèíósÄ…óuš-OJ¯FDQÙpR ¡õ’ȹҠzœŠ~Ä £þ0 K©Ü¡ÌVó†°Š!a2G@YÕI cèÔÐÁ‡%Ú3†Þæï¤3.³b“ø“:"ÛNâR‰ži72\ v»•Œ¶§í²IYÔvoÓn±0º,:“¹u¨F»QäkÑEcøÛ®ã4ßÚh‹ŽÌj(HWÔn%á,ì„ ¥Õy¢ø¹c–VrÑ1Ik—by¶UªâÛ¶ƒ¯D‰E[âv„í0]DØXQ5E*{G‚:ꈻ̥sl]e¡´è`Ó‹.ƒ—Y¹U·ænFã)Ù‚#™`±U¦=TØE©×ñ`rs5Œ§½¿{‘ÀR}ŽNOèShÇ+™Ÿž4‡TwÁåxúôG›O&"mŸ_;ÍGÃV0÷ÆþÛʘ£TÓÜHFÃÑÍ'z‰Þ¯á¤¹õ‚è>Àý=GüÓ¾ þ£ÿ^r#VÉø‹v[qsµ ƒ»‘ÙDÕÈù*ÅÕ‰« Œ@‡Í]j‹ñàÉ­mû¬¯¦¯cªC)pÿóëà𥮛•Ô÷wÑCÇv·È2Zp¾m“·y¿Ú€ï\‚›¨ÿÝiuæ^Þ³§þPKR}z=r{燭÷-crystalspace-glshader-cg/mk/jam/bisonflex.jamUT \ÇïLó´Mux êêåWýoGý¹þ+¦%’M‚!j«ÚÁ*&Ø¡ò—87 Qºp ·ñq{Ú=ìÒ4ÿ{ßìÜAìÔn£Jm-îcöíÌ›™·C¥ùÿ6*Ô›ÅÒÒXÇòWIHCeu‚WmΚDmµ«O?~FÃ9‹ì7IûFÌz>å›!_ÿ8³ÒغÕ33’@›Èz"³½ pð×”¥XÁÔÌ —c#%Y=ή…‘»4×3‰„Œ •ÍŒÎ2I*coðlªC5ƺ̃͒PÊ"I™4SKzìnOÎé(ßâP&Òˆ˜ÎfÃXðx$+IXJù‰$œ{8^{Àþ¹?t ±…È”NvI*¼7t…èpOO»å5‚["ãŒÇÓ)¯¬Âù9Å"+×oc£:$•8øH§/0h¸VqLCIàx<‹kKtÑí¿<=ïSëä5]´z½ÖIÿõ.̳HÏ2’WÒƒ©i+`#8#’lÎ1wzí—°oíwºý׹놺ý“NÐÁiZtÖêõ»íó£VÎÎ{g§A§NHù'„{´ëc—BðÊL¨Ø.yx´[¸‡‰+‰ô¤º‚£‚F¨½»'ÖÉX'=– ï’S¢³]…ºÊôgS^ó`ÝdT¯Ñwߋз–ZWHu[L‡F…\·èñÓ'Ï~¨ÑyÐr}Ѿ܀˶ÚÇ/êGŸ«6ˆ¸!§©ŠQLdg£ˆ«ù8xÕ¦Psx÷RR%V ˆV 2•–Ó¥’‘OØÄ‘‡*shc@ÑÔõ÷Dfd3¤ÈÕ_ûUàt庖çM\Ó–«)8·„"H£'êךKµJl&°e„KÔ\’1åv–¦F‚ÉuyGú wÅ#ìÖa@š´}D»n‡@O墕\Ó@°¶ G8»ÜAdzPÒóY‚î ëÑ]G ¬)ëИ±D›)¶ž“¸B]Š!ø@‹_¨$Ô×¶}â l¦FgpýN/ %±Õ ¹É¹ã˜¹_^J}Ú¤K9¿Ö&tâ›%‹Q˜Ao96zÊ•š\*Ô-7»ÃãL¹ÜDHð(ÉXîá9D`$ gã÷ú˜ÃàÒõZ2Kƒ-ê¬/kh<›ºÒÇ2*Ìd6… ‡Xæô¡Í 4INY{ñ2Î ÊA-S¶»V5ܼ–q¼Ì]Ðyñ.h÷ºg}jnp/}³iƒÁÖúêíÊû̳Ã×î¾ÈÒ`PmTÔ?†¼<{:8ŒÁàI~U‘ ‚lì6<;н°Òìvýa£1ÙüÆÁAçJ†O<Üpkb=‚šèá{NínéÑÈ¥ Ioè…>u¯ \DW>ß šõQ•ÞæöîãX\Ê#,ɶÜÚ*íàòè´ÝêwÞõ[½ÃN¿š¯:-ˆ/×ÚÒ¶y‹­³g¯WaŸ/ rÏÙÏ\¼³vÕ~oÍ]#³™áíýzöÿ=9A”Ò`ižŒ¦;³2—Ý‘Í4ý>ÓÔ»x›~í]ù\XßÈè eÜ»Z^±Wò÷~tzÒ¡ñZm.™|!S”¹õžåÛyKòèÆûGkñ|±½×e¨Å¶›¤¸WS´+Y®“±Š$®´ ýð7Š´¶¬E÷yŒýÒÍîí#§;Ÿ_•ê£B?‰é¦Í×yu·x“„Ùµ´ÉfÆG,M„?yÜL„ Ṇ”ÌM7˜Je}#UXL¹X Çv›`ðô¼×î¼;ìuƒþN§ú5žœï¿jõºüv~j~]õµU¬ª.:üfE[5½µ݇KG¹P—Jç^xÃc&/p?>eüPf¯„YZ¤ÁåöI¬Ð#Ϙ›HÞ‹)ϾŽl1ä# G¼k07,à8Äüsa²ë\ÚCE9V)ÕÜC !ËÇt÷S‰ÜYSÿ$+r±Îñ_‘î{œ+¶å½o—Å»‹Ø²³XÃæ% s/¾ü™pÏÆ[9JþU­÷W¿ó¿ÓžÅÁy—õ$ߥEoä5˜[7?[‡ëÏ ?ºO[y?¼mëÔDòx÷Üso<¿û‚?ïâºB …TP2‘W\¬€iëe… N—¤Ô•›â«Ò@«ë__]½åÆÌüŽð X-àvmK»ÿ¹Ö¨t e­2$ÜͽwN8ôKK®¡â¤ªv@ÛB!‚–…ya ;°“5dL€Âœk£ø²6Üq{M×2çÙ™¬9±4%‚AµÖ wxœÌa´wñˆ«`V/+ž‘8C¡‘b„•ès ¦³¶Ë'Ùó$Ìp):€œîl)::ÃõÁÛ² įŌ A5xrc-}"¿ƒŠ™£qðOÙ8¾” ¯$`Jà ¯*X"PŽ‹ºji6@o£t8§NžàmÇá$}êº)em·Ø€ñõ¦â„MÁ)&ÌÎÆ0îÇÝ!é‡Ñ(JŸöÔ ¢tÒOLcaÆiÔÂfóx6Mú@‚ø oÐY/\ )¯9Æ+ý9OTvMT«œÚp‹Tþ ù–ˆ2Ȩ÷þa8VIêc=™3Ü^€¦ /ŠS_ù¯%o7`‘È‚6üðã÷ÔñZC¸¥RwÙz©x¾¢í8„«ëïÞüÔ†yº€¾è„zDù¢Õ÷‚I˜Œ}ïÏS4²0azmg—•Ì(rù3w°€žœºÃ£¢†¢óLaÁKꂾwï€Zo}·$óÁôážéß!8‹MâÏ?hÚ…¦Vâä®ã}òb\‘Tz-ÒÝæÈ, Õ9áìøöpƒ"×G÷ ¼ 1ŒÂǤhn¿½£õ(oôÎ&äµøÆ€¶/†{Âу íèdµR( M”:t{ÍÚôØËs'i.àAáЯ"(*¶ÒŸ³ËEVÕ9:¡Ëñ j$6Œ¤Ò}H¦ó¸Û÷_ó›žï2ûЋâa/Nì©YŸOCPøkÍa¸ '§fJÝ £hJ쓬+¦Ë€Ì¢Iw4ïõÿš#›¢Sz>9…ɰ)ç²G¾gašöã ©Ÿ½_ÀWÏ—_»ïÞÒí·ïΞ[‹÷ïÎîŸ/ý…]‚Ë‹3Â9yèRìª{²½9éèÆ?TŸ>¥m–Ù¡ÒÇ.8ië¿Õø¢u§¯d¨mŠè“÷'PKR}z=º+Š~üç/crystalspace-glshader-cg/mk/jam/application.jamUT \ÇïLó´Mux êê½XmoÛ8þ\ÿŠY'@l4uÛw‹sÚEÇN½ëØe_ŠT–èX, "•Ô·è¿gHÊ’Ód¯=—­DÎ<œ—g†#ï½ù‰=š‰P´”9…rÅIœ^SeI:–©‚HOf›<¾^ijõÚG/^¼¢Å†ÎýoA'yP¤ôzÍ/ ~~[(‘«Ž’E  ^‹N*ôo=àào¶Š%1Dó áq™ AJ.õ]‹cÚȂ ¥\D±Òy¼(´ XSFÏaáZFñzÚ‚i$rÒ+AZäkEri^ÎÆs¹#ÎD*ò ¡‹b°ŠT e¼¢V"‚3Žulïì¡Ä& Ç$bìçt ïðNGåiò`_+ÐìBnñdÆšm¿¡$Еrç±hTNG§~%3¸·0Âp' -!ÆË"9$HZ ÷ÃÙ»É|FÞø’Þ{Ó©7ž]C\¯d¡IÜ ¯‘W`ù &Sòè›Ά½ùÈ›ÒÅ|z1ñû"_ˆÿp‹VF}iRˆ¸FBq¢¶q¸DÚLM"Z·éE| C2Û|b-\H˜½‡ZácŠ—”J}Hwy ^iù—)?´`Ã4ìÒßý¯y·Hu/X/ò8ºÆã¹G/Ž^¾úÇ!Í}Ï8ôSë6Ì™¯6n >Æ‹Dp=Þd¨Ñ„‹Â†V|a¡ƒ×3“ÒïÁú¤Ë Ht§ï›û­þ‡þùä´ßnÒjþúòe“þ$·Æ+O¿4阾â`xïU}€{B¬uÉÖ¶¢áÙr\ÑG#OtRÄHbÖ[1‘B×bØ×!L®-l©!È"rh.C“ÅgjE9ZÝ­âyÍcöRº¦ex¸FÍ`EégîPËq_ sB4@¶çqµ’¼K‰ÅQc‰áàÀçöh£Ð¡w"@Ãqp5³?J³íñuŠ,EԵسI¦É†«52‡ûÿìQ–K†du‡tm¨¬mc0+RÙ<—áe¬f*ãTé IšLdn•‘LÐPÊ`ˆË39¡2„Z°æHÁ@ë~dèÓ ,Q‚àˆgÏ\ävJ=›­{Ù-» ·¹ë<ÈV†•Xɰh³+‡ƒ 4íÈÙc"$q ›p÷ˆ¶“ô%¸†bª[oX¡ ŠL~: q^w©g‰²CÝcÜæ¢K§ÒX¥å"û66H6 ÜñöžÄˆ@ÆaHu—©RæÈXÉPˆÌL3XV0Üö@Ø¡8 ô„l·KBÇZ¶I¶5+Noåu“ÌpÐ4ÄJÜ Ø8ëû®i¬Ÿñ3BY&sýŽDöâ¥h½çØ>gª·Çütüf§¬”©´Ó0•]ë6?D{®DxSVzüîòEÛlsT ,Ù08Ϩ²=k¿õªmþ{ݦã`ÉŒuYxƒ¾Ö Î‹P×LšÙm£å0>B½Ô.›"«ŸJß¼å¸Ï!úÛ®¨tíÌždÚWÙáö[Çj@…Ï»š]^ps®WÝq¹79ù½ß›ùØÞo9ävµëOæÓ^ßîn¡·»3ozÖŸ™Më½ ÈÜ¡Ô2%èNæ7hu+L±Æ‚ÚHÐ×°gJSÉ;#­¼;©u„ÿù‡6àÐ`ª~ycÎÆ2ç˜èÔ¤LU­,áí±Ôîï.[ÄW¸nÄNy¤¶4¬¶=ôx¨ú‰¹*j”ÙûÆÐý樰dfK¸G©ùÍ6ónû ŒVÎ? lõK×´K}ÚÕ}úf+la¾šýÒbí¬¬_ÞUT»½f£î]\Œ†=o6œŒ¯üù`0ü°ƒQœÞàáQÁ-v ÷[£ tûK(ߪZkXs×—ç-Y»µR ¤èìy`€ FÃñÓþÉü¬3&¿™g¶yjÙÕ¼ëH,Šk¾eMù0@ŸòÒ0]Ê{Æ?äûGØ­ä•9{0õM½láK¢Öl~ú Àwp¥ÊöXöøÎ¦¢k™Ä>º¦í”üÜQc|ˆDqnŸ‡cæFW§ÞÌ«üüZæº7H‚ëZ9Ö‚Óé FÞ™Ëîèžçg4<Áî®Î¨Ô±Æ»’²×«k¹&tfÆÂ¦—Ü‹k×ù°z¨V{æ©ZÛaÕ~«Êˆ#×ý ˜â‘R„ m3ÇCgw?ÖóÉ‘Va3´Sh™Z§¶ã4+˜;ØÅ«ie¾ÑD³*·ûvêòÞr7aÝÚ=zûö-ÆŠç~;f¦òîw8Ú£ Õs-#y…VÞÑ_´Õ˜ã^Ÿ ¥ëÎ ü>B’øÆ_²n»™ß\Ð1ðc><Ñ[ÕÅÆÎ<8|bÕƒCãªÛ6ÙçxòÖ¡ËQ¹/úT`ÖOî胇·ÿmûáÉ„¡$3§<2•ìò«>oü0Å+z»„=Ä|·õØe¶Óº_?ÖµäNûž>ôúñþs1œM½ó² ¾Úi稽3b‹Ì·iY~Ü[ËoX{ÍÌON‡Ó}»äBµÂr-øÿ¿&`U~´þ¹ŸýÄ¿Æ>9ã[Î{äºa~Ï+šL‰‚¿‹l6”)¿ØìÇç_½å×Ç®<†? Å懆E D£dO…] wÜ(‰í^M9]˜*õŸ9ÿPK5}z=¶q¼s ÿ'+crystalspace-glshader-cg/mk/autoconf/cel.m4UT %ÇïLó´Mux êê½iSÛHö3þ¯Œwb[rl% S«™hÆØ¬Ì°NJÈR÷"KoÍß÷º[— ƒkÆ‘»ûÝw‹]p˜§Í_Ã÷}šÏ› 'qàþ”~TvõSÙ…–Ñ—Å̉yàÃÜv ¢å`± ùÕ,†zkïðåË70Y‚r‰͸ÏàçH=ý+}pÍ æ¿Tv~†3Ç'¡.§!cÓøÖÙ,ƒÛ‡¹<ŠC>Ib<Ûw÷ƒæË§Kd‰ï²âƒ˜…ó‚©øqÚAG‘8e> mΓ‰‡Œv¸ÃüˆÁ‚V¢sQ ‰Ž`ÛÄÏ@ñíIؤ…#`÷C¸aaDZ9L©)” @þêvL"„_° È=d~ žçÀÚ6mäB»À}~,P¼"F5Ürσ ƒ$bÓÄkž”ˆ~7‡{£!èÝ ø]ï÷õîðâdz ‰Ý0‰ŒÏGÜ(\hûñ’d83ú­x^ÿ`vÌá…b=„¶9샴{}Ðá\ïÍÖ¨£÷á|Ô?ï `ÀØ= —ØR­O… Q¯è\6÷¢LhöYõ\˜Ù7 Íï0~ƒŒÚà Ó=ܰíþ•Ár Ÿ‚Ä ¸ 9úUÜiò†DfúŽÖ€·ÿ|gv~ƒ¦nÙóIÈÝ+|<ÓáåáÁ«w  t!Ð#‡£Þ²ÎûFßøw}|¨½yûe¯R™¿¶\6Åàª1•Xsî[ʳhÝN¼øKÆÚ;:¼Û|Ôåu®?Z˜&¬ÖG£õ[}|fvͳÑYó“ј½.‘×[C|jšíf»7êž|Qê\ùŽu{Ãô(ŒQÞ‘Ù7NšóÀzçtNïÈ…½ÊîNkÆœëH8U+\F1:ƒáǽºc/1ØêÈß,ìxQþP^ÀYDi ³g„zâþbB%6)ò+ ̦<Œbð‚@aÏ·Ó ”HçÌ'?Qd§†ô´ío?5Ò\Cð£N"ä~…û^àØÞ>ÒÚŸpƒË˜ó˜†Èº.&ÊèÁ@‡ÑƒsÎx1UÊÞ1C apÚs˜R¬‰üÄeÙ7¸bO<–e3?™OPeÓü&î„Ç´M\|]!òA`7¨=ZŽ@X¾×m›§Ö°×C©iAÿ¤›ýCÇhqpA9ƒÜmµ;úé@>“ å“ÙmuF'†ubö…Rd†JE6LɸC&‡(qÆÜH)»¦HDôlÉ¢g™ª!é;“!b1e{jZàbLz ‹4¢†º–j“JÝBžùÁ$Ø|/÷ˆ¥äÑ”ì£søÓqê41­Úè§h;ÌxdÇÜgogÜ™!šy‚»Hy²K'/Jâ`Ý]p9’Þï_ããÔ³¯ÈÈ©!›zXçe½Éí$@„©ÄO¡’RJWù66rIá·Ï´&>ã$¤R.œcŤ82—&u .(L²è!ÒøCVdLiÍE¾bOH™dT–H_†šô·u”ø21mÏC–²ø¢s¢-ì0æNâÙd>å*OÔ¥$Zâ#S F8Ž-΂á—/(•ˆôU² âQy3\ÖIY<~ÍGïAZú¸ZS&¯å毪X윤gÔ“^+0X<°PXJúÂþÅ`¨§‡ö…Þ?µ¨¥±‰Q2å_±~TT±±>sk0ì›ÝÓú¸Ù¤&¡™Ÿ<&’XnÛæHsg,|)ómn¯’ ¤…¹L’Ÿk“L&Ô©¹•´ØÝÊŒ/@±òˆóƒdi þ5êšxBèªXc"Ñ\¾Oz¿Ng©.žKjˆ:”©_8 ÁÜÄè’ó ¥Pm¸C#Ì'ÏmLDš–d\»'Hk‰’ ¯«.ŒÁIc¡I‰ÖRh17‹æ†2 ±›q)B3Ö µM«P—CÅôøÙ³Š>°Ìv},*\Ó‡*yd5Uà|‰›ƒã~x~20°Õ‡½¾8¥jºår FáÒGà•5Ô)Ý*‰‘1‘¯¯`¯¢H;›Ž)j+ÇÓe*øÒØ.¶ âA°.…!5=cÛN­]ïEªd¦¶°¤ð€|šÁ®™òá§AÃeÇù-ë-þÐ.2ažÇˆ™pš´0ñdö¦alx^p½§ñ‚ÜJŒ,õ(.v){ï3¸HˆúÅHƒôt¨eàë’'Þ0/XPÿuŠdANHϯ°¢FQ2§øÜر®|üƧ~ 1³1+¹(ö‰%5ªxˆ(H_1d2åÌíë!Œc¬U!›;+bBu6N˜ˆª¬I&ƒ„×aƒÔ 9 á0å£ét¥ïˉSDR6[ræ¹2£IÛ>"f‡ÈmâØ}¯©„Ù…Yä?1NtÐH­!PT„ûæCŽð°c9Q¶©k_[§¡½ šÂÂTZÔäñøóçÏõñËæ»/øðÿßû¬­-iÏ¿”¨Îíÿáñ%sfÔ6°¡‚\¨FûµµýÏûÕË2*î'ªCBU±?æ;LÅu‰[­¶FµºQ•¬Ä—6D¾¬ƒÂ?à𲜌61_ÄMö'ˆì<Þ…“u›§>•J—Ûx—xââ§Ë°I)Ëê}d^= ™ÃÇ!“êwPŠÁoUí#1óD¤²(ºktÃtWTóM8Dy «*v4³Šª8ĪJªzŽf­ˆXv10Î*'RGt:‘"Ƭ+™„̾FQÞw¡Ã®lgù^ÔÐí¥¨˜œ'˜Ì›¾=/õ>åÒÿ¿mDÆß Úa6öÛ¤q¦WÇë»±‰¹èű‡î¦Y¯ZCPh63¥b[øðNÞiïþÒÞ @:¹×¢‘T=ýô’…XYKS¸ Ç Î+xœØhÎBi^Weã†".FÇ(6ÄgÈÓêé6ö_ê,éeG*¦€àRÉš‚MZ†"à¥+3Røe*ÈFáR%#º~òRUÊÒu¥{t{ý3½cþ'ïÈI»ž’¢1ïho;tájg ¥6…ŠûŽ—¸ŒšòMèÊøý*Áq&š­ã‘w|£[T2”ÓËÚNjÓÕu•öV—•…Ê‹-m§¼4¯OáÊ–qf,I}çÂíøˆ¥¡Ñÿ·gônnõ]Õv/Ï_z)˜x9ÝŠÑíË$ážK¯òµ˜3EU+SÕŠTµU­@UÛDU+SmÐ[ƒýáNêË6!ò ©Ò½”Oò=øÓ ™¥AoåfÄ4ªîWýLØŸ`†^@ëLÿÍh›H-Ýi(½¢x¨ø¹Z^*ClG×tãNêŽÕ…9¢QÊX Ä5»¸3+p@úVJ¦]Ùhe¤ë{Ï"H¯« ñ 4½·{䏨\‚ˆ­oÍ4Öz€•,™¶^¥…·Û³¨”`…Ÿwe^¹í» ¤S‘Qz'@1Í)¨•¥;€WòàªNB¿+xyå­jõrÓ®!R¶Ýä}«~ùÕ“¤dŒÎÊÈ?ð'ÅÖðW{ÞTï˜ÜÛ'Ê(.éÉETÙjJ/Ù£ñÆ,(ÌûPKV}z=å ¡+ü#/crystalspace-glshader-cg/mk/autoconf/install-shUT dÇïLó´Mux êê¥ZmsÛ6þlþŠ­¢DqG/vÚ\§Î¸Å–MmÉ#)M;½6¦IÈbÍ AÚQÛü÷{v”íLr=ÏD¢€}Ãb÷Ù˜G_ .£t WÞ#ŠR]øqL½êɧuž]å~Ò%äѺèR–Sèþ2Š•ç™Á•ë(KŸíí}ÛÛû®·÷¼¿·çAàbi0DWQêJÓ2Ïúyöœž&Q1(‹(z`uöõj·K·«(XÑ­¯!%oN¹Š•¯UÛDÄ¿èé‡`dé2º2‚è6*VT¬Ø—Yg·QzEA¶ÞÀ˜UA~R*Õªï=ÑQ5õôh—ö¿ÿþ[úƒ©Îò"*¡9Wyi^)aY+•«Ë Á9i¡Â.Ö¦eK V~~¥ºTdв¡5|†ì²ð£”ðÅ ˆmÁþÑÙ²¸õs%FùZgA„‡fA™¨´ð ÖÈþÖôK¢ÖÜr´vY D…ÊÙ/<ë&ÅYYÀqºÈ£€¥tAÄeÈv¸é8ÂNÆ_âÍö—ë`k»”da´äo%‹[——q¤W] #~YÔ<(>íòZYiZ!Œ #‚õ²âÚB¡b=kvla]%šoW”­ÕD Ë2O¡V W˜Áu¢õ< ÍÝNÈץdû˜õ/³Õˆƒ4+`±±ƒ÷b]o±Ò+΃Ke='ña~cU9Û€ÐK‹Û°æˆáeÜY­‰³Å›ͧ'‹wÃÙˆÆs:ŸMŽ©5œãw«KïÆ‹7Ó· Ål8YüBÓN~¡Ç“ã.~>ŸæsšÎ l|v~:at<9:}{<ž¼¦WàœLt:>/ v1•VØx4gqg£ÙÑü¾ŸŽ¿t!êd¼˜°Ü“錆t>œ-ÆGoO‡3:;;ŸÎG0á‚'ãÉÉ zFg£É¢OPŒAý„_43<=em‡Ü™NæSHy{F¯F0gøêtd¤c-G§ÃñY—އgÃ×lÒŒ¦à› ™1‰Þ½ÉÐxqà ãé„­‡äÅ ?»XÜlQ1¿ÏG]ÎÆsöÃÉl ìGpLY óMFG=Þ–Ä~ÞÞñï·óQmÑñhx ysÐ$6»9ú¨5ÐDs°q‚x’P2ñÓ•HýD¹xhŠ.Bb¬´øæ‡€Ô"ÒÆ¯ |ùm¤•$ 04+”ÈÒ~ ન z‚åWº²å&¬ó·yT êJŒæÑŸir›{ÎRÇÖÊš9Væ'Œré•Ò&ë á‰$O @ÈÑ^±‹¥ò‚ è è»:ÓÓ+†Ôu®–*ÏádiN5žwÍÂÕ à’.ÿZu(JÖÐàÈËØ— WX…À¬˜@€øÔÔ3¡‰XÆíJ‰¥-Ø:ƒLf±yÚ4’·7YCîe¬ªÊB¯æÇ•\W„\´œg²X#¦ý"XqÂ0 å 7s–*ë?„<026a›aUëå ו鼣+ ¶Hë¾'ˆ[Ðñt¼´¼f¿©`•É>A`ÓùL{œ¥Bè G7Þ·ýoxe ‰ÊÏãÄcÍdâ8º†ËоfQqØjÿåtõ>¶Xäº,$„/u£,ü¶‚¥KÚd¥±òo$~&Äp.D/8ˆÙ•ÞôéÆÏy9É ¯Õœý$J’¨ Önôè\Fƒ5®P¥ª‰7gÓc3ÇÃ2ݦõôôÝÄNcX¦¯òZì›×3+™‡1Í›QMϳ±™–aL牛›ÉDž`4¹£¼ZÀÇã™Y³·Ä´ 1]O{ß=n­å)c˜<‰2yÊÃeÔRo ]7fÈx çÁ¡êQþ=‰ü’ï4{Ϫx)ÔÎ,ßz^©ý+uØzË_ÔÞ£_§çŒ”¿õû}úµ·øæ³£“1`üx¾ào[vÔRÍù+¦ùm¯¨IšŒŸ"+ò±¡óÆoöÛË,OL¿RYа·Æöå3î²ðï›<´ÄœAN·p8‹*žo @@‹Ú2Àó¦kÛaôrO£«4C¶îz°×ýYnçpn8{•ra°‰ÌÀ%^ßë]ÑëÙôí9XÛUh:: éa­P>!üˆ ½‹¥è™ ä×¹™%·‰ñ9S\W iW™p—dÍí¬Ð)J·Ú[TÂrÅíöƒ€ûHÀ„Ý/F]¿r×\= ÐZ¸Ðt®ccÀLF­>0*õzö4R“¹(]f Jo”ÞDy–rÍpù—¼f.=yšª¥_Æã?P7Ä>UØ@ÆP'd‰ªd'ƒ[d`*äðþ8äõ—{)µÚû­@H¨pСö>·š¼Þ^° Ž–…WEÚ(-Õ‹ž¡wÉ¥y‘—ª"ü ÛÕ.UðÒjÄYûYë">#P6i×ÔœV[ ‹b‡Ó^E”°ÖïkÍX ÅËV#žÿ±@ ‡;°­þK¹ l†Úö3oÇ»¯{Ä‹]ze?É䂼òôò²y¿çô¯w‰Ñ;îz€JÈî5»‚}¹JÜÙ4¿’#§–V®‰UÈ`ƒ`}olj)j1&WtÁç|{>öcЇÒkDËH…à¬CÝkÛø©EOžÐ%è¯+§>¢©ëzøØ¯3Üщæj¦>ÞaÙÒuµ_B%Šsy;’Xî8Ó°ÅØð‚%¦ÞŽÑÞ~iú‚T².6,Õ6ùš5¾Œ(¨ ƾaá¶k Ü!ñe«kgy#!V(xhñ§ ©ŠkpН`‰”öO½Êü?-jˆåeýY»¸ž¥*X¸áRnÕ¤ñ¬÷¨E?l4̳„¯:;‚ÕrBOC„S q44 m%¿óØèâÒ×£† ÙÀ¦_^>~yÕ±?~Œß‹JL›­1vñ=ßµXŒm4ÈíG3E{d[ä-ê¶{j»àivhwèh·c› ›DÜîÈ„T±¥Å&‘}º8aãd_;îø’š¼Ö m˜3o£JrOU•>Ž6:•A™#‹xƒF†£X˜¹âV}Ó–ñô÷ß‚Fw“å¾O&H¸qpyò¹’׿»ë”&—ÿ±:Ù5pÕµÞb“eucl|ü4·9ls›±Ïs».½ÉíÆ¾D·)ÊÛºÍXÍí5 1ÆU›XÄt£ø%O¹ŽÍ¥/HÓf™‚ànHólÍ÷µõ ׊/xóL ÞsøôÛí÷2™'[sy"3Vï"÷×Òœ¡3M©Äó*ãc§]ºVsòe†‚É;Œ=¥>lÿû„›¢ì:¾\’øLp¹mˆ;èÊjOÍÔ¿wÍy£CûôŒö¿¡ýçÎ.~³fÞÌ8¸W5bô›AgÛÛÔöí³é¶“-×U /ƒ0FÇG¡U¼”·íˆ·Æˆ³ â³°tX„k­]®år­·D×±Óð’!X¾}Íw]²qX½†hö0qX!ïàÓÜ^¾·òa£í»`ˆY]™ÆQzmWAÜNcήFækûÒu»_ýæt‚Çe©7Ò}È«-ËnšÍéhßnqÉíÚ ç“¤ ÐÈ‘’ÍïeäEœºµb̹w%gè—kJû.§ ¥õ›¼1k6ûÛ(›Ë‚£y}P£™\Ô?Ìp'šcíÛ1¹Í[¡ó'…ÀèÆñûÂÐc7&Ë]Þ-ødß·À^IþhŸªpå¿ûd.5lJ6Cî Sr§Ñ{Ülåù>õGϘĚeÍw¬æâmnLLršøˆ£¢`+ò(¸f[ZA–sŽq YûÚDŽ©xÎ^â²×÷þ‚J£jÏ9è#+9E®Äõeò†Ôàx†½U–]S‡ß ª/Ap<æW~=è¡Y^µº_=9;Pkû¿Ù´¶‰øµ‡ÏT6½Ç{Ïþûøxs‡‡Cµyt„Gï¿PKV}z=â]:>$¸y/crystalspace-glshader-cg/mk/autoconf/config.subUT dÇïLó´Mux êê¬[msÛ8’þlý ¬í:Ç*ÓEK–“›õf×%±Ëvj.e{Š‚$Æ|‚”å­ùñ×/HJT’™œS%6€îFht?™¿‰£q˜©ygG¼N“i8+s¿ÓD,ü(œ0©Êqž–E˜H¡‚<ÌŠCàÀŸ=çál^ˆ¯÷…{zÚ?À_~éw@¿Cú=¡ßýž†~¯×;À_—~ûôë‰7¹”â&O~.Å›´LØq‘‡NÆR~œý´üÇNÏsÜþ^TÞÎC%¦a$<_„‰Èò0 Â,’û"HãS¤âìí[ñËûBé.IR³T2 ¤H§Â±ÌqÈ ¥°jU9›Aß ªüBÜ\¾;ohEŸˆ¹ŸL€™x´šC!. 1I¥IZˆ0΢ç5CPŒYÈçÃð¼ÏiI½ärª"Çel…€NÒ\Äé$œ>ƒ¨‚™“9ضÈU”“õ\¡`p©‚ÁÔŒeµö¸¶>ÄtÚÌÁD…û tÁ>Mg Í0 Äë«Ô©:êY2æ¯Z‚(ò+p £±ô“0™Aàâ!v!(v×Ó9äÓ5Z ^–¥‰ Ç[—Ë,ÍaUaûÏC`¥n®‹âd`“ 6/ÀÏ0ë ç&ÁÐ}T ³€^Z˰/¦±Êœš´°à)!²`­ãæyÙÙÙ‚UûtûñêÜywöþÛ³×·®Ï¯Ë«óë³Û‹÷¿|ºùxs{þz‚ÉQ•Æèk WÕ$ò æo ÉÍ¡àôuµÿs~ýþüm›ö Ú!O9r°]ó”²dJù•}yÚ Ìc,úL¬Û»½mñ‡@v¤ØS‡Ý£ƒƒ½ÏN‰ûê§íûÎ$^ŠÝž¸»¼º½¸|ÿ€ë¼{ƒ£;:‚ÿê go/În:×_  l0å2“ºˆT/A3?Ž3—Q&ÌŸÙ¯0V¬§9LhŸ#üïÂw–Ÿ" ?ò!ÄÀÑS°"¿@yƒEjý™ª¤ŒÇ2¯ u®iÿn˜ñFýž½Ýéh8¯¸c™ób¬x±kñé>ÌÜ€ä@î| S8[‹JêhpÄ@Tñlž„´£8ä´ýÞ_v zEÑ‚ðÊýd3…ËüÓvç6÷Ÿwaó°GìUp(L8‘¡KoSÂôsÈ—ØqE"ØÞn—0ÅîîgVˆžx! V7£ØuA ypÃþÐÅ.R…Ø7>®÷Œ]©mPFÉ´¾ÒjŒÓ€äbMR7¶É‘¿cÇsêu¾&K;r{]Pì¤Ú"Í4TÆd@ …3ZÔ<œ¯Ä8—þ£û[;⢌bQÊÇd›•~µP“»»fS ‘A§gÓó®»‹CÙ¶œh®‹:¨¦¥ºVàÈ0‡åÉ|… °ÆlÎ8ùlœ¦”xØè}×mtѳ=TVÖÌ—Ê:“|¢Ã+¿C+ßÛ¯%iÊ, ᑈ¿ÿW¿S Õ¹û¤µÛ.RÌA`ºW›äÉG‚?©'Ìî…I«3ô”‹0Ò¾¾|w…gtêËÜ?&ÜÀaÑÝó>¦ü_q+¶‰K˜Îu˜Á‹T‰Â>3<çÆÃ Ù±ü”*`_pVØSGÿ¾qؽßwî_ÜýÛyè:ô{¿¿{tß?‚LÁ³iäy;éÎïɶa¹t V…I(‹(¶¢ °ˆ Hµ×h ÷ ýƒÕXMº¦ò1‘E½¼R„SG;ÁÜOSÕwdLÆåEüè$éÂ×þãwìP¨fì«0ø¤½ðOMŽ‹“ƒ*ÈýtßRÇò»GF–÷Nì6¤Äß~B‘j§ŒÔºj‡]çÈ1jdkl¯.›´î숷²ØS5ÑWº?…Q#úXâÖH9_Å`@pJZ vahQ°¬²žÜ&2€x‰®æxn¯'žÒü²ÇoèZ¼êž ì£rê`Çü[nNÁñI Þp@ì[„þÉïJˆ´ !9›6± &Öqms;Qâ¨n½ì ;†gDÏ|1b7ðØšÆ!]WÒas,JĠ꙯¾Í±¾;²é}Ë=ô0 F=Œú¿ú¨)HØDO‰ûvôPÊÞTMYàî†'5%Ãca©EXQ©ÂRCÙðxE]ìyŸú‡ÆÖ“‹ŸÇü{7Ž$“ò.?0¹À\?°¤Mã"g=ÁñŠz»pÕÄí- nâñ#B†‰ÊÜárÉ ÓÜë |,¸<êøð3Ë|ýpïzîƒ. ñ–ºKžL=Ìé ½dGCzœò£jÎúXñ;^`pUìõsÁJØà¼=2½#~ œÒ€·?ÆRrlˆHQÛV4­&À[«^ä¢"›MiÎçýZiUöØe£kÅ5¯Éâ­³ z ,ÖYBå{}Q£×óFs¾Ê`OôZc]Kk jìŠfq%?qÅjE­Xz§¢"mSâöú<| <ë*ƒ™b:•D݉òúz›ôO/âNJs˜ªÌ&™‹Šð‰g_èGw”¥3”ÐÍŠ¥É u‰é,kgÊžs?†ƒÔƒùïñ“%SPE>©æc®‰d[ ‰áè××®{äö×ñÖÆ~0C&xo¤»A—:õh¹†ºèý¬{ö(®Åö׿§á@Ø!âUØõÝ÷ˆÏY°'à„J7öp´Ÿuï{ÈdòÝ wŸÎØpT7·E+ñ4ŠðÊIà J¼èïS¢…3ÅDlk]ÛfzBÔx0Gc9\ÇX¼u‚ ¾vy¥FÃOC„å«+“”È‚³²#.Ç_dP ¾¥ËYÌZ#«“EÐM×8{.’¶÷A÷ŸwÝû½—öÊÎï÷èJÀ^L„‹×l “.Ùôj}öX€œn…,)Ûé®`†zÅ`X/Qªo«v‹šUu/4”ÈPçkÖåÈc Œ¥n#Kɱ¡]+³È 9V˜‡M©:Â^äî‚/ÅÃ)Óø9°Ä@Ã¥U¡1;U?Orß4 ¡Z„$LDVJFKšÂÔë!Þ žéI;G¸¢ –ž.«5$ìBµ„^l5À®µ ƼÔi2¶L‹Èh6 U#œaâÔu65\ù{}:ÑP5Cø†0Àôt„15Þ°"îÒ:)G'®¸_ÂF–Ò*×>²¤vÆH–Œrî°^ÒÞl°R³i‘×/5› #Õ84fZÕ0©¡‡qÓ›·Êæµ± z+lŒŸêl‹,ÆPk ù K¾ÎT›¥ÖšZO­1„jr¦ZgCµÂȸªÎŠpÊ21¶²Í£L Ó1&wŸ,ô–¦¼¾õ:³œº"ÂWL}Ñv­Œ×žP”cHU5 Øj–tà²à‹K¿¬`¦˜C`'¦\ k[OͩҠ-S@tfhÂgºP©G˜ÖµE„jšÔV3V³’‡e‹×*z4\VÀlµ ¶†‚Ũj\œÖim«Ao\Ò‹¦–?-„稒­MH'€g¨AXrh©*Æb¿†FH„™òm0'Th K@o0 aFoSÆ‹šÔˆÑJl4¥gZfƒ!Z´eóQˆÁ˜ðßÙèaT¡‘}Çcá‚þŽÊÀú2(%½ æ÷Ý€y.oBx£áXMÖÁl +Ðø´µžNøˆ¼üÇô\Ž®ÍM( c¢LÂe´^òôXƒÕÞrÄ«Q1!Þ™‡ÓuFB~<ÑF—“P_2Ãß–?öƒRµQý d÷'éXÛ>š ‘ƒªÛÌÒÚÁÑíf÷uqÊùšÉŠt¥FO¯7mº Ãv#ÃP7L€>4— f…°òŠ€öi„țӲšQ_6¯Ïª×Œüvñ¨º}þ«…• gté…Ï6[h6VÖ yy‘š¤- ½"†½j±ºtUV³ü.hø±Q@/§6/ 5· X‹µnÆuÉÚ¢–›l¤7GfåRóýÈO¹.ÃyR_k±É3Ì„ N[\* ÷ŸÍnÃWxf*ùõ™¸-b®~¹¶6#ÔoêKÈk“ò¾-Ö²) ò›b-k •Å`šÀ©¾´Mã—¯Mcî[Â&U¯ø¡Œ¦Vˆ^T–ÉÆM€–™ÞSâƒr˜,r¿õE2àkH+×âzP¹Ñª‰O—µøØ¸§±Ñ°Ûwñ(´òbRLì/õƒñUjFÍ E’–žðl͵Žè}»Ko„¡ĺãEÃ)B€U}££ÿ½:ú•ލÀ¨çé V}䬖™ï¯4ðìËuêlņ™6ÍõÎGmqkÔd6‘Ë3‚Ù²OÓ϶uÕ˜v\F&ÒSµ¬Iwµt—x6˜[¯÷.ÇqšlN„ F#„õu >¿ÓïÚöåï pO±ÛÅðØD™×*wDËwysÎoR%-Áõ†,ó0P*5 صÎé²:[Pžï›Èb&“¶,Ɔ&f+Ïâ0ÈÓu6‚Ëܸž³fi[À%ä˜ÿFÍ>÷zƒ}“a_Û7%ù~Ã5dtÚ^ëÓÉù$¤ç€çMREu\¤ï— ñضÑ÷1ºKñMjØy(€†ïÔ&œòè¸!‰Q£áögIóK¯™ÐÀð§¥#™Ga HgˆRò±E&LfOßFš­ §¹·~uâ©>!Õ"ÝõÏ” Ô}¾¿5Ï¿ðñÒN„×mKó_¹\aÇ&Ñ#~1Pݱ°ÂW·úÖ:ný¢ «Ç¤,ì ú¿¶Z,MB8.l˜“<Ň– ÒéÔJåÙ¼í¼j.Ü››J³aÕzß³âÈd­ì60ÿÂp'Að© qCÐÚüøÛ~0à»bsW¢øIl™B|z9¹Ks¢ÿv`%ékg|œÐ©©‘¥NÛÆ@«‚Ÿr[Sžªõ°à¶÷ ä¿&H_[ã[PÔº)âmÔ,NZº†J` :kqA0wùÓñ cŶök@CW4Ã,œ”ú´øÄ]Çýõx¼Îô½]YoãÈ~ÿ B3 ¯ Sc[–f<@‚ì Hò´Xd)‰–‰"—¤d)ðO×ÕY”í À°HvõÁîfuu_O4Ƽ[ësŠ„Z‡°8º^ÿr?ýUÏ×ÛYøùÌ|:=Ì´) ¶`pN•ù„¤îS~]&"”ÊÊ]Ó–úfÆ ¿KuB,™+Ecö=ô—¢ƒFt¸í«Ñ ‘wM€¹$+´µFÒ˜¸¬¦7dû+«ÙÍBcÕ"–áðˆ^\äÌ¥åÆç! ðxaÙÜk#,œÐ±($äL¨` Ç;T1 ~µf¥T-”ÍÉ#°* g1‚7o‚¿oO‘e«R‘PáO2'™WsEz"ÛeÛæ–h>ð& µ Ájª‰!˜,YŒ|£°S§ÔÿÍÃì’až.&ÊûLe5òŠ1“J‚ü3r?KÛõužtñ/m1SJÊÁÌÆ×wî2÷Ÿk­ÒÊRTâù'…Ž4¯SüÙð™J©3Ȫ Ý¡õ-vÈ[íI®ß¨rªn&&Zê4µ¶Ù÷×–çT÷®“‡iú‹þU«¶8Œ7¨|cÕ.à«Èa®4¶ã6¬ïªj¡’2𯾹õâÆÊ^yÛŠ[kâ'$”2È=·]ßÌʹhøEkÝîŠøŽÖÏîºbvßoš`£!òïªÝï$sçõŸ)1L|©ÑcDisØRÉ™žÄ,o~›fhççÍQ}{8í Þ•Û ÒÎäÛ–ºøÜÞ†ö¼Mž™Õ³×-úkÃj)7 ÷Íä](&ªJŸ‡ÔG&?Ñý éÝÃÖð!ŠwÍ\‘º°pN ØùÙ¶›'ÓÔØ•™USd¹Ùb=0!œ=ieO³Táƒg”–¡÷½:'¨§#£ò¢)%lR‘Q„ô¢TI…5Ÿ^g»³9öÊNžvÛÙÞ ï8ù·ië´Õ\eP&ãÔ‹þ¦·Ùï”ÏŽ…N“è‘•"Œ”X8ذ'A6eLôl^£&CµmÎÔ5ª«—É«é^­‰DÓáªîÕªÔ\~]ºF´—-T|›Á$5?ƒ–¦`¨^h™”‰Â+]€ÄY—é²Þïvšƒ¾M—[ÛÍ5ÚnN2œŠ"kkÅš×ùê»^,íDYÔÄ+~°ºVsÚhÏ8mObD^æJ³Ïâàþ#rNÈ?=ŸÃkÌ=÷ì\æãäAgÁè—²òÎ&ïñ÷ÖL e´É1â¸þ8F´ ,˜×ÁßD[ØiŠz8ÌP)†ýÃ**yc³Â½Æ…À-„ð¯|æä|wÚ[ÎXH|Çáó-)áp¥¨´ÌSO§åÅñÒ£bCOÕ¥¦;h¦êú`W¸CUÅχ£ùÓ8Áãäæ6yÜÿ;o›½d ¥jX'4´ªñÝ cÜ ù†‡g(ãÓlªù‘ΦÉÓRéå§Ï›sZ†N¸P4=G ã$à~ì'¼6Už2\¿!Ó Ð³º´à<ÄRÐ_?Ó~¾ÿô]sYÉá­8Î{ú×>…yu%>Ú –yÁÖŒ|1Ò[àuLK)wÛSPÄ5 Î!\sÍp@W”€³TV{³nil^32Vq÷’²Žg7Š_]Ÿ„òEuòqRÈÈ÷É4·!÷yâÖX!!FgM‘å×´Øša"™Ÿ¾þ z ÌÆ)8YC\;ÀU;5vÐð­× ô¸V> Ž#v³FYbMQŸ^¸h Š! Ú~ÒHßõM2wt>Tôe¹ƒ»údóÿÍ– ±#š"|-°‹O|{3UŠæÐ²n“–‹ê þ§‹Ä\ °JqìÅÁ¤lÕ`QŠø™béJšd?§›Œ|š²]¬àt[géò”øØ©Ë A„þ/’ø ¼)€t.äÃ@¸LØq²ÌWfÿ·}›õô²ùÈùÆñGóÑ8åðè¢(—€šôÖ"mNSèb^x…^…½À°þ;&©‚aô¥ÆÙu}(›@uG£è× Àé ঢüMdì¬Åu䄎Ѐ+ñ¼KŠd¥yâ£È"†lUbàm)ÁzT×4ÄìZðå1 ËP^p±×ã³À%ÏBöL;«gª†R®.Ô-TÒê{eãm€aÑF[x˜:¾Û? Åj·ÿˆ6Ûóm³dÏWεOF#]@xý.Eà÷ÒÌÀ½X13Ñ`‚@H„ ¼é¶ÍjI9dÑÏÿüû?¢¯ß~Šþò-úc_{¬¡6Êãf^2–)@?É[® áЯ£ôPѾ¾So ’àà¡§…iJÌ.9¡o¡+^ÜÍ—è ã;A'±‘k1 `†à7k„¶!„³4·p^ØÙt‹Vì.TÝŽàÅÀð„¿ÛýŽÀË–+&±®OEØ"Ž-‰íõ’oЯÈÞ͵¸GÄåc§$Hð ‘iG#ìñ ÀôîàîŒWkî•âÐ)ñŠàÌó® ÕvßHÓEÝÒi‚®Ê¹( /ä±–Kï)€]àµ_T¶Ù”¶N„ÿšÊ­&¼£° p,çÊÄ/zäF¦åžQí¶4že:ÏÃ7 óA›HíbÑè—…aªÔç `Ûù%˜]"eIJ¡¡y›qfAé[4µhßéP Ÿænêå¼CsZ=qõCóI#9ÓíPxø²¢ÓOìÅÍóP+“.ªe²?Vú@3©£Êäs\nÂrãJ¥OÉzšvò¬]¦µ¤ÃlÈ:“žÙñ+›MÞò¨'¨¤ùÖ} , ¥ÉÁtiª;Ú‡¯‘˜=n§ •àªt[ÈGBHŸT½¹ÉöÝî%ß$æ5féeb@ñ´çÉk™72Pp+Rʸ”×Þgôó ËÎh†-Ñ€þ¸=Áб¤EF8ÐÙ9¾þW§ÅêwF’Ÿ°Áb{%  ïxÄг-?àv¶ç “ ë•÷àüêhž9—¿jü!Å\ÜïHáWä¸ ‡>žÃçÏuØ÷ŒgÆ“ïˆê|¿b.†«;%=x_F0Ò…ýXžxY[å ³ÉÎrü½‚Û }y°¸0EœïCðŒõxïÂÖŠ> hÏW1(~ÐÂ9}A¸B‘±îº¹g¯È=“Ü/7ó y;ºE o¢”œcç*#¼p"ÞÙâ›Çºl2/Þ{É~’ûÚlcŸ;O>R>k é"wÈx.5t3nmǶ[ä<á’‹çîT·h…-·M šÚ/ŽÀ…)Áò'›ÚÜE’è{¾q¢{usmEÔ¿ÁyCõCÚþ‚Xÿ àMQr§«&=C“ƒÞï^O·“ ­Üx9obäÈ–]›»18 ¬¡jȬªÐo&zŽÓP> 1°ˆˆ‚qâ$c”©¯\£ü)iœY’r”È/ hÊœ $ѽšqkNB·æŽïr’Öþô¬Ýäܤ^ÂÆ›Ò¢‚´;Ù÷ÑŸÍŽ°(v:üç·ä2b\q‡õdÒÌësÂì–¿€WèxkdnËæõ:@¤~A)Ú‡mæC{HŠv»œC#r™Öî3ïl ®~ÈÌdvïûºÎvíö˜ø•Ùòî)yYšDÞ gyíbžWx «ñ”ž®{Õ¨lyziK±çxÁ»~+[9ƒ ,º¬á,“œNîhë““FÁñ#ÚúýؘjM1#`ô£+>ŽŽBL(#c¬w+ J¼$Úh_'…èe<Ô«¬ä@¿³ÏÀÚ´¯ÖGþñ9 :/p¥Õä«]ºu§ò˜†8öË5€6ë@ô23.My»ì(øf2ãáOp2•é&³§>£o2Kv½³Œ÷3·cá¥i]ÄäÜ,Þ~j“¹[7ux‡ˆra‚ÖÀ'T4Ï -‹bPËQKï(ÇrQß4ÇÐ9–ý;‹ •Á˜*’Nø{û¾ÅìsÌÐBB›+NC±å ¨§ßø°å? ™ —Áàv8ÐNµã£q„?drŒÕ5ž«öÄèípÐdçï{Œ7=û;6¶û£Tg0¢Ä¸Ÿàœ…;&ÙϺ <“MGµn޼6ôZg,nK·žƒ–¨ÿ µb)PwP,W~:*™ƒt‰´´$¤hvA¨ìuºµsÝævÉC‚%ïÆúWYÙf •¡k©Eóä$7ìÝÞS¦—¢yqXœfÑŸ^yoÛ¹r8ØÓ½soB[¿ÉPöjá¨ùÈßÙÇTæÇÑo˸P²‚ÎÎvòW<¬ œoá»÷Qf¶!_¢Óå2Y—å&ºÄÃT8¯4Ñ¥;qì r{ÿëöK4òŽ,…tô™!ùáË)ùáæ®€Ë‘yCY¿šË‹ÿPKV}z=Úa#A3[ª1crystalspace-glshader-cg/mk/autoconf/config.guessUT dÇïLó´Mux êê¬;i[ÉÖŸåWÔ%<£ðÐ ˆ1Šc2Äèè\^Á,o’Á¢»€ºö6½(L̿眪†n@£sã“ ]]g©Sg¯òÅ¿Xm ½Z4.¼`í8n³Øg£DDãÌâžïI‹;,šFð–yÜ&ÌeìÀ¦¡c¶qPfÝÝÍ*~6és‹>_Òç6}¾¢ÏúÜ­†Íz½^ÅÏ}nÒg“…B°®?Œïx(Ø‘Ÿx6¥ïUÙ‰g™…B,]ÅÜ ö×aþ–Qß6õ ìeĆÒ #šH£ÙcS?ÁÕ°PØ2ŠC9Hb˜3îÙ5?d®oËá !‹Ç‚Å"t#æéá÷ó+ö»ðDÒè$GZìTZ‹ã p$ › ¦€ZÈÞ‡ìV„<³Í”„ÆWe~86xŒl‡Ì¬ ¼N™Ãã9$ìDºì ôG!wqåóÚLz„xì°š1 „%ßIÇaÁ’H §Ê`&`ùpÒ;¾¸ê±öù'ö¡}yÙ>ï}Úƒ¹ñØOb&n…Â$ÝÀ‘€Ör/žë|vxyp í·'§'½OÀ?;:év»ìèâ’µY§}Ù;9¸:m_²ÎÕeç¢{h2Ö"•,àx@¶CÚ -b.H­ùlgœ96ó[Ûj y |΂bþxÏw|oD+„¹sî19džWÙ](AIÀ–v ³Ê^_Çá–`ë&ˆ Ù5ëG1N=k³úf£Ñ0Í:ØÄU·­ÔFs‹aI`UL,A{žxUä´Pd;žYª&cŸ) i‚å{ Pè,< å( iA,²B Ž`DcÒiÖNbgUÉ”\ÆâYNb“‘ÉhµÀEÌy¡EQ„Mô®âäLYm¼Ôì™hËà[¤ÇgJÛƒúÐý·~<¾Ø¯¨ÓòÝ×è—:Žà€>ž 뎭±ˆP†¿ªõzè·‘—˜~8zJ˜ \ô$1‰IÃ!:%1 LÃ.QcîÄ©?b‹ÃiƵظò£Ñ)‹¤+’ðg[`Fɸ:¢X£Ä²„°£*>¡ô)Š8ƒ·+¶ÁF«È2à ÓH­ë€é]Í$M‰³/)ç‚xF©·ˆt]%¸`ØQÛŸ*ˆÐ«Œ2zç{ë±Ò]p¡(&à#, 6H$¨æ6ž: ®Ø¿ÖØgÅR½Èîa«lf¶UÍJ­Z]¿.’ˆÄ~ñKá ¿´X©Î>_tz'ç_ …‹$’˜ÄWZ%aV@_®K®XÇ•…‰ÇÐ_.¡çƒËQ«À˜1®2à '`éÉZIÇ«ˆÔ#ááüçc2(Íæƒ; JMv\yˆü-§Î?C/òw Â,PáR~ˆE¤™OÑíb¡ 1¢,Ñ…hSJ¹QšEÒ2ÈåGöfþ§ˆŸ‰ö…Ex2¦åépAL´” A_/Á‰ÃÂl‰("ÐxÐèR€ó‹B¦öУ«(†pÿ$^8Qö‹…^8Uª¥Õf}¤¤§ç"ú±#ÔT×Åms¤' wctÌ1z¾Ò fŒbVg{`E :¯RÐP-rZv¯+ø-få‚ÖUmL³Í,2Tĺ§Ñ¤š·Kúå*82 $<&ªã%X2Õâ2 +Ó¬¬ûN`ЙZ y°a)–h,‡ñ„‚ßÌ€Yyí»B/Û¿@“˜¼™ågW–xrÁeHï–;ÒN)—%\J‘½þes6Yn¤x2h2øEÄ­ø7Q(€»K·ì_û¬¾GÖYÈ}#$i<%.D‡(GU, %ä°!غX&6Yã%jËÁAô¯ÿöêäôJô&e 1f’ŽçqÆdç~,RŸMéEy % Ü—”jI”°H$*Q´À–`m’r áø¯DBLÆP1Ì9¨:æäi0 €l0‚2W&M«Ñ6Âñï(ÊH•TŒ·¹5¦Êû(îà–2ôf|f0ä ä™_°cHü£¤3­²ë¬0Ö•èémv}|ÑíõÖMöu²ZLÞA ³7£l1£³)ÍÕ¼Ù"€|×Ad;)/1X™ Ë·€‹©Z*IÊ‹Õò³LDDÉJ$â¾eõÁðûðö×Õþq-ˆ2û_JoöØFè2cȾ”€Œéæëš-nk^â8{,t´z›}Qf¿ü¢4çK)ÅWDKÓ4þRm¯¢R½&h „@û­wÖywr¹_€ï0ľ¡Pö¯7—G7¬þê²ãÞ r0÷_ ú ¦f>ÒO±œ%ud8†‡^ ýÓlÄNGöØwvOäfS¡ywq¦fs2¥’¡_â»EÖpÁˆ´œEšƒ7J¥ÇQâdÕxè·ji]€@º ,Ì‚H3e!ÏÌ8° =Êp@óçv5W50 Í^Š(uN wÁN\wº¼Õè+n¾Þîýb‰†L‹é/~ú%Žþ ò-¨È’5©jI›I†)âT«å¹Å„d²ü°…½Â]äײØþ[;»ÌÚÝUñk¡Ám”,fÀ?‰#«ÌæŠJò .Üè9Þ,w°0«8‹ 8a(ñ7:cüºãI1·¨"Ûg“ ÖJÏï§ž¬²Z‘,¬¡¯¯V+åEP0ô®B/óï´ôp† ¶7ïAÀ?òvå°ÀýØP é\³ÎjpÊÝ »Ã sS]§¿í¾ƒ©#2µY6Fcþ·üÍó-3Lâ ›ÂN(ß2ê;ÆæVãÒ†2š!«™P{`?‡È=,íN»w¼_ÂÏV B:G9&Sº:oŸöÏÚÇ'ç‡èh †»`ß÷÷,?3ñn<ÿÎÓ𗇧‡ín>|>™‡ï~êöÏæàÑø^Ï̃¿?¼ìBá0‡¿}ˆ|:3…ñc€mArˆý Œ»räQN¦a¨ ­j&%ã˜ÍRš9Â8‚]„à@3Š¥o9}o¥Šçù³–Á|@sõ½˜æ„•Ö¹ˆAOZ•V¥\€LI=² oÙeCî! :ÓÍ‘;J†y€¹2d(P'04#?DxÊ[uÝ'0ª"V1*†'b@)œa¥šyæPjVª˜™cùÃa… “ù`Rñ#,ó5G”¨`ŸÆ‹)ÂGXce$‡§GY"vGìGÂI¬ùŽ@þà?8B½ •jSƯÚ7·J:†=|¹? Íƒ÷HGÆS]×CüŽ Û^˜ þŽ{2r)‹WÑÕÑÂ0 ž´C‹ßöE„e06[¤•@U•”…Á¾®W¡ú°•ÌÑÐ0µÐb§®*Ã4†;w| »'(WÁµ:*äpVììÕoŒ’ã;Ó… œ>­q±°–Ó³~ÊPýZ„N¡¤á2êÚÿEyßZ…Σ° ¹)_ÖVj6QTÊJXyèŠê1¹O†F‚ž3TÉÍYš›Â™O‰ÆÎÊ)ƒì”¥+¹ÎP濦Ú#ºg:ÑUY´ê|á@ª¤Ô‹ƒmCbœ*7âPú=Ó}lïª&¬öúÃ$†”Â|ºH+÷²¹³}ïnïÜÜ{QsóæV_¹@ù¬û[>¿°& b¥ÅÜ^´•ý>0ÕïC]WÊ—‡àܲ{ ²¶vÏF¡f@ó×ðR•5Uð]xª±Ã’ NŠY3éðàâèüÔÜe”QÜDûؘ{—²9Cv)@2SïÈ>Uë]ËÉÇ7zží«¸l'‹ÃàÂ`ýÚ\tα¾´õ]Ø6ê)âÈ;1°–ßϯjÚìµBEª Í©uÜ "¡£Ê$OiÁ8‰ª”Ð<(XŠnM eA×;{«}‹±í~Öò«}6ú_ÍJí‹Y[¿^~W¢"t®ú½OCã¬}~uÔ>è]]^ÿ>¼ˆlðld‰×üYûp7 eô ¶² ÕbÁò|¤âæÆ*Rœût 9“áJ…ÉhŒ+Ã'1¹ŒêAŸ†’;Áür÷¨¡‘ª¾Kˆâieˬc¨\(’çYx$ÿ†eÜB~ÆïnØú7uFTj~Ÿ…ÊÊK3›Ç<ÕÖ÷¥¨Û¶,(w©üñÙNU3¥A…L)Ãá1~Ë¥CÙ…ï!<¬¼Ö «&Û[ºíLÅ™`^QXÇ£"<åœ_LP¡(H£x&ž§Ø±ù4-õ° Êu Ñ›¬©ýd4¦æ3–H ÊîA¨ÈTÿ[Õº03 €fuéíÓÎq»ŸfYù¥«& RòâéüåO:mR»Î¾l˜•/åô”ÃÍJ©ö¥Q ÖjÆÍ¼pÊÓ›gYÅÃ÷[lc³QßÞ*ç*’vWŠD¬8«jpºùò9§mM`»†Ÿ;O$CD·/ó涆i? ´ýTçàa°ÀâKp¯ž÷*GÔ6_WžÒ¶¢´ùƒum/Ð1wÞj¸G¸E¸ö©†{û<¸ƒîݳàvÛ¬O»¯q7Kri>.˼T^™»æQ:¯4™£bÏôæ^²P'àöüvÍ{¿4O'é‹{OJáØªáœ‡ù¸ã±Ä›‰I B‰'P‹8ö–n…C  sk‰ˆá[‘JÛ´?j>Š h6üh¸ºªÊ^¥¨ýù¹ó¾÷ñk­†¾'ÙzûíÁ»Ã£ßOþø÷éÙùEçÿ.»½«÷>~úÿu¶Î–-†£±üÏãz~ðWÅÉíÝdú7Ƈ|€kãv¨”áýY7—àãc·n´ê ÜÒ³ý»¨ÞKÛ—P÷bµ ã,”²ë;ñ :“rº'ñAU­t!IZ¬sÑ=ùIÕ@E‰7T/ª†'à±è‚N¾)MÒ·±O½Du‡œ¿’9”‹18hj÷é $t›HçtWÄy“[(dR±¹¸XòÄ™•¶^Ö[ͼ”p'ï¤çÅMóå’¬°´«´®ÎO>öU¿©ÿ¾ÙÂY#ˆàv+Å1Kl>·ùWÄóùÂÿú¹}}RŠCE¥¿´y€íÌýê‡ÁøYØ\„X…í¢[kîÖ³8dóUÝ—²K¡nr¬‚Ûª×çuþäÊBÁœåúÖm]žt*­†ù¹ÞØü 8îqi9ÉŒf‹U™g¨)¥}š@÷róM½Ñ:>1®>ÖÎ:d ¯{¹SŽsÃ)…qð†Ù0Æ2ÆüN&n, ÖgE¸öIEc=;é.?wÏ:ýwF:L–Åo„øí.°eTošwL>4]é°CBÊvd²ö(SË$½0 Ø(};?9=4çÇlÅëš:XR‡SùCà¨[P.,ÊbÙhüÅj"¶j®Û ¥6¦*q¸QzYmT›åïëy÷YXS>v)Ì _-Nè Lž`s¾}éÖeö ×\N]ìV:ëÜ£†Ì „ÿ˜Úò…`›Dã`Yà !¼ ÄäiBW0‘Œu ‹îmÊóžJÍÇŽºœàBuï3=¡UEŸŒÜÊ0áýV™µÐÅÂ[Ö¼Zcè·?<ËP5Í*di¹ó,|ªü9ƒÉ‹T‹"–>$ß[fs5äÕiïòäãJØÄâáÁ )Eó¾ý1ÅRÉ¢¹å“g`Ù¬oÖ[§ŠØÁÍ­æü9Ei92€dN•ç£c†~ˆD5ÆÕÙI§KÖ¡P~„è¸SÑ».kØpùõWvxqÄ^§— /äÐCÖï[ñþÃþÛ©_ñŽ»oŽ_3V«Pˆ£„a¸A}䨧&u¥…ÞTâÒcø‡#«ú_êžý¡méŸá¯ð†ÞüÕÎ;M³Ûc!¤m®3`>­Ì}@«bx"ýQE0z‡ VdMZ›ì(ˆ¤º¨;Ò]Æ…ÏF\Þ!ÜøŽâÎJ:]©±Íª;óíêE.éæªù-ÚPdåݼ›Ã;+û%¿À}ìø$Ó¬a‘аÀÝsBZó ™onaäoÝøßmqçÞ ¹É8 6ØË¡*º±{3{&±^é*TE‹*qËG׸¹ž=8Æ/¾shkD¨•+,o:¼ñ<<M0לΦs›Kåã®%`ð²PÜO1 o>õØÞÐó-ó‡…vøüÅ"‹Ä СÂ`¾ Å­rà0]—,Š%æ——8Š‚vº<B>†C~)&Þ·° W!Ó_Ä®¥I —RžE˜]—4À!^M¼'Ԍ޿V}á2ª~ä¸ñ®Œ7¹WÑ%PºV¶/^½¾”?h¦¸ÆÛ&o,ƒTfÚ¯··íêA³žñÅsµ ׬\f€4œxº~âv‚ƒneh>1áã Ë £}PEdèÞІ”´Rå"ÉÌà†Ï­’.•>K| ƒ~nøU{ÞXXߤx› ‰N×®îû3²1XYOœ~Œ·¬åìjm<úæÝ³g˜Ù.ý•b•È´ ç°ï´àŠ8ÁÌ/‡™gC£<̽¬wåΠ3mwº]vº³ éòr·4_ü‹úŸ~Ì8ŠË‘Â:ÑH ņZ¨¬¶¢€­¬vd\WAõxç£ýÑ9hVyNœî´ó4æ^½§šO.ý/2îy&­Q¿Øqþû’¹6,pXÔß§õ5¹K„êÚŸ69àO[ø†ŸŽ^)¡ÖC&Ù·'“ìÙ“Q€¬4º“–:°Ùëì3ÎÝI¡®‚Îrï±—ÖYNí%ø–{žAÇNí¨•Ndø#þpòã=¼-d/²¹Ë˜gÛo_…ž Ò@âíé?á*vJÏå¡Íöð/{…‰M&À·>¶Bè“¿]‘ Ùñþ`ö$u¥µÅlÂC–À-fäIytúó/pEŸ;Q9Œæ1ú ?¦ØJ)«Í{ÑUì%þOÎгunœ`fë½Ú´šdÝÖ^¦3Ò‹ÂÃÀ®î]oÔûdՇ׾€dT£åNºx4øKíüq[êLµ^rÈ* LP›Õ¢e¸ømÏÃÀꨤ¼»õ¸£¤'. JèØÀºø×]÷n›}¯C¦=tßD•X»ýn¿±[Ûý rüåÍÍhŽÖn$×QAhûFÂâJÓ˜4*Bð™À\á¸1üÒ>aœn‚Ÿúš²&S¯ïߣ9º]bœWô ÅPlä)€ xëtÀ#+±è°q‰ÅÇ(þ3Œþ$¢"½øŽý?bø$ÛoÖÆ˜oÒ_Ó¨ýæÎ úÅw©á#ZíÃÒ¯%i£$ÁFchTÿËyAèè»§Zûøî·Æá’½Ð}¸¹ó5Kh}Ð8|÷Û’Æ@q7wí꭛˚N íîaws_»Š/\‘!H‰ù…q7Ûôɥ鉃h¥K/\q_—ˆ}hÅc1‡¨'â«vŸðcζéfþ|øŸt}nÌ@X ˜sÛÀïŠÿ°œ¼›Ü¯Æ}kçäï'Ö)Pˆ9L#ˆ§;Kcšêl›WË03§Ë sn ˉ¨¹MÂÀ w–™¤a &FÇFÀ_÷>´«À™Bî,Òv°uâÝ^Gyád`«¿À<!fÀp–!õ2ÃqÊØ!Vc¢*Á4‰LI<ÈíWD­[ÆÈT„xS.:Ÿ/>g.)6èrÅEÇùã2}õ–çÐYb|ôè]άtZÄŠÕ} |·Òé†È‹Ãé½èp°ÔéÜÉ Iûü  ù鳌dX®<t™Pàü ¼ eú<°û7‚V~ñŠÿf»MÎ ûí¶bÃ/ŠÕBC/Z_ƒ^ß„0ÆÐÏ®¹Ÿ]C?»z?»R?a/X 9 ü°À„Єké=\zà÷Çæ.¸œ³R}]S²VZÛ8Ù>ëê–‹±_ÿã+Ì»øXcÛÿ‡UÆk#ˆäKÜÿÐÚÄÙx{)Ìe"@M†À¢-—–Ìg|Ì¢x, 08ÓyÜ-jë+ƒf•¨…JU“¡~VBû5¶Ð0qÓ)¨SÞJªS敚µ¬e¨D©¤Z¯–ÖªŸ•‘’ê¼JBªü*ªT±Ýap'ÙÔ†]RÆ×_€¦&–ãL¦þ7¸ 9Ÿ my6@A^ƒžŒÝœòh†y±9Y®ð·è‚–BI"G©dPIÍÊð×dÃi$ø]ˬåHƒ^A&*­lXûãñWñüh‘Õ©  f‹äsñ¥»šVi%¶¿ºsÌP2‹åôó‚Žš;¯lØC¼-hø Ø©ÈUñy/©ªå] 7=s=“·=›yÏñi1mCV¾|žGˆ÷+Èh¸JP5ˆ·å¢"``á Áí³È*¤ÓQ‡‰%Ï#™±¨¾:¤X´ßd %\•²ñu~÷íFlþ 2<XèYí£‡«·ü}òDߟbÐÏãÊ)XÉÌÃ`Ýku{"ØÀt<žIéIf踹³(˜ ÷áç·v¡à™ûô9íXäoÊw5€}Ä#OOàbKÐZÞÌÚ¯µwö÷ßÔ° o`b¸’²g` ½ÓKaþ'«>ºÁüšÐrÐkó š1{½6O.ðæ ÏüÁ(<{%¾ æ¡c$Ü02!‘Ÿ šù©GD™ kíÿ³3VæF*wm½¥©ŠåÊ¿O$õ(7á4@Ø{ƒ~!ïàÅ­Nê‡';'³úÍo7ÑIÆñ hêÔž} #z,€q׈œÐ÷û!*+ÁúõÛ°ê,çi‡ÔHÇ,î;§æÍÈxÐô¶(7ÞWG<ÃæW ú¹òì¥|•ÝÕ$Ø1 EØšµ©!ƒÇXôWþÙ5ªÌWœÂìSì ^Àµ¬Xd-V» £)QDG2+ç2gR…P&1ë÷Ûµ£ƒfc¿~œ¤âåT¤{;‡pz¾7þpÔD<Ÿv8”ƒI„Ðá$âHq+Ü…€ò7]š&6¾÷ñ°qž™Ìî«EÁËá«èfU 9a …"ˆ·† 9擄JéÀ’³¼3È+âæ–’gœÌ•v”…ò<Ìuê‰ïÂ#øFàý>^oö'¦I!Ñšèi!»ŸŽü{JìÈÂaOnñ<÷Ñ´&b»¥”spdÜ…4%(<6T@!¨¬`†iUD¶Þ¼ëºRÕ†Õk˜Œ†ì8;™°ËHßE™JY QCilÖ—y0cp aDb—RN‡Ü e$Ä)qóó;À€Å¹éÌX¡ÍÀâa5K à‰A΄¸ëS‚ÕM& >ªŠï(Ÿ·C¹¥Ø«bšç ­œÓ¨ioˆ“Pækhû@J\:›á:òŽ74¨r³ó“–S pŒ­“£æRA)˜'F8¨æ+ [¬ª e@rœ[¦ õ̲ÖÃíJò®ôèÈË òR/‡ w[ å:¨±<†³÷–¿]ƒÞ8è}¹™˜çÐfoÎ=¦^¢£`e‹ŸÌé-ù ù‚é¶…Såáø ˆŠS%ÚqŸJ)¹ ìZiXMØ¡Ì)LÂãq]ñ·LÚ9j ÝŒOG©zñªr)…j”" œ‹3#õù€ KEíb¥lo1»õ6í×ÐÅÊæ:暥xMûO»æð€9Ücu˼î*‡±  ¥‹iàWb*6Pt^ØŸ…©ãp}Y¶Ô Ó½vq²Â•”( -âÚgÜæ/CŠ„«E ×(0þ:óãUWJ>饚ðÚTZþI+|Ìâ0KÏ ®ý½0}Õš©…_Éâ:Ç úuJHhž$å I+°è¢,­ в• –Ÿ€¢ÕœŽŸ4yvÇêr.ßΣõ¤šhmXû^Îf<óX¾géL«J‡shØÄ³¤cå½¾k6EFµô¤›E^ dŠüGÚ$`< (óÍé&ƒÎƒtú¦íÁ|Hù@ë+“ʭCµ›2@|ã°`\…ø 2aÁ¸4ÙIgÚ¹Tã5¿RÎÒƒë€ÛÆÆv;|‡Æ· ê(Eܽ‚U)Kuš2óNF¨{ÎKö½cäQ”šwsæ³iGÆ„ô„ÖN¯Ç%¶ðÏ—°Ä˜m˜Rc¡hI™‹Ah$ùEFd¯dÂ)Kñ&!  >ÚÕÚIãÏR»ÄI.úý)Zj=t+Îæ²Ìønñ|ü8ÊDƒ›..冊sòÐÓv¶ºç ”’[ˆ¹6÷üεÓ3ia M³áj(± Fp<6ÃÓàQð²f->±bùÆû¤^z´‡Á•h\ìÖ/[¡!©×óŒ <çø8ì¾Îh† C ¥QÂ:aÓVã‰âM|a£ødQUK¦<‰G‚N˜dœ$ÁŠ’†MgY³~xÒ8=`–˧#ª[W5§M¸V[ïšVãÜœM“Êî–×)j&mTùgd!€ñ˱á${î»Û™‚ òk·{Ðñn Õùûîè,rŠМ0à#2 IZ »úöäœÄo1jò;oÚô¬÷ÞxÜâ_¿bþˆagúÕ›¹ *þÃVv,o˜œÓgÙ\¯½Ù&±B‘d6ÔØuÛ–Óû"ì¶Ä[¯™Dø?ÉÀëŒú¿w½®ËÛ"b®,¿-yª8Èfg>pßMñ_ ã˜~Ó3p ›³«;™SÅMŠQÛ1…•SaŒ¼»À®Ök9Q¬}i GÖZb…cñ¦Ëéà”à”ž§œ§ü8tJÂitÛ™ãÞƒÉx†Mö”×Xnîo‚¥ Oº×™Þù"œ4SŽééKìJhá…ì UUXƒI¯Å?$é´ÂŠóá³o¼ŽfcÁ)ìê¿Ï«˜µ®"p¯y})k:¥8£jxQn·«Å²,TÊ©Øa-½@ªõ !Ñ’¨­àïü>ZJJllê5®€Æñʇ­cg»zxtˆZx|Cq? ¦Î¬3êyCghÎszׇãQk6žÄ6qEÚè¿;£ñ•ùºÇn+Œš Ô¡ê:ÀNà{C Œ×Û½V&~Þ/¢ú˜ÖÓY>®æ 3zž£)¡.Jñ|h:`n‡ÑŒô=òàEw2§ðÛÜàݵˆ è…ÝÖÉ€-×Nq ÝÙ8âž5‡Yäùs”œ^ItF´XhÑéáèìR¿F«'ܧEŸ- ¥–“SRtMz“\tÙrZž-hX?¬Ÿ/hæ´ 'ê1ŸåÛûþV„q¸‹r™Ú†G¤òRçöœX)Øý×A0;¹‘<5¦†“Vr#¦Ÿ”õÉ“ð÷éyb5=NùTªJI .'Ãjøz§œGEµ(-× Ø(|¾ü‚âcpÖ›ÉUåSy9ãÄ^.[í9ä?ƒ¶U5ÙdƒÝÄYÅ®¯Äª´ÛzÒfáœféì6“jf†•G¡Ò´³5‹4l!Š6Žn'ÉÎ,j*ÙÚ•ëW]¾n]öû²QVÞ”÷9Éžºn;‘ïË+Ü;wœüG£î1¯:Ú!ì#A`UVÛ©®¶’Æ%)˹sº sêÁdY¾.°b^žó7xðÂ6ttOMõyót ATxÜRMÒâÓ9øâГ¿ïîA ^½1O(ä—ғׄCÉ%b˜bØ{ºù^D’6[ÍÞ—\uIf¯mw»Ôè8dѹåôšõ~Ërè¼ïœwºö!Q—±5n¤»>Ô&ľ,õx˜Ìöá Ìž@Õ0 ±wÅ`~Ÿñ+(ê‘ÏÛܰFœŠh¤WÛæ;üžø"‘ÐTrøU*î4ùÖŒüÃúíÏïèÌK²®`êº7¹”<áã™E¯Ž^¿ùëõ»–^ЖƒÏª»çŽíØ¿WG‡ï~»¨îîîÕ¶úRñÝuë³ófËv\øO»Ù>éV-«}Ò·Nì‹Ô­ú©]ûd9ê‹Uï5;íZ³Qktúíã‹|«n¿J#Û^>ºº»·S3ÿ+œ{ª¬À"ï2d0õ$æ¡Þû9©9¤B"°ÅR\ñ€˜vŒèú¾ºûdxMEèP5ñ— ’ü0 F½|¹_…ßBäl9¹LHšI%-á°¡—…iRxJäMàa;ÏüÄõ¯\Œ¹ÿ ½h”y#ö?׬Â-4FS(Áh>BM¥ÄH–@*Á­±ñ=ÇힺjT%W4ºëˆÑr¹rè\2U’ÌcµñGí³†ûÕœ¾bÊK0»ÂG¶«˜/DÅí7 ©†óèJ|eÁ{Ò›8剉q6‰Á …'h²(U™³,—–½$ÙD}óì¼eŸÙàŽKhwÕ…N„|0aðüIr¯C“˱í±äž‰_€jŸ'"IIzÚè@e)z[ ø¸‡ñ.ŒÐY#I¡hB—X¤Ú¬,¡)„§©Zf.R.ÙPMª…n=ìÙÇv£ß® –…‚JGºvj×ÿé~ì7[Çn£e!4ww‹±sa*L\ÇîvZŸìÊàùë‹ê`iLAòÎÀÅ ùT®¶ž ëá®#߸ï7ú¢ªoTú8¶Õ³Ý^&¬ Ìn]TiÉì[~›ùü~‹Á±ïM2Ûq:Î8¶Åà˜‘.b,à#/Âîp_•:bRØ@[NJJa®˜fk@Gë1I›€î¦ÌÛ˜ƒ :ºsZûÕƒƒ9Ú r1“*ØõÖ¨”m6W!¨ÀvzÚ_ w[vòåÜ0ξ!5RÉPQ®‚Æ,Ñ`Ïü¦•ÀÐ×Õeú)\hž´;ŽíöÛý®}¼2ç”àœ*óÓy>R?Ž"•g²ù, +ù Û˜ä^ëÉâ=JÁÓ1äq3ñ®çÍ€Ž"_ úGº2Nucá"DU¤$%ÔòÑ}ä \í½}Có‚@B,sl’%Ú„(E1®˜±Q*úk¦²âTµMšùæÆ7Ÿ!PPÁÜðQ³© ùÞdî ¸euÜB,n ¸5uœ1†kŒ±®ŠÞ”w® °HÔŒä[+ŠÙ5£; ¦jÊM1v&ÆbsÍÊDêöÏÑ'u»îY÷¤2¸J9iª›rlÁVslfÌ'À²f»ÙkZ­æ¿·ˆ´-’G<å^ÈÿS\4å¶BÝšBÜý‘F·€¦!w_¤-jОBk:sç’¶RºÝ"[i‚}å!¨Ó–N×¶÷­Óž:àJûÎ- ¬ã®$l õnŒü©ð;w¬“3k+¬¶<É|1Š´Yöbé&î8~NA“ k9ƒ/+ë/‹Û)dÌÅ&ù(õôR!(¾!„¦¥z Rè—5ÓcúÌ‚Yšmé37eÖ×HL#7_ëV©ežŸiwÖ“ÔòIîß_æ‰çñý¥*Wóð p+µÇKï5 r÷½x0¬c ®ìûÓÕê`yÇþG¥á6kµG€+Éâ””ºÿKUý¡S‘!¯ì+%ˆºÇu¢&ôÛ‰æe›‰˜‡w¢ËK¬§Ô‰*¸Æß£hSâk¹}¹’måIÂNo¬Ü/®¯Øˆ€/ø|§È-aÅ1®§»ØÄÑË—¿ÓȤÒ^>¨=Ã/¥yIJê ¼öêmíÕ›ƒÜKq8¸©ÆE•|IœI.²$¼Î× ÇR•øåÌä3$/ÌQ&¢·‡G‡o F"ª•gç$ú´C?DÙh¼xæf\R2˜ ’ãT1[rhâY™CM¤Î>²‘ŠrAS!¿¢¸Pç¢æÙ,GP0½âÛl֥͟?Ò…aE„)¡ô …pæ*A·È^ïØ¿÷›Ž]™g²ÓN·fªV×m6*ƒ”ÁØÏž#Hlj›zrÄÒgôÜóEòM'\¼®nšaÅɇåYiÁ#Ö ÙßϵºÎ]`øómI£âHç.ur†mwÚÓë[-÷¸×qV¦ÙMž,&Ö<o¡IPA|Åešy!2ƒ'¤Â¤ø!Àˆ¨Í‹Ëbì„!ƃ»[}N±*§ëì\J´SfþwQΰóDýFµØ“€ö˜yª· Õ þL¯°‚›ï¬`ÿ¿O‹Q²uMͲiqÇiÓ={ ýü}=ÆÍà}x³±<ÂHÀ›ŽrgËqÓÞ?¶çX¹#Çv·î4Ï•±¡ÂŒ‰ [§,DÊV9MŠÙƒ‡I,„”;MDƒ.ï‹cì0æ V'  4‰©(ÆÙÄ‹j¨=ýgX—ÜJþ×.Åîg¡' 9ˆ¨2FÔ " 95¹¦#ç:æ¾®kW ž‡:9Ο¸kê ØQýž®½Ê …?ç)bFéÛDZG(Ÿ¿žÿsã¸K)ºÑRþÄò¬~«W›]¯uûFó_+¼H²4“QRjçjjÉúŸˆ¾+Ξ[j`“þWÄÌõDÄÌ_'fÞ xµJ…ܾ¥ŒSö£¹£À£Ê¾B+=¥$é‡ùÊÌ…£LÞº¹~úˆÞüZ ±”†¥D·äpÞ4pŸªÏÿPKV}z=âÈ{´ U.2crystalspace-glshader-cg/mk/autoconf/visibility.m4UT dÇïLó´Mux êêåZûwÚÈþÙþ+¦vºš‡_ÙÝÆq¶,Á±N±ñÞ$ÇÍÑÒ³ÕH`ºgû·÷»3zAŒyn[Î1FhæÎ}|÷»wFl³™Tr =-j“CöÀWõ/UÖˆ£À ü!]lnÒ׿6kÓE(G㈕šåýÝ݃*Þ¾gƒk…Òa½ØWcé öL%Ÿþ–~p‚šLžonC ^ý±TÌ“ƒ‡ †ÃP¦‚a4ç¡8b‹ f÷Y(\©¢PâH01î»õ d“À•CÌ‹Œ°ØwEÈ¢±`‘'ŠC}ñòü’µ“%^ _„ÜcñÀƒ¢mé_ Æ›Ò7j,\XaÄÑÜÒ§—èÃN,Á#øGLHÜÙL„ ×l?]-YaЯÄ#2!4ò‚)Í,Cùóx”O®­óFn´Ë¤¯Åƒ)ÌC0Ü0—žÇ‚ÅJ c¯Â0ÒzeõO;—}Ö8Ã^5ºÝÆyÿ͆Gã Ž˜˜ #LN¦ž„lr?Z g­nóã?Zm«ÿ&Q=d'Vÿ¼Õ뱓N—5ØE£Û·š—íF—]\v/:½V±žw8ÜHK½>Ô!„_]qé©ÌovU=—ùL üŽ3(Ê™äÝ?°F÷¤­Ç´ÜÃGL™D6%p·†¼b„Y¾S«°o¿{ÂθR¬1C¨›|2¥;ÂdzÛÝß;øk…]öÚ Oœ|¦}Ñmu[?•®ökO¾}[ÞÜÜ®~ÒåwÏþÙêYöI»ñÒ¶ÎÛ`ŸZ/^´ÎKWfßêœW­“jïòâ¢Óí·^¼M\tÇ«0õ¼Ó/L/ëø7ÇÂyG¡ÙK×þVʆÀ'!¦¹³ƒdðˆ^†±ïPh%‹Š§Ó DªÔ˜5¤ì Ò²o+\{>†Á4”ÈAài2•rQΘ!¬räm @ žQ3Ž)s” #Û¹¾¶s¦¶RÊ6jG±œdÔ’þ,xGJÄ"s©D¾T¾”q<º+Ò–üFâT*ÑäuvÑnµÅ4ƒax«§oô±š–ËA#"•‘ã°ƒÚaíZ/^Á‚*bñ”Ì?¬íáÆœ&aru˜[[M¬­&Ö‚x…R‡ÎùäDq(H/òñ@ú:‰tjQVS¯XUcmàÐã#˜ËÁeJûâßlr0é ­ƒQ¬˜à T5ÖñI¯ ÷åP¨È¬ƒÂèK-†éÂÀш2Žõ…p-Ä€¤é…Œ~š(çÀiŒ"1ø¬‚s%HE 6Ä^#n0ñ„°‚²¡`!Íã`åbaªVCI8 Åö¡U¡è±J1> m—.!N\£løð±1@ ø€Ä!-JLZÑqˆ Ç>L÷<íU¡tj† úŠõ¦Ü…Æ’Ä൱M2ÇA©ð#¥Í!ÓùˆŒ‰R¹g$sOPt* l‚F"‰ @¾>ÀWCê%P .ž?E‚/È!¨“¡nB«®vBiNÐYíî-¨ !@Lc2žô$ˆÜ§O\IǦŠêž='`r#’9ä(·€@+ú‚<y|H÷Ö|ä)È'k½i!$*»9øËAP þ"œ¡øÍýµd+‰ÁT+¶·»ûçÌKÚz®éÉ`ŽzB«MJˆ ­çp¢6r¯±BßD.‰ˆº_ƒ-åcåЭ:+\ˆV#Ÿè K¦íŽC$MìfØ}šVo6Ž¢éÓzÝ³Ú ‚ZŽêÿ~„7äþ¨>/ª…&7ºŽ–çÎçóÚÈõÄ´¬#øôW=¬íÖ(<üÇÑÄÛÎ%½/ ÿ»ÔuÖ“@(’RXd,OÄTQwЇ/kÎHþ Ýãï¾ÿnwyJ„XÖ“ ŠáÀÕSéûz³WGœß‰¨~pp ý´”´‘feŠVJF†žáè3îtzõ×”„~ŸR2õ}H­;˜9¡TÂ! Á*Z\Æ&ijÏÇÒ!vv45õׂÄÏD6:Ûp¢L )bó$ãÑ«j@fƒ¡=D%úrœòn@b"áÓ5“Þ.áÃTÍQ´3DÕcÖQBêžû”¨¯èæ/)gX ÊÈz‹ ¿‚1Àzž'F<-^Ó꼩º ŸOÐ-æY)¿‰P§É=¡ˆSBw¹˜’m÷[¯ûÛŽàChûQ›—`’^S¦Œ ¾,@*í•MçÓ#¹®¤1ŠT*†oCIÑÓEÈ ¥ª&‰ÙôzméÇפñ+é»Á\™Â””ùäûo«\Ïö'jæTGhžÒd®QH´³‰:*ÌCÍ—(Ü„ =*-©Ä/"D—Ž‚êXD\CKdÔÀ}?X@(8/uYáÝZÊQe›9CjY›fö9¤v¯r‡Zƒ-h'ÔTwé6äºÑw5&º8Ó:y«¥ °AQî8bé=_"*wv9Š6H ‰“t“åÍ´—2?¸Ë•šV¢;ÁBÓèJýJŠTí“÷ìØ¼h\¢1¿³wG›ŽÜÆâÒê¶JWöò ì.°»k¡/˜æi«ùwû´Ó믻×ë·q‹.;gV»ÕµQDqgçm…]¡mvfyç<•ŽÞ¼ä %pB0ò忨Je„'Z·ÄÙyÀ醉um3ÓäÇK«ýBß+]Q®¿?8 ®Ð;’ÕÖ6õéxZ§Ûjô[vÿvéê¾-“ñ‰ÌŸòheUáÚ†áš{m3ŽW¥¬y³«WRA¥Þ¦6ÂR,'3„Rùá‰\Ûlôlë¤t¥“ªê³­G÷²s«èú<Ä¥ÍlW©­*,•ª¢ØýVHxìÌÜâläF»qþ™ÔyÙmœå:ê»)o°gÑbŠ˜Oë?G‡Æ ‰×ì· ªÔbKeöÛïì÷£‚|-åõ3éGÏKåFÄòå3¸}Œ=Ç ¡>R‚,k•¾_@Ø?²w¥ )âêÞI‘«ËþtÌÞ·ù øø1Ü¿Ld‰þ…ì73‚Ú@˜ä0øÍãþ(æ#ñ{1(ù1O6[ï1&2Š’Ã"Hºùü7;«etK’쥸ƒ÷Âñ/DÜãxùø÷CáÖE¾¡°³¾,SºJ;«béý@¿~QôˆÆe»ÿ•á›Ü\Á/ÄXðÑð…œ@Ÿ˜ß ßTÉuø…¤õÏ/þwð›€b=€?}yߨNþ«¯Áñ ` P¾õÁÛFÏ ‘¯00ÚÖå{BnëýiÙT„t gç¸B9Ø*Ò“žä©ׇ¯Ÿ1à7ùðÞ‡ëí­äöêiŠLÓ¦#8¥7C…l´Ò~æö£…c32ƒá¡~’(`r¿k÷NmJúR±'z‹[ºÍí¶zöÏKÝÃÕêNêKQò‹V³ ?ßÕS|(˜3Rv…ãqs¬™í±*P2WyGáÊP8tb~iAÔEÇÂï5ëy:eÚª98§Ÿ;l$Hùg ´%8ü¶Þ_в7’·±DÜ݃P(t!ÄáñÀ‡Ð_…×Q´ŽÅÓa”v$Õú®ŽäK€?ëGþûп¦…ù?„ÿ]LŽÿ?T7“©õ5»še¹±±Yñò­½ &Õî&U– €Û½7g?vÚöO—¶ubµÐ€Œƒ¹y$¥Ó‰Z™<£־ܑÅ6ƶ³G¶]*å£J[ö¶Êårú4d¥“ù¬|Õèž[è &-í àK¢]ÍîX''ÖkÕ©ðþS¡ˆâÐ7h0O¶«Ä›úו+»"}â¯Ïh_ÐÓ]ú‰Œy˜›( ©f ÉÏ!,9“®fælf´˜Ò/J<ýÒ_š‰Xiîì4á‡èÚñ=¾çœk×áŒÈÚÙ;ü×8=9…_8kµ,'µú§ƒŽZ=oŒX¥^³svvŽÅ}#b„…²©Pí.ú²bÝŽuö¹V'Q*,¤Xf6 pi8‡ÕK÷Ì ïb£ ÄLÁðDXÒcQ8áÀTâiƒL'bIy®+T \Êá¸É,ôr;¹šÌ0ÚqÅ7LbZ,$:1W–ƒYäåŠMyB,*¸2wPÖîêÁ@ÓÌ ­ºà‚þ¬¹±4GgÚ²ª¯Á\IÁTx:/3›Tü’¹×äöïÔx%@¨-|ªs¢—0Éð,¤Ä‚£°|YÈhgt;Œ®ofüÉ·~ø“hÞ¥í.Õ…_ó Ld¹„Mä SnSr÷ƒÞ5í÷¿GÃh¾+Ý`0Œ&ý0Äà&€©DÃÞlä˜Î‚éMØo!ç¼BÛ«¾ÜZHº&Ü1!í/æd»¥Re‚”­9Ùs±¦Bbjº7¶‚cR«Õ–=¥½*Ü…XBi׳ÔWNÿÑòV6Tq»…Ë÷3ká¯ÉêËF$+ Ç>Î:oÏ?´0 ý-¡ß;¿÷8 úAÿ{ã®Ó¾¸¼oÖjõÓƒŽòj‡Q07BúN®šµú›1‡ä,¤%Ý?zžÈ³rbsóòêê UÂö¬¥d9Ù,õºb’P ½¥{Y!È%ßç’ô –ÀöK탓"ݾõ³IãnGî¾…»'§/Goñ–úëØz/ž×µ9}âÁ[Qø€jåÈóŽŸHïŸPKV}z=vš¬Ó1crystalspace-glshader-cg/mk/autoconf/textcache.m4UT dÇïLó´Mux êêåWmsÉþ,~E—EÀØÂ9ûR>»nV2 @¹¸t*4ìÎÂÔíÛÍÌ"‘Ôý÷{zf)²}I•¿}оL?ÓýôÓ=½‡då½D´’½ì/ô¿þºÏ»T¶ˆŠ<á›Æá»oúkÒ (7Z-W–ZƒvÿåËW´ØP¨UDÓ*7+•KúÑÔW?m/¢¢ÙûÆ!ð›­”¡T-´ÐÂe¢¥$S$öNhù–6EE‘ÈIËX«Õ¢²’”%‘Ç/ MY«vÖƒUy,5Ù•u:3T$îæltEçõg2—Z¤4®)=W‘Ì$a¨ä'f%cDááØö”ý™ÖþÐi-„UEþ–¤Â{Mk© î©¿Ý­†ìük Ë!hW”lÙ†óJ…Ý÷¾ÄÆ>è˜TîàWE‰ðV w*Mi!©22©Òa¥úy8ûxy5£`ô‰~&“`4ûôËíª¨,ɵô`*+Sl§En7ÃE8|ÄúàÃð|8ûT»®ét8…Ó)^N( q0™ WçÁ„ÆW“ñå4ìM¥üÂ=Ú–õÄ¥¼ÆÒ •šŸvWÓ˜Vb-‘þHª5Atÿ}b=œH‹|颇ٞᷤÊ Û¡;­ +[|5å6Ì£^‡^¿ùž.„1¬‘êÈZÅK\^ô²ü꯺š. o\wÁ`>ž„“ðï­ë~ïû×7íFã°ûMˆs†ÖC®÷P""•*»é±<%²–‰H¨]¬UŒÒz6ÌÊ#-3™[‘¦2‰’Ð e]†¸±ŠR+¡ÛµÐJ,Rp†jf€: ØÓN¶3ÀsA‰J¥Ç`:Ÿ…ÿœÍÁàc8ÆãptÒúG0ÎÃñ»vãð (K™ïй]WÈE†=»‚‡IÝ@îQJl$Tn ÀDj™GÒ0Þc+C-SE+n"ͤ(ÚFà+X€L·õ*ïKÄ,c¿Ÿ»sMÚ„QF¡ãÕ8 Úʈ½Ù:æ¥LçátŒÃVûsÜ@$_ g¬åÿ=;hŽã«ÙrN‡çá(¸™ a޶[E–YIÔ²g¬°•y,ѯ„mð[z—Š[.˘×í‰ä'`Ï Œ¯±E¨M§i÷`ÇÊ §àö…Îh Êk‰_¢É34 DŠÕñ4â,1¾Ö”_èê»–¸…¹UzèSMÔ¾8…^Êà»DþÇsÆJeb]Ûu«ÀŒU{6³AgN:Už‰uévçßJVšá"tš îÒ’ÊT®2õ/fkQ©46@ºÛî¿ÛV1K D:‘CYOl&~•û>ò|t9 Ÿ=M;[ÓsÉKwSÚëÇ4¶@67ˆ(%)4ÎLÍoï·¸wFAåÈe•Z—K©u¡ “–=¸Ïðïâ"LßùºøÞò)(èÖŠåјHŽ|QG÷Hä—Å…ô5±‘Ö'Ñ\倴U‘¤›Ž?íÝfœ!ÔÅÅßN†“ùx;QÜFY|D%L¸È\®?ãðn+S¤k_LK*3H2˜@¼ÐÝ1Œ$øö€ê©@¯‰´*!keVZWI"báÂøš¹ó•Ä‚‡“GšÊB&<"<ð{åò­ºCùz€Ä¶ ‚÷_²žfêIä4Ô¢—[¼ø3·°ַПí‚*sÔ&D¸r“¦ð@c-tÒÚÒ‰5[_”qc)Z÷g ã[&ÑÙü0÷ÕJ牱.žÇéŠZ.Í^K†ç:IÝ.îCw*` ºÈSV“äû·Ê"Q7‘]Oõß!uL\(w‚EoªE¦lmËwÅs6 fP°b!í“/äð°ßÿû¦ÿ¦{"£.¾!úÜÇ,£Cö÷uu<¬H¶ þëîT–¼þ•K€Q$‰Šºì\±çf´*sƒ·'ÚÕ C‹yZfÀiaë¢,q:¹ L‘Õª†÷Z‘¶í»¨gÐìБy¤Ûú´ª7è}ó! R= O¯F­ëÏÍD7ºn¿{Öüwóø÷fÿÆÄ/ÔƒÂ΢ïl¾fáÏ›Nƒçáë§5ÓºnöñöàZF«‚šáàãå|DÏšÍc=xFï©i³ò…ÿ¾mpmO[×øšK¨ÙøŽÞ¿ˆåúE^¡"úï¿;fÜí¶Ó³9úøpòŽ¾Ô¸-,e|ÓÞ-ÔuÕßFå#t8ÚnÔKöÏ÷`ã>5"3GjßÝÂM4\ˆí[çy=gìû ^z‹›6“zû ¼Á_ãPKV}z==„ /v$ -crystalspace-glshader-cg/mk/autoconf/split.m4UT dÇïLó´Mux êê­UoâFý>ÅÈPCÉ]Õæ¨ÎáLÎ!Ô†F‘…¸Å^ãÕÙ^º^ChšïÞYÛ@ަiUÅiíÝyóæÍ­AºŠ˜lÇðžÖ÷-02É=žê¥Zë½éS­AŸ¯¶‚-C ~³{vv‹-˜‚yàdI²„‡´\}Ü-<ÞöxüKµ†øLB–BÄ‚ˆ-à2”Bʹ!‚^–gà‘õY*[d’“@ÿ. æ> ÐN`YâS2¤ ©ˆSàAþr=šÂ°tqM*Hãl!Ñ!óh’R )¬Ô—4¤>FQÀ)Ûâã”|`ÀÑ‘Œ'—@î XS‘â;twÞJH_ƒH‚(ðøJY6‘ü""ÆíRã´,ÉáC¾ÂðBF6,Š`A!KiE:àÉèΚ|¾NÀÝÃaÛÆhr‰ÇeÈ3 tM 0c‰!6'H"·*†ÓîÆóÆ•5´&÷%uk22·606ì‰ÕŸ ÆS{|ë˜m‡Ò¼@Û©ä)D]}* ‹Ò½÷˜ö©F>„dM1ýek$JÀâûï‰-àHÄ“e=š¾@Â¥Á°®$5åzf%^[‡÷?¾ƒ’¦`¬1Õ}/󗸼1à¬Û9ÿI‡©cä½qßýùØ6mó׆Ûm¿{?kV«µÖ›>ªµ¹3Æô7†ÖÈÔÁÅZO'­ß Û2®†¦3ÃoŸÌ¡ucML[½ ¬áWÍj­â¨±Êk5e‰ÏÖÌÏ09’Ŭ`¥Lò<÷‹™Ìûö˜(ve2/Tm ²’®ˆGÁ ‰ žjLG3´C¸czʈ Nš˜´°Á¥*lslœ5Œ,"šBᩬ¸²Ø”W„ 2÷èÈ[yõ!uE_rÝ”»ª†Õ”Š2¶ÚJ5deïHWߋ֣ÅòyÆ¡ìe,*¶L”?u*^aWª!,±˜*/º.üÀ+^Jr¥ ÄAØw~ÌKê•Ú>ƒÊo£¿#èÝSHcC·±Õ;:Ô»ø?×JÝÞ!,Z¿êº¨©<—ÏœA3ã‘4Ï¢Rf_B»ÊBsøƒ ÞŠh²T#@…€JxŸ$‹dŠ0ˆ®©ìQ¡©}œNôàˆÄ¶Ær;##íTS—ÐKÚ!Ð>„%ÛÚH]‡Oèé© qÂh¨FgŸtµ¡¾tŸ)»£¢çŽêç‡Ã@ûÍûGË's05Ü]ÿÏôªšyn|1G0„†ë¥ó¼æ=lþbS‰Øpë3Ý-wšÍÜ8¥ŽŒà õB»ÞÑàO ›¯pre^[#x„ÓÓ¾‹h“‚¬ðÄÎXv1øp¢Æöß±qL:–—ð©Øaz)# ŒsXS(ݼx³úê‡w³eÎô¾:AàLÃû!^ש(4Ð=­ÀX¶ã ±19Ir}09L¼À½Ãûε?öÃû:t #?œz‹Œf80w‚Ðw—c'€ù2˜Ïž ° ô_¯ÐÖ7e ‘ׄj¸zâáË®0Tž@JöËS¶Ç@ ÄØyÿ½°á"ߖ٣ّá!° äB÷àQ2ì+-þ±ä½ ÌÏc»WŸ.aB”g¥vI¶–,ÙârâÀùàÃÇ{°\8eBo,>Çæx_¬ÕÀ¾¼zè¶Û'ý7}Œ¾Ñâ~r=G_–ÎØù^`M°úέ‡Ù:î×ÿÍ zðtºèÁª²xÀÕØ™Þ> _­V5‘VŽú³ißõ×õæ¡wc®w§³ðxÒEÃ*mÊC@²µàåÀN¯#+U 'LÝ ”ÓŒæºÑ<"à”ÉH_Ñ‘ÄèÅ­Íé1dìXï‚ ¥Y-j-æEbP¢ˆèZ‚QdY Ýa/¼n·Q”И«­„s“·©Žm¨Ù2*®âéÄ)¿±|ÛŒ*E¶Ô>2Y_ƒ=‘Œ¬9…Ç”ÅiÓ÷ ÄS„õ±*â˜Ò„&å°)ç~8ö²QB'ªÃ‘¦G* AƒFoCU¬ÆoM2* B6{Goµ×%®6øÓÚxÇëyƒ˜Ð )8VÁ:{ÁØXÝaÇÓG:8É·’ÐPcÁè°c1áü·c’ê¸ïߣ­¯_âº&3D©#°á¯ f\±|/¾™±±1ÓöÛŠ–ýUµ"½ÈX™ WXPŽÃêõf}æÅ~s¢Ôo¼Ñrj­^Ñ#ê«–VT&áÇýÕZ~0Ò:ày ÿ}>ËÅY»•]D8m)‰Sk«¨ªwô”piòјT˜‹ÈY+S蜞:ðÛÈ·L(×K|ƒ7¼ñ³ڭV‡©0§ÙmàLÌ~k…nëºa`½•iˆw¦#ºðJÃÒGkõÐ-%0:tÏ ½(\ÎÇE¸…¿jSÝU¹cQ­Um{zi²¡¹ÑQD¥R!Ü3Àê‚¡æ•Κ3¤­4ÿ’èçœ %ð]E ^¾*¿?•7ÿPKV}z=g+™€ –//crystalspace-glshader-cg/mk/autoconf/progver.m4UT dÇïLó´Mux êê½ýwÚFòçó_1GübðÃø#I{®Ïi ‡W\ÀI|˜*‹´€b!©ZÉŽÛä¿™ÝHHÂN㔼V;;ß3;»š'Oõ³ñüÀ›Þð 6Žƒw†Ü…ñt¼`Î\ø5`sÀ]9ü%<5áEÉ'^0å5—‡/7~3[€cÜþœœƒð&á- øÜy˜ˆ3à–-ÂÀG!;æZ»^sϲ'¸.TÈ"×BÂáŒCȃ¹o"' 8Õ$N¸ËæÀy4vl›Ü˜Ÿžˆ·P…ŽÖ¶ˆŸ¾æZ’`¡í¹GÀmœ!p 15² È_™…$B ðy>­¬ ówà°p¹¸V¤¥ÐØ®D?ó|o†ˆQ ·¶ãÀ˜êx9U@H…è]{ð¦{1€zçÞÕ{½zgpy„àáÌ‹Bà7\!³ç¾c#n.`nxG2œ5{7_Õ>m.5ë´ÚƒN³ß‡V·u8¯÷íÆÅi½ç½ón¿Yès~¶XëiBÔ«ÅCf;b¡‡K4»@V f솣ùMnß £ LÏ¿{¸a:æxîTJË–>{®VáY÷Öš¼ªµ]³V…~|gL¨ß ©l>lkŠ?Ïê°w°ÿì° ýºè±ãÙhÞ\ÐõÑž>à \¸å`= 6ÿä\ šܵp]àEÓ,D…BóOaÀÌP"ŒÝÙv'¾$7Ƥ¦&BŒ;Xš,.E(#ú-—ÔcL‹H B¡WƒÀœ¶ö}Nœ*KáÓÈWš^]ƒ6Q÷(D`,¸ÈŒ Äcfš^`1mX­¦Ê‚†^°Sšî0`Pø1Ç/‹˜VIŒ9Ñ\ÎsÃgCé~åS¶”Ð5й…ÆIQ1ÂH{䤸 ez.æµëÜI#Ü™èw>'D-L¶K®ˆÒ”ÚaÍ0ØØ<4JqBD”4'§ÔÌÒ4è¦[ÛR™þ–Ç”ÆÑÁ%¥a® 8@Ö´ ì͕咬JéqúŽÃõq ‘¯ÃG9ªÝsïVü„@u7mœ¥á1xH/Ü ¥$ªÈ¯Aݲleƒø™Ð~è;̤ýKKš]Gªˆ¡¾Šþ‰aÞçÊølìÝh¦h›Ÿ¤žVÕ ÇÇDZ™Ž_¦UK“š5W‚>]ùNê_')• ²‰êg¥»]+˜„ƒÄáD2ý¡—k)S®Fùä–PK}H‡:© ÷vGòÏ6Æ!mijÚýãïmˆÑ)-ÅŠKxÙßÔWÀ?aá‚S¸8ÁS†«Zb™yv5¾2×aü½õl‡©x Îf¿¥›³…›a ¢w:žº¤t´ˆ_©¶«²^U¾Çv‡ä¶¿ñ#Q@îgƃÖ☤´"J£øF.æÏ I‡—‡¾ñ¶ñæW£wѼUaˆs~$f8_Úô`sTÁ‡ö¤¼¹_Ý«VÓKÊ—àd…€F•‘üKx<_£©Œ*yDÏ{ÍVû=ÉŸï_´ÖΟôºçK$Wå5`K\WÜ`­Ù£yüh—ÅO.äëöI{ @ÉÕ  úÍß.šF“ÓG ˜vçä´™o§U0, Ñ=| •bí5ß#Ví –!§ÉüÒÀ$÷hUHµFûÈ@·³ê^Y7È3l%oÉÒšyF¾“V+fE{è ÚJÎTÌM¡!ŠåË3QÒrkpszÏâÞ.Oì‘—)œ«@ñŒ'ÔOz8ü<ªâ‰ÃB瀃êÎ~U.ÃÒ1e¯ ›•áhõ¹$Fâ RL¥~zª‰ÈR+é%o2þ bö"¡#do!:+IEÌ‚F´ä‹e®8¾ŸÈÐ@SohÚ›±å—´]¦xz÷39X¦zÜV¡ñ¸¶’%XÅrUÚI¢°Ê,YOÌì îH¿h?+’ÃWÉ&KÖj=L4 ÷Õ²aÂÈî»: ªÿÑÿðPC?ò?߯îl¾o·.µ²;§,\â*”´Yè Ù¤ÀJj‘*lÊ”(u­šE™4Á:œy{²â¶È!»èšýæy~a5üýÐÉòôêêi!” ÞÓÌ–±*k"Ã…E^\ÆãZº*ë"ë7_K+B}†õ¬>TÒU…BÂõWÇE„›ïÏ{ºzØMó£ïþÛ:»µí«rÞ,·w¯öwþXK@ŽÖÈ™«êL"‰lì~÷h>×·ò.RÞvþ£ÑÜ??m´‹¯ú”Å^.ÿ¬÷'³p¾ULÖC<’0…йf”€‡] c‹.ѶÄlYøßÄÿ|KÞx u/*ïƒg®éŠla”ÅÅ’¼ùiyŸTU7«U‰¢ \.ú‡ìz^ š½Îi»?øšCŽJˆ°Ø35×ÒÎ9–˺•ÎY¢>Z t(ÅÝ”ɬ^áÃQQŽNž›Íì¯";¾ÇšqÇ¡{Â9s-y#Ëçvßû›ž;±§Q€pf`ûaíûڬѽèÄs¸›.®sl»(‡¿[æèÑÊßB®¥îb>šï½zcð¶Ùë·qc×C£¹½ g펡gª 9ƽu,Ç–öõ^›*£ÓB®stæªSæAï§MtRaèw8Ç8?žÛnîsÑdbÊ@ç<^–çò‚z.s¸Ô¥þ߆SÖΟ°YÄ;<} …r}ØÜ‡ÏTDÂVvs–'Ñ­Š„ ¥B%"’ä$_L °¿ X w\ÀQîüñGœøB§àm¬ê"ÇZZyvüÀÍ™›_©ŒT…ªX1kV«vÏ(#áJm¨kÝL‘Ê©è£Ï0­XdØŽìXö¿ŠŒûENe,ò¥@W)>äQÌh~ÛZÑI¾óÍây©¸obºÞ7=£iUi’Ææá]*Ç[[–oá²¥Íb/ÁÕ†özç•öÃ¥UK8ñ¢”ë¥júå®ÅovÝ÷½+©æÏŸá¡ºžt¿Çå=Å]–ù¤hßÂ»Šª/ÚžíVùo˜@Þk=œÞC]Ç`.˜ôþ×=œ›´kÓtQßä(Çy·!T¥¼Ù|ä·~Ô.ÐÇ#u³Aoº'qR¦A¯~V½õW!Sž¨&œÏár§ÝÚéþZ—Çæå“Nw°xÚ8;G‘…7¯SM1x² lš“Züƒš>Fh@!›RC–·3îêîOȦY¦Þ°Àfc‡ƒËæ\½IÕ½]T´R÷DÉ$ÒÔèR«•›ò½ˆ¦—Öf1gÁ“ÍÇ< ÖœLÎ\â€^Ï.tu;³Í™ì™!>$g¯‚ˆð)èw¯ÚýnvÞ–¨ß«´Ù:m¾‡Øùj _…[¶0½Ù!£•˜mCbÑ lʨO#6.×6"¨H·{øN”V2uð¨wЋwÒ^R»ЍEI ’¯âM/¸:w0g! #ûÛì‰~[­zËQÏcn‰”iµmyŠôÜ)þŽ{’ 'ä^1éÒa ÿéžT…σ„º´_;xV{މP›WËU’]~Ôëèy Õiè#㱆Z>`ÿ?{{»{û»{/bÝëþªDs’na}O+½Rqo4Æ¢¥ ½ˆUu¸E³#s´bš¯ãH#÷G@=ÚBò4Äœ¡*îÃËã-Ý?Âç¦=AÚ—Ž2QÙîwM-Œ“E?Æ€ ÞªÈ49ÙBò‡–BLò܆äªàQ'Ö­-Ûø²±J*Ô˜UkCl<ëR+ P©àj5´Jp}_ó”7î_퟊_\+Ÿ A¢uJõú¨ke÷D •ü¤á­Tì½ ´¸‹€êùÄ©1§Ë Ri?¤þ—Ë£Dê“fÂg&Å·ÃÄŒ"Zž•ªêy¹È‚ñ†-³n¼3x×[2kpiÚ€™K¾kqŸ»²Å.ò=7ÑñwhÒžFN‘KŽ2P½-¡Ì‰xŒ/›|=´ð fAC ï¨9–¡‹Éæ!ôôï¤èÉ:V±¹è˜Òµwo«7Œ×ÍÖEGV•Ù=ŽŠJiÔqJMãÉex΋գNˆX†þ8ª_ãfM‡¨uÅÁþr£¶²ÑÇ ît÷¾¾Ž—äÍÅÆ¿rYª¬”hE%È gTf“—åʳº$®Ñ$è:È55Ð~¢¢¡zŒPm¾x8y …PÇS…Düƒ¼û?PKV}z=Es!æ,crystalspace-glshader-cg/mk/autoconf/path.m4UT dÇïLó´Mux êêÅXmsÛ6þýŠYKILܦíÙMbF–ÍÙ²O/—É)Ž Q„ I¨è—›þø{|±œÚɵ—ø8‹‹}»Ø¢µ°«vô#ý¥§õ¤E~ju ã7*[/¾éSÙ¢Ž^_'j¹²Tï4vž>ý±‰¿Ð욺‰ h˜Æf¥bI¿šüm¿x t;ÐÑËÊPðŒVÊP¨f‰H® ¯‹DJ2za/E"÷èZ§ˆ˜9WÆ&j–ZIÊ’ˆçžN(ÒsµÀ8›¥ñ\&dW’¬L"Czáoúc:ʧx#c™ˆNÓYET c#IZsYÉ9V‘ÁñØCÖg˜ëC‡S«t¼GRá{B21hÓN1[Ù$èW–—dxzÍ#PþšBao·ï³ÆÍ¢ç¤b¿Òk,o`˜áR…!Í$¥F.Ò°IÌ€ÞõFoOÆ#òûïé?øýÑû=ˆÛ•N-É ™©h*`cq‰ˆí5¯á¸;è¼…¼ÿºwÔ½ÏUOè°7êw‡C:<O§þ`ÔëŒüާ'Ãn›h(åW ž¡V_¸-„]çÒ šÒï±íª†sZ‰ ‰í¤º€¢‚xÞ¿±œu¼t«Ç° ï‘ZP¬m“.¿²ú‹[ÞÌÀzqÐnÒO??§ca ùØêŽˆf‰š/ñzìÓÓg?ü­Iã¡ïôÉçw¦§ƒî ûúd§ýü§³F¥RÙj}Ó‡ >œžú£·ÓþÉàØ?êý«;í¿îtêÃÑ ×Ó¨l=êë$¡ú7ø?ä˜eHF39ŸgþšI|5Iã–U‘äaáj&„Á˜5^çŠçúÒx'Cš‰à“ ˆhxCà"؆9å]p2?4^†bm s¹’Y‹@ÂØð—áèb9¹åaQ„ÐA Á<ÀØ`E‘×â Lçp—G¥þ¹R-c¯C™/Î@.sñM53µ)„ö[ —× œ×†<V¼Nä— ­¼²Žuâ“\¨hà„æÈ„9ˆêu$cK©U°™bBDÅÆ (Ó%8FÀ¿MŠÅ U[½`÷ÃBë˜(e3Ô¹³Ê&Š‹Ís–qƒwÌzj!RŸŽGõÎÉñ±ß?¸ŸYÊZwS%#)b€O#c‚&,åÊÎÓ¹£ŒàYò È•¡î¤¸ÐŸ²óQ”GÁÍI0KUÈñW‡\©p®Tb¹ƒåB$JÌ0­¼Z㸹kõ·Â2÷¼¸s·'5þö 1ys^Äc®O&µºû Ì+PÉ—ó40ÁI³¡§À/ݘú(8ÇÃŒª˜ù —dÕJ×÷݈u†ÿôMG¥¾ÜeŽ ¥%tÕ\PP;›H£CWFÎðÂW ò·T]ˆläL“Ýü¦8€o ŒEÉŽÔí{“/ (–€b¿Lä‚ï´«ìåŠö¬®¬²×Ìm@T¸Ô;-^HîHx¬É²ä4i°`C©,p‘w L¤œCÅ™*“êª:sÄU¸ydh:Í6âǬeÆ PØÊ¨ÉW гhÍ´sÚ˜4, ¤Ë"Ó3”鬣Z©°„‘‘,–-— ¸ˆ¤“ëÌ\Œ»¾œ—EØ¥`âÉ+ÜÜo T,Ge·~Š´0Ù¥¿ó} h˜§Ä¿~âv;ÊÛûV[æ7K(ÞÓ$EWÖ®w=O$V¡l/1­lëdéeo^·—qÚŽ íeÛ´Ÿyþy{·ÌÁ” [­íT][«õŽ^zÈb½8Ųw^>~F$ñqzù¢šÉ Êùý¦ÿ+Ù}"wÃÅ_œ³¥P‚íQ0§j-›´Ê¨µáÜ ŸëJ~£˜+vî§½oz}RŽQlÊ—K†.” xÆpüzˆÌ‰/3N3V¹[:ÉŒ»†*/* Ï8:9ìŠãXÞózÜ;:@²ŒÃ|•ldLÃÔS‚…:Ï~çaÖh 2¦¸PÞæDd=5I#g¼FÓ…3&ä »Llã >’›|;Cû·”ß'$?+wy‹²3Ã~ã!ònÞ²‚„åLni¸™Q~vÚgšº”’þPìC´s!üüPKV}z=¦`®Né[ 3crystalspace-glshader-cg/mk/autoconf/packageinfo.m4UT dÇïLó´Mux êêµVïoÛ6ýÿ‡$ìMuÓ$ÛP¤-ªz²£Ö¿ Û- à h‰Ž¹J¢!Rμ¿~”dÇmÚ5@*uä=ïÞ=êäõ“>µZ³ð3»å"]Êfr ž 3©h)3R\k‘ÞÒ-OyÆb2ëH¦¤W¼ruHåኘ¢”%œXцgJÈ´@Kódw;±ÎäšÝ2Í @BZZ \óˆö¹@xÏ»˜gzKKsÕ¬¯%×ÛLÜ®4Õ[ó³³ Zl¯Ö+Þe,OéUÂô¿üí¼ÕŒø›‡ü]o/!òT­DÊé•*Go«A(›¡LÞØíñŒWBQ,€žm ÃeÆ9)¹Ôw,ãW´•9…,¥ŒGBéL,rVhs¨çÈg"#±„Ÿ.Àò4â™ÍæY¢H.íK§?¡n¹E§Ìü0_Ä´+Bž*nÒ½6µBÚÛÎø¶M<£2jKlÁ4ŠqE\`>«ŠCçÕn%¤Cˆ¯Î´9BVàɵñl ø-Å(Ðιù­lì+~…*b`¤áNÄ1-8åŠ/óØ!¬,€>ùãëÁdLnJŸÜ pûãé–ë•Ì5ñ /ÀD²Ž°q¸Œ¥àÎÐó‚Ö5Ö»ïü®?ž–¡gÔöÇ}o4¢ö —†n0ö[“®Ðp #¯I4âü^ UY_Ú"¯×LÄj—‡)Ê®jÑŠm8Êr±A ŒB0ïÇ [À±X¢éÌéá¶Ïð‰%¥R;t— ÓDò»%w 0? ›ýþÇoh¥ÈÝ Ô-–,2™îí¹tvþââ¥C“‘kôÄ"S;yö¤éæÑÍÐm}p;žßoê³î ßé»=oîЬ5N¿s=ÆøzÐó†X5oÔNŽFmE¤¦”²,±‰²u½'i`F_꒵ƾ´£BÍL=M›[ƒaRÖ_¦ñEOA´?‡ ¤' òI¤‘¼S;±°.Z³œCŽ݆Å9W¦‡”„ª–ü1JÿRÔ+ñ-C´ÝÌÂB4Í'O¾ÛºùÓkOúõÙaæNÍmVšnª’¼>ž¾˜ÛÉjnW"3yþÅdU33w9Ôî'QÈëùãCËØ ,]¼zÅÿÑUÌ8`M®ÌÕhy“É0ËJ¨ýËp³áNµ7äþ¾DïÝ^kÐoû›a0zÁxj” =÷ƒ×ö»ÞÎŽf>º[ x¢ô&ewf¡ÎAÍÔgCŽ uÕoúü£Ûx¤óulXí/ÍÁŠÈŒ\K³œGÎ7BÁ p6‚cQ-(L\ˆkä`!b¡·ŽQ¥{ fkØ­¸YÓñß,9vÌ„aÿw÷²‡ÄãõØ| ¸}•”½×JÞá’ÈÈö˜mµÂ¤½¤€²Â7š ÷TˆþEE£ŸÜ"_’¬ê“› ˆVqö=TIÚé¡a~Äÿ£ŒüAÿ¢²ý8ÊhøýÎÈÞÄ48>íݤxÃA0><°>ó¾üŸ>d|4âîâ¸xßøhÄæ@XYÖò¦ë ëjžäòFã I¡êhU•/”®ƒ˜_¸lö×Ù³—Íù¯Í_Nç ¼7Í4oaõÝóù¡ *BcÇ)^ÄX;š™îµ÷ñ}[7²oòpaÿ/ç ë™(=¾ˆo¸1)D\C–úÙ!·Uj,F¦F&J@Ùùzõlßü죽µŽUÑsÍ4Üû Tþ>{Lol5j47f!›_«Aê¨Fõ·‡![&YšD:;Z÷¤Üˆí;;,¦-œQ€˜pgMžÒAHµCóâÉXkÐ_EÀ¼ÑŸnoä5û£v«ü¤ƒÿŠ«·=°8\1Ç‘ÿŽw1jözW½ò0¦« |#ÆýÏqþªî±yä,f  MhkjÑ 'ELñ+•M}yˆß™'-WNø=h$] ‰€bc¾¥ï½¹dJCbìX‘¸oN Uj P(|Î|‰!BêÝûb¢ÑW¹fÆÙ´úøöiî§Á w.f.•A©åÍ+U]·ï.^ìƒÍH¶9ZB¼T¯Ÿ˜óøäàœAë5=D±œ4a<ÊL1Zµç¸Il´ùö‹Æª¿9ðØ\c½Ì± ž3ó[Ì?›aÀéìk槯¼bhø%˜uÁÉvÎH÷1&:`ÉLÅ^7Ǥ1+«í–Û´è)˜{·™c¡ŒüžLóGê©¥—BÞaëÞV–.®•5I¯Ç`t™^u^ëêûwú𠏤ü)+²Í‹A—ÉTú±V‡ °{L³ÊÔì!«Á8[h×Ö>?‡Ç¯F!fä¤<­ƒ§) ²Môö° ¥§Ø AUÛí[„¶ENi)̦›[ûˆíi^sn+%Úb»“»†–(×ÛÚ%|aL´{Mx½w´ò¶&‘ó—)£.¡Ý½µ%»+É-ÓÞ1–r»åú–2‹Å—:3(ÖˆY蟴/Û…cÿ:-Š=ÊÕîÆ³OðþtÝN³¼Â©|2‡B‘X[ UÉJjïË—<ŸÅŽN¸^dNà˜ÏtÅ夽n½ãÛÊ)ýmB¾©óPKV}z=$9kʯ™ 1crystalspace-glshader-cg/mk/autoconf/makecache.m4UT dÇïLó´Mux êê­Vksâ6ý~ÅÈèš%»Ûé¦éÔa͆.›n†a„-cMl‰‘dXþ}¯üy°écâÉddY÷Ü×¹G4 %w4 AL;é;ø¯Oû‡6Ø™à‘y©5®_õ©5 '¶É6±†f¯Õ½¸¸„õÉð2®bÆ)ü¢ÊÕoÕ"@¤¿Ö€3 [K"€ËHR JDzO$½‚ƒÈ $ ™Ò’­3Mi <üQHHEÈ"´ÓXÆC*AÇ4•©å/ŸÇ3–.>SN%IÀÍÖ :dåŠQ°5;*¦!fQÀÛ¾‰Ç+ã¾@D3Á¯€2ü.aG¥ÂwèVÞJH 0¾&Ñ&Yà‰­±laðHˆ>w¾WcÒ!0žÃÇb‹éÅŒeس$5…LÑ(K,À“Ð×;™ù`çðÕžNí±?¿Âã:™º£K· ClLN®&‡‘3íÝâyûf0øó2t ý?v<ú“)ØàÚSЛ í)¸³©;ñœ€Gé?¼@«ªå-ĺ†T–¨û:̱í CMBˆÉŽbûÊv(I÷ï[À‘DðMž=š+|,.´{ÉWZ¼Ør«ð cÁ‡ŸÞÈ(ö[Ý#éZ²pƒË‘ Ý·—?[0óì<¡Wž;»·r§ÎÔù£¹èvÞX¶jµFûUÌÓ§ß4äÚ XÂy·P’"–ж҇„ÂV"¥fTu yii‚%VûjH‹`¦¨8XHÕ‘Œ¬Ñ0P« j¥ÑWÑùž·Ù_œþ`è¬l×uÆŸš¾ó—ߪ5Îìí–òÌÙªO@±Ye9Bøg˜‚ãe¢FsD6H«žÝ»½Çn=÷Š•}äÖ•ôýVè'O\gêÏ›_œ¹ÚÙcÁbâúƒÉØ[>¨Aö¢°–€^R¨£ \Fõ—¢D”±Š4MI[Ñ-‘ÄH êŸ6Èwô°2T°YãøèRV;bŽ ’y§)Ó…!Çøù‰${†ãV¨ºÁ!Ê…)!Âh™d‘M” q€7×å–1ŹbžRnx‘iD²Dãy;a(Ö†‹õŒãå2ã†$õêè£Ý£ƒë¨Ð4Á—˜¦g}Ä[“àG>4eÙâįsÚ[F$T õıdݾ/"áÍT+*´ÅÑ1*Î7–ÙáP/­ç=P*Kiˆü ]麩nÞLÔ½ˆJÊŠwY~ÛÜwµš$e嵠ߦIá¼9¹ùÝk•žÖ¨g*“¹´á¬jQíH’ÑBmoåx=Ûu•ý#ÖÇ‚¾Ïº°‡Cãe‰=Z/J×Âpp“/—-CÜ'DÇ[ÉùM³Û#Ç0{À±>†f~«°MGi¢3eb.uù4+¦oðf@™93Ÿ9I¿3ŒðxË0Ló_Y·V¼k ¹¶ðÞßPKV}z=Wý°16G 0crystalspace-glshader-cg/mk/autoconf/language.m4UT dÇïLó´Mux êêµVaoâFý|üŠÉÜš¤w×Vi«ú\HP Imè5E-öVZïZ»kýõµMB¢\ï*å,!y½3ogÞ¼™å“«’­°—¿…ÿýt¿éBPZ•(™¹EëèçW}ZGªb§ùjm¡zç§§?Àr}͈KiÖ\"üdš·_÷/‰ê%*ÿ¥uDôLÖÜ€àKÍôè5Óˆ`Tf·LãìT “ 1åÆj¾,-·Àdú­Ò«”gägk°R¦¨Á®,ê܀ʪÅåx £æˆK”¨™€Ûr)(ÐOPf p_ÌSÊ¢†s¾OÜÄEG0Ë•¼ä´¯aƒÚÐÎ÷§5>P|f] ºÆS…óô(øÕÖ>:÷>ÅÆcÒ)pYÁ¯UAé­ ˜hØr!`‰PÌJáYÖ@‡“«›é‚ñ| ¢(Oî.ÈÜ®Ui7Xƒñ¼œ°)9ͤݹ®ûQxEöÁ‡áh8¹kB×0NÆý8†ÁMÜÑdNGA·Óèö&î÷bÄÏ^£íYϪ¯)ZÆ…yàáŽÊn(T‘šmÊŸ ßP  Ý—¶†cBÉU•=¹=2|<©¬[ÍIWVýgÉýl(“žï¿×Ì6TêåKÍÓ½^pz~öÝ>Lã Jè•û.·Q?êÿÑ™÷Þ½Ÿ{­ÖQ÷U×Úñb-â«ÅˆfP'ˆ.½Ã⥣`|Ù||óœ ¦£A³ßñ*yRý$©ÞhŸ´¦ÉÙµïÛ YÕQ$n í¢M8†Ë«=ªZ¥SrË–«ƒ´xoI?Lð}‰ ­Všå9} ˆý5=*¥&7cúÏRœ…''sz‰†Rpáý}Ûo""”*&'Tsžr•“&²+ж›ÛJ¬ËZÿ #qW±öV­U aú°>¢×ÇÈnZ-c`VÇ•jºY›ÔîS¬È–kWØûŽŠGÓ;‡=MëqåŒJq ‹DÚÁÐÄ^læÄþDÚ;N"ÞÊ‹ ê{HBAÏLjÙa+++-ÅädeaUI\õXàm:ˆ]$- _¨yñwh# ,øã<¾©Ä¸:äõ"mYü²^BÆ>}Ù.ö‰ÃböɡQÉzì¶SÖ|‡¶$þN3<,bŸ¼´Is=è ]Yà´KÄÍÉ6°T•·½ø!9lð*ï[¹Ø{‡ÇI­Jð$äe"äÇÌõ÷Y˜L½õ6ÞÑ83F‚Í|º|yx}¾¹P'ß+_g>ûFS@¥Šo5fÓ‰˜`e£¿†c‰M·8z6²Ë.Mªœ»t¿õ’Û>­”æLP2à(t3ѧӇÉ p¥Ø~xH&¼R@ÀYHS,£a;æïS:¼Ýs /ã|28ËçgªySùzSÙéãôïédó2y~SûÖ¬ToÎjÍùF™ðp¨Oƒ(<ä½ÁþÍ“Š™¾ßdnÖ’ãPKV}z=3Ï{ʹQ 3crystalspace-glshader-cg/mk/autoconf/headercache.m4UT dÇïLó´Mux êê­UoâFý;|ŠQH%Sšp?ª6m×1«\czE¡Å^ã•ì]´»&Ç·ï¬×nš„´= +RÖ°óæÍ›7CrJR*’ätP¾‡¯{.¿½·Ò"<3/îÏ'}:]ðÄî Ù6×àx½áÕÕ;ØÀ—,YÅUÎ8…ŸTsºm‰$¢ü¥ÓE|âœ)(ØFyMæ0nR|¢œJR@Xm $:f åŠQ°3Ÿ¨œ¦X……3±#ÃgÖð‘ÀD3Áo€2ü^žJ…ï0l³5}@~ѦiñÄÎDöü ¢Ÿ‚o©ñTt Œ×ð¹Øay9£ ¬(`C¡R4«Š>àM ô9ˆï§óÜÉ>»QäNâÅ ^×¹¨4Ð=µ`¬Ü ±±8I¸>˜üÈ»Çûî¯Á8ˆ u £ žø³Œ¦¸ºQxó±A8ÂéÌÌ(ýÁ-Z«zV·uM©&¬Pë°À¶+¤Z¤“=Åö'”í‘(M÷ÿkáH!ø¶®Þ¾–º’¡¯´ø×–÷-XÀ“A>~ÿˆRàî±Õ)7’¥[<>¸p5¼~÷Cæ3·.èÄsçzë0ò#ÿwg9|ø¸êu:ÝË“>XgL¿h¨7d$aCo˜ny—J Ý”ff¾wí(5£j`ÜK›ÔXil¬q-¢Uq²Ð«{"Ù @¢Öv½­5¦²÷fë{߽󣵆þäΉý?ã^§{æîv”§`n¶Mòšíh?´;²™ü36ÁÙ2”1q ÒÚs½{¿Åî½Ì‰¢>KJz¬-ú‘´ÓÐâ…ó›¿èÃòw<÷Wx˜†q0ÌVÿ¨Ÿ qQóÆü˜¥„ó¶ uìùQ®Ò² lx}ˆÜV%åÚÐ%Ó¸húæk»H»Xç͉B˜º—õÞÈÌæxÅâ| õZ’$¡;mï¡:\áB£<Á{V£¨w(­3KŽÂÑ3oø{×3ÛÌ^xd¸,Ø–G½Ô·\8Q0ö'îƒoä 8nÍ*Ñ&aƶ¥‰®”Ñ¥™óãl…Ûâ¦Aמe¬ œ”otž÷·¡aÚ{âaÄy¿óGó‰³|9Æ&G½½|>]æÞÅõª‡^:ÖXó5ZëÙ¯…³†^õ;¯;ËÛo~¼mÌrq½\•ï×,Û“ÂY^ .Øý&¾Uú5Û¦o“ý PKV}z=­ŒûØ ô%,crystalspace-glshader-cg/mk/autoconf/emit.m4UT dÇïLó´Mux êêÍZùsÛÆþÙú+vhÍ”lH&–í\n:…(PfC‘ ¤*GÀ¥¸c`°€Tõ¯ï÷Þ..ŠTìÄÊ”{pì¾}ç÷ø¥•v7oÄïúuþÚN–Æ~­èæèåŸõwôRôâíC¢nשhöZ'_}õºƒ¾7ÂM”/¦Y¤×*’âoÚ^ý#¿ðã®oþ~ôTð›­•¡ºI¼äAàr•H)t¼Jï½D¾q&|/‰ ”Nu“¥R¨TxQðeœˆM¨ö¥†X2éZŠT&-âßœæbh8—‘L¼P\f7!*_FZ O‹-=Ñk@ CŽöö‰Ÿ©åGôcá¥*ŽÞ ©ð>w2Ѹ'ùi–d[€¿¦—’‰¡oig Ì?ˆÐKËÍÝCÚ(…„Š˜ü:ÞB¼5C ÷* Å™–«,l ¬4„~ÌÞç3ጮÄ/ÎdâŒfWï°<]ÇY*ä4ÄÔf*Іp‰¥$Ã…;é½Çzçt0Ì®,ë‰èf#w:ýñD8âҙ̽ùЙˆËùäržá¼ñ¥;™]5t¯Úâgg8wÛbA fî¤3¾œ Æ£é5å ËgFgû~ù~ðò…#²T… ¸Ê"Ÿ´-î×Ê_ÃëïâR#f)h`&øCœl-°ô%s*i¶ %•PÁº¼Jn¶ MÁGhz+¢J/ [`‰Høn@ç¦Ro=_Ú²ÝÊ ÷Þ•ŽÞ“Cn6^GË­—x§‘ JäÃ=ØÔVoµ’~  I Ø@šÃqOÁ†ñ=1dp´øï ’õ6Rÿ•Á÷¸#Í×EKàîq³”¤’tUFö&©!+/ ÓV×R²÷ â„ HÙ¨oä a”Ú¡ní4Æ“GGÒÞ>Þxþ„R@šÚ"’nØÐmÚ°O£$LŒÔacÜ»‰ïdU™d®–mÓ“H4jÜ6ØLZgKÖíŒñ6žŸ@Þ‘«32’&ßÿ§sÑúƒóÂõ€Ø‹WÎn0t‹7mk^¨êCÖa®ý4ƒ¢RO AØuÉ´x2…Ï öX¸Ö`%*|ÅìéAû+XÀ¯ cÁÒ uŒ³}¹¥i‰øX+è?W²—ÜBQJ‘ļ—„ª†ØBi¹ž`±?Ë(´NŠ­*òÃ,¢á!P¢ ÑÆU |ºª·Öáp 3bºE ±ÇtôVúj@bŸ™f(fG-“Æo¹ƒ¾15. ¤&xp¤¨ÃN:Zý‡žYý<áNAPߎںŸŠögn>j.öC2–Áty±ǯ˜Oøß7v9oÙ¼YZs`Õ[z¿×Ý®[•M8Æ=½\Z±—Vlì}Ý^#µ8‰CìÔH5ú)}XªõÔ2ÁR èæZðõò&Sa°$hZÞyáã“¿{ü ¤f“Á˜ôgÒ w÷âÔLß.—¨¥š‹š/°N_Wuzü¦Ðøc¢ôô-«óÅbé ávŽÌÅ ŒÂ gºô› ä'`6<óñ! 7ŸÆUkg'ù‡ZaE³.ã'Ê*‚(§õØìqþ€HŸ"–ýCnyº#¾Îv¢ª‚ÎGpÿ³¹µ3¬!å£P¯y垨ÈòøÕ⺢KŠÄÊ-ø_,Ú××­×bŽŸ¿´›¸ÓùpÖì9½÷nçgÁ‡â²?øW»^ŸMÊ‚+‘ŽÉÍHa[ïGC«Ù¢6¡x6œ.© Áã;å¡§ÛP곸nR^q*09P>Ê'mZ:‡íIIÙ—2 dÈ`lhY+ÙDI.—lÚ J «Œ$]çgg0tN‡®øAòÿ¯¸ÐÝß[\|fÏ;”ÉŒæÁR…ƒÆññ«†1ZŽ™ûSÜIicŠ{^/ù_ WëèÅ›ðÒãWÖ>‰À°F wº„_à]%÷g…73Ö¼@ßîœ#åVœ߀›¡3:Ÿãe™;”¤ômûš>§G—A¿3q{ãóÑàßîÙÁƯ²z4žÕvìv„@CôJFèÄî*.®ûê¨cElåMUÀ¦=Ô6 rÀ":`DêîzkéЦ\”œ THu.E}IµÓy‡âåíži£ ÒØËÇ jUOae¸iøtµ!6Rkï–Êÿ š×k†Â÷°XÜy‰ònÐØæµº†˜•äl¢ìi·ŸH5¢¸aE$¥½÷ži¦J`È £XÙw* GÙäÎ;o-üDrÌ¥5Ùiâ:3w9›_]V² ‰ .‰UoŠs@Â*¡ 7“.˜¼gQªBV5Mi“Oôc‘A"9ÜâS2iC:±ÊžÖ™Ð¤LÁf`Yó0l¤[d¢å€ðõ8«}ñ7ž¶‘yO_¨Bf'Z†B0“å*ô+à[­‡’5$¿‘6ÄÇ$ âæé´!'z։̢ #¹;“8P¨PSIUz¼¿hÑ@wß(«-E•ivzöQ) :‚?È¤ÖøîéW³hCr¤ú9z§&Ÿ³'loÅÍ-óíínãx¸¹¥Ãí-[†ô.Âpð–‘Ð6–ŽÄ>H®´¾€rí{EÒ‡¹²áÏ«l&5ÅÀ^¤¯w´¯‹¾ö‰úà­IÍfÇ×EþŽÒ:tü ï?þöÙÓrÙ8Ãf-ßÑ0 ?#¡1”N D*';E=  vᵨ:Ûš©>ϳc ’¡d+h¯˜ú•»€†XÁׯä ’oYÇ÷òŽ’G R¡[>;­0ÈCÈJ“À„ôš¸Q¿ÛDšá”Á“dÁíªF1 –î¥ZBÑ@„ˆ¼/w¬DI|ϷǶµ…Ï„šŠ815ñ˜*Ä•IžtyÍ kÇa£&~üó;qh-¼%\Ý æãTMîñòÚ¯ß|ÿö/5q;ðøB_9ù¼¦Óoõ[¯ŒÞ4ÞýxW=>>©ÕÊïÝz~»{Ùó[×筋ʨuÝ[ý»š]Ýtê½_½O8üäèBR¶Q¶Ãœ‹(»G¤ÎáкŠáà9Û.÷&b•¡m_ÂùØ€(¶Ï I~F¼S B¤x'E#ÔNìTE01žˆp&ÃöBCkŠ“$‘¦‡d=¬$ÞÇ‹TjŽP£ÙÉHt¤Îk‚q$éì˜^ø¤¸OŠûVO…ÀA\¼XIý‚Ž£½È¶!ùÏLjJÌõ‰~dïôD±" OàÓ ‹Ì™H4‚_“*XIÒãä‡ÊQ{*œ™)ýi²T0UŽe«dclËÚDQòHç÷ÐQ™È…ŒYŸlË/5ä6[°Džc)³ª²mZI:±Zªx™<`#¤ Hÿü¶Ý¹@ÀõnZýá§JÕf‘Óõ4çd DQ2áU¾$‘¦8Ž“sD™/ä\™ä6«»Ýæ‰ýÖà¶3¬T_’g=Aû6K°7±vãå?½JÒãdãI£yÙñ®´hPJÅ4 îõæªN±*RñCiMóú¢ñ±Ý½€jô†Ÿ ®ò3…OïüoÍÞͧ†÷¯ÝñÎ;­m=h·[D’ño„dnw§}~~yqx³{Þ,©6O'»÷p ;Û ·®Òê\<Œ¢0÷Nk"Dˆ©±¤”£y;”)¹–Ñ[´JÄ$Û´h=•Tí&ë(mUS+q˜æ˜‘L2<¬‰Ì >—{÷H¡b¯­ vÇ«èÎXc¤‹ÛX}®ÙGÍÁK‘<Æv`¨ÀÈ„€èèÆK“G—¨ŒeàÝbÖh3³« ‘„Œ¦§<ª Ò£Z‚dr’Ζ_@ÌRÎ3¤ g85µp%€­xÆÕ«!nÒä7ÂüëU«ü)Y™Î#ÉYÖú8¸…«´²—J‰!À{c9¥ŠËØdS½„_ÖH "ÚBDÇÓ ò×'¹œ%0Êk¥ºʆ%2œ¦ÈfÍYð@S®¶dW ZáÈY{‚ šgºØ§-اÄvk€¥ºBH—Ò V‰bçî%E\@¤Ûc2ÞÓ•a^HCmèšó βoN*`‰40ŒÏ*pHX¯ÛªP/*d½¤ÄF•iPûú¦Óºnˆ Û½®èö†­‡r1›œ;2˽ÆîGT‡Å"Zå¥ÌÀK5–©YQéSH[ÑLW(­Ä AÈ×Àå`8°¬*~ûFx7mK̶Kø†­°v’ÐÑŸRXäz1Ú(L¤=o#û÷ø(ç%`~ï†ÃëX-ª%ùˆ0@äœÎmüD+¶'ÓÏœ²åÕ¿ÂÕ=jø«ª8;ƒàWUü¢§8¡ù¡ÕüÕ·µÔšÏŽ+½]¥ìzÖ‚ì.}X~òà‡\ƒé>*.•Ÿ{àf´â Îî<{vÄg‹ÝÏÕX—ö9ÅžÐè.7™Žþ•:ïªôçø[´#OEù¡¶äƒŒT »»]= &ê°ú p9ïi¬¢î3 ˜Sµ0h/- wÏ•k±Î¤I´ÆÍÿ¡ÿ(øYãéÚPМ ö±ÛˆP™³¬…f.DX¸^8,$,­Íb`§Î+ÛuŸøKnl‘3¤œ“–™ ·b¶Ù·ŸDAŽÛ¬%È‹úKÍÔ,ßVÑ9ŠÉ-V¿%³}\E Ž ¦íg-ï¢ÕB²•)8·ñ½C¶íãd-êzpeŵ»W•˜+OœìÝC½¶ÛoñÄš ½':Ì Õ/ë͹"éÊ'—¢ÔÅÈûÿtýü_MÑV¨>Õì/ºú…c òӇѪxrsyý«ö¤1!9ðC«sã†}6êSy_T+mˆ³mL@yBbŠÉöç@¦Y)ÄÎÀylæM9 ò¬«íÊ&²L‡OŠvx0¢ÏìtË¡Õþ¼‡h+'Nâ:Þ\4xý©mø;—u«u®¸®⎵¬>¿Fù¸]q4·¶”ÚJqC i@è˜ó{f§ëºÉñ7áÁ‰Ñ‚Bhfº$‡6Òi¬C Pe8‹“(¹_唕AÙŠÙ&›¶}^ ×Ú¯¯9S³¬ç…ÜÜ9+n_xì‚Úp½gÂlle“àx kæåîç®ÊM r¸x¼?=œG›@ã&.£'¨¡Ûð<aÞù„œ\ïçHÆF&͹ijüa\Ï4:M ¯³HRε“£mØ(ñ?¸”ñ%óJVT/wu7Ù"¯¸ÉÖ3Þ.ÃØÝ¥×9±}‚Òæ¢7tpó1Úîæc{Z—z,^œº•/ÊmÊ!EwFs{úŠgx~ÆS¶()Zzýe'Ü}³hßigJ|Ùk’õöeý²wÛ½Øü¤Ò}LÙÐú<Éã1½S¼n$²3y #ÎULv©˜ã^H˘±ÕA[§ÇóªYÌsí±Šiü§ó¹sk-ð«É¥¤ÁÅ<ˆÕ"‹lÄùY†™)ꇭO¶4ّѾ‰ºåêñ¡9úÿÑhüž-cáp§¿['óiòÎv)BÉ }dÆJRÛAÜHFš :'¹c±†NQ$À„›gÒþýÍwm[××Ü—GûÚcˆ Ò4–2¶ ûèõ»à|å}½Øì|”ÞÓõðÆ›}"Ú éèâ"qãG¹ñõ¥•°È'Äüå7É¡^ ðmRr¾æãâšp­ŸøL#Ù64›k;¶ÕÉ\–8'k“âËoè\Œ‰CyÁŸ ‡hê4MæEb;–é>½Ã}í-×Ïs™¸2•'7'Gße:ýGðü>•m¢±{Ïòâ‘S„‚ƒ‰xz’®Ü‰¥ÝµgEX’ B†rB‰+` raÔœ`Œ"’ÙÖ‚o‰¼›,Œ¤Ñ&´§É}gh;€äƒé;€½¶Ób®´&,šÒüw5Ò' ΡÖÃ6êì‚Ó,éÂÚÝR~6ð>ŜŠ‹àö`;ï Ã,†ã+ˆ“9ŒLÛ’PÙÞ,V)#HL–Ò:3(4+ç^`‘àLˆ´ü²˜ÐJ¢¯rzÀ€ü_/ŽôB†jº"#Ô;kÏóìÖl\‰ Aà›/h®’Ð )Jß “Ç唜AŸ#:’héò'[ûºêL~ãñn¹þîÐ/|ìÓÿÖ¨Œà‰¼EíxÝ+ª,W}ïº28¢ ­åÏXÓ˜ýrG•šÀIÅÊTªg¥N`ß_”föØ£]Û­vë!íZ?®9•‘šßÔhÕnzQ†Ê¢cþ¢;Ñ-^‰ `j¸¯„¦·¥ëáݪñ §•×µ×Õ| Dzo{ÓʢƋ˜+î¥ñl¼òã`.±p-!¦Õïô@ïÝHÃ<ú”Ô^×64ˆ¹ ÷ö[Þ°åo°HÝíOà™Ñ:ºñ¦´{ÓÇû¦¹ùyïÃèɇ4ìµ³å=;{z:D¨xoDÉ.1Ù 1*‚ÿÙQ7M‚ ùô-SâPKV}z=—€SbÙN0crystalspace-glshader-cg/mk/autoconf/diagnose.m4UT dÇïLó´Mux êê­T]oÚ0}.¿âJô&`-];Mݦeih#µÀ’°®BUå87ÄZ°3Û¡âßïš@Yö%Õ‘¿îñ¹÷œ›6d‚-¤28X¾ÿýW}ðj«¸’¹[´Ú^t´Úà«j­Å¢°Ðñ»Ã££H×hÁ!®¥)„Dxo¶³O» W®–[m ‘Â@)RÍôhškD0*·Lã9¬U œIИ cµHk‹ ,0™½V–*9ÅÙ¬–j°‚E½4 òÍâr<ƒëí—(Q³¦uZÑkÁQf r;¦ÀŒ²hà\ìÈñ‰·|`¤è f…’瀂Î5¬PZÃp÷Ú²įìKA7xªr‘]"¿†’Ù}ðàwÕØ'øBU”^AÀT†GQ–"ÔóºìÝl€nÃäj2KÀßÁ­EÞ8¹;§ë¶Pµ\a&–U)›’ÓLÚµËá&ˆü+ºï}¯ÃänK]Ã(LÆAÃhS/JBvíE0EÓI bÄ¿¼AÛU=ßHHuÍÐ2Qš§:ܑ솨–l…$?G±"¢ 8™îß…màX©äb“=…í+|"©lµ _YõGÉ{ X(ù goOá†ÞФöÙ2Õ"[Ðôƃ£áñÉ»Ìbo“Ð ÷ç?L£ ¾tæÃÁéÙ}·Õj÷_t¸ÖŽn⡠Š&Qgóí_±…Ó$œŒ{0¾…I?N¼dƒöGÂH²•@É‘êɪŠüí&¾{¨.<‚dæ•úŽÆúž<ÄÞ× ã€RÌ#Xª´¤šSÄp-*ë ÆV»=θ;iL²dßi^§Ô(©4öÝ|£ÜÓŸÀý Å¢Ö;HÈ™q}¨iwI“å !p¥Év®óÜA¥UZâ²cvpFw›³œ¼K˜ƒתsŒfãÎüW=î{-çÃù³Úm¶ž•z~x|OBﻤÐOPKV}z=ó›æÕ n'5crystalspace-glshader-cg/mk/autoconf/cs_check_host.m4UT dÇïLó´Mux êê½YmsÚHþlÿŠ9âJ 9‰w³ÉeZYÈ·Xgû(—jÌZH”F³·÷߯{FïvR•]oÕ¤™îž~yú™æEë»þ¾ m²`Å=F–¾ÉÚ¥áÜV!sü…Çÿ`32§+îr&þIÆh’kîÍü­h’+êþÜh Éð×»€/–!©woÞœ¶àÉtGÌ€;dyb‰z~ñ§_’ޝ9þêóá £%ÄåÓ€;çcDøópKö‰ìüˆ8Ô#›q|…ŒðPovâdåÏøö…JXäÍX@Â%#xNAü¹ürÙ“n¬â’y, .DS ír‡y‚*ÈŸˆ%x`ºSâpïÚ3Œí!>¨ !÷½O„qx |'ïm±È&ûê4Ä#Jž¿Æ 0~GÀõÙfmŸ7²CÏ÷¤ø¥¿†ã-A0¸aË]—L‰›Gn“ÀJ%èº3úÒˆÞ»%׺eé½Ñí'X.ý($lÔ0¾ZC¨gP/Üá®LËøëõóN·3ºMÈEgÔ3‡CrÑ·ˆNº5êã®n‘ÁØô‡&dѱg®¤%^ŸË‚_g,¤Ü©n!ìLugdI7 Âï0¾C)q ó¾>°Ju}o!OÛ2"|Nÿ†ºƒPe¨TG6œª±%JÅ9©‘Î<ùŒQöW<€læ}çaNãû|Üé¶m°i`Z£Ûzã *›ÓÈ””Áý<ãw®.Ý°ÛæÅ¸WŸ<ª²»æ!š;%–ùÛ¸c™uülè½~¯cè]¹*Pú¢NŽÒJãÞa|X2™tøÝä´õñîÃû×Nnðß»FÞ«g˜‡Ÿ>¥[Öþ–kçuqQü4¿P¬iP^&Ÿå­øZ”Öà£üê®—´´F>ÃE4X•ßAZç¶—Þfnˆ×0AÃý™tVÓ‡öÈ—ꓣܚ»FMnÛ“+“rBß5IaNGK\&—¾ƒÿüå°½²Ef‹ÔO!  ú_ò]r¿]óQeú"wÔ¦„ÊWväz®„aa*+¯ ž ¥']#6€QÐ|á0ƒ®>vqe{›fáÉu§wú.³+ÿêJ7úɪÖ:=³:z~%ðR¼5$@AÁnÖVQ!˜!Ä»‘ª¡Aãdð ã@w2ç¥ü:ƒLâ± ©8ôOùÏKTuu Nß-§rª5\ƒ×«Â’ôÍhðX]ö¬€Üû·i ÁçžnÝîSTRñ‚˜p9Ù]BÃ\!ùðÝhiè^1sðß–Ëï™ö”/"Xõ”äûƒœQÔs¡(®Çˆľ+ZžÀä‚(d><8˜´e%’-R¸®áÊ EêtAƒ¼‘¶@ãè\Ô'!ƒërëR;ªÌ™š’¹'Ÿ¤ÀW‰DlxxÖ¯2ãkl–¡@tHcAê\K0«ñ=„Jòç)EkOc¨îÂ…U_ÙûÃB#.+z²?+:«ûµìUþû7úÊz¯jøçؘ’˜Ë„hKüÍß ùœÇÔ:Å6àÿ53x¹Înh“7î-•ÔgoÜ úÃ-‹gáÖ‡m@É L}O["RÀC€¶'Wø¡ ¼!Ãìþ¿PÆ*i­Þ×[g;à+ÛÜM‹{ÿ>a!U: º$ˆt­-õ ù¹ |!ZªëbŮЇ#~´XÆ-YË@AnB:Wƒ®yeöFú¨Óï‘^d“ùü½Õȼó[ÄûK~ÒÞ(>áº`MÀVþNö³:Á§ '¹ÏÚòsæ¼í’ÃmÓ¡Þü^p8ÊŒ%[O|–7BÊÝŒrypŸÍ®j±X+6‘#,Ø7lÿšÌ\À‘!Že`A*kÉèŒMpÆ<H*…Ý|sñ‚'Ƚçoe¦ørÌ7CŸl¯üàOUf!ÀsÒÁŠ $*¤à¼¬ _ÙÐÝ­ó~oØ÷Ú¶K‰xè‡qò 'É1 Á ³,™>Ü—¦¬Ö¡ô€Ÿº³`Zb‹:´– ë;è!qU¾Ç²b“9& g¼V'Ͷ|üQ&+~9ÕN³°â@Šá|ÆAýÅzzQ–SLÃ:|sçü`]ÅǤny@¡åŒd0Àbýh¾`rJD^ìðÜ`Ææ„9\¯9ëu­)K!á½ P9å„2òPŽ Ó»¹jC° ^Cž“Èj™eA8ÊÉÅ\=‘÷¼m<žßض>€ª³méÛ¾ì üSû˜^7‹“Ïâ4 JÎ}R0öÝø|¦„‰™}rú°“cÐáµ0u2Ãæ>òx0``ãIo#UXmêmÓª7Jæ¨ÉÌÕØ{…ÔS)¹§®6"óRsR0+‚}¸ÄæcCå‰IˆÎÜ–*ïß¿’¢W¶ª*ªŽ4Çê_Ú†wæÊ—77ØQã× C*Á@B&º `;én9]Lª¹˜ Ìfê a›”ÐUjHÈÀŠ:¾­ •—žz>>)OÜ’©—ÂÏÜ©YÒhR㢫_%¯‰?¡€n[~Éáè²4Óæ²R7#ˆ]¨©_SÔH-V†ŽÍÿÁsÓ5£5ètMKKíIç Kw•pú¼wž½É¨©C ²‘Û³Û+GoËÈmõƒ­¸”ÄÎ,òºe|‘—o~úá}“¬×ľŒ²¶“ <'¹üÕÄìþ R›Ýí¤³>Xƨ³¬Ohà,Q|µ}“–|Oðÿä®±_‡ŠzBPZ\ìDàC­”OBZ+Õ•Zñoö­÷ÎðO IíGvÆZ÷ïŒË7¶®Ýf Ì­Á²æ#Vñ¯r½¦$¬@Š ‹!nÎ/_Êf,Cè°S訑Èæ]XÕš‘ZÙ¸ZÒÞÓâµeÑîì8³sjïd G+R"ÀEý¸ÀCp¶U·.m³§Ÿw¤ëZJW¸¾˜Ý=YRz«¥0¥UµZúR)}ªÔ“ ¾5‡HGFVèˆ%,O¼©¦¯½~CöÉJgž)Cá¸É.º7!rU;’•å*¯«‰lŽˆ=NK2y[¦bsÒµˆžNU~Ñ$#‘¥‚E!sE¥‘=¸RƒÝq*ŠS%¡òiAF\­ "i_UÅü”Ûf¥¯žâ_Å>V¦[ßàŒ´_æÍ¾N_Ü&ŸÖøŒ¿Qg÷yÏ8=¯PÊÿPKV}z=\ýò*4/crystalspace-glshader-cg/mk/autoconf/crystal.m4UT dÇïLó´Mux êê½iwÚHò³ùõ0;Æ àØ9ö%ï[°Ã ‡á$^ìG„hŒÖBbÔ’vgþûVu·DK›œ$!¢êº¯Ö.ØÁ’‡–[›¿€/ÿTŸTÁˆBßö½)ý(ìž|×Oaêþb87³Êõý£gÏ^Âx ÍÀ±ÁŒ<>s<¿rõôÏøÁök¶?ÿGaàg0s8¸Î8°‚%àã4` ¸? ï­€ÃÒÀ¶<ØÄáaàŒ£‚åMüæþÄ™â¾P‹¼ œ1Y0çàOųî´ÕgÌcåÂy4vѶc33°8,h„ÏØ©àhï)ác*|àÔÇ#¬Ðñ½c`ÎpÇŽ¿á(>M¬âW¶B"!ðüíÜGä—àZájsm7VDOÀñø™¿@òfÙpï¸.ŒDœM#·¸Rúмë] Àè^£ß7ºƒËc\Îü(vÇ$0g¾p„Ä–.‰†N³_‡ë·­vkp©Pà´5è6MN{}0àÜèZõ‹¶Ñ‡ó‹þyÏlÖLÆa¸„s}*Dˆ|°Ðr\žðáÅÎUw3뎡ømæÜ!¢بtÛ V‚³\ß»Ô㶇Á™‚燸ԫÐPä ¬åÙµ ¼úûKèXœƒq‡¢®[óqàLnð±cÀ³£Ãç¯+pa‚ ïlwF}tÞoö›ÿ*j/_]ï/S2 ÝÅ’…/=[ÒksÔ±Ú¬01š°)Ú_yhóÑÜñFJ÷hØŠÜðºÃÃÚkWØ­~×â7ª›#ãâ¬ÓìFçÆàYÒÕ÷FŸCxô®r^Æd +œ‘?ðç ¦cñÜYc]1€Z²íº—qµ~Ì”ºïùQ•‡KÜC@Qü<\m2\îƒ5™pØ;ÞÁðhL]ëÎøv¡c^šR6àlaV(\&”Á‘ÙDÏ` z}áÿë×VÇ pÓÞñ^ Ldz¥3 (`97šž=cö-Ü3ð¡¬ðQÜp$9 ˜@ÇunYFòBèКJß¹t˜‹çè#Ô¥PÀ8š'<((³NH#8û#Bp—5è‘ß¿w¸˜LXiñªƒŒàØŽ—f>G>éL!ŽÉhv7÷Oö“ßbl‰3OJøu ôtuœš'¶Ü#TJ’Méè&~j }’5'¨BÝ^¿c´[ÿnŽš·ÍF£Ù(Kɲëý@|bö̇ÕbøˆE~pU®]í¿9¸ºÂ¿‡ÅOk@Rˆ[V@bMÌ~†kJ[:,’W(žÐsF±Š9˜Ó'^œ—Ù·š8@;ÏB™ Ê§„P¤pRãÇR<Œ[vaÞÿÆÈ'[†kòÍ •¬$A£kÞ,åocS¼J‘åŒIv¥X¢±ãzŸþüˆ(k®²)éÚÊÃFÓDgר¾oöÍV¯K4õ>U[§ÕÓÞE·q]IÜùºv%K»½A¼†Ê…6ªíÖ[ó¡ý½sÚo´åBŒQ;uòK\¬.St0–ÍTÈ ¤2 cáaÉ­ ñãf›W¥‡Cg*·åú¾‚—Ì‚æ‘9PôÁX­rÓ’bP…–x›—JŸ\©•¸û âÁëÛ–{ * NØ“ð1‡kÎhˆfH˜gR މЮéTThžæ„PÒEàßÖ¦”Û‰x ÖZw8B1!Åù³Íǘ£+ÇB!rBš&t>/ü@zä$òs’A¬"½îiël4èõÚIXïVÛxÛn®†”îTô­§mãÌ\-!ù®~µºõöE£9j´ú‚ÚÆ¼Ø‚H¶$Y2^ñȶ1^q%œµM(NÛ÷–Œï%â_1•èrCJ4¬2rƒ!±ÀqŒŠžÅÚü“’ò`Ïó7ƒPØ|.%)³ ið³) ±²…4j‰xJ9‚’;B‘’_iþý̱g0pâ°ÀØŠª)ÑAMLkÄ‘Zùó…ã"vÒ†¼[|Ää†'¤lêbj&ë¡´$3Rj‹AÁª” oAAI©óЍ\Ìa#ÞIÕ1÷0 È2•¬ R¦‘ BàC"ÉÚ'øªŠDÔâ:U[cbo KHD‹:OZ­Ðɺ+ÈYÉÒr]©!•š9D ¦p¡cG®EQŠ8äŠÚHÓɲL’Å‚ƒEú‚á—'ÎL+ñ/%-„sÁeU'g²ø#mö&r=Âî H=À8§¢”V¢ßnīԓæPSŠ?0¡Ïp*©7úg#ªÛ©B«¢¹LÏqïšíó‘9è·ºgåaµJÅ]5YwÃÃÊð´õ·í ¥Ž/¥ÏÎQJ€Ç²2v¤§½*I¸…ápd|/#ˆØC•-4¿c2@Ç) N(á g¸­XØaÂyÇfJ剤«¦r¼A”â0: ÈÂIÉ&+Í.©01ŠÍf.1ô·š,Ûb¸!¦ˆ"`=l!9ÂØa„'.‘n¥vʪH†Ë¦IÙâLÿ$ø‘‚Î\ã בÐ3™ ’¢ŠØ¹õ_z ¬ üUIEAB.Ã8Vµfg«jcm:9‘õ<á„IýáueSU¿_@ÑPÁhŒeÉÉpïª<|V}}-¾ž\í_Õ2µ'{×ú‰Õ¸"XÇdU”R'Èò@D”~  #„,Hg7EBŽ0Ñ‹UÖ$XEyÐÉÞ^!§ç fEÖ¬ie6±VËDvLFsòìü5™…¤]E¢îTqîƒÉ°Ö„Sá¨oêÜÅ ‹•æcí²¢Jç9žîŒÔ¿%‘‡Š[®ëßcyî%é¸è–¹ŽCÕÙl³0òúœQ»7cЫÃIÉÓª-eCüàÌ [?˜°àQQ ± ±Èÿ·N²é°KC€(è–*›6“ rµRÖ¢‹…ÿ4rø(ò$Êhòh˰¶þGh׺õå¸TÙp(ÜýpëÆ Œ À…ËÇ?…Cj_©´µ³V}®m»\™—K0z'ç<õz<´¦fsâòNZréåÛ6´6Xª FÌ©ËlžºIB«·$$Â*9©¦„ªrȘPO]?(íÔ¤å?˜u‹Û »Ðf7–½|C™Åaí™Lê-cˆ«zÖ\Ï£ k]ÍÇ ¿Œ qê¼"ŠÌñ‹¨²§7'ù+ by1êL|­›’¬«²Ú¡kÑX°è(´nãBÓeh^ X’ˆËìݲm?¢B[ÜÑÍ“ý WpWÏEirAsÞïÅ](d“^v?P7§7E¨Võ(ìlããþ×µ×Ö^‹WñÉ­(G¤½Ð/Ï'>FÙx‹³pbµÜì:t"_` ‡þ"Ä1N XYu™—d\y¦ª–’¬v¤°VÛ?%4&…*M€¶ñ“Ü–ÂbõRG ™îžvD,om÷§B¦õGõ/º™Û’òJöçϲû¤AÑ¥nÁ£@shMÆ phŽg»ªœl‚™îðläºÆ ü´êæ¹¾Õ3tì*¦ÞúRÙ_x”fսаj~lÖ·ÝÍ>3;™¸¹-ŒÐ÷]®ÙèÐDÇ'c(¢¥«ïÊztEe:Ei;ðË/ ÆSMbbZ\â Þ^´ÚòÐɶdTBöVöÝHŒt °Rô¹m£{&œJßèÄZ²«´~µ9_rôµÙ?äœ>¡{<Àa€5G²Âæ¦ù{+¨£ÿó¢Åi7gðX3mS@~ ~ýŠ)ZŠÇqg‰î7As4¸8§®M¦-‡Ž ÿ¦"[,õ§O€5é<( Éëáš9C¤™ÒÑÆž¸pË8 ‘ïeï2£ÂÒÒCºi§g”§uûHϤÔ^N•ž#~ЛÙ%uÔšýò°Óê¶:¯»„ûæ[¸¼k¸FÒxo-ûöÞ &™È}`-Ô‹§«ºÜËÅýùúF>/©Ý»á¦SDyRÐ!Š¿^Ð×K©ò?^ÖÛ yƒ,sD—•nî]ªïÝ1ÏÕÚÒŠï^(÷r¼;ÿVÜ_!ÇÍ‹·æçÅÞǯ3F®_ >| ¸\^þ<-ú õ)$ Zwz¹³±üóæ”ÓΛRR]ŸÐ¸ø06›A¬’”Üiuñ‘7¥¹VaIë+tû³ŒmÔì´ßæV·tªY³Û P4ûßj˜Œ^!È»s|ÜÓ—ñŒ-íZÝTÂ#ÇÐ ˆvèèo ÔÖ±©e±©e°©e°©m¦–ƦBw– f‡Î£ætÄå; ŠÏôzƒ|’·Ïs˰¤ÄR¼Böd÷oFG¹˜îaü\‚¸Æ©Žñ;ê,žÏT”lÖ\2C^ga}ËoÅÛŒ(žP]àÑ®dÒRÐ!®ûDƒ\Ã̧ ñ]¹<˜fe›]Þßãß“‰3Ôë²Iÿíis%Ô¾ÆGŽò tM²z®š|õ8ÄÊW ´¡-$óz½ÍööÚvé¶Ú¬;q Bfx @oŸÇÏ/ÁK‹ ¨ôè`ô0¡ÁÉ o(M4HÙñW*‰O¿î»I—ó,NSfUD=ÿiá ½Ò7E¯¯ ^ÙÄÿ7k^UoóØ0~´ Þk]x?µ @Öå9(©EüSe˜ „¸ÿPKËv$>QEp3Ô:0crystalspace-glshader-cg/mk/autoconf/compiler.m4UT &#Mó´Mux êêÅ[{wÛ¸±ÿ[þ¸ŒÏ±´åMv{{öºîYE‘ÝʲªGc×7‡ “Ä E²i[iûÝïÌ$A½¬l“Ö=ÝH$0˜÷ü0€^17ZÆ~ ’ÖòGöÅöw6kgiäFá ¿½ºøšG¯X'ŠW‰?_¤¬Þi¼ùþûløÏOìaź‰ï²qÊ… ö©?ýœp£ÈöÇm4pú5O? ö6áYÈþ°Ä/??à_¶<³`üM¾do’ƒ³D&£YúÄqÎVQÆ\²Dx¾Lÿ!KóSÆCï,JØ2òüÌK±,ôDÂÒ…`©H–’E3úr5˜²¾^âJ„"áfˆ×÷]JÁ¸d1>‘ áóŠνD~ÆšvÁ<õ£ðœ Þ'ìQ$¾³7ùjšd“už¢‰¢Å8³̯XÀÓrrk—6J¡=æ‡D~Å Þƒžü `‚eR̲ É`¤"ô¡7y3°öàŽ}hFíÁä‹(K™xŠ˜¿Œhƒp ÓÊpÝuÞÃøöÛ^¿7¹Ó¬'ì²7tÇcvy3bm6l&½Î´ß±át4¼w[Œ…xAáŠZ®õ™ôꉔû,ôpf—Àjà±`~WøÀ(‡pŠW‡V‘ãAÎIz˜Vjøœù3Fi“=%>øUí5ySë…n«Éþû÷¿—’µÁÔ¾|H|o¯Ûìû7¯ø©É¦ã6 ôu#öè•ý5ÿ@¦w". ˆjí`h±Îéi‘·$=‘"M}Pâ,àsIfêŒáèæÊét”^àOQ’¤ÅN™øktË? Ñ JÕöë\öÛWcPßpHŸÔÚ%=>úI.E˜²Gžøü!²¥Ã„|æGèÔ¾Ús"aß@‰–¸FAK­U¨q9„M‘]O¤1Û3ž 2 ÄŸøJÄi‘÷(”R‰^ò` e„ø!(ª\åË€Nø&P ˜Ú‹I°ó ®dšd.¶4‡$Õ™8’äŒ6äyiÒ”½)êÃ^§‘'‰™àié>&âoæôY-XÀSPìRÉBÀ¢™Þˆƒl¨ ¤¸„űèÓwÁ‘†ê ­Ö®ç–5+Óó3`:×,E‡ùW RÁ¿?ÞB®ñ«Î¦÷æßš¬ß\MÛW?ï{cçj0^ÕÚi*–qŠ6›L™O€LÙt¨²5èäZº óï矋Òl˜C¦B§d˜ú˜k…ær¾TÂ><·C ®åsÑ]Òh Ü*oáu˜BrƒX¸þ –¦Â“ó{‚œäÜ‚ öfÈ$àá5™ÒR]ÁÅOVBž Ñ“0:ÑÐV2P_­6½ª!ßÀ6TbrPO`¿ÒÑG««’jUõ²Ce¦‚ï#;Kî&]-x,uºjž/!V,Έ,!v/Á5›«vY°Bªè©‰ =õ3—ü²#ý¢¹°Éìø –ÌÂDdWPÆe”•|¦­f6õNáA¤*0ÔE‚A X0WæL]ÄmtÒæ .q%^ò“ÅQ¸U9ÔŒú®w Àïº;˜´'–ØàfÒ‡¯jc’‰ µk`ÑãeRéÜ0ò—[AP—±²H“ø‚ÙÅ®†¶-`RX·®`©N;Œ#h²—}ò¥ u«’¸ÚŒË’à*z uùácD:‡”>9P{Š l(û)ÐöQî˱X¬Xeó9YiØ5‰žý%Ï+üvÕÕÀv”‘9(©‰2pô…„)Ü VÅÞª*° fFIs‚èD«¢Gˆ¶¡M„–ëry9=ÅÙÌ~øg˜eƒBRK)Zw§ÉáÀ/ O!Må=ïN§ eÕ„Zrœ·ýö_¡¤:—íñ¨(bäM7²0&-àB}(ŒÀÚK:¹€Ô’7Õ> Ú@¹@kàXÙ“ÐPëÔBiæžD@XºØqGEZÏV“™Œª§1±ö¤³‰Ò£ÍmñC™‹Ò†ò¨À 3½¨lX¬N+,¢'ž‚,Á8j¸KJå Sx öNÅsÚÔÏY. QýY,Mx(ñÜ<Ø‚bÔŸ¾» ¼Šf'-‚|UEùyèÒ"@«AÞ_þƹRæôVýÞDMÖòGGïPåüˆ2Œ(± Alìí7©ú9~ó±qq…­­ƒF–Á}üº¨ó/†ã7TËWî¦~(µCHâàÐüÿw èíÑ1ÈÕ¼ ÷ §­+òSREóþ´mÿþyæöç Zå[#ŸTo‚ŸÆ¿É)5…¨…µÛ*Ì€¯àsJãi'@'Çûåø5³½lëÆ/ ±ây%“e{j÷v@;âaÔiÍk.YÕCásZT'„xñ‹pÛOœýƒ!²Ãɳÿk±³ùÉ—+Êé÷Æ“5‘¶òô¥j:œð‹J:?§¯ØVÜÏ¥~¶…t¾â>ªóÎB¿7øÔ–IB¾ŠéT³3ß?âé:VÀ-ÔÝ&`‹ð7QR´nøPãß®ìÓ±ÑóÈý€ë*ªÊ ů¾9¤.(áú°Ê¹ ÕA)€ZE-RY‰äc_© XK­1”ZõùнRµ='+Ý,Z„ÍÆþ;5ozC Íß`ÕT“¨/¥TÄ[ƉÞJëscɆýéUo ™:§ç/QˆŠ=å&…Öt ñ#ÚØ‚2mW˜ê‘æÛZñÖBh˜Ut½±%»U%¹msi«S‚b‰è?êÜAoæf¬\¡Ä]m©ÚE ÁP²êr§;IóµÕEÝÊh·]pŸWÌ5ÛȹF—Ž>Av6F¯¼¾PéÝ="¾$NÍ® n9‹9lÂÝ,àI~eâb53„·uÍæâÞ†àQmwF &D˜ÝwÚClÜÕu§ºXÿ…NÃl„a"ÅFŸ3¹¹éë÷ýw8+ð^Bi¸ =†ÔØÃ`]¿ì\êHÎÛ•º¼Ñ”;ÓÞ°%z‹Ïák§Â¤¦è锦ky; 2Å4„AiÂnóú];Žƒr Êêè¹q$q²Òä(1ÊFÞЃØz†bÂÄ ‰Õ®º·Dû]s? A%ÖÎ5E m-PÁ¶!î‡à]€ñD€Ëã³dæºðȬÛÆgØ»À]>nl šO<¡¡…[îü2?›üE¯xbÏ¢/ƒÑ•+ûƒHˆ¬^v‚ØÓ!p—Q**„!0!ÐpØ“Eì ö©ø9îÕ‡¬ˆyb­C¥•¨úDÁ¡êÄÁS<ÂÎÏv[Uÿ\?±Ë5†E‡î„·Öö¤4£Fåá²v§IlonæMò=VÉø8ÁΗ#V°æ¨ŠqôˆMwßæåªÂ¾Måµ9/Ú2>lX*z¹ñ£ugߢJ­DµÂKJ¤Q…8›Šü45©æ,ŠxòôgTLœ‹ûZu÷aMO~˜¥è›y}BtÑU=ÏÆ¨–-™=£þÐñq ß+‰ØÚ²Ø7ÞÐEêÔ ‚H5Uªt*¸OE8G’¼@÷hÎpZ=¸&T×ÉÅ…•gA먦?]X¨ÏŸ ÉCYÒ`ЇâÒíÕQ”ZÊϨ}]KÝç$»Ø½Píƒa¯¡do’¬V¬3,[6 àÈWÈûª†ìvjȨ;Þ ÆÝK¨(cÓYvÛ~G´øÊÀV­Ü%Ú£+§;h¿E/Þ"“dá÷ÝþÐOFtDfÛ"D„bã´V§à¬x9ÁXÁÄ7ÔÐÔl¨ã!ýR8E$]èöwáüù•^ê×¹ˆE¨jNTuJ™ÈÔu ‰ÝuÇ­¢Ó9%J‰Ð,%óúcòM[æ³ÿº`VYyp˜xI§¤Þ`:éõÇÎçõï× -í7¹ð4{_„ªwk•ÂP¼/K]“Tµ ¯/ئ ¶5ÕV6ó\­‚¼NóŽf‡Ñ—ñfÂê=ì™d‰Câ­8=,Œ›6[#ÂxÿBLTFnD…ñ¶r×ÁmURžÌqõeÞ;w‹;8Uÿ5^¼äÁ&Šï1©)ΆE·¦Yc•rÐËšªl£éÌ÷…ã]tÌÖUÇw;xþ4.fЬÜl²õ%~ ¹lîyx•ÃæxA}«ÿl·Ë¶Ýp¤-£*õeþCÔMÍ!jU?Ú2à%ÚFsݯv¤°mÂæ^[}ÑͶ)|§»UsÞ7¼ƒ¦Bîzpãtî®>ôxðN~h6Nì%d?w5øKf/¼c¼êå?¡(.¬™žj–pïWÜ¿T¶m"|Äöä(Á+ÁJÀ ±oÇÚK™fégåL/E`,Öe,)’&EÖ¼Y}wƒ§É,kü ß-ϳÆÁó^W)/Ð’Ö`l½Ébcr‚äj§s9žý„÷­wèÏûÐ Ü`ìø> &X0µ¼ÀµgC˃éÌ›N|Çð)ýIÁk´CÕ“ŠB¬kLa™<Öái—jCJJŠôG”•(•÷߉­áHÆóU•=š*|,œ«.lC])þ¯”wk07Ì.|þíFDJ°J¤Ú&ë¥`ñ ·# ®ú׿þÞ…™oU }póYv8õÏù˘÷͛ϋN³Ùî}èÒýí‡ö“c g4Z“Éð›ô¹3rƒÀñÐq»aë9¥ËP”jγ”fŒT©Ííååv»5õ(ãbuÙѪ&%’M–5QðHQ»u\Áô)D2ŒÊpCE¢¶TivZ;*[Ú›¦iC¢²B KDÀF‰8v»@3”V+ç-¬Lrm,+‹7n‚Àsœé9YëH65²W×…R¨„ (ËöÆFð• k={°KþB‘};ôg~`tPþnûÚ F%‹µjÑâuÈ[Rµö1bü–ëbú¡¶fîð+’<™:^ðlT5«Ƶˆ÷^ôHà¢y\·î5"•$+è!:ÏcÚh„ÇÀ'AÂ4 –¬+DZÀh¡ŠY‚(G7uù°U‡Õà-ºfª¥CÅÊO“¸À”iBŠ ÇZêé÷jzÅæ‡‹©ùê fccþ¾˜ݦnéÓ Œ÷Ñ7æópÑ…¹Öà è'ª]ß´üÐsE¥‚^­3}³…09ú³-D©‘Œ¹n‡®Ø7…†ü»¸µeÁA¼Ù8Nf£1¯à¡7º8¶Wß¼¾¾À“ÃÁíí4+VÈiÂ\9ï/:´ñÆÑ=’ôç9GƒNSó6µ‚§C*Ñèx«&Ð^§~ö¦EïááüN…©ZÇüÞ‘ÅÉÏÙqWÿ1Ô½ J0œLw2¶†ÆüìzÑé,ª_óPKV}z=`b3IZ0crystalspace-glshader-cg/mk/autoconf/checkstl.m4UT dÇïLó´Mux êê­UmoÛ6þýŠ< ö*{©»v[ÝS;æÈž$£ à%Ê"J‘I)ð¿ßQrb·h÷„Dòx÷ð^ž£z4ý¬ •?ÃÿÇàÕF¦Rävãô~ÑáôÀ—ÕA±}a ïÆWWo†øùv˜*–B\ ]0Aáƒ>®þxZ¤r”ÊòÚé! ޤ`8Û)¢€Ë\Q Zææ‘(:ƒ¬!%͘6ŠíjC "ûI*(eÆr´3X-2ªÀ U¥™·›Ûpóã·TPE8,ëGGç,¥BS *+ÑÍ0ŠÎÚά?ñјI¼‚&Å(Ãs U÷0~ºíéú×'Ɔ :%*ƒ„"ÑñÏÕê#îÀ2œ4Xx²ãtAŽ„Àdcž/°‘Ù QÌžAª·i³Å²á“h­45¶Z—ª/í[ð¬©Ñö\y›æœìµû–…ÖòËœ«Ž(•¬jë2r®ª”¬ßP~hm¾Ê‡õˆ‰F~¦6AÐrêÊ÷|òÒmù&»wä){?¤œâ”µ."Æ7²}~é‹9v3­Âþúœ×± p’}\ó›þÚ¶q{ ëó`Qýy²{á-Rvqy÷}碅X÷˜Hyá¢$Õu'=Éì«'ö× Ñék“½ªÚEwî2a®¡œ@9ÚÑ=ýÁd³´×Z_vúáuûãÉÀùPKV}z=¢ © D$3crystalspace-glshader-cg/mk/autoconf/checkpython.m4UT dÇïLó´Mux êêÅZysÛÆÿ[ú¯&k²ä$m£(Sš¢dN(‘å‘Äe40.Å­A€ƒC“æ»÷÷v$xÉvGj96Mìñî> "ü³y:‰Bgú5}Ù§òç U³4ò£pÌûçÏúÙ? Z4›Çòn’’]+¾~ý¦‚¯¿ÒpNõXúÔÍÂd"CAß'æ×ßó~äøÑô‡ý@Á§7‘ r{ñœðs AI4N¼XœÑ<ÊÈ÷BŠÅH&i,‡Y*H¦ä…£ã(¦i4’cÜK5°,‰˜Ò‰ TÄÓ„¢±z¸ºéSÓ ¸¡ˆ½€ÚÙ0¡Mé‹0ä%4ã•d"FàBƒã»—LO×ÐC—Px©ŒÂ3û1Ý‹8Á3æØ È2>ÛK™…XËf|³âçxéò²³KK¦G$C~ÍÀÞ€!†4”%bœeÂI èçFï]«ß£êÍ{ú¹ÚéTozïÏp•¥$î…&§³@6˜‹½03×õNíÎWß6šÞ{CzL—ÞM½Û¥ËV‡ªÔ®vzZ¿YíP»ßi·ºu‡¨+Ä'®¡åR+B®#‘z2Hrxµ' 5ÑÄ»P¿/ä=õȇå}¾b58/ˆÂ;Å=®-%|FrLa”–é!–°«4zRåe ¬úN™¾ýË7tí% Uï¡êš7Ært‡Ÿ×Uz}zòæoeêw«Š¡gv¾jÍmwêú?ìÁ©óÍ··¥ýýƒÊ³~Ø¿»ní]½ö£Û~Cº±õëF¯WïÜ–iнø±¢6+õËj¿ÙãE68;ÄT¦CÀf(öÆBPn}³†Ý·ýFóÂíÔ»P«]âx>ƒ‘³¬")L™2?µ*l¡òâ€ßeS¦N‰¶¶©ÙîÄcZÐ:ŸÇò‘•mÄ#pj޶üóg3õ€oÄTŽ¢ôŒÒùLú^ÌÉrFA`qô²œ$²J‡XÁjÔv!Ÿ)ŽB·êIK¦RáÙmÅ$d¢ È£ÕÙ²ø†Æj"®6Í[àwy'YLÅT+ÌØ¦¡²4T–ÎHŒ½,Hýé#@µ<8…sŽN E]BJüXªäÄ¢ÏLdÆ@lòoò˜£D prØå<ÅV‚ËÙÌú(âØÊЬ’v¸èL E+;\'FI(ÊÙÞ Õp¡˜‚‡jƒ€Xù–‰M¤PD÷r´ܪY·;­v½Ó{os feï°zû:†X ï±*1"NIøm„‹„‰ã ÿ"ö.g‹+ÈŠÓ¥èÞ 2öWm@Š ‘ĈÁ8t ߨ`c•Ë]ž]¨Fl@H»$ {‚è5Œõ™ˆS)T(*F>·Z¾#ºmÞòü4ƒ¡‚u©l8ÕŸªfõm³N¶¾QÌ~„˜º„k¯^qr5q2Žî\ÿñÑ•w!Š&—‹w¡Þ\0< ¬v®\ö{ ½Ôì1)ïêͶÛíu7Wö R¹~íʱ=8<½-Lè0¿ ¥Ae …l¿#Â÷ÒáAÎÞŽkÅù7Ø×>{[*æ«]·qiR‘¤Tù¬C˜'Evaá¼€™–¨iFü £¹-åRX»×j5»ö W å")åÂÒåA~`¡“mÞ´€28\üRÌy¸ÛR±ªÚ™'às“Ílêë}õ©ÅUÆéOçÄ¡ðâ”’9ê ºÏèW(m†Ÿ©YqþÉОz3Ïeu fW†ãh0øîôö¶T¶«tt[úÀ:Zt¹2á‡+”Ó@ÿÕ<%нu™p¢š-г¢LTQ‘Œ>nfè%âÜÒ/ò‡¥OšíD± ÛÕÞ;~z]m6þY_‘)‹/—+÷mYÊ ÄÆm¸\‘¯UiXôjÛ)çN¤9í2ômín¢¬Ã-« Ïá'C†µ¯áÐ…ÊÊÛ³Ä8Ck ©NM)¤¨¤tÿƒ<~\´§SnÿsH€Hœÿ¬8j—¾6ÖŽ5·V9¿oþŽœ€jïc@ÑåcIõЫ[È öÏ2E ªúMÉ@’8õ¼êú„ž˜£×哪ÂMþÒ„{gdÜ®§alG¡WÙõÑ‘>à®%%·Ùx{ÑèØƒ]7ÙMö[dùJäëFXiý¤ânJØ»•øsš>ôBÉvúã(0ýbNV[äŠç5^{—õêŸ.Ú1ÛW]«¤¼Í*½²Èz¥ èqâgAè¾ï®9Úà/oòv&¥çfªÛ*RóÁ³‘Ž €s²f{s»a?y¬à‡Oеj)yÊ:çrfK*;GaPRÅÕþÞé銆\¸gª{5î4>ÚIìç[MPtçÁ`˜0µ¤ZÆâmšôÑbsŠÞtÆ3 Ñôœ:§ŽW*3„Iô =J"@1ÁÙ`ã6!ð@¦n^|9E 0‹”‹pÌ4 Ó"¯ã ;ÈIDà(cŽƒ¥a¢ÕHAQë0 Ë,æÑ,OËtíù­îñ/tòÚyCI6ã'·dZhÎ8ë<å)çl(Z„ã\Œ¼ȇ>#®n¹áDJú"#vüÉq@·…'ã+ŠBQ 6PÉYÔÉÌãFða"ý M…&z¢DÞH ¦ h3å`8¦¸VØ»ó8/G`ˉfN]"'GM“ùt Œ"çãîàH.óØËÒhŠ'=;΋Ä£ð³TÍmæ!ïG5 ¶&¦]M©M'¸¼™]ªqNÅ&ORcS|£$1—j>mÐ…ªVªnY%žïG¬iœc`²ã9W3•aŽØfaÉõ^ÀÓ@x³ Cc{ , ÌB|8\w@:'嚦¢üD½»ì>WJÞ<jß7ÕïEoEgs4à\Ü|þ$Z‹9ý›ÐÊÓQrü«s||wô¡p¯P-šÕ#¡íÕÝ^¿Í­¦êeöMÈ/P»Ш²pÊ;:ë9q­ÇÈG¸¬<ž@õbÒ Vö^\–/Š®(Ɉ^V޹‹üoÄøBØ6¤¸ç˰-ñ­ аt4uî"Q…ߎeÈéI¹#ù,Á1ïÏOÍFõýÿ'©ÐÌäÄ,Ô¶è(TÖ°(àf[ ¸õúOg ”ÎÍêÍçš«NõÚ dèòä÷¦¢™üp«Î*²Ús·ÊTzüMØ¥3„5÷R†ù#ªI¶ |³7Ø:9^£‰c1ƒqw+ŽyöÖäe&f ugéµÂÈìè;´í³åN± [Ó ¿AÛ~Gµd³"5zTU7ä6WùåëÎ&Q¨ùÝX™ð¬ º}ÞÄÍåy€Å ¹Ø²ŒøOz~{ïf¸z¬¾amŠÐÃXüá UšOŸU ¼Ðûce;«/‘?ïÍ1Öò·Íüâè¢ÞîÔkð֋廓{eI0G'âÍùýëâ]Ê8 }î`Û霼4šéW#+$”h(Æü?67Ø«Ñz¢y¹ÂE,ü4˜¿ð˃ IåŠ_'rUd¾™ÜÛ?ž¨ÅS¥ÖÿPKV}z=C߀¥›4crystalspace-glshader-cg/mk/autoconf/checkpthread.m4UT dÇïLó´Mux êêÕXmsâFþŒEvmøe³¹J8§NÁ²Í-ƈ$[¬K‘¥ÁLVH”f„M]òßóÌŒLÖ®øöîø#ÍLwO÷ÓO÷°OÁ„Ÿfr’2?lL¿¦}êÕ:Ù™L‚$«‡½ýÓWýìíS+™-R~7‘dµ*'GGoëøzG· rRÐ ‹Å„ÇŒþ.òÑ?ŠA4‚dúýÞ>¤àãN¸ ˆß¦~º Ç)c$’±¼÷SÖ¤E’QàÇ”² ™òÛL2â’ü8‡¡>@ÞókÄùQßéÓcÛÊÃMâcŠY£û”W2ùÓ׌°v4jôÍßÞÑ•/Ùs„ºåOoSÞaxeÓÑÉñÛok4Øú@¯œ|vËëõ¾ó/ktÒx÷ÍMeoo¿þª•߯ué´Þ{=÷²ïØgÖ¨ïüÓi¹õ+{ð*÷K-ÅP:‚MÙ‘H u)Ï*_æshlÊb©=I"›Í’T ÈQ«Þ ‰€@#¯Iò)"=èˆ=H„[Dƒ,w5Á©àÄŒ…x+rIÝžÛùŽºìžz‰àH(­¾ T3‡g…‰FPq—ðøNÉIò” dTºæ€3¦WC®ÎQ¿÷‘„ã,¤6±}`¯ ‹"È™û)÷o#Fð‚¹'Â[ºC`R®¼`¢¬LY›òçHµˆ+±‰RŽ“rƒÚãµ)eIâBØVäãÈ¿JÎö\dæ´ÏŸ˜å·ÆÇ0¾·ñ ¤$1¸ƒ³80ˆGêAÔð›r© §Ã ðÍ ”3æp„r§‚ÎÀs®Ú®÷ðÝ9óúÎ`Øq­Š*3d‚@å-{ÊŠ¢¹Ô²Ìúv‚üô.S ‚ã•sCi@Úçv,4Þ{Ò+z›·SP¬ŠWÎ "5ÙÄþ”9øà!A£t?áÁ©vªCw<ÒáK™z*3†ÓËD;Ö€Ñ$5f¾ÌRÖИZŠÖ ›°•~¡^•òDõ®†®ó3œÚöíÅÜ;¦¼n¯±å6HzÂq ÉMè½Øy ìÆ…NLOëÛÔð4šL>*-ó™ ÑsB1$z^ˆ g+HqpÛWÎÙvxôëµÐ(l=Eˆ/ËÊYÛ!Yc÷ìZ£Í:|SÛS=È+Ð Û}ÇRã–ݽî¶[vÇ»¼¸¨ÏjQàã|…›Ñ>_{|<÷#ktp I%üTöJzí&fNãÄÌ4›{%,Uó•K‹4{[£µà¦F£-AJOIÙØ±»è\®/úö•…wú£}Qâ¦P´“ïóÉÕ”`S6A£¸šTªÒ}’~b©efú7éqeÖ’š1aôû¶Aë+2pæa3 ñxïâŲzâ[2ë ÖÖ訖«Ã°²¾•Ç\Zo0ÒkÏ…€Rš,ôt¥yS1ÞV©©kðMeékõÄè·t¶á†sÇv‡*ä;]Çô³¬¬Â´µÍ’É`Žn*wªÏk«ZŒ¶Wû©¬awÇö%„^ûÜé„>Øn‘N ‘>Æ7aÀî[u‚ƒ5©%Ai%ÚçNgàX/ÜY±?(?›ÐØ®oÔSMåǣ㮢®Ü¨¹Žç{D±~¶¹øyY¡Xý¼Å¨…tó}prú &‰öèmÆ£¢¤ßH±ùWâ°Qýhagµ[íU?VÕÃLJ_ý²Ü'ùpW3Iõ3M´7¸ö[ÎÎŦ»Ü=öRáÌÐV[ù2WÏvq…}o-Á[1÷:Ò7²ÆôÅ~½°WrÔx©Ê׺æ|²* Ü}ÕuÆ*$¯|¤›ª´h¶ƒ ICU]òÛ¦ÆÊDÉ/YHr/üåd\#’ÜEó¦“ôø?š¤¹Bë¨`ÞU2P‘ǧÚteËÛÇ_ÛÇíÚWªµ|ƒÜT;ëųÿGŒ¯¼ñª8_9å b}M©Â{YýÉ”ÿ×!Ž3dc3k»éÉC²YéTý+ÍGМFõ¨h-Ÿ¿”ꢴs}}­ƒ]¿|Ç3ŒÛ½5ðRí¶?PKV}z=1ä¿l1crystalspace-glshader-cg/mk/autoconf/checkprog.m4UT dÇïLó´Mux êêÝXmsÚFþ ¿bkøÇI§uÝ©B„MŠÁ‘ ©‡ñ0‡t ›èmîN8L§ÿ½»'ÞœÔnð4±>à{ÝÛ}žçVÖVÀ¹ÿ>“é¬Ã}ŸÆ °súi2¥N¹rº×§\Vš-¤˜…j­úÑ“'Ç0Y€#…^ž¨P$~UËÖ陼Ÿ6ý4þ­\Aø B¡ Éä°9•œƒJ§ú†I~‹4Ÿ% y ”–b’kBK‚ÃTBœbŠûta,O.A‡4—±‚tj:g½!t—Gœñ„KÁe>‰ÐÑ®ðy¢80¨EaŽö¶Éoé´S<‚i‘&'ÀÎK˜s©°G«Ó–&-@ÿjLS²°—f´³ŽÎ/ bz³¹ù946A c>L3 /DÃÈ"˜pȟ摸²0ô®38ï`÷®àíºvopu‚Ëu˜æøœÆDœEmcp’%zA1\8në×Û/;ÝÎàj麄vgÐs<Ú}l¸´ÝA§5ìÚ.\Ý˾ç4<ÎÿðÂÚ õ©¡q ¸f"Rk®v…®F„lΑ~Ÿ‹9:ÊÀGÑÝØÂ‹Òdf¢Çm„O@L!Iµ7R ®túEÊ­ÂX'ñ›¼øé9\0¥Àž#Õ-O¤fؼ°áÉÑÓg?[0ôlОïÝ_ºŽë¼©ŽšÏ_\×ËåJc¯Æé«ñD$ãŒéP>ey„Ê*µÒ8fÈV$bAšÄ £‰ ‚ BüdéT ®H²7¡ðõ4]Z´á“$P›Ô1! Ä÷—’+žhTqõ ®>Ì•<ŒRŸE‡è40©E$âYh´ÇxõhšN7z⸟k6‰¸²èŠ…VJIzÓÀCÈolbΘÊ46„/ãCMÎAq­E2kÒÙêfuh[$ï-³ø‚ù}ïðOÀØ ¯0F?LÄȘÿèÐDiEæÜ-o³oî«ø˜øÁÄZí"íÚ‚Ñm -XÆeAõ/%}$ìoê’@I-oÜ:wZ hûgµ·¶Û±_v ¨ëÚ¼µ»C§Ñi7ÚýaﺻèõÅàµEXŽˆŠÇu^;­ú[)y”Á8Þ_–eH ïÇÖõ¥1䨭"sŠ3‰ãÚÁ¤ÀòYŒ²0ù¿Å–’iV¤á]8ïŸXŒã•Óöj£["”…Fc¥þ˜P¡Œ€Ù1S·UŸfÕ#óûÌü£‘ GLç,ÂÏitm°Õí8½±kæê×uÚô‚/ïSxŸЏ‹¼Ç'ïžJð>•Â-AÇÄýƒÓ?è÷»[ìS÷ë˜7ñÑ=x7|´{ñþ•W¾0ù蘿ϕ/ øv¹_z¾û‚ÿÆýÆä#a~Ðxß„ÿ°¾Ï×ü–ÑÇFüÝnüß8õ{|Åoì=&Òïü‚ß„ÿR¾ÛûJÉ1,mH2_Ý<™ ™&DÌ™ôż"D-¹¤JîߦŒê_à !W‘ÌTòA;$&&I«ïÿe…M/2áS% ³`Á›‹M¹¢¨: …UÝAI®k°ªp<¤^v¢»Ží]çͰã:¸Ð^*Ë£%ö ï®W× -yãN»6Ò\i8¨"ŽTq6@b‹gLòà~8E Ik´sÅ)ΖKtÎéA•þŒ®Qƒ g~x«2ArÜ]¨@ÛÕÛžŽ®·7ÖÊ%þ!KeQ©y°ÏÑ—¥h7¨M)éLP • iCåYQHE8"æs£cE¡¡eÚ1ê2%3ª0&HfÅøZLÿkÚü}e$‘ÙP}ú*@ÖÿPKV}z=,6!Wi$ 0crystalspace-glshader-cg/mk/autoconf/checkpic.m4UT dÇïLó´Mux êê­VkoÛ6ýœüŠ‹¤@íÕöÚô1 Ù†©ªœslϸ EÙDeQ%%{ù÷;—’¤kÚ ˆ ’Hž{îë\“\)ù)ײ³~CÿûjÿЦ ,Œ4YÂ/‡Ç¿>éuxL¡Éo­^® j„Í“—/ßÒÍ-EVKš”™[éLÑ/®~ú}÷ MGšõo‡ÇÀ5]iG©¾±ÂÞ«9“[aÕ)Ýš’¤ÈȪX»Â꛲P¤ Yü£±´6±Np®¨ÀÊ,V–Š•¢BÙµ#“ø—³ÁŒúµ‰3•)+R•7)ˆöµT™S$åüÅ­T /*8>Ûe>“šu LˆB›ì””ƺ¥²ït²³VC¶ü¢`l…gr>Ùù[JEqw¸óX4Ig~er¸·0°ÕiJ7ŠJ§’2mvV@—½éùp6¥`pE—Áx ¦W§Ø^¬LYÚ¨ L¯óTÎY‘·ìÃE4ϱ?xßë÷¦W5uKÝÞtM&ÔŽ) Q0žöÂY?Óh6 'Q‡h¢Ôw^¡í¢žø"®±*„NÝ>WH»Õ4¦•Ø(¤_*½QAE÷ß[Á‰ÔdKï=ŽÝEø”tB™)Z´µuU˜o¦¼Uõ2ÙiÑ»ŸÞÒ…pŽ‚ RŠõÕñ½Ê5Ž7Œ—Šªÿœ“i3“á‹Ï›”öQ}í«D”iáv•š ïÏ‘t ¹Y`ÿr± äs㨄дU&Ðð²bA WÊëÞÇv‚õ眎Jq¤,Ý7[y¢—Y•;¢¡/òÍ ”mÌ'Ÿ’w|«]¥ jCcXÒÀã[¨€øJÉð‘¹RŠÞŨ]DÐ*ÞKØMxá`˜ù\Ó]¦÷î^¢rÌÖ5½{ä}ß…ð®Ì•MÒÒ”ìû§Ö,‘Ó>ªŽ€·áÊ` +„]* A1öµ ]¡ú`ìKµyÔB]îÕæ!‹JÌùmßBJ•sšñ±âV“± e1¸#ä‡íuèR_Vp­Bo`¶äØëvÄá»L¡õ­‘AÔý¸4$6Fǘž˜ÎÀd5ÝS‰µ€§®Ð’cö¬R ‰É“èTek®V9”g¥Îˆ¬º;ãìvûÁÙ¤åÃŽ-2éi'6Èw§( .æZõüÚ{ú¾æ•µÆ:L;¿ç¾AÖ’{’ÇÃñ¤Î ¸Iý]XÄL$ª½,…Emo1óSØu,8÷ƒ$ŒÈS’¹bQä ’[}/))0v«:[JyG”# ¶,4µ;ê(}è’Û—ŸG°Ú—~µóä:ŽQñ!êÎùz•öºü•˜ÍŸ½ÂêÁ|ýfQË >,¶žâukþˆÖì64¡ë ÍÈçQøÇâý¬×ÿ°ðéove¶>¬FŠÝyxÝdµ¢¥Ÿæ\ù_!ó8 ˜çíl|Óh1A!sß³¼HÞ î¯ýýÍ¿Ñïûúì»Î¤ú¦¶Áó˜Þ ù ·ùü€ôBùDªþäq÷Ö”9¤xè»Ï Æ|Á}'YÅs‡ГFÄJXq‚•@v#]°Ðš‡åØM×·½ÈᨀŸZ?Eyâ°‘|vÇUš)ËÖSà:\n+U ’öÂ’òM@­¢ì•‚³®‚åC±µpC*,ôÀ ÃI4Zâ(9¯«Ý&¶ÌÀ…‹‰vË£ÎY£ùm´Fª¥¨ôœ åLð¥‚n¡ Û‰ƒÈD¨XÈ …Ìt Ep{¦ØlÈ9¢Î·Ô=ò)±—%%VªHW`Ø*±K «bÉmw bJ²É˜ ¯ë#B»;8ÅU©+8"&úÛçL u¡lÄ,©Nº¦a°€¦³H„gq Ïà&\QK£OŸúŸ3°Œ2®@÷$âÎ| A•Î0m¨Ð¨ûÉ.ár“c‰FKq: ­§þ¬“"•„]*£~ÕÇÈõdêèðµzÚ¼e‚è¾Õ¦18,=ËN’¾­÷9JdÍÉ›€(„4¾i'¾8 É<àI¢;tYéŸAj/#Ÿ”.\¦–?ã9J"Tfú_è^†¶¯+ —Óù/lJ·Åh‘¼*UkIâÜmšiÁ¾´¾Å)…p@ÙD¸‘/Oß©™8œ¸¡4¶Eü8Q>TŠt[ÇÇpû§[ã_õ‰yß«Ošóâ\mÉõ49eêrTg¾¨õc ¼Kêv¡Û ÑÂÉZkx]/Õz½jÛ¨õ»•£Õº2j¿UnëÆu½_¦»éº~3ì”Æ¹#9_”+wÍÎu÷n0¹ÕÿãÎÎÖkWfê“8¥=…oÝ+£¥7uÖv6K£Ê}yguRë¶iÚQ»Ïç$Ù×ÑÙý>¿È­“OùHv<9ùT9¹ˆ­qSM>ð“󳓋¬rU¶\-²—yR `Š6ûõŒÈmw`>hS{÷T»Û™´šWƒCb=ó¶öˆÐøb˜·“Ñ¡=³ol¶µFêŒÒ8nmå<¢kv°¶Õ8´‹ÅÂønÎ5EФ«PKýDÐM'Ї²ß²¥³?(Ó–Š•ªÛ@Ó‡uúC*.ã-6¬¯Ç71›¡®S:]3oq9±•Ìå‡ÛÞ‹îcºl &Í›ÒXñdÕgG'³ŸHdkήx»+Ðu„Î(Œw]Ú£Œìˆ »NíZÍõö¥°Ž¶ËSÞ–w"‰µ˜$Cå%[sñJ`ù?_Và 3wþ­ÑøÁäùˆýt8ÆÑ¤vÓ2ƒïŠéuÏ‹òÚñ6¢ø€žÕÿ«fúËŸ%-Ö Ï±Èž°bä¨ù›^w~Miôz›-ˆ¡[oõ&³ßì4Jãj•†ðªÞÖ^iÈT ·G÷éû¬[˜ÌÙ}}P&&ˆ“R9!•—”Ú Äsí–JQ ü )­ ÌK¢CР zâ=©Íô_Õ#×@ÄåL6VµJ¯§ØÓ<ÌikÔ;«À£.ûüA¡Ñæ~MÀ÷÷‹÷Ì>°spð‰g£ï•ïô6añgü(¡Mi£×8a¨*P(öÒAá;¸ ±¬›taE°øV6PN¥\Px3$Ž$è9lf© åÕ(…}  J›ƒ”ÚÝæ€b¡°‡’,l8 Ò$Àè±ÃW¿G–ºv){Ml "'ü” ¬œldÙãEé i ʯJQ˜9I%L ¼|•C"M"Ã<‹¤&b[T’.{/,Çdòãéd´E'£?‰NFÿ:a™O†Už_c•Q àälWÈXáð\™tÒè¶ ÷Lò{îÞñæ}µÑ:ƒÞÓ4ÀFw–+­\  »0:tÇŽ^!¿´H(ÏI³¿á¦}Ö(åQRxˆ$|÷ƒ‚9œÞ±é—újó¦zÓv®õ@,uºf¼\ÞFÃ0Ï}úyLüYƒ¿1¦Ê±°çl’ŸóãñVßçbzájÉ m·ú$»uàÂ'¿A]í›]úÕb‰ýØ £@GƒË^؆ã„\£Uú˜½†¶{~»+ŸÓ¶ÜÝñ^ÞÑÍ™}%:ù¤þž§´þƒÇDs{N4ÿ¬Añµ¶¾ÖvQ¶íRÂ~ï‘N¾<Ó™z¨Ó±ltjñ]º=Žd†yh¤3_žéÌí¡N~ÿTgnu23×ÉÁÊZ^EÓ)ÅK“ü¾ÑîEñìlg¾m¸“É]óæINÆ£œù¶Y.7‹D›Ûkß oß ïà ú‹mŸÈŒ…ÿPKV}z=Súù”Ä 4crystalspace-glshader-cg/mk/autoconf/checklibtool.m4UT dÇïLó´Mux êê­VoâFý;|ŠD-T†\¸U/½S}Ô$¨(6ºF(²{·1»hw ¢Ÿ¾³kI®=)>]d{gÞÌ›y3¦QJ£‡Œ-´Ygõ¾ëjÿÔ7×"<1µÆ§W½j è‰õN²eª¡Ùkuß¼y‹x’Eàç\¥ŒSøU•w¿U7‘èDbõ¹Ö@¼‚”)@Ž’Èàm")%½%’^ÁNä’ÆLiɹ¦À4_ +³ýt–ó˜JÐ)MåJHìÃõhÃ2Ä5åT’ &ù"ÃD‡,¢\Q ÖæJiŒ, 8ãÛ7ùøe>Ђh&øP†ç6T*|†n­„tókm(ÈO¬g “ßAFôÁ¹óR5¤c`ܧbôRÆ2lY–Á‚B®h’g eôuÜŒg¸£;øêN§î(¸»BsŠ\ÝÐŒ­ÖCl$' ×;ÃáÖ›önÐÞý2‚»2u ýA0ò|úã)¸0q§Á 7ºS˜Ì¦“±ïu|Jÿ£àZUõĶëSMX¦öu¸Ã¶+L5‹!%Ší(Û`¢"ÝÿolG2Á—–=º*|,.´[ÉPWZ|³åN6àQÇ?¿‡[¢¸lu¬’ÅK¼½uáM÷òí/Ì|×zå¹s{ádêM½?›ónçý‡ûV­Öh¿êeFÛ{7^ïp8øŒÇÃZã¬ÏxlæXL¹6cgе!’‰\Y%ÑØRÙÑ«6—)ú¯‰Ô,Ê3"¢ +IaTNl¡ÑÃô³ô²‘Ü5‚þ¨ªwÒܦ,JAQ¹¡ÊªÁÄÕ4Ûá¬$ •˜N²\ E[y̱KÑØ¿øËyŒŽHWïÖ,"úr²Bq-ËS‡l‹3"1NjÔ.9’)až+ñ€b1 \i°•È9‰…äˆSÂ\YVQèÐ.mñ¼ZQTŠžÛ=[±åû* @Ͷ[¯)‘ªZ7¸Á©OÌä˜gëˆ8EµƒCmÿÎWk¤™J‘/SkŠû—*eæ%œ »c_æ¸ûLˆ“‰ˆhú­övpÔµ²¸1±ÆŽ,2Ü~…^Šò˜ó,>êmiál9E—'“¡á‘‚Xv1 øF<`ïq üÙ?h¶ì©ÜŸv^}:0òï^6jÎO§äީ͆éG¬‘(T“ZźìX¥2PŒG¥˜*EØÝô`ÔÌé–ÊNmõ.Œi‚ŸÍæŠÌ‘-rÝúal›õd:¾>D¶™#ôùi*æÿ“PgRö†®ïúw̓oV;³\Ë—ŸêGÇõýù“b‰¬nâ½yÔ*€^¨©ñ®Œ­â_m¯ö½ƒYûÅä«\–¿ ŽÆeÿ!1_±JG1‘be5ø’ÖˆÁ»wæ/©ì;ôuZ²½ÊuÚ´,­å#‰=Óâ"¯BOÏ÷ùÊÊê´Glê'…>2µgÇ“±âóDÜ—…¢ÑùÖ¿.º?!Õ(Ãß,ÁOÙ©æûw~y¢Zì‚yCßC>—1PSÏŸ 1ÓRíæè¼û’QU¯Âìm©«ç)žBëélM§Î/¡Ý®×åçºhF³kÿÚµPKV}z=ñ­:°ÈÅA0crystalspace-glshader-cg/mk/autoconf/checklib.m4UT dÇïLó´Mux êêÍ[ÿwâF’ÿÿ}˜CðØ3ÉnÖqÞiló–Á,àdç¼ó!5Fg!±jɹÜÿ~UÕÝRë x¼;ž=¿— HÝÕõõSÕ]Í!sVܹ÷½Ewý†=û¯óm‡YI:a°Ä/‡ç_ôïàõÂÍ6òîV1köZ§¯^½îÀ?߳Ŗõ#ÏaÓ$+/àìG¡>ý§þà„]'\ÿtpTào¶òA#;Ú2ø¸Œ8g"\ÆvÄÏØ6L˜c,â®'âÈ[$1g^ÌìÀ=#¶]o óbI, \±xÅYÌ£µ`á’¾\ŽnØP-qÉÙ>' zg¶`|"VÜ)$9œ{üL?ì"„%ìØ ƒ3Æ=x± øÎNõjŠd›M;F"I/ÜàÌ0¿e¾g“»»´‘ í2/ ò«pâ­€0¨áÑó}¶à,|™øm#%¡_³«ë›³FØ/ÖdbfÎ`x¼ “˜ñ.‰yëïm.²ƒx‹2¼ïOzW0Þz;fë»ÌFýé”]\O˜ÅÆÖd6èÝ ­ ßLÆ×Ó~—±)çO(\RÓZ_’ A¯.mÏ©>€Ù°ê»le?p0¿Ã½`ÔfxÞçV’³ý0¸#éaZ¦á3æ-YÆmöyàWq¸×ämIl8Ý6ûþß±÷¶ÌzS÷ìõ"òÜ;øøÞb¯NO^ÿÐf7S‹úÂÁgõæãIÒÿkóö´ûÝ÷[‡/úr:bJšoìx%æ._Ú‰žUûezÛA“ùÞÚCÇ„¨‰Ñ"®fŠC°Eœl|.ÐcWž³BÅ nGΪM±USÛäüWˆ„,'­âqžÔ·a†%Öbà v; ^àø‰Ë×±RX›5%eülR?NDt¬çИXoEk0Îf î`VF¥b~½| ¤ã €±ÀEöצ@Ðmã«€ÕÕ:u)VÇ…˜Hš6ȧÝ7[ ˆHq7[G‹q(âÀTtIpYXÜR­˜£…ʉ÷—ˆÅÙ*(É& ÿ»NïVa8"Å€YòU¦%ú 0ú$¿×e„ŽÄàö‚‹?Ã\©ÒÐ+v:lüÙL€óψS|0ÀKŽ9"µ¿Ù#×–:À:[ÛA³·]¤+‘à…Ü“¬rÎõôøo8ȾMÞÞ¯ \ò€„^ b˜.ôbHU­G„3NßÙÑ£ŒA¢4‘e³¾px­ß`HA.lÞVÅÙÇöâÌm¦Ô‚ëÒ#´Ìßi ()Ÿ7©°Ù€ìQa\~„·@`y!hÙÜß• ¥®×vªØ®ë!ú‚ÁÌʰe…¡ó Hv°ÞñîŽÐïÖè×*ƒ(çȆÈ`Ÿºçˆ-Á1œތz8Ò’2zŒåc ½[Q&Z¯!ñã@dÚ’49³ô(ª(X}mßsídõ6zð–U±-XÀŒTJ-ENé•6TukXÍ1¤Ìã3ÂÅ`SdÌW„@-ï8ù+èD-‰_دò1Ur°Š˜ÊIÑN#©êñÑÍ·æó—ŠœÞtÞ»ê÷þ2ÞαÂk‡‰5ùÐfãÉõåÄzßf·Ó¾õ[g8˜Î>Âס5º¼±.ûUõRø»µz³Áõ¨3¸è\\ߌÞá”ìÑèz–=¾ž]õ'ÞÅкœî¢&Ç Õ˜ôûà-}³†kÚŸ‚zk?sLkIþÒïÚóíƒ4èðMŒ%:©¸Í·˜VÂGÁÐÿ±ÒŒ„Ôô๼T‰x•EªÒÜ™¢(S8R„»[#˜ùWMD—bž >ÅdG9‡õÎ0Û§J)xÈxÊÍ›Ÿª™†½.ï²OÂõõ° F®ä7\@í¤É–û€ðqéÛwrŠZ “? Øk®K-(hFcÆ2‚÷at¯ô‡³BÜl¤ôù¸[+K·]` |þ I«']ûWH |J_¤‹µlRwΖÞn$ê‘ ¡ÀM Öóà$èâs5ýFÛ@œâ¨*_ TBÅÌç6z lP—Iàz_b»^„>*Wi Y1â‰(#=UwÊÙŠ@§Âç€*ÃT5Ú óÑ t€¶B¨Äò%Íxr?¢¦eœQ$Rem³°ÂÇrn*8e!™-«ªÈN~Féý©P{í/¾©²ÜQ~³çß@¨²úfÏ­½• sÕ7{~í-ɪoö’µ7°ú$@™Ê1wEx,à:väâNÊô_´%pøÀ#Ø­ºÀ¼t FاöÇè e|S‡íÌ·(— „ "ëð>å?“Þ køŸÕ+´\­B cIú®bÊõ\Ô9nÔ$×¼${5 + ¥P¦à;„&Fh±R`™¦õ¨¦ÃÌj€ñ¸jeäÔ 8b@Iõ0zø­'ã ùS*ÖÌ$ê¼Džn‰˜TtLúJƒm ªâF™y»ÍÌ ÝV6ʲt>Ú³Ê;e„2J;—_4•tûõ+wAC~‰#– ª'I'ÓðŠ‘Á•gÙ>ÐP‚Zª‡+0V&æ/A:)ƒ-&DôO#åa䪌•CV¿…ÜzÒ=…í(üÿôc]%¬#_tmù >¥y u@¯é-¾¤ZÚ@…ôŠI„@ä·}·tì‰BdTŒšš#^@áxˆ S©ÍØþ‹Ç 7@7g`{‚{:è¡J ¨Ä%ª®ê[.êg¥1sGµôÂÏY»üÔ¡|ò€&xQì=pÛÖky/"M €ÿ9/m匕† õ0Óó¶fŽ/Oïn¥µgòH+…L×PctR-Ç •1ZÉ Âûªñh£8in@;Ã#–(Ú‚R·4qMàs7G0%ß0‰;iyOv.ªœÆ B ¸Õ{žõQ«d\šÿºTÄ]åAÚwP /´¨í?Ú[‘^Ë(\§‘ñ;È4P»Ð±Ö㊬i”ÒÚ%@XpÇF×›È[£È†Q'¢›Ì§°&9Y§µc¼‘ö*¦J›ï™|æçÉšrÿÂZª™Ù’/{â[E袺š®ìüàþñÁö|ÚánEØÂßÒ]‚€ZtÛBÚîÈhß ¯ñ&AÄ¡Üõ(gA2£Ú`€a¥&Xöëf ÔÖæÁ¤9,é¢5^„)ïˆ Þ5˜m7üT@·Y=J G„Q1ŽªË­I~í¼²!òH<¿rî<«•œÖrûOjg‹d¹ô‘*¬Í2è‡Ü&ͧ7o§³f+Ýc¼ds<Âþ÷ƒzå«îÝW9ß­pœ´œÏ…16‹À¨c$õ!»u~2z³ëë!€¸I–ÝfÊDüÙMrG…IeªŒ§âÄð^Ä¥‚;c «ÛÔ ãx‡Óaw'­H:êÒÑy…*!Ýîbä\ébÏD×\Þ=ª ÷U`ÚzækIæ'ç¦Bæ²²Ãá…‡çõB¦×}BUÞVµ kæ‹B ù±õ¯/KYúŸZEnÝ‹‹•!ü‰ŒY­Ø²F•ªŸXû%²Àõ,¤¦õvØoë3 ì/^qˆGM BÚróOè(•Ì%9D¼dOÐ^àu9}Ôaã*BØ_o6{õ¶J ²ó}?OÄxì”]ìlÌQ‚¡³—Eá&€:/SžèòB•€d”ÝÌŸØ0­†—<#Ùo íJUY»ˆy;ñŽe ‹ ` (IjÍ[P½‰m‘>· KY]êŽ{º ;5à¨ù¯ b9­Š€ÞýV¾“PVYÈæG²]•¬±£Â¦Þ$ÈÚÝPŒf±‘Ï<$b5š¦TÕmE½¿d·gûø…B·ÐF§“årÓ\û9QŒm§e¹/´;Š‹ }ÉtF-›ÿ?#yGìcÅÓ”5½J}šÜ/«{öœ æçUT4¿™C{ù‘¹è­¢—ÕɪþéØåÇA:=ýé›3¶÷„ögGöìbPW‰µ;°ŸŠë4¦N+÷tz!¤¥I&Q3#¦GTøº°`¨*Æ™uÙfr@'»èdM.åU¢^Çß$×ÚM?%}R$Tù½(¶£ìð¯ÔFL_õ­wýIçÝ`’ÆwîKõMlý÷$ìÁ•;$yD¼ðá‡?3T×[ey“ï{ò•`‘ÖT;abº à½ÀýKêÞ5ŒkÞò`¿t³Y^“°¡ÿÛ‘«.ZiF»tž_5 [ó‡òHZÐ},iï…J·Ø¥˜Îÿ'Uÿ\1ò¿”å-8yO ÅìGú™Di†¼´e^™¡Â6›éï_Ì_ŒâÉUЖ¿ðÄJ‘n‹Èì²òöYWþèTz„,´ð"Ô£¾Y–]Çuéår‰¿é¢[@d/y«Ñhñ‡éEQó‚3Þ½ò\®¸ÍÙQì9 ^þÏÊ\¬9³6 T\ëÇÆ·c¼ò+ÚìœårD$iã:'V¦‡ @\´ú—ÃãevW?ɘ¿ŠIE“:–ùCÒ6/úéKcÿH@@‘’g?Ê¡Š<6”z¾G™ïðÅøsúµ©TÞKSÕ²ã„I£ ÉQñ´Ð[>á1@G9œK <½Ðµ0¬¦™¢66Ô…É¿þ©p±pN%²økX ‘ÊH¿8VöC{#Y©lø_ÐÉœC_nú·¤W™]ËM’Óz.)f¥o½3Øýòèh×iÆëò_Ñî~¹›Þ›ŠÚœ ézLJ—Å#ZÙð:Süžqªiv^¿í¼Õ}”¥ko Çõnס§Š,Û$2P ’õªÈb0ã‰# vÛÿ¾÷Îè'ÍIÃhæ¾ß£CðfÌûtï®\u~öÓP àþ‚E g".sj¥@#ø’QþYÊ]ÿ;¦öÚ4@j }1êE$ 8ýÂÔ.íÉ,=Ù¯~÷*‡%äܸv•ÑFµ7*$׈ÖÎUïÚhãq_\9Ýžu­™ʨ–ŸRý%xÍv:Ê(aqÍÿ@U@Tá‡@né–~}^E‚þ^Ò5®#é4Ö úûÒVFRFQºÐ¯ VÈÓºåAMÀÛ6imгJ‡÷Û@·]1–³­e‹ô?…Ç0rzýA§×ÕLÔáŸ.ÉåuZHµC%=ÓÉû?+¥çZéߪ–žîhÖ¥CÓ—’;7¯ ³ïثӽTF²æ5å1ª‰)›¦’¥üa×s÷? ,–•™¨çOmL°]ÁXF€¿µqàÙ”;UF©ƒ†–ÆŽîˆÄTFØ2ÝjaAv8È“I[a%ÌG,4KÑ¥h1ÄIäšÊÔº—".,íZ©ŒF‡H-ƒw‡‰â88ó鎃|’õ‚á>ˆáN|9’Ó“3háÜÁ¥®Îïy0 b8j!Ö! ð΀ ‚áŸÅóìžÐŸìçœ:§'j »ÁYÕå>1vÌþé ñ:=iÞâ4n‡>6äŒ]FR˜2ÛbÁÏ_NðŽtpuö3n½évŒõ{ÖV!Ÿ>êšiÂT¡ƒ`u„ýtÕ€ûðöžy àOýlL¶ÃbÒí8—,Ñ#†÷Š ÙûÝu¬]œ²#ø¯@KÏâïZžŒÿ¹ËÅÆ pp7Ç4nÆõœ>ö:NØ\ÅáC] Pâ#´ÜºcI_.k…°F£çctÍ™@ý£òG¥Ëüd »ŽÙ»$ïmŠ[vÛSÊ릡u3å£94§›tŠ'¡øWÍÈ•åÓMͶ)ŽÛ*ÔŽ ûQÔí¥gj¼°_—é¿;¸ÖµnOL;‹SÏņT›…qâ„4õVæè‡£ß½õ΄GuÈÒ|á» ÖÏy·_ÃÙYå`×éGæÍ‚âï2Áq…gqë·Êhô[s<>úPWj­/ZÏ>)1fÆ®÷¤½äà¸K»Ç&ÚÕ^¤u¬]­åkhvjÇ­´ W·]ê‰ÛjÉþøer­˜{ýen胈±»bŸÆíZçÂ>üjoÕ2J] ¡'<¢kJíXlN“"î°*†ñghÃg“HÇCè† P©Œ›âÕÝvÈŒçn„á¬V¤i"hÉ¢ÒJß4µ."wÎèuAÜ’Vf;­+æâ2ÞfçˆT+dkl¥H ? .£ïQæCq5o¾[¹"ºT6°e7¹„» 4‹æY8gí*—œ{U:ØÇãúÇÊÁÞl"¸/ËZ†~$î°-U}R»]Sám h– rn2ÛoŒô}£JP_c”ŒâØ»•Í0¤dEäíº_æ§)¨ÿ$¨¿*ƒÑ¿_=UÄò«B)­ÅË#™¬Ê({mHw‚Í›€O>¥XsÛDÇ[7•—;l´9– /Aq“Ù`,]³»Ùè•ô¸\ø7ɤûÕÎßçoà ë>‚ÂÝfóD\ø2å·Ž‚p,gäÿPKV}z=jç!Å«8crystalspace-glshader-cg/mk/autoconf/checkcswin32libs.m4UT dÇïLó´Mux êê­VmsÚ8þ ¿b2t€¤äÚ›^.½s]H˜à0\›#*lu1–Ç’¡túão%Ò´YÞ÷g÷‘òàúÔ½sÅ‚…§µ€Euö+<õ©¼¨€•Hîòp¢^²ùóg}²y°y´ŒÙÔ—P´Kµ““Weüy ã%Ôcæ‚“„Âg!…?DºúkµpyÕå³·ÙXíkøhõzV»}†âÒç‰:§Æ›ECÛ˜\LB¹T9\Õ{ö%Ê[ïš­fÿ: =†F³ß®;4:=° kõúM{вzÐôº§^p(ýNÁµUÕ'B¬«G%aX×áajàOæáw)›c \ì¼§kÌ‘€‡S=ªÝWø ØB.˰ˆö•äB^6Æš¡[-Ãëß^Á¬9Bm“Ù8fÞ—WœÔ^ž¾)ÃÀ±tBÏ<|–=êöê½úßÅa­úêõm)›ÍWžõQóíŒì˺ýad;›íÓZ«ùÎÁ팭hIã¦*åŠÊš  "î™Ò*4¥j]…Tˆ}Æhèâ|ٌx²ù ™#Þdè¢ÛñRH„ÎAh;2”$‰§TJ†È}d¡Ç; m£Yl–P(3È$3œ=ƒ'£¢ >E1.!Ð6Eâúj¿¢\Y ÿÑiy%8õÊÊ •nµ„C¤B»rþ±It½8¾r®cÍ^N1[5k±Pæ‡ÿqϹPÄÐ ç,æáLebÂØÇ"UVµsMØÉØá*I,f…uTHø$­©Àº… ~ÁÎGRÅÙ' ÙŒêöÊôýµ D1Ÿ3ªò 7f‘„‚+<u°i>ÃjNx,U0÷Ç:Ó€…w¸œd*)› ¡F #L$ ØW3å)ÔÓá²Ø«D$FY£­01—Æ¢ø]SYëÿ8ÔÆ:FC‘>®qðˆçQo5“v£e] v·›®ZïÓE×ê_–Sí‘Ýi7š#µ¢0šc4 Ú{~YQíŒ r@¿¨@ ,|¡ðØÑ]¥«¡ÒÑ‹$bm/¥$I…ü}Ãz\1rç#ƒ K* ŠP !/” Ž\]–Ã߃ï|³Pó° ]%E33 ¨šR„OÈGŠR¥ènjZjGÙî}½1h‡û(é¶œUQ qÐìÕ‹jm[íN»i[­Ñ»A³õ)RIºì8ýT&“+ì>ì$ÓHªiÅùeŠÇŠÂ–0£ž‡S®O¼|ìZ­cÝlÈ^ͺnÌÛç6V}ÙšŒ‹C…J<éa¾uÀVUÃ}Uͬ*º©ŽEت÷NÙr_ŽP|ò‘iUl ÜC¥]œÖxíl&“nÇ4S1f kηLJ ’uíí//X}£ ³G{er¦ñöñ¡‰â›¬7hëáµ;½+«Õü·®’ÐŽwóXžßÛ!WÁO¹ ~ÆUzxü¨¯Tí°³ýòÀÎêhz¶Ã}ÇÚ¡Ð6ÇÁ %óCÑ OÏ>úùä£gÊ=z†Ô£ûÌ’GÈóíÖµi›lÍuð9J/vãÔŸ3²«£N—‰§×J”NW;ÂÁ¦°ª/J#]{GùV¿ÓÓ¯©Ö¢ÝS5M·™áÎ}v×—‘}àj[ ½fÌ v¾l•þìL/© .îþPKV}z=óvmê7Ä 4crystalspace-glshader-cg/mk/autoconf/checkcppunit.m4UT dÇïLó´Mux êê­UoÚHý>Å(T:Ó“æ.=]¸VçPH¬#Àù‡ª!k±×x³kí®Iùö7k’†´½“b„°½3ofÞÌ:g4¾‹¢äLÛ›ßà]§oOÁ)µˆOÍC»óñU¯v†¢ØI¶Î4XÃîùÙÙ¬v0’,¿ä*cœÂŸª¹ûk ;›OíàdLAÎV’Èàm*)%Rý@$ÀN”’&LiÉV¥¦À4žô…„HXŠ~º+yB%茂¦r£@¤ÕÃõ4„Iâšr*Iór•c¢S®(…y£2š`5œñ›|ü& A4|”Ṅ-• Ÿá|­ìægmJ5ž(Œg“ßANô£³ý=6‹N€ñ >–—!0ÒðÀòVJEÓ2ïZÖ@_ÜàfàLïà‹ãyÎ4¸ ¹ÎD©ni Æ6E΋“„ë©ávä oÐÞ¹r'npפ.aìÓ‘ïÃxæsÇ Üa8q<˜‡Þ|ælŸÒŸ^£íYO«"¯ Õ„åêÀö]aªyÙRlLÙ%ãÐý÷ÆÖp$|]Un €¥À…îÁƒd8WZü°å½Ìå±Ýƒ¿_À-Q œ-¶zH6+É’5ÞÞ:pvþþ×?zúNUÐ+ëÎFsoäþ±çöŇe·Ýêe¤íGÛÑðïh8Ÿ‡S7°£[7F†ë´†f1ò†Eâr+Óº¸ì÷÷ËJáÌÇÛ»¦6§ºßíUÌš³SM•f|0©$ú ä½u²Å «œÚ¨\ÅÑÞÉÌ;ˆUo#ì[Áx(ª±eˆs²£êäi:µrbò¢Ih޳vŠލ›>Fª’ª„€ ûPê(V§9Y«ÞñAÞà6B„ãc¶Âºp†0SÛDn84ùRlYb²39NýÈGW¡;ùy#?œVט2¾÷F¤f~5Ym;aÔ÷M’ª2ׯ ÓT{‚O™áÕQ•~8ªŸQcý웜L‹rʨ"$/‘6ºaúÄè¿b¹¡ìådAÚiJ0</B˜'+*±_}RQ ŸGãpj-žOì²×6j}|?q¯"³­EÓ´h-`âL¯QR³kϹµ‹ãq^&øßÕØõKÖ×ô«î8¹^ÉqÏØÙ§¥q¯#ÔSwy QÈÌïÞä¤-KnuËnpÙCwïPG­*AÇܱµ0ª€7GcþõÊïPGʵÀÖ=ÕB™¦,Æ®ê|WmK®ùÍå³óç´[­—X¸’Œ¦¦´¹kœ25Á?'z ŒÛŠïÃj+[i"µ9¶ÎöÄT©ìÉ9PûÒœTyºÞÚK §:šÍw6u&ÖâÍûe·k,ëoàˆñFì?0Èj€²ÇšðÓþPKV}z=¡6åü ä'3crystalspace-glshader-cg/mk/autoconf/checkcommon.m4UT dÇïLó´Mux êêíZ{oÛÈÿÛþS™he@Rr .í]êCiIvx‘%•”ãB@ÐäJÚ„•KÊÖ!¾3»$EEÓiÅ9³äî¼3;ÜÍÉÙwý9>N´XÅ|6O Þ9m¿|ùª‰¿~»ôbî‚•†bÎCÿÙè_ùÀZnüv|‚\ðg<ç|~;ñ p8M“{'fo`¥à:!ÄÌã"‰ù]š0à 8¡÷"Š!ˆ<>EºD1KCÅÌ$,DSùp9¸†~&â’…,v|¥w>*Úç. GÀ‚Þˆ9óÐ ÅŽh/H+Ó."á$< ßã8Ã’ÅŸ¡KËX6õ«; ™+~Ñ‚(OQùøN²&níóÆÚhx(ÙÏ£š7GÆè†{îûpÇ lšú À•ŠÑ1~;¼ƒ>¸…Ý4õÁøö .OæQš[2ÅŒ Ÿ#o4.vÂdE6\õÌÎ[\¯Ÿ}c|›©Ã…1ô, .†&è0Òͱѹîë&Œ®ÍÑÐêµ,Æq¸â–{}*Cˆ~õXâp_~¸Å° TÕ÷`î,†ße|‰Š:à"òªV±sü(œIë‘líá7À§FIîcޏJ¢ƒ!o(fFè¶ðúï?Õ#èK uÇ îbîÍpx¥ÃËöO¯~iÀµ¥Kƒ¾sòé{döÌÞ¿ë“vëç×OOšßõ‡òÛ²;o{wvgxu5Øãá°oÙ}cð®>é]ãqÏDÁ'G9s? HÌêó ‰"_`Àà¹ÔçágÎZ`2‘úI‘•®"E# p{„D J'!öùµÑÃQÏßÖOaÉI«2 £éÒcŠ\²'Êœ(à *Рåá^†ÃcSÕ& b¤EF ó"Z1¯õÝ]‹Ñëö.®õÉ~lÐ&'XX¡ æpß8§2ð;¢ÍÁôA3ïcB6º]Dƒ:CˆHšw|If'XEÊçÎG–iŒ7Ž„hbÜÜWG6°tüTò,A"7 =®¼í¯Z’—DàðÒVÉW{6`¢­‡Lé…œÿ E¬r~Ê9Ò+õI·ß§-ô|Ÿ0–­Þ'¸sÕm•ˆ´Ò¸²ÄSeïcg‘­Ö-Û¸¨O&¨i®°ƒ0²ÝÕ잇58ƒÚЉZAŒaÆæ¬¦e#h6'ž¡où«¼nˆûWíZ5sr´Ò¸š97Æ kö,ZˆŠz1$–ˆ´Ò¸šDklƒKI@›X8«"±D¤•ÆwJžÿÞŽniQt÷‰6‰ ÒJDZi¼e_9äÍ£ž-¦8M0::*£ªOîçLvù*ébÅXùšMÚˆš‚¹„ýfè†*`PîÒÎl°sR›íŒÐÎ žFqFŠ$³›·²þèƒnýøHñ+ôn6çÌ_@û·[¾Sì5¾À,f h2¨í2¦¥µíßþŠ$5ŸªçJ¢SReØ™xÕ¸Õà/˜•aT+V­þppi[½ÎØÀÒ<ЯzH3ÐÏû½œ‹ä´Ëg,¤"û5È é‚E‘0|¬ÙÉ«4Þê>z}4ê÷ì2—­7_éúãš ³××oiXŸŒôñ[ÒaO‡AMÅŠj FˆBzˆ$oÜsbw '™ãÆ}D›g,{Ž–ƒ¶¶'´Èh_Çûú Rû)<_¿Qx?o:@7/3°×'…Ï).8÷¶×Ùª2×þ ëÍÒ*,ˆê%}”ã‹9CÙ§¨þ›3õÜ·=ëT%ÉF±ý3]±³ >˜Èeò×SY娮[<ÊE\C8² K.Mû‹\;*œIn?çº%‘‹}Ù|ËÚ1hAµ TŽÈºÒH mèæ$ˆ:·P¬ýñTýùÉ‹Z½Ÿè üS_ò9å¾G'~…a?ðç'ôíc)*}œ§g±äê]×0ípä*‰ŽbTyÓ(è­5ƒÇº±,Œ5Öû¤< ~:<"«D •ÆÛXöéÑØÖá¨í2<ÛþÖb›Õû` .†{E¥nc3yŠ‘à'Zä¦ ù]Ó8 a<œF0å>[ç2ÚÊž§ìoHI,þO··’ó·2(Ã*M·»ï ¹¸í-y…Ì(“iå‡Ç³C®u/ ‰ oZUbF¦•—ˆªd m‹*ßaVŒªIQ‘˜J6­I´õðqIWú»žŠ)Lç3£¼¨RÍJdZùáY‹Cwøáö²7xBqQ»_×Jf/zXáª?‹ƒtz•â9_q(¦ÓÊ·U@½&ÒJãÇ1ºÃ±’”T’2Î$ŒŸÂFg8°oÌþ“òX^­¨{›Á™°§¸¥É]©iR´>9ÁþpÄ0w°?,˜`þíýá3‚Xº}b‹åìWõ¥µœQÑXÐAof7M;«©i½¿”ß:HRxùr-lû„"L¡Wª¸1Ã8£"7<|ÕTY51»{ÇÎ0ÿÀɘTЩD¤•ÆŸäe‹Ÿäez”òbçž«S¨l~} %g7Žçv-©z—é¸ÿ yU8yÛ©ÂæQÛ¾4ʃҲ®G£¡9¶lS¿),Ôyá« ­!¢P™(ˆ,˜G©83òEª.%T]€»HÞÞ1‰ë5 é¢#ã'q¥ FWª»°…¹ò ’‘SÒ+`«D¤•Æ»PÉæÆ©˜ÿJ7‹ÎÒá>;4°¾…-³»éÑàR(=±|‘íªàåVÔå%0þ £„îc‚ÔƒsG÷¶Ò|þ‡¼®Voèd}± Ôªå–×Ê.©Érîf3 ˜¼¨Ã®AäÁX Œrä!HÅÖéNâTǼV§¹¹œX&ÓÊ»/N`,7Ž1O]#ÍÏÐzñ¡ì²½ag`½¡VéxËdZùaKAæ6±•7ly”e(GCËø°¾‡“×pÇO)Ò|·Îèv./g^Í©™V~ØÒùÇÜ÷óÍN ;½’ý€jV £¿nJG8tô"P¿ä?žßÀ½¡ðO+uêȳ&øÌVH]CýFF7ýþE_¿´j²+ØÛ2¤BQ­›†õAÒÁÞ·BÓ O’žµm  •{ûúàÒa2âʼÑ>˜ßMÔ'ò„q-ŠÞ·¼‰jŽKµãc»¶\g°R·Sû97ÃAü›¾ã,èXÿcÑ[t²Û2O¢ÒLx¡_â¬é»^¯Ï¾æãFbºÑA{UPÖ—/°=Mœ¿ÕÁ¼ñP˜qX߇ÿM£‡ê*yò¸Üó%hʾõüܹjÉÖÄap•bú­F(©ÕŒÀ‚C‹gØF"¹[ÑíÞaõÂÞXþ­jf¢è©Òv8RY‹ÿ PKV}z=dêî ô)2crystalspace-glshader-cg/mk/autoconf/checkbuild.m4UT dÇïLó´Mux êêÕZmsÚHþlÿŠ9B.p+¼±“l²—K* ‘jñËÞÝå"c1˜) ‰’^¶îÇßÓÓ£W°³W—lÕùƒ ÒLO¿÷Ó=~$ü¹òo¯W:˜,ž‹ÿò§ó·ŽpWiäGጾì?zóUö‰n´ÜÄúfžŠV·}ôôé³~½×áÅÚÃU˜Ìu¨Ä?ûé]öÁühñvÿ¨àg4׉ôu,ãÀÇY¬”H¢Yz'cõZl¢•ðe(b5ÕIëëUª„N… §ßG±XDS=þ”‰­Â©ŠE:W"Uñ"ÑÌ|99»}{ĉ U,q±ºÀh_û*L”‰XÒ“d®¦‚ÉÑÞcâghùÇŽ©ŽÂ×Bi¼ÅZÅ ¾‹£ì4KÒà¯%S!fzÑ’v¶ÁüF2-6ܧBè©Ð¡!?–oÂPÃq­Ä*Q³Uà¬dB¿ôFÏ/GÂ=û$~q÷lôé5–§óh• µVLL/–mË0Ý §Þ ûëÝ÷½~oôɲ‹ãÞèÌÅñù@¸âÂŒzÝ˾;—ƒ‹ó¡w ÄP©/(œ©eZŸB¯S•J$¹>Áì X ¦b.× æ÷•^ƒQ)|xÞ7,““AÞé±­Ððk¡g"ŒRGÜÅ~•FšÜab½Ð?pÄ/_ˆS™$Â]ÃÔ]¹¸ŽõôO]ñôèðÙŽ¸ºF ¯|nwr1ðÞ?[㣃?\µ÷÷u¾êÅ÷p2¼€ù'£Ë‹¾×2¿º¸u~v=÷}ß¶÷í áAˆGa’U']-¸UUê4±Ë(Ta*–2N¸ˆË …]˜€Ò¼|å§&ôèèîÀsGž=›âeJÁ@Äb`ÌO_t€šò&iöÞæßÍž,b5S± }E Ôe ÊÒp±XÈÎTz¡‰ä‚”BF@Œ­e¬åu q7×þÎ~ð·´†™/¹åû"*àÈ;xMA4‰¨8¥h,á*^›³SxŠô)Ô„’`$´[Eò”šË(I4\—²-ˆ,¤G‰h%+ìehãýe¯ÿaÒ;öúC¯mS¨ Ѧ¬Ä„¾¯–¨1{ µ˜áªk6°¸”ä9ˆøØIŠÒ·§V*ìŒñDDkªÝF·L'«VFÁÑB'š’x!ºZ\«)TDÜ`)4¡Ã©^ëé eÀè›ÊÖmÛÀ*ûyûù»æá»æÑ»æ³ÂÛûû“ÏßÐÑ˦m/ç'÷”¸*Ý=;¹tO «nwÔ;?ëôŽ;´ote+^å§´èì|”-ãóÑGoÐ)B‰¿gµ‹]A†õ½³½÷½Q‡Ÿæd¼Áà|Ðx'Þ¯&G±uJr)à7±\ÑwªÞÉjɘæÁ J÷†¢ÕÅvºYj_Á¦t”‰42áZSÝ€íI…»«Õ.QXÈ ¡3ønjÜÌàYŠnTH˜ÐÓ( 6¡”ŒC’C3¼É%0nl¸·YGÅ€L!‹ƒ#33¥2ߥv‰F÷»ïLD =Óy1ËÏA€¯’,Q0ŒN(¡ôf9}ÒŠ•°‡¾aÇkŒÅL1-Å(ÈlWÔrN¡lUäÙ’¹eèÃŒB(”DQbº‘tnÛŒ:†°0&Ñ­Ù£R.JNñÚÏØÎ¥2Z<Ô×ì>9c(#Xîìé0ü*(5S·¬¹ÌÒµDHLêpÝO¿D¡Ý±3ŒÄl›hcߦc|5äCY_XƬ1/D†Þ&GÊ#XºKU¢F £„ɸÌ,”ó2|)+³‹,lórÝtª©á{eR ˜û ¬®ccnK­Ïª< rg±^}¿B¡êÌ fØ×I§2H"—gòKöÜábùPY¿Æ‹V!ö&bG-âÌFaÇDŽ ¾<¼ÉS ·öà±T¯Ä2@ L(Ú*%<‰Ô"sE̶ဘ¡©»I–£¡‡I§€’Â)²Ñçä´'p¨›U cÓˆPУɂc–ÚŠÇžZ¤’ËtS^@NªÖ™'?òpR–h!Sð˜”B;ü©B¤Qƒ>C'Ú[ Þrà ©Î¤¯ÑCnl1! ÌxÃ…Ã\7iINÍH¨8¦ D•7Jl@:Ii"+H—»¡\iÃÍÈdÞ ìÉ„D©Âcs° §*…s)­LÔž&¾ ©Hgi†ØzbõÊó‹Þ)²ç©w6r)6ÓÒ :8Ë¡uitšãÄŽ Ñ;û)kmÄ ½ >M¼ŸÝ~«í0öûÓïÂ(¥bЫ 6O’lŠ‘›Ø²eGâ.Šo@4Ò0ü›Y”Éó qG••Â9 Tl?£1^…è›'xFß'ÃѸ8³ÆŠYS³°ÍE) oPl*-Þƒƒ+ÔhŠkè=€æ GÕöÊóèN¡Op,ðªé xJÂT¹é&×ß§€\ åö®Õ\³œlÎÇ5ñW¤¦ñ³©Äí7¸öÑ9¾Ñà– \ê«mÛ²Œvú‘+çÎh¦SëÂߺW)·YkžÚËáÇÖ˜/oxÞÿ-DóÙU›Çlέ“ÓhN²Å\lxm#[TÖö?˜5Å[dßüjQþ"Ëo€zìðAÏÖ2 ÅSjð`¹JæpÔÖ¸ä¦ôªfø«V³9>ûÔo-Ê2ù€¨ rPÐ-‰\Ñ¢q†SoéZm;™Fû{µ1Ùþ7*DA¢PYÚ)´‘%ñé hïíÔ#ôR¥"š?ˆfÕý=«W^”W¿ͪh54m—f ˆæ+Ñ,ËjÞ›9ÈðürÐõÆ…rYm‰ÆPÍ…àa¬ š÷÷öÆîäs vÏOOݳP(o 'Xã »î…ÇûÚJ6o¿Ÿªõ÷á àèí_ù<Þ_u$;ÛÊŸuÚÅ;à –7VO¹ž½´Ô®‘qns¿Õþý¾-·\µ-â…èÌ*ÒXb»}¡fw³2³|ÍÊüŽì\±ªyœÛéüâ¾@çu_¿¤7fë È=˜¾æµã«’R~$¿pÆðdÖs ¢U‰_"ò²N²ÖHdN¾›À+&Ð|n$j¾àQ& ú€áá¸%Š-š-j¢Ø"$Ýð¡\ð½FóP´è¯úM.{,£Ó\æ×_SÒûºòFû 62-ÙœLj1~4ÏMæ® Þ΋ÛßrjúÑëþÄ5£uê ‡î‰çˆ®‹Ç4N›Ï—¶g@Û§{ÇK½“³ó×1§í$õðü©:mÚ±ýŽŸúúVmÍÕÚtïÆØ¾AÝfà y DîÒ{f@5Ÿ>eMƒZv®Ã° ÛÍuäú5°™dÓ7Ѐᭃ&}’i MGaÁ*]¶ämG°qz—ÈeÍYògåþºô”Z# +3+µ«–GyÇ­LÙt„ñm—Ÿ·FÜ¢u³m³¾ #‚ŽF$´ðñ†Y0£m?Ž Ðîÿ øÏ§å`µl3±ßtú­gÀE¤ä°ª”DÍW ñ—"{b¯ÑïËÊ(¡[0·&¹Èδâ¹ùý‚kWóˆJ>5²4ܬåe~Ô_å—”6›•,š“çÒISd%­yȼñŸgY¡'¡N‡',R²%)–çÿJfÙJƒŒ{Ù§ 2{ÓµU›G*@]3•$çÿÉ“ýÃÙ7âÐ|~ùgeï ƒ‰]9ÜN†LÛõÜ=ðºç'g½y¶xùÝ}”þ·ÔÍ4îKÔåšÕ6ÿ Áÿ[“˜¹ûý“v3]ò£›PÿN#a®‡Ãi' v˜7-æO4ƶÊ4· XTºsãÄUE6·ëx4ZMyv5—˼Ž\†æLvò&ræÌùn*Sù‡îìêSù/â·Ûâ±¶X…ÈÌÄ}¨ÌÿøÐü¡˜dÝ/ •°YjR¼L|g3Öbh4mÆ«åKН@²ú× âËW ¤œÒ%Vív•Š˜¶ö•}âÉX&”è¬n‘yê©Ïõ|— ܪɮ:¶Ïî@젖ʵ¢KæÍ‘tè«©½Â i|Dzk°¦Ûµqs×Õá8O¸mXyÊ4% är_1³Ôê%ed7ňœzAJ ¤*'„8Ɉ.$(?z¥å6ö$^±Y[»ë T÷áûÖv å ×V8‘b¯wÞμ÷fR;{Ëk·Fí4Û¹LÕÛû­ÃÃcšo¨k„¾§‘ŒÇf·†m¸&‰´¤äܳ!Ü. 3Ùtá„áSÚ¤9EB“áXZgä%–xohÍÆâ™ZÛÓ*È!¿ºp¾S⥙ÜGòRÂ=¯±ñTtLRðIš¡¼À áA*Es¦Üò"W ÂÎèKor9œN(ÜЗp4 “›SlwIš;â5—`r•) lqÜÆ×pÕµ/±?üÔë÷&7Uꆺ½É 3Sw8¢®ÃѤמöÃ]OG×Ãq' 3ÿ€ðmËú¢¼Æì„Tö‘‡Èn‘ªŠ)k†üË5ÁZÿ^ØN¨T/‹êöÄð)ÉéÔ5èÁHøÊ¥ÿ(y£ëé(hÐñ‡_èJXKáR·Åjnd¼ÄíUH‡­£ŸO4‡EAoÛ\»µæ[^¾Ydzöe§ýyö©7˜Nzýñ¬5;úPKm6FÓ‚…Ë [XzåÉQÞ㞯fSئfŽ¡’ú¾^(±ô=JþrNêeó<_ÂÊP~%Ênð‘ …Õ¦ÐZ;šK;xbÛ#ÖËóšû )3h£6AÙ4Ž­£(áèÞI=§:&b°^$¿]¯Ð`(ï—)³+!";‹Ö³-PA ­…‘b® ¯¼ß°}ï-„ÍÌö0$„U,T+@\N·éЉ…AǤ¨|ÀaÛê蕪ÐX§ù2ÙÞZò°=;ït§ƒúíËÒß5výñOo'Ãa\¿íŸß5èVÅwûÅûp<ëuë·óMM{ïúç{Uh^£0Ë@Uå p‚^ó=ÛŒÒU¹Ác@ÝÜø9Šq©©Ïi&LÜ æšx%}«y~¬Ãx7dD1x1µ_Â@ èÊ).] ӕ˘'Ûø*WŽ’”¾bªà€ÖÇŸŽ¾Ò7ZΊIâè#ļ>йR¨e§*ä{3F^Ìj$ÃíëÔXú-¸ñ$^Aÿ‹Çà÷â‘ÉëÑðbökg4î AÿÖÓ ö•¿ó†ñ¿'ÁÉ·¿|}:;·ÏLéLÎ…fg0ãvèÂíùbóïA ¼é¿rqœá¡…`åo¤Ðë©ýä^Âò¼•ŸÝ?PKÙ|>ªº:T7crystalspace-glshader-cg/plugins/video/render3d/JamfileUT ²MqµMux êê .MrÉ,RñP(È)MÏÌ+V(ËLIÍW(JÍKI-2NQ°æâ .MòÌKÎ)MIŧ°8#ȪPKâ|>íìÆw>i>crystalspace-glshader-cg/plugins/video/render3d/shader/JamfileUT (²MqµMux êê .MrÉ,RñP(È)MÏÌ+V(ËLIÍW(JÍKI-2NQ(ÎH2¬¹¸‚K“<ó’sJSR‰P¡`j¬¹PKì|>d¢Ð±DƒLcrystalspace-glshader-cg/plugins/video/render3d/shader/shaderplugins/JamfileUT <²MqµMux êê .MrÉ,RñP(È)MÏÌ+V(ËLIÍW(JÍKI-2NQ(ÎH2 L5Wpi’g^rNiJ*ɺÓs üøät IPK‚‘|>ŽtRàÝXcrystalspace-glshader-cg/plugins/video/render3d/shader/shaderplugins/glshader_cg/JamfileUT T³MrµMux êê‘OkÂ@Åï~ŠAz¨‚í¡·xR£%Ò`"¥H‘Íîš Ýî†Ýè·w4b*ÅËþá½ß¼a&­ó-dï Tª.P;Ø¡¬ÔBÚ®dô¸\¿žB5ÿ /`Üë…Òq‹•G£¯¤ú³× Ú'crÆ;–5| œYÃ'^Ut–ðE‚6BnY­ü•TèíAcrystalspace-glshader-cg/UT¶Mux êêPK ÷’|>!íAScrystalspace-glshader-cg/plugins/UT¶Mux êêPK q’|>íA®crystalspace-glshader-cg/mk/UTµMux êêPK ø’|>'íAcrystalspace-glshader-cg/plugins/video/UT¶Mux êêPK M’|> íAecrystalspace-glshader-cg/mk/jam/UTÑ´Mux êêPK M’|>%íA¿crystalspace-glshader-cg/mk/autoconf/UTÑ´Mux êêPK ù’|>0íAcrystalspace-glshader-cg/plugins/video/render3d/UT¶Mux êêPK û’|>7íAˆcrystalspace-glshader-cg/plugins/video/render3d/shader/UT¶Mux êêPK “|>EíAùcrystalspace-glshader-cg/plugins/video/render3d/shader/shaderplugins/UT(¶Mux êêPK “|>QíAxcrystalspace-glshader-cg/plugins/video/render3d/shader/shaderplugins/glshader_cg/UTF¶Mux êêPKè’|>Ãù2Š-Ž#¤crystalspace-glshader-cg/Jamfile.inUTóµMux êêPKM’|>Q”þئJ¤crystalspace-glshader-cg/READMEUTÑ´Mux êêPKM’|>Bq¿¯!¤Œ crystalspace-glshader-cg/JamrulesUTÑ´Mux êêPKM’|>ò’¢þž[%¤wcrystalspace-glshader-cg/configure.acUTÑ´Mux êêPKM’|>ú,~aá¾½"ítcrystalspace-glshader-cg/configureUTÒ´Mux êêPKM’|>Gt›W-$¤1ùcrystalspace-glshader-cg/config.h.inUTÒ´Mux êêPKM’|>Á Á­ÛZ#í¼ûcrystalspace-glshader-cg/autogen.shUTÑ´Mux êêPKÈ|>ý&2S+5(¤ôücrystalspace-glshader-cg/plugins/JamfileUTø±Mux êêPKÒ|>ÁÔE4D.¤ýcrystalspace-glshader-cg/plugins/video/JamfileUT ²Mux êêPK …1>£sˆ¯?H)¤þcrystalspace-glshader-cg/mk/jam/win32.jamUTûc4Mux êêPKR}z=ð £Üt8+¤¿crystalspace-glshader-cg/mk/jam/variant.jamUT\ÇïLux êêPKR}z=·¢€À\Õ *¤˜crystalspace-glshader-cg/mk/jam/upload.jamUT\ÇïLux êêPKËv$> ‡ªðʳ(¤Xcrystalspace-glshader-cg/mk/jam/unix.jamUT&#Mux êêPKR}z=©„©€$JU,¤„%crystalspace-glshader-cg/mk/jam/unittest.jamUT\ÇïLux êêPKR}z=‡lZm…ñ1(¤Acrystalspace-glshader-cg/mk/jam/swig.jamUT\ÇïLux êêPKR}z=C`GÖT *¤õPcrystalspace-glshader-cg/mk/jam/subdir.jamUT\ÇïLux êêPKÒpU>UAk¢nüD*¤ÚVcrystalspace-glshader-cg/mk/jam/static.jamUT[cbMux êêPKR}z=ð®òÊxu,¤¬icrystalspace-glshader-cg/mk/jam/resource.jamUT\ÇïLux êêPKR}z=Cptz« +¤Šocrystalspace-glshader-cg/mk/jam/pythmod.jamUT\ÇïLux êêPKR}z=z¼t½Q,¤iucrystalspace-glshader-cg/mk/jam/property.jamUT\ÇïLux êêPKR}z=RÚ¡¼y *¤ ycrystalspace-glshader-cg/mk/jam/plugin.jamUT\ÇïLux êêPKR}z=äªpF®“+¤ý‚crystalspace-glshader-cg/mk/jam/options.jamUT\ÇïLux êêPKë…8>P.59l Å+¤†crystalspace-glshader-cg/mk/jam/objects.jamUT Ÿ=Mux êêPKR}z=Ä”?à : .¤á‘crystalspace-glshader-cg/mk/jam/objectivec.jamUT\ÇïLux êêPK …1>&œ[²x>‡ÿ+¤T–crystalspace-glshader-cg/mk/jam/msvcgen.jamUTûc4Mux êêPKR}z=Ü ñkRÍ'¤1Õcrystalspace-glshader-cg/mk/jam/msi.jamUT\ÇïLux êêPKrvb>÷$¸ÌTä8*¤äÚcrystalspace-glshader-cg/mk/jam/macosx.jamUTgKnMux êêPKR}z=µÆbhÎ Í++¤œícrystalspace-glshader-cg/mk/jam/library.jamUT\ÇïLux êêPKR}z=Ÿ3‡X*4¤Ïûcrystalspace-glshader-cg/mk/jam/jamcompatibility.jamUT\ÇïLux êêPKR}z= 5+µ á$+¤K crystalspace-glshader-cg/mk/jam/install.jamUT\ÇïLux êêPKR}z=Ú2ÌQ1K2)¤ecrystalspace-glshader-cg/mk/jam/icons.jamUT\ÇïLux êêPKR}z=tE=H*¤ù&crystalspace-glshader-cg/mk/jam/helper.jamUT\ÇïLux êêPKR}z=~ÁRìòV (¤s@crystalspace-glshader-cg/mk/jam/help.jamUT\ÇïLux êêPKR}z=S r€*¤ÇEcrystalspace-glshader-cg/mk/jam/groups.jamUT\ÇïLux êêPKÒpU>¤™¬GíE*)¤Icrystalspace-glshader-cg/mk/jam/flags.jamUT[cbMux êêPKR}z=ù—>örØ,¤íXcrystalspace-glshader-cg/mk/jam/filelist.jamUT\ÇïLux êêPKR}z=Ÿ’î;n(¤Å^crystalspace-glshader-cg/mk/jam/dump.jamUT\ÇïLux êêPKR}z=.RmêŒq(¤bfcrystalspace-glshader-cg/mk/jam/docs.jamUT\ÇïLux êêPKR}z=/ÅÌÅô-¤®crystalspace-glshader-cg/mk/jam/debuginfo.jamUT\ÇïLux êêPK#ˆŠ=V¦…C¤Ú†crystalspace-glshader-cg/mk/jam/crystalspace_staticplugins_msvc.jamUTÁNMux êêPKR}z=ÀëÇÉ2\,¤Üˆcrystalspace-glshader-cg/mk/jam/compiler.jamUT\ÇïLux êêPKR}z=Âè4‡Às)¤tŒcrystalspace-glshader-cg/mk/jam/clean.jamUT\ÇïLux êêPKR}z=T'0’z¾ )¤—crystalspace-glshader-cg/mk/jam/build.jamUT\ÇïLux êêPKR}z=r{燭÷-¤t”crystalspace-glshader-cg/mk/jam/bisonflex.jamUT\ÇïLux êêPKR}z=Íx~-¤ˆ›crystalspace-glshader-cg/mk/jam/assembler.jamUT\ÇïLux êêPKR}z=º+Š~üç/¤mŸcrystalspace-glshader-cg/mk/jam/application.jamUT\ÇïLux êêPK5}z=¶q¼s ÿ'+¤Ò§crystalspace-glshader-cg/mk/autoconf/cel.m4UT%ÇïLux êêPKV}z=å ¡+ü#/í<´crystalspace-glshader-cg/mk/autoconf/install-shUTdÇïLux êêPKV}z=â]:>$¸y/í2Ãcrystalspace-glshader-cg/mk/autoconf/config.subUTdÇïLux êêPKV}z=Úa#A3[ª1íÙçcrystalspace-glshader-cg/mk/autoconf/config.guessUTdÇïLux êêPKV}z={-Ö v,0¤…crystalspace-glshader-cg/mk/autoconf/warnings.m4UTdÇïLux êêPKV}z=âÈ{´ U.2¤Å%crystalspace-glshader-cg/mk/autoconf/visibility.m4UTdÇïLux êêPKV}z=®z ~š,¤å2crystalspace-glshader-cg/mk/autoconf/trim.m4UTdÇïLux êêPKV}z=vš¬Ó1¤É5crystalspace-glshader-cg/mk/autoconf/textcache.m4UTdÇïLux êêPKV}z==„ /v$ -¤à<crystalspace-glshader-cg/mk/autoconf/split.m4UTdÇïLux êêPKü~ˆ=Ö; p» /¤½Acrystalspace-glshader-cg/mk/autoconf/qualify.m4UT|œÿLux êêPKV}z=g+™€ –//¤–Fcrystalspace-glshader-cg/mk/autoconf/progver.m4UTdÇïLux êêPKV}z=Es!æ,¤Tcrystalspace-glshader-cg/mk/autoconf/path.m4UTdÇïLux êêPKV}z=¦`®Né[ 3¤]crystalspace-glshader-cg/mk/autoconf/packageinfo.m4UTdÇïLux êêPKV}z=¾ "<’-¤\bcrystalspace-glshader-cg/mk/autoconf/mkdir.m4UTdÇïLux êêPKV}z=$9kʯ™ 1¤ÿhcrystalspace-glshader-cg/mk/autoconf/makecache.m4UTdÇïLux êêPKV}z=_‘{úf0¤ncrystalspace-glshader-cg/mk/autoconf/listutil.m4UTdÇïLux êêPKV}z=Wý°16G 0¤éqcrystalspace-glshader-cg/mk/autoconf/language.m4UTdÇïLux êêPKV}z=TùS¦ 0¤‰vcrystalspace-glshader-cg/mk/autoconf/jamcache.m4UTdÇïLux êêPKV}z=” !@Â=3¤F|crystalspace-glshader-cg/mk/autoconf/installdirs.m4UTdÇïLux êêPKV}z=3Ï{ʹQ 3¤u‚crystalspace-glshader-cg/mk/autoconf/headercache.m4UTdÇïLux êêPKV}z=­ŒûØ ô%,¤›†crystalspace-glshader-cg/mk/autoconf/emit.m4UTdÇïLux êêPKV}z=À¿lT '-¤Ù’crystalspace-glshader-cg/mk/autoconf/embed.m4UTdÇïLux êêPKV}z=—€SbÙN0¤” crystalspace-glshader-cg/mk/autoconf/diagnose.m4UTdÇïLux êêPKV}z=ó›æÕ n'5¤×£crystalspace-glshader-cg/mk/autoconf/cs_check_host.m4UTdÇïLux êêPKV}z=\ýò*4/¤±crystalspace-glshader-cg/mk/autoconf/crystal.m4UTdÇïLux êêPKËv$>QEp3Ô:0¤‰Àcrystalspace-glshader-cg/mk/autoconf/compiler.m4UT&#Mux êêPKV}z=‹¢Ûé+( 0¤&Ócrystalspace-glshader-cg/mk/autoconf/checktt2.m4UTdÇïLux êêPKV}z=`b3IZ0¤»×crystalspace-glshader-cg/mk/autoconf/checkstl.m4UTdÇïLux êêPKV}z=¢ © D$3¤nÛcrystalspace-glshader-cg/mk/autoconf/checkpython.m4UTdÇïLux êêPKV}z=C߀¥›4¤„çcrystalspace-glshader-cg/mk/autoconf/checkpthread.m4UTdÇïLux êêPKV}z=1ä¿l1¤ïcrystalspace-glshader-cg/mk/autoconf/checkprog.m4UTdÇïLux êêPKV}z=,6!Wi$ 0¤dõcrystalspace-glshader-cg/mk/autoconf/checkpic.m4UTdÇïLux êêPKV}z=YVoƒ. –"3¤7ûcrystalspace-glshader-cg/mk/autoconf/checkopengl.m4UTdÇïLux êêPKV}z=Súù”Ä 4¤Òcrystalspace-glshader-cg/mk/autoconf/checklibtool.m4UTdÇïLux êêPKV}z=ñ­:°ÈÅA0¤V crystalspace-glshader-cg/mk/autoconf/checklib.m4UTdÇïLux êêPKV}z=³‰rQ K1¤ˆcrystalspace-glshader-cg/mk/autoconf/checkjava.m4UTdÇïLux êêPKV}z=jç!Å«8¤D(crystalspace-glshader-cg/mk/autoconf/checkcswin32libs.m4UTdÇïLux êêPKV}z=óvmê7Ä 4¤a/crystalspace-glshader-cg/mk/autoconf/checkcppunit.m4UTdÇïLux êêPKV}z=¡6åü ä'3¤4crystalspace-glshader-cg/mk/autoconf/checkcommon.m4UTdÇïLux êêPKV}z=dêî ô)2¤o>crystalspace-glshader-cg/mk/autoconf/checkbuild.m4UTdÇïLux êêPKV}z=€dÝUâ) 5¤øLcrystalspace-glshader-cg/mk/autoconf/checkbinutils.m4UTdÇïLux êêPKÙ|>ªº:T7¤IQcrystalspace-glshader-cg/plugins/video/render3d/JamfileUT²Mux êêPKâ|>íìÆw>i>¤ôQcrystalspace-glshader-cg/plugins/video/render3d/shader/JamfileUT(²Mux êêPKì|>d¢Ð±DƒL¤ªRcrystalspace-glshader-cg/plugins/video/render3d/shader/shaderplugins/JamfileUT<²Mux êêPK‚‘|>ŽtRàÝX¤tScrystalspace-glshader-cg/plugins/video/render3d/shader/shaderplugins/glshader_cg/JamfileUTT³Mux êêPKeeÍ-æTcrystalspace-glshader-cg-2.0/config.h.in0000644000175000017500000000343011544132322017552 0ustar devfildevfil/* config.h.in. Generated from configure.ac by autoheader. */ /* Define when compiling for MacOS/X */ #undef CS_PLATFORM_MACOSX /* Define when compiling for Unix and Unix-like (i.e. Mac OS X) */ #undef CS_PLATFORM_UNIX /* Define when compiling for Win32 */ #undef CS_PLATFORM_WIN32 /* Define if building universal binaries on MacOSX. */ #undef CS_UNIVERSAL_BINARY /* Define to 1 if you have the header file. */ #undef HAVE_ELF_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Avoid problem caused by missing */ #undef __CARBONSOUND__ crystalspace-glshader-cg-2.0/configure.ac0000644000175000017500000001653311544132321020024 0ustar devfildevfil#---------------------------------------------------------------------------- # Autoconf input script. Invoke the ./autogen.sh script to generate a # configure script from this file. #---------------------------------------------------------------------------- AC_PREREQ([2.54]) #---------------------------------------------------------------------------- # Initialize Autoconf. #---------------------------------------------------------------------------- AC_INIT( [crystalspace-glshader-cg], [1.4], []) CS_PACKAGEINFO( [Support of Cg shaders for the Crystal Space engine], [LGPL], [http://www.crystalspace3d.org/]) AC_CONFIG_SRCDIR([mk/jam/build.jam]) AC_CONFIG_AUX_DIR([mk/autoconf]) AC_CANONICAL_HOST CS_PATH_INIT #---------------------------------------------------------------------------- # Setup for the configuration header. #---------------------------------------------------------------------------- AC_CONFIG_HEADERS([config.h]) #---------------------------------------------------------------------------- # Check for tools. #---------------------------------------------------------------------------- CS_PROG_CC AS_IF([test -z "$CC"], [AC_MSG_ERROR([Could not find a usable C compiler.])]) CS_PROG_CXX AS_IF([test -z "$CXX"], [AC_MSG_ERROR([Could not find a usable C++ compiler.])]) CS_PROG_LINK # The default RANLIB in Jambase is wrong on some platforms, and is also # unsuitable during cross-compilation, so we set the value unconditionally # (sixth argument of CS_EMIT_BUILD_PROPERTY). AC_PROG_RANLIB CS_EMIT_BUILD_PROPERTY([RANLIB], [$RANLIB], [], [], [], [Y]) CS_CHECK_TOOLS([WINDRES], [windres]) CS_EMIT_BUILD_PROPERTY([CMD.WINDRES], [$WINDRES]) CS_CHECK_PROGS([DOXYGEN], [doxygen]) CS_EMIT_BUILD_PROPERTY([CMD.DOXYGEN], [$DOXYGEN]) CS_CHECK_TOOLS([DOT], [dot]) CS_EMIT_BUILD_PROPERTY([CMD.DOT], [$DOT]) CS_CHECK_PROGS([TEXI2DVI], [texi2dvi]) CS_EMIT_BUILD_PROPERTY([CMD.TEXI2DVI], [$TEXI2DVI]) CS_CHECK_PROGS([TEXI2PDF], [texi2pdf]) CS_EMIT_BUILD_PROPERTY([CMD.TEXI2PDF], [$TEXI2PDF]) CS_CHECK_PROGS([DVIPS], [dvips]) CS_EMIT_BUILD_PROPERTY([CMD.DVIPS], [$DVIPS]) CS_CHECK_PROGS([DVIPDF], [dvipdf]) CS_EMIT_BUILD_PROPERTY([CMD.DVIPDF], [$DVIPDF]) CS_CHECK_PROGS([MAKEINFO], [makeinfo]) CS_EMIT_BUILD_PROPERTY([CMD.MAKEINFO], [$MAKEINFO]) CS_CHECK_PROGS([INSTALL], [install]) CS_EMIT_BUILD_PROPERTY([INSTALL], [$INSTALL]) CS_CHECK_LIBTOOL CS_EMIT_BUILD_PROPERTY([LIBTOOL], [$LIBTOOL]) CS_EMIT_BUILD_PROPERTY([APPLE_LIBTOOL], [$APPLE_LIBTOOL]) CS_CHECK_MKDIR CS_EMIT_BUILD_PROPERTY([CMD.MKDIR], [$MKDIR]) CS_EMIT_BUILD_PROPERTY([CMD.MKDIRS], [$MKDIRS]) CS_CHECK_PROGS([PERL], [perl5 perl]) CS_EMIT_BUILD_PROPERTY([PERL], [$PERL]) CS_CHECK_TEMPLATE_TOOLKIT2([emit]) #---------------------------------------------------------------------------- # Determine system type #---------------------------------------------------------------------------- CS_CHECK_HOST #---------------------------------------------------------------------------- # Check for syntax problems / header files #---------------------------------------------------------------------------- # Nothing yet. #---------------------------------------------------------------------------- # Check for external libraries #---------------------------------------------------------------------------- CS_CHECK_CPPUNIT([emit]) #---------------------------------------------------------------------------- # Check for Crystal Space (CS) #---------------------------------------------------------------------------- AC_ARG_WITH([cs], [AC_HELP_STRING([--without-cs], [do not look for an installed Crystal Space SDK; this option is useful only if you need to perform routine maintenance tasks, such as generating project files or converting documentation, without having the Crystal Space SDK installed])]) AS_IF([test -z "$with_cs"], [with_cs=yes]) AS_IF([test $with_cs != no], [CS_PATH_CRYSTAL_EMIT([1.1], [], [AC_MSG_ERROR([ *** Crystal Space could not be found or was unusable. The latest version is *** always available from http://www.crystalspace3d.org/ *** Also, be sure that you have either installed Crystal Space or set the *** CRYSTAL_1_1 environment variable properly. ])], [crystalspace])]) #---------------------------------------------------------------------------- # Check for Crystal Entity Layer (CEL) #---------------------------------------------------------------------------- m4_define([cel_desired], [no]) CS_EMIT_BUILD_PROPERTY([CEL.DESIRED], [cel_desired]) m4_if(cel_desired, [yes], [AC_ARG_WITH([cel], [AC_HELP_STRING([--without-cel], [do not look for an installed Crystal Entity Layer SDK; this option is useful only if you need to perform routine maintenance tasks, such as generating project files or converting documentation, without having the CEL SDK installed])]) AS_IF([test -z "$with_cel"], [with_cel=yes]) AS_IF([test $with_cel != no], [CS_PATH_CEL_EMIT([1.1], [], [AC_MSG_ERROR([ *** CEL could not be found or was unusable. The latest version is always *** available from http://cel.crystalspace3d.org/ ])]) AC_DEFINE([USE_CEL], [], [Define to enable CEL.]) AC_DEFINE_UNQUOTED([CEL_PLUGIN_DIR], ["$CEL_PLUGIN_DIR"], [Define with path to CEL plugins.]) ])]) #------------------------------------------------------------------------------ # Determine if plugin meta-information should be embedded directly into plugin # modules or if it should exist in stand-alone .csplugin files. On Unix, # embedding is accomplished via libbfd which carries a GPL license. If your # project is compatible with GPL, then set gpl_compatible to "yes". This will # cause embedding to be enabled on Unix by default. Otherwise, set it to "no", # which will cause embedding to be disabled by default on Unix. (In any event, # the user can override the default setting with the # --enable-meta-info-embedding option.) #------------------------------------------------------------------------------ m4_define([gpl_compatible], [no]) CS_META_INFO_EMBED([emit], gpl_compatible) AS_IF([test $enable_meta_info_embedding = yes], [CS_EMIT_BUILD_PROPERTY([COMPILER.CFLAGS], [AS_ESCAPE([$(EMBED_META.CFLAGS)])], [+]) CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [AS_ESCAPE([$(EMBED_META.LFLAGS)])], [+])]) #---------------------------------------------------------------------------- # Package configuration switches. #---------------------------------------------------------------------------- AC_ARG_ENABLE([debug], [AC_HELP_STRING([--enable-debug], [build with debugging information (default NO)])], [], [enable_debug=no]) AC_MSG_CHECKING([build mode]) AS_IF([test $enable_debug = yes], [build_mode=debug], [build_mode=optimize]) AC_MSG_RESULT([$build_mode]) CS_EMIT_BUILD_PROPERTY([MODE], [$build_mode]) #----------------------------------------------------------------------------- # Emit install paths and package information. #----------------------------------------------------------------------------- CS_OUTPUT_INSTALLDIRS CS_EMIT_PACKAGEINFO #---------------------------------------------------------------------------- # Emit generated files. #---------------------------------------------------------------------------- CS_JAMCONFIG_OUTPUT([Jamconfig]) AC_CONFIG_FILES([Jamfile]) AC_OUTPUT AC_MSG_NOTICE([ Please note that this project uses Jam as its build tool, therefore you must type 'jam' to build the project. Jam home: http://www.perforce.com/jam/jam.html Jam source: ftp://ftp.perforce.com/jam/ ]) crystalspace-glshader-cg-2.0/autogen.sh0000755000175000017500000000053211544132321017527 0ustar devfildevfil#! /bin/sh if test ! -f configure.ac ; then echo "*** Please invoke this script from directory containing configure.ac." exit 1 fi MACROFILE=aclocal.m4 MACRODIR=mk/autoconf rm -f $MACROFILE for i in $MACRODIR/*.m4 ; do cat $i >> $MACROFILE done autoheader rc=$? if test $rc -eq 0; then autoconf rc=$? fi rm -f $MACROFILE exit $rc crystalspace-glshader-cg-2.0/Jamrules0000644000175000017500000000125711544132321017240 0ustar devfildevfilif ! $(BUILDTOP) { BUILDTOP = . ; } # Include configuration. JAMCONFIG ?= $(BUILDTOP)/Jamconfig ; include $(JAMCONFIG) ; # Set up compiler flags. # Unfortunately, we can not use FDefines here since Boost Jam does not have it, # and we have not yet included mk/jam/build.jam which provides an emulation # layer for Boost. We can not include build.jam earlier because these flags # need to be defined before build.jam is included. :-( COMPILER.CFLAGS = -Wall -Wno-unknown-pragmas ; COMPILER.CFLAGS.optimize = -O3 -fomit-frame-pointer -ffast-math ; COMPILER.CFLAGS.debug = -g3 -DCS_DEBUG ; COMPILER.CFLAGS.profile = -gp -O3 ; # Include CS build rules include $(TOP)/mk/jam/build.jam ; crystalspace-glshader-cg-2.0/configure0000755000175000017500000133667611544132322017464 0ustar devfildevfil#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.67 for crystalspace-glshader-cg 1.4. # # Report bugs to <>. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p' elif mkdirs . 2>/dev/null; then as_mkdir_p='mkdirs' else as_mkdir_p='' fi test -d ./-p && rmdir ./-p if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='crystalspace-glshader-cg' PACKAGE_TARNAME='crystalspace-glshader-cg' PACKAGE_VERSION='1.4' PACKAGE_STRING='crystalspace-glshader-cg 1.4' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="mk/jam/build.jam" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS CONFIG_BFD ac_ct_OBJCOPY OBJCOPY EGREP GREP CPP CRYSTAL_CONFIG_TOOL CRYSTAL CONFIG_CPPUNIT ac_ct_PKG_CONFIG PKG_CONFIG TTREE PERL MKDIRS MKDIR APPLE_LIBTOOL CS_LT_APPLE ac_ct_LIBTOOL LIBTOOL LIBTOOL_PATH ac_ct_LIBTOOL_TEST LIBTOOL_TEST INSTALL MAKEINFO DVIPDF DVIPS TEXI2PDF TEXI2DVI ac_ct_DOT DOT DOXYGEN ac_ct_WINDRES WINDRES RANLIB ac_ct_LD LD ac_ct_CXX CXXFLAGS CXX OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC CS_TOP_BUILDDIR CS_TOP_SRCDIR host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL CRYSTAL_TOOLS_PREFIX' ac_subst_files='' ac_user_opts=' enable_option_checking enable_as_needed enable_gc_sections enable_large_address_aware enable_universal_binary with_cppunit with_cs with_cs_prefix enable_cstest enable_meta_info_embedding with_bfd enable_debug ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CRYSTAL CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # 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 crystalspace-glshader-cg 1.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/crystalspace-glshader-cg] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of crystalspace-glshader-cg 1.4:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-as-needed Utilize --as-needed linker flag, if supported by linker and if the used binutils version is recent enough to support it properly (default YES) --enable-gc-sections Utilize --gc-sections linker flag for some targets (default YES) --large-address-aware Utilize --large-address-aware linker flag (default YES) --enable-universal-binary build Mac OS X universal binaries (default YES on Mac OS X with universal SDK installed, else NO) --enable-cstest verify that the Crystal Space SDK is actually usable (default YES) --enable-meta-info-embedding store plugin meta-information directly inside plugin modules if supported by platform; if disabled, meta-information is stored in stand-alone .csplugin files; this option is enabled by default for non-Unix platforms and on Unix platforms with ELF-format object files; it is disabled by default on Unix platforms if ELF is not available and the project uses a non-GPL-compatible license (such as LGPL) since the non-ELF Unix embedding technology requires the GPL-licensed libbfd library; if ELF is not available, enable this option on Unix only if you are certain you want a GPL-licensed library infecting your project --enable-debug build with debugging information (default NO) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-cppunit=dir specify additional location to search libcppunit if not detected automatically; directories searched include dir/include, dir/lib, and dir --without-cs do not look for an installed Crystal Space SDK; this option is useful only if you need to perform routine maintenance tasks, such as generating project files or converting documentation, without having the Crystal Space SDK installed --with-cs-prefix=CRYSTAL_PREFIX specify location of Crystal Space installation; this is the \$prefix value used when installing the SDK --with-bfd=dir specify additional location to search libbfd if not detected automatically; directories searched include dir/include, dir/lib, and dir Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CRYSTAL Prefix where Crystal Space is installed CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <>. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF crystalspace-glshader-cg configure 1.4 generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval "test \"\${$3+set}\"" = set; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## --------------------- ## ## Report this to ## ## --------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_run cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by crystalspace-glshader-cg $as_me 1.4, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` 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 || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5 ; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## 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 PACKAGE_LONGNAME="Support of Cg shaders for the Crystal Space engine" PACKAGE_COPYRIGHT="LGPL" PACKAGE_HOMEPAGE="http://www.crystalspace3d.org/" ac_aux_dir= for ac_dir in mk/autoconf "$srcdir"/mk/autoconf; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in mk/autoconf \"$srcdir\"/mk/autoconf" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac CS_TOP_SRCDIR=$( cs_indir=`echo "x$srcdir" | tr '\\\\' '/' | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` ac_dir="$cs_indir" pwd -W >/dev/null 2>&1 && ac_pwd_w="pwd -W" || ac_pwd_w=pwd until ac_val=`exec 2>/dev/null; cd "$ac_dir" && $ac_pwd_w` do ac_dir=`$as_dirname -- "$ac_dir" || $as_expr X"$ac_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dir" : 'X\(//\)[^/]' \| \ X"$ac_dir" : 'X\(//\)$' \| \ X"$ac_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` done ac_dir=`echo "$ac_dir" | sed 's?^[./]*??'` ac_val=`echo "$ac_val" | sed 's?/*$??'` cs_outdir=`echo "$cs_indir" | sed "s?^[./]*$ac_dir/*?$ac_val/?"';s?/*$??'` echo $cs_outdir ) CS_TOP_BUILDDIR=. #---------------------------------------------------------------------------- # Setup for the configuration header. #---------------------------------------------------------------------------- ac_config_headers="$ac_config_headers config.h" #---------------------------------------------------------------------------- # Check for tools. #---------------------------------------------------------------------------- # Magic to suppress automatic addition of undesirable flags by Autoconf. CFLAGS="$CFLAGS" 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 -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5 ; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5 ; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5 ; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi 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 -n "$CC"; then : cs_build_prop_val="$CC" 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}CMD.CC ?= $cs_build_prop_val ; " fi cs_build_prop_val="$CPPFLAGS $CFLAGS" 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.CFLAGS += $cs_build_prop_val ; " fi if test "$ac_compiler_gnu" = yes; then : cs_compiler_name_c=GCC else cs_compiler_name_c=`$as_echo "$CC" | $as_tr_cpp` fi cs_build_prop_val="$cs_compiler_name_c" 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.TYPE ?= $cs_build_prop_val ; " fi cs_build_prop_val="$cs_compiler_name_c" 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.TYPE = $cs_build_prop_val ; " fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 $as_echo_n "checking for C compiler version... " >&6; } case $cs_compiler_name_c in GCC) cs_compiler_version_c=`$CC -dumpversion` cs_build_prop_val="$cs_compiler_version_c" 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.VERSION ?= $cs_build_prop_val ; " fi cs_build_prop_val="$cs_compiler_version_c" 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.VERSION = $cs_build_prop_val ; " fi _compiler_version_list=`echo $cs_compiler_version_c | sed -e 's/\./ /g'` cs_build_prop_val="$_compiler_version_list" 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.VERSION_LIST ?= $cs_build_prop_val ; " fi cs_build_prop_val="$_compiler_version_list" 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.VERSION_LIST = $cs_build_prop_val ; " fi ;; esac if test -z "$cs_compiler_version_c"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 $as_echo "unknown" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_compiler_version_c" >&5 $as_echo "$cs_compiler_version_c" >&6; } fi # Check if compiler recognizes -pipe directive. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC accepts -pipe" >&5 $as_echo_n "checking if $CC accepts -pipe... " >&6; } if test "${cs_cv_prog_cc_pipe_ok+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "`echo @-pipe@@ | sed 'y% %#%'`"; then : 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 cs_cflags_save="$CFLAGS" cs_lflags_save="$LDFLAGS" cs_libs_save="$LIBS" cs_build_ok=no for cs_build_item in `echo @-pipe@@ | 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%#% %'` CFLAGS="$cs_cflags_test $cs_cflags_save" LDFLAGS="$cs_lflags_test $cs_lflags_save" LIBS="$cs_libs_test $cs_libs_save" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $cs_build_ok = yes; then : break fi done CFLAGS=$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_cc_pipe=`echo x$cs_build_cflags $cs_build_lflags $cs_build_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_prog_cc_pipe_ok="$cs_cv_prog_cc_pipe" else cs_cv_prog_cc_pipe='' cs_cv_prog_cc_pipe_ok=no fi else cs_cv_prog_cc_pipe='' cs_cv_prog_cc_pipe_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_cc_pipe_ok" >&5 $as_echo "$cs_cv_prog_cc_pipe_ok" >&6; } if test "$cs_cv_prog_cc_pipe_ok" != no; then : cs_build_prop_val="$cs_cv_prog_cc_pipe" 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.CFLAGS += $cs_build_prop_val ; " fi fi # Check if compiler recognizes Sparc v9 CPU. Ugly to pollute # project-agnostic C compiler check, but it is needed by assembly code # implementing Sparc atomic threading operations, and it should not # hurt if the option is not recognized. case $host_cpu in sparc*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC handles Sparc v9" >&5 $as_echo_n "checking if $CC handles Sparc v9... " >&6; } if test "${cs_cv_prog_cc_sparc_v9_ok+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "`echo @-mcpu=v9@@ | sed 'y% %#%'`"; then : 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 cs_cflags_save="$CFLAGS" cs_lflags_save="$LDFLAGS" cs_libs_save="$LIBS" cs_build_ok=no for cs_build_item in `echo @-mcpu=v9@@ | 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%#% %'` CFLAGS="$cs_cflags_test $cs_cflags_save" LDFLAGS="$cs_lflags_test $cs_lflags_save" LIBS="$cs_libs_test $cs_libs_save" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $cs_build_ok = yes; then : break fi done CFLAGS=$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_cc_sparc_v9=`echo x$cs_build_cflags $cs_build_lflags $cs_build_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_prog_cc_sparc_v9_ok="$cs_cv_prog_cc_sparc_v9" else cs_cv_prog_cc_sparc_v9='' cs_cv_prog_cc_sparc_v9_ok=no fi else cs_cv_prog_cc_sparc_v9='' cs_cv_prog_cc_sparc_v9_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_cc_sparc_v9_ok" >&5 $as_echo "$cs_cv_prog_cc_sparc_v9_ok" >&6; } if test "$cs_cv_prog_cc_sparc_v9_ok" != no; then : cs_build_prop_val="$cs_cv_prog_cc_sparc_v9" 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.CFLAGS += $cs_build_prop_val ; " fi fi ;; esac # The -ffunction-sections and -fdata-sections can, in conjunction with # the linker flag --gc-sections, reduce the size of the final linked # binaries. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC accepts -ffunction-sections -fdata-sections" >&5 $as_echo_n "checking if $CC accepts -ffunction-sections -fdata-sections... " >&6; } if test "${cs_cv_prog_cc_individual_sections_ok+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "`echo @-ffunction-sections -fdata-sections@@ | sed 'y% %#%'`"; then : 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 cs_cflags_save="$CFLAGS" cs_lflags_save="$LDFLAGS" cs_libs_save="$LIBS" cs_build_ok=no for cs_build_item in `echo @-ffunction-sections -fdata-sections@@ | 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%#% %'` CFLAGS="$cs_cflags_test $cs_cflags_save" LDFLAGS="$cs_lflags_test $cs_lflags_save" LIBS="$cs_libs_test $cs_libs_save" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $cs_build_ok = yes; then : break fi done CFLAGS=$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_cc_individual_sections=`echo x$cs_build_cflags $cs_build_lflags $cs_build_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_prog_cc_individual_sections_ok="$cs_cv_prog_cc_individual_sections" else cs_cv_prog_cc_individual_sections='' cs_cv_prog_cc_individual_sections_ok=no fi else cs_cv_prog_cc_individual_sections='' cs_cv_prog_cc_individual_sections_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_cc_individual_sections_ok" >&5 $as_echo "$cs_cv_prog_cc_individual_sections_ok" >&6; } if test "$cs_cv_prog_cc_individual_sections_ok" != no; then : cs_build_prop_val="$cs_cv_prog_cc_individual_sections" 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.CFLAGS += $cs_build_prop_val ; " fi fi fi if test -z "$CC"; then : as_fn_error $? "Could not find a usable C compiler." "$LINENO" 5 fi # Magic to suppress automatic addition of undesirable flags by Autoconf. CXXFLAGS="$CXXFLAGS" ac_ext=cpp 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 if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi 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 -n "$CXX"; then : cs_build_prop_val="$CXX" 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}CMD.C++ ?= $cs_build_prop_val ; " fi cs_build_prop_val="$CPPFLAGS $CXXFLAGS" 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 if test "$ac_compiler_gnu" = yes; then : cs_compiler_name_cxx=GCC else cs_compiler_name_cxx=`$as_echo "$CXX" | $as_tr_cpp` fi cs_build_prop_val="$cs_compiler_name_cxx" 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++.TYPE ?= $cs_build_prop_val ; " fi cs_build_prop_val="$cs_compiler_name_cxx" 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.TYPE = $cs_build_prop_val ; " fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 $as_echo_n "checking for C++ compiler version... " >&6; } case $cs_compiler_name_cxx in GCC) cs_compiler_version_cxx=`$CXX -dumpversion` cs_build_prop_val="$cs_compiler_version_cxx" 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++.VERSION ?= $cs_build_prop_val ; " fi cs_build_prop_val="$cs_compiler_version_cxx" 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.VERSION = $cs_build_prop_val ; " fi _compiler_version_list=`echo $cs_compiler_version_cxx | sed -e 's/\./ /g'` cs_build_prop_val="$_compiler_version_list" 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++.VERSION_LIST ?= $cs_build_prop_val ; " fi cs_build_prop_val="$_compiler_version_list" 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.VERSION_LIST = $cs_build_prop_val ; " fi ;; esac if test -z "$cs_compiler_version_cxx"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 $as_echo "unknown" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_compiler_version_cxx" >&5 $as_echo "$cs_compiler_version_cxx" >&6; } fi # Check if compiler can be instructed to produce position-independent-code # (PIC). This feature is required by some platforms when building plugin # modules and shared libraries. { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to treat C++ warnings as errors" >&5 $as_echo_n "checking how to treat C++ warnings as errors... " >&6; } if test "${cs_cv_prog_cxx_pic_werror_ok+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "`echo @-Werror@@ | sed 'y% %#%'`"; then : ac_ext=cpp 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 @-Werror@@ | 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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_pic_werror=`echo x$cs_build_cflags $cs_build_lflags $cs_build_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_prog_cxx_pic_werror_ok="$cs_cv_prog_cxx_pic_werror" else cs_cv_prog_cxx_pic_werror='' cs_cv_prog_cxx_pic_werror_ok=no fi else cs_cv_prog_cxx_pic_werror='' cs_cv_prog_cxx_pic_werror_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_cxx_pic_werror_ok" >&5 $as_echo "$cs_cv_prog_cxx_pic_werror_ok" >&6; } if test "$cs_cv_prog_cxx_pic_werror_ok" != no; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to enable C++ PIC generation" >&5 $as_echo_n "checking how to enable C++ PIC generation... " >&6; } if test "${cs_cv_prog_cxx_pic_ok+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "`echo @-fPIC@@ | sed 'y% %#%'`"; then : ac_ext=cpp 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 @-fPIC@@ | 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_cv_prog_cxx_pic_werror $cs_cflags_save" LDFLAGS="$cs_lflags_test $cs_lflags_save" LIBS="$cs_libs_test $cs_libs_save" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if { ac_try='grep "fPIC" conftest.err >/dev/null 2>&1' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : cs_build_ok=no else cs_build_ok=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $cs_build_ok = yes; then : break fi done rm -f conftest.err 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_pic=`echo x$cs_build_cflags $cs_build_lflags $cs_build_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_prog_cxx_pic_ok="$cs_cv_prog_cxx_pic" else cs_cv_prog_cxx_pic='' cs_cv_prog_cxx_pic_ok=no fi else cs_cv_prog_cxx_pic='' cs_cv_prog_cxx_pic_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_cxx_pic_ok" >&5 $as_echo "$cs_cv_prog_cxx_pic_ok" >&6; } if test "$cs_cv_prog_cxx_pic_ok" != no; then : cs_build_prop_val="$cs_cv_prog_cxx_pic" 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.PIC ?= $cs_build_prop_val ; " fi fi fi if test -z "$CXX"; then : as_fn_error $? "Could not find a usable C++ compiler." "$LINENO" 5 fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then for ac_prog in ld do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$LD"; then ac_cv_prog_LD="$LD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LD="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LD=$ac_cv_prog_LD if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LD" && break done fi if test -z "$LD"; then ac_ct_LD=$LD for ac_prog in ld do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LD"; then ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LD="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LD=$ac_cv_prog_ac_ct_LD if test -n "$ac_ct_LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 $as_echo "$ac_ct_LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_LD" && break done if test "x$ac_ct_LD" = x; then LD="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LD=$ac_ct_LD fi fi if test -n "$LD"; then : # Apple linker is not GNU-compatible. Further, on Leopard, -v emits # to stderr rather than stdout. Handle these anomalies. if echo `ld -v 2>&1` | grep GNU 2>&1 > /dev/null; then : # binutils versions come in the flavors X.Y as well as X.Y.Z { $as_echo "$as_me:${as_lineno-$LINENO}: checking if binutils version >= 2.17" >&5 $as_echo_n "checking if binutils version >= 2.17... " >&6; } if test "${cs_cv_prog_binutils_version_2_17_ok_annotated+set}" = set; then : $as_echo_n "(cached) " >&6 else cs_cv_prog_binutils_is_version= cs_prog_binutils_min_version= cs_prog_binutils_is_suffix= cs_prog_binutils_min_suffix= cs_prog_binutils_is_suffix_done= cs_prog_binutils_min_suffix_done= test -z $cs_cv_prog_binutils_is_version && cs_cv_prog_binutils_is_version=`$LD -v | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_cv_prog_binutils_is_version" && test -z $cs_prog_binutils_is_suffix_done && { cs_prog_binutils_is_suffix_done=yes ; cs_prog_binutils_is_suffix= ; } test -z $cs_cv_prog_binutils_is_version && cs_cv_prog_binutils_is_version=`$LD -v | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_cv_prog_binutils_is_version" && test -z $cs_prog_binutils_is_suffix_done && { cs_prog_binutils_is_suffix_done=yes ; cs_prog_binutils_is_suffix=.0 ; } test -z $cs_cv_prog_binutils_is_version && cs_cv_prog_binutils_is_version=`$LD -v | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_cv_prog_binutils_is_version" && test -z $cs_prog_binutils_is_suffix_done && { cs_prog_binutils_is_suffix_done=yes ; cs_prog_binutils_is_suffix=.0.0 ; } test -z $cs_cv_prog_binutils_is_version && cs_cv_prog_binutils_is_version=`$LD -v | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_cv_prog_binutils_is_version" && test -z $cs_prog_binutils_is_suffix_done && { cs_prog_binutils_is_suffix_done=yes ; cs_prog_binutils_is_suffix=.0.0.0 ; } test -z $cs_cv_prog_binutils_is_version && cs_cv_prog_binutils_is_version=`$LD -v | sed '/[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_cv_prog_binutils_is_version" && test -z $cs_prog_binutils_is_suffix_done && { cs_prog_binutils_is_suffix_done=yes ; cs_prog_binutils_is_suffix=.0.0.0.0 ; } test -z $cs_prog_binutils_min_version && cs_prog_binutils_min_version=`echo 2.17 | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_prog_binutils_min_version" && test -z $cs_prog_binutils_min_suffix_done && { cs_prog_binutils_min_suffix_done=yes ; cs_prog_binutils_min_suffix= ; } test -z $cs_prog_binutils_min_version && cs_prog_binutils_min_version=`echo 2.17 | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_prog_binutils_min_version" && test -z $cs_prog_binutils_min_suffix_done && { cs_prog_binutils_min_suffix_done=yes ; cs_prog_binutils_min_suffix=.0 ; } test -z $cs_prog_binutils_min_version && cs_prog_binutils_min_version=`echo 2.17 | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_prog_binutils_min_version" && test -z $cs_prog_binutils_min_suffix_done && { cs_prog_binutils_min_suffix_done=yes ; cs_prog_binutils_min_suffix=.0.0 ; } test -z $cs_prog_binutils_min_version && cs_prog_binutils_min_version=`echo 2.17 | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_prog_binutils_min_version" && test -z $cs_prog_binutils_min_suffix_done && { cs_prog_binutils_min_suffix_done=yes ; cs_prog_binutils_min_suffix=.0.0.0 ; } test -z $cs_prog_binutils_min_version && cs_prog_binutils_min_version=`echo 2.17 | sed '/[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_prog_binutils_min_version" && test -z $cs_prog_binutils_min_suffix_done && { cs_prog_binutils_min_suffix_done=yes ; cs_prog_binutils_min_suffix=.0.0.0.0 ; } cs_prog_binutils_is_ver_1=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1/'` cs_prog_binutils_is_ver_2=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\2/'` cs_prog_binutils_is_ver_3=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\3/'` cs_prog_binutils_is_ver_4=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\4/'` cs_prog_binutils_is_ver_5=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\5/'` cs_prog_binutils_is_ver_6=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\6/'` cs_prog_binutils_min_ver_1=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1/'` cs_prog_binutils_min_ver_2=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\2/'` cs_prog_binutils_min_ver_3=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\3/'` cs_prog_binutils_min_ver_4=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\4/'` cs_prog_binutils_min_ver_5=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\5/'` cs_prog_binutils_min_ver_6=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\6/'` cs_cv_prog_binutils_version_2_17_ok='' test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_is_ver_1" ">=" "$cs_prog_binutils_min_ver_1" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_min_ver_1" ">=" "$cs_prog_binutils_is_ver_1" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=yes ; } test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_is_ver_2" ">=" "$cs_prog_binutils_min_ver_2" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_min_ver_2" ">=" "$cs_prog_binutils_is_ver_2" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=yes ; } test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_is_ver_3" ">=" "$cs_prog_binutils_min_ver_3" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_min_ver_3" ">=" "$cs_prog_binutils_is_ver_3" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=yes ; } test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_is_ver_4" ">=" "$cs_prog_binutils_min_ver_4" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_min_ver_4" ">=" "$cs_prog_binutils_is_ver_4" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=yes ; } test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_is_ver_5" ">=" "$cs_prog_binutils_min_ver_5" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_min_ver_5" ">=" "$cs_prog_binutils_is_ver_5" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=yes ; } test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_is_ver_6" ">=" "$cs_prog_binutils_min_ver_6" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_17_ok" \ && { expr "$cs_prog_binutils_min_ver_6" ">=" "$cs_prog_binutils_is_ver_6" >/dev/null \ || cs_cv_prog_binutils_version_2_17_ok=yes ; } if test -z "$cs_cv_prog_binutils_version_2_17_ok"; then : cs_cv_prog_binutils_version_2_17_ok=yes fi cs_cv_prog_binutils_version_2_17_ok_annotated="$cs_cv_prog_binutils_version_2_17_ok" if test -n "$cs_cv_prog_binutils_is_version"; then : cs_cv_prog_binutils_version_2_17_ok_annotated="$cs_cv_prog_binutils_version_2_17_ok_annotated (version $cs_cv_prog_binutils_is_version)" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_binutils_version_2_17_ok_annotated" >&5 $as_echo "$cs_cv_prog_binutils_version_2_17_ok_annotated" >&6; } if test "$cs_cv_prog_binutils_version_2_17_ok" = yes; then : cs_prog_binutils_version_ok=yes cs_prog_binutils_version="$cs_cv_prog_binutils_is_version" cs_cv_binutils_true_2_17=yes else cs_prog_binutils_version_ok=no cs_prog_binutils_version='' cs_cv_binutils_true_2_17=no fi if test "$cs_cv_binutils_true_2_17" = yes; then : cs_cv_binutils_2_17=yes fi if test -z "$cs_cv_binutils_2_17"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if binutils version >= 2.16.91" >&5 $as_echo_n "checking if binutils version >= 2.16.91... " >&6; } if test "${cs_cv_prog_binutils_version_2_16_91_ok_annotated+set}" = set; then : $as_echo_n "(cached) " >&6 else cs_cv_prog_binutils_is_version= cs_prog_binutils_min_version= cs_prog_binutils_is_suffix= cs_prog_binutils_min_suffix= cs_prog_binutils_is_suffix_done= cs_prog_binutils_min_suffix_done= test -z $cs_cv_prog_binutils_is_version && cs_cv_prog_binutils_is_version=`$LD -v | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_cv_prog_binutils_is_version" && test -z $cs_prog_binutils_is_suffix_done && { cs_prog_binutils_is_suffix_done=yes ; cs_prog_binutils_is_suffix= ; } test -z $cs_cv_prog_binutils_is_version && cs_cv_prog_binutils_is_version=`$LD -v | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_cv_prog_binutils_is_version" && test -z $cs_prog_binutils_is_suffix_done && { cs_prog_binutils_is_suffix_done=yes ; cs_prog_binutils_is_suffix=.0 ; } test -z $cs_cv_prog_binutils_is_version && cs_cv_prog_binutils_is_version=`$LD -v | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_cv_prog_binutils_is_version" && test -z $cs_prog_binutils_is_suffix_done && { cs_prog_binutils_is_suffix_done=yes ; cs_prog_binutils_is_suffix=.0.0 ; } test -z $cs_cv_prog_binutils_is_version && cs_cv_prog_binutils_is_version=`$LD -v | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_cv_prog_binutils_is_version" && test -z $cs_prog_binutils_is_suffix_done && { cs_prog_binutils_is_suffix_done=yes ; cs_prog_binutils_is_suffix=.0.0.0 ; } test -z $cs_prog_binutils_min_version && cs_prog_binutils_min_version=`echo 2.16.91 | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_prog_binutils_min_version" && test -z $cs_prog_binutils_min_suffix_done && { cs_prog_binutils_min_suffix_done=yes ; cs_prog_binutils_min_suffix= ; } test -z $cs_prog_binutils_min_version && cs_prog_binutils_min_version=`echo 2.16.91 | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_prog_binutils_min_version" && test -z $cs_prog_binutils_min_suffix_done && { cs_prog_binutils_min_suffix_done=yes ; cs_prog_binutils_min_suffix=.0 ; } test -z $cs_prog_binutils_min_version && cs_prog_binutils_min_version=`echo 2.16.91 | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_prog_binutils_min_version" && test -z $cs_prog_binutils_min_suffix_done && { cs_prog_binutils_min_suffix_done=yes ; cs_prog_binutils_min_suffix=.0.0 ; } test -z $cs_prog_binutils_min_version && cs_prog_binutils_min_version=`echo 2.16.91 | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_prog_binutils_min_version" && test -z $cs_prog_binutils_min_suffix_done && { cs_prog_binutils_min_suffix_done=yes ; cs_prog_binutils_min_suffix=.0.0.0 ; } cs_prog_binutils_is_ver_1=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1/'` cs_prog_binutils_is_ver_2=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\2/'` cs_prog_binutils_is_ver_3=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\3/'` cs_prog_binutils_is_ver_4=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\4/'` cs_prog_binutils_is_ver_5=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\5/'` cs_prog_binutils_is_ver_6=`echo ${cs_cv_prog_binutils_is_version}${cs_prog_binutils_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\6/'` cs_prog_binutils_min_ver_1=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1/'` cs_prog_binutils_min_ver_2=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\2/'` cs_prog_binutils_min_ver_3=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\3/'` cs_prog_binutils_min_ver_4=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\4/'` cs_prog_binutils_min_ver_5=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\5/'` cs_prog_binutils_min_ver_6=`echo $cs_prog_binutils_min_version${cs_prog_binutils_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\6/'` cs_cv_prog_binutils_version_2_16_91_ok='' test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_is_ver_1" ">=" "$cs_prog_binutils_min_ver_1" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_min_ver_1" ">=" "$cs_prog_binutils_is_ver_1" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=yes ; } test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_is_ver_2" ">=" "$cs_prog_binutils_min_ver_2" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_min_ver_2" ">=" "$cs_prog_binutils_is_ver_2" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=yes ; } test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_is_ver_3" ">=" "$cs_prog_binutils_min_ver_3" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_min_ver_3" ">=" "$cs_prog_binutils_is_ver_3" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=yes ; } test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_is_ver_4" ">=" "$cs_prog_binutils_min_ver_4" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_min_ver_4" ">=" "$cs_prog_binutils_is_ver_4" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=yes ; } test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_is_ver_5" ">=" "$cs_prog_binutils_min_ver_5" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_min_ver_5" ">=" "$cs_prog_binutils_is_ver_5" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=yes ; } test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_is_ver_6" ">=" "$cs_prog_binutils_min_ver_6" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=no ; } test -z "$cs_cv_prog_binutils_version_2_16_91_ok" \ && { expr "$cs_prog_binutils_min_ver_6" ">=" "$cs_prog_binutils_is_ver_6" >/dev/null \ || cs_cv_prog_binutils_version_2_16_91_ok=yes ; } if test -z "$cs_cv_prog_binutils_version_2_16_91_ok"; then : cs_cv_prog_binutils_version_2_16_91_ok=yes fi cs_cv_prog_binutils_version_2_16_91_ok_annotated="$cs_cv_prog_binutils_version_2_16_91_ok" if test -n "$cs_cv_prog_binutils_is_version"; then : cs_cv_prog_binutils_version_2_16_91_ok_annotated="$cs_cv_prog_binutils_version_2_16_91_ok_annotated (version $cs_cv_prog_binutils_is_version)" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_binutils_version_2_16_91_ok_annotated" >&5 $as_echo "$cs_cv_prog_binutils_version_2_16_91_ok_annotated" >&6; } if test "$cs_cv_prog_binutils_version_2_16_91_ok" = yes; then : cs_prog_binutils_version_ok=yes cs_prog_binutils_version="$cs_cv_prog_binutils_is_version" cs_cv_binutils_2_17=yes else cs_prog_binutils_version_ok=no cs_prog_binutils_version='' fi fi if test -z "$cs_cv_binutils_2_17"; then : cs_cv_binutils_2_17=no fi fi 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/ $//'` if test -n "$cs_build_prop_val"; then : cs_jamconfig_text="${cs_jamconfig_text}CMD.LINK ?= $cs_build_prop_val ; " fi else cs_build_prop_val="\$(CMD.CC)" 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}CMD.LINK ?= $cs_build_prop_val ; " fi fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then for ac_prog in ld do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$LD"; then ac_cv_prog_LD="$LD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LD="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LD=$ac_cv_prog_LD if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LD" && break done fi if test -z "$LD"; then ac_ct_LD=$LD for ac_prog in ld do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LD"; then ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LD="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LD=$ac_cv_prog_ac_ct_LD if test -n "$ac_ct_LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 $as_echo "$ac_ct_LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_LD" && break done if test "x$ac_ct_LD" = x; then LD="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LD=$ac_ct_LD fi fi cs_build_prop_val="$LD" 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}CMD.LD ?= $cs_build_prop_val ; " fi cs_build_prop_val="$LDFLAGS" 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.LFLAGS += $cs_build_prop_val ; " fi # Check if compiler/linker recognizes -shared directive which is needed for # linking plugin modules. Unfortunately, the Apple compiler (and possibly # others) requires extra effort. Even though the compiler does not recognize # the -shared option, it nevertheless returns a "success" result after emitting # the warning "unrecognized option `-shared'". Worse, even -Werror fails to # promote the warning to an error, so we must instead scan the compiler's # output for an appropriate diagnostic. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -shared is accepted" >&5 $as_echo_n "checking if -shared is accepted... " >&6; } if test "${cs_cv_prog_link_shared_ok+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "`echo @-shared $cs_cv_prog_cxx_pic@@ | sed 'y% %#%'`"; then : ac_ext=cpp 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 @-shared $cs_cv_prog_cxx_pic@@ | 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if { ac_try='grep "shared" conftest.err >/dev/null 2>&1' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : cs_build_ok=no else cs_build_ok=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $cs_build_ok = yes; then : break fi done rm -f conftest.err 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_link_shared=`echo x$cs_build_cflags $cs_build_lflags $cs_build_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_prog_link_shared_ok="$cs_cv_prog_link_shared" else cs_cv_prog_link_shared='' cs_cv_prog_link_shared_ok=no fi else cs_cv_prog_link_shared='' cs_cv_prog_link_shared_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_link_shared_ok" >&5 $as_echo "$cs_cv_prog_link_shared_ok" >&6; } if test "$cs_cv_prog_link_shared_ok" != no; then : cs_build_prop_val="-shared" 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}PLUGIN.LFLAGS += $cs_build_prop_val ; " fi fi # Check if linker recognizes -soname which is used to assign a name internally # to plugin modules. if test "" != yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -soname is accepted" >&5 $as_echo_n "checking if -soname is accepted... " >&6; } if test "${cs_cv_prog_link_soname+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_ext=cpp 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 @-Wl,-soname,foobar@@ | 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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_link_soname=yes cs_cv_prog_link_soname_cflags=$cs_build_cflags cs_cv_prog_link_soname_lflags=$cs_build_lflags cs_cv_prog_link_soname_libs=$cs_build_libs else cs_cv_prog_link_soname=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_link_soname" >&5 $as_echo "$cs_cv_prog_link_soname" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -soname is accepted" >&5 $as_echo_n "checking if -soname is accepted... " >&6; } ac_ext=cpp 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 @-Wl,-soname,foobar@@ | 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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_link_soname=yes cs_cv_prog_link_soname_cflags=$cs_build_cflags cs_cv_prog_link_soname_lflags=$cs_build_lflags cs_cv_prog_link_soname_libs=$cs_build_libs else cs_cv_prog_link_soname=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_link_soname" >&5 $as_echo "$cs_cv_prog_link_soname" >&6; } fi if test $cs_cv_prog_link_soname = yes; then : cs_build_prop_val="yes" 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}PLUGIN.LFLAGS.USE_SONAME ?= $cs_build_prop_val ; " fi else cs_cv_prog_link_soname_cflags='' cs_cv_prog_link_soname_lflags='' cs_cv_prog_link_soname_libs='' fi # Check if binutils support response files rm -f conf$$.resp echo "" > conf$$.resp { $as_echo "$as_me:${as_lineno-$LINENO}: checking if response files are accepted" >&5 $as_echo_n "checking if response files are accepted... " >&6; } if test "${cs_cv_prog_link_respfile+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_ext=cpp 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_lflags_save="$LDFLAGS" LDFLAGS="-Wl,@conf$$.resp $cs_lflags_save" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_cv_prog_link_respfile=yes else cs_cv_prog_link_respfile=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$cs_lflags_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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_link_respfile" >&5 $as_echo "$cs_cv_prog_link_respfile" >&6; } if test $cs_cv_prog_link_respfile = yes; then : cs_build_prop_val="yes" 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}LINKER.RESPONSEFILES ?= $cs_build_prop_val ; " fi fi rm -f conf$$.resp # Check if linker supports --as-needed. # Check whether --enable-as-needed was given. if test "${enable_as_needed+set}" = set; then : enableval=$enable_as_needed; fi if test -z "$enable_as_needed"; then : enable_as_needed=yes fi if test "$enable_as_needed" != "no"; then : if test "$cs_cv_binutils_2_17" = "yes"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if --as-needed is supported" >&5 $as_echo_n "checking if --as-needed is supported... " >&6; } if test "${cs_cv_prog_link_as_needed_ok+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "`echo @-Wl,--as-needed@@ | sed 'y% %#%'`"; then : ac_ext=cpp 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 @-Wl,--as-needed@@ | 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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_link_as_needed=`echo x$cs_build_cflags $cs_build_lflags $cs_build_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_prog_link_as_needed_ok="$cs_cv_prog_link_as_needed" else cs_cv_prog_link_as_needed='' cs_cv_prog_link_as_needed_ok=no fi else cs_cv_prog_link_as_needed='' cs_cv_prog_link_as_needed_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_link_as_needed_ok" >&5 $as_echo "$cs_cv_prog_link_as_needed_ok" >&6; } if test "$cs_cv_prog_link_as_needed_ok" != no; then : cs_build_prop_val="$cs_cv_prog_link_as_needed" 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}CMD.LINK += $cs_build_prop_val ; " fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if --no-as-needed is supported" >&5 $as_echo_n "checking if --no-as-needed is supported... " >&6; } if test "${cs_cv_prog_link_no_as_needed_ok+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "`echo @-Wl,--no-as-needed@@ | sed 'y% %#%'`"; then : ac_ext=cpp 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 @-Wl,--no-as-needed@@ | 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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_link_no_as_needed=`echo x$cs_build_cflags $cs_build_lflags $cs_build_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_prog_link_no_as_needed_ok="$cs_cv_prog_link_no_as_needed" else cs_cv_prog_link_no_as_needed='' cs_cv_prog_link_no_as_needed_ok=no fi else cs_cv_prog_link_no_as_needed='' cs_cv_prog_link_no_as_needed_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_link_no_as_needed_ok" >&5 $as_echo "$cs_cv_prog_link_no_as_needed_ok" >&6; } if test "$cs_cv_prog_link_no_as_needed_ok" != no; then : fi fi fi # Check if linker supports --gc-sections. # Check whether --enable-gc-sections was given. if test "${enable_gc_sections+set}" = set; then : enableval=$enable_gc_sections; fi if test -z "$enable_gc_sections"; then : enable_gc_sections=yes fi if test "$enable_gc_sections" != "no"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if --gc-sections is supported" >&5 $as_echo_n "checking if --gc-sections is supported... " >&6; } if test "${cs_cv_prog_link_gc_sections_ok+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "`echo @-Wl,--gc-sections@@ | sed 'y% %#%'`"; then : ac_ext=cpp 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 @-Wl,--gc-sections@@ | 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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_link_gc_sections=`echo x$cs_build_cflags $cs_build_lflags $cs_build_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_prog_link_gc_sections_ok="$cs_cv_prog_link_gc_sections" else cs_cv_prog_link_gc_sections='' cs_cv_prog_link_gc_sections_ok=no fi else cs_cv_prog_link_gc_sections='' cs_cv_prog_link_gc_sections_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_link_gc_sections_ok" >&5 $as_echo "$cs_cv_prog_link_gc_sections_ok" >&6; } if test "$cs_cv_prog_link_gc_sections_ok" != no; then : cs_build_prop_val="$cs_cv_prog_link_gc_sections" 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}LINK.GC_SECTIONS ?= $cs_build_prop_val ; " fi fi fi # Check if linker supports --large-address-aware. # Check whether --enable-large-address-aware was given. if test "${enable_large_address_aware+set}" = set; then : enableval=$enable_large_address_aware; fi if test -z "$enable_large_address_aware"; then : enable_large_address_aware=yes fi if test "$enable_large_address_aware" != "no"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if --large-address-aware is supported" >&5 $as_echo_n "checking if --large-address-aware is supported... " >&6; } if test "${cs_cv_prog_link_large_address_aware_ok+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "`echo @-Wl,--large-address-aware@@ | sed 'y% %#%'`"; then : ac_ext=cpp 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 @-Wl,--large-address-aware@@ | 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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_link_large_address_aware=`echo x$cs_build_cflags $cs_build_lflags $cs_build_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_prog_link_large_address_aware_ok="$cs_cv_prog_link_large_address_aware" else cs_cv_prog_link_large_address_aware='' cs_cv_prog_link_large_address_aware_ok=no fi else cs_cv_prog_link_large_address_aware='' cs_cv_prog_link_large_address_aware_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_link_large_address_aware_ok" >&5 $as_echo "$cs_cv_prog_link_large_address_aware_ok" >&6; } if test "$cs_cv_prog_link_large_address_aware_ok" != no; then : cs_build_prop_val="$cs_cv_prog_link_large_address_aware" 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}CMD.LINK += $cs_build_prop_val ; " fi fi fi # The default RANLIB in Jambase is wrong on some platforms, and is also # unsuitable during cross-compilation, so we set the value unconditionally # (sixth argument of CS_EMIT_BUILD_PROPERTY). if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi cs_build_prop_val="$RANLIB" 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}RANLIB = $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then for ac_prog in windres do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_WINDRES+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDRES="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$WINDRES" && break done fi if test -z "$WINDRES"; then ac_ct_WINDRES=$WINDRES for ac_prog in windres do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_WINDRES+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_WINDRES="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_WINDRES" && break done if test "x$ac_ct_WINDRES" = x; then WINDRES="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi fi cs_build_prop_val="$WINDRES" 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}CMD.WINDRES ?= $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi for ac_prog in doxygen do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DOXYGEN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DOXYGEN"; then ac_cv_prog_DOXYGEN="$DOXYGEN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DOXYGEN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DOXYGEN=$ac_cv_prog_DOXYGEN if test -n "$DOXYGEN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 $as_echo "$DOXYGEN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DOXYGEN" && break done cs_build_prop_val="$DOXYGEN" 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}CMD.DOXYGEN ?= $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then for ac_prog in dot do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DOT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DOT"; then ac_cv_prog_DOT="$DOT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DOT="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DOT=$ac_cv_prog_DOT if test -n "$DOT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOT" >&5 $as_echo "$DOT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DOT" && break done fi if test -z "$DOT"; then ac_ct_DOT=$DOT for ac_prog in dot do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DOT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DOT"; then ac_cv_prog_ac_ct_DOT="$ac_ct_DOT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DOT="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DOT=$ac_cv_prog_ac_ct_DOT if test -n "$ac_ct_DOT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DOT" >&5 $as_echo "$ac_ct_DOT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DOT" && break done if test "x$ac_ct_DOT" = x; then DOT="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DOT=$ac_ct_DOT fi fi cs_build_prop_val="$DOT" 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}CMD.DOT ?= $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi for ac_prog in texi2dvi do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_TEXI2DVI+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$TEXI2DVI"; then ac_cv_prog_TEXI2DVI="$TEXI2DVI" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_TEXI2DVI="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi TEXI2DVI=$ac_cv_prog_TEXI2DVI if test -n "$TEXI2DVI"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEXI2DVI" >&5 $as_echo "$TEXI2DVI" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$TEXI2DVI" && break done cs_build_prop_val="$TEXI2DVI" 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}CMD.TEXI2DVI ?= $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi for ac_prog in texi2pdf do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_TEXI2PDF+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$TEXI2PDF"; then ac_cv_prog_TEXI2PDF="$TEXI2PDF" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_TEXI2PDF="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi TEXI2PDF=$ac_cv_prog_TEXI2PDF if test -n "$TEXI2PDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEXI2PDF" >&5 $as_echo "$TEXI2PDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$TEXI2PDF" && break done cs_build_prop_val="$TEXI2PDF" 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}CMD.TEXI2PDF ?= $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi for ac_prog in dvips do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DVIPS+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DVIPS"; then ac_cv_prog_DVIPS="$DVIPS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DVIPS="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DVIPS=$ac_cv_prog_DVIPS if test -n "$DVIPS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVIPS" >&5 $as_echo "$DVIPS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DVIPS" && break done cs_build_prop_val="$DVIPS" 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}CMD.DVIPS ?= $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi for ac_prog in dvipdf do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DVIPDF+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DVIPDF"; then ac_cv_prog_DVIPDF="$DVIPDF" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DVIPDF="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DVIPDF=$ac_cv_prog_DVIPDF if test -n "$DVIPDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVIPDF" >&5 $as_echo "$DVIPDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DVIPDF" && break done cs_build_prop_val="$DVIPDF" 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}CMD.DVIPDF ?= $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi for ac_prog in makeinfo do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_MAKEINFO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$MAKEINFO"; then ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MAKEINFO="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MAKEINFO=$ac_cv_prog_MAKEINFO if test -n "$MAKEINFO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5 $as_echo "$MAKEINFO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$MAKEINFO" && break done cs_build_prop_val="$MAKEINFO" 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}CMD.MAKEINFO ?= $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi for ac_prog in install do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_INSTALL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$INSTALL"; then ac_cv_prog_INSTALL="$INSTALL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_INSTALL="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi INSTALL=$ac_cv_prog_INSTALL if test -n "$INSTALL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$INSTALL" && break done cs_build_prop_val="$INSTALL" 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}INSTALL ?= $cs_build_prop_val ; " fi # GNU: Search for libtool before glibtool since Fink version is likely newer. if test -z "$LIBTOOL"; then : if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then for ac_prog in libtool glibtool gnulibtool do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LIBTOOL_TEST+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$LIBTOOL_TEST"; then ac_cv_prog_LIBTOOL_TEST="$LIBTOOL_TEST" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /sw/bin$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIBTOOL_TEST="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIBTOOL_TEST=$ac_cv_prog_LIBTOOL_TEST if test -n "$LIBTOOL_TEST"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBTOOL_TEST" >&5 $as_echo "$LIBTOOL_TEST" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LIBTOOL_TEST" && break done fi if test -z "$LIBTOOL_TEST"; then ac_ct_LIBTOOL_TEST=$LIBTOOL_TEST for ac_prog in libtool glibtool gnulibtool do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LIBTOOL_TEST+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIBTOOL_TEST"; then ac_cv_prog_ac_ct_LIBTOOL_TEST="$ac_ct_LIBTOOL_TEST" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /sw/bin$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LIBTOOL_TEST="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIBTOOL_TEST=$ac_cv_prog_ac_ct_LIBTOOL_TEST if test -n "$ac_ct_LIBTOOL_TEST"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIBTOOL_TEST" >&5 $as_echo "$ac_ct_LIBTOOL_TEST" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_LIBTOOL_TEST" && break done if test "x$ac_ct_LIBTOOL_TEST" = x; then LIBTOOL_TEST="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIBTOOL_TEST=$ac_ct_LIBTOOL_TEST fi fi if test -n "$LIBTOOL_TEST"; then : if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi # Extract the first word of "$LIBTOOL_TEST", so it can be a program name with args. set dummy $LIBTOOL_TEST; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_LIBTOOL_PATH+set}" = set; then : $as_echo_n "(cached) " >&6 else case $LIBTOOL_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_LIBTOOL_PATH="$LIBTOOL_PATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /sw/bin$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_LIBTOOL_PATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LIBTOOL_PATH=$ac_cv_path_LIBTOOL_PATH if test -n "$LIBTOOL_PATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBTOOL_PATH" >&5 $as_echo "$LIBTOOL_PATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -n "$LIBTOOL_PATH"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking classification of $LIBTOOL_PATH" >&5 $as_echo_n "checking classification of $LIBTOOL_PATH... " >&6; } if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$LIBTOOL_PATH --version 1>&2"; } >&5 ($LIBTOOL_PATH --version 1>&2) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: gnu" >&5 $as_echo "gnu" >&6; } LIBTOOL="$LIBTOOL_PATH" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: apple" >&5 $as_echo "apple" >&6; } if test -z "$APPLE_LIBTOOL"; then : APPLE_LIBTOOL="$LIBTOOL_PATH" fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then for ac_prog in glibtool gnulibtool do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LIBTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$LIBTOOL"; then ac_cv_prog_LIBTOOL="$LIBTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIBTOOL="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIBTOOL=$ac_cv_prog_LIBTOOL if test -n "$LIBTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBTOOL" >&5 $as_echo "$LIBTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LIBTOOL" && break done fi if test -z "$LIBTOOL"; then ac_ct_LIBTOOL=$LIBTOOL for ac_prog in glibtool gnulibtool do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIBTOOL"; then ac_cv_prog_ac_ct_LIBTOOL="$ac_ct_LIBTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LIBTOOL="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL if test -n "$ac_ct_LIBTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIBTOOL" >&5 $as_echo "$ac_ct_LIBTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_LIBTOOL" && break done if test "x$ac_ct_LIBTOOL" = x; then LIBTOOL="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIBTOOL=$ac_ct_LIBTOOL fi fi fi fi fi fi # Apple: Ensure that Apple libtool will be found before GNU libtool from Fink. if test -z "$APPLE_LIBTOOL"; then : if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi # Extract the first word of "libtool", so it can be a program name with args. set dummy libtool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_CS_LT_APPLE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $CS_LT_APPLE in [\\/]* | ?:[\\/]*) ac_cv_path_CS_LT_APPLE="$CS_LT_APPLE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_CS_LT_APPLE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CS_LT_APPLE=$ac_cv_path_CS_LT_APPLE if test -n "$CS_LT_APPLE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CS_LT_APPLE" >&5 $as_echo "$CS_LT_APPLE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -n "$CS_LT_APPLE"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking classification of $CS_LT_APPLE" >&5 $as_echo_n "checking classification of $CS_LT_APPLE... " >&6; } if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$CS_LT_APPLE --version 1>&2"; } >&5 ($CS_LT_APPLE --version 1>&2) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: gnu" >&5 $as_echo "gnu" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: apple" >&5 $as_echo "apple" >&6; } APPLE_LIBTOOL="$CS_LT_APPLE" fi fi fi cs_build_prop_val="$LIBTOOL" 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}LIBTOOL ?= $cs_build_prop_val ; " fi cs_build_prop_val="$APPLE_LIBTOOL" 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}APPLE_LIBTOOL ?= $cs_build_prop_val ; " fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a directory" >&5 $as_echo_n "checking how to create a directory... " >&6; } if test "${cs_cv_shell_mkdir+set}" = set; then : $as_echo_n "(cached) " >&6 else cs_cv_shell_mkdir='mkdir' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_shell_mkdir" >&5 $as_echo "$cs_cv_shell_mkdir" >&6; } MKDIR=$cs_cv_shell_mkdir { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a directory tree" >&5 $as_echo_n "checking how to create a directory tree... " >&6; } if test "${cs_cv_shell_mkdir_p+set}" = set; then : $as_echo_n "(cached) " >&6 else if $cs_cv_shell_mkdir -p . 2>/dev/null; then cs_cv_shell_mkdir_p='mkdir -p' elif mkdirs . 2>/dev/null; then cs_cv_shell_mkdir_p='mkdirs' fi test -d ./-p && rmdir ./-p fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_shell_mkdir_p" >&5 $as_echo "$cs_cv_shell_mkdir_p" >&6; } if test "${cs_cv_shell_mkdir_p+set}" = set; then : MKDIRS=$cs_cv_shell_mkdir_p else cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache as_fn_error $? "do not know how to create a directory tree" "$LINENO" 5 fi cs_build_prop_val="$MKDIR" 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}CMD.MKDIR ?= $cs_build_prop_val ; " fi cs_build_prop_val="$MKDIRS" 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}CMD.MKDIRS ?= $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi for ac_prog in perl5 perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_PERL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$PERL"; then ac_cv_prog_PERL="$PERL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_PERL="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PERL=$ac_cv_prog_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PERL" && break done cs_build_prop_val="$PERL" 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}PERL ?= $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi for ac_prog in perl5 perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_PERL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$PERL"; then ac_cv_prog_PERL="$PERL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_PERL="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PERL=$ac_cv_prog_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PERL" && break done if test -n "$PERL"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TemplateToolkit" >&5 $as_echo_n "checking for TemplateToolkit... " >&6; } if test "${cs_cv_perl_tt2+set}" = set; then : $as_echo_n "(cached) " >&6 else if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PERL -M'Template 2.11' -MTemplate::Plugin -e 0 1>&2"; } >&5 ($PERL -M'Template 2.11' -MTemplate::Plugin -e 0 1>&2) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : cs_cv_perl_tt2=yes else cs_cv_perl_tt2=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_perl_tt2" >&5 $as_echo "$cs_cv_perl_tt2" >&6; } if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi for ac_prog in ttree do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_TTREE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $TTREE in [\\/]* | ?:[\\/]*) ac_cv_path_TTREE="$TTREE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_TTREE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi TTREE=$ac_cv_path_TTREE if test -n "$TTREE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TTREE" >&5 $as_echo "$TTREE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$TTREE" && break done if test $cs_cv_perl_tt2 = yes && test -n "$TTREE"; then : cs_build_prop_val="$TTREE" 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}TTREE ?= $cs_build_prop_val ; " fi fi fi #---------------------------------------------------------------------------- # Determine system type #---------------------------------------------------------------------------- case $host_cpu in [Ii][3-9]86*|[Xx]86*) cs_host_cpu=x86 ;; powerpc*) cs_host_cpu=powerpc ;; sparc*) cs_host_cpu=sparc ;; mips*) cs_host_cpu=mips ;; alpha*) cs_host_cpu=alpha ;; arm*) cs_host_cpu=arm ;; *) cs_host_cpu=$host_cpu ;; esac cs_host_cpu_normalized="`$as_echo "$cs_host_cpu" | $as_tr_cpp`" cs_build_prop_val="$cs_host_cpu_normalized" 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}TARGET.PROCESSOR ?= $cs_build_prop_val ; " fi cs_host_os_normalized='' case $host_os in mingw*|cygwin*) cs_host_target=win32gcc cs_host_family=windows ;; darwin*) $as_echo "#define __CARBONSOUND__ /**/" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "Carbon/Carbon.h" "ac_cv_header_Carbon_Carbon_h" "/* force compile */ " if test "x$ac_cv_header_Carbon_Carbon_h" = x""yes; then : cs_host_macosx=yes else cs_host_macosx=no fi if test $cs_host_macosx = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-x" >&5 $as_echo_n "checking for --with-x... " >&6; } if test "${with_x+set}" = set && test "$with_x" = "yes"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (assume Darwin)" >&5 $as_echo "yes (assume Darwin)" >&6; } cs_host_macosx=no else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test $cs_host_macosx = yes; then : cs_host_target=macosx cs_host_family=unix cs_host_os_normalized='MacOS/X' $as_echo "#define CS_PLATFORM_MACOSX /**/" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective-C compiler" >&5 $as_echo_n "checking for Objective-C compiler... " >&6; } if test "${cs_cv_prog_objc+set}" = set; then : $as_echo_n "(cached) " >&6 else cs_cv_prog_objc="$CC" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_objc" >&5 $as_echo "$cs_cv_prog_objc" >&6; } cs_build_prop_val="$cs_cv_prog_objc" 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}CMD.OBJC ?= $cs_build_prop_val ; " fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective-C++ compiler" >&5 $as_echo_n "checking for Objective-C++ compiler... " >&6; } if test "${cs_cv_prog_objcxx+set}" = set; then : $as_echo_n "(cached) " >&6 else cs_cv_prog_objcxx="$CXX" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_objcxx" >&5 $as_echo "$cs_cv_prog_objcxx" >&6; } cs_build_prop_val="$cs_cv_prog_objcxx" 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}CMD.OBJC++ ?= $cs_build_prop_val ; " fi else cs_host_target=unix cs_host_family=unix fi if test "$cs_host_target" = macosx && test "$cross_compiling" != yes && test -d "/Developer/SDKs/MacOSX10.4u.sdk"; then : cs_universal_binary_default=yes else cs_universal_binary_default=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build universal binaries" >&5 $as_echo_n "checking whether to build universal binaries... " >&6; } # Check whether --enable-universal-binary was given. if test "${enable_universal_binary+set}" = set; then : enableval=$enable_universal_binary; cs_universal_binary=$enableval else cs_universal_binary=$cs_universal_binary_default fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_universal_binary" >&5 $as_echo "$cs_universal_binary" >&6; } if test "$cs_universal_binary" = yes; then : $as_echo "#define CS_UNIVERSAL_BINARY 1" >>confdefs.h CFLAGS="$CFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 -arch ppc " CXXFLAGS="$CXXFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 -arch ppc " LDFLAGS="$LDFLAGS -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc " cs_header_text="${cs_header_text}#define CS_UNIVERSAL_BINARY " cs_build_prop_val="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 -arch ppc " 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.CFLAGS += $cs_build_prop_val ; " fi cs_build_prop_val="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 -arch ppc " 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 cs_build_prop_val="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc " 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.LFLAGS += $cs_build_prop_val ; " fi fi ;; *) # Everything else is assumed to be Unix or Unix-like. cs_host_target=unix cs_host_family=unix ;; esac case $cs_host_family in windows) $as_echo "#define CS_PLATFORM_WIN32 /**/" >>confdefs.h if test -z "$cs_host_os_normalized"; then : cs_host_os_normalized='Win32' fi ;; unix) $as_echo "#define CS_PLATFORM_UNIX /**/" >>confdefs.h if test -z "$cs_host_os_normalized"; then : cs_host_os_normalized='Unix' fi ;; esac cs_host_os_normalized_uc="`$as_echo "$cs_host_os_normalized" | $as_tr_cpp`" cs_build_prop_val="$cs_host_os_normalized_uc" 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}TARGET.OS ?= $cs_build_prop_val ; " fi cs_build_prop_val="$cs_host_os_normalized" 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}TARGET.OS.NORMALIZED ?= $cs_build_prop_val ; " fi #---------------------------------------------------------------------------- # Check for syntax problems / header files #---------------------------------------------------------------------------- # Nothing yet. #---------------------------------------------------------------------------- # Check for external libraries #---------------------------------------------------------------------------- # Check whether --with-cppunit was given. if test "${with_cppunit+set}" = set; then : withval=$with_cppunit; fi # Backward compatibility: Recognize --with-libcppunit as alias for --with-cppunit. if test -n "$with_libcppunit" && test -z "$with_cppunit"; then : with_cppunit="$with_libcppunit" fi if test -z "$with_cppunit"; then : with_cppunit=yes fi if test "$with_cppunit" != no; then : # If --with-cppunit value is same as cached value, then assume other # cached values are also valid; otherwise, ignore all cached values. if test "$with_cppunit" != "$cs_cv_with_cppunit"; then : cs_ignore_cache=yes else cs_ignore_cache=no fi # Put relevant subdirs of the library directory into PATH and PKGCONFIG PATH_SAVE="$PATH" if test $with_cppunit != yes; then : PATH="$with_cppunit/bin$PATH_SEPARATOR$PATH" PKG_CONFIG_PATH_SAVE_1="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="/usr/local/lib/pkgconfig$PATH_SEPARATOR/sw/lib/pkgconfig$PATH_SEPARATOR/opt/local/lib/pkgconfig$PATH_SEPARATOR/opt/lib/pkgconfig$PATH_SEPARATOR$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$with_cppunit$PATH_SEPARATOR$with_cppunit/lib/pkgconfig$PATH_SEPARATOR$PKG_CONFIG_PATH" export PKG_CONFIG_PATH fi cs_check_lib_flags='' if test "$cs_prog_pkg_config_checked" != yes; then : if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then for ac_prog in pkg-config do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_PKG_CONFIG="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PKG_CONFIG" && break done fi if test -z "$PKG_CONFIG"; then ac_ct_PKG_CONFIG=$PKG_CONFIG for ac_prog in pkg-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_PKG_CONFIG"; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_ct_PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_PKG_CONFIG=$ac_cv_prog_ac_ct_PKG_CONFIG if test -n "$ac_ct_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_PKG_CONFIG" >&5 $as_echo "$ac_ct_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_PKG_CONFIG" && break done if test "x$ac_ct_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_ct_PKG_CONFIG fi fi cs_prog_pkg_config_checked=yes fi if test -z "$cs_cv_prog_pkg_config_ok"; then : if test -n "$PKG_CONFIG"; then : if $PKG_CONFIG --atleast-pkgconfig-version=0.9.0; then : cs_cv_prog_pkg_config_ok=yes else cs_cv_prog_pkg_config_ok=no fi else cs_cv_prog_pkg_config_ok=no fi fi if test $cs_cv_prog_pkg_config_ok = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $PKG_CONFIG recognizes cppunit" >&5 $as_echo_n "checking if $PKG_CONFIG recognizes cppunit... " >&6; } if test "${cs_cv_prog_pkg_config_cppunit+set}" = set; then : $as_echo_n "(cached) " >&6 else if $PKG_CONFIG --exists cppunit; then : cs_cv_prog_pkg_config_cppunit=yes else cs_cv_prog_pkg_config_cppunit=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_pkg_config_cppunit" >&5 $as_echo "$cs_cv_prog_pkg_config_cppunit" >&6; } if test $cs_cv_prog_pkg_config_cppunit = yes; then : if test -z "$cs_cv_prog_pkg_config_cppunit_flags"; then : cs_check_lib_cflag=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --cflags cppunit"; } >&5 ($PKG_CONFIG --cflags cppunit) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` cs_check_lib_lflag='' cs_check_lib_libs=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --libs cppunit"; } >&5 ($PKG_CONFIG --libs cppunit) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` cs_cv_prog_pkg_config_cppunit_flags=`echo @$cs_check_lib_cflag@$cs_check_lib_lflag@$cs_check_lib_libs | sed 'y% %#%'` fi cs_check_lib_flags="$cs_check_lib_flags $cs_cv_prog_pkg_config_cppunit_flags" fi fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cppunit-config", so it can be a program name with args. set dummy ${ac_tool_prefix}cppunit-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_CONFIG_CPPUNIT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $CONFIG_CPPUNIT in [\\/]* | ?:[\\/]*) ac_cv_path_CONFIG_CPPUNIT="$CONFIG_CPPUNIT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_CONFIG_CPPUNIT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CONFIG_CPPUNIT=$ac_cv_path_CONFIG_CPPUNIT if test -n "$CONFIG_CPPUNIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CONFIG_CPPUNIT" >&5 $as_echo "$CONFIG_CPPUNIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_CONFIG_CPPUNIT"; then ac_pt_CONFIG_CPPUNIT=$CONFIG_CPPUNIT # Extract the first word of "cppunit-config", so it can be a program name with args. set dummy cppunit-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_CONFIG_CPPUNIT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_CONFIG_CPPUNIT in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CONFIG_CPPUNIT="$ac_pt_CONFIG_CPPUNIT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_CONFIG_CPPUNIT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_CONFIG_CPPUNIT=$ac_cv_path_ac_pt_CONFIG_CPPUNIT if test -n "$ac_pt_CONFIG_CPPUNIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CONFIG_CPPUNIT" >&5 $as_echo "$ac_pt_CONFIG_CPPUNIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_CONFIG_CPPUNIT" = x; then CONFIG_CPPUNIT="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CONFIG_CPPUNIT=$ac_pt_CONFIG_CPPUNIT fi else CONFIG_CPPUNIT="$ac_cv_path_CONFIG_CPPUNIT" fi if test -n "$CONFIG_CPPUNIT"; then : if test -z "$cs_cv_prog_config_cppunit_ok"; then : if $CONFIG_CPPUNIT --cflags --libs >/dev/null 2>&1; then : cs_cv_prog_config_cppunit_ok=yes else cs_cv_prog_config_cppunit_ok=no fi fi if test $cs_cv_prog_config_cppunit_ok = yes; then : if test -z "$cs_cv_prog_config_cppunit_flags"; then : cs_check_lib_cflag=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$CONFIG_CPPUNIT --cflags "; } >&5 ($CONFIG_CPPUNIT --cflags ) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` cs_check_lib_lflag='' cs_check_lib_libs=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$CONFIG_CPPUNIT --libs "; } >&5 ($CONFIG_CPPUNIT --libs ) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` cs_cv_prog_config_cppunit_flags=`echo @$cs_check_lib_cflag@$cs_check_lib_lflag@$cs_check_lib_libs | sed 'y% %#%'` fi cs_check_lib_flags="$cs_check_lib_flags $cs_cv_prog_config_cppunit_flags" fi fi if test $with_cppunit != yes; then : cs_check_lib_paths=$with_cppunit else cs_check_lib_paths="| /usr/local/include|/usr/local/lib \ /sw/include|/sw/lib \ /opt/local/include|/opt/local/lib \ /opt/include|/opt/lib " fi for cs_lib_item in $cs_check_lib_paths do case $cs_lib_item in *\|*) set filler `echo "$cs_lib_item" | awk 'BEGIN { FS="|" } { for (i=1; i <= NF; ++i) { if ($i == "") print "filler"; else print $i } }'` shift if test $# -eq 0; then : cs_check_incdir='' else if test "$1" = filler; then : cs_check_incdir='' else cs_check_incdir=$1 fi shift fi if test $# -eq 0; then : cs_check_libdir='' else if test "$1" = filler; then : cs_check_libdir='' else cs_check_libdir=$1 fi shift fi if test -n "$cs_check_incdir"; then : cs_check_lib_cflag="-I$cs_check_incdir" else cs_check_lib_cflag='' fi if test -n "$cs_check_libdir"; then : cs_check_lib_lflag="-L$cs_check_libdir" else cs_check_lib_lflag='' fi if test -n "cppunit"; then : cs_check_lib_libs="-lcppunit" cs_check_lib_framework="-framework cppunit" cs_check_lib_framework_define="-DCS_CPPUNIT_PATH=cppunit" else cs_check_lib_libs='' cs_check_lib_framework='' cs_check_lib_framework_define='' fi cs_check_lib_flags="$cs_check_lib_flags `echo @$cs_check_lib_cflag $cs_check_lib_framework_define@$cs_check_lib_lflag@$cs_check_lib_framework | sed 'y% %#%'` `echo @$cs_check_lib_cflag@$cs_check_lib_lflag@$cs_check_lib_libs | sed 'y% %#%'`" ;; *) if test -n "$cs_lib_item/include"; then : cs_check_lib_cflag="-I$cs_lib_item/include" else cs_check_lib_cflag='' fi if test -n "$cs_lib_item/lib"; then : cs_check_lib_lflag="-L$cs_lib_item/lib" else cs_check_lib_lflag='' fi if test -n "cppunit"; then : cs_check_lib_libs="-lcppunit" cs_check_lib_framework="-framework cppunit" cs_check_lib_framework_define="-DCS_CPPUNIT_PATH=cppunit" else cs_check_lib_libs='' cs_check_lib_framework='' cs_check_lib_framework_define='' fi cs_check_lib_flags="$cs_check_lib_flags `echo @$cs_check_lib_cflag $cs_check_lib_framework_define@$cs_check_lib_lflag@$cs_check_lib_framework | sed 'y% %#%'` `echo @$cs_check_lib_cflag@$cs_check_lib_lflag@$cs_check_lib_libs | sed 'y% %#%'`" if test -n "$cs_lib_item"; then : cs_check_lib_cflag="-I$cs_lib_item" else cs_check_lib_cflag='' fi if test -n "$cs_lib_item"; then : cs_check_lib_lflag="-L$cs_lib_item" else cs_check_lib_lflag='' fi if test -n "cppunit"; then : cs_check_lib_libs="-lcppunit" cs_check_lib_framework="-framework cppunit" cs_check_lib_framework_define="-DCS_CPPUNIT_PATH=cppunit" else cs_check_lib_libs='' cs_check_lib_framework='' cs_check_lib_framework_define='' fi cs_check_lib_flags="$cs_check_lib_flags `echo @$cs_check_lib_cflag $cs_check_lib_framework_define@$cs_check_lib_lflag@$cs_check_lib_framework | sed 'y% %#%'` `echo @$cs_check_lib_cflag@$cs_check_lib_lflag@$cs_check_lib_libs | sed 'y% %#%'`" ;; esac done if test "$cs_ignore_cache" != yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcppunit" >&5 $as_echo_n "checking for libcppunit... " >&6; } if test "${cs_cv_libcppunit+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_ext=cpp 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 $cs_check_lib_flags 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CppUnit::TextUi::TestRunner r; r.run(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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_libcppunit=yes cs_cv_libcppunit_cflags=$cs_build_cflags cs_cv_libcppunit_lflags=$cs_build_lflags cs_cv_libcppunit_libs=$cs_build_libs else cs_cv_libcppunit=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_libcppunit" >&5 $as_echo "$cs_cv_libcppunit" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcppunit" >&5 $as_echo_n "checking for libcppunit... " >&6; } ac_ext=cpp 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 $cs_check_lib_flags 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CppUnit::TextUi::TestRunner r; r.run(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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_libcppunit=yes cs_cv_libcppunit_cflags=$cs_build_cflags cs_cv_libcppunit_lflags=$cs_build_lflags cs_cv_libcppunit_libs=$cs_build_libs else cs_cv_libcppunit=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_libcppunit" >&5 $as_echo "$cs_cv_libcppunit" >&6; } fi if test $cs_cv_libcppunit = yes; then : else cs_cv_libcppunit_cflags='' cs_cv_libcppunit_lflags='' cs_cv_libcppunit_libs='' fi PATH="$PATH_SAVE" if test $with_cppunit != yes; then : PKG_CONFIG_PATH="$PKG_CONFIG_PATH_SAVE_1" export PKG_CONFIG_PATH fi else cs_cv_libcppunit=no fi cs_cv_with_cppunit="$with_cppunit" if test "$cs_cv_libcppunit" = yes; then : fi if test $cs_cv_libcppunit = yes; then : if test "" != yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if cppunit is sufficiently recent" >&5 $as_echo_n "checking if cppunit is sufficiently recent... " >&6; } if test "${cs_cv_libcppunit_recent+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_ext=cpp 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 @@@ | 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_cv_libcppunit_cflags $cs_cflags_save" LDFLAGS="$cs_lflags_test $cs_cv_libcppunit_lflags $cs_lflags_save" LIBS="$cs_libs_test $cs_cv_libcppunit_libs $cs_libs_save" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CppUnit::BriefTestProgressListener b; b.startTest(0); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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 $cs_cv_libcppunit_cflags | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_build_lflags=`echo x$cs_lflags_test $cs_cv_libcppunit_lflags | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_build_libs=`echo x$cs_libs_test $cs_cv_libcppunit_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_libcppunit_recent=yes cs_cv_libcppunit_recent_cflags=$cs_build_cflags cs_cv_libcppunit_recent_lflags=$cs_build_lflags cs_cv_libcppunit_recent_libs=$cs_build_libs else cs_cv_libcppunit_recent=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_libcppunit_recent" >&5 $as_echo "$cs_cv_libcppunit_recent" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking if cppunit is sufficiently recent" >&5 $as_echo_n "checking if cppunit is sufficiently recent... " >&6; } ac_ext=cpp 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 @@@ | 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_cv_libcppunit_cflags $cs_cflags_save" LDFLAGS="$cs_lflags_test $cs_cv_libcppunit_lflags $cs_lflags_save" LIBS="$cs_libs_test $cs_cv_libcppunit_libs $cs_libs_save" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CppUnit::BriefTestProgressListener b; b.startTest(0); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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 $cs_cv_libcppunit_cflags | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_build_lflags=`echo x$cs_lflags_test $cs_cv_libcppunit_lflags | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_build_libs=`echo x$cs_libs_test $cs_cv_libcppunit_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_libcppunit_recent=yes cs_cv_libcppunit_recent_cflags=$cs_build_cflags cs_cv_libcppunit_recent_lflags=$cs_build_lflags cs_cv_libcppunit_recent_libs=$cs_build_libs else cs_cv_libcppunit_recent=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_libcppunit_recent" >&5 $as_echo "$cs_cv_libcppunit_recent" >&6; } fi if test $cs_cv_libcppunit_recent = yes; then : if test "$cs_cv_libcppunit" = yes; then : cs_build_prop_val="yes" 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}CPPUNIT.AVAILABLE ?= $cs_build_prop_val ; " fi cs_build_prop_val="$cs_cv_libcppunit_cflags" 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}CPPUNIT.CFLAGS ?= $cs_build_prop_val ; " fi cs_build_prop_val="$cs_cv_libcppunit_lflags $cs_cv_libcppunit_libs" 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}CPPUNIT.LFLAGS ?= $cs_build_prop_val ; " fi fi else cs_cv_libcppunit_recent_cflags='' cs_cv_libcppunit_recent_lflags='' cs_cv_libcppunit_recent_libs='' fi fi #---------------------------------------------------------------------------- # Check for Crystal Space (CS) #---------------------------------------------------------------------------- # Check whether --with-cs was given. if test "${with_cs+set}" = set; then : withval=$with_cs; fi if test -z "$with_cs"; then : with_cs=yes fi if test $with_cs != no; then : # Check whether --with-cs-prefix was given. if test "${with_cs_prefix+set}" = set; then : withval=$with_cs_prefix; CRYSTAL="$withval" export CRYSTAL fi # Check whether --enable-cstest was given. if test "${enable_cstest+set}" = set; then : enableval=$enable_cstest; else enable_cstest=yes fi # Split the DESIRED-VERSION into the major and minor version number # components. cs_version_desired=1.1 sed_expr_base='\([0-9][0-9]*\)\.\([0-9][0-9]*\).*' cs_version_major=`echo $cs_version_desired | sed "s/$sed_expr_base/\1/"` cs_version_minor=`echo $cs_version_desired | sed "s/$sed_expr_base/\2/"` # Try to find an installed cs-config. cs_path='' if test -n "$CRYSTAL"; then : # On MinGW, CRYSTAL may contain the path in one of two flavors: # MSYS paths, separated by $PATH_SEPARATOR, or Win32 paths, separated # by ';'. Since for the configure check we need MSYS paths, CRYSTAL # is first treated like a Win32-style list. If that yields sensible # results these are used subsequently. Otherwise use CRYSTAL as-is. case $host_os in mingw*) my_IFS=$IFS; IFS=\; for win32_dir in $CRYSTAL; do win32_dir=`echo "x$win32_dir" | tr '\\\\' '/' | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` win32_dir=`echo $win32_dir | sed "s/\(.\):/\\/\\1/"` if test -d "$win32_dir"; then : if test -n "$cs_path"; then : cs_path="$cs_path$PATH_SEPARATOR" fi cs_path="$cs_path$win32_dir$PATH_SEPARATOR$win32_dir/bin" fi done IFS=$my_IFS ;; esac if test -z "$cs_path"; then : my_IFS=$IFS; IFS=$PATH_SEPARATOR for cs_dir in $CRYSTAL; do if test -n "$cs_path"; then : cs_path="$cs_path$PATH_SEPARATOR" fi cs_path="$cs_path$cs_dir$PATH_SEPARATOR$cs_dir/bin" done IFS=$my_IFS fi fi if test -n "$cs_path"; then : cs_path="$cs_path$PATH_SEPARATOR" fi cs_path="$cs_path$PATH$PATH_SEPARATOR/usr/local/crystalspace/bin" # Find a suitable CS version. # For a given desired version X.Y, the compatibility rules are as follows: # Y is even (stable version): compatible are X.Y+1 and X.Y+2. # Y is odd (development version): compatible are X.Y+1 up to X.Y+3, assuming # no deprecated features are used. # Generally, an exact version match is preferred. If that is not the case, # stable versions are preferred over development version, with a closer # version number preferred. # This yields the following search order: # Y is even (stable version): X.Y, X.Y+2, X.Y+1 # Y is odd (development version): X.Y, X.Y+1, X.Y+3, X.Y+2 cs_version_sequence="$cs_version_major.$cs_version_minor" cs_version_desired_is_unstable=`expr $cs_version_minor % 2` if test $cs_version_desired_is_unstable -eq 1; then : # Development version search sequence y=`expr $cs_version_minor + 1` cs_version_sequence="$cs_version_sequence $cs_version_major.$y" y=`expr $cs_version_minor + 3` cs_version_sequence="$cs_version_sequence $cs_version_major.$y" y=`expr $cs_version_minor + 2` cs_version_sequence="$cs_version_sequence $cs_version_major.$y" else # Stable version search sequence y=`expr $cs_version_minor + 2` cs_version_sequence="$cs_version_sequence $cs_version_major.$y" y=`expr $cs_version_minor + 1` cs_version_sequence="$cs_version_sequence $cs_version_major.$y" fi for test_version in $cs_version_sequence; do cs_path_X_Y='' test_version_major=`echo $test_version | sed "s/$sed_expr_base/\1/"` test_version_minor=`echo $test_version | sed "s/$sed_expr_base/\2/"` CRYSTAL_X_Y=$(sh -c "echo \$CRYSTAL_`echo ${test_version_major}_${test_version_minor}`") if test -n "$CRYSTAL_X_Y"; then : my_IFS=$IFS; IFS=$PATH_SEPARATOR for cs_dir in $CRYSTAL_X_Y; do if test -n "$cs_path_X_Y"; then : cs_path_X_Y="$cs_path_X_Y$PATH_SEPARATOR" fi cs_path_X_Y="$cs_path_X_Y$cs_dir$PATH_SEPARATOR$cs_dir/bin" done IFS=$my_IFS fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cs-config-$test_version", so it can be a program name with args. set dummy ${ac_tool_prefix}cs-config-$test_version; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_CRYSTAL_CONFIG_TOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else case $CRYSTAL_CONFIG_TOOL in [\\/]* | ?:[\\/]*) ac_cv_path_CRYSTAL_CONFIG_TOOL="$CRYSTAL_CONFIG_TOOL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $cs_path_X_Y$PATH_SEPARATOR$cs_path do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_CRYSTAL_CONFIG_TOOL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CRYSTAL_CONFIG_TOOL=$ac_cv_path_CRYSTAL_CONFIG_TOOL if test -n "$CRYSTAL_CONFIG_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CRYSTAL_CONFIG_TOOL" >&5 $as_echo "$CRYSTAL_CONFIG_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_CRYSTAL_CONFIG_TOOL"; then ac_pt_CRYSTAL_CONFIG_TOOL=$CRYSTAL_CONFIG_TOOL # Extract the first word of "cs-config-$test_version", so it can be a program name with args. set dummy cs-config-$test_version; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_CRYSTAL_CONFIG_TOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_CRYSTAL_CONFIG_TOOL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CRYSTAL_CONFIG_TOOL="$ac_pt_CRYSTAL_CONFIG_TOOL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $cs_path_X_Y$PATH_SEPARATOR$cs_path do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_CRYSTAL_CONFIG_TOOL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_CRYSTAL_CONFIG_TOOL=$ac_cv_path_ac_pt_CRYSTAL_CONFIG_TOOL if test -n "$ac_pt_CRYSTAL_CONFIG_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CRYSTAL_CONFIG_TOOL" >&5 $as_echo "$ac_pt_CRYSTAL_CONFIG_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_CRYSTAL_CONFIG_TOOL" = x; then CRYSTAL_CONFIG_TOOL="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CRYSTAL_CONFIG_TOOL=$ac_pt_CRYSTAL_CONFIG_TOOL fi else CRYSTAL_CONFIG_TOOL="$ac_cv_path_CRYSTAL_CONFIG_TOOL" fi if test -n "$CRYSTAL_CONFIG_TOOL"; then : break fi done # Legacy: CS 1.0 used a bare-named cs-config if test -z "$CRYSTAL_CONFIG_TOOL"; then : if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cs-config", so it can be a program name with args. set dummy ${ac_tool_prefix}cs-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_CRYSTAL_CONFIG_TOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else case $CRYSTAL_CONFIG_TOOL in [\\/]* | ?:[\\/]*) ac_cv_path_CRYSTAL_CONFIG_TOOL="$CRYSTAL_CONFIG_TOOL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $cs_path do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_CRYSTAL_CONFIG_TOOL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CRYSTAL_CONFIG_TOOL=$ac_cv_path_CRYSTAL_CONFIG_TOOL if test -n "$CRYSTAL_CONFIG_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CRYSTAL_CONFIG_TOOL" >&5 $as_echo "$CRYSTAL_CONFIG_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_CRYSTAL_CONFIG_TOOL"; then ac_pt_CRYSTAL_CONFIG_TOOL=$CRYSTAL_CONFIG_TOOL # Extract the first word of "cs-config", so it can be a program name with args. set dummy cs-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_CRYSTAL_CONFIG_TOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_CRYSTAL_CONFIG_TOOL in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CRYSTAL_CONFIG_TOOL="$ac_pt_CRYSTAL_CONFIG_TOOL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $cs_path do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_CRYSTAL_CONFIG_TOOL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_CRYSTAL_CONFIG_TOOL=$ac_cv_path_ac_pt_CRYSTAL_CONFIG_TOOL if test -n "$ac_pt_CRYSTAL_CONFIG_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CRYSTAL_CONFIG_TOOL" >&5 $as_echo "$ac_pt_CRYSTAL_CONFIG_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_CRYSTAL_CONFIG_TOOL" = x; then CRYSTAL_CONFIG_TOOL="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CRYSTAL_CONFIG_TOOL=$ac_pt_CRYSTAL_CONFIG_TOOL fi else CRYSTAL_CONFIG_TOOL="$ac_cv_path_CRYSTAL_CONFIG_TOOL" fi fi if test -n "$CRYSTAL_CONFIG_TOOL"; then : cfg="$CRYSTAL_CONFIG_TOOL" # Still do cs-config version check - this one will also take the release # component into account. Also needed for legacy cs-config. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Crystal Space version >= 1.1" >&5 $as_echo_n "checking if Crystal Space version >= 1.1... " >&6; } if test "${cs_cv_prog_Crystal_Space_version_1_1_ok_annotated+set}" = set; then : $as_echo_n "(cached) " >&6 else cs_cv_prog_Crystal_Space_is_version= cs_prog_Crystal_Space_min_version= cs_prog_Crystal_Space_is_suffix= cs_prog_Crystal_Space_min_suffix= cs_prog_Crystal_Space_is_suffix_done= cs_prog_Crystal_Space_min_suffix_done= test -z $cs_cv_prog_Crystal_Space_is_version && cs_cv_prog_Crystal_Space_is_version=`"$cfg" --version | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_cv_prog_Crystal_Space_is_version" && test -z $cs_prog_Crystal_Space_is_suffix_done && { cs_prog_Crystal_Space_is_suffix_done=yes ; cs_prog_Crystal_Space_is_suffix= ; } test -z $cs_cv_prog_Crystal_Space_is_version && cs_cv_prog_Crystal_Space_is_version=`"$cfg" --version | sed '/[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_cv_prog_Crystal_Space_is_version" && test -z $cs_prog_Crystal_Space_is_suffix_done && { cs_prog_Crystal_Space_is_suffix_done=yes ; cs_prog_Crystal_Space_is_suffix=.0 ; } test -z $cs_prog_Crystal_Space_min_version && cs_prog_Crystal_Space_min_version=`echo 1.1 | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_prog_Crystal_Space_min_version" && test -z $cs_prog_Crystal_Space_min_suffix_done && { cs_prog_Crystal_Space_min_suffix_done=yes ; cs_prog_Crystal_Space_min_suffix= ; } test -z $cs_prog_Crystal_Space_min_version && cs_prog_Crystal_Space_min_version=`echo 1.1 | sed '/[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/;q'` test -n "$cs_prog_Crystal_Space_min_version" && test -z $cs_prog_Crystal_Space_min_suffix_done && { cs_prog_Crystal_Space_min_suffix_done=yes ; cs_prog_Crystal_Space_min_suffix=.0 ; } cs_prog_Crystal_Space_is_ver_1=`echo ${cs_cv_prog_Crystal_Space_is_version}${cs_prog_Crystal_Space_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1/'` cs_prog_Crystal_Space_is_ver_2=`echo ${cs_cv_prog_Crystal_Space_is_version}${cs_prog_Crystal_Space_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\2/'` cs_prog_Crystal_Space_is_ver_3=`echo ${cs_cv_prog_Crystal_Space_is_version}${cs_prog_Crystal_Space_is_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\3/'` cs_prog_Crystal_Space_min_ver_1=`echo $cs_prog_Crystal_Space_min_version${cs_prog_Crystal_Space_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1/'` cs_prog_Crystal_Space_min_ver_2=`echo $cs_prog_Crystal_Space_min_version${cs_prog_Crystal_Space_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\2/'` cs_prog_Crystal_Space_min_ver_3=`echo $cs_prog_Crystal_Space_min_version${cs_prog_Crystal_Space_min_suffix} | sed '/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d;s/.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\3/'` cs_cv_prog_Crystal_Space_version_1_1_ok='' test -z "$cs_cv_prog_Crystal_Space_version_1_1_ok" \ && { expr "$cs_prog_Crystal_Space_is_ver_1" ">=" "$cs_prog_Crystal_Space_min_ver_1" >/dev/null \ || cs_cv_prog_Crystal_Space_version_1_1_ok=no ; } test -z "$cs_cv_prog_Crystal_Space_version_1_1_ok" \ && { expr "$cs_prog_Crystal_Space_min_ver_1" ">=" "$cs_prog_Crystal_Space_is_ver_1" >/dev/null \ || cs_cv_prog_Crystal_Space_version_1_1_ok=yes ; } test -z "$cs_cv_prog_Crystal_Space_version_1_1_ok" \ && { expr "$cs_prog_Crystal_Space_is_ver_2" ">=" "$cs_prog_Crystal_Space_min_ver_2" >/dev/null \ || cs_cv_prog_Crystal_Space_version_1_1_ok=no ; } test -z "$cs_cv_prog_Crystal_Space_version_1_1_ok" \ && { expr "$cs_prog_Crystal_Space_min_ver_2" ">=" "$cs_prog_Crystal_Space_is_ver_2" >/dev/null \ || cs_cv_prog_Crystal_Space_version_1_1_ok=yes ; } test -z "$cs_cv_prog_Crystal_Space_version_1_1_ok" \ && { expr "$cs_prog_Crystal_Space_is_ver_3" ">=" "$cs_prog_Crystal_Space_min_ver_3" >/dev/null \ || cs_cv_prog_Crystal_Space_version_1_1_ok=no ; } test -z "$cs_cv_prog_Crystal_Space_version_1_1_ok" \ && { expr "$cs_prog_Crystal_Space_min_ver_3" ">=" "$cs_prog_Crystal_Space_is_ver_3" >/dev/null \ || cs_cv_prog_Crystal_Space_version_1_1_ok=yes ; } if test -z "$cs_cv_prog_Crystal_Space_version_1_1_ok"; then : cs_cv_prog_Crystal_Space_version_1_1_ok=yes fi cs_cv_prog_Crystal_Space_version_1_1_ok_annotated="$cs_cv_prog_Crystal_Space_version_1_1_ok" if test -n "$cs_cv_prog_Crystal_Space_is_version"; then : cs_cv_prog_Crystal_Space_version_1_1_ok_annotated="$cs_cv_prog_Crystal_Space_version_1_1_ok_annotated (version $cs_cv_prog_Crystal_Space_is_version)" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_Crystal_Space_version_1_1_ok_annotated" >&5 $as_echo "$cs_cv_prog_Crystal_Space_version_1_1_ok_annotated" >&6; } if test "$cs_cv_prog_Crystal_Space_version_1_1_ok" = yes; then : cs_prog_Crystal_Space_version_ok=yes cs_prog_Crystal_Space_version="$cs_cv_prog_Crystal_Space_is_version" cs_sdk=yes else cs_prog_Crystal_Space_version_ok=no cs_prog_Crystal_Space_version='' cs_sdk=no fi if test $cs_sdk = yes; then : cs_liblist="crystalspace" cs_optlibs=`echo x | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` if test -n "$cs_optlibs"; then : cs_optlibs=`"$cfg" --available-libs $cs_optlibs` cs_liblist="$cs_liblist $cs_optlibs" fi CRYSTAL_VERSION=`"$cfg" --version $cs_liblist` CRYSTAL_CFLAGS=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \"\$cfg\" --cxxflags \$cs_liblist"; } >&5 ("$cfg" --cxxflags $cs_liblist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` CRYSTAL_LIBS=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \"\$cfg\" --libs \$cs_liblist"; } >&5 ("$cfg" --libs $cs_liblist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` CRYSTAL_INCLUDE_DIR=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \"\$cfg\" --includedir \$cs_liblist"; } >&5 ("$cfg" --includedir $cs_liblist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` CRYSTAL_AVAILABLE_LIBS=`"$cfg" --available-libs` CRYSTAL_STATICDEPS=`"$cfg" --static-deps` CRYSTAL_PREFIX=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \"\$cfg\" --prefix"; } >&5 ("$cfg" --prefix) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` CRYSTAL_EXEC_PREFIX=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \"\$cfg\" --exec-prefix"; } >&5 ("$cfg" --exec-prefix) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` CRYSTAL_TOOLS_PREFIX=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \"\$cfg\" --tools-prefix"; } >&5 ("$cfg" --tools-prefix) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` if test -z "$CRYSTAL_LIBS"; then : cs_sdk=no fi fi else cs_sdk=no fi if test "$cs_sdk" = yes && test "$enable_cstest" = yes; then : if test "" != yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Crystal Space SDK is usable" >&5 $as_echo_n "checking if Crystal Space SDK is usable... " >&6; } if test "${cs_cv_crystal_sdk+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_ext=cpp 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 @$CRYSTAL_CFLAGS@@$CRYSTAL_LIBS | 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include csStaticVarCleanupFN csStaticVarCleanup; int main () { csString s; s << "Crystal Space"; ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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_crystal_sdk=yes cs_cv_crystal_sdk_cflags=$cs_build_cflags cs_cv_crystal_sdk_lflags=$cs_build_lflags cs_cv_crystal_sdk_libs=$cs_build_libs else cs_cv_crystal_sdk=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_crystal_sdk" >&5 $as_echo "$cs_cv_crystal_sdk" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Crystal Space SDK is usable" >&5 $as_echo_n "checking if Crystal Space SDK is usable... " >&6; } ac_ext=cpp 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 @$CRYSTAL_CFLAGS@@$CRYSTAL_LIBS | 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include csStaticVarCleanupFN csStaticVarCleanup; int main () { csString s; s << "Crystal Space"; ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core 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_crystal_sdk=yes cs_cv_crystal_sdk_cflags=$cs_build_cflags cs_cv_crystal_sdk_lflags=$cs_build_lflags cs_cv_crystal_sdk_libs=$cs_build_libs else cs_cv_crystal_sdk=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_crystal_sdk" >&5 $as_echo "$cs_cv_crystal_sdk" >&6; } fi if test $cs_cv_crystal_sdk = yes; then : else cs_cv_crystal_sdk_cflags='' cs_cv_crystal_sdk_lflags='' cs_cv_crystal_sdk_libs='' cs_sdk=no fi fi if test "$cs_sdk" = yes; then : CRYSTAL_AVAILABLE=yes else CRYSTAL_AVAILABLE=no CRYSTAL_CFLAGS='' CRYSTAL_VERSION='' CRYSTAL_LIBS='' CRYSTAL_INCLUDE_DIR='' CRYSTAL_PREFIX='' CRYSTAL_EXEC_PREFIX='' CRYSTAL_TOOLS_PREFIX='' as_fn_error $? " *** Crystal Space could not be found or was unusable. The latest version is *** always available from http://www.crystalspace3d.org/ *** Also, be sure that you have either installed Crystal Space or set the *** CRYSTAL_1_1 environment variable properly. " "$LINENO" 5 fi cs_build_prop_val="$CRYSTAL_AVAILABLE" 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}CRYSTAL.AVAILABLE ?= $cs_build_prop_val ; " fi cs_build_prop_val="$CRYSTAL_VERSION" 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}CRYSTAL.VERSION ?= $cs_build_prop_val ; " fi cs_build_prop_val="$CRYSTAL_CFLAGS" 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}CRYSTAL.CFLAGS ?= $cs_build_prop_val ; " fi cs_build_prop_val="$CRYSTAL_LIBS" 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}CRYSTAL.LFLAGS ?= $cs_build_prop_val ; " fi cs_build_prop_val="$CRYSTAL_INCLUDE_DIR" 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}CRYSTAL.INCLUDE_DIR ?= $cs_build_prop_val ; " fi cs_build_prop_val="$CRYSTAL_AVAILABLE_LIBS" 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}CRYSTAL.AVAILABLE_LIBS ?= $cs_build_prop_val ; " fi cs_build_prop_val="$CRYSTAL_STATICDEPS" 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}CRYSTAL.STATICDEPS ?= $cs_build_prop_val ; " fi cs_build_prop_val="$CRYSTAL_EXEC_PREFIX" 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}CRYSTAL.EXEC_PREFIX ?= $cs_build_prop_val ; " fi cs_build_prop_val="$CRYSTAL_TOOLS_PREFIX" 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}CRYSTAL.TOOLS_PREFIX ?= $cs_build_prop_val ; " fi fi #---------------------------------------------------------------------------- # Check for Crystal Entity Layer (CEL) #---------------------------------------------------------------------------- cs_build_prop_val="no" 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}CEL.DESIRED ?= $cs_build_prop_val ; " fi #------------------------------------------------------------------------------ # Determine if plugin meta-information should be embedded directly into plugin # modules or if it should exist in stand-alone .csplugin files. On Unix, # embedding is accomplished via libbfd which carries a GPL license. If your # project is compatible with GPL, then set gpl_compatible to "yes". This will # cause embedding to be enabled on Unix by default. Otherwise, set it to "no", # which will cause embedding to be disabled by default on Unix. (In any event, # the user can override the default setting with the # --enable-meta-info-embedding option.) #------------------------------------------------------------------------------ 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5 ; } fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in elf.h do : ac_fn_c_check_header_mongrel "$LINENO" "elf.h" "ac_cv_header_elf_h" "$ac_includes_default" if test "x$ac_cv_header_elf_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ELF_H 1 _ACEOF cs_header_elf_h=yes else cs_header_elf_h=no fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to embed plugin meta-information" >&5 $as_echo_n "checking whether to embed plugin meta-information... " >&6; } case $cs_host_target in unix) if test $cs_header_elf_h = yes; then : cs_embed_meta_info_default=yes else cs_embed_meta_info_default=no fi ;; *) cs_embed_meta_info_default=yes ;; esac # Check whether --enable-meta-info-embedding was given. if test "${enable_meta_info_embedding+set}" = set; then : enableval=$enable_meta_info_embedding; else enable_meta_info_embedding=$cs_embed_meta_info_default fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_meta_info_embedding" >&5 $as_echo "$enable_meta_info_embedding" >&6; } cs_build_prop_val="$enable_meta_info_embedding" 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}EMBED_META ?= $cs_build_prop_val ; " fi if test $enable_meta_info_embedding = yes; then : if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then for ac_prog in windres do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_WINDRES+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDRES="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$WINDRES" && break done fi if test -z "$WINDRES"; then ac_ct_WINDRES=$WINDRES for ac_prog in windres do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_WINDRES+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_WINDRES="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_WINDRES" && break done if test "x$ac_ct_WINDRES" = x; then WINDRES="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi fi cs_build_prop_val="$WINDRES" 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}CMD.WINDRES ?= $cs_build_prop_val ; " fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then for ac_prog in objcopy do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJCOPY+set}" = set; then : $as_echo_n "(cached) " >&6 else 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 do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJCOPY="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJCOPY=$ac_cv_prog_OBJCOPY if test -n "$OBJCOPY"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 $as_echo "$OBJCOPY" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$OBJCOPY" && break done fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJCOPY+set}" = set; then : $as_echo_n "(cached) " >&6 else 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 do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJCOPY="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY if test -n "$ac_ct_OBJCOPY"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJCOPY" >&5 $as_echo "$ac_ct_OBJCOPY" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_OBJCOPY" && break done if test "x$ac_ct_OBJCOPY" = x; then OBJCOPY="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJCOPY=$ac_ct_OBJCOPY fi fi if test -n "$OBJCOPY"; then : cs_build_prop_val="yes" 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}OBJCOPY.AVAILABLE ?= $cs_build_prop_val ; " fi cs_build_prop_val="$OBJCOPY" 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}CMD.OBJCOPY ?= $cs_build_prop_val ; " fi fi if test $cs_header_elf_h = yes; then : cs_build_prop_val="yes" 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}ELF.AVAILABLE ?= $cs_build_prop_val ; " fi else case $host_os in mingw*|cygwin*) ;; *) # Check whether --with-bfd was given. if test "${with_bfd+set}" = set; then : withval=$with_bfd; fi # Backward compatibility: Recognize --with-libbfd as alias for --with-bfd. if test -n "$with_libbfd" && test -z "$with_bfd"; then : with_bfd="$with_libbfd" fi if test -z "$with_bfd"; then : with_bfd=yes fi if test "$with_bfd" != no; then : # If --with-bfd value is same as cached value, then assume other # cached values are also valid; otherwise, ignore all cached values. if test "$with_bfd" != "$cs_cv_with_bfd"; then : cs_ignore_cache=yes else cs_ignore_cache=no fi # Put relevant subdirs of the library directory into PATH and PKGCONFIG PATH_SAVE="$PATH" if test $with_bfd != yes; then : PATH="$with_bfd/bin$PATH_SEPARATOR$PATH" PKG_CONFIG_PATH_SAVE_1="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="/usr/local/lib/pkgconfig$PATH_SEPARATOR/sw/lib/pkgconfig$PATH_SEPARATOR/opt/local/lib/pkgconfig$PATH_SEPARATOR/opt/lib/pkgconfig$PATH_SEPARATOR$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$with_bfd$PATH_SEPARATOR$with_bfd/lib/pkgconfig$PATH_SEPARATOR$PKG_CONFIG_PATH" export PKG_CONFIG_PATH fi cs_check_lib_flags='' if test "$cs_prog_pkg_config_checked" != yes; then : if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then for ac_prog in pkg-config do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_PKG_CONFIG="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PKG_CONFIG" && break done fi if test -z "$PKG_CONFIG"; then ac_ct_PKG_CONFIG=$PKG_CONFIG for ac_prog in pkg-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_PKG_CONFIG"; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_ct_PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_PKG_CONFIG=$ac_cv_prog_ac_ct_PKG_CONFIG if test -n "$ac_ct_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_PKG_CONFIG" >&5 $as_echo "$ac_ct_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_PKG_CONFIG" && break done if test "x$ac_ct_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_ct_PKG_CONFIG fi fi cs_prog_pkg_config_checked=yes fi if test -z "$cs_cv_prog_pkg_config_ok"; then : if test -n "$PKG_CONFIG"; then : if $PKG_CONFIG --atleast-pkgconfig-version=0.9.0; then : cs_cv_prog_pkg_config_ok=yes else cs_cv_prog_pkg_config_ok=no fi else cs_cv_prog_pkg_config_ok=no fi fi if test $cs_cv_prog_pkg_config_ok = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $PKG_CONFIG recognizes bfd" >&5 $as_echo_n "checking if $PKG_CONFIG recognizes bfd... " >&6; } if test "${cs_cv_prog_pkg_config_bfd+set}" = set; then : $as_echo_n "(cached) " >&6 else if $PKG_CONFIG --exists bfd; then : cs_cv_prog_pkg_config_bfd=yes else cs_cv_prog_pkg_config_bfd=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_prog_pkg_config_bfd" >&5 $as_echo "$cs_cv_prog_pkg_config_bfd" >&6; } if test $cs_cv_prog_pkg_config_bfd = yes; then : if test -z "$cs_cv_prog_pkg_config_bfd_flags"; then : cs_check_lib_cflag=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --cflags bfd"; } >&5 ($PKG_CONFIG --cflags bfd) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` cs_check_lib_lflag='' cs_check_lib_libs=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --libs bfd"; } >&5 ($PKG_CONFIG --libs bfd) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` cs_cv_prog_pkg_config_bfd_flags=`echo @$cs_check_lib_cflag@$cs_check_lib_lflag@$cs_check_lib_libs | sed 'y% %#%'` fi cs_check_lib_flags="$cs_check_lib_flags $cs_cv_prog_pkg_config_bfd_flags" fi fi if test "$cs_prog_path_prepared" != yes; then : cs_prog_path_prepared=yes PATH="$PATH$PATH_SEPARATOR/usr/local/bin$PATH_SEPARATOR/sw/bin$PATH_SEPARATOR${srcdir}/bin" export PATH fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}bfd-config", so it can be a program name with args. set dummy ${ac_tool_prefix}bfd-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_CONFIG_BFD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $CONFIG_BFD in [\\/]* | ?:[\\/]*) ac_cv_path_CONFIG_BFD="$CONFIG_BFD" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_CONFIG_BFD="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CONFIG_BFD=$ac_cv_path_CONFIG_BFD if test -n "$CONFIG_BFD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CONFIG_BFD" >&5 $as_echo "$CONFIG_BFD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_CONFIG_BFD"; then ac_pt_CONFIG_BFD=$CONFIG_BFD # Extract the first word of "bfd-config", so it can be a program name with args. set dummy bfd-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_CONFIG_BFD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_CONFIG_BFD in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_CONFIG_BFD="$ac_pt_CONFIG_BFD" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_CONFIG_BFD="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_CONFIG_BFD=$ac_cv_path_ac_pt_CONFIG_BFD if test -n "$ac_pt_CONFIG_BFD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_CONFIG_BFD" >&5 $as_echo "$ac_pt_CONFIG_BFD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_CONFIG_BFD" = x; then CONFIG_BFD="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CONFIG_BFD=$ac_pt_CONFIG_BFD fi else CONFIG_BFD="$ac_cv_path_CONFIG_BFD" fi if test -n "$CONFIG_BFD"; then : if test -z "$cs_cv_prog_config_bfd_ok"; then : if $CONFIG_BFD --cflags --libs >/dev/null 2>&1; then : cs_cv_prog_config_bfd_ok=yes else cs_cv_prog_config_bfd_ok=no fi fi if test $cs_cv_prog_config_bfd_ok = yes; then : if test -z "$cs_cv_prog_config_bfd_flags"; then : cs_check_lib_cflag=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$CONFIG_BFD --cflags "; } >&5 ($CONFIG_BFD --cflags ) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` cs_check_lib_lflag='' cs_check_lib_libs=`{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$CONFIG_BFD --libs "; } >&5 ($CONFIG_BFD --libs ) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } | tr '\\\\' '/' | sed 's/ */ /g;s/^ //;s/ $//'` cs_cv_prog_config_bfd_flags=`echo @$cs_check_lib_cflag@$cs_check_lib_lflag@$cs_check_lib_libs | sed 'y% %#%'` fi cs_check_lib_flags="$cs_check_lib_flags $cs_cv_prog_config_bfd_flags" fi fi if test $with_bfd != yes; then : cs_check_lib_paths=$with_bfd else cs_check_lib_paths="| /usr/local/include|/usr/local/lib \ /sw/include|/sw/lib \ /opt/local/include|/opt/local/lib \ /opt/include|/opt/lib " fi for cs_lib_item in $cs_check_lib_paths do case $cs_lib_item in *\|*) set filler `echo "$cs_lib_item" | awk 'BEGIN { FS="|" } { for (i=1; i <= NF; ++i) { if ($i == "") print "filler"; else print $i } }'` shift if test $# -eq 0; then : cs_check_incdir='' else if test "$1" = filler; then : cs_check_incdir='' else cs_check_incdir=$1 fi shift fi if test $# -eq 0; then : cs_check_libdir='' else if test "$1" = filler; then : cs_check_libdir='' else cs_check_libdir=$1 fi shift fi if test -n "$cs_check_incdir"; then : cs_check_lib_cflag="-I$cs_check_incdir" else cs_check_lib_cflag='' fi if test -n "$cs_check_libdir"; then : cs_check_lib_lflag="-L$cs_check_libdir" else cs_check_lib_lflag='' fi if test -n "bfd"; then : cs_check_lib_libs="-lbfd" cs_check_lib_framework="-framework bfd" cs_check_lib_framework_define="-DCS_BFD_PATH=bfd" else cs_check_lib_libs='' cs_check_lib_framework='' cs_check_lib_framework_define='' fi cs_check_lib_flags="$cs_check_lib_flags `echo @$cs_check_lib_cflag $cs_check_lib_framework_define@$cs_check_lib_lflag@$cs_check_lib_framework | sed 'y% %#%'` `echo @$cs_check_lib_cflag@$cs_check_lib_lflag@$cs_check_lib_libs | sed 'y% %#%'`" ;; *) if test -n "$cs_lib_item/include"; then : cs_check_lib_cflag="-I$cs_lib_item/include" else cs_check_lib_cflag='' fi if test -n "$cs_lib_item/lib"; then : cs_check_lib_lflag="-L$cs_lib_item/lib" else cs_check_lib_lflag='' fi if test -n "bfd"; then : cs_check_lib_libs="-lbfd" cs_check_lib_framework="-framework bfd" cs_check_lib_framework_define="-DCS_BFD_PATH=bfd" else cs_check_lib_libs='' cs_check_lib_framework='' cs_check_lib_framework_define='' fi cs_check_lib_flags="$cs_check_lib_flags `echo @$cs_check_lib_cflag $cs_check_lib_framework_define@$cs_check_lib_lflag@$cs_check_lib_framework | sed 'y% %#%'` `echo @$cs_check_lib_cflag@$cs_check_lib_lflag@$cs_check_lib_libs | sed 'y% %#%'`" if test -n "$cs_lib_item"; then : cs_check_lib_cflag="-I$cs_lib_item" else cs_check_lib_cflag='' fi if test -n "$cs_lib_item"; then : cs_check_lib_lflag="-L$cs_lib_item" else cs_check_lib_lflag='' fi if test -n "bfd"; then : cs_check_lib_libs="-lbfd" cs_check_lib_framework="-framework bfd" cs_check_lib_framework_define="-DCS_BFD_PATH=bfd" else cs_check_lib_libs='' cs_check_lib_framework='' cs_check_lib_framework_define='' fi cs_check_lib_flags="$cs_check_lib_flags `echo @$cs_check_lib_cflag $cs_check_lib_framework_define@$cs_check_lib_lflag@$cs_check_lib_framework | sed 'y% %#%'` `echo @$cs_check_lib_cflag@$cs_check_lib_lflag@$cs_check_lib_libs | sed 'y% %#%'`" ;; esac done if test "$cs_ignore_cache" != yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libbfd" >&5 $as_echo_n "checking for libbfd... " >&6; } if test "${cs_cv_libbfd+set}" = set; then : $as_echo_n "(cached) " >&6 else 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 cs_cflags_save="$CFLAGS" cs_lflags_save="$LDFLAGS" cs_libs_save="$LIBS" cs_build_ok=no for cs_build_item in $cs_check_lib_flags 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%#% %'` CFLAGS="$cs_cflags_test $cs_cflags_save" LDFLAGS="$cs_lflags_test $cs_lflags_save" LIBS="$cs_libs_test -liberty $cs_libs_save" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { bfd_init(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $cs_build_ok = yes; then : break fi done CFLAGS=$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 -liberty | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_libbfd=yes cs_cv_libbfd_cflags=$cs_build_cflags cs_cv_libbfd_lflags=$cs_build_lflags cs_cv_libbfd_libs=$cs_build_libs else cs_cv_libbfd=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_libbfd" >&5 $as_echo "$cs_cv_libbfd" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libbfd" >&5 $as_echo_n "checking for libbfd... " >&6; } 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 cs_cflags_save="$CFLAGS" cs_lflags_save="$LDFLAGS" cs_libs_save="$LIBS" cs_build_ok=no for cs_build_item in $cs_check_lib_flags 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%#% %'` CFLAGS="$cs_cflags_test $cs_cflags_save" LDFLAGS="$cs_lflags_test $cs_lflags_save" LIBS="$cs_libs_test -liberty $cs_libs_save" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { bfd_init(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $cs_build_ok = yes; then : break fi done CFLAGS=$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 -liberty | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_libbfd=yes cs_cv_libbfd_cflags=$cs_build_cflags cs_cv_libbfd_lflags=$cs_build_lflags cs_cv_libbfd_libs=$cs_build_libs else cs_cv_libbfd=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_libbfd" >&5 $as_echo "$cs_cv_libbfd" >&6; } fi if test $cs_cv_libbfd = yes; then : else cs_cv_libbfd_cflags='' cs_cv_libbfd_lflags='' cs_cv_libbfd_libs='' fi PATH="$PATH_SAVE" if test $with_bfd != yes; then : PKG_CONFIG_PATH="$PKG_CONFIG_PATH_SAVE_1" export PKG_CONFIG_PATH fi else cs_cv_libbfd=no fi cs_cv_with_bfd="$with_bfd" if test "$cs_cv_libbfd" = yes; then : fi if test $cs_cv_libbfd = yes; then : if test "" != yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libbfd is usable" >&5 $as_echo_n "checking if libbfd is usable... " >&6; } if test "${cs_cv_libbfd_ok+set}" = set; then : $as_echo_n "(cached) " >&6 else 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 cs_cflags_save="$CFLAGS" cs_lflags_save="$LDFLAGS" cs_libs_save="$LIBS" cs_build_ok=no for cs_build_item in `echo @@@ | sed 'y% %#%'` `echo @@-L/usr/lib@ | 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%#% %'` CFLAGS="$cs_cflags_test $cs_cv_libbfd_cflags $cs_cflags_save" LDFLAGS="$cs_lflags_test $cs_cv_libbfd_lflags $cs_lflags_save" LIBS="$cs_libs_test $cs_cv_libbfd_libs $cs_libs_save" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { bfd* p; asection* s; bfd_init(); p = bfd_openr(0,0); bfd_check_format(p,bfd_object); bfd_get_section_by_name(p,0); bfd_section_size(p,s); bfd_get_section_contents(p,s,0,0,0); bfd_close(p); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $cs_build_ok = yes; then : break fi done CFLAGS=$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 $cs_cv_libbfd_cflags | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_build_lflags=`echo x$cs_lflags_test $cs_cv_libbfd_lflags | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_build_libs=`echo x$cs_libs_test $cs_cv_libbfd_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_libbfd_ok=yes cs_cv_libbfd_ok_cflags=$cs_build_cflags cs_cv_libbfd_ok_lflags=$cs_build_lflags cs_cv_libbfd_ok_libs=$cs_build_libs else cs_cv_libbfd_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_libbfd_ok" >&5 $as_echo "$cs_cv_libbfd_ok" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libbfd is usable" >&5 $as_echo_n "checking if libbfd is usable... " >&6; } 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 cs_cflags_save="$CFLAGS" cs_lflags_save="$LDFLAGS" cs_libs_save="$LIBS" cs_build_ok=no for cs_build_item in `echo @@@ | sed 'y% %#%'` `echo @@-L/usr/lib@ | 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%#% %'` CFLAGS="$cs_cflags_test $cs_cv_libbfd_cflags $cs_cflags_save" LDFLAGS="$cs_lflags_test $cs_cv_libbfd_lflags $cs_lflags_save" LIBS="$cs_libs_test $cs_cv_libbfd_libs $cs_libs_save" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { bfd* p; asection* s; bfd_init(); p = bfd_openr(0,0); bfd_check_format(p,bfd_object); bfd_get_section_by_name(p,0); bfd_section_size(p,s); bfd_get_section_contents(p,s,0,0,0); bfd_close(p); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : cs_build_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $cs_build_ok = yes; then : break fi done CFLAGS=$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 $cs_cv_libbfd_cflags | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_build_lflags=`echo x$cs_lflags_test $cs_cv_libbfd_lflags | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_build_libs=`echo x$cs_libs_test $cs_cv_libbfd_libs | sed 's/^x//;s/ */ /g;s/^ //;s/ $//'` cs_cv_libbfd_ok=yes cs_cv_libbfd_ok_cflags=$cs_build_cflags cs_cv_libbfd_ok_lflags=$cs_build_lflags cs_cv_libbfd_ok_libs=$cs_build_libs else cs_cv_libbfd_ok=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cs_cv_libbfd_ok" >&5 $as_echo "$cs_cv_libbfd_ok" >&6; } fi if test $cs_cv_libbfd_ok = yes; then : else cs_cv_libbfd_ok_cflags='' cs_cv_libbfd_ok_lflags='' cs_cv_libbfd_ok_libs='' fi else cs_cv_libbfd_ok=no fi if test $cs_cv_libbfd_ok = yes; then : if test "$cs_cv_libbfd_ok" = yes; then : cs_build_prop_val="yes" 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}LIBBFD.AVAILABLE ?= $cs_build_prop_val ; " fi cs_build_prop_val="$cs_cv_libbfd_ok_cflags" 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}LIBBFD.CFLAGS ?= $cs_build_prop_val ; " fi cs_build_prop_val="$cs_cv_libbfd_ok_lflags $cs_cv_libbfd_ok_libs" 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}LIBBFD.LFLAGS ?= $cs_build_prop_val ; " fi fi cs_build_prop_val="$cs_cv_libbfd_ok_cflags" 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}EMBED_META.CFLAGS += $cs_build_prop_val ; " fi cs_build_prop_val="$cs_cv_libbfd_ok_lflags $cs_cv_libbfd_ok_libs" 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}EMBED_META.LFLAGS += $cs_build_prop_val ; " fi fi ;; esac fi fi if test $enable_meta_info_embedding = yes; then : cs_build_prop_val="\$(EMBED_META.CFLAGS)" 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.CFLAGS += $cs_build_prop_val ; " fi cs_build_prop_val="\$(EMBED_META.LFLAGS)" 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.LFLAGS += $cs_build_prop_val ; " fi fi #---------------------------------------------------------------------------- # Package configuration switches. #---------------------------------------------------------------------------- # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; else enable_debug=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking build mode" >&5 $as_echo_n "checking build mode... " >&6; } if test $enable_debug = yes; then : build_mode=debug else build_mode=optimize fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $build_mode" >&5 $as_echo "$build_mode" >&6; } cs_build_prop_val="$build_mode" 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}MODE ?= $cs_build_prop_val ; " fi #----------------------------------------------------------------------------- # Emit install paths and package information. #----------------------------------------------------------------------------- # Handle the case when no prefix is given, and the special case when a path # contains more than 2 slashes, these paths seem to be correct but Jam fails # on them. if test $prefix = NONE; then : cs_install_prefix="$ac_default_prefix" else cs_install_prefix=`echo "$prefix" | sed -e 's:///*:/:g'` fi if test $exec_prefix = NONE; then : cs_install_exec_prefix="\$(prefix)" else cs_install_exec_prefix=`echo "$exec_prefix" | sed -e 's:///*:/:g'` fi cs_jamconfig_text="${cs_jamconfig_text}prefix ?= `echo "$cs_install_prefix" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}exec_prefix ?= `echo "$cs_install_exec_prefix" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}bindir ?= `echo "$bindir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}sbindir ?= `echo "$sbindir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}libexecdir ?= `echo "$libexecdir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}datarootdir ?= `echo "$datarootdir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}datadir ?= `echo "$datadir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}sysconfdir ?= `echo "$sysconfdir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}sharedstatedir ?= `echo "$sharedstatedir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}localstatedir ?= `echo "$localstatedir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}libdir ?= `echo "$libdir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}includedir ?= `echo "$includedir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}oldincludedir ?= `echo "$oldincludedir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}infodir ?= `echo "$infodir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}mandir ?= `echo "$mandir" | sed 's/\${\([a-zA-Z_][a-zA-Z_]*\)}/$(\1)/g;s/\\\\/\\\\\\\\/g'` ; " cs_jamconfig_text="${cs_jamconfig_text}PACKAGE_NAME ?= $PACKAGE_NAME ; " cs_jamconfig_text="${cs_jamconfig_text}PACKAGE_VERSION ?= $PACKAGE_VERSION ; " cs_jamconfig_text="${cs_jamconfig_text}PACKAGE_STRING ?= \"$PACKAGE_STRING\" ; " cs_jamconfig_text="${cs_jamconfig_text}PACKAGE_BUGREPORT ?= \"$PACKAGE_BUGREPORT\" ; " cs_jamconfig_text="${cs_jamconfig_text}PACKAGE_LONGNAME ?= \"$PACKAGE_LONGNAME\" ; " cs_jamconfig_text="${cs_jamconfig_text}PACKAGE_HOMEPAGE ?= \"$PACKAGE_HOMEPAGE\" ; " cs_jamconfig_text="${cs_jamconfig_text}PACKAGE_COPYRIGHT ?= \"$PACKAGE_COPYRIGHT\" ; " cs_jamconfig_text="${cs_jamconfig_text}PACKAGE_VERSION_LIST ?= 1 4 ; " #---------------------------------------------------------------------------- # Emit generated files. #---------------------------------------------------------------------------- ac_config_commands="$ac_config_commands Jamconfig" ac_config_files="$ac_config_files Jamfile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p' elif mkdirs . 2>/dev/null; then as_mkdir_p='mkdirs' else as_mkdir_p='' fi test -d ./-p && rmdir ./-p if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by crystalspace-glshader-cg $as_me 1.4, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to <>." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ crystalspace-glshader-cg config.status 1.4 configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # cs_jamconfig_text='$cs_jamconfig_text' cs_dir=`$as_dirname -- Jamconfig || $as_expr XJamconfig : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ XJamconfig : 'X\(//\)[^/]' \| \ XJamconfig : 'X\(//\)$' \| \ XJamconfig : 'X\(/\)' \| . 2>/dev/null || $as_echo XJamconfig | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { if test -n "\$as_mkdir_p"; then \$as_mkdir_p \$cs_dir else as_dir=\$cs_dir as_dirs= while test ! -d "\$as_dir"; do as_dirs="\$as_dir \$as_dirs" as_dir=\`\$as_dirname -- "\$as_dir" || \$as_expr X"\$as_dir" : 'X\\(.*^/\\)//*^/^/*/*\$' \\| \\ X"\$as_dir" : 'X\\(//\\)^/' \\| \\ X"\$as_dir" : 'X\\(//\\)\$' \\| \\ X"\$as_dir" : 'X\\(/\\)' \\| . 2>/dev/null || \$as_echo X"\$as_dir" | sed '/^X\\(.*^/\\)\\/\\/*^/^/*\\/*\$/{ s//\\1/ q } /^X\\(\\/\\/\\)^/.*/{ s//\\1/ q } /^X\\(\\/\\/\\)\$/{ s//\\1/ q } /^X\\(\\/\\).*/{ s//\\1/ q } s/.*/./; q'\` done test ! -n "\$as_dirs" || mkdir \$as_dirs fi || as_fn_error \$? "cannot create directory \$cs_dir" "\$LINENO" 5 ; } _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Jamconfig") CONFIG_COMMANDS="$CONFIG_COMMANDS Jamconfig" ;; "Jamfile") CONFIG_FILES="$CONFIG_FILES Jamfile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { if test -n "$as_mkdir_p"; then $as_mkdir_p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || as_fn_error $? "cannot create directory \"$ac_dir\"" "$LINENO" 5 ; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "Jamconfig":C) echo $ECHO_N "$cs_jamconfig_text$ECHO_C" > $tmp/tcache if diff Jamconfig $tmp/tcache >/dev/null 2>&1; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Jamconfig is unchanged" >&5 $as_echo "$as_me: Jamconfig is unchanged" >&6;} else rm -f Jamconfig cp $tmp/tcache Jamconfig fi rm -f $tmp/tcache ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: Please note that this project uses Jam as its build tool, therefore you must type 'jam' to build the project. Jam home: http://www.perforce.com/jam/jam.html Jam source: ftp://ftp.perforce.com/jam/ " >&5 $as_echo "$as_me: Please note that this project uses Jam as its build tool, therefore you must type 'jam' to build the project. Jam home: http://www.perforce.com/jam/jam.html Jam source: ftp://ftp.perforce.com/jam/ " >&6;} crystalspace-glshader-cg-2.0/plugins/0000755000175000017500000000000011544133021017205 5ustar devfildevfilcrystalspace-glshader-cg-2.0/plugins/Jamfile0000644000175000017500000000006511544130770020510 0ustar devfildevfilSubDir TOP plugins ; SubInclude TOP plugins video ; crystalspace-glshader-cg-2.0/plugins/video/0000755000175000017500000000000011544133024020316 5ustar devfildevfilcrystalspace-glshader-cg-2.0/plugins/video/render3d/0000755000175000017500000000000011544133026022026 5ustar devfildevfilcrystalspace-glshader-cg-2.0/plugins/video/render3d/Jamfile0000644000175000017500000000012411544131032023310 0ustar devfildevfilSubDir TOP plugins video render3d ; SubInclude TOP plugins video render3d shader ; crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/0000755000175000017500000000000011544133031023270 5ustar devfildevfilcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/0000755000175000017500000000000011544133050026141 5ustar devfildevfilcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/0000755000175000017500000000000012162000646030404 5ustar devfildevfilcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.tok0000644000175000017500000000022511774271776033412 0ustar devfildevfilCS_TOKEN_LIST_TOKEN(PROFILE) CS_TOKEN_LIST_TOKEN(ENTRY) CS_TOKEN_LIST_TOKEN(COMPILERARGS) CS_TOKEN_LIST_TOKEN(VARIABLEMAP) CS_TOKEN_LIST_TOKEN(CLIP) ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon_clip.cppcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcomm0000644000175000017500000002375711774271776033511 0ustar devfildevfil/* Copyright (C) 2008 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. */ #include "cssysdef.h" #include "glshader_cg.h" #include "glshader_cgcommon.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { // // PLANE CLIPPING // /* Plane clipping sucks a bit since there is not one good way to do it. - ARB_vertex_program: user clip planes not supported unless position invariance is used. User clip planes for general transformations were left to future extensions. None was ever made. - NVIDIA VPs: NVidia VPs have a special semantic for "clip distances" for vertex programs. This is really nice and we want that. But it obviously doesn't work on non-NVIDIA hardware. - FP clip() [ie fragment kill]: works everywhere, but is not very efficient as it needs a per-fragment check and prevents Z buffer optimizations such as hierarchical Z to kick in. So clip planes may actually be specified in one of 3 ways: - NV VP: use clip plane semantic - ATI, others with position invariance: use glClipPlane() - Other: fragment program clip Unfortunately, to accomodate all 3 ways, setting up a clip plane is cumbersome. Luckily, most of this is encapsulated by the Cg plugin. To define a clip plane: - Use a tag for each plane - Invoke APPLY_CLIPPING_VP or APPLY_CLIPPING_VP_POSINV in the VP - Invoke APPLY_CLIPPING_FP or APPLY_CLIPPING_FP_POSINV in the FP */ void csShaderGLCGCommon::ClipsToVmap () { size_t c; for (c = 0; c < clips.GetSize(); c++) { const Clip& clip = clips[c]; csString destnamePlane; destnamePlane.Format ("_clipPlanes.plane%zu", c); VariableMapEntry vme (CS::InvalidShaderVarStringID, destnamePlane); if (clip.plane.IsConstant ()) { vme.mappingParam = clip.plane; vme.name = clip.plane.name; } else { CS::ShaderVarStringID svName ((uint)svClipPlane - (uint)c); clipPlane[c].AttachNew (new csShaderVariable (svName)); clipPlane[c]->SetValue (0.0f); vme.name = svName; vme.mappingParam.name = svName; } ShaderParameter* sparam = shaderPlug->paramAlloc.Alloc(); sparam->assumeConstant = false; vme.userVal = reinterpret_cast (sparam); variablemap.Push (vme); } for (int i = 0; i < 2; i++) { CS::ShaderVarStringID svName ( (i == 0) ? svClipPackedDist0 : svClipPackedDist1); clipPackedDists[i].AttachNew (new csShaderVariable (svName)); clipPackedDists[i]->SetValue (0.0f); csString destnameDist; destnameDist.Format ("_clipPlanes.packedDists%d", i); VariableMapEntry vme (svName, destnameDist); ShaderParameter* sparam = shaderPlug->paramAlloc.Alloc(); sparam->assumeConstant = false; vme.userVal = reinterpret_cast (sparam); variablemap.Push (vme); } } #define COND_STYLE_NV \ "(" \ "defined(VERT_PROFILE_VP40) " \ "|| defined(VERT_PROFILE_GP4VP)" \ ")" #define COND_STYLE_ATI "defined(VENDOR_ATI)" static const char clipVaryingMacro[] = "#ifdef PROGRAM_TYPE_VERTEX\n" " struct _ClipPlanes\n" " {\n" " uniform float4 plane0;\n" " uniform float4 plane1;\n" " uniform float4 plane2;\n" " uniform float4 plane3;\n" " uniform float4 plane4;\n" " uniform float4 plane5;\n" " uniform float4 packedDists0;\n" " uniform float4 packedDists1;\n" " };\n" " _ClipPlanes _clipPlanes;\n" "\n" " #if " COND_STYLE_NV "\n" " #define _CLIP_OUTPUT(N) out varying float _clip_ ## N : CLP ## N;\n" " #define _CLIP_OUTPUT_UNUSED(N) float _clip_ ## N;\n" " #else\n" " #define _CLIP_OUTPUT(N)\n" " #define _CLIP_OUTPUT_UNUSED(N)\n" " #ifndef PARAM__clip_out_packed_distances1_UNUSED\n" " out varying float4 _clip_out_packed_distances1 : TEXCOORD7;\n" " #endif\n" " #ifndef PARAM__clip_out_packed_distances2_UNUSED\n" " out varying float4 _clip_out_packed_distances2 : TEXCOORD6;\n" " #endif\n" " #endif\n" "#else\n" " #if !(" COND_STYLE_NV ")\n" " #ifndef PARAM__clip_out_packed_distances1_UNUSED\n" " in varying float4 _clip_out_packed_distances1 : TEXCOORD7;\n" " #else\n" " float4 _clip_out_packed_distances1 = float4(0);\n" " #endif\n" " #ifndef PARAM__clip_out_packed_distances2_UNUSED\n" " in varying float4 _clip_out_packed_distances2 : TEXCOORD6;\n" " #else\n" " float4 _clip_out_packed_distances2 = float4(0);\n" " #endif\n" " #endif\n" "#endif\n" "\n"; void csShaderGLCGCommon::OutputClipPreamble (csString& str) { str += clipVaryingMacro; } static const char clipApplPreamble[] = "#ifdef PROGRAM_TYPE_VERTEX\n" " #define _CLIP_COMPUTE_DIST(N, CLIP_POS) \\\n" " float _clip_dist ## N = dot (_clipPlanes.plane ## N, CLIP_POS); \\\n" " _clip_dist ## N -= (N < 4) \\\n" " ? _clipPlanes.packedDists0[N] \\\n" " : _clipPlanes.packedDists1[N-4];\n" " #define _CLIP_COMPUTE_DIST_CD(N, CLIP_POS, CLIP_DIST) \\\n" " float _clip_dist ## N = dot (_clipPlanes.plane ## N, CLIP_POS); \\\n" " _clip_dist ## N -= CLIP_DIST;\n" " #define _CLIP_UNUSED(N) \\\n" " float _clip_dist ## N = 0;\n" "#else\n" "#endif\n" "\n" ; static const char clipApplPostamble[] = "#ifdef PROGRAM_TYPE_VERTEX\n" " #if " COND_STYLE_NV "\n" " #define APPLY_CLIPPING_VP(P_Eye, P_World, P_Object) \\\n" " _CLIP_COMPUTE_DISTS(P_Eye, P_World, P_Object) \\\n" " _clip_0 = _clip_dist0; \\\n" " _clip_1 = _clip_dist1; \\\n" " _clip_2 = _clip_dist2; \\\n" " _clip_3 = _clip_dist3; \\\n" " _clip_4 = _clip_dist4; \\\n" " _clip_5 = _clip_dist5;\n" " #define APPLY_CLIPPING_VP_POSINV(P_Eye, P_World, P_Object) APPLY_CLIPPING_VP(P_Eye, P_World, P_Object)\n" " #else\n" // PosInv clipping always uses clip planes " #define APPLY_CLIPPING_VP_POSINV(P_Eye, P_World, P_Object)\n" " #if " COND_STYLE_ATI "\n" // ATI: can always use clip planes " #define APPLY_CLIPPING_VP(P_Eye, P_World, P_Object) APPLY_CLIPPING_VP_POSINV(P_Eye, P_World, P_Object)\n" " #else\n" " #ifndef PARAM__clip_out_packed_distances1_UNUSED\n" " #define _CLIP_PACK_DISTS_1 \\\n" " _clip_out_packed_distances1.x = _clip_dist0; \\\n" " _clip_out_packed_distances1.y = _clip_dist1; \\\n" " _clip_out_packed_distances1.z = _clip_dist2; \\\n" " _clip_out_packed_distances1.w = _clip_dist3;\n" " #else\n" " #define _CLIP_PACK_DISTS_1\n" " #endif\n" " #ifndef PARAM__clip_out_packed_distances2_UNUSED\n" " #define _CLIP_PACK_DISTS_2 \\\n" " _clip_out_packed_distances2.x = _clip_dist4; \\\n" " _clip_out_packed_distances2.y = _clip_dist5; \\\n" " _clip_out_packed_distances2.z = 0; \\\n" " _clip_out_packed_distances2.w = 0;\n" " #else\n" " #define _CLIP_PACK_DISTS_2\n" " #endif\n" " #define APPLY_CLIPPING_VP(P_Eye, P_World, P_Object) \\\n" " _CLIP_COMPUTE_DISTS(P_Eye, P_World, P_Object) \\\n" " _CLIP_PACK_DISTS_1 \\\n" " _CLIP_PACK_DISTS_2\n" " #endif\n" " #endif\n" "#else\n" " #define APPLY_CLIPPING_FP_POSINV\n" " #if (" COND_STYLE_NV ")\n" " #define APPLY_CLIPPING_FP\n" " #else\n" " #if " COND_STYLE_ATI "\n" " #define APPLY_CLIPPING_FP APPLY_CLIPPING_FP_POSINV\n" " #else\n" " #define APPLY_CLIPPING_FP _CLIP_TO_DISTS\n" " #endif\n" " #endif\n" "#endif\n" "\n" ; void csShaderGLCGCommon::WriteClipApplications (csString& str) { str += clipApplPreamble; size_t c; csString strClipDistsVP; csString strClipDistsFP; csString clipOutStr; strClipDistsVP += "#define _CLIP_COMPUTE_DISTS(P_Eye, P_World, P_Object) "; for (c = 0; c < clips.GetSize(); c++) { const Clip& clip = clips[c]; const char* posStr = 0; switch (clip.space) { case ShaderProgramPluginGL::ClipPlanes::Eye: posStr = "P_Eye"; break; case ShaderProgramPluginGL::ClipPlanes::Object: posStr = "P_World"; break; case ShaderProgramPluginGL::ClipPlanes::World: posStr = "P_Object"; break; } if (clip.distance.IsConstant()) { csVector4 constDist; clip.distance.var->GetValue (constDist); strClipDistsVP.AppendFmt ("\\\n_CLIP_COMPUTE_DIST_CD(%zu, %s, %f) ", c, posStr, constDist[clip.distComp]); } else { strClipDistsVP.AppendFmt ("\\\n_CLIP_COMPUTE_DIST(%zu, %s) ", c, posStr); } clipOutStr.AppendFmt ("_CLIP_OUTPUT(%zu)\n", c); } for (; c < 6; c++) { strClipDistsVP.AppendFmt ("\\\n_CLIP_UNUSED(%zu) ", c); clipOutStr.AppendFmt ("_CLIP_OUTPUT_UNUSED(%zu)\n", c); } str << "#ifdef PROGRAM_TYPE_VERTEX\n"; str << strClipDistsVP; str << "\n"; str << clipOutStr; str << "#endif\n\n"; strClipDistsFP += "#define _CLIP_TO_DISTS "; if (clips.GetSize() > 0) strClipDistsFP += "\\\nclip (_clip_out_packed_distances1); "; if (clips.GetSize() >= 4) strClipDistsFP += "\\\nclip (_clip_out_packed_distances2); "; str << "#ifdef PROGRAM_TYPE_FRAGMENT\n"; str << strClipDistsFP; str << "\n#endif\n\n"; str += clipApplPostamble; } } CS_PLUGIN_NAMESPACE_END(GLShaderCg) ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.csplugincrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.csp0000644000175000017500000000053311774271776033404 0ustar devfildevfil crystalspace.graphics3d.shader.glcg csGLShader_CG OpenGL specific shaderprogram provider for Graphics3D crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/progcache.cpp0000644000175000017500000003436711774271776033106 0ustar devfildevfil/* Copyright (C) 2009 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. */ #include "cssysdef.h" #include "progcache.h" #include "iutil/databuff.h" #include "iutil/hiercache.h" #include "csplugincommon/shader/shadercachehelper.h" #include "csutil/csendian.h" #include "csutil/md5.h" #include "profile_limits.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { /* This define specifies whether the original source should be stored in the program cache. Otherwise, cache items are only identified by the hash of the source. Obviously, this runs the risk of collisions - otoh, this has not been observed as an issue so far. Enable source storing once that does. */ #define PROG_CACHE_STORE_SOURCE 0 static const uint32 cacheFileMagicCC = 0x05435043 ^ (0x00202020 * PROG_CACHE_STORE_SOURCE); enum { cpsValid = 0x6b726f77, cpsInvalid = 0x6b723062 }; /*class ProgramCache; struct ProgramObjectID { csString path; csString item; }; class ProgramObject { friend class ProgramCache; ProgramObjectID id; ProgramObject (); public: bool IsValid () const; const ProgramObjectID& GetID() const { return id; } }; class ProgramCache { public: ProgramObjectID WriteObject (const char* source, const ProfileLimits& limits, const char* objectCode, csString& failReason); };*/ ProgramObject::ProgramObject () : flags (0) {} ProgramObject::ProgramObject (const char* objectCode, uint flags, const csSet& unusedParams) : objectCode (objectCode), flags (flags), unusedParams (unusedParams) {} //-------------------------------------------------------------------------- bool ProgramCache::LoadObject (const ProgramObjectID& id, ProgramObject& program) { CS_ASSERT(!id.archive.IsEmpty()); CS_ASSERT(!id.item.IsEmpty()); if (cache == 0) return false; csRef cacheArcBuf = cache->ReadCache (id.archive); if (!cacheArcBuf.IsValid()) return false; CS::PluginCommon::ShaderCacheHelper::MicroArchive cacheArc; { csMemFile cacheArcFile (cacheArcBuf, true); if (!cacheArc.Read (&cacheArcFile)) return false; } csRef cacheBuf = cacheArc.ReadEntry (id.item); if (!cacheBuf.IsValid()) return false; csRef cacheFile; cacheFile.AttachNew (new csMemFile (cacheBuf, true)); uint32 diskMagic; if (cacheFile->Read ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) return false; if (csLittleEndian::UInt32 (diskMagic) != cacheFileMagicCC) return false; { #if PROG_CACHE_STORE_SOURCE csRef skipBuf = CS::PluginCommon::ShaderCacheHelper::ReadDataBuffer (cacheFile); #else uint32 dummy; cacheFile->Read ((char*)&dummy, sizeof (dummy)); #endif } if (!cacheFile.IsValid()) return false; program = ProgramObject(); { uint32 diskState; if (cacheFile->Read ((char*)&diskState, sizeof (diskState)) != sizeof (diskState)) return false; if (csLittleEndian::UInt32 (diskState) != cpsValid) { return true; } } { uint32 diskFlags; if (cacheFile->Read ((char*)&diskFlags, sizeof (diskFlags)) != sizeof (diskFlags)) return false; program.flags = csLittleEndian::UInt32 (diskFlags); } program.objectCode = CS::PluginCommon::ShaderCacheHelper::ReadString (cacheFile); { csString p; while (!(p = CS::PluginCommon::ShaderCacheHelper::ReadString (cacheFile)) .IsEmpty()) { program.unusedParams.Add (p); } } return true; } bool ProgramCache::SearchObject (const char* source, const ProfileLimits& limits, ProgramObject& program) { if (cache == 0) return false; csString objectCodeCachePathArc, objectCodeCachePathItem; #if PROG_CACHE_STORE_SOURCE csMemFile stringIDs; { csStringReader reader (source); csString line; while (reader.GetLine (line)) { StringStore::ID stringID = shaderPlug->stringStore->GetIDForString (line); uint64 diskID = csLittleEndian::UInt64 (stringID); stringIDs.Write ((char*)&diskID, sizeof (diskID)); } } #endif // PROG_CACHE_STORE_SOURCE CS::Utility::Checksum::MD5::Digest sourceMD5 = CS::Utility::Checksum::MD5::Encode (source); csString cacheArcPath; cacheArcPath.Format ("/%s", sourceMD5.HexString().GetData()); csRef cacheArcBuf = cache->ReadCache (cacheArcPath); if (!cacheArcBuf.IsValid()) return false; CS::PluginCommon::ShaderCacheHelper::MicroArchive cacheArc; { csMemFile cacheArcFile (cacheArcBuf, true); if (!cacheArc.Read (&cacheArcFile)) return false; } csRef foundFile; #if PROG_CACHE_STORE_SOURCE csString entryPrefix (limits.ToString().GetData()); itemPrefix.Append ("/"); for (size_t i = 0; i < cacheArc.GetEntriesNum(); i++) { const char* arcEntry = cacheArc.GetEntryName (i); if (strncmp (arcEntry, entryPrefix, entryPrefix.Length()) != 0) continue; csRef cacheBuf = cacheArc.ReadEntry (arcEntry); if (!cacheBuf.IsValid()) continue; csRef cacheFile; cacheFile.AttachNew (new csMemFile (cacheBuf, true)); uint32 diskMagic; if (cacheFile->Read ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) continue; if (csLittleEndian::UInt32 (diskMagic) != cacheFileMagicCC) continue; csRef cachedIDs = CS::PluginCommon::ShaderCacheHelper::ReadDataBuffer (cacheFile); if (cachedIDs->GetSize() != stringIDs.GetSize()) continue; if (memcmp (cachedIDs->GetData(), stringIDs.GetData(), stringIDs.GetSize()) != 0) continue; foundFile = cacheFile; objectCodeCachePathArc = cacheArcPath; objectCodeCachePathItem = arcEntry; break; } #else { csRef cacheBuf = cacheArc.ReadEntry (limits.ToString().GetData()); if (!cacheBuf.IsValid()) return false; csRef cacheFile; cacheFile.AttachNew (new csMemFile (cacheBuf, true)); uint32 diskMagic; if (cacheFile->Read ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) return false;; if (csLittleEndian::UInt32 (diskMagic) != cacheFileMagicCC) return false;; uint32 diskSize; if (cacheFile->Read ((char*)&diskSize, sizeof (diskSize)) != sizeof (diskSize)) return false;; if (csLittleEndian::UInt32 (diskSize) != strlen (source)) return false;; foundFile = cacheFile; objectCodeCachePathArc = cacheArcPath; objectCodeCachePathItem = limits.ToString().GetData(); } #endif if (!foundFile.IsValid()) return false; program = ProgramObject(); { uint32 diskState; if (foundFile->Read ((char*)&diskState, sizeof (diskState)) != sizeof (diskState)) return false; if (csLittleEndian::UInt32 (diskState) != cpsValid) { return true; } } { uint32 diskFlags; if (foundFile->Read ((char*)&diskFlags, sizeof (diskFlags)) != sizeof (diskFlags)) return false; program.flags = csLittleEndian::UInt32 (diskFlags); } program.objectCode = CS::PluginCommon::ShaderCacheHelper::ReadString (foundFile); if (program.objectCode.IsEmpty()) return false; { csString p; while (!(p = CS::PluginCommon::ShaderCacheHelper::ReadString (foundFile)) .IsEmpty()) { program.unusedParams.Add (p); } } /*if (program) { cgDestroyProgram (program); } cgGetError(); // Clear error program = cgCreateProgram (shaderPlug->context, CG_OBJECT, objectCode, limits.profile, 0, 0); if (!program) return false; CGerror err = cgGetError(); if (err != CG_NO_ERROR) { const char* errStr = cgGetErrorString (err); shaderPlug->Report (CS_REPORTER_SEVERITY_WARNING, "Cg error %s", errStr); return false; }*/ //this->objectCodeCachePathArc = objectCodeCachePathArc; //this->objectCodeCachePathItem = objectCodeCachePathItem; program.id.archive = objectCodeCachePathArc; program.id.item = objectCodeCachePathItem; return true; } bool ProgramCache::WriteObject (const char* source, const ProfileLimits& limits, const ProgramObject& program, ProgramObjectID& id, csString& failReason) { if (cache == 0) return false; #if PROG_CACHE_STORE_SOURCE csMemFile stringIDs; { csStringReader reader (source); csString line; while (reader.GetLine (line)) { StringStore::ID stringID = shaderPlug->stringStore->GetIDForString (line); uint64 diskID = csLittleEndian::UInt64 (stringID); stringIDs.Write ((char*)&diskID, sizeof (diskID)); } } #endif CS::Utility::Checksum::MD5::Digest sourceMD5 = CS::Utility::Checksum::MD5::Encode (source); csString cacheArcPath; cacheArcPath.Format ("/%s", sourceMD5.HexString().GetData()); CS::PluginCommon::ShaderCacheHelper::MicroArchive cacheArc; { csRef cacheArcBuf = cache->ReadCache (cacheArcPath); if (cacheArcBuf.IsValid()) { csMemFile cacheArcFile (cacheArcBuf, true); cacheArc.Read (&cacheArcFile); } } #if PROG_CACHE_STORE_SOURCE csString subItem; csString entryPrefix (limits.ToString().GetData()); itemPrefix.Append ("/"); for (size_t i = 0; i < cacheArc.GetEntriesNum(); i++) { const char* arcEntry = cacheArc.GetEntryName (i); if (strncmp (arcEntry, entryPrefix, entryPrefix.Length()) != 0) continue; csRef cacheBuf = cacheArc.ReadEntry (arcEntry); if (!cacheBuf.IsValid()) continue; csRef cacheFile; cacheFile.AttachNew (new csMemFile (cacheBuf, true)); uint32 diskMagic; if (cacheFile->Read ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) continue; if (csLittleEndian::UInt32 (diskMagic) != cacheFileMagicCC) continue; csRef cachedIDs = CS::PluginCommon::ShaderCacheHelper::ReadDataBuffer (cacheFile); if (cachedIDs->GetSize() != stringIDs.GetSize()) continue; if (memcmp (cachedIDs->GetData(), stringIDs.GetData(), stringIDs.GetSize()) != 0) continue; subItem = arcEntry; break; } if (subItem.IsEmpty()) { uint n = 0; csRef item; do { subItem.Format ("%s%u", entryPrefix.GetData(), n++); item = cacheArc.ReadEntry (subItem); } while (item.IsValid()); } #endif csMemFile cacheFile; uint32 diskMagic = csLittleEndian::UInt32 (cacheFileMagicCC); if (cacheFile.Write ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) { failReason = "write error (magic)"; return false; } #if PROG_CACHE_STORE_SOURCE { csRef idsBuffer (stringIDs.GetAllData()); if (!CS::PluginCommon::ShaderCacheHelper::WriteDataBuffer (&cacheFile, idsBuffer)) { failReason = "write error (source)"; return false; } } #else uint32 diskSize = csLittleEndian::UInt32 ((uint32)strlen (source)); if (cacheFile.Write ((char*)&diskSize, sizeof (diskSize)) != sizeof (diskSize)) { failReason = "write error (source size)"; return false; } #endif if (!program.IsValid()) { uint32 diskState = csLittleEndian::UInt32 (cpsInvalid); if (cacheFile.Write ((char*)&diskState, sizeof (diskState)) != sizeof (diskState)) { failReason = "write error (state-invalid)"; return false; } } else { { uint32 diskState = csLittleEndian::UInt32 (cpsValid); if (cacheFile.Write ((char*)&diskState, sizeof (diskState)) != sizeof (diskState)) { failReason = "write error (state-valid)"; return false; } } { uint32 diskFlags = csLittleEndian::UInt32 (program.flags); if (cacheFile.Write ((char*)&diskFlags, sizeof (diskFlags)) != sizeof (diskFlags)) { failReason = "write error (flags)"; return false; } } if (!CS::PluginCommon::ShaderCacheHelper::WriteString (&cacheFile, program.objectCode)) { failReason = "write error (object code)"; return false; } csSet::GlobalIterator iter (program.unusedParams.GetIterator()); while (iter.HasNext()) { const csString& s = iter.Next(); if (!CS::PluginCommon::ShaderCacheHelper::WriteString (&cacheFile, s)) { failReason = "write error (unused param)"; return false; } } if (!CS::PluginCommon::ShaderCacheHelper::WriteString (&cacheFile, 0)) { failReason = "write error (empty string)"; return false; } } csRef cacheData = cacheFile.GetAllData(); csString objectCodeCachePathItem; #if PROG_CACHE_STORE_SOURCE objectCodeCachePathItem = subItem; #else objectCodeCachePathItem = limits.ToString().GetData(); #endif if (!cacheArc.WriteEntry (objectCodeCachePathItem, cacheData)) { failReason = "failed writing cache entry"; return false; } csMemFile cacheArcFile; bool cacheArcWrite; if ((!(cacheArcWrite = cacheArc.Write (&cacheArcFile))) || !(cache->CacheData (cacheArcFile.GetData(), cacheArcFile.GetSize(), cacheArcPath))) { if (!cacheArcWrite) failReason = "failed writing archive"; else failReason = "failed caching archive"; return false; } id.archive = cacheArcPath; id.item = objectCodeCachePathItem; return true; } } CS_PLUGIN_NAMESPACE_END(GLShaderCg) ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.hcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcomm0000644000175000017500000001766311774271776033510 0ustar devfildevfil/* Copyright (C) 2002 by Anders Stenberg Marten Svanfeldt 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. */ #ifndef __GLSHADER_CGCOMMON_H__ #define __GLSHADER_CGCOMMON_H__ #include "cg_common.h" #include "progcache.h" #include "csplugincommon/opengl/shaderplugin.h" #include "csplugincommon/shader/shaderplugin.h" #include "csplugincommon/shader/shaderprogram.h" #include "csgfx/shadervarcontext.h" #include "ivideo/shader/shader.h" #include "csutil/strhash.h" #include "csutil/leakguard.h" using namespace CS::PluginCommon; CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { class csGLShader_CG; struct ProfileLimits; struct ProfileLimitsPair; struct iShaderProgramCG : public virtual iBase { SCF_INTERFACE(iShaderProgramCG, 0,0,1); virtual const csSet& GetUnusedParameters () = 0; }; struct ShaderParameter { bool assumeConstant; CGparameter param; uint baseSlot; CGtype paramType; csArray arrayItems; ShaderParameter() : assumeConstant (false), param (0), baseSlot ((uint)~0), paramType ((CGtype)0) {} }; class ParamValueCache; class csShaderGLCGCommon : public scfImplementationExt1 { protected: csStringHash xmltokens; #define CS_TOKEN_ITEM_FILE \ "plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.tok" #include "cstool/tokenlist.h" #undef CS_TOKEN_ITEM_FILE csRef shaderPlug; CGprogram program; CGprofile programProfile; bool programPositionInvariant; csString entrypoint; csRefArray cacheKeepNodes; // Wrapped PS1.x shader program csRef pswrap; enum ProgramType { progVP, progFP }; ProgramType programType; ArgumentArray compilerArgs; csRef cgResolve; csSet unusedParams; csSafeCopyArray variablemapConstants; struct Clip { ShaderProgramPluginGL::ClipPlanes::ClipSpace space; ProgramParam plane; ProgramParam distance; int distComp; bool distNeg; }; csArray clips; // Magic SV names enum { svClipPackedDist0 = 0xffff41, svClipPackedDist1 = 0xffff42, svClipPlane = 0xffff23 // must be lowest of the 'magic' values }; csRef clipPackedDists[2]; csRef clipPlane[6]; bool ParseClip (iDocumentNode* node); bool ParseVmap (iDocumentNode* node); csString debugFN; void EnsureDumpFile(); /// Extract 'constant' variable map values, copy them into their own arrays void ExtractVmapConstants (); void FreeShaderParam (ShaderParameter* sparam); void FillShaderParam (ShaderParameter* sparam, CGparameter param); void GetShaderParamSlot (ShaderParameter* sparam); /** * Go over variablemaps and fetch Cg parameters for them */ void GetParamsFromVmap(); /** * Go over variablemaps for constants and set Cg parameters for them */ void GetParamsFromVmapConstants(); //@{ /** * Set properties for a mapped parameter which can only be determined * after compilation */ void GetPostCompileParamProps (); bool GetPostCompileParamProps (ShaderParameter* sparam); //@} void PrecacheClear(); enum { loadLoadToGL = 1, loadIgnoreErrors = 2, loadApplyVmap = 4, loadIgnoreConfigProgramOpts = 8, loadFlagUnusedV2FForInit = 16 }; bool DefaultLoadProgram (iShaderProgramCG* cgResolve, const char* programStr, ProgramType type, const ProfileLimitsPair& customLimits, uint flags = loadLoadToGL | loadApplyVmap | loadFlagUnusedV2FForInit); csString GetAugmentedProgram (const char* programStr, bool initializeUnusedV2F = false); void DoDebugDump (); void DebugDumpParam (csString& output, CGparameter param); void WriteAdditionalDumpInfo (const char* description, const char* content); const char* GetProgramType() { switch (programType) { case progVP: return "vertex"; case progFP: return "fragment"; } return 0; } void ClipsToVmap (); void OutputClipPreamble (csString& str); void WriteClipApplications (csString& str); void CollectUnusedParameters (csSet& unusedParams, const csStringArray& unusedCandidates); template void SetParameterValue (const Setter& setter, ShaderParameter* sparam, csShaderVariable* var); void SetParameterValueCg (ShaderParameter* sparam, csShaderVariable* var); void SVtoCgMatrix3x3 (csShaderVariable* var, float* matrix); void SVtoCgMatrix4x4 (csShaderVariable* var, float* matrix); template void ApplyVariableMapArray (const Array& array, const ParamSetter& setter, const csShaderVariableStack& stack); void ApplyVariableMapArrays (const csShaderVariableStack& stack); bool WriteToCacheWorker (iHierarchicalCache* cache, const ProfileLimits& limits, const ProfileLimitsPair& limitsPair, const char* tag, const ProgramObject& program, csString& failReason); bool WriteToCache (iHierarchicalCache* cache, const ProfileLimits& limits, const ProfileLimitsPair& limitsPair, const char* tag, const ProgramObject& program); bool WriteToCache (iHierarchicalCache* cache, const ProfileLimits& limits, const ProfileLimitsPair& limitsPair, const char* tag); bool GetProgramNode (iDocumentNode* passProgNode); bool LoadProgramWithPS1 (); public: CS_LEAKGUARD_DECLARE (csShaderGLCGCommon); csShaderGLCGCommon (csGLShader_CG* shaderPlug, ProgramType type); virtual ~csShaderGLCGCommon (); virtual bool Precache (const ProfileLimitsPair& limitsPair, const char* tag, iHierarchicalCache* cache) = 0; //////////////////////////////////////////////////////////////////// // iShaderProgram //////////////////////////////////////////////////////////////////// /// Sets this program to be the one used when rendering virtual void Activate (); /// Deactivate program so that it's not used in next rendering virtual void Deactivate(); /// Setup states needed for proper operation of the shader virtual void SetupState (const CS::Graphics::RenderMesh* mesh, CS::Graphics::RenderMeshModes& modes, const csShaderVariableStack& stack); /// Reset states to original virtual void ResetState (); /// Check if valid virtual bool IsValid () { return program != 0;} /// Loads from a document-node virtual bool Load (iShaderDestinationResolver*, iDocumentNode* node); /// Loads from raw text virtual bool Load (iShaderDestinationResolver*, const char*, csArray&) { return false; } const csSet& GetUnusedParameters () { return unusedParams; } iShaderProgram::CacheLoadResult LoadFromCache ( iHierarchicalCache* cache, iBase* previous, iDocumentNode* programNode, csRef* failReason = 0, csRef* tag = 0, ProfileLimitsPair* cacheLimits = 0); virtual iShaderProgram::CacheLoadResult LoadFromCache ( iHierarchicalCache* cache, iBase* previous, iDocumentNode* programNode, csRef* failReason = 0, csRef* tag = 0) { return LoadFromCache (cache, previous, programNode, failReason, tag, 0); } }; } CS_PLUGIN_NAMESPACE_END(GLShaderCg) #endif //__GLSHADER_CGCOMMON_H__ crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgvp.h0000644000175000017500000000353111774271776033415 0ustar devfildevfil/* Copyright (C) 2002 by Anders Stenberg Marten Svanfeldt 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. */ #ifndef __GLSHADER_CGVP_H__ #define __GLSHADER_CGVP_H__ #include "csplugincommon/shader/shaderplugin.h" #include "csplugincommon/shader/shaderprogram.h" #include "csgfx/shadervarcontext.h" #include "ivideo/shader/shader.h" #include "csutil/strhash.h" #include "csutil/leakguard.h" #include "glshader_cgcommon.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { class csShaderGLCGVP : public csShaderGLCGCommon { public: CS_LEAKGUARD_DECLARE (csShaderGLCGVP); csShaderGLCGVP (csGLShader_CG* shaderPlug) : csShaderGLCGCommon (shaderPlug, progVP) { } /// Compile a program virtual bool Compile (iHierarchicalCache* cache, csRef*); bool Precache (const ProfileLimitsPair& limitsPair, const char* tag, iHierarchicalCache* cache); iShaderProgram::CacheLoadResult LoadFromCache ( iHierarchicalCache* cache, iBase* previous, iDocumentNode* programNode, csRef* failReason = 0, csRef* tag = 0); virtual csVertexAttrib ResolveBufferDestination (const char* binding); }; } CS_PLUGIN_NAMESPACE_END(GLShaderCg) #endif //__GLSHADER_CGVP_H__ ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon_parse.cppcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcomm0000644000175000017500000001717611774271776033507 0ustar devfildevfil/* Copyright (C) 2002-2005 by Marten Svanfeldt Anders Stenberg 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. */ #include "cssysdef.h" #include "ivaria/reporter.h" #include "csutil/stringquote.h" #include "glshader_cg.h" #include "glshader_cgcommon.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { bool csShaderGLCGCommon::ParseClip (iDocumentNode* node) { Clip newClip; const char* space = node->GetAttributeValue ("space"); if (space && *space) { if (strcmp (space, "eye") == 0) newClip.space = ShaderProgramPluginGL::ClipPlanes::Eye; else if (strcmp (space, "object") == 0) newClip.space = ShaderProgramPluginGL::ClipPlanes::Object; else if (strcmp (space, "world") == 0) newClip.space = ShaderProgramPluginGL::ClipPlanes::World; else { if (shaderPlug->doVerbose) synsrv->Report ("crystalspace.graphics3d.shader.glcg", CS_REPORTER_SEVERITY_WARNING, node, "Invalid %s attribute %s", CS::Quote::Single ("space"), space); return false; } } else newClip.space = ShaderProgramPluginGL::ClipPlanes::Object; csRef planeNode = node->GetNode ("plane"); if (planeNode.IsValid()) { if (!ParseProgramParam (planeNode, newClip.plane, ParamVector4 | ParamShaderExp)) return false; } else { newClip.plane.SetValue (csVector4 (0, 0, 1, 0)); } newClip.distComp = 0; newClip.distNeg = false; csRef distNode = node->GetNode ("dist"); if (distNode.IsValid()) { if (!ParseProgramParam (distNode, newClip.distance, ParamVector | ParamShaderExp)) return false; const char* fullCompStr = distNode->GetAttributeValue ("comp"); const char* compStr = fullCompStr; if (compStr) { if (*compStr == '-') { newClip.distNeg = true; compStr++; } if (strcmp (compStr, "x") == 0) newClip.distComp = 0; else if (strcmp (compStr, "y") == 0) newClip.distComp = 1; else if (strcmp (compStr, "z") == 0) newClip.distComp = 2; else if (strcmp (compStr, "w") == 0) newClip.distComp = 3; else { if (shaderPlug->doVerbose) synsrv->Report ("crystalspace.graphics3d.shader.glcg", CS_REPORTER_SEVERITY_WARNING, node, "Invalid %s attribute %s", CS::Quote::Single ("comp"), fullCompStr); return false; } } } else { newClip.distance.SetValue (0); } clips.Push (newClip); return true; } bool csShaderGLCGCommon::ParseVmap (iDocumentNode* node) { //@@ REWRITE const char* destname = node->GetAttributeValue ("destination"); if (!destname) { synsrv->Report ("crystalspace.graphics3d.shader.common", CS_REPORTER_SEVERITY_WARNING, node, " has no %s attribute", CS::Quote::Single ("destination")); return false; } bool assumeConst = node->GetAttributeValueAsBool ("assumeconst", false); const char* varname = node->GetAttributeValue ("variable"); if (!varname) { // "New style" variable mapping VariableMapEntry vme (CS::InvalidShaderVarStringID, destname); if (!ParseProgramParam (node, vme.mappingParam, ParamFloat | ParamVector2 | ParamVector3 | ParamVector4)) return false; ShaderParameter* sparam = shaderPlug->paramAlloc.Alloc(); sparam->assumeConstant = assumeConst; vme.userVal = reinterpret_cast (sparam); variablemap.Push (vme); } else { // "Classic" variable mapping CS::Graphics::ShaderVarNameParser nameParse (varname); VariableMapEntry vme ( stringsSvName->Request (nameParse.GetShaderVarName()), destname); for (size_t n = 0; n < nameParse.GetIndexNum(); n++) { vme.mappingParam.indices.Push (nameParse.GetIndexValue (n)); } ShaderParameter* sparam = shaderPlug->paramAlloc.Alloc(); sparam->assumeConstant = assumeConst; vme.userVal = reinterpret_cast (sparam); variablemap.Push (vme); } return true; } bool csShaderGLCGCommon::Load (iShaderDestinationResolver* resolve, iDocumentNode* program) { if(!program) return false; csRef shadermgr = csQueryRegistry (shaderPlug->object_reg); const char* progTypeNode = 0; switch (programType) { case progVP: progTypeNode = "cgvp"; break; case progFP: progTypeNode = "cgfp"; break; } csRef variablesnode = program->GetNode (progTypeNode); if(variablesnode) { csRef it = variablesnode->GetNodes (); while(it->HasNext()) { csRef child = it->Next(); if(child->GetType() != CS_NODE_ELEMENT) continue; const char* value = child->GetValue (); csStringID id = xmltokens.Request (value); switch(id) { case XMLTOKEN_PROFILE: synsrv->Report ("crystalspace.graphics3d.shader.cg", CS_REPORTER_SEVERITY_WARNING, child, " is no longer supported"); break; case XMLTOKEN_ENTRY: entrypoint = child->GetContentsValue (); break; case XMLTOKEN_COMPILERARGS: shaderPlug->SplitArgsString (child->GetContentsValue (), compilerArgs); break; case XMLTOKEN_VARIABLEMAP: if (!ParseVmap (child)) return false; cacheKeepNodes.Push (child); break; case XMLTOKEN_CLIP: if (!ParseClip (child)) return false; cacheKeepNodes.Push (child); break; default: if (!ParseCommon (child)) return false; } } } cgResolve = scfQueryInterfaceSafe (resolve); clips.ShrinkBestFit (); ClipsToVmap (); ExtractVmapConstants (); return true; } bool csShaderGLCGCommon::GetProgramNode (iDocumentNode* passProgNode) { if(!passProgNode) return false; const char* progTypeNode = 0; switch (programType) { case progVP: progTypeNode = "cgvp"; break; case progFP: progTypeNode = "cgfp"; break; } csRef variablesnode = passProgNode->GetNode (progTypeNode); if(variablesnode) { csRef it = variablesnode->GetNodes (); while(it->HasNext()) { csRef child = it->Next(); if(child->GetType() != CS_NODE_ELEMENT) continue; const char* value = child->GetValue (); csStringID id = commonTokens.Request (value); switch(id) { case XMLTOKEN_PROGRAM: { const char* filename = child->GetAttributeValue ("file"); if (filename != 0) { programFileName = filename; csRef vfs = csQueryRegistry (objectReg); csRef file = vfs->Open (filename, VFS_FILE_READ); if (!file.IsValid()) { synsrv->Report ("crystalspace.graphics3d.shader.cg", CS_REPORTER_SEVERITY_WARNING, child, "Could not open %s", CS::Quote::Single (filename)); return false; } programFile = file; } else programNode = child; } break; } } } return programNode.IsValid(); } } CS_PLUGIN_NAMESPACE_END(GLShaderCg) crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/stringstore.cpp0000644000175000017500000002643211774271776033530 0ustar devfildevfil/* Copyright (C) 2008 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. */ #include "cssysdef.h" #include "csplugincommon/shader/shadercachehelper.h" #include "csutil/checksum.h" #include "csutil/csendian.h" #include "csutil/parasiticdatabuffer.h" #include "iutil/hiercache.h" #include "stringstore.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { static void UI64Split (uint64 v, uint32& lo, uint32& hi) { union { uint64 ui64; uint32 ui32[2]; } x; x.ui64 = v; #ifdef CS_LITTLE_ENDIAN lo = x.ui32[0]; hi = x.ui32[1]; #else lo = x.ui32[1]; hi = x.ui32[0]; #endif } static uint64 UI64Merge (uint32 lo, uint32 hi) { union { uint64 ui64; uint32 ui32[2]; } x; #ifdef CS_LITTLE_ENDIAN x.ui32[0] = lo; x.ui32[1] = hi; #else x.ui32[1] = lo; x.ui32[0] = hi; #endif return x.ui64; } StringStore::StringStore (iHierarchicalCache* storageCache) : storageCache (storageCache), currentCacheTime (0), flushNeeded (false) { ReadBins(); } StringStore::~StringStore() { Flush(); } void StringStore::ReadBins () { for (size_t b = 0; b < numStorageBins; b++) { bins[b].Clear(); } csRef headerData = storageCache->ReadCache ("/strshead"); while (headerData.IsValid()) { csMemFile headerFile (headerData, true); uint32 diskMagic; if (headerFile.Read ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) break; if (csLittleEndian::UInt32 (diskMagic) != storeFileMagic) break; uint32 diskCacheTime; if (headerFile.Read ((char*)&diskCacheTime, sizeof (diskCacheTime)) != sizeof (diskCacheTime)) break; currentCacheTime = csLittleEndian::UInt32 (diskCacheTime); for (size_t b = 0; b < numStorageBins; b++) { csRef binHeadData = CS::PluginCommon::ShaderCacheHelper::ReadDataBuffer (&headerFile); csRef binStrData = storageCache->ReadCache (csString().Format ("/strs%zu", b)); bool okay = false; if (binHeadData.IsValid() && binStrData.IsValid()) { csMemFile binHeadFile (binHeadData, true); if (bins[b].ReadHeader (&binHeadFile)) { csMemFile binDataFile (binStrData, true); okay = bins[b].ReadStringData (&binDataFile); } } if (!okay) bins[b].Clear(); } headerData.Invalidate(); } currentCacheTime++; } bool StringStore::WriteBins () { csMemFile headerFile; uint32 diskMagic = csLittleEndian::UInt32 (storeFileMagic); if (headerFile.Write ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) return false; uint32 diskCacheTime = csLittleEndian::UInt32 (currentCacheTime); if (headerFile.Write ((char*)&diskCacheTime, sizeof (diskCacheTime)) != sizeof (diskCacheTime)) return false; for (size_t b = 0; b < numStorageBins; b++) { csMemFile binDataFile; if (!bins[b].WriteStringData (&binDataFile)) return false; if (!storageCache->CacheData (binDataFile.GetData(), binDataFile.GetSize(), csString().Format ("/strs%zu", b))) return false; csMemFile binHeadFile; if (!bins[b].WriteHeader (&binHeadFile)) return false; csRef headerBuf (binHeadFile.GetAllData()); if (!CS::PluginCommon::ShaderCacheHelper::WriteDataBuffer (&headerFile, headerBuf)) return false; } return storageCache->CacheData (headerFile.GetData(), headerFile.GetSize(), "/strshead"); } // Work around 'shift count >= width of type' warnings static inline uint rshift (uint x, uint v) { return (v >= sizeof(x) * 8) ? 0 : x >> v; } static inline uint lshift (uint x, uint v) { return (v >= sizeof(x) * 8) ? 0 : x << v; } const char* StringStore::GetStringForID (ID id) { uint32 crc, binAndID; UI64Split (id, crc, binAndID); const uint binNumberMask = (1 << storageBinBits) - 1; uint bin = rshift (binAndID, (32 - storageBinBits)) & (binNumberMask); BinID binId = binAndID & (lshift (1, (32 - storageBinBits))-1); return bins[bin].GetStringForID (currentCacheTime, binId, crc); } StringStore::ID StringStore::GetIDForString (const char* str) { HashedStr hashStr (str); const uint binNumberMask = (1 << storageBinBits) - 1; uint bin = hashStr.hash & binNumberMask; BinID binID; uint32 crc; flushNeeded |= bins[bin].GetIDForString (hashStr, currentCacheTime, binID, crc); uint32 binAndID = binID | lshift (bin, (32 - storageBinBits)); return UI64Merge (crc, binAndID); } void StringStore::Flush() { if (!flushNeeded) return; WriteBins(); flushNeeded = false; } //------------------------------------------------------------------------- const char* StringStore::StorageBin::GetStringForID (uint32 timestamp, BinID id, uint32 crc) { BinEntry* entry = entries.GetElementPointer (id); if (entry == 0) return 0; if (entry->crc != crc) return 0; entry->lastUsedTime = timestamp; return stringDataFile->GetData() + entry->dataOffset; } bool StringStore::StorageBin::GetIDForString (const HashedStr& str, uint32 timestamp, BinID& id, uint32& crc) { HashedIDsType::Iterator idsIt (hashedIDs.GetIterator (str.hash)); while (idsIt.HasNext ()) { BinID currentID = idsIt.Next(); BinEntry* entry = entries.GetElementPointer (currentID); if (entry == 0) continue; const char* entryData = stringDataFile->GetData() + entry->dataOffset; if (strcmp (entryData, str.s) != 0) continue; entry->lastUsedTime = timestamp; id = currentID; crc = entry->crc; return false; } size_t newId = takenIDs.GetFirstBitUnset(); if (newId == csArrayItemNotFound) { newId = takenIDs.GetSize(); takenIDs.SetSize (takenIDs.GetSize()+32); } takenIDs.SetBit (newId); BinEntry newEntry; newEntry.crc = CS::Utility::Checksum::CRC32 ((uint8*)str.s, str.len); newEntry.lastUsedTime = timestamp; newEntry.dataOffset = (uint32)stringDataFile->GetSize(); stringDataFile->Write (str.s, str.len); char null = 0; stringDataFile->Write (&null, 1); entries.PutUnique ((BinID)newId, newEntry); hashedIDs.Put (str.hash, (BinID)newId); id = (BinID)newId; crc = newEntry.crc; return true; } void StringStore::StorageBin::Clear () { stringDataFile.AttachNew (new csMemFile); takenIDs.Clear (); entries.DeleteAll (); hashedIDs.DeleteAll (); } bool StringStore::StorageBin::ReadHeader (iFile* file) { while (!file->AtEOF ()) { uint32 diskID; if (file->Read ((char*)&diskID, sizeof (diskID)) != sizeof (diskID)) return false; uint32 diskTime; if (file->Read ((char*)&diskTime, sizeof (diskTime)) != sizeof (diskTime)) return false; uint32 diskOffs; if (file->Read ((char*)&diskOffs, sizeof (diskOffs)) != sizeof (diskOffs)) return false; BinEntry newEntry; newEntry.crc = (uint32)~0; newEntry.lastUsedTime = csLittleEndian::UInt32 (diskTime); newEntry.dataOffset = csLittleEndian::UInt32 (diskOffs); BinID id = csLittleEndian::UInt32 (diskID); entries.PutUnique (id, newEntry); if (id >= takenIDs.GetSize()) { takenIDs.SetSize ((id+1+31) & ~31); } takenIDs.SetBit (id); } return true; } bool StringStore::StorageBin::WriteHeader (iFile* file) { EntryHash::GlobalIterator entriesIt (entries.GetIterator()); while (entriesIt.HasNext ()) { BinID id; BinEntry& entry = entriesIt.Next (id); uint32 diskID = csLittleEndian::UInt32 (id); if (file->Write ((char*)&diskID, sizeof (diskID)) != sizeof (diskID)) return false; uint32 diskTime = csLittleEndian::UInt32 (entry.lastUsedTime); if (file->Write ((char*)&diskTime, sizeof (diskTime)) != sizeof (diskTime)) return false; uint32 diskOffs = csLittleEndian::UInt32 (entry.dataOffset); if (file->Write ((char*)&diskOffs, sizeof (diskOffs)) != sizeof (diskOffs)) return false; } return true; } bool StringStore::StorageBin::ReadStringData (iFile* file) { bool okay = true; uint32 diskMagic; if (file->Read ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) okay = false; if (okay && csLittleEndian::UInt32 (diskMagic) != binFileMagic) okay = false; if (okay) { csRef fileData (file->GetAllData()); csRef strData; strData.AttachNew (new csParasiticDataBuffer (fileData, 4)); stringDataFile.AttachNew (new csMemFile (strData, true)); stringDataFile->SetPos (stringDataFile->GetSize ()); EntryHash::GlobalIterator entriesIt (entries.GetIterator()); while (entriesIt.HasNext ()) { BinID id; BinEntry& entry = entriesIt.Next (id); const char* entryStr = stringDataFile->GetData() + entry.dataOffset; size_t len = strlen (entryStr); entry.crc = CS::Utility::Checksum::CRC32 ((uint8*)entryStr, len); uint hash = csHashCompute (entryStr, len); hashedIDs.Put (hash, id); } } return okay; } bool StringStore::StorageBin::WriteStringData (iFile* file) { EntryHash newEntries; uint32 diskMagic = csLittleEndian::UInt32 (binFileMagic); if (file->Write ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) return false; csRef newStringsFile; newStringsFile.AttachNew (new csMemFile); EntryHash::GlobalIterator entriesIt (entries.GetIterator()); while (entriesIt.HasNext ()) { BinID id; BinEntry newEntry (entriesIt.Next (id)); const char* entryStr = stringDataFile->GetData() + newEntry.dataOffset; size_t len = strlen (entryStr); if (CS::Utility::Checksum::CRC32 ((uint8*)entryStr, len) != newEntry.crc) continue; newEntry.dataOffset = (uint32)newStringsFile->GetPos(); if (newStringsFile->Write (entryStr, len+1) != len+1) return false; newEntries.Put (id, newEntry); } stringDataFile = newStringsFile; entries = newEntries; if (file->Write (newStringsFile->GetData(), newStringsFile->GetSize()) != newStringsFile->GetSize()) return false; return true; } } CS_PLUGIN_NAMESPACE_END(GLShaderCg) crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.cpp0000644000175000017500000005416511774271776033413 0ustar devfildevfil/* Copyright (C) 2002 by Anders Stenberg Marten Svanfeldt 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. */ #include "cssysdef.h" #include "csgeom/math.h" #include "csgeom/vector3.h" #include "csplugincommon/opengl/glextmanager.h" #include "csutil/objreg.h" #include "csutil/ref.h" #include "csutil/scf.h" #include "csutil/scfstr.h" #include "csutil/scfstringarray.h" #include "csutil/stringquote.h" #include "csutil/xmltiny.h" #include "iutil/comp.h" #include "iutil/hiercache.h" #include "iutil/plugin.h" #include "iutil/stringarray.h" #include "ivaria/reporter.h" #include "ivideo/graph2d.h" #include "ivideo/graph3d.h" #include "ivideo/shader/shader.h" #include "glshader_cgvp.h" #include "glshader_cgfp.h" #include "glshader_cg.h" #include "profile_limits.h" #include "stringstore.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { CS_LEAKGUARD_IMPLEMENT (csGLShader_CG); SCF_IMPLEMENT_FACTORY (csGLShader_CG) csGLShader_CG::csGLShader_CG (iBase* parent) : scfImplementationType (this, parent), compiledProgram (0), stringStore (0) { context = cgCreateContext (); cgSetErrorHandler (ErrorHandlerObjReg, 0); enable = false; debugDump = false; dumpDir = 0; } csGLShader_CG::~csGLShader_CG() { cs_free (dumpDir); cgDestroyContext (context); cgSetErrorHandler (ErrorHandlerObjReg, object_reg); delete stringStore; } void csGLShader_CG::ErrorHandler (CGcontext context, CGerror error, void* appData) { csGLShader_CG* This = reinterpret_cast (appData); if (This->doIgnoreErrors) return; bool doVerbose; csRef verbosemgr ( csQueryRegistry (This->object_reg)); if (verbosemgr) doVerbose = verbosemgr->Enabled ("renderer.shader"); else doVerbose = false; if (!doVerbose) return; csReport (This->object_reg, CS_REPORTER_SEVERITY_WARNING, "crystalspace.graphics3d.shader.glcg", "%s", cgGetErrorString (error)); if (error == CG_COMPILER_ERROR) { const char* listing = cgGetLastListing (context); This->PrintCgListing (listing); } } void csGLShader_CG::ErrorHandlerObjReg (CGcontext context, CGerror error, void* appData) { iObjectRegistry* object_reg = reinterpret_cast (appData); if (object_reg) { bool doVerbose; csRef verbosemgr ( csQueryRegistry (object_reg)); if (verbosemgr) doVerbose = verbosemgr->Enabled ("renderer.shader"); else doVerbose = false; if (!doVerbose) return; } csReport (object_reg, CS_REPORTER_SEVERITY_WARNING, "crystalspace.graphics3d.shader.glcg", "%s", cgGetErrorString (error)); } void csGLShader_CG::PrintCgListing (const char* listing) { if (listing && *listing) { if (compiledProgram != 0) { /* There is a listing - we split up up the source and parse the * listing string in order to be able to write out the source lines * causing errors. */ csStringArray sourceSplit; sourceSplit.SplitString (compiledProgram, "\n"); csStringArray listingSplit; listingSplit.SplitString (listing, "\n"); for (size_t l = 0; l < listingSplit.GetSize(); l++) { const char* listingLine = listingSplit[l]; if (!listingLine || !*listingLine) continue; csReport (object_reg, CS_REPORTER_SEVERITY_WARNING, "crystalspace.graphics3d.shader.glcg", "%s", listingLine); while (*listingLine && (*listingLine == ' ')) listingLine++; uint lineNum = 0; if (sscanf (listingLine, "(%u)", &lineNum) == 1) { if ((lineNum > 0) && (lineNum <= sourceSplit.GetSize())) csReport (object_reg, CS_REPORTER_SEVERITY_WARNING, "crystalspace.graphics3d.shader.glcg", "%s", sourceSplit[lineNum-1]); } } } else { csReport (object_reg, CS_REPORTER_SEVERITY_WARNING, "crystalspace.graphics3d.shader.glcg", "%s", listing); } } } void csGLShader_CG::SplitArgsString (const char* str, ArgumentArray& args) { if ((str == 0) || (*str == 0)) return; csString s; const char* p = str; bool quote = false; while (*p) { switch (*p) { case '"': quote = !quote; break; case '\\': if (quote) { p++; s.Append (*p); break; } // else fall through case '\r': case '\n': case ' ': if (!quote) { if (!s.IsEmpty()) args.Push (s); s.Empty(); break; } // else fall through default: s.Append (*p); } p++; } if (!s.IsEmpty()) args.Push (s); } /// Assign a number to a Cg profile so DX and GL profiles can be compared. static int GetProfileLevel (CGprofile profile) { switch (profile) { case CG_PROFILE_FP20: case CG_PROFILE_PS_1_1: return 0x101; case CG_PROFILE_PS_1_2: return 0x102; case CG_PROFILE_PS_1_3: return 0x103; case CG_PROFILE_GLSLF: case CG_PROFILE_GLSLC: // Actually GLSL can be anything from 0x200 upwards... case CG_PROFILE_ARBFP1: return 0x200; case CG_PROFILE_FP30: return 0x20a; case CG_PROFILE_FP40: return 0x300; case CG_PROFILE_GPU_FP: return 0x400; default: // Some "future proofing" return (profile > CG_PROFILE_GPU_FP) ? 0x500 : 0; } } void csGLShader_CG::GetProfileCompilerArgs (const char* type, CGprofile profile, const ProfileLimitsPair& limitsPair, HardwareVendor vendor, uint argsMask, ArgumentArray& args) { csString profileStr (cgGetProfileString (profile)); if (!(argsMask & argsNoConfig)) { csConfigAccess cfg (object_reg); csString key ("Video.OpenGL.Shader.Cg.CompilerOptions"); SplitArgsString (cfg->GetStr (key), args); key << "." << type; SplitArgsString (cfg->GetStr (key), args); key << "." << profileStr; SplitArgsString (cfg->GetStr (key), args); } if (!(argsMask & argsNoProfileLimits)) { profileStr.Upcase(); csString profileMacroArg ("-DPROFILE_"); profileMacroArg += profileStr; args.Push (profileMacroArg); profileStr = cgGetProfileString (limitsPair.vp.profile); if (!profileStr.IsEmpty()) { profileStr.Upcase(); profileMacroArg = "-DVERT_PROFILE_"; profileMacroArg += profileStr; args.Push (profileMacroArg); } profileStr = cgGetProfileString (limitsPair.fp.profile); if (!profileStr.IsEmpty()) { profileStr.Upcase(); profileMacroArg = "-DFRAG_PROFILE_"; profileMacroArg += profileStr; args.Push (profileMacroArg); } int profileLevel = GetProfileLevel (limitsPair.fp.profile); if (profileLevel != 0) { profileMacroArg.Format ("-DFRAGMENT_PROGRAM_LEVEL=0x%x", profileLevel); args.Push (profileMacroArg); } if (vendor != Invalid) { csString vendorStr; switch (vendor) { case ATI: vendorStr = "ATI"; break; case NVIDIA: vendorStr = "NVIDIA"; break; case Other: vendorStr = "OTHER"; break; default: CS_ASSERT(false); } vendorStr = "-DVENDOR_" + vendorStr; args.Push (vendorStr); } } if (!(argsMask & argsNoProgramType)) { csString typeStr (type); typeStr.Upcase(); typeStr = "-DPROGRAM_TYPE_" + typeStr; args.Push (typeStr); } } //////////////////////////////////////////////////////////////////// // iShaderProgramPlugin //////////////////////////////////////////////////////////////////// bool csGLShader_CG::SupportType(const char* type) { if (!Open()) return false; if (!enable) return false; if( strcasecmp(type, "vp") == 0) return true; if( strcasecmp(type, "fp") == 0) return true; return false; } void csGLShader_CG::Report (int severity, const char* msg, ...) { va_list arg; va_start (arg, msg); csReportV (object_reg, severity, "crystalspace.graphics3d.shader.glcg", msg, arg); va_end (arg); } csPtr csGLShader_CG::CreateProgram (const char* type) { Open(); if (!enable) return 0; if (strcasecmp(type, "vp") == 0) return csPtr (new csShaderGLCGVP(this)); else if (strcasecmp(type, "fp") == 0) { return csPtr (new csShaderGLCGFP (this, currentLimits)); } else return 0; } static CGprofile NextBestFakeProfile (CGprofile profile) { switch (profile) { case CG_PROFILE_PS_1_1: return CG_PROFILE_FP20; case CG_PROFILE_PS_1_2: case CG_PROFILE_PS_1_3: return CG_PROFILE_FP30; case CG_PROFILE_FP20: return CG_PROFILE_PS_1_1; case CG_PROFILE_FP30: case CG_PROFILE_FP40: case CG_PROFILE_GPU_FP: return CG_PROFILE_ARBFP1; case CG_PROFILE_VP30: case CG_PROFILE_VP40: case CG_PROFILE_GPU_VP: return CG_PROFILE_ARBVP1; default: return CG_PROFILE_UNKNOWN; } } void csGLShader_CG::ParsePrecacheLimits (iConfigFile* config, ProfileLimitsArray& out) { csSet seenKeys; csRef vertexPrecache = config->Enumerate ( csString().Format ("Video.OpenGL.Shader.Cg.Precache.")); while (vertexPrecache->HasNext()) { vertexPrecache->Next(); csString key (vertexPrecache->GetKey (true)); size_t dot = key.FindFirst ('.'); if (dot != (size_t)-1) key.Truncate (dot); if (!seenKeys.Contains (key)) { ProfileLimitsPair newPair; const char* profile = config->GetStr ( csString().Format ("Video.OpenGL.Shader.Cg.Precache.%s.Vertex.Profile", key.GetData()), 0); if (profile != 0) { CGprofile profile_cg = cgGetProfile (profile); if (profile_cg != CG_PROFILE_UNKNOWN) { newPair.vp = ProfileLimits ( Other, profile_cg); newPair.vp.GetCgDefaults(); newPair.vp.ReadFromConfig (config, csString().Format ("Video.OpenGL.Shader.Cg.Precache.%s.Vertex", key.GetData())); } } profile = config->GetStr ( csString().Format ("Video.OpenGL.Shader.Cg.Precache.%s.Fragment.Profile", key.GetData()), 0); if (profile != 0) { CGprofile profile_cg = cgGetProfile (profile); if (profile_cg != CG_PROFILE_UNKNOWN) { newPair.fp = ProfileLimits (Other, profile_cg); newPair.fp.GetCgDefaults(); newPair.fp.ReadFromConfig (config, csString().Format ("Video.OpenGL.Shader.Cg.Precache.%s.Fragment", key.GetData())); } } out.Push (newPair); seenKeys.AddNoTest (key); } } /* Dirty trick: put highest profile last; most likely to compile; in the case of VPs means bindings are correct. */ out.Sort(); } bool csGLShader_CG::Open() { if (isOpen) return true; if (!object_reg) return false; csRef config (csQueryRegistry (object_reg)); ParsePrecacheLimits (config, precacheLimits); debugDump = config->GetBool ("Video.OpenGL.Shader.Cg.DebugDump", false); if (debugDump) dumpDir = CS::StrDup (config->GetStr ("Video.OpenGL.Shader.Cg.DebugDumpDir", "/tmp/cgdump/")); cgSetAutoCompile (context, CG_COMPILE_MANUAL); cgSetErrorHandler (ErrorHandler, this); if (!CS::PluginCommon::ShaderProgramPluginGL::Open ()) return true; enable = true; ext->InitGL_ARB_color_buffer_float(); ext->InitGL_ARB_vertex_program(); ext->InitGL_ARB_fragment_program(); ext->InitGL_NV_gpu_program4(); ext->InitGL_EXT_gpu_program_parameters(); enableVP = config->GetBool ("Video.OpenGL.Shader.Cg.Enable.Vertex", true); enableFP = config->GetBool ("Video.OpenGL.Shader.Cg.Enable.Fragment", true); bool forceBestProfile = config->GetBool ("Video.OpenGL.Shader.Cg.ForceBestProfile", false); strictMatchVP = false; if (enableVP) { if (config->KeyExists ("Video.OpenGL.Shader.Cg.Fake.Vertex.Profile")) { const char* profileStr = config->GetStr ("Video.OpenGL.Shader.Cg.Fake.Vertex.Profile"); CGprofile profile = cgGetProfile (profileStr); /* @@@ Hack: Make sure at least ARB_v_p is used. * This is done because we don't completely support NV_vertex_program based * profiles - those require "manual" binding of state matrices via * glTrackMatrixNV() which we don't support right now. */ if (profile == CG_PROFILE_UNKNOWN) { if (doVerbose) Report (CS_REPORTER_SEVERITY_WARNING, "Unknown fake vertex program profile %s", CS::Quote::Single (profileStr)); } else { if (profile < CG_PROFILE_ARBVP1) profile = CG_PROFILE_ARBVP1; CGprofile profile2; if (cgGLIsProfileSupported (profile2 = profile) || cgGLIsProfileSupported (profile2 = NextBestFakeProfile (profile))) { ProfileLimits limits (vendor, profile2); limits.ReadFromConfig (config, "Video.OpenGL.Shader.Cg.Fake.Vertex"); currentLimits.vp = limits; strictMatchVP = true; } else { if (doVerbose) Report (CS_REPORTER_SEVERITY_WARNING, "Fake vertex program profile %s unsupported", CS::Quote::Single (cgGetProfileString (profile))); } } } if (currentLimits.vp.profile == CG_PROFILE_UNKNOWN) { CGprofile profile = cgGLGetLatestProfile (CG_GL_VERTEX); if (profile < CG_PROFILE_ARBVP1) { if (cgGLIsProfileSupported (CG_PROFILE_ARBVP1)) profile = CG_PROFILE_ARBVP1; else profile = CG_PROFILE_UNKNOWN; } ProfileLimits limits (vendor, profile); limits.GetCurrentLimits (ext); currentLimits.vp = limits; strictMatchVP = forceBestProfile; } enableVP = currentLimits.vp.profile != CG_PROFILE_UNKNOWN; if (doVerbose) { if (enableVP) Report (CS_REPORTER_SEVERITY_NOTIFY, "Using vertex program limits: %s", currentLimits.vp.ToStringForPunyHumans().GetData()); else Report (CS_REPORTER_SEVERITY_NOTIFY, "Vertex programs not supported"); } } else { if (doVerbose) Report (CS_REPORTER_SEVERITY_NOTIFY, "Vertex program support disabled by user"); } strictMatchFP = false; if (enableFP) { psplg = csLoadPluginCheck (object_reg, "crystalspace.graphics3d.shader.glps1", false); if(!psplg) { if (doVerbose) Report (CS_REPORTER_SEVERITY_WARNING, "Could not find crystalspace.graphics3d.shader.glps1. Cg to PS " "routing unavailable."); } if (config->KeyExists ("Video.OpenGL.Shader.Cg.Fake.Fragment.Profile")) { const char* profileStr = config->GetStr ("Video.OpenGL.Shader.Cg.Fake.Fragment.Profile"); CGprofile profile = cgGetProfile (profileStr); if (profile == CG_PROFILE_UNKNOWN) { if (doVerbose) Report (CS_REPORTER_SEVERITY_WARNING, "Unknown fake fragment program profile %s", CS::Quote::Single (profileStr)); } else { CGprofile profile2; // Check if hardware supports requested profile, directly or by routing if (cgGLIsProfileSupported (profile2 = profile) || IsRoutedProfileSupported (profile2)) { ProfileLimits limits (vendor, profile2); limits.ReadFromConfig (config, "Video.OpenGL.Shader.Cg.Fake.Fragment"); currentLimits.fp = limits; strictMatchFP = true; } // Check if hardware supports a profile "close enough" to the requested one, // directly or by routing else if (cgGLIsProfileSupported (profile2 = NextBestFakeProfile (profile)) || IsRoutedProfileSupported (profile2)) { ProfileLimits limits ( CS::PluginCommon::ShaderProgramPluginGL::Other, profile2); limits.GetCurrentLimits (ext); currentLimits.fp = limits; strictMatchFP = true; } else { if (doVerbose) Report (CS_REPORTER_SEVERITY_WARNING, "Fake fragment program profile %s unsupported", CS::Quote::Single (profileStr)); } } } if (currentLimits.fp.profile == CG_PROFILE_UNKNOWN) { CGprofile latestProfile = cgGLGetLatestProfile (CG_GL_FRAGMENT); if (((latestProfile == CG_PROFILE_FP20) /* (1) below */ || (latestProfile == CG_PROFILE_UNKNOWN)) /* (2) below */ && psplg.IsValid()) { /* (1) Use CG_PROFILE_PS_1_1 or CG_PROFILE_PS_1_3 instead of FP20. NVidia's FP20 backend apparently doesn't handle constants that are needed in two different combiner stages very well - it seems to only set one of the constants. However, the PS1.x code generated by Cg is semantically correct; our PS1.x 'emulation' plugin correctly handles the required constant mapping, so prefer indirection through PS1.x even if the hardware could support FP20 natively. (2) If there is no Cg-supported profile we might still support a routed PS1.x profile. */ if (IsRoutedProfileSupported (CG_PROFILE_PS_1_3)) latestProfile = CG_PROFILE_PS_1_3; else if (IsRoutedProfileSupported (CG_PROFILE_PS_1_1)) latestProfile = CG_PROFILE_PS_1_1; } ProfileLimits limits (vendor, latestProfile); limits.GetCurrentLimits (ext); currentLimits.fp = limits; strictMatchFP = forceBestProfile; } enableFP = currentLimits.fp.profile != CG_PROFILE_UNKNOWN; if (doVerbose) { if (enableFP) Report (CS_REPORTER_SEVERITY_NOTIFY, "Using fragment program limits: %s", currentLimits.fp.ToStringForPunyHumans().GetData()); else Report (CS_REPORTER_SEVERITY_NOTIFY, "Fragment programs not supported"); } } else { if (doVerbose) Report (CS_REPORTER_SEVERITY_NOTIFY, "Fragment program support disabled by user"); } cgGLSetDebugMode (config->GetBool ("Video.OpenGL.Shader.Cg.CgDebugMode", false)); return true; } bool csGLShader_CG::IsRoutedProfileSupported (CGprofile profile) { ext->InitGL_ATI_fragment_shader(); ext->InitGL_NV_texture_shader(); ext->InitGL_NV_texture_shader3(); switch (profile) { case CG_PROFILE_PS_1_1: return ext->CS_GL_ATI_fragment_shader || ext->CS_GL_NV_texture_shader; case CG_PROFILE_PS_1_2: case CG_PROFILE_PS_1_3: return ext->CS_GL_ATI_fragment_shader || ext->CS_GL_NV_texture_shader3; default: return false; } } csPtr csGLShader_CG::QueryPrecacheTags (const char* type) { if (!Open()) return (iStringArray*)nullptr; scfStringArray* tags = new scfStringArray; for (size_t i = 0; i < precacheLimits.GetSize(); i++) { tags->Push (csString("CG") + precacheLimits[i].ToString()); } return csPtr (tags); } bool csGLShader_CG::Precache (const char* type, const char* tag, iBase* previous, iDocumentNode* node, iHierarchicalCache* cacheTo, csRef* outObj) { if (!Open()) return false; csRef prevCG (scfQueryInterfaceSafe ( previous)); csRef resolve ( scfQueryInterfaceSafe (previous)); if ((tag == 0) || (tag[0] != 'C') || (tag[1] != 'G')) return false; tag += 2; ProfileLimitsPair limits; if (!limits.FromString (tag)) return false; csRef prog; bool result = false; if (strcasecmp(type, "fp") == 0) { prog.AttachNew (new csShaderGLCGFP (this, limits)); /* Precache for 'tag' */ if (!prog->Load (resolve, node)) return false; result = Precache (prog, limits, tag, cacheTo); } else if (strcasecmp(type, "vp") == 0) { prog.AttachNew (new csShaderGLCGVP (this)); /* Get tag from prevCG */ if (prevCG.IsValid()) { /* If previous tag and current tag match, precache */ csShaderGLCGFP* prevFP = static_cast ( (iShaderProgramCG*)prevCG); ProfileLimitsPair prevLimits = prevFP->cacheLimits; if (limits != prevLimits) return false; if (!prevFP->IsValid()) return false; } /* Precache for 'tag' */ if (!prog->Load (resolve, node)) return false; result = Precache (prog, limits, tag, cacheTo); } else return false; if (outObj) *outObj = prog; return result; } bool csGLShader_CG::Precache (csShaderGLCGCommon* prog, ProfileLimitsPair& limits, const char* tag, iHierarchicalCache* cacheTo) { bool result = false; result = prog->Precache (limits, tag, cacheTo); return result; } //////////////////////////////////////////////////////////////////// // iComponent //////////////////////////////////////////////////////////////////// bool csGLShader_CG::Initialize(iObjectRegistry* reg) { if (!CS::PluginCommon::ShaderProgramPluginGL::Initialize (reg)) return false; csRef plugin_mgr = csQueryRegistry (object_reg); binDocSys = csLoadPluginCheck (plugin_mgr, "crystalspace.documentsystem.binary"); xmlDocSys.AttachNew (new csTinyDocumentSystem); csRef shaderMgr = csQueryRegistry (object_reg); if (!shaderMgr.IsValid()) { Report (CS_REPORTER_SEVERITY_WARNING, "Could not obtain iShaderManager"); } else { iHierarchicalCache* shaderCache = shaderMgr->GetShaderCache(); if (shaderCache != 0) { csRef progCache = shaderCache->GetRootedCache ("/CgProgCache"); stringStore = new StringStore (progCache); this->progCache.SetCache (progCache); } } return true; } } CS_PLUGIN_NAMESPACE_END(GLShaderCg) crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/progcache.h0000644000175000017500000000462111774271776032541 0ustar devfildevfil/* Copyright (C) 2009 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. */ #ifndef __PROGCACHE_H__ #define __PROGCACHE_H__ #include "iutil/hiercache.h" #include "csutil/csstring.h" #include "csutil/ref.h" #include "csutil/set.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { struct ProfileLimits; class ProgramCache; struct ProgramObjectID { csString archive; csString item; ProgramObjectID () {} ProgramObjectID (const char* a, const char* i) : archive (a), item (i) {} }; class ProgramObject { friend class ProgramCache; ProgramObjectID id; csString objectCode; uint flags; csSet unusedParams; public: enum { flagPositionInvariant = 1 }; ProgramObject (); ProgramObject (const char* objectCode, uint flags, const csSet& unusedParams); bool IsValid () const { return !objectCode.IsEmpty(); } const char* GetObjectCode() const { return objectCode; } const ProgramObjectID& GetID() const { return id; } uint GetFlags() const { return flags; } const csSet& GetUnusedParams() const { return unusedParams; } void SetID (const ProgramObjectID& id) { this->id = id; } }; class ProgramCache { csRef cache; public: void SetCache (iHierarchicalCache* cache) { this->cache = cache; } bool SearchObject (const char* source, const ProfileLimits& limits, ProgramObject& program); bool LoadObject (const ProgramObjectID& id, ProgramObject& program); bool WriteObject (const char* source, const ProfileLimits& limits, const ProgramObject& program, ProgramObjectID& id, csString& failReason); }; } CS_PLUGIN_NAMESPACE_END(GLShaderCg) #endif // __PROGCACHE_H__ crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/stringstore.h0000644000175000017500000000630611774271776033173 0ustar devfildevfil/* Copyright (C) 2008 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. */ #ifndef __STRINGSTORE_H__ #define __STRINGSTORE_H__ #include "csutil/bitarray.h" #include "csutil/hash.h" #include "csutil/memfile.h" struct iHierarchicalCache; CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { /* The string store can store strings in multiple 'bins'. The original idea was to allow for not having all strings in memory at all time, thus the segmenting into bins; however, in practice, the size of string data is small enough to making the segmenting unnecessary. Setting the bin bits number to 0 essentially disables the features. */ static const uint storageBinBits = 0; /* The most significant byte is the version, change when the format * changes */ static const uint32 storeFileMagic = 0x01807353 | (storageBinBits << 16); static const uint32 binFileMagic = 0x00627353; class StringStore { public: typedef uint64 ID; typedef uint32 BinID; protected: enum { numStorageBins = 1 << storageBinBits }; struct HashedStr { const char* s; size_t len; uint hash; HashedStr (const char* s) : s (s), len (strlen (s)), hash (csHashCompute (s, len)) {} HashedStr (const char* s, size_t slen) : s (s), len (slen), hash (csHashCompute (s, slen)) {} }; csRef storageCache; uint32 currentCacheTime; bool flushNeeded; struct BinEntry { uint32 crc; uint32 dataOffset; uint32 lastUsedTime; }; class StorageBin { csBitArray takenIDs; typedef csHash EntryHash; EntryHash entries; typedef csHash HashedIDsType; HashedIDsType hashedIDs; csRef stringDataFile; public: const char* GetStringForID (uint32 timestamp, BinID id, uint32 crc); bool GetIDForString (const HashedStr& str, uint32 timestamp, BinID& id, uint32& crc); void Clear(); bool ReadHeader (iFile* file); bool WriteHeader (iFile* file); bool ReadStringData (iFile* file); bool WriteStringData (iFile* file); }; StorageBin bins[numStorageBins]; void ReadBins (); bool WriteBins (); public: StringStore (iHierarchicalCache* storageCache); ~StringStore(); const char* GetStringForID (ID id); ID GetIDForString (const char* str); void Flush(); }; } CS_PLUGIN_NAMESPACE_END(GLShaderCg) #endif // __STRINGSTORE_H__ ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.hcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.0000644000175000017500000001072111774271776033455 0ustar devfildevfil/* Copyright (C) 2008 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. */ #ifndef __PROFILE_LIMITS_H__ #define __PROFILE_LIMITS_H__ #include "cg_common.h" #include "csplugincommon/opengl/shaderplugin.h" struct csGLExtensionManager; struct iFile; CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { struct ProfileLimits { CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendor; CGprofile profile; uint MaxAddressRegs; uint MaxInstructions; uint MaxLocalParams; uint MaxTexIndirections; uint NumInstructionSlots; uint NumMathInstructionSlots; uint NumTemps; uint NumTexInstructionSlots; uint extensions; ProfileLimits ( CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendor, CGprofile profile); void GetCurrentLimits (csGLExtensionManager* ext); void ReadFromConfig (iConfigFile* cfg, const char* prefix); void GetCgDefaults (); bool FromString (const char* str); csString ToString () const; void ToCgOptions (ArgumentArray& args) const; csString ToStringForPunyHumans () const; bool Write (iFile* file) const; bool Read (iFile* file); bool operator< (const ProfileLimits& other) const; bool operator> (const ProfileLimits& other) const; bool operator== (const ProfileLimits& other) const; bool operator!= (const ProfileLimits& other) const { return !operator== (other); } bool operator>= (const ProfileLimits& other) const { return !operator< (other); } private: void FixupVendor () { /* We only really distinguish the vendor here for purposes of clipping - ATI can do a bit 'more' than what the ARBVP spec says. In that respect, NV acts like 'other'. NV-specific clipping requires the NV VP support which isn't available elsewhere anyway. And since the vendor really only matters for ARBVP, and NVIDIA or Other doesn't make a difference, reduce NVIDIA to Other. */ if (vendor == CS::PluginCommon::ShaderProgramPluginGL::NVIDIA) vendor = CS::PluginCommon::ShaderProgramPluginGL::Other; } void SetDefaults (); /// Like cgGetProfileString(), but also handles CG_PROFILE_UNKNOWN static const char* GetProfileString (CGprofile); static uint glGetProgramInteger (csGLExtensionManager* ext, GLenum target, GLenum what); }; struct ProfileLimitsPair { ProfileLimits vp; ProfileLimits fp; ProfileLimitsPair() : vp (CS::PluginCommon::ShaderProgramPluginGL::Other, CG_PROFILE_UNKNOWN), fp (CS::PluginCommon::ShaderProgramPluginGL::Other, CG_PROFILE_UNKNOWN) {} ProfileLimitsPair ( CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendorVP, CGprofile profileVP, CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendorFP, CGprofile profileFP) : vp (vendorVP, profileVP), fp (vendorFP, profileFP) {} void GetCurrentLimits (csGLExtensionManager* ext) { vp.GetCurrentLimits (ext); fp.GetCurrentLimits (ext); } bool FromString (const char* str); csString ToString () const; bool operator< (const ProfileLimitsPair& other) const { if (fp < other.fp) return true; if (fp == other.fp) return false; return vp < other.vp; } bool operator> (const ProfileLimitsPair& other) const { if (fp > other.fp) return true; if (fp == other.fp) return false; return vp > other.vp; } bool operator== (const ProfileLimitsPair& other) const { return (fp == other.fp) && (vp == other.vp); } bool operator!= (const ProfileLimitsPair& other) const { return !operator== (other); } bool operator>= (const ProfileLimitsPair& other) const { return !operator< (other); } }; } CS_PLUGIN_NAMESPACE_END(GLShaderCg) #endif // __PROFILE_LIMITS_H__ crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgfp.h0000644000175000017500000000522511774271776033377 0ustar devfildevfil/* Copyright (C) 2002 by Anders Stenberg Marten Svanfeldt 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. */ #ifndef __GLSHADER_CGFP_H__ #define __GLSHADER_CGFP_H__ #include "csplugincommon/shader/shaderplugin.h" #include "csgfx/shadervarcontext.h" #include "ivideo/shader/shader.h" #include "csutil/strhash.h" #include "csutil/leakguard.h" #include "glshader_cg.h" #include "glshader_cgcommon.h" class csGLStateCache; CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { class csShaderGLCGFP : public csShaderGLCGCommon { private: csGLStateCache* statecache; bool TryCompile (uint loadFlags, const ProfileLimitsPair& limits); public: ProfileLimitsPair cacheLimits; CS_LEAKGUARD_DECLARE (csShaderGLCGFP); csShaderGLCGFP (csGLShader_CG* shaderPlug, const ProfileLimitsPair& cacheLimits) : csShaderGLCGCommon (shaderPlug, progFP), cacheLimits (cacheLimits) { } /// Sets this program to be the one used when rendering virtual void Activate (); /// Deactivate program so that it's not used in next rendering virtual void Deactivate(); /// Setup states needed for proper operation of the shader virtual void SetupState (const CS::Graphics::RenderMesh* mesh, CS::Graphics::RenderMeshModes& modes, const csShaderVariableStack& stack); /// Reset states to original virtual void ResetState (); /// Compile a program virtual bool Compile (iHierarchicalCache* cache, csRef*); bool Precache (const ProfileLimitsPair& limitsPair, const char* tag, iHierarchicalCache* cache); iShaderProgram::CacheLoadResult LoadFromCache ( iHierarchicalCache* cache, iBase* previous, iDocumentNode* programNode, csRef* failReason = 0, csRef* tag = 0); virtual int ResolveTU (const char* binding); virtual void GetUsedShaderVars (csBitArray& bits) const { if (pswrap.IsValid()) { pswrap->GetUsedShaderVars (bits); return; } csShaderGLCGCommon::GetUsedShaderVars (bits); } }; } CS_PLUGIN_NAMESPACE_END(GLShaderCg) #endif //__GLSHADER_CGFP_H__ ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.cppcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.0000644000175000017500000004346411774271776033467 0ustar devfildevfil/* Copyright (C) 2008 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. */ #include "cssysdef.h" #include "iutil/cfgfile.h" #include "iutil/vfs.h" #include "csutil/csendian.h" #include "profile_limits.h" #include "csplugincommon/opengl/glextmanager.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { /* At least Cg 2.1 seems to store the profile limits as 16-bit integers, so use 0x7fff when something is 'unlimited'. */ #define UNLIMITED 0x7fff // Tabularize what profiles use what limits #define PROFILES \ PROFILE_BEGIN(ARBVP1) \ LIMIT(MaxAddressRegs, MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB, 1, 8) \ LIMIT(MaxInstructions, MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, 1024, 4096) \ LIMIT(MaxLocalParams, MAX_PROGRAM_LOCAL_PARAMETERS_ARB, 96, UNLIMITED) \ LIMIT(NumTemps, MAX_PROGRAM_TEMPORARIES_ARB, 32, 32) \ USESEXT(ARB_color_buffer_float, false) \ PROFILE_END(ARBVP1) \ \ PROFILE_BEGIN(ARBFP1) \ LIMIT(MaxLocalParams, MAX_PROGRAM_LOCAL_PARAMETERS_ARB, 32, UNLIMITED) \ LIMIT(MaxTexIndirections, MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB, UNLIMITED, UNLIMITED) \ LIMIT(NumInstructionSlots, MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, 1024, UNLIMITED) \ LIMIT(NumMathInstructionSlots, MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, 1024, UNLIMITED) \ LIMIT(NumTemps, MAX_PROGRAM_TEMPORARIES_ARB, 32, UNLIMITED) \ LIMIT(NumTexInstructionSlots, MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB, 1024, UNLIMITED) \ USESEXT(ARB_color_buffer_float, false) \ PROFILE_END(ARBFP1) \ \ PROFILE_BEGIN(VP40) \ LIMIT(MaxAddressRegs, MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB, 2, 8) \ LIMIT(MaxInstructions, MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, 2048, 4096) \ LIMIT(MaxLocalParams, MAX_PROGRAM_LOCAL_PARAMETERS_ARB, 256, UNLIMITED) \ LIMIT(NumTemps, MAX_PROGRAM_TEMPORARIES_ARB, 32, UNLIMITED) \ PROFILE_END(VP40) \ \ PROFILE_BEGIN(FP30) \ LIMIT(NumInstructionSlots, MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, 256, UNLIMITED) \ LIMIT(NumTemps, MAX_PROGRAM_TEMPORARIES_ARB, 32, 32) \ USESEXT(ARB_color_buffer_float, false) \ PROFILE_END(FP30) \ \ PROFILE_BEGIN(FP40) \ LIMIT(MaxLocalParams, MAX_PROGRAM_LOCAL_PARAMETERS_ARB, 1024, UNLIMITED) \ LIMIT(NumInstructionSlots, MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, 4096, UNLIMITED) \ LIMIT(NumTemps, MAX_PROGRAM_TEMPORARIES_ARB, 32, UNLIMITED) \ PROFILE_END(FP40) // Extensions that influence profile behaviour - bit mask enum { extARB_color_buffer_float = 1 }; ProfileLimits::ProfileLimits ( CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendor, CGprofile profile) : vendor (vendor), profile (profile), MaxAddressRegs (0), MaxInstructions (0), MaxLocalParams (0), MaxTexIndirections (0), NumInstructionSlots (0), NumMathInstructionSlots (0), NumTemps (0), NumTexInstructionSlots (0), extensions (0) { FixupVendor(); } uint ProfileLimits::glGetProgramInteger (csGLExtensionManager* ext, GLenum target, GLenum what) { GLint v = 0; ext->glGetProgramivARB (target, what, &v); /* If we happen to get a 0, try the non-native variant of a limit * (on some Intel HW native limits are all 0, but non-native ones are * useable) */ if (v == 0) { switch (what) { case GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB: ext->glGetProgramivARB (target, GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB, &v); break; case GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB: ext->glGetProgramivARB (target, GL_MAX_PROGRAM_ATTRIBS_ARB, &v); break; case GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB: ext->glGetProgramivARB (target, GL_MAX_PROGRAM_INSTRUCTIONS_ARB, &v); break; case GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB: ext->glGetProgramivARB (target, GL_MAX_PROGRAM_PARAMETERS_ARB, &v); break; case GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB: ext->glGetProgramivARB (target, GL_MAX_PROGRAM_TEMPORARIES_ARB, &v); break; } } return v; } void ProfileLimits::SetDefaults () { extensions = 0; #define PROFILE_BEGIN(PROFILE) \ case CG_PROFILE_ ## PROFILE: \ { #define PROFILE_END(PROFILE) \ } \ break; #define LIMIT(Limit, glLimit, cgDefault, cgMax) \ Limit = cgDefault; #define USESEXT(X, defaultPresent) \ if (defaultPresent) extensions |= ext ## X; switch (profile) { PROFILES default: break; } #undef PROFILE_BEGIN #undef PROFILE_END #undef LIMIT #undef USESEXT } const char* ProfileLimits::GetProfileString (CGprofile p) { switch (p) { case CG_PROFILE_UNKNOWN: return "(unknown)"; default: return cgGetProfileString (p); } } static GLenum GetProgramIntegerTarget (CGprofile profile) { switch (profile) { case CG_PROFILE_VP30: case CG_PROFILE_VP40: case CG_PROFILE_ARBVP1: return GL_VERTEX_PROGRAM_ARB; case CG_PROFILE_FP30: case CG_PROFILE_FP40: case CG_PROFILE_ARBFP1: return GL_FRAGMENT_PROGRAM_ARB; default: return GL_NONE; } } void ProfileLimits::GetCurrentLimits (csGLExtensionManager* ext) { #define PROFILE_BEGIN(PROFILE) \ case CG_PROFILE_ ## PROFILE: \ { \ const GLenum target = GetProgramIntegerTarget (CG_PROFILE_ ## PROFILE); #define PROFILE_END(PROFILE) \ } \ break; #define LIMIT(Limit, glLimit, cgDefault, cgMax) \ Limit = (GL_ ## glLimit != GL_NONE) \ ? glGetProgramInteger (ext, target, GL_ ## glLimit) : cgDefault; \ if (Limit > cgMax) Limit = cgMax; #define USESEXT(X, defaultPresent) \ if (ext->CS_GL_##X) extensions |= ext ## X; switch (profile) { PROFILES default: break; } #undef PROFILE_BEGIN #undef PROFILE_END #undef LIMIT #undef USESEXT } void ProfileLimits::ReadFromConfig (iConfigFile* cfg, const char* _prefix) { csString prefix (_prefix); vendor = CS::PluginCommon::ShaderProgramPluginGL::VendorFromString ( cfg->GetStr (prefix + ".Vendor", "other")); FixupVendor(); // Set defaults SetDefaults (); #define READ(Limit) \ { int x = cfg->GetInt (prefix + "." #Limit, -1); if (x >= 0) Limit = x; } READ (MaxAddressRegs); READ (MaxInstructions); READ (MaxLocalParams); READ (MaxTexIndirections); READ (NumInstructionSlots); READ (NumMathInstructionSlots); READ (NumTemps); READ (NumTexInstructionSlots); #define READEXT(Ext) \ { \ bool b = cfg->GetBool (prefix + ".Ext." #Ext, false); \ if (b) extensions |= ext##Ext; else extensions &= ~(ext##Ext); \ } READEXT (ARB_color_buffer_float); #undef READ #undef READEXT } void ProfileLimits::GetCgDefaults () { extensions = 0; #define PROFILE_BEGIN(PROFILE) \ case CG_PROFILE_ ## PROFILE: \ { #define PROFILE_END(PROFILE) \ } \ break; #define LIMIT(Limit, glLimit, cgDefault, cgMax) \ Limit = cgDefault; #define USESEXT(X, defaultPresent) \ if (defaultPresent) extensions |= ext ## X; switch (profile) { PROFILES default: break; } #undef PROFILE_BEGIN #undef PROFILE_END #undef LIMIT #undef USESEXT } enum { limMaxAddressRegs, limMaxInstructions, limMaxLocalParams, limMaxTexIndirections, limNumInstructionSlots, limNumMathInstructionSlots, limNumTemps, limNumTexInstructionSlots }; bool ProfileLimits::FromString (const char* str) { csStringArray components; components.SplitString (str, "."); if (components.GetSize() == 0) return false; size_t i = 0; profile = cgGetProfile (components[i++]); if (profile == CG_PROFILE_UNKNOWN) return false; if (i >= components.GetSize()) return false; vendor = CS::PluginCommon::ShaderProgramPluginGL::VendorFromString ( components[i++]); FixupVendor(); if (vendor == CS::PluginCommon::ShaderProgramPluginGL::Invalid) return false; uint usedLimits = 0; uint usedExts = 0; #define PROFILE_BEGIN(PROFILE) \ case CG_PROFILE_ ## PROFILE: \ { #define PROFILE_END(PROFILE) \ } \ break; #define LIMIT(Limit, glLimit, cgDefault, cgMax) \ usedLimits |= 1 << lim ## Limit; #define USESEXT(X, defaultPresent) \ usedExts |= ext ## X; switch (profile) { PROFILES default: break; } #undef PROFILE_BEGIN #undef PROFILE_END #undef LIMIT #undef USESEXT if (usedExts != 0) { if (i >= components.GetSize()) return false; uint v; char dummy; if (sscanf (components[i++], "%u%c", &v, &dummy) != 1) return false; extensions = v; } #define EMIT(Limit) \ if (usedLimits & (1 << lim ## Limit)) \ { \ if (i >= components.GetSize()) return false; \ int v; \ char dummy; \ if (sscanf (components[i++], "%d%c", &v, &dummy) != 1) return false; \ Limit = v; \ } EMIT (MaxInstructions); EMIT (NumInstructionSlots); EMIT (NumMathInstructionSlots); EMIT (NumTexInstructionSlots); EMIT (NumTemps); EMIT (MaxLocalParams); EMIT (MaxTexIndirections); EMIT (MaxAddressRegs); #undef EMIT return i == components.GetSize(); }; csString ProfileLimits::ToString () const { uint usedLimits = 0; uint usedExts = 0; #define PROFILE_BEGIN(PROFILE) \ case CG_PROFILE_ ## PROFILE: \ { #define PROFILE_END(PROFILE) \ } \ break; #define LIMIT(Limit, glLimit, cgDefault, cgMax) \ usedLimits |= 1 << lim ## Limit; #define USESEXT(X, defaultPresent) \ usedExts |= ext ## X; switch (profile) { PROFILES default: break; } #undef PROFILE_BEGIN #undef PROFILE_END #undef LIMIT #undef USESEXT csString ret (GetProfileString (profile)); ret.AppendFmt (".%s", CS::PluginCommon::ShaderProgramPluginGL::VendorToString (vendor)); if (usedExts != 0) { ret.AppendFmt (".%u", extensions); } #define EMIT(Limit) if (usedLimits & (1 << lim ## Limit)) ret.AppendFmt (".%u", Limit); EMIT (MaxInstructions); EMIT (NumInstructionSlots); EMIT (NumMathInstructionSlots); EMIT (NumTexInstructionSlots); EMIT (NumTemps); EMIT (MaxLocalParams); EMIT (MaxTexIndirections); EMIT (MaxAddressRegs); #undef EMIT return ret; }; csString ProfileLimits::ToStringForPunyHumans () const { uint usedLimits = 0; uint usedExts = 0; #define PROFILE_BEGIN(PROFILE) \ case CG_PROFILE_ ## PROFILE: \ { #define PROFILE_END(PROFILE) \ } \ break; #define LIMIT(Limit, glLimit, cgDefault, cgMax) \ usedLimits |= 1 << lim ## Limit; #define USESEXT(X, defaultPresent) \ usedExts |= ext ## X; switch (profile) { PROFILES default: break; } #undef PROFILE_BEGIN #undef PROFILE_END #undef LIMIT #undef USESEXT csString ret (GetProfileString (profile)); ret.AppendFmt (" %s", CS::PluginCommon::ShaderProgramPluginGL::VendorToString (vendor)); #define EXT(X) \ if (usedExts & ext##X)\ ret.AppendFmt (" " #X "=%s", extensions & ext##X ? "y" : "n") EXT(ARB_color_buffer_float); #undef EXT #define EMIT(Limit) if (usedLimits & (1 << lim ## Limit)) \ ret.AppendFmt (" " #Limit "=%u", Limit); EMIT (MaxInstructions); EMIT (NumInstructionSlots); EMIT (NumMathInstructionSlots); EMIT (NumTexInstructionSlots); EMIT (NumTemps); EMIT (MaxLocalParams); EMIT (MaxTexIndirections); EMIT (MaxAddressRegs); #undef EMIT return ret; }; void ProfileLimits::ToCgOptions (ArgumentArray& args) const { #define PROFILE_BEGIN(PROFILE) \ case CG_PROFILE_ ## PROFILE: \ { #define PROFILE_END(PROFILE) \ } \ break; #define LIMIT(Limit, glLimit, cgDefault, cgMax) \ args.Push ("-po"); \ args.Push (csString().Format (#Limit "=%u", Limit)); #define USESEXT(X, defaultPresent) \ if (extensions & ext##X) \ args.Push (csString().Format ("-DHAVE_" #X)); switch (profile) { PROFILES default: break; } #undef PROFILE_BEGIN #undef PROFILE_END #undef LIMIT #undef USESEXT } bool ProfileLimits::Write (iFile* file) const { { int32 diskVal = csLittleEndian::Int32 (vendor); if (file->Write ((char*)&diskVal, sizeof (diskVal)) != sizeof (diskVal)) return false; } #define WRITE(Limit) \ { \ uint32 diskVal = csLittleEndian::UInt32 (Limit); \ if (file->Write ((char*)&diskVal, sizeof (diskVal)) != sizeof (diskVal)) \ return false; \ } WRITE (extensions); WRITE (MaxAddressRegs); WRITE (MaxInstructions); WRITE (MaxLocalParams); WRITE (MaxTexIndirections); WRITE (NumInstructionSlots); WRITE (NumMathInstructionSlots); WRITE (NumTemps); WRITE (NumTexInstructionSlots); #undef WRITE return true; } bool ProfileLimits::Read (iFile* file) { { int32 diskVal; if (file->Read ((char*)&diskVal, sizeof (diskVal)) != sizeof (diskVal)) return false; vendor = (CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor) csLittleEndian::Int32 (diskVal); FixupVendor (); } #define READ(Limit) \ { \ uint32 diskVal; \ if (file->Read ((char*)&diskVal, sizeof (diskVal)) != sizeof (diskVal)) \ return false; \ Limit = csLittleEndian::UInt32 (diskVal); \ } READ (extensions); READ (MaxAddressRegs); READ (MaxInstructions); READ (MaxLocalParams); READ (MaxTexIndirections); READ (NumInstructionSlots); READ (NumMathInstructionSlots); READ (NumTemps); READ (NumTexInstructionSlots); #undef READ return true; } static int GetProfileOrdering (CGprofile profile) { switch (profile) { case CG_PROFILE_PS_1_1: return 0; case CG_PROFILE_PS_1_2: return 1; case CG_PROFILE_PS_1_3: return 2; case CG_PROFILE_VP20: return 3; case CG_PROFILE_FP20: return 4; case CG_PROFILE_ARBVP1: return 5; case CG_PROFILE_ARBFP1: return 6; case CG_PROFILE_VP30: return 7; case CG_PROFILE_FP30: return 8; case CG_PROFILE_VP40: return 9; case CG_PROFILE_FP40: return 10; case CG_PROFILE_GPU_VP: return 11; case CG_PROFILE_GPU_FP: return 12; default: return -1; } } bool ProfileLimits::operator< (const ProfileLimits& other) const { int p1 = GetProfileOrdering (profile); int p2 = GetProfileOrdering (other.profile); if (p1 < p2) return true; if (p1 > p2) return false; if (vendor < other.vendor) return true; if (vendor > other.vendor) return false; #define COMPARE(Limit) \ if (Limit < other.Limit) return true; \ if (Limit > other.Limit) return false; COMPARE (extensions); // @@@ Right? COMPARE (MaxInstructions); COMPARE (NumInstructionSlots); COMPARE (NumMathInstructionSlots); COMPARE (NumTexInstructionSlots); COMPARE (NumTemps); COMPARE (MaxLocalParams); COMPARE (MaxTexIndirections); COMPARE (MaxAddressRegs); #undef COMPARE return false; } bool ProfileLimits::operator> (const ProfileLimits& other) const { int p1 = GetProfileOrdering (profile); int p2 = GetProfileOrdering (other.profile); if (p1 > p2) return true; if (p1 < p2) return false; if (vendor > other.vendor) return true; if (vendor < other.vendor) return false; #define COMPARE(Limit) \ if (Limit > other.Limit) return true; \ if (Limit < other.Limit) return false; COMPARE (extensions); // @@@ Right? COMPARE (MaxInstructions); COMPARE (NumInstructionSlots); COMPARE (NumMathInstructionSlots); COMPARE (NumTexInstructionSlots); COMPARE (NumTemps); COMPARE (MaxLocalParams); COMPARE (MaxTexIndirections); COMPARE (MaxAddressRegs); #undef COMPARE return false; } bool ProfileLimits::operator== (const ProfileLimits& other) const { int p1 = GetProfileOrdering (profile); int p2 = GetProfileOrdering (other.profile); if (p1 != p2) return false; if (vendor != other.vendor) return false; #define COMPARE(Limit) \ if (Limit != other.Limit) return false; COMPARE (extensions); COMPARE (MaxInstructions); COMPARE (NumInstructionSlots); COMPARE (NumMathInstructionSlots); COMPARE (NumTexInstructionSlots); COMPARE (NumTemps); COMPARE (MaxLocalParams); COMPARE (MaxTexIndirections); COMPARE (MaxAddressRegs); #undef COMPARE return true; } //------------------------------------------------------------------------- bool ProfileLimitsPair::FromString (const char* str) { csString tagFP (str); csString tagVP; { size_t semicolon = tagFP.FindFirst (';'); if (semicolon == (size_t)-1) return false; tagFP.SubString (tagVP, semicolon+1, tagFP.Length() - (semicolon+1)); tagFP.Truncate (semicolon); } if (!vp.FromString (tagVP)) return false; if (!fp.FromString (tagFP)) return false; return true; } csString ProfileLimitsPair::ToString () const { return csString().Format ("%s;%s", fp.ToString().GetData(), vp.ToString().GetData()); } } CS_PLUGIN_NAMESPACE_END(GLShaderCg) crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.h0000644000175000017500000001047111774271776033050 0ustar devfildevfil/* Copyright (C) 2002 by Anders Stenberg Marten Svanfeldt 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. */ #ifndef __GLSHADER_CG_H__ #define __GLSHADER_CG_H__ #include "cg_common.h" #include "csplugincommon/opengl/shaderplugin.h" #include "csplugincommon/shader/shaderplugin.h" #include "csutil/blockallocator.h" #include "csutil/leakguard.h" #include "iutil/comp.h" #include "ivideo/shader/shader.h" #include "glshader_cgcommon.h" #include "profile_limits.h" #include "progcache.h" struct csGLExtensionManager; CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { class StringStore; class csGLShader_CG : public scfImplementationExt1 { private: static void ErrorHandler (CGcontext context, CGerror err, void* appdata); static void ErrorHandlerObjReg (CGcontext context, CGerror err, void* appdata); bool enable; const char* compiledProgram; bool doIgnoreErrors; typedef csArray ProfileLimitsArray; ProfileLimitsArray precacheLimits; void ParsePrecacheLimits (iConfigFile* config, ProfileLimitsArray& out); bool Precache (csShaderGLCGCommon* prog, ProfileLimitsPair& limits, const char* tag, iHierarchicalCache* cacheTo); public: CS_LEAKGUARD_DECLARE (csGLShader_CG); using CS::PluginCommon::ShaderProgramPluginGL::ext; using CS::PluginCommon::ShaderProgramPluginGL::statecache; using CS::PluginCommon::ShaderProgramPluginGL::doVerbose; using CS::PluginCommon::ShaderProgramPluginGL::doVerbosePrecache; using CS::PluginCommon::ShaderProgramPluginGL::object_reg; using CS::PluginCommon::ShaderProgramPluginGL::vendor; CGcontext context; csRef psplg; bool debugDump; char* dumpDir; bool enableVP, enableFP; ProfileLimitsPair currentLimits; bool strictMatchVP, strictMatchFP; csBlockAllocator paramAlloc; csRef binDocSys; csRef xmlDocSys; ProgramCache progCache; StringStore* stringStore; csGLShader_CG (iBase *parent); virtual ~csGLShader_CG (); void Report (int severity, const char* msg, ...) CS_GNUC_PRINTF(3, 4); /**\name iShaderProgramPlugin implementation * @{ */ virtual csPtr CreateProgram(const char* type) ; virtual bool SupportType(const char* type); csPtr QueryPrecacheTags (const char* type); bool Precache (const char* type, const char* tag, iBase* previous, iDocumentNode* node, iHierarchicalCache* cacheTo, csRef* outObj = 0); bool Open(); /** @} */ /**\name iComponent implementation * @{ */ bool Initialize (iObjectRegistry* reg); /** @} */ void SplitArgsString (const char* str, ArgumentArray& args); enum { argsAll = 0, argsNoConfig = 1, argsNoProfileLimits = 2, argsNoProgramType = 4, argsNone = argsNoConfig | argsNoProfileLimits | argsNoProgramType }; void GetProfileCompilerArgs (const char* type, CGprofile profile, const ProfileLimitsPair& limitsPair, HardwareVendor vendor, uint argsMask, ArgumentArray& args); static bool ProfileNeedsRouting (CGprofile profile) { return (profile >= CG_PROFILE_PS_1_1) && (profile <= CG_PROFILE_PS_1_3); } bool IsRoutedProfileSupported (CGprofile profile); void SetCompiledSource (const char* prog) { compiledProgram = prog; } void SetIgnoreErrors (bool doIgnore) { doIgnoreErrors = doIgnore; } void PrintCgListing (const char* listing); void PrintAnyListing () { const char* listing = cgGetLastListing (context); if (listing && *listing && doVerbose) { PrintCgListing (listing); } } }; } CS_PLUGIN_NAMESPACE_END(GLShaderCg) #endif //__GLSHADER_CG_H__ crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/cg_common.h0000644000175000017500000000240111774271776032541 0ustar devfildevfil/* Copyright (C) 2007 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. */ #ifndef __CG_COMMON_H__ #define __CG_COMMON_H__ #include "csutil/dirtyaccessarray.h" #include "csutil/stringarray.h" #define WIN32_LEAN_AND_MEAN #include /* WIN32 is used in an "#if" inside , however, it is sometimes defined * without value. */ #ifdef WIN32 #undef WIN32 #define WIN32 1 #endif #include CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { typedef csDirtyAccessArray ArgumentArray; } CS_PLUGIN_NAMESPACE_END(GLShaderCg) #endif // __CG_COMMON_H__ ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.cppcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcomm0000644000175000017500000007651311774271776033507 0ustar devfildevfil/* Copyright (C) 2002-2005 by Marten Svanfeldt Anders Stenberg 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. */ #include "cssysdef.h" #include "csplugincommon/opengl/glextmanager.h" #include "csplugincommon/opengl/glstates.h" #include "csplugincommon/shader/shadercachehelper.h" #include "csutil/csendian.h" #include "csutil/documenthelper.h" #include "csutil/memfile.h" #include "csutil/scfstr.h" #include "csutil/scfstringarray.h" #include "csutil/stringreader.h" #include "iutil/hiercache.h" #include "iutil/stringarray.h" #include "ivaria/reporter.h" #include "glshader_cg.h" #include "glshader_cgfp.h" #include "glshader_cgcommon.h" #include "profile_limits.h" #include "stringstore.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { CS_LEAKGUARD_IMPLEMENT (csShaderGLCGCommon); csShaderGLCGCommon::csShaderGLCGCommon (csGLShader_CG* shaderPlug, ProgramType type) : scfImplementationType (this, shaderPlug->object_reg), programType (type) { this->shaderPlug = shaderPlug; program = 0; InitTokenTable (xmltokens); } csShaderGLCGCommon::~csShaderGLCGCommon () { if (program) cgDestroyProgram (program); for(size_t i = 0; i < variablemap.GetSize (); ++i) { VariableMapEntry& mapping = variablemap[i]; ShaderParameter* param = reinterpret_cast (mapping.userVal); FreeShaderParam (param); } for(size_t i = 0; i < variablemapConstants.GetSize (); ++i) { VariableMapEntry& mapping = variablemapConstants[i]; ShaderParameter* param = reinterpret_cast (mapping.userVal); FreeShaderParam (param); } } void csShaderGLCGCommon::Activate() { cgGLEnableProfile (programProfile); #if 0 if (!cgGLIsProgramLoaded (program)) { cgGLLoadProgram (program); PostCompileVmapProcess (); } #endif cgGLBindProgram (program); if (shaderPlug->ext->CS_GL_ARB_color_buffer_float) { shaderPlug->statecache->SetClampColor (GL_CLAMP_VERTEX_COLOR_ARB, GL_FALSE); } } void csShaderGLCGCommon::Deactivate() { cgGLDisableProfile (programProfile); if (shaderPlug->ext->CS_GL_ARB_color_buffer_float) { shaderPlug->statecache->SetClampColor (GL_CLAMP_VERTEX_COLOR_ARB, GL_TRUE); } } void csShaderGLCGCommon::SetupState (const CS::Graphics::RenderMesh* /*mesh*/, CS::Graphics::RenderMeshModes& /*modes*/, const csShaderVariableStack& stack) { if ((clips.GetSize() > 0) && (programType == progVP)) { uint clipFlags = 0; shaderPlug->clipPlanes.SetShaderVars (stack); csVector4 packDist[2]; clipPackedDists[0]->GetValue (packDist[0]); clipPackedDists[1]->GetValue (packDist[1]); for (size_t c = 0; c < clips.GetSize(); c++) { const Clip& clip = clips[c]; bool hasClipDist = false; if (!clip.distance.IsConstant()) { csVector4 v; if (GetParamVectorVal (stack, clip.distance, &v)) { float distVal = v[clip.distComp]; if (clip.distNeg) distVal = -distVal; packDist[c/4][c%4] = distVal; hasClipDist = true; } else { // Force clipping to have no effect packDist[c/4][c%4] = -FLT_MAX; } } bool doClipping = false; /* Enable a clip plane if: - both plane and distance are constant - one is not constant and the SV value is present - both are not constant and the SV values are present */ csVector4 v; bool constPlane = clip.plane.IsConstant(); bool hasPlaneSV = !constPlane && GetParamVectorVal (stack, clip.plane, &v); bool constDist = clip.distance.IsConstant(); bool hasDistSV = !constDist && hasClipDist; doClipping = (constPlane && constDist) || (constPlane && hasDistSV) || (hasPlaneSV && constDist) || (hasPlaneSV && hasDistSV); if (doClipping) { clipFlags |= 1 << c; if (!constPlane) { csVector4 v = GetParamVectorVal (stack, clip.plane, csVector4 (0)); clipPlane[c]->SetValue (v); } } else { if (!constPlane) { // Force clip plane to not clip csVector4 v (0); clipPlane[c]->SetValue (v); } } } clipPackedDists[0]->SetValue (packDist[0]); clipPackedDists[1]->SetValue (packDist[1]); if ((programProfile == CG_PROFILE_VP40) || (programProfile == CG_PROFILE_GPU_VP)) { for (size_t c = 0; c < clips.GetSize(); c++) { if (clipFlags & (1 << c)) shaderPlug->clipPlanes.EnableClipPlane ((uint)c); } } else if ((programProfile == CG_PROFILE_ARBVP1) && (programPositionInvariant || (shaderPlug->vendor == CS::PluginCommon::ShaderProgramPluginGL::ATI))) { for (size_t c = 0; c < clips.GetSize(); c++) { const Clip& clip = clips[c]; if (clipFlags & (1 << c)) { csVector4 v ( GetParamVectorVal (stack, clip.plane, csVector4 (0, 0, 0, 0))); csPlane3 plane (v.x, v.y, v.z, v.w); float distVal = packDist[c/4][c%4]; plane.DD -= distVal / plane.Normal().Norm(); shaderPlug->clipPlanes.AddClipPlane (plane, clip.space); } } } } ApplyVariableMapArrays (stack); } void csShaderGLCGCommon::ResetState() { if ((clips.GetSize() > 0) && (programType == progVP)) { shaderPlug->clipPlanes.DisableClipPlanes(); } } void csShaderGLCGCommon::EnsureDumpFile() { if (debugFN.IsEmpty()) { static int programCounter = 0; const char* progTypeStr =""; switch (programType) { case progVP: progTypeStr = "cgvp"; break; case progFP: progTypeStr = "cgfp"; break; } csRef vfs = csQueryRegistry (objectReg); csString filename; filename << shaderPlug->dumpDir << (programCounter++) << progTypeStr << ".txt"; debugFN = filename; vfs->DeleteFile (debugFN); } } void csShaderGLCGCommon::PrecacheClear() { if (program != 0) { cgDestroyProgram (program); program = 0; } /*objectCode.Empty(); objectCodeCachePathArc.Empty(); objectCodeCachePathItem.Empty();*/ } bool csShaderGLCGCommon::DefaultLoadProgram (iShaderProgramCG* cgResolve, const char* programStr, ProgramType _type, const ProfileLimitsPair& customLimitsPair, uint flags) { if (!programStr || !*programStr) return false; const ProfileLimits& customLimits = (_type == progVP) ? customLimitsPair.vp : customLimitsPair.fp; CGGLenum type = (_type == progVP) ? CG_GL_VERTEX : CG_GL_FRAGMENT; size_t i; csString augmentedProgramStr = GetAugmentedProgram (programStr, (flags & loadFlagUnusedV2FForInit) != 0); programStr = augmentedProgramStr; CGprofile profile = customLimits.profile; CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendor = customLimits.vendor; if (shaderPlug->doVerbose || shaderPlug->doVerbosePrecache) { shaderPlug->Report (CS_REPORTER_SEVERITY_NOTIFY, "Cg %s program %s: using profile %s[%d]", GetProgramType(), CS::Quote::Single (description.GetData ()), cgGetProfileString (profile), profile); } ArgumentArray args; shaderPlug->GetProfileCompilerArgs (GetProgramType(), profile, customLimitsPair, vendor, (flags & loadIgnoreConfigProgramOpts) ? csGLShader_CG::argsNoConfig : csGLShader_CG::argsAll, args); for (i = 0; i < compilerArgs.GetSize(); i++) args.Push (compilerArgs[i]); programPositionInvariant = false; for (i = 0; i < args.GetSize(); ) { if (strcmp (args[i], "-posinv") == 0) { if (profile >= CG_PROFILE_GPU_VP) { /* Work around Cg 2.0 and above (including 3.0) bug: it emits "OPTION ARB_position_invariant;" AND computes result.position in the VP - doing both is verboten. Affected are the GP4VP and higher profiles. Remedy: remove -posinv argument */ args.DeleteIndex (i); continue; } programPositionInvariant = true; } i++; } customLimits.ToCgOptions (args); args.Push (0); if (program) { cgDestroyProgram (program); } shaderPlug->SetCompiledSource (programStr); shaderPlug->SetIgnoreErrors (true); program = cgCreateProgram (shaderPlug->context, CG_SOURCE, programStr, profile, !entrypoint.IsEmpty() ? entrypoint : "main", args.GetArray()); shaderPlug->SetIgnoreErrors (false); if (!(flags & loadIgnoreErrors)) shaderPlug->PrintAnyListing(); if (!program) { shaderPlug->SetCompiledSource (0); /*if (shaderPlug->debugDump) { EnsureDumpFile(); WriteAdditionalDumpInfo ("Failed program source", programStr); }*/ return false; } programProfile = cgGetProgramProfile (program); GetParamsFromVmapConstants(); if (flags & loadApplyVmap) GetParamsFromVmap(); if (flags & loadIgnoreErrors) shaderPlug->SetIgnoreErrors (true); cgCompileProgram (program); if (flags & loadIgnoreErrors) shaderPlug->SetIgnoreErrors (false); else shaderPlug->PrintAnyListing(); if (flags & loadApplyVmap) GetPostCompileParamProps (); if (flags & loadLoadToGL) { cgGetError(); // Clear error cgGLLoadProgram (program); if (!(flags & loadIgnoreErrors)) shaderPlug->PrintAnyListing(); if ((cgGetError() != CG_NO_ERROR) || !cgGLIsProgramLoaded (program)) { if (shaderPlug->debugDump) DoDebugDump(); if (shaderPlug->doVerbose && (((type == CG_GL_VERTEX) && (profile >= CG_PROFILE_ARBVP1)) || ((type == CG_GL_FRAGMENT) && (profile >= CG_PROFILE_ARBFP1)))) { csString err = (char*)glGetString (GL_PROGRAM_ERROR_STRING_ARB); if (!err.IsEmpty()) shaderPlug->Report (CS_REPORTER_SEVERITY_WARNING, "OpenGL error string: %s", err.GetData()); } shaderPlug->SetCompiledSource (0); return false; } } if (shaderPlug->debugDump) DoDebugDump(); shaderPlug->SetCompiledSource (0); bool result = true; if (programType == progFP) { int numVaryings = 0; CGparameter param = cgGetFirstLeafParameter (program, CG_PROGRAM); while (param) { if (cgIsParameterUsed (param, program) && cgIsParameterReferenced (param)) { const CGenum var = cgGetParameterVariability (param); if (var == CG_VARYING) numVaryings++; } param = cgGetNextLeafParameter (param); } /* WORKAROUND: Even NVs G80 doesn't support passing more than 16 attribs into an FP, yet Cg happily generates code that uses more (and GL falls back to SW). So manually check the number of varying inputs and reject more than 16. @@@ This should be at least configurable */ const int maxNumVaryings = 16; if (numVaryings > maxNumVaryings) { if (shaderPlug->doVerbose || shaderPlug->doVerbosePrecache) { shaderPlug->Report (CS_REPORTER_SEVERITY_NOTIFY, "Discarding compiled program for having too much varyings " "(%d, limit is %d)", numVaryings, maxNumVaryings); } cgDestroyProgram (program); program = 0; result = false; } } if (!result && !debugFN.IsEmpty()) { csRef vfs = csQueryRegistry (objectReg); vfs->DeleteFile (debugFN); } return result; } csString csShaderGLCGCommon::GetAugmentedProgram (const char* programStr, bool initializeUnusedV2F) { csString augmentedProgramStr; if (programPositionInvariant) augmentedProgramStr.Append ("/* position invariant */\n"); const csSet* unusedParams = &this->unusedParams; if (cgResolve != 0) { unusedParams = &cgResolve->GetUnusedParameters (); } csSet::GlobalIterator unusedIt (unusedParams->GetIterator()); while (unusedIt.HasNext()) { const csString& param = unusedIt.Next (); augmentedProgramStr.AppendFmt ("#define %s\n", param.GetData()); } if (initializeUnusedV2F) augmentedProgramStr.Append ("#define _INITIALIZE_UNUSED_V2F\n"); OutputClipPreamble (augmentedProgramStr); WriteClipApplications (augmentedProgramStr); augmentedProgramStr.Append (programStr); return augmentedProgramStr; } void csShaderGLCGCommon::DoDebugDump () { csString output; DumpProgramInfo (output); output << "CG program type: " << programType << "\n"; output << "CG profile: " << cgGetProgramString (program, CG_PROGRAM_PROFILE) << "\n"; output << "CG entry point: " << (entrypoint ? entrypoint : "main") << "\n"; output << "CG program valid: " << IsValid() << "\n"; output << "\n"; output << "Variable mappings:\n"; for (size_t v = 0; v < variablemap.GetSize (); v++) { const VariableMapEntry& vme = variablemap[v]; ShaderParameter* sparam = reinterpret_cast (vme.userVal); output << stringsSvName->Request (vme.name); output << '(' << vme.name << ") -> "; output << vme.destination << ' '; if (sparam == 0) { output << "(null)"; } else { if (sparam->paramType != 0) output << cgGetTypeString (sparam->paramType) << ' '; if (sparam->param != 0) output << cgGetParameterName (sparam->param) << " "; output << "baseslot " << sparam->baseSlot; if (sparam->assumeConstant) output << " assumed constant"; } output << '\n'; } output << "\n"; output << "Program leaf parameters:\n"; CGparameter param = cgGetFirstLeafParameter (program, CG_PROGRAM); while (param) { DebugDumpParam (output, param); param = cgGetNextLeafParameter (param); } output << "\n"; output << "Program global parameters:\n"; param = cgGetFirstLeafParameter (program, CG_GLOBAL); while (param) { DebugDumpParam (output, param); param = cgGetNextLeafParameter (param); } output << "\n"; output << "Program source:\n"; output << cgGetProgramString (program, CG_PROGRAM_SOURCE); output << "\n"; output << "Compiled program:\n"; output << cgGetProgramString (program, CG_COMPILED_PROGRAM); output << "\n"; csRef vfs = csQueryRegistry (objectReg); EnsureDumpFile(); csRef debugFile = vfs->Open (debugFN, VFS_FILE_APPEND); if (!debugFile) { csReport (objectReg, CS_REPORTER_SEVERITY_WARNING, "crystalspace.graphics3d.shader.glcg", "Could not write %s", CS::Quote::Single (debugFN.GetData())); } else { debugFile->Write (output.GetData(), output.Length ()); csReport (objectReg, CS_REPORTER_SEVERITY_NOTIFY, "crystalspace.graphics3d.shader.glcg", "Dumped Cg program info to %s", CS::Quote::Single (debugFN.GetData())); } } void csShaderGLCGCommon::DebugDumpParam (csString& output, CGparameter param) { output << "Parameter: " << cgGetParameterName (param) << "\n"; output << " Type: " << cgGetTypeString (cgGetParameterNamedType (param)) << "\n"; output << " Direction: " << cgGetEnumString (cgGetParameterDirection (param)) << "\n"; output << " Semantic: " << cgGetParameterSemantic (param) << "\n"; const CGenum var = cgGetParameterVariability (param); output << " Variability: " << cgGetEnumString (var) << "\n"; output << " Resource: " << cgGetResourceString (cgGetParameterResource (param)) << "\n"; output << " Resource index: " << cgGetParameterResourceIndex (param) << "\n"; // Cg 2.0 seems to not like CG_DEFAULT for uniforms if (/*(var == CG_UNIFORM) || */(var == CG_CONSTANT)) { int nValues; const double* values = cgGetParameterValues (param, (var == CG_UNIFORM) ? CG_DEFAULT : CG_CONSTANT, &nValues); if (nValues != 0) { output << " Values:"; for (int v = 0; v < nValues; v++) { output << ' ' << values[v]; } output << "\n"; } } if (!cgIsParameterUsed (param, program)) output << " not used\n"; if (!cgIsParameterReferenced (param)) output << " not referenced\n"; } void csShaderGLCGCommon::WriteAdditionalDumpInfo (const char* description, const char* content) { if (!shaderPlug->debugDump || !debugFN) return; csRef vfs = csQueryRegistry (objectReg); csRef oldDump = vfs->ReadFile (debugFN, true); csString output (oldDump ? (char*)oldDump->GetData() : 0); output << description << ":\n"; output << content; output << "\n"; if (!vfs->WriteFile (debugFN, output.GetData(), output.Length ())) { csReport (objectReg, CS_REPORTER_SEVERITY_WARNING, "crystalspace.graphics3d.shader.glcg", "Could not augment %s", CS::Quote::Single (debugFN.GetData())); } } /* Magic value for cg program files. * The most significant byte serves as a "version", increase when the * cache file format changes. */ static const uint32 cacheFileMagic = 0x06706763; enum { cpsValid = 0x6b726f77, cpsInvalid = 0x6b723062 }; bool csShaderGLCGCommon::WriteToCacheWorker (iHierarchicalCache* cache, const ProfileLimits& limits, const ProfileLimitsPair& limitsPair, const char* tag, const ProgramObject& program, csString& failReason) { if (!cache) return false; csMemFile cacheFile; uint32 diskMagic = csLittleEndian::UInt32 (cacheFileMagic); if (cacheFile.Write ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) { failReason = "write error (magic)"; return false; } csRef programBuffer = GetProgramData(); CS::Utility::Checksum::MD5::Digest progHash = CS::Utility::Checksum::MD5::Encode ( programBuffer->GetData(), programBuffer->GetSize()); if (cacheFile.Write ((char*)&progHash, sizeof (progHash)) != sizeof (progHash)) { failReason = "write error (hash)"; return false; } if (!program.IsValid()) { uint32 diskState = csLittleEndian::UInt32 (cpsInvalid); if (cacheFile.Write ((char*)&diskState, sizeof (diskState)) != sizeof (diskState)) { failReason = "write error (state-invalid)"; return false; } } else { { uint32 diskState = csLittleEndian::UInt32 (cpsValid); if (cacheFile.Write ((char*)&diskState, sizeof (diskState)) != sizeof (diskState)) { failReason = "write error (state-valid)"; return false; } } CS::PluginCommon::ShaderCacheHelper::WriteString (&cacheFile, description); CS_ASSERT(!program.GetID().archive.IsEmpty()); CS::PluginCommon::ShaderCacheHelper::WriteString (&cacheFile, program.GetID().archive); CS_ASSERT(!program.GetID().item.IsEmpty()); CS::PluginCommon::ShaderCacheHelper::WriteString (&cacheFile, program.GetID().item); } csString cacheName ("/"); cacheName += tag; if (!cache->CacheData (cacheFile.GetData(), cacheFile.GetSize(), cacheName)) { failReason = "failed writing to cache"; return false; } return true; } bool csShaderGLCGCommon::WriteToCache (iHierarchicalCache* cache, const ProfileLimits& limits, const ProfileLimitsPair& limitsPair, const char* tag, const ProgramObject& program) { csString failReason; if (!WriteToCacheWorker (cache, limits, limitsPair, tag, program, failReason)) { if (shaderPlug->doVerbose) { csReport (objectReg, CS_REPORTER_SEVERITY_WARNING, "crystalspace.graphics3d.shader.glcg", "Error writing %s program for %s to cache: %s", GetProgramType(), tag, failReason.GetData()); } return false; } return true; } bool csShaderGLCGCommon::WriteToCache (iHierarchicalCache* cache, const ProfileLimits& limits, const ProfileLimitsPair& limitsPair, const char* tag) { csString objectCode; if (program != 0) objectCode = cgGetProgramString (program, CG_COMPILED_PROGRAM); ProgramObject programObj (objectCode, programPositionInvariant ? ProgramObject::flagPositionInvariant : 0, unusedParams); const char* preprocSource (cgGetProgramString (program, CG_PROGRAM_SOURCE)); csString failReason; ProgramObjectID progId; if (!shaderPlug->progCache.WriteObject (preprocSource, limits, programObj, progId, failReason)) { if (shaderPlug->doVerbose) { csReport (objectReg, CS_REPORTER_SEVERITY_WARNING, "crystalspace.graphics3d.shader.glcg", "Error writing %s program for %s to compile cache: %s", GetProgramType(), tag, failReason.GetData()); } return false; } programObj.SetID (progId); return WriteToCache (cache, limits, limitsPair, tag, programObj); } struct CachedShaderWrapper { csString name; csRef cacheFile; ProfileLimitsPair limits; bool operator< (const CachedShaderWrapper& other) const { return limits < other.limits; } }; iShaderProgram::CacheLoadResult csShaderGLCGCommon::LoadFromCache ( iHierarchicalCache* cache, iBase* previous, iDocumentNode* node, csRef* failReason, csRef* tag, ProfileLimitsPair* cacheLimits) { if (!cache) return iShaderProgram::loadFail; csRef prevCG (scfQueryInterfaceSafe ( previous)); csRef allCachedPrograms; if ((programType == progVP) && prevCG.IsValid()) { csShaderGLCGFP* prevFP = static_cast ( (iShaderProgramCG*)prevCG); csString tagStr ("CG"); tagStr += prevFP->cacheLimits.ToString(); if (failReason) failReason->AttachNew ( new scfString ("paired cached programs not found")); allCachedPrograms.AttachNew (new scfStringArray); allCachedPrograms->Push (tagStr); } else allCachedPrograms = cache->GetSubItems ("/"); if (!allCachedPrograms.IsValid() || (allCachedPrograms->GetSize() == 0)) { if (failReason) failReason->AttachNew ( new scfString ("no cached programs found")); return iShaderProgram::loadFail; } if (!GetProgramNode (node)) return iShaderProgram::loadFail; csRef programBuffer = GetProgramData(); CS::Utility::Checksum::MD5::Digest progHash = CS::Utility::Checksum::MD5::Encode ( programBuffer->GetData(), programBuffer->GetSize()); csArray cachedProgWrappers; for (size_t i = 0; i < allCachedPrograms->GetSize(); i++) { const char* tag = allCachedPrograms->Get (i); if ((tag[0] != 'C') || (tag[1] != 'G')) continue; CachedShaderWrapper wrapper; if (!wrapper.limits.FromString (tag+2)) continue; wrapper.name = tag; csString cachePath ("/"); cachePath.Append (tag); csRef cacheBuf = cache->ReadCache (cachePath); if (!cacheBuf.IsValid()) continue; csRef cacheFile; cacheFile.AttachNew (new csMemFile (cacheBuf, true)); wrapper.cacheFile = cacheFile; uint32 diskMagic; if (cacheFile->Read ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) continue; if (csLittleEndian::UInt32 (diskMagic) != cacheFileMagic) continue; CS::Utility::Checksum::MD5::Digest diskHash; if (cacheFile->Read ((char*)&diskHash, sizeof (diskHash)) != sizeof (diskHash)) continue; if (diskHash != progHash) continue; cachedProgWrappers.Push (wrapper); } if (cachedProgWrappers.GetSize() == 0) { if (failReason && !*failReason) failReason->AttachNew ( new scfString ("all cached programs failed to read")); return iShaderProgram::loadFail; } cachedProgWrappers.Sort (); ProfileLimits currentLimits ( (programType == progVP) ? shaderPlug->currentLimits.vp : shaderPlug->currentLimits.fp); bool strictMatch = (programType == progVP) ? shaderPlug->strictMatchVP : shaderPlug->strictMatchFP; const char* progTypeNode = 0; switch (programType) { case progVP: progTypeNode = "cgvp"; break; case progFP: progTypeNode = "cgfp"; break; } csString allReasons; bool oneReadCorrectly = false; ProfileLimits bestLimits ( CS::PluginCommon::ShaderProgramPluginGL::Other, CG_PROFILE_UNKNOWN); bool bestLimitsSet = false; for (size_t i = cachedProgWrappers.GetSize(); i-- > 0;) { const CachedShaderWrapper& wrapper = cachedProgWrappers[i]; const ProfileLimits& limits = (programType == progVP) ? wrapper.limits.vp : wrapper.limits.fp; if (!bestLimitsSet) { bestLimits = limits; bestLimitsSet = true; } if (strictMatch && (limits != currentLimits)) { allReasons += wrapper.name; allReasons += ": strict mismatch; "; continue; } bool profileSupported = (shaderPlug->ProfileNeedsRouting (limits.profile) && shaderPlug->IsRoutedProfileSupported (limits.profile)) || cgGLIsProfileSupported (limits.profile); if (!profileSupported) { allReasons += wrapper.name; allReasons += ": Profile unsupported; "; continue; } if ((limits.vendor != currentLimits.vendor) && (limits.vendor != CS::PluginCommon::ShaderProgramPluginGL::Other)) { allReasons += wrapper.name; allReasons += ": vendor mismatch; "; continue; } bool limitsSupported = currentLimits >= limits; if (!limitsSupported) { allReasons += wrapper.name; allReasons += ": Limits exceeded; "; continue; } iFile* cacheFile = wrapper.cacheFile; { uint32 diskState; if (cacheFile->Read ((char*)&diskState, sizeof (diskState)) != sizeof (diskState)) continue; if (csLittleEndian::UInt32 (diskState) != cpsValid) { oneReadCorrectly = true; continue; } } description = CS::PluginCommon::ShaderCacheHelper::ReadString (cacheFile); bool breakFail = false; csRef cgNode = node->GetNode (progTypeNode); if (!cgNode.IsValid()) continue; csRef nodes = cgNode->GetNodes(); while(nodes->HasNext() && !breakFail) { csRef child = nodes->Next(); if(child->GetType() != CS_NODE_ELEMENT) continue; const char* value = child->GetValue (); csStringID id = xmltokens.Request (value); switch(id) { case XMLTOKEN_VARIABLEMAP: if (!ParseVmap (child)) breakFail = true; break; case XMLTOKEN_CLIP: if (!ParseClip (child)) breakFail = true; break; default: /* Ignore unknown nodes. Invalid nodes would have been caught by the first (not from cache) parsing */ break; } } if (breakFail) continue; csString objectCodeCachePathArc = CS::PluginCommon::ShaderCacheHelper::ReadString (cacheFile); if (objectCodeCachePathArc.IsEmpty()) continue; csString objectCodeCachePathItem = CS::PluginCommon::ShaderCacheHelper::ReadString (cacheFile); if (objectCodeCachePathItem.IsEmpty()) continue; ProgramObjectID progId (objectCodeCachePathArc, objectCodeCachePathItem); ProgramObject programObj; //if (!LoadObjectCodeFromCompileCache (limits, cache)) if (!shaderPlug->progCache.LoadObject (progId, programObj)) continue; oneReadCorrectly = true; if (program) { cgDestroyProgram (program); program = 0; } if (!programObj.IsValid()) continue; cgGetError(); // Clear error program = cgCreateProgram (shaderPlug->context, CG_OBJECT, programObj.GetObjectCode(), limits.profile, 0, 0); if (!program) continue; CGerror err = cgGetError(); if (err != CG_NO_ERROR) { const char* errStr = cgGetErrorString (err); shaderPlug->Report (CS_REPORTER_SEVERITY_WARNING, "Cg error %s", errStr); continue; } programProfile = limits.profile; programPositionInvariant = programObj.GetFlags() & ProgramObject::flagPositionInvariant; unusedParams = programObj.GetUnusedParams(); ClipsToVmap(); GetParamsFromVmap(); bool doLoadToGL = !shaderPlug->ProfileNeedsRouting (programProfile); cgGetError(); // Clear error if (doLoadToGL) { cgGLLoadProgram (program); } else { cgCompileProgram (program); } shaderPlug->PrintAnyListing(); err = cgGetError(); if ((err != CG_NO_ERROR) || (doLoadToGL && !cgGLIsProgramLoaded (program))) { //if (shaderPlug->debugDump) //DoDebugDump(); const char* errStr = cgGetErrorString (err); shaderPlug->Report (CS_REPORTER_SEVERITY_WARNING, "Cg error %s", errStr); if (shaderPlug->doVerbose && (((programType == progVP) && (programProfile >= CG_PROFILE_ARBVP1)) || ((programType == progFP) && (programProfile >= CG_PROFILE_ARBFP1)))) { const char* err = (char*)glGetString (GL_PROGRAM_ERROR_STRING_ARB); shaderPlug->Report (CS_REPORTER_SEVERITY_WARNING, "OpenGL error string: %s", err); } shaderPlug->SetCompiledSource (0); continue; } GetPostCompileParamProps (); if (shaderPlug->debugDump) DoDebugDump(); tag->AttachNew (new scfString (wrapper.name)); if (cacheLimits != 0) *cacheLimits = wrapper.limits; bool loaded = !shaderPlug->ProfileNeedsRouting (programProfile) || LoadProgramWithPS1 (); if (loaded && (bestLimits < currentLimits)) { /* The best found program is worse than the current limits, so pretend that the shader program failed (instead just being 'invalid') - that will make xmlshader try to load the program from scratch, ie with current limits, which may just work. */ if (failReason) failReason->AttachNew (new scfString ("Provoking clean load with current limits")); return iShaderProgram::loadFail; } return loaded ? iShaderProgram::loadSuccessShaderValid : iShaderProgram::loadSuccessShaderInvalid; } if (oneReadCorrectly) { if (bestLimits < currentLimits) { /* The 'invalid' programs may compile with the current limits - so again, provoke clean load */ if (failReason) failReason->AttachNew (new scfString ("Provoking clean load with current limits")); return iShaderProgram::loadFail; } else return iShaderProgram::loadSuccessShaderInvalid; } else return iShaderProgram::loadFail; } bool csShaderGLCGCommon::LoadProgramWithPS1 () { pswrap = shaderPlug->psplg->CreateProgram ("fp"); if (!pswrap) return false; const char* objectCode = cgGetProgramString (program, CG_COMPILED_PROGRAM); if (!objectCode || !*objectCode) // Program did not actually compile return false; csArray mappings; for (size_t i = 0; i < variablemap.GetSize (); i++) { // Get the Cg parameter ShaderParameter* sparam = reinterpret_cast (variablemap[i].userVal); // Make sure it's a C-register CGresource resource = cgGetParameterResource (sparam->param); if (resource == CG_C) { // Get the register number, and create a mapping csString regnum; regnum.Format ("c%lu", cgGetParameterResourceIndex (sparam->param)); mappings.Push (csShaderVarMapping (variablemap[i].name, regnum)); } } if (pswrap->Load (0, objectCode, mappings)) { bool ret = pswrap->Compile (0); if (shaderPlug->debugDump) DoDebugDump(); return ret; } else { return false; } } } CS_PLUGIN_NAMESPACE_END(GLShaderCg) crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/Jamfile0000644000175000017500000000073511544131524031706 0ustar devfildevfilSubDir TOP plugins video render3d shader shaderplugins glshader_cg ; Description glshader_cg : "CG shader" ; Plugin glshader_cg : [ Wildcard *.cpp *.h ] : nodefaultfilelist ; Includes glshader_cg.h : $(SUBDIR)/glshader_cg.tok ; Includes combiner_cg.h : $(SUBDIR)/combiner_cg.tok ; MsvcExtraFile glshader_cg : $(SUBDIR)/glshader_cg.tok ; MsvcExtraFile glshader_cg : $(SUBDIR)/combiner_cg.tok ; ExternalLibs glshader_cg : CRYSTAL ; FileListEntryPlugin glshader_cg : plugin-cg ; ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon_params.cppcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcomm0000644000175000017500000004576611774271776033515 0ustar devfildevfil/* Copyright (C) 2002-2005 by Marten Svanfeldt Anders Stenberg 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. */ #include "cssysdef.h" #include "csplugincommon/opengl/glextmanager.h" #include "csplugincommon/opengl/glhelper.h" #include "glshader_cg.h" #include "glshader_cgcommon.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { template void csShaderGLCGCommon::SetParameterValue (const Setter& setter, ShaderParameter* sparam, csShaderVariable* var) { if (sparam == 0) return; CGparameter param = sparam->param; CGtype paramType = sparam->paramType; uint slot = sparam->baseSlot; switch (paramType) { case CG_INT: { int i; if (var->GetValue (i)) setter.Parameter1i (slot, param, i); } break; case CG_FLOAT: { float f; if (var->GetValue (f)) setter.Parameter1f (slot, param, f); } break; case CG_FLOAT2: { csVector2 v; if (var->GetValue (v)) setter.Parameter2fv (slot, param, &v.x); } break; case CG_FLOAT3: { csVector3 v; if (var->GetValue (v)) setter.Parameter3fv (slot, param, &v.x); } break; case CG_FLOAT4: { csVector4 v; if (var->GetValue (v)) setter.Parameter4fv (slot, param, &v.x); } break; case CG_FLOAT3x3: { float matrix[9]; SVtoCgMatrix3x3 (var, matrix); setter.MatrixParameter3x3 (slot, param, matrix); } break; case CG_FLOAT4x4: { float matrix[16]; SVtoCgMatrix4x4 (var, matrix); setter.MatrixParameter4x4 (slot, param, matrix); } break; case CG_ARRAY: { if (var->GetArraySize () == 0) break; size_t numElements = csMin (sparam->arrayItems.GetSize(), var->GetArraySize ()); if (numElements == 0) break; for (size_t idx = 0; idx < numElements; idx++) { csShaderVariable *element = var->GetArrayElement (idx); if (element != 0) SetParameterValue (setter, sparam->arrayItems[idx], element); } } break; default: CS_ASSERT_MSG("Don't support CG param type (yet)", false); } } void csShaderGLCGCommon::SVtoCgMatrix3x3 (csShaderVariable* var, float* matrix) { if (var->GetType () == csShaderVariable::MATRIX) { csMatrix3 m; if (var->GetValue (m)) { CS::PluginCommon::MakeGLMatrix3x3 (m, matrix, true); } } else if (var->GetType () == csShaderVariable::TRANSFORM) { csReversibleTransform t; if (var->GetValue (t)) { CS::PluginCommon::MakeGLMatrix3x3 (t.GetO2T(), matrix, true); } } else if (var->GetType () == csShaderVariable::ARRAY) { if (var->GetArraySize () != 3) return; csVector3 v; for (uint idx = 0; idx < var->GetArraySize (); idx++) { csShaderVariable *element = var->GetArrayElement (idx); if (element != 0 && element->GetValue (v)) { matrix[idx*3+0] = v[0]; matrix[idx*3+1] = v[1]; matrix[idx*3+2] = v[2]; } } } else { CS_ASSERT_MSG("Can't convert all SV contents to FLOAT3x3 (yet)", false); memset (matrix, 0, 9 * sizeof (float)); } } void csShaderGLCGCommon::SVtoCgMatrix4x4 (csShaderVariable* var, float* matrix) { if (var->GetType () == csShaderVariable::MATRIX3X3) { csMatrix3 m; if (var->GetValue (m)) { makeGLMatrix (m, matrix, true); } } else if (var->GetType () == csShaderVariable::TRANSFORM) { csReversibleTransform t; if (var->GetValue (t)) { makeGLMatrix (t, matrix, true); } } else if (var->GetType () == csShaderVariable::ARRAY) { if (var->GetArraySize () != 4) return; csVector4 v; for (uint idx = 0; idx < var->GetArraySize (); idx++) { csShaderVariable *element = var->GetArrayElement (idx); if (element != 0 && element->GetValue (v)) { matrix[idx*4+0] = v[0]; matrix[idx*4+1] = v[1]; matrix[idx*4+2] = v[2]; matrix[idx*4+3] = v[3]; } } } else if (var->GetType () == csShaderVariable::MATRIX4X4) { CS::Math::Matrix4 m; if (var->GetValue (m)) { CS::PluginCommon::MakeGLMatrix4x4 (m, matrix, true); } } else { CS_ASSERT_MSG("Can't convert all SV contents to FLOAT4x4 (yet)", false); memset (matrix, 0, 16 * sizeof (float)); } } template void csShaderGLCGCommon::ApplyVariableMapArray (const Array& array, const ParamSetter& setter, const csShaderVariableStack& stack) { csRef var; for(size_t i = 0; i < array.GetSize (); ++i) { const VariableMapEntry& mapping = array[i]; switch (mapping.mappingParam.name) { case svClipPackedDist0: var = clipPackedDists[0]; break; case svClipPackedDist1: var = clipPackedDists[1]; break; case svClipPlane-0: case svClipPlane-1: case svClipPlane-2: case svClipPlane-3: case svClipPlane-4: case svClipPlane-5: var = clipPlane[svClipPlane-mapping.mappingParam.name]; break; default: var = GetParamSV (stack, mapping.mappingParam); } // If var is null now we have no const nor any passed value, ignore it if (!var.IsValid ()) continue; ShaderParameter* param = reinterpret_cast (mapping.userVal); SetParameterValue (setter, param, var); } } struct SetterCg { void Parameter1i (uint slot, CGparameter param, int v) const { cgSetParameter1i (param, v); } void Parameter1f (uint slot, CGparameter param, float v) const { cgSetParameter1f (param, v); } void Parameter2fv (uint slot, CGparameter param, float* v) const { cgSetParameter2fv (param, v); } void Parameter3fv (uint slot, CGparameter param, float* v) const { cgSetParameter3fv (param, v); } void Parameter4fv (uint slot, CGparameter param, float* v) const { cgSetParameter4fv (param, v); } void MatrixParameter3x3 (uint slot, CGparameter param, float* v) const { cgGLSetMatrixParameterfr (param, v); } void MatrixParameter4x4 (uint slot, CGparameter param, float* v) const { cgGLSetMatrixParameterfr (param, v); } }; template struct SetterARB : public SetterCg { csGLExtensionManager* ext; SetterARB (csGLExtensionManager* ext) : ext (ext) {} void Parameter1i (uint slot, CGparameter param, int v) const { if (slot == (uint)~0) SetterCg::Parameter1i (slot, param, v); else if (GP4Prog) ext->glProgramLocalParameterI4iNV (Target, slot, v, 0, 0, 0); else ext->glProgramLocalParameter4fARB (Target, slot, v, 0, 0, 0); } void Parameter1f (uint slot, CGparameter param, float v) const { if (slot == (uint)~0) SetterCg::Parameter1f (slot, param, v); else ext->glProgramLocalParameter4fARB (Target, slot, v, 0, 0, 0); } void Parameter2fv (uint slot, CGparameter param, float* v) const { if (slot == (uint)~0) SetterCg::Parameter2fv (slot, param, v); else ext->glProgramLocalParameter4fARB (Target, slot, v[0], v[1], 0, 0); } void Parameter3fv (uint slot, CGparameter param, float* v) const { if (slot == (uint)~0) SetterCg::Parameter3fv (slot, param, v); else ext->glProgramLocalParameter4fARB (Target, slot, v[0], v[1], v[2], 0); } void Parameter4fv (uint slot, CGparameter param, float* v) const { if (slot == (uint)~0) SetterCg::Parameter4fv (slot, param, v); else ext->glProgramLocalParameter4fvARB (Target, slot, v); } void MatrixParameter3x3 (uint slot, CGparameter param, float* v) const { if (slot == (uint)~0) SetterCg::MatrixParameter4x4 (slot, param, v); else { float m4x4[16]; m4x4[0] = v[0]; m4x4[1] = v[1]; m4x4[2] = v[2]; m4x4[3] = 0; m4x4[4] = v[3]; m4x4[5] = v[4]; m4x4[6] = v[5]; m4x4[7] = 0; m4x4[8] = v[6]; m4x4[9] = v[7]; m4x4[10] = v[8]; m4x4[11] = 0; m4x4[12] = 0; m4x4[13] = 0; m4x4[14] = 0; m4x4[15] = 1; if (ext->CS_GL_EXT_gpu_program_parameters) ext->glProgramLocalParameters4fvEXT (Target, slot, 4, m4x4); else { for (int i = 0; i < 4; i++) ext->glProgramLocalParameter4fvARB (Target, slot+i, m4x4+i*4); } } } void MatrixParameter4x4 (uint slot, CGparameter param, float* v) const { if (slot == (uint)~0) SetterCg::MatrixParameter4x4 (slot, param, v); else { if (ext->CS_GL_EXT_gpu_program_parameters) ext->glProgramLocalParameters4fvEXT (Target, slot, 4, v); else { for (int i = 0; i < 4; i++) ext->glProgramLocalParameter4fvARB (Target, slot+i, v+i*4); } } } }; void csShaderGLCGCommon::ApplyVariableMapArrays (const csShaderVariableStack& stack) { // set variables if ((programType == progVP) && (programProfile >= CG_PROFILE_ARBVP1)) { if (programProfile >= CG_PROFILE_GPU_VP) { SetterARB setter (shaderPlug->ext); ApplyVariableMapArray (variablemap, setter, stack); } else { SetterARB setter (shaderPlug->ext); ApplyVariableMapArray (variablemap, setter, stack); } } else if ((programType == progFP) && ((programProfile >= CG_PROFILE_ARBFP1) || (programProfile == CG_PROFILE_FP40))) { if (programProfile >= CG_PROFILE_GPU_FP) { SetterARB setter (shaderPlug->ext); ApplyVariableMapArray (variablemap, setter, stack); } else { SetterARB setter (shaderPlug->ext); ApplyVariableMapArray (variablemap, setter, stack); } } else { SetterCg setter; ApplyVariableMapArray (variablemap, setter, stack); } } void csShaderGLCGCommon::SetParameterValueCg (ShaderParameter* sparam, csShaderVariable* var) { SetterCg setter; SetParameterValue (setter, sparam, var); } void csShaderGLCGCommon::ExtractVmapConstants () { size_t i = 0; while (i < variablemap.GetSize ()) { ShaderParameter* sparam = reinterpret_cast (variablemap[i].userVal); bool assumeConst = sparam->assumeConstant; // Put constants into own array if (assumeConst || variablemap[i].mappingParam.IsConstant()) { variablemapConstants.Push (variablemap[i]); variablemap.DeleteIndex (i); continue; } i++; } variablemap.ShrinkBestFit(); variablemapConstants.ShrinkBestFit(); } void csShaderGLCGCommon::FreeShaderParam (ShaderParameter* sparam) { if (sparam == 0) return; for (size_t i = 0; i < sparam->arrayItems.GetSize(); i++) { FreeShaderParam (sparam->arrayItems[i]); } shaderPlug->paramAlloc.Free (sparam); } void csShaderGLCGCommon::FillShaderParam (ShaderParameter* sparam, CGparameter param) { sparam->param = param; sparam->paramType = cgGetParameterType (param); if (sparam->paramType == CG_ARRAY) { size_t arraySize = cgGetArraySize (param, 0); for (size_t i = arraySize; i-- > 0; ) { CGparameter element = cgGetArrayParameter (param, int (i)); ShaderParameter* newsparam = shaderPlug->paramAlloc.Alloc(); FillShaderParam (newsparam, element); sparam->arrayItems.Put (i, newsparam); } } } void csShaderGLCGCommon::GetShaderParamSlot (ShaderParameter* sparam) { if (cgGetParameterType (sparam->param) != CG_ARRAY) { CGresource rsc = cgGetParameterResource (sparam->param); if ((rsc == CG_C) || (rsc == CG_GLSL_UNIFORM)) { sparam->baseSlot = cgGetParameterResourceIndex (sparam->param); } } for (size_t i = 0; i < sparam->arrayItems.GetSize(); i++) { if (sparam->arrayItems[i] != 0) GetShaderParamSlot (sparam->arrayItems[i]); } } void csShaderGLCGCommon::GetParamsFromVmap() { size_t i = 0; while (i < variablemap.GetSize ()) { // Get the Cg parameter CGparameter param = cgGetNamedParameter (program, variablemap[i].destination); ShaderParameter* sparam = reinterpret_cast (variablemap[i].userVal); if (!param /*|| (cgGetParameterType (param) != CG_ARRAY && !cgIsParameterReferenced (param))*/) { variablemap.DeleteIndex (i); FreeShaderParam (sparam); continue; } FillShaderParam (sparam, param); bool assumeConst = sparam->assumeConstant; // Mark constants as to be folded in if (assumeConst || variablemap[i].mappingParam.IsConstant()) { csShaderVariable* var = variablemap[i].mappingParam.var; if (var != 0) SetParameterValueCg (sparam, var); cgSetParameterVariability (param, CG_LITERAL); variablemap.DeleteIndex (i); FreeShaderParam (sparam); continue; } i++; } variablemap.ShrinkBestFit(); } void csShaderGLCGCommon::GetParamsFromVmapConstants() { size_t i = 0; while (i < variablemapConstants.GetSize ()) { // Get the Cg parameter CGparameter param = cgGetNamedParameter (program, variablemapConstants[i].destination); ShaderParameter* sparam = reinterpret_cast (variablemapConstants[i].userVal); if (!param) { variablemapConstants.DeleteIndex (i); FreeShaderParam (sparam); continue; } FillShaderParam (sparam, param); csShaderVariable* var = variablemapConstants[i].mappingParam.var; if (var != 0) SetParameterValueCg (sparam, var); cgSetParameterVariability (param, CG_LITERAL); i++; } variablemapConstants.ShrinkBestFit(); } void csShaderGLCGCommon::GetPostCompileParamProps () { for(size_t i = 0; i < variablemap.GetSize (); ) { VariableMapEntry& mapping = variablemap[i]; ShaderParameter* sparam = reinterpret_cast (mapping.userVal); if (!GetPostCompileParamProps (sparam)) { variablemap.DeleteIndex (i); FreeShaderParam (sparam); continue; } GetShaderParamSlot (sparam); ++i; } } bool csShaderGLCGCommon::GetPostCompileParamProps (ShaderParameter* sparam) { CGparameter param = sparam->param; if (sparam->paramType == CG_ARRAY) { bool ret = false; for (size_t i = sparam->arrayItems.GetSize(); i-- > 0; ) { if (!GetPostCompileParamProps (sparam->arrayItems[i])) { if (i == sparam->arrayItems.GetSize()-1) sparam->arrayItems.Truncate (i); else { FreeShaderParam (sparam->arrayItems[i]); sparam->arrayItems[i] = 0; } } else { ret |= true; } } if (ret) sparam->arrayItems.ShrinkBestFit(); return ret; } else return cgIsParameterReferenced (param) != 0; } static csString GetParamUnusedMacroName (const char* cgName) { csString param (cgName); for (size_t j = 0; j < param.Length(); j++) { if ((param[j] == '.') || (param[j] == '[') || (param[j] == ']')) param[j] = '_'; } csString s; s.Format ("PARAM_%s_UNUSED", param.GetData()); return s; } namespace { struct CgParamUsage { CGparameter param; bool used; csString macroName; }; } void csShaderGLCGCommon::CollectUnusedParameters (csSet& unusedParams, const csStringArray& unusedCandidates) { csArray unusedCgParams; csSet sharedResources; CGparameter cgParam = cgGetFirstLeafParameter (program, CG_PROGRAM); while (cgParam) { const char* paramName = cgGetParameterName (cgParam); // Cg seems to emit internal-ish globals with $ in the name, ignore these if (strchr (paramName, '$') == 0) { CgParamUsage usage; usage.param = cgParam; usage.macroName = GetParamUnusedMacroName (paramName); CGresource paramRes = cgGetParameterResource (cgParam); /* At least Cg 2.1.0.12 evidently has a cool feature where it packs vertexToFragment data automatically (e.g. you have 9 V2F fields, one of them is a float2, the other a simple float -> these two are packed into one field). However, the field that is packed into another field is incorrectly marked as unused. The only hint to it being actually used in the compiled program is that the resource is not UNDEFINED and that a parameter using the same resource was not unused. So if we come across a parameter that is reported unused, but its resource was found used earlier, we also assume that parameter to be used. */ if (!cgIsParameterUsed (cgParam, program)) { usage.used = false; /* The 'main' shared resource user may only appear later, so postpone parameter checking */ } else { usage.used = true; if (paramRes != CG_UNDEFINED) sharedResources.Add (paramRes); } unusedCgParams.Push (usage); } cgParam = cgGetNextLeafParameter (cgParam); } // Now scan global parameters for unused values cgParam = cgGetFirstLeafParameter (program, CG_GLOBAL); while (cgParam) { const char* paramName = cgGetParameterName (cgParam); // Cg seems to emit internal-ish globals with $ in the name, ignore these if (strchr (paramName, '$') == 0) { CgParamUsage usage; usage.param = cgParam; usage.macroName = GetParamUnusedMacroName (paramName); CGresource paramRes = cgGetParameterResource (cgParam); if (!cgIsParameterUsed (cgParam, program)) { usage.used = false; /* The 'main' shared resource user may only appear later, so postpone parameter checking */ } else { usage.used = true; if (paramRes != CG_UNDEFINED) sharedResources.Add (paramRes); } unusedCgParams.Push (usage); } cgParam = cgGetNextLeafParameter (cgParam); } csSet seenParams; for (size_t p = 0; p < unusedCgParams.GetSize(); p++) { const CgParamUsage& param = unusedCgParams[p]; CGresource paramRes = cgGetParameterResource (param.param); if (!param.used && !sharedResources.Contains (paramRes)) { unusedParams.Add (param.macroName); } seenParams.Add (param.macroName); } /* Check list of given unused candidates. If we have a candidate, but it doesn't appear among the enumerated parameters, consider it unused. */ csStringArray::ConstIterator candidatesIterator (unusedCandidates.GetIterator()); while (candidatesIterator.HasNext()) { const csString& candidate = candidatesIterator.Next (); if (!seenParams.Contains (candidate)) { unusedParams.Add (candidate); } } } } CS_PLUGIN_NAMESPACE_END(GLShaderCg) ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgvp.cppcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgvp.c0000644000175000017500000001216711774271776033415 0ustar devfildevfil/* Copyright (C) 2002 by Marten Svanfeldt Anders Stenberg 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. */ #include "cssysdef.h" #include "csgeom/vector3.h" #include "csplugincommon/opengl/glextmanager.h" #include "csutil/objreg.h" #include "csutil/ref.h" #include "csutil/scanstr.h" #include "csutil/scf.h" #include "csutil/scfstr.h" #include "csutil/stringreader.h" #include "iutil/document.h" #include "iutil/string.h" #include "ivaria/reporter.h" #include "ivideo/graph3d.h" #include "ivideo/shader/shader.h" #include "iutil/databuff.h" #include "glshader_cgvp.h" #include "glshader_cgfp.h" #include "glshader_cg.h" #include "profile_limits.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { CS_LEAKGUARD_IMPLEMENT (csShaderGLCGVP); bool csShaderGLCGVP::Compile (iHierarchicalCache* cache, csRef* tag) { if (!shaderPlug->enableVP) return false; csRef programBuffer = GetProgramData(); if (!programBuffer.IsValid()) return false; csString programStr; programStr.Append ((char*)programBuffer->GetData(), programBuffer->GetSize()); bool ret = DefaultLoadProgram (cgResolve, programStr, progVP, shaderPlug->currentLimits); csString tagStr (csString("CG") + shaderPlug->currentLimits.ToString()); WriteToCache (cache, shaderPlug->currentLimits.vp, shaderPlug->currentLimits, tagStr); tag->AttachNew (new scfString (tagStr)); cacheKeepNodes.DeleteAll (); return ret; } bool csShaderGLCGVP::Precache (const ProfileLimitsPair& limits, const char* tag, iHierarchicalCache* cache) { PrecacheClear(); csRef programBuffer = GetProgramData(); if (!programBuffer.IsValid()) return false; csString programStr; programStr.Append ((char*)programBuffer->GetData(), programBuffer->GetSize()); ProgramObject programObj; bool needBuild = true; csString sourcePreproc; { csString programStr; programStr.Append ((char*)programBuffer->GetData(), programBuffer->GetSize()); // Get preprocessed result of pristine source sourcePreproc = GetAugmentedProgram (programStr); if (!sourcePreproc.IsEmpty ()) { // Check preprocessed source against cache if (shaderPlug->progCache.SearchObject (sourcePreproc, limits.fp, programObj)) needBuild = false; } } bool ret; if (needBuild) { ret = DefaultLoadProgram (cgResolve, programStr, progVP, limits, loadApplyVmap | loadFlagUnusedV2FForInit); WriteToCache (cache, limits.vp, limits, csString("CG") + tag); } else { ret = true; unusedParams = programObj.GetUnusedParams(); WriteToCache (cache, limits.fp, limits, csString("CG") + tag, programObj); } return ret; } iShaderProgram::CacheLoadResult csShaderGLCGVP::LoadFromCache ( iHierarchicalCache* cache, iBase* previous, iDocumentNode* programNode, csRef* failReason, csRef* tag) { if (!shaderPlug->enableVP) { if (failReason) failReason->AttachNew (new scfString ("Cg VP not available or disabled")); /* Claim a load success, but invalid shader, to prevent loading from scratch (which will fail anyway) */ return loadSuccessShaderInvalid; } return csShaderGLCGCommon::LoadFromCache (cache, previous, programNode, failReason, tag, 0); } csVertexAttrib csShaderGLCGVP::ResolveBufferDestination (const char* binding) { csVertexAttrib dest = CS_VATTRIB_INVALID; if (program) { CGparameter parameter = cgGetNamedParameter (program, binding); if (parameter) { CGresource base = cgGetParameterBaseResource (parameter); int index = cgGetParameterResourceIndex (parameter); switch (base) { case CG_UNDEFINED: return CS_VATTRIB_UNUSED; case CG_TEX0: case CG_TEXUNIT0: case CG_TEXCOORD0: if ((index >= 0) && (index < 8)) dest = (csVertexAttrib)(CS_VATTRIB_TEXCOORD0 + index); break; case CG_ATTR0: if ((index >= 0) && (index < 16)) dest = (csVertexAttrib)(CS_VATTRIB_0 + index); break; case CG_COL0: case CG_COLOR0: if ((index >= 0) && (index < 2)) dest = (csVertexAttrib)(CS_VATTRIB_PRIMARY_COLOR + index); break; case CG_HPOS: case CG_POSITION0: dest = CS_VATTRIB_POSITION; break; case CG_BLENDWEIGHT0: dest = CS_VATTRIB_WEIGHT; break; case CG_NORMAL0: dest = CS_VATTRIB_NORMAL; break; case CG_FOG0: dest = CS_VATTRIB_FOGCOORD; break; default: break; } } } return dest; } } CS_PLUGIN_NAMESPACE_END(GLShaderCg) ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgfp.cppcrystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgfp.c0000644000175000017500000001521711774271776033374 0ustar devfildevfil/* Copyright (C) 2002 by Marten Svanfeldt Anders Stenberg 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. */ #include "cssysdef.h" #include "csgeom/vector3.h" #include "csutil/objreg.h" #include "csutil/ref.h" #include "csutil/scf.h" #include "csutil/scfstr.h" #include "csutil/stringreader.h" #include "iutil/databuff.h" #include "iutil/document.h" #include "iutil/hiercache.h" #include "iutil/string.h" #include "ivaria/reporter.h" #include "ivideo/graph3d.h" #include "ivideo/shader/shader.h" #include "glshader_cgfp.h" #include "profile_limits.h" CS_PLUGIN_NAMESPACE_BEGIN(GLShaderCg) { CS_LEAKGUARD_IMPLEMENT (csShaderGLCGFP); void csShaderGLCGFP::Activate() { if (pswrap) { pswrap->Activate (); return; } csShaderGLCGCommon::Activate(); } void csShaderGLCGFP::Deactivate() { if (pswrap) { pswrap->Deactivate (); return; } csShaderGLCGCommon::Deactivate(); } void csShaderGLCGFP::SetupState (const CS::Graphics::RenderMesh* mesh, CS::Graphics::RenderMeshModes& modes, const csShaderVariableStack& stack) { if (pswrap) { pswrap->SetupState (mesh, modes, stack); return; } csShaderGLCGCommon::SetupState (mesh, modes, stack); } void csShaderGLCGFP::ResetState() { if (pswrap) { pswrap->ResetState (); return; } csShaderGLCGCommon::ResetState(); } bool csShaderGLCGFP::Compile (iHierarchicalCache* cache, csRef* tag) { if (!shaderPlug->enableFP) return false; // See if we want to wrap through the PS plugin if (shaderPlug->ProfileNeedsRouting (shaderPlug->currentLimits.fp.profile) && shaderPlug->psplg) { bool ret = TryCompile (loadApplyVmap, shaderPlug->currentLimits); csString tagStr (csString("CG") + shaderPlug->currentLimits.ToString()); WriteToCache (cache, shaderPlug->currentLimits.fp, shaderPlug->currentLimits, tagStr); cacheKeepNodes.DeleteAll (); tag->AttachNew (new scfString (tagStr)); if (!ret) return false; return LoadProgramWithPS1 (); } else { bool ret = TryCompile (loadLoadToGL | loadApplyVmap, shaderPlug->currentLimits); csString tagStr (csString("CG") + shaderPlug->currentLimits.ToString()); WriteToCache (cache, shaderPlug->currentLimits.fp, shaderPlug->currentLimits, tagStr); cacheKeepNodes.DeleteAll (); tag->AttachNew (new scfString (tagStr)); return ret; } } bool csShaderGLCGFP::Precache (const ProfileLimitsPair& limits, const char* tag, iHierarchicalCache* cache) { PrecacheClear(); ProgramObject programObj; bool needBuild = true; csString sourcePreproc; { csRef programBuffer = GetProgramData(); if (!programBuffer.IsValid()) return false; csString programStr; programStr.Append ((char*)programBuffer->GetData(), programBuffer->GetSize()); // Get preprocessed result of pristine source sourcePreproc = GetAugmentedProgram (programStr); if (!sourcePreproc.IsEmpty ()) { // Check preprocessed source against cache //if (TryLoadFromCompileCache (sourcePreproc, limits.fp, cache)) if (shaderPlug->progCache.SearchObject (sourcePreproc, limits.fp, programObj)) needBuild = false; } } bool ret; if (needBuild) { ret = TryCompile (loadApplyVmap, limits); WriteToCache (cache, limits.fp, limits, csString("CG") + tag); } else { ret = true; unusedParams = programObj.GetUnusedParams(); WriteToCache (cache, limits.fp, limits, csString("CG") + tag, programObj); } return ret; } iShaderProgram::CacheLoadResult csShaderGLCGFP::LoadFromCache ( iHierarchicalCache* cache, iBase* previous, iDocumentNode* programNode, csRef* failReason, csRef* tag) { if (!shaderPlug->enableFP) { if (failReason) failReason->AttachNew (new scfString ("Cg FP not available or disabled")); /* Claim a load success, but invalid shader, to prevent loading from scratch (which will fail anyway) */ return loadSuccessShaderInvalid; } return csShaderGLCGCommon::LoadFromCache (cache, previous, programNode, failReason, tag, &cacheLimits); } bool csShaderGLCGFP::TryCompile (uint loadFlags, const ProfileLimitsPair& limits) { csRef programBuffer = GetProgramData(); if (!programBuffer.IsValid()) return false; csString programStr; programStr.Append ((char*)programBuffer->GetData(), programBuffer->GetSize()); csStringArray testForUnused; csStringReader lines (programStr); while (lines.HasMoreLines()) { csString line; lines.GetLine (line); if (line.StartsWith ("//@@UNUSED? ")) { line.DeleteAt (0, 12); testForUnused.Push (line); } } if (testForUnused.GetSize() > 0) { testForUnused.Push ("PARAM__clip_out_packed_distances1_UNUSED"); testForUnused.Push ("PARAM__clip_out_packed_distances2_UNUSED"); } unusedParams.DeleteAll(); if (!DefaultLoadProgram (0, programStr, progFP, limits, (loadFlags & (~loadApplyVmap)) | loadFlagUnusedV2FForInit)) return false; /* Compile twice to be able to filter out unused vertex2fragment stuff on * pass 2. * @@@ FIXME: two passes are not always needed. */ CollectUnusedParameters (unusedParams, testForUnused); bool ret = DefaultLoadProgram (this, programStr, progFP, limits, loadFlags | loadFlagUnusedV2FForInit); return ret; } int csShaderGLCGFP::ResolveTU (const char* binding) { int newTU = -1; if (program) { CGparameter parameter = cgGetNamedParameter (program, binding); if (parameter) { CGresource baseRes = cgGetParameterBaseResource (parameter); if (((baseRes == CG_TEXUNIT0) || (baseRes == CG_TEX0)) && (cgIsParameterUsed (parameter, program) || cgIsParameterReferenced (parameter))) { newTU = cgGetParameterResourceIndex (parameter); } } } return newTU; } } CS_PLUGIN_NAMESPACE_END(GLShaderCg) crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/shaderplugins/Jamfile0000644000175000017500000000020311544131074027432 0ustar devfildevfilSubDir TOP plugins video render3d shader shaderplugins ; SubInclude TOP plugins video render3d shader shaderplugins glshader_cg ; crystalspace-glshader-cg-2.0/plugins/video/render3d/shader/Jamfile0000644000175000017500000000015111544131050024556 0ustar devfildevfilSubDir TOP plugins video render3d shader ; SubInclude TOP plugins video render3d shader shaderplugins ; crystalspace-glshader-cg-2.0/plugins/video/Jamfile0000644000175000017500000000010411544131013021577 0ustar devfildevfilSubDir TOP plugins video ; SubInclude TOP plugins video render3d ; crystalspace-glshader-cg-2.0/Jamfile.in0000644000175000017500000000721611544132763017445 0ustar devfildevfilTOP ?= "@CS_TOP_SRCDIR@" ; BUILDTOP ?= "@CS_TOP_BUILDDIR@" ; SubDir TOP ; IncludeDir ; IncludeDir plugins ; IncludeDir $(BUILDTOP) : : literal transient ; CleanDir clean : out ; Clean distclean : aclocal.m4 config.h config.h.in~ config.log config.status config.status.lineno config.cache configure.lineno Jamconfig Jamfile ; CleanDir distclean : autom4te.cache ; Depends distclean : clean ; Clean maintainerclean : config.h.in configure ; Depends maintainerclean : distclean ; Help distclean : "Remove built targets and configuration" ; Help maintainerclean : "Remove built targets, configuration, and generated files." ; # Set up subdirectories into which the different generated project for # different go. MsvcGenSubDir TOP msvc : common ; MsvcGenSubDir TOP msvc 7 : 7 ; MsvcGenSubDir TOP msvc 71 : 71 ; MsvcGenSubDir TOP msvc 8 : 8 ; MsvcGenSubDir TOP msvc 9 : 9 ; MsvcGenTemplateDir TOP mk msvcgen ; # Customize the build configurations to contain some defines required by # CrystalSpace. NOTE: The file with the customization options is assumed # to reside in mk/msvcgen/. MsvcGenVariable customize : custom.cslib ; # Set up the workspace we want msvcgen to synthesize. MsvcGenWorkspace crystalspace-glshader-cg ; local hash = "\$" ; MsvcGenConfig CRYSTAL.AVAILABLE : yes ; MsvcGenConfig CRYSTAL.DEFINES ; MsvcGenConfig CRYSTAL.CFLAGS ; MsvcGenConfig CRYSTAL.LFLAGS ; MsvcGenConfig CRYSTAL.LIBS : "libcrystalspace.lib" ; MsvcGenConfig CRYSTAL.LIBS.DEBUG : "libcrystalspace_d.lib" ; MsvcGenConfig CRYSTAL.INCDIRS : [ ConcatDirs .. .. .. CS include ] [ ConcatDirs .. .. .. CS win32libs include ] [ ConcatDirs "$(hash)(CRYSTAL)" include ] [ ConcatDirs "$(hash)(CRYSTAL)" win32libs include ] ; MsvcGenConfig CRYSTAL.LIBDIRS : [ ConcatDirs .. .. .. CS out release$(MSVC_VERSION) libs ] [ ConcatDirs .. .. .. CS win32libs lib ] [ ConcatDirs "$(hash)(CRYSTAL)" out release$(MSVC_VERSION) libs ] [ ConcatDirs "$(hash)(CRYSTAL)" win32libs lib ] ; MsvcGenConfig CRYSTAL.LIBDIRS.DEBUG : [ ConcatDirs .. .. .. CS out debug$(MSVC_VERSION) libs ] [ ConcatDirs .. .. .. CS win32libs lib ] [ ConcatDirs "$(hash)(CRYSTAL)" out debug$(MSVC_VERSION) libs ] [ ConcatDirs "$(hash)(CRYSTAL)" win32libs lib ] ; if $(CEL.DESIRED) = yes { MsvcGenConfig CEL.AVAILABLE : yes ; MsvcGenConfig CEL.DEFINES : USE_CEL ; MsvcGenConfig CEL.CFLAGS ; MsvcGenConfig CEL.LFLAGS ; MsvcGenConfig CEL.LIBS : "libceltool.lib" ; MsvcGenConfig CEL.LIBS.DEBUG : "libceltool_d.lib" ; MsvcGenConfig CEL.INCDIRS : [ ConcatDirs .. .. .. cel include ] [ ConcatDirs "$(hash)(CEL)" include ] [ ConcatDirs "$(hash)(CEL)" include cel ] ; MsvcGenConfig CEL.LIBDIRS : [ ConcatDirs .. .. .. cel out release$(MSVC_VERSION) libs ] [ ConcatDirs "$(hash)(CEL)" out release$(MSVC_VERSION) libs ] [ ConcatDirs "$(hash)(CEL)" libs ] ; MsvcGenConfig CEL.LIBDIRS.DEBUG : [ ConcatDirs .. .. .. cel out debug$(MSVC_VERSION) libs ] [ ConcatDirs "$(hash)(CEL)" out debug$(MSVC_VERSION) libs ] [ ConcatDirs "$(hash)(CEL)" libs ] ; } # Set project-specific compiler and linker options for msvcgen. #MsvcDefine MY_DEFINE : "my value" ; #MsvcDefine MY_RELEASE_DEFINE : "my release value" : release ; #MsvcDefine MY_DEBUG_DEFINE : "my debug value" : debug ; #MsvcCFlags : "/I \"my\\inc\\path\"" : release ; #MsvcCFlags : "/I \"my\\debuginc\\path\"" : debug ; #MsvcLFlags : "/libpath:\"my\\lib\\path\"" : release ; #MsvcLFlags : "/libpath:\"my\\debuglib\\path\"" : debug ; #MsvcGenConfig SUPERCOOL.AVAILABLE : yes ; #MsvcGenConfig SUPERCOOL.LIBS : supercool.lib ; #MsvcGenConfig SUPERCOOL.LIBS.DEBUG : supercooldebug.lib ; SubInclude TOP plugins ; crystalspace-glshader-cg-2.0/README0000644000175000017500000000411211544132321016404 0ustar devfildevfilSupport of Cg shaders for the Crystal Space engine http://www.crystalspace3d.org/ By http://www.crystalspace3d.org/ <> LGPL XXX WARNING: This is a sample README file it seems that the author of the XXX project has not yet modified it. You will only find generic XXX information here. Contents 1. Introduction 2. Building and Installing 3. Usage 4. Contact ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Introduction XXX Fill in some text ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2. Building and installing You can build the project on Unix, Msys/Mingw, and Cygwin using the Jam build tool. Microsoft Visual-C++ users can build the project using the project files in the crystalspace-glshader-cg/msvc directory. 2.1 Jam The build system is based upon Jam rather than 'make'. If you do not yet have jam installed, then check your distribution for a Jam package or download the source and compile/install Jam yourself. You can find the source here: ftp://ftp.perforce.com/pub/jam/ You will need at least version 2.4. 2.1.1 Building 1. Go to the top-level directory in the project tree. 2. Run "./configure", possibly with some options, if you wish. You can see a list of available options by invoking configure with the "--help" option. 3. Run "jam". 2.1.2 Installing 1. Build the project. 2. Ensure that you have write permissions to the install directories. On Unix (GNU/Linux, MacOS/X, Darwin, BSD) this usually means that you need to be the 'root' user. 3. Run "jam install". 2.2 Microsoft Visual-C++ 1. Open the workspace file crystalspace-glshader-cg/msvc/wkscrystalspace-glshader-cg. 2. Set "grpall_crystalspace-glshader-cg" as the active project. 3. Choose "Release" or "Debug" build mode. 4. Build the project. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3. Usage ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4. Contact Bug-Reports, suggestions, requests, and greeting cards should be send to